pax_global_header00006660000000000000000000000064132561700700014513gustar00rootroot0000000000000052 comment=e0ee40a1d8c271644d15b164031c65b2cf20ac6f Printrun-printrun-2.0.0rc5/000077500000000000000000000000001325617007000156245ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/.gitignore000066400000000000000000000002361325617007000176150ustar00rootroot00000000000000*.pyc .pronsolerc *.swp *.bak uploads .DS_Store .vagrant prontserve-env printrun/gcoder_line.c printrun/gcoder_line*.so .project .pydevproject /build/ /venv/ Printrun-printrun-2.0.0rc5/COPYING000066400000000000000000001045131325617007000166630ustar00rootroot00000000000000 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 . Printrun-printrun-2.0.0rc5/NEWS.md000066400000000000000000000105071325617007000167250ustar00rootroot00000000000000Printrun - 2.0.0rc5 ==================== Pre-release for testing purposes. ### New Features - Slic3r integration works with Slic3r PE (959e03e) - Disable extrude and retract while printing (284f793, c772209) - Add disable autoscroll option (4df9d58) ### Fixed Bugs - sys.frozen problem with installed Printrun (#920) - Button dragging (#690) - Repetier M20 (#848) - Crash on startup with tabbed mode enabled (979df4a) - Absurd 3D viewer viewport rotation control (#622) - STL parser and GCODE plater export Python 3 problems (f8aeafd, 2ea0835) Printrun - 2.0.0rc4 ==================== Pre-release for testing purposes. ### New Features - Support for the T? command (#888) - Have slic3r as default slicing option (#904) ### Fixed Bugs - Segmentation fault (#909) - Button text incorrectly changing (#903) - Dialogs resized (#905, #915) - Macro duplicates (#907) - Ok messages with Repetire firmware (#917) - Messages printed twice in terminal (#916) - Prevent race condition on exit (42d7cd0, 16ee30b) - Object has no attribute 'slic3r_configs' (#865) Printrun - 2.0.0rc3 ==================== Pre-release for testing purposes. ### Fixed Bugs - Couple of wxPython 4 incompatibilities (116fdda, eb6bd43) - Couple of GTK3 visibility problems (#899, f265256, 9193014) - Added spoolmanager to installed modules (#896) - Setlocale issues on Windows (bf53af9) - Installation on macOS and Windows (#901) - Macro-related functionality (95877a4) - Clicking +Zт‡‘ and -Zт‡“ (#910) - Python 3 incompatibilities (#912) - Segmentation fault (#895) Printrun - 2.0.0rc2 ==================== Pre-release for testing purposes. ### Fixed Bugs - Fix SyntaxError at startup (497179c) Printrun - 2.0.0rc1 ==================== Pre-release for testing purpouses. ### New Features - Support the XDG Directory Specification (#866) * New dependency: appdirs - Port to wxPython 4 (#886) - Port to Python 3 (#887) - Disable tabbed mode (8590f33) ### Fixed Bugs - Pronsole depending on the wx module (#867) - Error at loading non-existent configuration files (#890) Printrun - 1.6.0 ================ New Features ------------ - Fan power graph (ace6637) - Improved help messages for main scripts (#727) - Flow rate slider (#693) - AR translation from @aboobed (#680) - Report length of filament used by multiple extruders (de635f1) - Support for custom baudrates on Linux (#712) - Filter gcode or model files only (#753) - Progress update on printer screen (#794) - Additional RPC functions (#759) - Spool manager (#827) - OOP based event handler (#831) Fixed Bugs ---------- - Unwanted exit while printing (#595) - Failing at setting power settings on OSX (#619) - Silent cython failure (#641, #642) - Jitter on remote connections (#698) - Error at displaying the percentage done through RPC (#707) - Error at calculating total filament used (#731) - Connect function crashing (#732) - Unintended gcode files being loaded by default (#753) - Missing dependency on Ubuntu/Debian (#763) - Run on X11 instead of Wayland (#785 and #789) - Missing Slic3r integration notes (#779) - Too generic MIME types listed (#796) - Pronsole spamming "wait" and "OK o" messages (#813) - Plugins not being installed by setup.py (#834) - Compatibility with Slic3r (alexrj/Slic3r#3813) printrun-20140406 ================= New features ------------ - New 3D visualization - New GCode plater - Updated "standard" controls - New "mini" controls mode - New print speed control slider in Pronterface - New plater features: * STL cutter * STL rebase - G-Code injection at beginning of layer and edition of entire G-Code - The G-Code modified using the injector or layer editor can be saved - Controls and log pane can be folded to leave more space for visualization - Added a lighter GCode parser for non-graphical interfaces - Window size and configuration is now saved across runs - Power management: Printrun now runs on high priority during prints and should inhibit sleep modes - New host commands, `run_script` and `run_gcode_script` to run custom scripts during prints. The output of the script ran by `run_gcode_script` will in turn be processed as G-Code or host commands - 3D viewer colors are now configurable Bugs fixed ---------- - Many fixes around custom buttons - Much more :) [Printrun - UNRELEASED]: https://github.com/kliment/Printrun/compare/printrun-20150310...HEAD Printrun-printrun-2.0.0rc5/P-face.icns000066400000000000000000001503161325617007000176030ustar00rootroot00000000000000icnsаЮis32йочяђђ№юьъчфрнкинш№ђёэшх€фтпнлйцяёюцпкййкмонйдзыяэуки зиийдПРьэуƒи кзксбЎЂыхъѕи зђ№ѓїњД‡чсхѓи€зжѕјйдєсvуриемѓєёзіщдзоѓrпоижй€о жішезоя]млоци€з жііигїЪ8дгщќй€ижєїђљ№g0РЛЭкиззйеѕхйи~,6ЙžЄРе€й7зїъЩ9pZӘ{†ІСЯегмКs=3ƒбБ}\Yix~x`D335^ЗзЭЈsI7764247=mКеD *h˜ЊЋЁ”†xfQ<')kЂАЇŒo\UTTI4# `™Њ–b0 -( ‚œŽO …ŠN €{: |\wО  ЏЖЯн*g?\АТв ЁПN8 "ЕКЈХs/ф7* /0.Шo1т.^УШЃЕ r№  ЛЫЕЯЯ  Цj:€ ЩtQh<c€€€‚ D3oœЎЎЅ™Œ~mYE02qІДЋ‘vc\\[Q=,!gžЎ›i:!)72ˆ “W  ‹V€{ "D‚c}С ГЂЙбп/nHcД ФдІРVA+ИНЌ Шv 5х@4897Ыr 7т( 8e ЦЫЈЕxёОЭИбб!%ШkC  €Ы{S!  nB e  € €  s8mk8ЄфќќфЄ8–ўџџџџџџў–НџќќўџџўќќџН•џљџџџџџџџџљџ•;ћўџџџџџџџџџџўћ;ЁџќџџџџџџџџџџќџЁрџўџџџџџџџџџџўџрњџџџџџџџџџџџџџџњњџџџџџџџџџџџџџџњрџўџџџџџџџџџџўџрЁџќџџџџџџџџџџќџЁ;ћўџџџџџџџџџџўћ;•џљџџџџџџџџљџ•НџќќўџџўќќџН–ўџџџџџџў–8ЄфќќфЄ8il32 З&иикнсцыю№ёђђё№яюэьыъшцхусрнлкйиийкнтшьяђё№юэьыъщшчцфусронлкиикнушэ№€ђё№юэыщш€чццхутрпомлкйинтшэ№€ђ4№юыщцфутссттуутспнмлккйисчь№ёђёяьщфсомлккллмноппомлки€й хъю№ё№юъхрнкй„ийклннмкзаЯгжшья№яэщуолйˆийкллйбЦСФЬъэяяэщунк‹и йккиЭПЕЕОы€эщфпкˆиз€изжззЬКЌЇЎыььъцоиз‡ийлйзжмсрйШИІšžъыъчсфђтз„ийеъџцйѕ€џќуЕЂ’щщшфпљџњй„ийеъџяјўюыѕўџоœ‹шшцтмїџљйи„йещџџїкеежщџџДvцхфсйньпззƒейещџўое€йдёџйylффтокзеззнэ€ьэъйещџіз€ийетџэz`ттсойиййжт‚џћкещџєжи жмџјyUсрпнйий‚нмйещџѕжи жлџѕoKппомй‚иƒзйещџѕз€ийерџф[Bммнлйжзж…ийещџќлж€йгюџОE:к€лзчњщз„ийещџџѓи€ецџ§{:7изйккљџћкзƒийещџљћќэыѕўџАF86бЬажжёџє…ийещџѓољ€џіЖ\<67ШРРЧЮерйз„ийещџѕезопгЌrG767ФЗБЖПЪЯез„ийещџєжидЪД‰S824<УВЅЃЊИХЯдзƒийещџєжеЭЙ“\<+^HBХБŸ••ž­ОЪвжзиgйещџєбЩД^<0FзLZЩЖŸŽ……žАПЪбезййкжчџяМІ‚V:7.ЕђU~ЯПЇ~uu|‰™ЈЕПЦЪЬЫШТЙІˆhG7669GKsЂгШД›‚pebfo{†–š›™’‡vaK:5€659cšМжаУ­’xcVOOSY_bdc_WMB955€64>e•ИЬзеЮПЉs\J?::<==;9755656Fl˜ЗЫдизгЬПЊv]H:66€5„67=SxžКЬди 'Cb~’ ЇЉЈІЁ›•ކvlbXLA6)  *HjˆЈ­ЎЌІŸ—ˆ|voh_VKA8.$ )JoŽЂЌЏЎЈŸ”ˆ}unifca^XPE;2*# %EmЁЋ­ЋЂ”ƒqbUKEBBDGJJG@5*  .>d‡ЇЊІ›‡nT>-! (0670$ X|•ЂЅЂ”zZ;$ € %&m‰šŸœsN- †   {Ž—–ŒsL) †  ‚€ŒŠvT/ †  †…x^,…!B=z~xi* Gџ§џўџхqџЛ  :џю<;5%+€)*& pџМ  <џщ00-  ƒ pџП  ^џЪ#$$ƒ  rџэ Аџfфt ƒ sџџВ pџї0 лџш‚ rџлщщ€Оўџr ЉџЗ„ pџГ.иџ§џкW€Dƒ pџН-D2 „ pџЛ €€€ … oџЛ 9… qџМ Э€ƒ iџАЁђ ‚€€ € €€ƒ„ €ˆ„ƒŽ€1Khƒ—ЄЋ­­ЊЅ ™“Œ„|si_TJ?3& 3PqЁЌБВЏЊЃ›”‡|vof]SJA8.$3Sv“ІАГВЌЃ™ƒ{upmjhe_XNC;3-' /Ms’ЅЏБЏЇ™‰xi\SMJJLOQRPH>3*%!.FkЁЋЎЊŸŒt\F6+# $*2:?@9."_šІЉІ™aD-€  (/0)€ tЃЁ”zV7"†$#€“››‘yT2†…‘”|[8 †   €„‹‹e6 …# ,JF €ƒ~oEWЌN ƒ~џhТџўџы~ yzr\;зџс‚џŸвљ†Т§џ• poeO+ЫџиƒxџџЭ zџџJ fcYD4Š9 ‚[yџњ7ГџЇ \YO: 0‰Š‰|wџЪ `џе QOF4Oџ§џўџцwџОCџяED>.4€340vџПDџщ996*‚  vџСcџЫ-..' ƒxџю$Гџ’ !!$$lхz ƒyџџЖvџј3мџщ‚xџмъъ’…Сўџu€ ­џК„vџЕ7лџ§џл\ MƒvџС7M;€„vџО   €†vџО: „wџП Ю ‚pџГ Ђђ   €    €   ƒ   €„  Ž  Œ l8mkbІж№§§№жІb)›эџўџџџџџџўџэ›) Œњџџ§ќўўџџўўќ§џџњŒ 'бџ§ћўџџџџџџџџџџўћ§џб'6ъџњўџџџџџџџџџџџџџџўњџъ6)щџћџџџџџџџџџџџџџџџџџџћџщ) ЮџћџџџџџџџџџџџџџџџџџџџџћџЮ ŒџћџџџџџџџџџџџџџџџџџџџџџџћџŒ-љџўџџџџџџџџџџџџџџџџџџџџџџўџљ-™џћџџџџџџџџџџџџџџџџџџџџџџџџћџ™шџўџџџџџџџџџџџџџџџџџџџџџџџџўџшbџ§џџџџџџџџџџџџџџџџџџџџџџџџџџ§џbІџќџџџџџџџџџџџџџџџџџџџџџџџџџџќџІжџўџџџџџџџџџџџџџџџџџџџџџџџџџџўџжяџўџџџџџџџџџџџџџџџџџџџџџџџџџџўџяќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќяџўџџџџџџџџџџџџџџџџџџџџџџџџџџўџяжџўџџџџџџџџџџџџџџџџџџџџџџџџџџўџжІџќџџџџџџџџџџџџџџџџџџџџџџџџџџќџІbџ§џџџџџџџџџџџџџџџџџџџџџџџџџџ§џbшџўџџџџџџџџџџџџџџџџџџџџџџџџўџш™џћџџџџџџџџџџџџџџџџџџџџџџџџћџ™-љџўџџџџџџџџџџџџџџџџџџџџџџўџљ-ŒџћџџџџџџџџџџџџџџџџџџџџџџћџŒ ЮџћџџџџџџџџџџџџџџџџџџџџћџЮ )щџћџџџџџџџџџџџџџџџџџџћџщ)6ъџњўџџџџџџџџџџџџџџўњџъ6'бџ§ћўџџџџџџџџџџўћ§џб' Œњџџ§ќўўџџўўќ§џџњŒ )›эџўџџџџџџўџэ›)bІж№§§№жІbih32Ь иийклнртцщыюя№‚ё€№яююэьыыщшчцхфусрпнмлкйй‚и йлнручъэя№ё‚ђё№№яюээьыыъщшчцхфусрпонмккй€и ййлосхшью№ё‚ђ(ёё№яюэььыыъщщшчцхфутсрпонмлккйииклосфщья№‚ђ ёёяюэьыъъщшш€чццххфутррпонммлкййилнрфшья№‚ђ ё№юэыъщшчц€хффхх€футсрпонммллкййинрфшью№ё€ђ ё№яэыщчхфутссрсстссппнмлл€к€йпучыю№ёёђёёяэьщцутпонмл€м ноппррппомлкƒйисцъэя№€ё №юьъцфромлкй„ийкклмн€онмкйижеезиифшыю№№ёё№юьшхтпмккйˆиййклммнмлкйдЯЬЬЯгечъэя€№ яэышфпнлййŒиййкк€лйзаШФФЦЪЯшьэяя№яэъчупмкйийй€кйеЬФОЛМСЧъьююяюэычупмкй’иййкййдЪРИГВЖНыьэююэычупмкй”ийкййгШНДЌЉЋГыьээьыщфснлйизз‚и жеежзгШМАЇЁЁЈы€ьыщцтнизи йккйииейрхчумбЦМЎЃš˜ъыыъщчфопъфз‹ижсўџ№еищљџ§№ЯИ­Ÿ•’€ъ щчхсрњџџэжŠижтџџєзє…џћЫЈžˆˆ€щ шцфнщџўџћкз‰и"жрџџѕ№џќяфтчєџўџћЗ˜шшчцфтлцџўџњйŠижпџџўџњпежшџ§џц—‰|wччцхурмкєџџшжŠижп€џўпеййиййдъџўџЎwnццхфтпмиитозииз†ж иижпџўџяейƒизљџџЮ{rg€ф усолиижзиизму„триижп€џужƒийгьџџт}l`€утрнк‚ийечџўƒџњйизп€џозƒийдтџџёeZ€тспнк‚ийечџўƒџњйизп€џозƒийеоџџј}^Sссрпомйƒизлс„рпиижп€џозƒийдоџџѕvWLррппомй„из†жиижп€џнзƒийгсџџчjQEонмйижп€џпзƒийвыџџгZJ>нмлйиижзŒижп€џщей‚издљўџЌMC8€лммлйзйфрз‹ижп€џћкжйииййвшџџњxG<6€к ллкййіџџъжŠижпџіле€жецџќџОQB76йиийккзцџўџњйŠи"жпџџўћџћьутчѓџ§џцlI:66ждгжийжцџўџћкŠижпџџўуљƒџўџщ„S@€6 бЬЪЬбежйјџџьжŠижп€џмк№ќџїб‰bH7667ЬХТТЦЫавзхсз‹ижп€џ ожжмтцсдИ“tR;€6 8ШРКЙЛРЦЬабдз‹ижп€џозйздаЩКЃƒ]@6766:ЦМДААГКТЩЯгезŠижп€џозиздЮСЋŒfE78247@ХКЏЈІЇЌДНЦЭбеззˆижп€џ ожжгЭС­’mK89.YG3KЦЛ­ЃœŸЄЎИСЪагжз‡ижп€џ"негЫП­“qN972:ЯH9\ШМ­Ё˜“’•œЅБМХЬбджз…ижп€ў%кЮЧКЈoN:67(ІљAIpЫРБЃ–ˆ‡Š’œЇГНЦЬбджзз‚ижп€џVвОВž†hK968,†џ№L]†ЮФЖЇ˜‹‚}|€†šІБКТШЮбджжззжгжфсмЗЂw\D86658ž–Zx›бЩН­wrqsyŠ”žЇЏЖМСФ€Ц ФРКЏЅ—‹ycM=7‚6(((>n’­гЭФЖЅ”„wngefkpx€ˆ–›ŸЂЃЄЂŸš“‹€raO@8„6&;Ll‹ЈНебЪПАŸŒ}od]YY[_ejpuy|~~|xrkaVJ?8…6%8Ge‡ЄКШждЯЧМЌšˆwh]SNLKMPTWY[]\ZXSNG@;7†68Hf†ЂЗЧазжгЭХЙЉ˜…scVLD?€= ?@AA@?<;97ˆ6;MjˆЂЗХЯеззевЭФИЉ˜†scTH>8’68BVrЅИЦЯезиизевЬФЙЊš‰xfWI>86 8>Lb|•ЊЛШЯези &7J_rƒšЁЅ€ЈІЅЁš•‹†|uogaZSJB:3)   );Qf{Œ˜ЂЈЌ­ЌЋЉЅЂ˜”Š†‚}xslf`ZRKD=7/'  +>Um’ŸЇЌЎЏЎЋЇЃ—’Œ‡ƒ{xtqlgb]VOHB<60*# I*?Vo„•ЂЉ­ЏЏЌЉЄ–އ{vrokjgec`]XRLD=82,(# '=Uo…–ЂЉ­ЎЎЋІŸ–Œ‚yqid_[YWVU€V(TQMHA:3,&" $8Rlƒ”ЁЇЋ­ЌЈЁ˜Œ€sg\SKD?=€;[=?BDFGEB=7.'  3Kf~žІЉЊЉЄœraRD8.'!#(-27::83+" D^x‹™ЂІЇІЁ—‰wcO>/" € #)-/-' €€Un„“ЂЅЃ“ƒmWB/! „  "$" „d{Œ— Ÿ›~hO8& ˆ  p‚—š›—}fL4" Œ   ‚x†•–“Œ~gL3  Ž  ƒ |‡Ž‘ŠkP6! ‹€€  €~†Š‹‡oW=( ‹   }ƒ…„r_F& Š  ;\fP   z€}teQ.1uWˆ BјћŸ rй§џўџѓІ$ uyysiZ>6мџџŽ ˆ FџџЗЛџ§џўџьDpsqk_Q'sџјџщ‡% <џџПЂџ№›VDfЙџњџю+jlhbVGbџњџр‡% 4§џњџп5mџњџИddaZM<"Мџўn † & 5ўџџј7 џћџ>]]ZRE4 C-†  5ўќџ™  рџџ‘VVRK?.  ID‚E G< 5ўўџN ‚ –џџСNNKD:)   dџћџ §џо5ўџџ, ‚ dџџс FFC>4% cџљ§ ћџк 5ўџџ, ‚ Nџџ№>>=80"‚>9‚: ;4 5ўџџ, ‚ Qџџы6762+„†  5ўџџ+ ‚ iџџг€.-' €†  5ўџџ6 ‚ œџџБ%%&&" Š 5ўќџv  тџџsR;‰$ 5ўўџс џ§є% Цџџy ˆ% 5ўџќџУh§љџ ^џљџу‡ 5ўџљфџх†LDdЕўњџЮ aџјџч‡ 5ўџљMзџўџ§џЪ€‚вџџ„ ˆ 5ўџџ%žю€џўпz aF‰ 5ўџџ-Ld_= ‚„‹ 5ўџџ+ … ‹ 5ўџџ,  €€Œ 5ўџџ, 3€‚Š 5ўџџ, У€„€‰ 4њќќ+ї€€€€‡ 8€џ+€ fџэ€‚€€… ‚ƒƒr…w €„€ˆ€…€€‡ ‡€„ˆ€Š€€‰Œ‚š„—€†€•$0@Rfyˆ•ŸЅЉЌЌЋЊЈЅЁžš•Œ†{unhaZSKC;3*#%3DXm‘ІЌАБАЏ­ЉІЁ™”‹‡ƒ~ysmg`ZSLF?81)"&4G]s‡—ЃЋАВГВЏЋЇЂœ—‘Œ‰„~zwsniYd]WPJD?93-&!$4G^uŠšЅ­БГГА­ЈЁš“Œ‡|xurpnljgd_ZTMF@;51-(##1E]uŠšІ­БВВЏЊЃš‘ˆwpkfc`^‚]([YUPJB<60,)&#.AYrˆ™ЄЌЏБАЌЅœ‘†ync[SMHF€C[FGJMNONKE?81*%" =Sm„–ЂЉ­Ў­ЈЁ•‡xhYLA80*&%$%&)-16;?BC@;5,%Me~ІЊЋЊЅ›Ž}jWF8-#€!'-26861)!€€]uŠ˜ЁІЈЇЂ˜ˆt_J8+!„ #(-.,&k‘›ЁЄЃž”„oWA0$ˆ "%&"€vˆ•œžŸ›“ƒmT=, Œ~Œ–š›˜‘„nU=*Ž ‚“–•„qX>+‹€€ € ƒŒ„u^F1"‹!  ‚ˆ‹Š„xfN0 Š!!DclX+ € €„…‚zlY7:{^ˆJљќЄxк§џўџєЊ, € |~zpaG?нџџ“ˆ NџџК Оџ§џўџюJ wywqgY1zџјџъ‡%EџџТІџ№ ^LmМџњџю0 qroi]O(iџњџт‡% =§џњџр>tџњџЛ kkhaUD,Пџўt†'>ўџџљ>„џћџE ddaYN<(L6  „ >ўќџœтџџ“ ]]ZSH7" (RM‚N PE >ўўџT‚™џџУ VVSMB2jџћџ §џр >ўџџ5 ‚jџџт ONLG=/jџљ§ ћџм >ўџџ5 ‚Vџџ№GGEA9,‚$GB‚C D= >ўџџ5 ‚Xџџь??><4)ƒ„ >ўџџ4 ‚oџџд 77861'€† >ўџџ? ‚ŸџџГ//00,%Š>ўќџzуџџu '&()(#ZC Š$>ўўџу „џўє)""!Щџџˆ%>ўџ§џЦ$o§љџ‘ fџњџф‡%>ўџњцџц‹SLjИўњџаhџјџш‡ >ўџљUйџўџ§џЬ#€‚дџџ‰ˆ >ўџџ,Ѓя€џўс € !hN ‰>ўџџ7'TkeE ‚Š>ўџџ5   ‹>ўџџ5  Š>ўџџ5  4€ ‰>ўџџ5  У €  €‡ =њќќ4  ј  €  …A€џ#4 hџэ  ƒ  (‡ˆ‡! t‡y €€ € „€   €   †  €  ‚  ˆ  €‚€‰ €  — € • ƒ  “ €h8mk 'ešЧрђ§§ђрЧše'pТєџџџџџџџџџџџџєТp ”№џўџ§ќ§ўџџџџў§ќ§џўџ№”  {ёџўќќџџџџџџџџџџџџџџќќўџё{ /Ьџ§ќўџџџџџџџџџџџџџџџџџџўќ§џЬ/WѓџќўџџџџџџџџџџџџџџџџџџџџџџўќџѓWoџўќџџџџџџџџџџџџџџџџџџџџџџџџџџќўџopџќ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ќџpXџ§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џX1ђџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џђ1ЩџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќџЩ|џћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћџ|#юџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџю#“џћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћџ“эџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџэoџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќџoРџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џР(ђџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџђ(dџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џdšџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќџšЦџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џЦрџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџрђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџђ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџђрџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџрЦџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џЦšџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќџšdџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џd(ђџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџђ(Рџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џРoџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќџoэџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџэ“џћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћџ“#юџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџю#|џћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћџ|ЩџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќџЩ1ђџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џђ1Xџ§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џXpџќ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ќџpoџўќџџџџџџџџџџџџџџџџџџџџџџџџџџќўџoWѓџќўџџџџџџџџџџџџџџџџџџџџџџўќџѓW/Ьџ§ќўџџџџџџџџџџџџџџџџџџўќ§џЬ/ {ёџўќќџџџџџџџџџџџџџџќќўџё{  ”№џўџ§ќ§ўџџџџў§ќ§џўџ№” pТєџџџџџџџџџџџџєТp'ešЧрђ§§ђрЧše'it32_!„и€йккллмноппстуфхчшщъыыьэююяя№‰ёƒ№яю€э€ьыъъ€щшш€чццххфф€ут€ср€поонммллкйи€йккллмнопрстухцчшщъыьэююяя€№ё‚№яю€э€ьыъъ€щшш€чцц€хффууттссррппооннммллкй‹и€йкклммнопрсуфхцшщъыьэююяя№№ё†ђ‚ё‚№яю€э€ьы€ъ€щшш€чцц€хффуутт€с ррппооннммллкй‰и€йкклммнопстуфцчшщъыьэюяя№№€ё‰ђё‚№€яю€эьы€ъ€щ€шчч€ц€хффуу€тссрр€пооннммлл€к‚й‡и€йкклмноппстухцчщъыьэююя№№€ёŠђё№€яю€эь‚ы€ъщшш€чцц€х€фуутт€срр€поонн€млл€кй†и€йкклмнопрстфхцшщъыьэюя€№ёё‹ђ€ё№€яю€эь‚ыъщ€ш€чцц€хфф€утт€срр€п€оннмм€л€кй„и€йкклмнопрстфхчшщъыьююя№№ёё‹ђё€№€я€ю€эь‚ыъ‚щш€чцц€х€фуу€тсс€р€п€онн€мллкй‚и€йкклмнопрсуфхчшщыьэюяя№№ёё‹ђ€ё€№€яюю€эьы‚ъ‚щ‚шч€ц€хфф€утт€сррп€о€нмм€л€к‚йиййкклмнопрсуфхчшъыьэюя№№ёё‹ђ€ё€№яя€юээ€ьыъƒщƒш‚чц€х€фуутт€с€р€по€н€мллкйийкклммопрсуфхчшъыьэюя№№ёёŠђ€ё€№яя€юээьь€ы€ъ‚щ‚ш†ч‚ц‚хфф€уттсс€р€по€нм€л€к‚й€иккллмнпрстфхчшъыьэюя№№ёёŠђёё€№яяююээьь€ыъъ€щшƒч‰цƒх€ф€утт€срр€по€н‚м€лкй€икллмнорстфхчшъыьэюя№№ёё‰ђ€ё№№яяююээььыыъъщщ€ш€ч‚цхфуттссрр€п€он‚млк‚йииклмнопстфхчшъыьэюя№№ёёˆђ€ё№№яяююэььыыъъщщшшчч€ц‚х”ф‚утт€срр€поо€н‚м‚л‚к‚йиилмнопстухчшъыьэюя№№ёёˆђёё€№яююэььыыъщщшччцц€х€ф‚у‰тŠутссрр€поо€нмƒл„кйиимнопртухцшщыьэюя№№€ё†ђ€ё№№яяюэььыъъщшччццххффуу€тƒсƒр…с‰тсрр€поонн€м‚л†кƒйимопрсухцшщыьэюяя№№ёё†ђёё№№яяюээьыъщщшчццхффутт€сррпрŠсрр€поонн€м€лˆк„йинорсуфцчщъыьююя№№€ё„ђ€ё№№яююэьыъщщшчцхффутссррппо‚н€м„н‚оп‚рср€пооннмм€л‚к‹йиопстфхчшъыьэюя№№ё‚ђ€ё№№яяюэьыыъщшчцхфутссрппоонн€мŒлм€нопƒрпооннмм€л€кйиипртухцшщыьэюяя№№ё€ђё№№яююэьыъщшчцхфутсрппоннммллƒк…й„к€л€м€н€о†п€оннммлл€к€й†ий€и рсухцшщъьэююя€№†ё€№яюэьыъщшчцхфтсррпоннммлл€к„йƒи„й‚к€лмм€н‚о€п€онн€мл€кйй€иззжж€з…истфхчщъыьэюяя№№†ё№№яяюэьыъщчцхфусрппонммлл€кйи‚йк€л€м€н„оннммллккййиизеедггддеежззи тухчшщыьэююя€№„ё€№яюэьыъщшчхфутсппонммл€кй•и‚йкллм…н€м ллккййижегв‚абвгееж€з уфцчщъыьэюяя№ё€№яяюэьыъщчцхутсрпонммл€кй™и‚йк€лмн€м ллккййизевааЮЭЮЯабвдеежфхчшъыьэююяˆ№яяюэьыъшчхфусрпонммл€к€йŸи‚йк€л…м ллккййиегаЮЭЫ‚ЪЫЭЮабвдехцшщъыьэюяя†№яяююэьыщшчхфтсрпонмллккйЂи‚йк€л‚млл€к йиздбЯЬЪШШ€ЦЧШЩЪЭЮабвхчшъыьэююяя…№яяюээьъщшцхутспонммлккйІи‚йк…л ккййиеваЭЪШЦХФ€УФХЧЩЪЭЯацшщъыьэюю€я‚№€яюэьыъщшцхутрпонмллкк€йЊий‚к‚л€кййиевЯЫШХФТРРПРРТУХШЪЬЮчшъыьээююя№№€яююэьыъщчцфусрпонмлккйЌи‚йˆкйиздаЭЪЧХТРОНММНОПСФЦЩЪшщъыьээюю…яююэьыъщчцфусрпоммлкк€йАи‚й…к ййизгаЬЩХУРОЛК€Й КЛОРУХШшщыыьэ€юƒя€юэьыъщчцфусрпнммлкк€йВиƒйƒк ййижваЫШХСОЛЙИЖ ИКМПСХщъыььэю€я€юээьыъщшцхусрпнмллкк€йЕиƒйккйиевЯЪЧУРНКЗЕДГВГДЕИЛОРщъыььээ…юээьыъщшцхусрпнмллккййИи‡йииевЮЪХТПЛИЕГБЏЎЎАБДЖКНщыыььээ„юээьыъщшцхутрпомллккййЛи…йииебЭЪХСОКЖДБЎ­€Ќ ЎЏГЖЙъыыьь€эю€эьыыщшчхфтрпоммлккййНи„йизебЭЩХРНЙЕВЎЌЊЉЌЎБЕъыыьь…эььыыъшчхфтспонмлккййРийиизебЭЩХРМИДА­ЊЈІЅЅІЈЊЎБъыы€ьƒэььыыъщчцфуспонмлккййЧизеаЭЩХРЛЗГЎЌЉІЃ€ЂЄІЉ­ъыыьээьыыъщшцхутрпнмлккййШизеаЭЩФПЛЖВЎЊЇЃЂ€Ÿ ЂЅЉъыы†ьыыъщшчхфтрпомлкк€йШижеаЭЩФПКЖБ­ЉЅЂŸœœžЁЄъ€ыƒь€ы ъщшчцфуспонмлк€йЩижебЭЩФПКЕБЌЈЃ š€˜šЁъ‚ыььыъщшчцхутрпнмлккййНиръђѕќ€џќѕэшкжебЭЩФПКЕАЋЇЂž›˜–••—™ъъ†ыъщщшчхфтспомлккййЋи„џѕ…инэњŠџёубЭЩХПКДЏЊІЂ™–““’“•˜€ъƒыъъщщшчцхусронмлфыыхлЊи„џѕƒиляџілЪХПКДЏЉЄ œ˜”’Ž‘•ъ€ы€ъ щщшчцхфтспомтњџќъЉи„џѕ‚ишќ’џцЩПКДЎЉЄŸš–“ŒŒщ…ъ щщшчцхфусронх…џэЈи„џќия•џѓУКДЎЉЃž™•‹ˆˆŠщщ‚ъ€щ шшчцхутспомњ†џтЇи…џ€ия—џ ћШДЎЉЃž˜“‹ˆ€†ˆ†щ шшчцхфусронъ‡џяЇи…џиия™џёЙЎЉЂ˜“‰†ƒ‚ƒ…ш„щ шшчцххутспомё‡џњЇињ„џиъ…џѕът€илтъї‰џ№ЎЈЂœ–‘Œˆƒ‚шшщ€ш ччцхфусрпнмѕˆџЇиѕ„џтќƒџян‡инђˆџ дЈЂ›•‹†‚~}|~…ш ччцхфутспомлѕˆџЇиѕ„џќ‚џњт‹ихќ‡џ ЙЁš•Ž‰„€|yy{ч‚ш€ч цххфутрпнмлы‡џѕЇиѕ‰џїлипќ†џ ш š“ˆ‚~ywvw…ч ццхфутсронмкп‡џъЇиѕˆџїлипќ†џ Й™“†|wtstƒч€ц ххфутспомлкй№…џњлЇиѕ‡џќнизт†џп˜’‹…zvrpqццччцххфутсрпомлкйлѕƒџњрЈиѕ‡џх‘иззю†џ І‘Šƒ~xsommƒц€хффутсронмкййиишѕџџїълЉиѕ†џѕ’иззиќ…џ Ш‰‚|wrljjх€цх ффутсрпонлкййВиѕ†џх“изеэ…џ ъˆ{tokgg„х ффуутсрпомлкйГиѕ…џњ”изжк†џ•‡€ysmheeƒх ффуутссрпнмлкйГиѕ…џя”изжді…џЋ†~wrkfba„ф€у тсрпонмкййГиѕ…џш”изждц…џСƒ}void`^ƒф€у тссрпонлкййи•џѕ‡иѕ…џн”иззен…џа‚{tmga][…у ттсррпомлкй‘и•џѕ‡иѕ…џ•иззег…џпyrle_[Y„у ттссрпонмлкй‘и•џѕ‡иѕ…џ–изеа…џяwpib\XVут ссррпонмлкй‘и•џѕ‡иѕ…џ–изеаё…џ}vng`[VS„т€срппонмлкй‘и•џѕ‡иѕ…џ–изеа№…џ|tle]XSPс€т‚с ррппонмлкй‘и•џѕ‡иѕ…џ–изеа№…џyrjb[VPN…с ррппоонмккй‘и•ъш‡иѕ…џ•изздЯ№…џwog`YRNK‚ср€понмлкййДиѕ…џ•изждЮ№…џule]VPKI…р€поонмлкййДиѕ…џ•изжгЭї„џмrjb[SMIFƒр‚поонмлкййДиѕ…џ•изевЭ…џлpg`XPKFD‡пооннмлкййДиѕ…џ•изевв…џРme\UNGCA†п€онммлкййДиѕ…џ”иззебм…џДjaYQKE@@ˆоннммлкййДиѕ…џн“изжеац…џ—g^VNGA>=‡о€нммлкййДиѕ…џт“изждЯј…џld[SKD?;;‰нммллкййДиѕ…џэ’иззевз…џ уjaXOGA<::ˆн€мллкййДиѕ…џњ’иззебъ…џ Гf]TKD?:89‹мллкййДиѕ†џшиззждгћ…џ €bYPHA<877ŠмллккййДиѕ†џњиззевь…џ йh^UKD>:767…лм€лккйй‚итъъхлЊиѕ‡џэŽиззжен†џ ЈdZPHA;8767лл€к‡лккйй€ирњџќъЉиѕˆџшиззенќ…џ ьj`VLD>:7667†к‚л€кййиит…џэЈиѕ‰џш‹иззжні†џ –e[PH@:87667Žкййиињ†џтЇиѕŠџъŠиззрќ†џвk`VLD=97€67к„й…к€йиш‡џяЇиѕ‹џњш‡измя‡џі{f[PG@:767€йи‚йк€йия‡џњЇиѕ…џї„џњэтлитъє‰џ’laVKC<9767йииз€и†йиѕˆџЇиѕ…џнќ™џВrf[PF?:7‚67изж‚ежзииƒйииѕˆџЇиѕ…џи𘟠Жxl`VKB<87‚67зедв€бвгеез…иъ‡џѕЇиѕ…џиишќ”џ јЋrf[OE>:7ƒ67егбаЯЮЮЯаавдежз‚ир‡џъЇиѕ…џ€ирњ’џ пš†xl`SI@:7„67дбЯЭЫ€ЪЫЭЯавгее‚зя…џњлЇиѕ…џилъџ ѕФ™Œ~reXMD<97„68вЯЭЪЩШЩЪЬЮабг€ежжйєƒџњрЈиѕ…џƒинъќŠџ щЮЋŸ“…wj]QF?:7„678аЭЪШЦ‚ХЧШЪЬЮабвдецєџџїъкЉиѕ…џ†иръђїџљђчкХЙЏЄ˜‹}obVKA;7…67:ЮЫШХФТСРСТУХЦШЪЬЮабвгеж‚зЈиѕ…џ‰иззжегаЭЩУМДЉ‚ug[ND=97…67:ЭЪЧФСПО ПРТФЦШЪЭЮабвг€ежжзЇиѕ…џˆиззжедбЮЪХПЖ­Ђ•ˆzl_RG?:7†67;ЫШХТПОЛ€КЛМОПТФЦЩЪЭЯабвд€ежзІиѕ…џ‡иззжедвЯЫЦРЙАІšrcVKA:7†6 79=ЪЧФРОЛЙИ€ЗЙКЛОРТХЧЪЫЭаавг€ежзЅиѕ…џ†иззжееваЬШТЛГЉž‘ƒvgZND<87†6 7:@ЪЦУПЛЙЖЕДЕЗЙЛОРУХШЪЭЯабвдеежзЄиѕ…џ…иззжееваЬШУНДЌЁ•ˆyl]PF>:7‡6 7;CЪХТОКЗДГБ€АБГДЖЙЛОСФЦЩЫЭабвдеежзЃиѕ…џ„иззжееваЭЩФОЖЎЃ˜‹}oaTI@:7‡6!79>FЩХСНЙЖГАЎ­ЌЌ­ЎЏБДЖКМПУХШЪЭЯавг€ежзЁиѕ…џƒиззжееваЭЩХОЗЎЅšreWKA;7ˆ6 7:AKЩХРМЙДБЎЌЊЉЋ­ЎБДЗКОРФЧЪЬЮабвдеежз иѕ…џи€зжедваЭЩХПИАЇœƒugZMC<87ˆ6897…6џ€67FR`n|ˆЮЪЦТНИВ­ЇЂ˜”‹ˆˆ††‡ˆ‰‹‘”˜ЁЅЉЎВЖКОРФЧЪЫЭабвг€еж‚зŒи€зє…џЪЧФПЛЕЎЈ ˜Ž…zocXND>:7‡6ƒџ;CN[iw„‘аЫШФПКДЎЉЃž˜”Œˆ†„ƒ€‚ƒ…ˆŠ”˜ЁЄЉЎВЖКНРУХШЪЭЯаввдеежж‚з†и‚зжє…џФПЛЖАЉЃ›“‰€vk`UKC<97‡6„џ@JVdr˜аЭЪХРЛЖАЊЄŸ™•Œˆ…‚€~ƒ†ˆ‹“˜œŸЄЉ­БДЙЛПТХЧЪЫЭЯаввд€еж‰зжжеедѓ…џКЖАЊЄ•ƒzpf[PH@;87‡6…џFR`m{ˆ•ŸбЮЪЧУОЙГ­ЇЁ›•Œˆ„~}|€z |}~ƒ‡Š’–šžЃЇЋЎГЖЙМПТХЧЩЪЭЮааввд‰едввааЭЫЩЦФРНЙДЎЉЃ•†}tj`VME?:77Œ6E78EP]jw…‘œІЏЗОегбаЬЩХРЛЖЏЉЃ•‰ƒ~yurnkigfefgilmprvy|~‚„ˆŠ’“–˜™›žŸŸ Ё€ЂЁ Ÿžœš˜•“‰†}xsmga[UNHC?:876,79=EO[hv‚ŽšЄЎЖНУедваЮЪШУОЙД­Ї ™“†|wrnjgecaa€`abdegjlortwy|~ƒ†ˆ‰‹Ž’…“‘Ž‹ˆ†ƒ}yvrmhc^XSMGC?;9776.79=DNZgt˜ЂЌДЛСЧеегваЭЪХСНЗБЋЄž—Šƒ~xsokgda_]\[]^`abegjlnqsuwy|}~€‚ƒ„…†……ƒƒ‚€~|zwurokgb^ZUPKFA>:977‘6179<:877“677:=DNYer~Š•ŸЉБИОФШЭазжеегбаЭЪЦТОЙВЌЅŸ˜‘Šƒ}wrlfb^[WTRPNNM€LMNOPPRSVVXY[[\]]^_^^]\[ZXVUSPNKIFD@><:977•6F7:>EOZfr~Š•ŸЈАЗОУШЬавззжедваЯЬЩХСМЗБЋЄž—ˆ‚|uoje`[XTPNLKIHGGFGGHIIKKLNN€PQR‚SRQPPONKKIFECA?=;:9€7•6=78:?FP[gs~Š•žЈЏЗОУШЫЯбдззжеедваЮЫШХРЛЖАЉЃ•Žˆztnhb^YVQNKIFEDCƒABCDDE€FG‚HGGFFEDCA@?><;::8€7—679;AIR]ht€‹•ŸЈЏЖНУЧЪЯбге€з%жеегваЭЪШФПЛЕЏЉЃœ•ˆyslga\XSOKIECA@>=„<=>>‡?>=<<;€:98€7™677:=CKU`kvŒ–ŸЈАЗНУЧЪЮбгежз&жеегбаЭЪЧУПКДЎЉЃœ•‡€yslfa[VQNJFC@><:9989†:€98ƒ7œ678:?ENWblxƒ˜ ЉАЗОУЧЪЮагеезиз#жеевбаЭЪЦУПКДЎЉЃœ•Žˆyslfa[VPLHDA>;9“7Ё677:EMT]cjqw}ƒˆŒ‘”—š ЁЃЄЅ…ІEЅЄЃЃЁ Ÿœš™—–”’‘‹‰‡…ƒ}zxvsqnkhec`^[XVSPMJFC@=:741-*&" €„€# !&,3:AHPX`gnu|‚‡‹‘”˜œŸЁЃЅІІЇ„ЈGЇІІЅЄЃЂ Ÿœš™—•”‘ŽŒŠˆ†„ƒ}zxvsqnkifda_\ZWTQNKHEB?<:730,)&" ‚€$ "(.5<:741.+(%! | $*17?GOW`hpx…‹‘–šžЂЄІЈЊЋЌ­­ЎЎ­­ЌЋЊЉЈІІЄЃЁŸ›š—–”’‘Ž‹‰ˆ†…ƒ‚€}{zwvtqpnkigdb`][XVSQNKHFCA><:742/,)&#  " $*18?HQZbjrz‚ˆŽ“˜ ЃІЈЊЋЌƒЎS­ЌЋЊЉЈІЅЃЂ œš—–”‘ŽŒ‹ˆ‡…„ƒ€~}{zxwutqpnkjhec`_]ZWTROMJHEB@><:7420-+(%" €  $+19@IR[clt|ƒ‰•šžЂЅЇЉЋЌ€ЎЏ€ЎU­ЌЋЊЈІІЄЂ œš—•“‘Ž‹‰‡…„ƒ€~}|zywvutrqomkjheca`][YVTQNKIFDB?<;97420-+(%#! € $+1:AJS\dmv~…‹‘—œ ЃІЈЊЌ­ЎЏXЎЎ­ЋЋЉЇІЄЂ ›™—”’‹‰‡…ƒƒ€}|zyxwutsrqonmkjhgecb`^\ZWTROMJHEB@=<:7531/-+(&$" € $+1:AJS]enw…Œ“˜ЁЄІЉЋЌЎЎЏyЎЎЌЋЊЈІЅЃ ›™–”‘Ž‹‰‡…ƒ€}|zxwvtsrqponmlkjihgedba`^]ZXVTQNKIFCA><:86410.+*(&$" #*19AJT]enw€†”™ЂЅЇЉЋ­ЎЏ{ЎЎ­ЋЊЈІІЃ ž›˜•’Š‡…ƒ€~|zxvtsqpnmlkjihhgfeedcbb``_]\ZXWTQOMJHEB?<;96410.,*('%#! ")19@IS]eox€‡Ž”™žЂІЇЊЋ­ЎЎ€Џ#ЎЎЌЋЉЇІЃЁž›˜•’Ž‹ˆ…ƒ€}zxvtqonlkihfeec€ba‚`O__^]][ZYWVTRPNKHFCA><:7420.+*(&%#"  "(08?IR]enw€‡Ž”šžЂІЇЊЋ­ЎЎЏ€Ў%­ЋЊЈІЄЂŸœ˜•‘ŽŠ‡ƒ}zwtqoljhfdba``^]]\[[„Z€YHXXWWVTTRPNLJGEB?<:7520.+)(%$"!  !'.7?HQ[enw€‡Ž”™žЂЅЇЉЋЌ‚Ў&­ЌЋЈЇЅЃ œ™•‘މ…ƒ{wtqmjgeb`^]ZYWWUTTSRRƒQR€SFRRQQPONLJHECA><9641.+)'%#"  &-5=FPZcmw†”™ЁЅЇЉЋЌ­€Ў$­ЌЋЉЈІЃ š–‘މ…}ytqmieb`]ZWUSQONLKJI†HIIJ€KLL€MBLLKKIHFDB?<:741/,)'%"! %+4??@ABBDEEFGGHHGGFECB?=<9741.+(%"  "*1:CMW`jt}„‹‘—œ ЃІЈЉЋЋ€Ќ$ЋЋЉЇІЃ œ˜”‹…|vqkgb^ZUQMIFC@=<:76432…1 2445779:<<=??@ƒB@?><:752/,)&# € (08AKT_hqzƒ‰–šŸЂЅІЈЊ‚Ћ%ЉЈІЄЁžš–‘‹†‚|vpke`ZUQKGC?<9530.+*('%%$€#$$%%&((*+-.024579:;<<=<<:8641.+($!‚€@ -6>HR\eoxˆŽ”™ЁЄІЇЈЊЊЋЊЉЈЇІЃ œ—“Žˆƒ}wqjd^XRMHB=:61.+(%" € "$&(*,.0245789€:97642/,)&# ƒ  35,% Е   ‚…ƒ€zƒ…ˆ‰‹€Œ‹Šˆ…‚}wqh`VKA7.& З   ‚„†#z‚„†ˆ‰ŠŠ‰ˆ‡„‚}xrjbYND:1(  Й‚ ƒ„‡z~ƒ…†€ˆ‡…ƒ}ysld\QG<4*" Лƒ ƒƒˆz}€ƒƒ…„ƒ}ztnf_UK@7-% Н…ƒƒˆz}‚ƒ‚€}zuohaYNE:1( К9{ЌНю€џяНŒk‚ƒˆy|~€‚‚€}zupjc\SH>4+" €Ї„џН…(‹оŠџЌZ€ƒˆwz|}€€}|yuqke_WMB9/&R}\Ј„џНƒœџЭI‚‰wyz|€}|zxuqmg`ZQH=4*!Gрџя{Љ„џН‚jю’џ‹‰uwxzywuqnhb]ULB9.%Y…џ‹Ј„џюœ•џЭ€…€suwwxxwvtqnje`XPG=4*!р†џIЇ…џ€œ—џю8„‚qst€utsqnke`[TKB:/%w‡џœЇ…џœ™џЭƒƒoqr€sqpnkgb]WPG>5+"Ѓ‡џоЇо„џ{…џН{I€I{Э‰џЭƒƒnnpqqpnmkgc_ZSKC:1'СˆџЇН„џIюƒџœ(‡(Ќˆџzƒƒkl€nmkjgd`\VOH?7-#РˆџЇН„џю‚џоI‹Zю‡џ7„ij€kjhgd`]XRKD<3) ‡џНЇН‰џЭ9ю†џМ„ghgeca^ZTOHA90&1‡џ{ЇНˆџЭ9ю†џH€„dedb`^[WQKE=6,#…џоЇН‡џю(‘I†џЌ€„bbccbb`^[WTNHB;3*  Нƒџо9ЈН‡џZ“œ†џ&…ƒ`][XTQKE?80' kНџџЭ{ЉН†џН”ю…џzƒ]€^]]ZXURNHB<6.% АН†џZ•œ…џЭ‚€Z€[ZZWUROKF@:3+" АН…џо–(†џ‚€XXYXWWTRPLHC>81(  БН…џœ—Э…џHUVVUUTRPMJEA<6.' БН…џj—{…џzR€SRQOMKGC?:4-% Ž•џН‡Н…џ(—I…џ›O€PONLJHEA<82+# •џН‡Н…џ˜…џМ€‚L€MLKJHEB?;60)" •џН‡Н…џ™…џо€‚JIHGEB?<94.(  •џН‡Н…џ™Н…џ€‚GFEDB@=;72-& •џН‡Н…џ™Н…џ€‚C€DCBB@><951+% •џН‡Н…џ™Н…џƒ@@A@@??=<:73/*$ •{j‡Н…џ™Н…џ‚‚=€< :751-(" ГН…џ™Н…џƒ; :97530+'" ГН…џ™о„џМ€ƒ8 77541.*&! ГН…џ™…џМ€545 4431/,(% ГН…џ˜(…џŠ€2€1€2 11/-+'# ВН…џ˜Z…џy‚.//..-+(&" ВН…џ(—‹…џG‚+€, ++)'%! ВН…џI—о…џ€‚ƒ())(('%"  ВН…џ‹–9…џЭ‚%%$% &&%%#! ВН…џо–œ…џy€ƒ"€!€"€# "! БН†џj”ю…џ%€ƒ  БН†џо”œ…џМ€„€ I{{ZЊН‡џ‹’I†џh€„€ 9оџю{ЉНˆџj9ю…џо€…€ J…џ‹ЈН‰џjŽ9Э†џG€… о†џIЇНŠџ{ŒIю†џЋ€†€ € k‡џœЇН‹џоjˆ(œ‡џю€†   œ‡џоЇН…џЭ„џо‹II{Н‰џ6‡    НˆџЇН…џ(ю™џh€‡† €  НˆџЇН…џ9˜џhˆŠ €  {‡џНЇН…џjю”џюH€ˆŒ‚9‡џ{ЇН…џ€9о’џЌ€‰’œ…џоЇН…џ{џоXŠ‚‰Нƒџо9ЈН…џƒ({юŠџЌY€Š€†ˆjНџџЭ{ЉН…џ†9{ЌЭџоН‹Y€‹‰ЙН…џ‘€€€‹‹ЗН…џ€ŒЖН…џ€ДН…џŽ€€‘ВН…џ‚€Ž’БН…џ€”ЏН…џŒ€†ˆЎН…џ‹€„†‡ЌН…џŠ€€ˆџ„„ˆ†ЋН…џˆ‚€€‰џƒ„ІЉН…џ‡‚€€‰џџƒƒ…ЈН…џ†‚€€‰€џ‚€ƒŽ†ІН…џ…‚€€Š€џ‚ƒ…ЅН…џƒƒ€€Šџ€„‘…ЃН…џ‚‚€Š‚џƒ“…ЁН…џ€ƒ€€€Šƒџ€€ƒ…„†…ŸН…џƒ€€‹ƒџ€ƒ„ˆ…†œН…џ‚€€Œ„џ€ƒƒŠ…†šН…џ€€Œ…џ€€ƒƒ„‡š„‚€€–€€‚ƒ…ˆ’†‚€—€ƒ‚’… ƒ€˜€‚‚ƒ“‡˜„‚˜€€‚ƒ‚…„ˆŠ‹‡‚‚™€€€ƒ‚‚„‰ˆš„‚š€€ƒƒ‚ƒŒŠ†‚œ€€‚„ƒƒž„€€‚…ƒ‚‚•”†Ÿ€‡ƒ‚‚БЁ€€€‚ˆƒ‚ˆ‚Є€€€‚Šƒ‚…ŒЉ€€€‚‹ƒ‚‚„Щ€‚ƒ‚‚ƒШ€‚ƒ‚‚ƒХ€€‚‘ƒ‚‚‚Ф€€‚“ƒ‚‚‚Т€€€ƒ•ƒ‚‚‚П€€ƒ—„‚ƒЛ€ƒ™„‚‚‚Й€‚Š€€""&)/4:@GMU[djqw}‚ˆŽ‘–™œžЁЄЅЇЈ‡ЉDЈЇЇЅЄЃЁ žœ›™—–”’‹ˆ†„‚€~|ywuroljheb_]ZXURNLIFB@=:630,)&$!€„€##&+05DLSZbiqw…‹•™œ ЃІЈЉЋЌ­ЎЎ€ЏLЎЎ­ЌЌЊЉЉЇІЄЃЁ žœš™–•“‘ŽŒ‹ˆ‡…‚}zxvuromjhfda^[YVSQNLIFC@>;842/,)&$!€€  $(-38@FMU]elu{‚ˆŽ“˜œŸЃІЉЊЌ­€Џ€А€ЏLЎ­ЌЋЉЉЇІЄЃЁŸžœ›™—–“’ŽŒŠˆ†…‚‚€}|zwutqolihfc`^[YVSQNMJGEB@=:742/+(&$!| $(.3:@HOW^gov~„‹–›žЂІЈЊЌЎЏАББВВББАЏЎ­ЌЊЉЈЇЅЃЁŸžœ›™—–“’ŽŒ‹ˆ‡…„‚€}|zwvurpnkigdb_]ZYVSPNLJGEB@=;8530-*'&#!" $).3:@HPYaiqx€‡Ž“˜œЁЄЇЉЌЎЏАƒВSБАЏЎ­ЌЊЉЇІЄЁ žœ›™–•“‘Ž‹Šˆ†…ƒ‚€~}{zwvurqoljhfda^[ZWURPMKIGDB@=;9642/,)&$" €  $).4:AIQZbjsz‚ˆ•šžЂІЉЋ­ЏА€ВГ€ВUБАЏЎЌЊЉЈІЄЁ žœš˜–“’‹Šˆ†…ƒ‚‚€}|{zxwutrqoljhgdb`][YVSQNMKHECA@=;9642/-+(&$!€ $).4:BJRZckt|ƒ‹–œ ЄЇЉЌЎАБВГXВВБЏЏ­ЋЉЈІЄЁŸœ™—”’‹‰ˆ…„‚‚€~}{zyxwuutrqonljigeca^[ZWURPMKIFDB@><:86420.,)&%# €$(.4:BJRZdlu}„‹‘˜œЁЅЈЊ­ЏАВВГyВВАЏЎЌЊЉЇЄЁŸ›™–“‹ˆ†…‚‚€~}|zyxwvuutsrqponlkihgeda_][YVSQNLJGEB@?=:974320.,)'&$!$'-3:AJR[dlu}…Œ’™ЁІЉЋ­ЏБВГ{ВВБЏЎЌЊЉЇЄЂŸœš—•’‹ˆ…ƒ‚€~|zywvutsrqpoonmllkjiihgfdca_^[YWURPMKHECA?=:975321/-+)'&$" #&,3:AIQZdlu~…“™ЂІЉЋЎЏБВВ€Г#ВВАЏ­ЋЉЇЅЂŸœš—“Ž‹ˆ…‚€~|zwuusrpomllj€i€h€gOffeddba`^][ZXVSPNLJGDB@=;974320/-,*)'&$"!"&,29@HQZdlu}…“™žЂІЉЋЎЏБВВГ€В%БЏЎЌЉЈІЃ œš–“‰†‚€}zwusqomkihggeddcbb„a€`H__^^][[ZXVTROMKHEB@>;97432/.,+*)'&%$"!!&+17@HPYblu}…“™ЂІЉЋ­ЏА‚В#БАЏЌЋЉЇЄ š–“‹ˆ„}zwtqnligeda`^^\[[€ZƒY†ZDYYXWVTRPMLJGDA?=:7431/-,*)'&&%$#! $)06>FNXajt}„Œ’™ЁЅЉЋ­ЏАБ€В$БАЏ­ЌЉЇЄЁž›–“‹†‚zwtpligda^\ZYWVTSRQ†PQQR€STT€UBTTSSQPNMKHEB@=:8531/,+)'&&%$#"!!(/4=EMV`ir{ƒ‹‘—œЁЄЈЊЌЎЏА€Б%АЏЎЌЊЉІЂžœ˜“‹†‚}xuplhea^[YVSPNMKJHHGFƒEFGHHIJKK€MDNOOPPOONMLKHFDA@=:742/,*(&&$#"!! ,3:BLU^hqz‚А–œ ЄЇЉЌ­ЏЏ€А$ЏЏ­ЋЉЇЄ œ™”‹†‚|wrniea\YUQNLIFDB@?=<;…: ;==>@@ABDEFHHIƒKIHGEB@>;8530-*(&$#! €€29@JS[fow€ˆ•›žЃІЉЊЌЎ‚Џ%­ЌЉЈЅЂž›–Œ‡‚|vrlga\YSOLHDA><974321//.€-..//02234679;=>@ABCEEFEDB@?=:742.+)&$" …C6?GPZclu~†Ž“™ЁЅЈЉЋЌЎЎЏЎ­ЌЋЉЇЄ œ˜“Žˆ‚}wqke_ZUPKFB?:742/,*(&&$$#"##$$&&')*,.023579;=>@@A€BA@?=;8530-)&$"ƒ:52/+(&$! ƒ- !$%&)*,/13479:<==>>==;9742/,(&# BKT^gqy‚‰–›žЂЅЇЉЊЋ€Ќ$ЋЊЉЇЄЁœ˜“އztlf^YQLE@;72/*'$"€ƒ€!#%&),.0245789€:87531-*'$!†€€;HPZdmv†Ž“™œ ЄІЈЉЉЊЋЊЉЉЈЅЂžœ–‹„}voh`YRLE@:41,(%"‰'!#%&)+-/2345565432/,)&# ‹€MWajt|ƒ‹–›žЁЄЇЈ‚Љ!ЈЇЄЁ™”ˆ‚zskc[TMF@:40,'$!‚†‚!$&'),-/12 1/-+(%"ƒ…4S]gpxˆŽ“™œ ЂЄЇЇЈЉЉЈЇЅЃ œ˜“†€wog_XPHA;51,'$! "$&(*,-.€/ -,)&$!€ˆ‚Yclu}…‹‘–›žЁЃЄІЇІЄЁžœ–‘‹„}uld[SLE>72-($!’‚ !$&&)*+,,+)'&#€‹€/^hrz‚ˆ“˜œžЁЃЄЅІІЅЄЂ š–Š‚{sjbYPIA:4/)&"—!#%&'€( '&$!Ždmu~…‹•™œžЁЂЃ€ЄЃЁŸœ™”‰‚zri`WNF?82,'$ › !#$%€&$# ‚„ƒ irz‚ˆŽ’–šœž Ё€ЂЁ žœ˜“Žˆyqh^VMD=60*&"€Ÿ!"#$#"!€€ˆ*mu}„Š“—šœžŸ ЁЁ žœ›—“Žˆxpg]TKB<4/)%!€Ђ  €!‰€ qy€†Œ”˜šœžœ™–’އ€xpg]SKB:3-($ €Ѕ‚€ƒ€ƒ u|‚ˆŽ‘•˜š€œœœ›™–‘އxpg]SKB:3,'#€Ј €€… w„ŠŽ’•—™›€œ›™—”‡yqh^TKB:3,&"€Ћ€€‡€z€…‹’”–˜™˜–“‡‚zrh^ULB:3,&"€­‚€‰'|‚‡‹‘“––—˜—–•“Œˆ‚zsiaVMC;3,&"Б €€‚‚%}‚ˆ‹“”•––•“‘Œˆ‚|ulbYNE=4-'"Г€€€„€ƒˆ‹Ž‘“’‹ˆ‚}umdZPG>5/(#Е€€€‡€„ˆ‹Ž€‘Ž‹‡‚}wog]SJ@70)$З€€€€ €„‡ŠŒŽŽŠ‡‚~xqi`VMB:2*% Й‚€€€€€ƒ €ƒ†‰‹Œ€Ž‹‰†‚yskcYOE=3,&!Лƒ€€€€… €‚…ˆ‰‹Šˆ†‚€zumf\SI@6/'"Н…€€€€† €‚„†ˆˆ‰‰ˆ‡…‚€{uoh`VMB:2)$КAАРя€џяР‘q"€€ € € ‚ƒ…†‡‡†…„‚€{vqjcZPG=4,& €Ї„џР…2пŠџАa€€€ ƒ  }€‚‚„……„‚‚{wrlf^UKA80("Y„ƒc#Ј„џРƒ" џаP€€ „ }€‚‚€~{wtnhaYPF=3+PсџяЉ„џР‚qя’џ € … {}~€}{wuoid\TKA7/a…џЈ„џя •џЯ    y{}}~~}|zwuqlg_XOF=3+т†џQЇ…џ€ —џя@ € ‚ wyz€{zywurlhb[SKB8/}‡џ Ї…џ ™џЯ€  ƒ uwx€ywvurnid^XOG>4,Ї‡џпЇп„џ…џРQ€"Qа‰џЯ € ƒ uuvwwvutrnjfaZSLB:1(ФˆџЇР„џQяƒџ 2‡2Аˆџ~ € €  rs€utrqnkgc]WPH@6-&УˆџЇР„џя‚џпQ‹aя‡џ> €  pq€rqonkhd_ZSME<3*#†‡џРЇР‰џа"Aя†џП €  nonljhea[WPJA90' 9‡џЇРˆџа"Aя†џN ‚ klkiheb^YSMF?5-%Ђ…џп"ЇР‡џя2‘Q†џЎ € iijjiigeb^[VPKC<3*#%РƒџпAЈР‡џa“ †џ- € gghhggdb_[YSMH@91(!qРџџа"ЉР†џР”"я…џ~  d€edda_\ZVPKE?7/&АР†џa• …џЮ  a€baa^\ZWSNIB<4,$АР…џп–2†џ __`_^^[ZXTPLG@:2*#БР…џ —Я…џM €\]]\\[ZXURMJD?71(!БР…џq—€…џ} €‚ZYWUSOLHB=6/&Ž•џР‡Р…џ2—P…џž €W€XWVTRPMJE@;4-&•џР‡Р…џ˜!…џО €T€UTSRPMKHC?93,$•џР‡Р…џ˜…џо RQPOMKHEA=72*$•џР‡Р…џ˜Р…џ ONMMKIFC@;60)#•џР‡Р…џ˜Р…џ €L€MLKKIGDA>:4/("•џР‡Р…џ˜Р…џ IIJIIHHFEB@<83.'!•q‡Р…џ˜Р…џ ‚FEEDB@>:62,&!ГР…џ˜Р…џ ƒC BA@><941,& ГР…џ˜п„џО €…@ >=:730+&ГР…џ˜…џО €>=> ==<:852/)%ГР…џ˜1…џ €;€:€; ::8641-)$ВР…џ—`…џ| ‚788776420,($ВР…џ2–…џK €‚4€5 4431/+'$ВР…џQ–п…џ €ƒ233221/,*&#ВР…џ–A…џЮ //./ 00//-+)&"ВР…џп• …џ|,€+€,€- ,+)'%"БР†џq”!я…џ*‚)(''())* )(&$!БР†џп” …џО ‚&&€%€&'&%#!Qa"ЊР‡џ’P†џkƒ$#€!"#$%%&%%$"AпџяЉРˆџqAя…џо ƒ! !!"€#"!R…џЈР‰џqŽAа†џK„ р†џQЇРŠџŒQя†џ­ „€€q‡џ ЇР‹џпqˆ2 ‡џя… Ё‡џпЇР…џа„џпQ"QР‰џ; …‚РˆџЇР…џ2я™џm ††€РˆџЇР…џA˜џm †€ƒ€‡џРЇР…џqя”џяM ‡…‚‚A‡џЇР…џ€Aп’џЎ ˆˆ† …џп"ЇР…џ"џ п^ ˆ‹ƒ"РƒџпAЈР…џƒ2яŠџ Џ_ ‰‚‚„ƒqРџџа"ЉР…џ†AАаџпР`  Š€†„ДР…џŽ€  Š€ˆ„ВР…џ€  ‹‹„АР…џ€  Œ„‚ƒЏР…џŒ€  Œ€‡‚ƒ­Р…џ‹€  Œ‰ƒЌР…џŠ€  €‚ƒ‚ЋР…џ‰€  Ž€…ƒЉР…џˆ€  €€ˆ‚ЈР…џ‡€  ‡џƒ€€ ‚€‚ЇР…џ…  ˆџ‚€€€… €‚ЅР…џ„  ˆџџ‚€€ˆ €€‚ЄР…џƒ  ˆ€џ €ƒ  ‚ €€‚ЂР…џ€  ‰€џ € „  €€€ƒ Р…џ€  ‰џ€ €€ ˆ € €€€ƒžР…џ€  ‰‚џ€ €€ Š € €€€ƒœР…џ ‰ƒџ €€  „  € €ƒšР…џ€  Šƒџ €€ € ‡  € €€‚˜Р…џ€  Š„џ €€ € Š € € €€ƒ•Р…џ ‹…џ  €  „    €„ƒ€€  “  €€ € ˆ  € € €‚”€  •    € ‚ € ƒ €  € …‡ƒ€ •  € €   †  €   „‡„€€ –    € Š  € ‚  …„„ €  €–  € €  ‚ ‚ƒ   ƒ ‘  € €  €—  €   ˆ‚  ƒ   € € €˜  €€  € Œ‚ ƒ    €š €  € †„ƒ  ƒ €€€› ‚ ‹…Œ ƒ€  €‚‚  € €…†Œƒ‚Ÿ  €„€  €€Œ„Ђ  …€ €„ƒ’Ї  ‡€ €Т ˆ‚€ С Š‚€ €Р Œ‚€ €Н Ž‚€ €К ‚€ €И  €’‚€ €Д €†t8mk@ /QpІНбсюјўўјюсбНІpQ/ -]ŒИтџџџџџџџџџџџџџџџџџџџџџџтИŒ]-R‹УљџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџљУ‹RV˜иџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџи˜V<…ЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЬ…<TЃ№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№ЃT ^БџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБ^ XБџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБXEЂўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўЂE#„хџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџх„#YОџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџОY!ŠђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџђŠ!IЕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЕIkкџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџкk‡њџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџњ‡(žџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџž(6ЏџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏ6>КџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџК>AРџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРA>РџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџР>6КџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџК6(ЏџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏ(žџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџž‡џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‡kњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџњkIкџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџкI!ЕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЕ!ŠџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџŠYђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџђY#ОџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџО#„џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ„EхџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџхEЂџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЂXўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўX БџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБ ^џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ^БџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБTџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџTЃџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЃ<№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№<…џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ…ЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЬVџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџV˜џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ˜иџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиRџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџR‹џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‹УџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџУ-љџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџљ-]џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ]ŒџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџŒИџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџИ тџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџт /џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ/QџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџQpџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџpџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџІџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџІНџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџНбџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџбсџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџсюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџюјџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџјўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўјџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџјюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџюсџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџсбџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџбНџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџНІџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџІџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџpџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџpQџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџQ/џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ/ тџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџт ИџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџИŒџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџŒ]џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ]-љџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџљ-УџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџУ‹џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‹RџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџRиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџи˜џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ˜VџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџVЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЬ…џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ…<№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№<ЃџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЃTџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџTБџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБ^џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ^ БџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБ XўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўXЂџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЂEхџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџхE„џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ„#ОџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџО#YђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџђYŠџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџŠ!ЕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЕ!IкџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџкIkњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџњk‡џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‡žџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџž(ЏџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏ(6КџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџК6>РџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџР>AРџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРA>КџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџК>6ЏџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏ6(žџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџž(‡њџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџњ‡kкџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџкkIЕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЕI!ŠђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџђŠ!YОџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџОY#„хџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџх„#EЂўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўЂEXБџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБX ^БџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџБ^ TЃ№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ№ЃT<…ЬџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЬ…<V˜иџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџи˜VR‹УљџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџљУ‹R-]ŒИтџџџџџџџџџџџџџџџџџџџџџџтИŒ]- /QpІНбсюјўўјюсбНІpQ/ Printrun-printrun-2.0.0rc5/README.cleanup000066400000000000000000000041701325617007000201340ustar00rootroot00000000000000Some cleanup commands: To add a space after each comma: sed -e "s/\(\w\),\(\w\)/\1, \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\),\(\"\)/\1, \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\"\),\(\w\)/\1, \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\"\),\(\"\)/\1, \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\([)}\]]\),\(\w\)/\1, \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\([)}\]]\),\([\[{(]\)/\1, \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\),\([\[{(]\)/\1, \2/g" -i *.py printrun/*.py printrun/*/*.py To add spaces around each =: sed -e "s/\(\w\)=\(\w\)/\1 = \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\)=\(\"\)/\1 = \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\)=\((\)/\1 = \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\)=\((\)/\1 = \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\)=\([\[{(]\)/\1 = \2/g" -i *.py printrun/*.py printrun/*/*.py To add spaces around each ==: sed -e "s/\(\w\)==\(\w\)/\1 == \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\)==\(\"\)/\1 == \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\(\w\)==\((\)/\1 == \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\()\)==\(\w\)/\1 == \2/g" -i *.py printrun/*.py printrun/*/*.py sed -e "s/\()\)==\((\)/\1 == \2/g" -i *.py printrun/*.py printrun/*/*.py Obviously this is not a perfect solution, it WILL break the code. Juste check the diff and fix what's wrong before commiting. Flake8 checking: Flake8 can be used to check the coding style of the project. The current source code (as of July 23rd 2013) has been checked using the following command: flake8 . --statistics --count --ignore=E251,E701,E302,E501 --exclude=.svn,CVS,.bzr,.hg,.git,__pycache__,./printrun/cairosvg This call ignores 4 kind of errors (E501: line being greater than 80 chars, E701: multiple statements on one line (usually this is if ...: ...), E302: wrong number of blank lines between functions, E251: unexpected spaces around keywoard/parameter equals), the rest of the errors and warnings should be killed as much as possible. Long lines should be avoided too. Printrun-printrun-2.0.0rc5/README.i18n000066400000000000000000000030351325617007000172630ustar00rootroot00000000000000 Printrun Internationalization Date: 06 August 2011 Author: Jonathan Marsden Printrun is in the very early stages of being internationalized. The pronterface.py now uses gettext for the messages it generates. The corresponding pronterface.pot file is at locale/pronterface.pot and was generated using pygettext -o locale/pronterface.pot *.py printrun/*.py printrun/*/*.py followed by minor edits to the generated header. This template is the basis for all pronterface mesage catalogs. Right now there is only one, for German. New ones can be created: # Create new pronterface message catalog for a different language newlang="es" # use the correct code for your language mkdir -p locale/${newlang}/LC_MESSAGES cp locale/pronterface.pot locale/${newlanguage}/LC_MESSAGES/pronterface.po cd locale/${newlanguage}/LC_MESSAGES/ # Edit the .po file to add messages for newlang msgfmt -o pronterface.mo pronterface.po To update a previously created message catalog from the template, use : msgmerge -U locale/fr/LC_MESSAGES/pronterface.po locale/pronterface.pot As currently coded, the default location for these message catalogs is /usr/share/pronterface/locale/ So, to install the catalogs, copy them to there: sudo cp -a locale /usr/share/pronterface/ To test pronterface in a new language, you can temporarily set LANG to the language you are testing, for example LANG=de python pronterface.py Further automation for localization and packaging of Printrun would be nice to see, but is not here yet. Printrun-printrun-2.0.0rc5/README.md000066400000000000000000000456571325617007000171240ustar00rootroot00000000000000# PRINTRUN 2.X This branch holds the development of Printrun 2.x. This new version of Printrun supports Python 3 and wxPython 4 and will become the master branch in the future. All new features and developments should be merged to it. Printrun consists of printcore, pronsole and pronterface, and a small collection of helpful scripts. * printcore.py is a library that makes writing reprap hosts easy * pronsole.py is an interactive command-line host software with tabcompletion goodness * pronterface.py is a graphical host software with the same functionality as pronsole # GETTING PRINTRUN This section suggests using precompiled binaries, this way you get everything bundled into one single package for an easy installation. If you want the newest, shiniest features, you can run Printrun from source using the instructions further down this README. ## Windows A precompiled version is available at http://koti.kapsi.fi/~kliment/printrun/ ## Mac OS X A precompiled version is available at http://koti.kapsi.fi/~kliment/printrun/ Note for OSX users: if OSX tells you the file is corrupted, you don't need to redownload it. Instead, you need to allow OSX to run unsigned apps. To do this, run `sudo spctl --master-disable` ## Linux ### Ubuntu/Debian There is currently no package for Printrun 2. It must be [run from source](https://github.com/kliment/Printrun/tree/2.x#running-from-source). ### Chrome OS You can use Printrun via crouton ( https://github.com/dnschneid/crouton ). Assuming you want Ubuntu Trusty, you used probably `sudo sh -e ~/Downloads/crouton -r trusty -t xfce` to install Ubuntu. Fetch and install printrun with the line given above for Ubuntu/Debian. By default you have no access to the serial port under Chrome OS crouton, so you cannot connect to your 3D printer. Add yourself to the serial group within the linux environment to fix this `sudo usermod -G serial -a ` where `` should be your username. Log out and in to make this group change active and allow communication with your printer. ### Fedora You can install Printrun from official packages. Install the whole package using `sudo dnf install printrun` Or get only apps you need by `sudo dnf install pronsole` or `pronterface` or `plater` Adding `--enablerepo updates-testing` option to `dnf` might sometimes give you newer packages (but also not very tested). ### Archlinux Packages are available in AUR. Just run `yaourt printrun` and enjoy the `pronterface`, `pronsole`, ... commands directly. ## RUNNING FROM SOURCE Run Printrun for source if you want to test out the latest features. ### Dependencies To use pronterface, you need: * Python 3 (ideally 3.6), * pyserial (or python3-serial on ubuntu/debian) * pyreadline (not needed on Linux) * wxPython 4 * pyglet * numpy (for 3D view) * pycairo (to use Projector feature) * cairosvg (to use Projector feature) * dbus (to inhibit sleep on some Linux systems) ### Use Python virtual environment Easiest way to run Printrun from source is to create and use a Python [virtual environment](https://docs.python.org/3/tutorial/venv.html). The following section assumes Linux. Please see specific instructions for Windows and macOS X below. **Ubuntu/Debian note:** You might need to install `python3-venv` first. **Note:** wxPython4 doesn't have Linux wheels available from the Python Package Index yet. Find a proper wheel for your distro at [extras.wxpython.org](https://extras.wxpython.org/wxPython4/extras/linux/gtk3/) and substitute the link in the bellow example. You might skip the wheel installation, but that results in compiling wxPython4 from source, which can be time and resource consuming and might fail. ```console $ git clone https://github.com/kliment/Printrun.git # clone the repository $ python3 -m venv venv # create an virtual environment $ . venv/bin/activate # activate the virtual environment (notice the space after the dot) (venv) $ python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/fedora-27/wxPython-4.0.1-cp36-cp36m-linux_x86_64.whl # replace the link with yours (venv) $ python -m pip install -r requirements.txt # intall the rest of dependencies (venv) $ python pronterface.py # run Pronterface ``` ### Cython-based G-Code parser Printrun default G-Code parser is quite memory hungry, but we also provide a much lighter one which just needs an extra build-time dependency (Cython), plus compiling the extension with: ```console (venv) $ python -m pip install Cython (venv) $ python setup.py build_ext --inplace ``` The warning message WARNING:root:Memory-efficient GCoder implementation unavailable: No module named gcoder_line means that this optimized G-Code parser hasn't been compiled. To get rid of it and benefit from the better implementation, please install Cython and run the command above. ### Ubuntu/Debian The above method is the recommended way to run Printrun 2 from source. However, if you can't find a suitable wxPython4 wheel, or if it fails for other reasons, it could be run without using a python virtual environment. For users of Debian 10 Buster or later and Ubuntu 18.04 Bionic Beaver or later. Install the dependencies: ``` sudo apt install python3-serial python3-numpy cython3 python3-libxml2 python3-gi python3-dbus python3-psutil python3-cairosvg libpython3-dev python3-appdirs python3-wxgtk4.0 ``` ``` sudo apt install python3-pip pip3 install --user pyglet ``` Install git, clone this repository and checkout the 2.x branch: ``` sudo apt install git git clone https://github.com/kliment/Printrun.git cd Printrun && git checkout -b 2.x origin/2.x ``` ### Windows Download and install [Python 3.6](https://www.python.org/downloads/) and follow the **Python virtual environment** section above except use the following to create and activate the virtual environment and install dependencies: ```cmd > py -3 -m venv venv > venv\Scripts\activate > python -m pip install -r requirements.txt ``` ### macOS X Install Python 3, you can use Brew: ```console $ brew install python3 ``` And follow the above **Python virtual environment** section. You don't need to search for wxPython wheel, macOS wheels are available from the Python Package Index. # USING PRINTRUN ## USING PRONTERFACE When you're done setting up Printrun, you can start pronterface.py in the directory you unpacked it. Select the port name you are using from the first drop-down, select your baud rate, and hit connect. Load an STL (see the note on skeinforge below) or GCODE file, and you can upload it to SD or print it directly. The "monitor printer" function, when enabled, checks the printer state (temperatures, SD print progress) every 3 seconds. The command box recognizes all pronsole commands, but has no tabcompletion. If you want to load stl files, you need to install a slicing program such as Slic3r or Skeinforge and add its path to the settings. #### Slic3r integration To invoke Slic3r directly from Pronterface your slicing command (_Settings_ > _Options_ > _External Commands_ > _Slice Command_) should look something like `slic3r $s -o $o`. If Slic3r is properly installed "slic3r" will suffice, otherwise, replace it with the full path to Slic3r's executable. If the Slic3r integration option (_Settings_ > _Options_ > _User interface_ > _Enable Slic3r integration_) is checked a new menu will appear after application restart which will allow you to choose among your previously saved Slic3r Print/Filament/Printer settings. ## USING PRONSOLE To use pronsole, you need: * Python 3 (ideally 3.6), * pyserial (or python3-serial on ubuntu/debian) and * pyreadline (not needed on Linux) Start pronsole and you will be greeted with a command prompt. Type help to view the available commands. All commands have internal help, which you can access by typing "help commandname", for example "help connect" If you want to load stl files, you need to put a version of skeinforge (doesn't matter which one) in a folder called "skeinforge". The "skeinforge" folder must be in the same folder as pronsole.py ## USING PRINTCORE To use printcore you need Python 3 (ideally 3.6) and pyserial (or python3-serial on ubuntu/debian) See pronsole for an example of a full-featured host, the bottom of printcore.py for a simple command-line sender, or the following code example: ```python #to send a file of gcode to the printer from printrun.printcore import printcore from printrun import gcoder p=printcore('/dev/ttyUSB0',115200) # or p.printcore('COM3',115200) on Windows gcode=[i.strip() for i in open('filename.gcode')] # or pass in your own array of gcode lines instead of reading from a file gcode = gcoder.LightGCode(gcode) p.startprint(gcode) # this will start a print #If you need to interact with the printer: p.send_now("M105") # this will send M105 immediately, ahead of the rest of the print p.pause() # use these to pause/resume the current print p.resume() p.disconnect() # this is how you disconnect from the printer once you are done. This will also stop running prints. ``` ## PLATERS Printrun provides two platers: a STL plater (```plater.py```) and a G-Code plater (```gcodeplater.py```). ## 3D VIEWER CONTROLS When the 3D viewer is enabled, the controls are the following: - Mousewheel: zoom (Control reduces the zoom change steps) - Shift+mousewheel: explore layers (in print gcode view ; Control key makes layer change by increments of 10 instead of 1) or rotate object (in platers) - Left-click dragging: rotate view - Right-click dragging: pan view - Shift + left-click dragging: move object (in platers) - Page up/down keys: zoom (Control reduces the zoom change steps) - Up/down keys: explore layers - R key: reset view - F key: fit view to display entire print - C key: toggle "display current layer only" mode (in print gcode view) ## RPC SERVER ```pronterface``` and ```pronsole``` start a RPC server, which runs by default on localhost port 7978, which provides print progress information. Here is a sample Python script querying the print status: ```python import xmlrpc.client rpc = xmlrpc.client.ServerProxy('http://localhost:7978') print(rpc.status()) ``` ## CONFIGURATION ### Build dimensions Build dimensions can be specified using the build_dimensions option (which can be graphically edited in Pronterface settings). This option is formed of 9 parameters: 3 for the build volume dimensions, 3 for the build volume coordinate system offset minimum, 3 for the endstop positions. The default value is `200x200x100+0+0+0+0+0+0`, which corresponds to a 200x200mm (width x height) bed with 100mm travel in Z (there are the first three numbers) and no offset. The absolute coordinates system origin (0,0,0) is at the bottom left corner on the bed surface, and the top right corner on the bed surface is (200,200,0). A common practice is to have the origin of the coordinate system (0,0,0) at the center of the bed surface. This is achieved by using the next three parameters, for instance with `200x200x100-100-100+0+0+0+0`. In this case, the bottom left corner of the bed will be at (-100,-100,0) and the top right one at (100,100,0). These two sets of settings should be sufficient for most people. However, for some specific complicated setups and GCodes and some features, we might also need the endstops positions for perfect display. These positions (which are usually 0,0,0, so if you don't know you probably have a standard setup) are specified in absolute coordinates, so if you have your bed starting at (-100,-100,0) and your endstops are 10mm away from the bed left and right and the Z endstop 5mm above the bed, you'll want to set the endstops positions to (-110,-110,5) for this option. ## USING MACROS AND CUSTOM BUTTONS ### Macros in pronsole and pronterface To send simple G-code (or pronsole command) sequence is as simple as entering them one by one in macro definition. If you want to use parameters for your macros, substitute them with {0} {1} {2} ... etc. All macros are saved automatically immediately after being entered. Example 1, simple one-line alias: ```python PC> macro where M114 ``` Instead of having to remember the code to query position, you can query the position: ```python PC> where X:25.00Y:11.43Z:5.11E:0.00 ``` Example 2 - macros to switch between different slicer programs, using "set" command to change options: ```python PC> macro use_slicer Enter macro using indented lines, end with empty line ..> set sliceoptscommand Slic3r/slic3r.exe --load slic3r.ini ..> set slicecommand Slic3r/slic3r.exe $s --load slic3r.ini --output $o Macro 'use_slicer' defined PC> macro use_sfact ..> set sliceoptscommand python skeinforge/skeinforge_application/skeinforge.py ..> set slicecommand python skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py $s Macro 'use_sfact' defined ``` Example 3, simple parametric macro: ```python PC> macro move_down_by Enter macro using indented lines, end with empty line ..> G91 ..> G1 Z-{0} ..> G92 ..> ``` Invoke the macro to move the printhead down by 5 millimeters: ```python PC> move_down_by 5 ``` For more powerful macro programming, it is possible to use python code escaping using ! symbol in front of macro commands. Note that this python code invocation also works in interactive prompt: ```python PC> !print("Hello, printer!") Hello printer! PC> macro debug_on !self.p.loud = 1 Macro 'debug_on' defined PC> debug_on PC> M114 SENT: M114 X:0.00Y:0.00Z:0.00E:0.00 Count X:0.00Y:0.00Z:0.00 RECV: X:0.00Y:0.00Z:0.00E:0.00 Count X:0.00Y:0.00Z:0.00 RECV: ok ``` You can use macro command itself to create simple self-modify or toggle functionality: Example: swapping two macros to implement toggle: ```python PC> macro toggle_debug_on Enter macro using indented lines, end with empty line ..> !self.p.loud = 1 ..> !print("Diagnostic information ON") ..> macro toggle_debug toggle_debug_off ..> Macro 'toggle_debug_on' defined PC> macro toggle_debug_off Enter macro using indented lines, end with empty line ..> !self.p.loud = 0 ..> !print("Diagnostic information OFF") ..> macro toggle_debug toggle_debug_on ..> Macro 'toggle_debug_off' defined PC> macro toggle_debug toggle_debug_on Macro 'toggle_debug' defined ``` Now, each time we invoke "toggle_debug" macro, it toggles debug information on and off: ```python PC> toggle_debug Diagnostic information ON PC> toggle_debug Diagnostic information OFF ``` When python code (using ! symbol) is used in macros, it is even possible to use blocks/conditionals/loops. It is okay to mix python code with pronsole commands, just keep the python indentation. For example, following macro toggles the diagnostic information similarily to the previous example: ```python !if self.p.loud: !self.p.loud = 0 !print("Diagnostic information OFF") !else: !self.p.loud = 1 !print("Diagnostic information ON") ``` Macro parameters are available in '!'-escaped python code as locally defined list variable: arg[0] arg[1] ... arg[N] All python code is executed in the context of the pronsole (or PronterWindow) object, so it is possible to use all internal variables and methods, which provide great deal of functionality. However the internal variables and methods are not very well documented and may be subject of change, as the program is developed. Therefore it is best to use pronsole commands, which easily contain majority of the functionality that might be needed. Some useful python-mode-only variables: ```python !self.settings - contains all settings, e.g. port (!self.settings.port), baudrate, xy_feedrate, e_feedrate, slicecommand, final_command, build_dimensions You can set them also via pronsole command "set", but you can query the values only via python code. !self.p - printcore object (see USING PRINTCORE section for using printcore object) !self.cur_button - if macro was invoked via custom button, the number of the custom button, e.g. for usage in "button" command !self.gwindow - wx graphical interface object for pronterface (highly risky to use because the GUI implementation details may change a lot between versions) ``` Some useful methods: ```python !self.onecmd - invokes raw command, e.g. !self.onecmd("move x 10") !self.onecmd("!print self.p.loud") !self.onecmd("button "+self.cur_button+" fanOFF /C cyan M107") !self.project - invoke Projector ``` ## USING HOST COMMANDS Pronsole and the console interface in Pronterface accept a number of commands which you can either use directly or inside your G-Code. To run a host command from inside a G-Code, simply prefix it with `;@`. List of available commands: - `pause`: pauses the print until the user resumes it - `run_script scriptname [arg1 ...]`: runs a custom script or program on the host computer. This can for instance be used to produce a sound to warn the user (e.g. `run_script beep -r 2` on machines were the `beep` util is available), or to send an email or text message at the end of a print. The $s token can be used in the arguments to get the current gcode file name - `run_gcode_script scripname [arg1 ...]`: same as `run_script`, except that all lines displayed by the script will be interpreted in turn (so that G-Code lines will be immediately sent to the printer) - `shell pythoncommand`: run a python command (can also be achieved by doing `!pythoncommand`) - `set option value`: sets the value of an option, e.g. `set mainviz 3D` - `connect` - `block_until_online`: wait for the printer to be online. For instance you can do `python pronsole.py -e "connect" -e "block_until_online" -e "upload object.gcode"` to start pronsole, connect for the printer, wait for it to be online to start uploading the `object.gcode` file. - `disconnect` - `load gcodefile` - `upload gcodefile target.g`: upload `gcodefile` to `target.g` on the SD card - `slice stlfile`: slice `stlfile` and load the produced G-Code - `print`: print the currently loaded file - `sdprint target.g`: start a SD print - `ls`: list files on SD card - `eta`: display remaining print time - `gettemp`: get current printer temperatures - `settemp`: set hotend target temperature - `bedtemp`: set bed target temperature - `monitor`: monitor printer progress during a print - `tool K`: switch to tool K - `move xK`: move along `x` axis (works with other axes too) - `extrude length [speed]` - `reverse length [speed]` - `home [axis]` - `off`: turns off fans, motors, extruder, heatbed, power supply - `exit` # LICENSE ``` Printrun 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. Printrun is distributed in the hope that it will 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 Printrun. If not, see . ``` All scripts should contain this license note, if not, feel free to ask us. Please note that files where it is difficult to state this license note (such as images) are distributed under the same terms. Printrun-printrun-2.0.0rc5/TODO000066400000000000000000000006541325617007000163210ustar00rootroot00000000000000* [ ] Rework gcview zooming/rotation/move behavior * [ ] Improve stlview * [x] Add tool to select gcode area to ignore * [ ] Add calibration helper * [ ] Improve tabbed mode for wx 2.8 ? (the main toolbar is not wrapping as in 2.9) - [ ] Review all settings long help - [ ] Make heavy 3D viz work - [ ] Add speed slider - [ ] Fix code injection - [ ] Improve gcode plater - [ ] Check what happens for layer switch for 2D viewer Printrun-printrun-2.0.0rc5/auth.config000066400000000000000000000000451325617007000177530ustar00rootroot00000000000000[user] user = admin pass = passwordPrintrun-printrun-2.0.0rc5/buildinstructions.txt000066400000000000000000000027331325617007000221560ustar00rootroot00000000000000setup on osx: (install python 3.6) (install python extension compile environment, this is automagically done if you have xcode) (install git) git clone http://github.com/kliment/Printrun.git cd Printrun git checkout 2.x git pull python3 -m venv v3 . ./v3/bin/activate pip install --upgrade pip pip install --upgrade setuptools pip install cffi pip install -r requirements.txt pip install cython python setup.py build_ext --inplace for running: python pronterface.py for packaging: pip install pyinstaller pyi-makespec -F --add-data images/\*:images --add-data \*.png:. --add-data \*.ico:. -w -i P-face.icns pronterface.py rm -rf dist pyinstaller --clean pronterface.spec -y (edit .plist file to add: NSAppSleepDisabled ) (optional) codesign -s identityname dist/pronterface.app --deep setup on windows: (install python 3.6) (install python extension compile environment, see https://wiki.python.org/moin/WindowsCompilers ) (install git) git clone http://github.com/kliment/Printrun.git cd Printrun git checkout 2.x git pull \path\to\python3\python -m venv v3 v3\Scripts\activate pip install --upgrade pip pip install --upgrade setuptools pip install cffi pip install -r requirements.txt pip install cython python setup.py build_ext --inplace for running: python pronterface.py for packaging: pip install pyinstaller pyi-makespec -F --add-data images/*;images --add-data *.png;. --add-data *.ico;. -w -i pronterface.ico pronterface.py pyinstaller --clean pronterface.spec -y Printrun-printrun-2.0.0rc5/calibrateextruder.py000077500000000000000000000120141325617007000217100ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . # Interactive RepRap e axis calibration program # (C) Nathan Zadoks 2011 s = 300 # Extrusion speed (mm/min) n = 100 # Default length to extrude m = 0 # User-entered measured extrusion length k = 300 # Default amount of steps per mm port = '/dev/ttyUSB0' # Default serial port to connect to printer temp = 210 # Default extrusion temperature tempmax = 250 # Maximum extrusion temperature t = int(n * 60) / s # Time to wait for extrusion try: from printdummy import printcore except ImportError: from printcore import printcore import time import getopt import sys import os def float_input(prompt=''): f = None while f is None: s = input(prompt) try: f = float(s) except ValueError: sys.stderr.write("Not a valid floating-point number.\n") sys.stderr.flush() return f def wait(t, m=''): sys.stdout.write(m + '[' + (' ' * t) + ']\r' + m + '[') sys.stdout.flush() for i in range(t): for s in ['|\b', '/\b', '-\b', '\\\b', '|']: sys.stdout.write(s) sys.stdout.flush() time.sleep(1.0 / 5) print() def w(s): sys.stdout.write(s) sys.stdout.flush() def heatup(p, temp, s = 0): curtemp = gettemp(p) p.send_now('M109 S%03d' % temp) p.temp = 0 if not s: w("Heating extruder up..") f = False while curtemp <= (temp - 1): p.send_now('M105') time.sleep(0.5) if not f: time.sleep(1.5) f = True curtemp = gettemp(p) if curtemp: w("\rHeating extruder up.. %3d \xb0C" % curtemp) if s: print() else: print("\nReady.") def gettemp(p): try: p.logl except: setattr(p, 'logl', 0) try: p.temp except: setattr(p, 'temp', 0) for n in range(p.logl, len(p.log)): line = p.log[n] if 'T:' in line: try: setattr(p, 'temp', int(line.split('T:')[1].split()[0])) except: print(line) p.logl = len(p.log) return p.temp if not os.path.exists(port): port = 0 # Parse options help = """ %s [ -l DISTANCE ] [ -s STEPS ] [ -t TEMP ] [ -p PORT ] -l --length Length of filament to extrude for each calibration step (default: %d mm) -s --steps Initial amount of steps to use (default: %d steps) -t --temp Extrusion temperature in degrees Celsius (default: %d \xb0C, max %d \xb0C) -p --port Serial port the printer is connected to (default: %s) -h --help This cruft. """[1:-1].encode('utf-8') % (sys.argv[0], n, k, temp, tempmax, port if port else 'auto') try: opts, args = getopt.getopt(sys.argv[1:], "hl:s:t:p:", ["help", "length=", "steps=", "temp=", "port="]) except getopt.GetoptError as err: print(str(err)) print(help) sys.exit(2) for o, a in opts: if o in ('-h', '--help'): print(help) sys.exit() elif o in ('-l', '--length'): n = float(a) elif o in ('-s', '--steps'): k = int(a) elif o in ('-t', '--temp'): temp = int(a) if temp >= tempmax: print(('%d \xb0C? Are you insane?'.encode('utf-8') % temp) + (" That's over nine thousand!" if temp > 9000 else '')) sys.exit(255) elif o in ('-p', '--port'): port = a # Show initial parameters print("Initial parameters") print("Steps per mm: %3d steps" % k) print("Length extruded: %3d mm" % n) print() print("Serial port: %s" % (port if port else 'auto')) p = None try: # Connect to printer w("Connecting to printer..") try: p = printcore(port, 115200) except: print('Error.') raise while not p.online: time.sleep(1) w('.') print(" connected.") heatup(p, temp) # Calibration loop while n != m: heatup(p, temp, True) p.send_now("G92 E0") # Reset e axis p.send_now("G1 E%d F%d" % (n, s)) # Extrude length of filament wait(t, 'Extruding.. ') m = float_input("How many millimeters of filament were extruded? ") if m == 0: continue if n != m: k = (n / m) * k p.send_now("M92 E%d" % int(round(k))) # Set new step count print("Steps per mm: %3d steps" % k) # Tell user print('Calibration completed.') # Yay! except KeyboardInterrupt: pass finally: if p: p.disconnect() Printrun-printrun-2.0.0rc5/custombtn.txt000066400000000000000000000012351325617007000204040ustar00rootroot00000000000000btns=[ ###Defining custom buttons for pronterface is easy. Here's how. ###Below these instructions, add a line with the following format for each button # ["button name","command",color(RGB)], <--That comma is important, do not forget it ###As an example: (Remove the # to try it out): #["Read temp","M105",(200,100,100)], #["Disable Axes","M84",(400,100,100)], ###You can use gcodes or any pronsole/pronterface commands ###The first four buttons will end up at the top of the window, visible in mini mode ###The rest of the buttons will be at the bottom under the gcode preview ###ADD BUTTON DEFINITIONS BELOW THIS LINE ###ADD BUTTON DEFINITIONS ABOVE THIS LINE ] Printrun-printrun-2.0.0rc5/dot.pronsolerc.example000066400000000000000000000010711325617007000221530ustar00rootroot00000000000000# Sample .pronsolerc file - copy this into your home directory and rename it to .pronsolerc !print "Loaded " + self.rc_filename macro fan !global _fan !if '_fan' in globals() and _fan: !_fan = 0 M107 !if hasattr(self,"cur_button") and self.cur_button is not None: !self.onecmd('button %d "fan (off)" /c green fan' % self.cur_button) !else: !_fan = 1 M106 !if hasattr(self,"cur_button") and self.cur_button is not None: !self.onecmd('button %d "fan (on)" /c yellow fan' % self.cur_button) button 0 "fan (off)" /c "green" fan Printrun-printrun-2.0.0rc5/gcodeplater.py000077500000000000000000000015771325617007000205040ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import sys import wx from printrun.gcodeplater import GcodePlater if __name__ == '__main__': app = wx.App(False) main = GcodePlater(filenames = sys.argv[1:]) main.Show() app.MainLoop() Printrun-printrun-2.0.0rc5/images/000077500000000000000000000000001325617007000170715ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/images/arrow_down.png000066400000000000000000000022161325617007000217610ustar00rootroot00000000000000‰PNG  IHDRрw=ј+tEXtCreation TimeMo 17 Feb 2003 19:07:03 +0100–ј2tIMEд!ЊэЩ pHYs № №BЌ4˜gAMAБ ќaцIDATxкНUKlU=ѓžЧŽгO*‡Š€  •к,ЪJ•‚B,XАaЫи!ЈTAaг5 БfЄ€(ДЈiSD$h …ˆ4išЊЉ!vbЧŸкžк3žyѓ8ЯvˆХљlxђ™БfцsяЙїЮXиxYиквл#8zaўтd4?аКХЁЕтŸ? ).№ыыOђк2с­GYW`t8НыЕ‹§/Мјv† N"_ Аф(ф2)дn-й—Йу;baы 1фжН;$–Ыwq}ЩCБЂрx ŠСk!`љ>„%Р”іёљоnu€ ILZ(9!юд4ьˆ…$ ”FРmТЖр ЫШЖежzЕш*‰HDЃq–Ёзš{% }zP‹e№7i„ЎЖMrоS$f3HR@33Е€f6[]ЄˆР&QŒbа$‹-eЫ"ЭKЙywЏЩc‘6š-‹š"ЌOШšXbћќ’$q”ш1BQйь+c‘!Зi‘25жк}+gН*№Іг‡rю$jХ]Јspќ:P-юЌЛA“РЧ9S!эЂ%Т#g `&ŠЈfцM<ЗZbLeXdšœrœк•пЧэ3ф§‹(Щf3ŸeЪи›О^ъ{юаўd$[ёс6Њ  тr’™А$ƒqФтСDеГ;AmЈZ2Ќуъ”sЗ6іючШќф№і‘!ВmU€…БT9м“ŸЋ'Ž  ШЩЫЎbдЋф‚чжTЩцœ4ŠiNtгžыŒО§ x{œИFTM-dGQ§ЗŒˆ0.asјМRТ+a|&№Ъ?ОѓђWs|њ"ё;QDѓЅиstˆИXИ4W№Ъ)?yxx()|Оф,гЂвdСШэмтЌzІuЃpіи)ф./ЗЩы$_+а!2v#ЏЌІ‚ћшju ДЃЈгэ,см4ќьЧOaq<Я›cФТXЄюиufУˆдёїшœЌe№Р3GюЁАсфгPх№§ŒЄЯМ7Т@VШMзфз’wш9?ЛhэѓnUфгХГ–rr8=SѓЇ?Aъœ‰іqЙљFЋ"ѓggr=‡T=>№дlСжзО>9‚›п;ШsнШяy5lАЬы$‰ч?y Ы“ЛёЧЇNЛi“mоъGН%<оЮlšШnFО‘•Ocm+фџЫњ2QЗgUз–IENDЎB`‚Printrun-printrun-2.0.0rc5/images/arrow_keys.png000066400000000000000000000020351325617007000217640ustar00rootroot00000000000000‰PNG  IHDR!t‘” pHYs  šœЯIDATH ХVнOTGџЭьъnYсAXС” ›–†70БAуV ‹ђ БЏк№Rb$$4эiТSгјР? 1!‘…ЧЦm#U!…нјI–Єв„‡"›P‘Џн;Ю™нЙо;\З‹ІщIюЮљžпž9gюeBќпфп)€ПN4FЌ,N Ц+ЬX&ЌUpп­Шэ;)гVHf;ЉФŸЧ|aYb‚I9~ˆLмћОгV4ˆйиБb#ѓ;?нЕŸР’G™^[CyI‰Ъ™}ёџќ’"“a~ЮзLм}рмьm|бЧ!6Вэ9MЈќё‚Ъ7>>ŽЉЉ)|зѓѕ›ќBА•Ћ?!#pJ*‹СпDџ ט:‚нЕЕЪбВ, #™LbqqбіUф[%яo 0Хƒ0’ац ШfГ Œaо‘јN tєNf5ДОиѕ@ш*шMоЗ;AAН`вћTЃшщ`Жшn]~Е†ццfƒ’—––А?НЌxd<<”.Я>;к!>…Wg3qFŽ(ТЁtttxЄЪЉVž~џ!VWWбжжІzˆsЧ H{њђ%‹…) gЩї€Ўmоппоо^ —9їKЩ(БIБX UUU.5]fшъъТииш~q’риEВЋ1џeџYnNџМ555addФЎUС ˜ЮЁСP љ2ŽШQ# рї#ШсV€ЬjxUС+œrƒAp#ПЋеђЬћОљsssRgџЖя ] zyЊ‰D"hooG4Uив3O]] ДЅІІ}}}.0кІW]щщщmН }ЬЭЕо\s „и ƒнь$'˜ввRЇIёT K/ъююF]]—Щжб-L‚сч<•‘ѓЛ’ИJCЭф}a;S&ŸЭќCВ“Ј{вNEžЏ$§Щэ9!/oќЊєŒ‹П‰qм˜ƒВi;ЗG§7 ўQАМ2jп˜zљ%нœЭВFЯw‡v2V.П| Ua‘ЩџЭФ“HiyзЎЉ6x p‹™мdPaIENDЎB`‚Printrun-printrun-2.0.0rc5/images/arrow_up.png000066400000000000000000000020301325617007000214300ustar00rootroot00000000000000‰PNG  IHDRрw=јsRGBЎЮщbKGDџџџ НЇ“ pHYs № №BЌ4˜tIMEм!„Ta˜IDATHЧЕ–лk\U‡ПsЮфжЄ“Є5­І‘Hвд†’H$ECЋѕЁh›–‚‚ …B*ZёAPJ рхAPњЂџ€ƒЈЏЂо05к\d.1“™ЩdЮœ}Yл‡9І’‰К`s6ьГпоkэНж†џйМ:ўMт~0{™д!о ŒG€0nђ_ЊтчnПNђС1вп…7і і оУЙO_=ѕФјнŒІвЙ%жэ‰]ДЛЫэ=œ§xfdbќЭщОД­фЅOЯЅг lЬwzЧN\=€шцєзЦžОјжщу>p?ЅШЃПeнOuL RЫ КC*Е С=ФЛ8§оеg/О;s~ Шl(ЖBЭэ„кёp[оOu<9\J-.ВЙќ †ј}LЬО4|цвЭWžLdѓТHЃEˆДХkN*Cr+H%ЇŽ•Sѓ‹”ўьЂZ`—јa&nО8xцђьЬ…Ё†Еˆ0в(qDкЁЌE)ЉB"ЭCэaNN UVч–(Џж„l|руoПа?yљжѕ УkyХVЄбжЁŒCA‡6–ŠhN†Š:T"{pr0Z§y™0г<П йДrjіJпФє‡зЏŒ4­"|gшlёбF(FC"qh+hыpЭI*•оN“ШЖNшьмя”г­@Ш:<.}ёLпШшgЏ=ВХCg4%`рP@ОlШ-Ц ЪVХxVцqMI”в(­щэinЬЕNщrс+ђѓ`Јxм(ЕSШОO9wА:„Э\[зЃ}Яоzљ$w3!ѓ…р0V0ж!4P\љ‰Й;E wя|MћР:-]†„я6љё“Y–>Я:СGmркюфзђиwbХ)KhЄ*n,m=ќD~xчр6№лŽуvІj xжЪ+DЪ‚s1@0О‡АтvЯsЕrMM+D&nZb€`тЏ2'ВЇLYгЌTЋЕ‹‚‡Ж‹!0жэ ЕUѕCеEк ЅЮў‹SНЕЁ2”ЕQы0H5U€л@DˆЌЃГЭЇЃф‘+ ЅHАтpОAk‡TƒlcˆЋрћxЌlYZ›8vЄщq”Œ№зІ!]ВdЗ'ФEЇŽЂџд—}шдЗ Д pёГе)Ž АЈ |sѕq`-NtuП*іњъИgўGh*ƒ~~ ВIENDЎB`‚Printrun-printrun-2.0.0rc5/images/control_mini.png000066400000000000000000000316471325617007000223060ustar00rootroot00000000000000‰PNG  IHDRttTš'sBIT|dˆ pHYs А А}eYњtEXtSoftwarewww.inkscape.org›ю< IDATxœн}w|еЙіsfgЖhUvеЌц•%Ы’%й–‹,cƒmŠС4CB —pIB BЪх†š $_рBBh)\JЈІ:lмБe[В$KВšU­ОEвJкн)чћcfvgWЛвЊ№}П‘іœ9§™ЗœN(Ѕ%B ѕšшЋM+žNыzб0р­_ ŸЎьџ…zљыІжЈLЂy˜їщ@4ТзхtЎ—тіƒJ(Ѕ~0/Ир‚‹%Ib$I"Ђ(ъдпJXхЕППL"„ап”aъrЙšjjjFHЅЅЅF‹Х’O)%’$ЅNЇsН†!ƒЊ>~PYmыѕњУ_`ЙOB.А €h6›‹ŒFуў/ЛLsA У\Й^QёіƒЪjE­$I ,ЪKAЮ‚DйSMI F‚"ќHHр@ZкXЪп9т‹жV;Žеѕ‚чy#^ŒѓŒ0Іц&ЃQ+IфпкЖеИ е~D ?о?Ž‘N7|>Ÿ€€OyќЂ—BXL€ˆЂШ@Nv"6œ™Ћр@д<ƒ2Sпќ'wOŒ9­йаЮнЭ8Vз ŸЯg‚ ЈŽчy=RєH(ŒŸ}&3 Ђ€ЈГ"‘ыxоэЈubЄг žчеzЮ” EЕ€2*‡RPь& B(•^бЙŠ›*џ‰^k{Л'Ц v‡†- ‚`€‚РЭ>Х™QИЉAѓЛ‰Ь™w ІT‚,rEШЦ+…ЈŸПUUT,(еьЙёnУп_=€Т‚4м|§zФФp еИЗ6n(шСЩьAAЙ’(ŠьTсчš&€Ј€4fЧБї›РА –nЩ‡91*hЁ Њ Ы\,7ˆ(ŠЅ^>:хдlmT B‚RЊ<7HХы[+№?ЯюDrR,*Њ:qЯУяЂЃЫvbмчЋi…skуЮ”$Iв0аб€ЂТј3 lvс№ЫЕ}МnхџЈFƒLHxПŒ?ЎЪJНє8Ш`uНД"”R?РБЬ5Ѓc^ќљХнЈ:vŸ_ŒџИЂ]<ё—Ия‘їёнo­ƒkxmэv\vб2ф.HњRИUБрY,ЅT7§ІO“‰гж}]h§М жЌx,ћкb€ея5 ънуpArЖ'ѕc^A2В–Єs*v‡$I`ъ ‹[ D‡Њ2љEЎж›ЂЛw|ц38œЃјўwж#>Юˆ›~є2–gтўŸ^„_ўЯќuтуŒq{АЎ,9йIœ*Т#щжHz8ZR@д`ДъЉ Hт•Щ'ЁцЃf 6;0E:lЋ2PўR5СЊЋ– ГЊ­;бпdЧјzГѓ—fh E՘RкCЉƒР †CеРŠШ ˆ;•K*k:ёьпї"ЦШсžЛ.B]C7^|љsј|ŽыBk‡?ћсљX˜›ŒЗо­04<>Сˆъ<9ЧШЬАР#w#xA@kЛ„pЌNсь™sЋЂЖвГІбСqLаjƒ3БЩ1AжыИгƒъ­Ч1юђ шТ<˜Œ8јЃy АџoX~Yч[pєн:€wийкє'ˆ&Ј–T $ xџ_Uxw[ђrRqЫwжу•7Ёіx7|>YѓМЛcїџњ}мx§™јЏ;/РЯ|†Wо:‹Х„U%6О=Н.ќўщэ€Ыцую;/!Рџўѓ>њфр†oЎENvв\p+‚G‚fCеo4@№ŠaпБжп^ъдо6„cя7BЧ1(Нv\'‡qєэ:?˜ јDTn­…mU&6мX†ђзŽЂЏe{ZQА>„ |!ИЭDсE‘bШH’„Їžп‰­UaУкEИщњuјнSŸ Ію$М^!8 Ѕ№њ<ї}8xЄ мw92г-јУглёњ;E8EщŠll>ЗPYн‰эЛP]лmŸЪ`ЎZnУ%Tj\9е=eћЯgЊdˆгУЏ‡Qy8c€0jК*{QѕVЬ‰&”]З э‡NЂeoG˜*‰‚„ŽŠnTn­Хкo•ТV’†]-8№j%$s+Іš ЫЁj[ŒxбоiЧЗОQ†… R№рo?‚ЧЫC’"ЗІЯ'`пСh:1€{~r!оyџ(*k:qѕзVњSџцеЋqМЉэќуЕƒ0™фюN’еŒ|oC„>ямшжйаЊoћѕЅo„Gхыѕр=CPtaEі79Б, љВQўJ <УžА`Њ$ђ"†њFАыЙ8ы?W#йfE§Юxн>p‰f…AЃЋdx‘Ћtbc xьС+oОWБq_P0Ѓ…(QшЂ(dqфѓ ДЛбехФЗЏY3ŽepЧ-чрž‡оƒЧЫУухС0wмr6bЭ†ˆР3ДюSE~ЃGЇќ˜€Ѓo‡gHжwХ—.BJ^Ђџ§ъk—АЗЙрu{ƒРдqСj]фх6ЃясблаТ‹ГвЄ?Ѓ­]J'p‰ђqЌWlYВ•йїxы§Ъ QЬЩпїœhЭ&'Ц"%9'€ИX#В2-!љ†З„е2KеPїмPшрpєzŒ;=€Ђ "}q ТuW”ќiБzв RQА!:N‡Ўš4ь>с5(ЯШFбЄV‡jѕ”vP@Kщi иДq1туLHKУп^>Є`аФpxѕэУ~0й"~цЏ{ С‡№qƒЫтЪн?h=э! Йƒ „@№J8њЦqŒкЧ‹7х"cщ<Э`@pxB‚›W%,ПДцФ˜тŒШ?31 Цр|_›^4БntGKВо 4Іž ЧьЁ#CВЛВКџњД€l]ИЉpЈЂџоQ?aЄ(ќ(S(а Јўю š+Œ–".ИQ%Ђњ­уpŒв'#!-У=ЃъvcИЯ­ФбŒіШ в&:–еŒ pЦaц "№QE+}ЂЙВž J3Јю ЂўДяЮQќхo{ ё&мјэu0™єЈ;оƒŽ.ўїŸх(Ш›‡ьљ‰!ЃJjŠСюP]Њ!џАю”4тіКЧ1мыі‡э=>ˆоуƒ~7k`qС]giD$4У!yhФщ„2`4PЁІ …Зr5уЖjNрв0јЁЏЕнU~єЩ1$ZЭHДšqЭзW!.V9ЗнИ~q7$‰bы‡UјсЭgƒaHPмHКеЧ шыsЃЇwuѕН†a<"€ЇЯ ЗЩ .žЯ10Fэ б‰:цD&ввЌžеˆF˜œ0A‚ђ “`ФђDC“ZkGhцЅЦ) ,SFZ‚†Ceџ”ЄX ихЏX%XLFŠЎЛКLлў%3=пГХЯщЛ-ЁШЗGЋOЂЉi=НУд54Z[Ÿ(ŠnШ3<ЅtœRъёxоЏ?c`Ј>AOb2MˆЭŽkf'pІъŽБ˜pцMЅ~w4hТЊœ$П‹I0A%ЅнЬ‰цqNŸgїПLqIцАљGkчЊУH nэкЕeIII;Я^Пg”eCлЧ 4:ї\ЧхyЕѕНЈЌъBcг U:иЂЯчыѓzН]ЇsttДещtЖєѕѕaР(€qШœJ ФХХЦBŽуqЗ€уИlBˆLi&ФхФ!Юf†NЏ› >У‰тPУYЇсЌU!n8k™рdхI4яjAccу{иИИ5u”&Й“їљBЙS‰щwЯUмAћvьlBMmхy‘FGGkі777ђx<ЃJe^Ш\щQ4koкєиyNбh0b ж%''ŸK{щЊёоqv œаиљБ$eyє ?(Ё3 сq‡8XœNЏсDѓ,DЎjќOеч‹ЄгBн3‰Ыѓ"vюnЦž§'Ј(Rтѕzл?oiiй7<KHHАфччŸmБZЮЅmtёHћM,L$)Ы“Сt@ 8„л&€MмЩ • Zщ5@е‘" 2‡Jn­Њ9‰}|œŽИНФчѓѕДДДМкввR…Њ@,...АZ­K9ŽKbY6™a˜$N—ЂгщR)Ѕ„Rк/IRŸ$I§‚ ˆЂ8шrЙjkkkkxЙѓЬ`†††Ц:є€w WйlЖя;ъ †Z†шМUЉ$БР*я!дА€Nt‡1‚(я$r3 @ЁŠм`Ў JыžŠуЂ‰ыpŽсэwkабщЅдгнн§nuuѕПEQSРє№FR\\МТbБœe4зBЕe7™L’Хba, Рхr醆†ВЦЦЦŽ“ћ}БББШЪЪђx<Л†‡‡wеззё@Ж'tѕѕѕћ›ššЏXБbKJJЪwКїїФ;ъ4ћœљФ”hšФЈѕgАxЄ?љЬPЙЫ1uŸ/œ ИЉтЖЕ;ёъдурt:їдддМ9<<<Yс{јђѓѓчggg_o0Ю„ММiiiДЄЄEEEHJJ‚ХbЧqс>g†чy СщtЂЁЁUUUё—ЦЫRSS}^ЏwWWз‹ѕѕѕuAјC‡НџЩВeЫЎЗРreг{-LЮІloKˆкЇЏa@ сдh(rщs\№тАшуVэТлъЈ$I|KЫ‰ыыыї+@Ž№dffZ/^ќ]“ЩД™BђѓѓIII –-[†”””(П]€у8$''#99љљљиВe q8ЈЎЎЦбЃGѕѕѕѕ.\И1++ыгІІІЇлккКˆУУУіН{ї>UXXx waюЏZўнjžП.‹Є.I=%тu‚ўAД•œdЄH жЉсV@ТЧл›№љС6ˆЂ8TSSѓdWWW€1уVЋUП|љђя™ЭцЋpK—.ХW\ŒŒŒ(ЋžД š””„sЮ9чž{.z{{ЩлoПŠŠŠѓ—,YrnNNЮ›uuuЯїѕѕ9ˆѕѕѕмnїЭK–,yЌs_W–зх…mНM#2#ƒФтU+ЮUwДVЎvе˜nўќљ™1117иц[‘™ž љъд†v+ОaO—тЭwjPYuЇЕММќБўўў6Ш}ЧбeЫ–-]Кєєz}ivv6sу7’‹.КqqqQU,…6|Ј_\\ЪЪЪАdЩєєєЗлН$33ѓЊИИИ===mЄсссЁўўўггг =oЦhџ’%!Ь„СќPwа*@":со‡[8д3„СжAиэіvЛНUй8”а№€fY‘™‘ "`ЄџD0ˆЊxеL|ЯЭњ0‰@?5˜[эіQъёxЛyžW‹FЃqCZZMII™4ЭЙjшђУGакжі…€oЕZБhб"˜LІUƒA=СLтyОiИ˜ЪœЈеŸ3“LБ“nЮNбrЋЧ+`lœ'>ŸЏ wBЌ%%%“жb.ŸчyќњБЧqїНїс–ляР{|ј…шз5kж€bЬЫЫ+…"vyžo|ёИ=˜nŸrЂš'ˆ‚ §)sQИес”ЗмwBYќlЕZ—@QQQиИsЅпёУЛ~Š;wсж›nФYыжтOў~єЗ№zНE<Яћuў\ъWЕn љP–їј|О0в?тЗГ$Šрm’A˜Б!ч„аБББv(K$8ŽK€ЄЄЄ сgЪЁ~еЧŽс‡$Ixќ7€чyЌ[{–сЯЯ>ц–иl6ькН?ЙѓGјњe[ц,mнt:]2”3’мnw‹ХbС№Р0вђв&oИ(ˆШ;щBїОњБcЕDйGйг;‚Њšюgко)яЬv8' ьcY6дХЯš§ж/єнЛя€Їžљ lѓГ№а§їуЕ7оРЧлw€‚Ÿпѕc<љћпсў_=„Нћі+qц.•ЌV+!р8. ‡ієєДdeeсd§ЩY‰кЖ5_uЫ‡zpЃКї•!ЊŠмЖк:3Ю\!пРР@+”…L У$™L&I]=[nTIEќёЉЇёсЖaУњГpл-ЗрС‡Fk[М^yырcПџ6w.žћгSјяћРёЦF|Жk7Ж\|1X–UўZвщtˆ‹‹Ѓ^Џз хpЈОО>'Ѕд9и1hь o:ЄгщДл@ДG•ЅъrЙš†ЙœчyЃЯч3 ‚`С(I’žRЪRJuT>Ё+\ЈТсУ0‚(ŠneKŸ€OЇгЅX,– 0g ЊнсРПzuЧу{7ќ'жžБпП§‡qЛ!s”<^/>йОЕuѕxќ7рнї?РџОњnНуN<ђЫ0/5uF"6%%%Їг™ˆРi_RGGЧ-Ч™%IтDQдK’Є>,GзElSBˆH†ёѕііж Ьj?5МVфвcЧŽ C>ўZ=“5Fљo€ ~шaA™#p†Ћ dЈn.u:]ЊХb™3+Š"nЛѓЧСУ>žчqћwСыѕњ -yН^Дwtр?oМќђA,).ЦCПyпЙщМћцыаыѕГѕhkkk‚ІhMMM•в>:Ш'i”џк6 зž@p›zXОЉюКSwиMЙšШ<‹А%ХЭj2ћ5iваnэPJ)™mз@ћ›eY\ѕѕЏЁЌД}}§xј7Туё„)V€$IТшш(юОї>ќўЗПСпžћ vюк N7#; iлHл&*ъ?н6е2‰ЊGƒ ДДДдh6›‹A`yžз ‚Р‰ЂШŠЂшЗ4ТбdЊўUEЅtМЖЖЖAЩ”в~—Ыe›KPПqх•€ЊšcЪ™H2щœ^ќEy'Zл‚8—‚žž^Ќ\ОпњцЕQх-9H’4,**Ъ6хуN”л(t’$щ4* “ЕЋкІ:NhюююE0g†‹%ЎnO ”zZZZŠ=ЈTЄЯхre`цJьЊџC[‚eYМєтѓHO“Яm9бŠ›~p›пH McЊ<ІCvЛђ<явњхффОFfЗє_Ё˜˜˜kКЛЛwEzt^Ўњ•щtXЄ›љ™СѕЂˆFQ4кlЖœЦЦЦЈ$I§cccŒ р8nЮ Ѓp”šš‚ŒєtП;oa.bcЭA€ЮБˆ [мУУУDџ‰ZщщщVB— kbіŒв€‘с>ИœEQ7U„Ћтz‚%ЪХ4(вщpБ^?уЬ­<FQDBBB1€“DA8ŽƒЫх‚К†hЮ@@˜paTд\qЅJNЇ”R(€RHMMЭ€ф”|X™иЗW@1V–.]Z Юš˜эЯsЖљв)n…`BЯ,7ma gшѕ MJJ:ЪU___РWQQ1k@YЯ ќЙ&EмвіііУPMJJКцЅ-žЫ2Lr+ФьDl Uw‚N‡%GbbbV%$$XшFFFМ^Џw]]эщщQ’85œ7з]’ЩЈЏЏ•••tllЌahhШ€OHHрŒFуйёёiˆ1[ƒ8t8•hž š “ Х‚3 ахччŸ EьvuuНH)ХoМёЅˆнSAЏМђ DQ$эээoAg]МxёF†yщ…aСœi™І’Ђг4J UwЉС=@­VЋ*v™њњњzЏзћщ‘#Gаммќ…‰нSE---иЛw/мnwUKKЫ1(гZ‹хBB:/}qPBы4зх‹аiIaшkŒFЂзы,‡ВpЊЉЉщOФW_}UаGшџЙє;•євK/mhhx ЪLHQQб"ŽуJ“Sr‰^oš”CчиЩ!аИП @,Xp+ЫВzКЖЖЖЮббб7›ššHEE…’ещ#bUЊЌЌDMM †††і(чy№6›эGСТEgE ц\•9< sЄ7…eqIl,с8.gХŠ[ швКККМŽ|IDATчŒ=џќѓT2;DЌJNЇO?§4РзддМyвйЛfЭšГY–]–e+!qё)“ŠйHюйPd%ZїхqqH`šš’ђнИИ8+]__ŸГЇЇчО‘‘њјуSŸЯчЏThхОJ"з§>њшЃдщt’іііПЛ\ЎГйŒЄЄфлYVOхЏŸ6wЮЇNЭЁГRkd|гb!„aтVЌXё(в‘#Gv ?гййIž~њiMі_MЋвŸўє'477ЛнўЏšššP–…”––^У0$%Џ`=бbfтlA (‘SrŒR<ме‡ККёBџ@p”a№hg~йо?t ћœi6#OЏЇ ёё—/YВd iїюнѕx<>|ЏПўњWVФЊДuыVьоНЃЃЃехххЏ@9hВЈЈ(?..юsl]А tкbvЎИ5<‡†сH3ЫbXБch/ї ŸќY;6†m'v8]СQу3ђОШлRRˆ‰В ;ћ—999 Ё ГoпО_ ‚PПuыVМђЪ+ўb|UDЌJ[ЗnХK/Нžч{<ј”(ŠЃЦm6›577їЗ:ЧЎ\}a”5JsљDK‘uЈ ѕїеЩђЪp Р‡?ГЯ\k*.INŠЋ6уpWZa1.^ќ˜еjM їTUUн%BУ{яН‡ЧмПрыЋ byžЧO<сѓШ‘#9ŒЦЧЧ3K–,y –•ЋЏ ёёЉгтЪhн˜е9E!`Ј‰—%$`О<њƒN(‹pБг)OZчšLXkžЄVч›Lјnr2atКєеЋWџšeYІЇЇg`яоН7o?rфюЙч:00 )в—У•NЇїо{/UХьž={ь€|иЄwэкЕ0 “SМє|ЄЅчЯ9gN—K'еЁў„0BpeŠМжiчёљ№ŽЙG1Шѓ€KS’#ЉMoSB.ВX зыK6nмxЫВFФэvmпО§žЁЁЁчЛКК№_џѕ_ДММќKГВВ?ћйЯЈjэоНћwЪ1Аn–eН7nќ ЧqgdчЌD^ўк/L ТШХ єњАVkЖ)я ‚Їc’„AžG§ш8Bpo^.ŒЊўgk@^f6ЃнчУЅЙ6›m…гщм?>>>€vttm3ыіэлЧUWW#++ Г=37ZjiiС“O>‰7п|Ghooџы‘#GЖRJнЦтуу™ѕыз?b4ЯIIЭEщš+С0СМ Тlн#У}p:кgvВ hqЃˆQНŽCP7:ŠnЏ^/|Х†D+.IM™HѕCжХЧcœRœ№љвВ23ЯхyўЫхrzzzꆆ†Ж%$$Ф /кО};гббмммYj=ѕѕѕсЙчžУ /М€ўў~:44Дч№сУOtttTA>œyЬfГYW­ZѕЧqХй –Ѓlэе`vЮ uїТiŸаАgЮ5A 95'\•6oѕѕC0Ђмъ{ijJи№ўt?џ;хї ѓц!CЏЧ ННщKŠ‹_HHHИЛЊЊъ БЏЏЏЗЏЏяБььь7.\xѓж———cљђхЄЌЌ ЋWЏžА›mК444„У‡ЃММ•••TEтvЛЋ^S†ѓд[š/ХшХЉ)а1ЋЃRћО$.ПЩЫ#џЏЃэРЗЯ:ѓЬKэіЇ8№‘вмм|ДЙЙљЧ‹%177їL‹ХВЎЁЁaeccЃџš\BтттhRRQ7р:иэv:<Џ;Qсr™лЧЦVŒsмژ˜X,dee”:л;:nQvNKEEEйЙЙЙЏС[њXVO“2Hжќ",\ДёёЩš#юџчRŒŽŒ8№ЩЇџ!чћm˜Э УЮ„&稘кjѕЋыSd81žf2с?l6\kГ„ЛЯ‡ŽБ1ДŽтsЛuУУVŽуЬ9SP6л&ЇІ.РТEЋ`MLGbbЬБVЂюT‹еЎЎF|ИэYH’J%ќѓѕGqСљ7`ўќХ“Ц›ŽЎZфЊnхПъз:6†mН}ЈAзј8L,‹Ы33‘lаŸ2 У†Єз#IЏЧ х ‡КсaH’Єn№Ÿža[А%+ЮЊaД4bѓhеgиЕћu$Zгqщ%п‡DE|јбГxяƒЇQЖњbЄЇхЂЙЅYYШYАl"€Г2ŠТщOMуўЕНЯЗЖAPОш!žЧ_NДт•ŽNќЂЈ›вц}!@NFšM=Ђ$IЇ !S2>юЦŽЯў J)ЌжTœБц’ АŸnЂ(Рh4cУњ+CЪ!руOџкк§Ш_Д ыЯКn{:‹ЫЗмŽ§ŸП‹ƒхТj™ЇЋ›3ёДвЙXгИлњњёЬ‰V0„ры™839IТЧН}и=0€{kŽСkFA||X`}>№Ђ‚dЃzEWKz”9PУ Эdš*I’Єž6"H’4щОзЉФYLLzћкбееB,]rbce›Ёыd#љАjхІ Дмn'ойњzћкАўЌ+‘m[ŒW^ћ5МоqРЋЏ§[ЖмŠŒє\ьм§:`||4ьG-…Ÿ>#$ьL рMЭ€{ уП‹ Бq^*6ЇЇсї+—у?Вm)Хяъ&ФUї?РЅ;>УЅлwр—UеўМžklТ%ŠK>ўяДwLX51]RерІT[яPћA}ж”] TBUѕnџ{yЛŽL%Ы6јУŸ<йŒППє+8œ}ИђŠ;kNР?пјЦЧн$’$bмуЦ;[ŸЯ{ёЋ~“)­mеЈ­л”Змбе{RQDRиžЧ— .žЧГ[В2ƒИ˜‚л ђЁ#е.zЦ=Аћ|АѓМ|В•ю2› eeЖuФ'н=ЈuЙ№\C#`Ur2О_ИxЦ@ЊЄъФ`•[QQhCЊOqёZФХZ•G?ѓэxУ!РМTвгs@AЭБНxѕŸП…Щ‹oы>47ХЇ;^Я{'фЧѓ>(џЪ?РЕзм ›­;wН†OwМIe˜эH‘ дЎО~мЋl”Ui9&ЌŽŒaY$ шїxАeч.јЗЯйˆqq~бyЯђsКа9:ŠGЊЊЏч R ‹^GзЌž0З8CђMwпk8QЧъXЌ^}v|іO8§hkЋaИнђxіђ’ўx‡џyyЫБљќыёц[ФРрЩА`ЊФѓ^tu5рѕ7Ч•WќщiЙ8txJWm†е2/b™Тб”VюйЉ)иЖq=GFpGE%кGЧТ;у’Лз !xїмГaащBЈžвЅ„‹х83нїЪББ,YВGюB§ёC0шхЏ  11qš~,€*ѓЪсРqdgтŒ5—€€ ЖюsдлžїMШ—atўОёtFŠЂZ$ІrЌžeё“BЙќPM-ЏЋЧЛ;ћњёѓ#xЅЕ :B№ѓ%K"VЊБѓBCЃLїр7•UQњ‹&­.]w†мeEcу#€•ЫЯ ЋwCmIpйЅЗ"3#щщЙ8ямoТlž8A>­шЪqХB8 BpiV&zН^<ли„зккёZ[Л?^,Что’&ZqеД4нŠСAќЙЎPš’‚єоoяРжЖ6ЌIMСХЖљб•ў $Е.ЙАй аббˆOB^^ п4хE‚MBшѕ† tMІXИ\§Aљ„уЦйѕCCП0 pгЂŸ:мЬfsТOHBo_!$ qБж№"7и+т­A€’РЉ“‹] а_[`C’б8qQй—LD9]sШЉccnєД(,,УКu—Nj}ІЇчрwџ ’r –мП–УЋКіы—џ ш– Ž ВnУа n…PEЋњ[љЎћqСќљ_) U"ђэ "Iwжtыїј.в?ЫrASsЙ™Чщ'yЏ’ПэЇ+DНлїћњ”t… 2vž+љeаБ!yу‘oOJ# ЏїЊЋЖŸšŒ'мhkJъ ќŽ^}žR Д†QO ўVˆУ.Л‚Ю№=эˆaџqо:N€ЮŽ:tvд}Й›%)ѕвQљVˆЁЁЁ&ѕVх1‰ЂhEб@)хдл цъЧЙ"хCTђцu:z{Т8яРР@sLLЬ5Ђ(ъA0ˆЂhTъЅ?ЭъхедKЫЅ~qрƒм…с”ЧˆРЭFDw+Ф—EсnO№!А…AнћШuаCЎ“іˆвгЅ^^ШuG№э image/svg+xml Printrun-printrun-2.0.0rc5/images/control_xy.png000066400000000000000000001602331325617007000220040ustar00rootroot00000000000000‰PNG  IHDRїј0кp†sBIT|dˆ pHYs з зB(›xtEXtSoftwarewww.inkscape.org›ю< IDATxœьw|з•ягаAIАSьM")‘ъЂКdY–kЌФŽїxпsВЮ&ЮОuœdу’фХoГIœlЇйrтоKlЧ’›z#EJЄ$JЄиD,шР”ї0Р`АЈg7чѓœLНп{Ю=їмs A№Й2… b&Л]фЫ˜Ж€џ(DWЄџx/W†LВ|![—шЗГ?^AЏЌ‹§с? жe—Р}™$Ь‰ Ž2g|пDЧ"PN5gџxПMД>Итэ’ЫŒрžЁyxХЩ•T f3)[G nщ>dœ§Єћёa'r,~—‚ЭЫі•/ђ§хћFŸ№ z7Rљ{,ы‰žeBИумфпнMCVЈ.ušцЦƒS\HDLЪжЧ:оzщyІ’xZ™—|JЗѓ’§ј8ыфлф=іЫ њчrЗьf™{Wђ›†1ІтХ,LS9Ьr-L!l9дђurјуi}љuФ“x№Хšѓ]јTыџ’МЉФ)чвg'§МReЪr.‚Зф†х…$^с‘~^nIдіKЄ=.h!šhщГџЇ ЉnJВ^КM~Œx•DЂї$НЦDN1љsзM-'лЦ`уќf*шЅчЙш ЫЪљT $ћ])’Ј"ŽЉ8Уp'Иay”›РхПёx`OUУ7О…'•CЪОKŸ›-%[GЩЖIзЫAЯl6SSSГЕZmMгI$IЊ)Šв2 ЃЇiZGQ”–$I Aj‚ дTЁcљA№№№<яц8ЮЭqœ“eYG p…жyМ^ЏubbЂohhh(А‚,>?ёЛє9sˆР.~Вˆ*р!ћ\q@—•ѓx–Дм#Ючхy9gEE•sZv9иb Ÿє!—џІXR^иИаv>Юof%S-ўh)Итw:Юz9ќ”ХbI1›Э9&[­VЯбjЕ…4Mg ‚J’$4M@Џз“ …‚R(4У0$MгˆЗ0 ‚ РВь”‹пяgчrЙ8ЇгIј|>I’žч‡}>_Згщьєx<§§VЋuРыѕz>~pddЄЙЛЛћŒ  "‹ˆЖцбрт"ю—є buIЪ8€ЊЋЋ3ЅЇЇѓƒЙ„чљ§|№СЕ>WiхдмВ›ƒ €Н^‰мcдA‰8џђ ю2зw'лЌ№ћYЁћHАMBг’8PKXSig)аДфџ№ієєєДЬЬЬZЃбИP­Vз ‚`6 ўŒŒ UZZ™œœ …B8зI… hЕZhЕZq•xOрy.—Ы`Гй еŒŒŒЯѓЇЦЦЦŒŽŽ6wuuЕБ,ыC,дbad)œёДПм|Aa+l& ЫЬq ( 5FХЙ>ž‹#D№!]AH6pіЛ  @шM>‘Y.DфdqЧmuС“‰'}!„жХп&]Љх{?ќ@№ћYёцЅ&дф‹+  –W€Rѓz: iƒС`(..^i2™V*Šj:“ЩФfddЈRSS Ѓб’$хяфŠ’$ЁзыЁзы‘ŸŸЏЧ›ЭVeЕZЫ‡‡‡й’’Z„ЎЩЩЩƒУУУЛ;::N"Е| |Љ9/‚еў_е вм>Ÿ•Eѓbгљ?Œ A€dˆТ-]'ъa‚ pъ/Ї…мjDРŽДЙу8вD†|l‚dзШwABР‘Ѓ}xъOЛ‘•aРЗю_ “QЕпх€\Сћ рAвB1 дёLmЉ•ЖNЇг—””ЌДX,з‘$9Яl6s999ЊддT рje‡У—Ы‹Хт"О ЕZœœффф0Пп›ЭVbЕZ {{{З–––К'''wєїїяшъъjGhбdФљŸ“|JНёRпL!ПKŽуЈ ~ѓч(A gп њX‘1/EЋrA’аУpCВBаQ*oƒё4wŒYрy!Ќ‰уAўжћЧ№ђ ШЩJF{чОѓƒ7ёэћзЁВ<#ц7—rСћЖIbЎ` ЈЅ>ˆxк™ ­Sˆы4ЖДДДоbБ\KQTЩdт дYYY`.UCY&vЛЛwяЫ““ƒ… ^TРЅЂP(™™‰ЬЬLjўќљ”нnWѕєємl2™nЈЈЈ˜поззЗЃЗЗЗ€ .]иа6Сч-­Јc xЬ;eYіВУM€рбіЗ3=3C–§G†сvaоѕЅPщa-€h–ЋБpшаgи”{EЭ.ˆСgE@Ђ!їљY<§Ьnь?м…UЫ‹qп+08<џќЭЧxф‰їёх›ТЄЦ‘ЃНиАІ5ѓВ#ЗuiЪ–шАŠчЂЙž jFђ)здŒBЁPWTTд[,–kišЎ5\AA&++Kl7_6 ‚Н<ш“,шыы€K ИTL&L&5ў|jtt4ЕЛЛћKfГљцyѓц}дггГ}``  EРˆец,Ђ!ч|ЇbІтwЩѓќe…› xЧ}h}Їо /Ъ6 Гк[‡'>шРЁчŽЂъкRŒtисsPЖІjƒ2 :i›л‡c6Д ‘ц–šцСъPf– ‚›н‰ŸџцєŒуŽ[ЃИР‚њі‹(œ“ŠGўm ž}ažѕЬ&-Fэ.”•ЄЃznЄšќэїaџсNР5цbеŠbР‰SCиіт@Q~*юЛsХ9=РаЛ•ƒ- ‰HЗK<ЈЅ&ЖГBђ1™LЦЪЪЪ/ †/ ЊАА№ŠZ)ихs7#Щ‰“Ч?@__/€ЫИ(fГfГ™Ў­­ЅGFFвЛЛЛПl6›o™7o^[wwїŸлкк„Xдш~D€5јД‡NUЉ‡РИф"Т9ж=‰t€ЄIЬџR\#|ў‹ƒШ_š%wд љэ64Оz$M‚gy-Э‘ЌŽ‚С{ЫЄДЛ:Ъ,—zQcBˆ`žhТЏ~џ9рЁomФˆЭ‰Чўуј§,NžТУПя~kJŠ,xўеC€QЛ3І’иАК ћј8Ќ#єѕяFYi:єZ%~ёдgБ9 Q+№эћззГD,иёОKНоR˜E EmЭ`ђђђђ‹‹‹яTЉTkГВВˆђђrEЈ }ХHlЈЌКЩЦ\‚€ВŠЋбvтCєѕѕB,ZДшВ.Jjj*RSS™ккZєєєTiЕкŽ >пккњq № В .Т.uЦ‘ˆіВбх›@ю rг~WЌKИ]Љc@)Ј(гКї№КієAoбaоu%шкзы)xŽGїС~ŒїOЂюKѓpњѓ. ЖZA8?RbЂaŸ’д2 —ѕЉ‚XТн>BиЁќяЃOOтЅз•iРџДяo?Ž}‡ЮРяgƒ7р06юС~ќюљъ2<ђа5јOюР;N +#ыV•…ЅV3x№ыёнЧоЧР/žњЉfFlРџОЇщ–Єѓ{њёяOЊЕЅ=Rѓ[„:ќYQQБ0//яšІ+JJJ˜ттbRЉT^ЈыЛ`"{^ѕuH6ц„+hšfPVq5Nј§§A ~Ѕ=№љљљD~~ОzxxX}ќјёЮЬЬМllь'NМ=>>>Šфт{’jttЉ|%„ДњyKїоXOŒ&м^ОЙiЅf€ РГ9у'­рyооббё"/^ZХJяWКgqQ‰‹BЁаеддlYА`СO322ЎЏЉЉЩYВd mБXšОђzЎDАЈž=Lц91рSJ!\ЮœЕіСщt"33ѓŠ\N‡‚‚&++KA’dErrђЭ999Й@`prrвƒH;SЎ+x RиЅё Ъ`0h-ЫзY7'0:š` чцыы™„wм’&У ЯEъДRt)\}­ у}”ЌЭ‡ЅФŒ†—[сsњСГбѕŒ рZ­А›QВЂƒ'Ќш:мu’ ЦL†Ž ƒ АЖЮЮЮэМˆЎмИDp3rюЙ•щАЙБэЅ§ИqK ж­,Уу?ћ6Л@b“„хx O ёh/Оѓѕ`vюэРšњR(^qЁMЧњ`s’є*ќ№п6ƒЂЈY9оњњЧёєї Gšћ ŽуbЕZ{ёДJЭ4ё^ЁE%YдAhъъъЎЏЊЊњunnn}]]yС‚ŒбhМт ett{іь 5Е7Сdžw?бмЋЕїŠT*ВГГЉТТBša˜|…BБ%77ЗТхruИ\.б™$ќ“;PЃТN'&&јЬЬЬ1šЂ—ИћSuм М[ЯX/‹%_š ЋіО фзцbЈql€•Р-mЎL З€ЊЄЄф>ГY‹ЙPЋ\ЛЉ ЅE|АЃЧл†Рѓ‘+S*h(4 ‚ „ЗqЏ7€дT=Ўл4зoЎ†J[€SVМѕзц№њќ,2,ЬЩ5‡ї›ЊЬБ,їџv/М|D˜tx011љЦоН{П?00p&tуввvЕЈБЅ`Ћ***/\И№—щщщ–-[І­ЌЌdt:]т ИD і‚К›aNжиё %І”‚П Р€ІiX,ВИȘЂ(*SЉT^—žžnВлэ~П_@ДЧXZОЅ<МtwwЗљМОŒFc1яrœgœ­ЁEђЙ9D{ Ёя№0 9; U7–bH$‹љ‹ГЁIVуш['сwЂяMIЄ)P AЂљN€ЫюF~]. ЮA~mH‚Р`n› юА…:3›RтP ѕ!BоЈPаXS_‚х‹ АxћqДЖ Тч ™ыžчуУ8]>ќђЗŸ‚чшѕ*ш4J Y'№ћчі И0й™Ц№oтКЎn;^xЙQ8;т$Р@{{ћ/:;;›8i{‰эkёžхp%‚ŽВ‚ВВВUЋеsчЯŸЏЪЭЭб#Км"Лnёa2чEН3QH’ЯѓQп)ŠFiХ&œ:ё7єѕѕ\QNЖDBг4цЭ›GQЭЭЭ[’’’6Y­жgšššоу8Nt|њQVЂг-ьIG(ІЗЗЗПЗЗїuuu7Yв-пДАы\Нn˜ыL 43ы-#§‡‡бs`”ЁCѕJA3TLdФФGR ‰Ъ %0fр™№ЂѕЃSp{#я$@‚и2Э3šб•CБDКАфІ„!I…[nЊ Gб|уОTќЏoН(?Lм`˜ЇўД Ѓі sп+jжс{?z>‹Ÿ§њќПGoУ+aБŸ ј§ўњСqьмs‚СfГНyј№с9Ž›рAЄ"ЖЄ;Єоo…йlNЉЎЎО_ЃбlЊЈЈ`JKKI’М,=%Г–и.љRRч„ЂтУ.МППР•хdK$jЕK—.UŒ)юMKKћbwwїЏOœ8Б‘О_бёцEtМКхрkhhx7--­aюмЙпС –|0$˜ц'КТФ›шЙh>‹Ю=§]šѓo.Ѓ` Zœђ љ1цдf#З& AР–ЅF‰}/4‚ѕI|Y ’ ƒЮДМ–С-эч†šЦ9IЇŠк‡$0 хh E@ і‡;N Б9шБ]НЂ‹фОxc-^z§0zћэјгѓћёOwЎ€Tук]јУ3„ЁсIТяїwŸ‰EА &ъПв 7иАaƒjppPЅT*П—““гежжіЋžžž6пЕСї. Œ‚…*€PгєьйГƒŸ~њщїЋЋЋзgee}cє№˜Сcѕ!eБ %iт„#У-6t|ЌUz*7Cр€€;J$lю‹ЪO*I@Є‚K­жЋb4hL%1Э+˜БЋWоЯ-7Ы…8ћФ$Ж’0›ЕјчћVцWх„сПўъyHOеƒПŸ…"ф€ыъХŸЖ\.?FFFоnhhx‰у8'‚PK5Жƒ,6S`ЪЪЪЊ ~œ’’’TWWЇвыѕ3}—LІ “–‚НtХ—‘šVžчёчm?F рЧ#По—ІМ§Цoазw$Iс‡Н^щ'рOџмЎIшtЩј?oC{лЧшяя† XИp!фVLМыК€ЯЬЬФЕз^Ћъшш(U(ПЬЫЫћшрСƒП ё!X6hDo„EАь№јЃG~днн}ЄЎЎю!єbсА“EZ} (uФЬ!hЖ†Яяuјqp[sд5U__ŽЬŠ4 ”1у'#р†’[СuЭ}ЁЬrAZ‰ˆš7Юn2­o{dŸрБjЋsЃj3~‚зхG4 Gњ№ъG–хиОООп;vь3D і т15Ж| ­P(дK—.Н?))щІE‹)ВГГ/ЉФд ЫЗйэі0иЫW~Љi$IF<Є2s|ек›ёќs?Яs8|h;жЎПабо З+8l~эZ0Œe•›аvќoˆi;FDњœ||чђЮ[‚@qq1™››ЋW‚ Ђ_Иh#о~у)8у8АяЏXЛўЃMŸ‡ЙpбІP"У€vу№сУXА`AЈ F{рЙaW*•XЙrЅВЗЗ7•$ЩџHOOћаЁCaYж‰фЫˆ8–\€$s ЫВьž={~UWWзžžўРрŽaвВ,•ахщТА-њjuкxC3УлD(  5ŸЫ‚xN€RЃˆr–)4xNВVyŽЃdB@lЛ=žЬPs !­K@ ъйАК чЯМш$Н*ІјСwЎ†лу$ГQ—РtŸrПŸХЫЏ7сј‰aј§ўо#GŽќФfГѕ!ЖWђ’Є} "и 4MгЊ%K–м•œœќ•ккZХœ9s.‹Z™)ЬR ЅпЧЦЦp№р! АjэHГтиб=8|шу …`lЬ žчёТŸЎ˜чU-ЧмyЫАbхѕјлЯСfФ™ŽЃШ/˜‹––Н€œм2ЄgЬ [<”UlƒƒA ^SS<2nŸ˜јxА_Jаsss‰ДД4хў§ћЏ7 Ы[[[мззwРХВ"іЌ№ˆ˜ьЎЁЁсэВВВТТТG†wŸе™ЬѓLqeэŠ ЈПsQИMN€€жЈ‘РЈt*\ї6‚№ @€VаPщU‘c^0И;p„ ‚‘eвўg!dО‹€JЩ@­ F§ˆfupПH%1фуn<ї|ƒ04xмСPпEK6Х’ {ᇆКСѓ<ЊЋЋЃк‡ђ@И>­~)@WЉTXГfЊГГ3‹ЂЈ_fffОtј№сWB#У(D ї#№p’ˆЖЖЖ‡уўyѓц§dДy4;0щGцВ 4)биHzdŒ’BЉˆzfRј ‚€FЇ:эbŽs5Зм,—ћзG›б˜р™A>jwсїЯьaЗлпйЗoп6DМсЂ).N‘ЖЏK–,Й5%%хОъъjEQQб%элš)аЂй ќсУыф`77ЯsXМєfшѕfx<“€Ќ]џдЏК$Щ€ Hќјб;`§јўџў=E“#i˜_Л‡?ЦБц]№yƒ ЃDmэ:ŽѕƒуY№<ž ~цх/…Яч‚еjESS*++Уœ$Щ(mNј†xаЫПЫŸгХН  €HOOWюлЗяЃбXпддєИеjэEАЬx,?вц]T–жŽЩЩЩџНdЩ’G&;QЫyxфЎЯI“gYЌіŽzьКˆц–Џ“:тЄЧžJfФлОXк]јуГ‡г‡СССп9rфЏBl к gT*•ЖООўQ“ЩДЄОО^%ЩџuQe6@Kс•ўЯѓ|јŸЯ‡ббQttt€у‚Зz`пkqЯmNЩСъuї‚$) ­6)цАvнбxјcАlЧ[їЊЊыЁжш`>…у-@ˆjУGЫШШš››‘““ƒС†{*ихџˆђРЫAϘk4Ќ_П^uњєщ|ŠЂž:}њєуэээ @и)v‰fyр‡ƒћьГЯўuХŠпХ6є~м9ѓB€CЃ ш8аЪ+Оhаemљ№КщЕї9›хrлЈ zюрtњ000№ћІІІП"т8s#f'$Њ‹ЫbБdджж>™™™™ЙdЩ%E]ќ1љ1]ƒ’џicёfžчсt:1:: ‡УСщѕzdee‘‹/fЫЪЪшссaBКЏtТЈ­>Ÿ+dЪ%^),ЊBn^z{кТл–,л ‚ 0:вчQVV†ab Ѕ( У ДД”ГZ­шюю&GFFXДбh$ŒFcдят/~ЫЭдэѓ‹ yII ™œœЌ!IђQƒС№lCCУ›ˆ.Loʘф‘gY–пГgЯOъыы!lшйб‹‚s@0TŒцFhƒ№#f]DЫЧёŽЧXSЫŒЭђH„šИИк]xцЯ‡Ѕ`П‡ и"мb[ЖSRRR]\\ќѓŠŠ mEEХEЇ:дђіВ\#‹пY–ХШШl6g6›‰мм\,XА€7™LвwУdeeЁЂЂ"сu|ќёЧАлэ %%ѓСВўpЄАЏ]їEl{ц1€Щ”ŽвВКрЕ‡vпМy3І цЁввв0oо< ˜'яээхКЛЛЉЎЎ.–$I:==аjЕQ ЫЉfЏИtЇЅЅaуЦŠЯ?џќNН^_Д{їю_А,+šЂч\дфвЫ<ЫВТюнЛ\__/`ЛЖwЃpS!H&жerЧkCKMюi@=ЬТ[МзшЕ љшЈ лž?,8]~)иЮа":ЯD‡‡МMзееmIOOhЩ’%ЪЌЌЌнкЙЪtPЧ3Гх@ŒŒpiiiDUU?gЮZђТЮй7@юКїсѓ'во–єHЬќвх[ТћMп’‹/ …‚,**"‹ŠŠ€™œœфZZZˆііv‘‘Ah4PŠЂb ЕИT›KЭе‹й.зщtИъЊЋ”Э{іЌЌНцšђrŽ=Руƒ.ЧбCƒжЦ7Oъэ*Ÿ@`Y– bу™:Q|u(:NТLAŽџ"hn ЖŸћBCnuсЙWьw„ZN*vw…G§PХЌZЕъ;III_XЕj•299yІЗ5k™)дr 9Žƒеj…ЭfуRSSх@_0GŸ ZcЗнƒЎЎ8АџC€йœ ohЯ ФMRRЕ|љr,_ОœA?}њ4G™™]4ѕу™ёS™ьpA€qhzлTЊ 00$eИ JL&ЌЮЩУƒ Z§<з2цёОqг[oНIтi№еззииёaJ6—€dШhЈgх,“;чbН№гЩ,НхБ^Ш'>ќљХЦD`‹цИtTOХQ№P IDATИMd6›ѕ‹-z:99ЙjеЊUЪ‹>[Ј9ŽЯѓ№ћ§шюю(Šт-Z$\p Ѓ$TxiьнЛоAг‘ЯEу+w|J•&aџћ…9ш dKK Ÿ‘‘A™LІА6i=^Ÿ:pўц:уѕ"Ѓэ$ДccгюK‘„EMвЕ^З~зWОМхуюоo?Жg ‘ТЬГ, )рэы@љ–ВЈfЦlœe„ЬПxš[˜кЁv>ћќ^zЕIp:}Фррр$ІxМvЖX[†3<жее§жh4.XЗn}БFq%Š“C-ЭqzzzИєєtrѓцЭœЌ }б$@D{/Џп‚ТЂyHГф Мb1”Ju”'§b:А€ шkзЎХЊUЋШ––ЎЁЁAаh4tff&hšŽ‚3ЯШŒЧsKЭђѓ…\міўпN Лз‡УБkџў§Я"т<“B-5ЧХ‹gЗД$CcЙ%яkўЅѓаpSœђЎ;v|zZрy~ьШ‘#8N"ƒ@D3\žЅ4lђ@тЁ”=PЖЗЗЗышбЃЭ№Ј‚€XА9ŽC @ €лэЦЩ“'yЧУпvлmXБbIгєх'"$ё žhЉ“ъŠЙ ##ƒОѓЮ;ЉE‹qmmmЌеj…ЯчƒЯч П–eпeђаPи+оdЕте“m‰N9cyіX :BЧdHbыЛ_јТ&DЪЃЁќэээ­}}}?рпќFГpљ#@“б@‹аF@—^GЦIц+чэш‘šыS &B|џo'Aр'Nœx|ddЄ\šIкЖѓžAv@р5 џ§яЕZ­^(BЉгщTtuuhjjZ@QPP0eq•ЙЮВlXkУхrёз_=Ÿœœ|х%,Т]a@b|*S§Jамr)**Ђ бииШ@›} .DKK ж­‹ю‡?ќ!ЦЧЧ‘••…ЧW]u–.] •J…‡~ћїя‡бhФ{яН‡xfГ'mСi„h‚,^”•e@d:* Јˆќ67н‡њ)ЧqНgtТжi‹m[Ч5Х‰˜™ЪE+ЌRШЛКЧаидПппs№рСЇœ"ЊqˆJ­Vы+**^0™L/,YВф*D&`0<№Рздju]ZZš177Z­*• jЕƒyyy())Q•••Й›ššX№D`ЫЁіx<8vь—››ЫнvлmЄNЇЛьs9ЯDЂj§YЖЗEoэпƒ,XА€МуŽ;0<<Ь D.:лxž‡jb2ќ›ЖбQЌ]ЛИџўћЃŽG.\ˆ“'OТщtтрСƒ‚щ ’’‚††‚€ƒB­VcюмЙhГ‡чЃЎ/,œH•юрu:cmmm |Mя6 ^‡/ЁГ,œ ё<œДНншpјА§“S‚ ОуЧџдяї!Е8cЃЖ8S €ЊЏЏџ‰Хb)(++cvяо§ћE‹ншаЁOL&“ VЋП RЉвSRR@Dи<“.YYYpЛнzŸЯ7мии˜@ŸŸOБэkБЖgY6› vЛПх–[ зыџ. MбўќНѓ>ж•рѕŸ‰шѕzъŽ;ю@cc#wрРЂДД”фy Ьў#T“RИэјєзП†лэЦ 7мu,Гй …BЛ=8OншhZ‹Х‚ЬЬLˆЛ­-дНZm €Т-ц›’~dWWW[JJЪX,–я7Оеˆњ;ъƒЙгdцј…‹ 7Я јш“S№љYЂЏЏяП$Sћˆ`K-„gи\О|љW УКЅK—ЊišЦЪ•+•;wю|ЊЖЖіЦЦЦЯnИс† žчM …"ќЄcЖЅкйl6УbБраЁCЯ466о-‚:??ŸС–wsuww ТцЭ›Џx\*‹/Цјј8Рє;O#ХХХP(чП}ЉЄЖЖ–ЪЯЯg_~љe!77—выѕ УDЭњШ$мnwмcˆ‰0фCOХJ?оЖ@ Fв%хр85-‚ A3Hž,цK'>ќоъеЋЋбkO~vѓжЯ›ЕГl&2мч5šрРЁ [˜œœќ№иБcŸ ЖБ9ХEs\1oоМ%&“щўеЋWЋФ4SRRАjе*хЮ;5ўќoыѕz‡ЯчSŠоl1 A\ ЗбhDRRmБX|\„‚ ž3g!5ЧŽ?Ю­\ЙХХХWЌЖŽ7РCЈеъmtЁЯ#•+ x“ЩDп{яНќkЏНЦy<*550ЉRAќ[f6уфhќЉvЧЦЦрёx`6›ХуЌV+ fлРРЊЬц№1Z•Ъk)Šњ+Чq^DwпŠ5.‹ F'8№ЋWЏЎ8Няtaj^*2K3/РSˆ–‹ІК{ьh:6ŸЯwцРПG$E’8ХЈl%eNNNAnnюѕѕѕ*Fu<№ЌЌЌŸ?~МРщtњG8ЈA,ŒEAЁP@ЉTB­VƒІiЈT*яФФDз№№№ЉІІІЧ=‚ЖлэЦ‰'иoМQИвР–75І[фžўй.во‚щЮ#_wЙEЁPЗнv•––Цwww ~ПŠШ„~хуЩЮ;QUU…мммА—|чЮшььФрр VЏ^ “Щ„ЕkзТnЗЃЅЅeц шI‚5Гъыы   -Ђ#ˆt‘љМ^яф‰' ИНuHpOФЗ(ЮG. мЇ;>;-‚рnmm§ЉпяŸ@lІRБ[€IJJ2VUU§ЊІІF%жКrWЉTЗЕЕ ЃЃЃМгщŒ\др … …<Яѓ УLЖЖЖЖp Ÿjnn~ьШ‘#юЮЮNСnЗchhˆћъWПJ^Њ‘[гЩL!–)Tъ1–ЎKДLѕ[љyЄƒMф`_) ЏZЕŠ\Бbъд)vТяЧœ2S1‘<ђШ#р8===јњзПŽmлЖЁЅЅ,Ыт?јJKK1::Š5kжрБЧƒЧуAYЈТ№iЕXКb…вd2­Љ­­НРе.Цk№i№оооŽЁСЁŸМbџkћžKœЗn#7Ѓ$^a–‡zЮJx^РGЗ ~?GtwwџjhhЈбэlqђАp—AъЅK—ўпмм\гtJC€+vэк•ЋP(ЦU*•iЮœ9‘ЂщpьёииР№ФФФ6›mСі†‡‡Ox”уИGжЎ]ЋмКuыeзжr/ОќћTХг ђяг‰д‘#§ŒіЄ#сџгћRKQQ•’’Т>ћьГ|Яt:s‘бˆ“ ЇэvьйГkжЌA[[$ZэрСƒ(++УЊUЋ`ЕZБsчЮ№Жgžy{їюEmm-Nž<‰ІІ&,ЬШ@J(MЖWŸ†aАzѕjхіэля),,ь;sцL3Ђ“+ŠЃУ GŽ9ВCЏзз 7З|м‚ъЋЊЯхvЩgјeOЅЉЮ юЦц~XЯ:‰ёёёї?О‘ўьD4fеЊUп0›Э•uuuЬLЮ‘’’‚•+WвЛwяN&b2шГВВˆффd( А, ЛнŽЩЩI[ hќх/Й бVŠ0<<|J„–——з ‚А• fЯwe* Ї‚7‘Щ<•V•ŸC”ЈшД]fвЎ3`ъОtq‘:у.—cЮчѓ ЗЕЕ}žЎTx**+ПF~И|9ю|џ}иl6|ўљч1ПЦ+ЏМїxЇNТЉSЇ†Сї–- n LX,Н^eЫ–)AјўФФФ7m6[/"51њRсрйЛwя“ыж­›{zџщВЬвLЄЮ‰oЙ&љx‹№:щфф$"A$с„ў%%%џЫ˜ЌFqсє'ЕЛА§“гЫВж={і<" TЭq1ЏИКММ|Qffц?Џ_П^)vaЬD4 RSS‰аЧй‚LLL`llŒwИнюA‡Уёњ‹/ОјЃН{їКdрrЙ&:дЉзыmЕФ%*}SA/їšмd–šдbр†є3дOяїХыѕz=>ŸЯэїћ]~ПпхѓљМЁ ~ПпЯљ§~žeY‚у8R>(CjšЫSGЭЄB‰'ь1 ˆБ1== ЛК i@Љ„еjэПџўћлййyњааа™Ћђѓ-Ѕ2ЧЄV$H4 ŸзЉПЕh!fdьй9—фьгыѕрyžЄ(ЊтЬ™3;)sвЉƒEmžчAкRSSЏщ! j ˆЉцхфЎ“ЖЮЮЮТЭрЄš[ЎкУ'Ÿ‰№М€O>oA@WWзЯ§~џИф„тdkсd†:ЮPPP№ШтХ‹Я)=RJJ ъыыЉ]Лvо›;wЎWЇг <ЯЗ7<єаC‡‰|“Kј~Ÿ|ђЩАuыжʘ|*s[Ў}ХЯxP‰‹Ячѓђ<яd†SЋеаыѕTrrВвd2ihšV XЮјкœNЇЧnЗ{'''NЇ“wЛнЫВJ…B‘D%nђ„DЉ‘фš^§9AюѓlnЌУ FF62EtxРУ№ТјИя›eЅu?Жлџъєћ]энїЫЇЎкXЦЄщіЙ•hЦсЁЁйŸРъм\мXœйЏбрlAAЬ>•••Tnmmэuo"bŽ‹ƒKIџwggчЩЬЬЬg|­худ\]3Ѓk!B<žh„ЙY.›Їг‡ЖгgЇ<ЩАе›‹˜œœ|ядЉSˆЬК)ж$@єl ЪХ‹?˜­ƒЮEB&:ГsчЮ-лЖm{X2ыЇ8UЋt‚7щ=JяO>љф.Aˆ/~ё‹ї]hРЇƒ:Qў5™ж|>ŸƒІiOrr2‘­5Z#ЂЮ[‚€^ЏWыѕњ˜Й–;000><<ьw:4I’zšІ•ё’(HсЁ"№ч 9блrчN A_Е(d @fiЕ…YZma]zzэЖ––'^8~тиўСў­ЬЮ§9Ixr§:МrВ O75СЧqSO-УрКZ\_\ XpЫЪ!ФЩ‹O–/_Ўt:_ЖX,MVЋЕ‘І)‡`љ"ц9u№рС?Ў[ЗnUћСіMВ ѕдuГ тx б—%Е ЂњтФ "Ёžк-[ЖœžбрyоњљчŸпхvЛэˆЭ1.:а”дsчЮ]YXXји5з\3+s<‘ŒŒŒ`зЎ]ўоооя;vьSDкњв!Євf‡AOІAЯІ€юпјЦЊ[nЙхо ИмЉЏл*Qї•пячР˜йlц‹‹‹“еъiоі%Aапп?жннэѓzН:ЅRЉ“'9L”&)‘“Nњ#~?Ш§ћ@Hœ_н862‚ЖбQДк1шtЂ й€2“ef3ЊгRa Э2#lзјјОБууп<э5п4Љд_г39‰эн‡IъЅxВ$3-]‚єШ11RPˆбММ)wњєiЁЉЉЉoћіэђšІЧЊЊЊŒцтфgОвооnыъъ"†11 єDЙафЫ'?љDG0~{Њd†‰dnj ~А|9ђ’’vчБЭЏНўы/Я+IКwnэ5 }ЫL%ЫЮСHa!јYdкuЛнј№У§MMMп8‰ мRM+Ю„б_Ђ }2ˆ8МEoЛؘиЭ,uЈnЉйJKNЂ”|ЇщлчтЩDл_lчBrБЊъъъ………oоМљМц№ŠзŽЧ$ŒŒ`їюнОООО‡[[[?ElUщ№RКЖЖ6uыж­З1 3W„‡У! ЇЅЅ›6mZ>Р]O"ЈEЯЗЧуёj4š‰ЊЊ*ГRЉМтЕєLЅЗЗwЌ­­Ѕi:UЙКry>4ЂЋдŽ€ƒƒƒј—?9Їxh5MуљkЏE–^ўН§ыќєггш_mмxЪ`јqКZeN%I’рЃ}ШѕдSзА,;h]МfтЇ?§i]qqёCE• ‚ЬqуrЙ`Зл6›mRЃбLЌZЕjЮT€Чгжё*J#ТмnЗ+99й9oоМTŠšAПЧпЉX­жЩ––€T…BAв4 )ьrmn{Н`^ №zс №хwпƒех:чыЈIKУSWmI`yўип~чКAЇ“Кѕж[џ•ЂЈ{-ZФP­ЯЫ ‚Єрбысгh@†ЎK”sэЪћьГЯќээээпПџOЖЛХм.Dg!Šš& e*ЭHФ!В\БrxB` еоbћ[„œ–|'%ћЩ;ах™T”ЁE@ГaУ†ŸVVV.­ЎЎ>/ 5Щыt:сp8иЭ›7гo~ѕЋ_§ЂГЊА>ј`ЦњѕыŸбh4s ƒRЃбРуёРхrabb§§§є*ŠГѕѕѕйrРЇ2Сх‰ФХхrMІЅЅљЪЫЫSH’МВF_\Ds577;X–MU*•У0 !'IŠ}{A†h?йЗяvtœї5|ГЎЗ†&Sьž˜јїэц”УЗп~ћs“““†>њˆ***ЂуљЄЮ@QЮpЏз‹їпппаа№oУУУЇбоb:oiЇ”C)s@tд›Й\Йђr!я (Њ|бОAПKлк"рQЃНŠŠŠцЊеъE••• lёS ‘ЯчCwww`гІM$мє—Пќх;ˆДЋеY"+VЌјWFSœ••ЅLOO‡Z­†FЃNЇCrr2ђђђ­rЛнI;vь8"?нuШГЄњ§~ј|>LNNNЦб5kж$UVVІўOŒFЃvЭš5щK—. 1фrЙxЧЏз7“  2i іЪ•+бммŒ5kж„з ќз§vяоŸ§ьgPЋЃ{ѕ~лдŒ _0+‹99yнэЗпўУ0ifГY9ў|ЁЏЏO&|ѓчЩcъЯUT**++щЙsчоƒ`9уЮˆ(N вЬЧœ4ч 4§З4N€ф`"W.\Ўњ§ˆ€..т:iВшDЭyeqqёƒ555 qчЙˆќсЦЫPкккЪоtгM)qУJз"єPoНѕж…BБXЋе& †№Мгтh2FН^ььlЄЅЅ&''ѕ/М№Тs‚ №rАЅ@ЕЧус9ŽГЎ\Й2ЉИИјмл"џMDЇгЉъыы3цЭ›чt8' 8ЫВрМ^€&kl|ХќљѓёвK/ЁКК‰ЧњЉЇžТнwпііv<№Рxт‰'Ђ~ччИ№OVЗ‚a˜pWMyy9ЃзыyЛнSб$J|.RRRBъtКт‚‚‚jDеЂуLдЮR?–œ7Љ"•їoGЅ—›™‰ЂдфГВE4Y4ЪЊЊЊU&wЮœ9D[ХsRДЗЗѓ›6mДZmL RPPpгŸџќч\“——WЩѓМVЉT†_”tИЈFЃVЋERRЬf3a2™t}єQы /МАM И4’Lўщѓљрp8œ999“K–,БќOгдг‰ХbIКъЊЋє$IЙнnAЊХ…‘ є|O†2—ŠВeЫ444`"П(IIIиКu+^zщ%м}їнxчwpїнwCЎLкFƒйTЇƒBH‹‹ВaУrtt”uЙ\1€ЫCƒsœ$I,XА@YRRr/AвQcbO”tє˜œ=щ" ˆ‘ЏФjnQІœ—D~PБ{IкЦPа4­ЮЩЩy ЎЎNu>1Хђv­<бТрр ЪЪЪ„ььь„нk………7>їмsЂOїћ§ŒЈmуЎVЋУ€ыѕz"33“њэoЛћХ_|V\[ w(ЗЖuйВeЊььь‹7Ÿ№пЙPEЎZЕ*zвŽK IDATЃИИиюrЙ\^Џ^Џ”œАE'Wp:иИq#~јсЈѕyyy`&œXЁЛЛZ­щщщQћЕI’5ВР‚ ˆ/}щKDGGыѕzЃMєxнЏГ•œœ SEEХ*DЬsБWJšѕˆяА–r(ѕw ЁkAтzi‰ˆЋvqЛlБЭ`jkko2™LzљCžФ[Њ-N'‚рыъъІэ[+**КсЙчžћN[[лˆгщєЩ>HЧƒЫ>tvvž0|ЧqМ<БЂлэіšLІГѕѕѕ…BёпІkыbJ~~ОyэкЕ ЧqУФx0й?'1}кŸў9>љф“˜cЄЄЄ&C9гФOyn€>IN5Ф™uDЅRQ[ЗnEGG/с$^" QЮ№… *ѓђђОЂP(tˆDKŠэoб>bй‹бд2fЇOж L!ˆ†[нFP$%%™RRRюЎ­­=чјчx5ЅМ{ЉГГ“Лцškf|ЬЂЂЂыoКщІы&&&мgЯžхE3LЌЅ€Яѓ~’$ЛЯ"д…ёєгOя|љх—Ÿс8ŽЏУэvзддХХХчvї?PT*•b§њѕщYYYУn…’Š ФОщie,4ћ‡6j4cЄ’kHŠќ“ ЯкbБаUUUТшшhT6еЉf6™­„rћ)jjjn@tл[4Ях^ђЉPŒ‚Z”sю_ u‰'йІœ?ўн999Дa†azSI"sМЇЇGиАaƒР0ЬЌюЅААpKjjЊ{dddЄЗЗnЗ; pёœvЛ,Ыіѕѕѕ=‡`Єиu1љЛп§nзЋЏОњ'ПпяUЉTнЫ—/OзjЕ1/ў!3—ђђђєТ%KТCН*Ь)3њ]oo/8ŽCvv6`Юœ9pЙ\– э,3E|šB‚Œ?P__OMNNВ^Џ7fъЂx`Ÿ шЕЕЕŠдддk CЂловHаsfєBOˆІИд;ЎШШШШжыѕ[ЊЋЋЯyАУLЬёЄЄ$aЮœ9чdўцццжF__Ÿ­НН]8{і,œN'ьv;КККX‡УбуvЛп{ќёЧХPV"СџŽ?ќсŸялЗяй’’’мsНЯHД$ЊђЯ”ЇЬЌƒСnЗу•W^СmЗн†gžy[ЖlС3Я<V2$ЄZ2€i†п|ѓЭшююцХЙЩфœЏyЎеjQPP@UWWп†Hл[єœKЦHфlѓ œгhm%Eyyљ]%%%ДJuAF$&4ЧяОћюѓђBgeeх№<МППпсp8t:NЉT*y’$=<ЯлlЖ?<№Рo @ о№O<ёФ.ЅR‰ЛяОћŸЄ]pџs“!›­oТчS Ы‹%jж9QњћћёЪ+Џ ПП?Мюk_ћ†‡‡Q]]'Ÿ|џўяџѕMЃ"д6RЇo9™ЭfКЊЊŠыяян&І;žvDл42wю\КГГsБЩdJЗлэbПЖбѓвЯlLЊLЮзс#b ЧТ&''›еjѕš’’’sŸЪ;ЮВ,zzz„M›6 УœwўГœœœЪ@ АcзЎ];ѓѓѓ34Ыыѕžlii9ђќѓЯ!вw/цЃ– „Ч{l'AИыЎЛЎ(РgЃMЎ„tХ§[Зn}њ‘ysЏ2ЄІZJL&мXR‚7OGњшN—№DяzЖfbЂ‚yЉ Иљц›?000ўS—ы•g6_]Ѕ ЈфЎЋХўСA Эb4˜\ъвгqsY)@HKƒPV>Ѓп­[ЗтХ_ф‹ŠŠШxугФ„ЇЮFЪЪЪшЎЎЎеJЅђUŸЯ'Fž)!‚Yj№s-€ђјѓ0и УhŒFу***Ю{иЂ\c‹NДЮЮNnуЦч{ј)**К~лЖmпFplЗБŽ щp;ё%ˆ!NЎG}tїŸўєЇ?№ЂWю"‰XсЩ—D)™fЛ$:ўљxˆУзРппїсӘxї]8>ћ §ЛvйП}чэЏ Œ№tŒноеѕ+ 8ЊыћЫ–†ЧeЯVt п_О,иЎЂ(№kжГ8VJJ ]YY‰‰‰‰АгUк=&6Г}F:ЉЉЉ(//_‡ˆCM…)лA Ј_gtёФl/$4xBкэ%NЁЂ ›?ўЕ•••п\Зnн9yу™у’1ЯАZ­ШЫЫу/єŒ›вчаооўЮ]wн%jpљpQщЄ…сЬ2Ц­kJј№Ня}oезОіЕ{.ЄчМ‰W 4љЛŽ7"^r&лf"ЌЭ†‰wо†ПЇB‚КЯЧq“њ^xчЮ78Рёз­7?”ЂVo€–‘<ОwzЅ}егШ|‹?XО ™К`—Пt)„ЊйЇfY–џѕЏ-QJЅ …"<јEjЎГЗvl6>ћьГ‰?ќ№‚ Œ-bbqР`FІ9ѕШ#Ьј$Ž4Б6hbТѕ‚ ЋЋЋ3щt3ыŸœJфpєііВW_}5u!ME9&“ЉЌООојЮ;я4Bfz‹?‘|JП‡nЛwяЖj4ћ‚ jЮ'Ћj" iыЉf™ъџx}И‰šGёdЪ[8їюХиЫ/ЕлA€+@ыˆ ;ћњ0ьrAљџЉћю№ЖЪГ§ћ mKВ-Ы{;ž™NœAHТ(!mI ь~ZhЫW(#ДŒЁЅДЅ J єW6I-›RFB !œ’эxЫS–‡і8:чї‡tфWGGЖ,)§кчКЮЅuєОgняГŸ‡a`PЉРвДЊ<гиxi]]Н7мёq{ћGч”•žOS”1OЇУ…ее№9ВM˜л­fYм:oюZДQЯ.*‚Аdщ”ИЖH4MS*•Jшшш 5M”mЪeЃdHЋеЂГГ“т8ЎЯfГY-ŽKыЃ <№5vЇФЙУЉЈр‹ўьзЎЋЋ;ГЁЁс7ЋV­J з–T*AWWššš‚UUUik" ЧХэдЉSяўјЧ?~у%lФJr]Tз]w]SaaсBšІЋН^oFOOЯаŒ3 пћоїЮ›*—уФё\ƒR@N$*’уЪ=ŒdбiѕRщї‰<а‚Я л† №wuіѕїуБ={б:2NНR‰‹ЊЋёПsfCЩ0ї1ыаЯолЛяœœИі” ИяЬ՘i6Cяj]іћцfЫ+ЋV[‘i|ŒЌ}6щѕЬЩA№ЌГ“)-†С––nЫ–-lII 4M”x.ZгхН„ŽU№юЛяњїяпџ;‹Хrур&ЋЖˆЯоiЗЈk’zІЁЄЄЄfЮœ9Я]tбEЪdЪ'ХукbtаЉSЇ„ѓЯ??˜———6 Й8rМмммжсссCчŸў#7žEŠарп}їн‡ДZэ&OЏзSрrЙ022‚žžєѕѕЙM&гшЊUЋђу|" B иx}М‚С МЁNNšІy†ax…BAЉеjJЋе2:ŽU(ŒЫх ИнnЮуё№>ŸOT0Є(5ІiZZ!EZВXZЛ\ЪЭ)Š‚ЏЅУлРЭoЦО)4`( Яћ[Ј3™рЗ.{хе+0пЎЊЪКБqЮjCFЦ5ЫNќўє*5„јЂ"№3f‚"*ЉЄрЯ=їg2™XNсоJЅ2-мћјёуќюнЛnнКѕЗЈ{“§іL№Љ…8i%WTUU}ЗККšIЅ.šHRcšзы…NЇN7АЅ5Ю(Š:•››;-77ЗjѓцЭXО|љ#сПGtычŸ~…NЇ;зd2хчччƒу8xНоёŠ"Ё†„кііvю­ЗоњњвK/I<žј-]hШWвZыёxМ@Рa0јВВ2йlЮ@ ЕЬ}>збб1200№љ|jFc`Y–Ћ˜’еLХїb,ОxЮ‚ >Цўљ.р'Їl ”4ђ›цfЌПр(цœw/ОјšяМѓЮыЖЖњk/М№Ÿ7нtг%J…‚rY,Ѓэ{vk^Џ’7f‚7™@‡ѓѓiš‰šсkœ.;ЭЪ•+ёЦo•••”ДŠŒд5ЯНЊЊЊшУ‡Я0цББ17Ц­ц „@Э AЗXB`‘ˆфЄo›  iZЁгщЮЎЈЈH йrК$Щ•:::јK/Н4uŒd>rNi3Џз;кддT&юW[[{qр’c™LІ+5Mq^^ EЧ.,,„Чу1tttф<џќѓЏ§шG?К’ІiZŽKˆсШв6BNЇгЁVЋн)ƒYJ*•Š­­­5еж†|Т~ПŸышшюююц EŽXMм‚С †ЯѓQ\нь‚ccpЙ№ФО}qч[А`ВВВАi㲘пZGFБсыЏёуйГaвj~рŸЗнv[эM7нД^ЉTц€ЎЄ$3#lБX,е‘њl~D&&Є фљљљЌЩdт}>%Ю Ѓ$˜dIЁP ??_(//?урСƒ§З!‰QZr).%s$Єо­Ржжж6i4ЄЫBNrэ@ €ŒŒ С`0ЄЕЇT•шїСŠŠ ŽeйЈм№0РяDИ=ымЙsЭ‚ ”+Bn--ј`6›‘™™ЉмКukїгO?Н> ѕk•rkiп/ŸЯЏз Зл-иl6[FF†mщвЅњ ф…}ZIЉTВ5559пјЦ7r§@ oddФуrЙрrЙ Y7є†ђЊПАXр‘Фw‹T__7тЦoŒ;џЦЖvЫ0ЕwнvлŒ›oО9l‘ЪЫЫЋt’]ф*Љˆ4#r<:чœsјооо˜|яtTmЉЌЌTцчч/ХИ7ŠŒЗЅf “Ф›Oмr+,e~~ўђЪЪЪ”ИG<Ўнлл‹Х‹ŸЎ-WEХяїƒeйўММ<йtЄккк‹6oо|]uuu•пяWˆ›.<++ ƒ---е§ўїПџтщЇŸ~1 ђвХL|Pќ~?М^/G`lll ММм}Ю9ч˜jjjLџWaЂzН^Нtщв‚sЯ=W•‘‘18:::тrЙрvЛ!–?\4с˜Єи‚HчŸ>š››#yзёШтpРсїƒиы.К(и"555хzН^—є8вh"Ѕ‚‚–eYN.Ёd"—a"”ŸŸ–eѓГВВђа"&”ХтвЄ;ШˆфQ!Ї У(ЕZэ’вввЄф9™Изы ЅEзŽgЌ"СэrЙ†чЮ;Ё5ЖЖЖіЂ?ўјŽ={і8\.WРщtF|b+К( h4Ÿпяя`_ЗnнЯ<ѓЬzрЄ.-{ttДжЌYТВeЫђrrrtщИщ †aшйГgчЎXБ"+''ЧjЗл]nЗ;R&)рѓ!80‘šeR<фкшJ)R=ХjЭŠЗZ­ждее9< JвH22•7ДdЩЪjЕN˜1–Ь\4MЃ  €/++[„h[ЖДдБќ8SбI"lMMM“VЋФ$љdIиУУУhjj:-‘hRNn{hllT&RяЌЎЎюЂЇžzъ'УУУƒУУУA)РЅ< BЁPИКККŽ!\№aнКuŸ?ћьГ/ž<ŽББ1{ffІmйВeљџ)§СтQ]]љЌГЮRqзыvЛyЏз Ÿл „ГІь~Ÿьџ:„ЎАя{2ВћCљ:Мз3с~љZ­ЖW\dЄЉšтѓ%RЊ Ÿ>}:cЗл99б\ ь$Eѓ31ЮЙEб\ЌГ6i*hЂР‘3Ј1хmŸ_YY™– ЉqЋППŸ›>}zZђбn/вн–••5œ•••А[WWwсœ9sTCCC№x<В]œN'|>пАзынК{їюN„Рэ`шЁ‡>ўљч_р8ŽAЏзл9ў|]yyљMЅTЅRЩžuжY…гІMsЙ\6П €гщ8 К8BВT—ЪСV=АубВeЫђ§~П]j˜,њ.Ђ( ѓцЭЃGZ97фххeYsvvv.ЂХrм"їŽKG&o›Ы•,Ы*5ЭЅЅЅiQIƒ„ЫхB]]ЮЊЁrn&Т:n5kVоTЧЌЉЉ™WSSУѕііŸ:u ЃЃЃ№љ|—Xoo/†††ЧћэЗџŒёњгbСћУ?МэХ_|&77wxюмЙe,ЫІеxјяЂТТТЌГЯ>;лfГhЗє€К:ЫЁЈЕ"Н ,œм,Ы2‹-тН^/O–K–&zˆ”*Ш/^ŒОООрDКw2z>Mг(,,DYYйB5 лѕ'.>еeЩАгˆЌІІfОNЇДZmТ-%l$7эююцЏОњъЄЧ•ЮAО—Šф>Ÿ/идд”ДхЙККК@Ы‰'œNЇ3KЏзЋдj5MQ”G„1—ЫеМoпО‡7nмhEшF’јєЧ{ьѓќќ|м|ѓЭџћŸ”>UВX,–еЋWПq}YYcuІqжМќ<”J%8ŽЫВ‘ч,•[YQQЁшъъZр_ˆеНЃvѕE­‰‚›lkМ  рќЊЊЊЄЌфё iтЪЇзыЕZжPS)чu\žч‡ У”Й6Iееее‚ |љЩ'Ÿ|PTTT”‘‘С ‚pвыѕ\ЗnнЦЎЎ.б$цƒK“Oј5kжlЃiZјщOњU№!QъююЖ,_ОќЏ]]]#;ŠЫ+Ъ/iЬЫЃ———csG‡ьž{юЙИуiXЗ65дс†ї‰RSS“с“O>X–ЅШ–Eср$!Ѓ'0ѕ RZДhџж[oб&†s‹ъ0ѕ…$,š›L&SžЭfsbJ‚[|ЅзЎ]Лчyъч?џљџ/ющьDћ“O€у8МxшkЌџњkp„ж`q8АГЗОў—джтцys3rLПћћ…ŽќЯ{яН]Ўг}ыщ•+WUЪлkВГ5aпЕ)JJyщЅ`M9IUM!ЉЌЌ,{зЎ]6ПпoR*•Q /щдНЇM›Ц8ЮHа’”{'K999ШЭЭ­ЕZ­mЕШhIѕ9ŠdЫ,Щf#dД4yyyЅХХХ—Ь™3gЪЂѓDЎpЂŸЬИrѓШ-bќИЧуijjŠџ„Mq.rNrЫЬЬЌYО|ЙљЕз^лvU$я€_БbEўE]ДшЌГЮZкддддввтяяяЗ455U…kи§[‰ч8Д?ё8v;~іщќыд)№ш‘Чl6lяЖ`хДiШжjгЌтя[:;/9ВЫЈжМЋbЉуДNчецхU ^/УPVUA={tЫ–!уœsСшtiЫСfYжеггЃ#нbdŠІtK–єz}pпО}Д^ЏiЁWи"Qт8ŽБйl\GGЧ^ŒЗя_ХєO€№Ћ_§*rcІ"–Gtюќќќ™&“)ЉBщ"I­ф<Яctt3fЬHeи’њЯE‘МЄЄD>U)IŠgфyХХХЫvьис_Мxёc„ˆDзAч4 §шЃ~лl6_Яѓ|~ИЂ [TTфіЌ_ПўфЕз^[ћяцряНoo/о<~Лz{Ёзысp8тюo6›сЄiќП§ћёГљѓГЏЊ­љУГћі]€ytзЎСЕkзЙъЊЋV€‘ф„ @„л%“-ЅккZѓW_}5цїћЂ/šу8YнH~1),,d§~BЂљT(''Z­vЦ кd”hT EQ”шяžь!‘Ы“Щ4ЏАА0щžXrœŽчyиl6TUU%;lмЙЄi^ЏзQWWПQдЧ_Iџ9™ВЉбhgЮœyЩž={жА,ЋCHu'ёКтoћлUUUЗ›ЭцњiгІ™ыыыuгЇOWежжJKKѓЌVkщ+ЏМ2Ј]N’л&Ѓ‘нЛ0ъѓсХcЧ№ілoУfГс_џњєсШ1’L&іэл‡xЏ;ŽУУPБьЫŠ‹ дkзЎ­ЙыЎЛ6”——/ёљ|=>П?&\Zъ*T__я­цdЖXМо_ЩRQQЏ+hВжyЃбšІЕƒ!бmЛ&Э'7vSЎбhfK[ЃN•ЄР‹Ь\FFFкDrxЄОm6›]щЎž*=1ЛЫсpXJKKЇ@]]нЪН{їŠзaМ/ѓч?џy~ffцхYYYЅгІMcЭf3ŒF#єz=Ьf3*++QVVІГX,њ^xсЯѓВ’SЂ€NьœнŽРШ[­˜нд„  ;;uuuXЖlYдОgœq:iЇ+ипп  WUW7ŠРV*•ЙE1EEE‚зыФ$2T”ЬрJјfЮœ™ нrM§в’ZUU%8ŽИaЈЩŽ,((ЈAtlЙИ‘>яХ€›№o2"yfff&c2;х\`$gЭЩЩ9э†4Žу„šššИЉƒSŸМaв|lЗлЈ­­5џЉ­­]E\lќІ*,,МJЉT–PbС=2<##EEE(((ШАX,ІЧќmрвˆффq‘qжёИ yNЎі6Рб!–.]Š––8N9rguVдѕPЋеИтŠ+№љчŸGО;nдUW+[ќ-;;ЛX„жЈtQIЛмtqTšІЉььь12ƒKъяNЧ"R]]-ŒŽŽЦ”Ц’.VSЅТТBЅйlnk‚шдŠ&Rз&NMЯЬЬ ЄТљШе’L)++KљNJW`n:ЌгщRю†"“\DDЃMг§ƒС нПЖЖvUXDза) EQu …BЋT*#њЇpБЪ^ЏGnn.ВВВдŸ|ђIп#<ђb0Тa'3 IDAT J-Me7R,_'ЫEю;v| њ]NTTTРэvѕхš6mZдymнК_~љeдwƒс§kžq\Ё…9sц”:N‡XdA №tp=тК+ЅUZвНdffВ<Яsт=HW0‹ЩdЂєz}5Ђѓ;"Њ2б\ f™ˆSЪiаjЕ%™™™)Ех%WJёфm6*++гВLЫq0ё&šLІРф#$69YяЬяїclllЄБББ8оџыъъVюоН{ ЫВ‹/.ƒ™EХЄ‹’'*К(JJJ2юПџўц‡~x}ШН]MЦжeх62пYмOЎ4QkkkпžxтC@uV6ОњъЋHS{ГйŒ;wNzЊТ ю3*+dC …ВММм!roЙуHї.//ЯС+ЭП–[‘Рd"ŠЯчCnnЎЂњVP__СЎ]Лю:x№ псpјGL>8ЫВQ]T*дjЕO„~Žx yнКuѓћ§A)АН^/<мnwЄ’јJn"иIЮ~ъдЉў+VМђббЃGyAрrLиЕkё§я ,РЖmл`4Б~§z”–ЪЗ'S>5ЅeВП@MMMЁзыЙїD9иЉ€ŽЂ(*33sD*БЄ;зЛЂЂ‚ђzНiеЛU*(Š‚^Џ7 К@Љд yцтIРсрjЕК,™Bˆr'DCЅRб‡ТЌYГІГzѕъЋxžgH‘АЏЏCCC‹4ВгыѕШЬЬ„бhDqq1ДZmФ-ФВ,КЛЛ.НєвєїїАz<нu&S™uзnќр?РеW_еЋWcЯž=0 ШЬЬŒdX@ss3aTЉpfqЕЊќќ ЏCqqБЇЇЇ'‹,Ё,зВ'UЊЉЉawяо#–“.БTч1Таа CŒ§#•y4 —••Uрp8z-’G &‚h/-n§вŒ0†Іщ\9ШTHzТАZ­є‡~˜ИЅ+ЃдЧ‘‘1ЕДЄч’Шh4;Mг gš544\рЋ]Лv utt’ю@В.ИЯчƒлэvљ|ОC[Зn=‚Х] @ѕшЃюїx<Š›nКщŠ––цШ‘#8vє(FЧЦ&œ›ЁiTTVЂЁЁГfЭ‚нnМњъЋп‹р{>щьњЧЅЕ5kюYД?yу Мўњы‘џŽŽт;пљNд˜ПўѕЏП]ЖYj5ђ/Мд$Ўљ9sцф:uЪЧ0ŒJЬтR(1ёйЉњН+++Г›››ƒЧ1uъL…Ž?Юј§~єїїЃММtnС‚SŽWohhhаЙoпОžчГJKK!z$(ŠТШШ†††|@ НЙЙљqЇгщEHџђ‡7п‡~hяэщБsС`d3 ЮSЋQЎP ‹І‘Х0аPFУ<k0ˆЏ§~kmХЉSЇ№Сƒƒƒ}vЛ]lќюрylЯžЯЯ(.œSo2­Иeо\<Йo?‚<Є€я64рМђrшЊЊsюЙ“ž?ЫВLvvі€Ус( 7rˆ„Š’м.UЮЪВ,ЃT*‡9ŽЫ–Ыh&3W0\?ntt‹гІMK‹э ++KЁеjs 7ѕ3 м2:b”hž›››ЏP(ќ4M'] ХРРŽ?­VЃAо>{ZРMЮ%œу8‡)в2ЎxRПv0ДiЕкЄ ?444”hнЕk—гуёdgddЈЕZ-ЭѓМчљ1Зл}є№сУzўљч[ „сpfГй0sцЬЕZэ,!Фyj5–ЈеЈs}1>[МН9Фч•ЯcПЯ‡ї*h2Э>їмsk,Ыћ‡к„pыЄПмё‡GЯ=ЇсВКК’ЦМ<<иМ-##1чP˜‘{ŸІќ|0Z-J~pmТёсѓчЯ7~єбG‚JЅЂќ~?”JЅlvUЊbsvvЖwxx8rпфž ё<…‚AЎ9=НC`Y555ВqцS9Н^O †"H‚ЪЭЙ#Ет‰хЄ8q…Ц"N—rŽБ РсУ‡Ёе*pЫKБёууpЇc|`МТ)ЯѓF“š>!™CЮ`зааtф444TиѕЯўѓГмммН^Џсd 8њЪ+ЏМѕйgŸyŠnЃ ООООВЂт7MЉTИLЋE.УŒŠЂB;’Ÿ‰їС0XІгaЉN‡ЯнnМ16ІІKK/ЯЬЬЬлЙsчŸ§~№рр §ŽЯЖ]ќл%gо>-+ыжЏМ‡'lУhd…U ) †™ГP|ЭеP3>їЌЌ,RЉ№ћ§yЄбKфоЂЮ*^џdA^RRТЦm$ъ"X†ЦeЯЦ›яDOo?†A}}}фїdцаыѕPЉTfФњИc87EQT"жщаЕZmЁбhLYДэяяЧ"Р.,0€fBЧ•,И'гЗ•JЅЁ )Sc\.—Ѓ   eщ ЁЁa!€Ё… >Рqœу­ƒy„‚^XьТ… Пe6›яUЬџъѕX RM фЈЯрS…Г320_ЋЅў<4„УРВГЯ>лМwяо5УУУcњћн+п|kэS+VМ_}cQFЦЌRƒС1аЈTа#{Щd/>3ЉsЏЊЊТ‰'d§ящ_YY™aзЎ]i")Ф)Ј” ЎМl^ы ,==`&ЊТаTЯ###EыЂ–R›LчŽ’чu:]ifffJрюээХО}ћТР^‚Т0:5p“D‚O|5™Li ‘3Є‰\›eYвД€444\АsчN,ZДшQŽуФZёbDлииxІйlОЯHгдЯєzЊBЁ˜ШSЙŽapw^жу‡ЃОЉЉщWŸ}ійO§~? €ПaгІv`žXНzйEчQ}i™QŸŸrŠцДiгŒ‡Š E•Z›SwFF†šІig0Ь оI•BЙтTр ‹џЙМџxѓ+tuuІiܘ1#Љs8бZ­VчvЛGП`@SnхфwЁ˜ђ”м`БРw9Siw<№eggЇЕИПtŽpЬzкТgA@}}§лЗoПƒeYЦћ ы***jŠ зЉ(ŠКЫ` *%РŽИDрJLQАq^щР+§№ƒ‘пОvЙ№Jo6й№Ѓœ,ЫШ€RЉœЛdЩ’ЛZ`TIкŸџќчuWџъWПЫYАаЈ.(Hи@ЈeЛшy 6ЏO*Єбh<%wЄТХyžE‹}Я)ЈT,ЎКr.JŠ3бббЃGІrмЌЌЌ|D‹тrяc87ywbўР0ŒAЅJ.rГЗЗ{іьFЭЦчм6› >Ÿ|—ЉHБj…,‡ЭЮЮNI&чЂkЌ‹`EEEЪ"ЙtЎ†††ooйВ…>чœsў §JЅ’ЎЋЋ{˜Ђ(нz=JX6LђZFџЮR*ёŽu~?В”J\`%{М`щХžБ1\]TPЎ7›1Рq8\ВpсТУЛvэњ@№њыЏ/[ГfЭ_Y–5‹з$]Щ8FЃбхёx $АЅтsЊ.1NЧ‘1рRЫШШHв9оЧІЧџKг€JХтšяЭУЫп‡ЖЖ6а4™3gNљИ•J%ЅVЋѕˆ6ЊEZЄЉ–YRБьдƒШz{{Б{їnhд,n–6ˆ]s^}ѕе)/RfІW]u5”JЅ”sszН>-рфi^ЏзЁO5@2О8Gmmэ7п{я=цТ /|nЮœ9Ы†)ЙPЋХ\qЁ%ХъAЮИ8/Ou[№ор Vцš1`_и/О2з €‚Іq{A~жй)&гЭЭ\pљо{я}ŒeйœtˆБR*))Ё9•рA^txS233aГйb & ‚€>x'OЖЄ4~~ž>r;DЎV)№ƒЋчcУЫ{qъд)P5e€+ ŠeYbѕn pKCйH>epK]T(§љ­uP(hќСPI A€.k BдwбЂShŸ.ЫzћЦрp8-хо.)…JЅ)И EкєmrN‘Гдзз/с…дЏПіZЃ‘І…UZ-5Unљ~П*зŒ{zqФщB›лCNx3ѕz”ŠUm) F†Сe&ЕСjЭ>ћьГo\Лvэ†aLdЉЂtІаVWW<е—\gžЊо••ХШ…ž€ХвV‰кšјA†1K ФˆТё{1wvQї&ўУя/Р‹/эFKKh™9sfТчЂT*)†a4я:ѕ>QЮ-ОWLмНННиЕkзЄР]+ЮЋЯ рy€чEo}оЖНН}і№…WњЉЫљРsrrвїt#ЖЧq^Jб4.зщ ЄщИ §‡u_ŽŽсЩкъ AžЉPрќў5hХ{ж!Д†3ИVххЦьП"3GG…рТ@ “‘Ў’H`04ЧщуЙЋврыV‘c’Џ‘ЁТ фусiBŸ7ЙЯтw1W+№уkсЙѕ;бвв2%ЎP(h–eХ8)ё§Є‰#Q›  ƒ;q`o!P“bЏ”SNќy|ЬhУˆZ­NЉ$Tь1ЧцLыѕњДFПЩI_}ѕ2K5š(ƒ™дh>ј2ћ_ŽљўpаŠv4 o˜Эбb>EЅi\˜MљъшбЃВтl:‰eYŸ4'ZNzJ–L&“vВЌ-9šДуŸšП|4ћY­fё“ђВlœщЗt\|ЇЋ„И9rаЈRЩrkП рщо>|ѓР!МiЕЂУуХ7їР]-Ї0Ф.љ…у[+УЭфИ}ŽBrЕ'УA&щцІ$i4žфк‰pАŠхOsџW-8џ‚{Аљг§Q §tЫWјЮeрТK~…пџсЕШomэ§јцЊ_`љЗзтћ?|~ШЂЎб(№гџ=3a€‡S€ЕзЕЃ˜ѕD•XШїДZ­жLюЉ[фК—_Кu5ХАйьxхя[ёљ‡сtyqп§`ГйсqћpћъKAQtФ &хр$Ч#чƒ;­њ№јёGAЇгЅЭm0 Эггг˜Ж“РумrВ%фГцyф+•(UЋСPšGЧ№§C‡бхѕХŠхaТ—ЌZЇУьLcЬТAю?KЇƒЯяЧрррщ@ЋеЦ;нѓб4LtсraApx!Š+ŸП|ЊЇЂЏoОН[ЖЯѓИїыaБ a``wўќRЈеŠШэPЋй„.™ЌС$5ЫФŠ5ЅT*5 УФ=ћОО>B?s`KИЎ@aнƒзСœњЯ§П~ ќцeєєкwќќ2”–цЪŠьБѕ]yy^фЂЮkЌЦђѓБщу}–eАњ–‹уыйФg’Є LЇX.™УYZъВM4ŸгхB~јњqўо?pѓFЄЮPАh2БyhэьFu†€EйYX”•тжс}Ѓ@-~‡hТі —ЫuКN гщ˜tафˆЂЈpЫьск=њ:FFЂ›1Мёіxуэ/"Ÿw~ё sЊpёE‹ёцлл#у<№‹ЋС0ЧЈе,~њ“3ёрCŸрФ‰ЈЎЎЪ0 (Š’SЇФЙЃˆуИ€˜„.Ѕмм<иэќыУЃИёњХPЉф‡>Н —|gqшB€ЬžUшс#јtЫbЮ žyю#м~лЅplљ›B‚0мхуДPxў”k­OFjЕЏE[€( о№=ЁeŒlЁ ŠphЏ3ФА?d\sљИћЫIтgOиЌV'•вŸ0yН^ˆUƒФявA‚ LЈMIХ№;nЛ >4EЁЕ­/Нњ).љЮ™˜лX :фV€"чпг;„›і’sсЩЇў…‡џCL0%р“OOТnї";;;FЅ K2фНZQ4ИЃЎ` №ƒAйfЯž žчбжж†ЇžkЦ ?ŽИ „DьЫчЩЁ8nЌYћ8.ˆŒ ъKБ{Я М§юvЬmœ†eKfЦxм?ЧЖ>зс9вš”B’ј`щѕzŒК\E!O­Тг*#Рќіўу8цrЃAŸљx{GC!Ѕ?ЏЊФЃAДВ ?ћ„†ЋqЦ1S%Лн<т>IЧБbЈr<ЎM|Щ™3"Ÿ F-^zѕSܘ^†ЫчFЏp‡;ж<ЇЫ …‚EуœЊаГќN3–ž9­ŠпЙє_Сц-'‘%K–Ф„к†НrAY1'А.ъїћНС`0юўЈЌЌDk› O=з П?šЫOЦyјэ+шщмљѓЫ№ыћПœАэЁG^C_џHB[ށг&5(Š:-њ6 Н^;ЯC пsxћv8щузЇZбюіD~sё<liХ пr­3HБ]j9M(џ;ё›nƒСu|щИгщŒммгrŽут>ЯaFЅsG}ŽьыП~єOяD h?[§ќП'~ŠТ‚PЯЩћю ƒВsўыУ#иќщ8Ах СсhEВ`8;–Ззыѕ№Œ[Х%{їугЁ!(iПЌ­KФ€ѓokЧoNœФы@…`ўxВ;Ž/††b еэMQ0™LЇk€Ых(тO BЈ‘ьyPˆmдbFGK=тя[>;ˆWџБАha~tэљШ4ъ№и#џ †ЁсryqЫЯžB н‡ђ§N l@мq)"; б ˆ@М Чусy~RНББакж†П>лŒ~|X–ƒYо6cz^|іv‚€ђВќШїѓцVуљЇo‡зыЯ №њќPЋт‹Q$‘F0<­ђEQpЙ\~˜к–†ёD`г4 †aааа€элЗcŸЧƒŠp ы№ЮPSž™9Жu`ѓаŽ8œ‘БЊu:ќЂЎ5:]HŠТмL#ю8t[­Vдєј ЏЏu[PЎгaM]m”ўMQ|<ƒN'ЪЪЫЁгщ" Дn:ШэvгфЕ8чy~BЉдфћХ‹АwЧQЧGг LXџќэ ) ЎЖ8ќ`~S5о}ѓp8=—л‡LcNяxzYYY€XЋЯhŒBц}Т5!ZjžчЉЩRю!ZлкёдsЭИў:рБМzZaмФЪŠ|йп&"щŠвіdc“›гщє‹ №R_tѓЏЊЊ‚F­Ц>—‡Л~bГAЁРЕеИЙВmяФзNў0НZmTИjф( Ksr№н’bќЃл‚лBЇЫ MуїГfB#ц‰ћp:сeЈХєИN7yН^F ьt= ђ‚ аёU 9POrкfL/ќ‡дУ`zClу†ї?івЅK'ЩБ№„?Ц60БX.]Ч%жжzюмЙЈЈЈ@k› ЯМА>7хDx1ц‰yЃМ^oJ~nщ'п‹рs:iыї-ЧЙ ъащїЃХяˆƒЄ>LQrU*TъДШT(P%›ј]ЪoЉž†Нэ.7xЋkЋ1MŸ!ЛџІЁ!Pљ^хиЇ“|>ŸBк о=H†FGGнR`G/$r ћd™_‰,Dяt’8АУз% }ˆ•ЎЩї0ЙЕ<ъOE8ŽSŠн/&ЃЙsчкклёќ†]Иіъљ`Y:.hћ‚aбј„phл\Ўq•WКв{<žД‰ЫфИф600РIRKИX§ГЖЖжЖџўь—‡‡Љ_ЦwY2Љ‹ЫЭqё_Л6—[жШvаnЧЛJЅВЫl61 Ур#ЏOЊфѓљ8ЏзkPЋе1GЄœ:фjЄCўЎаi t ЃС_Z’ ŠŠЯS>и8ьЩDq’ќ~?Яqœn9€GHмRVЯпљ9Ž›RG‚ЙsчBДЕwрХ—ірћпk <: eя~ 6n>>•ЁcˆІщˆУ_МiсZзВMш’!ђС<šІ1::šv‹ЙШЕiš†ХbИэЖлоЉЊЊ:99ГwК\XЊ†кЫ‹‹№p™Є(Ч/‚іЃЧ`ѕљp†Щ„CЃЃxГЋ L&œ›ŸйŸЌХЖЗmліъ“O>Yvїнw_!<нœЛЕЕu”ЂЈђњJ’TЩfГqёljЕCЖaМќ}Iп8Лз}ьol<ŠM›O 33gžyц”ТЃ§~П@pn› ƒˆЩХїОDХr’DообПНКWw&šƒїѕл‹-J*@BфччУh4F\_„m@хѓљ*•*-AцR.ž'ЫяїsJЅ2х4щbБXњЏМђЪз­VЋУчѓmZКtiУГV+[ЉVSyЂELУВа ШQмЂ№їЮ.lЗ!W­ЦƒГgтsы~ѕѕaќњыУЈ7PЈе…ѕ :=ŒŒŒ|bГй:ўђ—Пєj4šР=їмsMгLКEђ–––€TьOЗбnddD—Ђ(\tбE‘2HЩ”tкН{7,=ЃВП}ИёXвРBžŸ@ рУ8АIцЯ1чц‰Я<žчyЗпŸœЧG4ВЕwtтЅПяУїЎhŒИh$kjjТTK‘‘zz0ŒУ0АйlЎТТТФ+фЫt\R'f†nooЎ­­MнЊFЬзйййЗjеЊПїїї№кэvo{{ћ •••?yИЏOxАД”R‘-Iн|<^Ÿ—”у[0(•XY\„AŸ§^/іи†q‘N‡­6ў58ˆ€ппВwяоrё*yф‘/U*ЗfЭšP•V€[,•n9У]:tяББ1š69ОбhФТ… ХPЯ)ЯqфШƒБсЙn<†›Уh4bбЂE‘hЖЉPмю№G›т{ђuRЮЭƒ`§^ЏЗзхrUNщhš3gA@Gg^}m?ЎМL8Р‡ e‰ƒ˜ŒфVd›Эц+,,Lylq|rс_ЛККќЕЕЕi›ЃНННя›пќцЫ}}}#uєє№=ztЋбh4РdњŸЧњњ№ГТBЈУFV —Йšap‡шю"іџбДЊШћ}v;ўкй)пBх4>јр—,Ы wоyчЕL:nПпЯ9ЮLБsЈxmхєэT‡УЁŠЗpЄКP1 ihХ‡›BР6 XА`Aв™Š‡Жлэ6DsmYё|2kyдNg—нnOЉdбьйГQ\\ŒŽЎќуЭЏрїs!ЮvE'#IWr9;88˜ЖRKвёУixI[Рu{{{пљчŸџRooЏ Р;€Q#ЦvьиёЂлэўј+— kЛКk 0d‘{K-ї{ј7щўя рС–xонкжvЧрр`q,vc<№Р—>њш‹<ЯЇхњž:ujŒaZМІ,ЫF-ЂщаЛчёx щєЉЬAгtфyТРўј8єњ Ь;7ТБЇ:GИњ cЗлЧjPХ|‰]y >ИЩЦмnwџшшhRr9y23gЮDaa!:ЛF№Цлсp‘ТtЩ–­•ГЂ’7mll,%рЩYШ%b9(ŠЪ wпL‰кллћ–/_ўROO у@EX"И[Зn§•нnЖлчУšŽa›н8VД”ф1П‡єћёp[6X,ƒ]ЧŽПцјёуИ8ИC<іћяПџЫGy$-?rфˆ_lс+nr}КS_ggчMгД(ФГЦ'K4M#V3? [ЇгaжЌйbзЄЦu:С)‚jQ$—гПe;ŽБ\›t8}‡#eхŠЂ(444 ??н#xыC№…CUгQ“Z‡ ЯѓЦ`0˜–ЉX.6ŒW(єž={†S;Аэ @-О ‚рќќѓЯџкпп—“умOієрŽжVaŸгКУSрж#‡,ќє№aЁyd^ЏwGѓŽ?jmmmGИ•/Bw!rёеŽ4мчѓq­­­йbonищіЇЗЗЗћХчB” ЄуЇ2EQxm:†>>Fƒњњњ(ŽŒнРщtТяї#šc‘ Е\ЮwY%ЌVkЯчKкg,Нx555р8]–ЁШ>Љ‚[jiІ(J|8˜ооос’’’ьTЧ!†k‹\ІЏЏ/“чyžNтDd€MrHB ѓbМg@БwяоOM&гс3fќАИјїЌ‘eБаhФ"Ѓ• є’vО€!Ÿћэv4Œр˜ЫAz,Ы GŽљ<Жй№Б-TЊŠЅBuЪU4QŽƒ‹pi2 ƒъъjЬ;,ЫžКъЊЋc\e‹Yфчa€_ўђ—лрілoПnЊ моН{u*• *• JЅrBюьs"FFF :.Ъ`'5кЅ2xк …ХХХq9іTidd$рt:}Єїbв5ЙЪ#[ns:ХS7Irzkyy9ККК„мм\*UpЫщФт ДZ­)YtЅURДЎT*qќјq…˜@“РBЌNыDHі ФAнБ2-з^{mЩНїоћУ0Y%%%ИшЂ‹аггƒЃGТfГСсpРсpРыїУЌзЃRЏ‡С`@YYъъъ еjE фьїп?АrхЪ?ƒAihёЙ;D‰…ЩќшбЃЖ@ `вjЕ‘…’Зœшœ ѕііŽ0ЪЙйв$S\\ЬЗЕЕбfГ9"іЇcбхNчЂA7eВ€ RЎњ§ў^ЇгYœ›ПеJ"D^LšІ ЙK/Н4щ “xsrevЙ\йщ4‘J$чV*•№x<йнннЃ%%%“ње;::Ж!Pё@tїе[oНЕќюЛя~’a˜ВY@EEЪЪЪТqбц†xFA–e1oоМх[Зn ž{юЙ†C9D?LРИЎ5ЌјfЊџт‹/x’k‹œ;нњіЁC‡м,ЫЅA:ƒd”JЅ 6ЅœHфŸъьБЧ^”xsssЏЫхЪбjЕQ‹ŽxьщЬ?pр€“tГЩIфНMf>ЧУЛнnFЪЕу;б9†‡‡сvЛЛm!Ї{wиA.RŒUЮjЕіƒС€лэ–ў5aŠОооо”@'gЌ“ъ“ У(N:•Вh.хоRЎЉVЋЁT*3ЖlйвOўЏЋЋЋgљђхЯ[,–ADыиv$ьк5kжЌW*•Й“Зј“Ў%ЉX*'>’bCCУTNњУэьїнwпњгŸž'юt:н{їю5щtКˆz@ŠхёDцdA~ъд)дP—n‘МЕЕ•зыѕT<‰ йёћњњ'1ЮЕЅрNИXƒ4^U9€їћ§ЇЌжИЇ,Щ­XRЃšЯчc@кMШќшбЃ)нСxVsвbЎVЋЁеj122R!EwwЗхМѓЮ{ІЛЛлŠXP‹!„@"ЇcЧ[z\r[<q*Vм)<€h€GАЕkз~ёјуGОqуF›FЃQщtКˆў^#$EђTЈЃЃcФхreЪљагiД;qтЃзыeuЄj1еyЌV+ЌVk;ЦЏqуЯШ”cЫhKЙИZЌVыW§§§)•%"^ЃбHЕЗЗЇЭЈ&™EюъїћЭ}}}ђ9yS$RЏЧ' Z:ŽкЙsЇаеееuоyч=енн=‰иŠqŽэEиDsl&ЖмqMeK„’Иеј=їмѓй“O>љlKKK‡Ых*быѕШШШ€ШНE‘œ^:ИъgŸ}Кивэf€ŽŽŽ Й(ХљЇB@@CDым1м;бФ‘(hhшшРР@R ”еШЭd2саЁCiЩ."Efв-pїюн)Х€ЫqGЉо-ZЄ].—wЩ’%Ouuu #lв*юBД(ž2АO'Mpу !€шАеШbЖfЭšm?ќ№G< lвb/2-№ѕїї;њћћЭЂD@ъѓrРNфvЛ=шp8"њЖ”{Kэ‰ЮaЕZсѓљzЖы 2\iH„‰-'MюЎЇЇЇгчѓб>пЄоYš]]]B*uЊх8’”Г* 8Ž<›ЭцœdИ„ч”уоNЇгrп}ї=eЕZG1ў€“Бй‘TNŒЏТР АEJрЂˆ.nЮ—^zщѓЯ>ћьi­VЫKС-чпN…ЋnйВХюkуf“™ЄB{їюЅВГГЉx>єdЉПП?888Hъл"ШIуVP"ЪŒШю#JМ `0и‘Šо-еE.›‘‘СДЗЗЇЅ‹9ОŒ™кЙsЇcђQ&_n‘ЂсссžлnЛэйССA1[šx!†”ŠРŽŠGи*ўŸl‘т\‰ш†№d\zŒ§Йчžћ|уЦOЋеъ )’ЇгB>::ъюъъ2“ž‰"пR™яРМZ­ŽЋo';GphhЈбР&нa‰дТШ—Щ#+†Эf;800tХO)0Ф‹a6›ёеW_ЅU4—еФ<<<œыp8<“”ј<тƒƒƒНз_§ с *фƒMr0бx& ь{юЙч?ŠcK‰xЦ9Иё]м 8љ“O>љХ;яМѓœRЉфЅ~іtюгO?ЕГ,K“ЎПг‘266cHяD:Ќё~П>ŸшЦИ=†Д%Ѕs“$<ЂЬлlЖЃЩе&В6Г,‹ЮЮN>ЂЙј^:>!ž1;wюIzЂ8чвлллwЭ5зЌяяяul’k‹њЕh<Џ)@ИЛюЙчžкЛяОћХџT`‹ј],ЫъЫСEG|€;џјЧ?~ёъЋЏ>Oг4иЩЮхrљZZZb"пЄвA:$Q$O'А`hh@`чy‘[‹’ШЕуHœЬ &ЭŠшн‹хЄлэV$л‡+We:ŽэььLKpR2‚[ЉTЂПП?ЧыѕІм HœЧbБє}я{плаппoЁcb<Г‹ДŠ“БтŽНvэкъџ`‹дааpСюнЛя""йTˆ Uх1nE'ѕp7чУ?ќХ† ^ (ŠOА`лЖmУ,ЫВr;щLшB"ЙFЃ‰ k%Er’g``€:‰qCš\„ZиЄС*Ю-5ЌqИ@ рх8Ў­ЏЏ/ЁƒIю$ЅКБйlЦў§ћSvnNdИ^ …BЙkзЎЁЩG›xшюююЛђЪ+џжзз7Œq@“Ў.7BЗœ› XЛvmЭ]wнЕсПи"езз“9Иу:ИдШ&\МNЮ‡zш‹чž{юE|*@BЕи>œ-z.фєэtщѕЄHN.щpƒuuuq§§§Ч1nЉh>ekЙTя–ъмОООЯккк’r)ЩЙФHИЃЃƒч'ы4Щјф{Љt@†fvwwЇ’кнннwХWќ­ЏЏOL!}иRw—АеkзЎ­§oЖHa€Џ ‹швXt1mT|ŽФ@2иХЙnнК/žyц™ХHЩdЗ}ћі!šІUrЁЖrўѓTОsчNЪd2Qфѓ%u%ГˆŒŽŽТчѓњњњ:1j’{'Ё&ЅЮ €kkkл=44Ф&SЫˆж‡Ѕр3™LьСƒSŽV“3м‘Vs•J–eелЗoHvŽЎЎЎОЫ/П\ l2ъLХХ#uwЉoКщІъ;юИуљџV`‹T__С'Ÿ|r3У0Ђ.и&ВЂGEГ­[ЗnћгO?Н^ 0Й\.пў§ћ3ЅБєR‘\§– РAРŽ;F д‰ЮгййЩ }XЎ-Э“e‚‰f…0ТН].—няїŸъ uЃH˜&ЭE№FьиБ#-ЉЅт{щЪ*оpЅR‰ЎЎЎ|‹Х2eуZи/РыI#ЯЄ*"ЧVоpУ 5W_}ѕ†#GŽУУУ)œђџ)ё<мЗoпБбббKŸ}ійЛ†б"p Цupв.‹ю`_ЗnнчO?§єЄщЂrєЦoŒQЅŽ—žЮxђеj5“HŠъTчiooчКККОТИ­Тh#lмњiРд9wФ ž$аззїykkkJЂЙ”ƒ‹‰Ђ(EWWWЪ†5Љ '=’оВe +—Х`“й]вXqQЯ–[фиЕз_§–eѓxž/:x№`YssѓIПпŸrе'uuu МњъЋЃmmmѕ‚ А%%%+_~љeЉˆ.rpЉдП#*Эяџћ/І №;wєїїчў;И6lйВEШЬЬŒ‰UO5f}dd~Пп/q‘Џ1х•Єб_‚›аЛI§›4Хћлккvлl66]VsвO˜››‹mлЖЅ%ЩˆжэХ›AІBв4­пДiSB‘9„(.Mл$-ЕŠan @}Ы-ЗдоpУ ”Je.БаQ###5яОћnриБcнЉœћПƒМ^ЏџЭ7пДМћюЛЙЧ™Ш‡ЙЌЌlеkЏНЖ!ИШСуEВ‘щЂ‘XєЉ|xxиЕuыж,iОК4­5]i‹…s8Ќ\Ж]<Щ б9;::‚VЋѕ0Цэ"з–FІЩъл@rœ[фо~Злэ№ћ§-Љˆцёќн …CCCДУсH[ўЕœеœИеj-˜ЈШ2ž:Ƙж(5 ‰Ђ8щю9Жjѕъее?§щOз‹Р–.n Ушwяо]ђЪ+Џє?~…BЁ”+H!WyH>Ž6oоL›ЭfY+|ЊЂGGпнн}€И.Є—eBCšH‰КТ€hp“ ОПЏЏo[:Esв']PP@}ўљчiуоrр–fr577gИ\.йѓщюююЛьВЫ6H8Ж4fœЖИ0E€}ы­ЗжмtгMШB ЄБЌЂтѓљђ7oоœїФOиЗmлжчїћгж<ъщщqlиАЁнКuдюнЛ †бЪZ ^]]Нъƒ>И бœИ\$[TЈjX—-ј[Жlщs:йdй(1}TМЯRPЇBNЇ3иккcDKGtн№№0€/,’‹*)’ЧАШ%d$Z(Pъ##eќmmm{ЪЪЪ~ьїћ‘hяn)ЩqU–eЁVЋqќјq~ХŠ`Y6%пЗ\дš(š“…ƒС цЃ>ИьВЫЂК”X,–оЫ/ПќEТMŠсRу™ь(Ž}ы­ЗжоrЫ-/*Š\žч#РfY<ЯGЖџпо›ЧЧQщТOUWoRwK­}З,dIЖeя;ЦЦl р„I†\BО“!737Г„сВ&Ь@†р@Œй!‰ ГйШ‹МЫђЂнк%kWЗіnЕднЕ|ЈOїщЃjЉЕx™\опЏTеUЅЊSЇЮSяўI’ќE 9ŽУШШˆхЬ™3–SЇNЙГГГэз_}TllьЌMM<ЩВЌ”””єrvЛ=VЏз›  йzlЁž——wћчŸЮнrЫ-џщЛ,=щ€ŒPEЪГЯ>{”у8<јрƒAE;;;ћKKKщ6аэ CNi]{&\ћрСƒ|\\NЅжЉу477K6›­ u…,D$W-ˆШвЄріе2ч0оЈцџšŒŒŒ8мnwM[[л‚ЌЌЌА{‹уЦъ™‡тоф‹› Ъ7мpCИ—y/Р?g74 Eёœ—ЫхJбhдаТЕCЅЮ„sЛ\.ЉИИщщщ5Ў=“АVEQh‘œŒ'"’Г #ЦL…s€Ћ‰цоцццOЃЂЂВГВВІ5 =Шtє€6›Э8wюœВnн:Щh4ЮИі8™1„м‹хš\555 YYYƒУУУŽЛюКыUАIрэъšTЧ~єбGsyф‘7ДZmн `СєjunЗnЗ^ЏзмжжfnnnЦgŸ}ƒСрHMMNOOчЬfГЦЗшЬfГ6"""HЄEQv:юЁЁ!яаашp8$Лн.555im6›EQ”h"Ъ’2НtДmV[иNž)//яЋћїя—oКщІџD@чі7 СF6WQлЪ3Я€Аi1œХYw—и$@…\Ÿ=рШDqДCлуёјЏзы_{Н^ˆЂhnoo7_Мxб/ж“…у8Y7ЯѓВЧубŠЂЈу8Юш[‚ИЩdђп—Ž cђщ…Э)Y§“Pnnюэћїя‡рqpšhЏєєгO xRSSd2™ЦеЏЃUšs“w?]ъыыЫЫЫљєєtU}›H›ЊH^^^юihh(D[tŒDXVrBaл'šƒК ЉцџВДЖЖю­ЈЈјNbbbим›Э€ШLєaI’ ŒF#ъыыЙўў~бjЕN{RrrOšƒkЕк б}ppАѕљчŸЗЗЗЗL&FŸPю.*РV{fr?šh› ,аЂ([’$ˆЂш_грV…—eйРoaU!кЈGл=шAЬ]­t§qV т№qpрўЎё­i€+дБ к~/Нєвёo|уš-[ЖќPЇгљ9i(Ў=—K§ы_Й„„„ ЎЭж{›юЕ}3Уˆх$иАbљЄVrBг ­w{шЅІІцhFFЦн‡fГy—#2ШdYтощщщмоН{Й{яНwкзІяЈO<Шqz{{л~љЫ_ўОЗЗ—.Д@‹с$m3d•R5`гїPx(Џ EбПp“5НШВЌnџBЗ "žч§р з,Ї"ЧXPГF+5ЦœCР@р$аЈ‡d[yџ§ї ѕz=nНѕжЕZ­FMTfя?]№ЕДДˆ­­­š”””‰(j™`соЏЂЂТлккz\Q’XC–aЇ•- мд$ДaшнnЃ^ЏзeЗл ЊЊЊnYНzuиSб š{kЕZˆЂƒС€ЎЎ.ОНН]LMMїІХsr_AЛЄнnoќёЧ_ыщщЁulжpFцюЂЙ ‰зMlЕч&ПЩlѓ<Y–§R ЫЩšl“…XмЩTB“›V‡и8–“Ћх,‡rЉ6ШѓђђnпЗoŸrѓЭ7џ—oЭЉщJ#^ъXањнwп=ЂгщИmлЖ=ЈеjyК}j"ђtiїюнˆчhdЖ‚c†‡‡aГйPWWWŒ`ЎЭЏŒKѓ ES­w“Џн€бъъъ} 7/]Кtкn1`<ї&OMMх>њш#ќшG?šіЕЩѕРG„ьыъъъјЇњЇзэv;ЭБщ`$ГKMиt;BЉ%ифЄ?ˆ2НMslм,Б`ЄС‚Wm[MЧd9жdƒ}ўќљwьлЗ7п|ѓѓЄ[ЈУtЌ|}д…И7оxуЈ ќ]wнѕ€ <л.КПЇC’ЫхL&“jn8kД›*зЎЎЎ–zzzJнnЗŽЭŽ5:ХsRš.їЃ-š$?з Руp8њЧЙККК• . лВ=ї–$ЩџЕ œ={VZО|љŒЫ1бжѓіііЮŸќф'oкэvRA…циtЪІšU\€Я§Ш#LЉаk mЂAN@J>vєošC`“џХЕщ{Гм›U hЎЮŠёЁtjzЭŸ?џŽ§ћї+7нtгѓPМ4Чb8€пЙsчQFУ}ћлпў_ќЭŠ8юёxфнЛw+ A†D5їзtюсѕzбддЄTWWC€kгњ6[œ˜D$ІnŸhN4ыѓі‹555EEE-›?ОFMЇ —hюM‹чёёё(((@NNŽd6›Ї pњƒвбббљуџј-›ЭF*ЈА>lЖ4вИIљ}єбœЉ›mZћ€№IаРeСL~“џ мєрgNі…тL35Myyyл|œбi г":р№D_ч^yх•c<Яѓwп}ї§Чё3iЁнЛwУl6 4ЧeH›зnllTœNg“oOТБi€Г†ДА8їt‘G‹чAz7€бююю‹ЃЃЃ[ZZІTlюš;А–[N‡ДД4ЭŸўєЇi6?јž<ђШ›АCхcГЅ‘HкІўбGЭ WЗ]єТ ЂЊажl6Nž^и@ЕРЕЩ‰tЫЩtьщаќљѓЗэпПџЇ„Љ’PUzŽpR[€Ўштџ яиБуш{яНї†Ђ(ђL?8ЕЕЕRMM 9ЎohЎ=нgWUUURMMM!Ц›Ч/ИйкjtpЛ€ЛЎЎюЏ%%%оiЄуњ‰иlЂ‡бh„Чубœ9sfFI%>`ПeГйњ žнЅV‰P1ќф'?Щ™M`гФrFV$fуд–P~j5wжd…ћ'ЩgƒђђђОЦœTtЁгEщŠ.t,њ<ЕУ“ IDATЧŽ;Žўё|јTЩуёШяМѓŽпˆ6‘ЎЭъїсоГЉЉIqЙ\іЎЎЎfыкфtП ,œтўS7uQ: …ИХќмЛЙЙЙТщt6жжжN нЌИG[bYŸo||<8€щfuttt>ќ№УDg3Л&+Д ач;пЩйДiг3Г1sшDФ‰кdnДPРWKUTуЮjƒw6Э чщЇŸў ЦN*КаЇ=6dмЪ`hЧŽGп}їнiWtйН{7,‹†д™M Й(Š())‘ЪЫЫ?A№ь,є˜c]`aгL1BХšћ§soWVVJЯє‹‹вV\–{ыt:ЄІІjо{яН)_зьЗ}Р& D№l›ЁцюшяЙчžœo}ы[oJ’ДєьйГ1ѕѕѕІ§ S 5–'ВfЯф.!Јсt:‡іюнлVSSГ0%%хЎчž{ŽppКlВ€Бї Vtбnј8ј;яМ3e€q<""BUU™ШеnџTUUЩ ннн n5LШЂ ЁhZрž€{г–О‘ююю–гeeeSJSd-ЭСY€GDDРыѕjŠŠŠТцœЧVЋ ТКМд*ЈшюНїомЛяОл+Ў(ŠООО~ўў§ћ/ŽŒŒ OхygBЁ.Cїr™ІŠŠŠЖїо{O744”Nіedd|§Х_ќG‹шєЬ&$b’ЎшTВiЊwЛнђЛяО‹„„NЭ1ђ‘‘джжЪЅЅЅћ\ЫіoгКvXQi4ЭЦdїДx$š---§KssГфtNoZЎPЦ5š{ЧЧЧуаЁC\{{ћЄ иЁtlЕ$€ŠпО}{оїОїН7ДZm" &žчсt:ч|№С\mmmЧДx–(\а^) г4::ъyяНї: вXŽ˜™™yчя~їЛD œ­‹LR№aЧŽGоyч >cЎW_}UБX,и$Vи!& ­ ‡ЮŸ?/vwwŸВ!˜cгКіДЌф„І nї&7euoвР‡Уaяююоwіьй)Щцl'Љжh€Я™3‡ћэЗ9—Ы’ƒћ€§Іcг:іDT иїпџМ{яНїu­V›@s>ђТЕZ-xž8zєhЪоН{лЇR“эџEЊЏЏя§яџўoo[[[ D<ЯcюмЙwюмЙѓЇP/йР;vь82™Оwя^yxxXc2™‚<ЁФёщpюДЗЗKххх‡ЬЕiwЋjyИ"90;œoм СїўФfГyzzІVћ2ёœЭJMMеькЕ jѕЮ;;;;~јс7(›žF7Ќ *їпю=їмѓ&сиь‡Ю’2 шььLнЕk—ЋЕЕuFS§-’$Iђ|аѕЧ?ў1@$[=E рYYYwюкЕыЇш‰и™MР‰;ŽƒПћюЛЏЋМДДT*))сЌVЋЊkp2q<\{››› нnї ‚sX;ЯДЙ60ps*ф;DnJWF%_Ю#^ЏзбддєчтттщЭљ uёœИo*XЭ|д]]]э?ќ№.›ЭfGаєќи“цcпџ§Йїо{яZ­66эs&IФ‡žч-~јaдў§ћ;нnї—\@SSгР‹/ОшЈЊЊJ2\ddЄП’ ]hASfggэѕз_Ї98 №‰Š.њK6НќђЫGY€лl6ёУ?DRRЇV`QЭѕ5qМГГ}}}#еееЇР­oЋ•R|вI ЊRШЕџj\Рœз0TWW›3gЮWZZZ’222&jлŽqЩPlє•Ђ(АZ­шььф‹‹‹Ѕ•+WjКККкzшЁннн$ ФЩ,“–FКџўћsЗoпў† Aљиl[иnъРзее%_ИpС=oо<ћІM›b"##ЇUдт2UUUѕљфБММќ“њњњг6їЦ€эЏъsУ 7l!* РfoЄpY–Ліяпџ9Ріыщ~Б\…kѓxFѓћI[я#­Vл9ўќ•.\p \@Фѓ:QeeeПсg кˆˆ№ЅRV<‚+ЉxН^yэvћй’’’wœ‡M[$ ЧV­  иЄ @@я&i™t‘жЊЯ†€вqЪ>psCCCёОpЧоeЫ–IљљљVƒС0%щцJRKKЫ`qqёheeЅ•уИ$:vВZЭ5дД(>А ;;{›OD•ЎPы нzzzъ8Ž{LЋе>e0ŒsчЮхщvЬиРи|b}}}-ѕѕѕ%“єДЮyуЦЫ УћјpЎЏ(Ъ1КРЗVX›pf’эФ@ff&nНѕж oваа€§ћї'Я™3ч™ .ќu3кяЈ ышшЈOMM-8qтФж­[ЗNiГ'ріx<8vь˜ЗЛЛћьЙsчўˆёРUh!HЧОяОћrЗoпўКАCЕƒ\ХфgЎVєаэvЧтрСƒRlllЯ‚ ЄХ‹G_m8EQ”ЦЦЦѓчЯЛkkk-^Џ7JЋеFб%… pеІбЅ­сЌЫ‹Ю |WЖoпўkKŸРј’M~QжnЗзWWW?.ТzН>bюмЙыЯІ)\`лl6466ŠХХХ{0~<`‹ЄииXйlоСq—s=­ъ‚ђеTэƒ,‹dь’XBВрk(­Sѓ€[€ЈЈ(\{эЕ>Ф’%Kааа€†††{7nмИчшбЃG0jИAU* ={іьž˜˜˜euuu ѓцЭ›VXщ`QQXXшэьь<_\\ќgОˆlb<# иКћюЛ/їОћю›иє§YI‚ф[г\’$еzhdг::UйTуp8тŽ?ŽУ‡+VЋЕ7--Э›••%dffZиRХ—šEQ::: #ЭЭЭhmmЕˆЂh%Яc0‚DkzBЕєQЖlгd•LТ“ЯШЦ1F6Т­щb sŒРuwwзxBЃбќ_­Vkœ;w.G{ЊzЖ(Š8qт„xсТ…O\.WЦ;(xйВeџШq\njкRФ'ЮŸќ>Ї(ŠТcLе = .ч&РžRДэлЗуЩ'ŸT,ЫЏ7uww#`A'Ў1-­,ЫкѓчЯџN„MJJвNЅ "эѓzН8pр€ЗНННЄЈЈшOЭиpRиДЁE ѓ‰тa›n 0^LЇЋЪаœœЗзыѕW5eK{<ЂЛsЃЃЃБеееЈЌЌ„(ŠJDD„#))Щ•ššŠ„„!>>о`ЕZ#xžŸqќЈЫхђиэіЛнющшшкккД===Y–-ЦBќњdNjЕЌ36u”v'БйЌ6К_ЇъnЂ88q“Бuзи‚„ќ/++{‚чљзh4d’ЉЖЮœ9#ѕііж755•!xršйˆф+V,дjЕ?1FX•Д9+Їr3nк%ЭƒЫY‘\Р— ›qЧwp§ы_3–,Yђєў§ћџС. ’*)акlЖІЮЮЮO?ў•›oОY;•ф8nЗоііі’SЇN§@г ЄСz‰ЦЗш&вБЇвЕ}ф#D0Љ‡Цœрєz}ѕŸ­tъ3иq’$™лллЭ­­­ti%й`0 ›ЭfЗЩdu:ТшНЯѓ№x< 1ю‘ЩШШ?88Јs:Ђ(ъxžзбA:FЃq\СDк№Єrz? шPщОœ аnВч™C„ЛЉм?ўЛККjKJJžц8ю1ŽуŒє,:S ViiiёŒ`fCGЄyHqqqњјјј—yžзdчnсx^ю}8ч&~х i†„ю/щ Аž„Ђ›nК eeeЈЋЋћюЦ‹Ž=КСС-Ѓ№qošѓчЯЗДЌЌ,uЩ’%a—Lђx<иЅЇNњ дуФ зІ}‡фГйlЙыЎЛrЖoпўъL€M“кKЁEuфЦ/ВK’NdiзыѕуЪГ•O™ЂˆМ,Ы&Їгir8Њѕгд|ѕД§Т`0ŒЫcAЩŠдЌu™]X}њRšІьььЏНѕж[Ъ#<ђъааP—o7ЭХ‰ю…Š›ЗЋЋЋцќљѓO€Я;— З].— 'Ož+**іИнnRœ"тИ@YЖlйГ<Я/HM[ Гyjz(ŠЂСИщй€xлGjœ{ЪжZŽу№ƒќO=ѕ”р—K–,)+--­ХXg’рrm­Ђ(Ю“'OўЗ [­VS8бk_|ё…ЗНННєфЩ“F0ЈiБ‡Nx*Д`6›ЭЋV­z{ѕъеѓЕZэЌ’ЈмœЎjJ€Њѕе‰гљ&' hvQ+–Hж‚NЗ‘Ќi‘˜Дд*ЁВb5[ъXMфVKДИT І)33ѓŽ[nЙхівввŸеддD@Ч&в$ЊJћ”9\WWWэЙsчž№sЦpцС“$ ‡[ZZNЖЖЖV!8hŠ—"iгІMпдjЕпЕD%#=sѕXТэ 87 #†pŽфФВляЬЩЩy8)) +WЎ я† вввИгЇOkЭfѓњўўўПИ\.ЕТђСуёˆNЇГQ–хеIIIЃбђк!€Эцcг яДU\@АX,–5kжќ!>>>hhHяt:ЅєєєйJЂёSЈLы•ДE] DjГ~а:­кд>lэ4:x„ЛšнЇ6Б;С{MпƒеЏYKјdŸ-ђОёЦВЩdвz<žыFccOOO+sэfusPœNЇгсpTXg4Ће:aC?.ЖДД4ž>}z/c“-т -]Кt^LLЬ[ZQXИx'К)ѕC[ыYˆ^ЏНББёsРэЯgСMslCNNЮІ nHHH€$IЈЏЏMLLLmhhи‡р(ђ1с№NЇs@џ№№№ЂЬЬLV;^h Dё†c‡JЁПШZАпNLLЬ_Бb…оl6s|EE…˜——‡й0HБ4ШiЎ9‘(ЌtжoЮњ‘CKdAЉxz?НЭ”bPдќе“zЖнии(Оѕж[HMMеY­V$$$NЇsГбhlДлэmОг‚Њ›0ћ‚ВАТxyyЙ\__пєшбЗdY&`ІS‹‡с—‰‰‰њyѓц§…ч5Iy oх"MqІі‘kЛxЂшэillм•Y@ipЭЙ 999џпtР 999ЈЋЋCџ‚фффю‹/–# "чњњњь‹%bpp0#+++Ј,2v[[лyиj:6си,АЭыж­{;))iсЊUЋ $ЊЬgдт:$цххЩƒaЦѕае(г@Wуц“qѕP] ш“эSЋЦц6‡2˜бЯ@?лЅ5>|XўєгOљєєt iЋХbAbbЂ†мfГЕSџјёzЙL№ЖЖ6”””Œ;vьЕббQR„pl2F§eŠзЏ_џkAЎKŸГ‰I ќ}2jkёƒ{?‚gH,И‰™їЇ nŽуАpсB)Ў‹ŒŒ<аееeѓІ[№нŸышшЈOHH˜чrЙЌ ˆcŸ=yђфЛЖˆO”ЖIЎЋГX,–ѕызП””ДpэкЕЂ єzНІ  @NNNVЌVыЌ‹щtПЈ ђ‰€ ьД{i2З”рй§jю+5q›м‡XўYБ›ѕU_jP‹ЂЈМљц›Jmm-Ÿ˜˜Шб4A`6›‘˜˜ЈКо`04лl6ТСYN­&Ђ€;G€ѕ4РpфШяљѓчпшыыkE€c"иф nкДщ{FЃё'бж4ффnІй'm-gсѕzь>pГгќJЁR>йŸiSTTxрю…^аЇЄЄМвееuKWWз Ц:ЬчізФ:~ќјKzНў‰ЊЊЊИььlMAAЇЃЃує‰'ў€ёuВBewСwm­ХbБlиАс­ФФФќuыжщ‰‘‰ ещtШШШаюоН[YО|ЙМeЫ.lщ4ˆѕ‘глєoжкMџ&†3Џз‹ттbxН^џyгmгœ9s0gЮџяP\7дoњйиэKA6›MzэЕз гщ4VЋ5d5—ИИ8lмИQќјёЇ9ŽSЪЫЫ!XЧІ]Ц…P|Vє'ќ;€ˆддTю№сУ†ПtvvVc ФDUЄГО<ФхЫ—/ˆŒŒќ…NЁф-М…уxPёdLhЕдZ5х“>iFo…МдљѓчуЖлnУG}”ЙdЩ’џьъъњўИQ$=X\\ќ žчџЃЁЁAkГйŽ?~ќMWxaѓ`UgлєqьЗ’’’ђзЏ_яс$–d:-SЋеB’$ЄЅЅq.\рЪЪЪФя}я{ˆŸіЄƒSщ'–д€Nжd›ЄНсЬ™3ГвžŠŠ ќшG?‚NЇ 0Лfл}9 ŒѕУ_|!>|˜KLLфiУ^Јb†qqqИюКыєG}РПњN.ЪњСerggg5ЧqxЊВВRoГйWWWіЯж pСЇЇЄЄD&$$ьфy^З`б­œ^фQ!Я4 ђЋЖ˜м3&Е—|лmЗЁЁЁ•••ЗoкДЉИААpБАрўNэээuздд<•””ДЦlК>]И=дЄ|иo'''чЏ_П^Ow"yArЉ‰СшшЈАcЧyнКuђ 7мV џL)œ{ач6‹тX‘—ы6пˆˆ(pDМŽѓХрQŸцДD№]їєЉ=hj, в—CЕmВп—’ьvЛєкkЏAEMrrr‘­фТNљуИюШ‘#Яpїoeee˜ЫгЦGЗ‰UЧ§,++ыЮSЇNН†@м:Ы|ШјTђѓѓŸчy~юмkжТ“сіL&ю˜ˆfмjЎ тъyр№ФO([КtiёљѓчЫш@‚П˜Ѓ 'N#8Ђ(hтA‚B{У† AIl@(АODх+**PVV&нsЯ=ˆП$Ц65š XШЙ‘‘1ˆ4YU­ёЌ.ЏЖ­е;…“,q9СLˆpыƒr Мйl6kЄEsњљуууБiг&н‘#G~Ё( ЪЫЫCœ6ЬњС Рлоо^йоо^@ЁRˆŽїЎПўњЕZэБq™˜37рЯfsШ3ЮMюАпžкžн…ў№‡мѓЯ?/ЄЄЄМщrЙnЋЉЉiC  ` S%œ­ыьїгГРfѕY:ю[QПhЫ>mФеМќђЫђ† ф-[Ж\.ЮR8їdѕq:x†+§МAЧЈnИмbіddЗлЅ]ЛvСуёhRRRT-ћЌП}ЂjЅqqqиДi“ЎАА№&8a@4ИндnЃб’Є€МaУ†[#""ž0-ЪТХ_сH_OтйјŒ9їdFv_^^юЛя>nчЮ з\sЭ†‡‡ЗЕЕЕ ИјКЗ!Кc%ъ|bь№ћБзЏ_џ ьPmІJXЮЦКt222јВВ2Kwмq‡В`С‚KЊ‹‡Cl?ГъE(OvrНЋарrЙф={і ДД”OHHрШйjuХецђЂп#MDDg~Сњ+mdЃŒСa…:—DDЪЋWЏ^fБXvhЕ,_љMNЏxg №iЮp,ЃЁОaУєіітƒ>ШЩЯЯнсpќнррр0@%рІ;4эJ иЌЮ шK.Т8Q)шР ЧЃйГgОјт щы_џК’žž~ХANHš+crА+SЏ {ЩHEeџў§Ъ‘#GЋеЊIIIQѕП‡šъG-[эƒХќп|Ї‰ф&ащЃє%D‡ЕbЩ’%™БББаh§ВUwq&s\и€Нbœ;h'кfїmлЖ }}}(,,\ГfЭš ’$‰шЯРXвРŠђёЫ сplroрЦщd4ЧfcЉA@JJ мnЗfзЎ]JZZštчw*111WфД€оGhЂcŠЂŒяс+@ŠЂрФ‰ђgŸ}&F!99Y5 'T­3ZЧlv|ЈќЦыкtК0ŸЌWIРЭ›7/&%%ѕ=Žуb/Н ББAjЁк3гФzHІCSŒс€6мsyžЧіэл100€вввm[Жliџт‹/žDрыЇ6Ћ!\Oф…ЈЈ(3qwMlК=,РYЫНYŸ8Y222ИббQЭ‹/О(/\ИPўъWПЊDFF^6ЃKЌ˜їОвшЎЈЈ>јрШВЌ‰‹‹у' Оa3вhuŠ~—„&4Р9ŽSЪЪЪHВ ЦKжЧЬЧЧЧВГГџРѓ\Vо‚-HMЫŸдх5QЛІ №АРMwаl\Ћетс‡ЦГЯ>‹ццц‡Жlйвq№рСW\‡ѕp зј€§‡pЭЖ‡-йDћ–%Ilмd™3goГй№мsЯЩз\sМuыV9%%хВsrьщsяЫгNšМ^ЏrђфIх№сУВ$IˆЂf5PO‡[Ћ№gќKYYY!„[€гЬ† 1™LќŠ+~ЧѓќъЬЙЫ1/w}ШtлЉаtір›ЊиюёˆˆќєЇ?ХO<Ёєєє<ЕeЫљрСƒПGАNєk  у№„5kжьˆŽŽ^МaУ†){ лŠ‹тмЁвЕZ-<ДZ-"""јссaьмЙ“ЗX,т–-[Аhб"сВЇЈІpС~9uюССAЉ  €;sцŒb2™4‹…WKˆQ ‰U›„MNЁi*§‡uыжщdY~NХTUU@РxІЈ,ХbбЌ[ЗюUžчяHNЩУЂkП2х{ODSјŒХrz{КЧ­V+~ўѓŸsO?§ДвггѓЬ–-[ИƒўСF3…Zћ“\КККv ‚АЂЊЊŠ[ИpсŒl,Їнft6 lЏзы8йіUT>§єSьйГG\П~=ПaУшtКKГ[ЫЇЫН/5]МxQмЗoзииШЧФФpIIIуŠGЊщгjgГС­Yr:8sцŒ{ttєDCCC#|…E FwЅ]П~§NžчП‘œ’‹ЋП žзŒS‘ІJ—Eчž)€';Ч{Œ{њщЇЛнў‹­[З*Џ И4Ю8§ІДДДмnЗп+ЫђoњћћзЎ]ЋгhІЇђ†Ѓ‹O–’Iз+ЇъЃ ЅЅЅ8tш”‘‘!­XБљљљМVЋuv>‘Ои/Цm6›xъд)MiiЉфvЛЋеŠ””UЎ<•2MфЬ”[ъююЦБcЧМяŸ={і=ЧPаk?Ѓ‰ŠŠв­_П~Яѓ_ONЭУъЕпЧёгцdКјTЎyйФђpЮ%ъЉЇЛнўЬж­[Й‚‚‚цкcьшшАїѕѕ§§њѕы>44ДhѓцЭњ‰ >„ѓœщтњш#‚ ІІІrййй\NNŽ”œœЖБPЭZnГЕŠŽч‘œœtЬ1д—kр8X­ Sтм###r}}Н\SSЃijj{zzƒС ˜LІ @OT<1 '5§NиэЉлэFaaЁЗЋЋЋѓфЩ“яŽŽŽкШ] k№я pqqqFЧо–šЖыЏћЎ*Аg Ь]3MЫ v9ўФO(нннOо|ѓЭiG}мхrRMЂчaжСWНЖЖЖhhhЈ_–х‡њћћ#ЎНіZЭt;•гщпDTЇудiГр&_шЂ‡4№ аЃЃЃ!I’рvЛqцЬ:tˆEQJHH@ttДЦbБШ&“I1™L<Яѓ)8бббсo'k-џы_^BiЩРЯўu'Вч-ё{eЧПЁЂќрЙчїњ?ЇN‚^Џї?лШШˆьt:‡УСїїїЃЇЇGr8Bdd$ ­VЋMKKSЕEАеRУt8 Vћ. р№сУbGGGљ™3g>S…ЬйEOIWЯUp ,ˆЭЬЬ|‹чљiщ БaгїРqМjvзЅsИзœчž Јн6^йљ2вгqп=п›T рO>љ$їмsЯЁЁЁсСM›6eWVV>ивв2€Р—”€›X3yŒеžЎ;rфШ/=ЯїЛККв6lи ›ЪФjЯƒœpі‰@Ўбhќ`ЇєЁЊ› X,ШВЌ€ЫхBGGGHkЛСh бГ–oк|—мG ?Ф5й‹!Ы2\.ЊЊЦTЫy9з")yŽ ё,Nž<Щ^>шО‘‘‘‚еj В;ЈЙ 'лžЈBъЅЕЂ(ЈЎЎ–+**Фккк/ъыыЯ"Pќƒ.нEВЛИБrхЪМ„„„їЬЙfоJЌ\§uПU|І@nkЏEEхфdЏDFЦBџўщ^wжФђВŠ ќћ“OУхrСу)Diy9žјљЯaЕF‡ќПp8|LL ž|ђIќіЗПХ‰'ЖфччfЕZП[ZZкŒ@А>]№СoQЦ~ГpсТMУУУ_]Дh‘››;#WдD ‚Kё˜Йащ}рє>Тњћћp˜3w ""c}ƒŸXя#ЂСkДуBJsr—!%% 8S\€oџнџ†1Т„ГХЅБhпы6} ŠЂ`^ЮZФЧЯ,KP”БˆЕБ5PzюsєіЖљы’…ЕšU[MVєЅ50цц:vь˜ЗЇЇЇчєщг: VЋЂы/НqуЦЬfЫNŽуЬЫWоŽљ 7…щ’Ђ((+;„SЇїB#hбвR…Хљзcљђ[&~жIКaЂ‰Єњщƒ)))XНzuPgгл{>ўO=ѓHˆЧK/ќ Ys3ёё'Ÿсѓ/ОРТљѓбгл‹3чЮAЇгС vіZjл‚ `экЕ€ .ФZ,–oЦХХommЅKеЊUЎ”(vЛННЇЇЇŠуИЌЮЮNCrrВjuеЉš$CN@=&T ы;gзdъžссaИ\НHI] “9Ѓƒƒ6Ј=єЖF# Ђќ8$IDLL"цdЮЧћЛ_BНzCОџƒџ AћЃб‚ˆШh˜Ь10™caЖФЁЖњZ[* зы‘””Ѓб8ЎRjЈТŠj‰Ќh*E­ЇKuuuЪёуЧХšššcЇOŸўиуёє!hКц7ЩЧ–7oоќƒШШШпju§цючВч­зЯс§1D/zЅх‡0/{9nџъCEЪ+ ЋЋiiyhяЈEOo+"MVд;ni.†шѕHЄkx1A ЕqФ~E9ŽƒзыХ /§њ6Ў_xф!ќцЗ/cёЂExљ7/тБ'žФпџяŸ"wо{іž6Ќ]Г ЉiЙиїХ.ЌXv+3qфшŸ№бG/@”DxНЃИ§ЖшЃ“У~юiћЙћњњ№иOЁђТ|ћНИnУќ№сПЧУт3gБ|й2ќі…_уП^xЧ}њ›ЧWМo&FИuыж!!!{ійg5ўыЦoЬ+**zrhhˆдlE№œIФЅсUE,++ћМЃЃЃЪыѕогммНnн:­С`РL)ШщmК0#mеІЗ'О,Ы~йииˆŠВ‘Пјk~€+Š Q žпNєz ( ДZ=жЎП Ој#ZZj№сћ/ћлГ~уЖ!Ћ%ч>AmѕqDFFbоМyуJ…ЛMsbvaћ‹эЗ™PssГrіьYЉЕЕЕИЌЌь˜Ђ(t3f"Š“ђ]оьььшьььWyž_Ÿ˜”…oљg0˜ƒоqgWNњ зБ`Сџёƒ‡оCGg8ŽУƒџыЙ чщшЈЧ'ŸџВ,тіЏ>„бQ'>ќ№ˆЂŸtџЫ—нŒmwќ^‡kР6­ОK,ONNЦš5kќ/ЃъB5§?џvЛO<іsX,ќьчСщtњѕЦn› ЦЯџљgˆ‹УЙѓ%hОиŒе+W!ЦjU}БЁФrš8ŽCLL 6nмШUVVbhhhYFFЦ­бббч;::КpWП8Њ'\.зpSSгYAєЉƒŽŽцfc0M$ЎГK(q ŽaзfГFЃv[7zzъ“ Ak€F# >> ЎЦќ…kА -,XЄфЙ€ФЄ 9ќ>EAkK- )9w~у!еQЩйQWsfГљљљуІщeNиh25Џ&v‡ъЏ™а№№0Ž?.VWW;Š‹‹џвддTŠ—fEёqUJЏЛюКЏ%%%ПУѓ\NNюмtы гf"э‹MТщт§ŒŒ:БxбFРЃ‡ џШšЛK–lђџoYY!>лЗ f“_Л§ЧЈЋ;ƒЂтO!ŠcјŠ"ЃлоŒСnмВCC=ДСсьУœєаhЦxђХІгŠхaƒ›шМŸэџ?ѕ4ЂЃЂ№ЋчўЇŠNу•ЏСэvuЎ$IvЙ№щОЯёе[oС]wо‰ƒ‡ ёў‡"1!ѓВГ'x(т8FЃ›7o†$IЈ­­‹ˆˆјюœ9sŒ§§§ЇGGGЩыЄИ;7ГЄ(Šдййй844дрѕzг[ZZєQQQ“Щ4сНУЅЩ. rњ7+тЊЉЬf3"""ане‰žžzXc2a2Х -}в3r‘žžƒєє$ЇЬѕп?"ТŒіЖztwЗјїнtЫїpMітq}^zўSдз‚ХbСвЅK§ѕП'ђQЋв&єlъг„<JJJЄгЇOЫuuuХEEE Ѓ hzВ2ˆ;777~љђхП5 o0Dш7mў.ЗrЭmрyѕИ"ƒ>ннЭшщэРаP/.\Ѓ1ee…hlЊlмј ФХІ@’D8јŠN‚kВ–р–›О/М‰ц‹•~`’e Ўсд7œУЦпFTT^B^Џˆ‹--Иfю\ќјс‡p§u‘‘‘>%nŠ8ŽƒеjХж­[9FƒъъjЋбhМ;333кщt&е]h..БKП­БББH–eЩnЗg8NФЧЧѓ‚0Л)йгсшЁ Qр&“ эmшЕзУ› A0ŒЛ>!“9‡ўŠ,cёЕБvнWƒЮ+/§M ЇaЕZБzѕjшѕzUжdœy2‹їlšPkk+>,666v9sцУККК3^ЏЗу'т# =o—{С‚)K—.}Х`0<aжоpу}мЪеЗљ*СNоошшx\Ј>сс!єїл“Л‡‰фз.й„ьkЎ…Ђ(АZ“ЛЙ9+Бћ§_Ссш…,Kўыp­V?.F–%ДЕWcљВ[А`ўdd,„^цЦS‚{ЪЕХљљ€QпФэ„ŒFвRRqы-7Уэvу§?„гсФЈЋЫВŒббQ‚€мœœ kЮ”8Žƒ јц7П‰UЋVq/Пќ2ъыыXБbХЭž8qт8мšоќ!Ћ№uŠ,Ыžђђђ/ъъъŠ/^|SkkыђММ<ЭќљѓљщfšMжnBЁљ9n|љ[жј•žžžчqіьYT–~ˆ…KЖ!22W/Ы2lн-hmЉFiЩHЂ‚ Хэwќ шОх%ŸЁЙщ ЌV+жЎ] ж]JТšш=Ю&ˆYъщщAqqБw```ИЊЊЊ ­­­iиYiˆNMSDF#nмИёћFcФПpŒЙѓз`н†oђC$дИѕDЯВzе-ићёясР'ŸўоПбтыќџЋзG 1~Ќм’WtѕН ш073Щ)йДЃВъМо€DЬѓ(В}„ :свФ–“mіAuZ^џ§+ўќкЛюМЗ}§ЊзИT/œуЦІТyійgБwя^ќсH‹ŠŠz Рѕv`ЛЉ5™ь bttд}њєщнбббЧœNчэuuuY .ВВВИйцфtлišЈjљMŸ“ž>& 9s•Ѕ{ЦМДЄ_ь{лџћЦ›яA|BКп§UUБ›Ю"&&ызЏGЈч ЧrЉЉППeeeоююnЉОООАОООDQ7‚~Љ_> Зmл†={іјЂК ApЉ"šN€M7€ббТТТЩЩЩз m-++ЫЬЪЪтђђђ4*wŸнчPЃ‰@O^\\<рщyиxнАDХ!б:$%gњЏUUО-Я!66vB`‡лЦKAŠЂ ЃЃхххžЁЁ!ЉЕЕЕИІІцŒзыu"0Ы5Н&ЧШ$ў8qŽуžч‘žБ€Ы˜CТ=У3шВ€еjѕXКь?ОЧПoётMaѕ‘F# )inаuуувЦИKюЉН.ч ŸЌ Оv{‡`=›Эin> cƒ"ВГГГВГГГ1:::ЙЇЇчК†††Х‰‰‰ШЯЯзЦФФ\‘gS#EQ––уž“ЛyѓWњп%си5Uакr>$АЏєћEJUU•шrЙ '›››+eY&>iZ grŽъ\ŒНwB€IЙЕЉЗjхM8qb/E† hБ(§”ћo"œMеV1уb с6ьJ‘Ђ(ФHHћКi_8YЇEtЃoл b```ЄЈЈЈг`0|ž““ГІЋЋk­ХbђѓѓuЉЉЉWќЙЩ§ ?}њєРoCЄ)v\ZuUк[K‹ 6„ЭБ/Й\.TWWKp:mЕЕЕ';;;›˜‹€z„ZБœцдєДЖь$>pнs*яOэ\з@ЋеСуХќМеˆ0š&MЛијkвzпeЫ_ТНV+@%ƒ p ЯУ`0€ч9HЂŽŸQЮЦtˆє"ђ@ 6:mA' Ћƒˆ№mGGGGЪЪЪ>ЏЈЈ8’••ЕИПП“бhŒЪЭЭ222ИШШШЫєxЁ‰p№гЇOЃВ,p2ИъjЁЃ­ьЊЖ,ЫшъъB}}НиннžžžЊšššгƒƒƒvŒНкPрІ#Ьh‰Œ.КрЖ,Ы<бt>ЬфъъJP^~Э-рёŒТ`ˆФM7~GU|'џЃб„БљЭ%YђOЮHŸ'I^hЕz $IЧ&а˜ЉANРЧ•П{їЗ‘™9Чђтќќqчќњ?‰ЦцfЯёИaѓѕ“6ш‡@)dњ N^8Й@“eє§60ЪВьЊЏЏ?Q__.555ЋЇЇgUEEEndd$ЎЙцmzz:wЉuѓ‰(Ры ГНќЊЖЂ(шююFccЃдббЏзлпккZоииXцvЛџЁU[шт j WE'IвŒ] ЧЁЋЋ чJŒЦHмzЫ§0™ЌІ~эއаeЛшGYvіВ s-–X|хж1:ъ„zmЬОk’ћRЄPk2žUС­0'=Y[­Vмvы­Šы ,РТ BѕЫe!_gа•+y‹hDc#кHЊXŒqpЦ8К€ЁНН}ИННН–чyczzzNWWзЕfГyžЩdRВГГuщщщ˜іЉ №(kzluWиŠЂРfГЁЉЉIjoo‡зыjkk+oiiЙрp8њјАРГЇе(hтъЄ#i`гѕаfEЪ›Пбб ˆ4E!#=сдPKLœƒŸ%]­4–Ђ(ШšЛ(фq†иlHnі  ъЕp§Wб:д?^dŸГжu7=Ц˜АшE–e§Х‹/^Ќаh4~ ›LІk,‹œ­KIIСt 8N‡вввРqŠŠŠаcЋC\\м”ЌтГAВ,ЃЇЇЭЭЭRkk+М^ЏЃЃЃЃђтХ‹UCCCН€“цд4  иiPг\šхдДdFиєsnŸ=fЦ”˜†„јдp@ЈJjчOSЌЩ]9‰>шџ‡ккZ<ѓЬ3Sj№е@УУУVЙˆРзЙcBТQt89Y“EР I’ЎЙЙyЈЙЙЙLczzznggчвШШШ9‚ !!)))кјјxЬVL{(JMMХ† 000€ЌЌЌKlQбгг›ЭІДЗЗ{NЇ IвPWWз…‹/V є`М—‚циЃяž$ЧНЬ2ЈiNЭ]€Жж*|ђбofхЙтРўНPЈ?є~ѕѓТЙ† ŽуHp§мд97 n €wpp+))ЁЯЛšY5ћ$I$ŠЪ1PEQЈ/%=‹(™TuŸ‘IИ v№zп1ƒ(ŠКІІІСІІІѓЧщbcc“туу3уууЏ‰ŒŒLгh4кииX955UЈЈЈY—ˆ0Ћз$фvЛбггƒЎЎ.ЉГГSбxНоўžžžцооо–юююVЗлMW6ЁЃеаЌиMDя‰@ јqЂ(>pє~пљžссAnxxзƒПЋŠ8Юџlt_ѕб;ˆшЊС˜eY1нвф[,дЖбw\m†ЫMє‡ˆvgЗˆСIЌЯSЦ^>т'Ф1 {Oж$_@ Ot€]‡` k™ѓДОE›0'...+::zЯѓ‘‘‘ЂХbсcbb“ЩФљЊŠ^1˜Ђ(pЙ\p:p:$‡УЏзЫŽŽкьv{SOOOЋЭfkїЭкJњš5 l6bЌ‰фФ б6’ &mїН[2^щ1ёc<їGзцЛRL•$ЩЧу$ Ч РCƒ’7” ц0љжФ€ЄУи€ОZРM cД•›-&A є€“рA„ rв_ЕжR Џžк6Pл:•sЩCc4Э111‰&“)жd2ХY,–Н^Уѓ|$ЯѓŠбh”ЃЂЂ8Ће*DFFrln5Х5‘@W_ЅK.‹ЂˆббQ J§§§в№№0чёx4<^ЏwhxxИwppАgxxИзсpєіѕѕйEa%њАРŠыЇ–;гС'4ЈЩ€Ÿдд;Ѕ Њє7bll“qслGоЩе4ЦIџвR#]Q†ИнМ,ИщЌ0"^F №РєC дџWюСрЂ dа!‰.ОvД5Uм„T@NжtЙЎpO˜1Н_я;Ÿ|0Щ~њ:}“ЩdŽŠŠŠѕ?жl6Ч ‚`рy^ЫѓМŽу8у8€FQЯ *k4yЬ*qВ,ѓŠЂ№Чљ9‚Ђ(Ђ,ЫЂ,ЫI’<ЃЃЃŽЁЁЁЇгйяp8њћФБR/A%ЌЈ…цвt 8 r/‚M@гїbЄj…zдЛЄЧ8‘ЖРщ1NЄ+šбcрrг8UСLŒГ%K‘ѓљтXбœ8m4"ЧшС}Ѕ‰}pZtaѕ7š( š( Г Ÿ шd›9VЫšьЃћY`ЎIK<ГаяrЬп)NЇзjЕ:žчyяy<зїќj^кі@/ДŽKš&m› ыaŽЉХћЋщбj€ д„&уЌ­„Мrю•тк4бя‚ўpвFЧ ?k-guX\ђ›Xщ žњџЫMД„pД8H?Аš5,Ђєrџ.^:йц}ї'}Фq Tš;г‹_gігџЫ3л,ИisЂ(rЂшЉІЉЈY17§qdpиm’KЯŠиє;Ђ§бjeБиї5%PЋ вєЧŠэ[њ=_nЂ-ћЌюЭJDєф cЎ0Ÿ5‘Ѓў™=Šˆа}Ѕ‰х4ДŽЦZV§ю‚щ ЦјFЛVрЛ6Э!аY=^h1QKЋэЇ {,РYpƒкV ЁЮЦтгOЕТlЖ ^ZФ%jгкг.)si5b<"фљшпДZGї3puŒsЕ.;ЦƒЄR5W˜Ьќ&1оИp5<4 .NВƒёfvУ`K,нŽP@gзЌh­ЖVуќjчЊџŽшЕ7dћ‘ю/VWуфь9ЌxЭ~0ш2{К]гuRЛ'-­Њ1Џ+=Юйo(5ЩпЏ“LздЃWЎмƒЋq!Z”cџЅЮђ`ёг$F8ьjx5рЋ3ЧVЛgЈwЄІЧNФСCTэ+^‡ 0Й€fэ&j§Ooгчњ}%HaЖ'п Xpу:@\M_3BЁž43ЧЇCЌC5дЉ§fMєŽB›Е=„И0йп’ЪљьЧVэєњ’П›I Ѓ} ЏєXŸь=БЊ Ц˜АРьПкH“=№х6K!€NoГƒ*”њ3бдБPїa‰ю™йЧі_(ЋuЈEэь=/ћ;aоša§Oчj§ image/svg+xml Printrun-printrun-2.0.0rc5/images/control_z.png000066400000000000000000000220241325617007000216100ustar00rootroot00000000000000‰PNG  IHDR;є%›^вsBIT|dˆ pHYs з зB(›xtEXtSoftwarewww.inkscape.org›ю< IDATxœэ{tечПП{ЋњЅnН[–mYВelŒ‰m9†иxт‰!ж„Аa6 Щ™dї6CvN2™Э‰˜M†!l˜™“„Щ f&l„G&XclРЦ&ЖќЖА,ЩиjKВдяЎКїЗtUЛ%ЕdЕдd}uњЈЊыѕћдя>uЛ.13&+"ЂЫэ2щ“MN—5Ž‹ Ыэ[кллуТE"‘)ƒ‡Ус‚F­XБ"ї}{{ћ˜}.>.l>d{{;—р\h4JkжЌСрррАX,6%и`08Ц ššоЗo  Б{3\јбруA2‰P4ЅжжVŠХb”L& Тс0ЅRЉм1щtК$Iйыѕц ѓљ|мггЏзЫ~ПŸƒС wvvђh№|шBР#`GƒŽ†ŒD""гааШd2TYYI–e‘eY  ,ЫkліЄр Уcœiš‹Хи]ƒzhhˆН^/GЃQэїћyС‚њјёу‡йœМ>8›Jэээшшш ЮЮNсB†B!F…пя^ЏW$“Iсёx„mлdšІАm›”RZыiyWС ЅdУ08•JБзые‰D‚}>ŸNЇгКІІFЅR)эBїѕѕiзгO>љ$ыzДГГS444ˆ`0("‘ˆєћ§B!…’ˆdж2MгЃ”RJbfrAЅ”SЖmDФB&"VJБ”Rk­ЕeYQЫВ2ЬЌДжJ)ЅlлVЁPHлЖ­ђН\˜˜y\PУ0$I!„TJJ)ЃІІf^]]нз‰ш§Ь"ЂBЅЂ{ЧРd2Вm@ `!ти3Ю&&"ъJЅRп9}њєB[aK)mfVбhT/]КT?~œ7oоЌн<œƒu>у‚*Ѕ ЫВLЧcЮ™3ч‚Ср#сpи[WWgј|ОЂМ600€з^{ –eaС‚XЗnнx`Ѕ”B<Gwww2“Щь=uъдK)щtкBи†aиЖmЋОО>нккЊѓ -ff‘ВH$B­­­ E>(o h ƒпYМxqХќљѓЇКsчNhhд5зЂЛЛoНѕŠh@J‰ЪЪJ,_Ом зЖДД|™НRJO&“1mл6 У "‰SUцюІ KF)‰ˆЁЁ!!„.(yыыыяЋ­­ѕ…BЁЂ ѓA™mŸhУњџМs–Ь™0Э .є†ёyЧгРыѕzM!„єљ|ттХ‹"‹H$’kх`лллs^ …BBJ)•R†Чу1Ѕ”)Ѕп4ЭїWWW›г­mЎaѕmЋбpEКЛЛёц›o lš&М^oІЂЂт}МЖm›–e™–eЁPHИЗ!DD$0ЪЋбhTИR&“ё№*ЅќЬМРяїO”™Г`Xuл*4\б€žžž)WTT˜gЏ”вуѓљ "’>ŸOƒAБtщв\u \JЦhmmЅp8LnУЬ†aІs")„{Х)€2`Ўљи5_FOOOбIкqV@kэBxlл6ШD"!RЉ R~RnŽХb”JЅ(™L "’Ьl(ЅL^­uQ.эяяП,hО‡WоВс+ТSЪУЬl"›Œ=Ьl$ )Ѕ”бhT8)ѕR•пs‰FЃТыѕ ’™ )ЅID)Ѕ“ьОѕїїуЕз^Ы‚о91hО‡WмМѕ‹ыЇькh2Г!„GTVVR8Юх[fЮ&уh4JЩd’*++)N ЫВI­ЕIDЅ”wJ  .zЩУŒх7/G§тКЂ -f–DфбZ›Ьl‘tШfOw_kжЌA:&ЫВШяїIїуœРSш'FŽўŒе`hЧУŒe7-CнтКIZDDЬl0Г)Ѕ4ˆHJ)…aТыѕŠќои<@ RSS‰™E(ЂL&#™Y0˜й˜,шњ;зЃfA №qи–Лџъюp?ўжqюєЙ|п ŸчіћЗсЪ—тш‹Чагйhkk›ЈЅх–/R!lлZы\oЬЖm ƒ#‰P8F*•ЂššD"В,K!D&“‘†aH)Ѕqђl!PfFзб.и{Œ{Žї ыHзИ7.H,§№щФ„РŽз…г1RJСЬТэVVUUQ,sƒ #=fYh­‰Вi‚œМ+‹u“о%PKО7}цFФ†т€Гўы_ФСUс*TжWцJщ+Ж.Ц‰_№х€ВеЂPJ фѕzЩяїqŽdC(J) PJ‘зы%ЫВHk-(Ћ1Ќ ЌџФz„CHD98­4X3бxд0 ,ЙvIn§рkбёz TТН§ ќ!џˆRzёЖтдПwNьv-3“Люnt#*9и|Яц6йЖMBˆ\Ї|шЎ,hл'кPГ лпŽgyvŒїПќбПЬ-oН{+Жо§!0Gо8ЧњПA+ŠЊ ќЩп~ЕskЧ`РЂ- СЬшyw,03Cз'DBX–…ќ`BAX ep’Б{2BфЪ’кT f–eЭиќёЭЮ^ŒЗ~ЙЌkЗЎ…[5_е уФў“јс?„ВќA?>ѓ7ŸFxAxlIчс…lСщWFЙ CЮ>f9.l>43ЛI‚\ан{vCй змДо ‰сDЖВl!^Ев#Nь?+cуЖџvыуп=є.ћъcА36М~/>§{аик8дNлањRvаЌбИf2Б zzzРܘ;wnNђ•В`ё21l!Н§ілА-№ЮЯ]pŸЊЙUXѓ‰ksбэб^њЇЏќ2Љ XФџ{b‡<ИёГЧ/П жузБННН№xўN–:w8wt№зрeЫ 7\x.Ьœ’JkY{vƒЮ}ЭdpЄП‡/єу№… H%qem–ззсЊК:,ЌЊ‚ = бгоМЙ(/OVЅ…MФ!žyфtЛ2Jс{рG‡d[Ty:Й€ЇŽe—[ЊЊ№?Џл€•с0(Н№И­ zеъ’šWвтNьи‘=‰рSЯџ џкqx шhu сЯЖП„ПпЛiЅfа›oчЮMx\бі•ъDtфЈЛ№rWўlћKш] M ЭŒ;|њтvXZЬ;vЖ]*KBь~0Jс›{оШyѓо{яE{{;ЎИтŠ1‡I)БuыVмџ§иЖmBЁŽ ря8!ŸЁ‹ ={Jb"PЂ<+vН8uыпюоƒЁt6єђЉO} пџўї{іьСЩ“'sЧƒA<ѓЬ3иВeKюЛ'Nрц›oЦу‡с†цИЊЎтpєВeр ъмIл9э30ƒЮžь8sПr’ђwо‰GydмУ>їЙЯaЫ–-Ф_џѕ_ушбЃXВd zш!(f|уѕн—Юпг3m3RР^̘ѓъgпМњъЋxт‰'рѕ~вIDјТОјЦ7ОЏ}эkИїо{Зоz+.\ˆ“ƒƒшOfcQˆDІm&PXКp!З|Д?)мДi^yхЌ_ПОр1ЕЕЕЙРнЁC‡Ш$VЌXсœoРЙЦя Ќsзm­qђтEРwм-[Ж ЃЃЃр1љэы,P<ЯЕЉнэGœ0ы№0(“™ЎЉ%HЦŽgЛЃQXN{ѕ'?љЩ„‡„УсмђEчРАSUЙл;/mуМ4UMЖЊ0'˜є˜љќРvEEEnй}h<44h ^кFUUг4ДА\ŸѕBР4б\Y9ЉcњњњrЫn7.ф ДsNЫiY]]v'ŸœwSІЊщ{6/IцŒЛŒЮŸ?T*hiiэПКъьЬvў—е:ч 7LлL ž­ЋœˆТŠIVќщt?њбїп?6mк„|@ісйPхѕЂЉ2;N’УгoPЅ№Ќ”ркZРmK— e’yыЁ‡ТЙsчА|љrМњъЋиЖm2™ ОњеЏю[Л&WpУœi› ”ЈЙШз]zўyxЄФзЎПїОИšЖmуяўюяЇOŸqЬБcЧАvэZмwп}XЕjККК№ƒќoМё>ад„›/Юž{ў|pss)Ь,ьмyрЋW‚ўЫыыqїеWуБƒaлvЎЅTHНННјв—О4тЛ*Џ_ЙnCvХуОa3PФь‰TВ.žnk;IјOWНŸ_Нf‘бСЋъъ№ШF­3p›7\La|ѓx*]чн0Рќ ўxхеxьЃ7OЊ„6…РчVЏТ?~ф&,rnЗ,„^ЖЌdц%ЫpУшmЗCМђ 0аХеејСGnТŽ3gpјТэРБ~$, B!,ЋЏУВк:\7оЅ‚MшеЋСзЎ)ЅiЪpуК:Јmл@{їBМsР––lqъSЖmјŒБ—цš№|œWw—Rх ЅJ ^Пzб"аОН О>РiD0TpM аВzЭš\]•-n маОщ#й•h4 щ’I ЎмадзМ\u•X,†ЎЎёY^ўj0wоЅѕtшэвЉІђ„О(иКК:\uеUE_ЄJ&“#bZ“QQАRJћу%3ьў~XННШєіBЧc0чЮ…9><ѓцƒЦ пLЄпЉg=РJ!іъЋˆэкNЇFlKОѓNvžІЈКѕV˜х4Ї|Аv_ђ$,'ђhi“ƒƒ8впd WжжтЊК:дќШtŸAфЛпAх–-ЈјРFP™JфВР&о9€ЁŸўlлˆe,<Мї-Мдљn6в?Jѓ‚AќХњ6l˜?УПјRGŽЂюž{І”Д/Ї’пB{`CЯ> ЖmМqі,юzю9ќьфЉ‚ p6УŸПќ ўцѕнˆ[2нg0єѓJm€RУ2утS?g2иў<О№я/Ѓ/‘ГлЂE‹АjеЊп=wђ$ОМc@bп>ЄŽ+Љi@‰acЛ^CІЋ IлЦз_Нр‚UЋVс№сУиПџ˜moНw?=v0єь3рTjЬ>гQIaЮыОЛ?zЃБ1лWЏ^ЇŸ~zТъыіэУљxjxЉуЧKi^щ`9†эФv_>=Ж•uџ§їcяоН €ЄmуuЇUeZыj<• 6sЖ`F$‘ИєŒ&OW_}5ќq,]КєВч:т•[VW;эsЙЁЃЁt™qWХЈtАMYи••№OГъо0OSi‡• V†*!B!"\л8Н іЕsВs‚_LE%­g§N4№Яз­+cšŒn[КЫыы@†OытRšWкŽ@х7"uќ8šќзеЋёПпzЋр~Ÿќф' ~пXQћжdЃŠЁnQ;§ќŸЏ’Т’з‡ълўњџЯcИуЊex/Чџ=2vtлO<1ци•!|}г&LžІ&T|рЅ4 @z=о%KhkјяkзрЛоŠљDѕ РW-УПмr ЎЌ­…№zQ}ћЧЫвЇ-KЖњ–Сг8У/mЧћ№ЏЗ|њњp|`Чњ0JaIm ЎЌ­Хес0Zœ‡иžжVдlЛВККf•)RA„@[МK—ттгOxџМyxџМy…wїxPyуЈXзVВжR!•5%ЋЋQїщЯ гн ыl/2==Аz{С‰фœFxцЯЯ~.„pЦS”SхNСгм Os3І?*bz* іТ… иН{wЙl)Jz mцЂ`ыыыБrхЪЂ/R% /Вs_ЌзыECУдGЎЈdЩЎ.иб(ќ Р;gЮ” Єс"Ц2Л*{žеЖО~†ЁzяН?~?*Z[бxЫЧXДЈмІ”6йн3џєЄЮžEТВr?ŠшO&БЌЎЫыыбœL"vфnМ s>њб’vщFЋlАУ‡сєwО ­~zь8ўaп>$ _7З_йАќѓ;v‹Пј?Ъ\–ч *‘@Яˆt&ƒћ~љK|ѓ7 ‚й№щ]Я=gЮ ~ъњ^к^“” ЖїG?‚5tь?€ЗоЛќ/8м8s_"ѓ/М€T‰mЎJ›>ƒoОƒ‘^Оp>ј ž{ю9мpУ їojjТў§ћБЊm=ўfїnАmуќˆЧЮHЖ_Мћ.>їљЯуњыЏЧЎ]Л vыЎПўzlпОЋV­B0ФžоГJЇ‘œЮг§ TrXзаЃ§иИq#žўy|ы[пBccу˜ŸЛмsЯ=јц7П9тЛЃ§§HG"аbЯгUЩaSNџдХ‹XЛv-‘ЩdH$АfЭШБMŸ§ьgёуџxФwЮШђЄѓ\З”*9Ќщ„RцVTрнwп…Ячƒiš№ћ§“бX‘э§xJ’ЪыoЮюZVW‡={і`ѕъеXГf тё88€Х‹cыж­уПЌЎF0ГІІдІ•6рŒd[?o}єQ,_О/Ој"xр(ЅpЫ-ЗрбG-xlse%цƒД,,ЕYЪа‚ђ77Узд„­~ўђЫиАa|>_n˜ќУ?Œ‡~8З*•ЪО ˆпЛёУ€šыЏ+ЕYЪрY’ЭŸў Ш0№W6 &t"н}ѕеXЃъкkQНfmЉЭPІ”ПЉ snў(ТўэcЗ`ѓ#СЋМ^|}гF|nѕ*Ш`Mw§Q9LPЦŽРœ›n‚0MˆgŸСпnО{ЮžХўѓчqДЩ$–жжbY]Ж,lA­Я‡@k+šяљ4ŒІ­ђuёˆўа‡PЙr%Ю<іоŒ. гDу­З"ќ‡*kdј tоНXђх/УDВЋ 'Rс[а„@ЫBјцЯ‡˜рm^Ѕдofь+ГІfM *G њMЊ(и'Nф~Mѕл–ћrЩbŽ) 6‘H”ѕM\ХЊиwЯ”oŒњя fagЊfagЊfagЊfagЊfagЊŠ~§ЛЄt:}љђTlЁ_mќЖЧёФOе+)кГu“|ёFЙ5быЛЧгяUž…Љš…Љš…Љš…Љš…Љš…Љš…Љš…Љš…Љ**еее…žНќЗЁЂ`А|љђrйR”‰DyguBРSІIHŠеxгфLЄпЋ<; ;S5 ;S5 ;S5 ;S5 ;S5 ;S5 ;S5 ;S5 ;S5 ;Sѕ{[T(5‰`зЎ]хВЅ(•}:Œ@ 0сдчПIY–…'NuLЩЇ>џMi*гaќ^хйYи™ЊYи™ЊYи™ЊYи™ЊYи™ЊYи™ЊYи™ЊYи™ЊYи™ЊYи™ЊYи™Њп+и’ОwQkЗп~{JЃМGЋЅЅѓЦ™пgЊ*zъѓгЮ ж щаЁC8x№рtmHCтіmЗћЂьГКh­‘ЩdЦнžt^šОєЦ%0†3Эƒ™‘ћcœїнш}˜qс~Ф{уHЅRSzгШx*ЫыC+*р zF0ѓЄз пP9Ь*,@юmй)в\Л^B•(А\/ў-, hJЭ~Uм2M`fhЪ+5ѓ€œr LЮrоzЙощ\XA—’Б`&Cњmш7˜gr>d})ЅHЮє)бeђЌ Ў l+ŸЪK41Фo3рця2eкђТ#је“ПBџ{ЙС=ь,3cу7Њžоо^ Bk ­ѕˆ–жCCй–ЯиQ:ДЋнGЛЧНЦк›жТН;oОљ& УШN—!ԘџХMYьЁC‡rэпёT3По яИŠЖ›кpхкЅŽWнG{p|ovцB_…Сš |Т‡С“8wnтљЙ-ZTОАЗЕЕaзыЛ`л6ЎЙё4,gЫКє!™Нўс7Ž`dhНfжЄ-—КїрЕЇГ#ц<~юў_ŸBe]%И–БњOVCЋl ЪўghKсєЫ]Hі'бммŒКК:ŽFЃх­ЉЉСЦlФЮзvЂу—№WЎE}kНcМбАџо—О7цјЏќЫWPг˜HїНЮї№Я_љgЄi˜wЗ ЭЫšs9YH’”­Ї™Ёl…ЮWЯф@зЎ]‹ююёГC!ЉЈ­­ХЦlaяS{qЁѓ‚“GEЎ™8^~%ЪжЁ‘юОџЅD"š€4$ўЫзў­яkЭхѕмЧ9kЦЛП8hOЭЭЭXЗnнИз˜HS*]рЏэФоЇіbЭЖ5/;[РŒo<ѓѕlk‰uЎЯЈ `рН|я/E|(!юњЋЛpхК+/ МU]i[удKюЮNUSЎzjkkБiу&ќjчЏАящ}Ѓ€ЊкъQ}U уЛ_|У§йF6Ђћh7КžqЊрКл6 XаJуфіSюž>шД`lоДqvюмYИPЋiАo0ЗљьЉГ8{jф,iял| BЕ!h[ујЯO`Ј{Ј$ @ 555иИqуф€иrз–lƒЩi5ЙU›дCЕ!Аf{сXIAЕ ђї>Нko_‹pkИрОћгХш\ўV–BЧЯуbїZZZАvmщІ *Yми–$Бї'{9SЊŽПžmБџь.žЙXrP`X!Qю3™“х€…ФоЇŠf›qшЙC<3X4ЈkЃbB;ЧР !FЄЕf­ѕЄфю;еwY`VŒƒЯœ(gыЌœ}DФRЪ‚іц`Н^/›ІЩ@і]пЖmГжК(ЯоїдО Y1ољщ;830ЅЄKD9‡иЖЭn\л0 іzН#ь s_J)йMТBMDЬЬ€*& ?8R˜•ЦЇїOTkЭЬœBhчУBˆžѕћ§Йe‡s+Іir"‘Ш%eЅ3ГB(fŽ$‰ЂŒ™Єї!rВТ™н•ЦлOэGзд@ Ћt:нУЬZk­Ѕ”ZСщtš‰Ф˜д˜KЦ>Ÿ!ЅdЅ”{А ”Rv2™<>00PєO.jjjАiгІ,№гћаwВкжићф>єwѕO4“Щ “ЩШx<~š™3kЅ”VJi!›ІЩCCC ЎC…cїєєР4Mіx|˜ЧЅa’™ !„ID­Е‡™…eYч-ЫКкВ,2 C˜І9що‡ЯчУœ9sа}І‰сФ”@3™ †‡‡qъд)+‹?{іь“D#Ђ8€3ЇЄmлЖlлЖ€‚фњіЗПЭЦŠ+8‰АпячссaіzНк4MNЇ›™3вZыд№№№БD"ёїЩdђ#.\X ИИ€9sцРЖm!№ілou,йJЉўCCCoQ‚™гЬœ!"›ˆlfV^ЏWЛ5Hgg'ЗЖЖШk.ƒA6 CGЃQэѕz•sbK‘!Ђ%™йЃ”Каллћ 3‡„•МLч|€ФЅјE1rыLЭЬкMžв’JЉЈ" `XkB$•R)!DZk!"[k­2™ŒNЇгЙњwХŠLD0кллqЧw0-ЄlлжЬЌˆШBXЬœ&Ђ€ЄжDЄЕж€8/™Ьl‘`fСЬTь$}ШЖ\#•c‡хРІˆ( ЦЬ1"Šˆ !’D”vlЕ™Yi­U(в>ŸO#ЏС‘ѓlgg'‡B! +**”s—2Ddh­ )ЅTJ 'КЇXD”bfy˜й ™Y сЬаЧ<Й‡nВcf&"эxWА˜йrnxŠ™DгZЧ„qfN ›Э2ІiZщtZUTTшккZэёxЗЗЗч`yХŠˆD"‡u*•вЖm+v[ў…IDATУ0l!„Ѕ”JK)3 )%œ:Э&Ђ 3'Ps.щzVkMB*2|тЖжмЧ €›Т2D”вZ'™9!ЅL(ЅтЬœ4M3•Щd2J)›ˆьT*ЅЯŸ?ЯЩd’Ус0\яJДcЧZЗn:;;Щё М^/ЅR)B@)хжПLDљyЩBЄЄžЬћgц3Ч…q dГBм§фЏk­уŽзмmq1qчБќџШ–ОI)eR‘6M3CDVeeЅ}сТ]__Џ‰ЗЕЕёŽ;РЬь&уоEЖ`БMг$ЫВ Ѕ„гNжЬlШ!RJ)CсцeADЙЩWAљ?ь§#пМuЮћЯyЩY97жffK‘‘RІЄЅ”i"J+Ѕ2NaЊRЉ”ЎЎЎж‘HD‡Ус\F–˜tЧwP$!Пп/ƒС HЇг†RЪА,Ыєx<ІmлІТЃ”2Ѕ”&УЙaR!ДжТљOHQiиЭЗnS5{*v MЅ”%ЅДђђЉ%„А УАmлV}}}КЕЕUЏXБ‚лллseсмArНлббЮЮN С`аР–eБг SЬl‘Ё”2ˆH‘BЇ№ЪцOfФ‹mлœяeXJЉ•Rš™•ЧуQ™LЦѕВ-„А•RЖзыЕ™YEЃQFu(тб @6ЙЙw• НН:::ЈГГS444ˆ`0(†††„”R !ЄB‘L&“в0 a†А,KH)Ч€j­iВSUЅгiфїЃнЮˆeYl†Жm[ћ|>хVZkЅ”RЖmЋp8ЌbБ˜^А`>~ќ8‡Уa~ђЩ'sѕьИАљР‘H„ТсАˆD"" ‰h4*ќ~П№zН"™L Ч#lл&Ѕљ|>r—ѓ‹• ьvгвщ4K)йыѕъL&Ѓ§~ПNЇг: ъT*ЅЃбЈ‡Ук­:7oоЌ|:tьDРбh”Z[[)‰ˆp8LЉTŠЂбЈЈЌЌ$ЫВШВ,Вm›ЊЋЋaYVIž8К„X,ЦІiВiš<<<Ь‡ЋЊЊДлФЭїІ“t ‚ށ €клл1к1‚’Щ$…Уa€T*•;.NO8?Ърѓљ8‰0эŒƒAv=щvпђѓh!а‚АЙ у@@$!ˆFЃю (ЄX,6)№ќЎиhuvv28-<ф@>$Pў?i“ЪЄž:"IENDЎB`‚Printrun-printrun-2.0.0rc5/images/control_z.svg000066400000000000000000000544521325617007000216350ustar00rootroot00000000000000 image/svg+xml Printrun-printrun-2.0.0rc5/images/control_z_mini.png000066400000000000000000000150761325617007000226350ustar00rootroot00000000000000‰PNG  IHDR;Њ7UsBIT|dˆ pHYs з зB(›xtEXtSoftwarewww.inkscape.org›ю<ЛIDATxœэ{tеч?їVU?ѕА$K–хїK2– и`cd›($0 Я3œ œ9gOЮNШцьЮА@še&™=agГй=!$3pЦьd  dА ~…€X`лШr,Ы’ѕjЉ_еUїю§pЫ–фnЉ{OVЃяQUwнКѕћдяо[їUu…жš\%„щэ––аоо.Ц ллл;цяљЊККњ5РЃ>Њг&щ@Ь\O*„ZkZ[[E Ptuu @джжŠсссQpС`0зЈsViiЉhooзњо{яU---:e01ДШХГBбвв"кллEEE…єzНв4Mi†ьяя—ІiJлЖ…пяЖmФЋGxН^‰DДзыеЎы*Чq”mл*Ћоо^еммœјВАiP@іѕѕёxм№zНf$1-Ы2mл6Е憔RZ–%Ч)hZІiъD"Ё УаRJ7‹ЙЧбhд1 Уѕx<юРР€кБc‡BŒ ІiВxётœу№x<”––ЪЊЊ*п‘#GОЎ”ъжZябZKлЖ…зые^ЏWКЅЅхяЪБ"M{ЕББQЬŸ?паZ[чсYГf•L4 БgЯlлцълЎbг—›№–xyїнwщшшШ;>ЧУЂE‹|–e=ЌЕž-„(—RтёИgppаLн%.б˜Аєj{{ЛŒЧуF"‘№!>3{іloО†] ZЗЊџ,?Пt픈ЫЫЫJ… †aЬ2M3(Ѕєњ§~гЖmcЌћџ˜АiЯзжжŠH$bКЎыQJЭ“M$P­5ПмЯ†­ыЇьїћ]`5PЎ” *Ѕ|–e™G666ІЫœ‰a…išR)e!Ќдэ%gC†‡‡GЮЭе:љё—ћЙіОk' l†BTh­KЅ”~Ѕ”'›ІiЪБ’ђ˜жЗЖЖŠЎЎ.‡…aАЦ 7шюнЛI$\•Њ.ў ё•ћXї…u“€h­}€ešІi†Ш 6­ВВ2a†дZ“НњіЋ/$н‹Мš§ё•љИњоЋ3РŸ|ђInЄЩвжМІiZRJSJ)уёИЈ­­члqaD$Žу™cњfзю]аЙWЬ”KЏњ“Ћ№”x8tшPNРЉВХ,Ѕ”ЉЕ6тёИ љ•ЦБXLx<aЦekЁPˆ]Лwс$œМAгпНe^ЎМ{M>РB HЅ”А,K\м0I_• •ђь„АЁPˆн{v}ѕgЏœdгэ›FНўмыD†#h4ЩПdЩŸє’цЦ/оШъЛ9ќѓv:„жšЅK—^XJ™qJ<гоœ›xљ€j­yуŸп va-MЗ5ђр[Пx‹sуЦзtW%ГJhМsэ/~H[[Р„РZkЁЕщzЗe]žN vAmо’——sUaaуqфПќ qі,,—ўЯбcќєƒшDЦ<$`Y|vб"О~эЕ”x,ФёуШЎ.єM7Ѓkk j^ю}ЃЙDЖgOД;цыЏНЦ=xp\P€H"СKЧѓХ—^т@*I‹HёкЏ!U5-˜}…ŠHœ88y€ЗЯžх‹/эфэГн9зУя&л­"AОѕfЁЬ •ŒГ ЖmZїю%’HP]]Mkk+RJОіЕЏсdхaг4ЙыЎЛXЗn]]]МђЪ+ј пџўїyјс‡ЙяОћp‡yѓцqп}їёЏЇNЁR}Yт|яTЭ сйо †|дзЧЦ™3gO?§4=єа˜‡,\Иšš€LЏCgg'ннЩm§њѕD‡гЁа%ч˜ŠІюйдU:CCДЗЗгддФ<1ўbеееeЖЯŸ?ŸйюыыЕџH_ъч)„І\@‰дU?жпвš;w^і˜ЙsчfЖГaћћ“pиў~>Зt Фbˆсatiщ”lz2NUыJ,OЮ‡ФГ* йНїоT\БTЩ^тЙАO{rАЖ]7~їL>*HЋG_uuВ{ИЋЁžkRэаэлЗуїћёћ§™6[?ў8eeeЌ]Л–КК:ЎПўzzzјыІІфDHгФmn†ItСŒЅТ4ё„@њF0 аКy3зджтК.БXlLаДlлІ­­ГgЯR№їЭŸЂ6еЯЅ6l€ђY1 иžеГfЁ6\Рь€ŸџyѓMќЇыЎЫ9џёђe<ћэЌOW8ъъаЋзL|Pž*hЗŒ^ГШпDИ.w7дг4џєб>:žЃ§§DSЭ<)KЪЫЙbv7/YТ†ЌZ•^К uУ KОiЖJє•Wт.X€|у DoЕС џскdЁЅДц“С!F6ѕ••—zнчCБ‡Б8]ЉЈ;яDДBОїЄFкЄ,Ћ#J‰^Д(鎘чќШ|TД~cЄDЏЛwэ:D(Н=ЩжKO/"a';ШgWCu5КЊ ŒТw\ЌМ`#‘ШЈzm^*-K~–\4=@k˜DютўЌ\”ььйГЇ<=ЇP …BМїо{y“l0dўќљy [ЪЖ‰9ƒт_ИГЄdвqѕŒ7Ќ2Š—gSRŽCЯЋЏjk#vі,:k„ЯЊЌ$И|9sяМ OVыЇX**lєєi:ђБЎ.ЂŽУЧ§§щыg$aгPYХЪh”Њў~†пŸК{юЅrѓцbšS<иЁCяrъЩ'QЎЫ с‰C‡ˆQЈ|nщОЙaюіg9v”…_љѓb™TиБžДœЁ!N?ѓ сXŒПјѕЏљooП=&(РПœќ„­/НФ‡чЯ3p№ П=X “€"Сžоў n$Тї~їяv_ўVu>х[{о$ъ8œyўyœЁЁb˜Ux蹉„>ј€ƒ]]ьЄЕЕ•'Ÿ|’•+WŽ~йВeьнЛ—рмЙ|џwp#z^ћuЁЭŠэHЮўоyќ<ђз_=‘H„элЗ_vгІMьмЙ“ІІ&‚С Џž8‰вšШ${ЩE‡t$Ч}ŽєѕБeЫž}іYќqжЎ]KЩEїе‡zˆŸ§ьg™ящŽіищг0С‘“UСacgЮsњ‡5kж000РРР†aАnнКQaяИуvьи1ъЗуƒИБv_aFВUpXkж,|І‰Љ}}}щ‡.yfgЌ)Dе?BJЬвВB›VxXџЂфcЂ ••8p€UЋVБfЭNŸ>Mgg'‹/ОФУcR}ЯокZd&6Аh1ычжђƒќ€ћяПŸэлЗѓня~€x€'žxbЬcЏЈЊ"`Yј.*ДY@jPС•+БЪgБѕŠ+xрхWXЙr%~ПŸp8 РwОѓ 8$‡*+**ˆ†У<љЙфрuХ† …6 (‚g Ÿљ_ў2–a№ШцM˜Bd@!9h522’љЎ”bppmЋWS_YIхцЭ”66к, H5ЈВеЋЉкr ••<ѓЧЗВjіј-šrЏ—ЧnиТkVcUVRї'їУ$ ˆ К/|ašАы ~|Ы-Мzђ$яѕєpЄЏŸpЊеsEUЗ._FЅЯG`щRn놑п)‚Š+-‹yїнGљКЕœ~њin‚[Чш5”–EэwP§й› оuzБŠоx/Љo`хпќb]]DNuэьФD ,Zˆс"ќ `ј‹зЃ˜­ЂУУРП`ў ў_œn\хлооЮ‡~X,[ђV>ЅCžАCEjgNVІiц•Щ‹rыљCе ьtе ьtе ьtе ьtе ьtU^ucozќІЂью\”l}}§Ь4ƒЁЁ!~ё‹_ф5lliiiоЏ,–&3ЭрпTžЎšЎšЎšЎšЎšЎšЎšЎšЎЪЋъфЩ“tvvЫ–МЄTОK‡Lт…uеzў|ЊŠFЃyЯяШ 6§њЮџ_ѕo*ЯЮРNWЭРNWЭРNWЭРNWЭРNWЭРNWЭРNWЭРNWЭРNWЭРNWЭРNWє)Ы={іpњєщ)ЧуїћЙх–[№јСс‚СіїїГwя^Є)‘FV‚wF№8‹ip.uuulмИБPц“xЪrМйлЁдЫвЌЯвЭKs[)ЕЬTії‘s#}ёcњћћ'\ЅTOтu,yС:Žƒmл™евВWPN…КhˆD“Yюоu\ьЈ& :ЏІHŽFЃ ŒЛzZОЯЮц;<<Ь‹/Оxй+jzЭЄСйCB)рЖ7оу…яО0юБзоr-ŸЙяFŽ;ЦБcЧЦ [[[Ыœ9sr5?i[Ў-ЫBHv5ГъfQZ]šZќH-hx Џ_”єl–GгК옘‚@U€ЅŸ]JИ7|aбПT rт.CŸ$XžЬzѓ9Уњ|>šЎobпў}„ћУЌљмjЪц”›'/‘†knК†Ћ›ЏЮ„§Иэ8ЯЖ>‹ыИЫƒlМ}#BЊ–WRЙЌbTмnТхФЋЩUcVЌXСЊUЋŠЛЦжœ9s2Рž?ШЦ­зQ6ЇьОўќoxowі 5змt-MЗ_єJДж|ђС'<їиsИŽ‹ПФЯЖП{€9 kF—бЉдЁŠЏž$|.ТђхЫЙђЪ+ѓ‚L+я\žv.ž?Hшм0ЉA_WЇ>:•ѕщdАw0ГџїGЯOОѕSё^П—mЗКeu™§щ‚HrЧ_=Nј\˜хЫ—_vеХ‰4Љћьh`уж”е–‘МvšW/Я ­бЏJцх3ЧЛxђЁO-Чњ•ПнЦТ†cоuн„ЫЧ/gЄ;ЬŠ+&эбД&]ЉжпДk?Л~є*†ZsіT7?њЫŽb˜ї?ђЇ,hX€›pбшd'“…›ыИ§х1FКG :%и4№ІІMьнЗ—Я`у/ %ˆф*п xычof–cu—ŸќѕOGХwн­зqчзяРЕ]ŽМt”‘юъыыYГІ0ЏыžrC ІІ†MM›p—Я t64*Я]Шƒ’KJВ1ЄŠw~ФpїpAAЁ@uу4№О}YIznЖ‡wэnnћwЗ]tЛКАx6ПиЮpї0+VЌ(((А‰WSSCSSЪQx~  Чч!P PHў/ ( ( тёz9ђЪб h!ђшХ*h{іbрЁюЁ1’ѓЅпн„Ыћ?ŸайаЄ@…9Е r‚•RцмФШ>јмСЫЛ —Жn#t6D}}§d<Њ•R(ЅД”R›І9Ў­Тњ|>mšІv]7ЏіTЎРnТха ‡2 “ЭЃRJ%ЅTЎыъX,†зыгоqa+**4€mлZJЉ…БD"‘Г—Ÿ ьк.яьx‡ЁГC444L дЖm­Еi­@™ІЉ<ЄДДєр =;<<ЌMгдBWJy*ћ-{Йh№ѓ Ѕ€]лхwџєЛ шъеЋѓЃ$9Q3ZыГ@Bkэ8Žу*ЅTiiщ˜Г8Ч…­ЋЋг~П_K)]!„ы8Юџ>sцL<п‚šš6mк”*ДвзqžЗwМЭрйСIƒtwwk [k=(„ˆi­у†a8J)‡uwwЗnlleь˜А>њЈоЕkкu]%„H8ŽѓR"‘8zтФ‰DОя№ЏЎЎfгІMhWsрљƒ œ˜4ЈжšююnнггуФуёз€aЅTXsЧіx|јЦ@  ‚С %ЅЬyšjCCЇ:OQ1Ћ‚ЊЊ*ЮІ–oЭUбhдСuнmлПжZŸЄ”! тёxт‰DТ™={Ж*//ПVŒ•,…ЂЅЅEtuuбhдcšfРВЌ2)e•жzАJJyЕb!р,РЄBh­ 6O7PZыЅTЗжњаєч УшN$чЅ”ƒсp8\YYяююv^xсЅГЧєЌжZЗЖЖŠcЧŽщХ‹Л–eйŽуDMг i­M)х‡ŽуœBЬB”h­§Bжк$•5 œUYP:Йк}"•?G€! п0ŒОD"1$Ѕ ЛЎƒN<Wњ…Fїwщйд‰2о,У0М‰D"(Ѕ,‘R–ЙЎ[”Р+„АДж†BІA'г˜-ЅTX !\­ЕЃ”ВЅ”Q­ѕˆa!ЅTШВЌP"‘›ІЋЉЉБлллн;v(!йžVkЭНїо+УчѓY%%%žx<ю7Mг\зѕ !МІiZJ)S!]з•Fj…–Љx7Л Ј”JЖС%y›‰ !b@ФВЌЈу8QЧqтС`аЎЊЊrев‾EpуТІ[ZZD{{ЛŒŠŠ А‰„ЧыѕzKkmЙЎk !ЄB*Ѕ >Џ^JЉ]зеІi*Ѕ”cšІ‹Х†aи–eйС`аŽЧуЮD p™&žжZ !hiiЁННнДmлЪu]ЇЄЄ$‰DLУ0ЄišRJ)ЧRJЧ)pКЎыѕzЕmлкu]Ч•ЯчsLгtН^Џ{ъд)ЗЗЗW577 —ёl&P*IЗЖЖŠ]ЛvЩњњzсѕzewwЗЌЈЈбhT”–– €X,VpЯњ|> t(вС`P;ŽЃRеооЎѕD #,$ZZZ@{{ЛшээЭЭЭtuueŠђxHv%ЁЎЎNЇS6i€‰@!ищ џ v’О`Y†IENDЎB`‚Printrun-printrun-2.0.0rc5/images/control_z_mini.svg000066400000000000000000000464451325617007000226540ustar00rootroot00000000000000 image/svg+xml Printrun-printrun-2.0.0rc5/images/edit.png000066400000000000000000000017621325617007000205320ustar00rootroot00000000000000‰PNG  IHDRзЉЭЪgAMAБ ќa cHRMz&€„њ€шu0ъ`:˜pœКQ<&PLTEˆŠ…ЁƒU{|xФ џџџєтМєе—yyy{{{nnnmmmtttˆŠ…YлллЉЉЉЛЛЛККК   РРРЃЃЃНННЇЇЇwwwюъЦЯ­qѓѓѓщщщчччъъъМММяыЧвЌj§§§ьььдддЄ‡WЬЬЬЗЗЗЯЊi›~QгггЮІhŸ‚TюшЦЭЋoЂ…VэцХЫЁeЂ…UВВВыыыэхФШŸdŸTŸŸŸЫЫЫuuup[9ТЋŠЃ…UИИИОООœœœLB&kW6­­­ЌЌЌЙЙЙ”””ФФФTTT~~~ПППбббЪЪЪ’’’цццЊЊЊБББююю4;іitRNSЃќ Д(,. ”GїbKGD’пЩ5 pHYs  šœIDAT(Я}’щRƒ0…Ѓв•ЖЉћН"h И@E[ыжj­ЛжНjеї 11№ЃчЬd2чф pB†I‹YШ+1 Х„6)˜žNiгЬ3gЕ9@фЬы КaњЂi,U—WаZх ЌQj;д VjлыИБ9[юПМ ЏEWU\w;”жЮn˜Г"T­Ц^” „ЭF $‰:6їа„$сусб1z­$бЦ“гzоY‚шž_\^сѕMѕ6APМЛЧ^ясё)*$FtŸ_№ѕ­пџј‰)FД`$JСЄјtгТўј†t† > ?­˜ ›aD.qхsќ!rЁXR”2—Ђ”Š9z-YUеqЎ`'KCђ U`;J4ЊЛg„zTXtComment™MŒA Т0яћŠНUЁІEo‚gQ§Рv]šеЄ)щ–@_Џ ‚sfю)…ŽђfвEЈœ8ќАт5nлv‡gzЭVO‘ИТ›‰’ko6ю›ц+\œ'eO!8^8 йg\д<š<ž.зњ—”R\Џqt)їoŠE,6VXd%tEXtdate:create2014-03-17T14:04:58+01:00h?uЌ%tEXtdate:modify2014-03-17T14:04:58+01:00bЭIENDЎB`‚Printrun-printrun-2.0.0rc5/images/fit.png000066400000000000000000000015561325617007000203700ustar00rootroot00000000000000‰PNG  IHDRзЉЭЪsBITлсOр pHYs з зB(›xtEXtSoftwarewww.inkscape.org›ю< tEXtTitleZoomМU+&tEXtAuthorJakub Steiner, Lapo CalamandreiTёЇ,PLTExxxППГ>>6992ћћћќќќњњњќќќМПЙОСЛpqnMNKLMJџџџОРЛhifwytНРИНРЙgheџџџџџџ—˜•ЭЮЪZ]XџџџЙКИКМКчшцщъшщъшВГБџџџXZVikfoqluwrz}w{~x„ƒ…€‹Žˆ”—‘š—Ÿ™ ЃЅЈЂІЉЃ­АЉЎБЊЖЙВКНЖоомрроструусшшцшшшщщшщъшъъщээы№№яѕѕєѕѕѕѕіѕііііїіїїїјјїјјјљљљњњљњњњќќћќќќ§§§ўўўџџџcFђу6tRNS !$$%():FVblЁЈЈЉджкьюююю№№ёѕїјјњњћћќ§§+ŽњЃ*IDAT(S­Э[S‚@ЦqСФвЪNvіPІVjeY'IM;`ˆКЎ№~џяаВГюLнѕЛxч™§ƒЯїПТБL—ЫФТќ=UДћ.І–%ўр:6чИїqВЮ"їLЬfоЭ-œ, ]Рђ)€ŒБ 7'2†.HEQ"чQAр6+l(ѓIо/OЮљџўЯѓМ‚Ї€>ž,-/'ЭЧ_хдšЖd"ynТуС№№0˜ERТjЕb•Э†P(dYf4UзЌЎќЦ гQ’IЗЭї5ызkї8рќНРœŸ'j33suK2П4 ЩсDЂ§qРМхЯѓ @ДYYIuzкО ­VsшаA{<.ЁЋЇŠ,ЋlЅж“ƒ§їиЧ~|’ў-АXшлMMьиЕћdщŠ"‚+з~ЅnїЄ‹Б E.xД‚…œƒajЪЩСЦКЭ(,*jоАqcл*k ›ЁIУЯЮNИЧЧёв–zxмю_nмМљYКZ-?‰k@ОЙЕ6Рh2!?/џXУžWкФИHд„`ихТЈЫ…чjkA<Я‡ћ^ˆТЭ'ђІК:Tлk …m0Дьjh8QБr%сНг8пгƒiЏk+WC–хАГЇћTовel8ЅИєяЛˆpЬљXgЏEAЁСP9&SЫоНЏЕ–[KX!Bwo/<*m•$Iььш|Ÿ œжku‡p7™‘Ž%f3Шж­(žœBžЩ„X4 .ыиі mЖВR"ƒ8wё"ЦЦnЁІК ~П_<зхlœ :m†УЬ1nЫцM)€ђ’b„ЪmшžšB’RDc1,Ø[vяyѕ„Ђ$ШШШ‡†рУњuыРѓМpжйбEЧЮmЗ}лж”DR’q9(ER–a2šZ^пџFыЪтbіоФ]tїіbкЧУ^U ?Я‹gGcqбСq,‰ф\@$MM „ƒ"+Hзы?ЌБл[—M#\Й~wБfm5|~^ьtv6ЦЄјCчѓяђy‡Le…5./l^R_џбхhC_ŸBЖС‰&PГЖ МŸЮwu4‰RмСВ,ў+B)RV"UnЮсмКњV_YЉъ;‹џ ~јў ЬyљˆDcbЧчбX<>oЯчT Љвўq@EYКfціLˆ]КAr_о„№ЮXžЁ?Хб;ЗЃqбС-рќoЏ_šHуXŒOЭzfJЉвчЊ'oЃ~M˜в2сзгэM:mІƒеЈКрЭ2 єсф) (Уо—Y№…!ЛP§ЂV‰\г0гІуОЋ}яfQъ`YnсKыQ@zT &(.мŒњŠUпfYз[žўK?uНГe…1ЏЯd^ўGNЅz*qрX–uЏШ№h дhЉx>ў з=м0Aс"В 6™aїј1wFFсuOBKињн5eo‰оћ‡…бС„a]Bfз"ƒyџШAP…Ўжsь'њщёm’ Д+ ђ?DS­ŸŸЊ-+БДМО}qIОAЯJ˜j[ХWSї'пќјгЖ[ЯRјЏј4эSњ7‰N%tEXtdate:create2013-06-11T22:08:48+02:00xZJ%tEXtdate:modify2013-06-11T22:08:48+02:00 ЂіIENDЎB`‚Printrun-printrun-2.0.0rc5/images/reset.png000066400000000000000000000022521325617007000207220ustar00rootroot00000000000000‰PNG  IHDRрw=јbKGDџџџ НЇ“ pHYs з зB(›xtIMEн/Fн(`7IDATHЧЕ•пoSeЧПЯћžžЕ==-ЃeЪ€РAD0 ВNж`&Ј$† НвP џƒ‰^jФ /LŒб˜E.ŒaЃ &( 4a];š-РжkЯ9mOЯy/HЬBіїН{ѓ>Щчтљ>п/13VR+ЌhѓУ§НˆљSјh№~чиі?яuЇ“ў!_бЩМ@;€ЂјЕIєЭы—ЏL. љ;Иагs5ойy ‹aњњѕIdУбhŸБnkтаТMƒr8ГГp&&”mлHЃЯ’—FЏ< €зlлŠPЧF<љБЛLЌ†g9P5 ЭzФj4 L^Й‚Т­\Гjg’ЉдЙewРЬ bФЛК 5†ЭЂQ*РїZ0 i„РL№чЊА3Y(ЅажнC†i~1мп;И<@1ќZN.‡FЁ-†_ЋСЮf1wї6J7nТОŸ…WЏCМjюЬ#ФЛі‰”?ќжзЗki€яЃ6•ќ)uTВ(eВАчц2VЭ=эyМЅ2S<;›NЇ+щ4D ˆІSƒgYhнГЯЄОуŸŽ‰ХmЊиїARBO$Аzя+XŸ<„Ж—wmР[Џо;œJ}>№Q|Лх8чЋЙ D0ˆЦь Ё‚-с#_,ИХОV>иїсLн‡3>'3ЏZ 6џuЧё!екJ'ьтмэfЙ’MЛŠ–ЕkсЙшZ@Ь–&ѓ”ry”ry”&&QœШЁ˜ЩЁxo"­Iœœ?ПohФ№­[.ƒˆрUЫЕЦРD] кРииUџЫЅВFзšе*аоЯВ 'к@Ь{џЗЈn"0ћWXЋ€О,`ь`ьЋ#gфrЯХ€аuЈК 0аДЊpkI@jppw`KћЋ[*7їЯЗм“нпpЂЅ-хК MТГ,@bxQРЕЯюв4эљ`8вŽF“П,ЩвIzrюяЗїыЎю …c‘53 ЏfAšjгсБ^0‹~юэOlнГЃЏ^,ПаЌVŸгbЋ:щГŽуL ‰_ˆyJ(ЕЁ yZ2ї›mqгмМіdЄрхЉw’ЉдŽ]ЄSГQК{Ї\ПЉЩzжГЪfЄЃcЋAЄ7 3яњ…RŒCг„žH@3#ЈfВ Сš‰JўО‹€8НhšРхC=л˜яE;жїљŽ§ŒЊЙбРъX$`aDЅрY|ЋŠІ5 Aш:*љi_yо›Ѓcч—РХОю7$фЉP<О]†[к”ушЪѓРОH, ƒˆ`\oТz8Ы>ѓ;ЩTъЧ%ћ`О.uwяє‰>б„8кВЪ„fAŠёи^НЗP†Ћ”­ ?8œљ~йТYHzzŽѓ1Ÿh€—ˆШ f—‰ў‚ч’ЇV бё!ѕT•ЙњПGЧ…SIENDЎB`‚Printrun-printrun-2.0.0rc5/images/zoom_in.png000066400000000000000000000033131325617007000212510ustar00rootroot00000000000000‰PNG  IHDRрw=ј pHYs  šœgAMAБŽ|ћQ“ cHRMz%€ƒљџ€щu0ъ`:˜o’_ХFAIDATxкbœЛb3#~љђ‰——с?ўќёC–‰‰Щ“‹[їїŸпЪ~џ§{џўН{Я?:љТЉ­чO{Ы@$ dЮпПЙXйиJх•Вйй9Eџќ§Я№узo†_?2№ I0Јh0(iш>“”›|tпіI_>ќMШ€bі‰ћрчя‚Bkх•џ§gцўѕы?##;;7+'УŸП пО~gјЫР$ ­ т&$*Љџ№юнП~|џŽЯ€њр?Pѓn1‰%RВ Ž_>џ`ea`eeZТР№яУЏ?џ>-Иr§6УЅыWдѕŒ§О}§{t —ФФРФ$%,*žїуЧ/E9n.N†ŸаSыТg ѓ0ќјљ—d'7ƒ‘Ž*ƒИ”:УŸŒ žХРФ Ы€bbfaѕabaс†ГА0/8ЌAјз†Пџ3<~љ•сЩ‹/р bf‚јF›™AKCШсb•”‘—QPuЧe@-`ГЙ^XH€ Ј м Мœ lР`aќ оџПРёРФ ДˆA–Iѓ1‹ˆХX$Єe­ vc€bљіуЇф`2рчЛ№'0XzVМbјќхУŸ?ПОЩя_?*&œdјфsВ§gЈЮВeрdgaaј№і!ƒˆИŒа, ЦHQФLzŒ_П~c`0 аPЌ^Лћ‘сэ‡ЏРŒёш‹п ~џ`Иzы УЗя_И>ќўѓ?ццт``z›œ"XАљ €X>ўђ‰ы УЯŸп˜љйxɘ:ГdAђсЫЗп е“Я1ќcјУ0ЅЪšƒ‰с70nИ9YСђїЯO`Ъц‘_пЭТšщˆщъ…“—џ103<ё’”є•9 UЙ TљРСТ†š" цz" †Z"р$ JОпП~dрцц`xўјСM Y?АY@Lя\пёѓчЯ—oоКш0Ј ЉdРЏп>~ўТ№щѓg`2§Ф ŸП#”_О|cјўу3Уп_?~<Кwы0ЎT@ЬяпН~*+ЏlТЪ#ЄЦ tНМŒ8иP < a/9)>†пс–_ПqX„03кНyЫбЛfu|Уf@1ƒˆяп\жд7‹zђъ;3ƒ”„(8ЭтN^’‡AQš—с70S§&еп@_]ЛqX~cxёќЩчљгzJ€хи\> АŸ>М{ѕѕѓ‡‡ВЪк>їŸНcyѓі ?0)ВS 3Уw`Vјјх'Уѓ—oЎпОŒђџ Зnпbфхfa`fџСЧЩђэеЋWїџќљƒa@1У/ž>КђцХ“ѓТb’FпџВ‹оzјœсбГз wПdИћш907Пfxџх+;'УхГЧЮmкАё„ЄЌ’šІ‚ˆйѓЇЂо?yђЃL fdЮлWЯoпИxzнї/оБВБѓ‹f`yУќћяŸП>М§pяЦ•++LŸЕbСЬжя­ЩIOL§ђс5чщ㯘DDDм…„„о-9l&@1т)ЪљХ%Ѕф…хYоМzёєЭыWЯ€тo€ј'“‡Лл_?џL Ё лЗogZђћХ‹Y'Nœ˜3 €˜ёX№ѓы—Я/пО~uыЭы—7О}ћ 2ќ3ЈтIўў§ћџэлwvџјёCЦжжжh8УЅK—˜ХФФ<јљљŸ>{іьH@13P€Й§яƒv-‘ГГГг["..юLт_П~} €(ВЩ’П~§RВЗЗзF6УЕkзX€>”ZА €(ЖкXјsџў§@KT ЕIізйГgЇKˆcФШ@EРТТТ#++›Д№ЭЃGv&@€5т…лбќђIENDЎB`‚Printrun-printrun-2.0.0rc5/images/zoom_out.png000066400000000000000000000022261325617007000214540ustar00rootroot00000000000000‰PNG  IHDRрw=ј]IDATxœ­”oluЧ?їЛkЏж]ЗЎcelˆafЂ‰№JтіТ{cт^јZyc|aВH A0&B4є%јB ЦD$ C‡:“eL‚ˆнВЙu”ЎэЕзkякѓEЛЩШ:bрIžЛћНИячОЯѓм#БJo0;3ЭЬtќ‹ф§ћО<},§8€М,~фxАm}ЧхmНб7€žЭ! ЗЗЂ"9‚|.GЩЎр 4EKЅв`їГлFnNŒЭ?жС№сcСіŽШхоЯGгЉ э­­„УadY ŽvЙBЁXbvnЏ/§H“ц"ёЯt:uОћЬgзu"У›Зlъо­[шXПе%Ѓ YHШВ„л%Ѓ5xймЁџх=$SE"›‚ZАљмš%zїрбЎЮюЭgEЅЇЛ ŸЯу€,@’Ъš_Y~Іу'1?CАYыкБcчШЏЃWтЋ:PUя€жд‚_Uбq0-Ш`С*?’РчQшйд‰тжСхл_ЗD`Пai З $P]єCsИ(Y5 hU] <.hєЋtvvQ,Z„B-{ъЛь ы9 >dBРыLc•LlЋXЛ›+Ю—NП†,$К6n`vjIбК€‚Y$Ÿ7h№yЋuЌ)n[&)НъФЋКBBЎКMVRЉŠъ'›]ЄЕ%„$СW‡zpЈŽЈу@Ѕ–х ЄtЈ%гРыѓтX…U Ь‚1Ђ( ёЉidŠ\ Y€,UПTдš+Јцвsb~ъ&—ЫNдљѓEГРЭ;S”ЫжтЕ~ˆкИ.AL‹š;‡Љщ;X–M.›ОP пџyОЗяХ=~­ЅЫ6užщŽ,‹-…SЛиe(”ЊЅКvэ'Œ’AњA"~фНЗ†ъ:ШgгC™ХdњЦНFFЧ(•JЫ#)еJRЉ§Чatє*Г‰Yєl–DbaАž8д–нѕпFглЃЛ.КмžСЌ‰ч?џТяuгарGЛ ‹КЩ{q.§№=‹yЃ`рsKєlyю_cгХюŽ0Зoп6ЌXзoŽvD6|jыˆ !pl#ŸЃтHиI( $ё…Dтл‘ПВ{W.^ \ЬOƒСН'NœXБјф‡уПŒЬ_љ.іiЯЖз%*Л\YWv„ЧЎ8L3г3пЮЭNxђа;C“cWG_кћjfзіћтптюнЛыTUнзппvlllйЩ џ7N:5 ыњЙ@ @,Cзu"‘Ш„ІiЫNфЧ‰ЌБXьV8žђћ§}}}Фуq’Щф 'O˜œœœhoo_ …Ю>1`-ˆmл[Ÿ `5Шјј8ЉTъїЇX‚ЉЙЙЙMгОYXXњњём_U[IENDЎB`‚Printrun-printrun-2.0.0rc5/locale/000077500000000000000000000000001325617007000170635ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/ar/000077500000000000000000000000001325617007000174655ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/ar/LC_MESSAGES/000077500000000000000000000000001325617007000212525ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/ar/LC_MESSAGES/plater.po000066400000000000000000000036761325617007000231150ustar00rootroot00000000000000 msgid "" msgstr "" "Project-Id-Version:Plater\n" "POT-Creation-Date: 2012-01-09 15:07+CET\n" "PO-Revision-Date: 2015-06-25 07:49+0300\n" "Last-Translator: иГй€й†иЏ <0sanad0@gmail.com>\n" "Language-Team: < http://linuxac.org иГй€й€ <й…иЌиЊй…иЙ й„йŠй†йƒиГ иЇй„иЙиБиЈйŠ\n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Virtaal 0.7.1\n" "Generated-By: pygettext.py 1.5\n" #: plater.py:246 msgid "Plate building tool" msgstr "иЃиЏиЇиЉ иЈй†иЇиЁ иЇй„й„йˆи­иЉ" #: plater.py:252 msgid "Clear" msgstr "" #: plater.py:253 msgid "Load" msgstr "иЊи­й…йŠй„" #: plater.py:255 plater.py:258 msgid "Export" msgstr "иЊиЕиЏйŠиБ" #: plater.py:260 msgid "Done" msgstr "и­иБиБи› иЙй…й„" #: plater.py:262 msgid "Cancel" msgstr "иЇй„иКй" #: plater.py:264 msgid "Snap to Z = 0" msgstr "" #: plater.py:265 msgid "Put at 100, 100" msgstr "" #: plater.py:266 msgid "Delete" msgstr "и­иАй" #: plater.py:267 msgid "Auto" msgstr "иЊй„й‚иЇиІйŠ" #: plater.py:291 msgid "Autoplating" msgstr " #: plater.py:319 msgid "Bed full, sorry sir :(" msgstr "" #: plater.py:329 msgid "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" "й‡й„ иЃй†иЊ й…иЊиЃйƒиЏ й…й† иЃй†йƒ иЊиБйŠиЏ й…иГи­ иЇй„иДиЈйƒиЉиŸ иГйŠиЊй… йй‚иЏиЇй† йƒиЇйиЉ иЇй„иЊиКйŠйŠиБиЇиЊ иЇй„иЊйŠ й„й… йŠиЊй… " "и­йиИй‡иЇ." #: plater.py:329 msgid "Clear the grid?" msgstr "" #: plater.py:371 msgid "Pick file to save to" msgstr "" #: plater.py:372 msgid "STL files (;*.stl;*.STL;)" msgstr "й…й„йиЇиЊ STL (;*.stl;*.STL;)" #: plater.py:393 msgid "wrote %s" msgstr "йƒиЊиЈ %s" #: plater.py:396 msgid "Pick file to load" msgstr "" #: plater.py:397 msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" msgstr "й…й„иКиЇиЊ STL (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" Printrun-printrun-2.0.0rc5/locale/de/000077500000000000000000000000001325617007000174535ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/de/LC_MESSAGES/000077500000000000000000000000001325617007000212405ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/de/LC_MESSAGES/plater.mo000066400000000000000000000030171325617007000230650ustar00rootroot00000000000000о•М\аJб !-DKQahmty‹ ДФ:и !;(_dФ Ще єў &28Tr†š>Ая     Are you sure you want to clear the grid? All unsaved changes will be lost.AutoAutoplatingBed full, sorry sir :(CancelClearClear the grid?DeleteDoneExportLoadPick file to loadPick file to save toPlate building toolPut at 100, 100STL files (;*.stl;)STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scadSnap to Z = 0wrote Project-Id-Version: Plater POT-Creation-Date: 2012-01-09 15:07+CET PO-Revision-Date: Last-Translator: Christian Metzen Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: German X-Poedit-Country: GERMANY Bist du sicher dass du das Raster leeren willst? Alle ungesicherten У„nderungen gehen verloren.AutoAutoplatingDas Druckbett ist voll! Sorry.AbbrechenLУЖschenRaster leeren?LУЖschenFertigExportierenLadenWУЄhle die zu ladende DateiWУЄhle die zu sichernde DateiPlate building toolAuf 100, 100 setzenSTL Dateien (;*.stl;)STL Dateien (;*.stl;)|*.stl|OpenSCAD Dateien (;*.scad;)|*.scadEinrasten auf Z = 0geschriebenPrintrun-printrun-2.0.0rc5/locale/de/LC_MESSAGES/plater.po000066400000000000000000000034221325617007000230700ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: Plater\n" "POT-Creation-Date: 2012-01-09 15:07+CET\n" "PO-Revision-Date: \n" "Last-Translator: Christian Metzen \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" #: plater.py:223 msgid "Plate building tool" msgstr "Plate building tool" #: plater.py:229 msgid "Clear" msgstr "LУЖschen" #: plater.py:230 msgid "Load" msgstr "Laden" #: plater.py:232 msgid "Export" msgstr "Exportieren" #: plater.py:235 msgid "Done" msgstr "Fertig" #: plater.py:237 msgid "Cancel" msgstr "Abbrechen" #: plater.py:239 msgid "Snap to Z = 0" msgstr "Einrasten auf Z = 0" #: plater.py:240 msgid "Put at 100, 100" msgstr "Auf 100, 100 setzen" #: plater.py:241 msgid "Delete" msgstr "LУЖschen" #: plater.py:242 msgid "Auto" msgstr "Auto" #: plater.py:266 msgid "Autoplating" msgstr "Autoplating" #: plater.py:294 msgid "Bed full, sorry sir :(" msgstr "Das Druckbett ist voll! Sorry." #: plater.py:304 msgid "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "Bist du sicher dass du das Raster leeren willst? Alle ungesicherten У„nderungen gehen verloren." #: plater.py:304 msgid "Clear the grid?" msgstr "Raster leeren?" #: plater.py:346 msgid "Pick file to save to" msgstr "WУЄhle die zu sichernde Datei" #: plater.py:347 msgid "STL files (;*.stl;)" msgstr "STL Dateien (;*.stl;)" #: plater.py:367 msgid "wrote " msgstr "geschrieben" #: plater.py:370 msgid "Pick file to load" msgstr "WУЄhle die zu ladende Datei" #: plater.py:371 msgid "STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" msgstr "STL Dateien (;*.stl;)|*.stl|OpenSCAD Dateien (;*.scad;)|*.scad" Printrun-printrun-2.0.0rc5/locale/de/LC_MESSAGES/pronterface.mo000066400000000000000000000233511325617007000241110ustar00rootroot00000000000000TЕŒ` a z  Ѓ Г Я ч ѓ   ) @ ŒM к у щ ё њ   " +4 ` d i v } ˆ “ !Ё У Щ б й с ј /DHM|–  ,L]c {‰"šНЯ$зќ !A \fnMuУ-й ' 1;C@W ˜ ЄЎО в н ъ+ј&$KOeGЕ§,2 :GX]cuŒЃ З/Сё '.69 BLQjo.s1Ђдн юљ5,>k]o`Э."Lor‘І"ЉЬ:г::IQ„жі%>]xŒВТ зЁф†•œ Є АК Щ е п01 : D Q [h{"Š­ГМ Ьж шє>  HYV…А6 > Hi …$ЕЮ"т ,&Si"*Ђ Э ихdь Q,rŸ И ФайFя 6 B M a u  ’ 1Є *ж !X!Hx!С!Х!Ш!т!" "" "4":"B"T"n"ˆ" "/Ї"#з" ћ" ##'# 0# ;#G# J#U# ^#h#z##.…#,Д#с#щ# џ# $C$.[$Š$qŽ$o%%p%*–%С% Ф%х%ќ%џ%&A$&Af&@Ј&G^5+_[V I1xZDyJ$7em{ *2(YbEvƒl8!‚T4f.A;…3K<~`ip]uwcWnXN6g‡&jdU?0 stzQ|Rk†\ FLOaMB€C SH/,@#)=o>}9' Pr-:q"%„h Adjust slicing settings Clear output console Closes the Window Edit open file Est: %s of %s remaining | Line# %d of %d lines | Opens file Options dialog Printing:%04.2f %% | Project slices SD printing:%04.2f %% Z: %0.2f mm# I moved all your custom buttons into .pronsolerc. # Please don't add them here any more. # Backup of your old buttons is in custombtn.old &Edit...&File&Macros&Open...&Options&Settings, %d lines<&New...>Add custom buttonAre you sure you want to reset the printer?BedBed:Button titleCancelCancelled.Check tempClear consoleCoarse Grid Spacing (default: 50)ColorCommandComposeConnectConnect to the printerConnecting...Custom buttonCustom button number should be between 0 and 63DefaultsDefines custom button. Usage: button "title" [/c "colour"] commandDimensions of Build Platform & optional offset of origin Examples: XXXxYYY XXX,YYY,ZZZ XXXxYYYxZZZ+OffX+OffY+OffZDisconnectDisconnected.Do you want to erase the macro?Done monitoring.E&xitEdit custom button '%s'Edit settingsEnter macro nameEstimated duration (pessimistic): Execute command: ExtrudeFailed to execute slicing software: File not found!File upload completeFine Grid Spacing (default: 10)Folder of last opened fileFull modeHeater:HotendIgnoring custombtn.txt. Remove all current buttons to revert to custombtn.txtInvalid period given.Last Set Temperature for the Heated Print BedLast Temperature of the Hot EndLoad FileLoad fileLoaded Loaded %s, %d linesMacro name may contain only alphanumeric symbols and underscoresMacro name:Mini modeMonitor PrinterMonitoring printer.Motors offMove left <<Move right >>Name '%s' is being used by built-in commandNo file loaded. Please use load first.Not connected to printer.Note!!! You have specified custom buttons in both custombtn.txt and .pronsolercOBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)OffOkOpen file to printOpening file failed.PausePaused.Pick SD filePick SD filenamePortPrintPrinter InterfacePrinter is not online.Printer is now online.Printer is online. ProjectorPronterface background color (default: #FFFFFF)Remove custom button '%s'ResetReset.Reset?RestartResumeReverseSDSD PrintSD UploadSaveSelect the file to printSendSetSetting bed temperature to %f degrees Celsius.Setting hotend temperature to %f degrees Celsius.Slicing Slicing SettingsSlicing...Starting printWX is not installed. This program requires WX to run.Width of Extrusion in Preview (default: 0.5)XY:You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.You must enter a temperature.You must enter a temperature. (%s)Z:click to add new custom buttonevent object missingmmmm of filament used in this print mm/minthe print goes from %f mm to %f mm in X and is %f mm wide the print goes from %f mm to %f mm in Y and is %f mm wide the print goes from %f mm to %f mm in Z and is %f mm high Project-Id-Version: Pronterface jm1 POT-Creation-Date: 2012-02-26 02:12+CET PO-Revision-Date: 2012-01-23 10:01+0100 Last-Translator: Christian Metzen Language-Team: DE Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 Slicing Einstellungen anpassen Ausgabe Konsole leeren Schliesst das Fenster Offene Datei bearbeiten Erw: %s von %s verbleibend | Zeile# %d von %d Zeilen | У–ffnet eine Datei Optionen Dialog Drucken:%04.2f %% | Projekt SlicesSD Drucken:%04.2f %% Z: %0.2f mm# Alle individuellen Buttons in .pronsolerc eingetragen. # Bitte fУМgen Sie sie hier nicht mehr ein. # Backup Ihrer alten Buttons befindet sich in custombtn.old &Bearbeiten...&Datei&Makros&У–ffnen...&Optionen&Einstellungen, %d Zeilen<&Neu...>Individuellen Button hinzufuegenMУЖchten Sie den Drucker wirklich zurУМcksetzen?HeizbettHeizbett:Button TitelAbbrechenAbgebrochen.Temperatur prУМfenKonsole leerenGrober Rasterabstand (Vorgabe: 50)FarbeKommandoZusammenstellenVerbindenDrucker VerbindenVerbinde...Individueller ButtonNummer des individuellen Button sollte zwischen 0 und 63 sein.StandardwerteDefiniert einen individuellen Button. Nutzung: button "title" [/c "colour"] commandAbmessungen der Bauplattform & optional Versatz vom Ausgangspunkt Beispiel: XXXxYYY XXX,YYY,ZZZ XXXxYYYxZZZ+OffX+OffY+OffZTrennenGetrennt.MУЖchten Sie das Makro lУЖschen?Уœberwachung abgeschlossen.&VerlassenIndividuellen Button '%s' bearbeitenEinstellungen bearbeitenMakro Name eingebenGeschУЄtze Dauer (pessimistisch): Kommando ausfУМhren:ExtrudierenFehler beim AusfУМhren der Slicing Software:Datei nicht gefunden!Datei Upload komplettFeiner Rasterabstand (Vorgabe: 10)Verzeichniss der zuletzt geУЖffneten DateiVoll-ModusHeizelement:HotendIgnoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu custombtn.txt zurУМckzukehrenUngУМltiger Abschnitt angegeben.Letzte gesetzte Temperatur fУМr das HeizbettLetzte Hotend TemperaturDatei ladenDatei ladenGeladen Geladen %s, %d ZeilenMakro Name darf nur alphanumerische Zeichen und Unterstriche enthaltenMakro Name:Mini-ModusDrucker УМberwachenУœberwache Drucker.Motoren ausLinks bewegen <<Rechts bewegen >>Name '%s' wird durch eingebautes Kommando genutztKeine Datei geladen. Benutze zuerst laden.Keine Verbindung zum Drucker.Achtung! Sie haben benutzerdefinierte Buttons in custombtn.txt und .pronsolerc angegebenOBJ,STL und GCODE Dateien (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)AusOkУ–ffne zu druckende DateiDatei УЖffnen fehlgeschlagen.PausePausiert.WУЄhle SD DateiWУЄhle SD DateinamePort:DruckenPrinter InterfaceDrucker ist nicht online.Drucker ist jetzt Online.Drucker ist online. ProjektorPronterface Hintergrundfarbe (Vorgabe: #FFFFFF)Individuellen Button '%s' entfernenZurУМcksetzenZurУМcksetzen.ZurУМcksetzen?NeustartFortsetzenRУМckwУЄrtsSDSD DruckenSD LadenSpeichernWУЄhle DruckdateiSendenEinSetze Heizbett Temperatur auf %f Grad Celsius.Setze Hotend Temperatur auf %f Grad Celsius.SlicingSlicing EinstellungenSlicing...Starte DruckWX ist nicht installiert. Dieses Programm erfordert WX zum Starten.Vorschaubreite der Extrudierung (Vorgabe: 0.5)XY:Sie kУЖnnen keine negativen Temperaturen einstellen. Um das Heizbett ganz auszuschalten, Temperatur auf 0 setzen.Sie kУЖnnen keine negativen Temperaturen einstellen. Um das Hotend ganz auszuschalten, Temperatur auf 0 setzen.Sie mУМssen eine Temperatur eingeben.Sie mУМssen eine Temperatur eingeben. (%s)Z:Individuellen Button hinzufУМgenEreigniss Objekt fehltmmmm Filament in Druck genutzt mm/minDer Druck verlУЄuft von %f mm bis %f mm in X und ist %f mm breit Der Druck verlУЄuft von %f mm bis %f mm in Y und ist %f mm breit Der Druck verlУЄuft von %f mm bis %f mm in Z und ist %f mm hoch Printrun-printrun-2.0.0rc5/locale/de/LC_MESSAGES/pronterface.po000066400000000000000000001404421325617007000241150ustar00rootroot00000000000000# Pronterface # Copyright (C) 2011 Jonathan Marsden # Jonathan Marsden , 2011. # msgid "" msgstr "" "Project-Id-Version: Pronterface jm1\n" "POT-Creation-Date: 2014-03-30 14:35+CEST\n" "PO-Revision-Date: 2012-01-23 10:01+0100\n" "Last-Translator: Christian Metzen \n" "Language-Team: DE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: printrun/excluder.py:26 msgid "" "Part excluder: draw rectangles where print instructions should be ignored" msgstr "" #: printrun/excluder.py:27 printrun/excluder.py:29 msgid "Reset selection" msgstr "" #: printrun/gcodeplater.py:43 printrun/gcodeplater.py:44 msgid "GCODE files (*.gcode;*.GCODE;*.g)" msgstr "" #: printrun/gcodeplater.py:112 printrun/gcodeplater.py:152 msgid "Warning: no rotation support for now, object won't be correctly rotated" msgstr "" #: printrun/gcodeplater.py:141 printrun/gcodeplater.py:178 msgid "Exported merged G-Codes to %s" msgstr "" #: printrun/gcview.py:352 msgid "Fit to plate" msgstr "" #: printrun/gcview.py:353 msgid "Fit to plate [F]" msgstr "" #: printrun/gui/__init__.py:19 printrun/pronterface.py:45 msgid "WX is not installed. This program requires WX to run." msgstr "WX ist nicht installiert. Dieses Programm erfordert WX zum Starten." #: printrun/gui/__init__.py:159 #, fuzzy msgid "Commands" msgstr "Kommando" #: printrun/gui/__init__.py:160 msgid "Status" msgstr "" #: printrun/gui/controls.py:126 #, fuzzy msgid "Heat:" msgstr "Heizelement:" #: printrun/gui/controls.py:129 msgid "Switch Hotend Off" msgstr "" #: printrun/gui/controls.py:129 printrun/gui/controls.py:149 #: printrun/gui/toolbar.py:85 msgid "Off" msgstr "Aus" #: printrun/gui/controls.py:137 #, fuzzy msgid "Select Temperature for Hotend" msgstr "Letzte Hotend Temperatur" #: printrun/gui/controls.py:141 msgid "Switch Hotend On" msgstr "" #: printrun/gui/controls.py:141 printrun/gui/controls.py:161 #: printrun/gui/controls.py:198 msgid "Set" msgstr "Ein" #: printrun/gui/controls.py:146 printrun/gui/controls.py:215 msgid "Bed:" msgstr "Heizbett:" #: printrun/gui/controls.py:149 msgid "Switch Heated Bed Off" msgstr "" #: printrun/gui/controls.py:157 #, fuzzy msgid "Select Temperature for Heated Bed" msgstr "Letzte gesetzte Temperatur fУМr das Heizbett" #: printrun/gui/controls.py:161 msgid "Switch Heated Bed On" msgstr "" #: printrun/gui/controls.py:187 msgid "Print speed:" msgstr "" #: printrun/gui/controls.py:192 printrun/gui/controls.py:207 msgid "%d%%" msgstr "" #: printrun/gui/controls.py:198 msgid "Set print speed factor" msgstr "" #: printrun/gui/controls.py:213 msgid "Heater:" msgstr "Heizelement:" #: printrun/gui/controls.py:265 msgid "Length:" msgstr "" #: printrun/gui/controls.py:267 msgid "mm" msgstr "mm" #: printrun/gui/controls.py:267 msgid "mm @" msgstr "" #: printrun/gui/controls.py:269 msgid "Amount to Extrude or Retract (mm)" msgstr "" #: printrun/gui/controls.py:272 msgid "Extrude / Retract speed (mm/min)" msgstr "" #: printrun/gui/controls.py:278 msgid "Speed:" msgstr "" #: printrun/gui/controls.py:279 msgid "" "mm/\n" "min" msgstr "" #: printrun/gui/controls.py:290 msgid "Tool:" msgstr "" #: printrun/gui/controls.py:293 msgid "Click to switch current extruder" msgstr "" #: printrun/gui/controls.py:310 msgid "Select current extruder" msgstr "" #: printrun/gui/controls.py:371 msgid "Set Maximum Speed for X & Y axes (mm/min)" msgstr "" #: printrun/gui/controls.py:372 msgid "XY:" msgstr "XY:" #: printrun/gui/controls.py:374 #, fuzzy msgid "mm/min Z:" msgstr "mm/min" #: printrun/gui/controls.py:376 msgid "Set Maximum Speed for Z axis (mm/min)" msgstr "" #: printrun/gui/graph.py:28 msgid "Temperature graph" msgstr "" #: printrun/gui/log.py:32 msgid "" "Send commands to printer\n" "(Type 'help' for simple\n" "help function)" msgstr "" #: printrun/gui/log.py:39 msgid "Send" msgstr "Senden" #: printrun/gui/log.py:39 #, fuzzy msgid "Send Command to Printer" msgstr "Drucker УМberwachen" #: printrun/gui/toolbar.py:23 msgid "Lock" msgstr "" #: printrun/gui/toolbar.py:25 msgid "Lock graphical interface" msgstr "" #: printrun/gui/toolbar.py:32 msgid "" "Communication Settings\n" "Click to rescan ports" msgstr "" #: printrun/gui/toolbar.py:32 msgid "Port" msgstr "Port:" #: printrun/gui/toolbar.py:37 msgid "Select Port Printer is connected to" msgstr "" #: printrun/gui/toolbar.py:46 msgid "Select Baud rate for printer communication" msgstr "" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1052 msgid "Connect" msgstr "Verbinden" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1053 msgid "Connect to the printer" msgstr "Drucker Verbinden" #: printrun/gui/toolbar.py:61 msgid "Reset" msgstr "ZurУМcksetzen" #: printrun/gui/toolbar.py:61 #, fuzzy msgid "Reset the printer" msgstr "Drucker Verbinden" #: printrun/gui/toolbar.py:69 #, fuzzy msgid "Load a 3D model file" msgstr "Datei laden" #: printrun/gui/toolbar.py:69 msgid "Load file" msgstr "Datei laden" #: printrun/gui/toolbar.py:70 msgid "SD" msgstr "SD" #: printrun/gui/toolbar.py:70 #, fuzzy msgid "SD Card Printing" msgstr "SD Drucken" #: printrun/gui/toolbar.py:74 msgid "Start Printing Loaded File" msgstr "" #: printrun/gui/toolbar.py:74 printrun/pronterface.py:1003 #: printrun/pronterface.py:1062 printrun/pronterface.py:1078 #: printrun/pronterface.py:1363 printrun/pronterface.py:1445 msgid "Print" msgstr "Drucken" #: printrun/gui/toolbar.py:80 msgid "Pause Current Print" msgstr "" #: printrun/gui/toolbar.py:80 printrun/pronterface.py:1002 #: printrun/pronterface.py:1061 printrun/pronterface.py:1081 #: printrun/pronterface.py:1091 printrun/pronterface.py:1172 #: printrun/pronterface.py:1364 msgid "Pause" msgstr "Pause" #: printrun/gui/toolbar.py:85 msgid "Turn printer off" msgstr "" #: printrun/gui/viz.py:65 msgid "" "Click to examine / edit\n" " layers of loaded file" msgstr "" #: printrun/gui/widgets.py:36 msgid "Find" msgstr "" #: printrun/gui/widgets.py:38 msgid "Save" msgstr "Speichern" #: printrun/gui/widgets.py:43 printrun/objectplater.py:76 #: printrun/pronterface.py:1257 printrun/pronterface.py:2017 msgid "Cancel" msgstr "Abbrechen" #: printrun/gui/widgets.py:70 #, fuzzy msgid "Not Found!" msgstr "Datei nicht gefunden!" #: printrun/gui/widgets.py:124 #, fuzzy msgid "Printer settings" msgstr "Einstellungen bearbeiten" #: printrun/gui/widgets.py:125 #, fuzzy msgid "User interface" msgstr "Printer Interface" #: printrun/gui/widgets.py:126 #, fuzzy msgid "Colors" msgstr "Farbe" #: printrun/gui/widgets.py:127 #, fuzzy msgid "External commands" msgstr "Kommando ausfУМhren:" #: printrun/gui/widgets.py:132 msgid "Edit settings" msgstr "Einstellungen bearbeiten" #: printrun/gui/widgets.py:135 #, fuzzy msgid "Settings" msgstr "&Einstellungen" #: printrun/gui/widgets.py:187 msgid "Custom button" msgstr "Individueller Button" #: printrun/gui/widgets.py:193 msgid "Button title" msgstr "Button Titel" #: printrun/gui/widgets.py:196 msgid "Command" msgstr "Kommando" #: printrun/gui/widgets.py:205 msgid "Color" msgstr "Farbe" #: printrun/gviz.py:29 msgid "Layer number and Z position show here when you scroll" msgstr "" #: printrun/gviz.py:39 msgid "Zoom In [+]" msgstr "" #: printrun/gviz.py:40 msgid "Zoom Out [-]" msgstr "" #: printrun/gviz.py:42 msgid "Move Up a Layer [U]" msgstr "" #: printrun/gviz.py:43 msgid "Move Down a Layer [D]" msgstr "" #: printrun/gviz.py:44 #, fuzzy msgid "Reset view" msgstr "ZurУМcksetzen" #: printrun/gviz.py:68 msgid "Gcode view, shift to move view, mousewheel to set layer" msgstr "" #: printrun/gviz.py:105 printrun/gviz.py:241 msgid "Layer %d - Going Up - Z = %.03f mm" msgstr "" #: printrun/gviz.py:250 msgid "Layer %d - Going Down - Z = %.03f mm" msgstr "" #: printrun/objectplater.py:35 msgid "Plate building tool" msgstr "" #: printrun/objectplater.py:45 msgid "Clear" msgstr "" #: printrun/objectplater.py:49 #, fuzzy msgid "Load" msgstr "Geladen " #: printrun/objectplater.py:53 msgid "Snap to Z = 0" msgstr "" #: printrun/objectplater.py:57 msgid "Put at center" msgstr "" #: printrun/objectplater.py:61 msgid "Delete" msgstr "" #: printrun/objectplater.py:65 msgid "Auto arrange" msgstr "" #: printrun/objectplater.py:69 msgid "Export" msgstr "" #: printrun/objectplater.py:73 msgid "Done" msgstr "" #: printrun/objectplater.py:151 msgid "Autoplating" msgstr "" #: printrun/objectplater.py:199 msgid "Bed full, sorry sir :(" msgstr "" #: printrun/objectplater.py:209 msgid "" "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" #: printrun/objectplater.py:210 #, fuzzy msgid "Clear the grid?" msgstr " Schliesst das Fenster" #: printrun/objectplater.py:256 #, fuzzy msgid "Pick file to load" msgstr "WУЄhle SD Datei" #: printrun/objectplater.py:267 #, fuzzy msgid "Pick file to save to" msgstr "WУЄhle SD Dateiname" #: printrun/plater.py:212 msgid "STL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad" msgstr "" #: printrun/plater.py:213 msgid "STL files (*.stl;*.STL)|*.stl;*.STL" msgstr "" #: printrun/plater.py:244 #, fuzzy msgid "Loading STL file failed" msgstr "Datei УЖffnen fehlgeschlagen." #: printrun/plater.py:244 printrun/plater.py:251 msgid "Error" msgstr "" #: printrun/plater.py:251 #, fuzzy msgid "Loading OpenSCAD file failed" msgstr "Datei УЖffnen fehlgeschlagen." #: printrun/plater.py:284 msgid "Couldn't load non-existing file %s" msgstr "" #: printrun/plater.py:360 msgid "Wrote plate to %s" msgstr "" #: printrun/plater.py:367 msgid "" "Failed to use simarrange for plating, falling back to the standard method" msgstr "" #: printrun/plater.py:372 msgid "Autoplating using simarrange" msgstr "" #: printrun/plater.py:387 msgid "Plate full, please remove some objects" msgstr "" #: printrun/plater.py:404 msgid "simarrange failed" msgstr "" #: printrun/printcore.py:177 msgid "Could not connect to %s:%s:" msgstr "" #: printrun/printcore.py:178 msgid "Socket error %s:" msgstr "" #: printrun/printcore.py:191 printrun/printcore.py:196 msgid "Could not connect to %s at baudrate %s:" msgstr "" #: printrun/printcore.py:192 msgid "Serial error: %s" msgstr "" #: printrun/printcore.py:197 msgid "IO error: %s" msgstr "" #: printrun/printcore.py:231 msgid "Can't read from printer (disconnected?) (SelectError {0}): {1}" msgstr "" #: printrun/printcore.py:234 msgid "SelectError ({0}): {1}" msgstr "" #: printrun/printcore.py:237 msgid "Can't read from printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:240 msgid "Can't read from printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:245 msgid "Can't read from printer (disconnected?) (OS Error {0}): {1}" msgstr "" #: printrun/printcore.py:259 msgid "Aborting connection attempt after 4 failed writes." msgstr "" #: printrun/printcore.py:462 printrun/printcore.py:470 #: printrun/pronsole.py:1192 printrun/pronsole.py:1250 #: printrun/pronterface.py:209 printrun/pronterface.py:962 #: printrun/pronterface.py:1111 printrun/pronterface.py:1178 msgid "Not connected to printer." msgstr "Keine Verbindung zum Drucker." #: printrun/printcore.py:479 msgid "Print start callback failed with:" msgstr "" #: printrun/printcore.py:490 msgid "Print end callback failed with:" msgstr "" #: printrun/printcore.py:493 msgid "Print thread died due to the following error:" msgstr "" #: printrun/printcore.py:584 msgid "Could not analyze command %s:" msgstr "" #: printrun/printcore.py:601 msgid "Can't write to printer (disconnected ?):" msgstr "" #: printrun/printcore.py:604 msgid "Can't write to printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:607 msgid "Can't write to printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:610 msgid "Socket connection broken, disconnected. ({0}): {1}" msgstr "" #: printrun/pronsole.py:72 #, fuzzy msgid "Default: " msgstr "Standardwerte" #: printrun/pronsole.py:73 msgid "(Control-doubleclick to reset to default value)" msgstr "" #: printrun/pronsole.py:108 #, fuzzy msgid "" "Are you sure you want to reset the setting to the default value: {0!r} ?" msgstr "MУЖchten Sie den Drucker wirklich zurУМcksetzen?" #: printrun/pronsole.py:108 msgid "Confirm set default" msgstr "" #: printrun/pronsole.py:258 msgid "Width" msgstr "" #: printrun/pronsole.py:261 msgid "Depth" msgstr "" #: printrun/pronsole.py:264 msgid "Height" msgstr "" #: printrun/pronsole.py:267 msgid "X offset" msgstr "" #: printrun/pronsole.py:270 msgid "Y offset" msgstr "" #: printrun/pronsole.py:273 msgid "Z offset" msgstr "" #: printrun/pronsole.py:276 msgid "X home pos." msgstr "" #: printrun/pronsole.py:279 msgid "Y home pos." msgstr "" #: printrun/pronsole.py:282 msgid "Z home pos." msgstr "" #: printrun/pronsole.py:301 msgid "Port used to communicate with printer" msgstr "Port fУМr Druckerkommunikation" #: printrun/pronsole.py:301 msgid "Serial port" msgstr "" #: printrun/pronsole.py:302 msgid "Baud rate" msgstr "" #: printrun/pronsole.py:302 #, fuzzy msgid "Communications Speed" msgstr "Kommunikationsgeschwindigkeit (Vorgabe: 115200)" #: printrun/pronsole.py:303 msgid "TCP streaming mode" msgstr "" #: printrun/pronsole.py:303 msgid "" "When using a TCP connection to the printer, the streaming mode will not wait " "for acks from the printer to send new commands. This will break things such " "as ETA prediction, but can result in smoother prints." msgstr "" #: printrun/pronsole.py:304 msgid "Bed temperature for ABS" msgstr "" #: printrun/pronsole.py:304 #, fuzzy msgid "Heated Build Platform temp for ABS (deg C)" msgstr "Heizbett Temp. fУМr ABS (Vorgabe: 110 Grad Celsius)" #: printrun/pronsole.py:305 msgid "Bed temperature for PLA" msgstr "" #: printrun/pronsole.py:305 #, fuzzy msgid "Heated Build Platform temp for PLA (deg C)" msgstr "Heizbett Temp. fУМr PLA (Vorgabe: 60 Grad Celsius)" #: printrun/pronsole.py:306 #, fuzzy msgid "Extruder temp for ABS (deg C)" msgstr "Extruder Temperatur fУМr ABS (Vorgabe: 230 Grad Celsius)" #: printrun/pronsole.py:306 #, fuzzy msgid "Extruder temperature for ABS" msgstr "Extruder Temperatur fУМr ABS (Vorgabe: 230 Grad Celsius)" #: printrun/pronsole.py:307 #, fuzzy msgid "Extruder temp for PLA (deg C)" msgstr "Extruder Temperatur fУМr PLA (Vorgabe: 185 Grad Celsius)" #: printrun/pronsole.py:307 #, fuzzy msgid "Extruder temperature for PLA" msgstr "Extruder Temperatur fУМr PLA (Vorgabe: 185 Grad Celsius)" #: printrun/pronsole.py:308 #, fuzzy msgid "Feedrate for Control Panel Moves in X and Y (mm/min)" msgstr "Vorschub Control Panel Bewegungen X und Y (Vorgabe: 3000mm/min)" #: printrun/pronsole.py:308 msgid "X && Y manual feedrate" msgstr "" #: printrun/pronsole.py:309 #, fuzzy msgid "Feedrate for Control Panel Moves in Z (mm/min)" msgstr "Vorschub Control Panel Bewegungen Z (Vorgabe: 200mm/min)" #: printrun/pronsole.py:309 msgid "Z manual feedrate" msgstr "" #: printrun/pronsole.py:310 msgid "E manual feedrate" msgstr "" #: printrun/pronsole.py:310 #, fuzzy msgid "Feedrate for Control Panel Moves in Extrusions (mm/min)" msgstr "Vorschub Control Panel Bewegungen Extrudierung (Vorgabe: 300mm/min)" #: printrun/pronsole.py:311 #, fuzzy msgid "Slice command" msgstr "Kommando ausfУМhren:" #: printrun/pronsole.py:312 #, fuzzy msgid "Slice settings command" msgstr "Slicing Einstellungen" #: printrun/pronsole.py:312 msgid "Slicer options command" msgstr "" #: printrun/pronsole.py:313 msgid "Executable to run when the print is finished" msgstr "" #: printrun/pronsole.py:313 #, fuzzy msgid "Final command" msgstr "Kommando" #: printrun/pronsole.py:314 #, fuzzy msgid "Error command" msgstr "Kommando ausfУМhren:" #: printrun/pronsole.py:314 msgid "Executable to run when an error occurs" msgstr "" #: printrun/pronsole.py:381 msgid "Failed to run callback after setting \"%s\":" msgstr "" #: printrun/pronsole.py:469 msgid "Build dimensions" msgstr "" #: printrun/pronsole.py:469 #, fuzzy msgid "" "Dimensions of Build Platform\n" " & optional offset of origin\n" " & optional switch position\n" "\n" "Examples:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+OffX+OffY+OffZ\n" "XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ" msgstr "" "Abmessungen der Bauplattform\n" " & optional Versatz vom Ausgangspunkt\n" "\n" "Beispiel:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+OffX+OffY+OffZ" #: printrun/pronsole.py:495 msgid "" "Welcome to the printer console! Type \"help\" for a list of available " "commands." msgstr "" #: printrun/pronsole.py:657 printrun/pronsole.py:665 printrun/pronsole.py:673 #: printrun/pronsole.py:1519 printrun/pronsole.py:1546 #: printrun/pronsole.py:1618 printrun/pronterface.py:357 #: printrun/pronterface.py:377 printrun/pronterface.py:394 msgid "Printer is not online." msgstr "Drucker ist nicht online." #: printrun/pronsole.py:692 msgid "Exiting program. Goodbye!" msgstr "" #: printrun/pronsole.py:697 msgid "Disconnects from the printer and exits the program." msgstr "" #: printrun/pronsole.py:974 msgid "" "load this file on startup instead of .pronsolerc ; you may chain config " "files, if so settings auto-save will use the last specified file" msgstr "" #: printrun/pronsole.py:975 msgid "" "executes command after configuration/.pronsolerc is loaded ; macros/settings " "from these commands are not autosaved" msgstr "" #: printrun/pronsole.py:976 msgid "file to load" msgstr "" #: printrun/pronsole.py:1104 #, fuzzy msgid "Loaded %s, %d lines." msgstr "Geladen %s, %d Zeilen" #: printrun/pronsole.py:1105 printrun/pronterface.py:1381 #, fuzzy msgid "Estimated duration: %d layers, %s" msgstr "GeschУЄtze Dauer (pessimistisch): " #: printrun/pronsole.py:1134 msgid "No file name given." msgstr "" #: printrun/pronsole.py:1140 msgid "Skeining file: %s" msgstr "" #: printrun/pronsole.py:1142 printrun/pronterface.py:1305 msgid "File not found!" msgstr "Datei nicht gefunden!" #: printrun/pronsole.py:1147 msgid "Entering slicer settings: %s" msgstr "" #: printrun/pronsole.py:1151 #, fuzzy msgid "Slicing: " msgstr "Slicing" #: printrun/pronsole.py:1158 #, fuzzy msgid "Loading sliced file." msgstr "Datei laden" #: printrun/pronsole.py:1161 #, fuzzy msgid "Slicing failed: %s" msgstr "Slicing" #: printrun/pronsole.py:1174 msgid "" "Creates a gcode file from an stl model using the slicer (with tab-completion)" msgstr "" #: printrun/pronsole.py:1175 msgid "slice filename.stl - create gcode file" msgstr "" #: printrun/pronsole.py:1176 msgid "" "slice filename.stl view - create gcode file and view using skeiniso (if " "using skeinforge)" msgstr "" #: printrun/pronsole.py:1177 #, fuzzy msgid "slice set - adjust slicer settings" msgstr " Slicing Einstellungen anpassen" #: printrun/pronsole.py:1189 msgid "Please enter target name in 8.3 format." msgstr "" #: printrun/pronsole.py:1195 msgid "Uploading as %s" msgstr "" #: printrun/pronsole.py:1196 msgid "Uploading %s" msgstr "" #: printrun/pronsole.py:1198 msgid "Press Ctrl-C to interrupt upload." msgstr "" #: printrun/pronsole.py:1201 msgid "Progress: " msgstr "" #: printrun/pronsole.py:1212 msgid "Upload completed. %s should now be on the card." msgstr "" #: printrun/pronsole.py:1216 msgid "...interrupted!" msgstr "" #: printrun/pronsole.py:1218 msgid "Something wrong happened while uploading:" msgstr "" #: printrun/pronsole.py:1224 msgid "A partial file named %s may have been written to the sd card." msgstr "" #: printrun/pronsole.py:1241 msgid "" "Send a loaded gcode file to the printer. Load a file with the load command " "first." msgstr "" #: printrun/pronsole.py:1243 msgid "Send a loaded gcode file to the printer. You have %s loaded right now." msgstr "" #: printrun/pronsole.py:1247 printrun/pronterface.py:730 #: printrun/pronterface.py:1108 msgid "No file loaded. Please use load first." msgstr "Keine Datei geladen. Benutze zuerst laden." #: printrun/pronsole.py:1252 #, fuzzy msgid "Printing %s" msgstr " Drucken:%04.2f %% |" #: printrun/pronsole.py:1253 msgid "You can monitor the print with the monitor command." msgstr "" #: printrun/pronsole.py:1261 msgid "Not printing, cannot pause." msgstr "" #: printrun/pronsole.py:1267 #, fuzzy msgid "Pauses a running print" msgstr "Starte Druck" #: printrun/pronsole.py:1274 msgid "Not paused, unable to resume. Start a print first." msgstr "" #: printrun/pronsole.py:1284 msgid "Resumes a paused print." msgstr "" #: printrun/pronsole.py:1293 msgid "Files on SD card:" msgstr "" #: printrun/pronsole.py:1307 printrun/pronsole.py:1349 #: printrun/pronsole.py:1562 #, fuzzy msgid "Printer is not online. Please connect to it first." msgstr "Drucker ist nicht online." #: printrun/pronsole.py:1312 msgid "Lists files on the SD card" msgstr "" #: printrun/pronsole.py:1316 printrun/pronterface.py:1645 msgid "Opening file failed." msgstr "Datei УЖffnen fehlgeschlagen." #: printrun/pronsole.py:1322 printrun/pronterface.py:1651 msgid "Starting print" msgstr "Starte Druck" #: printrun/pronsole.py:1345 #, fuzzy msgid "Resets the printer." msgstr "Drucker Verbinden" #: printrun/pronsole.py:1355 #, fuzzy msgid "File is not present on card. Please upload it first." msgstr "Keine Datei geladen. Benutze zuerst laden." #: printrun/pronsole.py:1359 msgid "Printing file: %s from SD card." msgstr "" #: printrun/pronsole.py:1360 msgid "Requesting SD print..." msgstr "" #: printrun/pronsole.py:1364 msgid "Print a file from the SD card. Tab completes with available file names." msgstr "" #: printrun/pronsole.py:1365 msgid "sdprint filename.g" msgstr "" #: printrun/pronsole.py:1382 msgid "Print resumed at: %s" msgstr "" #: printrun/pronsole.py:1384 msgid "Print started at: %s" msgstr "" #: printrun/pronsole.py:1392 msgid "Failed to inhibit sleep:" msgstr "" #: printrun/pronsole.py:1399 msgid "Failed to uninhibit sleep:" msgstr "" #: printrun/pronsole.py:1403 msgid "Print ended at: %(end_time)s and took %(duration)s" msgstr "" #: printrun/pronsole.py:1457 msgid "Printer is not currently printing. No ETA available." msgstr "" #: printrun/pronsole.py:1460 #, fuzzy msgid "Est: %s of %s remaining" msgstr " Erw: %s von %s verbleibend | " #: printrun/pronsole.py:1465 msgid "Displays estimated remaining print time." msgstr "" #: printrun/pronsole.py:1498 #, fuzzy msgid "Read the extruder and bed temperature." msgstr "Sie mУМssen eine Temperatur eingeben." #: printrun/pronsole.py:1507 printrun/pronsole.py:1540 msgid "You must enter a temperature." msgstr "Sie mУМssen eine Temperatur eingeben." #: printrun/pronsole.py:1512 msgid "" "%s is a high temperature to set your extruder to. Are you sure you want to " "do that?" msgstr "" #: printrun/pronsole.py:1517 #, fuzzy msgid "Setting hotend temperature to %s degrees Celsius." msgstr "Setze Hotend Temperatur auf %f Grad Celsius." #: printrun/pronsole.py:1521 printrun/pronterface.py:359 msgid "" "You cannot set negative temperatures. To turn the hotend off entirely, set " "its temperature to 0." msgstr "" "Sie kУЖnnen keine negativen Temperaturen einstellen. Um das Hotend ganz " "auszuschalten, Temperatur auf 0 setzen." #: printrun/pronsole.py:1524 #, fuzzy msgid "Sets the hotend temperature to the value entered." msgstr "Setze Hotend Temperatur auf %f Grad Celsius." #: printrun/pronsole.py:1525 printrun/pronsole.py:1552 msgid "Enter either a temperature in celsius or one of the following keywords" msgstr "" #: printrun/pronsole.py:1544 #, fuzzy msgid "Setting bed temperature to %s degrees Celsius." msgstr "Setze Heizbett Temperatur auf %f Grad Celsius." #: printrun/pronsole.py:1548 printrun/pronterface.py:379 msgid "" "You cannot set negative temperatures. To turn the bed off entirely, set its " "temperature to 0." msgstr "" "Sie kУЖnnen keine negativen Temperaturen einstellen. Um das Heizbett ganz " "auszuschalten, Temperatur auf 0 setzen." #: printrun/pronsole.py:1551 #, fuzzy msgid "Sets the bed temperature to the value entered." msgstr "Setze Heizbett Temperatur auf %f Grad Celsius." #: printrun/pronsole.py:1565 msgid "Printer is not printing. Please print something before monitoring." msgstr "" #: printrun/pronsole.py:1567 #, fuzzy msgid "Monitoring printer, use ^C to interrupt." msgstr "Уœberwache Drucker." #: printrun/pronsole.py:1572 printrun/pronterface.py:329 msgid "Invalid period given." msgstr "UngУМltiger Abschnitt angegeben." #: printrun/pronsole.py:1573 msgid "Updating values every %f seconds." msgstr "" #: printrun/pronsole.py:1584 printrun/pronsole.py:1587 msgid "Print progress: " msgstr "" #: printrun/pronsole.py:1595 printrun/pronterface.py:333 msgid "Done monitoring." msgstr "Уœberwachung abgeschlossen." #: printrun/pronsole.py:1599 msgid "Monitor a machine's temperatures and an SD print's status." msgstr "" #: printrun/pronsole.py:1600 msgid "" "monitor - Reports temperature and SD print status (if SD printing) every 5 " "seconds" msgstr "" #: printrun/pronsole.py:1601 msgid "" "monitor 2 - Reports temperature and SD print status (if SD printing) every 2 " "seconds" msgstr "" #: printrun/pronsole.py:1612 msgid "You must specify the tool index as an integer." msgstr "" #: printrun/pronsole.py:1616 msgid "Using tool %d." msgstr "" #: printrun/pronsole.py:1620 msgid "You cannot set negative tool numbers." msgstr "" #: printrun/pronsole.py:1623 msgid "" "Switches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code)." msgstr "" #: printrun/pronsole.py:1627 msgid "No move specified." msgstr "" #: printrun/pronsole.py:1630 printrun/pronsole.py:1692 #: printrun/pronsole.py:1735 printrun/pronsole.py:1762 msgid "" "Printer is currently printing. Please pause the print before you issue " "manual commands." msgstr "" #: printrun/pronsole.py:1633 printrun/pronsole.py:1759 #, fuzzy msgid "Printer is not online. Unable to move." msgstr "Drucker ist nicht online." #: printrun/pronsole.py:1649 msgid "Unknown axis." msgstr "" #: printrun/pronsole.py:1654 msgid "Invalid distance" msgstr "" #: printrun/pronsole.py:1665 msgid "Move an axis. Specify the name of the axis and the amount. " msgstr "" #: printrun/pronsole.py:1666 msgid "" "move X 10 will move the X axis forward by 10mm at %s mm/min (default XY " "speed)" msgstr "" #: printrun/pronsole.py:1667 msgid "move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/min" msgstr "" #: printrun/pronsole.py:1668 msgid "" "move Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)" msgstr "" #: printrun/pronsole.py:1669 msgid "Common amounts are in the tabcomplete list." msgstr "" #: printrun/pronsole.py:1699 printrun/pronsole.py:1742 #, fuzzy msgid "Invalid length given." msgstr "UngУМltiger Abschnitt angegeben." #: printrun/pronsole.py:1704 printrun/pronsole.py:1747 #, fuzzy msgid "Invalid speed given." msgstr "UngУМltiger Abschnitt angegeben." #: printrun/pronsole.py:1712 msgid "Extruding %fmm of filament." msgstr "" #: printrun/pronsole.py:1714 msgid "Reversing %fmm of filament." msgstr "" #: printrun/pronsole.py:1716 msgid "Length is 0, not doing anything." msgstr "" #: printrun/pronsole.py:1722 msgid "" "Extrudes a length of filament, 5mm by default, or the number of mm given as " "a parameter" msgstr "" #: printrun/pronsole.py:1723 msgid "extrude - extrudes 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1724 msgid "extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1725 msgid "extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1726 msgid "extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1732 #, fuzzy msgid "Printer is not online. Unable to reverse." msgstr "Drucker ist nicht online." #: printrun/pronsole.py:1751 msgid "" "Reverses the extruder, 5mm by default, or the number of mm given as a " "parameter" msgstr "" #: printrun/pronsole.py:1752 msgid "reverse - reverses 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1753 msgid "reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1754 msgid "reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1755 msgid "reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1777 #, fuzzy msgid "Homes the printer" msgstr "Drucker Verbinden" #: printrun/pronsole.py:1778 msgid "home - homes all axes and zeroes the extruder(Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1779 msgid "home xy - homes x and y axes (Using G28)" msgstr "" #: printrun/pronsole.py:1780 msgid "home z - homes z axis only (Using G28)" msgstr "" #: printrun/pronsole.py:1781 msgid "home e - set extruder position to zero (Using G92)" msgstr "" #: printrun/pronsole.py:1782 msgid "home xyze - homes all axes and zeroes the extruder (Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1790 #, fuzzy msgid "; Motors off" msgstr "Motoren aus" #: printrun/pronsole.py:1792 #, fuzzy msgid "; Extruder off" msgstr "Extrudieren" #: printrun/pronsole.py:1794 msgid "; Heatbed off" msgstr "" #: printrun/pronsole.py:1796 msgid "; Fan off" msgstr "" #: printrun/pronsole.py:1798 msgid "; Power supply off" msgstr "" #: printrun/pronsole.py:1801 #, fuzzy msgid "Printer is not online. Unable to turn it off." msgstr "Drucker ist nicht online." #: printrun/pronsole.py:1804 msgid "Turns off everything on the printer" msgstr "" #: printrun/pronsole.py:1815 msgid "G-Code calling host command \"%s\"" msgstr "" #: printrun/pronsole.py:1824 msgid "" "Runs a custom script. Current gcode filename can be given using %s token." msgstr "" #: printrun/pronsole.py:1832 msgid "" "Runs a custom script which output gcode which will in turn be executed. " "Current gcode filename can be given using %s token." msgstr "" #: printrun/pronterface.py:149 msgid "Motors off" msgstr "Motoren aus" #: printrun/pronterface.py:149 msgid "Switch all motors off" msgstr "" #: printrun/pronterface.py:150 msgid "Advance extruder by set length" msgstr "" #: printrun/pronterface.py:150 msgid "Extrude" msgstr "Extrudieren" #: printrun/pronterface.py:151 msgid "Reverse" msgstr "RУМckwУЄrts" #: printrun/pronterface.py:151 msgid "Reverse extruder by set length" msgstr "" #: printrun/pronterface.py:165 #, fuzzy msgid "Pronterface" msgstr "Printer Interface" #: printrun/pronterface.py:192 msgid "" "# I moved all your custom buttons into .pronsolerc.\n" "# Please don't add them here any more.\n" "# Backup of your old buttons is in custombtn.old\n" msgstr "" "# Alle individuellen Buttons in .pronsolerc eingetragen.\n" "# Bitte fУМgen Sie sie hier nicht mehr ein.\n" "# Backup Ihrer alten Buttons befindet sich in custombtn.old\n" #: printrun/pronterface.py:197 msgid "" "Note!!! You have specified custom buttons in both custombtn.txt and ." "pronsolerc" msgstr "" "Achtung! Sie haben benutzerdefinierte Buttons in custombtn.txt und ." "pronsolerc angegeben" #: printrun/pronterface.py:198 msgid "" "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgstr "" "Ignoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu " "custombtn.txt zurУМckzukehren" #: printrun/pronterface.py:331 msgid "Monitoring printer." msgstr "Уœberwache Drucker." #: printrun/pronterface.py:354 msgid "Setting hotend temperature to %f degrees Celsius." msgstr "Setze Hotend Temperatur auf %f Grad Celsius." #: printrun/pronterface.py:361 printrun/pronterface.py:381 msgid "You must enter a temperature. (%s)" msgstr "Sie mУМssen eine Temperatur eingeben. (%s)" #: printrun/pronterface.py:374 msgid "Setting bed temperature to %f degrees Celsius." msgstr "Setze Heizbett Temperatur auf %f Grad Celsius." #: printrun/pronterface.py:392 msgid "Setting print speed factor to %d%%." msgstr "" #: printrun/pronterface.py:396 #, fuzzy msgid "You must enter a speed. (%s)" msgstr "Sie mУМssen eine Temperatur eingeben. (%s)" #: printrun/pronterface.py:470 msgid "Plate function activated" msgstr "" #: printrun/pronterface.py:479 msgid "G-Code plate function activated" msgstr "" #: printrun/pronterface.py:486 msgid "Plated %s" msgstr "" #: printrun/pronterface.py:500 msgid "SD Upload" msgstr "SD Laden" #: printrun/pronterface.py:504 msgid "SD Print" msgstr "SD Drucken" #: printrun/pronterface.py:565 msgid "" "Manual move outside of the build volume prevented (see the \"Clamp manual " "moves\" option)." msgstr "" #: printrun/pronterface.py:621 msgid "" "Attempted to write invalid text to console, which could be due to an invalid " "baudrate" msgstr "" #: printrun/pronterface.py:655 msgid " Opens file" msgstr " У–ffnet eine Datei" #: printrun/pronterface.py:655 msgid "&Open..." msgstr "&У–ffnen..." #: printrun/pronterface.py:663 msgid " Clear output console" msgstr " Ausgabe Konsole leeren" #: printrun/pronterface.py:663 msgid "Clear console" msgstr "Konsole leeren" #: printrun/pronterface.py:664 msgid " Closes the Window" msgstr " Schliesst das Fenster" #: printrun/pronterface.py:664 msgid "E&xit" msgstr "&Verlassen" #: printrun/pronterface.py:665 msgid "&File" msgstr "&Datei" #: printrun/pronterface.py:668 msgid " Edit open file" msgstr " Offene Datei bearbeiten" #: printrun/pronterface.py:668 msgid "&Edit..." msgstr "&Bearbeiten..." #: printrun/pronterface.py:669 msgid " Compose 3D models into a single plate" msgstr "" #: printrun/pronterface.py:669 #, fuzzy msgid "Plater" msgstr "Heizelement:" #: printrun/pronterface.py:670 msgid " Compose G-Codes into a single plate" msgstr "" #: printrun/pronterface.py:670 msgid "G-Code Plater" msgstr "" #: printrun/pronterface.py:671 msgid " Exclude parts of the bed from being printed" msgstr "" #: printrun/pronterface.py:671 msgid "Excluder" msgstr "" #: printrun/pronterface.py:672 msgid " Project slices" msgstr " Projekt Slices" #: printrun/pronterface.py:672 msgid "Projector" msgstr "Projektor" #: printrun/pronterface.py:673 msgid "&Tools" msgstr "" #: printrun/pronterface.py:676 msgid "" " Recover previous print after a disconnect (homes X, Y, restores Z and E " "status)" msgstr "" #: printrun/pronterface.py:676 msgid "Recover" msgstr "" #: printrun/pronterface.py:679 msgid "&Advanced" msgstr "" #: printrun/pronterface.py:686 #, fuzzy msgid "Print &settings" msgstr "Einstellungen bearbeiten" #: printrun/pronterface.py:687 #, fuzzy msgid "&Filament" msgstr "&Datei" #: printrun/pronterface.py:688 #, fuzzy msgid "&Printer" msgstr "Drucken" #: printrun/pronterface.py:694 msgid "&Slic3r" msgstr "" #: printrun/pronterface.py:696 msgid "Failed to load Slic3r configuration:" msgstr "" #: printrun/pronterface.py:702 msgid "&Macros" msgstr "&Makros" #: printrun/pronterface.py:703 msgid "<&New...>" msgstr "<&Neu...>" #: printrun/pronterface.py:704 msgid " Options dialog" msgstr " Optionen Dialog" #: printrun/pronterface.py:704 msgid "&Options" msgstr "&Optionen" #: printrun/pronterface.py:706 msgid " Adjust slicing settings" msgstr " Slicing Einstellungen anpassen" #: printrun/pronterface.py:706 #, fuzzy msgid "Slicing settings" msgstr "Slicing Einstellungen" #: printrun/pronterface.py:708 msgid "Debug communications" msgstr "" #: printrun/pronterface.py:709 msgid "Print all G-code sent to and received from the printer." msgstr "" #: printrun/pronterface.py:713 msgid "&Settings" msgstr "&Einstellungen" #: printrun/pronterface.py:719 #, fuzzy msgid "&About Printrun" msgstr "Drucker УМberwachen" #: printrun/pronterface.py:719 msgid "Show about dialog" msgstr "" #: printrun/pronterface.py:720 msgid "&Help" msgstr "" #: printrun/pronterface.py:746 msgid "" "Printrun is a pure Python 3D printing (and other types of CNC) host software." msgstr "" #: printrun/pronterface.py:750 #, fuzzy msgid "%.02fmm of filament have been extruded during prints" msgstr "mm Filament in Druck genutzt\n" #: printrun/pronterface.py:781 #, fuzzy msgid "Monitor printer status" msgstr "Drucker УМberwachen" #: printrun/pronterface.py:781 msgid "" "Regularly monitor printer temperatures (required to have functional " "temperature graph or gauges)" msgstr "" #: printrun/pronterface.py:782 msgid "Path to the simarrange binary to use in the STL plater" msgstr "" #: printrun/pronterface.py:782 msgid "Simarrange command" msgstr "" #: printrun/pronterface.py:783 msgid "Circular build platform" msgstr "" #: printrun/pronterface.py:783 msgid "Draw a circular (or oval) build platform instead of a rectangular one" msgstr "" #: printrun/pronterface.py:784 #, fuzzy msgid "Extruders count" msgstr "Extrudieren" #: printrun/pronterface.py:784 msgid "Number of extruders" msgstr "" #: printrun/pronterface.py:785 msgid "Clamp manual moves" msgstr "" #: printrun/pronterface.py:785 msgid "Prevent manual moves from leaving the specified build dimensions" msgstr "" #: printrun/pronterface.py:786 #, fuzzy msgid "Interface mode" msgstr "Makro Name eingeben" #: printrun/pronterface.py:786 msgid "" "Standard interface is a one-page, three columns layout with controls/" "visualization/log\n" "Compact mode is a one-page, two columns layout with controls + log/" "visualization\n" "Tabbed mode is a two-pages mode, where the first page shows controls and the " "second one shows visualization and log." msgstr "" #: printrun/pronterface.py:787 msgid "Controls mode" msgstr "" #: printrun/pronterface.py:787 msgid "" "Standard controls include all controls needed for printer setup and " "calibration, while Mini controls are limited to the ones needed for daily " "printing" msgstr "" #: printrun/pronterface.py:788 msgid "Add a menu to select Slic3r profiles directly from Pronterface" msgstr "" #: printrun/pronterface.py:788 msgid "Enable Slic3r integration" msgstr "" #: printrun/pronterface.py:789 msgid "Update Slic3r default presets" msgstr "" #: printrun/pronterface.py:789 msgid "" "When selecting a profile in Slic3r integration menu, also save it as the " "default Slic3r preset" msgstr "" #: printrun/pronterface.py:790 msgid "Main visualization" msgstr "" #: printrun/pronterface.py:790 msgid "Select visualization for main window." msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D in GCode viewer window" msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D mode instead of 2D layered mode in the visualization window" msgstr "" #: printrun/pronterface.py:792 msgid "Use a lighter 3D visualization" msgstr "" #: printrun/pronterface.py:792 msgid "" "Use a lighter visualization with simple lines instead of extruded paths for " "3D viewer" msgstr "" #: printrun/pronterface.py:793 msgid "Track current layer in main 3D view" msgstr "" #: printrun/pronterface.py:793 msgid "Track the currently printing layer in the main 3D visualization" msgstr "" #: printrun/pronterface.py:794 msgid "Display temperature graph" msgstr "" #: printrun/pronterface.py:794 msgid "Display time-lapse temperature graph" msgstr "" #: printrun/pronterface.py:795 msgid "Display graphical gauges for temperatures visualization" msgstr "" #: printrun/pronterface.py:795 msgid "Display temperature gauges" msgstr "" #: printrun/pronterface.py:796 msgid "Display a checkbox that, when check, locks most of Pronterface" msgstr "" #: printrun/pronterface.py:796 msgid "Display interface lock checkbox" msgstr "" #: printrun/pronterface.py:797 msgid "If lock checkbox is enabled, lock the interface when starting a print" msgstr "" #: printrun/pronterface.py:797 msgid "Lock interface upon print start" msgstr "" #: printrun/pronterface.py:804 msgid "Preview extrusion width" msgstr "" #: printrun/pronterface.py:804 #, fuzzy msgid "Width of Extrusion in Preview" msgstr "Vorschaubreite der Extrudierung (Vorgabe: 0.5)" #: printrun/pronterface.py:805 #, fuzzy msgid "Fine Grid Spacing" msgstr "Feiner Rasterabstand (Vorgabe: 10)" #: printrun/pronterface.py:805 #, fuzzy msgid "Fine grid spacing" msgstr "Feiner Rasterabstand (Vorgabe: 10)" #: printrun/pronterface.py:806 #, fuzzy msgid "Coarse Grid Spacing" msgstr "Grober Rasterabstand (Vorgabe: 50)" #: printrun/pronterface.py:806 #, fuzzy msgid "Coarse grid spacing" msgstr "Grober Rasterabstand (Vorgabe: 50)" #: printrun/pronterface.py:807 msgid "Background color" msgstr "" #: printrun/pronterface.py:807 #, fuzzy msgid "Pronterface background color" msgstr "Pronterface Hintergrundfarbe (Vorgabe: #FFFFFF)" #: printrun/pronterface.py:808 msgid "3D view background color" msgstr "" #: printrun/pronterface.py:808 msgid "Color of the 3D view background" msgstr "" #: printrun/pronterface.py:809 msgid "3D view travel moves color" msgstr "" #: printrun/pronterface.py:809 msgid "Color of travel moves in 3D view" msgstr "" #: printrun/pronterface.py:810 msgid "3D view print moves color" msgstr "" #: printrun/pronterface.py:810 msgid "Color of print moves with tool 0 in 3D view" msgstr "" #: printrun/pronterface.py:811 msgid "3D view tool 1 moves color" msgstr "" #: printrun/pronterface.py:811 msgid "Color of print moves with tool 1 in 3D view" msgstr "" #: printrun/pronterface.py:812 msgid "3D view printed moves color" msgstr "" #: printrun/pronterface.py:812 msgid "Color of printed moves in 3D view" msgstr "" #: printrun/pronterface.py:813 msgid "3D view current layer moves color" msgstr "" #: printrun/pronterface.py:813 msgid "Color of moves in current layer in 3D view" msgstr "" #: printrun/pronterface.py:814 msgid "3D view printed current layer moves color" msgstr "" #: printrun/pronterface.py:814 msgid "Color of already printed moves from current layer in 3D view" msgstr "" #: printrun/pronterface.py:815 msgid "Changing most settings here will require restart to get effect" msgstr "" #: printrun/pronterface.py:815 msgid "Note:" msgstr "" #: printrun/pronterface.py:822 msgid "automatically try to connect to printer on startup" msgstr "" #: printrun/pronterface.py:835 printrun/pronterface.py:1316 msgid "Failed to load recent files list:" msgstr "" #: printrun/pronterface.py:916 #, fuzzy msgid "SD upload: %04.2f%% |" msgstr "SD Drucken:%04.2f %%" #: printrun/pronterface.py:917 printrun/pronterface.py:922 msgid " Line# %d of %d lines |" msgstr " Zeile# %d von %d Zeilen |" #: printrun/pronterface.py:919 #, fuzzy msgid "SD printing: %04.2f%% |" msgstr "SD Drucken:%04.2f %%" #: printrun/pronterface.py:921 #, fuzzy msgid "Printing: %04.2f%% |" msgstr " Drucken:%04.2f %% |" #: printrun/pronterface.py:924 msgid " Est: %s of %s remaining | " msgstr " Erw: %s von %s verbleibend | " #: printrun/pronterface.py:926 #, fuzzy msgid " Z: %.3f mm" msgstr " Z: %0.2f mm" #: printrun/pronterface.py:931 msgid "Disconnecting after 4 failed writes." msgstr "" #: printrun/pronterface.py:972 #, fuzzy msgid "Locking interface." msgstr "Printer Interface" #: printrun/pronterface.py:976 #, fuzzy msgid "Unlocking interface." msgstr "Уœberwache Drucker." #: printrun/pronterface.py:985 msgid "Connecting..." msgstr "Verbinde..." #: printrun/pronterface.py:997 msgid "Could not parse baud rate: " msgstr "" #: printrun/pronterface.py:1013 printrun/pronterface.py:1023 msgid "Error: You are trying to connect to a non-existing port." msgstr "" #: printrun/pronterface.py:1015 msgid "Error: You don't have permission to open %s." msgstr "" #: printrun/pronterface.py:1016 msgid "You might need to add yourself to the dialout group." msgstr "" #: printrun/pronterface.py:1043 msgid "Disconnected." msgstr "Getrennt." #: printrun/pronterface.py:1071 msgid "Reset." msgstr "ZurУМcksetzen." #: printrun/pronterface.py:1072 msgid "Are you sure you want to reset the printer?" msgstr "MУЖchten Sie den Drucker wirklich zurУМcksetzen?" #: printrun/pronterface.py:1072 msgid "Reset?" msgstr "ZurУМcksetzen?" #: printrun/pronterface.py:1093 msgid "Restart" msgstr "Neustart" #: printrun/pronterface.py:1126 msgid "Pick SD filename" msgstr "WУЄhle SD Dateiname" #: printrun/pronterface.py:1144 msgid "File upload complete" msgstr "Datei Upload komplett" #: printrun/pronterface.py:1151 msgid "Print paused at: %s" msgstr "" #: printrun/pronterface.py:1163 msgid "Resume" msgstr "Fortsetzen" #: printrun/pronterface.py:1166 #, fuzzy msgid "Resuming." msgstr "Fortsetzen" #: printrun/pronterface.py:1192 msgid "Pick SD file" msgstr "WУЄhle SD Datei" #: printrun/pronterface.py:1192 msgid "Select the file to print" msgstr "WУЄhle Druckdatei" #: printrun/pronterface.py:1228 printrun/pronterface.py:1259 msgid "Slicing " msgstr "Slicing" #: printrun/pronterface.py:1237 msgid "Failed to execute slicing software: " msgstr "Fehler beim AusfУМhren der Slicing Software:" #: printrun/pronterface.py:1244 msgid "Slicing..." msgstr "Slicing..." #: printrun/pronterface.py:1296 msgid "Open file to print" msgstr "У–ffne zu druckende Datei" #: printrun/pronterface.py:1297 #, fuzzy msgid "" "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*." "gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*" msgstr "" "OBJ,STL und GCODE Dateien (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)" #: printrun/pronterface.py:1325 msgid "Could not update recent files list:" msgstr "" #: printrun/pronterface.py:1359 msgid "Loaded %s, %d lines" msgstr "Geladen %s, %d Zeilen" #: printrun/pronterface.py:1362 msgid "Load File" msgstr "Datei laden" #: printrun/pronterface.py:1376 #, fuzzy msgid "%.2fmm of filament used in this print" msgstr "mm Filament in Druck genutzt\n" #: printrun/pronterface.py:1377 msgid "The print goes:" msgstr "" #: printrun/pronterface.py:1378 #, fuzzy msgid "- from %.2f mm to %.2f mm in X and is %.2f mm wide" msgstr "" "Der Druck verlУЄuft von %f mm bis %f mm in X\n" "und ist %f mm breit\n" #: printrun/pronterface.py:1379 #, fuzzy msgid "- from %.2f mm to %.2f mm in Y and is %.2f mm deep" msgstr "" "Der Druck verlУЄuft von %f mm bis %f mm in Y\n" "und ist %f mm breit\n" #: printrun/pronterface.py:1380 #, fuzzy msgid "- from %.2f mm to %.2f mm in Z and is %.2f mm high" msgstr "" "Der Druck verlУЄuft von %f mm bis %f mm in Z\n" "und ist %f mm hoch\n" #: printrun/pronterface.py:1450 msgid "Printer is now online." msgstr "Drucker ist jetzt Online." #: printrun/pronterface.py:1455 msgid "Disconnect" msgstr "Trennen" #: printrun/pronterface.py:1688 msgid "click to add new custom button" msgstr "Individuellen Button hinzufУМgen" #: printrun/pronterface.py:1694 msgid "Execute command: " msgstr "Kommando ausfУМhren:" #: printrun/pronterface.py:1714 msgid "" "Defines custom button. Usage: button \"title\" [/c \"colour\"] command" msgstr "" "Definiert einen individuellen Button. Nutzung: button \"title\" [/c " "\"colour\"] command" #: printrun/pronterface.py:1736 msgid "Custom button number should be between 0 and 63" msgstr "Nummer des individuellen Button sollte zwischen 0 und 63 sein." #: printrun/pronterface.py:1827 msgid "Edit custom button '%s'" msgstr "Individuellen Button '%s' bearbeiten" #: printrun/pronterface.py:1829 msgid "Move left <<" msgstr "Links bewegen <<" #: printrun/pronterface.py:1832 msgid "Move right >>" msgstr "Rechts bewegen >>" #: printrun/pronterface.py:1836 msgid "Remove custom button '%s'" msgstr "Individuellen Button '%s' entfernen" #: printrun/pronterface.py:1839 msgid "Add custom button" msgstr "Individuellen Button hinzufuegen" #: printrun/pronterface.py:1972 msgid "event object missing" msgstr "Ereigniss Objekt fehlt" #: printrun/pronterface.py:1985 msgid "Do you want to erase the macro?" msgstr "MУЖchten Sie das Makro lУЖschen?" #: printrun/pronterface.py:1989 msgid "Cancelled." msgstr "Abgebrochen." #: printrun/pronterface.py:2007 msgid "Enter macro name" msgstr "Makro Name eingeben" #: printrun/pronterface.py:2010 msgid "Macro name:" msgstr "Makro Name:" #: printrun/pronterface.py:2013 msgid "Ok" msgstr "Ok" #: printrun/pronterface.py:2035 #, fuzzy msgid "Macro name may contain only ASCII alphanumeric symbols and underscores" msgstr "Makro Name darf nur alphanumerische Zeichen und Unterstriche enthalten" #: printrun/pronterface.py:2038 msgid "Name '%s' is being used by built-in command" msgstr "Name '%s' wird durch eingebautes Kommando genutzt" #: pronsole.py:31 msgid "Caught an exception, exiting:" msgstr "" #~ msgid "Folder of last opened file" #~ msgstr "Verzeichniss der zuletzt geУЖffneten Datei" #~ msgid "Check temp" #~ msgstr "Temperatur prУМfen" #~ msgid "Mini mode" #~ msgstr "Mini-Modus" #~ msgid "Compose" #~ msgstr "Zusammenstellen" #~ msgid "Z:" #~ msgstr "Z:" #~ msgid "Full mode" #~ msgstr "Voll-Modus" #~ msgid "Printer is online. " #~ msgstr "Drucker ist online. " #~ msgid "Bed" #~ msgstr "Heizbett" #~ msgid "Hotend" #~ msgstr "Hotend" #~ msgid ", %d lines" #~ msgstr ", %d Zeilen" #~ msgid "Paused." #~ msgstr "Pausiert." #~ msgid "" #~ "Slice command\n" #~ " default:\n" #~ " python skeinforge/skeinforge_application/skeinforge_utilities/" #~ "skeinforge_craft.py $s)" #~ msgstr "" #~ "Kommando Slicing\n" #~ " Vorgabe:\n" #~ " python skeinforge/skeinforge_application/skeinforge_utilities/" #~ "skeinforge_craft.py $s)" #~ msgid "" #~ "Slice settings command\n" #~ " default:\n" #~ " python skeinforge/skeinforge_application/skeinforge.py" #~ msgstr "" #~ "Kommando Slicing Einstellungen\n" #~ " Vorgabe:\n" #~ " python skeinforge/skeinforge_application/skeinforge.py" Printrun-printrun-2.0.0rc5/locale/fr/000077500000000000000000000000001325617007000174725ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/fr/LC_MESSAGES/000077500000000000000000000000001325617007000212575ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/fr/LC_MESSAGES/plater.mo000066400000000000000000000031261325617007000231050ustar00rootroot00000000000000о•М\аJб !-DKQahmty‹ ДФ@о -K6f‚щю§#) ;ENW_*}ЈЦйFі= L    Are you sure you want to clear the grid? All unsaved changes will be lost.AutoAutoplatingBed full, sorry sir :(CancelClearClear the grid?DeleteDoneExportLoadPick file to loadPick file to save toPlate building toolPut at 100, 100STL files (;*.stl;*.STL;)STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scadSnap to Z = 0wrote %sProject-Id-Version: Plater POT-Creation-Date: 2012-02-26 02:40+CET PO-Revision-Date: 2012-02-26 02:41+0100 Last-Translator: Guillaume Seguin Language-Team: FR Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 УŠtes vous sur de vouloir vider la grille ? Toutes les modifications non enregistrУЉes seront perdues.AutoPlacement autoLe lit est plein, dУЉsolУЉ :(AnnulerViderVider la grille ?SupprimerTerminУЉExporterChargerChoisir le fichier У  chargerChoisir le fichier dans lequel enregistrerOutil d'assemblage de plateauPlacer en 100, 100Fichiers STL (;*.stl;*.STL;)Fichiers STL (;*.stl;*.STL;)|*.stl|Fichiers OpenSCAD (;*.scad;)|*.scadPoser en Z = 0%s УЉcritPrintrun-printrun-2.0.0rc5/locale/fr/LC_MESSAGES/plater.po000066400000000000000000000037461325617007000231200ustar00rootroot00000000000000# French Plater Message Catalog # Copyright (C) 2012 Guillaume Seguin # Guillaume Seguin , 2012. # msgid "" msgstr "" "Project-Id-Version: Plater\n" "POT-Creation-Date: 2012-08-04 21:53+CEST\n" "PO-Revision-Date: 2012-02-26 02:41+0100\n" "Last-Translator: Guillaume Seguin \n" "Language-Team: FR \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: plater.py:246 msgid "Plate building tool" msgstr "Outil d'assemblage de plateau" #: plater.py:252 msgid "Clear" msgstr "Vider" #: plater.py:253 msgid "Load" msgstr "Charger" #: plater.py:255 plater.py:258 msgid "Export" msgstr "Exporter" #: plater.py:260 msgid "Done" msgstr "TerminУЉ" #: plater.py:262 msgid "Cancel" msgstr "Annuler" #: plater.py:264 msgid "Snap to Z = 0" msgstr "Poser en Z = 0" #: plater.py:265 msgid "Put at 100, 100" msgstr "Placer en 100, 100" #: plater.py:266 msgid "Delete" msgstr "Supprimer" #: plater.py:267 msgid "Auto" msgstr "Auto" #: plater.py:291 msgid "Autoplating" msgstr "Placement auto" #: plater.py:319 msgid "Bed full, sorry sir :(" msgstr "Le lit est plein, dУЉsolУЉ :(" #: plater.py:329 msgid "" "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" "УŠtes vous sur de vouloir vider la grille ? Toutes les modifications non " "enregistrУЉes seront perdues." #: plater.py:329 msgid "Clear the grid?" msgstr "Vider la grille ?" #: plater.py:371 msgid "Pick file to save to" msgstr "Choisir le fichier dans lequel enregistrer" #: plater.py:372 msgid "STL files (;*.stl;*.STL;)" msgstr "Fichiers STL (;*.stl;*.STL;)" #: plater.py:393 msgid "wrote %s" msgstr "%s УЉcrit" #: plater.py:396 msgid "Pick file to load" msgstr "Choisir le fichier У  charger" #: plater.py:397 msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" msgstr "Fichiers STL (;*.stl;*.STL;)|*.stl|Fichiers OpenSCAD (;*.scad;)|*.scad" Printrun-printrun-2.0.0rc5/locale/fr/LC_MESSAGES/pronterface.mo000066400000000000000000001200321325617007000241220ustar00rootroot00000000000000о•Ќ| ;мШ#Щ#т#ј#& $2$B$,^$‹$ Ѓ$Џ$П$PЯ$ %Œ,%SЙ% && &*& 3&=&C&K&T&]& f&p&x&/&2Џ&2т&2'H'X' g' q' 'Œ' Ÿ'=Љ'2ч'>(Y(k(!Š(JЌ(+ї(H#)Ul) Т) Я)л)ј) ****B*Z*_* p*;}*>Й*>ј*?7+=w+>Е+є+ ћ+,>$, c, „,,Ђ, Ј,Ж,/Ц, і,-+-?-E-M-+V-,‚-Џ-Ф-и-р- ї-'.-.I."e.Mˆ. ж./ф. / !/H+/t/{/Х/ G0 R0$`03…0>Й07ј001P1k1$…1Њ1Ъ1Я1р1ђ1ј1 22F8222­28Г2,ь2303,93f3x3’3™3З3Щ3 б3ђ34.4K4h4Wx4а4$ь4I57[54“5.Ш54ї5,6<6Q6 c6q6v6ˆ6 š6Ї6!И67к67*7*C7n7v7}7E7Mе7#828C8Y8o8$„8"Љ85Ь8 9#9>9 C9M9 b9l9€99Е9Ъ9Я9ш9:F: b:n:X:к::ј:(3;\; p;{;‘;;Ѕ; с; ю;+ќ;&(<O<c< v<<2›<Ю<Oъ<:=@=ƒT=и=м=п=ђ=I>6Q>ˆ>Ž>Ђ> Й>Ц>з>щ>ў>&?9? R?\?'c?‹?%?!Ж?@и?@1@7@GG@7@Ч@2ч@A.A?A!TAvA-‹AWЙAB2(B&[B)‚B-ЌBBкBC4C ECQCqCM†C дC пC щCѕC D& DGDODiD€D†D–D ЈDГDКDСDеDнDфD ќDEEO-E}E™EœE­E ЖEРEиE#юEBFUF*ZF#…F!ЉFЫFщFG%G@GWG\GQtGFЦG? HMH ^HjH)nH%˜H.ОH1эH.I.NI1}I1ЏIсIъIќIJ !J/JFJ]JfJwJ ŠJ •J ŸJ2­JрJёJL)L8L?LULjL|LLIЃLэLџLMM#&M JMXMmM!‹M/­M нMъMњMBN[NUzNаNпN5юN&$OGKO“O^™OјOўOP.P EPQPZP ^PjP3sP]ЇP`Q%fQ4ŒQСQ"пQ.R 1R=ROR XR dR2qRЄRУRrиR7KS:ƒSAОS;T \nT\ У\РЯ\\]э]№]^ ^ ^%^.^ 6^A^ J^ V^c^k^Is^:Н^?ј^98_r_‚_–_Ћ_Ц_ж_ь_Gћ_DC`Tˆ`н` §`%a`Da6ЅaYмam6bЄbЕb/Фbєbcc:cYc ycƒc•cLЅcOђcOBdP’dMуdN1e€eˆeeZАe- f9fPfofufˆf>šf&йfggm WmOxmШm'хm n=n2Rn…nšn9Ѓnнnѕno$oAoTo&]o/„o0Дo'хo' p5p`JpЋp,Ъp^їp4Vq9‹q4Хq@њq;rOrir„r›rЃrПrлrюr$s^*s‰s*s+Кsцsьsєs]tVptЧtлt!эt u 0u&Qu%xu`žuџu"vAvIv\vrv…v(›v#Фvшv w!w54wjw`‡wшwюwgx+oxG›x;уxy=yRypy<yЪyцy1z94znz‹z ЊzИz[гz9/{fi{а{ж{Žы{z|~|†|!Є|jЦ|F1}x}~}"›}"О}#с}&~3,~`~*€~ Ћ~Ь~о~%х~ 0,AJn,Йця[ €,e€5’€FШ€.J8g =Лљ{‚4•‚/Ъ‚0њ‚4+ƒf`ƒЧƒоƒњƒ+ „7„VO„ І„ Б„ М„Ш„ч„3ј„ ,…&8…-_……œ…М…л…ё…†† 0† <†!F† h†u†,~†TЋ†"‡#‡&‡E‡ X‡f‡‡&—‡HО‡ ˆ)ˆ8=ˆ(vˆ(ŸˆШˆ&шˆ:‰J‰a‰$i‰nމP§‰INŠ˜Š ЊŠЖŠ9ОŠ2јŠ9+‹9e‹=Ÿ‹=н‹=Œ=YŒ —ŒЃŒСŒеŒэŒ')8AX r }‡;—г-ц)>X^}šИдHю7N`g~ œЉ0Щ0њ>+‘ j‘v‘0‹‘WМ‘+’f@’Ї’Н’_и’08“ii“ 㓆о“e”0m”ž”Е”Э” х”ё”ѕ” •;•U•oз•9G–K–#Э–(ё–9—T—l— — ‹— –—DЄ—щ— ˜Ѓ&˜7ژ;™A>™;€™М™`Я™F0š<wšdДš3›ЛM› œ.œ=œ EœeOœgЕœUBsVЖ2 ž8@ž9yžBГž<іž3ŸEŸ5ZŸYŸ/ъŸi>]bьx_…a%э ncЁˆ{ ѓI†ш;ŠЂXБ jЄЃ|Ѓљї~џƒLу€ 4 ЊBAsraЦк…uКЮBнmЖЌf_‰ЉSgоM<.–ПX{`%P­а /l9ЭNхC‹9З“№Г<`•U“3#”2cщo1ЂЌ”n„Vч˜—‚Ы5:C+ОЋ@ŒW|Йp'y$РцFpkqDТ™‡\V h=мХZ—ˆA’žЇœФŸT&Iе5'ЬлJ вœ§1ЎQrŒў Y™ђzKпŠрЁю+3јEтQKЩtЈЅя!Jt=ВŸ7#‹иƒMš"\Уіjd6žU-hс–^СЋG@;‡v/€ye8q)D ?‚жki›7г˜H•ŽHдW‘ъћo,&‰S0†[lTЛ›u}ф(ШД"w‘й]^sF8Њ бёgќ O}І-Ј4f Yњ2ЕRЉыМ.И[ EŽз„(Ѕd:*e6ѕšPZvєІGЪzНЯ0N$Єx?O~АЏwЇ*mLR>!,Ч)’b Adjust slicing settings Clear output console Closes the Window Compose 3D models into a single plate Edit open file Est: %s of %s remaining | Exclude parts of the bed from being printed Line# %d of %d lines | Opens file Options dialog Project slices Recover previous print after a disconnect (homes X, Y, restores Z and E status) Z: %.3f mm# I moved all your custom buttons into .pronsolerc. # Please don't add them here any more. # Backup of your old buttons is in custombtn.old %s is a high temperature to set your extruder to. Are you sure you want to do that?&?&About Printrun&Advanced&Edit...&Filament&File&Macros&Open...&Options&Printer&Settings&Slic3r&Tools(Control-doubleclick to reset to default value)- from %.2f mm to %.2f mm in X and is %.2f mm wide- from %.2f mm to %.2f mm in Y and is %.2f mm deep- from %.2f mm to %.2f mm in Z and is %.2f mm high...interrupted!; Extruder off; Fan off; Heatbed off; Motors off; Power supply off<&New...>A partial file named %s may have been written to the sd card.Aborting connection attempt after 4 failed writes.Add a menu to select Slic3r profiles directly from PronterfaceAdd custom buttonAdvance extruder by set lengthAmount to Extrude or Retract (mm)Are you sure you want to clear the grid? All unsaved changes will be lost.Are you sure you want to reset the printer?Are you sure you want to reset the setting to the default value: {0!r} ?Attempted to write invalid text to console, which could be due to an invalid baudrateAuto arrangeAutoplatingAutoplating using simarrangeBackground colorBaud rateBed full, sorry sir :(Bed temperature for ABSBed temperature for PLABed:Build dimensionsButton titleCan't read from printer (disconnected?) (OS Error {0}): {1}Can't read from printer (disconnected?) (SelectError {0}): {1}Can't read from printer (disconnected?) (SerialException): {0}Can't read from printer (disconnected?) (Socket error {0}): {1}Can't write to printer (disconnected?) (SerialException): {0}Can't write to printer (disconnected?) (Socket error {0}): {1}CancelCancelled.Caught an exception, exiting:Changing most settings here will require restart to get effectCheck current hotend temperatureCheck tempClamp manual movesClearClear consoleClear the grid?Click to examine / edit layers of loaded fileClick to switch current extruderCoarse Grid SpacingCoarse grid spacingColorCommandCommandsCommon amounts are in the tabcomplete list.Communication Settings Click to rescan portsCommunications SpeedConfirm set defaultConnectConnect to the printerConnecting...Could not connect to %s at baudrate %s:Could not connect to %s:%s:Could not parse baud rate: Couldn't load non-existing file %sCreates a gcode file from an stl model using the slicer (with tab-completion)Custom buttonCustom button number should be between 0 and 63Debug G-codeDefault: Defines custom button. Usage: button "title" [/c "colour"] commandDeleteDepthDimensions of Build Platform & optional offset of origin & optional switch position Examples: XXXxYYY XXX,YYY,ZZZ XXXxYYYxZZZ+OffX+OffY+OffZ XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZDisconnectDisconnected.Disconnecting after 4 failed writes.Disconnects from the printer and exits the program.Display a checkbox that, when check, locks most of PronterfaceDisplay graphical gauges for temperatures visualizationDisplay interface lock checkboxDisplay temperature gaugesDisplay temperature graphDisplay time-lapse temperature graphDo you want to erase the macro?DoneDone monitoring.E manual feedrateE&xitEdit custom button '%s'Edit settingsEnable Slic3r integrationEnter either a temperature in celsius or one of the following keywordsEnter macro nameEntering slicer settings: %sErrorError: You are trying to connect to a non-existing port.Error: You don't have permission to open %s.Estimated duration: %sExcluderExecutable to run when the print is finishedExecute command: Exiting program. Goodbye!ExportExported merged G-Codes to %sExternal commandsExtrudeExtrude / Retract speed (mm/min)Extruder temp for ABS (deg C)Extruder temp for PLA (deg C)Extruder temperature for ABSExtruder temperature for PLAExtruders countExtrudes a length of filament, 5mm by default, or the number of mm given as a parameterExtruding %fmm of filament.Failed to execute slicing software: Failed to use simarrange for plating, falling back to the standard methodFeedrate for Control Panel Moves in Extrusions (mm/min)Feedrate for Control Panel Moves in X and Y (mm/min)Feedrate for Control Panel Moves in Z (mm/min)File is not present on card. Please upload it first.File not found!File upload completeFiles on SD card:Final commandFindFine Grid SpacingFine grid spacingFit to plateFit to plate [F]GCODE files (*.gcode;*.GCODE;*.g)Gcode view, shift to move view, mousewheel to set layerHeat:Heated Build Platform temp for ABS (deg C)Heated Build Platform temp for PLA (deg C)Heater:HeightHomes the printerIf lock checkbox is enabled, lock the interface when starting a printIgnoring custombtn.txt. Remove all current buttons to revert to custombtn.txtInterface modeInvalid distanceInvalid length given.Invalid period given.Invalid speed given.Layer %d - Going Down - Z = %.03f mmLayer %d - Going Up - Z = %.03f mmLayer number and Z position show here when you scrollLength is 0, not doing anything.Lists files on the SD cardLoadLoad FileLoad a 3D model fileLoad fileLoaded %s, %d linesLoading OpenSCAD file failedLoading STL file failedLoading sliced file.LockLock graphical interfaceLock interface upon print startLocking interface.Macro name may contain only ASCII alphanumeric symbols and underscoresMacro name:Main visualizationManual move outside of the build volume prevented (see the "Clamp manual moves" option).Monitor Temperatures in GraphMonitor a machine's temperatures and an SD print's status.Monitoring printer, use ^C to interrupt.Monitoring printer.Motors offMove Down a Layer [D]Move Up a Layer [U]Move an axis. Specify the name of the axis and the amount. Move left <<Move right >>Name '%s' is being used by built-in commandNo file loaded. Please use load first.No file name given.No move specified.Not Found!Not connected to printer.Not paused, unable to resume. Start a print first.Not printing, cannot pause.Note!!! You have specified custom buttons in both custombtn.txt and .pronsolercNote:Number of extrudersOBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*OffOkOpen file to printOpening file failed.Part excluder: draw rectangles where print instructions should be ignoredPath to the simarrange binary to use in the STL platerPausePause Current PrintPauses a running printPick SD filePick SD filenamePick file to loadPick file to save toPlate building toolPlate full, please remove some objectsPlate function activatedPlated %sPlaterPlease enter target name in 8.3 format.PortPort used to communicate with printerPress Ctrl-C to interrupt upload.Prevent manual moves from leaving the specified build dimensionsPreview extrusion widthPrintPrint &settingsPrint a file from the SD card. Tab completes with available file names.Print all G-code sent to and received from the printer.Print end callback failed with:Print ended at: %(end_time)s and took %(duration)sPrint paused at: %sPrint progress: Print resumed at: %sPrint start callback failed with:Print started at: %sPrint thread died due to the following error:Printer is currently printing. Please pause the print before you issue manual commands.Printer is not online.Printer is not online. Please connect to it first.Printer is not online. Unable to move.Printer is not online. Unable to reverse.Printer is not online. Unable to turn it off.Printer is not printing. Please print something before monitoring.Printer is now online.Printer settingsPrinting %sPrinting file: %s from SD card.Printing: %04.2f%% |Printrun is a pure Python 3D printing (and other types of CNC) host software.Progress: ProjectorPronterfacePronterface background colorPut at centerRead the extruder and bed temperature.RecoverRemove custom button '%s'Requesting SD print...ResetReset selectionReset the printerReset viewReset.Reset?Resets the printer.RestartResumeResumes a paused print.Resuming.ReverseReverse extruder by set lengthReverses the extruder, 5mm by default, or the number of mm given as a parameterReversing %fmm of filament.SDSD Card PrintingSD PrintSD UploadSD printing: %04.2f%% |SD upload: %04.2f%% |STL files (*.stl;*.STL)|*.stl;*.STLSTL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scadSaveSelect Baud rate for printer communicationSelect Port Printer is connected toSelect Temperature for Heated BedSelect Temperature for HotendSelect current extruderSelect the file to printSelect visualization for main window.SelectError ({0}): {1}SendSend Command to PrinterSend a loaded gcode file to the printer. Load a file with the load command first.Send a loaded gcode file to the printer. You have %s loaded right now.Send commands to printer (Type 'help' for simple help function)Serial error: %sSerial portSetSet Maximum Speed for X & Y axes (mm/min)Set Maximum Speed for Z axis (mm/min)Sets the bed temperature to the value entered.Sets the hotend temperature to the value entered.Setting bed temperature to %f degrees Celsius.Setting bed temperature to %s degrees Celsius.Setting hotend temperature to %f degrees Celsius.Setting hotend temperature to %s degrees Celsius.SettingsShow about dialogSimarrange commandSkeining file: %sSlice commandSlice settings commandSlicer options commandSlicing Slicing SettingsSlicing failed: %sSlicing...Slicing: Snap to Z = 0Socket connection broken, disconnected. ({0}): {1}Socket error %s:Standard interface is a one-page, three columns layout with controls/visualization/log Compact mode is a one-page, two columns layout with controls + log/visualization Tabbed mode is a two-pages mode, where the first page shows controls and the second one shows visualization and log.Start Printing Loaded FileStarting printStatusSwitch Heated Bed OffSwitch Heated Bed OnSwitch Hotend OffSwitch Hotend OnSwitch all motors offSwitches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code).Temperature graphThe print goes:Tool:Turn printer offTurns off everything on the printerUnknown axis.Unlocking interface.Update Slic3r default presetsUpdating values every %f seconds.Upload completed. %s should now be on the card.Uploading %sUploading as %sUse 3D in GCode viewer windowUse 3D mode instead of 2D layered mode in the visualization windowUse a lighter 3D visualizationUse a lighter visualization with simple lines instead of extruded paths for 3D viewerUser interfaceUsing tool %d.WX is not installed. This program requires WX to run.Warning: could not analyze command %s:Warning: no rotation support for now, object won't be correctly rotatedWatchWhen selecting a profile in Slic3r integration menu, also save it as the default Slic3r presetWidthWidth of Extrusion in PreviewWrote plate to %sX && Y manual feedrateX home pos.X offsetXY:Y home pos.Y offsetYou can monitor the print with the monitor command.You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.You cannot set negative tool numbers.You might need to add yourself to the dialout group.You must enter a temperature.You must enter a temperature. (%s)You must specify the tool index as an integer.Z home pos.Z manual feedrateZ offsetZoom In [+]Zoom Out [-]automatically try to connect to printer on startupclick to add new custom buttonevent object missingexecutes command after configuration/.pronsolerc is loaded ; macros/settings from these commands are not autosavedextrude - extrudes 5mm of filament at 300mm/min (5mm/s)extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)file to loadhome - homes all axes and zeroes the extruder(Using G28 and G92)home e - set extruder position to zero (Using G92)home xy - homes x and y axes (Using G28)home xyze - homes all axes and zeroes the extruder (Using G28 and G92)home z - homes z axis only (Using G28)load this file on startup instead of .pronsolerc ; you may chain config files, if so settings auto-save will use the last specified filemm @mm of filament used in this printmm/ minmm/min Z:monitor - Reports temperature and SD print status (if SD printing) every 5 secondsmonitor 2 - Reports temperature and SD print status (if SD printing) every 2 secondsmove X 10 will move the X axis forward by 10mm at %s mm/min (default XY speed)move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/minmove Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)raw G-Code line "%s" could not be parsedreverse - reverses 5mm of filament at 300mm/min (5mm/s)reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)sdprint filename.gsimarrange failedskein filename.stl - create gcode fileskein filename.stl view - create gcode file and view using skeinisoskein set - adjust slicer settingsProject-Id-Version: Pronterface POT-Creation-Date: 2013-11-02 12:19+CET PO-Revision-Date: 2013-11-02 13:58+0100 Last-Translator: Guillaume Seguin Language-Team: FR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 X-Generator: Poedit 1.5.7 Language: FranУЇais X-Poedit-SourceCharset: UTF-8 RУЉgler les paramУЈtres de slicing Effacer le contenu de la console de sortie Quitter le programmeComposer plusieurs modУЈles 3D en un seul plateau У‰diter le fichier ouvert ETA: %s restant sur %s | Exclure des piУЈces du plateau lors de l'impression Ligne# %d sur %d lignes | Ouvrir un fichier FenУЊtre des options Projeter les couches RУЉcupУЉrer l'impression prУЉcУЉdente aprУЈs une dУЉconnexion (ramУЈne X, Y У  0, restaure l'УЉtat de Z et E) Z: %.3f mm# Tous vos boutons personalisУЉs ont УЉtУЉ dУЉplacУЉs dans le fichier .pronsolerc. # Veuillez ne plus en ajouter ici. # Une sauvegarde de vos anciens boutons est dans le fichier custombtn.old %s est une tempУЉrature УЉlevУЉe pour une extrudeuse. УŠtes-vous sУЛr de vouloir faire УЇa ?&?&A propos de Printrun&AvancУЉ&У‰diter...&Filament&Fichier&Macros&Ouvrir...&Options&Imprimante&ParamУЈtres&Slic3r&Outils(Effectuer un Control+double click pour revenir У  la valeur par dУЉfaut)- de %.02f mm У  %.02f mm en X et mesure %.02f mm de large- de %.02f mm У  %.02f mm en Y et mesure %.02f mm de profondeur- de %.02f mm У  %.02f mm en Y et mesure %.02f mm de haut...interrompu !; ArrУЊt extrudeuse; ArrУЊt ventilateur; ArrУЊt plateau chauffant; ArrУЊt moteur; ArrУЊt alimentation<&Nouvelle...>Un fichier incomplet nommУЉ %s peut avoir УЉtУЉ УЉcrit sur la carte SD.Annulation de la tentative de connexion suite У  4 envois УЉchouУЉs.Ajouter un menu pour sУЉlectionner les profils Slic3r directement depuis PronterfaceAjouter un bouton personnalisУЉExtruder sur la longueur donnУЉeLongueur У  extruder ou inverser (mm)УŠtes vous sur de vouloir vider le plateau ? Tous les changement non sauvegardУЉs seront perdus.Etes-vous sУЛr de vouloir rУЉinitialiser l'imprimante?Etes-vous sУЛr de vouloir rУЉinitialiser ce paramУЈtre У  sa valeur par dУЉfaut : {0!r} ?Impossible de transcrire un message dans la console, possiblement У  cause d'un mauvais rУЉglage du baudrate.Arrangement autoPlacement autoArrangement automatique en utilisant simarrangeCouleur de fondDУЉbit de la communicationPlateau plein, dУЉsolУЉ :(TempУЉrature du lit pour l'ABSTempУЉrature du lit pour le PLAPlateau :Dimensions utilesTitre du boutonImpossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (OS Error {0}): {1}Impossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (SelectError {0}): {1}Impossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (SerialException): {0}Impossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (Socket error {0}): {1}Impossible d'УЉcrire У  l'imprimante (dУЉconnectУЉe ?) (SerialException): {0}Impossible d'УЉcrire У  l'imprimante (dУЉconnectУЉe ?) (Socket error {0}): {1}AnnulerAnnulУЉException attrapУЉe, on quitte:La plupart de ces rУЉglages nУЉcessitent de redУЉmarrer le logiciel pour УЊtre appliquУЉs.VУЉrifier la tempУЉrature actuelle de la buseLire les tempУЉraturesLimiter les mouvements manuelsViderEffacer la consoleVider la grille ?Cliquer pour examiner / УЉditer les couches du fichier chargУЉCliquer pour changer l'extrudeur actifEspacement large de la grilleEspacement large de la grilleCouleurCommandeCommandesDes longueurs standard sont dans la liste de tabcomplУЉtion.ParamУЈtres de communication Cliquer pour rescanner les portsVitesse de communicationConfirmation de retour au dУЉfautConnecterSe connecter У  l'imprimanteConnexion en cours...Impossible de se connecter У  %s У  la vitesse %s:Impossible de se connecter У  %s:%s:Impossible d'analyser le dУЉbit:Impossible de charger le fichier inexistant %sCrУЉe un fichier gcode У  partir d'un modУЈle stl avec la dУЉcoupeuse (avec tab-complУЉtion)Commande personnalisУЉeLes numУЉros des boutons personnalisУЉs doivent УЊtre compris entre 0 et 63.DУЉbugguer le G-codeDУЉfaut: DУЉfinit des boutons personnalidУЉs. Utilisation : "Libelle" [/c "couleur"] commandeSupprimerLongueurDimensions de la plateforme d'impression & offset de l'origine & position des endstops Exemples: XXXxYYY XXX,YYY,ZZZ XXXxYYYxZZZ+OffX+OffY+OffZ XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZDУЉconnecterDУЉconnectУЉ.DУЉconnexion suite У  4 envois УЉchouУЉs.DУЉconnecte l'imprimante et quitte le programme.Afficher une case У  cocher pour verrouiller une grande partie de l'imprimanteAfficher des jauges de tempУЉratureAfficher une case У  cocher pour pouvoir verrouiller l'intefaceAfficher les jauges de tempУЉratureAfficher le graphe de tempУЉraturesAfficher un graphe temporel de la tempУЉratureVoulez-vous effacer la macro ?TerminУЉSurveillance de l'imprimante effectuУЉe.Vitesse manuelle E&QuitterEditer le bouton personnalisУЉ '%s'Modifier les paramУЈtresActiver l'intУЉgration de Slic3rEntrez soit une tempУЉrature en degrУЉs celsius soit un des mots-clУЉs suivantsSaisissez le nom de la macroAccУЈs au paramУЈtres de dУЉcoupУЉe: %sErreurErreur: Vous essayez de vous connecter У  un port inexistant.Erreur: Vous n'avez pas la permission d'ouvrir %s.DurУЉe estimУЉe : %sExclueurExУЉcutable У  exУЉcuter quand l'impression est terminУЉeExУЉcuter la commande :Fin du programme. Au revoir !ExporterG-Codes fusionnУЉs exportУЉs dans %sCommandes externesExtruderVitesse d'extrusion/inversion (mm/min)TempУЉrature de l'extrudeuse pour l'ABS (deg C)TempУЉrature de l'extrudeuse pour le PLA (deg C)TempУЉrature de l'extrudeuse pour l'ABSTempУЉrature de l'extrudeuse pour l'ABSNombre d'extrudeusesExtruder une longueur de filament, 5mm par dУЉfaut, ou le nombre de mm spУЉcifiУЉs en paramУЈtreExtrusion de %fmm de filament.Une erreur s'est produite lors du slicing : Impossible d'utiliser simarrange pour faire l'arrangement, utilisation de la mУЉthode standardVitesse pour les dУЉplacements manuels en E (mm/min)Vitesse pour les dУЉplacements manuels en X et Y (mm/min)Vitesse pour les dУЉplacements manuels en Z (mm/min)Le fichier n'est pas sur la carte, veuillez d'abord l'y envoyer.Fichier non trouvУЉEnvoi du fichier terminУЉFichiers sur la carte SD :Script post-impressionTrouverEspacement fin de la grilleEspacement fin de la grilleAdapter au plateauAdapter au plateau [F]Fichiers GCODE (*.gcode;*.GCODE;*.g)Visualisation du Gcode, utiliser Maj pour dУЉplacer la vue, la roulette pour changer de coucheBuse:TempУЉrature du plateau pour l'ABS (deg C)TempУЉrature du plateau pour le PLA (deg C)Buse:HauteurRamУЈne l'imprimante У  zУЉroSi la case de verrouillage est activУЉe, verrouiler l'interface au lancement d'une impressioncustombtn.txt ignorУЉ. Retirez tous les boutons en cours pour revenir У  custombtn.txtMode de l'interfaceDistance invalideLa longueur donnУЉe est invalide.La pУЉriode donnУЉe est invalideLa vitesse donnУЉe est invalide.Couche %d - En descente - Z = %.03f mmCouche %d - En montУЉe - Z = %.03f mmLe numУЉro de couche et la position en Z appairassent ici quand vous faites dУЉfiler les couchesLongueur nulle, rien У  faire.Liste les fichiers sur la carte SDChargerCharger un fichierCharger un modУЈle 3DCharger un fichier%s chargУЉ, %d lignesУ‰chec de chargement du fichier OpenSCADУ‰chec de chargement du fichier STLChargement du fichier slicУЉ.VerrouillerVerrouiller l'interface graphiqueVerrouiller l'interface au lancement d'une impressionVerrouillage de l'interface.Un nom de macro ne peut contenir que des caractУЈres alphanumУЉrique ASCII et des underscore (_)Nom :Visualisation principaleDУЉplacement en dehors du volume d'impression inhibУЉ (voir l'option "Limiter les mouvements manuels").Surveiller les tempУЉratures avec un grapheMonitorer les tempУЉratures de la machine et l'УЉtat de l'impression SDImprimante sous surveillance, utiliser ^C pour interrompre.Imprimante sous surveillance.ArrУЊter les moteursVoir la couche du dessous [D]Voir la couche du dessus [U]DУЉplacer un axe. SpУЉcifier le nom de l'axe et la distance.DУЉplacer vers la gauche <<DУЉplacer vers la droite >>Le nom '%s' est utilisУЉ par une commande interneAucun fichier chargУЉ. Veuillez charger un fichier avant.Aucun nom de fichier fourni.Aucun dУЉplacement spУЉcifiУЉ.Non trouvУЉ !Imprimante non connectУЉe.Pas d'impression en pause, impossible de continuer. Veuillez d'abord lancer une impression.Pas d'impression en cours, impossible de mettre en pause.Remarque! Vous avez spУЉcifiУЉ des boutons personnalisУЉs dans custombtn.txt et aussi dans .pronsolercNote:Nombre d'extrudeusesFichiers OBJ, STL et GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|Tous les fichiers (*.*)|*.*OffValiderOuvrir un fichier У  imprimerL'ouverture du fichier a УЉchouУЉExclueur de piУЈce: dessiner des rectangles lУ  oУЙ les instructions d'impressions doivent УЊtre ignorУЉesChemin vers le binaire de simarrange У  utiliser dans le plater de STLPauseMettre en pause l'impressionMet en pause l'impression en coursChoisir un fichier sur la carte SDLister les fichiers sur la carte SDVeuillez choisir le fichier У  chargerVeuillez choisir le fichier dans lequel enregistrerOutil de composition de plateauPlateau plein, veuillez retirer des objetsFonction de composition activУЉePlateau crУЉУЉ %sPlaterVeuillez entrer un nom au format 8.3.PortPort utilisУЉ pour communiquer avec l'imprimanteAppuyer sur Ctrl-C pour interrompre l'envoi.EmpУЊcher les mouvements manuels de quitter le volume d'impression dУЉfiniLargeur de l'extrusion pour la visualisationImprimerParamУЈtres d'impre&ssionImprimer un fichier depuis la carte SD. La touche Tab complУЉtera les fichiers disponibles.Afficher tous les G-code envoyУЉs et reУЇus.La fonction de rappel de fin d'impression a УЉchouУЉ:Impression terminУЉe У  : %(end_time)s aprУЈs avoir durУЉ %(duration)sImpression interrompue У  : %sProgrУЈs de l'impression : Impression relancУЉe У  : %sLa fonction de rappel de dУЉbut d'impression a УЉchouУЉ:Impression lancУЉe У  : %sLe fil d'impression a УЉchouУЉ У  cause de l'erreur suivante:L'imprimante est actuellement en train d'imprimer. Veuillez mettre l'impression en pause avant d'envoyer des commandes manuelles.Imprimante dУЉconnectУЉe.Imprimante dУЉconnectУЉe. Veuillez vous y connecter.Imprimante dУЉconnectУЉe. Impossible de bouger.Imprimante dУЉconnectУЉe. Impossible de retirer.Imprimante dУЉconnectУЉe. Impossible de l'УЉteindre.L'imprimante n'est pas en cours d'impression. Veuillez lancer une impression avant d'activer le suivi.Imprimante connectУЉe.ParamУЈtres de l'imprimanteImpression de %sImpression du fichier %s depuis la carte SDImpression : %04.2f%% |Printrun est un logiciel hУДte pour imprimante 3D (et autres CNC) УЉcrit en pur PythonProgrУЈs :ProjecteurPronterfaceCouleur de fond de PronterfacePlacer au centreLire la tempУЉrature de l'extrudeuse et du plateau.RУЉcupУЉrerSupprimer le bouton personnalisУЉ '%s'Demande de l'impression depuis la carte SD...RУЉinitialiserRemettre У  zУЉro la sУЉlectionRemettre У  zУЉro l'imprimanteRУЉinitialiser la vueRУЉinitialisУЉe.RУЉinitialiser ?Remet У  zУЉro l'imprimante.RecommencerReprendreContinue une impression en pause.Continuons !InverserInverser l'extrudeur sur la longueur donnУЉeRУЉtracte l'extrudeuse, de 5mm par dУЉfaut, ou du nombre de mm donnУЉs en paramУЈtreRУЉtractation de %fmm de filament.SDImpression depuis une carte SDImprimer depuis SDCopier sur SDImpression SD : %04.2f%% |Envoi SD : %04.2f%% |Fichiers STL (*.stl;*.STL)|*.stl;*.STLFichiers STL (*.stl;*.STL)|*.stl;*.STL|Fichiers OpenSCAD (*.scad)|*.scadEnregistrerSУЉlectionner la vitesse de communicationSУЉlectionner le port auquel l'imprimante est connectУЉeSУЉlectionner la tempУЉrature du plateauSУЉlectionner la tempУЉrature de la buseSУЉlectionner l'extrudeur actifSУЉlectionnez le fichier У  imprimer :SУЉlectionnez la visualisation pour la fenУЊtre principaleSelectError ({0}): {1}EnvoyerEnvoyer une commande У  l'imprimanteEnvoyer un fichier gcode chargУЉ У  l'imprimante. Veuillez d'abord charger un fichier avec la commande "load".Envoyer un fichier gcode chargУЉ У  l'imprimante. %s est chargУЉ pour l'instant.Envoyer des commandes У  l'imprimante (Taper 'help' pour avoir de l'aide)Erreur sУЉrie: %sPort sУЉrieRУЉglerDУЉfinir la vitesse maximale pour les axes X & Y (mm/min)DУЉfinir la vitesse maximale pour l'axe Z (mm/min)RУЈgle de la tempУЉrature du plateau У  la valeur saisie.RУЈgle de la tempУЉrature de la buse У  la valeur saisie.RУЉglage de la tempУЉrature du plateau У  %f degrУЉs Celsius.RУЉglage de la tempУЉrature du plateau У  %s degrУЉs Celsius.RУЉglage de la tempУЉrature de la buse У  %f degrУЉs Celsius.RУЉglage de la tempУЉrature de la buse У  %s degrУЉs Celsius.ParamУЈtresAfficher la fenУЊtre A proposCommande simarrangeDУЉcoupe du fichier: %sCommande de slicingCommande pour les paramУЈtres du slicerCommande pour Slicing ParamУЈtres de slicingУ‰chec de la dУЉcoupe: %sSlicing...Slicing :Placer en Z = 0La connection par socket a cassУЉ, dУЉconnexion. ({0}): {1}Erreur rУЉseau %s:Le mode Standard affiche les contrУДles, la visualisation et la console sur 3 colonnes Le mode Compact regroupe contrУДles et console sur 1 colonne et affiche la visualisation sur une seconde Le mode Tabbed prУЉsente deux onglets, l'un contenant les contrУДles, l'autre la visualisation et la console.Commencer l'impression du fichier chargУЉDУЉbut de l'impression...У‰tatУ‰teindre le plateau chauffantAllumer le plateau chauffantУ‰teindre la tУЊte chauffanteAllumer la tУЊte chauffanteArrУЊter tous les moteursPasser У  l'outil spУЉcifiУЉ (e.g. faire "tool 1" enverra un G-Code T1).Graphe de tempУЉratureL'impression va :Outil:У‰teindre l'imprimanteУ‰teint tout sur l'imprimanteAxe inconnu.DУЉverrouillage de l'interface.Mettre У  jour les profils par dУЉfaut de Slic3rMise У  jour des valeurs toutes les %f secondes.Envoi terminУЉ. %s devrait maintenant se trouver sur la carte.Envoi de %sEnvoi en tant que %sUtiliser la 3D pour la fenУЊtre de visualisationUtiliser le mode 3D У  la place du mode 2D par couche dans la fenУЊtre de visualisationUtiliser une visualisation 3D plus lУЉgУЈreUtiliser une visualisation plus lУЉgУЈre avec des lignes У  la place de tubes extrudУЉs dans la vue 3DInterface utilisateurUtilisation de l'outil %d.wxWidgets n'est pas installУЉ. Ce programme nУЉcessite la librairie wxWidgets pour fonctionner.Attention: impossible d'analyzer la commande %s:Attention: les rotations ne sont pas supportУЉes pour le moment, l'objet ne sera pas correctement tournУЉSurveillerLors de la sУЉlection d'un profil dans le menu d'intУЉgration de Slic3r, dУЉfinir ce profil en tant que dУЉfaut pour Slic3r УЉgalementLargeurLargeur de l'extrusion dans la prУЉvisualisationPlateau УЉcrit dans %sVitesse manuelle X && YPosition du homing en XOffset en XXY:Position du homing en YOffset en YVous pouvez suivre l'impression avec la commande "monitor".Vous ne pouvez pas rУЉgler une tempУЉrature nУЉgative. Pour dУЉsactiver votre plateau chauffant, rУЉglez sa tempУЉrature У  0ТАC.Vous ne pouvez pas rУЉgler une tempУЉrature nУЉgative. Pour УЉteindre la buse, rУЉglez sa tempУЉrature У  0ТАC.Vous ne pouvez pas choisir des indices d'outil nУЉgatifs.Vous avez peut УЊtre besoin de vous ajouter au groupe dialout ou similaire.Vous devez saisir une tempУЉrature.Vous devez saisir une tempУЉrature. (%s)Vous devez spУЉcifier l'indice de l'outil avec un entier.Position du homing en ZVitesse manuelle ZOffset en ZZoomer [+]DУЉzoomer [-]tenter de se connecter automatiquement У  l'imprimante au dУЉmarrageAjouter un bouton personnalisУЉУЉvУЉnement d'objet manquantexУЉcute une commande aprУЈs le chargement de la configuration/.pronsolerc ; les macros et paramУЈtres de ces commandes ne seront pas sauvegardУЉes automatiquementextrude - extruder 5mm de filament У  300mm/min (5mm/s)extrude -5 - RETRACTER 5mm de filament У  300mm/min (5mm/s)extrude 10 210 - extruder 10mm de filament У  210mm/min (3.5mm/s)extrude 20 - extruder 20mm de filament У  300mm/min (5mm/s)fichier У  chargerhome - ramУЈne tous les axes У  l'origine et remet l'extrudeuse У  zУЉro (avec un G28 et un G92)home e - rУЉinitialise l'extrudeuse У  la position zУЉro (avec un G92)home xy - ramУЈne les axes x et y У  l'origine (avec un G28)home xyze - ramУЈne tous les axes У  l'origine et rУЉinitialise l'extrudeuse (avec un G28 et un G92)home z - ramУЈne l'axe z У  l'origine (avec un G28)charger ce fichier У  la place de .pronsolerc ; vous pouvez charger plusieurs fichiers de configuration, dans ce cas les paramУЈtres seront sauvegardУЉs dans le dernier fichier spУЉcifiУЉmm @mm de filament utilisУЉs pour cette impressionmm/ minmm/min Z:monitor - Rapporte les tempУЉratures et l'УЉtat d'impression SD (si applicable) toutes les 5 secondesmonitor 2 - Rapporte les tempУЉratures et l'УЉtat d'impression SD (si applicable) toutes les 2 secondesmove X 10 va dУЉplacer l'axe X en avant de 10mm У  %s mm/min (vitesse XY par dУЉfaut)move Y 10 5000 va dУЉplacer l'axe Y en avant de 10mm У  5000mm/minmove Z -1 va dУЉplacer l'axe Z vers le bas de 1mm У  %s mm/min (vitesse Z par dУЉfaut)la ligne de G-Code "%s" n'a pas pu УЊtre analysУЉereverse - rУЉtracte 5mm de filament У  300mm/min (5mm/s)reverse -5 - EXTRUDE 5mm de filament У  300mm/min (5mm/s)reverse 10 210 - rУЉtracte 10mm de filament У  210mm/min (3.5mm/s)reverse 20 - rУЉtracte 20mm de filament У  300mm/min (5mm/s)sdprint fichier.gУ‰chec de simarrangeskein fichier.stl - dУЉcouper fichier.stl en un gcodeskein fichier.stl view - dУЉcouper fichier.stl en un gcode et le visualiser avec skeinisoskein set - rУЉgler les paramУЈtres de dУЉcoupePrintrun-printrun-2.0.0rc5/locale/fr/LC_MESSAGES/pronterface.po000066400000000000000000001706641325617007000241450ustar00rootroot00000000000000# Pronterface Message Catalog Template # Copyright (C) 2011 Jonathan Marsden # Jonathan Marsden , 2011. # msgid "" msgstr "" "Project-Id-Version: Pronterface\n" "POT-Creation-Date: 2014-03-30 14:35+CEST\n" "PO-Revision-Date: 2013-11-02 13:58+0100\n" "Last-Translator: Guillaume Seguin \n" "Language-Team: FR \n" "Language: FranУЇais\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Poedit 1.5.7\n" "X-Poedit-SourceCharset: UTF-8\n" #: printrun/excluder.py:26 msgid "" "Part excluder: draw rectangles where print instructions should be ignored" msgstr "" "Exclueur de piУЈce: dessiner des rectangles lУ  oУЙ les instructions " "d'impressions doivent УЊtre ignorУЉes" #: printrun/excluder.py:27 printrun/excluder.py:29 msgid "Reset selection" msgstr "Remettre У  zУЉro la sУЉlection" #: printrun/gcodeplater.py:43 printrun/gcodeplater.py:44 msgid "GCODE files (*.gcode;*.GCODE;*.g)" msgstr "Fichiers GCODE (*.gcode;*.GCODE;*.g)" #: printrun/gcodeplater.py:112 printrun/gcodeplater.py:152 msgid "Warning: no rotation support for now, object won't be correctly rotated" msgstr "" "Attention: les rotations ne sont pas supportУЉes pour le moment, l'objet ne " "sera pas correctement tournУЉ" #: printrun/gcodeplater.py:141 printrun/gcodeplater.py:178 msgid "Exported merged G-Codes to %s" msgstr "G-Codes fusionnУЉs exportУЉs dans %s" #: printrun/gcview.py:352 msgid "Fit to plate" msgstr "Adapter au plateau" #: printrun/gcview.py:353 msgid "Fit to plate [F]" msgstr "Adapter au plateau [F]" #: printrun/gui/__init__.py:19 printrun/pronterface.py:45 msgid "WX is not installed. This program requires WX to run." msgstr "" "wxWidgets n'est pas installУЉ. Ce programme nУЉcessite la librairie wxWidgets " "pour fonctionner." #: printrun/gui/__init__.py:159 msgid "Commands" msgstr "Commandes" #: printrun/gui/__init__.py:160 msgid "Status" msgstr "У‰tat" #: printrun/gui/controls.py:126 msgid "Heat:" msgstr "Buse:" #: printrun/gui/controls.py:129 msgid "Switch Hotend Off" msgstr "У‰teindre la tУЊte chauffante" #: printrun/gui/controls.py:129 printrun/gui/controls.py:149 #: printrun/gui/toolbar.py:85 msgid "Off" msgstr "Off" #: printrun/gui/controls.py:137 msgid "Select Temperature for Hotend" msgstr "SУЉlectionner la tempУЉrature de la buse" #: printrun/gui/controls.py:141 msgid "Switch Hotend On" msgstr "Allumer la tУЊte chauffante" #: printrun/gui/controls.py:141 printrun/gui/controls.py:161 #: printrun/gui/controls.py:198 msgid "Set" msgstr "RУЉgler" #: printrun/gui/controls.py:146 printrun/gui/controls.py:215 msgid "Bed:" msgstr "Plateau :" #: printrun/gui/controls.py:149 msgid "Switch Heated Bed Off" msgstr "У‰teindre le plateau chauffant" #: printrun/gui/controls.py:157 msgid "Select Temperature for Heated Bed" msgstr "SУЉlectionner la tempУЉrature du plateau" #: printrun/gui/controls.py:161 msgid "Switch Heated Bed On" msgstr "Allumer le plateau chauffant" #: printrun/gui/controls.py:187 #, fuzzy msgid "Print speed:" msgstr "Impression interrompue У  : %s" #: printrun/gui/controls.py:192 printrun/gui/controls.py:207 msgid "%d%%" msgstr "" #: printrun/gui/controls.py:198 msgid "Set print speed factor" msgstr "" #: printrun/gui/controls.py:213 msgid "Heater:" msgstr "Buse:" #: printrun/gui/controls.py:265 msgid "Length:" msgstr "" #: printrun/gui/controls.py:267 msgid "mm" msgstr "mm" #: printrun/gui/controls.py:267 msgid "mm @" msgstr "mm @" #: printrun/gui/controls.py:269 msgid "Amount to Extrude or Retract (mm)" msgstr "Longueur У  extruder ou inverser (mm)" #: printrun/gui/controls.py:272 msgid "Extrude / Retract speed (mm/min)" msgstr "Vitesse d'extrusion/inversion (mm/min)" #: printrun/gui/controls.py:278 msgid "Speed:" msgstr "" #: printrun/gui/controls.py:279 msgid "" "mm/\n" "min" msgstr "" "mm/\n" "min" #: printrun/gui/controls.py:290 msgid "Tool:" msgstr "Outil:" #: printrun/gui/controls.py:293 msgid "Click to switch current extruder" msgstr "Cliquer pour changer l'extrudeur actif" #: printrun/gui/controls.py:310 msgid "Select current extruder" msgstr "SУЉlectionner l'extrudeur actif" #: printrun/gui/controls.py:371 msgid "Set Maximum Speed for X & Y axes (mm/min)" msgstr "DУЉfinir la vitesse maximale pour les axes X & Y (mm/min)" #: printrun/gui/controls.py:372 msgid "XY:" msgstr "XY:" #: printrun/gui/controls.py:374 msgid "mm/min Z:" msgstr "mm/min Z:" #: printrun/gui/controls.py:376 msgid "Set Maximum Speed for Z axis (mm/min)" msgstr "DУЉfinir la vitesse maximale pour l'axe Z (mm/min)" #: printrun/gui/graph.py:28 msgid "Temperature graph" msgstr "Graphe de tempУЉrature" #: printrun/gui/log.py:32 msgid "" "Send commands to printer\n" "(Type 'help' for simple\n" "help function)" msgstr "" "Envoyer des commandes У  l'imprimante\n" "(Taper 'help' pour avoir de l'aide)" #: printrun/gui/log.py:39 msgid "Send" msgstr "Envoyer" #: printrun/gui/log.py:39 msgid "Send Command to Printer" msgstr "Envoyer une commande У  l'imprimante" #: printrun/gui/toolbar.py:23 msgid "Lock" msgstr "Verrouiller" #: printrun/gui/toolbar.py:25 msgid "Lock graphical interface" msgstr "Verrouiller l'interface graphique" #: printrun/gui/toolbar.py:32 msgid "" "Communication Settings\n" "Click to rescan ports" msgstr "" "ParamУЈtres de communication\n" "Cliquer pour rescanner les ports" #: printrun/gui/toolbar.py:32 msgid "Port" msgstr "Port" #: printrun/gui/toolbar.py:37 msgid "Select Port Printer is connected to" msgstr "SУЉlectionner le port auquel l'imprimante est connectУЉe" #: printrun/gui/toolbar.py:46 msgid "Select Baud rate for printer communication" msgstr "SУЉlectionner la vitesse de communication" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1052 msgid "Connect" msgstr "Connecter" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1053 msgid "Connect to the printer" msgstr "Se connecter У  l'imprimante" #: printrun/gui/toolbar.py:61 msgid "Reset" msgstr "RУЉinitialiser" #: printrun/gui/toolbar.py:61 msgid "Reset the printer" msgstr "Remettre У  zУЉro l'imprimante" #: printrun/gui/toolbar.py:69 msgid "Load a 3D model file" msgstr "Charger un modУЈle 3D" #: printrun/gui/toolbar.py:69 msgid "Load file" msgstr "Charger un fichier" #: printrun/gui/toolbar.py:70 msgid "SD" msgstr "SD" #: printrun/gui/toolbar.py:70 msgid "SD Card Printing" msgstr "Impression depuis une carte SD" #: printrun/gui/toolbar.py:74 msgid "Start Printing Loaded File" msgstr "Commencer l'impression du fichier chargУЉ" #: printrun/gui/toolbar.py:74 printrun/pronterface.py:1003 #: printrun/pronterface.py:1062 printrun/pronterface.py:1078 #: printrun/pronterface.py:1363 printrun/pronterface.py:1445 msgid "Print" msgstr "Imprimer" #: printrun/gui/toolbar.py:80 msgid "Pause Current Print" msgstr "Mettre en pause l'impression" #: printrun/gui/toolbar.py:80 printrun/pronterface.py:1002 #: printrun/pronterface.py:1061 printrun/pronterface.py:1081 #: printrun/pronterface.py:1091 printrun/pronterface.py:1172 #: printrun/pronterface.py:1364 msgid "Pause" msgstr "Pause" #: printrun/gui/toolbar.py:85 msgid "Turn printer off" msgstr "У‰teindre l'imprimante" #: printrun/gui/viz.py:65 msgid "" "Click to examine / edit\n" " layers of loaded file" msgstr "Cliquer pour examiner / УЉditer les couches du fichier chargУЉ" #: printrun/gui/widgets.py:36 msgid "Find" msgstr "Trouver" #: printrun/gui/widgets.py:38 msgid "Save" msgstr "Enregistrer" #: printrun/gui/widgets.py:43 printrun/objectplater.py:76 #: printrun/pronterface.py:1257 printrun/pronterface.py:2017 msgid "Cancel" msgstr "Annuler" #: printrun/gui/widgets.py:70 msgid "Not Found!" msgstr "Non trouvУЉ !" #: printrun/gui/widgets.py:124 msgid "Printer settings" msgstr "ParamУЈtres de l'imprimante" #: printrun/gui/widgets.py:125 msgid "User interface" msgstr "Interface utilisateur" #: printrun/gui/widgets.py:126 #, fuzzy msgid "Colors" msgstr "Couleur" #: printrun/gui/widgets.py:127 msgid "External commands" msgstr "Commandes externes" #: printrun/gui/widgets.py:132 msgid "Edit settings" msgstr "Modifier les paramУЈtres" #: printrun/gui/widgets.py:135 msgid "Settings" msgstr "ParamУЈtres" #: printrun/gui/widgets.py:187 msgid "Custom button" msgstr "Commande personnalisУЉe" #: printrun/gui/widgets.py:193 msgid "Button title" msgstr "Titre du bouton" #: printrun/gui/widgets.py:196 msgid "Command" msgstr "Commande" #: printrun/gui/widgets.py:205 msgid "Color" msgstr "Couleur" #: printrun/gviz.py:29 msgid "Layer number and Z position show here when you scroll" msgstr "" "Le numУЉro de couche et la position en Z appairassent ici quand vous faites " "dУЉfiler les couches" #: printrun/gviz.py:39 msgid "Zoom In [+]" msgstr "Zoomer [+]" #: printrun/gviz.py:40 msgid "Zoom Out [-]" msgstr "DУЉzoomer [-]" #: printrun/gviz.py:42 msgid "Move Up a Layer [U]" msgstr "Voir la couche du dessus [U]" #: printrun/gviz.py:43 msgid "Move Down a Layer [D]" msgstr "Voir la couche du dessous [D]" #: printrun/gviz.py:44 msgid "Reset view" msgstr "RУЉinitialiser la vue" #: printrun/gviz.py:68 msgid "Gcode view, shift to move view, mousewheel to set layer" msgstr "" "Visualisation du Gcode, utiliser Maj pour dУЉplacer la vue, la roulette pour " "changer de couche" #: printrun/gviz.py:105 printrun/gviz.py:241 msgid "Layer %d - Going Up - Z = %.03f mm" msgstr "Couche %d - En montУЉe - Z = %.03f mm" #: printrun/gviz.py:250 msgid "Layer %d - Going Down - Z = %.03f mm" msgstr "Couche %d - En descente - Z = %.03f mm" #: printrun/objectplater.py:35 msgid "Plate building tool" msgstr "Outil de composition de plateau" #: printrun/objectplater.py:45 msgid "Clear" msgstr "Vider" #: printrun/objectplater.py:49 msgid "Load" msgstr "Charger" #: printrun/objectplater.py:53 msgid "Snap to Z = 0" msgstr "Placer en Z = 0" #: printrun/objectplater.py:57 msgid "Put at center" msgstr "Placer au centre" #: printrun/objectplater.py:61 msgid "Delete" msgstr "Supprimer" #: printrun/objectplater.py:65 msgid "Auto arrange" msgstr "Arrangement auto" #: printrun/objectplater.py:69 msgid "Export" msgstr "Exporter" #: printrun/objectplater.py:73 msgid "Done" msgstr "TerminУЉ" #: printrun/objectplater.py:151 msgid "Autoplating" msgstr "Placement auto" #: printrun/objectplater.py:199 msgid "Bed full, sorry sir :(" msgstr "Plateau plein, dУЉsolУЉ :(" #: printrun/objectplater.py:209 msgid "" "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" "УŠtes vous sur de vouloir vider le plateau ? Tous les changement non " "sauvegardУЉs seront perdus." #: printrun/objectplater.py:210 msgid "Clear the grid?" msgstr "Vider la grille ?" #: printrun/objectplater.py:256 msgid "Pick file to load" msgstr "Veuillez choisir le fichier У  charger" #: printrun/objectplater.py:267 msgid "Pick file to save to" msgstr "Veuillez choisir le fichier dans lequel enregistrer" #: printrun/plater.py:212 msgid "STL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad" msgstr "" "Fichiers STL (*.stl;*.STL)|*.stl;*.STL|Fichiers OpenSCAD (*.scad)|*.scad" #: printrun/plater.py:213 msgid "STL files (*.stl;*.STL)|*.stl;*.STL" msgstr "Fichiers STL (*.stl;*.STL)|*.stl;*.STL" #: printrun/plater.py:244 msgid "Loading STL file failed" msgstr "У‰chec de chargement du fichier STL" #: printrun/plater.py:244 printrun/plater.py:251 msgid "Error" msgstr "Erreur" #: printrun/plater.py:251 msgid "Loading OpenSCAD file failed" msgstr "У‰chec de chargement du fichier OpenSCAD" #: printrun/plater.py:284 msgid "Couldn't load non-existing file %s" msgstr "Impossible de charger le fichier inexistant %s" #: printrun/plater.py:360 msgid "Wrote plate to %s" msgstr "Plateau УЉcrit dans %s" #: printrun/plater.py:367 msgid "" "Failed to use simarrange for plating, falling back to the standard method" msgstr "" "Impossible d'utiliser simarrange pour faire l'arrangement, utilisation de la " "mУЉthode standard" #: printrun/plater.py:372 msgid "Autoplating using simarrange" msgstr "Arrangement automatique en utilisant simarrange" #: printrun/plater.py:387 msgid "Plate full, please remove some objects" msgstr "Plateau plein, veuillez retirer des objets" #: printrun/plater.py:404 msgid "simarrange failed" msgstr "У‰chec de simarrange" #: printrun/printcore.py:177 msgid "Could not connect to %s:%s:" msgstr "Impossible de se connecter У  %s:%s:" #: printrun/printcore.py:178 msgid "Socket error %s:" msgstr "Erreur rУЉseau %s:" #: printrun/printcore.py:191 printrun/printcore.py:196 msgid "Could not connect to %s at baudrate %s:" msgstr "Impossible de se connecter У  %s У  la vitesse %s:" #: printrun/printcore.py:192 msgid "Serial error: %s" msgstr "Erreur sУЉrie: %s" #: printrun/printcore.py:197 #, fuzzy msgid "IO error: %s" msgstr "Erreur sУЉrie: %s" #: printrun/printcore.py:231 msgid "Can't read from printer (disconnected?) (SelectError {0}): {1}" msgstr "" "Impossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (SelectError {0}): {1}" #: printrun/printcore.py:234 msgid "SelectError ({0}): {1}" msgstr "SelectError ({0}): {1}" #: printrun/printcore.py:237 msgid "Can't read from printer (disconnected?) (SerialException): {0}" msgstr "" "Impossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (SerialException): {0}" #: printrun/printcore.py:240 msgid "Can't read from printer (disconnected?) (Socket error {0}): {1}" msgstr "" "Impossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (Socket error {0}): " "{1}" #: printrun/printcore.py:245 msgid "Can't read from printer (disconnected?) (OS Error {0}): {1}" msgstr "" "Impossible de lire depuis l'imprimante (dУЉconnectУЉe ?) (OS Error {0}): {1}" #: printrun/printcore.py:259 msgid "Aborting connection attempt after 4 failed writes." msgstr "Annulation de la tentative de connexion suite У  4 envois УЉchouУЉs." #: printrun/printcore.py:462 printrun/printcore.py:470 #: printrun/pronsole.py:1192 printrun/pronsole.py:1250 #: printrun/pronterface.py:209 printrun/pronterface.py:962 #: printrun/pronterface.py:1111 printrun/pronterface.py:1178 msgid "Not connected to printer." msgstr "Imprimante non connectУЉe." #: printrun/printcore.py:479 msgid "Print start callback failed with:" msgstr "La fonction de rappel de dУЉbut d'impression a УЉchouУЉ:" #: printrun/printcore.py:490 msgid "Print end callback failed with:" msgstr "La fonction de rappel de fin d'impression a УЉchouУЉ:" #: printrun/printcore.py:493 msgid "Print thread died due to the following error:" msgstr "Le fil d'impression a УЉchouУЉ У  cause de l'erreur suivante:" #: printrun/printcore.py:584 #, fuzzy msgid "Could not analyze command %s:" msgstr "Attention: impossible d'analyzer la commande %s:" #: printrun/printcore.py:601 #, fuzzy msgid "Can't write to printer (disconnected ?):" msgstr "" "Impossible d'УЉcrire У  l'imprimante (dУЉconnectУЉe ?) (SerialException): {0}" #: printrun/printcore.py:604 msgid "Can't write to printer (disconnected?) (Socket error {0}): {1}" msgstr "" "Impossible d'УЉcrire У  l'imprimante (dУЉconnectУЉe ?) (Socket error {0}): {1}" #: printrun/printcore.py:607 msgid "Can't write to printer (disconnected?) (SerialException): {0}" msgstr "" "Impossible d'УЉcrire У  l'imprimante (dУЉconnectУЉe ?) (SerialException): {0}" #: printrun/printcore.py:610 msgid "Socket connection broken, disconnected. ({0}): {1}" msgstr "La connection par socket a cassУЉ, dУЉconnexion. ({0}): {1}" #: printrun/pronsole.py:72 msgid "Default: " msgstr "DУЉfaut: " #: printrun/pronsole.py:73 msgid "(Control-doubleclick to reset to default value)" msgstr "" "(Effectuer un Control+double click pour revenir У  la valeur par dУЉfaut)" #: printrun/pronsole.py:108 msgid "" "Are you sure you want to reset the setting to the default value: {0!r} ?" msgstr "" "Etes-vous sУЛr de vouloir rУЉinitialiser ce paramУЈtre У  sa valeur par dУЉfaut : " "{0!r} ?" #: printrun/pronsole.py:108 msgid "Confirm set default" msgstr "Confirmation de retour au dУЉfaut" #: printrun/pronsole.py:258 msgid "Width" msgstr "Largeur" #: printrun/pronsole.py:261 msgid "Depth" msgstr "Longueur" #: printrun/pronsole.py:264 msgid "Height" msgstr "Hauteur" #: printrun/pronsole.py:267 msgid "X offset" msgstr "Offset en X" #: printrun/pronsole.py:270 msgid "Y offset" msgstr "Offset en Y" #: printrun/pronsole.py:273 msgid "Z offset" msgstr "Offset en Z" #: printrun/pronsole.py:276 msgid "X home pos." msgstr "Position du homing en X" #: printrun/pronsole.py:279 msgid "Y home pos." msgstr "Position du homing en Y" #: printrun/pronsole.py:282 msgid "Z home pos." msgstr "Position du homing en Z" #: printrun/pronsole.py:301 msgid "Port used to communicate with printer" msgstr "Port utilisУЉ pour communiquer avec l'imprimante" #: printrun/pronsole.py:301 msgid "Serial port" msgstr "Port sУЉrie" #: printrun/pronsole.py:302 msgid "Baud rate" msgstr "DУЉbit de la communication" #: printrun/pronsole.py:302 msgid "Communications Speed" msgstr "Vitesse de communication" #: printrun/pronsole.py:303 msgid "TCP streaming mode" msgstr "" #: printrun/pronsole.py:303 msgid "" "When using a TCP connection to the printer, the streaming mode will not wait " "for acks from the printer to send new commands. This will break things such " "as ETA prediction, but can result in smoother prints." msgstr "" #: printrun/pronsole.py:304 msgid "Bed temperature for ABS" msgstr "TempУЉrature du lit pour l'ABS" #: printrun/pronsole.py:304 msgid "Heated Build Platform temp for ABS (deg C)" msgstr "TempУЉrature du plateau pour l'ABS (deg C)" #: printrun/pronsole.py:305 msgid "Bed temperature for PLA" msgstr "TempУЉrature du lit pour le PLA" #: printrun/pronsole.py:305 msgid "Heated Build Platform temp for PLA (deg C)" msgstr "TempУЉrature du plateau pour le PLA (deg C)" #: printrun/pronsole.py:306 msgid "Extruder temp for ABS (deg C)" msgstr "TempУЉrature de l'extrudeuse pour l'ABS (deg C)" #: printrun/pronsole.py:306 msgid "Extruder temperature for ABS" msgstr "TempУЉrature de l'extrudeuse pour l'ABS" #: printrun/pronsole.py:307 msgid "Extruder temp for PLA (deg C)" msgstr "TempУЉrature de l'extrudeuse pour le PLA (deg C)" #: printrun/pronsole.py:307 msgid "Extruder temperature for PLA" msgstr "TempУЉrature de l'extrudeuse pour le PLA" #: printrun/pronsole.py:308 msgid "Feedrate for Control Panel Moves in X and Y (mm/min)" msgstr "Vitesse pour les dУЉplacements manuels en X et Y (mm/min)" #: printrun/pronsole.py:308 msgid "X && Y manual feedrate" msgstr "Vitesse manuelle X && Y" #: printrun/pronsole.py:309 msgid "Feedrate for Control Panel Moves in Z (mm/min)" msgstr "Vitesse pour les dУЉplacements manuels en Z (mm/min)" #: printrun/pronsole.py:309 msgid "Z manual feedrate" msgstr "Vitesse manuelle Z" #: printrun/pronsole.py:310 msgid "E manual feedrate" msgstr "Vitesse manuelle E" #: printrun/pronsole.py:310 msgid "Feedrate for Control Panel Moves in Extrusions (mm/min)" msgstr "Vitesse pour les dУЉplacements manuels en E (mm/min)" #: printrun/pronsole.py:311 msgid "Slice command" msgstr "Commande de slicing" #: printrun/pronsole.py:312 msgid "Slice settings command" msgstr "Commande pour les paramУЈtres du slicer" #: printrun/pronsole.py:312 msgid "Slicer options command" msgstr "Commande pour " #: printrun/pronsole.py:313 msgid "Executable to run when the print is finished" msgstr "ExУЉcutable У  exУЉcuter quand l'impression est terminУЉe" #: printrun/pronsole.py:313 msgid "Final command" msgstr "Script post-impression" #: printrun/pronsole.py:314 #, fuzzy msgid "Error command" msgstr "Commandes externes" #: printrun/pronsole.py:314 #, fuzzy msgid "Executable to run when an error occurs" msgstr "ExУЉcutable У  exУЉcuter quand l'impression est terminУЉe" #: printrun/pronsole.py:381 msgid "Failed to run callback after setting \"%s\":" msgstr "" #: printrun/pronsole.py:469 msgid "Build dimensions" msgstr "Dimensions utiles" #: printrun/pronsole.py:469 msgid "" "Dimensions of Build Platform\n" " & optional offset of origin\n" " & optional switch position\n" "\n" "Examples:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+OffX+OffY+OffZ\n" "XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ" msgstr "" "Dimensions de la plateforme d'impression\n" " & offset de l'origine\n" " & position des endstops\n" "\n" "Exemples:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+OffX+OffY+OffZ\n" "XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ" #: printrun/pronsole.py:495 msgid "" "Welcome to the printer console! Type \"help\" for a list of available " "commands." msgstr "" #: printrun/pronsole.py:657 printrun/pronsole.py:665 printrun/pronsole.py:673 #: printrun/pronsole.py:1519 printrun/pronsole.py:1546 #: printrun/pronsole.py:1618 printrun/pronterface.py:357 #: printrun/pronterface.py:377 printrun/pronterface.py:394 msgid "Printer is not online." msgstr "Imprimante dУЉconnectУЉe." #: printrun/pronsole.py:692 msgid "Exiting program. Goodbye!" msgstr "Fin du programme. Au revoir !" #: printrun/pronsole.py:697 msgid "Disconnects from the printer and exits the program." msgstr "DУЉconnecte l'imprimante et quitte le programme." #: printrun/pronsole.py:974 msgid "" "load this file on startup instead of .pronsolerc ; you may chain config " "files, if so settings auto-save will use the last specified file" msgstr "" "charger ce fichier У  la place de .pronsolerc ; vous pouvez charger plusieurs " "fichiers de configuration, dans ce cas les paramУЈtres seront sauvegardУЉs " "dans le dernier fichier spУЉcifiУЉ" #: printrun/pronsole.py:975 msgid "" "executes command after configuration/.pronsolerc is loaded ; macros/settings " "from these commands are not autosaved" msgstr "" "exУЉcute une commande aprУЈs le chargement de la configuration/.pronsolerc ; " "les macros et paramУЈtres de ces commandes ne seront pas sauvegardУЉes " "automatiquement" #: printrun/pronsole.py:976 msgid "file to load" msgstr "fichier У  charger" #: printrun/pronsole.py:1104 #, fuzzy msgid "Loaded %s, %d lines." msgstr "%s chargУЉ, %d lignes" #: printrun/pronsole.py:1105 printrun/pronterface.py:1381 #, fuzzy msgid "Estimated duration: %d layers, %s" msgstr "DurУЉe estimУЉe : %s" #: printrun/pronsole.py:1134 msgid "No file name given." msgstr "Aucun nom de fichier fourni." #: printrun/pronsole.py:1140 msgid "Skeining file: %s" msgstr "DУЉcoupe du fichier: %s" #: printrun/pronsole.py:1142 printrun/pronterface.py:1305 msgid "File not found!" msgstr "Fichier non trouvУЉ" #: printrun/pronsole.py:1147 msgid "Entering slicer settings: %s" msgstr "AccУЈs au paramУЈtres de dУЉcoupУЉe: %s" #: printrun/pronsole.py:1151 msgid "Slicing: " msgstr "Slicing :" #: printrun/pronsole.py:1158 msgid "Loading sliced file." msgstr "Chargement du fichier slicУЉ." #: printrun/pronsole.py:1161 msgid "Slicing failed: %s" msgstr "У‰chec de la dУЉcoupe: %s" #: printrun/pronsole.py:1174 msgid "" "Creates a gcode file from an stl model using the slicer (with tab-completion)" msgstr "" "CrУЉe un fichier gcode У  partir d'un modУЈle stl avec la dУЉcoupeuse (avec tab-" "complУЉtion)" #: printrun/pronsole.py:1175 #, fuzzy msgid "slice filename.stl - create gcode file" msgstr "skein fichier.stl - dУЉcouper fichier.stl en un gcode" #: printrun/pronsole.py:1176 #, fuzzy msgid "" "slice filename.stl view - create gcode file and view using skeiniso (if " "using skeinforge)" msgstr "" "skein fichier.stl view - dУЉcouper fichier.stl en un gcode et le visualiser " "avec skeiniso" #: printrun/pronsole.py:1177 #, fuzzy msgid "slice set - adjust slicer settings" msgstr "skein set - rУЉgler les paramУЈtres de dУЉcoupe" #: printrun/pronsole.py:1189 msgid "Please enter target name in 8.3 format." msgstr "Veuillez entrer un nom au format 8.3." #: printrun/pronsole.py:1195 msgid "Uploading as %s" msgstr "Envoi en tant que %s" #: printrun/pronsole.py:1196 msgid "Uploading %s" msgstr "Envoi de %s" #: printrun/pronsole.py:1198 msgid "Press Ctrl-C to interrupt upload." msgstr "Appuyer sur Ctrl-C pour interrompre l'envoi." #: printrun/pronsole.py:1201 msgid "Progress: " msgstr "ProgrУЈs :" #: printrun/pronsole.py:1212 msgid "Upload completed. %s should now be on the card." msgstr "Envoi terminУЉ. %s devrait maintenant se trouver sur la carte." #: printrun/pronsole.py:1216 msgid "...interrupted!" msgstr "...interrompu !" #: printrun/pronsole.py:1218 msgid "Something wrong happened while uploading:" msgstr "" #: printrun/pronsole.py:1224 msgid "A partial file named %s may have been written to the sd card." msgstr "Un fichier incomplet nommУЉ %s peut avoir УЉtУЉ УЉcrit sur la carte SD." #: printrun/pronsole.py:1241 msgid "" "Send a loaded gcode file to the printer. Load a file with the load command " "first." msgstr "" "Envoyer un fichier gcode chargУЉ У  l'imprimante. Veuillez d'abord charger un " "fichier avec la commande \"load\"." #: printrun/pronsole.py:1243 msgid "Send a loaded gcode file to the printer. You have %s loaded right now." msgstr "" "Envoyer un fichier gcode chargУЉ У  l'imprimante. %s est chargУЉ pour l'instant." #: printrun/pronsole.py:1247 printrun/pronterface.py:730 #: printrun/pronterface.py:1108 msgid "No file loaded. Please use load first." msgstr "Aucun fichier chargУЉ. Veuillez charger un fichier avant." #: printrun/pronsole.py:1252 msgid "Printing %s" msgstr "Impression de %s" #: printrun/pronsole.py:1253 msgid "You can monitor the print with the monitor command." msgstr "Vous pouvez suivre l'impression avec la commande \"monitor\"." #: printrun/pronsole.py:1261 msgid "Not printing, cannot pause." msgstr "Pas d'impression en cours, impossible de mettre en pause." #: printrun/pronsole.py:1267 msgid "Pauses a running print" msgstr "Met en pause l'impression en cours" #: printrun/pronsole.py:1274 msgid "Not paused, unable to resume. Start a print first." msgstr "" "Pas d'impression en pause, impossible de continuer. Veuillez d'abord lancer " "une impression." #: printrun/pronsole.py:1284 msgid "Resumes a paused print." msgstr "Continue une impression en pause." #: printrun/pronsole.py:1293 msgid "Files on SD card:" msgstr "Fichiers sur la carte SD :" #: printrun/pronsole.py:1307 printrun/pronsole.py:1349 #: printrun/pronsole.py:1562 msgid "Printer is not online. Please connect to it first." msgstr "Imprimante dУЉconnectУЉe. Veuillez vous y connecter." #: printrun/pronsole.py:1312 msgid "Lists files on the SD card" msgstr "Liste les fichiers sur la carte SD" #: printrun/pronsole.py:1316 printrun/pronterface.py:1645 msgid "Opening file failed." msgstr "L'ouverture du fichier a УЉchouУЉ" #: printrun/pronsole.py:1322 printrun/pronterface.py:1651 msgid "Starting print" msgstr "DУЉbut de l'impression..." #: printrun/pronsole.py:1345 msgid "Resets the printer." msgstr "Remet У  zУЉro l'imprimante." #: printrun/pronsole.py:1355 msgid "File is not present on card. Please upload it first." msgstr "Le fichier n'est pas sur la carte, veuillez d'abord l'y envoyer." #: printrun/pronsole.py:1359 msgid "Printing file: %s from SD card." msgstr "Impression du fichier %s depuis la carte SD" #: printrun/pronsole.py:1360 msgid "Requesting SD print..." msgstr "Demande de l'impression depuis la carte SD..." #: printrun/pronsole.py:1364 msgid "Print a file from the SD card. Tab completes with available file names." msgstr "" "Imprimer un fichier depuis la carte SD. La touche Tab complУЉtera les " "fichiers disponibles." #: printrun/pronsole.py:1365 msgid "sdprint filename.g" msgstr "sdprint fichier.g" #: printrun/pronsole.py:1382 msgid "Print resumed at: %s" msgstr "Impression relancУЉe У  : %s" #: printrun/pronsole.py:1384 msgid "Print started at: %s" msgstr "Impression lancУЉe У  : %s" #: printrun/pronsole.py:1392 msgid "Failed to inhibit sleep:" msgstr "" #: printrun/pronsole.py:1399 msgid "Failed to uninhibit sleep:" msgstr "" #: printrun/pronsole.py:1403 msgid "Print ended at: %(end_time)s and took %(duration)s" msgstr "Impression terminУЉe У  : %(end_time)s aprУЈs avoir durУЉ %(duration)s" #: printrun/pronsole.py:1457 msgid "Printer is not currently printing. No ETA available." msgstr "" #: printrun/pronsole.py:1460 #, fuzzy msgid "Est: %s of %s remaining" msgstr " ETA: %s restant sur %s | " #: printrun/pronsole.py:1465 msgid "Displays estimated remaining print time." msgstr "" #: printrun/pronsole.py:1498 msgid "Read the extruder and bed temperature." msgstr "Lire la tempУЉrature de l'extrudeuse et du plateau." #: printrun/pronsole.py:1507 printrun/pronsole.py:1540 msgid "You must enter a temperature." msgstr "Vous devez saisir une tempУЉrature." #: printrun/pronsole.py:1512 msgid "" "%s is a high temperature to set your extruder to. Are you sure you want to " "do that?" msgstr "" "%s est une tempУЉrature УЉlevУЉe pour une extrudeuse. УŠtes-vous sУЛr de vouloir " "faire УЇa ?" #: printrun/pronsole.py:1517 msgid "Setting hotend temperature to %s degrees Celsius." msgstr "RУЉglage de la tempУЉrature de la buse У  %s degrУЉs Celsius." #: printrun/pronsole.py:1521 printrun/pronterface.py:359 msgid "" "You cannot set negative temperatures. To turn the hotend off entirely, set " "its temperature to 0." msgstr "" "Vous ne pouvez pas rУЉgler une tempУЉrature nУЉgative. Pour УЉteindre la buse, " "rУЉglez sa tempУЉrature У  0ТАC." #: printrun/pronsole.py:1524 msgid "Sets the hotend temperature to the value entered." msgstr "RУЈgle de la tempУЉrature de la buse У  la valeur saisie." #: printrun/pronsole.py:1525 printrun/pronsole.py:1552 msgid "Enter either a temperature in celsius or one of the following keywords" msgstr "" "Entrez soit une tempУЉrature en degrУЉs celsius soit un des mots-clУЉs suivants" #: printrun/pronsole.py:1544 msgid "Setting bed temperature to %s degrees Celsius." msgstr "RУЉglage de la tempУЉrature du plateau У  %s degrУЉs Celsius." #: printrun/pronsole.py:1548 printrun/pronterface.py:379 msgid "" "You cannot set negative temperatures. To turn the bed off entirely, set its " "temperature to 0." msgstr "" "Vous ne pouvez pas rУЉgler une tempУЉrature nУЉgative. Pour dУЉsactiver votre " "plateau chauffant, rУЉglez sa tempУЉrature У  0ТАC." #: printrun/pronsole.py:1551 msgid "Sets the bed temperature to the value entered." msgstr "RУЈgle de la tempУЉrature du plateau У  la valeur saisie." #: printrun/pronsole.py:1565 msgid "Printer is not printing. Please print something before monitoring." msgstr "" "L'imprimante n'est pas en cours d'impression. Veuillez lancer une impression " "avant d'activer le suivi." #: printrun/pronsole.py:1567 msgid "Monitoring printer, use ^C to interrupt." msgstr "Imprimante sous surveillance, utiliser ^C pour interrompre." #: printrun/pronsole.py:1572 printrun/pronterface.py:329 msgid "Invalid period given." msgstr "La pУЉriode donnУЉe est invalide" #: printrun/pronsole.py:1573 msgid "Updating values every %f seconds." msgstr "Mise У  jour des valeurs toutes les %f secondes." #: printrun/pronsole.py:1584 printrun/pronsole.py:1587 msgid "Print progress: " msgstr "ProgrУЈs de l'impression : " #: printrun/pronsole.py:1595 printrun/pronterface.py:333 msgid "Done monitoring." msgstr "Surveillance de l'imprimante effectuУЉe." #: printrun/pronsole.py:1599 msgid "Monitor a machine's temperatures and an SD print's status." msgstr "Monitorer les tempУЉratures de la machine et l'УЉtat de l'impression SD" #: printrun/pronsole.py:1600 msgid "" "monitor - Reports temperature and SD print status (if SD printing) every 5 " "seconds" msgstr "" "monitor - Rapporte les tempУЉratures et l'УЉtat d'impression SD (si " "applicable) toutes les 5 secondes" #: printrun/pronsole.py:1601 msgid "" "monitor 2 - Reports temperature and SD print status (if SD printing) every 2 " "seconds" msgstr "" "monitor 2 - Rapporte les tempУЉratures et l'УЉtat d'impression SD (si " "applicable) toutes les 2 secondes" #: printrun/pronsole.py:1612 msgid "You must specify the tool index as an integer." msgstr "Vous devez spУЉcifier l'indice de l'outil avec un entier." #: printrun/pronsole.py:1616 msgid "Using tool %d." msgstr "Utilisation de l'outil %d." #: printrun/pronsole.py:1620 msgid "You cannot set negative tool numbers." msgstr "Vous ne pouvez pas choisir des indices d'outil nУЉgatifs." #: printrun/pronsole.py:1623 msgid "" "Switches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code)." msgstr "" "Passer У  l'outil spУЉcifiУЉ (e.g. faire \"tool 1\" enverra un G-Code T1)." #: printrun/pronsole.py:1627 msgid "No move specified." msgstr "Aucun dУЉplacement spУЉcifiУЉ." #: printrun/pronsole.py:1630 printrun/pronsole.py:1692 #: printrun/pronsole.py:1735 printrun/pronsole.py:1762 msgid "" "Printer is currently printing. Please pause the print before you issue " "manual commands." msgstr "" "L'imprimante est actuellement en train d'imprimer. Veuillez mettre " "l'impression en pause avant d'envoyer des commandes manuelles." #: printrun/pronsole.py:1633 printrun/pronsole.py:1759 msgid "Printer is not online. Unable to move." msgstr "Imprimante dУЉconnectУЉe. Impossible de bouger." #: printrun/pronsole.py:1649 msgid "Unknown axis." msgstr "Axe inconnu." #: printrun/pronsole.py:1654 msgid "Invalid distance" msgstr "Distance invalide" #: printrun/pronsole.py:1665 msgid "Move an axis. Specify the name of the axis and the amount. " msgstr "DУЉplacer un axe. SpУЉcifier le nom de l'axe et la distance." #: printrun/pronsole.py:1666 msgid "" "move X 10 will move the X axis forward by 10mm at %s mm/min (default XY " "speed)" msgstr "" "move X 10 va dУЉplacer l'axe X en avant de 10mm У  %s mm/min (vitesse XY par " "dУЉfaut)" #: printrun/pronsole.py:1667 msgid "move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/min" msgstr "move Y 10 5000 va dУЉplacer l'axe Y en avant de 10mm У  5000mm/min" #: printrun/pronsole.py:1668 msgid "" "move Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)" msgstr "" "move Z -1 va dУЉplacer l'axe Z vers le bas de 1mm У  %s mm/min (vitesse Z par " "dУЉfaut)" #: printrun/pronsole.py:1669 msgid "Common amounts are in the tabcomplete list." msgstr "Des longueurs standard sont dans la liste de tabcomplУЉtion." #: printrun/pronsole.py:1699 printrun/pronsole.py:1742 msgid "Invalid length given." msgstr "La longueur donnУЉe est invalide." #: printrun/pronsole.py:1704 printrun/pronsole.py:1747 msgid "Invalid speed given." msgstr "La vitesse donnУЉe est invalide." #: printrun/pronsole.py:1712 msgid "Extruding %fmm of filament." msgstr "Extrusion de %fmm de filament." #: printrun/pronsole.py:1714 msgid "Reversing %fmm of filament." msgstr "RУЉtractation de %fmm de filament." #: printrun/pronsole.py:1716 msgid "Length is 0, not doing anything." msgstr "Longueur nulle, rien У  faire." #: printrun/pronsole.py:1722 msgid "" "Extrudes a length of filament, 5mm by default, or the number of mm given as " "a parameter" msgstr "" "Extruder une longueur de filament, 5mm par dУЉfaut, ou le nombre de mm " "spУЉcifiУЉs en paramУЈtre" #: printrun/pronsole.py:1723 msgid "extrude - extrudes 5mm of filament at 300mm/min (5mm/s)" msgstr "extrude - extruder 5mm de filament У  300mm/min (5mm/s)" #: printrun/pronsole.py:1724 msgid "extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)" msgstr "extrude 20 - extruder 20mm de filament У  300mm/min (5mm/s)" #: printrun/pronsole.py:1725 msgid "extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)" msgstr "extrude -5 - RETRACTER 5mm de filament У  300mm/min (5mm/s)" #: printrun/pronsole.py:1726 msgid "extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "extrude 10 210 - extruder 10mm de filament У  210mm/min (3.5mm/s)" #: printrun/pronsole.py:1732 msgid "Printer is not online. Unable to reverse." msgstr "Imprimante dУЉconnectУЉe. Impossible de retirer." #: printrun/pronsole.py:1751 msgid "" "Reverses the extruder, 5mm by default, or the number of mm given as a " "parameter" msgstr "" "RУЉtracte l'extrudeuse, de 5mm par dУЉfaut, ou du nombre de mm donnУЉs en " "paramУЈtre" #: printrun/pronsole.py:1752 msgid "reverse - reverses 5mm of filament at 300mm/min (5mm/s)" msgstr "reverse - rУЉtracte 5mm de filament У  300mm/min (5mm/s)" #: printrun/pronsole.py:1753 msgid "reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)" msgstr "reverse 20 - rУЉtracte 20mm de filament У  300mm/min (5mm/s)" #: printrun/pronsole.py:1754 msgid "reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "reverse 10 210 - rУЉtracte 10mm de filament У  210mm/min (3.5mm/s)" #: printrun/pronsole.py:1755 msgid "reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)" msgstr "reverse -5 - EXTRUDE 5mm de filament У  300mm/min (5mm/s)" #: printrun/pronsole.py:1777 msgid "Homes the printer" msgstr "RamУЈne l'imprimante У  zУЉro" #: printrun/pronsole.py:1778 msgid "home - homes all axes and zeroes the extruder(Using G28 and G92)" msgstr "" "home - ramУЈne tous les axes У  l'origine et remet l'extrudeuse У  zУЉro (avec " "un G28 et un G92)" #: printrun/pronsole.py:1779 msgid "home xy - homes x and y axes (Using G28)" msgstr "home xy - ramУЈne les axes x et y У  l'origine (avec un G28)" #: printrun/pronsole.py:1780 msgid "home z - homes z axis only (Using G28)" msgstr "home z - ramУЈne l'axe z У  l'origine (avec un G28)" #: printrun/pronsole.py:1781 msgid "home e - set extruder position to zero (Using G92)" msgstr "home e - rУЉinitialise l'extrudeuse У  la position zУЉro (avec un G92)" #: printrun/pronsole.py:1782 msgid "home xyze - homes all axes and zeroes the extruder (Using G28 and G92)" msgstr "" "home xyze - ramУЈne tous les axes У  l'origine et rУЉinitialise l'extrudeuse " "(avec un G28 et un G92)" #: printrun/pronsole.py:1790 msgid "; Motors off" msgstr "; ArrУЊt moteur" #: printrun/pronsole.py:1792 msgid "; Extruder off" msgstr "; ArrУЊt extrudeuse" #: printrun/pronsole.py:1794 msgid "; Heatbed off" msgstr "; ArrУЊt plateau chauffant" #: printrun/pronsole.py:1796 msgid "; Fan off" msgstr "; ArrУЊt ventilateur" #: printrun/pronsole.py:1798 msgid "; Power supply off" msgstr "; ArrУЊt alimentation" #: printrun/pronsole.py:1801 msgid "Printer is not online. Unable to turn it off." msgstr "Imprimante dУЉconnectУЉe. Impossible de l'УЉteindre." #: printrun/pronsole.py:1804 msgid "Turns off everything on the printer" msgstr "У‰teint tout sur l'imprimante" #: printrun/pronsole.py:1815 msgid "G-Code calling host command \"%s\"" msgstr "" #: printrun/pronsole.py:1824 msgid "" "Runs a custom script. Current gcode filename can be given using %s token." msgstr "" #: printrun/pronsole.py:1832 msgid "" "Runs a custom script which output gcode which will in turn be executed. " "Current gcode filename can be given using %s token." msgstr "" #: printrun/pronterface.py:149 msgid "Motors off" msgstr "ArrУЊter les moteurs" #: printrun/pronterface.py:149 msgid "Switch all motors off" msgstr "ArrУЊter tous les moteurs" #: printrun/pronterface.py:150 msgid "Advance extruder by set length" msgstr "Extruder sur la longueur donnУЉe" #: printrun/pronterface.py:150 msgid "Extrude" msgstr "Extruder" #: printrun/pronterface.py:151 msgid "Reverse" msgstr "Inverser" #: printrun/pronterface.py:151 msgid "Reverse extruder by set length" msgstr "Inverser l'extrudeur sur la longueur donnУЉe" #: printrun/pronterface.py:165 msgid "Pronterface" msgstr "Pronterface" #: printrun/pronterface.py:192 msgid "" "# I moved all your custom buttons into .pronsolerc.\n" "# Please don't add them here any more.\n" "# Backup of your old buttons is in custombtn.old\n" msgstr "" "# Tous vos boutons personalisУЉs ont УЉtУЉ dУЉplacУЉs dans le fichier ." "pronsolerc.\n" "# Veuillez ne plus en ajouter ici.\n" "# Une sauvegarde de vos anciens boutons est dans le fichier custombtn.old\n" #: printrun/pronterface.py:197 msgid "" "Note!!! You have specified custom buttons in both custombtn.txt and ." "pronsolerc" msgstr "" "Remarque! Vous avez spУЉcifiУЉ des boutons personnalisУЉs dans custombtn.txt et " "aussi dans .pronsolerc" #: printrun/pronterface.py:198 msgid "" "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgstr "" "custombtn.txt ignorУЉ. Retirez tous les boutons en cours pour revenir У  " "custombtn.txt" #: printrun/pronterface.py:331 msgid "Monitoring printer." msgstr "Imprimante sous surveillance." #: printrun/pronterface.py:354 msgid "Setting hotend temperature to %f degrees Celsius." msgstr "RУЉglage de la tempУЉrature de la buse У  %f degrУЉs Celsius." #: printrun/pronterface.py:361 printrun/pronterface.py:381 msgid "You must enter a temperature. (%s)" msgstr "Vous devez saisir une tempУЉrature. (%s)" #: printrun/pronterface.py:374 msgid "Setting bed temperature to %f degrees Celsius." msgstr "RУЉglage de la tempУЉrature du plateau У  %f degrУЉs Celsius." #: printrun/pronterface.py:392 msgid "Setting print speed factor to %d%%." msgstr "" #: printrun/pronterface.py:396 #, fuzzy msgid "You must enter a speed. (%s)" msgstr "Vous devez saisir une tempУЉrature. (%s)" #: printrun/pronterface.py:470 msgid "Plate function activated" msgstr "Fonction de composition activУЉe" #: printrun/pronterface.py:479 #, fuzzy msgid "G-Code plate function activated" msgstr "Fonction de composition activУЉe" #: printrun/pronterface.py:486 msgid "Plated %s" msgstr "Plateau crУЉУЉ %s" #: printrun/pronterface.py:500 msgid "SD Upload" msgstr "Copier sur SD" #: printrun/pronterface.py:504 msgid "SD Print" msgstr "Imprimer depuis SD" #: printrun/pronterface.py:565 msgid "" "Manual move outside of the build volume prevented (see the \"Clamp manual " "moves\" option)." msgstr "" "DУЉplacement en dehors du volume d'impression inhibУЉ (voir l'option \"Limiter " "les mouvements manuels\")." #: printrun/pronterface.py:621 msgid "" "Attempted to write invalid text to console, which could be due to an invalid " "baudrate" msgstr "" "Impossible de transcrire un message dans la console, possiblement У  cause " "d'un mauvais rУЉglage du baudrate." #: printrun/pronterface.py:655 msgid " Opens file" msgstr " Ouvrir un fichier" #: printrun/pronterface.py:655 msgid "&Open..." msgstr "&Ouvrir..." #: printrun/pronterface.py:663 msgid " Clear output console" msgstr " Effacer le contenu de la console de sortie" #: printrun/pronterface.py:663 msgid "Clear console" msgstr "Effacer la console" #: printrun/pronterface.py:664 msgid " Closes the Window" msgstr " Quitter le programme" #: printrun/pronterface.py:664 msgid "E&xit" msgstr "&Quitter" #: printrun/pronterface.py:665 msgid "&File" msgstr "&Fichier" #: printrun/pronterface.py:668 msgid " Edit open file" msgstr " У‰diter le fichier ouvert" #: printrun/pronterface.py:668 msgid "&Edit..." msgstr "&У‰diter..." #: printrun/pronterface.py:669 msgid " Compose 3D models into a single plate" msgstr "Composer plusieurs modУЈles 3D en un seul plateau" #: printrun/pronterface.py:669 msgid "Plater" msgstr "Plater" #: printrun/pronterface.py:670 #, fuzzy msgid " Compose G-Codes into a single plate" msgstr "Composer plusieurs modУЈles 3D en un seul plateau" #: printrun/pronterface.py:670 #, fuzzy msgid "G-Code Plater" msgstr "Plater" #: printrun/pronterface.py:671 msgid " Exclude parts of the bed from being printed" msgstr "Exclure des piУЈces du plateau lors de l'impression" #: printrun/pronterface.py:671 msgid "Excluder" msgstr "Exclueur" #: printrun/pronterface.py:672 msgid " Project slices" msgstr " Projeter les couches" #: printrun/pronterface.py:672 msgid "Projector" msgstr "Projecteur" #: printrun/pronterface.py:673 msgid "&Tools" msgstr "&Outils" #: printrun/pronterface.py:676 msgid "" " Recover previous print after a disconnect (homes X, Y, restores Z and E " "status)" msgstr "" " RУЉcupУЉrer l'impression prУЉcУЉdente aprУЈs une dУЉconnexion (ramУЈne X, Y У  0, " "restaure l'УЉtat de Z et E)" #: printrun/pronterface.py:676 msgid "Recover" msgstr "RУЉcupУЉrer" #: printrun/pronterface.py:679 msgid "&Advanced" msgstr "&AvancУЉ" #: printrun/pronterface.py:686 msgid "Print &settings" msgstr "ParamУЈtres d'impre&ssion" #: printrun/pronterface.py:687 msgid "&Filament" msgstr "&Filament" #: printrun/pronterface.py:688 msgid "&Printer" msgstr "&Imprimante" #: printrun/pronterface.py:694 msgid "&Slic3r" msgstr "&Slic3r" #: printrun/pronterface.py:696 #, fuzzy msgid "Failed to load Slic3r configuration:" msgstr "Activer l'intУЉgration de Slic3r" #: printrun/pronterface.py:702 msgid "&Macros" msgstr "&Macros" #: printrun/pronterface.py:703 msgid "<&New...>" msgstr "<&Nouvelle...>" #: printrun/pronterface.py:704 msgid " Options dialog" msgstr " FenУЊtre des options" #: printrun/pronterface.py:704 msgid "&Options" msgstr "&Options" #: printrun/pronterface.py:706 msgid " Adjust slicing settings" msgstr " RУЉgler les paramУЈtres de slicing" #: printrun/pronterface.py:706 #, fuzzy msgid "Slicing settings" msgstr "ParamУЈtres de slicing" #: printrun/pronterface.py:708 #, fuzzy msgid "Debug communications" msgstr "Vitesse de communication" #: printrun/pronterface.py:709 msgid "Print all G-code sent to and received from the printer." msgstr "Afficher tous les G-code envoyУЉs et reУЇus." #: printrun/pronterface.py:713 msgid "&Settings" msgstr "&ParamУЈtres" #: printrun/pronterface.py:719 msgid "&About Printrun" msgstr "&A propos de Printrun" #: printrun/pronterface.py:719 msgid "Show about dialog" msgstr "Afficher la fenУЊtre A propos" #: printrun/pronterface.py:720 msgid "&Help" msgstr "" #: printrun/pronterface.py:746 msgid "" "Printrun is a pure Python 3D printing (and other types of CNC) host software." msgstr "" "Printrun est un logiciel hУДte pour imprimante 3D (et autres CNC) УЉcrit en " "pur Python" #: printrun/pronterface.py:750 #, fuzzy msgid "%.02fmm of filament have been extruded during prints" msgstr "mm de filament utilisУЉs pour cette impression" #: printrun/pronterface.py:781 #, fuzzy msgid "Monitor printer status" msgstr "Imprimante sous surveillance." #: printrun/pronterface.py:781 msgid "" "Regularly monitor printer temperatures (required to have functional " "temperature graph or gauges)" msgstr "" #: printrun/pronterface.py:782 msgid "Path to the simarrange binary to use in the STL plater" msgstr "Chemin vers le binaire de simarrange У  utiliser dans le plater de STL" #: printrun/pronterface.py:782 msgid "Simarrange command" msgstr "Commande simarrange" #: printrun/pronterface.py:783 msgid "Circular build platform" msgstr "" #: printrun/pronterface.py:783 msgid "Draw a circular (or oval) build platform instead of a rectangular one" msgstr "" #: printrun/pronterface.py:784 msgid "Extruders count" msgstr "Nombre d'extrudeuses" #: printrun/pronterface.py:784 msgid "Number of extruders" msgstr "Nombre d'extrudeuses" #: printrun/pronterface.py:785 msgid "Clamp manual moves" msgstr "Limiter les mouvements manuels" #: printrun/pronterface.py:785 msgid "Prevent manual moves from leaving the specified build dimensions" msgstr "" "EmpУЊcher les mouvements manuels de quitter le volume d'impression dУЉfini" #: printrun/pronterface.py:786 msgid "Interface mode" msgstr "Mode de l'interface" #: printrun/pronterface.py:786 msgid "" "Standard interface is a one-page, three columns layout with controls/" "visualization/log\n" "Compact mode is a one-page, two columns layout with controls + log/" "visualization\n" "Tabbed mode is a two-pages mode, where the first page shows controls and the " "second one shows visualization and log." msgstr "" "Le mode Standard affiche les contrУДles, la visualisation et la console sur 3 " "colonnes\n" "Le mode Compact regroupe contrУДles et console sur 1 colonne et affiche la " "visualisation sur une seconde\n" "Le mode Tabbed prУЉsente deux onglets, l'un contenant les contrУДles, l'autre " "la visualisation et la console." #: printrun/pronterface.py:787 msgid "Controls mode" msgstr "" #: printrun/pronterface.py:787 msgid "" "Standard controls include all controls needed for printer setup and " "calibration, while Mini controls are limited to the ones needed for daily " "printing" msgstr "" #: printrun/pronterface.py:788 msgid "Add a menu to select Slic3r profiles directly from Pronterface" msgstr "" "Ajouter un menu pour sУЉlectionner les profils Slic3r directement depuis " "Pronterface" #: printrun/pronterface.py:788 msgid "Enable Slic3r integration" msgstr "Activer l'intУЉgration de Slic3r" #: printrun/pronterface.py:789 msgid "Update Slic3r default presets" msgstr "Mettre У  jour les profils par dУЉfaut de Slic3r" #: printrun/pronterface.py:789 msgid "" "When selecting a profile in Slic3r integration menu, also save it as the " "default Slic3r preset" msgstr "" "Lors de la sУЉlection d'un profil dans le menu d'intУЉgration de Slic3r, " "dУЉfinir ce profil en tant que dУЉfaut pour Slic3r УЉgalement" #: printrun/pronterface.py:790 msgid "Main visualization" msgstr "Visualisation principale" #: printrun/pronterface.py:790 msgid "Select visualization for main window." msgstr "SУЉlectionnez la visualisation pour la fenУЊtre principale" #: printrun/pronterface.py:791 msgid "Use 3D in GCode viewer window" msgstr "Utiliser la 3D pour la fenУЊtre de visualisation" #: printrun/pronterface.py:791 msgid "Use 3D mode instead of 2D layered mode in the visualization window" msgstr "" "Utiliser le mode 3D У  la place du mode 2D par couche dans la fenУЊtre de " "visualisation" #: printrun/pronterface.py:792 msgid "Use a lighter 3D visualization" msgstr "Utiliser une visualisation 3D plus lУЉgУЈre" #: printrun/pronterface.py:792 msgid "" "Use a lighter visualization with simple lines instead of extruded paths for " "3D viewer" msgstr "" "Utiliser une visualisation plus lУЉgУЈre avec des lignes У  la place de tubes " "extrudУЉs dans la vue 3D" #: printrun/pronterface.py:793 msgid "Track current layer in main 3D view" msgstr "" #: printrun/pronterface.py:793 msgid "Track the currently printing layer in the main 3D visualization" msgstr "" #: printrun/pronterface.py:794 msgid "Display temperature graph" msgstr "Afficher le graphe de tempУЉratures" #: printrun/pronterface.py:794 msgid "Display time-lapse temperature graph" msgstr "Afficher un graphe temporel de la tempУЉrature" #: printrun/pronterface.py:795 msgid "Display graphical gauges for temperatures visualization" msgstr "Afficher des jauges de tempУЉrature" #: printrun/pronterface.py:795 msgid "Display temperature gauges" msgstr "Afficher les jauges de tempУЉrature" #: printrun/pronterface.py:796 msgid "Display a checkbox that, when check, locks most of Pronterface" msgstr "" "Afficher une case У  cocher pour verrouiller une grande partie de l'imprimante" #: printrun/pronterface.py:796 msgid "Display interface lock checkbox" msgstr "Afficher une case У  cocher pour pouvoir verrouiller l'inteface" #: printrun/pronterface.py:797 msgid "If lock checkbox is enabled, lock the interface when starting a print" msgstr "" "Si la case de verrouillage est activУЉe, verrouiler l'interface au lancement " "d'une impression" #: printrun/pronterface.py:797 msgid "Lock interface upon print start" msgstr "Verrouiller l'interface au lancement d'une impression" #: printrun/pronterface.py:804 msgid "Preview extrusion width" msgstr "Largeur de l'extrusion pour la visualisation" #: printrun/pronterface.py:804 msgid "Width of Extrusion in Preview" msgstr "Largeur de l'extrusion dans la prУЉvisualisation" #: printrun/pronterface.py:805 msgid "Fine Grid Spacing" msgstr "Espacement fin de la grille" #: printrun/pronterface.py:805 msgid "Fine grid spacing" msgstr "Espacement fin de la grille" #: printrun/pronterface.py:806 msgid "Coarse Grid Spacing" msgstr "Espacement large de la grille" #: printrun/pronterface.py:806 msgid "Coarse grid spacing" msgstr "Espacement large de la grille" #: printrun/pronterface.py:807 msgid "Background color" msgstr "Couleur de fond" #: printrun/pronterface.py:807 msgid "Pronterface background color" msgstr "Couleur de fond de Pronterface" #: printrun/pronterface.py:808 #, fuzzy msgid "3D view background color" msgstr "Couleur de fond" #: printrun/pronterface.py:808 msgid "Color of the 3D view background" msgstr "" #: printrun/pronterface.py:809 msgid "3D view travel moves color" msgstr "" #: printrun/pronterface.py:809 msgid "Color of travel moves in 3D view" msgstr "" #: printrun/pronterface.py:810 msgid "3D view print moves color" msgstr "" #: printrun/pronterface.py:810 msgid "Color of print moves with tool 0 in 3D view" msgstr "" #: printrun/pronterface.py:811 msgid "3D view tool 1 moves color" msgstr "" #: printrun/pronterface.py:811 msgid "Color of print moves with tool 1 in 3D view" msgstr "" #: printrun/pronterface.py:812 msgid "3D view printed moves color" msgstr "" #: printrun/pronterface.py:812 msgid "Color of printed moves in 3D view" msgstr "" #: printrun/pronterface.py:813 msgid "3D view current layer moves color" msgstr "" #: printrun/pronterface.py:813 msgid "Color of moves in current layer in 3D view" msgstr "" #: printrun/pronterface.py:814 msgid "3D view printed current layer moves color" msgstr "" #: printrun/pronterface.py:814 msgid "Color of already printed moves from current layer in 3D view" msgstr "" #: printrun/pronterface.py:815 msgid "Changing most settings here will require restart to get effect" msgstr "" "La plupart de ces rУЉglages nУЉcessitent de redУЉmarrer le logiciel pour УЊtre " "appliquУЉs." #: printrun/pronterface.py:815 msgid "Note:" msgstr "Note:" #: printrun/pronterface.py:822 msgid "automatically try to connect to printer on startup" msgstr "tenter de se connecter automatiquement У  l'imprimante au dУЉmarrage" #: printrun/pronterface.py:835 printrun/pronterface.py:1316 msgid "Failed to load recent files list:" msgstr "" #: printrun/pronterface.py:916 msgid "SD upload: %04.2f%% |" msgstr "Envoi SD : %04.2f%% |" #: printrun/pronterface.py:917 printrun/pronterface.py:922 msgid " Line# %d of %d lines |" msgstr " Ligne# %d sur %d lignes |" #: printrun/pronterface.py:919 msgid "SD printing: %04.2f%% |" msgstr "Impression SD : %04.2f%% |" #: printrun/pronterface.py:921 msgid "Printing: %04.2f%% |" msgstr "Impression : %04.2f%% |" #: printrun/pronterface.py:924 msgid " Est: %s of %s remaining | " msgstr " ETA: %s restant sur %s | " #: printrun/pronterface.py:926 msgid " Z: %.3f mm" msgstr " Z: %.3f mm" #: printrun/pronterface.py:931 msgid "Disconnecting after 4 failed writes." msgstr "DУЉconnexion suite У  4 envois УЉchouУЉs." #: printrun/pronterface.py:972 msgid "Locking interface." msgstr "Verrouillage de l'interface." #: printrun/pronterface.py:976 msgid "Unlocking interface." msgstr "DУЉverrouillage de l'interface." #: printrun/pronterface.py:985 msgid "Connecting..." msgstr "Connexion en cours..." #: printrun/pronterface.py:997 msgid "Could not parse baud rate: " msgstr "Impossible d'analyser le dУЉbit:" #: printrun/pronterface.py:1013 printrun/pronterface.py:1023 msgid "Error: You are trying to connect to a non-existing port." msgstr "Erreur: Vous essayez de vous connecter У  un port inexistant." #: printrun/pronterface.py:1015 msgid "Error: You don't have permission to open %s." msgstr "Erreur: Vous n'avez pas la permission d'ouvrir %s." #: printrun/pronterface.py:1016 msgid "You might need to add yourself to the dialout group." msgstr "" "Vous avez peut УЊtre besoin de vous ajouter au groupe dialout ou similaire." #: printrun/pronterface.py:1043 msgid "Disconnected." msgstr "DУЉconnectУЉ." #: printrun/pronterface.py:1071 msgid "Reset." msgstr "RУЉinitialisУЉe." #: printrun/pronterface.py:1072 msgid "Are you sure you want to reset the printer?" msgstr "Etes-vous sУЛr de vouloir rУЉinitialiser l'imprimante?" #: printrun/pronterface.py:1072 msgid "Reset?" msgstr "RУЉinitialiser ?" #: printrun/pronterface.py:1093 msgid "Restart" msgstr "Recommencer" #: printrun/pronterface.py:1126 msgid "Pick SD filename" msgstr "Lister les fichiers sur la carte SD" #: printrun/pronterface.py:1144 msgid "File upload complete" msgstr "Envoi du fichier terminУЉ" #: printrun/pronterface.py:1151 msgid "Print paused at: %s" msgstr "Impression interrompue У  : %s" #: printrun/pronterface.py:1163 msgid "Resume" msgstr "Reprendre" #: printrun/pronterface.py:1166 msgid "Resuming." msgstr "Continuons !" #: printrun/pronterface.py:1192 msgid "Pick SD file" msgstr "Choisir un fichier sur la carte SD" #: printrun/pronterface.py:1192 msgid "Select the file to print" msgstr "SУЉlectionnez le fichier У  imprimer :" #: printrun/pronterface.py:1228 printrun/pronterface.py:1259 msgid "Slicing " msgstr "Slicing " #: printrun/pronterface.py:1237 msgid "Failed to execute slicing software: " msgstr "Une erreur s'est produite lors du slicing : " #: printrun/pronterface.py:1244 msgid "Slicing..." msgstr "Slicing..." #: printrun/pronterface.py:1296 msgid "Open file to print" msgstr "Ouvrir un fichier У  imprimer" #: printrun/pronterface.py:1297 msgid "" "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*." "gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*" msgstr "" "Fichiers OBJ, STL et GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)|*." "gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|Tous les fichiers (*.*)|*.*" #: printrun/pronterface.py:1325 msgid "Could not update recent files list:" msgstr "" #: printrun/pronterface.py:1359 msgid "Loaded %s, %d lines" msgstr "%s chargУЉ, %d lignes" #: printrun/pronterface.py:1362 msgid "Load File" msgstr "Charger un fichier" #: printrun/pronterface.py:1376 #, fuzzy msgid "%.2fmm of filament used in this print" msgstr "mm de filament utilisУЉs pour cette impression" #: printrun/pronterface.py:1377 msgid "The print goes:" msgstr "L'impression va :" #: printrun/pronterface.py:1378 msgid "- from %.2f mm to %.2f mm in X and is %.2f mm wide" msgstr "- de %.02f mm У  %.02f mm en X et mesure %.02f mm de large" #: printrun/pronterface.py:1379 msgid "- from %.2f mm to %.2f mm in Y and is %.2f mm deep" msgstr "- de %.02f mm У  %.02f mm en Y et mesure %.02f mm de profondeur" #: printrun/pronterface.py:1380 msgid "- from %.2f mm to %.2f mm in Z and is %.2f mm high" msgstr "- de %.02f mm У  %.02f mm en Y et mesure %.02f mm de haut" #: printrun/pronterface.py:1450 msgid "Printer is now online." msgstr "Imprimante connectУЉe." #: printrun/pronterface.py:1455 msgid "Disconnect" msgstr "DУЉconnecter" #: printrun/pronterface.py:1688 msgid "click to add new custom button" msgstr "Ajouter un bouton personnalisУЉ" #: printrun/pronterface.py:1694 msgid "Execute command: " msgstr "ExУЉcuter la commande :" #: printrun/pronterface.py:1714 msgid "" "Defines custom button. Usage: button \"title\" [/c \"colour\"] command" msgstr "" "DУЉfinit des boutons personnalidУЉs. Utilisation : \"Libelle\" [/c " "\"couleur\"] commande" #: printrun/pronterface.py:1736 msgid "Custom button number should be between 0 and 63" msgstr "" "Les numУЉros des boutons personnalisУЉs doivent УЊtre compris entre 0 et 63." #: printrun/pronterface.py:1827 msgid "Edit custom button '%s'" msgstr "Editer le bouton personnalisУЉ '%s'" #: printrun/pronterface.py:1829 msgid "Move left <<" msgstr "DУЉplacer vers la gauche <<" #: printrun/pronterface.py:1832 msgid "Move right >>" msgstr "DУЉplacer vers la droite >>" #: printrun/pronterface.py:1836 msgid "Remove custom button '%s'" msgstr "Supprimer le bouton personnalisУЉ '%s'" #: printrun/pronterface.py:1839 msgid "Add custom button" msgstr "Ajouter un bouton personnalisУЉ" #: printrun/pronterface.py:1972 msgid "event object missing" msgstr "УЉvУЉnement d'objet manquant" #: printrun/pronterface.py:1985 msgid "Do you want to erase the macro?" msgstr "Voulez-vous effacer la macro ?" #: printrun/pronterface.py:1989 msgid "Cancelled." msgstr "AnnulУЉ" #: printrun/pronterface.py:2007 msgid "Enter macro name" msgstr "Saisissez le nom de la macro" #: printrun/pronterface.py:2010 msgid "Macro name:" msgstr "Nom :" #: printrun/pronterface.py:2013 msgid "Ok" msgstr "Valider" #: printrun/pronterface.py:2035 msgid "Macro name may contain only ASCII alphanumeric symbols and underscores" msgstr "" "Un nom de macro ne peut contenir que des caractУЈres alphanumУЉrique ASCII et " "des underscore (_)" #: printrun/pronterface.py:2038 msgid "Name '%s' is being used by built-in command" msgstr "Le nom '%s' est utilisУЉ par une commande interne" #: pronsole.py:31 msgid "Caught an exception, exiting:" msgstr "Exception attrapУЉe, on quitte:" #~ msgid "raw G-Code line \"%s\" could not be parsed" #~ msgstr "la ligne de G-Code \"%s\" n'a pas pu УЊtre analysУЉe" #~ msgid "Watch" #~ msgstr "Surveiller" #~ msgid "Monitor Temperatures in Graph" #~ msgstr "Surveiller les tempУЉratures avec un graphe" #~ msgid "Check current hotend temperature" #~ msgstr "VУЉrifier la tempУЉrature actuelle de la buse" #~ msgid "Check temp" #~ msgstr "Lire les tempУЉratures" #~ msgid "Debug G-code" #~ msgstr "DУЉbugguer le G-code" #~ msgid "&?" #~ msgstr "&?" #~ msgid "Compose" #~ msgstr "Composer" #~ msgid "Recover previous Print" #~ msgstr "RУЉcupУЉrer l'impression prУЉcУЉdente" #~ msgid "Initialized 3D visualization in %.2f seconds" #~ msgstr "Visualisation 3D initialisУЉe en %.2f secondes." #~ msgid "Vertex count: %d" #~ msgstr "Nombre de sommets: %d" #~ msgid "Enable 3D viewer" #~ msgstr "Activer la visualisation 3D" #~ msgid " SD printing:%04.2f %%" #~ msgstr " Impression SD : %04.2f %%" #~ msgid "Folder of last opened file" #~ msgstr "Dossier du dernier fichier ouvert" #~ msgid "Mini mode" #~ msgstr "Mode rУЉduit" #~ msgid "Full mode" #~ msgstr "Mode complet" #~ msgid "Paused." #~ msgstr "En pause." #~ msgid "Failed to start web interface" #~ msgstr "У‰chec du lancement de l'interface web" #~ msgid "CherryPy is not installed. Web Interface Disabled." #~ msgstr "CherryPy n'est pas installУЉ. L'interface web est dУЉsactivУЉe." #~ msgid ", %d lines" #~ msgstr ", %d lignes" Printrun-printrun-2.0.0rc5/locale/it/000077500000000000000000000000001325617007000174775ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/it/LC_MESSAGES/000077500000000000000000000000001325617007000212645ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/it/LC_MESSAGES/plater.mo000066400000000000000000000031461325617007000231140ustar00rootroot00000000000000о•М\аJб !-DKQahmty‹ ДФ:и !(TЊ џ$ !/QZbu}ƒ‹’­&Ыђ: Q]    Are you sure you want to clear the grid? All unsaved changes will be lost.AutoAutoplatingBed full, sorry sir :(CancelClearClear the grid?DeleteDoneExportLoadPick file to loadPick file to save toPlate building toolPut at 100, 100STL files (;*.stl;)STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scadSnap to Z = 0wrote Project-Id-Version: PACKAGE VERSION POT-Creation-Date: 2012-01-09 15:07+CET PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Italian RepRap Community Language-Team: Italian RepRap Community MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 Sei sicuro di voler pulire la griglia? Tutte le modifiche non salvate saranno perse.AutomaticoPosizionamento automatico sul piattoIl letto УЈ pieno, mi dispiace :(CancellaPulisciPulire la griglia?EliminaFattoEsportaCaricaScegli un file da caricareScegli un file in cui salvareStrumento di posizionamento sul piattoMetti a 100,100files STL (;*.stl;)files STL (;*.stl;)|*.stl|files OpenSCAD (;*.scad;)|*.scadVai a Z = 0scritti Printrun-printrun-2.0.0rc5/locale/it/LC_MESSAGES/plater.po000066400000000000000000000037111325617007000231150ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2012-01-09 15:07+CET\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Italian RepRap Community \n" "Language-Team: Italian RepRap Community \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: plater.py:223 msgid "Plate building tool" msgstr "Strumento di posizionamento sul piatto" #: plater.py:229 msgid "Clear" msgstr "Pulisci" #: plater.py:230 msgid "Load" msgstr "Carica" #: plater.py:232 msgid "Export" msgstr "Esporta" #: plater.py:235 msgid "Done" msgstr "Fatto" #: plater.py:237 msgid "Cancel" msgstr "Cancella" #: plater.py:239 msgid "Snap to Z = 0" msgstr "Vai a Z = 0" #: plater.py:240 msgid "Put at 100, 100" msgstr "Metti a 100,100" #: plater.py:241 msgid "Delete" msgstr "Elimina" #: plater.py:242 msgid "Auto" msgstr "Automatico" #: plater.py:266 msgid "Autoplating" msgstr "Posizionamento automatico sul piatto" #: plater.py:294 msgid "Bed full, sorry sir :(" msgstr "Il letto УЈ pieno, mi dispiace :(" #: plater.py:304 msgid "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "Sei sicuro di voler pulire la griglia? Tutte le modifiche non salvate saranno perse." #: plater.py:304 msgid "Clear the grid?" msgstr "Pulire la griglia?" #: plater.py:346 msgid "Pick file to save to" msgstr "Scegli un file in cui salvare" #: plater.py:347 msgid "STL files (;*.stl;)" msgstr "files STL (;*.stl;)" #: plater.py:367 msgid "wrote " msgstr "scritti " #: plater.py:370 msgid "Pick file to load" msgstr "Scegli un file da caricare" #: plater.py:371 msgid "STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" msgstr "files STL (;*.stl;)|*.stl|files OpenSCAD (;*.scad;)|*.scad" Printrun-printrun-2.0.0rc5/locale/it/LC_MESSAGES/pronterface.mo000066400000000000000000000236421325617007000241400ustar00rootroot00000000000000TЕŒ` a z  Ѓ Г Я ч ѓ   ) @ ŒM к у щ ё њ   " +4 ` d i v } ˆ “ !Ё У Щ б й с ј /DHM|–  ,L]c {‰"šНЯ$зќ !A \fnMuУ-й ' 1;C@W ˜ ЄЎО в н ъ+ј&$KOeGЕ§,2 :GX]cuŒЃ З/Сё '.69 BLQjo.s1Ђдн юљ5,>k]o`Э."Lor‘І"ЉЬ:г::IŒ„&8K_u“ ЌКЯьў Є* Яйпця ј   +>jpw† Ž™Ћ,Лшяїџ /;D€V’‘щ{ Š—БЦ%Ьђ&FW9_™Ћ+Ч ѓ  'R1„4˜!Э я љ   K% q } … І Х г ч (љ '"!J!Wg!DП!"" "$"?" E"O"n""“"š"А"Ю"ь" #2#$C#h#n#u# |# ‡#’#™# œ# І#А#Ж#д#к#>н#9$V$(p$™$Б$AХ$7%?%sC%iЗ%!&#@&d&6g&ž&Л&'О&ц&<э&<*':g'G^5+_[V I1xZDyJ$7em{ *2(YbEvƒl8!‚T4f.A;…3K<~`ip]uwcWnXN6g‡&jdU?0 stzQ|Rk†\ FLOaMB€C SH/,@#)=o>}9' Pr-:q"%„h Adjust slicing settings Clear output console Closes the Window Edit open file Est: %s of %s remaining | Line# %d of %d lines | Opens file Options dialog Printing:%04.2f %% | Project slices SD printing:%04.2f %% Z: %0.2f mm# I moved all your custom buttons into .pronsolerc. # Please don't add them here any more. # Backup of your old buttons is in custombtn.old &Edit...&File&Macros&Open...&Options&Settings, %d lines<&New...>Add custom buttonAre you sure you want to reset the printer?BedBed:Button titleCancelCancelled.Check tempClear consoleCoarse Grid Spacing (default: 50)ColorCommandComposeConnectConnect to the printerConnecting...Custom buttonCustom button number should be between 0 and 63DefaultsDefines custom button. Usage: button "title" [/c "colour"] commandDimensions of Build Platform & optional offset of origin Examples: XXXxYYY XXX,YYY,ZZZ XXXxYYYxZZZ+OffX+OffY+OffZDisconnectDisconnected.Do you want to erase the macro?Done monitoring.E&xitEdit custom button '%s'Edit settingsEnter macro nameEstimated duration (pessimistic): Execute command: ExtrudeFailed to execute slicing software: File not found!File upload completeFine Grid Spacing (default: 10)Folder of last opened fileFull modeHeater:HotendIgnoring custombtn.txt. Remove all current buttons to revert to custombtn.txtInvalid period given.Last Set Temperature for the Heated Print BedLast Temperature of the Hot EndLoad FileLoad fileLoaded Loaded %s, %d linesMacro name may contain only alphanumeric symbols and underscoresMacro name:Mini modeMonitor PrinterMonitoring printer.Motors offMove left <<Move right >>Name '%s' is being used by built-in commandNo file loaded. Please use load first.Not connected to printer.Note!!! You have specified custom buttons in both custombtn.txt and .pronsolercOBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)OffOkOpen file to printOpening file failed.PausePaused.Pick SD filePick SD filenamePortPrintPrinter InterfacePrinter is not online.Printer is now online.Printer is online. ProjectorPronterface background color (default: #FFFFFF)Remove custom button '%s'ResetReset.Reset?RestartResumeReverseSDSD PrintSD UploadSaveSelect the file to printSendSetSetting bed temperature to %f degrees Celsius.Setting hotend temperature to %f degrees Celsius.Slicing Slicing SettingsSlicing...Starting printWX is not installed. This program requires WX to run.Width of Extrusion in Preview (default: 0.5)XY:You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.You must enter a temperature.You must enter a temperature. (%s)Z:click to add new custom buttonevent object missingmmmm of filament used in this print mm/minthe print goes from %f mm to %f mm in X and is %f mm wide the print goes from %f mm to %f mm in Y and is %f mm wide the print goes from %f mm to %f mm in Z and is %f mm high Project-Id-Version: PACKAGE VERSION POT-Creation-Date: 2012-02-26 02:12+CET PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: Italian RepRap Community Language-Team: Italian RepRap Community Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 Configura la generazione del percorso Svuota la console Chiude la finestra Modifica file aperto Stima: %s di %s rimanente | Linea# %d di %d linee | Apre un file Finestra di opzioni Stampa in corso:%04.2f %% | Proietta i layer stampa da scheda SD:%04.2f %% Z: %0.2f mm# Ho spostato tutti i tuoi pulsanti personalizzati in .pronsolerc. # Per favore non aggiungerne altri qui. # Un backup dei tuoi vecchi pulsanti УЈ in custombtn.old &Modifica&File&Macro&Apri...&Opzioni&Impostazioni, %d linee<&Nuovo...>Aggiungi pulsante personalizzatoSei sicuro di voler resettare la stampante?LettoPiano:Titolo bottoneAnnullaAnnullato.Leggi temperaturaPulisci consoleSpaziatura larga della griglia (default: 50)ColoreComandoComponiConnettiConnetti alla stampanteConnessione...Personalizza bottoneIl numero del pulsante personalizzato dev'essere tra 0 e 63Valori di defaultDefinisce un pulsante personalizzato. Uso: button "titolo" [/c "colore"] comandoDimensioni della superficie di stampa & e (opzionale) spostamento del centro Esempi: XXXxYYY XXX,YYY,ZZZ XXXxYYYxZZZ+SposX+SposY+SposZDisconnettere.Disconnesso.Vuoi cancellare la macro?Controllo terminato.&EsciModifica pulsante personalizzato '%s'Modifica impostazioniInserisci il nome della macroDurata stimata (pessimistica): Esegui comando: EstrudiImposibile eseguire il software di generazione percorso: File non trovato!Caricamento file completatoSpaziatura fine della griglia (default: 10)Cartella dell'ultimo file apertoEspandiEstrusore:EstrusoreIgnoro custombtn.txt. Elimina tutti i pulsanti attuali per tornare a custombtn.txtPeriodo non valido.Ultima temperatura impostata per il letto riscaldatoUltima temperatura dell'estrusoreApri fileCarica fileCaricato Caricato %s, %d lineeI nomi delle macro possono contenere solo simboli alfanumerici e underscoreNome macro:ContraiControllo automatico temperaturaSto controllando la stampante.Spegni motoriMuovi a sinistra <<Muovi a destra >>Nome '%s' УЈ usato da un comando internoNessub file caricato. Usare Apri prima.Non connesso alla stampante.Nota!!! Hai specificato pulsanti personalizzati sia in custombtn.txt che in .pronsolercfiles OBJ, STL e GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)OffOkApri il file da stampareApertura del file fallita.PausaIn pausa.Scegli un file dalla scheda SDScegli un file dalla scheda SDPortaStampaInterfaccia di stampaLa stampante non УЈ connessa.La stampante ora УЈ connessa.La stampante УЈ online. ProiettoreColore di sfondo di Pronterface (default: #FFFFFF)Elimina pulsante personalizzato '%s'ResetReset.Reset?RicominciaRipristinaRitraiSDStampa SDCarica SDSalvaSeleziona il file da stampareInviaOnImposto la temperatura del piano di stampa a %f gradi Celsius.Imposto la temperatura dell'estrusore a %f gradi Celsius.Generazione del percorso Impostazioni di generazione del percorsoGenerazione percorso...Inizio della stampaWX non УЈ installato. Questo software richiede WX per funzionare.Larghezza dell'estrusione nell'anteprima (default: 0.5)XY:Non УЈ possibile impostare temperature negative. Per raffreddare il piano di stampa imposta la sua temperatura a 0.Non УЈ possibile impostare temperature negative. Per raffreddare l'ugello imposta la sua temperatura a 0.Devi inserire una temperatura.Devi inserire una temperatura. (%s)Z:clicca per aggiungere un nuovo pulsante personalizzatooggetto dell'evento mancantemmmm di filamento usato in questa stampa mm/minla stampa va da %f mm a %f mm in X ed УЈ %f mm di larghezza la stampa va da %f mm a %f mm in Y ed УЈ %f mm di larghezza la stampa va da %f mm a %f mm in Z ed УЈ %f mm di altezza Printrun-printrun-2.0.0rc5/locale/it/LC_MESSAGES/pronterface.po000066400000000000000000001414111325617007000241360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2014-03-30 14:35+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Italian RepRap Community \n" "Language-Team: Italian RepRap Community \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: printrun/excluder.py:26 msgid "" "Part excluder: draw rectangles where print instructions should be ignored" msgstr "" #: printrun/excluder.py:27 printrun/excluder.py:29 msgid "Reset selection" msgstr "" #: printrun/gcodeplater.py:43 printrun/gcodeplater.py:44 msgid "GCODE files (*.gcode;*.GCODE;*.g)" msgstr "" #: printrun/gcodeplater.py:112 printrun/gcodeplater.py:152 msgid "Warning: no rotation support for now, object won't be correctly rotated" msgstr "" #: printrun/gcodeplater.py:141 printrun/gcodeplater.py:178 msgid "Exported merged G-Codes to %s" msgstr "" #: printrun/gcview.py:352 msgid "Fit to plate" msgstr "" #: printrun/gcview.py:353 msgid "Fit to plate [F]" msgstr "" #: printrun/gui/__init__.py:19 printrun/pronterface.py:45 msgid "WX is not installed. This program requires WX to run." msgstr "WX non УЈ installato. Questo software richiede WX per funzionare." #: printrun/gui/__init__.py:159 #, fuzzy msgid "Commands" msgstr "Comando" #: printrun/gui/__init__.py:160 msgid "Status" msgstr "" #: printrun/gui/controls.py:126 #, fuzzy msgid "Heat:" msgstr "Estrusore:" #: printrun/gui/controls.py:129 msgid "Switch Hotend Off" msgstr "" #: printrun/gui/controls.py:129 printrun/gui/controls.py:149 #: printrun/gui/toolbar.py:85 msgid "Off" msgstr "Off" #: printrun/gui/controls.py:137 #, fuzzy msgid "Select Temperature for Hotend" msgstr "Ultima temperatura dell'estrusore" #: printrun/gui/controls.py:141 msgid "Switch Hotend On" msgstr "" #: printrun/gui/controls.py:141 printrun/gui/controls.py:161 #: printrun/gui/controls.py:198 msgid "Set" msgstr "On" #: printrun/gui/controls.py:146 printrun/gui/controls.py:215 msgid "Bed:" msgstr "Piano:" #: printrun/gui/controls.py:149 msgid "Switch Heated Bed Off" msgstr "" #: printrun/gui/controls.py:157 #, fuzzy msgid "Select Temperature for Heated Bed" msgstr "Ultima temperatura impostata per il letto riscaldato" #: printrun/gui/controls.py:161 msgid "Switch Heated Bed On" msgstr "" #: printrun/gui/controls.py:187 msgid "Print speed:" msgstr "" #: printrun/gui/controls.py:192 printrun/gui/controls.py:207 msgid "%d%%" msgstr "" #: printrun/gui/controls.py:198 msgid "Set print speed factor" msgstr "" #: printrun/gui/controls.py:213 msgid "Heater:" msgstr "Estrusore:" #: printrun/gui/controls.py:265 msgid "Length:" msgstr "" #: printrun/gui/controls.py:267 msgid "mm" msgstr "mm" #: printrun/gui/controls.py:267 msgid "mm @" msgstr "" #: printrun/gui/controls.py:269 msgid "Amount to Extrude or Retract (mm)" msgstr "" #: printrun/gui/controls.py:272 msgid "Extrude / Retract speed (mm/min)" msgstr "" #: printrun/gui/controls.py:278 msgid "Speed:" msgstr "" #: printrun/gui/controls.py:279 msgid "" "mm/\n" "min" msgstr "" #: printrun/gui/controls.py:290 msgid "Tool:" msgstr "" #: printrun/gui/controls.py:293 msgid "Click to switch current extruder" msgstr "" #: printrun/gui/controls.py:310 msgid "Select current extruder" msgstr "" #: printrun/gui/controls.py:371 msgid "Set Maximum Speed for X & Y axes (mm/min)" msgstr "" #: printrun/gui/controls.py:372 msgid "XY:" msgstr "XY:" #: printrun/gui/controls.py:374 #, fuzzy msgid "mm/min Z:" msgstr "mm/min" #: printrun/gui/controls.py:376 msgid "Set Maximum Speed for Z axis (mm/min)" msgstr "" #: printrun/gui/graph.py:28 msgid "Temperature graph" msgstr "" #: printrun/gui/log.py:32 msgid "" "Send commands to printer\n" "(Type 'help' for simple\n" "help function)" msgstr "" #: printrun/gui/log.py:39 msgid "Send" msgstr "Invia" #: printrun/gui/log.py:39 #, fuzzy msgid "Send Command to Printer" msgstr "Controllo automatico temperatura" #: printrun/gui/toolbar.py:23 msgid "Lock" msgstr "" #: printrun/gui/toolbar.py:25 msgid "Lock graphical interface" msgstr "" #: printrun/gui/toolbar.py:32 msgid "" "Communication Settings\n" "Click to rescan ports" msgstr "" #: printrun/gui/toolbar.py:32 msgid "Port" msgstr "Porta" #: printrun/gui/toolbar.py:37 msgid "Select Port Printer is connected to" msgstr "" #: printrun/gui/toolbar.py:46 msgid "Select Baud rate for printer communication" msgstr "" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1052 msgid "Connect" msgstr "Connetti" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1053 msgid "Connect to the printer" msgstr "Connetti alla stampante" #: printrun/gui/toolbar.py:61 msgid "Reset" msgstr "Reset" #: printrun/gui/toolbar.py:61 #, fuzzy msgid "Reset the printer" msgstr "Connetti alla stampante" #: printrun/gui/toolbar.py:69 #, fuzzy msgid "Load a 3D model file" msgstr "Carica file" #: printrun/gui/toolbar.py:69 msgid "Load file" msgstr "Carica file" #: printrun/gui/toolbar.py:70 msgid "SD" msgstr "SD" #: printrun/gui/toolbar.py:70 #, fuzzy msgid "SD Card Printing" msgstr "Stampa SD" #: printrun/gui/toolbar.py:74 msgid "Start Printing Loaded File" msgstr "" #: printrun/gui/toolbar.py:74 printrun/pronterface.py:1003 #: printrun/pronterface.py:1062 printrun/pronterface.py:1078 #: printrun/pronterface.py:1363 printrun/pronterface.py:1445 msgid "Print" msgstr "Stampa" #: printrun/gui/toolbar.py:80 msgid "Pause Current Print" msgstr "" #: printrun/gui/toolbar.py:80 printrun/pronterface.py:1002 #: printrun/pronterface.py:1061 printrun/pronterface.py:1081 #: printrun/pronterface.py:1091 printrun/pronterface.py:1172 #: printrun/pronterface.py:1364 msgid "Pause" msgstr "Pausa" #: printrun/gui/toolbar.py:85 msgid "Turn printer off" msgstr "" #: printrun/gui/viz.py:65 msgid "" "Click to examine / edit\n" " layers of loaded file" msgstr "" #: printrun/gui/widgets.py:36 msgid "Find" msgstr "" #: printrun/gui/widgets.py:38 msgid "Save" msgstr "Salva" #: printrun/gui/widgets.py:43 printrun/objectplater.py:76 #: printrun/pronterface.py:1257 printrun/pronterface.py:2017 msgid "Cancel" msgstr "Annulla" #: printrun/gui/widgets.py:70 #, fuzzy msgid "Not Found!" msgstr "File non trovato!" #: printrun/gui/widgets.py:124 #, fuzzy msgid "Printer settings" msgstr "Modifica impostazioni" #: printrun/gui/widgets.py:125 #, fuzzy msgid "User interface" msgstr "Interfaccia di stampa" #: printrun/gui/widgets.py:126 #, fuzzy msgid "Colors" msgstr "Colore" #: printrun/gui/widgets.py:127 #, fuzzy msgid "External commands" msgstr "Esegui comando: " #: printrun/gui/widgets.py:132 msgid "Edit settings" msgstr "Modifica impostazioni" #: printrun/gui/widgets.py:135 #, fuzzy msgid "Settings" msgstr "&Impostazioni" #: printrun/gui/widgets.py:187 msgid "Custom button" msgstr "Personalizza bottone" #: printrun/gui/widgets.py:193 msgid "Button title" msgstr "Titolo bottone" #: printrun/gui/widgets.py:196 msgid "Command" msgstr "Comando" #: printrun/gui/widgets.py:205 msgid "Color" msgstr "Colore" #: printrun/gviz.py:29 msgid "Layer number and Z position show here when you scroll" msgstr "" #: printrun/gviz.py:39 msgid "Zoom In [+]" msgstr "" #: printrun/gviz.py:40 msgid "Zoom Out [-]" msgstr "" #: printrun/gviz.py:42 msgid "Move Up a Layer [U]" msgstr "" #: printrun/gviz.py:43 msgid "Move Down a Layer [D]" msgstr "" #: printrun/gviz.py:44 #, fuzzy msgid "Reset view" msgstr "Reset" #: printrun/gviz.py:68 msgid "Gcode view, shift to move view, mousewheel to set layer" msgstr "" #: printrun/gviz.py:105 printrun/gviz.py:241 msgid "Layer %d - Going Up - Z = %.03f mm" msgstr "" #: printrun/gviz.py:250 msgid "Layer %d - Going Down - Z = %.03f mm" msgstr "" #: printrun/objectplater.py:35 msgid "Plate building tool" msgstr "" #: printrun/objectplater.py:45 msgid "Clear" msgstr "" #: printrun/objectplater.py:49 #, fuzzy msgid "Load" msgstr "Caricato " #: printrun/objectplater.py:53 msgid "Snap to Z = 0" msgstr "" #: printrun/objectplater.py:57 msgid "Put at center" msgstr "" #: printrun/objectplater.py:61 msgid "Delete" msgstr "" #: printrun/objectplater.py:65 msgid "Auto arrange" msgstr "" #: printrun/objectplater.py:69 msgid "Export" msgstr "" #: printrun/objectplater.py:73 msgid "Done" msgstr "" #: printrun/objectplater.py:151 msgid "Autoplating" msgstr "" #: printrun/objectplater.py:199 msgid "Bed full, sorry sir :(" msgstr "" #: printrun/objectplater.py:209 msgid "" "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" #: printrun/objectplater.py:210 #, fuzzy msgid "Clear the grid?" msgstr " Chiude la finestra" #: printrun/objectplater.py:256 #, fuzzy msgid "Pick file to load" msgstr "Scegli un file dalla scheda SD" #: printrun/objectplater.py:267 #, fuzzy msgid "Pick file to save to" msgstr "Scegli un file dalla scheda SD" #: printrun/plater.py:212 msgid "STL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad" msgstr "" #: printrun/plater.py:213 msgid "STL files (*.stl;*.STL)|*.stl;*.STL" msgstr "" #: printrun/plater.py:244 #, fuzzy msgid "Loading STL file failed" msgstr "Apertura del file fallita." #: printrun/plater.py:244 printrun/plater.py:251 msgid "Error" msgstr "" #: printrun/plater.py:251 #, fuzzy msgid "Loading OpenSCAD file failed" msgstr "Apertura del file fallita." #: printrun/plater.py:284 msgid "Couldn't load non-existing file %s" msgstr "" #: printrun/plater.py:360 msgid "Wrote plate to %s" msgstr "" #: printrun/plater.py:367 msgid "" "Failed to use simarrange for plating, falling back to the standard method" msgstr "" #: printrun/plater.py:372 msgid "Autoplating using simarrange" msgstr "" #: printrun/plater.py:387 msgid "Plate full, please remove some objects" msgstr "" #: printrun/plater.py:404 msgid "simarrange failed" msgstr "" #: printrun/printcore.py:177 msgid "Could not connect to %s:%s:" msgstr "" #: printrun/printcore.py:178 msgid "Socket error %s:" msgstr "" #: printrun/printcore.py:191 printrun/printcore.py:196 msgid "Could not connect to %s at baudrate %s:" msgstr "" #: printrun/printcore.py:192 msgid "Serial error: %s" msgstr "" #: printrun/printcore.py:197 msgid "IO error: %s" msgstr "" #: printrun/printcore.py:231 msgid "Can't read from printer (disconnected?) (SelectError {0}): {1}" msgstr "" #: printrun/printcore.py:234 msgid "SelectError ({0}): {1}" msgstr "" #: printrun/printcore.py:237 msgid "Can't read from printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:240 msgid "Can't read from printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:245 msgid "Can't read from printer (disconnected?) (OS Error {0}): {1}" msgstr "" #: printrun/printcore.py:259 msgid "Aborting connection attempt after 4 failed writes." msgstr "" #: printrun/printcore.py:462 printrun/printcore.py:470 #: printrun/pronsole.py:1192 printrun/pronsole.py:1250 #: printrun/pronterface.py:209 printrun/pronterface.py:962 #: printrun/pronterface.py:1111 printrun/pronterface.py:1178 msgid "Not connected to printer." msgstr "Non connesso alla stampante." #: printrun/printcore.py:479 msgid "Print start callback failed with:" msgstr "" #: printrun/printcore.py:490 msgid "Print end callback failed with:" msgstr "" #: printrun/printcore.py:493 msgid "Print thread died due to the following error:" msgstr "" #: printrun/printcore.py:584 msgid "Could not analyze command %s:" msgstr "" #: printrun/printcore.py:601 msgid "Can't write to printer (disconnected ?):" msgstr "" #: printrun/printcore.py:604 msgid "Can't write to printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:607 msgid "Can't write to printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:610 msgid "Socket connection broken, disconnected. ({0}): {1}" msgstr "" #: printrun/pronsole.py:72 #, fuzzy msgid "Default: " msgstr "Valori di default" #: printrun/pronsole.py:73 msgid "(Control-doubleclick to reset to default value)" msgstr "" #: printrun/pronsole.py:108 #, fuzzy msgid "" "Are you sure you want to reset the setting to the default value: {0!r} ?" msgstr "Sei sicuro di voler resettare la stampante?" #: printrun/pronsole.py:108 msgid "Confirm set default" msgstr "" #: printrun/pronsole.py:258 msgid "Width" msgstr "" #: printrun/pronsole.py:261 msgid "Depth" msgstr "" #: printrun/pronsole.py:264 msgid "Height" msgstr "" #: printrun/pronsole.py:267 msgid "X offset" msgstr "" #: printrun/pronsole.py:270 msgid "Y offset" msgstr "" #: printrun/pronsole.py:273 msgid "Z offset" msgstr "" #: printrun/pronsole.py:276 msgid "X home pos." msgstr "" #: printrun/pronsole.py:279 msgid "Y home pos." msgstr "" #: printrun/pronsole.py:282 msgid "Z home pos." msgstr "" #: printrun/pronsole.py:301 msgid "Port used to communicate with printer" msgstr "Porta usata per comunicare con la stampante" #: printrun/pronsole.py:301 msgid "Serial port" msgstr "" #: printrun/pronsole.py:302 msgid "Baud rate" msgstr "" #: printrun/pronsole.py:302 #, fuzzy msgid "Communications Speed" msgstr "VelocitУ  di comunicazione (default: 115200)" #: printrun/pronsole.py:303 msgid "TCP streaming mode" msgstr "" #: printrun/pronsole.py:303 msgid "" "When using a TCP connection to the printer, the streaming mode will not wait " "for acks from the printer to send new commands. This will break things such " "as ETA prediction, but can result in smoother prints." msgstr "" #: printrun/pronsole.py:304 msgid "Bed temperature for ABS" msgstr "" #: printrun/pronsole.py:304 #, fuzzy msgid "Heated Build Platform temp for ABS (deg C)" msgstr "Temperatura piano di stampa per ABS (default: 110ТА C) " #: printrun/pronsole.py:305 msgid "Bed temperature for PLA" msgstr "" #: printrun/pronsole.py:305 #, fuzzy msgid "Heated Build Platform temp for PLA (deg C)" msgstr "Temperatura piano di stampa per PLA (default: 60ТА C)" #: printrun/pronsole.py:306 #, fuzzy msgid "Extruder temp for ABS (deg C)" msgstr "Temperatura di estrusione per ABS (default: 230ТА C)" #: printrun/pronsole.py:306 #, fuzzy msgid "Extruder temperature for ABS" msgstr "Temperatura di estrusione per ABS (default: 230ТА C)" #: printrun/pronsole.py:307 #, fuzzy msgid "Extruder temp for PLA (deg C)" msgstr "Temperatura di estrusione per PLA (default: 185ТА C" #: printrun/pronsole.py:307 #, fuzzy msgid "Extruder temperature for PLA" msgstr "Temperatura di estrusione per PLA (default: 185ТА C" #: printrun/pronsole.py:308 #, fuzzy msgid "Feedrate for Control Panel Moves in X and Y (mm/min)" msgstr "" "VelocitУ  dei movimenti degli assi X e Y in modalitУ  manuale (default: 3000mm/" "min)" #: printrun/pronsole.py:308 msgid "X && Y manual feedrate" msgstr "" #: printrun/pronsole.py:309 #, fuzzy msgid "Feedrate for Control Panel Moves in Z (mm/min)" msgstr "" "VelocitУ  dei movimenti dell'asse Z in modalitУ  manuale (default: 200mm/min)" #: printrun/pronsole.py:309 msgid "Z manual feedrate" msgstr "" #: printrun/pronsole.py:310 msgid "E manual feedrate" msgstr "" #: printrun/pronsole.py:310 #, fuzzy msgid "Feedrate for Control Panel Moves in Extrusions (mm/min)" msgstr "" "VelocitУ  dei movimenti dell'estrusore in modalitУ  manuale (default: 300mm/" "min)" #: printrun/pronsole.py:311 #, fuzzy msgid "Slice command" msgstr "Esegui comando: " #: printrun/pronsole.py:312 #, fuzzy msgid "Slice settings command" msgstr "Impostazioni di generazione del percorso" #: printrun/pronsole.py:312 msgid "Slicer options command" msgstr "" #: printrun/pronsole.py:313 msgid "Executable to run when the print is finished" msgstr "" #: printrun/pronsole.py:313 #, fuzzy msgid "Final command" msgstr "Comando" #: printrun/pronsole.py:314 #, fuzzy msgid "Error command" msgstr "Esegui comando: " #: printrun/pronsole.py:314 msgid "Executable to run when an error occurs" msgstr "" #: printrun/pronsole.py:381 msgid "Failed to run callback after setting \"%s\":" msgstr "" #: printrun/pronsole.py:469 msgid "Build dimensions" msgstr "" #: printrun/pronsole.py:469 #, fuzzy msgid "" "Dimensions of Build Platform\n" " & optional offset of origin\n" " & optional switch position\n" "\n" "Examples:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+OffX+OffY+OffZ\n" "XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ" msgstr "" "Dimensioni della superficie di stampa\n" " & e (opzionale) spostamento del centro\n" "\n" "Esempi:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+SposX+SposY+SposZ" #: printrun/pronsole.py:495 msgid "" "Welcome to the printer console! Type \"help\" for a list of available " "commands." msgstr "" #: printrun/pronsole.py:657 printrun/pronsole.py:665 printrun/pronsole.py:673 #: printrun/pronsole.py:1519 printrun/pronsole.py:1546 #: printrun/pronsole.py:1618 printrun/pronterface.py:357 #: printrun/pronterface.py:377 printrun/pronterface.py:394 msgid "Printer is not online." msgstr "La stampante non УЈ connessa." #: printrun/pronsole.py:692 msgid "Exiting program. Goodbye!" msgstr "" #: printrun/pronsole.py:697 msgid "Disconnects from the printer and exits the program." msgstr "" #: printrun/pronsole.py:974 msgid "" "load this file on startup instead of .pronsolerc ; you may chain config " "files, if so settings auto-save will use the last specified file" msgstr "" #: printrun/pronsole.py:975 msgid "" "executes command after configuration/.pronsolerc is loaded ; macros/settings " "from these commands are not autosaved" msgstr "" #: printrun/pronsole.py:976 msgid "file to load" msgstr "" #: printrun/pronsole.py:1104 #, fuzzy msgid "Loaded %s, %d lines." msgstr "Caricato %s, %d linee" #: printrun/pronsole.py:1105 printrun/pronterface.py:1381 #, fuzzy msgid "Estimated duration: %d layers, %s" msgstr "Durata stimata (pessimistica): " #: printrun/pronsole.py:1134 msgid "No file name given." msgstr "" #: printrun/pronsole.py:1140 msgid "Skeining file: %s" msgstr "" #: printrun/pronsole.py:1142 printrun/pronterface.py:1305 msgid "File not found!" msgstr "File non trovato!" #: printrun/pronsole.py:1147 msgid "Entering slicer settings: %s" msgstr "" #: printrun/pronsole.py:1151 #, fuzzy msgid "Slicing: " msgstr "Generazione del percorso " #: printrun/pronsole.py:1158 #, fuzzy msgid "Loading sliced file." msgstr "Carica file" #: printrun/pronsole.py:1161 #, fuzzy msgid "Slicing failed: %s" msgstr "Generazione del percorso " #: printrun/pronsole.py:1174 msgid "" "Creates a gcode file from an stl model using the slicer (with tab-completion)" msgstr "" #: printrun/pronsole.py:1175 msgid "slice filename.stl - create gcode file" msgstr "" #: printrun/pronsole.py:1176 msgid "" "slice filename.stl view - create gcode file and view using skeiniso (if " "using skeinforge)" msgstr "" #: printrun/pronsole.py:1177 #, fuzzy msgid "slice set - adjust slicer settings" msgstr " Configura la generazione del percorso" #: printrun/pronsole.py:1189 msgid "Please enter target name in 8.3 format." msgstr "" #: printrun/pronsole.py:1195 msgid "Uploading as %s" msgstr "" #: printrun/pronsole.py:1196 msgid "Uploading %s" msgstr "" #: printrun/pronsole.py:1198 msgid "Press Ctrl-C to interrupt upload." msgstr "" #: printrun/pronsole.py:1201 msgid "Progress: " msgstr "" #: printrun/pronsole.py:1212 msgid "Upload completed. %s should now be on the card." msgstr "" #: printrun/pronsole.py:1216 msgid "...interrupted!" msgstr "" #: printrun/pronsole.py:1218 msgid "Something wrong happened while uploading:" msgstr "" #: printrun/pronsole.py:1224 msgid "A partial file named %s may have been written to the sd card." msgstr "" #: printrun/pronsole.py:1241 msgid "" "Send a loaded gcode file to the printer. Load a file with the load command " "first." msgstr "" #: printrun/pronsole.py:1243 msgid "Send a loaded gcode file to the printer. You have %s loaded right now." msgstr "" #: printrun/pronsole.py:1247 printrun/pronterface.py:730 #: printrun/pronterface.py:1108 msgid "No file loaded. Please use load first." msgstr "Nessub file caricato. Usare Apri prima." #: printrun/pronsole.py:1252 #, fuzzy msgid "Printing %s" msgstr " Stampa in corso:%04.2f %% |" #: printrun/pronsole.py:1253 msgid "You can monitor the print with the monitor command." msgstr "" #: printrun/pronsole.py:1261 msgid "Not printing, cannot pause." msgstr "" #: printrun/pronsole.py:1267 #, fuzzy msgid "Pauses a running print" msgstr "Inizio della stampa" #: printrun/pronsole.py:1274 msgid "Not paused, unable to resume. Start a print first." msgstr "" #: printrun/pronsole.py:1284 msgid "Resumes a paused print." msgstr "" #: printrun/pronsole.py:1293 msgid "Files on SD card:" msgstr "" #: printrun/pronsole.py:1307 printrun/pronsole.py:1349 #: printrun/pronsole.py:1562 #, fuzzy msgid "Printer is not online. Please connect to it first." msgstr "La stampante non УЈ connessa." #: printrun/pronsole.py:1312 msgid "Lists files on the SD card" msgstr "" #: printrun/pronsole.py:1316 printrun/pronterface.py:1645 msgid "Opening file failed." msgstr "Apertura del file fallita." #: printrun/pronsole.py:1322 printrun/pronterface.py:1651 msgid "Starting print" msgstr "Inizio della stampa" #: printrun/pronsole.py:1345 #, fuzzy msgid "Resets the printer." msgstr "Connetti alla stampante" #: printrun/pronsole.py:1355 #, fuzzy msgid "File is not present on card. Please upload it first." msgstr "Nessub file caricato. Usare Apri prima." #: printrun/pronsole.py:1359 msgid "Printing file: %s from SD card." msgstr "" #: printrun/pronsole.py:1360 msgid "Requesting SD print..." msgstr "" #: printrun/pronsole.py:1364 msgid "Print a file from the SD card. Tab completes with available file names." msgstr "" #: printrun/pronsole.py:1365 msgid "sdprint filename.g" msgstr "" #: printrun/pronsole.py:1382 msgid "Print resumed at: %s" msgstr "" #: printrun/pronsole.py:1384 msgid "Print started at: %s" msgstr "" #: printrun/pronsole.py:1392 msgid "Failed to inhibit sleep:" msgstr "" #: printrun/pronsole.py:1399 msgid "Failed to uninhibit sleep:" msgstr "" #: printrun/pronsole.py:1403 msgid "Print ended at: %(end_time)s and took %(duration)s" msgstr "" #: printrun/pronsole.py:1457 msgid "Printer is not currently printing. No ETA available." msgstr "" #: printrun/pronsole.py:1460 #, fuzzy msgid "Est: %s of %s remaining" msgstr " Stima: %s di %s rimanente | " #: printrun/pronsole.py:1465 msgid "Displays estimated remaining print time." msgstr "" #: printrun/pronsole.py:1498 #, fuzzy msgid "Read the extruder and bed temperature." msgstr "Devi inserire una temperatura." #: printrun/pronsole.py:1507 printrun/pronsole.py:1540 msgid "You must enter a temperature." msgstr "Devi inserire una temperatura." #: printrun/pronsole.py:1512 msgid "" "%s is a high temperature to set your extruder to. Are you sure you want to " "do that?" msgstr "" #: printrun/pronsole.py:1517 #, fuzzy msgid "Setting hotend temperature to %s degrees Celsius." msgstr "Imposto la temperatura dell'estrusore a %f gradi Celsius." #: printrun/pronsole.py:1521 printrun/pronterface.py:359 msgid "" "You cannot set negative temperatures. To turn the hotend off entirely, set " "its temperature to 0." msgstr "" "Non УЈ possibile impostare temperature negative. Per raffreddare l'ugello " "imposta la sua temperatura a 0." #: printrun/pronsole.py:1524 #, fuzzy msgid "Sets the hotend temperature to the value entered." msgstr "Imposto la temperatura dell'estrusore a %f gradi Celsius." #: printrun/pronsole.py:1525 printrun/pronsole.py:1552 msgid "Enter either a temperature in celsius or one of the following keywords" msgstr "" #: printrun/pronsole.py:1544 #, fuzzy msgid "Setting bed temperature to %s degrees Celsius." msgstr "Imposto la temperatura del piano di stampa a %f gradi Celsius." #: printrun/pronsole.py:1548 printrun/pronterface.py:379 msgid "" "You cannot set negative temperatures. To turn the bed off entirely, set its " "temperature to 0." msgstr "" "Non УЈ possibile impostare temperature negative. Per raffreddare il piano di " "stampa imposta la sua temperatura a 0." #: printrun/pronsole.py:1551 #, fuzzy msgid "Sets the bed temperature to the value entered." msgstr "Imposto la temperatura del piano di stampa a %f gradi Celsius." #: printrun/pronsole.py:1565 msgid "Printer is not printing. Please print something before monitoring." msgstr "" #: printrun/pronsole.py:1567 #, fuzzy msgid "Monitoring printer, use ^C to interrupt." msgstr "Sto controllando la stampante." #: printrun/pronsole.py:1572 printrun/pronterface.py:329 msgid "Invalid period given." msgstr "Periodo non valido." #: printrun/pronsole.py:1573 msgid "Updating values every %f seconds." msgstr "" #: printrun/pronsole.py:1584 printrun/pronsole.py:1587 msgid "Print progress: " msgstr "" #: printrun/pronsole.py:1595 printrun/pronterface.py:333 msgid "Done monitoring." msgstr "Controllo terminato." #: printrun/pronsole.py:1599 msgid "Monitor a machine's temperatures and an SD print's status." msgstr "" #: printrun/pronsole.py:1600 msgid "" "monitor - Reports temperature and SD print status (if SD printing) every 5 " "seconds" msgstr "" #: printrun/pronsole.py:1601 msgid "" "monitor 2 - Reports temperature and SD print status (if SD printing) every 2 " "seconds" msgstr "" #: printrun/pronsole.py:1612 msgid "You must specify the tool index as an integer." msgstr "" #: printrun/pronsole.py:1616 msgid "Using tool %d." msgstr "" #: printrun/pronsole.py:1620 msgid "You cannot set negative tool numbers." msgstr "" #: printrun/pronsole.py:1623 msgid "" "Switches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code)." msgstr "" #: printrun/pronsole.py:1627 msgid "No move specified." msgstr "" #: printrun/pronsole.py:1630 printrun/pronsole.py:1692 #: printrun/pronsole.py:1735 printrun/pronsole.py:1762 msgid "" "Printer is currently printing. Please pause the print before you issue " "manual commands." msgstr "" #: printrun/pronsole.py:1633 printrun/pronsole.py:1759 #, fuzzy msgid "Printer is not online. Unable to move." msgstr "La stampante non УЈ connessa." #: printrun/pronsole.py:1649 msgid "Unknown axis." msgstr "" #: printrun/pronsole.py:1654 msgid "Invalid distance" msgstr "" #: printrun/pronsole.py:1665 msgid "Move an axis. Specify the name of the axis and the amount. " msgstr "" #: printrun/pronsole.py:1666 msgid "" "move X 10 will move the X axis forward by 10mm at %s mm/min (default XY " "speed)" msgstr "" #: printrun/pronsole.py:1667 msgid "move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/min" msgstr "" #: printrun/pronsole.py:1668 msgid "" "move Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)" msgstr "" #: printrun/pronsole.py:1669 msgid "Common amounts are in the tabcomplete list." msgstr "" #: printrun/pronsole.py:1699 printrun/pronsole.py:1742 #, fuzzy msgid "Invalid length given." msgstr "Periodo non valido." #: printrun/pronsole.py:1704 printrun/pronsole.py:1747 #, fuzzy msgid "Invalid speed given." msgstr "Periodo non valido." #: printrun/pronsole.py:1712 msgid "Extruding %fmm of filament." msgstr "" #: printrun/pronsole.py:1714 msgid "Reversing %fmm of filament." msgstr "" #: printrun/pronsole.py:1716 msgid "Length is 0, not doing anything." msgstr "" #: printrun/pronsole.py:1722 msgid "" "Extrudes a length of filament, 5mm by default, or the number of mm given as " "a parameter" msgstr "" #: printrun/pronsole.py:1723 msgid "extrude - extrudes 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1724 msgid "extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1725 msgid "extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1726 msgid "extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1732 #, fuzzy msgid "Printer is not online. Unable to reverse." msgstr "La stampante non УЈ connessa." #: printrun/pronsole.py:1751 msgid "" "Reverses the extruder, 5mm by default, or the number of mm given as a " "parameter" msgstr "" #: printrun/pronsole.py:1752 msgid "reverse - reverses 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1753 msgid "reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1754 msgid "reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1755 msgid "reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1777 #, fuzzy msgid "Homes the printer" msgstr "Connetti alla stampante" #: printrun/pronsole.py:1778 msgid "home - homes all axes and zeroes the extruder(Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1779 msgid "home xy - homes x and y axes (Using G28)" msgstr "" #: printrun/pronsole.py:1780 msgid "home z - homes z axis only (Using G28)" msgstr "" #: printrun/pronsole.py:1781 msgid "home e - set extruder position to zero (Using G92)" msgstr "" #: printrun/pronsole.py:1782 msgid "home xyze - homes all axes and zeroes the extruder (Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1790 #, fuzzy msgid "; Motors off" msgstr "Spegni motori" #: printrun/pronsole.py:1792 #, fuzzy msgid "; Extruder off" msgstr "Estrudi" #: printrun/pronsole.py:1794 msgid "; Heatbed off" msgstr "" #: printrun/pronsole.py:1796 msgid "; Fan off" msgstr "" #: printrun/pronsole.py:1798 msgid "; Power supply off" msgstr "" #: printrun/pronsole.py:1801 #, fuzzy msgid "Printer is not online. Unable to turn it off." msgstr "La stampante non УЈ connessa." #: printrun/pronsole.py:1804 msgid "Turns off everything on the printer" msgstr "" #: printrun/pronsole.py:1815 msgid "G-Code calling host command \"%s\"" msgstr "" #: printrun/pronsole.py:1824 msgid "" "Runs a custom script. Current gcode filename can be given using %s token." msgstr "" #: printrun/pronsole.py:1832 msgid "" "Runs a custom script which output gcode which will in turn be executed. " "Current gcode filename can be given using %s token." msgstr "" #: printrun/pronterface.py:149 msgid "Motors off" msgstr "Spegni motori" #: printrun/pronterface.py:149 msgid "Switch all motors off" msgstr "" #: printrun/pronterface.py:150 msgid "Advance extruder by set length" msgstr "" #: printrun/pronterface.py:150 msgid "Extrude" msgstr "Estrudi" #: printrun/pronterface.py:151 msgid "Reverse" msgstr "Ritrai" #: printrun/pronterface.py:151 msgid "Reverse extruder by set length" msgstr "" #: printrun/pronterface.py:165 #, fuzzy msgid "Pronterface" msgstr "Interfaccia di stampa" #: printrun/pronterface.py:192 msgid "" "# I moved all your custom buttons into .pronsolerc.\n" "# Please don't add them here any more.\n" "# Backup of your old buttons is in custombtn.old\n" msgstr "" "# Ho spostato tutti i tuoi pulsanti personalizzati in .pronsolerc.\n" "# Per favore non aggiungerne altri qui.\n" "# Un backup dei tuoi vecchi pulsanti УЈ in custombtn.old\n" #: printrun/pronterface.py:197 msgid "" "Note!!! You have specified custom buttons in both custombtn.txt and ." "pronsolerc" msgstr "" "Nota!!! Hai specificato pulsanti personalizzati sia in custombtn.txt che in ." "pronsolerc" #: printrun/pronterface.py:198 msgid "" "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgstr "" "Ignoro custombtn.txt. Elimina tutti i pulsanti attuali per tornare a " "custombtn.txt" #: printrun/pronterface.py:331 msgid "Monitoring printer." msgstr "Sto controllando la stampante." #: printrun/pronterface.py:354 msgid "Setting hotend temperature to %f degrees Celsius." msgstr "Imposto la temperatura dell'estrusore a %f gradi Celsius." #: printrun/pronterface.py:361 printrun/pronterface.py:381 msgid "You must enter a temperature. (%s)" msgstr "Devi inserire una temperatura. (%s)" #: printrun/pronterface.py:374 msgid "Setting bed temperature to %f degrees Celsius." msgstr "Imposto la temperatura del piano di stampa a %f gradi Celsius." #: printrun/pronterface.py:392 msgid "Setting print speed factor to %d%%." msgstr "" #: printrun/pronterface.py:396 #, fuzzy msgid "You must enter a speed. (%s)" msgstr "Devi inserire una temperatura. (%s)" #: printrun/pronterface.py:470 msgid "Plate function activated" msgstr "" #: printrun/pronterface.py:479 msgid "G-Code plate function activated" msgstr "" #: printrun/pronterface.py:486 msgid "Plated %s" msgstr "" #: printrun/pronterface.py:500 msgid "SD Upload" msgstr "Carica SD" #: printrun/pronterface.py:504 msgid "SD Print" msgstr "Stampa SD" #: printrun/pronterface.py:565 msgid "" "Manual move outside of the build volume prevented (see the \"Clamp manual " "moves\" option)." msgstr "" #: printrun/pronterface.py:621 msgid "" "Attempted to write invalid text to console, which could be due to an invalid " "baudrate" msgstr "" #: printrun/pronterface.py:655 msgid " Opens file" msgstr " Apre un file" #: printrun/pronterface.py:655 msgid "&Open..." msgstr "&Apri..." #: printrun/pronterface.py:663 msgid " Clear output console" msgstr " Svuota la console" #: printrun/pronterface.py:663 msgid "Clear console" msgstr "Pulisci console" #: printrun/pronterface.py:664 msgid " Closes the Window" msgstr " Chiude la finestra" #: printrun/pronterface.py:664 msgid "E&xit" msgstr "&Esci" #: printrun/pronterface.py:665 msgid "&File" msgstr "&File" #: printrun/pronterface.py:668 msgid " Edit open file" msgstr " Modifica file aperto" #: printrun/pronterface.py:668 msgid "&Edit..." msgstr "&Modifica" #: printrun/pronterface.py:669 msgid " Compose 3D models into a single plate" msgstr "" #: printrun/pronterface.py:669 #, fuzzy msgid "Plater" msgstr "Estrusore:" #: printrun/pronterface.py:670 msgid " Compose G-Codes into a single plate" msgstr "" #: printrun/pronterface.py:670 msgid "G-Code Plater" msgstr "" #: printrun/pronterface.py:671 msgid " Exclude parts of the bed from being printed" msgstr "" #: printrun/pronterface.py:671 msgid "Excluder" msgstr "" #: printrun/pronterface.py:672 msgid " Project slices" msgstr " Proietta i layer" #: printrun/pronterface.py:672 msgid "Projector" msgstr "Proiettore" #: printrun/pronterface.py:673 msgid "&Tools" msgstr "" #: printrun/pronterface.py:676 msgid "" " Recover previous print after a disconnect (homes X, Y, restores Z and E " "status)" msgstr "" #: printrun/pronterface.py:676 msgid "Recover" msgstr "" #: printrun/pronterface.py:679 msgid "&Advanced" msgstr "" #: printrun/pronterface.py:686 #, fuzzy msgid "Print &settings" msgstr "Modifica impostazioni" #: printrun/pronterface.py:687 #, fuzzy msgid "&Filament" msgstr "&File" #: printrun/pronterface.py:688 #, fuzzy msgid "&Printer" msgstr "Stampa" #: printrun/pronterface.py:694 msgid "&Slic3r" msgstr "" #: printrun/pronterface.py:696 msgid "Failed to load Slic3r configuration:" msgstr "" #: printrun/pronterface.py:702 msgid "&Macros" msgstr "&Macro" #: printrun/pronterface.py:703 msgid "<&New...>" msgstr "<&Nuovo...>" #: printrun/pronterface.py:704 msgid " Options dialog" msgstr " Finestra di opzioni" #: printrun/pronterface.py:704 msgid "&Options" msgstr "&Opzioni" #: printrun/pronterface.py:706 msgid " Adjust slicing settings" msgstr " Configura la generazione del percorso" #: printrun/pronterface.py:706 #, fuzzy msgid "Slicing settings" msgstr "Impostazioni di generazione del percorso" #: printrun/pronterface.py:708 msgid "Debug communications" msgstr "" #: printrun/pronterface.py:709 msgid "Print all G-code sent to and received from the printer." msgstr "" #: printrun/pronterface.py:713 msgid "&Settings" msgstr "&Impostazioni" #: printrun/pronterface.py:719 #, fuzzy msgid "&About Printrun" msgstr "Controllo automatico temperatura" #: printrun/pronterface.py:719 msgid "Show about dialog" msgstr "" #: printrun/pronterface.py:720 msgid "&Help" msgstr "" #: printrun/pronterface.py:746 msgid "" "Printrun is a pure Python 3D printing (and other types of CNC) host software." msgstr "" #: printrun/pronterface.py:750 #, fuzzy msgid "%.02fmm of filament have been extruded during prints" msgstr "mm di filamento usato in questa stampa\n" #: printrun/pronterface.py:781 #, fuzzy msgid "Monitor printer status" msgstr "Controllo automatico temperatura" #: printrun/pronterface.py:781 msgid "" "Regularly monitor printer temperatures (required to have functional " "temperature graph or gauges)" msgstr "" #: printrun/pronterface.py:782 msgid "Path to the simarrange binary to use in the STL plater" msgstr "" #: printrun/pronterface.py:782 msgid "Simarrange command" msgstr "" #: printrun/pronterface.py:783 msgid "Circular build platform" msgstr "" #: printrun/pronterface.py:783 msgid "Draw a circular (or oval) build platform instead of a rectangular one" msgstr "" #: printrun/pronterface.py:784 #, fuzzy msgid "Extruders count" msgstr "Estrudi" #: printrun/pronterface.py:784 msgid "Number of extruders" msgstr "" #: printrun/pronterface.py:785 msgid "Clamp manual moves" msgstr "" #: printrun/pronterface.py:785 msgid "Prevent manual moves from leaving the specified build dimensions" msgstr "" #: printrun/pronterface.py:786 #, fuzzy msgid "Interface mode" msgstr "Inserisci il nome della macro" #: printrun/pronterface.py:786 msgid "" "Standard interface is a one-page, three columns layout with controls/" "visualization/log\n" "Compact mode is a one-page, two columns layout with controls + log/" "visualization\n" "Tabbed mode is a two-pages mode, where the first page shows controls and the " "second one shows visualization and log." msgstr "" #: printrun/pronterface.py:787 msgid "Controls mode" msgstr "" #: printrun/pronterface.py:787 msgid "" "Standard controls include all controls needed for printer setup and " "calibration, while Mini controls are limited to the ones needed for daily " "printing" msgstr "" #: printrun/pronterface.py:788 msgid "Add a menu to select Slic3r profiles directly from Pronterface" msgstr "" #: printrun/pronterface.py:788 msgid "Enable Slic3r integration" msgstr "" #: printrun/pronterface.py:789 msgid "Update Slic3r default presets" msgstr "" #: printrun/pronterface.py:789 msgid "" "When selecting a profile in Slic3r integration menu, also save it as the " "default Slic3r preset" msgstr "" #: printrun/pronterface.py:790 msgid "Main visualization" msgstr "" #: printrun/pronterface.py:790 msgid "Select visualization for main window." msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D in GCode viewer window" msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D mode instead of 2D layered mode in the visualization window" msgstr "" #: printrun/pronterface.py:792 msgid "Use a lighter 3D visualization" msgstr "" #: printrun/pronterface.py:792 msgid "" "Use a lighter visualization with simple lines instead of extruded paths for " "3D viewer" msgstr "" #: printrun/pronterface.py:793 msgid "Track current layer in main 3D view" msgstr "" #: printrun/pronterface.py:793 msgid "Track the currently printing layer in the main 3D visualization" msgstr "" #: printrun/pronterface.py:794 msgid "Display temperature graph" msgstr "" #: printrun/pronterface.py:794 msgid "Display time-lapse temperature graph" msgstr "" #: printrun/pronterface.py:795 msgid "Display graphical gauges for temperatures visualization" msgstr "" #: printrun/pronterface.py:795 msgid "Display temperature gauges" msgstr "" #: printrun/pronterface.py:796 msgid "Display a checkbox that, when check, locks most of Pronterface" msgstr "" #: printrun/pronterface.py:796 msgid "Display interface lock checkbox" msgstr "" #: printrun/pronterface.py:797 msgid "If lock checkbox is enabled, lock the interface when starting a print" msgstr "" #: printrun/pronterface.py:797 msgid "Lock interface upon print start" msgstr "" #: printrun/pronterface.py:804 msgid "Preview extrusion width" msgstr "" #: printrun/pronterface.py:804 #, fuzzy msgid "Width of Extrusion in Preview" msgstr "Larghezza dell'estrusione nell'anteprima (default: 0.5)" #: printrun/pronterface.py:805 #, fuzzy msgid "Fine Grid Spacing" msgstr "Spaziatura fine della griglia (default: 10)" #: printrun/pronterface.py:805 #, fuzzy msgid "Fine grid spacing" msgstr "Spaziatura fine della griglia (default: 10)" #: printrun/pronterface.py:806 #, fuzzy msgid "Coarse Grid Spacing" msgstr "Spaziatura larga della griglia (default: 50)" #: printrun/pronterface.py:806 #, fuzzy msgid "Coarse grid spacing" msgstr "Spaziatura larga della griglia (default: 50)" #: printrun/pronterface.py:807 msgid "Background color" msgstr "" #: printrun/pronterface.py:807 #, fuzzy msgid "Pronterface background color" msgstr "Colore di sfondo di Pronterface (default: #FFFFFF)" #: printrun/pronterface.py:808 msgid "3D view background color" msgstr "" #: printrun/pronterface.py:808 msgid "Color of the 3D view background" msgstr "" #: printrun/pronterface.py:809 msgid "3D view travel moves color" msgstr "" #: printrun/pronterface.py:809 msgid "Color of travel moves in 3D view" msgstr "" #: printrun/pronterface.py:810 msgid "3D view print moves color" msgstr "" #: printrun/pronterface.py:810 msgid "Color of print moves with tool 0 in 3D view" msgstr "" #: printrun/pronterface.py:811 msgid "3D view tool 1 moves color" msgstr "" #: printrun/pronterface.py:811 msgid "Color of print moves with tool 1 in 3D view" msgstr "" #: printrun/pronterface.py:812 msgid "3D view printed moves color" msgstr "" #: printrun/pronterface.py:812 msgid "Color of printed moves in 3D view" msgstr "" #: printrun/pronterface.py:813 msgid "3D view current layer moves color" msgstr "" #: printrun/pronterface.py:813 msgid "Color of moves in current layer in 3D view" msgstr "" #: printrun/pronterface.py:814 msgid "3D view printed current layer moves color" msgstr "" #: printrun/pronterface.py:814 msgid "Color of already printed moves from current layer in 3D view" msgstr "" #: printrun/pronterface.py:815 msgid "Changing most settings here will require restart to get effect" msgstr "" #: printrun/pronterface.py:815 msgid "Note:" msgstr "" #: printrun/pronterface.py:822 msgid "automatically try to connect to printer on startup" msgstr "" #: printrun/pronterface.py:835 printrun/pronterface.py:1316 msgid "Failed to load recent files list:" msgstr "" #: printrun/pronterface.py:916 #, fuzzy msgid "SD upload: %04.2f%% |" msgstr " stampa da scheda SD:%04.2f %%" #: printrun/pronterface.py:917 printrun/pronterface.py:922 msgid " Line# %d of %d lines |" msgstr " Linea# %d di %d linee |" #: printrun/pronterface.py:919 #, fuzzy msgid "SD printing: %04.2f%% |" msgstr " stampa da scheda SD:%04.2f %%" #: printrun/pronterface.py:921 #, fuzzy msgid "Printing: %04.2f%% |" msgstr " Stampa in corso:%04.2f %% |" #: printrun/pronterface.py:924 msgid " Est: %s of %s remaining | " msgstr " Stima: %s di %s rimanente | " #: printrun/pronterface.py:926 #, fuzzy msgid " Z: %.3f mm" msgstr " Z: %0.2f mm" #: printrun/pronterface.py:931 msgid "Disconnecting after 4 failed writes." msgstr "" #: printrun/pronterface.py:972 #, fuzzy msgid "Locking interface." msgstr "Interfaccia di stampa" #: printrun/pronterface.py:976 #, fuzzy msgid "Unlocking interface." msgstr "Sto controllando la stampante." #: printrun/pronterface.py:985 msgid "Connecting..." msgstr "Connessione..." #: printrun/pronterface.py:997 msgid "Could not parse baud rate: " msgstr "" #: printrun/pronterface.py:1013 printrun/pronterface.py:1023 msgid "Error: You are trying to connect to a non-existing port." msgstr "" #: printrun/pronterface.py:1015 msgid "Error: You don't have permission to open %s." msgstr "" #: printrun/pronterface.py:1016 msgid "You might need to add yourself to the dialout group." msgstr "" #: printrun/pronterface.py:1043 msgid "Disconnected." msgstr "Disconnesso." #: printrun/pronterface.py:1071 msgid "Reset." msgstr "Reset." #: printrun/pronterface.py:1072 msgid "Are you sure you want to reset the printer?" msgstr "Sei sicuro di voler resettare la stampante?" #: printrun/pronterface.py:1072 msgid "Reset?" msgstr "Reset?" #: printrun/pronterface.py:1093 msgid "Restart" msgstr "Ricomincia" #: printrun/pronterface.py:1126 msgid "Pick SD filename" msgstr "Scegli un file dalla scheda SD" #: printrun/pronterface.py:1144 msgid "File upload complete" msgstr "Caricamento file completato" #: printrun/pronterface.py:1151 msgid "Print paused at: %s" msgstr "" #: printrun/pronterface.py:1163 msgid "Resume" msgstr "Ripristina" #: printrun/pronterface.py:1166 #, fuzzy msgid "Resuming." msgstr "Ripristina" #: printrun/pronterface.py:1192 msgid "Pick SD file" msgstr "Scegli un file dalla scheda SD" #: printrun/pronterface.py:1192 msgid "Select the file to print" msgstr "Seleziona il file da stampare" #: printrun/pronterface.py:1228 printrun/pronterface.py:1259 msgid "Slicing " msgstr "Generazione del percorso " #: printrun/pronterface.py:1237 msgid "Failed to execute slicing software: " msgstr "Imposibile eseguire il software di generazione percorso: " #: printrun/pronterface.py:1244 msgid "Slicing..." msgstr "Generazione percorso..." #: printrun/pronterface.py:1296 msgid "Open file to print" msgstr "Apri il file da stampare" #: printrun/pronterface.py:1297 #, fuzzy msgid "" "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*." "gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*" msgstr "files OBJ, STL e GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)" #: printrun/pronterface.py:1325 msgid "Could not update recent files list:" msgstr "" #: printrun/pronterface.py:1359 msgid "Loaded %s, %d lines" msgstr "Caricato %s, %d linee" #: printrun/pronterface.py:1362 msgid "Load File" msgstr "Apri file" #: printrun/pronterface.py:1376 #, fuzzy msgid "%.2fmm of filament used in this print" msgstr "mm di filamento usato in questa stampa\n" #: printrun/pronterface.py:1377 msgid "The print goes:" msgstr "" #: printrun/pronterface.py:1378 #, fuzzy msgid "- from %.2f mm to %.2f mm in X and is %.2f mm wide" msgstr "" "la stampa va da %f mm a %f mm in X\n" "ed УЈ %f mm di larghezza\n" #: printrun/pronterface.py:1379 #, fuzzy msgid "- from %.2f mm to %.2f mm in Y and is %.2f mm deep" msgstr "" "la stampa va da %f mm a %f mm in Y\n" "ed УЈ %f mm di larghezza\n" #: printrun/pronterface.py:1380 #, fuzzy msgid "- from %.2f mm to %.2f mm in Z and is %.2f mm high" msgstr "" "la stampa va da %f mm a %f mm in Z\n" "ed УЈ %f mm di altezza\n" #: printrun/pronterface.py:1450 msgid "Printer is now online." msgstr "La stampante ora УЈ connessa." #: printrun/pronterface.py:1455 msgid "Disconnect" msgstr "Disconnettere." #: printrun/pronterface.py:1688 msgid "click to add new custom button" msgstr "clicca per aggiungere un nuovo pulsante personalizzato" #: printrun/pronterface.py:1694 msgid "Execute command: " msgstr "Esegui comando: " #: printrun/pronterface.py:1714 msgid "" "Defines custom button. Usage: button \"title\" [/c \"colour\"] command" msgstr "" "Definisce un pulsante personalizzato. Uso: button \"titolo\" [/c " "\"colore\"] comando" #: printrun/pronterface.py:1736 msgid "Custom button number should be between 0 and 63" msgstr "Il numero del pulsante personalizzato dev'essere tra 0 e 63" #: printrun/pronterface.py:1827 msgid "Edit custom button '%s'" msgstr "Modifica pulsante personalizzato '%s'" #: printrun/pronterface.py:1829 msgid "Move left <<" msgstr "Muovi a sinistra <<" #: printrun/pronterface.py:1832 msgid "Move right >>" msgstr "Muovi a destra >>" #: printrun/pronterface.py:1836 msgid "Remove custom button '%s'" msgstr "Elimina pulsante personalizzato '%s'" #: printrun/pronterface.py:1839 msgid "Add custom button" msgstr "Aggiungi pulsante personalizzato" #: printrun/pronterface.py:1972 msgid "event object missing" msgstr "oggetto dell'evento mancante" #: printrun/pronterface.py:1985 msgid "Do you want to erase the macro?" msgstr "Vuoi cancellare la macro?" #: printrun/pronterface.py:1989 msgid "Cancelled." msgstr "Annullato." #: printrun/pronterface.py:2007 msgid "Enter macro name" msgstr "Inserisci il nome della macro" #: printrun/pronterface.py:2010 msgid "Macro name:" msgstr "Nome macro:" #: printrun/pronterface.py:2013 msgid "Ok" msgstr "Ok" #: printrun/pronterface.py:2035 #, fuzzy msgid "Macro name may contain only ASCII alphanumeric symbols and underscores" msgstr "" "I nomi delle macro possono contenere solo simboli alfanumerici e underscore" #: printrun/pronterface.py:2038 msgid "Name '%s' is being used by built-in command" msgstr "Nome '%s' УЈ usato da un comando interno" #: pronsole.py:31 msgid "Caught an exception, exiting:" msgstr "" #~ msgid "Folder of last opened file" #~ msgstr "Cartella dell'ultimo file aperto" #~ msgid "Check temp" #~ msgstr "Leggi temperatura" #~ msgid "Mini mode" #~ msgstr "Contrai" #~ msgid "Compose" #~ msgstr "Componi" #~ msgid "Z:" #~ msgstr "Z:" #~ msgid "Full mode" #~ msgstr "Espandi" #~ msgid "Printer is online. " #~ msgstr "La stampante УЈ online. " #~ msgid "Bed" #~ msgstr "Letto" #~ msgid "Hotend" #~ msgstr "Estrusore" #~ msgid ", %d lines" #~ msgstr ", %d linee" #~ msgid "Paused." #~ msgstr "In pausa." #~ msgid "" #~ "Slice command\n" #~ " default:\n" #~ " python skeinforge/skeinforge_application/skeinforge_utilities/" #~ "skeinforge_craft.py $s)" #~ msgstr "" #~ "Comando del generatore di percorso\n" #~ " default:\n" #~ " python skeinforge/skeinforge_application/skeinforge_utilities/" #~ "skeinforge_craft.py $s)" #~ msgid "" #~ "Slice settings command\n" #~ " default:\n" #~ " python skeinforge/skeinforge_application/skeinforge.py" #~ msgstr "" #~ "Comando di configurazione del generatore di percorso\n" #~ " default:\n" #~ " python skeinforge/skeinforge_application/skeinforge.py" Printrun-printrun-2.0.0rc5/locale/nl/000077500000000000000000000000001325617007000174745ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/nl/LC_MESSAGES/000077500000000000000000000000001325617007000212615ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/locale/nl/LC_MESSAGES/pronterface.mo000066400000000000000000000150771325617007000241400ustar00rootroot00000000000000о•a$ƒ,89L \hxŽ ЅŒВ? H P Y b l w  +“ П У Ш е м ч ђ ј    /- ] Hf Џ К к ы ё  ( 0 @ U _ g Mn М в м ф ј   " - : +H &t › OЕ    0 6 C T Y _ q ˆ Ÿ Г Э г к т щ ё њ ".&1U‡5–Ь]а`."­агш"ыKatŒ ›ЈН гšр {†Ž— Ÿ ­ ЙХ.л   &1BHQYm#€ЄHИ  (:Cau‡ЇПай`сB [hq ‡ ’"Ÿ ТЮс3ѕ,)VMqПТоѕћ&,4Faz!‘Г ЙУЬг йчј.!0P4“ШiЬh6)Ÿ.Щјћ * 859ACK8ELS;N0\6[ R /$I`@ O>'XGaH%Z=J1_VTD <-PYF)?+BQ M24*,3^(U &]".W#!:7 Closes the Window Edit open file Opens file Options dialog Printing:%04.2f %% | SD printing:%04.2f %% Z: %0.2f mm# I moved all your custom buttons into .pronsolerc. # Please don't add them here any more. # Backup of your old buttons is in custombtn.old &Edit...&Macros&Open...&Options&Settings, %d lines<&New...>Add custom buttonAre you sure you want to reset the printer?BedBed:Button titleCancelCancelled.Check tempColorCommandConnectConnect to the printerCustom buttonCustom button number should be between 0 and 63DefaultsDefines custom button. Usage: button "title" [/c "colour"] commandDisconnectDo you want to erase the macro?Done monitoring.E&xitEdit custom button '%s'Edit settingsEnter macro nameExtrudeFile not found!File upload completeFull modeHeater:HotendIgnoring custombtn.txt. Remove all current buttons to revert to custombtn.txtInvalid period given.Load fileLoaded Loaded %s, %d linesMacro name:Mini modeMonitoring printer.Motors offMove left <<Move right >>Name '%s' is being used by built-in commandNo file loaded. Please use load first.Not connected to printer.Note!!! You have specified custom buttons in both custombtn.txt and .pronsolercOkOpen file to printOpening file failed.PausePick SD filePick SD filenamePortPrintPrinter InterfacePrinter is not online.Printer is now online.Printer is online. Remove custom button '%s'ResetReset?RestartResumeReverseSD PrintSD UploadSelect the file to printSendSetSetting bed temperature to %f degrees Celsius.Setting hotend temperature to %f degrees Celsius.Starting printWX is not installed. This program requires WX to run.XY:You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.You must enter a temperature.You must enter a temperature. (%s)Z:event object missingmmmm of filament used in this print mm/minProject-Id-Version: Pronterface rl1 POT-Creation-Date: 2012-02-26 02:12+CET PO-Revision-Date: 2011-09-06 16:31+0100 Last-Translator: Ruben Lubbes Language-Team: NL Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated-By: pygettext.py 1.5 Sluit het venster Wijzig geopend bestand Opent bestandOptievenster Printen:%04.2f %% | SD printen:%04.2f %% Z: %0.2f mm# Gedefinieerde knoppen zijn verplaatst naar .pronsolerc. # Hier geen nieuwe knoppen definiУЋren. # Een backup van de oude knoppen staat in custombtn.old &Wijzig...&Macros&Open...&Opties&Instellingen, %d regels<&Nieuw...>Definieer eigen knop.Weet je zeker dat je de printer wilt resetten?BedBed:KnoptitelAnnuleerAfgebrokenControleer Temp.KleurCommandoVerbindVerbind met printerGedefinieerde knopKnopnummer moet tussen 0 en 63 zijnStandaardinstellingDefinieert eigen knop. Gebruik: knop "titel" [/c "kleur"] commandoOntkoppelWilt u de macro verwijderen?Klaar met volgen.&StoppenWijzig gedefineerde knop '%s'Wijzig instellingenVoer macronaam inExtrudenBestand niet gevonden!Bestandsupload voltooidVolledig vensterElement:ElementNegeer custombtn.txt. Verwijder alle gedefinieerde knoppen om gebruik te maken van custombtn.txtFoute gegevens ingevoerdopen bestandGeladen Geladen %s, %d regelsMacronaam:Mini-vensterPrintercommunicatie wordt gevolgd.Motoren uitVerplaats links <<Verplaats rechts >>Naam '%s' wordt gebruikt door ingebouwde instructieGeen bestand geladen. Eerst bestand inladen.Printer is niet verbonden.Let op!!! Er zijn gedefinieerde knoppen in zowel custombtn.txt en .pronsolercOkOpen het te printen bestandBestand openen misluktPauzeKies bestand op SDKies bestandsnaam op SDPoortPrintenPrinter InterfacePrinter is niet verbonden.Printer is nu verbonden.Printer is verbonden. Verwijder gedefinieerde knop '%s'Resetresetten?HerstartHervatTerugAfdruk van SDuploaden naar SDKies het te printen bestandZendStel inBed teperatuur ingesteld op %f graden Celsius.Stel elementtemperatuur in op %f graden Celsius.Start het printenWX is niet geУЏnstalleerd. Dit programma vereist WX.XY:Negatieve temperatuur is niet instelbaar. Om het printbed uit te schakelen wordt temperatuur 0 ingesteld.Negatieve temperatuur is niet instelbaar. Om het element uit te schakelen wordt temperatuur 0 ingesteld.Er moet een temperatuur worden ingesteld.Er moet een temperatuur worden ingesteld. (%s)Z:vermist objectmmmm fillament wordt gebruikt in deze print mm/minPrintrun-printrun-2.0.0rc5/locale/nl/LC_MESSAGES/pronterface.po000066400000000000000000001363611325617007000241430ustar00rootroot00000000000000# Pronterface Message Catalog Dutch # Copyright (C) 2011 Ruben Lubbes # Ruben Lubbes , 2011. # msgid "" msgstr "" "Project-Id-Version: Pronterface rl1\n" "POT-Creation-Date: 2014-03-30 14:35+CEST\n" "PO-Revision-Date: 2011-09-06 16:31+0100\n" "Last-Translator: Ruben Lubbes \n" "Language-Team: NL \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: printrun/excluder.py:26 msgid "" "Part excluder: draw rectangles where print instructions should be ignored" msgstr "" #: printrun/excluder.py:27 printrun/excluder.py:29 msgid "Reset selection" msgstr "" #: printrun/gcodeplater.py:43 printrun/gcodeplater.py:44 msgid "GCODE files (*.gcode;*.GCODE;*.g)" msgstr "" #: printrun/gcodeplater.py:112 printrun/gcodeplater.py:152 msgid "Warning: no rotation support for now, object won't be correctly rotated" msgstr "" #: printrun/gcodeplater.py:141 printrun/gcodeplater.py:178 msgid "Exported merged G-Codes to %s" msgstr "" #: printrun/gcview.py:352 msgid "Fit to plate" msgstr "" #: printrun/gcview.py:353 msgid "Fit to plate [F]" msgstr "" #: printrun/gui/__init__.py:19 printrun/pronterface.py:45 msgid "WX is not installed. This program requires WX to run." msgstr "WX is niet geУЏnstalleerd. Dit programma vereist WX." #: printrun/gui/__init__.py:159 #, fuzzy msgid "Commands" msgstr "Commando" #: printrun/gui/__init__.py:160 msgid "Status" msgstr "" #: printrun/gui/controls.py:126 #, fuzzy msgid "Heat:" msgstr "Element:" #: printrun/gui/controls.py:129 msgid "Switch Hotend Off" msgstr "" #: printrun/gui/controls.py:129 printrun/gui/controls.py:149 #: printrun/gui/toolbar.py:85 msgid "Off" msgstr "" #: printrun/gui/controls.py:137 msgid "Select Temperature for Hotend" msgstr "" #: printrun/gui/controls.py:141 msgid "Switch Hotend On" msgstr "" #: printrun/gui/controls.py:141 printrun/gui/controls.py:161 #: printrun/gui/controls.py:198 msgid "Set" msgstr "Stel in" #: printrun/gui/controls.py:146 printrun/gui/controls.py:215 msgid "Bed:" msgstr "Bed:" #: printrun/gui/controls.py:149 msgid "Switch Heated Bed Off" msgstr "" #: printrun/gui/controls.py:157 msgid "Select Temperature for Heated Bed" msgstr "" #: printrun/gui/controls.py:161 msgid "Switch Heated Bed On" msgstr "" #: printrun/gui/controls.py:187 msgid "Print speed:" msgstr "" #: printrun/gui/controls.py:192 printrun/gui/controls.py:207 msgid "%d%%" msgstr "" #: printrun/gui/controls.py:198 msgid "Set print speed factor" msgstr "" #: printrun/gui/controls.py:213 msgid "Heater:" msgstr "Element:" #: printrun/gui/controls.py:265 msgid "Length:" msgstr "" #: printrun/gui/controls.py:267 msgid "mm" msgstr "mm" #: printrun/gui/controls.py:267 msgid "mm @" msgstr "" #: printrun/gui/controls.py:269 msgid "Amount to Extrude or Retract (mm)" msgstr "" #: printrun/gui/controls.py:272 msgid "Extrude / Retract speed (mm/min)" msgstr "" #: printrun/gui/controls.py:278 msgid "Speed:" msgstr "" #: printrun/gui/controls.py:279 msgid "" "mm/\n" "min" msgstr "" #: printrun/gui/controls.py:290 msgid "Tool:" msgstr "" #: printrun/gui/controls.py:293 msgid "Click to switch current extruder" msgstr "" #: printrun/gui/controls.py:310 msgid "Select current extruder" msgstr "" #: printrun/gui/controls.py:371 msgid "Set Maximum Speed for X & Y axes (mm/min)" msgstr "" #: printrun/gui/controls.py:372 msgid "XY:" msgstr "XY:" #: printrun/gui/controls.py:374 #, fuzzy msgid "mm/min Z:" msgstr "mm/min" #: printrun/gui/controls.py:376 msgid "Set Maximum Speed for Z axis (mm/min)" msgstr "" #: printrun/gui/graph.py:28 msgid "Temperature graph" msgstr "" #: printrun/gui/log.py:32 msgid "" "Send commands to printer\n" "(Type 'help' for simple\n" "help function)" msgstr "" #: printrun/gui/log.py:39 msgid "Send" msgstr "Zend" #: printrun/gui/log.py:39 #, fuzzy msgid "Send Command to Printer" msgstr "Printercommunicatie volgen" #: printrun/gui/toolbar.py:23 msgid "Lock" msgstr "" #: printrun/gui/toolbar.py:25 msgid "Lock graphical interface" msgstr "" #: printrun/gui/toolbar.py:32 msgid "" "Communication Settings\n" "Click to rescan ports" msgstr "" #: printrun/gui/toolbar.py:32 msgid "Port" msgstr "Poort" #: printrun/gui/toolbar.py:37 msgid "Select Port Printer is connected to" msgstr "" #: printrun/gui/toolbar.py:46 msgid "Select Baud rate for printer communication" msgstr "" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1052 msgid "Connect" msgstr "Verbind" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1053 msgid "Connect to the printer" msgstr "Verbind met printer" #: printrun/gui/toolbar.py:61 msgid "Reset" msgstr "Reset" #: printrun/gui/toolbar.py:61 #, fuzzy msgid "Reset the printer" msgstr "Verbind met printer" #: printrun/gui/toolbar.py:69 #, fuzzy msgid "Load a 3D model file" msgstr "open bestand" #: printrun/gui/toolbar.py:69 msgid "Load file" msgstr "open bestand" #: printrun/gui/toolbar.py:70 msgid "SD" msgstr "" #: printrun/gui/toolbar.py:70 #, fuzzy msgid "SD Card Printing" msgstr "Afdruk van SD" #: printrun/gui/toolbar.py:74 msgid "Start Printing Loaded File" msgstr "" #: printrun/gui/toolbar.py:74 printrun/pronterface.py:1003 #: printrun/pronterface.py:1062 printrun/pronterface.py:1078 #: printrun/pronterface.py:1363 printrun/pronterface.py:1445 msgid "Print" msgstr "Printen" #: printrun/gui/toolbar.py:80 msgid "Pause Current Print" msgstr "" #: printrun/gui/toolbar.py:80 printrun/pronterface.py:1002 #: printrun/pronterface.py:1061 printrun/pronterface.py:1081 #: printrun/pronterface.py:1091 printrun/pronterface.py:1172 #: printrun/pronterface.py:1364 msgid "Pause" msgstr "Pauze" #: printrun/gui/toolbar.py:85 msgid "Turn printer off" msgstr "" #: printrun/gui/viz.py:65 msgid "" "Click to examine / edit\n" " layers of loaded file" msgstr "" #: printrun/gui/widgets.py:36 msgid "Find" msgstr "" #: printrun/gui/widgets.py:38 msgid "Save" msgstr "" #: printrun/gui/widgets.py:43 printrun/objectplater.py:76 #: printrun/pronterface.py:1257 printrun/pronterface.py:2017 msgid "Cancel" msgstr "Annuleer" #: printrun/gui/widgets.py:70 #, fuzzy msgid "Not Found!" msgstr "Bestand niet gevonden!" #: printrun/gui/widgets.py:124 #, fuzzy msgid "Printer settings" msgstr "Wijzig instellingen" #: printrun/gui/widgets.py:125 #, fuzzy msgid "User interface" msgstr "Printer Interface" #: printrun/gui/widgets.py:126 #, fuzzy msgid "Colors" msgstr "Kleur" #: printrun/gui/widgets.py:127 msgid "External commands" msgstr "" #: printrun/gui/widgets.py:132 msgid "Edit settings" msgstr "Wijzig instellingen" #: printrun/gui/widgets.py:135 #, fuzzy msgid "Settings" msgstr "&Instellingen" #: printrun/gui/widgets.py:187 msgid "Custom button" msgstr "Gedefinieerde knop" #: printrun/gui/widgets.py:193 msgid "Button title" msgstr "Knoptitel" #: printrun/gui/widgets.py:196 msgid "Command" msgstr "Commando" #: printrun/gui/widgets.py:205 msgid "Color" msgstr "Kleur" #: printrun/gviz.py:29 msgid "Layer number and Z position show here when you scroll" msgstr "" #: printrun/gviz.py:39 msgid "Zoom In [+]" msgstr "" #: printrun/gviz.py:40 msgid "Zoom Out [-]" msgstr "" #: printrun/gviz.py:42 msgid "Move Up a Layer [U]" msgstr "" #: printrun/gviz.py:43 msgid "Move Down a Layer [D]" msgstr "" #: printrun/gviz.py:44 #, fuzzy msgid "Reset view" msgstr "Reset" #: printrun/gviz.py:68 msgid "Gcode view, shift to move view, mousewheel to set layer" msgstr "" #: printrun/gviz.py:105 printrun/gviz.py:241 msgid "Layer %d - Going Up - Z = %.03f mm" msgstr "" #: printrun/gviz.py:250 msgid "Layer %d - Going Down - Z = %.03f mm" msgstr "" #: printrun/objectplater.py:35 msgid "Plate building tool" msgstr "" #: printrun/objectplater.py:45 msgid "Clear" msgstr "" #: printrun/objectplater.py:49 #, fuzzy msgid "Load" msgstr "Geladen " #: printrun/objectplater.py:53 msgid "Snap to Z = 0" msgstr "" #: printrun/objectplater.py:57 msgid "Put at center" msgstr "" #: printrun/objectplater.py:61 msgid "Delete" msgstr "" #: printrun/objectplater.py:65 msgid "Auto arrange" msgstr "" #: printrun/objectplater.py:69 msgid "Export" msgstr "" #: printrun/objectplater.py:73 msgid "Done" msgstr "" #: printrun/objectplater.py:151 msgid "Autoplating" msgstr "" #: printrun/objectplater.py:199 msgid "Bed full, sorry sir :(" msgstr "" #: printrun/objectplater.py:209 msgid "" "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" #: printrun/objectplater.py:210 #, fuzzy msgid "Clear the grid?" msgstr " Sluit het venster" #: printrun/objectplater.py:256 #, fuzzy msgid "Pick file to load" msgstr "Kies bestand op SD" #: printrun/objectplater.py:267 #, fuzzy msgid "Pick file to save to" msgstr "Kies bestandsnaam op SD" #: printrun/plater.py:212 msgid "STL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad" msgstr "" #: printrun/plater.py:213 msgid "STL files (*.stl;*.STL)|*.stl;*.STL" msgstr "" #: printrun/plater.py:244 #, fuzzy msgid "Loading STL file failed" msgstr "Bestand openen mislukt" #: printrun/plater.py:244 printrun/plater.py:251 msgid "Error" msgstr "" #: printrun/plater.py:251 #, fuzzy msgid "Loading OpenSCAD file failed" msgstr "Bestand openen mislukt" #: printrun/plater.py:284 msgid "Couldn't load non-existing file %s" msgstr "" #: printrun/plater.py:360 msgid "Wrote plate to %s" msgstr "" #: printrun/plater.py:367 msgid "" "Failed to use simarrange for plating, falling back to the standard method" msgstr "" #: printrun/plater.py:372 msgid "Autoplating using simarrange" msgstr "" #: printrun/plater.py:387 msgid "Plate full, please remove some objects" msgstr "" #: printrun/plater.py:404 msgid "simarrange failed" msgstr "" #: printrun/printcore.py:177 msgid "Could not connect to %s:%s:" msgstr "" #: printrun/printcore.py:178 msgid "Socket error %s:" msgstr "" #: printrun/printcore.py:191 printrun/printcore.py:196 msgid "Could not connect to %s at baudrate %s:" msgstr "" #: printrun/printcore.py:192 msgid "Serial error: %s" msgstr "" #: printrun/printcore.py:197 msgid "IO error: %s" msgstr "" #: printrun/printcore.py:231 msgid "Can't read from printer (disconnected?) (SelectError {0}): {1}" msgstr "" #: printrun/printcore.py:234 msgid "SelectError ({0}): {1}" msgstr "" #: printrun/printcore.py:237 msgid "Can't read from printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:240 msgid "Can't read from printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:245 msgid "Can't read from printer (disconnected?) (OS Error {0}): {1}" msgstr "" #: printrun/printcore.py:259 msgid "Aborting connection attempt after 4 failed writes." msgstr "" #: printrun/printcore.py:462 printrun/printcore.py:470 #: printrun/pronsole.py:1192 printrun/pronsole.py:1250 #: printrun/pronterface.py:209 printrun/pronterface.py:962 #: printrun/pronterface.py:1111 printrun/pronterface.py:1178 msgid "Not connected to printer." msgstr "Printer is niet verbonden." #: printrun/printcore.py:479 msgid "Print start callback failed with:" msgstr "" #: printrun/printcore.py:490 msgid "Print end callback failed with:" msgstr "" #: printrun/printcore.py:493 msgid "Print thread died due to the following error:" msgstr "" #: printrun/printcore.py:584 msgid "Could not analyze command %s:" msgstr "" #: printrun/printcore.py:601 msgid "Can't write to printer (disconnected ?):" msgstr "" #: printrun/printcore.py:604 msgid "Can't write to printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:607 msgid "Can't write to printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:610 msgid "Socket connection broken, disconnected. ({0}): {1}" msgstr "" #: printrun/pronsole.py:72 #, fuzzy msgid "Default: " msgstr "Standaardinstelling" #: printrun/pronsole.py:73 msgid "(Control-doubleclick to reset to default value)" msgstr "" #: printrun/pronsole.py:108 #, fuzzy msgid "" "Are you sure you want to reset the setting to the default value: {0!r} ?" msgstr "Weet je zeker dat je de printer wilt resetten?" #: printrun/pronsole.py:108 msgid "Confirm set default" msgstr "" #: printrun/pronsole.py:258 msgid "Width" msgstr "" #: printrun/pronsole.py:261 msgid "Depth" msgstr "" #: printrun/pronsole.py:264 msgid "Height" msgstr "" #: printrun/pronsole.py:267 msgid "X offset" msgstr "" #: printrun/pronsole.py:270 msgid "Y offset" msgstr "" #: printrun/pronsole.py:273 msgid "Z offset" msgstr "" #: printrun/pronsole.py:276 msgid "X home pos." msgstr "" #: printrun/pronsole.py:279 msgid "Y home pos." msgstr "" #: printrun/pronsole.py:282 msgid "Z home pos." msgstr "" #: printrun/pronsole.py:301 #, fuzzy msgid "Port used to communicate with printer" msgstr "Printer is niet verbonden." #: printrun/pronsole.py:301 msgid "Serial port" msgstr "" #: printrun/pronsole.py:302 msgid "Baud rate" msgstr "" #: printrun/pronsole.py:302 msgid "Communications Speed" msgstr "" #: printrun/pronsole.py:303 msgid "TCP streaming mode" msgstr "" #: printrun/pronsole.py:303 msgid "" "When using a TCP connection to the printer, the streaming mode will not wait " "for acks from the printer to send new commands. This will break things such " "as ETA prediction, but can result in smoother prints." msgstr "" #: printrun/pronsole.py:304 msgid "Bed temperature for ABS" msgstr "" #: printrun/pronsole.py:304 msgid "Heated Build Platform temp for ABS (deg C)" msgstr "" #: printrun/pronsole.py:305 msgid "Bed temperature for PLA" msgstr "" #: printrun/pronsole.py:305 msgid "Heated Build Platform temp for PLA (deg C)" msgstr "" #: printrun/pronsole.py:306 msgid "Extruder temp for ABS (deg C)" msgstr "" #: printrun/pronsole.py:306 msgid "Extruder temperature for ABS" msgstr "" #: printrun/pronsole.py:307 msgid "Extruder temp for PLA (deg C)" msgstr "" #: printrun/pronsole.py:307 msgid "Extruder temperature for PLA" msgstr "" #: printrun/pronsole.py:308 msgid "Feedrate for Control Panel Moves in X and Y (mm/min)" msgstr "" #: printrun/pronsole.py:308 msgid "X && Y manual feedrate" msgstr "" #: printrun/pronsole.py:309 msgid "Feedrate for Control Panel Moves in Z (mm/min)" msgstr "" #: printrun/pronsole.py:309 msgid "Z manual feedrate" msgstr "" #: printrun/pronsole.py:310 msgid "E manual feedrate" msgstr "" #: printrun/pronsole.py:310 msgid "Feedrate for Control Panel Moves in Extrusions (mm/min)" msgstr "" #: printrun/pronsole.py:311 #, fuzzy msgid "Slice command" msgstr "Commando" #: printrun/pronsole.py:312 #, fuzzy msgid "Slice settings command" msgstr "SFACT Instellingen" #: printrun/pronsole.py:312 msgid "Slicer options command" msgstr "" #: printrun/pronsole.py:313 msgid "Executable to run when the print is finished" msgstr "" #: printrun/pronsole.py:313 #, fuzzy msgid "Final command" msgstr "Commando" #: printrun/pronsole.py:314 #, fuzzy msgid "Error command" msgstr "Commando" #: printrun/pronsole.py:314 msgid "Executable to run when an error occurs" msgstr "" #: printrun/pronsole.py:381 msgid "Failed to run callback after setting \"%s\":" msgstr "" #: printrun/pronsole.py:469 msgid "Build dimensions" msgstr "" #: printrun/pronsole.py:469 msgid "" "Dimensions of Build Platform\n" " & optional offset of origin\n" " & optional switch position\n" "\n" "Examples:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+OffX+OffY+OffZ\n" "XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ" msgstr "" #: printrun/pronsole.py:495 msgid "" "Welcome to the printer console! Type \"help\" for a list of available " "commands." msgstr "" #: printrun/pronsole.py:657 printrun/pronsole.py:665 printrun/pronsole.py:673 #: printrun/pronsole.py:1519 printrun/pronsole.py:1546 #: printrun/pronsole.py:1618 printrun/pronterface.py:357 #: printrun/pronterface.py:377 printrun/pronterface.py:394 msgid "Printer is not online." msgstr "Printer is niet verbonden." #: printrun/pronsole.py:692 msgid "Exiting program. Goodbye!" msgstr "" #: printrun/pronsole.py:697 msgid "Disconnects from the printer and exits the program." msgstr "" #: printrun/pronsole.py:974 msgid "" "load this file on startup instead of .pronsolerc ; you may chain config " "files, if so settings auto-save will use the last specified file" msgstr "" #: printrun/pronsole.py:975 msgid "" "executes command after configuration/.pronsolerc is loaded ; macros/settings " "from these commands are not autosaved" msgstr "" #: printrun/pronsole.py:976 msgid "file to load" msgstr "" #: printrun/pronsole.py:1104 #, fuzzy msgid "Loaded %s, %d lines." msgstr "Geladen %s, %d regels" #: printrun/pronsole.py:1105 printrun/pronterface.py:1381 msgid "Estimated duration: %d layers, %s" msgstr "" #: printrun/pronsole.py:1134 msgid "No file name given." msgstr "" #: printrun/pronsole.py:1140 msgid "Skeining file: %s" msgstr "" #: printrun/pronsole.py:1142 printrun/pronterface.py:1305 msgid "File not found!" msgstr "Bestand niet gevonden!" #: printrun/pronsole.py:1147 msgid "Entering slicer settings: %s" msgstr "" #: printrun/pronsole.py:1151 #, fuzzy msgid "Slicing: " msgstr "Skeinforge draait" #: printrun/pronsole.py:1158 #, fuzzy msgid "Loading sliced file." msgstr "open bestand" #: printrun/pronsole.py:1161 #, fuzzy msgid "Slicing failed: %s" msgstr "Skeinforge draait" #: printrun/pronsole.py:1174 msgid "" "Creates a gcode file from an stl model using the slicer (with tab-completion)" msgstr "" #: printrun/pronsole.py:1175 msgid "slice filename.stl - create gcode file" msgstr "" #: printrun/pronsole.py:1176 msgid "" "slice filename.stl view - create gcode file and view using skeiniso (if " "using skeinforge)" msgstr "" #: printrun/pronsole.py:1177 #, fuzzy msgid "slice set - adjust slicer settings" msgstr "Instellen SFACT" #: printrun/pronsole.py:1189 msgid "Please enter target name in 8.3 format." msgstr "" #: printrun/pronsole.py:1195 msgid "Uploading as %s" msgstr "" #: printrun/pronsole.py:1196 msgid "Uploading %s" msgstr "" #: printrun/pronsole.py:1198 msgid "Press Ctrl-C to interrupt upload." msgstr "" #: printrun/pronsole.py:1201 msgid "Progress: " msgstr "" #: printrun/pronsole.py:1212 msgid "Upload completed. %s should now be on the card." msgstr "" #: printrun/pronsole.py:1216 msgid "...interrupted!" msgstr "" #: printrun/pronsole.py:1218 msgid "Something wrong happened while uploading:" msgstr "" #: printrun/pronsole.py:1224 msgid "A partial file named %s may have been written to the sd card." msgstr "" #: printrun/pronsole.py:1241 msgid "" "Send a loaded gcode file to the printer. Load a file with the load command " "first." msgstr "" #: printrun/pronsole.py:1243 msgid "Send a loaded gcode file to the printer. You have %s loaded right now." msgstr "" #: printrun/pronsole.py:1247 printrun/pronterface.py:730 #: printrun/pronterface.py:1108 msgid "No file loaded. Please use load first." msgstr "Geen bestand geladen. Eerst bestand inladen." #: printrun/pronsole.py:1252 #, fuzzy msgid "Printing %s" msgstr " Printen:%04.2f %% |" #: printrun/pronsole.py:1253 msgid "You can monitor the print with the monitor command." msgstr "" #: printrun/pronsole.py:1261 msgid "Not printing, cannot pause." msgstr "" #: printrun/pronsole.py:1267 #, fuzzy msgid "Pauses a running print" msgstr "Start het printen" #: printrun/pronsole.py:1274 msgid "Not paused, unable to resume. Start a print first." msgstr "" #: printrun/pronsole.py:1284 msgid "Resumes a paused print." msgstr "" #: printrun/pronsole.py:1293 msgid "Files on SD card:" msgstr "" #: printrun/pronsole.py:1307 printrun/pronsole.py:1349 #: printrun/pronsole.py:1562 #, fuzzy msgid "Printer is not online. Please connect to it first." msgstr "Printer is niet verbonden." #: printrun/pronsole.py:1312 msgid "Lists files on the SD card" msgstr "" #: printrun/pronsole.py:1316 printrun/pronterface.py:1645 msgid "Opening file failed." msgstr "Bestand openen mislukt" #: printrun/pronsole.py:1322 printrun/pronterface.py:1651 msgid "Starting print" msgstr "Start het printen" #: printrun/pronsole.py:1345 #, fuzzy msgid "Resets the printer." msgstr "Verbind met printer" #: printrun/pronsole.py:1355 #, fuzzy msgid "File is not present on card. Please upload it first." msgstr "Geen bestand geladen. Eerst bestand inladen." #: printrun/pronsole.py:1359 msgid "Printing file: %s from SD card." msgstr "" #: printrun/pronsole.py:1360 msgid "Requesting SD print..." msgstr "" #: printrun/pronsole.py:1364 msgid "Print a file from the SD card. Tab completes with available file names." msgstr "" #: printrun/pronsole.py:1365 msgid "sdprint filename.g" msgstr "" #: printrun/pronsole.py:1382 msgid "Print resumed at: %s" msgstr "" #: printrun/pronsole.py:1384 msgid "Print started at: %s" msgstr "" #: printrun/pronsole.py:1392 msgid "Failed to inhibit sleep:" msgstr "" #: printrun/pronsole.py:1399 msgid "Failed to uninhibit sleep:" msgstr "" #: printrun/pronsole.py:1403 msgid "Print ended at: %(end_time)s and took %(duration)s" msgstr "" #: printrun/pronsole.py:1457 msgid "Printer is not currently printing. No ETA available." msgstr "" #: printrun/pronsole.py:1460 msgid "Est: %s of %s remaining" msgstr "" #: printrun/pronsole.py:1465 msgid "Displays estimated remaining print time." msgstr "" #: printrun/pronsole.py:1498 #, fuzzy msgid "Read the extruder and bed temperature." msgstr "Er moet een temperatuur worden ingesteld." #: printrun/pronsole.py:1507 printrun/pronsole.py:1540 msgid "You must enter a temperature." msgstr "Er moet een temperatuur worden ingesteld." #: printrun/pronsole.py:1512 msgid "" "%s is a high temperature to set your extruder to. Are you sure you want to " "do that?" msgstr "" #: printrun/pronsole.py:1517 #, fuzzy msgid "Setting hotend temperature to %s degrees Celsius." msgstr "Stel elementtemperatuur in op %f graden Celsius." #: printrun/pronsole.py:1521 printrun/pronterface.py:359 msgid "" "You cannot set negative temperatures. To turn the hotend off entirely, set " "its temperature to 0." msgstr "" "Negatieve temperatuur is niet instelbaar. Om het element uit te schakelen " "wordt temperatuur 0 ingesteld." #: printrun/pronsole.py:1524 #, fuzzy msgid "Sets the hotend temperature to the value entered." msgstr "Stel elementtemperatuur in op %f graden Celsius." #: printrun/pronsole.py:1525 printrun/pronsole.py:1552 msgid "Enter either a temperature in celsius or one of the following keywords" msgstr "" #: printrun/pronsole.py:1544 #, fuzzy msgid "Setting bed temperature to %s degrees Celsius." msgstr "Bed teperatuur ingesteld op %f graden Celsius." #: printrun/pronsole.py:1548 printrun/pronterface.py:379 msgid "" "You cannot set negative temperatures. To turn the bed off entirely, set its " "temperature to 0." msgstr "" "Negatieve temperatuur is niet instelbaar. Om het printbed uit te schakelen " "wordt temperatuur 0 ingesteld." #: printrun/pronsole.py:1551 #, fuzzy msgid "Sets the bed temperature to the value entered." msgstr "Bed teperatuur ingesteld op %f graden Celsius." #: printrun/pronsole.py:1565 msgid "Printer is not printing. Please print something before monitoring." msgstr "" #: printrun/pronsole.py:1567 #, fuzzy msgid "Monitoring printer, use ^C to interrupt." msgstr "Printercommunicatie wordt gevolgd." #: printrun/pronsole.py:1572 printrun/pronterface.py:329 msgid "Invalid period given." msgstr "Foute gegevens ingevoerd" #: printrun/pronsole.py:1573 msgid "Updating values every %f seconds." msgstr "" #: printrun/pronsole.py:1584 printrun/pronsole.py:1587 msgid "Print progress: " msgstr "" #: printrun/pronsole.py:1595 printrun/pronterface.py:333 msgid "Done monitoring." msgstr "Klaar met volgen." #: printrun/pronsole.py:1599 msgid "Monitor a machine's temperatures and an SD print's status." msgstr "" #: printrun/pronsole.py:1600 msgid "" "monitor - Reports temperature and SD print status (if SD printing) every 5 " "seconds" msgstr "" #: printrun/pronsole.py:1601 msgid "" "monitor 2 - Reports temperature and SD print status (if SD printing) every 2 " "seconds" msgstr "" #: printrun/pronsole.py:1612 msgid "You must specify the tool index as an integer." msgstr "" #: printrun/pronsole.py:1616 msgid "Using tool %d." msgstr "" #: printrun/pronsole.py:1620 msgid "You cannot set negative tool numbers." msgstr "" #: printrun/pronsole.py:1623 msgid "" "Switches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code)." msgstr "" #: printrun/pronsole.py:1627 msgid "No move specified." msgstr "" #: printrun/pronsole.py:1630 printrun/pronsole.py:1692 #: printrun/pronsole.py:1735 printrun/pronsole.py:1762 msgid "" "Printer is currently printing. Please pause the print before you issue " "manual commands." msgstr "" #: printrun/pronsole.py:1633 printrun/pronsole.py:1759 #, fuzzy msgid "Printer is not online. Unable to move." msgstr "Printer is niet verbonden." #: printrun/pronsole.py:1649 msgid "Unknown axis." msgstr "" #: printrun/pronsole.py:1654 msgid "Invalid distance" msgstr "" #: printrun/pronsole.py:1665 msgid "Move an axis. Specify the name of the axis and the amount. " msgstr "" #: printrun/pronsole.py:1666 msgid "" "move X 10 will move the X axis forward by 10mm at %s mm/min (default XY " "speed)" msgstr "" #: printrun/pronsole.py:1667 msgid "move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/min" msgstr "" #: printrun/pronsole.py:1668 msgid "" "move Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)" msgstr "" #: printrun/pronsole.py:1669 msgid "Common amounts are in the tabcomplete list." msgstr "" #: printrun/pronsole.py:1699 printrun/pronsole.py:1742 #, fuzzy msgid "Invalid length given." msgstr "Foute gegevens ingevoerd" #: printrun/pronsole.py:1704 printrun/pronsole.py:1747 #, fuzzy msgid "Invalid speed given." msgstr "Foute gegevens ingevoerd" #: printrun/pronsole.py:1712 msgid "Extruding %fmm of filament." msgstr "" #: printrun/pronsole.py:1714 msgid "Reversing %fmm of filament." msgstr "" #: printrun/pronsole.py:1716 msgid "Length is 0, not doing anything." msgstr "" #: printrun/pronsole.py:1722 msgid "" "Extrudes a length of filament, 5mm by default, or the number of mm given as " "a parameter" msgstr "" #: printrun/pronsole.py:1723 msgid "extrude - extrudes 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1724 msgid "extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1725 msgid "extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1726 msgid "extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1732 #, fuzzy msgid "Printer is not online. Unable to reverse." msgstr "Printer is niet verbonden." #: printrun/pronsole.py:1751 msgid "" "Reverses the extruder, 5mm by default, or the number of mm given as a " "parameter" msgstr "" #: printrun/pronsole.py:1752 msgid "reverse - reverses 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1753 msgid "reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1754 msgid "reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1755 msgid "reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1777 #, fuzzy msgid "Homes the printer" msgstr "Verbind met printer" #: printrun/pronsole.py:1778 msgid "home - homes all axes and zeroes the extruder(Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1779 msgid "home xy - homes x and y axes (Using G28)" msgstr "" #: printrun/pronsole.py:1780 msgid "home z - homes z axis only (Using G28)" msgstr "" #: printrun/pronsole.py:1781 msgid "home e - set extruder position to zero (Using G92)" msgstr "" #: printrun/pronsole.py:1782 msgid "home xyze - homes all axes and zeroes the extruder (Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1790 #, fuzzy msgid "; Motors off" msgstr "Motoren uit" #: printrun/pronsole.py:1792 #, fuzzy msgid "; Extruder off" msgstr "Extruden" #: printrun/pronsole.py:1794 msgid "; Heatbed off" msgstr "" #: printrun/pronsole.py:1796 msgid "; Fan off" msgstr "" #: printrun/pronsole.py:1798 msgid "; Power supply off" msgstr "" #: printrun/pronsole.py:1801 #, fuzzy msgid "Printer is not online. Unable to turn it off." msgstr "Printer is niet verbonden." #: printrun/pronsole.py:1804 msgid "Turns off everything on the printer" msgstr "" #: printrun/pronsole.py:1815 msgid "G-Code calling host command \"%s\"" msgstr "" #: printrun/pronsole.py:1824 msgid "" "Runs a custom script. Current gcode filename can be given using %s token." msgstr "" #: printrun/pronsole.py:1832 msgid "" "Runs a custom script which output gcode which will in turn be executed. " "Current gcode filename can be given using %s token." msgstr "" #: printrun/pronterface.py:149 msgid "Motors off" msgstr "Motoren uit" #: printrun/pronterface.py:149 msgid "Switch all motors off" msgstr "" #: printrun/pronterface.py:150 msgid "Advance extruder by set length" msgstr "" #: printrun/pronterface.py:150 msgid "Extrude" msgstr "Extruden" #: printrun/pronterface.py:151 msgid "Reverse" msgstr "Terug" #: printrun/pronterface.py:151 msgid "Reverse extruder by set length" msgstr "" #: printrun/pronterface.py:165 #, fuzzy msgid "Pronterface" msgstr "Printer Interface" #: printrun/pronterface.py:192 msgid "" "# I moved all your custom buttons into .pronsolerc.\n" "# Please don't add them here any more.\n" "# Backup of your old buttons is in custombtn.old\n" msgstr "" "# Gedefinieerde knoppen zijn verplaatst naar .pronsolerc.\n" "# Hier geen nieuwe knoppen definiУЋren.\n" "# Een backup van de oude knoppen staat in custombtn.old\n" #: printrun/pronterface.py:197 msgid "" "Note!!! You have specified custom buttons in both custombtn.txt and ." "pronsolerc" msgstr "" "Let op!!! Er zijn gedefinieerde knoppen in zowel custombtn.txt en .pronsolerc" #: printrun/pronterface.py:198 msgid "" "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgstr "" "Negeer custombtn.txt. Verwijder alle gedefinieerde knoppen om gebruik te " "maken van custombtn.txt" #: printrun/pronterface.py:331 msgid "Monitoring printer." msgstr "Printercommunicatie wordt gevolgd." #: printrun/pronterface.py:354 msgid "Setting hotend temperature to %f degrees Celsius." msgstr "Stel elementtemperatuur in op %f graden Celsius." #: printrun/pronterface.py:361 printrun/pronterface.py:381 msgid "You must enter a temperature. (%s)" msgstr "Er moet een temperatuur worden ingesteld. (%s)" #: printrun/pronterface.py:374 msgid "Setting bed temperature to %f degrees Celsius." msgstr "Bed teperatuur ingesteld op %f graden Celsius." #: printrun/pronterface.py:392 msgid "Setting print speed factor to %d%%." msgstr "" #: printrun/pronterface.py:396 #, fuzzy msgid "You must enter a speed. (%s)" msgstr "Er moet een temperatuur worden ingesteld. (%s)" #: printrun/pronterface.py:470 msgid "Plate function activated" msgstr "" #: printrun/pronterface.py:479 msgid "G-Code plate function activated" msgstr "" #: printrun/pronterface.py:486 msgid "Plated %s" msgstr "" #: printrun/pronterface.py:500 msgid "SD Upload" msgstr "uploaden naar SD" #: printrun/pronterface.py:504 msgid "SD Print" msgstr "Afdruk van SD" #: printrun/pronterface.py:565 msgid "" "Manual move outside of the build volume prevented (see the \"Clamp manual " "moves\" option)." msgstr "" #: printrun/pronterface.py:621 msgid "" "Attempted to write invalid text to console, which could be due to an invalid " "baudrate" msgstr "" #: printrun/pronterface.py:655 msgid " Opens file" msgstr " Opent bestand" #: printrun/pronterface.py:655 msgid "&Open..." msgstr "&Open..." #: printrun/pronterface.py:663 msgid " Clear output console" msgstr "" #: printrun/pronterface.py:663 msgid "Clear console" msgstr "" #: printrun/pronterface.py:664 msgid " Closes the Window" msgstr " Sluit het venster" #: printrun/pronterface.py:664 msgid "E&xit" msgstr "&Stoppen" #: printrun/pronterface.py:665 msgid "&File" msgstr "" #: printrun/pronterface.py:668 msgid " Edit open file" msgstr " Wijzig geopend bestand" #: printrun/pronterface.py:668 msgid "&Edit..." msgstr "&Wijzig..." #: printrun/pronterface.py:669 msgid " Compose 3D models into a single plate" msgstr "" #: printrun/pronterface.py:669 #, fuzzy msgid "Plater" msgstr "Element:" #: printrun/pronterface.py:670 msgid " Compose G-Codes into a single plate" msgstr "" #: printrun/pronterface.py:670 msgid "G-Code Plater" msgstr "" #: printrun/pronterface.py:671 msgid " Exclude parts of the bed from being printed" msgstr "" #: printrun/pronterface.py:671 msgid "Excluder" msgstr "" #: printrun/pronterface.py:672 msgid " Project slices" msgstr "" #: printrun/pronterface.py:672 msgid "Projector" msgstr "" #: printrun/pronterface.py:673 msgid "&Tools" msgstr "" #: printrun/pronterface.py:676 msgid "" " Recover previous print after a disconnect (homes X, Y, restores Z and E " "status)" msgstr "" #: printrun/pronterface.py:676 msgid "Recover" msgstr "" #: printrun/pronterface.py:679 msgid "&Advanced" msgstr "" #: printrun/pronterface.py:686 #, fuzzy msgid "Print &settings" msgstr "Wijzig instellingen" #: printrun/pronterface.py:687 msgid "&Filament" msgstr "" #: printrun/pronterface.py:688 #, fuzzy msgid "&Printer" msgstr "&Printen" #: printrun/pronterface.py:694 msgid "&Slic3r" msgstr "" #: printrun/pronterface.py:696 msgid "Failed to load Slic3r configuration:" msgstr "" #: printrun/pronterface.py:702 msgid "&Macros" msgstr "&Macros" #: printrun/pronterface.py:703 msgid "<&New...>" msgstr "<&Nieuw...>" #: printrun/pronterface.py:704 msgid " Options dialog" msgstr "Optievenster" #: printrun/pronterface.py:704 msgid "&Options" msgstr "&Opties" #: printrun/pronterface.py:706 #, fuzzy msgid " Adjust slicing settings" msgstr "Instellen SFACT" #: printrun/pronterface.py:706 #, fuzzy msgid "Slicing settings" msgstr "SFACT Instellingen" #: printrun/pronterface.py:708 msgid "Debug communications" msgstr "" #: printrun/pronterface.py:709 msgid "Print all G-code sent to and received from the printer." msgstr "" #: printrun/pronterface.py:713 msgid "&Settings" msgstr "&Instellingen" #: printrun/pronterface.py:719 #, fuzzy msgid "&About Printrun" msgstr "Printercommunicatie volgen" #: printrun/pronterface.py:719 msgid "Show about dialog" msgstr "" #: printrun/pronterface.py:720 msgid "&Help" msgstr "" #: printrun/pronterface.py:746 msgid "" "Printrun is a pure Python 3D printing (and other types of CNC) host software." msgstr "" #: printrun/pronterface.py:750 #, fuzzy msgid "%.02fmm of filament have been extruded during prints" msgstr "mm fillament wordt gebruikt in deze print\n" #: printrun/pronterface.py:781 #, fuzzy msgid "Monitor printer status" msgstr "Printercommunicatie volgen" #: printrun/pronterface.py:781 msgid "" "Regularly monitor printer temperatures (required to have functional " "temperature graph or gauges)" msgstr "" #: printrun/pronterface.py:782 msgid "Path to the simarrange binary to use in the STL plater" msgstr "" #: printrun/pronterface.py:782 msgid "Simarrange command" msgstr "" #: printrun/pronterface.py:783 msgid "Circular build platform" msgstr "" #: printrun/pronterface.py:783 msgid "Draw a circular (or oval) build platform instead of a rectangular one" msgstr "" #: printrun/pronterface.py:784 #, fuzzy msgid "Extruders count" msgstr "Extruden" #: printrun/pronterface.py:784 msgid "Number of extruders" msgstr "" #: printrun/pronterface.py:785 msgid "Clamp manual moves" msgstr "" #: printrun/pronterface.py:785 msgid "Prevent manual moves from leaving the specified build dimensions" msgstr "" #: printrun/pronterface.py:786 #, fuzzy msgid "Interface mode" msgstr "Voer macronaam in" #: printrun/pronterface.py:786 msgid "" "Standard interface is a one-page, three columns layout with controls/" "visualization/log\n" "Compact mode is a one-page, two columns layout with controls + log/" "visualization\n" "Tabbed mode is a two-pages mode, where the first page shows controls and the " "second one shows visualization and log." msgstr "" #: printrun/pronterface.py:787 msgid "Controls mode" msgstr "" #: printrun/pronterface.py:787 msgid "" "Standard controls include all controls needed for printer setup and " "calibration, while Mini controls are limited to the ones needed for daily " "printing" msgstr "" #: printrun/pronterface.py:788 msgid "Add a menu to select Slic3r profiles directly from Pronterface" msgstr "" #: printrun/pronterface.py:788 msgid "Enable Slic3r integration" msgstr "" #: printrun/pronterface.py:789 msgid "Update Slic3r default presets" msgstr "" #: printrun/pronterface.py:789 msgid "" "When selecting a profile in Slic3r integration menu, also save it as the " "default Slic3r preset" msgstr "" #: printrun/pronterface.py:790 msgid "Main visualization" msgstr "" #: printrun/pronterface.py:790 msgid "Select visualization for main window." msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D in GCode viewer window" msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D mode instead of 2D layered mode in the visualization window" msgstr "" #: printrun/pronterface.py:792 msgid "Use a lighter 3D visualization" msgstr "" #: printrun/pronterface.py:792 msgid "" "Use a lighter visualization with simple lines instead of extruded paths for " "3D viewer" msgstr "" #: printrun/pronterface.py:793 msgid "Track current layer in main 3D view" msgstr "" #: printrun/pronterface.py:793 msgid "Track the currently printing layer in the main 3D visualization" msgstr "" #: printrun/pronterface.py:794 msgid "Display temperature graph" msgstr "" #: printrun/pronterface.py:794 msgid "Display time-lapse temperature graph" msgstr "" #: printrun/pronterface.py:795 msgid "Display graphical gauges for temperatures visualization" msgstr "" #: printrun/pronterface.py:795 msgid "Display temperature gauges" msgstr "" #: printrun/pronterface.py:796 msgid "Display a checkbox that, when check, locks most of Pronterface" msgstr "" #: printrun/pronterface.py:796 msgid "Display interface lock checkbox" msgstr "" #: printrun/pronterface.py:797 msgid "If lock checkbox is enabled, lock the interface when starting a print" msgstr "" #: printrun/pronterface.py:797 msgid "Lock interface upon print start" msgstr "" #: printrun/pronterface.py:804 msgid "Preview extrusion width" msgstr "" #: printrun/pronterface.py:804 msgid "Width of Extrusion in Preview" msgstr "" #: printrun/pronterface.py:805 msgid "Fine Grid Spacing" msgstr "" #: printrun/pronterface.py:805 msgid "Fine grid spacing" msgstr "" #: printrun/pronterface.py:806 msgid "Coarse Grid Spacing" msgstr "" #: printrun/pronterface.py:806 msgid "Coarse grid spacing" msgstr "" #: printrun/pronterface.py:807 msgid "Background color" msgstr "" #: printrun/pronterface.py:807 msgid "Pronterface background color" msgstr "" #: printrun/pronterface.py:808 msgid "3D view background color" msgstr "" #: printrun/pronterface.py:808 msgid "Color of the 3D view background" msgstr "" #: printrun/pronterface.py:809 msgid "3D view travel moves color" msgstr "" #: printrun/pronterface.py:809 msgid "Color of travel moves in 3D view" msgstr "" #: printrun/pronterface.py:810 msgid "3D view print moves color" msgstr "" #: printrun/pronterface.py:810 msgid "Color of print moves with tool 0 in 3D view" msgstr "" #: printrun/pronterface.py:811 msgid "3D view tool 1 moves color" msgstr "" #: printrun/pronterface.py:811 msgid "Color of print moves with tool 1 in 3D view" msgstr "" #: printrun/pronterface.py:812 msgid "3D view printed moves color" msgstr "" #: printrun/pronterface.py:812 msgid "Color of printed moves in 3D view" msgstr "" #: printrun/pronterface.py:813 msgid "3D view current layer moves color" msgstr "" #: printrun/pronterface.py:813 msgid "Color of moves in current layer in 3D view" msgstr "" #: printrun/pronterface.py:814 msgid "3D view printed current layer moves color" msgstr "" #: printrun/pronterface.py:814 msgid "Color of already printed moves from current layer in 3D view" msgstr "" #: printrun/pronterface.py:815 msgid "Changing most settings here will require restart to get effect" msgstr "" #: printrun/pronterface.py:815 msgid "Note:" msgstr "" #: printrun/pronterface.py:822 msgid "automatically try to connect to printer on startup" msgstr "" #: printrun/pronterface.py:835 printrun/pronterface.py:1316 msgid "Failed to load recent files list:" msgstr "" #: printrun/pronterface.py:916 #, fuzzy msgid "SD upload: %04.2f%% |" msgstr " SD printen:%04.2f %%" #: printrun/pronterface.py:917 printrun/pronterface.py:922 msgid " Line# %d of %d lines |" msgstr "" #: printrun/pronterface.py:919 #, fuzzy msgid "SD printing: %04.2f%% |" msgstr " SD printen:%04.2f %%" #: printrun/pronterface.py:921 #, fuzzy msgid "Printing: %04.2f%% |" msgstr " Printen:%04.2f %% |" #: printrun/pronterface.py:924 msgid " Est: %s of %s remaining | " msgstr "" #: printrun/pronterface.py:926 #, fuzzy msgid " Z: %.3f mm" msgstr " Z: %0.2f mm" #: printrun/pronterface.py:931 msgid "Disconnecting after 4 failed writes." msgstr "" #: printrun/pronterface.py:972 #, fuzzy msgid "Locking interface." msgstr "Printer Interface" #: printrun/pronterface.py:976 #, fuzzy msgid "Unlocking interface." msgstr "Printercommunicatie wordt gevolgd." #: printrun/pronterface.py:985 #, fuzzy msgid "Connecting..." msgstr "Verbind" #: printrun/pronterface.py:997 msgid "Could not parse baud rate: " msgstr "" #: printrun/pronterface.py:1013 printrun/pronterface.py:1023 msgid "Error: You are trying to connect to a non-existing port." msgstr "" #: printrun/pronterface.py:1015 msgid "Error: You don't have permission to open %s." msgstr "" #: printrun/pronterface.py:1016 msgid "You might need to add yourself to the dialout group." msgstr "" #: printrun/pronterface.py:1043 #, fuzzy msgid "Disconnected." msgstr "Ontkoppel" #: printrun/pronterface.py:1071 #, fuzzy msgid "Reset." msgstr "Reset" #: printrun/pronterface.py:1072 msgid "Are you sure you want to reset the printer?" msgstr "Weet je zeker dat je de printer wilt resetten?" #: printrun/pronterface.py:1072 msgid "Reset?" msgstr "resetten?" #: printrun/pronterface.py:1093 msgid "Restart" msgstr "Herstart" #: printrun/pronterface.py:1126 msgid "Pick SD filename" msgstr "Kies bestandsnaam op SD" #: printrun/pronterface.py:1144 msgid "File upload complete" msgstr "Bestandsupload voltooid" #: printrun/pronterface.py:1151 msgid "Print paused at: %s" msgstr "" #: printrun/pronterface.py:1163 msgid "Resume" msgstr "Hervat" #: printrun/pronterface.py:1166 #, fuzzy msgid "Resuming." msgstr "Hervat" #: printrun/pronterface.py:1192 msgid "Pick SD file" msgstr "Kies bestand op SD" #: printrun/pronterface.py:1192 msgid "Select the file to print" msgstr "Kies het te printen bestand" #: printrun/pronterface.py:1228 printrun/pronterface.py:1259 #, fuzzy msgid "Slicing " msgstr "Skeinforge draait" #: printrun/pronterface.py:1237 msgid "Failed to execute slicing software: " msgstr "" #: printrun/pronterface.py:1244 #, fuzzy msgid "Slicing..." msgstr "Skeinforge draait..." #: printrun/pronterface.py:1296 msgid "Open file to print" msgstr "Open het te printen bestand" #: printrun/pronterface.py:1297 #, fuzzy msgid "" "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*." "gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*" msgstr "STL en GCODE bestanden (;*.gcode;*.g;*.stl;*.STL;)" #: printrun/pronterface.py:1325 msgid "Could not update recent files list:" msgstr "" #: printrun/pronterface.py:1359 msgid "Loaded %s, %d lines" msgstr "Geladen %s, %d regels" #: printrun/pronterface.py:1362 #, fuzzy msgid "Load File" msgstr "open bestand" #: printrun/pronterface.py:1376 #, fuzzy msgid "%.2fmm of filament used in this print" msgstr "mm fillament wordt gebruikt in deze print\n" #: printrun/pronterface.py:1377 msgid "The print goes:" msgstr "" #: printrun/pronterface.py:1378 msgid "- from %.2f mm to %.2f mm in X and is %.2f mm wide" msgstr "" #: printrun/pronterface.py:1379 msgid "- from %.2f mm to %.2f mm in Y and is %.2f mm deep" msgstr "" #: printrun/pronterface.py:1380 msgid "- from %.2f mm to %.2f mm in Z and is %.2f mm high" msgstr "" #: printrun/pronterface.py:1450 msgid "Printer is now online." msgstr "Printer is nu verbonden." #: printrun/pronterface.py:1455 msgid "Disconnect" msgstr "Ontkoppel" #: printrun/pronterface.py:1688 #, fuzzy msgid "click to add new custom button" msgstr "Definieer eigen knop." #: printrun/pronterface.py:1694 msgid "Execute command: " msgstr "" #: printrun/pronterface.py:1714 msgid "" "Defines custom button. Usage: button \"title\" [/c \"colour\"] command" msgstr "" "Definieert eigen knop. Gebruik: knop \"titel\" [/c \"kleur\"] commando" #: printrun/pronterface.py:1736 msgid "Custom button number should be between 0 and 63" msgstr "Knopnummer moet tussen 0 en 63 zijn" #: printrun/pronterface.py:1827 msgid "Edit custom button '%s'" msgstr "Wijzig gedefineerde knop '%s'" #: printrun/pronterface.py:1829 msgid "Move left <<" msgstr "Verplaats links <<" #: printrun/pronterface.py:1832 msgid "Move right >>" msgstr "Verplaats rechts >>" #: printrun/pronterface.py:1836 msgid "Remove custom button '%s'" msgstr "Verwijder gedefinieerde knop '%s'" #: printrun/pronterface.py:1839 msgid "Add custom button" msgstr "Definieer eigen knop." #: printrun/pronterface.py:1972 msgid "event object missing" msgstr "vermist object" #: printrun/pronterface.py:1985 msgid "Do you want to erase the macro?" msgstr "Wilt u de macro verwijderen?" #: printrun/pronterface.py:1989 msgid "Cancelled." msgstr "Afgebroken" #: printrun/pronterface.py:2007 msgid "Enter macro name" msgstr "Voer macronaam in" #: printrun/pronterface.py:2010 msgid "Macro name:" msgstr "Macronaam:" #: printrun/pronterface.py:2013 msgid "Ok" msgstr "Ok" #: printrun/pronterface.py:2035 msgid "Macro name may contain only ASCII alphanumeric symbols and underscores" msgstr "" #: printrun/pronterface.py:2038 msgid "Name '%s' is being used by built-in command" msgstr "Naam '%s' wordt gebruikt door ingebouwde instructie" #: pronsole.py:31 msgid "Caught an exception, exiting:" msgstr "" #~ msgid "Check temp" #~ msgstr "Controleer Temp." #~ msgid "Mini mode" #~ msgstr "Mini-venster" #~ msgid "Z:" #~ msgstr "Z:" #~ msgid "Full mode" #~ msgstr "Volledig venster" #~ msgid "Printer is online. " #~ msgstr "Printer is verbonden. " #~ msgid "Bed" #~ msgstr "Bed" #~ msgid "Hotend" #~ msgstr "Element" #~ msgid ", %d lines" #~ msgstr ", %d regels" #, fuzzy #~ msgid "Paused." #~ msgstr "Pauze" #~ msgid "X+100" #~ msgstr "X+100" #~ msgid "X+10" #~ msgstr "X+10" #~ msgid "X+1" #~ msgstr "X+1" #~ msgid "X+0.1" #~ msgstr "X+0.1" #~ msgid "HomeX" #~ msgstr "0-puntX" #~ msgid "X-0.1" #~ msgstr "X-0.1" #~ msgid "X-1" #~ msgstr "X-1" #~ msgid "X-10" #~ msgstr "X-10" #~ msgid "X-100" #~ msgstr "X-100" #~ msgid "Y+100" #~ msgstr "Y+100" #~ msgid "Y+10" #~ msgstr "Y+10" #~ msgid "Y+1" #~ msgstr "Y+1" #~ msgid "Y+0.1" #~ msgstr "Y+0.1" #~ msgid "HomeY" #~ msgstr "0-puntY" #~ msgid "Y-0.1" #~ msgstr "Y-0.1" #~ msgid "Y-1" #~ msgstr "Y-1" #~ msgid "Y-10" #~ msgstr "Y-10" #~ msgid "Y-100" #~ msgstr "Y-100" #~ msgid "Z+10" #~ msgstr "Z+10" #~ msgid "Z+1" #~ msgstr "Z+1" #~ msgid "Z+0.1" #~ msgstr "Z+0.1" #~ msgid "HomeZ" #~ msgstr "0-puntZ" #~ msgid "Z-0.1" #~ msgstr "Z-0.1" #~ msgid "Z-1" #~ msgstr "Z-1" #~ msgid "Z-10" #~ msgstr "Z-10" #~ msgid "Home" #~ msgstr "0-punt" #~ msgid " degrees Celsius." #~ msgstr " graden Celsius." #~ msgid "SFACT Quick Settings" #~ msgstr "SFACT Snelinstelling" #~ msgid " Quickly adjust SFACT settings for active profile" #~ msgstr " Eenvoudig SFACT's huidige profiel instellen" #~ msgid "Name '" #~ msgstr "Naam '" #~ msgid "Skeinforge execution failed." #~ msgstr "Skeinforge was niet succesvol." #~ msgid "" #~ "Skeinforge not found. \n" #~ "Please copy Skeinforge into a directory named \"skeinforge\" in the same " #~ "directory as this file." #~ msgstr "" #~ "Skeinforge niet gevonden.\n" #~ "Plaats Skeinforge in een map met de naam \"skeinforge\" in dezelfde map " #~ "als dit bestand." Printrun-printrun-2.0.0rc5/locale/plater.pot000066400000000000000000000027771325617007000211130ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2012-08-04 21:53+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" "Generated-By: pygettext.py 1.5\n" #: plater.py:246 msgid "Plate building tool" msgstr "" #: plater.py:252 msgid "Clear" msgstr "" #: plater.py:253 msgid "Load" msgstr "" #: plater.py:255 plater.py:258 msgid "Export" msgstr "" #: plater.py:260 msgid "Done" msgstr "" #: plater.py:262 msgid "Cancel" msgstr "" #: plater.py:264 msgid "Snap to Z = 0" msgstr "" #: plater.py:265 msgid "Put at 100, 100" msgstr "" #: plater.py:266 msgid "Delete" msgstr "" #: plater.py:267 msgid "Auto" msgstr "" #: plater.py:291 msgid "Autoplating" msgstr "" #: plater.py:319 msgid "Bed full, sorry sir :(" msgstr "" #: plater.py:329 msgid "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" #: plater.py:329 msgid "Clear the grid?" msgstr "" #: plater.py:371 msgid "Pick file to save to" msgstr "" #: plater.py:372 msgid "STL files (;*.stl;*.STL;)" msgstr "" #: plater.py:393 msgid "wrote %s" msgstr "" #: plater.py:396 msgid "Pick file to load" msgstr "" #: plater.py:397 msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" msgstr "" Printrun-printrun-2.0.0rc5/locale/pronterface.pot000066400000000000000000001216061325617007000221250ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2014-03-30 14:35+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" "Generated-By: pygettext.py 1.5\n" #: printrun/excluder.py:26 msgid "Part excluder: draw rectangles where print instructions should be ignored" msgstr "" #: printrun/excluder.py:27 printrun/excluder.py:29 msgid "Reset selection" msgstr "" #: printrun/gcodeplater.py:43 printrun/gcodeplater.py:44 msgid "GCODE files (*.gcode;*.GCODE;*.g)" msgstr "" #: printrun/gcodeplater.py:112 printrun/gcodeplater.py:152 msgid "Warning: no rotation support for now, object won't be correctly rotated" msgstr "" #: printrun/gcodeplater.py:141 printrun/gcodeplater.py:178 msgid "Exported merged G-Codes to %s" msgstr "" #: printrun/gcview.py:352 msgid "Fit to plate" msgstr "" #: printrun/gcview.py:353 msgid "Fit to plate [F]" msgstr "" #: printrun/gui/__init__.py:19 printrun/pronterface.py:45 msgid "WX is not installed. This program requires WX to run." msgstr "" #: printrun/gui/__init__.py:159 msgid "Commands" msgstr "" #: printrun/gui/__init__.py:160 msgid "Status" msgstr "" #: printrun/gui/controls.py:126 msgid "Heat:" msgstr "" #: printrun/gui/controls.py:129 msgid "Switch Hotend Off" msgstr "" #: printrun/gui/controls.py:129 printrun/gui/controls.py:149 #: printrun/gui/toolbar.py:85 msgid "Off" msgstr "" #: printrun/gui/controls.py:137 msgid "Select Temperature for Hotend" msgstr "" #: printrun/gui/controls.py:141 msgid "Switch Hotend On" msgstr "" #: printrun/gui/controls.py:141 printrun/gui/controls.py:161 #: printrun/gui/controls.py:198 msgid "Set" msgstr "" #: printrun/gui/controls.py:146 printrun/gui/controls.py:215 msgid "Bed:" msgstr "" #: printrun/gui/controls.py:149 msgid "Switch Heated Bed Off" msgstr "" #: printrun/gui/controls.py:157 msgid "Select Temperature for Heated Bed" msgstr "" #: printrun/gui/controls.py:161 msgid "Switch Heated Bed On" msgstr "" #: printrun/gui/controls.py:187 msgid "Print speed:" msgstr "" #: printrun/gui/controls.py:192 printrun/gui/controls.py:207 msgid "%d%%" msgstr "" #: printrun/gui/controls.py:198 msgid "Set print speed factor" msgstr "" #: printrun/gui/controls.py:213 msgid "Heater:" msgstr "" #: printrun/gui/controls.py:265 msgid "Length:" msgstr "" #: printrun/gui/controls.py:267 msgid "mm" msgstr "" #: printrun/gui/controls.py:267 msgid "mm @" msgstr "" #: printrun/gui/controls.py:269 msgid "Amount to Extrude or Retract (mm)" msgstr "" #: printrun/gui/controls.py:272 msgid "Extrude / Retract speed (mm/min)" msgstr "" #: printrun/gui/controls.py:278 msgid "Speed:" msgstr "" #: printrun/gui/controls.py:279 msgid "" "mm/\n" "min" msgstr "" #: printrun/gui/controls.py:290 msgid "Tool:" msgstr "" #: printrun/gui/controls.py:293 msgid "Click to switch current extruder" msgstr "" #: printrun/gui/controls.py:310 msgid "Select current extruder" msgstr "" #: printrun/gui/controls.py:371 msgid "Set Maximum Speed for X & Y axes (mm/min)" msgstr "" #: printrun/gui/controls.py:372 msgid "XY:" msgstr "" #: printrun/gui/controls.py:374 msgid "mm/min Z:" msgstr "" #: printrun/gui/controls.py:376 msgid "Set Maximum Speed for Z axis (mm/min)" msgstr "" #: printrun/gui/graph.py:28 msgid "Temperature graph" msgstr "" #: printrun/gui/log.py:32 msgid "" "Send commands to printer\n" "(Type 'help' for simple\n" "help function)" msgstr "" #: printrun/gui/log.py:39 msgid "Send" msgstr "" #: printrun/gui/log.py:39 msgid "Send Command to Printer" msgstr "" #: printrun/gui/toolbar.py:23 msgid "Lock" msgstr "" #: printrun/gui/toolbar.py:25 msgid "Lock graphical interface" msgstr "" #: printrun/gui/toolbar.py:32 msgid "" "Communication Settings\n" "Click to rescan ports" msgstr "" #: printrun/gui/toolbar.py:32 msgid "Port" msgstr "" #: printrun/gui/toolbar.py:37 msgid "Select Port Printer is connected to" msgstr "" #: printrun/gui/toolbar.py:46 msgid "Select Baud rate for printer communication" msgstr "" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1052 msgid "Connect" msgstr "" #: printrun/gui/toolbar.py:55 printrun/pronterface.py:1053 msgid "Connect to the printer" msgstr "" #: printrun/gui/toolbar.py:61 msgid "Reset" msgstr "" #: printrun/gui/toolbar.py:61 msgid "Reset the printer" msgstr "" #: printrun/gui/toolbar.py:69 msgid "Load a 3D model file" msgstr "" #: printrun/gui/toolbar.py:69 msgid "Load file" msgstr "" #: printrun/gui/toolbar.py:70 msgid "SD" msgstr "" #: printrun/gui/toolbar.py:70 msgid "SD Card Printing" msgstr "" #: printrun/gui/toolbar.py:74 msgid "Start Printing Loaded File" msgstr "" #: printrun/gui/toolbar.py:74 printrun/pronterface.py:1003 #: printrun/pronterface.py:1062 printrun/pronterface.py:1078 #: printrun/pronterface.py:1363 printrun/pronterface.py:1445 msgid "Print" msgstr "" #: printrun/gui/toolbar.py:80 msgid "Pause Current Print" msgstr "" #: printrun/gui/toolbar.py:80 printrun/pronterface.py:1002 #: printrun/pronterface.py:1061 printrun/pronterface.py:1081 #: printrun/pronterface.py:1091 printrun/pronterface.py:1172 #: printrun/pronterface.py:1364 msgid "Pause" msgstr "" #: printrun/gui/toolbar.py:85 msgid "Turn printer off" msgstr "" #: printrun/gui/viz.py:65 msgid "" "Click to examine / edit\n" " layers of loaded file" msgstr "" #: printrun/gui/widgets.py:36 msgid "Find" msgstr "" #: printrun/gui/widgets.py:38 msgid "Save" msgstr "" #: printrun/gui/widgets.py:43 printrun/objectplater.py:76 #: printrun/pronterface.py:1257 printrun/pronterface.py:2017 msgid "Cancel" msgstr "" #: printrun/gui/widgets.py:70 msgid "Not Found!" msgstr "" #: printrun/gui/widgets.py:124 msgid "Printer settings" msgstr "" #: printrun/gui/widgets.py:125 msgid "User interface" msgstr "" #: printrun/gui/widgets.py:126 msgid "Colors" msgstr "" #: printrun/gui/widgets.py:127 msgid "External commands" msgstr "" #: printrun/gui/widgets.py:132 msgid "Edit settings" msgstr "" #: printrun/gui/widgets.py:135 msgid "Settings" msgstr "" #: printrun/gui/widgets.py:187 msgid "Custom button" msgstr "" #: printrun/gui/widgets.py:193 msgid "Button title" msgstr "" #: printrun/gui/widgets.py:196 msgid "Command" msgstr "" #: printrun/gui/widgets.py:205 msgid "Color" msgstr "" #: printrun/gviz.py:29 msgid "Layer number and Z position show here when you scroll" msgstr "" #: printrun/gviz.py:39 msgid "Zoom In [+]" msgstr "" #: printrun/gviz.py:40 msgid "Zoom Out [-]" msgstr "" #: printrun/gviz.py:42 msgid "Move Up a Layer [U]" msgstr "" #: printrun/gviz.py:43 msgid "Move Down a Layer [D]" msgstr "" #: printrun/gviz.py:44 msgid "Reset view" msgstr "" #: printrun/gviz.py:68 msgid "Gcode view, shift to move view, mousewheel to set layer" msgstr "" #: printrun/gviz.py:105 printrun/gviz.py:241 msgid "Layer %d - Going Up - Z = %.03f mm" msgstr "" #: printrun/gviz.py:250 msgid "Layer %d - Going Down - Z = %.03f mm" msgstr "" #: printrun/objectplater.py:35 msgid "Plate building tool" msgstr "" #: printrun/objectplater.py:45 msgid "Clear" msgstr "" #: printrun/objectplater.py:49 msgid "Load" msgstr "" #: printrun/objectplater.py:53 msgid "Snap to Z = 0" msgstr "" #: printrun/objectplater.py:57 msgid "Put at center" msgstr "" #: printrun/objectplater.py:61 msgid "Delete" msgstr "" #: printrun/objectplater.py:65 msgid "Auto arrange" msgstr "" #: printrun/objectplater.py:69 msgid "Export" msgstr "" #: printrun/objectplater.py:73 msgid "Done" msgstr "" #: printrun/objectplater.py:151 msgid "Autoplating" msgstr "" #: printrun/objectplater.py:199 msgid "Bed full, sorry sir :(" msgstr "" #: printrun/objectplater.py:209 msgid "Are you sure you want to clear the grid? All unsaved changes will be lost." msgstr "" #: printrun/objectplater.py:210 msgid "Clear the grid?" msgstr "" #: printrun/objectplater.py:256 msgid "Pick file to load" msgstr "" #: printrun/objectplater.py:267 msgid "Pick file to save to" msgstr "" #: printrun/plater.py:212 msgid "STL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad" msgstr "" #: printrun/plater.py:213 msgid "STL files (*.stl;*.STL)|*.stl;*.STL" msgstr "" #: printrun/plater.py:244 msgid "Loading STL file failed" msgstr "" #: printrun/plater.py:244 printrun/plater.py:251 msgid "Error" msgstr "" #: printrun/plater.py:251 msgid "Loading OpenSCAD file failed" msgstr "" #: printrun/plater.py:284 msgid "Couldn't load non-existing file %s" msgstr "" #: printrun/plater.py:360 msgid "Wrote plate to %s" msgstr "" #: printrun/plater.py:367 msgid "Failed to use simarrange for plating, falling back to the standard method" msgstr "" #: printrun/plater.py:372 msgid "Autoplating using simarrange" msgstr "" #: printrun/plater.py:387 msgid "Plate full, please remove some objects" msgstr "" #: printrun/plater.py:404 msgid "simarrange failed" msgstr "" #: printrun/printcore.py:177 msgid "Could not connect to %s:%s:" msgstr "" #: printrun/printcore.py:178 msgid "Socket error %s:" msgstr "" #: printrun/printcore.py:191 printrun/printcore.py:196 msgid "Could not connect to %s at baudrate %s:" msgstr "" #: printrun/printcore.py:192 msgid "Serial error: %s" msgstr "" #: printrun/printcore.py:197 msgid "IO error: %s" msgstr "" #: printrun/printcore.py:231 msgid "Can't read from printer (disconnected?) (SelectError {0}): {1}" msgstr "" #: printrun/printcore.py:234 msgid "SelectError ({0}): {1}" msgstr "" #: printrun/printcore.py:237 msgid "Can't read from printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:240 msgid "Can't read from printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:245 msgid "Can't read from printer (disconnected?) (OS Error {0}): {1}" msgstr "" #: printrun/printcore.py:259 msgid "Aborting connection attempt after 4 failed writes." msgstr "" #: printrun/printcore.py:462 printrun/printcore.py:470 #: printrun/pronsole.py:1192 printrun/pronsole.py:1250 #: printrun/pronterface.py:209 printrun/pronterface.py:962 #: printrun/pronterface.py:1111 printrun/pronterface.py:1178 msgid "Not connected to printer." msgstr "" #: printrun/printcore.py:479 msgid "Print start callback failed with:" msgstr "" #: printrun/printcore.py:490 msgid "Print end callback failed with:" msgstr "" #: printrun/printcore.py:493 msgid "Print thread died due to the following error:" msgstr "" #: printrun/printcore.py:584 msgid "Could not analyze command %s:" msgstr "" #: printrun/printcore.py:601 msgid "Can't write to printer (disconnected ?):" msgstr "" #: printrun/printcore.py:604 msgid "Can't write to printer (disconnected?) (Socket error {0}): {1}" msgstr "" #: printrun/printcore.py:607 msgid "Can't write to printer (disconnected?) (SerialException): {0}" msgstr "" #: printrun/printcore.py:610 msgid "Socket connection broken, disconnected. ({0}): {1}" msgstr "" #: printrun/pronsole.py:72 msgid "Default: " msgstr "" #: printrun/pronsole.py:73 msgid "(Control-doubleclick to reset to default value)" msgstr "" #: printrun/pronsole.py:108 msgid "Are you sure you want to reset the setting to the default value: {0!r} ?" msgstr "" #: printrun/pronsole.py:108 msgid "Confirm set default" msgstr "" #: printrun/pronsole.py:258 msgid "Width" msgstr "" #: printrun/pronsole.py:261 msgid "Depth" msgstr "" #: printrun/pronsole.py:264 msgid "Height" msgstr "" #: printrun/pronsole.py:267 msgid "X offset" msgstr "" #: printrun/pronsole.py:270 msgid "Y offset" msgstr "" #: printrun/pronsole.py:273 msgid "Z offset" msgstr "" #: printrun/pronsole.py:276 msgid "X home pos." msgstr "" #: printrun/pronsole.py:279 msgid "Y home pos." msgstr "" #: printrun/pronsole.py:282 msgid "Z home pos." msgstr "" #: printrun/pronsole.py:301 msgid "Port used to communicate with printer" msgstr "" #: printrun/pronsole.py:301 msgid "Serial port" msgstr "" #: printrun/pronsole.py:302 msgid "Baud rate" msgstr "" #: printrun/pronsole.py:302 msgid "Communications Speed" msgstr "" #: printrun/pronsole.py:303 msgid "TCP streaming mode" msgstr "" #: printrun/pronsole.py:303 msgid "When using a TCP connection to the printer, the streaming mode will not wait for acks from the printer to send new commands. This will break things such as ETA prediction, but can result in smoother prints." msgstr "" #: printrun/pronsole.py:304 msgid "Bed temperature for ABS" msgstr "" #: printrun/pronsole.py:304 msgid "Heated Build Platform temp for ABS (deg C)" msgstr "" #: printrun/pronsole.py:305 msgid "Bed temperature for PLA" msgstr "" #: printrun/pronsole.py:305 msgid "Heated Build Platform temp for PLA (deg C)" msgstr "" #: printrun/pronsole.py:306 msgid "Extruder temp for ABS (deg C)" msgstr "" #: printrun/pronsole.py:306 msgid "Extruder temperature for ABS" msgstr "" #: printrun/pronsole.py:307 msgid "Extruder temp for PLA (deg C)" msgstr "" #: printrun/pronsole.py:307 msgid "Extruder temperature for PLA" msgstr "" #: printrun/pronsole.py:308 msgid "Feedrate for Control Panel Moves in X and Y (mm/min)" msgstr "" #: printrun/pronsole.py:308 msgid "X && Y manual feedrate" msgstr "" #: printrun/pronsole.py:309 msgid "Feedrate for Control Panel Moves in Z (mm/min)" msgstr "" #: printrun/pronsole.py:309 msgid "Z manual feedrate" msgstr "" #: printrun/pronsole.py:310 msgid "E manual feedrate" msgstr "" #: printrun/pronsole.py:310 msgid "Feedrate for Control Panel Moves in Extrusions (mm/min)" msgstr "" #: printrun/pronsole.py:311 msgid "Slice command" msgstr "" #: printrun/pronsole.py:312 msgid "Slice settings command" msgstr "" #: printrun/pronsole.py:312 msgid "Slicer options command" msgstr "" #: printrun/pronsole.py:313 msgid "Executable to run when the print is finished" msgstr "" #: printrun/pronsole.py:313 msgid "Final command" msgstr "" #: printrun/pronsole.py:314 msgid "Error command" msgstr "" #: printrun/pronsole.py:314 msgid "Executable to run when an error occurs" msgstr "" #: printrun/pronsole.py:381 msgid "Failed to run callback after setting \"%s\":" msgstr "" #: printrun/pronsole.py:469 msgid "Build dimensions" msgstr "" #: printrun/pronsole.py:469 msgid "" "Dimensions of Build Platform\n" " & optional offset of origin\n" " & optional switch position\n" "\n" "Examples:\n" " XXXxYYY\n" " XXX,YYY,ZZZ\n" " XXXxYYYxZZZ+OffX+OffY+OffZ\n" "XXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ" msgstr "" #: printrun/pronsole.py:495 msgid "Welcome to the printer console! Type \"help\" for a list of available commands." msgstr "" #: printrun/pronsole.py:657 printrun/pronsole.py:665 printrun/pronsole.py:673 #: printrun/pronsole.py:1519 printrun/pronsole.py:1546 #: printrun/pronsole.py:1618 printrun/pronterface.py:357 #: printrun/pronterface.py:377 printrun/pronterface.py:394 msgid "Printer is not online." msgstr "" #: printrun/pronsole.py:692 msgid "Exiting program. Goodbye!" msgstr "" #: printrun/pronsole.py:697 msgid "Disconnects from the printer and exits the program." msgstr "" #: printrun/pronsole.py:974 msgid "load this file on startup instead of .pronsolerc ; you may chain config files, if so settings auto-save will use the last specified file" msgstr "" #: printrun/pronsole.py:975 msgid "executes command after configuration/.pronsolerc is loaded ; macros/settings from these commands are not autosaved" msgstr "" #: printrun/pronsole.py:976 msgid "file to load" msgstr "" #: printrun/pronsole.py:1104 msgid "Loaded %s, %d lines." msgstr "" #: printrun/pronsole.py:1105 printrun/pronterface.py:1381 msgid "Estimated duration: %d layers, %s" msgstr "" #: printrun/pronsole.py:1134 msgid "No file name given." msgstr "" #: printrun/pronsole.py:1140 msgid "Skeining file: %s" msgstr "" #: printrun/pronsole.py:1142 printrun/pronterface.py:1305 msgid "File not found!" msgstr "" #: printrun/pronsole.py:1147 msgid "Entering slicer settings: %s" msgstr "" #: printrun/pronsole.py:1151 msgid "Slicing: " msgstr "" #: printrun/pronsole.py:1158 msgid "Loading sliced file." msgstr "" #: printrun/pronsole.py:1161 msgid "Slicing failed: %s" msgstr "" #: printrun/pronsole.py:1174 msgid "Creates a gcode file from an stl model using the slicer (with tab-completion)" msgstr "" #: printrun/pronsole.py:1175 msgid "slice filename.stl - create gcode file" msgstr "" #: printrun/pronsole.py:1176 msgid "slice filename.stl view - create gcode file and view using skeiniso (if using skeinforge)" msgstr "" #: printrun/pronsole.py:1177 msgid "slice set - adjust slicer settings" msgstr "" #: printrun/pronsole.py:1189 msgid "Please enter target name in 8.3 format." msgstr "" #: printrun/pronsole.py:1195 msgid "Uploading as %s" msgstr "" #: printrun/pronsole.py:1196 msgid "Uploading %s" msgstr "" #: printrun/pronsole.py:1198 msgid "Press Ctrl-C to interrupt upload." msgstr "" #: printrun/pronsole.py:1201 msgid "Progress: " msgstr "" #: printrun/pronsole.py:1212 msgid "Upload completed. %s should now be on the card." msgstr "" #: printrun/pronsole.py:1216 msgid "...interrupted!" msgstr "" #: printrun/pronsole.py:1218 msgid "Something wrong happened while uploading:" msgstr "" #: printrun/pronsole.py:1224 msgid "A partial file named %s may have been written to the sd card." msgstr "" #: printrun/pronsole.py:1241 msgid "Send a loaded gcode file to the printer. Load a file with the load command first." msgstr "" #: printrun/pronsole.py:1243 msgid "Send a loaded gcode file to the printer. You have %s loaded right now." msgstr "" #: printrun/pronsole.py:1247 printrun/pronterface.py:730 #: printrun/pronterface.py:1108 msgid "No file loaded. Please use load first." msgstr "" #: printrun/pronsole.py:1252 msgid "Printing %s" msgstr "" #: printrun/pronsole.py:1253 msgid "You can monitor the print with the monitor command." msgstr "" #: printrun/pronsole.py:1261 msgid "Not printing, cannot pause." msgstr "" #: printrun/pronsole.py:1267 msgid "Pauses a running print" msgstr "" #: printrun/pronsole.py:1274 msgid "Not paused, unable to resume. Start a print first." msgstr "" #: printrun/pronsole.py:1284 msgid "Resumes a paused print." msgstr "" #: printrun/pronsole.py:1293 msgid "Files on SD card:" msgstr "" #: printrun/pronsole.py:1307 printrun/pronsole.py:1349 #: printrun/pronsole.py:1562 msgid "Printer is not online. Please connect to it first." msgstr "" #: printrun/pronsole.py:1312 msgid "Lists files on the SD card" msgstr "" #: printrun/pronsole.py:1316 printrun/pronterface.py:1645 msgid "Opening file failed." msgstr "" #: printrun/pronsole.py:1322 printrun/pronterface.py:1651 msgid "Starting print" msgstr "" #: printrun/pronsole.py:1345 msgid "Resets the printer." msgstr "" #: printrun/pronsole.py:1355 msgid "File is not present on card. Please upload it first." msgstr "" #: printrun/pronsole.py:1359 msgid "Printing file: %s from SD card." msgstr "" #: printrun/pronsole.py:1360 msgid "Requesting SD print..." msgstr "" #: printrun/pronsole.py:1364 msgid "Print a file from the SD card. Tab completes with available file names." msgstr "" #: printrun/pronsole.py:1365 msgid "sdprint filename.g" msgstr "" #: printrun/pronsole.py:1382 msgid "Print resumed at: %s" msgstr "" #: printrun/pronsole.py:1384 msgid "Print started at: %s" msgstr "" #: printrun/pronsole.py:1392 msgid "Failed to inhibit sleep:" msgstr "" #: printrun/pronsole.py:1399 msgid "Failed to uninhibit sleep:" msgstr "" #: printrun/pronsole.py:1403 msgid "Print ended at: %(end_time)s and took %(duration)s" msgstr "" #: printrun/pronsole.py:1457 msgid "Printer is not currently printing. No ETA available." msgstr "" #: printrun/pronsole.py:1460 msgid "Est: %s of %s remaining" msgstr "" #: printrun/pronsole.py:1465 msgid "Displays estimated remaining print time." msgstr "" #: printrun/pronsole.py:1498 msgid "Read the extruder and bed temperature." msgstr "" #: printrun/pronsole.py:1507 printrun/pronsole.py:1540 msgid "You must enter a temperature." msgstr "" #: printrun/pronsole.py:1512 msgid "%s is a high temperature to set your extruder to. Are you sure you want to do that?" msgstr "" #: printrun/pronsole.py:1517 msgid "Setting hotend temperature to %s degrees Celsius." msgstr "" #: printrun/pronsole.py:1521 printrun/pronterface.py:359 msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0." msgstr "" #: printrun/pronsole.py:1524 msgid "Sets the hotend temperature to the value entered." msgstr "" #: printrun/pronsole.py:1525 printrun/pronsole.py:1552 msgid "Enter either a temperature in celsius or one of the following keywords" msgstr "" #: printrun/pronsole.py:1544 msgid "Setting bed temperature to %s degrees Celsius." msgstr "" #: printrun/pronsole.py:1548 printrun/pronterface.py:379 msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0." msgstr "" #: printrun/pronsole.py:1551 msgid "Sets the bed temperature to the value entered." msgstr "" #: printrun/pronsole.py:1565 msgid "Printer is not printing. Please print something before monitoring." msgstr "" #: printrun/pronsole.py:1567 msgid "Monitoring printer, use ^C to interrupt." msgstr "" #: printrun/pronsole.py:1572 printrun/pronterface.py:329 msgid "Invalid period given." msgstr "" #: printrun/pronsole.py:1573 msgid "Updating values every %f seconds." msgstr "" #: printrun/pronsole.py:1584 printrun/pronsole.py:1587 msgid "Print progress: " msgstr "" #: printrun/pronsole.py:1595 printrun/pronterface.py:333 msgid "Done monitoring." msgstr "" #: printrun/pronsole.py:1599 msgid "Monitor a machine's temperatures and an SD print's status." msgstr "" #: printrun/pronsole.py:1600 msgid "monitor - Reports temperature and SD print status (if SD printing) every 5 seconds" msgstr "" #: printrun/pronsole.py:1601 msgid "monitor 2 - Reports temperature and SD print status (if SD printing) every 2 seconds" msgstr "" #: printrun/pronsole.py:1612 msgid "You must specify the tool index as an integer." msgstr "" #: printrun/pronsole.py:1616 msgid "Using tool %d." msgstr "" #: printrun/pronsole.py:1620 msgid "You cannot set negative tool numbers." msgstr "" #: printrun/pronsole.py:1623 msgid "Switches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code)." msgstr "" #: printrun/pronsole.py:1627 msgid "No move specified." msgstr "" #: printrun/pronsole.py:1630 printrun/pronsole.py:1692 #: printrun/pronsole.py:1735 printrun/pronsole.py:1762 msgid "Printer is currently printing. Please pause the print before you issue manual commands." msgstr "" #: printrun/pronsole.py:1633 printrun/pronsole.py:1759 msgid "Printer is not online. Unable to move." msgstr "" #: printrun/pronsole.py:1649 msgid "Unknown axis." msgstr "" #: printrun/pronsole.py:1654 msgid "Invalid distance" msgstr "" #: printrun/pronsole.py:1665 msgid "Move an axis. Specify the name of the axis and the amount. " msgstr "" #: printrun/pronsole.py:1666 msgid "move X 10 will move the X axis forward by 10mm at %s mm/min (default XY speed)" msgstr "" #: printrun/pronsole.py:1667 msgid "move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/min" msgstr "" #: printrun/pronsole.py:1668 msgid "move Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)" msgstr "" #: printrun/pronsole.py:1669 msgid "Common amounts are in the tabcomplete list." msgstr "" #: printrun/pronsole.py:1699 printrun/pronsole.py:1742 msgid "Invalid length given." msgstr "" #: printrun/pronsole.py:1704 printrun/pronsole.py:1747 msgid "Invalid speed given." msgstr "" #: printrun/pronsole.py:1712 msgid "Extruding %fmm of filament." msgstr "" #: printrun/pronsole.py:1714 msgid "Reversing %fmm of filament." msgstr "" #: printrun/pronsole.py:1716 msgid "Length is 0, not doing anything." msgstr "" #: printrun/pronsole.py:1722 msgid "Extrudes a length of filament, 5mm by default, or the number of mm given as a parameter" msgstr "" #: printrun/pronsole.py:1723 msgid "extrude - extrudes 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1724 msgid "extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1725 msgid "extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1726 msgid "extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1732 msgid "Printer is not online. Unable to reverse." msgstr "" #: printrun/pronsole.py:1751 msgid "Reverses the extruder, 5mm by default, or the number of mm given as a parameter" msgstr "" #: printrun/pronsole.py:1752 msgid "reverse - reverses 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1753 msgid "reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1754 msgid "reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)" msgstr "" #: printrun/pronsole.py:1755 msgid "reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)" msgstr "" #: printrun/pronsole.py:1777 msgid "Homes the printer" msgstr "" #: printrun/pronsole.py:1778 msgid "home - homes all axes and zeroes the extruder(Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1779 msgid "home xy - homes x and y axes (Using G28)" msgstr "" #: printrun/pronsole.py:1780 msgid "home z - homes z axis only (Using G28)" msgstr "" #: printrun/pronsole.py:1781 msgid "home e - set extruder position to zero (Using G92)" msgstr "" #: printrun/pronsole.py:1782 msgid "home xyze - homes all axes and zeroes the extruder (Using G28 and G92)" msgstr "" #: printrun/pronsole.py:1790 msgid "; Motors off" msgstr "" #: printrun/pronsole.py:1792 msgid "; Extruder off" msgstr "" #: printrun/pronsole.py:1794 msgid "; Heatbed off" msgstr "" #: printrun/pronsole.py:1796 msgid "; Fan off" msgstr "" #: printrun/pronsole.py:1798 msgid "; Power supply off" msgstr "" #: printrun/pronsole.py:1801 msgid "Printer is not online. Unable to turn it off." msgstr "" #: printrun/pronsole.py:1804 msgid "Turns off everything on the printer" msgstr "" #: printrun/pronsole.py:1815 msgid "G-Code calling host command \"%s\"" msgstr "" #: printrun/pronsole.py:1824 msgid "Runs a custom script. Current gcode filename can be given using %s token." msgstr "" #: printrun/pronsole.py:1832 msgid "Runs a custom script which output gcode which will in turn be executed. Current gcode filename can be given using %s token." msgstr "" #: printrun/pronterface.py:149 msgid "Motors off" msgstr "" #: printrun/pronterface.py:149 msgid "Switch all motors off" msgstr "" #: printrun/pronterface.py:150 msgid "Advance extruder by set length" msgstr "" #: printrun/pronterface.py:150 msgid "Extrude" msgstr "" #: printrun/pronterface.py:151 msgid "Reverse" msgstr "" #: printrun/pronterface.py:151 msgid "Reverse extruder by set length" msgstr "" #: printrun/pronterface.py:165 msgid "Pronterface" msgstr "" #: printrun/pronterface.py:192 msgid "" "# I moved all your custom buttons into .pronsolerc.\n" "# Please don't add them here any more.\n" "# Backup of your old buttons is in custombtn.old\n" msgstr "" #: printrun/pronterface.py:197 msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc" msgstr "" #: printrun/pronterface.py:198 msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgstr "" #: printrun/pronterface.py:331 msgid "Monitoring printer." msgstr "" #: printrun/pronterface.py:354 msgid "Setting hotend temperature to %f degrees Celsius." msgstr "" #: printrun/pronterface.py:361 printrun/pronterface.py:381 msgid "You must enter a temperature. (%s)" msgstr "" #: printrun/pronterface.py:374 msgid "Setting bed temperature to %f degrees Celsius." msgstr "" #: printrun/pronterface.py:392 msgid "Setting print speed factor to %d%%." msgstr "" #: printrun/pronterface.py:396 msgid "You must enter a speed. (%s)" msgstr "" #: printrun/pronterface.py:470 msgid "Plate function activated" msgstr "" #: printrun/pronterface.py:479 msgid "G-Code plate function activated" msgstr "" #: printrun/pronterface.py:486 msgid "Plated %s" msgstr "" #: printrun/pronterface.py:500 msgid "SD Upload" msgstr "" #: printrun/pronterface.py:504 msgid "SD Print" msgstr "" #: printrun/pronterface.py:565 msgid "Manual move outside of the build volume prevented (see the \"Clamp manual moves\" option)." msgstr "" #: printrun/pronterface.py:621 msgid "Attempted to write invalid text to console, which could be due to an invalid baudrate" msgstr "" #: printrun/pronterface.py:655 msgid " Opens file" msgstr "" #: printrun/pronterface.py:655 msgid "&Open..." msgstr "" #: printrun/pronterface.py:663 msgid " Clear output console" msgstr "" #: printrun/pronterface.py:663 msgid "Clear console" msgstr "" #: printrun/pronterface.py:664 msgid " Closes the Window" msgstr "" #: printrun/pronterface.py:664 msgid "E&xit" msgstr "" #: printrun/pronterface.py:665 msgid "&File" msgstr "" #: printrun/pronterface.py:668 msgid " Edit open file" msgstr "" #: printrun/pronterface.py:668 msgid "&Edit..." msgstr "" #: printrun/pronterface.py:669 msgid " Compose 3D models into a single plate" msgstr "" #: printrun/pronterface.py:669 msgid "Plater" msgstr "" #: printrun/pronterface.py:670 msgid " Compose G-Codes into a single plate" msgstr "" #: printrun/pronterface.py:670 msgid "G-Code Plater" msgstr "" #: printrun/pronterface.py:671 msgid " Exclude parts of the bed from being printed" msgstr "" #: printrun/pronterface.py:671 msgid "Excluder" msgstr "" #: printrun/pronterface.py:672 msgid " Project slices" msgstr "" #: printrun/pronterface.py:672 msgid "Projector" msgstr "" #: printrun/pronterface.py:673 msgid "&Tools" msgstr "" #: printrun/pronterface.py:676 msgid " Recover previous print after a disconnect (homes X, Y, restores Z and E status)" msgstr "" #: printrun/pronterface.py:676 msgid "Recover" msgstr "" #: printrun/pronterface.py:679 msgid "&Advanced" msgstr "" #: printrun/pronterface.py:686 msgid "Print &settings" msgstr "" #: printrun/pronterface.py:687 msgid "&Filament" msgstr "" #: printrun/pronterface.py:688 msgid "&Printer" msgstr "" #: printrun/pronterface.py:694 msgid "&Slic3r" msgstr "" #: printrun/pronterface.py:696 msgid "Failed to load Slic3r configuration:" msgstr "" #: printrun/pronterface.py:702 msgid "&Macros" msgstr "" #: printrun/pronterface.py:703 msgid "<&New...>" msgstr "" #: printrun/pronterface.py:704 msgid " Options dialog" msgstr "" #: printrun/pronterface.py:704 msgid "&Options" msgstr "" #: printrun/pronterface.py:706 msgid " Adjust slicing settings" msgstr "" #: printrun/pronterface.py:706 msgid "Slicing settings" msgstr "" #: printrun/pronterface.py:708 msgid "Debug communications" msgstr "" #: printrun/pronterface.py:709 msgid "Print all G-code sent to and received from the printer." msgstr "" #: printrun/pronterface.py:713 msgid "&Settings" msgstr "" #: printrun/pronterface.py:719 msgid "&About Printrun" msgstr "" #: printrun/pronterface.py:719 msgid "Show about dialog" msgstr "" #: printrun/pronterface.py:720 msgid "&Help" msgstr "" #: printrun/pronterface.py:746 msgid "Printrun is a pure Python 3D printing (and other types of CNC) host software." msgstr "" #: printrun/pronterface.py:750 msgid "%.02fmm of filament have been extruded during prints" msgstr "" #: printrun/pronterface.py:781 msgid "Monitor printer status" msgstr "" #: printrun/pronterface.py:781 msgid "Regularly monitor printer temperatures (required to have functional temperature graph or gauges)" msgstr "" #: printrun/pronterface.py:782 msgid "Path to the simarrange binary to use in the STL plater" msgstr "" #: printrun/pronterface.py:782 msgid "Simarrange command" msgstr "" #: printrun/pronterface.py:783 msgid "Circular build platform" msgstr "" #: printrun/pronterface.py:783 msgid "Draw a circular (or oval) build platform instead of a rectangular one" msgstr "" #: printrun/pronterface.py:784 msgid "Extruders count" msgstr "" #: printrun/pronterface.py:784 msgid "Number of extruders" msgstr "" #: printrun/pronterface.py:785 msgid "Clamp manual moves" msgstr "" #: printrun/pronterface.py:785 msgid "Prevent manual moves from leaving the specified build dimensions" msgstr "" #: printrun/pronterface.py:786 msgid "Interface mode" msgstr "" #: printrun/pronterface.py:786 msgid "" "Standard interface is a one-page, three columns layout with controls/visualization/log\n" "Compact mode is a one-page, two columns layout with controls + log/visualization\n" "Tabbed mode is a two-pages mode, where the first page shows controls and the second one shows visualization and log." msgstr "" #: printrun/pronterface.py:787 msgid "Controls mode" msgstr "" #: printrun/pronterface.py:787 msgid "Standard controls include all controls needed for printer setup and calibration, while Mini controls are limited to the ones needed for daily printing" msgstr "" #: printrun/pronterface.py:788 msgid "Add a menu to select Slic3r profiles directly from Pronterface" msgstr "" #: printrun/pronterface.py:788 msgid "Enable Slic3r integration" msgstr "" #: printrun/pronterface.py:789 msgid "Update Slic3r default presets" msgstr "" #: printrun/pronterface.py:789 msgid "When selecting a profile in Slic3r integration menu, also save it as the default Slic3r preset" msgstr "" #: printrun/pronterface.py:790 msgid "Main visualization" msgstr "" #: printrun/pronterface.py:790 msgid "Select visualization for main window." msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D in GCode viewer window" msgstr "" #: printrun/pronterface.py:791 msgid "Use 3D mode instead of 2D layered mode in the visualization window" msgstr "" #: printrun/pronterface.py:792 msgid "Use a lighter 3D visualization" msgstr "" #: printrun/pronterface.py:792 msgid "Use a lighter visualization with simple lines instead of extruded paths for 3D viewer" msgstr "" #: printrun/pronterface.py:793 msgid "Track current layer in main 3D view" msgstr "" #: printrun/pronterface.py:793 msgid "Track the currently printing layer in the main 3D visualization" msgstr "" #: printrun/pronterface.py:794 msgid "Display temperature graph" msgstr "" #: printrun/pronterface.py:794 msgid "Display time-lapse temperature graph" msgstr "" #: printrun/pronterface.py:795 msgid "Display graphical gauges for temperatures visualization" msgstr "" #: printrun/pronterface.py:795 msgid "Display temperature gauges" msgstr "" #: printrun/pronterface.py:796 msgid "Display a checkbox that, when check, locks most of Pronterface" msgstr "" #: printrun/pronterface.py:796 msgid "Display interface lock checkbox" msgstr "" #: printrun/pronterface.py:797 msgid "If lock checkbox is enabled, lock the interface when starting a print" msgstr "" #: printrun/pronterface.py:797 msgid "Lock interface upon print start" msgstr "" #: printrun/pronterface.py:804 msgid "Preview extrusion width" msgstr "" #: printrun/pronterface.py:804 msgid "Width of Extrusion in Preview" msgstr "" #: printrun/pronterface.py:805 msgid "Fine Grid Spacing" msgstr "" #: printrun/pronterface.py:805 msgid "Fine grid spacing" msgstr "" #: printrun/pronterface.py:806 msgid "Coarse Grid Spacing" msgstr "" #: printrun/pronterface.py:806 msgid "Coarse grid spacing" msgstr "" #: printrun/pronterface.py:807 msgid "Background color" msgstr "" #: printrun/pronterface.py:807 msgid "Pronterface background color" msgstr "" #: printrun/pronterface.py:808 msgid "3D view background color" msgstr "" #: printrun/pronterface.py:808 msgid "Color of the 3D view background" msgstr "" #: printrun/pronterface.py:809 msgid "3D view travel moves color" msgstr "" #: printrun/pronterface.py:809 msgid "Color of travel moves in 3D view" msgstr "" #: printrun/pronterface.py:810 msgid "3D view print moves color" msgstr "" #: printrun/pronterface.py:810 msgid "Color of print moves with tool 0 in 3D view" msgstr "" #: printrun/pronterface.py:811 msgid "3D view tool 1 moves color" msgstr "" #: printrun/pronterface.py:811 msgid "Color of print moves with tool 1 in 3D view" msgstr "" #: printrun/pronterface.py:812 msgid "3D view printed moves color" msgstr "" #: printrun/pronterface.py:812 msgid "Color of printed moves in 3D view" msgstr "" #: printrun/pronterface.py:813 msgid "3D view current layer moves color" msgstr "" #: printrun/pronterface.py:813 msgid "Color of moves in current layer in 3D view" msgstr "" #: printrun/pronterface.py:814 msgid "3D view printed current layer moves color" msgstr "" #: printrun/pronterface.py:814 msgid "Color of already printed moves from current layer in 3D view" msgstr "" #: printrun/pronterface.py:815 msgid "Changing most settings here will require restart to get effect" msgstr "" #: printrun/pronterface.py:815 msgid "Note:" msgstr "" #: printrun/pronterface.py:822 msgid "automatically try to connect to printer on startup" msgstr "" #: printrun/pronterface.py:835 printrun/pronterface.py:1316 msgid "Failed to load recent files list:" msgstr "" #: printrun/pronterface.py:916 msgid "SD upload: %04.2f%% |" msgstr "" #: printrun/pronterface.py:917 printrun/pronterface.py:922 msgid " Line# %d of %d lines |" msgstr "" #: printrun/pronterface.py:919 msgid "SD printing: %04.2f%% |" msgstr "" #: printrun/pronterface.py:921 msgid "Printing: %04.2f%% |" msgstr "" #: printrun/pronterface.py:924 msgid " Est: %s of %s remaining | " msgstr "" #: printrun/pronterface.py:926 msgid " Z: %.3f mm" msgstr "" #: printrun/pronterface.py:931 msgid "Disconnecting after 4 failed writes." msgstr "" #: printrun/pronterface.py:972 msgid "Locking interface." msgstr "" #: printrun/pronterface.py:976 msgid "Unlocking interface." msgstr "" #: printrun/pronterface.py:985 msgid "Connecting..." msgstr "" #: printrun/pronterface.py:997 msgid "Could not parse baud rate: " msgstr "" #: printrun/pronterface.py:1013 printrun/pronterface.py:1023 msgid "Error: You are trying to connect to a non-existing port." msgstr "" #: printrun/pronterface.py:1015 msgid "Error: You don't have permission to open %s." msgstr "" #: printrun/pronterface.py:1016 msgid "You might need to add yourself to the dialout group." msgstr "" #: printrun/pronterface.py:1043 msgid "Disconnected." msgstr "" #: printrun/pronterface.py:1071 msgid "Reset." msgstr "" #: printrun/pronterface.py:1072 msgid "Are you sure you want to reset the printer?" msgstr "" #: printrun/pronterface.py:1072 msgid "Reset?" msgstr "" #: printrun/pronterface.py:1093 msgid "Restart" msgstr "" #: printrun/pronterface.py:1126 msgid "Pick SD filename" msgstr "" #: printrun/pronterface.py:1144 msgid "File upload complete" msgstr "" #: printrun/pronterface.py:1151 msgid "Print paused at: %s" msgstr "" #: printrun/pronterface.py:1163 msgid "Resume" msgstr "" #: printrun/pronterface.py:1166 msgid "Resuming." msgstr "" #: printrun/pronterface.py:1192 msgid "Pick SD file" msgstr "" #: printrun/pronterface.py:1192 msgid "Select the file to print" msgstr "" #: printrun/pronterface.py:1228 printrun/pronterface.py:1259 msgid "Slicing " msgstr "" #: printrun/pronterface.py:1237 msgid "Failed to execute slicing software: " msgstr "" #: printrun/pronterface.py:1244 msgid "Slicing..." msgstr "" #: printrun/pronterface.py:1296 msgid "Open file to print" msgstr "" #: printrun/pronterface.py:1297 msgid "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*" msgstr "" #: printrun/pronterface.py:1325 msgid "Could not update recent files list:" msgstr "" #: printrun/pronterface.py:1359 msgid "Loaded %s, %d lines" msgstr "" #: printrun/pronterface.py:1362 msgid "Load File" msgstr "" #: printrun/pronterface.py:1376 msgid "%.2fmm of filament used in this print" msgstr "" #: printrun/pronterface.py:1377 msgid "The print goes:" msgstr "" #: printrun/pronterface.py:1378 msgid "- from %.2f mm to %.2f mm in X and is %.2f mm wide" msgstr "" #: printrun/pronterface.py:1379 msgid "- from %.2f mm to %.2f mm in Y and is %.2f mm deep" msgstr "" #: printrun/pronterface.py:1380 msgid "- from %.2f mm to %.2f mm in Z and is %.2f mm high" msgstr "" #: printrun/pronterface.py:1450 msgid "Printer is now online." msgstr "" #: printrun/pronterface.py:1455 msgid "Disconnect" msgstr "" #: printrun/pronterface.py:1688 msgid "click to add new custom button" msgstr "" #: printrun/pronterface.py:1694 msgid "Execute command: " msgstr "" #: printrun/pronterface.py:1714 msgid "Defines custom button. Usage: button \"title\" [/c \"colour\"] command" msgstr "" #: printrun/pronterface.py:1736 msgid "Custom button number should be between 0 and 63" msgstr "" #: printrun/pronterface.py:1827 msgid "Edit custom button '%s'" msgstr "" #: printrun/pronterface.py:1829 msgid "Move left <<" msgstr "" #: printrun/pronterface.py:1832 msgid "Move right >>" msgstr "" #: printrun/pronterface.py:1836 msgid "Remove custom button '%s'" msgstr "" #: printrun/pronterface.py:1839 msgid "Add custom button" msgstr "" #: printrun/pronterface.py:1972 msgid "event object missing" msgstr "" #: printrun/pronterface.py:1985 msgid "Do you want to erase the macro?" msgstr "" #: printrun/pronterface.py:1989 msgid "Cancelled." msgstr "" #: printrun/pronterface.py:2007 msgid "Enter macro name" msgstr "" #: printrun/pronterface.py:2010 msgid "Macro name:" msgstr "" #: printrun/pronterface.py:2013 msgid "Ok" msgstr "" #: printrun/pronterface.py:2035 msgid "Macro name may contain only ASCII alphanumeric symbols and underscores" msgstr "" #: printrun/pronterface.py:2038 msgid "Name '%s' is being used by built-in command" msgstr "" #: pronsole.py:31 msgid "Caught an exception, exiting:" msgstr "" Printrun-printrun-2.0.0rc5/plater.appdata.xml000066400000000000000000000016501325617007000212500ustar00rootroot00000000000000 plater FSFAP GPL-3.0+ Plater 3D printer plating tool

Plater is a simple graphical tool for preparing plates for desktop 3D printers, such as RepRap.

It lets you load 3D models and manipulate them on XY plane. It is also possible to let Plater automatically arrange the files to fit. You can then export the prepared plate for later use or load it directly to Pronterface (if installed).

plater.desktop https://raw.github.com/kliment/Printrun/master/screenshots/plater.png https://github.com/kliment/Printrun
Printrun-printrun-2.0.0rc5/plater.desktop000066400000000000000000000004041325617007000205040ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Plater GenericName=Plate building tool Comment=Prepares plates for 3D printing Icon=/usr/share/pixmaps/plater.png Exec=/usr/bin/plater.py StartupNotify=true Terminal=false Categories=GNOME;GTK;Utility;Graphics;3DGraphics; Printrun-printrun-2.0.0rc5/plater.ico000066400000000000000000001642761325617007000176270ustar00rootroot00000000000000xx Јш(x№ €шџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$󟉉‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$󟉉‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$󟉉‰џььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџььыџььыџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџF˜џF˜џF˜џF˜џ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ‰‰‰џььыџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџььыџььыџььыџььыџььыџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџ$уџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџF˜џF˜џF˜џF˜џ$уџ$уџ$уџ$уџььыџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ$уџ$уџ$уџ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџ$уџF˜џF˜џF˜џF˜џ$󟉉‰џььыџ$уџF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџ$уџ$уџ$уџ$уџ$уџ$󟉉‰џььыџььыџ$уџ$уџ$уџF˜џF˜џF˜џF˜џF˜џF˜џ$уџ$уџ$уџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ$уџ$уџ$уџ$уџ$уџ$уџ$󟉉‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џььыџььыџ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џььыџььыџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџььыџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џ‰‰‰џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџрџџџџџџџџџџџќ?џџџџџџџџџџРџџџџџџџџџўџџџџџџџџјџџџџџџџџрџџџџџџџџ€џџџџџџџўџџџџџџјџџџџџџрџџџџџџРџџџџџџ€џџџџџўџџџџќ?џџџџјџџџџ№џџџџрџџџџРџџџџ€џџџџџџџўџџќ?џџјџџ№џџ№џџрџџРџџ€џџ€џџџџџўўќ?ќ?јј№№рррРРРР€€€€€€€€€€РРРРррр№№јјќ?ќ?ўўџџџџџ€џџ€џџРџџрџџ№џџ№џџјџџќ?џџўџџџџџџџ€џџџџРџџџџрџџџџ№џџџџјџџџџќ?џџџџўџџџџџ€џџџџџџРџџџџџџрџџџџџџјџџџџџџўџџџџџџџ€џџџџџџџџрџџџџџџџџјџџџџџџџџўџџџџџџџџџРџџџџџџџџџџќ?џџџџџџџџџџџрџџџџџџPrintrun-printrun-2.0.0rc5/plater.png000066400000000000000000000040521325617007000176220ustar00rootroot00000000000000‰PNG  IHDRxx9d6вsBIT|dˆ pHYsзˆ^RГ ЬIDATxœэ=R#=†_О"р$ˆГтrФ\Х\хlDй!g!т$Ой~жЌ,ы_н­žhŒ<žgZ?­žё Ўˆнnї—ЂЭfsCбŽn{@->™/ЋUѓmЯUњlкjdі{JБgиmіћГпЭEИъЖЅrIЬХѓўгБi–­RАл[j чиў:EЋ<Б>ЌуU'Z…рЙŠuб(КЋрkыЂItСз*жEƒhQСKывSĘрнnїwib]lбR’џ“x“!їœ—еŠ,­š‚5‚—к%чp:'ь]6[ЈЭƒ;šYЙepJ&<фжС%™T№л‡d2СC. д’IЙДPJn<фђ@%ЙI№Ы …фjСCЎ ­’ЋЙВДH.<фіЁVrq”bрўѓќнЧыКЕљЋІ4o]Дй‹оŸЧ'яЯ?^згfƒ§šћЗяылђяО>“Ч$U6ЋЈ§Ђ­ЦlС9]Г+эИ§žў§ѓј”jуxК rD/Г •+9KpыИ›+зХќЭёёiHЖ(‘Ь^бёќч=*їИ§NЪП{Ш’&–|q$ЗFoЌл~Oў1clЮ•œz?Ё уРOdBиŠл~Щ…˜ХЌ:йюБџЌьЮ[щёž69b бu0хšїИ§Цнзgђ*Нћњ ~ићЗ‡`Д-‘œЕБHб‘›KL2юR—їЮX…$їюJЕ‘ŠbіYtiє.Ўёж‡Wpяш5˜ЖDдržtїјяп‚Юb3jж>nПS•Фэц.™r ЕC•Њ4Ы@[ДTчb жНз„Y=„ц“ЦаX,2‹ќТ-йЧ™рНќЄ–€-јЂXХўšЉ‰Ќš1•z^aP/Xr&mѓѓј„gд­Л5msN‚ЕvЯЕ[-яД%TznsКK&ѕ, ѕХdК] _4С'rфжЄNэЄFь}И2~C0тrm9>5{й9ETмzЧ_ RrsЖ7Їзgє“dgvNНі8Ьžшˆ•Шж"БaвЌ%”ЌqяО>ёёКfџSэ>MЕ”gЯЯЬјSлvЌžЫnгќлw юk/оУѓ3[nёБПЎqмњлзжaП^з@уљ1 nэЂCЕKП’пЋЎдX=”яqТЁзЧjЙCаЫjUНй{м5н€тI–дlSjo–+S•тVb‚UњсЄJr4dšИ0-Б.Љmn™еЮэЂэЬ№/‚rюYвŠЏЗбєи+:|х*гя ђОНЃ74lh’щCЄш.–сЩљ{@vМ42э;Д‹ С.јуД.ЪO’tдRь$iCd vгsЙI}iЙ­bэ%—–‹Dt’ЪУ†^'E\пњй7iьM—D‡ІЅNэ6ЁІЯCm&K‚”мC5‹ТˆЕŸ/2W['чЕ6‹ јgК­K3щ"С‹М†р+g&D[ї ,X0ѕ`х –I%'Sjf;mkfнiЯ_пžnq/›­91’w ˜ZВдsВB3ёоТћ=6›Э i—–цѓž€Ќl6„) ­IъЧ^?EГU’[Z6;БZU—ИиЩѓ<пБИ%ФWS6[›дЯЙя'дV)О­Ьœћ•ьПЅ:JІЧюp•Яцми•3žіЈЖŒЭ№)о+‚Э шИLЊzМa х**ЛI ЈџзВУ#I—nщRCK^З†Дт(?У$X*сбЛО9…}ТMй,зёњ–­3{ќ#Xkn6‡Гт|с™0uO4ЫЭЮ‡‰Iђ[3Юћ9Ю"XЊ›ц*+л8L•й3Ин3аa’5зn{Ў\юЕЛФEoСйуPс‹^@С~07w_ŸM>щ‡z•сdm6›ю]ŽЁш„#ИзЬWгўl ŽѓЬ1›Ч*QvAмп*Eэm2Бш04Fqъ1‰D_лŒк§žФ’™ЌБЉшfС?• šo0хŠЎУ~Oў4.IСšЃи<•н-™K&Ћ…œш#˜s[Oњ™Ыs&K0ukЯkпШШ^ `7Љ&љСБыУНцKЌЄї[J‰\Р*КЫ%ѕ}Е.Б“ГZb‚ЖJŸя.\3чм"[ŸІjЊЕuЃ”vЭ†Њц’\ зЗ›jЃV.аPВг{вЅ}ІKE‹\ qмЩ@}дšvА}зZх‰ŽZЩРх# sJH—0о4rЂLVm"$vГ™яїKJ.@˜ЊЄШv-UЈ Ѕ\€И.z”њДA-`(|’ыр 0нй0$—С%`м.4c2WћзЇ\€ЙЂУ:p•=сkЙљltйчHЩkВь.{Љбl.r)Й€pбнeЫнCЌЁKUхRDїkшZ6{­Ђ5ˆ5ЈЈ‹ОбšФT6ЬUДFБU‚ Ўh@Ÿl{йЇQЌAЅ`ƒsтЮВbвТнuМfЉ6Г8HОђ]*щОЄЬ\„КЬђ C”жl‡˜ЋLџ) 6ЄŒ-*фIENDЎB`‚Printrun-printrun-2.0.0rc5/plater.py000077500000000000000000000032411325617007000174700ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import os import sys import wx import getopt from printrun.stlplater import StlPlater if __name__ == '__main__': from printrun.printcore import __version__ as printcore_version os.environ['GDK_BACKEND'] = 'x11' usage = "Usage:\n"+\ " plater [OPTION]\n"+\ " plater FILES\n\n"+\ "Options:\n"+\ " -V, --version\t\t\tPrint program's version number and exit\n"+\ " -h, --help\t\t\tPrint this help message and exit\n" try: opts, args = getopt.getopt(sys.argv[1:], "hV", ["help", "version"]) except getopt.GetoptError as err: print(str(err)) print(usage) sys.exit(2) for o, a in opts: if o in ('-V','--version'): print("printrun "+printcore_version) sys.exit(0) elif o in ('-h', '--help'): print(usage) sys.exit(0) app = wx.App(False) main = StlPlater(filenames = sys.argv[1:]) main.Show() app.MainLoop() Printrun-printrun-2.0.0rc5/printcore.py000077500000000000000000000070671325617007000202200ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import time import getopt import sys import getopt from printrun.printcore import printcore from printrun.utils import setup_logging from printrun import gcoder if __name__ == '__main__': setup_logging(sys.stderr) baud = 115200 loud = False statusreport = False from printrun.printcore import __version__ as printcore_version usage = "Usage:\n"+\ " printcore [OPTIONS] PORT FILE\n\n"+\ "Options:\n"+\ " -b, --baud=BAUD_RATE"+\ "\t\tSet baud rate value. Default value is 115200\n"+\ " -s, --statusreport\t\tPrint progress as percentage\n"+\ " -v, --verbose\t\t\tPrint additional progress information\n"+\ " -V, --version\t\t\tPrint program's version number and exit\n"+\ " -h, --help\t\t\tPrint this help message and exit\n" try: opts, args = getopt.getopt(sys.argv[1:], "b:svVh", ["baud=", "statusreport", "verbose", "version", "help"]) except getopt.GetoptError as err: print(str(err)) print(usage) sys.exit(2) for o, a in opts: if o in ('-h', '--help'): print(usage) sys.exit(0) elif o in ('-V','--version'): print("printrun "+printcore_version) sys.exit(0) elif o in ('-b','--baud'): try: baud = int(a) except ValueError: print("ValueError:") print("\tInvalid BAUD_RATE value '%s'" % a) print("\tBAUD_RATE must be an integer\n") # FIXME: This should output a more apropiate error message when # not a good baud rate is passed as an argument # i.e: when baud <= 1000 or > 225000 print(usage) sys.exit(2) elif o in ('-v', '--verbose'): loud = True elif o in ('-s', '--statusreport'): statusreport = True if len(args) <= 1: print("Error: Port or gcode file were not specified.\n") print(usage) sys.exit(2) elif len(args) > 1: port = args[-2] filename = args[-1] print("Printing: %s on %s with baudrate %d" % (filename, port, baud)) p = printcore(port, baud) p.loud = loud time.sleep(2) gcode = [i.strip() for i in open(filename)] gcode = gcoder.LightGCode(gcode) p.startprint(gcode) try: if statusreport: p.loud = False sys.stdout.write("Progress: 00.0%\r") sys.stdout.flush() while p.printing: time.sleep(1) if statusreport: progress = 100 * float(p.queueindex) / len(p.mainqueue) sys.stdout.write("Progress: %02.1f%%\r" % progress) sys.stdout.flush() p.disconnect() sys.exit(0) except: p.disconnect() Printrun-printrun-2.0.0rc5/printrun/000077500000000000000000000000001325617007000175055ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/__init__.py000066400000000000000000000000001325617007000216040ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/eventhandler.py000066400000000000000000000060651325617007000225450ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . class PrinterEventHandler: ''' Defines a skeletton of an event-handler for printer events. It allows attaching to the printcore and will be triggered for different events. ''' def __init__(self): ''' Constructor. ''' pass def on_init(self): ''' Called whenever a new printcore is initialized. ''' pass def on_send(self, command, gline): ''' Called on every command sent to the printer. @param command: The command to be sent. @param gline: The parsed high-level command. ''' pass def on_recv(self, line): ''' Called on every line read from the printer. @param line: The data has been read from printer. ''' pass def on_connect(self): ''' Called whenever printcore is connected. ''' pass def on_disconnect(self): ''' Called whenever printcore is disconnected. ''' pass def on_error(self, error): ''' Called whenever an error occurs. @param error: The error that has been triggered. ''' pass def on_online(self): ''' Called when printer got online. ''' pass def on_temp(self, line): ''' Called for temp, status, whatever. @param line: Line of data. ''' pass def on_start(self, resume): ''' Called when printing is started. @param resume: If true, the print is resumed. ''' pass def on_end(self): ''' Called when printing ends. ''' pass def on_layerchange(self, layer): ''' Called on layer changed. @param layer: The new layer. ''' pass def on_preprintsend(self, gline, index, mainqueue): ''' Called pre sending printing command. @param gline: Line to be send. @param index: Index in the mainqueue. @param mainqueue: The main queue of commands. ''' pass def on_printsend(self, gline): ''' Called whenever a line is sent to the printer. @param gline: The line send to the printer. ''' pass Printrun-printrun-2.0.0rc5/printrun/excluder.py000066400000000000000000000115051325617007000216740ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx from printrun import gviz from .utils import imagefile, install_locale install_locale('pronterface') class ExcluderWindow(gviz.GvizWindow): def __init__(self, excluder, *args, **kwargs): super(ExcluderWindow, self).__init__(*args, **kwargs) self.SetTitle(_("Part excluder: draw rectangles where print instructions should be ignored")) self.toolbar.AddTool(128, " " + _("Reset selection"), wx.Image(imagefile('reset.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), _("Reset selection")) self.Bind(wx.EVT_TOOL, self.reset_selection, id = 128) self.parent = excluder self.p.paint_overlay = self.paint_selection self.p.layerup() def real_to_gcode(self, x, y): return (x + self.p.build_dimensions[3], self.p.build_dimensions[4] + self.p.build_dimensions[1] - y) def gcode_to_real(self, x, y): return (x - self.p.build_dimensions[3], self.p.build_dimensions[1] - (y - self.p.build_dimensions[4])) def mouse(self, event): if event.ButtonUp(wx.MOUSE_BTN_LEFT) \ or event.ButtonUp(wx.MOUSE_BTN_RIGHT): self.initpos = None elif event.Dragging() and event.RightIsDown(): e = event.GetPosition() if not self.initpos or not hasattr(self, "basetrans"): self.initpos = e self.basetrans = self.p.translate self.p.translate = [self.basetrans[0] + (e[0] - self.initpos[0]), self.basetrans[1] + (e[1] - self.initpos[1])] self.p.dirty = 1 wx.CallAfter(self.p.Refresh) elif event.Dragging() and event.LeftIsDown(): x, y = event.GetPosition() if not self.initpos: self.basetrans = self.p.translate x = (x - self.basetrans[0]) / self.p.scale[0] y = (y - self.basetrans[1]) / self.p.scale[1] x, y = self.real_to_gcode(x, y) if not self.initpos: self.initpos = (x, y) self.parent.rectangles.append((0, 0, 0, 0)) else: pos = (x, y) x0 = min(self.initpos[0], pos[0]) y0 = min(self.initpos[1], pos[1]) x1 = max(self.initpos[0], pos[0]) y1 = max(self.initpos[1], pos[1]) self.parent.rectangles[-1] = (x0, y0, x1, y1) wx.CallAfter(self.p.Refresh) else: event.Skip() def _line_scaler(self, orig): x0, y0 = self.gcode_to_real(orig[0], orig[1]) x0 = self.p.scale[0] * x0 + self.p.translate[0] y0 = self.p.scale[1] * y0 + self.p.translate[1] x1, y1 = self.gcode_to_real(orig[2], orig[3]) x1 = self.p.scale[0] * x1 + self.p.translate[0] y1 = self.p.scale[1] * y1 + self.p.translate[1] width = max(x0, x1) - min(x0, x1) + 1 height = max(y0, y1) - min(y0, y1) + 1 return (min(x0, x1), min(y0, y1), width, height,) def paint_selection(self, dc): dc = wx.GCDC(dc) dc.SetPen(wx.TRANSPARENT_PEN) dc.DrawRectangleList([self._line_scaler(rect) for rect in self.parent.rectangles], None, wx.Brush((200, 200, 200, 150))) def reset_selection(self, event): self.parent.rectangles = [] wx.CallAfter(self.p.Refresh) class Excluder: def __init__(self): self.rectangles = [] self.window = None def pop_window(self, gcode, *args, **kwargs): if not self.window: self.window = ExcluderWindow(self, *args, **kwargs) self.window.p.addfile(gcode, True) self.window.Bind(wx.EVT_CLOSE, self.close_window) self.window.Show() else: self.window.Show() self.window.Raise() def close_window(self, event = None): if self.window: self.window.Destroy() self.window = None if __name__ == '__main__': import sys from . import gcoder gcode = gcoder.GCode(open(sys.argv[1])) app = wx.App(False) ex = Excluder() ex.pop_window(gcode) app.MainLoop() Printrun-printrun-2.0.0rc5/printrun/gcodeplater.py000077500000000000000000000251411325617007000223560ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . # Set up Internationalization using gettext # searching for installed locales on /usr/share; uses relative folder if not found (windows) from .utils import install_locale, get_home_pos install_locale('pronterface') import wx import sys import os import time import types import re import math import logging from printrun import gcoder from printrun.objectplater import make_plater, PlaterPanel from printrun.gl.libtatlin import actors import printrun.gui.viz # NOQA from printrun import gcview def extrusion_only(gline): return gline.e is not None \ and (gline.x, gline.y, gline.z) == (None, None, None) # Custom method for gcoder.GCode to analyze & output gcode in a single call def gcoder_write(self, f, line, store = False): f.write(line) self.append(line, store = store) rewrite_exp = re.compile("(%s)" % "|".join(["X([-+]?[0-9]*\.?[0-9]*)", "Y([-+]?[0-9]*\.?[0-9]*)"])) def rewrite_gline(centeroffset, gline, cosr, sinr): if gline.is_move and (gline.x is not None or gline.y is not None): if gline.relative: xc = yc = 0 cox = coy = 0 if gline.x is not None: xc = gline.x if gline.y is not None: yc = gline.y else: xc = gline.current_x + centeroffset[0] yc = gline.current_y + centeroffset[1] cox = centeroffset[0] coy = centeroffset[1] new_x = "X%.04f" % (xc * cosr - yc * sinr - cox) new_y = "Y%.04f" % (xc * sinr + yc * cosr - coy) new = {"X": new_x, "Y": new_y} new_line = rewrite_exp.sub(lambda ax: new[ax.group()[0]], gline.raw) new_line = new_line.split(";")[0] if gline.x is None: new_line += " " + new_x if gline.y is None: new_line += " " + new_y return new_line else: return gline.raw class GcodePlaterPanel(PlaterPanel): load_wildcard = _("GCODE files (*.gcode;*.GCODE;*.g)") + "|*.gcode;*.gco;*.g" save_wildcard = _("GCODE files (*.gcode;*.GCODE;*.g)") + "|*.gcode;*.gco;*.g" def prepare_ui(self, filenames = [], callback = None, parent = None, build_dimensions = None, circular_platform = False, antialias_samples = 0): super(GcodePlaterPanel, self).prepare_ui(filenames, callback, parent, build_dimensions) viewer = gcview.GcodeViewPanel(self, build_dimensions = self.build_dimensions, antialias_samples = antialias_samples) self.set_viewer(viewer) self.platform = actors.Platform(self.build_dimensions, circular = circular_platform) self.platform_object = gcview.GCObject(self.platform) def get_objects(self): return [self.platform_object] + list(self.models.values()) objects = property(get_objects) def load_file(self, filename): gcode = gcoder.GCode(open(filename, "rU"), get_home_pos(self.build_dimensions)) model = actors.GcodeModel() if gcode.filament_length > 0: model.display_travels = False generator = model.load_data(gcode) generator_output = next(generator) while generator_output is not None: generator_output = next(generator) obj = gcview.GCObject(model) obj.offsets = [self.build_dimensions[3], self.build_dimensions[4], 0] obj.gcode = gcode obj.dims = [gcode.xmin, gcode.xmax, gcode.ymin, gcode.ymax, gcode.zmin, gcode.zmax] obj.centeroffset = [-(obj.dims[1] + obj.dims[0]) / 2, -(obj.dims[3] + obj.dims[2]) / 2, 0] self.add_model(filename, obj) wx.CallAfter(self.Refresh) def done(self, event, cb): if not os.path.exists("tempgcode"): os.mkdir("tempgcode") name = "tempgcode/" + str(int(time.time()) % 10000) + ".gcode" self.export_to(name) if cb is not None: cb(name) if self.destroy_on_done: self.Destroy() # What's hard in there ? # 1) [x] finding the order in which the objects are printed # 2) [x] handling layers correctly # 3) [x] handling E correctly # 4) [x] handling position shifts: should we either reset absolute 0 using # G92 or should we rewrite all positions ? => we use G92s # 5) [ ] handling the start & end gcode properly ? # 6) [x] handling of current tool # 7) [x] handling of Z moves for sequential printing (don't lower Z before # reaching the next object print area) # 8) [x] handling of absolute/relative status # Initial implementation should just print the objects sequentially, # but the end goal is to have a clean per-layer merge def export_to(self, name): return self.export_combined(name) return self.export_sequential(name) def export_combined(self, name): models = list(self.models.values()) last_real_position = None # Sort models by Z max to print smaller objects first models.sort(key = lambda x: x.dims[-1]) alllayers = [] for (model_i, model) in enumerate(models): def add_offset(layer): return layer.z + model.offsets[2] if layer.z is not None else layer.z alllayers += [(add_offset(layer), model_i, layer_i) for (layer_i, layer) in enumerate(model.gcode.all_layers) if add_offset(layer) is not None] alllayers.sort() laste = [0] * len(models) lasttool = [0] * len(models) lastrelative = [False] * len(models) with open(name, "w") as f: analyzer = gcoder.GCode(None, get_home_pos(self.build_dimensions)) analyzer.write = types.MethodType(lambda self, line: gcoder_write(self, f, line), analyzer) for (layer_z, model_i, layer_i) in alllayers: model = models[model_i] layer = model.gcode.all_layers[layer_i] r = math.radians(model.rot) o = model.offsets co = model.centeroffset offset_pos = last_real_position if last_real_position is not None else (0, 0, 0) analyzer.write("; %f %f %f\n" % offset_pos) trans = (- (o[0] + co[0]), - (o[1] + co[1]), - (o[2] + co[2])) trans_wpos = (offset_pos[0] + trans[0], offset_pos[1] + trans[1], offset_pos[2] + trans[2]) analyzer.write("; GCodePlater: Model %d Layer %d at Z = %s\n" % (model_i, layer_i, layer_z)) if lastrelative[model_i]: analyzer.write("G91\n") else: analyzer.write("G90\n") if analyzer.current_tool != lasttool[model_i]: analyzer.write("T%d\n" % lasttool[model_i]) analyzer.write("G92 X%.5f Y%.5f Z%.5f\n" % trans_wpos) analyzer.write("G92 E%.5f\n" % laste[model_i]) for l in layer: if l.command != "G28" and (l.command != "G92" or extrusion_only(l)): if r == 0: analyzer.write(l.raw + "\n") else: analyzer.write(rewrite_gline(co, l, math.cos(r), math.sin(r)) + "\n") # Find the current real position & E last_real_position = analyzer.current_pos laste[model_i] = analyzer.current_e lastrelative[model_i] = analyzer.relative lasttool[model_i] = analyzer.current_tool logging.info(_("Exported merged G-Codes to %s") % name) def export_sequential(self, name): models = list(self.models.values()) last_real_position = None # Sort models by Z max to print smaller objects first models.sort(key = lambda x: x.dims[-1]) with open(name, "w") as f: for model_i, model in enumerate(models): r = math.radians(model.rot) o = model.offsets co = model.centeroffset offset_pos = last_real_position if last_real_position is not None else (0, 0, 0) trans = (- (o[0] + co[0]), - (o[1] + co[1]), - (o[2] + co[2])) trans_wpos = (offset_pos[0] + trans[0], offset_pos[1] + trans[1], offset_pos[2] + trans[2]) f.write("; GCodePlater: Model %d\n" % model_i) f.write("G90\n") f.write("G92 X%.5f Y%.5f Z%.5f E0\n" % trans_wpos) f.write("G1 X%.5f Y%.5f" % (-co[0], -co[1])) for l in model.gcode: if l.command != "G28" and (l.command != "G92" or extrusion_only(l)): if r == 0: f.write(l.raw + "\n") else: f.write(rewrite_gline(co, l, math.cos(r), math.sin(r)) + "\n") # Find the current real position for i in range(len(model.gcode) - 1, -1, -1): gline = model.gcode.lines[i] if gline.is_move: last_real_position = (- trans[0] + gline.current_x, - trans[1] + gline.current_y, - trans[2] + gline.current_z) break logging.info(_("Exported merged G-Codes to %s") % name) GcodePlater = make_plater(GcodePlaterPanel) if __name__ == '__main__': app = wx.App(False) main = GcodePlater(filenames = sys.argv[1:]) for fn in main.filenames: main.load_file(fn) main.filenames = None main.autoplate() main.export_to("gcodeplate___test.gcode") raise SystemExit main.Show() app.MainLoop() Printrun-printrun-2.0.0rc5/printrun/gcoder.py000077500000000000000000000726171325617007000213420ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is copied from GCoder. # # GCoder 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. # # GCoder is distributed in the hope that it will 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 Printrun. If not, see . import sys import re import math import datetime import logging from array import array gcode_parsed_args = ["x", "y", "e", "f", "z", "i", "j"] gcode_parsed_nonargs = ["g", "t", "m", "n"] to_parse = "".join(gcode_parsed_args + gcode_parsed_nonargs) gcode_exp = re.compile("\([^\(\)]*\)|;.*|[/\*].*\n|([%s])([-+]?[0-9]*\.?[0-9]*)" % to_parse) gcode_strip_comment_exp = re.compile("\([^\(\)]*\)|;.*|[/\*].*\n") m114_exp = re.compile("\([^\(\)]*\)|[/\*].*\n|([XYZ]):?([-+]?[0-9]*\.?[0-9]*)") specific_exp = "(?:\([^\(\)]*\))|(?:;.*)|(?:[/\*].*\n)|(%s[-+]?[0-9]*\.?[0-9]*)" move_gcodes = ["G0", "G1", "G2", "G3"] class PyLine: __slots__ = ('x', 'y', 'z', 'e', 'f', 'i', 'j', 'raw', 'command', 'is_move', 'relative', 'relative_e', 'current_x', 'current_y', 'current_z', 'extruding', 'current_tool', 'gcview_end_vertex') def __init__(self, l): self.raw = l def __getattr__(self, name): return None class PyLightLine: __slots__ = ('raw', 'command') def __init__(self, l): self.raw = l def __getattr__(self, name): return None try: from . import gcoder_line Line = gcoder_line.GLine LightLine = gcoder_line.GLightLine except Exception as e: logging.warning("Memory-efficient GCoder implementation unavailable: %s" % e) Line = PyLine LightLine = PyLightLine def find_specific_code(line, code): exp = specific_exp % code bits = [bit for bit in re.findall(exp, line.raw) if bit] if not bits: return None else: return float(bits[0][1:]) def S(line): return find_specific_code(line, "S") def P(line): return find_specific_code(line, "P") def split(line): split_raw = gcode_exp.findall(line.raw.lower()) if split_raw and split_raw[0][0] == "n": del split_raw[0] if not split_raw: line.command = line.raw line.is_move = False logging.warning("raw G-Code line \"%s\" could not be parsed" % line.raw) return [line.raw] command = split_raw[0] line.command = command[0].upper() + command[1] line.is_move = line.command in move_gcodes return split_raw def parse_coordinates(line, split_raw, imperial = False, force = False): # Not a G-line, we don't want to parse its arguments if not force and line.command[0] != "G": return unit_factor = 25.4 if imperial else 1 for bit in split_raw: code = bit[0] if code not in gcode_parsed_nonargs and bit[1]: setattr(line, code, unit_factor * float(bit[1])) class Layer(list): __slots__ = ("duration", "z") def __init__(self, lines, z = None): super(Layer, self).__init__(lines) self.z = z class GCode: line_class = Line lines = None layers = None all_layers = None layer_idxs = None line_idxs = None append_layer = None append_layer_id = None imperial = False relative = False relative_e = False current_tool = 0 # Home position: current absolute position counted from machine origin home_x = 0 home_y = 0 home_z = 0 # Current position: current absolute position counted from machine origin current_x = 0 current_y = 0 current_z = 0 # For E this is the absolute position from machine start current_e = 0 current_e_multi=[0] total_e = 0 total_e_multi=[0] max_e = 0 max_e_multi=[0] # Current feedrate current_f = 0 # Offset: current offset between the machine origin and the machine current # absolute coordinate system (as shifted by G92s) offset_x = 0 offset_y = 0 offset_z = 0 offset_e = 0 offset_e_multi = [0] # Expected behavior: # - G28 X => X axis is homed, offset_x <- 0, current_x <- home_x # - G92 Xk => X axis does not move, so current_x does not change # and offset_x <- current_x - k, # - absolute G1 Xk => X axis moves, current_x <- offset_x + k # How to get... # current abs X from machine origin: current_x # current abs X in machine current coordinate system: current_x - offset_x filament_length = None filament_length_multi=[0] duration = None xmin = None xmax = None ymin = None ymax = None zmin = None zmax = None width = None depth = None height = None est_layer_height = None # abs_x is the current absolute X in machine current coordinate system # (after the various G92 transformations) and can be used to store the # absolute position of the head at a given time def _get_abs_x(self): return self.current_x - self.offset_x abs_x = property(_get_abs_x) def _get_abs_y(self): return self.current_y - self.offset_y abs_y = property(_get_abs_y) def _get_abs_z(self): return self.current_z - self.offset_z abs_z = property(_get_abs_z) def _get_abs_e(self): return self.current_e - self.offset_e abs_e = property(_get_abs_e) def _get_abs_e_multi(self,i): return self.current_e_multi[i] - self.offset_e_multi[i] abs_e = property(_get_abs_e) def _get_abs_pos(self): return (self.abs_x, self.abs_y, self.abs_z) abs_pos = property(_get_abs_pos) def _get_current_pos(self): return (self.current_x, self.current_y, self.current_z) current_pos = property(_get_current_pos) def _get_home_pos(self): return (self.home_x, self.home_y, self.home_z) def _set_home_pos(self, home_pos): if home_pos: self.home_x, self.home_y, self.home_z = home_pos home_pos = property(_get_home_pos, _set_home_pos) def _get_layers_count(self): return len(self.all_zs) layers_count = property(_get_layers_count) def __init__(self, data = None, home_pos = None, layer_callback = None, deferred = False): if not deferred: self.prepare(data, home_pos, layer_callback) def prepare(self, data = None, home_pos = None, layer_callback = None): self.home_pos = home_pos if data: line_class = self.line_class self.lines = [line_class(l2) for l2 in (l.strip() for l in data) if l2] self._preprocess(build_layers = True, layer_callback = layer_callback) else: self.lines = [] self.append_layer_id = 0 self.append_layer = Layer([]) self.all_layers = [self.append_layer] self.all_zs = set() self.layers = {} self.layer_idxs = array('I', []) self.line_idxs = array('I', []) def __len__(self): return len(self.line_idxs) def __iter__(self): return self.lines.__iter__() def prepend_to_layer(self, commands, layer_idx): # Prepend commands in reverse order commands = [c.strip() for c in commands[::-1] if c.strip()] layer = self.all_layers[layer_idx] # Find start index to append lines # and end index to append new indices start_index = self.layer_idxs.index(layer_idx) for i in range(start_index, len(self.layer_idxs)): if self.layer_idxs[i] != layer_idx: end_index = i break else: end_index = i + 1 end_line = self.line_idxs[end_index - 1] for i, command in enumerate(commands): gline = Line(command) # Split to get command split(gline) # Force is_move to False gline.is_move = False # Insert gline at beginning of layer layer.insert(0, gline) # Insert gline at beginning of list self.lines.insert(start_index, gline) # Update indices arrays & global gcodes list self.layer_idxs.insert(end_index + i, layer_idx) self.line_idxs.insert(end_index + i, end_line + i + 1) return commands[::-1] def rewrite_layer(self, commands, layer_idx): # Prepend commands in reverse order commands = [c.strip() for c in commands[::-1] if c.strip()] layer = self.all_layers[layer_idx] # Find start index to append lines # and end index to append new indices start_index = self.layer_idxs.index(layer_idx) for i in range(start_index, len(self.layer_idxs)): if self.layer_idxs[i] != layer_idx: end_index = i break else: end_index = i + 1 self.layer_idxs = self.layer_idxs[:start_index] + array('I', len(commands) * [layer_idx]) + self.layer_idxs[end_index:] self.line_idxs = self.line_idxs[:start_index] + array('I', range(len(commands))) + self.line_idxs[end_index:] del self.lines[start_index:end_index] del layer[:] for i, command in enumerate(commands): gline = Line(command) # Split to get command split(gline) # Force is_move to False gline.is_move = False # Insert gline at beginning of layer layer.insert(0, gline) # Insert gline at beginning of list self.lines.insert(start_index, gline) return commands[::-1] def append(self, command, store = True): command = command.strip() if not command: return gline = Line(command) self._preprocess([gline]) if store: self.lines.append(gline) self.append_layer.append(gline) self.layer_idxs.append(self.append_layer_id) self.line_idxs.append(len(self.append_layer)) return gline def _preprocess(self, lines = None, build_layers = False, layer_callback = None): """Checks for imperial/relativeness settings and tool changes""" if not lines: lines = self.lines imperial = self.imperial relative = self.relative relative_e = self.relative_e current_tool = self.current_tool current_x = self.current_x current_y = self.current_y current_z = self.current_z offset_x = self.offset_x offset_y = self.offset_y offset_z = self.offset_z # Extrusion computation current_e = self.current_e offset_e = self.offset_e total_e = self.total_e max_e = self.max_e current_e_multi = self.current_e_multi[current_tool] offset_e_multi = self.offset_e_multi[current_tool] total_e_multi = self.total_e_multi[current_tool] max_e_multi = self.max_e_multi[current_tool] # Store this one out of the build_layers scope for efficiency cur_layer_has_extrusion = False # Initialize layers and other global computations if build_layers: # Bounding box computation xmin = float("inf") ymin = float("inf") zmin = 0 xmax = float("-inf") ymax = float("-inf") zmax = float("-inf") # Also compute extrusion-only values xmin_e = float("inf") ymin_e = float("inf") xmax_e = float("-inf") ymax_e = float("-inf") # Duration estimation # TODO: # get device caps from firmware: max speed, acceleration/axis # (including extruder) # calculate the maximum move duration accounting for above ;) lastx = lasty = lastz = laste = lastf = 0.0 lastdx = 0 lastdy = 0 x = y = e = f = 0.0 currenttravel = 0.0 moveduration = 0.0 totalduration = 0.0 acceleration = 2000.0 # mm/s^2 layerbeginduration = 0.0 # Initialize layers all_layers = self.all_layers = [] all_zs = self.all_zs = set() layer_idxs = self.layer_idxs = [] line_idxs = self.line_idxs = [] layer_id = 0 layer_line = 0 last_layer_z = None prev_z = None prev_base_z = (None, None) cur_z = None cur_lines = [] if self.line_class != Line: get_line = lambda l: Line(l.raw) else: get_line = lambda l: l for true_line in lines: # # Parse line # Use a heavy copy of the light line to preprocess line = get_line(true_line) split_raw = split(line) if line.command: # Update properties if line.is_move: line.relative = relative line.relative_e = relative_e line.current_tool = current_tool elif line.command == "G20": imperial = True elif line.command == "G21": imperial = False elif line.command == "G90": relative = False relative_e = False elif line.command == "G91": relative = True relative_e = True elif line.command == "M82": relative_e = False elif line.command == "M83": relative_e = True elif line.command[0] == "T": try: current_tool = int(line.command[1:]) except: pass #handle T? by treating it as no tool change while(current_tool+1>len(self.current_e_multi)): self.current_e_multi+=[0] self.offset_e_multi+=[0] self.total_e_multi+=[0] self.max_e_multi+=[0] current_e_multi = self.current_e_multi[current_tool] offset_e_multi = self.offset_e_multi[current_tool] total_e_multi = self.total_e_multi[current_tool] max_e_multi = self.max_e_multi[current_tool] if line.command[0] == "G": parse_coordinates(line, split_raw, imperial) # Compute current position if line.is_move: x = line.x y = line.y z = line.z if line.f is not None: self.current_f = line.f if line.relative: x = current_x + (x or 0) y = current_y + (y or 0) z = current_z + (z or 0) else: if x is not None: x = x + offset_x if y is not None: y = y + offset_y if z is not None: z = z + offset_z if x is not None: current_x = x if y is not None: current_y = y if z is not None: current_z = z elif line.command == "G28": home_all = not any([line.x, line.y, line.z]) if home_all or line.x is not None: offset_x = 0 current_x = self.home_x if home_all or line.y is not None: offset_y = 0 current_y = self.home_y if home_all or line.z is not None: offset_z = 0 current_z = self.home_z elif line.command == "G92": if line.x is not None: offset_x = current_x - line.x if line.y is not None: offset_y = current_y - line.y if line.z is not None: offset_z = current_z - line.z line.current_x = current_x line.current_y = current_y line.current_z = current_z # # Process extrusion if line.e is not None: if line.is_move: if line.relative_e: line.extruding = line.e > 0 total_e += line.e current_e += line.e total_e_multi += line.e current_e_multi += line.e else: new_e = line.e + offset_e line.extruding = new_e > current_e total_e += new_e - current_e current_e = new_e new_e_multi = line.e + offset_e_multi total_e_multi += new_e_multi - current_e_multi current_e_multi = new_e_multi max_e = max(max_e, total_e) max_e_multi=max(max_e_multi, total_e_multi) cur_layer_has_extrusion |= line.extruding elif line.command == "G92": offset_e = current_e - line.e offset_e_multi = current_e_multi - line.e self.current_e_multi[current_tool]=current_e_multi self.offset_e_multi[current_tool]=offset_e_multi self.max_e_multi[current_tool]=max_e_multi self.total_e_multi[current_tool]=total_e_multi # # Create layers and perform global computations if build_layers: # Update bounding box if line.is_move: if line.extruding: if line.current_x is not None: xmin_e = min(xmin_e, line.current_x) xmax_e = max(xmax_e, line.current_x) if line.current_y is not None: ymin_e = min(ymin_e, line.current_y) ymax_e = max(ymax_e, line.current_y) if max_e <= 0: if line.current_x is not None: xmin = min(xmin, line.current_x) xmax = max(xmax, line.current_x) if line.current_y is not None: ymin = min(ymin, line.current_y) ymax = max(ymax, line.current_y) # Compute duration if line.command == "G0" or line.command == "G1": x = line.x if line.x is not None else lastx y = line.y if line.y is not None else lasty z = line.z if line.z is not None else lastz e = line.e if line.e is not None else laste # mm/s vs mm/m => divide by 60 f = line.f / 60.0 if line.f is not None else lastf # given last feedrate and current feedrate calculate the # distance needed to achieve current feedrate. # if travel is longer than req'd distance, then subtract # distance to achieve full speed, and add the time it took # to get there. # then calculate the time taken to complete the remaining # distance # FIXME: this code has been proven to be super wrong when 2 # subsquent moves are in opposite directions, as requested # speed is constant but printer has to fully decellerate # and reaccelerate # The following code tries to fix it by forcing a full # reacceleration if this move is in the opposite direction # of the previous one dx = x - lastx dy = y - lasty if dx * lastdx + dy * lastdy <= 0: lastf = 0 currenttravel = math.hypot(dx, dy) if currenttravel == 0: if line.z is not None: currenttravel = abs(line.z) if line.relative else abs(line.z - lastz) elif line.e is not None: currenttravel = abs(line.e) if line.relative_e else abs(line.e - laste) # Feedrate hasn't changed, no acceleration/decceleration planned if f == lastf: moveduration = currenttravel / f if f != 0 else 0. else: # FIXME: review this better # this looks wrong : there's little chance that the feedrate we'll decelerate to is the previous feedrate # shouldn't we instead look at three consecutive moves ? distance = 2 * abs(((lastf + f) * (f - lastf) * 0.5) / acceleration) # multiply by 2 because we have to accelerate and decelerate if distance <= currenttravel and lastf + f != 0 and f != 0: moveduration = 2 * distance / (lastf + f) # This is distance / mean(lastf, f) moveduration += (currenttravel - distance) / f else: moveduration = 2 * currenttravel / (lastf + f) # This is currenttravel / mean(lastf, f) # FIXME: probably a little bit optimistic, but probably a much better estimate than the previous one: # moveduration = math.sqrt(2 * distance / acceleration) # probably buggy : not taking actual travel into account lastdx = dx lastdy = dy totalduration += moveduration lastx = x lasty = y lastz = z laste = e lastf = f elif line.command == "G4": moveduration = P(line) if moveduration: moveduration /= 1000.0 totalduration += moveduration # FIXME : looks like this needs to be tested with "lift Z on move" if line.z is not None: if line.command == "G92": cur_z = line.z elif line.is_move: if line.relative and cur_z is not None: cur_z += line.z else: cur_z = line.z # FIXME: the logic behind this code seems to work, but it might be # broken if cur_z != prev_z: if prev_z is not None and last_layer_z is not None: offset = self.est_layer_height if self.est_layer_height else 0.01 if abs(prev_z - last_layer_z) < offset: if self.est_layer_height is None: zs = sorted([l.z for l in all_layers if l.z is not None]) heights = [round(zs[i + 1] - zs[i], 3) for i in range(len(zs) - 1)] heights = [height for height in heights if height] if len(heights) >= 2: self.est_layer_height = heights[1] elif heights: self.est_layer_height = heights[0] else: self.est_layer_height = 0.1 base_z = round(prev_z - (prev_z % self.est_layer_height), 2) else: base_z = round(prev_z, 2) else: base_z = prev_z if base_z != prev_base_z: new_layer = Layer(cur_lines, base_z) new_layer.duration = totalduration - layerbeginduration layerbeginduration = totalduration all_layers.append(new_layer) if cur_layer_has_extrusion and prev_z not in all_zs: all_zs.add(prev_z) cur_lines = [] cur_layer_has_extrusion = False layer_id += 1 layer_line = 0 last_layer_z = base_z if layer_callback is not None: layer_callback(self, len(all_layers) - 1) prev_base_z = base_z if build_layers: cur_lines.append(true_line) layer_idxs.append(layer_id) line_idxs.append(layer_line) layer_line += 1 prev_z = cur_z # ## Loop done # Store current status self.imperial = imperial self.relative = relative self.relative_e = relative_e self.current_tool = current_tool self.current_x = current_x self.current_y = current_y self.current_z = current_z self.offset_x = offset_x self.offset_y = offset_y self.offset_z = offset_z self.current_e = current_e self.offset_e = offset_e self.max_e = max_e self.total_e = total_e self.current_e_multi[current_tool]=current_e_multi self.offset_e_multi[current_tool]=offset_e_multi self.max_e_multi[current_tool]=max_e_multi self.total_e_multi[current_tool]=total_e_multi # Finalize layers if build_layers: if cur_lines: new_layer = Layer(cur_lines, prev_z) new_layer.duration = totalduration - layerbeginduration layerbeginduration = totalduration all_layers.append(new_layer) if cur_layer_has_extrusion and prev_z not in all_zs: all_zs.add(prev_z) self.append_layer_id = len(all_layers) self.append_layer = Layer([]) self.append_layer.duration = 0 all_layers.append(self.append_layer) self.layer_idxs = array('I', layer_idxs) self.line_idxs = array('I', line_idxs) # Compute bounding box all_zs = self.all_zs.union({zmin}).difference({None}) zmin = min(all_zs) zmax = max(all_zs) self.filament_length = self.max_e while len(self.filament_length_multi) 0: self.xmin = xmin_e if not math.isinf(xmin_e) else 0 self.xmax = xmax_e if not math.isinf(xmax_e) else 0 self.ymin = ymin_e if not math.isinf(ymin_e) else 0 self.ymax = ymax_e if not math.isinf(ymax_e) else 0 else: self.xmin = xmin if not math.isinf(xmin) else 0 self.xmax = xmax if not math.isinf(xmax) else 0 self.ymin = ymin if not math.isinf(ymin) else 0 self.ymax = ymax if not math.isinf(ymax) else 0 self.zmin = zmin if not math.isinf(zmin) else 0 self.zmax = zmax if not math.isinf(zmax) else 0 self.width = self.xmax - self.xmin self.depth = self.ymax - self.ymin self.height = self.zmax - self.zmin # Finalize duration totaltime = datetime.timedelta(seconds = int(totalduration)) self.duration = totaltime def idxs(self, i): return self.layer_idxs[i], self.line_idxs[i] def estimate_duration(self): return self.layers_count, self.duration class LightGCode(GCode): line_class = LightLine def main(): if len(sys.argv) < 2: print("usage: %s filename.gcode" % sys.argv[0]) return print("Line object size:", sys.getsizeof(Line("G0 X0"))) print("Light line object size:", sys.getsizeof(LightLine("G0 X0"))) gcode = GCode(open(sys.argv[1], "rU")) print("Dimensions:") xdims = (gcode.xmin, gcode.xmax, gcode.width) print("\tX: %0.02f - %0.02f (%0.02f)" % xdims) ydims = (gcode.ymin, gcode.ymax, gcode.depth) print("\tY: %0.02f - %0.02f (%0.02f)" % ydims) zdims = (gcode.zmin, gcode.zmax, gcode.height) print("\tZ: %0.02f - %0.02f (%0.02f)" % zdims) print("Filament used: %0.02fmm" % gcode.filament_length) for i in enumerate(gcode.filament_length_multi): print("E%d %0.02fmm" % (i[0],i[1])) print("Number of layers: %d" % gcode.layers_count) print("Estimated duration: %s" % gcode.estimate_duration()[1]) if __name__ == '__main__': main() Printrun-printrun-2.0.0rc5/printrun/gcoder_heapy_support.patch000066400000000000000000000012241325617007000247520ustar00rootroot00000000000000--- printrun/gcoder_line.c 2013-06-15 16:08:53.260081109 +0200 +++ printrun/gcoder_line.c 2013-06-15 16:08:57.083439793 +0200 @@ -3945,2 +3945,4 @@ static int __Pyx_InitGlobals(void) { +#include "gcoder_line_extra.h" + #if PY_MAJOR_VERSION < 3 @@ -4032,2 +4034,7 @@ PyMODINIT_FUNC PyInit_gcoder_line(void) /*--- Execution code ---*/ + nysets_heapdefs[0].type = &__pyx_type_8printrun_11gcoder_line_GLine; + if (PyDict_SetItemString(__pyx_d, + "_NyHeapDefs_", + PyCObject_FromVoidPtrAndDesc(&nysets_heapdefs, "NyHeapDef[] v1.0", 0)) < 0) +{__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} Printrun-printrun-2.0.0rc5/printrun/gcoder_line.pyx000066400000000000000000000230631325617007000225250ustar00rootroot00000000000000#cython: language_level=3 # # This file is copied from GCoder. # # GCoder 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. # # GCoder is distributed in the hope that it will 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 Printrun. If not, see . from libc.stdlib cimport malloc, free from libc.stdint cimport uint8_t, uint32_t from libc.string cimport strlen, strncpy cdef char* copy_string(object value): value = value.encode('utf-8') cdef char* orig = value str_len = len(orig) cdef char* array = malloc(str_len + 1) strncpy(array, orig, str_len) array[str_len] = 0; return array cdef enum BitPos: pos_raw = 1 << 0 pos_command = 1 << 1 pos_is_move = 1 << 2 pos_x = 1 << 3 pos_y = 1 << 4 pos_z = 1 << 5 pos_e = 1 << 6 pos_f = 1 << 7 pos_i = 1 << 8 pos_j = 1 << 9 pos_relative = 1 << 10 pos_relative_e = 1 << 11 pos_extruding = 1 << 12 pos_current_x = 1 << 13 pos_current_y = 1 << 14 pos_current_z = 1 << 15 pos_current_tool = 1 << 16 pos_gcview_end_vertex = 1 << 17 # WARNING: don't use bits 24 to 31 as we store current_tool there cdef inline uint32_t has_var(uint32_t status, uint32_t pos): return status & pos cdef inline uint32_t set_has_var(uint32_t status, uint32_t pos): return status | pos cdef inline uint32_t unset_has_var(uint32_t status, uint32_t pos): return status & ~pos cdef class GLine: cdef char* _raw cdef char* _command cdef float _x, _y, _z, _e, _f, _i, _j cdef float _current_x, _current_y, _current_z cdef uint32_t _gcview_end_vertex cdef uint32_t _status __slots__ = () def __cinit__(self): self._status = 0 self._raw = NULL self._command = NULL def __init__(self, line): self.raw = line def __dealloc__(self): if self._raw != NULL: free(self._raw) if self._command != NULL: free(self._command) property x: def __get__(self): if has_var(self._status, pos_x): return self._x else: return None def __set__(self, value): self._x = value self._status = set_has_var(self._status, pos_x) property y: def __get__(self): if has_var(self._status, pos_y): return self._y else: return None def __set__(self, value): self._y = value self._status = set_has_var(self._status, pos_y) property z: def __get__(self): if has_var(self._status, pos_z): return self._z else: return None def __set__(self, value): self._z = value self._status = set_has_var(self._status, pos_z) property e: def __get__(self): if has_var(self._status, pos_e): return self._e else: return None def __set__(self, value): self._e = value self._status = set_has_var(self._status, pos_e) property f: def __get__(self): if has_var(self._status, pos_f): return self._f else: return None def __set__(self, value): self._f = value self._status = set_has_var(self._status, pos_f) property i: def __get__(self): if has_var(self._status, pos_i): return self._i else: return None def __set__(self, value): self._i = value self._status = set_has_var(self._status, pos_i) property j: def __get__(self): if has_var(self._status, pos_j): return self._j else: return None def __set__(self, value): self._j = value self._status = set_has_var(self._status, pos_j) property is_move: def __get__(self): if has_var(self._status, pos_is_move): return True else: return False def __set__(self, value): if value: self._status = set_has_var(self._status, pos_is_move) else: self._status = unset_has_var(self._status, pos_is_move) property relative: def __get__(self): if has_var(self._status, pos_relative): return True else: return False def __set__(self, value): if value: self._status = set_has_var(self._status, pos_relative) else: self._status = unset_has_var(self._status, pos_relative) property relative_e: def __get__(self): if has_var(self._status, pos_relative_e): return True else: return False def __set__(self, value): if value: self._status = set_has_var(self._status, pos_relative_e) else: self._status = unset_has_var(self._status, pos_relative_e) property extruding: def __get__(self): if has_var(self._status, pos_extruding): return True else: return False def __set__(self, value): if value: self._status = set_has_var(self._status, pos_extruding) else: self._status = unset_has_var(self._status, pos_extruding) property current_x: def __get__(self): if has_var(self._status, pos_current_x): return self._current_x else: return None def __set__(self, value): self._current_x = value self._status = set_has_var(self._status, pos_current_x) property current_y: def __get__(self): if has_var(self._status, pos_current_y): return self._current_y else: return None def __set__(self, value): self._current_y = value self._status = set_has_var(self._status, pos_current_y) property current_z: def __get__(self): if has_var(self._status, pos_current_z): return self._current_z else: return None def __set__(self, value): self._current_z = value self._status = set_has_var(self._status, pos_current_z) property current_tool: def __get__(self): if has_var(self._status, pos_current_tool): return self._status >> 24 else: return None def __set__(self, value): self._status = (self._status & ((1 << 24) - 1)) | (value << 24) self._status = set_has_var(self._status, pos_current_tool) property gcview_end_vertex: def __get__(self): if has_var(self._status, pos_gcview_end_vertex): return self._gcview_end_vertex else: return None def __set__(self, value): self._gcview_end_vertex = value self._status = set_has_var(self._status, pos_gcview_end_vertex) property raw: def __get__(self): if has_var(self._status, pos_raw): return self._raw.decode('utf-8') else: return None def __set__(self, value): # WARNING: memory leak could happen here, as we don't do the following : # if self._raw != NULL: free(self._raw) self._raw = copy_string(value) self._status = set_has_var(self._status, pos_raw) property command: def __get__(self): if has_var(self._status, pos_command): return self._command.decode('utf-8') else: return None def __set__(self, value): # WARNING: memory leak could happen here, as we don't do the following : # if self._command != NULL: free(self._command) self._command = copy_string(value) self._status = set_has_var(self._status, pos_command) cdef class GLightLine: cdef char* _raw cdef char* _command cdef uint8_t _status __slots__ = () def __cinit__(self): self._status = 0 self._raw = NULL self._command = NULL def __init__(self, line): self.raw = line def __dealloc__(self): if self._raw != NULL: free(self._raw) if self._command != NULL: free(self._command) property raw: def __get__(self): if has_var(self._status, pos_raw): return self._raw.decode('utf-8') else: return None def __set__(self, value): # WARNING: memory leak could happen here, as we don't do the following : # if self._raw != NULL: free(self._raw) self._raw = copy_string(value) self._status = set_has_var(self._status, pos_raw) property command: def __get__(self): if has_var(self._status, pos_command): return self._command.decode('utf-8') else: return None def __set__(self, value): # WARNING: memory leak could happen here, as we don't do the following : # if self._command != NULL: free(self._command) self._command = copy_string(value) self._status = set_has_var(self._status, pos_command) property is_move: def __get__(self): if has_var(self._status, pos_is_move): return True else: return False def __set__(self, value): if value: self._status = set_has_var(self._status, pos_is_move) else: self._status = unset_has_var(self._status, pos_is_move) Printrun-printrun-2.0.0rc5/printrun/gcoder_line_extra.h000066400000000000000000000017701325617007000233400ustar00rootroot00000000000000typedef int (*NyHeapDef_SizeGetter) (PyObject *obj); typedef struct { int flags; /* As yet, only 0 */ PyTypeObject *type; /* The type it regards */ NyHeapDef_SizeGetter size; void *traverse; void *relate; void *resv3, *resv4, *resv5; /* Reserved for future bin. comp. */ } NyHeapDef; int gline_size(struct __pyx_obj_8printrun_11gcoder_line_GLine *gline) { int size = __pyx_type_8printrun_11gcoder_line_GLine.tp_basicsize; if (gline->_raw != NULL) size += strlen(gline->_raw) + 1; if (gline->_command != NULL) size += strlen(gline->_command) + 1; return size; } static NyHeapDef nysets_heapdefs[] = { {0, 0, (NyHeapDef_SizeGetter) gline_size}, }; /* nysets_heapdefs[0].type = &__pyx_type_8printrun_11gcoder_line_GLine; if (PyDict_SetItemString(__pyx_d, "_NyHeapDefs_", PyCObject_FromVoidPtrAndDesc(&nysets_heapdefs, "NyHeapDef[] v1.0", 0)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} */ Printrun-printrun-2.0.0rc5/printrun/gcview.py000077500000000000000000000470411325617007000213540ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import logging import wx from . import gcoder from .gl.panel import wxGLPanel from .gl.trackball import build_rotmatrix from .gl.libtatlin import actors from .injectgcode import injector, injector_edit from pyglet.gl import glPushMatrix, glPopMatrix, \ glTranslatef, glRotatef, glScalef, glMultMatrixd, \ glGetDoublev, GL_MODELVIEW_MATRIX, GLdouble from .gviz import GvizBaseFrame from .utils import imagefile, install_locale, get_home_pos install_locale('pronterface') def create_model(light): if light: return actors.GcodeModelLight() else: return actors.GcodeModel() def gcode_dims(g): return ((g.xmin, g.xmax, g.width), (g.ymin, g.ymax, g.depth), (g.zmin, g.zmax, g.height)) def set_model_colors(model, root): for field in dir(model): if field.startswith("color_"): root_fieldname = "gcview_" + field if hasattr(root, root_fieldname): setattr(model, field, getattr(root, root_fieldname)) def recreate_platform(self, build_dimensions, circular): self.platform = actors.Platform(build_dimensions, circular = circular) self.objects[0].model = self.platform wx.CallAfter(self.Refresh) def set_gcview_params(self, path_width, path_height): self.path_halfwidth = path_width / 2 self.path_halfheight = path_height / 2 has_changed = False for obj in self.objects[1:]: if isinstance(obj.model, actors.GcodeModel): obj.model.set_path_size(self.path_halfwidth, self.path_halfheight) has_changed = True return has_changed class GcodeViewPanel(wxGLPanel): def __init__(self, parent, id = wx.ID_ANY, build_dimensions = None, realparent = None, antialias_samples = 0): super(GcodeViewPanel, self).__init__(parent, id, wx.DefaultPosition, wx.DefaultSize, 0, antialias_samples = antialias_samples) self.canvas.Bind(wx.EVT_MOUSE_EVENTS, self.move) self.canvas.Bind(wx.EVT_LEFT_DCLICK, self.double) self.canvas.Bind(wx.EVT_KEY_DOWN, self.keypress) self.initialized = 0 self.canvas.Bind(wx.EVT_MOUSEWHEEL, self.wheel) self.parent = realparent if realparent else parent self.initpos = None if build_dimensions: self.build_dimensions = build_dimensions else: self.build_dimensions = [200, 200, 100, 0, 0, 0] self.dist = max(self.build_dimensions[0], self.build_dimensions[1]) self.basequat = [0, 0, 0, 1] self.mousepos = [0, 0] def inject(self): l = self.parent.model.num_layers_to_draw filtered = [k for k, v in self.parent.model.layer_idxs_map.items() if v == l] if filtered: injector(self.parent.model.gcode, l, filtered[0]) else: logging.error(_("Invalid layer for injection")) def editlayer(self): l = self.parent.model.num_layers_to_draw filtered = [k for k, v in self.parent.model.layer_idxs_map.items() if v == l] if filtered: injector_edit(self.parent.model.gcode, l, filtered[0]) else: logging.error(_("Invalid layer for edition")) def setlayercb(self, layer): pass def OnInitGL(self, *args, **kwargs): super(GcodeViewPanel, self).OnInitGL(*args, **kwargs) if hasattr(self.parent, "filenames") and self.parent.filenames: for filename in self.parent.filenames: self.parent.load_file(filename) self.parent.autoplate() if hasattr(self.parent, "loadcb"): self.parent.loadcb() self.parent.filenames = None def create_objects(self): '''create opengl objects when opengl is initialized''' for obj in self.parent.objects: if obj.model and obj.model.loaded and not obj.model.initialized: obj.model.init() def update_object_resize(self): '''called when the window recieves only if opengl is initialized''' pass def draw_objects(self): '''called in the middle of ondraw after the buffer has been cleared''' self.create_objects() glPushMatrix() # Rotate according to trackball glMultMatrixd(build_rotmatrix(self.basequat)) # Move origin to bottom left of platform platformx0 = -self.build_dimensions[3] - self.parent.platform.width / 2 platformy0 = -self.build_dimensions[4] - self.parent.platform.depth / 2 glTranslatef(platformx0, platformy0, 0) for obj in self.parent.objects: if not obj.model \ or not obj.model.loaded \ or not obj.model.initialized: continue glPushMatrix() glTranslatef(*(obj.offsets)) glRotatef(obj.rot, 0.0, 0.0, 1.0) glTranslatef(*(obj.centeroffset)) glScalef(*obj.scale) obj.model.display() glPopMatrix() glPopMatrix() # ========================================================================== # Utils # ========================================================================== def get_modelview_mat(self, local_transform): mvmat = (GLdouble * 16)() if local_transform: glPushMatrix() # Rotate according to trackball glMultMatrixd(build_rotmatrix(self.basequat)) # Move origin to bottom left of platform platformx0 = -self.build_dimensions[3] - self.parent.platform.width / 2 platformy0 = -self.build_dimensions[4] - self.parent.platform.depth / 2 glTranslatef(platformx0, platformy0, 0) glGetDoublev(GL_MODELVIEW_MATRIX, mvmat) glPopMatrix() else: glGetDoublev(GL_MODELVIEW_MATRIX, mvmat) return mvmat def double(self, event): if hasattr(self.parent, "clickcb") and self.parent.clickcb: self.parent.clickcb(event) def move(self, event): """react to mouse actions: no mouse: show red mousedrop LMB: rotate viewport RMB: move viewport """ if event.Entering(): self.canvas.SetFocus() event.Skip() return if event.Dragging() and event.LeftIsDown(): self.handle_rotation(event) elif event.Dragging() and event.RightIsDown(): self.handle_translation(event) elif event.LeftUp(): self.initpos = None elif event.RightUp(): self.initpos = None else: event.Skip() return event.Skip() wx.CallAfter(self.Refresh) def layerup(self): if not hasattr(self.parent, "model") or not self.parent.model: return max_layers = self.parent.model.max_layers current_layer = self.parent.model.num_layers_to_draw # accept going up to max_layers + 1 # max_layers means visualizing the last layer differently, # max_layers + 1 means visualizing all layers with the same color new_layer = min(max_layers + 1, current_layer + 1) self.parent.model.num_layers_to_draw = new_layer self.parent.setlayercb(new_layer) wx.CallAfter(self.Refresh) def layerdown(self): if not hasattr(self.parent, "model") or not self.parent.model: return current_layer = self.parent.model.num_layers_to_draw new_layer = max(1, current_layer - 1) self.parent.model.num_layers_to_draw = new_layer self.parent.setlayercb(new_layer) wx.CallAfter(self.Refresh) def handle_wheel(self, event): delta = event.GetWheelRotation() factor = 1.05 if event.ControlDown(): factor = 1.02 if hasattr(self.parent, "model") and event.ShiftDown(): if not self.parent.model: return count = 1 if not event.ControlDown() else 10 for i in range(count): if delta > 0: self.layerup() else: self.layerdown() return x, y = event.GetPosition() x, y, _ = self.mouse_to_3d(x, y) if delta > 0: self.zoom(factor, (x, y)) else: self.zoom(1 / factor, (x, y)) def wheel(self, event): """react to mouse wheel actions: without shift: set max layer with shift: zoom viewport """ self.handle_wheel(event) wx.CallAfter(self.Refresh) def fit(self): if not self.parent.model or not self.parent.model.loaded: return self.canvas.SetCurrent(self.context) dims = gcode_dims(self.parent.model.gcode) self.reset_mview(1.0) center_x = (dims[0][0] + dims[0][1]) / 2 center_y = (dims[1][0] + dims[1][1]) / 2 center_x = self.build_dimensions[0] / 2 - center_x center_y = self.build_dimensions[1] / 2 - center_y if self.orthographic: ratio = float(self.dist) / max(dims[0][2], dims[1][2]) glScalef(ratio, ratio, 1) glTranslatef(center_x, center_y, 0) wx.CallAfter(self.Refresh) def keypress(self, event): """gets keypress events and moves/rotates acive shape""" step = 1.1 if event.ControlDown(): step = 1.05 kup = [85, 315] # Up keys kdo = [68, 317] # Down Keys kzi = [wx.WXK_PAGEDOWN, 388, 316, 61] # Zoom In Keys kzo = [wx.WXK_PAGEUP, 390, 314, 45] # Zoom Out Keys kfit = [70] # Fit to print keys kshowcurrent = [67] # Show only current layer keys kreset = [82] # Reset keys key = event.GetKeyCode() if key in kup: self.layerup() if key in kdo: self.layerdown() x, y, _ = self.mouse_to_3d(self.width / 2, self.height / 2) if key in kzi: self.zoom_to_center(step) if key in kzo: self.zoom_to_center(1 / step) if key in kfit: self.fit() if key in kshowcurrent: if not self.parent.model or not self.parent.model.loaded: return self.parent.model.only_current = not self.parent.model.only_current wx.CallAfter(self.Refresh) if key in kreset: self.resetview() event.Skip() def resetview(self): self.canvas.SetCurrent(self.context) self.reset_mview(0.9) self.basequat = [0, 0, 0, 1] wx.CallAfter(self.Refresh) class GCObject: def __init__(self, model): self.offsets = [0, 0, 0] self.centeroffset = [0, 0, 0] self.rot = 0 self.curlayer = 0.0 self.scale = [1.0, 1.0, 1.0] self.model = model class GcodeViewLoader: path_halfwidth = 0.2 path_halfheight = 0.15 def addfile_perlayer(self, gcode = None, showall = False): self.model = create_model(self.root.settings.light3d if self.root else False) if isinstance(self.model, actors.GcodeModel): self.model.set_path_size(self.path_halfwidth, self.path_halfheight) self.objects[-1].model = self.model if self.root: set_model_colors(self.model, self.root) if gcode is not None: generator = self.model.load_data(gcode) generator_output = next(generator) while generator_output is not None: yield generator_output generator_output = next(generator) wx.CallAfter(self.Refresh) yield None def addfile(self, gcode = None, showall = False): generator = self.addfile_perlayer(gcode, showall) while next(generator) is not None: continue def set_gcview_params(self, path_width, path_height): return set_gcview_params(self, path_width, path_height) class GcodeViewMainWrapper(GcodeViewLoader): def __init__(self, parent, build_dimensions, root, circular, antialias_samples): self.root = root self.glpanel = GcodeViewPanel(parent, realparent = self, build_dimensions = build_dimensions, antialias_samples = antialias_samples) self.glpanel.SetMinSize((150, 150)) if self.root and hasattr(self.root, "gcview_color_background"): self.glpanel.color_background = self.root.gcview_color_background self.clickcb = None self.widget = self.glpanel self.refresh_timer = wx.CallLater(100, self.Refresh) self.p = self # Hack for backwards compatibility with gviz API self.platform = actors.Platform(build_dimensions, circular = circular) self.model = None self.objects = [GCObject(self.platform), GCObject(None)] def __getattr__(self, name): return getattr(self.glpanel, name) def set_current_gline(self, gline): if gline.is_move and gline.gcview_end_vertex is not None \ and self.model and self.model.loaded: self.model.printed_until = gline.gcview_end_vertex if not self.refresh_timer.IsRunning(): self.refresh_timer.Start() def recreate_platform(self, build_dimensions, circular): return recreate_platform(self, build_dimensions, circular) def addgcodehighlight(self, *a): pass def setlayer(self, layer): if layer in self.model.layer_idxs_map: viz_layer = self.model.layer_idxs_map[layer] self.parent.model.num_layers_to_draw = viz_layer wx.CallAfter(self.Refresh) def clear(self): self.model = None self.objects[-1].model = None wx.CallAfter(self.Refresh) class GcodeViewFrame(GvizBaseFrame, GcodeViewLoader): '''A simple class for using OpenGL with wxPython.''' def __init__(self, parent, ID, title, build_dimensions, objects = None, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, root = None, circular = False, antialias_samples = 0): GvizBaseFrame.__init__(self, parent, ID, title, pos, size, style) self.root = root panel, vbox = self.create_base_ui() self.refresh_timer = wx.CallLater(100, self.Refresh) self.p = self # Hack for backwards compatibility with gviz API self.clonefrom = objects self.platform = actors.Platform(build_dimensions, circular = circular) if objects: self.model = objects[1].model else: self.model = None self.objects = [GCObject(self.platform), GCObject(None)] fit_image = wx.Image(imagefile('fit.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap() self.toolbar.InsertTool(6, 8, " " + _("Fit to plate"), fit_image, shortHelp = _("Fit to plate [F]"), longHelp = '') self.toolbar.Realize() self.glpanel = GcodeViewPanel(panel, build_dimensions = build_dimensions, realparent = self, antialias_samples = antialias_samples) vbox.Add(self.glpanel, 1, flag = wx.EXPAND) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.zoom_to_center(1.2), id = 1) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.zoom_to_center(1 / 1.2), id = 2) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.layerup(), id = 3) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.layerdown(), id = 4) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.resetview(), id = 5) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.fit(), id = 8) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.inject(), id = 6) self.Bind(wx.EVT_TOOL, lambda x: self.glpanel.editlayer(), id = 7) def setlayercb(self, layer): self.layerslider.SetValue(layer) self.update_status("") def update_status(self, extra): layer = self.model.num_layers_to_draw filtered = [k for k, v in self.model.layer_idxs_map.items() if v == layer] if filtered: true_layer = filtered[0] z = self.model.gcode.all_layers[true_layer].z message = _("Layer %d -%s Z = %.03f mm") % (layer, extra, z) else: message = _("Entire object") wx.CallAfter(self.SetStatusText, message, 0) def process_slider(self, event): new_layer = self.layerslider.GetValue() new_layer = min(self.model.max_layers + 1, new_layer) new_layer = max(1, new_layer) self.model.num_layers_to_draw = new_layer self.update_status("") wx.CallAfter(self.Refresh) def set_current_gline(self, gline): if gline.is_move and gline.gcview_end_vertex is not None \ and self.model and self.model.loaded: self.model.printed_until = gline.gcview_end_vertex if not self.refresh_timer.IsRunning(): self.refresh_timer.Start() def recreate_platform(self, build_dimensions, circular): return recreate_platform(self, build_dimensions, circular) def addfile(self, gcode = None): if self.clonefrom: self.model = self.clonefrom[-1].model.copy() self.objects[-1].model = self.model else: GcodeViewLoader.addfile(self, gcode) self.layerslider.SetRange(1, self.model.max_layers + 1) self.layerslider.SetValue(self.model.max_layers + 1) wx.CallAfter(self.SetStatusText, _("Entire object"), 0) wx.CallAfter(self.Refresh) def clear(self): self.model = None self.objects[-1].model = None wx.CallAfter(self.Refresh) if __name__ == "__main__": import sys app = wx.App(redirect = False) build_dimensions = [200, 200, 100, 0, 0, 0] title = 'Gcode view, shift to move view, mousewheel to set layer' frame = GcodeViewFrame(None, wx.ID_ANY, title, size = (400, 400), build_dimensions = build_dimensions) gcode = gcoder.GCode(open(sys.argv[1]), get_home_pos(build_dimensions)) frame.addfile(gcode) first_move = None for i in range(len(gcode.lines)): if gcode.lines[i].is_move: first_move = gcode.lines[i] break last_move = None for i in range(len(gcode.lines) - 1, -1, -1): if gcode.lines[i].is_move: last_move = gcode.lines[i] break nsteps = 20 steptime = 500 lines = [first_move] + [gcode.lines[int(float(i) * (len(gcode.lines) - 1) / nsteps)] for i in range(1, nsteps)] + [last_move] current_line = 0 def setLine(): global current_line frame.set_current_gline(lines[current_line]) current_line = (current_line + 1) % len(lines) timer.Start() timer = wx.CallLater(steptime, setLine) timer.Start() frame.Show(True) app.MainLoop() app.Destroy() Printrun-printrun-2.0.0rc5/printrun/gl/000077500000000000000000000000001325617007000201075ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/gl/__init__.py000066400000000000000000000000001325617007000222060ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/gl/libtatlin/000077500000000000000000000000001325617007000220715ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/gl/libtatlin/__init__.py000066400000000000000000000000001325617007000241700ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/gl/libtatlin/actors.py000066400000000000000000001260451325617007000237460ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Guillaume Seguin # Copyright (C) 2011 Denis Kobozev # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import time import numpy import array import math import logging import threading from ctypes import sizeof from pyglet.gl import glPushMatrix, glPopMatrix, glTranslatef, \ glGenLists, glNewList, GL_COMPILE, glEndList, glCallList, \ GL_ELEMENT_ARRAY_BUFFER, GL_UNSIGNED_INT, GL_TRIANGLES, GL_LINE_LOOP, \ GL_ARRAY_BUFFER, GL_STATIC_DRAW, glColor4f, glVertex3f, \ glBegin, glEnd, GL_LINES, glEnable, glDisable, glGetFloatv, \ GL_LINE_SMOOTH, glLineWidth, GL_LINE_WIDTH, GLfloat, GL_FLOAT, GLuint, \ glVertexPointer, glColorPointer, glDrawArrays, glDrawRangeElements, \ glEnableClientState, glDisableClientState, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, \ GL_FRONT_AND_BACK, GL_FRONT, glMaterialfv, GL_SPECULAR, GL_EMISSION, \ glColorMaterial, GL_AMBIENT_AND_DIFFUSE, glMaterialf, GL_SHININESS, \ GL_NORMAL_ARRAY, glNormalPointer, GL_LIGHTING, glColor3f from pyglet.graphics.vertexbuffer import create_buffer, VertexBufferObject from printrun.utils import install_locale install_locale('pronterface') def vec(*args): return (GLfloat * len(args))(*args) def compile_display_list(func, *options): display_list = glGenLists(1) glNewList(display_list, GL_COMPILE) func(*options) glEndList() return display_list def numpy2vbo(nparray, target = GL_ARRAY_BUFFER, usage = GL_STATIC_DRAW, use_vbos = True): vbo = create_buffer(nparray.nbytes, target = target, usage = usage, vbo = use_vbos) vbo.bind() vbo.set_data(nparray.ctypes.data) return vbo def triangulate_rectangle(i1, i2, i3, i4): return [i1, i4, i3, i3, i2, i1] def triangulate_box(i1, i2, i3, i4, j1, j2, j3, j4): return [i1, i2, j2, j2, j1, i1, i2, i3, j3, j3, j2, i2, i3, i4, j4, j4, j3, i3, i4, i1, j1, j1, j4, i4] class BoundingBox: """ A rectangular box (cuboid) enclosing a 3D model, defined by lower and upper corners. """ def __init__(self, upper_corner, lower_corner): self.upper_corner = upper_corner self.lower_corner = lower_corner @property def width(self): width = abs(self.upper_corner[0] - self.lower_corner[0]) return round(width, 2) @property def depth(self): depth = abs(self.upper_corner[1] - self.lower_corner[1]) return round(depth, 2) @property def height(self): height = abs(self.upper_corner[2] - self.lower_corner[2]) return round(height, 2) class Platform: """ Platform on which models are placed. """ graduations_major = 10 def __init__(self, build_dimensions, light = False, circular = False): self.light = light self.circular = circular self.width = build_dimensions[0] self.depth = build_dimensions[1] self.height = build_dimensions[2] self.xoffset = build_dimensions[3] self.yoffset = build_dimensions[4] self.zoffset = build_dimensions[5] self.color_grads_minor = (0xaf / 255, 0xdf / 255, 0x5f / 255, 0.1) self.color_grads_interm = (0xaf / 255, 0xdf / 255, 0x5f / 255, 0.2) self.color_grads_major = (0xaf / 255, 0xdf / 255, 0x5f / 255, 0.33) self.initialized = False self.loaded = True def init(self): self.display_list = compile_display_list(self.draw) self.initialized = True def draw(self): glPushMatrix() glTranslatef(self.xoffset, self.yoffset, self.zoffset) def color(i): if i % self.graduations_major == 0: glColor4f(*self.color_grads_major) elif i % (self.graduations_major // 2) == 0: glColor4f(*self.color_grads_interm) else: if self.light: return False glColor4f(*self.color_grads_minor) return True # draw the grid glBegin(GL_LINES) if self.circular: # Draw a circular grid for i in range(0, int(math.ceil(self.width + 1))): angle = math.asin(2 * float(i) / self.width - 1) x = (math.cos(angle) + 1) * self.depth / 2 if color(i): glVertex3f(float(i), self.depth - x, 0.0) glVertex3f(float(i), x, 0.0) for i in range(0, int(math.ceil(self.depth + 1))): angle = math.acos(2 * float(i) / self.depth - 1) x = (math.sin(angle) + 1) * self.width / 2 if color(i): glVertex3f(self.width - x, float(i), 0.0) glVertex3f(x, float(i), 0.0) else: # Draw a rectangular grid for i in range(0, int(math.ceil(self.width + 1))): if color(i): glVertex3f(float(i), 0.0, 0.0) glVertex3f(float(i), self.depth, 0.0) for i in range(0, int(math.ceil(self.depth + 1))): if color(i): glVertex3f(0, float(i), 0.0) glVertex3f(self.width, float(i), 0.0) glEnd() if self.circular: glBegin(GL_LINE_LOOP) for i in range(0, 360): angle = math.radians(i) glVertex3f((math.cos(angle) + 1) * self.width / 2, (math.sin(angle) + 1) * self.depth / 2, 0.0) glEnd() glPopMatrix() def display(self, mode_2d=False): # FIXME: using the list sometimes results in graphical corruptions # glCallList(self.display_list) self.draw() class PrintHead: def __init__(self): self.color = (43. / 255, 0., 175. / 255, 1.0) self.scale = 5 self.height = 5 self.initialized = False self.loaded = True def init(self): self.display_list = compile_display_list(self.draw) self.initialized = True def draw(self): glPushMatrix() glBegin(GL_LINES) glColor4f(*self.color) for di in [-1, 1]: for dj in [-1, 1]: glVertex3f(0, 0, 0) glVertex3f(self.scale * di, self.scale * dj, self.height) glEnd() glPopMatrix() def display(self, mode_2d=False): glEnable(GL_LINE_SMOOTH) orig_linewidth = (GLfloat)() glGetFloatv(GL_LINE_WIDTH, orig_linewidth) glLineWidth(3.0) glCallList(self.display_list) glLineWidth(orig_linewidth) glDisable(GL_LINE_SMOOTH) class Model: """ Parent class for models that provides common functionality. """ AXIS_X = (1, 0, 0) AXIS_Y = (0, 1, 0) AXIS_Z = (0, 0, 1) letter_axis_map = { 'x': AXIS_X, 'y': AXIS_Y, 'z': AXIS_Z, } axis_letter_map = dict([(v, k) for k, v in letter_axis_map.items()]) lock = None def __init__(self, offset_x=0, offset_y=0): self.offset_x = offset_x self.offset_y = offset_y self.lock = threading.Lock() self.init_model_attributes() def init_model_attributes(self): """ Set/reset saved properties. """ self.invalidate_bounding_box() self.modified = False def invalidate_bounding_box(self): self._bounding_box = None @property def bounding_box(self): """ Get a bounding box for the model. """ if self._bounding_box is None: self._bounding_box = self._calculate_bounding_box() return self._bounding_box def _calculate_bounding_box(self): """ Calculate an axis-aligned box enclosing the model. """ # swap rows and columns in our vertex arrays so that we can do max and # min on axis 1 xyz_rows = self.vertices.reshape(-1, order='F').reshape(3, -1) lower_corner = xyz_rows.min(1) upper_corner = xyz_rows.max(1) box = BoundingBox(upper_corner, lower_corner) return box @property def width(self): return self.bounding_box.width @property def depth(self): return self.bounding_box.depth @property def height(self): return self.bounding_box.height def movement_color(self, move): """ Return the color to use for particular type of movement. """ if move.extruding: if move.current_tool == 0: return self.color_tool0 elif move.current_tool == 1: return self.color_tool1 elif move.current_tool == 2: return self.color_tool2 elif move.current_tool == 3: return self.color_tool3 else: return self.color_tool4 return self.color_travel def movement_angle(src, dst, precision=0): x = dst[0] - src[0] y = dst[1] - src[1] angle = math.degrees(math.atan2(y, -x)) # negate x for clockwise rotation angle return round(angle, precision) def get_next_move(gcode, layer_idx, gline_idx): gline_idx += 1 while layer_idx < len(gcode.all_layers): layer = gcode.all_layers[layer_idx] while gline_idx < len(layer): gline = layer[gline_idx] if gline.is_move: return gline gline_idx += 1 layer_idx += 1 gline_idx = 0 return None class GcodeModel(Model): """ Model for displaying Gcode data. """ color_travel = (0.6, 0.6, 0.6, 0.6) color_tool0 = (1.0, 0.0, 0.0, 1.0) color_tool1 = (0.67, 0.05, 0.9, 1.0) color_tool2 = (1.0, 0.8, 0., 1.0) color_tool3 = (1.0, 0., 0.62, 1.0) color_tool4 = (0., 1.0, 0.58, 1.0) color_printed = (0.2, 0.75, 0, 1.0) color_current = (0, 0.9, 1.0, 1.0) color_current_printed = (0.1, 0.4, 0, 1.0) display_travels = True buffers_created = False use_vbos = True loaded = False fully_loaded = False gcode = None path_halfwidth = 0.2 path_halfheight = 0.2 def set_path_size(self, path_halfwidth, path_halfheight): with self.lock: self.path_halfwidth = path_halfwidth self.path_halfheight = path_halfheight def load_data(self, model_data, callback=None): t_start = time.time() self.gcode = model_data self.count_travel_indices = count_travel_indices = [0] self.count_print_indices = count_print_indices = [0] self.count_print_vertices = count_print_vertices = [0] # Some trivial computations, but that's mostly for documentation :) # Not like 10 multiplications are going to cost much time vs what's # about to happen :) # Max number of values which can be generated per gline # to store coordinates/colors/normals. # Nicely enough we have 3 per kind of thing for all kinds. coordspervertex = 3 verticesperline = 8 coordsperline = coordspervertex * verticesperline coords_count = lambda nlines: nlines * coordsperline travelverticesperline = 2 travelcoordsperline = coordspervertex * travelverticesperline travel_coords_count = lambda nlines: nlines * travelcoordsperline trianglesperface = 2 facesperbox = 4 trianglesperbox = trianglesperface * facesperbox verticespertriangle = 3 indicesperbox = verticespertriangle * trianglesperbox boxperline = 2 indicesperline = indicesperbox * boxperline indices_count = lambda nlines: nlines * indicesperline nlines = len(model_data) ntravelcoords = travel_coords_count(nlines) ncoords = coords_count(nlines) nindices = indices_count(nlines) travel_vertices = self.travels = numpy.zeros(ntravelcoords, dtype = GLfloat) travel_vertex_k = 0 vertices = self.vertices = numpy.zeros(ncoords, dtype = GLfloat) vertex_k = 0 colors = self.colors = numpy.zeros(ncoords, dtype = GLfloat) color_k = 0 normals = self.normals = numpy.zeros(ncoords, dtype = GLfloat) normal_k = 0 indices = self.indices = numpy.zeros(nindices, dtype = GLuint) index_k = 0 self.layer_idxs_map = {} self.layer_stops = [0] prev_is_extruding = False prev_move_normal_x = None prev_move_normal_y = None prev_move_angle = None prev_pos = (0, 0, 0) layer_idx = 0 self.printed_until = 0 self.only_current = False twopi = 2 * math.pi processed_lines = 0 while layer_idx < len(model_data.all_layers): with self.lock: nlines = len(model_data) remaining_lines = nlines - processed_lines # Only reallocate memory which might be needed, not memory # for everything ntravelcoords = coords_count(remaining_lines) + travel_vertex_k ncoords = coords_count(remaining_lines) + vertex_k nindices = indices_count(remaining_lines) + index_k if ncoords > vertices.size: self.travels.resize(ntravelcoords, refcheck = False) self.vertices.resize(ncoords, refcheck = False) self.colors.resize(ncoords, refcheck = False) self.normals.resize(ncoords, refcheck = False) self.indices.resize(nindices, refcheck = False) layer = model_data.all_layers[layer_idx] has_movement = False for gline_idx, gline in enumerate(layer): if not gline.is_move: continue if gline.x is None and gline.y is None and gline.z is None: continue has_movement = True current_pos = (gline.current_x, gline.current_y, gline.current_z) if not gline.extruding: travel_vertices[travel_vertex_k] = prev_pos[0] travel_vertices[travel_vertex_k + 1] = prev_pos[1] travel_vertices[travel_vertex_k + 2] = prev_pos[2] travel_vertices[travel_vertex_k + 3] = current_pos[0] travel_vertices[travel_vertex_k + 4] = current_pos[1] travel_vertices[travel_vertex_k + 5] = current_pos[2] travel_vertex_k += 6 prev_is_extruding = False else: gline_color = self.movement_color(gline) next_move = get_next_move(model_data, layer_idx, gline_idx) next_is_extruding = (next_move.extruding if next_move is not None else False) delta_x = current_pos[0] - prev_pos[0] delta_y = current_pos[1] - prev_pos[1] norm = delta_x * delta_x + delta_y * delta_y if norm == 0: # Don't draw anything if this move is Z+E only continue norm = math.sqrt(norm) move_normal_x = - delta_y / norm move_normal_y = delta_x / norm move_angle = math.atan2(delta_y, delta_x) # FIXME: compute these dynamically path_halfwidth = self.path_halfwidth * 1.2 path_halfheight = self.path_halfheight * 1.2 new_indices = [] new_vertices = [] new_normals = [] if prev_is_extruding: # Store previous vertices indices prev_id = vertex_k // 3 - 4 avg_move_normal_x = (prev_move_normal_x + move_normal_x) / 2 avg_move_normal_y = (prev_move_normal_y + move_normal_y) / 2 norm = avg_move_normal_x * avg_move_normal_x + avg_move_normal_y * avg_move_normal_y if norm == 0: avg_move_normal_x = move_normal_x avg_move_normal_y = move_normal_y else: norm = math.sqrt(norm) avg_move_normal_x /= norm avg_move_normal_y /= norm delta_angle = move_angle - prev_move_angle delta_angle = (delta_angle + twopi) % twopi fact = abs(math.cos(delta_angle / 2)) # If move is turning too much, avoid creating a big peak # by adding an intermediate box if fact < 0.5: # FIXME: It looks like there's some heavy code duplication here... hw = path_halfwidth p1x = prev_pos[0] - hw * prev_move_normal_x p2x = prev_pos[0] + hw * prev_move_normal_x p1y = prev_pos[1] - hw * prev_move_normal_y p2y = prev_pos[1] + hw * prev_move_normal_y new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] + path_halfheight)) new_vertices.extend((p1x, p1y, prev_pos[2])) new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] - path_halfheight)) new_vertices.extend((p2x, p2y, prev_pos[2])) new_normals.extend((0, 0, 1)) new_normals.extend((-prev_move_normal_x, -prev_move_normal_y, 0)) new_normals.extend((0, 0, -1)) new_normals.extend((prev_move_normal_x, prev_move_normal_y, 0)) first = vertex_k // 3 # Link to previous new_indices += triangulate_box(prev_id, prev_id + 1, prev_id + 2, prev_id + 3, first, first + 1, first + 2, first + 3) p1x = prev_pos[0] - hw * move_normal_x p2x = prev_pos[0] + hw * move_normal_x p1y = prev_pos[1] - hw * move_normal_y p2y = prev_pos[1] + hw * move_normal_y new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] + path_halfheight)) new_vertices.extend((p1x, p1y, prev_pos[2])) new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] - path_halfheight)) new_vertices.extend((p2x, p2y, prev_pos[2])) new_normals.extend((0, 0, 1)) new_normals.extend((-move_normal_x, -move_normal_y, 0)) new_normals.extend((0, 0, -1)) new_normals.extend((move_normal_x, move_normal_y, 0)) prev_id += 4 first += 4 # Link to previous new_indices += triangulate_box(prev_id, prev_id + 1, prev_id + 2, prev_id + 3, first, first + 1, first + 2, first + 3) else: hw = path_halfwidth / fact # Compute vertices p1x = prev_pos[0] - hw * avg_move_normal_x p2x = prev_pos[0] + hw * avg_move_normal_x p1y = prev_pos[1] - hw * avg_move_normal_y p2y = prev_pos[1] + hw * avg_move_normal_y new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] + path_halfheight)) new_vertices.extend((p1x, p1y, prev_pos[2])) new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] - path_halfheight)) new_vertices.extend((p2x, p2y, prev_pos[2])) new_normals.extend((0, 0, 1)) new_normals.extend((-avg_move_normal_x, -avg_move_normal_y, 0)) new_normals.extend((0, 0, -1)) new_normals.extend((avg_move_normal_x, avg_move_normal_y, 0)) first = vertex_k // 3 # Link to previous new_indices += triangulate_box(prev_id, prev_id + 1, prev_id + 2, prev_id + 3, first, first + 1, first + 2, first + 3) else: # Compute vertices normal to the current move and cap it p1x = prev_pos[0] - path_halfwidth * move_normal_x p2x = prev_pos[0] + path_halfwidth * move_normal_x p1y = prev_pos[1] - path_halfwidth * move_normal_y p2y = prev_pos[1] + path_halfwidth * move_normal_y new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] + path_halfheight)) new_vertices.extend((p1x, p1y, prev_pos[2])) new_vertices.extend((prev_pos[0], prev_pos[1], prev_pos[2] - path_halfheight)) new_vertices.extend((p2x, p2y, prev_pos[2])) new_normals.extend((0, 0, 1)) new_normals.extend((-move_normal_x, -move_normal_y, 0)) new_normals.extend((0, 0, -1)) new_normals.extend((move_normal_x, move_normal_y, 0)) first = vertex_k // 3 new_indices = triangulate_rectangle(first, first + 1, first + 2, first + 3) if not next_is_extruding: # Compute caps and link everything p1x = current_pos[0] - path_halfwidth * move_normal_x p2x = current_pos[0] + path_halfwidth * move_normal_x p1y = current_pos[1] - path_halfwidth * move_normal_y p2y = current_pos[1] + path_halfwidth * move_normal_y new_vertices.extend((current_pos[0], current_pos[1], current_pos[2] + path_halfheight)) new_vertices.extend((p1x, p1y, current_pos[2])) new_vertices.extend((current_pos[0], current_pos[1], current_pos[2] - path_halfheight)) new_vertices.extend((p2x, p2y, current_pos[2])) new_normals.extend((0, 0, 1)) new_normals.extend((-move_normal_x, -move_normal_y, 0)) new_normals.extend((0, 0, -1)) new_normals.extend((move_normal_x, move_normal_y, 0)) end_first = vertex_k // 3 + len(new_vertices) // 3 - 4 new_indices += triangulate_rectangle(end_first + 3, end_first + 2, end_first + 1, end_first) new_indices += triangulate_box(first, first + 1, first + 2, first + 3, end_first, end_first + 1, end_first + 2, end_first + 3) for new_i, item in enumerate(new_indices): indices[index_k + new_i] = item index_k += len(new_indices) for new_i, item in enumerate(new_vertices): vertices[vertex_k + new_i] = item vertex_k += len(new_vertices) for new_i, item in enumerate(new_normals): normals[normal_k + new_i] = item normal_k += len(new_normals) new_colors = list(gline_color)[:-1] * (len(new_vertices) // 3) for new_i, item in enumerate(new_colors): colors[color_k + new_i] = item color_k += len(new_colors) prev_is_extruding = True prev_move_normal_x = move_normal_x prev_move_normal_y = move_normal_y prev_move_angle = move_angle prev_pos = current_pos count_travel_indices.append(travel_vertex_k // 3) count_print_indices.append(index_k) count_print_vertices.append(vertex_k // 3) gline.gcview_end_vertex = len(count_print_indices) - 1 if has_movement: self.layer_stops.append(len(count_print_indices) - 1) self.layer_idxs_map[layer_idx] = len(self.layer_stops) - 1 self.max_layers = len(self.layer_stops) - 1 self.num_layers_to_draw = self.max_layers + 1 self.initialized = False self.loaded = True processed_lines += len(layer) if callback: callback(layer_idx + 1) yield layer_idx layer_idx += 1 with self.lock: self.dims = ((model_data.xmin, model_data.xmax, model_data.width), (model_data.ymin, model_data.ymax, model_data.depth), (model_data.zmin, model_data.zmax, model_data.height)) self.travels.resize(travel_vertex_k, refcheck = False) self.vertices.resize(vertex_k, refcheck = False) self.colors.resize(color_k, refcheck = False) self.normals.resize(normal_k, refcheck = False) self.indices.resize(index_k, refcheck = False) self.layer_stops = array.array('L', self.layer_stops) self.count_travel_indices = array.array('L', count_travel_indices) self.count_print_indices = array.array('L', count_print_indices) self.count_print_vertices = array.array('L', count_print_vertices) self.max_layers = len(self.layer_stops) - 1 self.num_layers_to_draw = self.max_layers + 1 self.loaded = True self.initialized = False self.loaded = True self.fully_loaded = True t_end = time.time() logging.debug(_('Initialized 3D visualization in %.2f seconds') % (t_end - t_start)) logging.debug(_('Vertex count: %d') % ((len(self.vertices) + len(self.travels)) // 3)) yield None def copy(self): copy = GcodeModel() for var in ["vertices", "colors", "travels", "indices", "normals", "max_layers", "num_layers_to_draw", "printed_until", "layer_stops", "dims", "only_current", "layer_idxs_map", "count_travel_indices", "count_print_indices", "count_print_vertices", "path_halfwidth", "path_halfheight", "gcode"]: setattr(copy, var, getattr(self, var)) copy.loaded = True copy.fully_loaded = True copy.initialized = False return copy # ------------------------------------------------------------------------ # DRAWING # ------------------------------------------------------------------------ def init(self): with self.lock: self.layers_loaded = self.max_layers self.initialized = True if self.buffers_created: self.travel_buffer.delete() self.index_buffer.delete() self.vertex_buffer.delete() self.vertex_color_buffer.delete() self.vertex_normal_buffer.delete() self.travel_buffer = numpy2vbo(self.travels, use_vbos = self.use_vbos) self.index_buffer = numpy2vbo(self.indices, use_vbos = self.use_vbos, target = GL_ELEMENT_ARRAY_BUFFER) self.vertex_buffer = numpy2vbo(self.vertices, use_vbos = self.use_vbos) self.vertex_color_buffer = numpy2vbo(self.colors, use_vbos = self.use_vbos) self.vertex_normal_buffer = numpy2vbo(self.normals, use_vbos = self.use_vbos) if self.fully_loaded: # Delete numpy arrays after creating VBOs after full load self.travels = None self.indices = None self.vertices = None self.colors = None self.normals = None self.buffers_created = True def display(self, mode_2d=False): with self.lock: glPushMatrix() glTranslatef(self.offset_x, self.offset_y, 0) glEnableClientState(GL_VERTEX_ARRAY) has_vbo = isinstance(self.vertex_buffer, VertexBufferObject) if self.display_travels: self._display_travels(has_vbo) glEnable(GL_LIGHTING) glEnableClientState(GL_NORMAL_ARRAY) glEnableClientState(GL_COLOR_ARRAY) glMaterialfv(GL_FRONT, GL_SPECULAR, vec(1, 1, 1, 1)) glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, vec(0, 0, 0, 0)) glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50) glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE) self._display_movements(has_vbo) glDisable(GL_LIGHTING) glDisableClientState(GL_COLOR_ARRAY) glDisableClientState(GL_VERTEX_ARRAY) glDisableClientState(GL_NORMAL_ARRAY) glPopMatrix() def _display_travels(self, has_vbo): self.travel_buffer.bind() glVertexPointer(3, GL_FLOAT, 0, self.travel_buffer.ptr) # Prevent race condition by using the number of currently loaded layers max_layers = self.layers_loaded # TODO: show current layer travels in a different color end = self.layer_stops[min(self.num_layers_to_draw, max_layers)] end_index = self.count_travel_indices[end] glColor4f(*self.color_travel) if self.only_current: if self.num_layers_to_draw < max_layers: end_prev_layer = self.layer_stops[self.num_layers_to_draw - 1] start_index = self.count_travel_indices[end_prev_layer + 1] glDrawArrays(GL_LINES, start_index, end_index - start_index + 1) else: glDrawArrays(GL_LINES, 0, end_index) self.travel_buffer.unbind() def _draw_elements(self, start, end, draw_type = GL_TRIANGLES): # Don't attempt printing empty layer if self.count_print_indices[end] == self.count_print_indices[start - 1]: return glDrawRangeElements(draw_type, self.count_print_vertices[start - 1], self.count_print_vertices[end] - 1, self.count_print_indices[end] - self.count_print_indices[start - 1], GL_UNSIGNED_INT, sizeof(GLuint) * self.count_print_indices[start - 1]) def _display_movements(self, has_vbo): self.vertex_buffer.bind() glVertexPointer(3, GL_FLOAT, 0, self.vertex_buffer.ptr) self.vertex_color_buffer.bind() glColorPointer(3, GL_FLOAT, 0, self.vertex_color_buffer.ptr) self.vertex_normal_buffer.bind() glNormalPointer(GL_FLOAT, 0, self.vertex_normal_buffer.ptr) self.index_buffer.bind() # Prevent race condition by using the number of currently loaded layers max_layers = self.layers_loaded start = 1 layer_selected = self.num_layers_to_draw <= max_layers if layer_selected: end_prev_layer = self.layer_stops[self.num_layers_to_draw - 1] else: end_prev_layer = 0 end = self.layer_stops[min(self.num_layers_to_draw, max_layers)] glDisableClientState(GL_COLOR_ARRAY) glColor3f(*self.color_printed[:-1]) # Draw printed stuff until end or end_prev_layer cur_end = min(self.printed_until, end) if not self.only_current: if 1 <= end_prev_layer <= cur_end: self._draw_elements(1, end_prev_layer) elif cur_end >= 1: self._draw_elements(1, cur_end) glEnableClientState(GL_COLOR_ARRAY) # Draw nonprinted stuff until end_prev_layer start = max(cur_end, 1) if end_prev_layer >= start: if not self.only_current: self._draw_elements(start, end_prev_layer) cur_end = end_prev_layer # Draw current layer if layer_selected: glDisableClientState(GL_COLOR_ARRAY) glColor3f(*self.color_current_printed[:-1]) if cur_end > end_prev_layer: self._draw_elements(end_prev_layer + 1, cur_end) glColor3f(*self.color_current[:-1]) if end > cur_end: self._draw_elements(cur_end + 1, end) glEnableClientState(GL_COLOR_ARRAY) # Draw non printed stuff until end (if not ending at a given layer) start = max(self.printed_until, 1) if not layer_selected and end >= start: self._draw_elements(start, end) self.index_buffer.unbind() self.vertex_buffer.unbind() self.vertex_color_buffer.unbind() self.vertex_normal_buffer.unbind() class GcodeModelLight(Model): """ Model for displaying Gcode data. """ color_travel = (0.6, 0.6, 0.6, 0.6) color_tool0 = (1.0, 0.0, 0.0, 0.6) color_tool1 = (0.67, 0.05, 0.9, 0.6) color_tool2 = (1.0, 0.8, 0., 0.6) color_tool3 = (1.0, 0., 0.62, 0.6) color_tool4 = (0., 1.0, 0.58, 0.6) color_printed = (0.2, 0.75, 0, 0.6) color_current = (0, 0.9, 1.0, 0.8) color_current_printed = (0.1, 0.4, 0, 0.8) buffers_created = False use_vbos = True loaded = False fully_loaded = False gcode = None def load_data(self, model_data, callback=None): t_start = time.time() self.gcode = model_data self.layer_idxs_map = {} self.layer_stops = [0] prev_pos = (0, 0, 0) layer_idx = 0 nlines = len(model_data) vertices = self.vertices = numpy.zeros(nlines * 6, dtype = GLfloat) vertex_k = 0 colors = self.colors = numpy.zeros(nlines * 8, dtype = GLfloat) color_k = 0 self.printed_until = -1 self.only_current = False while layer_idx < len(model_data.all_layers): with self.lock: nlines = len(model_data) if nlines * 6 != vertices.size: self.vertices.resize(nlines * 6, refcheck = False) self.colors.resize(nlines * 8, refcheck = False) layer = model_data.all_layers[layer_idx] has_movement = False for gline in layer: if not gline.is_move: continue if gline.x is None and gline.y is None and gline.z is None: continue has_movement = True vertices[vertex_k] = prev_pos[0] vertices[vertex_k + 1] = prev_pos[1] vertices[vertex_k + 2] = prev_pos[2] current_pos = (gline.current_x, gline.current_y, gline.current_z) vertices[vertex_k + 3] = current_pos[0] vertices[vertex_k + 4] = current_pos[1] vertices[vertex_k + 5] = current_pos[2] vertex_k += 6 vertex_color = self.movement_color(gline) colors[color_k] = vertex_color[0] colors[color_k + 1] = vertex_color[1] colors[color_k + 2] = vertex_color[2] colors[color_k + 3] = vertex_color[3] colors[color_k + 4] = vertex_color[0] colors[color_k + 5] = vertex_color[1] colors[color_k + 6] = vertex_color[2] colors[color_k + 7] = vertex_color[3] color_k += 8 prev_pos = current_pos gline.gcview_end_vertex = vertex_k // 3 if has_movement: self.layer_stops.append(vertex_k // 3) self.layer_idxs_map[layer_idx] = len(self.layer_stops) - 1 self.max_layers = len(self.layer_stops) - 1 self.num_layers_to_draw = self.max_layers + 1 self.initialized = False self.loaded = True if callback: callback(layer_idx + 1) yield layer_idx layer_idx += 1 with self.lock: self.dims = ((model_data.xmin, model_data.xmax, model_data.width), (model_data.ymin, model_data.ymax, model_data.depth), (model_data.zmin, model_data.zmax, model_data.height)) self.vertices.resize(vertex_k, refcheck = False) self.colors.resize(color_k, refcheck = False) self.max_layers = len(self.layer_stops) - 1 self.num_layers_to_draw = self.max_layers + 1 self.initialized = False self.loaded = True self.fully_loaded = True t_end = time.time() logging.debug(_('Initialized 3D visualization in %.2f seconds') % (t_end - t_start)) logging.debug(_('Vertex count: %d') % (len(self.vertices) // 3)) yield None def copy(self): copy = GcodeModelLight() for var in ["vertices", "colors", "max_layers", "num_layers_to_draw", "printed_until", "layer_stops", "dims", "only_current", "layer_idxs_map", "gcode"]: setattr(copy, var, getattr(self, var)) copy.loaded = True copy.fully_loaded = True copy.initialized = False return copy # ------------------------------------------------------------------------ # DRAWING # ------------------------------------------------------------------------ def init(self): with self.lock: self.layers_loaded = self.max_layers self.initialized = True if self.buffers_created: self.vertex_buffer.delete() self.vertex_color_buffer.delete() self.vertex_buffer = numpy2vbo(self.vertices, use_vbos = self.use_vbos) self.vertex_color_buffer = numpy2vbo(self.colors, use_vbos = self.use_vbos) # each pair of vertices shares the color if self.fully_loaded: # Delete numpy arrays after creating VBOs after full load self.vertices = None self.colors = None self.buffers_created = True def display(self, mode_2d=False): with self.lock: glPushMatrix() glTranslatef(self.offset_x, self.offset_y, 0) glEnableClientState(GL_VERTEX_ARRAY) glEnableClientState(GL_COLOR_ARRAY) self._display_movements(mode_2d) glDisableClientState(GL_COLOR_ARRAY) glDisableClientState(GL_VERTEX_ARRAY) glPopMatrix() def _display_movements(self, mode_2d=False): self.vertex_buffer.bind() has_vbo = isinstance(self.vertex_buffer, VertexBufferObject) if has_vbo: glVertexPointer(3, GL_FLOAT, 0, None) else: glVertexPointer(3, GL_FLOAT, 0, self.vertex_buffer.ptr) self.vertex_color_buffer.bind() if has_vbo: glColorPointer(4, GL_FLOAT, 0, None) else: glColorPointer(4, GL_FLOAT, 0, self.vertex_color_buffer.ptr) # Prevent race condition by using the number of currently loaded layers max_layers = self.layers_loaded start = 0 if self.num_layers_to_draw <= max_layers: end_prev_layer = self.layer_stops[self.num_layers_to_draw - 1] else: end_prev_layer = -1 end = self.layer_stops[min(self.num_layers_to_draw, max_layers)] glDisableClientState(GL_COLOR_ARRAY) glColor4f(*self.color_printed) # Draw printed stuff until end or end_prev_layer cur_end = min(self.printed_until, end) if not self.only_current: if 0 <= end_prev_layer <= cur_end: glDrawArrays(GL_LINES, start, end_prev_layer) elif cur_end >= 0: glDrawArrays(GL_LINES, start, cur_end) glEnableClientState(GL_COLOR_ARRAY) # Draw nonprinted stuff until end_prev_layer start = max(cur_end, 0) if end_prev_layer >= start: if not self.only_current: glDrawArrays(GL_LINES, start, end_prev_layer - start) cur_end = end_prev_layer # Draw current layer if end_prev_layer >= 0: glDisableClientState(GL_COLOR_ARRAY) # Backup & increase line width orig_linewidth = (GLfloat)() glGetFloatv(GL_LINE_WIDTH, orig_linewidth) glLineWidth(2.0) glColor4f(*self.color_current_printed) if cur_end > end_prev_layer: glDrawArrays(GL_LINES, end_prev_layer, cur_end - end_prev_layer) glColor4f(*self.color_current) if end > cur_end: glDrawArrays(GL_LINES, cur_end, end - cur_end) # Restore line width glLineWidth(orig_linewidth) glEnableClientState(GL_COLOR_ARRAY) # Draw non printed stuff until end (if not ending at a given layer) start = max(self.printed_until, 0) end = end - start if end_prev_layer < 0 and end > 0 and not self.only_current: glDrawArrays(GL_LINES, start, end) self.vertex_buffer.unbind() self.vertex_color_buffer.unbind() Printrun-printrun-2.0.0rc5/printrun/gl/panel.py000066400000000000000000000333401325617007000215630ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . from threading import Lock import logging import traceback import numpy import numpy.linalg import wx from wx import glcanvas import pyglet pyglet.options['debug_gl'] = True from pyglet.gl import glEnable, glDisable, GL_LIGHTING, glLightfv, \ GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, GL_POSITION, GL_DIFFUSE, \ GL_AMBIENT, GL_SPECULAR, GL_COLOR_MATERIAL, \ glShadeModel, GL_SMOOTH, GL_NORMALIZE, \ GL_BLEND, glBlendFunc, glClear, glClearColor, \ glClearDepth, GL_COLOR_BUFFER_BIT, GL_CULL_FACE, \ GL_DEPTH_BUFFER_BIT, glDepthFunc, GL_DEPTH_TEST, \ GLdouble, glGetDoublev, glGetIntegerv, GLint, \ GL_LEQUAL, glLoadIdentity, glMatrixMode, GL_MODELVIEW, \ GL_MODELVIEW_MATRIX, GL_ONE_MINUS_SRC_ALPHA, glOrtho, \ GL_PROJECTION, GL_PROJECTION_MATRIX, glScalef, \ GL_SRC_ALPHA, glTranslatef, gluPerspective, gluUnProject, \ glViewport, GL_VIEWPORT from pyglet import gl from .trackball import trackball, mulquat, axis_to_quat from .libtatlin.actors import vec class wxGLPanel(wx.Panel): '''A simple class for using OpenGL with wxPython.''' orbit_control=True orthographic = True color_background = (0.98, 0.98, 0.78, 1) do_lights = True def __init__(self, parent, id, pos = wx.DefaultPosition, size = wx.DefaultSize, style = 0, antialias_samples = 0): # Forcing a no full repaint to stop flickering style = style | wx.NO_FULL_REPAINT_ON_RESIZE super(wxGLPanel, self).__init__(parent, id, pos, size, style) self.GLinitialized = False self.mview_initialized = False attribList = (glcanvas.WX_GL_RGBA, # RGBA glcanvas.WX_GL_DOUBLEBUFFER, # Double Buffered glcanvas.WX_GL_DEPTH_SIZE, 24) # 24 bit if antialias_samples > 0 and hasattr(glcanvas, "WX_GL_SAMPLE_BUFFERS"): attribList += (glcanvas.WX_GL_SAMPLE_BUFFERS, 1, glcanvas.WX_GL_SAMPLES, antialias_samples) self.width = None self.height = None self.sizer = wx.BoxSizer(wx.HORIZONTAL) self.canvas = glcanvas.GLCanvas(self, attribList = attribList) self.context = glcanvas.GLContext(self.canvas) self.sizer.Add(self.canvas, 1, wx.EXPAND) self.SetSizerAndFit(self.sizer) self.rot_lock = Lock() self.basequat = [0, 0, 0, 1] self.zoom_factor = 1.0 self.angle_z = 0 self.angle_x = 0 self.gl_broken = False # bind events self.canvas.Bind(wx.EVT_ERASE_BACKGROUND, self.processEraseBackgroundEvent) self.canvas.Bind(wx.EVT_SIZE, self.processSizeEvent) self.canvas.Bind(wx.EVT_PAINT, self.processPaintEvent) def processEraseBackgroundEvent(self, event): '''Process the erase background event.''' pass # Do nothing, to avoid flashing on MSWin def processSizeEvent(self, event): '''Process the resize event.''' if self.IsFrozen(): event.Skip() return if self.canvas.IsShownOnScreen(): # Make sure the frame is shown before calling SetCurrent. self.canvas.SetCurrent(self.context) self.OnReshape() self.Refresh(False) timer = wx.CallLater(100, self.Refresh) timer.Start() event.Skip() def processPaintEvent(self, event): '''Process the drawing event.''' self.canvas.SetCurrent(self.context) if not self.gl_broken: try: self.OnInitGL() self.OnDraw() except pyglet.gl.lib.GLException: self.gl_broken = True logging.error(_("OpenGL failed, disabling it:") + "\n" + traceback.format_exc()) event.Skip() def Destroy(self): # clean up the pyglet OpenGL context self.pygletcontext.destroy() # call the super method super(wxGLPanel, self).Destroy() # ========================================================================== # GLFrame OpenGL Event Handlers # ========================================================================== def OnInitGL(self, call_reshape = True): '''Initialize OpenGL for use in the window.''' if self.GLinitialized: return self.GLinitialized = True # create a pyglet context for this panel self.pygletcontext = gl.Context(gl.current_context) self.pygletcontext.canvas = self self.pygletcontext.set_current() # normal gl init glClearColor(*self.color_background) glClearDepth(1.0) # set depth value to 1 glDepthFunc(GL_LEQUAL) glEnable(GL_COLOR_MATERIAL) glEnable(GL_DEPTH_TEST) glEnable(GL_CULL_FACE) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) if call_reshape: self.OnReshape() def OnReshape(self): """Reshape the OpenGL viewport based on the size of the window""" size = self.GetClientSize() oldwidth, oldheight = self.width, self.height width, height = size.width, size.height if width < 1 or height < 1: return self.width = max(float(width), 1.0) self.height = max(float(height), 1.0) self.OnInitGL(call_reshape = False) glViewport(0, 0, width, height) glMatrixMode(GL_PROJECTION) glLoadIdentity() if self.orthographic: glOrtho(-width / 2, width / 2, -height / 2, height / 2, -5 * self.dist, 5 * self.dist) else: gluPerspective(60., float(width) / height, 10.0, 3 * self.dist) glTranslatef(0, 0, -self.dist) # Move back glMatrixMode(GL_MODELVIEW) if not self.mview_initialized: self.reset_mview(0.9) self.mview_initialized = True elif oldwidth is not None and oldheight is not None: wratio = self.width / oldwidth hratio = self.height / oldheight factor = min(wratio * self.zoomed_width, hratio * self.zoomed_height) x, y, _ = self.mouse_to_3d(self.width / 2, self.height / 2) self.zoom(factor, (x, y)) self.zoomed_width *= wratio / factor self.zoomed_height *= hratio / factor # Wrap text to the width of the window if self.GLinitialized: self.pygletcontext.set_current() self.update_object_resize() def setup_lights(self): if not self.do_lights: return glEnable(GL_LIGHTING) glDisable(GL_LIGHT0) glLightfv(GL_LIGHT0, GL_AMBIENT, vec(0.4, 0.4, 0.4, 1.0)) glLightfv(GL_LIGHT0, GL_SPECULAR, vec(0, 0, 0, 0)) glLightfv(GL_LIGHT0, GL_DIFFUSE, vec(0, 0, 0, 0)) glEnable(GL_LIGHT1) glLightfv(GL_LIGHT1, GL_AMBIENT, vec(0, 0, 0, 1.0)) glLightfv(GL_LIGHT1, GL_SPECULAR, vec(0.6, 0.6, 0.6, 1.0)) glLightfv(GL_LIGHT2, GL_DIFFUSE, vec(0.8, 0.8, 0.8, 1)) glLightfv(GL_LIGHT1, GL_POSITION, vec(1, 2, 3, 0)) glEnable(GL_LIGHT2) glLightfv(GL_LIGHT2, GL_AMBIENT, vec(0, 0, 0, 1.0)) glLightfv(GL_LIGHT2, GL_SPECULAR, vec(0.6, 0.6, 0.6, 1.0)) glLightfv(GL_LIGHT2, GL_DIFFUSE, vec(0.8, 0.8, 0.8, 1)) glLightfv(GL_LIGHT2, GL_POSITION, vec(-1, -1, 3, 0)) glEnable(GL_NORMALIZE) glShadeModel(GL_SMOOTH) def reset_mview(self, factor): glMatrixMode(GL_MODELVIEW) glLoadIdentity() self.setup_lights() if self.orthographic: wratio = self.width / self.dist hratio = self.height / self.dist minratio = float(min(wratio, hratio)) self.zoom_factor = 1.0 self.zoomed_width = wratio / minratio self.zoomed_height = hratio / minratio glScalef(factor * minratio, factor * minratio, 1) def OnDraw(self, *args, **kwargs): """Draw the window.""" self.pygletcontext.set_current() glClearColor(*self.color_background) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) self.draw_objects() self.canvas.SwapBuffers() # ========================================================================== # To be implemented by a sub class # ========================================================================== def create_objects(self): '''create opengl objects when opengl is initialized''' pass def update_object_resize(self): '''called when the window recieves only if opengl is initialized''' pass def draw_objects(self): '''called in the middle of ondraw after the buffer has been cleared''' pass # ========================================================================== # Utils # ========================================================================== def get_modelview_mat(self, local_transform): mvmat = (GLdouble * 16)() glGetDoublev(GL_MODELVIEW_MATRIX, mvmat) return mvmat def mouse_to_3d(self, x, y, z = 1.0, local_transform = False): x = float(x) y = self.height - float(y) # The following could work if we were not initially scaling to zoom on # the bed # if self.orthographic: # return (x - self.width / 2, y - self.height / 2, 0) pmat = (GLdouble * 16)() mvmat = self.get_modelview_mat(local_transform) viewport = (GLint * 4)() px = (GLdouble)() py = (GLdouble)() pz = (GLdouble)() glGetIntegerv(GL_VIEWPORT, viewport) glGetDoublev(GL_PROJECTION_MATRIX, pmat) glGetDoublev(GL_MODELVIEW_MATRIX, mvmat) gluUnProject(x, y, z, mvmat, pmat, viewport, px, py, pz) return (px.value, py.value, pz.value) def mouse_to_ray(self, x, y, local_transform = False): x = float(x) y = self.height - float(y) pmat = (GLdouble * 16)() mvmat = (GLdouble * 16)() viewport = (GLint * 4)() px = (GLdouble)() py = (GLdouble)() pz = (GLdouble)() glGetIntegerv(GL_VIEWPORT, viewport) glGetDoublev(GL_PROJECTION_MATRIX, pmat) mvmat = self.get_modelview_mat(local_transform) gluUnProject(x, y, 1, mvmat, pmat, viewport, px, py, pz) ray_far = (px.value, py.value, pz.value) gluUnProject(x, y, 0., mvmat, pmat, viewport, px, py, pz) ray_near = (px.value, py.value, pz.value) return ray_near, ray_far def mouse_to_plane(self, x, y, plane_normal, plane_offset, local_transform = False): # Ray/plane intersection ray_near, ray_far = self.mouse_to_ray(x, y, local_transform) ray_near = numpy.array(ray_near) ray_far = numpy.array(ray_far) ray_dir = ray_far - ray_near ray_dir = ray_dir / numpy.linalg.norm(ray_dir) plane_normal = numpy.array(plane_normal) q = ray_dir.dot(plane_normal) if q == 0: return None t = - (ray_near.dot(plane_normal) + plane_offset) / q if t < 0: return None return ray_near + t * ray_dir def zoom(self, factor, to = None): glMatrixMode(GL_MODELVIEW) if to: delta_x = to[0] delta_y = to[1] glTranslatef(delta_x, delta_y, 0) glScalef(factor, factor, 1) self.zoom_factor *= factor if to: glTranslatef(-delta_x, -delta_y, 0) wx.CallAfter(self.Refresh) def zoom_to_center(self, factor): self.canvas.SetCurrent(self.context) x, y, _ = self.mouse_to_3d(self.width / 2, self.height / 2) self.zoom(factor, (x, y)) def orbit(self, p1x, p1y, p2x, p2y): rz = p2x-p1x; self.angle_z-=rz rotz = axis_to_quat([0.0,0.0,1.0],self.angle_z) rx = p2y-p1y; self.angle_x+=rx rota = axis_to_quat([1.0,0.0,0.0],self.angle_x) return mulquat(rotz,rota) def handle_rotation(self, event): if self.initpos is None: self.initpos = event.GetPosition() else: p1 = self.initpos p2 = event.GetPosition() sz = self.GetClientSize() p1x = float(p1[0]) / (sz[0] / 2) - 1 p1y = 1 - float(p1[1]) / (sz[1] / 2) p2x = float(p2[0]) / (sz[0] / 2) - 1 p2y = 1 - float(p2[1]) / (sz[1] / 2) quat = trackball(p1x, p1y, p2x, p2y, self.dist / 250.0) with self.rot_lock: if self.orbit_control: self.basequat = self.orbit(p1x, p1y, p2x, p2y) else: self.basequat = mulquat(self.basequat, quat) self.initpos = p2 def handle_translation(self, event): if self.initpos is None: self.initpos = event.GetPosition() else: p1 = self.initpos p2 = event.GetPosition() if self.orthographic: x1, y1, _ = self.mouse_to_3d(p1[0], p1[1]) x2, y2, _ = self.mouse_to_3d(p2[0], p2[1]) glTranslatef(x2 - x1, y2 - y1, 0) else: glTranslatef(p2[0] - p1[0], -(p2[1] - p1[1]), 0) self.initpos = p2 Printrun-printrun-2.0.0rc5/printrun/gl/trackball.py000066400000000000000000000052441325617007000224250ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import math from pyglet.gl import GLdouble def cross(v1, v2): return [v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], v1[0] * v2[1] - v1[1] * v2[0]] def trackball(p1x, p1y, p2x, p2y, r): TRACKBALLSIZE = r if p1x == p2x and p1y == p2y: return [0.0, 0.0, 0.0, 1.0] p1 = [p1x, p1y, project_to_sphere(TRACKBALLSIZE, p1x, p1y)] p2 = [p2x, p2y, project_to_sphere(TRACKBALLSIZE, p2x, p2y)] a = cross(p2, p1) d = map(lambda x, y: x - y, p1, p2) t = math.sqrt(sum(x * x for x in d)) / (2.0 * TRACKBALLSIZE) if t > 1.0: t = 1.0 if t < -1.0: t = -1.0 phi = 2.0 * math.asin(t) return axis_to_quat(a, phi) def axis_to_quat(a, phi): lena = math.sqrt(sum(x * x for x in a)) q = [x * (1 / lena) for x in a] q = [x * math.sin(phi / 2.0) for x in q] q.append(math.cos(phi / 2.0)) return q def build_rotmatrix(q): m = (GLdouble * 16)() m[0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]) m[1] = 2.0 * (q[0] * q[1] - q[2] * q[3]) m[2] = 2.0 * (q[2] * q[0] + q[1] * q[3]) m[3] = 0.0 m[4] = 2.0 * (q[0] * q[1] + q[2] * q[3]) m[5] = 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]) m[6] = 2.0 * (q[1] * q[2] - q[0] * q[3]) m[7] = 0.0 m[8] = 2.0 * (q[2] * q[0] - q[1] * q[3]) m[9] = 2.0 * (q[1] * q[2] + q[0] * q[3]) m[10] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]) m[11] = 0.0 m[12] = 0.0 m[13] = 0.0 m[14] = 0.0 m[15] = 1.0 return m def project_to_sphere(r, x, y): d = math.sqrt(x * x + y * y) if (d < r * 0.70710678118654752440): return math.sqrt(r * r - d * d) else: t = r / 1.41421356237309504880 return t * t / d def mulquat(q1, rq): return [q1[3] * rq[0] + q1[0] * rq[3] + q1[1] * rq[2] - q1[2] * rq[1], q1[3] * rq[1] + q1[1] * rq[3] + q1[2] * rq[0] - q1[0] * rq[2], q1[3] * rq[2] + q1[2] * rq[3] + q1[0] * rq[1] - q1[1] * rq[0], q1[3] * rq[3] - q1[0] * rq[0] - q1[1] * rq[1] - q1[2] * rq[2]] Printrun-printrun-2.0.0rc5/printrun/gui/000077500000000000000000000000001325617007000202715ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/gui/__init__.py000066400000000000000000000326671325617007000224200ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import logging try: import wx if wx.VERSION < (4,): raise ImportError() except: logging.error(_("WX >= 4 is not installed. This program requires WX >= 4 to run.")) raise from printrun.utils import install_locale install_locale('pronterface') from .controls import ControlsSizer, add_extra_controls from .viz import VizPane from .log import LogPane from .toolbar import MainToolbar class ToggleablePane(wx.BoxSizer): def __init__(self, root, label, parentpanel, parentsizers): super(ToggleablePane, self).__init__(wx.HORIZONTAL) if not parentpanel: parentpanel = root.panel self.root = root self.visible = True self.parentpanel = parentpanel self.parentsizers = parentsizers self.panepanel = root.newPanel(parentpanel) self.button = wx.Button(parentpanel, -1, label, size = (35, 18), style = wx.BU_EXACTFIT) self.button.Bind(wx.EVT_BUTTON, self.toggle) def toggle(self, event): if self.visible: self.Hide(self.panepanel) self.on_hide() else: self.Show(self.panepanel) self.on_show() self.visible = not self.visible self.button.SetLabel(">" if self.button.GetLabel() == "<" else "<") class LeftPaneToggleable(ToggleablePane): def __init__(self, root, parentpanel, parentsizers): super(LeftPaneToggleable, self).__init__(root, "<", parentpanel, parentsizers) self.Add(self.panepanel, 0, wx.EXPAND) self.Add(self.button, 0) def set_sizer(self, sizer): self.panepanel.SetSizer(sizer) def on_show(self): for sizer in self.parentsizers: sizer.Layout() def on_hide(self): for sizer in self.parentsizers: # Expand right splitterwindow if isinstance(sizer, wx.SplitterWindow): if sizer.shrinked: button_width = self.button.GetSize()[0] sizer.SetSashPosition(sizer.GetSize()[0] - button_width) else: sizer.Layout() class LogPaneToggleable(ToggleablePane): def __init__(self, root, parentpanel, parentsizers): super(LogPaneToggleable, self).__init__(root, ">", parentpanel, parentsizers) self.Add(self.button, 0) pane = LogPane(root, self.panepanel) self.panepanel.SetSizer(pane) self.Add(self.panepanel, 1, wx.EXPAND) self.splitter = self.parentpanel.GetParent() def on_show(self): self.splitter.shrinked = False self.splitter.SetSashPosition(self.splitter.GetSize()[0] - self.orig_width) self.splitter.SetMinimumPaneSize(self.orig_min_size) self.splitter.SetSashGravity(self.orig_gravity) if hasattr(self.splitter, "SetSashSize"): self.splitter.SetSashSize(self.orig_sash_size) if hasattr(self.splitter, "SetSashInvisible"): self.splitter.SetSashInvisible(False) for sizer in self.parentsizers: sizer.Layout() def on_hide(self): self.splitter.shrinked = True self.orig_width = self.splitter.GetSize()[0] - self.splitter.GetSashPosition() button_width = self.button.GetSize()[0] self.orig_min_size = self.splitter.GetMinimumPaneSize() self.orig_gravity = self.splitter.GetSashGravity() self.splitter.SetMinimumPaneSize(button_width) self.splitter.SetSashGravity(1) self.splitter.SetSashPosition(self.splitter.GetSize()[0] - button_width) if hasattr(self.splitter, "SetSashSize"): self.orig_sash_size = self.splitter.GetSashSize() self.splitter.SetSashSize(0) if hasattr(self.splitter, "SetSashInvisible"): self.splitter.SetSashInvisible(True) for sizer in self.parentsizers: sizer.Layout() class MainWindow(wx.Frame): def __init__(self, *args, **kwargs): super(MainWindow, self).__init__(*args, **kwargs) # this list will contain all controls that should be only enabled # when we're connected to a printer self.panel = wx.Panel(self, -1) self.reset_ui() self.statefulControls = [] def reset_ui(self): self.panels = [] self.printerControls = [] def newPanel(self, parent, add_to_list = True): panel = wx.Panel(parent) self.registerPanel(panel, add_to_list) return panel def registerPanel(self, panel, add_to_list = True): panel.SetBackgroundColour(self.bgcolor) if add_to_list: self.panels.append(panel) def createTabbedGui(self): self.notesizer = wx.BoxSizer(wx.VERTICAL) self.notebook = wx.Notebook(self.panel) self.notebook.SetBackgroundColour(self.bgcolor) page1panel = self.newPanel(self.notebook) page2panel = self.newPanel(self.notebook) self.mainsizer_page1 = wx.BoxSizer(wx.VERTICAL) page1panel1 = self.newPanel(page1panel) page1panel2 = self.newPanel(page1panel) self.toolbarsizer = MainToolbar(self, page1panel1, use_wrapsizer = True) page1panel1.SetSizer(self.toolbarsizer) self.mainsizer_page1.Add(page1panel1, 0, wx.EXPAND) self.lowersizer = wx.BoxSizer(wx.HORIZONTAL) page1panel2.SetSizer(self.lowersizer) leftsizer = wx.BoxSizer(wx.VERTICAL) controls_sizer = ControlsSizer(self, page1panel2, True) leftsizer.Add(controls_sizer, 1, wx.ALIGN_CENTER) rightsizer = wx.BoxSizer(wx.VERTICAL) extracontrols = wx.GridBagSizer() add_extra_controls(extracontrols, self, page1panel2, controls_sizer.extra_buttons) rightsizer.AddStretchSpacer() rightsizer.Add(extracontrols, 0, wx.ALIGN_CENTER) self.lowersizer.Add(leftsizer, 0, wx.ALIGN_CENTER | wx.RIGHT, border = 10) self.lowersizer.Add(rightsizer, 1, wx.ALIGN_CENTER) self.mainsizer_page1.Add(page1panel2, 1) self.mainsizer = wx.BoxSizer(wx.HORIZONTAL) self.splitterwindow = wx.SplitterWindow(page2panel, style = wx.SP_3D) page2sizer1 = wx.BoxSizer(wx.HORIZONTAL) page2panel1 = self.newPanel(self.splitterwindow) page2sizer2 = wx.BoxSizer(wx.HORIZONTAL) page2panel2 = self.newPanel(self.splitterwindow) vizpane = VizPane(self, page2panel1) page2sizer1.Add(vizpane, 1, wx.EXPAND) page2sizer2.Add(LogPane(self, page2panel2), 1, wx.EXPAND) page2panel1.SetSizer(page2sizer1) page2panel2.SetSizer(page2sizer2) self.splitterwindow.SetMinimumPaneSize(1) self.splitterwindow.SetSashGravity(0.5) self.splitterwindow.SplitVertically(page2panel1, page2panel2, self.settings.last_sash_position) self.mainsizer.Add(self.splitterwindow, 1, wx.EXPAND) page1panel.SetSizer(self.mainsizer_page1) page2panel.SetSizer(self.mainsizer) self.notesizer.Add(self.notebook, 1, wx.EXPAND) self.notebook.AddPage(page1panel, _("Commands")) self.notebook.AddPage(page2panel, _("Status")) if self.settings.uimode == _("Tabbed with platers"): from printrun.stlplater import StlPlaterPanel from printrun.gcodeplater import GcodePlaterPanel page3panel = StlPlaterPanel(parent = self.notebook, callback = self.platecb, build_dimensions = self.build_dimensions_list, circular_platform = self.settings.circular_bed, simarrange_path = self.settings.simarrange_path, antialias_samples = int(self.settings.antialias3dsamples)) page4panel = GcodePlaterPanel(parent = self.notebook, callback = self.platecb, build_dimensions = self.build_dimensions_list, circular_platform = self.settings.circular_bed, antialias_samples = int(self.settings.antialias3dsamples)) self.registerPanel(page3panel) self.registerPanel(page4panel) self.notebook.AddPage(page3panel, _("Plater")) self.notebook.AddPage(page4panel, _("G-Code Plater")) self.panel.SetSizer(self.notesizer) self.panel.Bind(wx.EVT_MOUSE_EVENTS, self.editbutton) # Custom buttons self.cbuttonssizer = wx.WrapSizer(wx.HORIZONTAL) self.centerpanel = self.newPanel(page1panel2) self.centerpanel.SetSizer(self.cbuttonssizer) rightsizer.Add(self.centerpanel, 0, wx.ALIGN_CENTER) rightsizer.AddStretchSpacer() self.panel.SetSizerAndFit(self.notesizer) self.cbuttons_reload() minsize = self.lowersizer.GetMinSize() # lower pane minsize[1] = self.notebook.GetSize()[1] self.SetMinSize(self.ClientToWindowSize(minsize)) # client to window self.Fit() def createGui(self, compact = False, mini = False): self.mainsizer = wx.BoxSizer(wx.VERTICAL) self.lowersizer = wx.BoxSizer(wx.HORIZONTAL) upperpanel = self.newPanel(self.panel, False) self.toolbarsizer = MainToolbar(self, upperpanel) lowerpanel = self.newPanel(self.panel) upperpanel.SetSizer(self.toolbarsizer) lowerpanel.SetSizer(self.lowersizer) leftpanel = self.newPanel(lowerpanel) left_pane = LeftPaneToggleable(self, leftpanel, [self.lowersizer]) leftpanel.SetSizer(left_pane) left_real_panel = left_pane.panepanel controls_panel = self.newPanel(left_real_panel) controls_sizer = ControlsSizer(self, controls_panel, mini_mode = mini) controls_panel.SetSizer(controls_sizer) left_sizer = wx.BoxSizer(wx.VERTICAL) left_sizer.Add(controls_panel, 1, wx.EXPAND) left_pane.set_sizer(left_sizer) self.lowersizer.Add(leftpanel, 0, wx.EXPAND) if not compact: # Use a splitterwindow to group viz and log rightpanel = self.newPanel(lowerpanel) rightsizer = wx.BoxSizer(wx.VERTICAL) rightpanel.SetSizer(rightsizer) self.splitterwindow = wx.SplitterWindow(rightpanel, style = wx.SP_3D) self.splitterwindow.SetMinimumPaneSize(150) self.splitterwindow.SetSashGravity(0.8) rightsizer.Add(self.splitterwindow, 1, wx.EXPAND) vizpanel = self.newPanel(self.splitterwindow) logpanel = self.newPanel(self.splitterwindow) self.splitterwindow.SplitVertically(vizpanel, logpanel, self.settings.last_sash_position) self.splitterwindow.shrinked = False else: vizpanel = self.newPanel(lowerpanel) logpanel = self.newPanel(left_real_panel) viz_pane = VizPane(self, vizpanel) # Custom buttons self.cbuttonssizer = wx.WrapSizer(wx.HORIZONTAL) self.centerpanel = self.newPanel(vizpanel) self.centerpanel.SetSizer(self.cbuttonssizer) viz_pane.Add(self.centerpanel, 0, flag = wx.ALIGN_CENTER) vizpanel.SetSizer(viz_pane) if compact: log_pane = LogPane(self, logpanel) else: log_pane = LogPaneToggleable(self, logpanel, [self.lowersizer]) left_pane.parentsizers.append(self.splitterwindow) logpanel.SetSizer(log_pane) if not compact: self.lowersizer.Add(rightpanel, 1, wx.EXPAND) else: left_sizer.Add(logpanel, 1, wx.EXPAND) self.lowersizer.Add(vizpanel, 1, wx.EXPAND) self.mainsizer.Add(upperpanel, 0, wx.EXPAND) self.mainsizer.Add(lowerpanel, 1, wx.EXPAND) self.panel.SetSizer(self.mainsizer) self.panel.Bind(wx.EVT_MOUSE_EVENTS, self.editbutton) self.mainsizer.Layout() # This prevents resizing below a reasonnable value # We sum the lowersizer (left pane / viz / log) min size # the toolbar height and the statusbar/menubar sizes minsize = [0, 0] minsize[0] = self.lowersizer.GetMinSize()[0] # lower pane minsize[1] = max(viz_pane.GetMinSize()[1], controls_sizer.GetMinSize()[1]) minsize[1] += self.toolbarsizer.GetMinSize()[1] # toolbar height displaysize = wx.DisplaySize() minsize[0] = min(minsize[0], displaysize[0]) minsize[1] = min(minsize[1], displaysize[1]) self.SetMinSize(self.ClientToWindowSize(minsize)) # client to window self.cbuttons_reload() def gui_set_connected(self): self.xyb.enable() self.zb.enable() for control in self.printerControls: control.Enable() def gui_set_disconnected(self): self.printbtn.Disable() self.pausebtn.Disable() self.recoverbtn.Disable() for control in self.printerControls: control.Disable() self.xyb.disable() self.zb.disable() Printrun-printrun-2.0.0rc5/printrun/gui/bufferedcanvas.py000066400000000000000000000063141325617007000236250ustar00rootroot00000000000000""" BufferedCanvas -- flicker-free canvas widget Copyright (C) 2005, 2006 Daniel Keep, 2011 Duane Johnson To use this widget, just override or replace the draw method. This will be called whenever the widget size changes, or when the update method is explicitly called. Please submit any improvements/bugfixes/ideas to the following url: http://wiki.wxpython.org/index.cgi/BufferedCanvas 2006-04-29: Added bugfix for a crash on Mac provided by Marc Jans. """ # Hint: try removing '.sp4msux0rz' __author__ = 'Daniel Keep ' __license__ = """ This file is part of the Printrun suite. Printrun 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. Printrun is distributed in the hope that it will 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 Printrun. If not, see . """ __all__ = ['BufferedCanvas'] import wx class BufferedCanvas(wx.Panel): """ Implements a flicker-free canvas widget. Standard usage is to subclass this class, and override the draw method. The draw method is passed a device context, which should be used to do your drawing. If you want to force a redraw (for whatever reason), you should call the update method. This is because the draw method is never called as a result of an EVT_PAINT event. """ # These are our two buffers. Just be aware that when the buffers # are flipped, the REFERENCES are swapped. So I wouldn't want to # try holding onto explicit references to one or the other ;) buffer = None backbuffer = None def __init__(self, parent, ID=-1, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.NO_FULL_REPAINT_ON_RESIZE | wx.WANTS_CHARS): wx.Panel.__init__(self, parent, ID, pos, size, style) # Bind events self.Bind(wx.EVT_PAINT, self.onPaint) # Disable background erasing (flicker-licious) def disable_event(*pargs, **kwargs): pass # the sauce, please self.Bind(wx.EVT_ERASE_BACKGROUND, disable_event) # # General methods # def draw(self, dc, w, h): """ Stub: called when the canvas needs to be re-drawn. """ pass def update(self): """ Causes the canvas to be updated. """ self.Refresh() def getWidthHeight(self): width, height = self.GetClientSize() if width == 0: width = 1 if height == 0: height = 1 return (width, height) # # Event handlers # def onPaint(self, event): # Blit the front buffer to the screen w, h = self.GetClientSize() if not w or not h: return else: dc = wx.BufferedPaintDC(self) self.draw(dc, w, h) Printrun-printrun-2.0.0rc5/printrun/gui/controls.py000066400000000000000000000522011325617007000225060ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx from .xybuttons import XYButtons, XYButtonsMini from .zbuttons import ZButtons, ZButtonsMini from .graph import Graph from .widgets import TempGauge from wx.lib.agw.floatspin import FloatSpin from .utils import make_button, make_custom_button class XYZControlsSizer(wx.GridBagSizer): def __init__(self, root, parentpanel = None): super(XYZControlsSizer, self).__init__() if not parentpanel: parentpanel = root.panel root.xyb = XYButtons(parentpanel, root.moveXY, root.homeButtonClicked, root.spacebarAction, root.bgcolor, zcallback=root.moveZ) self.Add(root.xyb, pos = (0, 1), flag = wx.ALIGN_CENTER) root.zb = ZButtons(parentpanel, root.moveZ, root.bgcolor) self.Add(root.zb, pos = (0, 2), flag = wx.ALIGN_CENTER) wx.CallAfter(root.xyb.SetFocus) def add_extra_controls(self, root, parentpanel, extra_buttons = None, mini_mode = False): standalone_mode = extra_buttons is not None base_line = 1 if standalone_mode else 2 if standalone_mode: gauges_base_line = base_line + 10 elif mini_mode and root.display_graph: gauges_base_line = base_line + 7 else: gauges_base_line = base_line + 6 tempdisp_line = gauges_base_line + (2 if root.display_gauges else 0) if mini_mode and root.display_graph: e_base_line = base_line + 3 else: e_base_line = base_line + 2 pos_mapping = { "htemp_label": (base_line + 0, 0), "htemp_off": (base_line + 0, 2), "htemp_val": (base_line + 0, 3), "htemp_set": (base_line + 0, 4), "btemp_label": (base_line + 1, 0), "btemp_off": (base_line + 1, 2), "btemp_val": (base_line + 1, 3), "btemp_set": (base_line + 1, 4), "ebuttons": (e_base_line + 0, 0), "esettings": (e_base_line + 1, 0), "speedcontrol": (e_base_line + 2, 0), "flowcontrol": (e_base_line + 3, 0), "htemp_gauge": (gauges_base_line + 0, 0), "btemp_gauge": (gauges_base_line + 1, 0), "tempdisp": (tempdisp_line, 0), "extrude": (3, 0), "reverse": (3, 2), } span_mapping = { "htemp_label": (1, 2), "htemp_off": (1, 1), "htemp_val": (1, 1), "htemp_set": (1, 1 if root.display_graph else 2), "btemp_label": (1, 2), "btemp_off": (1, 1), "btemp_val": (1, 1), "btemp_set": (1, 1 if root.display_graph else 2), "ebuttons": (1, 5 if root.display_graph else 6), "esettings": (1, 5 if root.display_graph else 6), "speedcontrol": (1, 5 if root.display_graph else 6), "flowcontrol": (1, 5 if root.display_graph else 6), "htemp_gauge": (1, 5 if mini_mode else 6), "btemp_gauge": (1, 5 if mini_mode else 6), "tempdisp": (1, 5 if mini_mode else 6), "extrude": (1, 2), "reverse": (1, 3), } if standalone_mode: pos_mapping["tempgraph"] = (base_line + 6, 0) span_mapping["tempgraph"] = (3, 2) elif mini_mode: pos_mapping["tempgraph"] = (base_line + 2, 0) span_mapping["tempgraph"] = (1, 5) else: pos_mapping["tempgraph"] = (base_line + 0, 5) span_mapping["tempgraph"] = (5, 1) if mini_mode: pos_mapping["etool_label"] = (0, 0) pos_mapping["etool_val"] = (0, 1) pos_mapping["edist_label"] = (0, 2) pos_mapping["edist_val"] = (0, 3) pos_mapping["edist_unit"] = (0, 4) else: pos_mapping["edist_label"] = (0, 0) pos_mapping["edist_val"] = (1, 0) pos_mapping["edist_unit"] = (1, 1) pos_mapping["efeed_label"] = (0, 2) pos_mapping["efeed_val"] = (1, 2) pos_mapping["efeed_unit"] = (1, 3) def add(name, widget, *args, **kwargs): kwargs["pos"] = pos_mapping[name] if name in span_mapping: kwargs["span"] = span_mapping[name] if "container" in kwargs: container = kwargs["container"] del kwargs["container"] else: container = self container.Add(widget, *args, **kwargs) # Hotend & bed temperatures # # Hotend temp add("htemp_label", wx.StaticText(parentpanel, -1, _("Heat:")), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) htemp_choices = [root.temps[i] + " (" + i + ")" for i in sorted(root.temps.keys(), key = lambda x:root.temps[x])] root.settoff = make_button(parentpanel, _("Off"), lambda e: root.do_settemp("off"), _("Switch Hotend Off"), size = (38, -1), style = wx.BU_EXACTFIT) root.printerControls.append(root.settoff) add("htemp_off", root.settoff) if root.settings.last_temperature not in map(float, root.temps.values()): htemp_choices = [str(root.settings.last_temperature)] + htemp_choices root.htemp = wx.ComboBox(parentpanel, -1, choices = htemp_choices, style = wx.CB_DROPDOWN, size = (115, -1)) root.htemp.SetToolTip(wx.ToolTip(_("Select Temperature for Hotend"))) root.htemp.Bind(wx.EVT_COMBOBOX, root.htemp_change) add("htemp_val", root.htemp) root.settbtn = make_button(parentpanel, _("Set"), root.do_settemp, _("Switch Hotend On"), size = (38, -1), style = wx.BU_EXACTFIT) root.printerControls.append(root.settbtn) add("htemp_set", root.settbtn, flag = wx.EXPAND) # Bed temp add("btemp_label", wx.StaticText(parentpanel, -1, _("Bed:")), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) btemp_choices = [root.bedtemps[i] + " (" + i + ")" for i in sorted(root.bedtemps.keys(), key = lambda x:root.temps[x])] root.setboff = make_button(parentpanel, _("Off"), lambda e: root.do_bedtemp("off"), _("Switch Heated Bed Off"), size = (38, -1), style = wx.BU_EXACTFIT) root.printerControls.append(root.setboff) add("btemp_off", root.setboff) if root.settings.last_bed_temperature not in map(float, root.bedtemps.values()): btemp_choices = [str(root.settings.last_bed_temperature)] + btemp_choices root.btemp = wx.ComboBox(parentpanel, -1, choices = btemp_choices, style = wx.CB_DROPDOWN, size = (115, -1)) root.btemp.SetToolTip(wx.ToolTip(_("Select Temperature for Heated Bed"))) root.btemp.Bind(wx.EVT_COMBOBOX, root.btemp_change) add("btemp_val", root.btemp) root.setbbtn = make_button(parentpanel, _("Set"), root.do_bedtemp, _("Switch Heated Bed On"), size = (38, -1), style = wx.BU_EXACTFIT) root.printerControls.append(root.setbbtn) add("btemp_set", root.setbbtn, flag = wx.EXPAND) root.btemp.SetValue(str(root.settings.last_bed_temperature)) root.htemp.SetValue(str(root.settings.last_temperature)) # added for an error where only the bed would get (pla) or (abs). # This ensures, if last temp is a default pla or abs, it will be marked so. # if it is not, then a (user) remark is added. This denotes a manual entry for i in btemp_choices: if i.split()[0] == str(root.settings.last_bed_temperature).split('.')[0] or i.split()[0] == str(root.settings.last_bed_temperature): root.btemp.SetValue(i) for i in htemp_choices: if i.split()[0] == str(root.settings.last_temperature).split('.')[0] or i.split()[0] == str(root.settings.last_temperature): root.htemp.SetValue(i) if '(' not in root.btemp.Value: root.btemp.SetValue(root.btemp.Value + ' (user)') if '(' not in root.htemp.Value: root.htemp.SetValue(root.htemp.Value + ' (user)') # Speed control # speedpanel = root.newPanel(parentpanel) speedsizer = wx.BoxSizer(wx.HORIZONTAL) speedsizer.Add(wx.StaticText(speedpanel, -1, _("Print speed:")), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) root.speed_slider = wx.Slider(speedpanel, -1, 100, 1, 300) speedsizer.Add(root.speed_slider, 1, flag = wx.EXPAND) root.speed_spin = wx.SpinCtrlDouble(speedpanel, -1, initial = 100, min = 1, max = 300, style = wx.ALIGN_LEFT, size = (115, -1)) root.speed_spin.SetDigits(0) speedsizer.Add(root.speed_spin, 0, flag = wx.ALIGN_CENTER_VERTICAL) root.speed_label = wx.StaticText(speedpanel, -1, _("%")) speedsizer.Add(root.speed_label, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) def speedslider_set(event): root.do_setspeed() root.speed_setbtn.SetBackgroundColour(wx.NullColour) root.speed_setbtn = make_button(speedpanel, _("Set"), speedslider_set, _("Set print speed factor"), size = (38, -1), style = wx.BU_EXACTFIT) root.printerControls.append(root.speed_setbtn) speedsizer.Add(root.speed_setbtn, flag = wx.ALIGN_CENTER) speedpanel.SetSizer(speedsizer) add("speedcontrol", speedpanel, flag = wx.EXPAND) def speedslider_spin(event): value = root.speed_spin.GetValue() root.speed_setbtn.SetBackgroundColour("red") root.speed_slider.SetValue(value) root.speed_spin.Bind(wx.EVT_SPINCTRLDOUBLE, speedslider_spin) def speedslider_scroll(event): value = root.speed_slider.GetValue() root.speed_setbtn.SetBackgroundColour("red") root.speed_spin.SetValue(value) root.speed_slider.Bind(wx.EVT_SCROLL, speedslider_scroll) # Flow control # flowpanel = root.newPanel(parentpanel) flowsizer = wx.BoxSizer(wx.HORIZONTAL) flowsizer.Add(wx.StaticText(flowpanel, -1, _("Print flow:")), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) root.flow_slider = wx.Slider(flowpanel, -1, 100, 1, 300) flowsizer.Add(root.flow_slider, 1, flag = wx.EXPAND) root.flow_spin = wx.SpinCtrlDouble(flowpanel, -1, initial = 100, min = 1, max = 300, style = wx.ALIGN_LEFT, size = (115, -1)) flowsizer.Add(root.flow_spin, 0, flag = wx.ALIGN_CENTER_VERTICAL) root.flow_label = wx.StaticText(flowpanel, -1, _("%")) flowsizer.Add(root.flow_label, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) def flowslider_set(event): root.do_setflow() root.flow_setbtn.SetBackgroundColour(wx.NullColour) root.flow_setbtn = make_button(flowpanel, _("Set"), flowslider_set, _("Set print flow factor"), size = (38, -1), style = wx.BU_EXACTFIT) root.printerControls.append(root.flow_setbtn) flowsizer.Add(root.flow_setbtn, flag = wx.ALIGN_CENTER) flowpanel.SetSizer(flowsizer) add("flowcontrol", flowpanel, flag = wx.EXPAND) def flowslider_spin(event): value = root.flow_spin.GetValue() root.flow_setbtn.SetBackgroundColour("red") root.flow_slider.SetValue(value) root.flow_spin.Bind(wx.EVT_SPINCTRLDOUBLE, flowslider_spin) def flowslider_scroll(event): value = root.flow_slider.GetValue() root.flow_setbtn.SetBackgroundColour("red") root.flow_spin.SetValue(value) root.flow_slider.Bind(wx.EVT_SCROLL, flowslider_scroll) # Temperature gauges # if root.display_gauges: root.hottgauge = TempGauge(parentpanel, size = (-1, 24), title = _("Heater:"), maxval = 300, bgcolor = root.bgcolor) add("htemp_gauge", root.hottgauge, flag = wx.EXPAND) root.bedtgauge = TempGauge(parentpanel, size = (-1, 24), title = _("Bed:"), maxval = 150, bgcolor = root.bgcolor) add("btemp_gauge", root.bedtgauge, flag = wx.EXPAND) def hotendgauge_scroll_setpoint(e): rot = e.GetWheelRotation() if rot > 0: root.do_settemp(str(root.hsetpoint + 1)) elif rot < 0: root.do_settemp(str(max(0, root.hsetpoint - 1))) def bedgauge_scroll_setpoint(e): rot = e.GetWheelRotation() if rot > 0: root.do_settemp(str(root.bsetpoint + 1)) elif rot < 0: root.do_settemp(str(max(0, root.bsetpoint - 1))) root.hottgauge.Bind(wx.EVT_MOUSEWHEEL, hotendgauge_scroll_setpoint) root.bedtgauge.Bind(wx.EVT_MOUSEWHEEL, bedgauge_scroll_setpoint) # Temperature (M105) feedback display # root.tempdisp = wx.StaticText(parentpanel, -1, "", style = wx.ST_NO_AUTORESIZE) def on_tempdisp_size(evt): root.tempdisp.Wrap(root.tempdisp.GetSize().width) root.tempdisp.Bind(wx.EVT_SIZE, on_tempdisp_size) def tempdisp_setlabel(label): wx.StaticText.SetLabel(root.tempdisp, label) root.tempdisp.Wrap(root.tempdisp.GetSize().width) root.tempdisp.SetSize((-1, root.tempdisp.GetBestSize().height)) root.tempdisp.SetLabel = tempdisp_setlabel add("tempdisp", root.tempdisp, flag = wx.EXPAND) # Temperature graph # if root.display_graph: root.graph = Graph(parentpanel, wx.ID_ANY, root) add("tempgraph", root.graph, flag = wx.EXPAND | wx.ALL, border = 5) root.graph.Bind(wx.EVT_LEFT_DOWN, root.graph.show_graph_window) # Extrusion controls # # Extrusion settings esettingspanel = root.newPanel(parentpanel) esettingssizer = wx.GridBagSizer() esettingssizer.SetEmptyCellSize((0, 0)) root.edist = wx.SpinCtrlDouble(esettingspanel, -1, initial = root.settings.last_extrusion, min = 0, max = 1000, size = (135, -1)) root.edist.SetDigits(1) root.edist.Bind(wx.EVT_SPINCTRLDOUBLE, root.setfeeds) root.edist.SetBackgroundColour((225, 200, 200)) root.edist.SetForegroundColour("black") root.edist.Bind(wx.EVT_TEXT, root.setfeeds) add("edist_label", wx.StaticText(esettingspanel, -1, _("Length:")), container = esettingssizer, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.RIGHT | wx.LEFT, border = 5) add("edist_val", root.edist, container = esettingssizer, flag = wx.ALIGN_CENTER | wx.RIGHT, border = 5) unit_label = _("mm") if mini_mode else _("mm @") add("edist_unit", wx.StaticText(esettingspanel, -1, unit_label), container = esettingssizer, flag = wx.ALIGN_CENTER | wx.RIGHT, border = 5) root.edist.SetToolTip(wx.ToolTip(_("Amount to Extrude or Retract (mm)"))) if not mini_mode: root.efeedc = wx.SpinCtrlDouble(esettingspanel, -1, initial = root.settings.e_feedrate, min = 0, max = 50000, size = (145, -1)) root.efeedc.SetDigits(1) root.efeedc.Bind(wx.EVT_SPINCTRLDOUBLE, root.setfeeds) root.efeedc.SetToolTip(wx.ToolTip(_("Extrude / Retract speed (mm/min)"))) root.efeedc.SetBackgroundColour((225, 200, 200)) root.efeedc.SetForegroundColour("black") root.efeedc.Bind(wx.EVT_TEXT, root.setfeeds) add("efeed_val", root.efeedc, container = esettingssizer, flag = wx.ALIGN_CENTER | wx.RIGHT, border = 5) add("efeed_label", wx.StaticText(esettingspanel, -1, _("Speed:")), container = esettingssizer, flag = wx.ALIGN_LEFT) add("efeed_unit", wx.StaticText(esettingspanel, -1, _("mm/\nmin")), container = esettingssizer, flag = wx.ALIGN_CENTER) else: root.efeedc = None esettingspanel.SetSizer(esettingssizer) add("esettings", esettingspanel, flag = wx.ALIGN_LEFT) if not standalone_mode: ebuttonspanel = root.newPanel(parentpanel) ebuttonssizer = wx.BoxSizer(wx.HORIZONTAL) if root.settings.extruders > 1: etool_sel_panel = esettingspanel if mini_mode else ebuttonspanel etool_label = wx.StaticText(etool_sel_panel, -1, _("Tool:")) if root.settings.extruders == 2: root.extrudersel = wx.Button(etool_sel_panel, -1, "0", style = wx.BU_EXACTFIT) root.extrudersel.SetToolTip(wx.ToolTip(_("Click to switch current extruder"))) def extrudersel_cb(event): if root.extrudersel.GetLabel() == "1": new = "0" else: new = "1" root.extrudersel.SetLabel(new) root.tool_change(event) root.extrudersel.Bind(wx.EVT_BUTTON, extrudersel_cb) root.extrudersel.GetValue = root.extrudersel.GetLabel root.extrudersel.SetValue = root.extrudersel.SetLabel else: choices = [str(i) for i in range(0, root.settings.extruders)] root.extrudersel = wx.ComboBox(etool_sel_panel, -1, choices = choices, style = wx.CB_DROPDOWN | wx.CB_READONLY, size = (50, -1)) root.extrudersel.SetToolTip(wx.ToolTip(_("Select current extruder"))) root.extrudersel.SetValue(choices[0]) root.extrudersel.Bind(wx.EVT_COMBOBOX, root.tool_change) root.printerControls.append(root.extrudersel) if mini_mode: add("etool_label", etool_label, container = esettingssizer, flag = wx.ALIGN_CENTER) add("etool_val", root.extrudersel, container = esettingssizer) else: ebuttonssizer.Add(etool_label, flag = wx.ALIGN_CENTER) ebuttonssizer.Add(root.extrudersel) for key in ["extrude", "reverse"]: desc = root.cpbuttons[key] btn = make_custom_button(root, ebuttonspanel, desc, style = wx.BU_EXACTFIT) ebuttonssizer.Add(btn, 1, flag = wx.EXPAND) ebuttonspanel.SetSizer(ebuttonssizer) add("ebuttons", ebuttonspanel, flag = wx.EXPAND) else: for key, btn in extra_buttons.items(): add(key, btn, flag = wx.EXPAND) class ControlsSizer(wx.GridBagSizer): def __init__(self, root, parentpanel = None, standalone_mode = False, mini_mode = False): super(ControlsSizer, self).__init__() if not parentpanel: parentpanel = root.panel if mini_mode: self.make_mini(root, parentpanel) else: self.make_standard(root, parentpanel, standalone_mode) def make_standard(self, root, parentpanel, standalone_mode): lltspanel = root.newPanel(parentpanel) llts = wx.BoxSizer(wx.HORIZONTAL) lltspanel.SetSizer(llts) self.Add(lltspanel, pos = (0, 0), span = (1, 6)) xyzpanel = root.newPanel(parentpanel) self.xyzsizer = XYZControlsSizer(root, xyzpanel) xyzpanel.SetSizer(self.xyzsizer) self.Add(xyzpanel, pos = (1, 0), span = (1, 6), flag = wx.ALIGN_CENTER) self.extra_buttons = {} pos_mapping = {"extrude": (4, 0), "reverse": (4, 2), } span_mapping = {"extrude": (1, 2), "reverse": (1, 3), } for key, desc in root.cpbuttons.items(): if not standalone_mode and key in ["extrude", "reverse"]: continue panel = lltspanel if key == "motorsoff" else parentpanel btn = make_custom_button(root, panel, desc) if key == "motorsoff": llts.Add(btn) elif not standalone_mode: self.Add(btn, pos = pos_mapping[key], span = span_mapping[key], flag = wx.EXPAND) else: self.extra_buttons[key] = btn root.xyfeedc = wx.SpinCtrl(lltspanel, -1, str(root.settings.xy_feedrate), min = 0, max = 50000, size = (130, -1)) root.xyfeedc.SetToolTip(wx.ToolTip(_("Set Maximum Speed for X & Y axes (mm/min)"))) llts.Add(wx.StaticText(lltspanel, -1, _("XY:")), flag = wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL) llts.Add(root.xyfeedc) llts.Add(wx.StaticText(lltspanel, -1, _("mm/min Z:")), flag = wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL) root.zfeedc = wx.SpinCtrl(lltspanel, -1, str(root.settings.z_feedrate), min = 0, max = 50000, size = (130, -1)) root.zfeedc.SetToolTip(wx.ToolTip(_("Set Maximum Speed for Z axis (mm/min)"))) llts.Add(root.zfeedc,) root.xyfeedc.Bind(wx.EVT_SPINCTRL, root.setfeeds) root.zfeedc.Bind(wx.EVT_SPINCTRL, root.setfeeds) root.xyfeedc.Bind(wx.EVT_TEXT, root.setfeeds) root.zfeedc.Bind(wx.EVT_TEXT, root.setfeeds) root.zfeedc.SetBackgroundColour((180, 255, 180)) root.zfeedc.SetForegroundColour("black") if not standalone_mode: add_extra_controls(self, root, parentpanel, None) def make_mini(self, root, parentpanel): root.xyb = XYButtonsMini(parentpanel, root.moveXY, root.homeButtonClicked, root.spacebarAction, root.bgcolor, zcallback = root.moveZ) self.Add(root.xyb, pos = (1, 0), span = (1, 4), flag = wx.ALIGN_CENTER) root.zb = ZButtonsMini(parentpanel, root.moveZ, root.bgcolor) self.Add(root.zb, pos = (0, 4), span = (2, 1), flag = wx.ALIGN_CENTER) wx.CallAfter(root.xyb.SetFocus) pos_mapping = {"motorsoff": (0, 0), } span_mapping = {"motorsoff": (1, 4), } btn = make_custom_button(root, parentpanel, root.cpbuttons["motorsoff"]) self.Add(btn, pos = pos_mapping["motorsoff"], span = span_mapping["motorsoff"], flag = wx.EXPAND) add_extra_controls(self, root, parentpanel, None, True) Printrun-printrun-2.0.0rc5/printrun/gui/graph.py000066400000000000000000000443431325617007000217540ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx from math import log10, floor, ceil from printrun.utils import install_locale install_locale('pronterface') from .bufferedcanvas import BufferedCanvas class GraphWindow(wx.Frame): def __init__(self, root, parent_graph = None, size = (600, 600)): super(GraphWindow, self).__init__(None, title = _("Temperature graph"), size = size) self.parentg=parent_graph; panel = wx.Panel(self, -1) vbox = wx.BoxSizer(wx.VERTICAL) self.graph = Graph(panel, wx.ID_ANY, root, parent_graph = parent_graph) vbox.Add(self.graph, 1, wx.EXPAND) panel.SetSizer(vbox) def Destroy(self): self.graph.StopPlotting() if self.parentg is not None: self.parentg.window=None return super(GraphWindow,self).Destroy() def __del__(self): if self.parentg is not None: self.parentg.window=None self.graph.StopPlotting() class Graph(BufferedCanvas): '''A class to show a Graph with Pronterface.''' def __init__(self, parent, id, root, pos = wx.DefaultPosition, size = wx.Size(150, 80), style = 0, parent_graph = None): # Forcing a no full repaint to stop flickering style = style | wx.NO_FULL_REPAINT_ON_RESIZE super(Graph, self).__init__(parent, id, pos, size, style) self.root = root if parent_graph is not None: self.extruder0temps = parent_graph.extruder0temps self.extruder0targettemps = parent_graph.extruder0targettemps self.extruder1temps = parent_graph.extruder1temps self.extruder1targettemps = parent_graph.extruder1targettemps self.bedtemps = parent_graph.bedtemps self.bedtargettemps = parent_graph.bedtargettemps self.fanpowers=parent_graph.fanpowers else: self.extruder0temps = [0] self.extruder0targettemps = [0] self.extruder1temps = [0] self.extruder1targettemps = [0] self.bedtemps = [0] self.bedtargettemps = [0] self.fanpowers= [0] self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.updateTemperatures, self.timer) self.minyvalue = 0 self.maxyvalue = 260 self.rescaley = True # should the Y axis be rescaled dynamically? if self.rescaley: self._ybounds = Graph._YBounds(self) # If rescaley is set then ybars gives merely an estimate # Note that "bars" actually indicate the number of internal+external gridlines. self.ybars = 5 self.xbars = 7 # One bar per 10 second self.xsteps = 60 # Covering 1 minute in the graph self.window = None def show_graph_window(self, event = None): if self.window is None or not self.window: self.window = GraphWindow(self.root, self) self.window.Show() if self.timer.IsRunning(): self.window.graph.StartPlotting(self.timer.Interval) else: self.window.Raise() def __del__(self): if self.window: self.window.Close() def updateTemperatures(self, event): self.AddBedTemperature(self.bedtemps[-1]) self.AddBedTargetTemperature(self.bedtargettemps[-1]) self.AddExtruder0Temperature(self.extruder0temps[-1]) self.AddExtruder0TargetTemperature(self.extruder0targettemps[-1]) self.AddExtruder1Temperature(self.extruder1temps[-1]) self.AddExtruder1TargetTemperature(self.extruder1targettemps[-1]) self.AddFanPower(self.fanpowers[-1]) if self.rescaley: self._ybounds.update() self.Refresh() def drawgrid(self, dc, gc): # cold, medium, hot = wx.Colour(0, 167, 223),\ # wx.Colour(239, 233, 119),\ # wx.Colour(210, 50.100) # col1 = wx.Colour(255, 0, 0, 255) # col2 = wx.Colour(255, 255, 255, 128) # b = gc.CreateLinearGradientBrush(0, 0, w, h, col1, col2) gc.SetPen(wx.Pen(wx.Colour(255, 0, 0, 0), 1)) # gc.SetBrush(wx.Brush(wx.Colour(245, 245, 255, 52))) # gc.SetBrush(gc.CreateBrush(wx.Brush(wx.Colour(0, 0, 0, 255)))) gc.SetPen(wx.Pen(wx.Colour(255, 0, 0, 255), 1)) # gc.DrawLines(wx.Point(0, 0), wx.Point(50, 10)) font = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD) gc.SetFont(font, wx.Colour(23, 44, 44)) # draw vertical bars dc.SetPen(wx.Pen(wx.Colour(225, 225, 225), 1)) for x in range(self.xbars + 1): dc.DrawLine(x * (float(self.width - 1) / (self.xbars - 1)), 0, x * (float(self.width - 1) / (self.xbars - 1)), self.height) # draw horizontal bars spacing = self._calculate_spacing() # spacing between bars, in degrees yspan = self.maxyvalue - self.minyvalue ybars = int(yspan / spacing) # Should be close to self.ybars firstbar = int(ceil(self.minyvalue / spacing)) # in degrees dc.SetPen(wx.Pen(wx.Colour(225, 225, 225), 1)) for y in range(firstbar, firstbar + ybars + 1): # y_pos = y*(float(self.height)/self.ybars) degrees = y * spacing y_pos = self._y_pos(degrees) dc.DrawLine(0, y_pos, self.width, y_pos) gc.DrawText(str(y * spacing), 1, y_pos - (font.GetPointSize() / 2)) if self.timer.IsRunning() is False: font = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD) gc.SetFont(font, wx.Colour(3, 4, 4)) gc.DrawText("Graph offline", self.width / 2 - (font.GetPointSize() * 3), self.height / 2 - (font.GetPointSize() * 1)) # dc.DrawCircle(50, 50, 1) # gc.SetPen(wx.Pen(wx.Colour(255, 0, 0, 0), 1)) # gc.DrawLines([[20, 30], [10, 53]]) # dc.SetPen(wx.Pen(wx.Colour(255, 0, 0, 0), 1)) def _y_pos(self, temperature): """Converts a temperature, in degrees, to a pixel position""" # fraction of the screen from the bottom frac = (float(temperature - self.minyvalue) / (self.maxyvalue - self.minyvalue)) return int((1.0 - frac) * (self.height - 1)) def _calculate_spacing(self): # Allow grids of spacings 1,2.5,5,10,25,50,100,etc yspan = float(self.maxyvalue - self.minyvalue) log_yspan = log10(yspan / self.ybars) exponent = int(floor(log_yspan)) # calculate boundary points between allowed spacings log1_25 = log10(2) + log10(1) + log10(2.5) - log10(1 + 2.5) log25_5 = log10(2) + log10(2.5) + log10(5) - log10(2.5 + 5) log5_10 = log10(2) + log10(5) + log10(10) - log10(5 + 10) if log_yspan - exponent < log1_25: return 10 ** exponent elif log1_25 <= log_yspan - exponent < log25_5: return 25 * 10 ** (exponent - 1) elif log25_5 <= log_yspan - exponent < log5_10: return 5 * 10 ** exponent else: return 10 ** (exponent + 1) def drawtemperature(self, dc, gc, temperature_list, text, text_xoffset, r, g, b, a): if self.timer.IsRunning() is False: dc.SetPen(wx.Pen(wx.Colour(128, 128, 128, 128), 1)) else: dc.SetPen(wx.Pen(wx.Colour(r, g, b, a), 1)) x_add = float(self.width) / self.xsteps x_pos = 0.0 lastxvalue = 0.0 lastyvalue = temperature_list[-1] for temperature in (temperature_list): y_pos = self._y_pos(temperature) if (x_pos > 0.0): # One need 2 points to draw a line. dc.DrawLine(lastxvalue, lastyvalue, x_pos, y_pos) lastxvalue = x_pos x_pos = float(x_pos) + x_add lastyvalue = y_pos if len(text) > 0: font = wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD) # font = wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL) if self.timer.IsRunning() is False: gc.SetFont(font, wx.Colour(128, 128, 128)) else: gc.SetFont(font, wx.Colour(r, g, b)) text_size = len(text) * text_xoffset + 1 gc.DrawText(text, x_pos - x_add - (font.GetPointSize() * text_size), lastyvalue - (font.GetPointSize() / 2)) def drawfanpower(self, dc, gc): self.drawtemperature(dc, gc, self.fanpowers, "Fan", 1, 0, 0, 0, 128) def drawbedtemp(self, dc, gc): self.drawtemperature(dc, gc, self.bedtemps, "Bed", 2, 255, 0, 0, 128) def drawbedtargettemp(self, dc, gc): self.drawtemperature(dc, gc, self.bedtargettemps, "Bed Target", 2, 255, 120, 0, 128) def drawextruder0temp(self, dc, gc): self.drawtemperature(dc, gc, self.extruder0temps, "Ex0", 1, 0, 155, 255, 128) def drawextruder0targettemp(self, dc, gc): self.drawtemperature(dc, gc, self.extruder0targettemps, "Ex0 Target", 2, 0, 5, 255, 128) def drawextruder1temp(self, dc, gc): self.drawtemperature(dc, gc, self.extruder1temps, "Ex1", 3, 55, 55, 0, 128) def drawextruder1targettemp(self, dc, gc): self.drawtemperature(dc, gc, self.extruder1targettemps, "Ex1 Target", 2, 55, 55, 0, 128) def SetFanPower(self, value): self.fanpowers.pop() self.fanpowers.append(value) def AddFanPower(self, value): self.fanpowers.append(value) if float(len(self.fanpowers) - 1) / self.xsteps > 1: self.fanpowers.pop(0) def SetBedTemperature(self, value): self.bedtemps.pop() self.bedtemps.append(value) def AddBedTemperature(self, value): self.bedtemps.append(value) if float(len(self.bedtemps) - 1) / self.xsteps > 1: self.bedtemps.pop(0) def SetBedTargetTemperature(self, value): self.bedtargettemps.pop() self.bedtargettemps.append(value) def AddBedTargetTemperature(self, value): self.bedtargettemps.append(value) if float(len(self.bedtargettemps) - 1) / self.xsteps > 1: self.bedtargettemps.pop(0) def SetExtruder0Temperature(self, value): self.extruder0temps.pop() self.extruder0temps.append(value) def AddExtruder0Temperature(self, value): self.extruder0temps.append(value) if float(len(self.extruder0temps) - 1) / self.xsteps > 1: self.extruder0temps.pop(0) def SetExtruder0TargetTemperature(self, value): self.extruder0targettemps.pop() self.extruder0targettemps.append(value) def AddExtruder0TargetTemperature(self, value): self.extruder0targettemps.append(value) if float(len(self.extruder0targettemps) - 1) / self.xsteps > 1: self.extruder0targettemps.pop(0) def SetExtruder1Temperature(self, value): self.extruder1temps.pop() self.extruder1temps.append(value) def AddExtruder1Temperature(self, value): self.extruder1temps.append(value) if float(len(self.extruder1temps) - 1) / self.xsteps > 1: self.extruder1temps.pop(0) def SetExtruder1TargetTemperature(self, value): self.extruder1targettemps.pop() self.extruder1targettemps.append(value) def AddExtruder1TargetTemperature(self, value): self.extruder1targettemps.append(value) if float(len(self.extruder1targettemps) - 1) / self.xsteps > 1: self.extruder1targettemps.pop(0) def StartPlotting(self, time): self.Refresh() self.timer.Start(time) if self.window: self.window.graph.StartPlotting(time) def Destroy(self): self.StopPlotting() return super(BufferedCanvas, self).Destroy() def StopPlotting(self): self.timer.Stop() #self.Refresh() # do not refresh when stopping in case the underlying object has been destroyed already if self.window: self.window.graph.StopPlotting() def draw(self, dc, w, h): dc.SetBackground(wx.Brush(self.root.bgcolor)) dc.Clear() gc = wx.GraphicsContext.Create(dc) self.width = w self.height = h self.drawgrid(dc, gc) self.drawbedtargettemp(dc, gc) self.drawbedtemp(dc, gc) self.drawfanpower(dc, gc) self.drawextruder0targettemp(dc, gc) self.drawextruder0temp(dc, gc) self.drawextruder1targettemp(dc, gc) self.drawextruder1temp(dc, gc) class _YBounds: """Small helper class to claculate y bounds dynamically""" def __init__(self, graph, minimum_scale=5.0, buffer=0.10): """_YBounds(Graph,float,float) graph parent object to calculate scales for minimum_scale minimum range to show on the graph buffer amount of padding to add above & below the displayed temperatures. Given as a fraction of the total range. (Eg .05 to use 90% of the range for temperatures) """ self.graph = graph self.min_scale = minimum_scale self.buffer = buffer # Frequency to rescale the graph self.update_freq = 10 # number of updates since last full refresh self._last_update = self.update_freq def update(self, forceUpdate=False): """Updates graph.minyvalue and graph.maxyvalue based on current temperatures """ self._last_update += 1 # TODO Smart update. Only do full calculation every 10s. Otherwise, # just look at current graph & expand if necessary if forceUpdate or self._last_update >= self.update_freq: self.graph.minyvalue, self.graph.maxyvalue = self.getBounds() self._last_update = 0 else: bounds = self.getBoundsQuick() self.graph.minyvalue, self.graph.maxyvalue = bounds def getBounds(self): """ Calculates the bounds based on the current temperatures Rules: * Include the full extruder0 history * Include the current target temp (but not necessarily old settings) * Include the extruder1 and/or bed temp if 1) The target temp is >0 2) The history has ever been above 5 * Include at least min_scale * Include at least buffer above & below the extreme temps """ extruder0_min = min(self.graph.extruder0temps) extruder0_max = max(self.graph.extruder0temps) extruder0_target = self.graph.extruder0targettemps[-1] extruder1_min = min(self.graph.extruder1temps) extruder1_max = max(self.graph.extruder1temps) extruder1_target = self.graph.extruder1targettemps[-1] bed_min = min(self.graph.bedtemps) bed_max = max(self.graph.bedtemps) bed_target = self.graph.bedtargettemps[-1] miny = min(extruder0_min, extruder0_target) maxy = max(extruder0_max, extruder0_target) if extruder1_target > 0 or extruder1_max > 5: # use extruder1 miny = min(miny, extruder1_min, extruder1_target) maxy = max(maxy, extruder1_max, extruder1_target) if bed_target > 0 or bed_max > 5: # use HBP miny = min(miny, bed_min, bed_target) maxy = max(maxy, bed_max, bed_target) miny=min(0,miny); maxy=max(260,maxy); padding = (maxy - miny) * self.buffer / (1.0 - 2 * self.buffer) miny -= padding maxy += padding if maxy - miny < self.min_scale: extrapadding = (self.min_scale - maxy + miny) / 2.0 miny -= extrapadding maxy += extrapadding return (miny, maxy) def getBoundsQuick(self): # Only look at current temps extruder0_min = self.graph.extruder0temps[-1] extruder0_max = self.graph.extruder0temps[-1] extruder0_target = self.graph.extruder0targettemps[-1] extruder1_min = self.graph.extruder1temps[-1] extruder1_max = self.graph.extruder1temps[-1] extruder1_target = self.graph.extruder1targettemps[-1] bed_min = self.graph.bedtemps[-1] bed_max = self.graph.bedtemps[-1] bed_target = self.graph.bedtargettemps[-1] miny = min(extruder0_min, extruder0_target) maxy = max(extruder0_max, extruder0_target) if extruder1_target > 0 or extruder1_max > 5: # use extruder1 miny = min(miny, extruder1_min, extruder1_target) maxy = max(maxy, extruder1_max, extruder1_target) if bed_target > 0 or bed_max > 5: # use HBP miny = min(miny, bed_min, bed_target) maxy = max(maxy, bed_max, bed_target) miny=min(0,miny); maxy=max(260,maxy); # We have to rescale, so add padding bufratio = self.buffer / (1.0 - self.buffer) if miny < self.graph.minyvalue: padding = (self.graph.maxyvalue - miny) * bufratio miny -= padding if maxy > self.graph.maxyvalue: padding = (maxy - self.graph.minyvalue) * bufratio maxy += padding return (min(miny, self.graph.minyvalue), max(maxy, self.graph.maxyvalue)) Printrun-printrun-2.0.0rc5/printrun/gui/log.py000066400000000000000000000035001325617007000214220ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx from .utils import make_button class LogPane(wx.BoxSizer): def __init__(self, root, parentpanel = None): super(LogPane, self).__init__(wx.VERTICAL) if not parentpanel: parentpanel = root.panel root.logbox = wx.TextCtrl(parentpanel, style = wx.TE_MULTILINE, size = (350, -1)) root.logbox.SetMinSize((100, -1)) root.logbox.SetEditable(0) self.Add(root.logbox, 1, wx.EXPAND) bottom_panel = root.newPanel(parentpanel) lbrs = wx.BoxSizer(wx.HORIZONTAL) root.commandbox = wx.TextCtrl(bottom_panel, style = wx.TE_PROCESS_ENTER) root.commandbox.SetToolTip(wx.ToolTip(_("Send commands to printer\n(Type 'help' for simple\nhelp function)"))) root.commandbox.Bind(wx.EVT_TEXT_ENTER, root.sendline) root.commandbox.Bind(wx.EVT_CHAR, root.cbkey) root.commandbox.history = [""] root.commandbox.histindex = 1 lbrs.Add(root.commandbox, 1) root.sendbtn = make_button(bottom_panel, _("Send"), root.sendline, _("Send Command to Printer"), style = wx.BU_EXACTFIT, container = lbrs) bottom_panel.SetSizer(lbrs) self.Add(bottom_panel, 0, wx.EXPAND) Printrun-printrun-2.0.0rc5/printrun/gui/toolbar.py000066400000000000000000000101461325617007000223070ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx from .utils import make_autosize_button def MainToolbar(root, parentpanel = None, use_wrapsizer = False): if not parentpanel: parentpanel = root.panel if root.settings.lockbox: root.locker = wx.CheckBox(parentpanel, label = _("Lock") + " ") root.locker.Bind(wx.EVT_CHECKBOX, root.lock) root.locker.SetToolTip(wx.ToolTip(_("Lock graphical interface"))) glob = wx.BoxSizer(wx.HORIZONTAL) parentpanel = root.newPanel(parentpanel) glob.Add(parentpanel, 1, flag = wx.EXPAND) glob.Add(root.locker, 0, flag = wx.ALIGN_CENTER) ToolbarSizer = wx.WrapSizer if use_wrapsizer else wx.BoxSizer self = ToolbarSizer(wx.HORIZONTAL) root.rescanbtn = make_autosize_button(parentpanel, _("Port"), root.rescanports, _("Communication Settings\nClick to rescan ports")) self.Add(root.rescanbtn, 0, wx.TOP | wx.LEFT, 0) root.serialport = wx.ComboBox(parentpanel, -1, choices = root.scanserial(), style = wx.CB_DROPDOWN) root.serialport.SetToolTip(wx.ToolTip(_("Select Port Printer is connected to"))) root.rescanports() self.Add(root.serialport) self.Add(wx.StaticText(parentpanel, -1, "@"), 0, wx.RIGHT | wx.ALIGN_CENTER, 0) root.baud = wx.ComboBox(parentpanel, -1, choices = ["2400", "9600", "19200", "38400", "57600", "115200", "250000"], style = wx.CB_DROPDOWN, size = (110, -1)) root.baud.SetToolTip(wx.ToolTip(_("Select Baud rate for printer communication"))) try: root.baud.SetValue("115200") root.baud.SetValue(str(root.settings.baudrate)) except: pass self.Add(root.baud) if not hasattr(root, "connectbtn"): root.connectbtn = make_autosize_button(parentpanel, _("Connect"), root.connect, _("Connect to the printer")) root.statefulControls.append(root.connectbtn) else: root.connectbtn.Reparent(parentpanel) self.Add(root.connectbtn) if not hasattr(root, "resetbtn"): root.resetbtn = make_autosize_button(parentpanel, _("Reset"), root.reset, _("Reset the printer")) root.statefulControls.append(root.resetbtn) else: root.resetbtn.Reparent(parentpanel) self.Add(root.resetbtn) self.AddStretchSpacer(prop = 1) root.loadbtn = make_autosize_button(parentpanel, _("Load file"), root.loadfile, _("Load a 3D model file"), self) root.sdbtn = make_autosize_button(parentpanel, _("SD"), root.sdmenu, _("SD Card Printing"), self) root.sdbtn.Reparent(parentpanel) root.printerControls.append(root.sdbtn) if not hasattr(root, "printbtn"): root.printbtn = make_autosize_button(parentpanel, _("Print"), root.printfile, _("Start Printing Loaded File")) root.statefulControls.append(root.printbtn) else: root.printbtn.Reparent(parentpanel) self.Add(root.printbtn) if not hasattr(root, "pausebtn"): root.pausebtn = make_autosize_button(parentpanel, _("Pause"), root.pause, _("Pause Current Print")) root.statefulControls.append(root.pausebtn) else: root.pausebtn.Reparent(parentpanel) self.Add(root.pausebtn) root.offbtn = make_autosize_button(parentpanel, _("Off"), root.off, _("Turn printer off"), self) root.printerControls.append(root.offbtn) self.AddStretchSpacer(prop = 4) if root.settings.lockbox: parentpanel.SetSizer(self) return glob else: return self Printrun-printrun-2.0.0rc5/printrun/gui/utils.py000066400000000000000000000026721325617007000220120ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx def make_button(parent, label, callback, tooltip, container = None, size = wx.DefaultSize, style = 0): button = wx.Button(parent, -1, label, style = style, size = size) button.Bind(wx.EVT_BUTTON, callback) button.SetToolTip(wx.ToolTip(tooltip)) if container: container.Add(button) return button def make_autosize_button(*args): return make_button(*args, size = (-1, -1), style = wx.BU_EXACTFIT) def make_custom_button(root, parentpanel, i, style = 0): btn = make_button(parentpanel, i.label, root.process_button, i.tooltip, style = style) btn.SetBackgroundColour(i.background) btn.SetForegroundColour("black") btn.properties = i root.btndict[i.command] = btn root.printerControls.append(btn) return btn Printrun-printrun-2.0.0rc5/printrun/gui/viz.py000066400000000000000000000107241325617007000214570ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import traceback import logging import wx class NoViz: showall = False def clear(self, *a): pass def addfile_perlayer(self, gcode, showall = False): layer_idx = 0 while layer_idx < len(gcode.all_layers): yield layer_idx layer_idx += 1 yield None def addfile(self, *a, **kw): pass def addgcode(self, *a, **kw): pass def addgcodehighlight(self, *a, **kw): pass def Refresh(self, *a): pass def setlayer(self, *a): pass class NoVizWindow: def __init__(self): self.p = NoViz() def Destroy(self): pass class VizPane(wx.BoxSizer): def __init__(self, root, parentpanel = None): super(VizPane, self).__init__(wx.VERTICAL) if not parentpanel: parentpanel = root.panel if root.settings.mainviz == "None": root.gviz = NoViz() root.gwindow = NoVizWindow() return use2dview = root.settings.mainviz == "2D" if root.settings.mainviz == "3D": try: import printrun.gcview root.gviz = printrun.gcview.GcodeViewMainWrapper(parentpanel, root.build_dimensions_list, root = root, circular = root.settings.circular_bed, antialias_samples = int(root.settings.antialias3dsamples)) root.gviz.clickcb = root.show_viz_window except: use2dview = True logging.error("3D view mode requested, but we failed to initialize it.\n" + "Falling back to 2D view, and here is the backtrace:\n" + traceback.format_exc()) if use2dview: from printrun import gviz root.gviz = gviz.Gviz(parentpanel, (300, 300), build_dimensions = root.build_dimensions_list, grid = (root.settings.preview_grid_step1, root.settings.preview_grid_step2), extrusion_width = root.settings.preview_extrusion_width, bgcolor = root.bgcolor) root.gviz.SetToolTip(wx.ToolTip(_("Click to examine / edit\n layers of loaded file"))) root.gviz.showall = 1 root.gviz.Bind(wx.EVT_LEFT_DOWN, root.show_viz_window) use3dview = root.settings.viz3d if use3dview: try: import printrun.gcview objects = None if isinstance(root.gviz, printrun.gcview.GcodeViewMainWrapper): objects = root.gviz.objects root.gwindow = printrun.gcview.GcodeViewFrame(None, wx.ID_ANY, 'Gcode view, shift to move view, mousewheel to set layer', size = (600, 600), build_dimensions = root.build_dimensions_list, objects = objects, root = root, circular = root.settings.circular_bed, antialias_samples = int(root.settings.antialias3dsamples)) except: use3dview = False logging.error("3D view mode requested, but we failed to initialize it.\n" + "Falling back to 2D view, and here is the backtrace:\n" + traceback.format_exc()) if not use3dview: from printrun import gviz root.gwindow = gviz.GvizWindow(build_dimensions = root.build_dimensions_list, grid = (root.settings.preview_grid_step1, root.settings.preview_grid_step2), extrusion_width = root.settings.preview_extrusion_width, bgcolor = root.bgcolor) root.gwindow.Bind(wx.EVT_CLOSE, lambda x: root.gwindow.Hide()) if not isinstance(root.gviz, NoViz): self.Add(root.gviz.widget, 1, flag = wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL) Printrun-printrun-2.0.0rc5/printrun/gui/widgets.py000066400000000000000000000376761325617007000223340ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx import re class MacroEditor(wx.Dialog): """Really simple editor to edit macro definitions""" def __init__(self, macro_name, definition, callback, gcode = False): self.indent_chars = " " title = " macro %s" if gcode: title = " %s" self.gcode = gcode wx.Dialog.__init__(self, None, title = title % macro_name, style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) self.callback = callback self.panel = wx.Panel(self, -1) titlesizer = wx.BoxSizer(wx.HORIZONTAL) self.titletext = wx.StaticText(self.panel, -1, " _") # title%macro_name) titlesizer.Add(self.titletext, 1) self.findb = wx.Button(self.panel, -1, _("Find"), style = wx.BU_EXACTFIT) # New button for "Find" (Jezmy) self.findb.Bind(wx.EVT_BUTTON, self.find) self.okb = wx.Button(self.panel, -1, _("Save"), style = wx.BU_EXACTFIT) self.okb.Bind(wx.EVT_BUTTON, self.save) self.Bind(wx.EVT_CLOSE, self.close) titlesizer.Add(self.findb) titlesizer.Add(self.okb) self.cancelb = wx.Button(self.panel, -1, _("Cancel"), style = wx.BU_EXACTFIT) self.cancelb.Bind(wx.EVT_BUTTON, self.close) titlesizer.Add(self.cancelb) topsizer = wx.BoxSizer(wx.VERTICAL) topsizer.Add(titlesizer, 0, wx.EXPAND) self.e = wx.TextCtrl(self.panel, style = wx.HSCROLL | wx.TE_MULTILINE | wx.TE_RICH2, size = (400, 400)) if not self.gcode: self.e.SetValue(self.unindent(definition)) else: self.e.SetValue("\n".join(definition)) topsizer.Add(self.e, 1, wx.ALL | wx.EXPAND) self.panel.SetSizer(topsizer) topsizer.Layout() topsizer.Fit(self) self.Show() self.e.SetFocus() def find(self, ev): # Ask user what to look for, find it and point at it ... (Jezmy) S = self.e.GetStringSelection() if not S: S = "Z" FindValue = wx.GetTextFromUser('Please enter a search string:', caption = "Search", default_value = S, parent = None) somecode = self.e.GetValue() position = somecode.find(FindValue, self.e.GetInsertionPoint()) if position == -1: self.titletext.SetLabel(_("Not Found!")) else: self.titletext.SetLabel(str(position)) # ananswer = wx.MessageBox(str(numLines)+" Lines detected in file\n"+str(position), "OK") self.e.SetFocus() self.e.SetInsertionPoint(position) self.e.SetSelection(position, position + len(FindValue)) self.e.ShowPosition(position) def ShowMessage(self, ev, message): dlg = wx.MessageDialog(self, message, "Info!", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() def save(self, ev): self.Destroy() if not self.gcode: self.callback(self.reindent(self.e.GetValue())) else: self.callback(self.e.GetValue().split("\n")) def close(self, ev): self.Destroy() def unindent(self, text): self.indent_chars = text[:len(text) - len(text.lstrip())] if len(self.indent_chars) == 0: self.indent_chars = " " unindented = "" lines = re.split(r"(?:\r\n?|\n)", text) if len(lines) <= 1: return text for line in lines: if line.startswith(self.indent_chars): unindented += line[len(self.indent_chars):] + "\n" else: unindented += line + "\n" return unindented def reindent(self, text): lines = re.split(r"(?:\r\n?|\n)", text) if len(lines) <= 1: return text reindented = "" for line in lines: if line.strip() != "": reindented += self.indent_chars + line + "\n" return reindented SETTINGS_GROUPS = {"Printer": _("Printer settings"), "UI": _("User interface"), "Viewer": _("Viewer"), "Colors": _("Colors"), "External": _("External commands")} class PronterOptionsDialog(wx.Dialog): """Options editor""" def __init__(self, pronterface): wx.Dialog.__init__(self, parent = None, title = _("Edit settings"), size = (400, 500), style = wx.DEFAULT_DIALOG_STYLE) panel = wx.Panel(self) header = wx.StaticBox(panel, label = _("Settings")) sbox = wx.StaticBoxSizer(header, wx.VERTICAL) notebook = wx.Notebook(panel) all_settings = pronterface.settings._all_settings() group_list = [] groups = {} for group in ["Printer", "UI", "Viewer", "Colors", "External"]: group_list.append(group) groups[group] = [] for setting in all_settings: if setting.group not in group_list: group_list.append(setting.group) groups[setting.group] = [] groups[setting.group].append(setting) for group in group_list: grouppanel = wx.Panel(notebook, -1) notebook.AddPage(grouppanel, SETTINGS_GROUPS[group]) settings = groups[group] grid = wx.GridBagSizer(hgap = 8, vgap = 2) current_row = 0 for setting in settings: if setting.name.startswith("separator_"): sep = wx.StaticLine(grouppanel, size = (-1, 5), style = wx.LI_HORIZONTAL) grid.Add(sep, pos = (current_row, 0), span = (1, 2), border = 3, flag = wx.ALIGN_CENTER | wx.ALL | wx.EXPAND) current_row += 1 label, widget = setting.get_label(grouppanel), setting.get_widget(grouppanel) if setting.name.startswith("separator_"): font = label.GetFont() font.SetWeight(wx.BOLD) label.SetFont(font) grid.Add(label, pos = (current_row, 0), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) grid.Add(widget, pos = (current_row, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND) if hasattr(label, "set_default"): label.Bind(wx.EVT_MOUSE_EVENTS, label.set_default) if hasattr(widget, "Bind"): widget.Bind(wx.EVT_MOUSE_EVENTS, label.set_default) current_row += 1 grid.AddGrowableCol(1) grouppanel.SetSizer(grid) sbox.Add(notebook, 1, wx.EXPAND) panel.SetSizer(sbox) topsizer = wx.BoxSizer(wx.VERTICAL) topsizer.Add(panel, 1, wx.ALL | wx.EXPAND) topsizer.Add(self.CreateButtonSizer(wx.OK | wx.CANCEL), 0, wx.ALIGN_RIGHT) self.SetSizerAndFit(topsizer) self.SetMinSize(self.GetSize()) def PronterOptions(pronterface): dialog = PronterOptionsDialog(pronterface) if dialog.ShowModal() == wx.ID_OK: for setting in pronterface.settings._all_settings(): old_value = setting.value setting.update() if setting.value != old_value: pronterface.set(setting.name, setting.value) dialog.Destroy() class ButtonEdit(wx.Dialog): """Custom button edit dialog""" def __init__(self, pronterface): wx.Dialog.__init__(self, None, title = _("Custom button"), style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) self.pronterface = pronterface topsizer = wx.BoxSizer(wx.VERTICAL) grid = wx.FlexGridSizer(rows = 0, cols = 2, hgap = 4, vgap = 2) grid.AddGrowableCol(1, 1) grid.Add(wx.StaticText(self, -1, _("Button title")), 0, wx.BOTTOM | wx.RIGHT) self.name = wx.TextCtrl(self, -1, "") grid.Add(self.name, 1, wx.EXPAND) grid.Add(wx.StaticText(self, -1, _("Command")), 0, wx.BOTTOM | wx.RIGHT) self.command = wx.TextCtrl(self, -1, "") xbox = wx.BoxSizer(wx.HORIZONTAL) xbox.Add(self.command, 1, wx.EXPAND) self.command.Bind(wx.EVT_TEXT, self.macrob_enabler) self.macrob = wx.Button(self, -1, "..", style = wx.BU_EXACTFIT) self.macrob.Bind(wx.EVT_BUTTON, self.macrob_handler) xbox.Add(self.macrob, 0) grid.Add(xbox, 1, wx.EXPAND) grid.Add(wx.StaticText(self, -1, _("Color")), 0, wx.BOTTOM | wx.RIGHT) self.color = wx.TextCtrl(self, -1, "") grid.Add(self.color, 1, wx.EXPAND) topsizer.Add(grid, 0, wx.EXPAND) topsizer.Add((0, 0), 1) topsizer.Add(self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL), 0, wx.ALIGN_CENTER) self.SetSizer(topsizer) def macrob_enabler(self, e): macro = self.command.GetValue() valid = False try: if macro == "": valid = True elif macro in self.pronterface.macros: valid = True elif hasattr(self.pronterface.__class__, "do_" + macro): valid = False elif len([c for c in macro if not c.isalnum() and c != "_"]): valid = False else: valid = True except: if macro == "": valid = True elif macro in self.pronterface.macros: valid = True elif len([c for c in macro if not c.isalnum() and c != "_"]): valid = False else: valid = True self.macrob.Enable(valid) def macrob_handler(self, e): macro = self.command.GetValue() macro = self.pronterface.edit_macro(macro) self.command.SetValue(macro) if self.name.GetValue() == "": self.name.SetValue(macro) class TempGauge(wx.Panel): def __init__(self, parent, size = (200, 22), title = "", maxval = 240, gaugeColour = None, bgcolor = "#FFFFFF"): wx.Panel.__init__(self, parent, -1, size = size) self.Bind(wx.EVT_PAINT, self.paint) self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) self.bgcolor = wx.Colour() self.bgcolor.Set(bgcolor) self.width, self.height = size self.title = title self.max = maxval self.gaugeColour = gaugeColour self.value = 0 self.setpoint = 0 self.recalc() def recalc(self): mmax = max(int(self.setpoint * 1.05), self.max) self.scale = float(self.width - 2) / float(mmax) self.ypt = max(16, int(self.scale * max(self.setpoint, self.max / 6))) def SetValue(self, value): self.value = value wx.CallAfter(self.Refresh) def SetTarget(self, value): self.setpoint = value wx.CallAfter(self.Refresh) def interpolatedColour(self, val, vmin, vmid, vmax, cmin, cmid, cmax): if val < vmin: return cmin if val > vmax: return cmax if val <= vmid: lo, hi, val, valhi = cmin, cmid, val - vmin, vmid - vmin else: lo, hi, val, valhi = cmid, cmax, val - vmid, vmax - vmid vv = float(val) / valhi rgb = lo.Red() + (hi.Red() - lo.Red()) * vv, lo.Green() + (hi.Green() - lo.Green()) * vv, lo.Blue() + (hi.Blue() - lo.Blue()) * vv rgb = (int(x * 0.8) for x in rgb) return wx.Colour(*rgb) def paint(self, ev): self.width, self.height = self.GetClientSize() self.recalc() x0, y0, x1, y1, xE, yE = 1, 1, self.ypt + 1, 1, self.width + 1 - 2, 20 dc = wx.PaintDC(self) dc.SetBackground(wx.Brush(self.bgcolor)) dc.Clear() cold, medium, hot = wx.Colour(0, 167, 223), wx.Colour(239, 233, 119), wx.Colour(210, 50, 0) # gauge1, gauge2 = wx.Colour(255, 255, 210), (self.gaugeColour or wx.Colour(234, 82, 0)) gauge1 = wx.Colour(255, 255, 210) shadow1, shadow2 = wx.Colour(110, 110, 110), self.bgcolor gc = wx.GraphicsContext.Create(dc) # draw shadow first # corners gc.SetBrush(gc.CreateRadialGradientBrush(xE - 7, 9, xE - 7, 9, 8, shadow1, shadow2)) gc.DrawRectangle(xE - 7, 1, 8, 8) gc.SetBrush(gc.CreateRadialGradientBrush(xE - 7, 17, xE - 7, 17, 8, shadow1, shadow2)) gc.DrawRectangle(xE - 7, 17, 8, 8) gc.SetBrush(gc.CreateRadialGradientBrush(x0 + 6, 17, x0 + 6, 17, 8, shadow1, shadow2)) gc.DrawRectangle(0, 17, x0 + 6, 8) # edges gc.SetBrush(gc.CreateLinearGradientBrush(xE - 6, 0, xE + 1, 0, shadow1, shadow2)) gc.DrawRectangle(xE - 7, 9, 8, 8) gc.SetBrush(gc.CreateLinearGradientBrush(x0, yE - 2, x0, yE + 5, shadow1, shadow2)) gc.DrawRectangle(x0 + 6, yE - 2, xE - 12, 7) # draw gauge background gc.SetBrush(gc.CreateLinearGradientBrush(x0, y0, x1 + 1, y1, cold, medium)) gc.DrawRoundedRectangle(x0, y0, x1 + 4, yE, 6) gc.SetBrush(gc.CreateLinearGradientBrush(x1 - 2, y1, xE, y1, medium, hot)) gc.DrawRoundedRectangle(x1 - 2, y1, xE - x1, yE, 6) # draw gauge width = 12 w1 = y0 + 9 - width / 2 w2 = w1 + width value = x0 + max(10, min(self.width + 1 - 2, int(self.value * self.scale))) # gc.SetBrush(gc.CreateLinearGradientBrush(x0, y0 + 3, x0, y0 + 15, gauge1, gauge2)) # gc.SetBrush(gc.CreateLinearGradientBrush(0, 3, 0, 15, wx.Colour(255, 255, 255), wx.Colour(255, 90, 32))) gc.SetBrush(gc.CreateLinearGradientBrush(x0, y0 + 3, x0, y0 + 15, gauge1, self.interpolatedColour(value, x0, x1, xE, cold, medium, hot))) val_path = gc.CreatePath() val_path.MoveToPoint(x0, w1) val_path.AddLineToPoint(value, w1) val_path.AddLineToPoint(value + 2, w1 + width / 4) val_path.AddLineToPoint(value + 2, w2 - width / 4) val_path.AddLineToPoint(value, w2) # val_path.AddLineToPoint(value-4, 10) val_path.AddLineToPoint(x0, w2) gc.DrawPath(val_path) # draw setpoint markers setpoint = x0 + max(10, int(self.setpoint * self.scale)) gc.SetBrush(gc.CreateBrush(wx.Brush(wx.Colour(0, 0, 0)))) setp_path = gc.CreatePath() setp_path.MoveToPoint(setpoint - 4, y0) setp_path.AddLineToPoint(setpoint + 4, y0) setp_path.AddLineToPoint(setpoint, y0 + 5) setp_path.MoveToPoint(setpoint - 4, yE) setp_path.AddLineToPoint(setpoint + 4, yE) setp_path.AddLineToPoint(setpoint, yE - 5) gc.DrawPath(setp_path) # draw readout text = "T\u00B0 %u/%u" % (self.value, self.setpoint) # gc.SetFont(gc.CreateFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD), wx.WHITE)) # gc.DrawText(text, 29,-2) gc.SetFont(gc.CreateFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD), wx.WHITE)) gc.DrawText(self.title, x0 + 19, y0 + 4) gc.DrawText(text, x0 + 119, y0 + 4) gc.SetFont(gc.CreateFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))) gc.DrawText(self.title, x0 + 18, y0 + 3) gc.DrawText(text, x0 + 118, y0 + 3) class SpecialButton: label = None command = None background = None tooltip = None custom = None def __init__(self, label, command, background = None, tooltip = None, custom = False): self.label = label self.command = command self.background = background self.tooltip = tooltip self.custom = custom Printrun-printrun-2.0.0rc5/printrun/gui/xybuttons.py000066400000000000000000000434261325617007000227330ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx import math from .bufferedcanvas import BufferedCanvas from printrun.utils import imagefile def sign(n): if n < 0: return -1 elif n > 0: return 1 else: return 0 class XYButtons(BufferedCanvas): keypad_positions = { 0: (106, 100), 1: (86, 83), 2: (68, 65), 3: (53, 50) } corner_size = (49, 49) corner_inset = (7, 13) label_overlay_positions = { 1: (145, 98.5, 9), 2: (160.5, 83.5, 10.6), 3: (178, 66, 13), 4: (197.3, 46.3, 13.3) } concentric_circle_radii = [0, 17, 45, 69, 94, 115] concentric_inset = 11 center = (124, 121) spacer = 7 imagename = "control_xy.png" corner_to_axis = { -1: "center", 0: "x", 1: "z", 2: "y", 3: "all", } def __init__(self, parent, moveCallback = None, cornerCallback = None, spacebarCallback = None, bgcolor = "#FFFFFF", ID=-1, zcallback=None): self.bg_bmp = wx.Image(imagefile(self.imagename), wx.BITMAP_TYPE_PNG).ConvertToBitmap() self.keypad_bmp = wx.Image(imagefile("arrow_keys.png"), wx.BITMAP_TYPE_PNG).ConvertToBitmap() self.keypad_idx = -1 self.quadrant = None self.concentric = None self.corner = None self.moveCallback = moveCallback self.cornerCallback = cornerCallback self.spacebarCallback = spacebarCallback self.zCallback = zcallback self.enabled = False # Remember the last clicked buttons, so we can repeat when spacebar pressed self.lastMove = None self.lastCorner = None self.bgcolor = wx.Colour() self.bgcolor.Set(bgcolor) self.bgcolormask = wx.Colour(self.bgcolor.Red(), self.bgcolor.Green(), self.bgcolor.Blue(), 128) BufferedCanvas.__init__(self, parent, ID, size=self.bg_bmp.GetSize()) self.bind_events() def bind_events(self): # Set up mouse and keyboard event capture self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown) self.Bind(wx.EVT_MOTION, self.OnMotion) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) self.Bind(wx.EVT_KEY_UP, self.OnKey) wx.GetTopLevelParent(self).Bind(wx.EVT_CHAR_HOOK, self.OnTopLevelKey) def disable(self): self.enabled = False self.update() def enable(self): self.enabled = True self.update() def repeatLast(self): if self.lastMove: self.moveCallback(*self.lastMove) if self.lastCorner: self.cornerCallback(self.corner_to_axis[self.lastCorner]) def clearRepeat(self): self.lastMove = None self.lastCorner = None def distanceToLine(self, pos, x1, y1, x2, y2): xlen = x2 - x1 ylen = y2 - y1 pxlen = x1 - pos.x pylen = y1 - pos.y return abs(xlen * pylen - ylen * pxlen) / math.sqrt(xlen ** 2 + ylen ** 2) def distanceToPoint(self, x1, y1, x2, y2): return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) def cycleKeypadIndex(self): idx = self.keypad_idx + 1 if idx > 2: idx = 0 return idx def setKeypadIndex(self, idx): self.keypad_idx = idx self.update() def getMovement(self): xdir = [1, 0, -1, 0, 0, 0][self.quadrant] ydir = [0, 1, 0, -1, 0, 0][self.quadrant] zdir = [0, 0, 0, 0, 1, -1][self.quadrant] magnitude = math.pow(10, self.concentric - 2) if not zdir == 0: magnitude = min(magnitude, 10) return (magnitude * xdir, magnitude * ydir, magnitude * zdir) def lookupConcentric(self, radius): idx = 0 for r in self.concentric_circle_radii[1:]: if radius < r: return idx idx += 1 return len(self.concentric_circle_radii) def getQuadrantConcentricFromPosition(self, pos): rel_x = pos[0] - self.center[0] rel_y = pos[1] - self.center[1] radius = math.sqrt(rel_x ** 2 + rel_y ** 2) if rel_x > rel_y and rel_x > -rel_y: quadrant = 0 # Right elif rel_x <= rel_y and rel_x > -rel_y: quadrant = 3 # Down elif rel_x > rel_y and rel_x < -rel_y: quadrant = 1 # Up else: quadrant = 2 # Left idx = self.lookupConcentric(radius) return (quadrant, idx) def mouseOverKeypad(self, mpos): for idx, kpos in list(self.keypad_positions.items()): radius = self.distanceToPoint(mpos[0], mpos[1], kpos[0], kpos[1]) if radius < 9: return idx return None def drawPartialPie(self, gc, center, r1, r2, angle1, angle2): p1 = wx.Point(center.x + r1 * math.cos(angle1), center.y + r1 * math.sin(angle1)) path = gc.CreatePath() path.MoveToPoint(p1.x, p1.y) path.AddArc(center.x, center.y, r1, angle1, angle2, True) path.AddArc(center.x, center.y, r2, angle2, angle1, False) path.AddLineToPoint(p1.x, p1.y) gc.DrawPath(path) def highlightQuadrant(self, gc, quadrant, concentric): assert(quadrant >= 0 and quadrant <= 3) assert(concentric >= 0 and concentric <= 4) inner_ring_radius = self.concentric_inset # fudge = math.pi*0.002 fudge = -0.02 center = wx.Point(self.center[0], self.center[1]) if quadrant == 0: a1, a2 = (-math.pi * 0.25, math.pi * 0.25) center.x += inner_ring_radius elif quadrant == 1: a1, a2 = (math.pi * 1.25, math.pi * 1.75) center.y -= inner_ring_radius elif quadrant == 2: a1, a2 = (math.pi * 0.75, math.pi * 1.25) center.x -= inner_ring_radius elif quadrant == 3: a1, a2 = (math.pi * 0.25, math.pi * 0.75) center.y += inner_ring_radius r1 = self.concentric_circle_radii[concentric] r2 = self.concentric_circle_radii[concentric + 1] self.drawPartialPie(gc, center, r1 - inner_ring_radius, r2 - inner_ring_radius, a1 + fudge, a2 - fudge) def drawCorner(self, gc, x, y, angle = 0.0): w, h = self.corner_size gc.PushState() gc.Translate(x, y) gc.Rotate(angle) path = gc.CreatePath() path.MoveToPoint(-w / 2, -h / 2) path.AddLineToPoint(w / 2, -h / 2) path.AddLineToPoint(w / 2, -h / 2 + h / 4) path.AddLineToPoint(w / 12, h / 12) path.AddLineToPoint(-w / 2 + w / 4, h / 2) path.AddLineToPoint(-w / 2, h / 2) path.AddLineToPoint(-w / 2, -h / 2) gc.DrawPath(path) gc.PopState() def highlightCorner(self, gc, corner = 0): w, h = self.corner_size xinset, yinset = self.corner_inset cx, cy = self.center ww, wh = self.GetSize() if corner == 0: x, y = (cx - ww / 2 + xinset + 1, cy - wh / 2 + yinset) self.drawCorner(gc, x + w / 2, y + h / 2, 0) elif corner == 1: x, y = (cx + ww / 2 - xinset, cy - wh / 2 + yinset) self.drawCorner(gc, x - w / 2, y + h / 2, math.pi / 2) elif corner == 2: x, y = (cx + ww / 2 - xinset, cy + wh / 2 - yinset - 1) self.drawCorner(gc, x - w / 2, y - h / 2, math.pi) elif corner == 3: x, y = (cx - ww / 2 + xinset + 1, cy + wh / 2 - yinset - 1) self.drawCorner(gc, x + w / 2, y - h / 2, math.pi * 3 / 2) def drawCenteredDisc(self, gc, radius): cx, cy = self.center gc.DrawEllipse(cx - radius, cy - radius, radius * 2, radius * 2) def draw(self, dc, w, h): dc.SetBackground(wx.Brush(self.bgcolor)) dc.Clear() gc = wx.GraphicsContext.Create(dc) if self.bg_bmp: w, h = (self.bg_bmp.GetWidth(), self.bg_bmp.GetHeight()) gc.DrawBitmap(self.bg_bmp, 0, 0, w, h) if self.enabled and self.IsEnabled(): # Brush and pen for grey overlay when mouse hovers over gc.SetPen(wx.Pen(wx.Colour(100, 100, 100, 172), 4)) gc.SetBrush(wx.Brush(wx.Colour(0, 0, 0, 128))) if self.concentric is not None: if self.concentric < len(self.concentric_circle_radii): if self.concentric == 0: self.drawCenteredDisc(gc, self.concentric_circle_radii[1]) elif self.quadrant is not None: self.highlightQuadrant(gc, self.quadrant, self.concentric) elif self.corner is not None: self.highlightCorner(gc, self.corner) if self.keypad_idx >= 0: padw, padh = (self.keypad_bmp.GetWidth(), self.keypad_bmp.GetHeight()) pos = self.keypad_positions[self.keypad_idx] pos = (pos[0] - padw / 2 - 3, pos[1] - padh / 2 - 3) gc.DrawBitmap(self.keypad_bmp, pos[0], pos[1], padw, padh) # Draw label overlays gc.SetPen(wx.Pen(wx.Colour(255, 255, 255, 128), 1)) gc.SetBrush(wx.Brush(wx.Colour(255, 255, 255, 128 + 64))) for idx, kpos in list(self.label_overlay_positions.items()): if idx != self.concentric: r = kpos[2] gc.DrawEllipse(kpos[0] - r, kpos[1] - r, r * 2, r * 2) else: gc.SetPen(wx.Pen(self.bgcolor, 0)) gc.SetBrush(wx.Brush(self.bgcolormask)) gc.DrawRectangle(0, 0, w, h) # Used to check exact position of keypad dots, should we ever resize the bg image # for idx, kpos in self.label_overlay_positions.items(): # dc.DrawCircle(kpos[0], kpos[1], kpos[2]) # ------ # # Events # # ------ # def OnTopLevelKey(self, evt): # Let user press escape on any control, and return focus here if evt.GetKeyCode() == wx.WXK_ESCAPE: self.SetFocus() evt.Skip() def OnKey(self, evt): if not self.enabled: return if self.keypad_idx >= 0: if evt.GetKeyCode() == wx.WXK_TAB: self.setKeypadIndex(self.cycleKeypadIndex()) elif evt.GetKeyCode() == wx.WXK_UP: self.quadrant = 1 elif evt.GetKeyCode() == wx.WXK_DOWN: self.quadrant = 3 elif evt.GetKeyCode() == wx.WXK_LEFT: self.quadrant = 2 elif evt.GetKeyCode() == wx.WXK_RIGHT: self.quadrant = 0 elif evt.GetKeyCode() == wx.WXK_PAGEUP: self.quadrant = 4 elif evt.GetKeyCode() == wx.WXK_PAGEDOWN: self.quadrant = 5 else: evt.Skip() return self.concentric = self.keypad_idx x, y, z = self.getMovement() if x != 0 or y != 0 and self.moveCallback: self.moveCallback(x, y) if z != 0 and self.zCallback: self.zCallback(z) elif evt.GetKeyCode() == wx.WXK_SPACE: self.spacebarCallback() def OnMotion(self, event): if not self.enabled: return oldcorner = self.corner oldq, oldc = self.quadrant, self.concentric mpos = event.GetPosition() idx = self.mouseOverKeypad(mpos) self.quadrant = None self.concentric = None if idx is None: center = wx.Point(self.center[0], self.center[1]) riseDist = self.distanceToLine(mpos, center.x - 1, center.y - 1, center.x + 1, center.y + 1) fallDist = self.distanceToLine(mpos, center.x - 1, center.y + 1, center.x + 1, center.y - 1) self.quadrant, self.concentric = self.getQuadrantConcentricFromPosition(mpos) # If mouse hovers in space between quadrants, don't commit to a quadrant if riseDist <= self.spacer or fallDist <= self.spacer: self.quadrant = None cx, cy = self.center if mpos.x < cx and mpos.y < cy: self.corner = 0 if mpos.x >= cx and mpos.y < cy: self.corner = 1 if mpos.x >= cx and mpos.y >= cy: self.corner = 2 if mpos.x < cx and mpos.y >= cy: self.corner = 3 if oldq != self.quadrant or oldc != self.concentric or oldcorner != self.corner: self.update() def OnLeftDown(self, event): if not self.enabled: return # Take focus when clicked so that arrow keys can control movement self.SetFocus() mpos = event.GetPosition() idx = self.mouseOverKeypad(mpos) if idx is None: self.quadrant, self.concentric = self.getQuadrantConcentricFromPosition(mpos) if self.concentric is not None: if self.concentric < len(self.concentric_circle_radii): if self.concentric == 0: self.lastCorner = -1 self.lastMove = None self.cornerCallback(self.corner_to_axis[-1]) elif self.quadrant is not None: x, y, z = self.getMovement() if self.moveCallback: self.lastMove = (x, y) self.lastCorner = None self.moveCallback(x, y) elif self.corner is not None: if self.cornerCallback: self.lastCorner = self.corner self.lastMove = None self.cornerCallback(self.corner_to_axis[self.corner]) else: if self.keypad_idx == idx: self.setKeypadIndex(-1) else: self.setKeypadIndex(idx) def OnLeaveWindow(self, evt): self.quadrant = None self.concentric = None self.update() class XYButtonsMini(XYButtons): imagename = "control_mini.png" center = (57, 56.5) concentric_circle_radii = [0, 30.3] corner_inset = (5, 5) corner_size = (50, 50) outer_radius = 31 corner_to_axis = { 0: "x", 1: "z", 2: "y", 3: "center", } def bind_events(self): # Set up mouse and keyboard event capture self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown) self.Bind(wx.EVT_MOTION, self.OnMotion) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) def OnMotion(self, event): if not self.enabled: return oldcorner = self.corner oldq, oldc = self.quadrant, self.concentric mpos = event.GetPosition() self.quadrant, self.concentric = self.getQuadrantConcentricFromPosition(mpos) cx, cy = XYButtonsMini.center if mpos.x < cx and mpos.y < cy: self.corner = 0 if mpos.x >= cx and mpos.y < cy: self.corner = 1 if mpos.x >= cx and mpos.y >= cy: self.corner = 2 if mpos.x < cx and mpos.y >= cy: self.corner = 3 if oldq != self.quadrant or oldc != self.concentric or oldcorner != self.corner: self.update() def OnLeftDown(self, event): if not self.enabled: return # Take focus when clicked so that arrow keys can control movement self.SetFocus() mpos = event.GetPosition() self.quadrant, self.concentric = self.getQuadrantConcentricFromPosition(mpos) if self.concentric is not None: if self.concentric < len(self.concentric_circle_radii): self.cornerCallback("all") elif self.corner is not None: if self.cornerCallback: self.lastCorner = self.corner self.lastMove = None self.cornerCallback(self.corner_to_axis[self.corner]) def drawCorner(self, gc, x, y, angle = 0.0): w, h = self.corner_size gc.PushState() gc.Translate(x, y) gc.Rotate(angle) path = gc.CreatePath() path.MoveToPoint(-w / 2, -h / 2) path.AddLineToPoint(w / 2, -h / 2) path.AddLineToPoint(w / 2, -h / 2 + h / 4) path.AddArc(w / 2, h / 2, self.outer_radius, 3 * math.pi / 2, math.pi, False) path.AddLineToPoint(-w / 2, h / 2) path.AddLineToPoint(-w / 2, -h / 2) gc.DrawPath(path) gc.PopState() def draw(self, dc, w, h): dc.SetBackground(wx.Brush(self.bgcolor)) dc.Clear() gc = wx.GraphicsContext.Create(dc) if self.bg_bmp: w, h = (self.bg_bmp.GetWidth(), self.bg_bmp.GetHeight()) gc.DrawBitmap(self.bg_bmp, 0, 0, w, h) if self.enabled and self.IsEnabled(): # Brush and pen for grey overlay when mouse hovers over gc.SetPen(wx.Pen(wx.Colour(100, 100, 100, 172), 4)) gc.SetBrush(wx.Brush(wx.Colour(0, 0, 0, 128))) if self.concentric is not None: if self.concentric < len(self.concentric_circle_radii): self.drawCenteredDisc(gc, self.concentric_circle_radii[-1]) elif self.corner is not None: self.highlightCorner(gc, self.corner) else: gc.SetPen(wx.Pen(self.bgcolor, 0)) gc.SetBrush(wx.Brush(self.bgcolormask)) gc.DrawRectangle(0, 0, w, h) Printrun-printrun-2.0.0rc5/printrun/gui/zbuttons.py000066400000000000000000000130171325617007000225350ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx from .bufferedcanvas import BufferedCanvas from printrun.utils import imagefile def sign(n): if n < 0: return -1 elif n > 0: return 1 else: return 0 class ZButtons(BufferedCanvas): button_ydistances = [7, 30, 55, 83] # ,112 move_values = [0.1, 1, 10] center = (30, 118) label_overlay_positions = { 0: (1.1, 18, 9), 1: (1.1, 41.5, 10.6), 2: (1.1, 68, 13), } imagename = "control_z.png" def __init__(self, parent, moveCallback = None, bgcolor = "#FFFFFF", ID=-1): self.bg_bmp = wx.Image(imagefile(self.imagename), wx.BITMAP_TYPE_PNG).ConvertToBitmap() self.range = None self.direction = None self.orderOfMagnitudeIdx = 0 # 0 means '1', 1 means '10', 2 means '100', etc. self.moveCallback = moveCallback self.enabled = False # Remember the last clicked value, so we can repeat when spacebar pressed self.lastValue = None self.bgcolor = wx.Colour() self.bgcolor.Set(bgcolor) self.bgcolormask = wx.Colour(self.bgcolor.Red(), self.bgcolor.Green(), self.bgcolor.Blue(), 128) BufferedCanvas.__init__(self, parent, ID, size=self.bg_bmp.GetSize()) # Set up mouse and keyboard event capture self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown) self.Bind(wx.EVT_MOTION, self.OnMotion) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) def disable(self): self.enabled = False self.update() def enable(self): self.enabled = True self.update() def repeatLast(self): if self.lastValue: self.moveCallback(self.lastValue) def clearRepeat(self): self.lastValue = None def lookupRange(self, ydist): idx = -1 for d in self.button_ydistances: if ydist < d: return idx idx += 1 return None def highlight(self, gc, rng, dir): assert(rng >= -1 and rng <= 3) assert(dir >= -1 and dir <= 1) fudge = 11 x = 0 + fudge w = 59 - fudge * 2 if rng >= 0: k = 1 if dir > 0 else 0 y = self.center[1] - (dir * self.button_ydistances[rng + k]) h = self.button_ydistances[rng + 1] - self.button_ydistances[rng] gc.DrawRoundedRectangle(x, y, w, h, 4) # gc.DrawRectangle(x, y, w, h) # self.drawPartialPie(dc, center, r1-inner_ring_radius, r2-inner_ring_radius, a1+fudge, a2-fudge) def getRangeDir(self, pos): ydelta = self.center[1] - pos[1] return (self.lookupRange(abs(ydelta)), sign(ydelta)) def draw(self, dc, w, h): dc.SetBackground(wx.Brush(self.bgcolor)) dc.Clear() gc = wx.GraphicsContext.Create(dc) if self.bg_bmp: w, h = (self.bg_bmp.GetWidth(), self.bg_bmp.GetHeight()) gc.DrawBitmap(self.bg_bmp, 0, 0, w, h) if self.enabled and self.IsEnabled(): # Draw label overlays gc.SetPen(wx.Pen(wx.Colour(255, 255, 255, 128), 1)) gc.SetBrush(wx.Brush(wx.Colour(255, 255, 255, 128 + 64))) for idx, kpos in self.label_overlay_positions.items(): if idx != self.range: r = kpos[2] gc.DrawEllipse(self.center[0] - kpos[0] - r, self.center[1] - kpos[1] - r, r * 2, r * 2) # Top 'layer' is the mouse-over highlights gc.SetPen(wx.Pen(wx.Colour(100, 100, 100, 172), 4)) gc.SetBrush(wx.Brush(wx.Colour(0, 0, 0, 128))) if self.range is not None and self.direction is not None: self.highlight(gc, self.range, self.direction) else: gc.SetPen(wx.Pen(self.bgcolor, 0)) gc.SetBrush(wx.Brush(self.bgcolormask)) gc.DrawRectangle(0, 0, w, h) # ------ # # Events # # ------ # def OnMotion(self, event): if not self.enabled: return oldr, oldd = self.range, self.direction mpos = event.GetPosition() self.range, self.direction = self.getRangeDir(mpos) if oldr != self.range or oldd != self.direction: self.update() def OnLeftDown(self, event): if not self.enabled: return mpos = event.GetPosition() r, d = self.getRangeDir(mpos) if r is not None and r >= 0: value = d * self.move_values[r] if self.moveCallback: self.lastValue = value self.moveCallback(value) def OnLeaveWindow(self, evt): self.range = None self.direction = None self.update() class ZButtonsMini(ZButtons): button_ydistances = [7, 30, 55] center = (30, 84) label_overlay_positions = { 0: (1, 18, 9), 1: (1, 42.8, 12.9), } imagename = "control_z_mini.png" move_values = [0.1, 10] Printrun-printrun-2.0.0rc5/printrun/gviz.py000066400000000000000000000533051325617007000210440ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . from queue import Queue from collections import deque import numpy import wx import time from . import gcoder from .injectgcode import injector, injector_edit from .utils import imagefile, install_locale, get_home_pos install_locale('pronterface') class GvizBaseFrame(wx.Frame): def create_base_ui(self): self.CreateStatusBar(1) self.SetStatusText(_("Layer number and Z position show here when you scroll")) hpanel = wx.Panel(self, -1) hbox = wx.BoxSizer(wx.HORIZONTAL) panel = wx.Panel(hpanel, -1) vbox = wx.BoxSizer(wx.VERTICAL) vbox = wx.BoxSizer(wx.VERTICAL) self.toolbar = wx.ToolBar(panel, -1, style = wx.TB_HORIZONTAL | wx.NO_BORDER | wx.TB_HORZ_TEXT) self.toolbar.AddTool(1, '', wx.Image(imagefile('zoom_in.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), _("Zoom In [+]"),) self.toolbar.AddTool(2, '', wx.Image(imagefile('zoom_out.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), _("Zoom Out [-]")) self.toolbar.AddSeparator() self.toolbar.AddTool(3, '', wx.Image(imagefile('arrow_up.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), _("Move Up a Layer [U]")) self.toolbar.AddTool(4, '', wx.Image(imagefile('arrow_down.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), _("Move Down a Layer [D]")) self.toolbar.AddTool(5, " " + _("Reset view"), wx.Image(imagefile('reset.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), shortHelp = _("Reset view")) self.toolbar.AddSeparator() self.toolbar.AddTool(6, '', wx.Image(imagefile('inject.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), wx.NullBitmap, shortHelp = _("Inject G-Code"), longHelp = _("Insert code at the beginning of this layer")) self.toolbar.AddTool(7, '', wx.Image(imagefile('edit.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(), wx.NullBitmap, shortHelp = _("Edit layer"), longHelp = _("Edit the G-Code of this layer")) vbox.Add(self.toolbar, 0, border = 5) panel.SetSizer(vbox) hbox.Add(panel, 1, flag = wx.EXPAND) self.layerslider = wx.Slider(hpanel, style = wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LEFT | wx.SL_INVERSE) self.layerslider.Bind(wx.EVT_SCROLL, self.process_slider) hbox.Add(self.layerslider, 0, border = 5, flag = wx.LEFT | wx.EXPAND) hpanel.SetSizer(hbox) return panel, vbox def setlayercb(self, layer): self.layerslider.SetValue(layer) def process_slider(self, event): raise NotImplementedError ID_ABOUT = 101 ID_EXIT = 110 class GvizWindow(GvizBaseFrame): def __init__(self, f = None, size = (600, 600), build_dimensions = [200, 200, 100, 0, 0, 0], grid = (10, 50), extrusion_width = 0.5, bgcolor = "#000000"): super(GvizWindow, self).__init__(None, title = _("Gcode view, shift to move view, mousewheel to set layer"), size = size) panel, vbox = self.create_base_ui() self.p = Gviz(panel, size = size, build_dimensions = build_dimensions, grid = grid, extrusion_width = extrusion_width, bgcolor = bgcolor, realparent = self) self.toolbar.Realize() vbox.Add(self.p, 1, wx.EXPAND) self.SetMinSize(self.ClientToWindowSize(vbox.GetMinSize())) self.Bind(wx.EVT_TOOL, lambda x: self.p.zoom(-1, -1, 1.2), id = 1) self.Bind(wx.EVT_TOOL, lambda x: self.p.zoom(-1, -1, 1 / 1.2), id = 2) self.Bind(wx.EVT_TOOL, lambda x: self.p.layerup(), id = 3) self.Bind(wx.EVT_TOOL, lambda x: self.p.layerdown(), id = 4) self.Bind(wx.EVT_TOOL, self.resetview, id = 5) self.Bind(wx.EVT_TOOL, lambda x: self.p.inject(), id = 6) self.Bind(wx.EVT_TOOL, lambda x: self.p.editlayer(), id = 7) self.initpos = None self.p.Bind(wx.EVT_KEY_DOWN, self.key) self.Bind(wx.EVT_KEY_DOWN, self.key) self.p.Bind(wx.EVT_MOUSEWHEEL, self.zoom) self.Bind(wx.EVT_MOUSEWHEEL, self.zoom) self.p.Bind(wx.EVT_MOUSE_EVENTS, self.mouse) self.Bind(wx.EVT_MOUSE_EVENTS, self.mouse) if f: gcode = gcoder.GCode(f, get_home_pos(self.p.build_dimensions)) self.p.addfile(gcode) def set_current_gline(self, gline): return def process_slider(self, event): self.p.layerindex = self.layerslider.GetValue() z = self.p.get_currentz() wx.CallAfter(self.SetStatusText, _("Layer %d - Z = %.03f mm") % (self.p.layerindex + 1, z), 0) self.p.dirty = True wx.CallAfter(self.p.Refresh) def resetview(self, event): self.p.translate = [0.0, 0.0] self.p.scale = self.p.basescale self.p.zoom(0, 0, 1.0) def mouse(self, event): if event.ButtonUp(wx.MOUSE_BTN_LEFT) or event.ButtonUp(wx.MOUSE_BTN_RIGHT): if self.initpos is not None: self.initpos = None elif event.Dragging(): e = event.GetPosition() if self.initpos is None: self.initpos = e self.basetrans = self.p.translate self.p.translate = [self.basetrans[0] + (e[0] - self.initpos[0]), self.basetrans[1] + (e[1] - self.initpos[1])] self.p.dirty = True wx.CallAfter(self.p.Refresh) else: event.Skip() def key(self, event): # Keycode definitions kup = [85, 315] # Up keys kdo = [68, 317] # Down Keys kzi = [388, 316, 61] # Zoom In Keys kzo = [390, 314, 45] # Zoom Out Keys x = event.GetKeyCode() cx, cy = self.p.translate if x in kup: self.p.layerup() if x in kdo: self.p.layerdown() if x in kzi: self.p.zoom(cx, cy, 1.2) if x in kzo: self.p.zoom(cx, cy, 1 / 1.2) def zoom(self, event): z = event.GetWheelRotation() if event.ShiftDown(): if z > 0: self.p.layerdown() elif z < 0: self.p.layerup() else: if z > 0: self.p.zoom(event.GetX(), event.GetY(), 1.2) elif z < 0: self.p.zoom(event.GetX(), event.GetY(), 1 / 1.2) class Gviz(wx.Panel): # Mark canvas as dirty when setting showall _showall = 0 def _get_showall(self): return self._showall def _set_showall(self, showall): if showall != self._showall: self.dirty = True self._showall = showall showall = property(_get_showall, _set_showall) def __init__(self, parent, size = (200, 200), build_dimensions = [200, 200, 100, 0, 0, 0], grid = (10, 50), extrusion_width = 0.5, bgcolor = "#000000", realparent = None): wx.Panel.__init__(self, parent, -1) self.widget = self size = [max(1.0, x) for x in size] ratio = size[0] / size[1] self.SetMinSize((150, 150 / ratio)) self.parent = realparent if realparent else parent self.size = size self.build_dimensions = build_dimensions self.grid = grid self.Bind(wx.EVT_PAINT, self.paint) self.Bind(wx.EVT_SIZE, self.resize) self.hilight = deque() self.hilightarcs = deque() self.hilightqueue = Queue(0) self.hilightarcsqueue = Queue(0) self.clear() self.filament_width = extrusion_width # set it to 0 to disable scaling lines with zoom self.update_basescale() self.scale = self.basescale penwidth = max(1.0, self.filament_width * ((self.scale[0] + self.scale[1]) / 2.0)) self.translate = [0.0, 0.0] self.mainpen = wx.Pen(wx.Colour(0, 0, 0), penwidth) self.arcpen = wx.Pen(wx.Colour(255, 0, 0), penwidth) self.travelpen = wx.Pen(wx.Colour(10, 80, 80), penwidth) self.hlpen = wx.Pen(wx.Colour(200, 50, 50), penwidth) self.fades = [wx.Pen(wx.Colour(int(250 - 0.6 ** i * 100), int(250 - 0.6 ** i * 100), int(200 - 0.4 ** i * 50)), penwidth) for i in range(6)] self.penslist = [self.mainpen, self.travelpen, self.hlpen] + self.fades self.bgcolor = wx.Colour() self.bgcolor.Set(bgcolor) self.blitmap = wx.Bitmap(self.GetClientSize()[0], self.GetClientSize()[1], -1) self.paint_overlay = None def inject(self): layer = self.layers[self.layerindex] injector(self.gcode, self.layerindex, layer) def editlayer(self): layer = self.layers[self.layerindex] injector_edit(self.gcode, self.layerindex, layer) def clearhilights(self): self.hilight.clear() self.hilightarcs.clear() while not self.hilightqueue.empty(): self.hilightqueue.get_nowait() while not self.hilightarcsqueue.empty(): self.hilightarcsqueue.get_nowait() def clear(self): self.gcode = None self.lastpos = [0, 0, 0, 0, 0, 0, 0] self.hilightpos = self.lastpos[:] self.lines = {} self.pens = {} self.arcs = {} self.arcpens = {} self.layers = {} self.layersz = [] self.clearhilights() self.layerindex = 0 self.showall = 0 self.dirty = True self.partial = False self.painted_layers = set() wx.CallAfter(self.Refresh) def get_currentz(self): z = self.layersz[self.layerindex] z = 0. if z is None else z return z def layerup(self): if self.layerindex + 1 < len(self.layers): self.layerindex += 1 z = self.get_currentz() wx.CallAfter(self.parent.SetStatusText, _("Layer %d - Going Up - Z = %.03f mm") % (self.layerindex + 1, z), 0) self.dirty = True self.parent.setlayercb(self.layerindex) wx.CallAfter(self.Refresh) def layerdown(self): if self.layerindex > 0: self.layerindex -= 1 z = self.get_currentz() wx.CallAfter(self.parent.SetStatusText, _("Layer %d - Going Down - Z = %.03f mm") % (self.layerindex + 1, z), 0) self.dirty = True self.parent.setlayercb(self.layerindex) wx.CallAfter(self.Refresh) def setlayer(self, layer): if layer in self.layers: self.clearhilights() self.layerindex = self.layers[layer] self.dirty = True self.showall = 0 wx.CallAfter(self.Refresh) def update_basescale(self): self.basescale = 2 * [min(float(self.size[0] - 1) / self.build_dimensions[0], float(self.size[1] - 1) / self.build_dimensions[1])] def resize(self, event): old_basescale = self.basescale width, height = self.GetClientSize() if width < 1 or height < 1: return self.size = (width, height) self.update_basescale() zoomratio = float(self.basescale[0]) / old_basescale[0] wx.CallLater(200, self.zoom, 0, 0, zoomratio) def zoom(self, x, y, factor): if x == -1 and y == -1: side = min(self.size) x = y = side / 2 self.scale = [s * factor for s in self.scale] self.translate = [x - (x - self.translate[0]) * factor, y - (y - self.translate[1]) * factor] penwidth = max(1.0, self.filament_width * ((self.scale[0] + self.scale[1]) / 2.0)) for pen in self.penslist: pen.SetWidth(penwidth) self.dirty = True wx.CallAfter(self.Refresh) def _line_scaler(self, x): return (self.scale[0] * x[0], self.scale[1] * x[1], self.scale[0] * x[2], self.scale[1] * x[3],) def _arc_scaler(self, x): return (self.scale[0] * x[0], self.scale[1] * x[1], self.scale[0] * x[2], self.scale[1] * x[3], self.scale[0] * x[4], self.scale[1] * x[5],) def _drawlines(self, dc, lines, pens): scaled_lines = [self._line_scaler(l) for l in lines] dc.DrawLineList(scaled_lines, pens) def _drawarcs(self, dc, arcs, pens): scaled_arcs = [self._arc_scaler(a) for a in arcs] dc.SetBrush(wx.TRANSPARENT_BRUSH) for i in range(len(scaled_arcs)): dc.SetPen(pens[i] if isinstance(pens, list) else pens) dc.DrawArc(*scaled_arcs[i]) def repaint_everything(self): width = self.scale[0] * self.build_dimensions[0] height = self.scale[1] * self.build_dimensions[1] self.blitmap = wx.Bitmap(width + 1, height + 1, -1) dc = wx.MemoryDC() dc.SelectObject(self.blitmap) dc.SetBackground(wx.Brush((250, 250, 200))) dc.Clear() dc.SetPen(wx.Pen(wx.Colour(180, 180, 150))) for grid_unit in self.grid: if grid_unit > 0: for x in range(int(self.build_dimensions[0] / grid_unit) + 1): draw_x = self.scale[0] * x * grid_unit dc.DrawLine(draw_x, 0, draw_x, height) for y in range(int(self.build_dimensions[1] / grid_unit) + 1): draw_y = self.scale[1] * (self.build_dimensions[1] - y * grid_unit) dc.DrawLine(0, draw_y, width, draw_y) dc.SetPen(wx.Pen(wx.Colour(0, 0, 0))) if not self.showall: # Draw layer gauge dc.SetBrush(wx.Brush((43, 144, 255))) dc.DrawRectangle(width - 15, 0, 15, height) dc.SetBrush(wx.Brush((0, 255, 0))) if self.layers: dc.DrawRectangle(width - 14, (1.0 - (1.0 * (self.layerindex + 1)) / len(self.layers)) * height, 13, height - 1) if self.showall: for i in range(len(self.layersz)): self.painted_layers.add(i) self._drawlines(dc, self.lines[i], self.pens[i]) self._drawarcs(dc, self.arcs[i], self.arcpens[i]) dc.SelectObject(wx.NullBitmap) return if self.layerindex < len(self.layers) and self.layerindex in self.lines: for layer_i in range(max(0, self.layerindex - 6), self.layerindex): self._drawlines(dc, self.lines[layer_i], self.fades[self.layerindex - layer_i - 1]) self._drawarcs(dc, self.arcs[layer_i], self.fades[self.layerindex - layer_i - 1]) self._drawlines(dc, self.lines[self.layerindex], self.pens[self.layerindex]) self._drawarcs(dc, self.arcs[self.layerindex], self.arcpens[self.layerindex]) self._drawlines(dc, self.hilight, self.hlpen) self._drawarcs(dc, self.hilightarcs, self.hlpen) self.paint_hilights(dc) dc.SelectObject(wx.NullBitmap) def repaint_partial(self): if self.showall: dc = wx.MemoryDC() dc.SelectObject(self.blitmap) for i in set(range(len(self.layersz))).difference(self.painted_layers): self.painted_layers.add(i) self._drawlines(dc, self.lines[i], self.pens[i]) self._drawarcs(dc, self.arcs[i], self.arcpens[i]) dc.SelectObject(wx.NullBitmap) def paint_hilights(self, dc = None): if self.hilightqueue.empty() and self.hilightarcsqueue.empty(): return hl = [] if not dc: dc = wx.MemoryDC() dc.SelectObject(self.blitmap) while not self.hilightqueue.empty(): hl.append(self.hilightqueue.get_nowait()) self._drawlines(dc, hl, self.hlpen) hlarcs = [] while not self.hilightarcsqueue.empty(): hlarcs.append(self.hilightarcsqueue.get_nowait()) self._drawarcs(dc, hlarcs, self.hlpen) dc.SelectObject(wx.NullBitmap) def paint(self, event): if self.dirty: self.dirty = False self.partial = False self.repaint_everything() elif self.partial: self.partial = False self.repaint_partial() self.paint_hilights() dc = wx.PaintDC(self) dc.SetBackground(wx.Brush(self.bgcolor)) dc.Clear() dc.DrawBitmap(self.blitmap, self.translate[0], self.translate[1]) if self.paint_overlay: self.paint_overlay(dc) def addfile_perlayer(self, gcode, showall = False): self.clear() self.gcode = gcode self.showall = showall generator = self.add_parsed_gcodes(gcode) generator_output = next(generator) while generator_output is not None: yield generator_output generator_output = next(generator) max_layers = len(self.layers) if hasattr(self.parent, "layerslider"): self.parent.layerslider.SetRange(0, max_layers - 1) self.parent.layerslider.SetValue(0) yield None def addfile(self, gcode = None, showall = False): generator = self.addfile_perlayer(gcode, showall) while next(generator) is not None: continue def _get_movement(self, start_pos, gline): """Takes a start position and a gcode, and returns a 3-uple containing (final position, line, arc), with line and arc being None if not used""" target = start_pos[:] target[5] = 0.0 target[6] = 0.0 if gline.current_x is not None: target[0] = gline.current_x if gline.current_y is not None: target[1] = gline.current_y if gline.current_z is not None: target[2] = gline.current_z if gline.e is not None: if gline.relative_e: target[3] += gline.e else: target[3] = gline.e if gline.f is not None: target[4] = gline.f if gline.i is not None: target[5] = gline.i if gline.j is not None: target[6] = gline.j if gline.command in ["G0", "G1"]: line = [self._x(start_pos[0]), self._y(start_pos[1]), self._x(target[0]), self._y(target[1])] return target, line, None elif gline.command in ["G2", "G3"]: # startpos, endpos, arc center arc = [self._x(start_pos[0]), self._y(start_pos[1]), self._x(target[0]), self._y(target[1]), self._x(start_pos[0] + target[5]), self._y(start_pos[1] + target[6])] if gline.command == "G2": # clockwise, reverse endpoints arc[0], arc[1], arc[2], arc[3] = arc[2], arc[3], arc[0], arc[1] return target, None, arc def _y(self, y): return self.build_dimensions[1] - (y - self.build_dimensions[4]) def _x(self, x): return x - self.build_dimensions[3] def add_parsed_gcodes(self, gcode): start_time = time.time() layer_idx = 0 while layer_idx < len(gcode.all_layers): layer = gcode.all_layers[layer_idx] has_move = False for gline in layer: if gline.is_move: has_move = True break if not has_move: yield layer_idx layer_idx += 1 continue viz_layer = len(self.layers) self.lines[viz_layer] = [] self.pens[viz_layer] = [] self.arcs[viz_layer] = [] self.arcpens[viz_layer] = [] for gline in layer: if not gline.is_move: continue target, line, arc = self._get_movement(self.lastpos[:], gline) if line is not None: self.lines[viz_layer].append(line) self.pens[viz_layer].append(self.mainpen if target[3] != self.lastpos[3] else self.travelpen) elif arc is not None: self.arcs[viz_layer].append(arc) self.arcpens[viz_layer].append(self.arcpen) self.lastpos = target # Transform into a numpy array for memory efficiency self.lines[viz_layer] = numpy.asarray(self.lines[viz_layer], dtype = numpy.float32) self.pens[viz_layer] = numpy.asarray(self.pens[viz_layer]) self.arcs[viz_layer] = numpy.asarray(self.arcs[viz_layer], dtype = numpy.float32) self.arcpens[viz_layer] = numpy.asarray(self.arcpens[viz_layer]) # Only add layer to self.layers now to prevent the display of an # unfinished layer self.layers[layer_idx] = viz_layer self.layersz.append(layer.z) # Refresh display if more than 0.2s have passed if time.time() - start_time > 0.2: start_time = time.time() self.partial = True wx.CallAfter(self.Refresh) yield layer_idx layer_idx += 1 self.dirty = True wx.CallAfter(self.Refresh) yield None def addgcodehighlight(self, gline): if gline.command not in ["G0", "G1", "G2", "G3"]: return target, line, arc = self._get_movement(self.hilightpos[:], gline) if line is not None: self.hilight.append(line) self.hilightqueue.put_nowait(line) elif arc is not None: self.hilightarcs.append(arc) self.hilightarcsqueue.put_nowait(arc) self.hilightpos = target wx.CallAfter(self.Refresh) if __name__ == '__main__': import sys app = wx.App(False) main = GvizWindow(open(sys.argv[1], "rU")) main.Show() app.MainLoop() Printrun-printrun-2.0.0rc5/printrun/injectgcode.py000066400000000000000000000036021325617007000223360ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import logging from .gui.widgets import MacroEditor from .utils import install_locale install_locale('pronterface') def injector(gcode, viz_layer, layer_idx): cb = lambda toadd: inject(gcode, viz_layer, layer_idx, toadd) z = gcode.all_layers[layer_idx].z z = z if z is not None else 0 MacroEditor(_("Inject G-Code at layer %d (Z = %.03f)") % (viz_layer, z), "", cb, True) def injector_edit(gcode, viz_layer, layer_idx): cb = lambda toadd: rewritelayer(gcode, viz_layer, layer_idx, toadd) layer = gcode.all_layers[layer_idx] z = layer.z z = z if z is not None else 0 lines = [line.raw for line in layer] MacroEditor(_("Edit G-Code of layer %d (Z = %.03f)") % (viz_layer, z), lines, cb, True) def inject(gcode, viz_layer, layer_idx, toadd): # TODO: save modified gcode after injection ? nlines = len(gcode.prepend_to_layer(toadd, layer_idx)) logging.info(_("Successfully injected %d lines at beginning of layer %d") % (nlines, viz_layer)) def rewritelayer(gcode, viz_layer, layer_idx, toadd): # TODO: save modified gcode after edit ? nlines = len(gcode.rewrite_layer(toadd, layer_idx)) logging.info(_("Successfully edited layer %d (which now contains %d lines)") % (viz_layer, nlines)) Printrun-printrun-2.0.0rc5/printrun/objectplater.py000066400000000000000000000301341325617007000225360ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . from .utils import install_locale, iconfile install_locale('plater') import logging import os import types import wx def patch_method(obj, method, replacement): orig_handler = getattr(obj, method) def wrapped(*a, **kwargs): kwargs['orig_handler'] = orig_handler return replacement(*a, **kwargs) setattr(obj, method, types.MethodType(wrapped, obj)) class PlaterPanel(wx.Panel): def __init__(self, **kwargs): self.destroy_on_done = False parent = kwargs.get("parent", None) super(PlaterPanel, self).__init__(parent = parent) self.prepare_ui(**kwargs) def prepare_ui(self, filenames = [], callback = None, parent = None, build_dimensions = None): self.filenames = filenames self.mainsizer = wx.BoxSizer(wx.HORIZONTAL) panel = self.menupanel = wx.Panel(self, -1) sizer = self.menusizer = wx.GridBagSizer() self.l = wx.ListBox(panel) sizer.Add(self.l, pos = (1, 0), span = (1, 2), flag = wx.EXPAND) sizer.AddGrowableRow(1, 1) # Clear button clearbutton = wx.Button(panel, label = _("Clear")) clearbutton.Bind(wx.EVT_BUTTON, self.clear) sizer.Add(clearbutton, pos = (2, 0), span = (1, 2), flag = wx.EXPAND) # Load button loadbutton = wx.Button(panel, label = _("Load")) loadbutton.Bind(wx.EVT_BUTTON, self.load) sizer.Add(loadbutton, pos = (0, 0), span = (1, 1), flag = wx.EXPAND) # Snap to Z = 0 button snapbutton = wx.Button(panel, label = _("Snap to Z = 0")) snapbutton.Bind(wx.EVT_BUTTON, self.snap) sizer.Add(snapbutton, pos = (3, 0), span = (1, 1), flag = wx.EXPAND) # Put at center button centerbutton = wx.Button(panel, label = _("Put at center")) centerbutton.Bind(wx.EVT_BUTTON, self.center) sizer.Add(centerbutton, pos = (3, 1), span = (1, 1), flag = wx.EXPAND) # Delete button deletebutton = wx.Button(panel, label = _("Delete")) deletebutton.Bind(wx.EVT_BUTTON, self.delete) sizer.Add(deletebutton, pos = (4, 0), span = (1, 1), flag = wx.EXPAND) # Auto arrange button autobutton = wx.Button(panel, label = _("Auto arrange")) autobutton.Bind(wx.EVT_BUTTON, self.autoplate) sizer.Add(autobutton, pos = (5, 0), span = (1, 2), flag = wx.EXPAND) # Export button exportbutton = wx.Button(panel, label = _("Export")) exportbutton.Bind(wx.EVT_BUTTON, self.export) sizer.Add(exportbutton, pos = (0, 1), span = (1, 1), flag = wx.EXPAND) if callback is not None: donebutton = wx.Button(panel, label = _("Done")) donebutton.Bind(wx.EVT_BUTTON, lambda e: self.done(e, callback)) sizer.Add(donebutton, pos = (6, 0), span = (1, 1), flag = wx.EXPAND) cancelbutton = wx.Button(panel, label = _("Cancel")) cancelbutton.Bind(wx.EVT_BUTTON, lambda e: self.Destroy()) sizer.Add(cancelbutton, pos = (6, 1), span = (1, 1), flag = wx.EXPAND) self.basedir = "." self.models = {} panel.SetSizerAndFit(sizer) self.mainsizer.Add(panel, flag = wx.EXPAND) self.SetSizer(self.mainsizer) if build_dimensions: self.build_dimensions = build_dimensions else: self.build_dimensions = [200, 200, 100, 0, 0, 0] def set_viewer(self, viewer): # Patch handle_rotation on the fly if hasattr(viewer, "handle_rotation"): def handle_rotation(self, event, orig_handler): if self.initpos is None: self.initpos = event.GetPosition() else: if event.ShiftDown(): p1 = self.initpos p2 = event.GetPosition() x1, y1, _ = self.mouse_to_3d(p1[0], p1[1]) x2, y2, _ = self.mouse_to_3d(p2[0], p2[1]) self.parent.move_shape((x2 - x1, y2 - y1)) self.initpos = p2 else: orig_handler(event) patch_method(viewer, "handle_rotation", handle_rotation) # Patch handle_wheel on the fly if hasattr(viewer, "handle_wheel"): def handle_wheel(self, event, orig_handler): if event.ShiftDown(): delta = event.GetWheelRotation() angle = 10 if delta > 0: self.parent.rotate_shape(angle / 2) else: self.parent.rotate_shape(-angle / 2) else: orig_handler(event) patch_method(viewer, "handle_wheel", handle_wheel) self.s = viewer self.mainsizer.Add(self.s, 1, wx.EXPAND) def move_shape(self, delta): """moves shape (selected in l, which is list ListBox of shapes) by an offset specified in tuple delta. Positive numbers move to (rigt, down)""" name = self.l.GetSelection() if name == wx.NOT_FOUND: return False name = self.l.GetString(name) model = self.models[name] model.offsets = [model.offsets[0] + delta[0], model.offsets[1] + delta[1], model.offsets[2] ] return True def rotate_shape(self, angle): """rotates acive shape positive angle is clockwise """ name = self.l.GetSelection() if name == wx.NOT_FOUND: return False name = self.l.GetString(name) model = self.models[name] model.rot += angle def autoplate(self, event = None): logging.info(_("Autoplating")) separation = 2 try: from printrun import packer p = packer.Packer() for i in self.models: width = abs(self.models[i].dims[0] - self.models[i].dims[1]) height = abs(self.models[i].dims[2] - self.models[i].dims[3]) p.add_rect(width, height, data = i) centerx = self.build_dimensions[0] / 2 + self.build_dimensions[3] centery = self.build_dimensions[1] / 2 + self.build_dimensions[4] rects = p.pack(padding = separation, center = packer.Vector2(centerx, centery)) for rect in rects: i = rect.data position = rect.center() self.models[i].offsets[0] = position.x self.models[i].offsets[1] = position.y except ImportError: bedsize = self.build_dimensions[0:3] cursor = [0, 0, 0] newrow = 0 max = [0, 0] for i in self.models: self.models[i].offsets[2] = -1.0 * self.models[i].dims[4] x = abs(self.models[i].dims[0] - self.models[i].dims[1]) y = abs(self.models[i].dims[2] - self.models[i].dims[3]) centre = [x / 2, y / 2] centreoffset = [self.models[i].dims[0] + centre[0], self.models[i].dims[2] + centre[1]] if (cursor[0] + x + separation) >= bedsize[0]: cursor[0] = 0 cursor[1] += newrow + separation newrow = 0 if (newrow == 0) or (newrow < y): newrow = y # To the person who works out why the offsets are applied # differently here: # Good job, it confused the hell out of me. self.models[i].offsets[0] = cursor[0] + centre[0] - centreoffset[0] self.models[i].offsets[1] = cursor[1] + centre[1] - centreoffset[1] if (max[0] == 0) or (max[0] < (cursor[0] + x)): max[0] = cursor[0] + x if (max[1] == 0) or (max[1] < (cursor[1] + x)): max[1] = cursor[1] + x cursor[0] += x + separation if (cursor[1] + y) >= bedsize[1]: logging.info(_("Bed full, sorry sir :(")) self.Refresh() return centerx = self.build_dimensions[0] / 2 + self.build_dimensions[3] centery = self.build_dimensions[1] / 2 + self.build_dimensions[4] centreoffset = [centerx - max[0] / 2, centery - max[1] / 2] for i in self.models: self.models[i].offsets[0] += centreoffset[0] self.models[i].offsets[1] += centreoffset[1] self.Refresh() def clear(self, event): result = wx.MessageBox(_('Are you sure you want to clear the grid? All unsaved changes will be lost.'), _('Clear the grid?'), wx.YES_NO | wx.ICON_QUESTION) if result == 2: self.models = {} self.l.Clear() self.Refresh() def center(self, event): i = self.l.GetSelection() if i != -1: m = self.models[self.l.GetString(i)] centerx = self.build_dimensions[0] / 2 + self.build_dimensions[3] centery = self.build_dimensions[1] / 2 + self.build_dimensions[4] m.offsets = [centerx, centery, m.offsets[2]] self.Refresh() def snap(self, event): i = self.l.GetSelection() if i != -1: m = self.models[self.l.GetString(i)] m.offsets[2] = -m.dims[4] self.Refresh() def delete(self, event): i = self.l.GetSelection() if i != -1: del self.models[self.l.GetString(i)] self.l.Delete(i) self.l.Select(self.l.GetCount() - 1) self.Refresh() def add_model(self, name, model): newname = os.path.split(name.lower())[1] if not isinstance(newname, str): newname = str(newname, "utf-8") c = 1 while newname in self.models: newname = os.path.split(name.lower())[1] newname = newname + "(%d)" % c c += 1 self.models[newname] = model self.l.Append(newname) i = self.l.GetSelection() if i == wx.NOT_FOUND: self.l.Select(0) self.l.Select(self.l.GetCount() - 1) def load(self, event): dlg = wx.FileDialog(self, _("Pick file to load"), self.basedir, style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.SetWildcard(self.load_wildcard) if dlg.ShowModal() == wx.ID_OK: name = dlg.GetPath() self.load_file(name) dlg.Destroy() def load_file(self, filename): raise NotImplementedError def export(self, event): dlg = wx.FileDialog(self, _("Pick file to save to"), self.basedir, style = wx.FD_SAVE) dlg.SetWildcard(self.save_wildcard) if dlg.ShowModal() == wx.ID_OK: name = dlg.GetPath() self.export_to(name) dlg.Destroy() def export_to(self, name): raise NotImplementedError class Plater(wx.Frame): def __init__(self, **kwargs): self.destroy_on_done = True parent = kwargs.get("parent", None) size = kwargs.get("size", (800, 580)) if "size" in kwargs: del kwargs["size"] wx.Frame.__init__(self, parent, title = _("Plate building tool"), size = size) self.SetIcon(wx.Icon(iconfile("plater.png"), wx.BITMAP_TYPE_PNG)) self.prepare_ui(**kwargs) def make_plater(panel_class): name = panel_class.__name__.replace("Panel", "") return type(name, (Plater, panel_class), {}) Printrun-printrun-2.0.0rc5/printrun/packer.py000066400000000000000000000156241325617007000213340ustar00rootroot00000000000000# Imported from python-rectangle-packer commit 32fce1aaba # https://github.com/maxretter/python-rectangle-packer # # Python Rectangle Packer - Packs rectangles around a central point # Copyright (C) 2013 Max Retter # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import math import Polygon import Polygon.Utils class Vector2: """Simple 2d vector / point class.""" def __init__(self, x=0, y=0): self.x = float(x) self.y = float(y) def __eq__(self, other): return self.x == other.x and self.y == other.y def add(self, other): return Vector2(self.x + other.x, self.y + other.y) def sub(self, other): return Vector2(self.x - other.x, self.y - other.y) def scale(self, factor): return Vector2(self.x * factor, self.y * factor) def magnitude(self): return math.sqrt(self.dot_product(self)) def unit(self): """Build unit vector.""" return self.scale(1 / self.magnitude()) def dot_product(self, other): return self.x * other.x + self.y * other.y def distance(self, other): """Distance forumla for other point.""" return math.sqrt( (other.x - self.x) ** 2 + (other.y - self.y) ** 2 ) class Rect: """Simple rectangle object.""" def __init__(self, width, height, data={}): self.width = width self.height = height self.data = data # upper left self.position = Vector2() def half(self): """Half width and height.""" return Vector2( self.width / 2, self.height / 2 ) def expand(self, width, height): """Builds a new rectangle based on this one with given offsets.""" expanded = Rect(self.width + width, self.height + height) expanded.set_center(self.center()) return expanded def point_list(self): top = self.position.y right = self.position.x + self.width bottom = self.position.y + self.height left = self.position.x return PointList([ (left, top), (right, top), (right, bottom), (left, bottom), ]) def center(self): """Center of rect calculated from position and dimensions.""" return self.position.add(self.half()) def set_center(self, center): """Set the position based on a new center point.""" self.position = center.sub(self.half()) def area(self): """Area: length * width.""" return self.width * self.height class PointList: """Methods for transforming a list of points.""" def __init__(self, points=[]): self.points = points self._polygon = None def polygon(self): """Builds a polygon from the set of points.""" if not self._polygon: self._polygon = Polygon.Polygon(self.points) return self._polygon def segments(self): """Returns a list of LineSegment objects.""" segs = [] for i, point in enumerate(self.points[1:]): index = i + 1 segs.append(LineSegment( Vector2(self.points[index - 1][0], self.points[index - 1][1]), Vector2(self.points[index][0], self.points[index][1]) )) segs.append(LineSegment( Vector2(self.points[-1][0], self.points[-1][1]), Vector2(self.points[0][0], self.points[0][1]), )) return segs class LineSegment: def __init__(self, start, end): self.start = start self.end = end def length(self): """Length of segment vector.""" return self.end.sub(self.start).magnitude() def closest_point_to_point(self, point): """Point along segment that is closest to given point.""" segment_vector = self.end.sub(self.start) point_vector = point.sub(self.start) seg_mag = segment_vector.magnitude() # project point_vector on segment_vector projection = segment_vector.dot_product(point_vector) # scalar value used to interpolate new point along segment_vector scalar = projection / seg_mag ** 2 # clamp on [0,1] scalar = 1.0 if scalar > 1.0 else scalar scalar = 0.0 if scalar < 0.0 else scalar # interpolate scalar along segment and add start point back in return self.start.add(segment_vector.unit().scale(scalar * seg_mag)) def closest_distance_to_point(self, point): """Helper method too automatically return distance.""" closest_point = self.closest_point_to_point(point) return closest_point.distance(point) class Packer: def __init__(self): self._rects = [] def add_rect(self, width, height, data={}): self._rects.append(Rect(width, height, data)) def pack(self, padding=0, center=Vector2()): # init everything placed_rects = [] sorted_rects = sorted(self._rects, key=lambda rect: -rect.area()) # double padding due to halfing later on padding *= 2 for rect in sorted_rects: if not placed_rects: # first rect, right on target. rect.set_center(center) else: # Expand each rectangle based on new rect size and padding # get a list of points # build a polygon point_lists = [ pr.expand(rect.width + padding, rect.height + padding).point_list().polygon() for pr in placed_rects ] # take the union of all the polygons (relies on + operator override) # the [0] at the end returns the first "contour", which is the only one we need bounding_points = PointList(sum( point_lists[1:], point_lists[0] )[0]) # find the closest segment closest_segments = sorted( bounding_points.segments(), key=lambda segment: segment.closest_distance_to_point(center) ) # get the closest point place_point = closest_segments[0].closest_point_to_point(center) # set the rect position rect.set_center(place_point) placed_rects.append(rect) return placed_rects Printrun-printrun-2.0.0rc5/printrun/plugins/000077500000000000000000000000001325617007000211665ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/plugins/__init__.py000066400000000000000000000014201325617007000232740ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . #from printrun.plugins.sample import SampleHandler # #PRINTCORE_HANDLER = [SampleHandler()] PRINTCORE_HANDLER = [] Printrun-printrun-2.0.0rc5/printrun/plugins/sample.py000066400000000000000000000037051325617007000230260ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . from printrun.eventhandler import PrinterEventHandler class SampleHandler(PrinterEventHandler): ''' Sample event handler for printcore. ''' def __init__(self): pass def __write(self, field, text = ""): print("%-15s - %s" % (field, text)) def on_init(self): self.__write("on_init") def on_send(self, command, gline): self.__write("on_send", command) def on_recv(self, line): self.__write("on_recv", line.strip()) def on_connect(self): self.__write("on_connect") def on_disconnect(self): self.__write("on_disconnect") def on_error(self, error): self.__write("on_error", error) def on_online(self): self.__write("on_online") def on_temp(self, line): self.__write("on_temp", line) def on_start(self, resume): self.__write("on_start", "true" if resume else "false") def on_end(self): self.__write("on_end") def on_layerchange(self, layer): self.__write("on_layerchange", "%f" % (layer)) def on_preprintsend(self, gline, index, mainqueue): self.__write("on_preprintsend", gline) def on_printsend(self, gline): self.__write("on_printsend", gline) Printrun-printrun-2.0.0rc5/printrun/power/000077500000000000000000000000001325617007000206415ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/power/__init__.py000066400000000000000000000114341325617007000227550ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import platform import logging import os if platform.system() == "Darwin": from .osx import inhibit_sleep_osx, deinhibit_sleep_osx inhibit_sleep = inhibit_sleep_osx deinhibit_sleep = deinhibit_sleep_osx elif platform.system() == "Windows": import ctypes ES_CONTINUOUS = 0x80000000 ES_SYSTEM_REQUIRED = 0x00000001 def inhibit_sleep(reason): mode = ES_CONTINUOUS | ES_SYSTEM_REQUIRED ctypes.windll.kernel32.SetThreadExecutionState(ctypes.c_int(mode)) def deinhibit_sleep(): ctypes.windll.kernel32.SetThreadExecutionState(ctypes.c_int(ES_CONTINUOUS)) else: try: import dbus inhibit_sleep_handler = None inhibit_sleep_token = None bus = dbus.SessionBus() try: # GNOME uses the right object path, try it first service_name = "org.freedesktop.ScreenSaver" proxy = bus.get_object(service_name, "/org/freedesktop/ScreenSaver") inhibit_sleep_handler = dbus.Interface(proxy, service_name) # Do a test run token = inhibit_sleep_handler.Inhibit("printrun", "test") inhibit_sleep_handler.UnInhibit(token) except dbus.DBusException: # KDE uses /ScreenSaver object path, let's try it as well proxy = bus.get_object(service_name, "/ScreenSaver") inhibit_sleep_handler = dbus.Interface(proxy, service_name) token = inhibit_sleep_handler.Inhibit("printrun", "test") inhibit_sleep_handler.UnInhibit(token) def inhibit_sleep(reason): global inhibit_sleep_handler, inhibit_sleep_token inhibit_sleep_token = inhibit_sleep_handler.Inhibit("printrun", reason) def deinhibit_sleep(): global inhibit_sleep_handler, inhibit_sleep_token if inhibit_sleep_handler is None or inhibit_sleep_token is None: return inhibit_sleep_handler.UnInhibit(inhibit_sleep_token) inhibit_sleep_token = None except Exception as e: logging.warning("Could not setup DBus for sleep inhibition: %s" % e) def inhibit_sleep(reason): return def deinhibit_sleep(): return try: import psutil def get_nice(nice, p = None): if not p: p = psutil.Process(os.getpid()) if callable(p.nice): return p.nice() else: return p.nice def set_nice(nice, p = None): if not p: p = psutil.Process(os.getpid()) if callable(p.nice): p.nice(nice) else: p.nice = nice if platform.system() != "Windows": import resource if hasattr(psutil, "RLIMIT_NICE"): nice_limit, _ = resource.getrlimit(psutil.RLIMIT_NICE) high_priority_nice = 20 - nice_limit else: high_priority_nice = 0 # RLIMIT_NICE is not available (probably OSX), let's probe # Try setting niceness to -20 .. -1 p = psutil.Process(os.getpid()) orig_nice = get_nice(p) for i in range(-20, 0): try: set_nice(i, p) high_priority_nice = i break except psutil.AccessDenied as e: pass set_nice(orig_nice, p) def set_priority(): if platform.system() == "Windows": set_nice(psutil.HIGH_PRIORITY_CLASS) else: if high_priority_nice < 0: set_nice(high_priority_nice) def reset_priority(): if platform.system() == "Windows": set_nice(psutil.NORMAL_PRIORITY_CLASS) else: if high_priority_nice < 0: set_nice(0) def powerset_print_start(reason): set_priority() inhibit_sleep(reason) def powerset_print_stop(): reset_priority() deinhibit_sleep() except ImportError as e: logging.warning("psutil unavailable, could not import power utils:" + str(e)) def powerset_print_start(reason): pass def powerset_print_stop(): pass Printrun-printrun-2.0.0rc5/printrun/power/osx.py000066400000000000000000000057751325617007000220420ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . # # Imported from http://www.benden.us/journal/2014/OS-X-Power-Management-No-Sleep-Howto/ # Copyright (c) Joseph Benden 2014 import ctypes import CoreFoundation import objc def SetUpIOFramework(): # load the IOKit library framework = ctypes.cdll.LoadLibrary( '/System/Library/Frameworks/IOKit.framework/IOKit') # declare parameters as described in IOPMLib.h framework.IOPMAssertionCreateWithName.argtypes = [ ctypes.c_void_p, # CFStringRef ctypes.c_uint32, # IOPMAssertionLevel ctypes.c_void_p, # CFStringRef ctypes.POINTER(ctypes.c_uint32)] # IOPMAssertionID framework.IOPMAssertionRelease.argtypes = [ ctypes.c_uint32] # IOPMAssertionID return framework def StringToCFString(string): # we'll need to convert our strings before use try: encoding = CoreFoundation.kCFStringEncodingASCII except AttributeError: encoding = 0x600 cfstring = CoreFoundation.CFStringCreateWithCString(None, string, encoding) return objc.pyobjc_id(cfstring.nsstring()) def AssertionCreateWithName(framework, a_type, a_level, a_reason): # this method will create an assertion using the IOKit library # several parameters a_id = ctypes.c_uint32(0) a_type = StringToCFString(a_type) a_reason = StringToCFString(a_reason) a_error = framework.IOPMAssertionCreateWithName( a_type, a_level, a_reason, ctypes.byref(a_id)) # we get back a 0 or stderr, along with a unique c_uint # representing the assertion ID so we can release it later return a_error, a_id def AssertionRelease(framework, assertion_id): # releasing the assertion is easy, and also returns a 0 on # success, or stderr otherwise return framework.IOPMAssertionRelease(assertion_id) def inhibit_sleep_osx(reason): no_idle = "NoIdleSleepAssertion" # Initialize IOKit framework if inhibit_sleep_osx.framework is None: inhibit_sleep_osx.framework = SetUpIOFramework() framework = inhibit_sleep_osx.framework # Start inhibition ret, a_id = AssertionCreateWithName(framework, no_idle, 255, reason) inhibit_sleep_osx.assertion_id = a_id return ret inhibit_sleep_osx.framework = None def deinhibit_sleep_osx(): return AssertionRelease(inhibit_sleep_osx.framework, inhibit_sleep_osx.assertion_id) Printrun-printrun-2.0.0rc5/printrun/printcore.py000066400000000000000000000667741325617007000221100ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . __version__ = "2.0.0rc5" import sys if sys.version_info.major < 3: print("You need to run this on Python 3") sys.exit(-1) from serial import Serial, SerialException, PARITY_ODD, PARITY_NONE from select import error as SelectError import threading from queue import Queue, Empty as QueueEmpty import time import platform import os import logging import traceback import errno import socket import re from functools import wraps, reduce from collections import deque from printrun import gcoder from .utils import set_utf8_locale, install_locale, decode_utf8 try: set_utf8_locale() except: pass install_locale('pronterface') from printrun.plugins import PRINTCORE_HANDLER def locked(f): @wraps(f) def inner(*args, **kw): with inner.lock: return f(*args, **kw) inner.lock = threading.Lock() return inner def control_ttyhup(port, disable_hup): """Controls the HUPCL""" if platform.system() == "Linux": if disable_hup: os.system("stty -F %s -hup" % port) else: os.system("stty -F %s hup" % port) def enable_hup(port): control_ttyhup(port, False) def disable_hup(port): control_ttyhup(port, True) class printcore(): def __init__(self, port = None, baud = None, dtr=None): """Initializes a printcore instance. Pass the port and baud rate to connect immediately""" self.baud = None self.dtr = None self.port = None self.analyzer = gcoder.GCode() # Serial instance connected to the printer, should be None when # disconnected self.printer = None # clear to send, enabled after responses # FIXME: should probably be changed to a sliding window approach self.clear = 0 # The printer has responded to the initial command and is active self.online = False # is a print currently running, true if printing, false if paused self.printing = False self.mainqueue = None self.priqueue = Queue(0) self.queueindex = 0 self.lineno = 0 self.resendfrom = -1 self.paused = False self.sentlines = {} self.log = deque(maxlen = 10000) self.sent = [] self.writefailures = 0 self.tempcb = None # impl (wholeline) self.recvcb = None # impl (wholeline) self.sendcb = None # impl (wholeline) self.preprintsendcb = None # impl (wholeline) self.printsendcb = None # impl (wholeline) self.layerchangecb = None # impl (wholeline) self.errorcb = None # impl (wholeline) self.startcb = None # impl () self.endcb = None # impl () self.onlinecb = None # impl () self.loud = False # emit sent and received lines to terminal self.tcp_streaming_mode = False self.greetings = ['start', 'Grbl '] self.wait = 0 # default wait period for send(), send_now() self.read_thread = None self.stop_read_thread = False self.send_thread = None self.stop_send_thread = False self.print_thread = None self.event_handler = PRINTCORE_HANDLER for handler in self.event_handler: try: handler.on_init() except: logging.error(traceback.format_exc()) if port is not None and baud is not None: self.connect(port, baud) self.xy_feedrate = None self.z_feedrate = None def addEventHandler(self, handler): ''' Adds an event handler. @param handler: The handler to be added. ''' self.event_handler.append(handler) def logError(self, error): for handler in self.event_handler: try: handler.on_error(error) except: logging.error(traceback.format_exc()) if self.errorcb: try: self.errorcb(error) except: logging.error(traceback.format_exc()) else: logging.error(error) @locked def disconnect(self): """Disconnects from printer and pauses the print """ if self.printer: if self.read_thread: self.stop_read_thread = True if threading.current_thread() != self.read_thread: self.read_thread.join() self.read_thread = None if self.print_thread: self.printing = False self.print_thread.join() self._stop_sender() try: self.printer.close() except socket.error: pass except OSError: pass for handler in self.event_handler: try: handler.on_disconnect() except: logging.error(traceback.format_exc()) self.printer = None self.online = False self.printing = False @locked def connect(self, port = None, baud = None, dtr=None): """Set port and baudrate if given, then connect to printer """ if self.printer: self.disconnect() if port is not None: self.port = port if baud is not None: self.baud = baud if dtr is not None: self.dtr = dtr if self.port is not None and self.baud is not None: # Connect to socket if "port" is an IP, device if not host_regexp = re.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$") is_serial = True if ":" in port: bits = port.split(":") if len(bits) == 2: hostname = bits[0] try: port = int(bits[1]) if host_regexp.match(hostname) and 1 <= port <= 65535: is_serial = False except: pass self.writefailures = 0 if not is_serial: self.printer_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.printer_tcp.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) self.timeout = 0.25 self.printer_tcp.settimeout(1.0) try: self.printer_tcp.connect((hostname, port)) self.printer_tcp.settimeout(self.timeout) self.printer = self.printer_tcp.makefile() except socket.error as e: if(e.strerror is None): e.strerror="" self.logError(_("Could not connect to %s:%s:") % (hostname, port) + "\n" + _("Socket error %s:") % e.errno + "\n" + e.strerror) self.printer = None self.printer_tcp = None return else: disable_hup(self.port) self.printer_tcp = None try: self.printer = Serial(port = self.port, baudrate = self.baud, timeout = 0.25, parity = PARITY_ODD) self.printer.close() self.printer.parity = PARITY_NONE try: #this appears not to work on many platforms, so we're going to call it but not care if it fails self.printer.setDTR(dtr); except: #self.logError(_("Could not set DTR on this platform")) #not sure whether to output an error message pass self.printer.open() except SerialException as e: self.logError(_("Could not connect to %s at baudrate %s:") % (self.port, self.baud) + "\n" + _("Serial error: %s") % e) self.printer = None return except IOError as e: self.logError(_("Could not connect to %s at baudrate %s:") % (self.port, self.baud) + "\n" + _("IO error: %s") % e) self.printer = None return for handler in self.event_handler: try: handler.on_connect() except: logging.error(traceback.format_exc()) self.stop_read_thread = False self.read_thread = threading.Thread(target = self._listen) self.read_thread.start() self._start_sender() def reset(self): """Reset the printer """ if self.printer and not self.printer_tcp: self.printer.setDTR(1) time.sleep(0.2) self.printer.setDTR(0) def _readline(self): try: try: try: line = self.printer.readline().decode('ascii') except UnicodeDecodeError: self.logError(_("Got rubbish reply from %s at baudrate %s:") % (self.port, self.baud) + "\n" + _("Maybe a bad baudrate?")) return None if self.printer_tcp and not line: raise OSError(-1, "Read EOF from socket") except socket.timeout: return "" if len(line) > 1: self.log.append(line) for handler in self.event_handler: try: handler.on_recv(line) except: logging.error(traceback.format_exc()) if self.recvcb: try: self.recvcb(line) except: self.logError(traceback.format_exc()) if self.loud: logging.info("RECV: %s" % line.rstrip()) return line except SelectError as e: if 'Bad file descriptor' in e.args[1]: self.logError(_("Can't read from printer (disconnected?) (SelectError {0}): {1}").format(e.errno, decode_utf8(e.strerror))) return None else: self.logError(_("SelectError ({0}): {1}").format(e.errno, decode_utf8(e.strerror))) raise except SerialException as e: self.logError(_("Can't read from printer (disconnected?) (SerialException): {0}").format(decode_utf8(str(e)))) return None except socket.error as e: self.logError(_("Can't read from printer (disconnected?) (Socket error {0}): {1}").format(e.errno, decode_utf8(e.strerror))) return None except OSError as e: if e.errno == errno.EAGAIN: # Not a real error, no data was available return "" self.logError(_("Can't read from printer (disconnected?) (OS Error {0}): {1}").format(e.errno, e.strerror)) return None def _listen_can_continue(self): if self.printer_tcp: return not self.stop_read_thread and self.printer return (not self.stop_read_thread and self.printer and self.printer.isOpen()) def _listen_until_online(self): while not self.online and self._listen_can_continue(): self._send("M105") if self.writefailures >= 4: logging.error(_("Aborting connection attempt after 4 failed writes.")) return empty_lines = 0 while self._listen_can_continue(): line = self._readline() if line is None: break # connection problem # workaround cases where M105 was sent before printer Serial # was online an empty line means read timeout was reached, # meaning no data was received thus we count those empty lines, # and once we have seen 15 in a row, we just break and send a # new M105 # 15 was chosen based on the fact that it gives enough time for # Gen7 bootloader to time out, and that the non received M105 # issues should be quite rare so we can wait for a long time # before resending if not line: empty_lines += 1 if empty_lines == 15: break else: empty_lines = 0 if line.startswith(tuple(self.greetings)) \ or line.startswith('ok') or "T:" in line: self.online = True for handler in self.event_handler: try: handler.on_online() except: logging.error(traceback.format_exc()) if self.onlinecb: try: self.onlinecb() except: self.logError(traceback.format_exc()) return def _listen(self): """This function acts on messages from the firmware """ self.clear = True if not self.printing: self._listen_until_online() while self._listen_can_continue(): line = self._readline() if line is None: break if line.startswith('DEBUG_'): continue if line.startswith(tuple(self.greetings)) or line.startswith('ok'): self.clear = True if line.startswith('ok') and "T:" in line: for handler in self.event_handler: try: handler.on_temp(line) except: logging.error(traceback.format_exc()) if line.startswith('ok') and "T:" in line and self.tempcb: # callback for temp, status, whatever try: self.tempcb(line) except: self.logError(traceback.format_exc()) elif line.startswith('Error'): self.logError(line) # Teststrings for resend parsing # Firmware exp. result # line="rs N2 Expected checksum 67" # Teacup 2 if line.lower().startswith("resend") or line.startswith("rs"): for haystack in ["N:", "N", ":"]: line = line.replace(haystack, " ") linewords = line.split() while len(linewords) != 0: try: toresend = int(linewords.pop(0)) self.resendfrom = toresend break except: pass self.clear = True self.clear = True def _start_sender(self): self.stop_send_thread = False self.send_thread = threading.Thread(target = self._sender) self.send_thread.start() def _stop_sender(self): if self.send_thread: self.stop_send_thread = True self.send_thread.join() self.send_thread = None def _sender(self): while not self.stop_send_thread: try: command = self.priqueue.get(True, 0.1) except QueueEmpty: continue while self.printer and self.printing and not self.clear: time.sleep(0.001) self._send(command) while self.printer and self.printing and not self.clear: time.sleep(0.001) def _checksum(self, command): return reduce(lambda x, y: x ^ y, map(ord, command)) def startprint(self, gcode, startindex = 0): """Start a print, gcode is an array of gcode commands. returns True on success, False if already printing. The print queue will be replaced with the contents of the data array, the next line will be set to 0 and the firmware notified. Printing will then start in a parallel thread. """ if self.printing or not self.online or not self.printer: return False self.queueindex = startindex self.mainqueue = gcode self.printing = True self.lineno = 0 self.resendfrom = -1 self._send("M110", -1, True) if not gcode or not gcode.lines: return True self.clear = False resuming = (startindex != 0) self.print_thread = threading.Thread(target = self._print, kwargs = {"resuming": resuming}) self.print_thread.start() return True def cancelprint(self): self.pause() self.paused = False self.mainqueue = None self.clear = True # run a simple script if it exists, no multithreading def runSmallScript(self, filename): if filename is None: return f = None try: with open(filename) as f: for i in f: l = i.replace("\n", "") l = l[:l.find(";")] # remove comments self.send_now(l) except: pass def pause(self): """Pauses the print, saving the current position. """ if not self.printing: return False self.paused = True self.printing = False # try joining the print thread: enclose it in try/except because we # might be calling it from the thread itself try: self.print_thread.join() except RuntimeError as e: if e.message == "cannot join current thread": pass else: self.logError(traceback.format_exc()) except: self.logError(traceback.format_exc()) self.print_thread = None # saves the status self.pauseX = self.analyzer.abs_x self.pauseY = self.analyzer.abs_y self.pauseZ = self.analyzer.abs_z self.pauseE = self.analyzer.abs_e self.pauseF = self.analyzer.current_f self.pauseRelative = self.analyzer.relative def resume(self): """Resumes a paused print. """ if not self.paused: return False if self.paused: # restores the status self.send_now("G90") # go to absolute coordinates xyFeedString = "" zFeedString = "" if self.xy_feedrate is not None: xyFeedString = " F" + str(self.xy_feedrate) if self.z_feedrate is not None: zFeedString = " F" + str(self.z_feedrate) self.send_now("G1 X%s Y%s%s" % (self.pauseX, self.pauseY, xyFeedString)) self.send_now("G1 Z" + str(self.pauseZ) + zFeedString) self.send_now("G92 E" + str(self.pauseE)) # go back to relative if needed if self.pauseRelative: self.send_now("G91") # reset old feed rate self.send_now("G1 F" + str(self.pauseF)) self.paused = False self.printing = True self.print_thread = threading.Thread(target = self._print, kwargs = {"resuming": True}) self.print_thread.start() def send(self, command, wait = 0): """Adds a command to the checksummed main command queue if printing, or sends the command immediately if not printing""" if self.online: if self.printing: self.mainqueue.append(command) else: self.priqueue.put_nowait(command) else: self.logError(_("Not connected to printer.")) def send_now(self, command, wait = 0): """Sends a command to the printer ahead of the command queue, without a checksum""" if self.online: self.priqueue.put_nowait(command) else: self.logError(_("Not connected to printer.")) def _print(self, resuming = False): self._stop_sender() try: for handler in self.event_handler: try: handler.on_start(resuming) except: logging.error(traceback.format_exc()) if self.startcb: # callback for printing started try: self.startcb(resuming) except: self.logError(_("Print start callback failed with:") + "\n" + traceback.format_exc()) while self.printing and self.printer and self.online: self._sendnext() self.sentlines = {} self.log.clear() self.sent = [] for handler in self.event_handler: try: handler.on_end() except: logging.error(traceback.format_exc()) if self.endcb: # callback for printing done try: self.endcb() except: self.logError(_("Print end callback failed with:") + "\n" + traceback.format_exc()) except: self.logError(_("Print thread died due to the following error:") + "\n" + traceback.format_exc()) finally: self.print_thread = None self._start_sender() def process_host_command(self, command): """only ;@pause command is implemented as a host command in printcore, but hosts are free to reimplement this method""" command = command.lstrip() if command.startswith(";@pause"): self.pause() def _sendnext(self): if not self.printer: return while self.printer and self.printing and not self.clear: time.sleep(0.001) # Only wait for oks when using serial connections or when not using tcp # in streaming mode if not self.printer_tcp or not self.tcp_streaming_mode: self.clear = False if not (self.printing and self.printer and self.online): self.clear = True return if self.resendfrom < self.lineno and self.resendfrom > -1: self._send(self.sentlines[self.resendfrom], self.resendfrom, False) self.resendfrom += 1 return self.resendfrom = -1 if not self.priqueue.empty(): self._send(self.priqueue.get_nowait()) self.priqueue.task_done() return if self.printing and self.queueindex < len(self.mainqueue): (layer, line) = self.mainqueue.idxs(self.queueindex) gline = self.mainqueue.all_layers[layer][line] if self.queueindex > 0: (prev_layer, prev_line) = self.mainqueue.idxs(self.queueindex - 1) if prev_layer != layer: for handler in self.event_handler: try: handler.on_layerchange(layer) except: logging.error(traceback.format_exc()) if self.layerchangecb and self.queueindex > 0: (prev_layer, prev_line) = self.mainqueue.idxs(self.queueindex - 1) if prev_layer != layer: try: self.layerchangecb(layer) except: self.logError(traceback.format_exc()) for handler in self.event_handler: try: handler.on_preprintsend(gline, self.queueindex, self.mainqueue) except: logging.error(traceback.format_exc()) if self.preprintsendcb: if self.queueindex + 1 < len(self.mainqueue): (next_layer, next_line) = self.mainqueue.idxs(self.queueindex + 1) next_gline = self.mainqueue.all_layers[next_layer][next_line] else: next_gline = None gline = self.preprintsendcb(gline, next_gline) if gline is None: self.queueindex += 1 self.clear = True return tline = gline.raw if tline.lstrip().startswith(";@"): # check for host command self.process_host_command(tline) self.queueindex += 1 self.clear = True return # Strip comments tline = gcoder.gcode_strip_comment_exp.sub("", tline).strip() if tline: self._send(tline, self.lineno, True) self.lineno += 1 for handler in self.event_handler: try: handler.on_printsend(gline) except: logging.error(traceback.format_exc()) if self.printsendcb: try: self.printsendcb(gline) except: self.logError(traceback.format_exc()) else: self.clear = True self.queueindex += 1 else: self.printing = False self.clear = True if not self.paused: self.queueindex = 0 self.lineno = 0 self._send("M110", -1, True) def _send(self, command, lineno = 0, calcchecksum = False): # Only add checksums if over serial (tcp does the flow control itself) if calcchecksum and not self.printer_tcp: prefix = "N" + str(lineno) + " " + command command = prefix + "*" + str(self._checksum(prefix)) if "M110" not in command: self.sentlines[lineno] = command if self.printer: self.sent.append(command) # run the command through the analyzer gline = None try: gline = self.analyzer.append(command, store = False) except: logging.warning(_("Could not analyze command %s:") % command + "\n" + traceback.format_exc()) if self.loud: logging.info("SENT: %s" % command) for handler in self.event_handler: try: handler.on_send(command, gline) except: logging.error(traceback.format_exc()) if self.sendcb: try: self.sendcb(command, gline) except: self.logError(traceback.format_exc()) try: self.printer.write((command + "\n").encode('ascii')) if self.printer_tcp: try: self.printer.flush() except socket.timeout: pass self.writefailures = 0 except socket.error as e: if e.errno is None: self.logError(_("Can't write to printer (disconnected ?):") + "\n" + traceback.format_exc()) else: self.logError(_("Can't write to printer (disconnected?) (Socket error {0}): {1}").format(e.errno, decode_utf8(e.strerror))) self.writefailures += 1 except SerialException as e: self.logError(_("Can't write to printer (disconnected?) (SerialException): {0}").format(decode_utf8(str(e)))) self.writefailures += 1 except RuntimeError as e: self.logError(_("Socket connection broken, disconnected. ({0}): {1}").format(e.errno, decode_utf8(e.strerror))) self.writefailures += 1 Printrun-printrun-2.0.0rc5/printrun/projectlayer.py000066400000000000000000001130301325617007000225600ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import xml.etree.ElementTree import wx import wx.lib.agw.floatspin as floatspin import os import time import zipfile import tempfile import shutil from cairosvg.surface import PNGSurface import io import imghdr import copy import re from collections import OrderedDict import math class DisplayFrame(wx.Frame): def __init__(self, parent, title, res = (1024, 768), printer = None, scale = 1.0, offset = (0, 0)): wx.Frame.__init__(self, parent = parent, title = title, size = res) self.printer = printer self.control_frame = parent self.pic = wx.StaticBitmap(self) self.bitmap = wx.Bitmap(*res) self.bbitmap = wx.Bitmap(*res) self.slicer = 'bitmap' self.dpi = 96 dc = wx.MemoryDC() dc.SelectObject(self.bbitmap) dc.SetBackground(wx.Brush("black")) dc.Clear() dc.SelectObject(wx.NullBitmap) self.SetBackgroundColour("black") self.pic.Hide() self.SetDoubleBuffered(True) self.SetPosition((self.control_frame.GetSize().x, 0)) self.Show() self.scale = scale self.index = 0 self.size = res self.offset = offset self.running = False self.layer_red = False def clear_layer(self): try: dc = wx.MemoryDC() dc.SelectObject(self.bitmap) dc.SetBackground(wx.Brush("black")) dc.Clear() self.pic.SetBitmap(self.bitmap) self.pic.Show() self.Refresh() except: raise pass def resize(self, res = (1024, 768)): self.bitmap = wx.Bitmap(*res) self.bbitmap = wx.Bitmap(*res) dc = wx.MemoryDC() dc.SelectObject(self.bbitmap) dc.SetBackground(wx.Brush("black")) dc.Clear() dc.SelectObject(wx.NullBitmap) def draw_layer(self, image): try: dc = wx.MemoryDC() dc.SelectObject(self.bitmap) dc.SetBackground(wx.Brush("black")) dc.Clear() if self.slicer == 'Slic3r' or self.slicer == 'Skeinforge': if self.scale != 1.0: layercopy = copy.deepcopy(image) height = float(layercopy.get('height').replace('m', '')) width = float(layercopy.get('width').replace('m', '')) layercopy.set('height', str(height * self.scale) + 'mm') layercopy.set('width', str(width * self.scale) + 'mm') layercopy.set('viewBox', '0 0 ' + str(width * self.scale) + ' ' + str(height * self.scale)) g = layercopy.find("{http://www.w3.org/2000/svg}g") g.set('transform', 'scale(' + str(self.scale) + ')') stream = io.StringIO(PNGSurface.convert(dpi = self.dpi, bytestring = xml.etree.ElementTree.tostring(layercopy))) else: stream = io.StringIO(PNGSurface.convert(dpi = self.dpi, bytestring = xml.etree.ElementTree.tostring(image))) pngImage = wx.ImageFromStream(stream) # print "w:", pngImage.Width, ", dpi:", self.dpi, ", w (mm): ",(pngImage.Width / self.dpi) * 25.4 if self.layer_red: pngImage = pngImage.AdjustChannels(1, 0, 0, 1) dc.DrawBitmap(wx.BitmapFromImage(pngImage), self.offset[0], self.offset[1], True) elif self.slicer == 'bitmap': if isinstance(image, str): image = wx.Image(image) if self.layer_red: image = image.AdjustChannels(1, 0, 0, 1) dc.DrawBitmap(wx.BitmapFromImage(image.Scale(image.Width * self.scale, image.Height * self.scale)), self.offset[0], -self.offset[1], True) else: raise Exception(self.slicer + " is an unknown method.") self.pic.SetBitmap(self.bitmap) self.pic.Show() self.Refresh() except: raise pass def show_img_delay(self, image): print("Showing", str(time.clock())) self.control_frame.set_current_layer(self.index) self.draw_layer(image) wx.FutureCall(1000 * self.interval, self.hide_pic_and_rise) def rise(self): if (self.direction == "Top Down"): print("Lowering", str(time.clock())) else: print("Rising", str(time.clock())) if self.printer is not None and self.printer.online: self.printer.send_now("G91") if (self.prelift_gcode): for line in self.prelift_gcode.split('\n'): if line: self.printer.send_now(line) if (self.direction == "Top Down"): self.printer.send_now("G1 Z-%f F%g" % (self.overshoot, self.z_axis_rate,)) self.printer.send_now("G1 Z%f F%g" % (self.overshoot - self.thickness, self.z_axis_rate,)) else: # self.direction == "Bottom Up" self.printer.send_now("G1 Z%f F%g" % (self.overshoot, self.z_axis_rate,)) self.printer.send_now("G1 Z-%f F%g" % (self.overshoot - self.thickness, self.z_axis_rate,)) if (self.postlift_gcode): for line in self.postlift_gcode.split('\n'): if line: self.printer.send_now(line) self.printer.send_now("G90") else: time.sleep(self.pause) wx.FutureCall(1000 * self.pause, self.next_img) def hide_pic(self): print("Hiding", str(time.clock())) self.pic.Hide() def hide_pic_and_rise(self): wx.CallAfter(self.hide_pic) wx.FutureCall(500, self.rise) def next_img(self): if not self.running: return if self.index < len(self.layers): print(self.index) wx.CallAfter(self.show_img_delay, self.layers[self.index]) self.index += 1 else: print("end") wx.CallAfter(self.pic.Hide) wx.CallAfter(self.Refresh) def present(self, layers, interval = 0.5, pause = 0.2, overshoot = 0.0, z_axis_rate = 200, prelift_gcode = "", postlift_gcode = "", direction = "Top Down", thickness = 0.4, scale = 1, size = (1024, 768), offset = (0, 0), layer_red = False): wx.CallAfter(self.pic.Hide) wx.CallAfter(self.Refresh) self.layers = layers self.scale = scale self.thickness = thickness self.size = size self.interval = interval self.pause = pause self.overshoot = overshoot self.z_axis_rate = z_axis_rate self.prelift_gcode = prelift_gcode self.postlift_gcode = postlift_gcode self.direction = direction self.layer_red = layer_red self.offset = offset self.index = 0 self.running = True self.next_img() class SettingsFrame(wx.Frame): def _set_setting(self, name, value): if self.pronterface: self.pronterface.set(name, value) def _get_setting(self, name, val): if self.pronterface: try: return getattr(self.pronterface.settings, name) except AttributeError: return val else: return val def __init__(self, parent, printer = None): wx.Frame.__init__(self, parent, title = "ProjectLayer Control", style = (wx.DEFAULT_FRAME_STYLE | wx.WS_EX_CONTEXTHELP)) self.SetExtraStyle(wx.FRAME_EX_CONTEXTHELP) self.pronterface = parent self.display_frame = DisplayFrame(self, title = "ProjectLayer Display", printer = printer) self.panel = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) buttonbox = wx.StaticBoxSizer(wx.StaticBox(self.panel, label = "Controls"), wx.HORIZONTAL) load_button = wx.Button(self.panel, -1, "Load") load_button.Bind(wx.EVT_BUTTON, self.load_file) load_button.SetHelpText("Choose an SVG file created from Slic3r or Skeinforge, or a zip file of bitmap images (with extension: .3dlp.zip).") buttonbox.Add(load_button, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5) present_button = wx.Button(self.panel, -1, "Present") present_button.Bind(wx.EVT_BUTTON, self.start_present) present_button.SetHelpText("Starts the presentation of the slices.") buttonbox.Add(present_button, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5) self.pause_button = wx.Button(self.panel, -1, "Pause") self.pause_button.Bind(wx.EVT_BUTTON, self.pause_present) self.pause_button.SetHelpText("Pauses the presentation. Can be resumed afterwards by clicking this button, or restarted by clicking present again.") buttonbox.Add(self.pause_button, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5) stop_button = wx.Button(self.panel, -1, "Stop") stop_button.Bind(wx.EVT_BUTTON, self.stop_present) stop_button.SetHelpText("Stops presenting the slices.") buttonbox.Add(stop_button, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5) self.help_button = wx.ContextHelpButton(self.panel) buttonbox.Add(self.help_button, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5) fieldboxsizer = wx.StaticBoxSizer(wx.StaticBox(self.panel, label = "Settings"), wx.VERTICAL) fieldsizer = wx.GridBagSizer(10, 10) # Left Column fieldsizer.Add(wx.StaticText(self.panel, -1, "Layer (mm):"), pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.thickness = wx.TextCtrl(self.panel, -1, str(self._get_setting("project_layer", "0.1")), size = (125, -1)) self.thickness.Bind(wx.EVT_TEXT, self.update_thickness) self.thickness.SetHelpText("The thickness of each slice. Should match the value used to slice the model. SVG files update this value automatically, 3dlp.zip files have to be manually entered.") fieldsizer.Add(self.thickness, pos = (0, 1)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Exposure (s):"), pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.interval = wx.TextCtrl(self.panel, -1, str(self._get_setting("project_interval", "0.5")), size = (125, -1)) self.interval.Bind(wx.EVT_TEXT, self.update_interval) self.interval.SetHelpText("How long each slice should be displayed.") fieldsizer.Add(self.interval, pos = (1, 1)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Blank (s):"), pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.pause = wx.TextCtrl(self.panel, -1, str(self._get_setting("project_pause", "0.5")), size = (125, -1)) self.pause.Bind(wx.EVT_TEXT, self.update_pause) self.pause.SetHelpText("The pause length between slices. This should take into account any movement of the Z axis, plus time to prepare the resin surface (sliding, tilting, sweeping, etc).") fieldsizer.Add(self.pause, pos = (2, 1)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Scale:"), pos = (3, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.scale = wx.SpinCtrlDouble(self.panel, -1, initial = self._get_setting('project_scale', 1.0), inc = 0.1, size = (125, -1)) self.scale.SetDigits(3) self.scale.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_scale) self.scale.SetHelpText("The additional scaling of each slice.") fieldsizer.Add(self.scale, pos = (3, 1)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Direction:"), pos = (4, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.direction = wx.ComboBox(self.panel, -1, choices = ["Top Down", "Bottom Up"], value = self._get_setting('project_direction', "Top Down"), size = (125, -1)) self.direction.Bind(wx.EVT_COMBOBOX, self.update_direction) self.direction.SetHelpText("The direction the Z axis should move. Top Down is where the projector is above the model, Bottom up is where the projector is below the model.") fieldsizer.Add(self.direction, pos = (4, 1), flag = wx.ALIGN_CENTER_VERTICAL) fieldsizer.Add(wx.StaticText(self.panel, -1, "Overshoot (mm):"), pos = (5, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.overshoot = wx.SpinCtrlDouble(self.panel, -1, initial = self._get_setting('project_overshoot', 3.0), inc = 0.1, min = 0, size = (125, -1)) self.overshoot.SetDigits(1) self.overshoot.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_overshoot) self.overshoot.SetHelpText("How far the axis should move beyond the next slice position for each slice. For Top Down printers this would dunk the model under the resi and then return. For Bottom Up printers this would raise the base away from the vat and then return.") fieldsizer.Add(self.overshoot, pos = (5, 1)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Pre-lift Gcode:"), pos = (6, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.prelift_gcode = wx.TextCtrl(self.panel, -1, str(self._get_setting("project_prelift_gcode", "").replace("\\n", '\n')), size = (-1, 35), style = wx.TE_MULTILINE) self.prelift_gcode.SetHelpText("Additional gcode to run before raising the Z axis. Be sure to take into account any additional time needed in the pause value, and be careful what gcode is added!") self.prelift_gcode.Bind(wx.EVT_TEXT, self.update_prelift_gcode) fieldsizer.Add(self.prelift_gcode, pos = (6, 1), span = (2, 1)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Post-lift Gcode:"), pos = (6, 2), flag = wx.ALIGN_CENTER_VERTICAL) self.postlift_gcode = wx.TextCtrl(self.panel, -1, str(self._get_setting("project_postlift_gcode", "").replace("\\n", '\n')), size = (-1, 35), style = wx.TE_MULTILINE) self.postlift_gcode.SetHelpText("Additional gcode to run after raising the Z axis. Be sure to take into account any additional time needed in the pause value, and be careful what gcode is added!") self.postlift_gcode.Bind(wx.EVT_TEXT, self.update_postlift_gcode) fieldsizer.Add(self.postlift_gcode, pos = (6, 3), span = (2, 1)) # Right Column fieldsizer.Add(wx.StaticText(self.panel, -1, "X (px):"), pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL) projectX = int(math.floor(float(self._get_setting("project_x", 1920)))) self.X = wx.SpinCtrl(self.panel, -1, str(projectX), max = 999999, size = (125, -1)) self.X.Bind(wx.EVT_SPINCTRL, self.update_resolution) self.X.SetHelpText("The projector resolution in the X axis.") fieldsizer.Add(self.X, pos = (0, 3)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Y (px):"), pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL) projectY = int(math.floor(float(self._get_setting("project_y", 1200)))) self.Y = wx.SpinCtrl(self.panel, -1, str(projectY), max = 999999, size = (125, -1)) self.Y.Bind(wx.EVT_SPINCTRL, self.update_resolution) self.Y.SetHelpText("The projector resolution in the Y axis.") fieldsizer.Add(self.Y, pos = (1, 3)) fieldsizer.Add(wx.StaticText(self.panel, -1, "OffsetX (mm):"), pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL) self.offset_X = wx.SpinCtrlDouble(self.panel, -1, initial = self._get_setting("project_offset_x", 0.0), inc = 1, size = (125, -1)) self.offset_X.SetDigits(1) self.offset_X.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_offset) self.offset_X.SetHelpText("How far the slice should be offset from the edge in the X axis.") fieldsizer.Add(self.offset_X, pos = (2, 3)) fieldsizer.Add(wx.StaticText(self.panel, -1, "OffsetY (mm):"), pos = (3, 2), flag = wx.ALIGN_CENTER_VERTICAL) self.offset_Y = wx.SpinCtrlDouble(self.panel, -1, initial = self._get_setting("project_offset_y", 0.0), inc = 1, size = (125, -1)) self.offset_Y.SetDigits(1) self.offset_Y.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_offset) self.offset_Y.SetHelpText("How far the slice should be offset from the edge in the Y axis.") fieldsizer.Add(self.offset_Y, pos = (3, 3)) fieldsizer.Add(wx.StaticText(self.panel, -1, "ProjectedX (mm):"), pos = (4, 2), flag = wx.ALIGN_CENTER_VERTICAL) self.projected_X_mm = wx.SpinCtrlDouble(self.panel, -1, initial = self._get_setting("project_projected_x", 505.0), inc = 1, size = (125, -1)) self.projected_X_mm.SetDigits(1) self.projected_X_mm.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_projected_Xmm) self.projected_X_mm.SetHelpText("The actual width of the entire projected image. Use the Calibrate grid to show the full size of the projected image, and measure the width at the same level where the slice will be projected onto the resin.") fieldsizer.Add(self.projected_X_mm, pos = (4, 3)) fieldsizer.Add(wx.StaticText(self.panel, -1, "Z Axis Speed (mm/min):"), pos = (5, 2), flag = wx.ALIGN_CENTER_VERTICAL) self.z_axis_rate = wx.SpinCtrl(self.panel, -1, str(self._get_setting("project_z_axis_rate", 200)), max = 9999, size = (125, -1)) self.z_axis_rate.Bind(wx.EVT_SPINCTRL, self.update_z_axis_rate) self.z_axis_rate.SetHelpText("Speed of the Z axis in mm/minute. Take into account that slower rates may require a longer pause value.") fieldsizer.Add(self.z_axis_rate, pos = (5, 3)) fieldboxsizer.Add(fieldsizer) # Display displayboxsizer = wx.StaticBoxSizer(wx.StaticBox(self.panel, label = "Display"), wx.VERTICAL) displaysizer = wx.GridBagSizer(10, 10) displaysizer.Add(wx.StaticText(self.panel, -1, "Fullscreen:"), pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL) self.fullscreen = wx.CheckBox(self.panel, -1) self.fullscreen.Bind(wx.EVT_CHECKBOX, self.update_fullscreen) self.fullscreen.SetHelpText("Toggles the project screen to full size.") displaysizer.Add(self.fullscreen, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL) displaysizer.Add(wx.StaticText(self.panel, -1, "Calibrate:"), pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL) self.calibrate = wx.CheckBox(self.panel, -1) self.calibrate.Bind(wx.EVT_CHECKBOX, self.show_calibrate) self.calibrate.SetHelpText("Toggles the calibration grid. Each grid should be 10mmx10mm in size. Use the grid to ensure the projected size is correct. See also the help for the ProjectedX field.") displaysizer.Add(self.calibrate, pos = (0, 3), flag = wx.ALIGN_CENTER_VERTICAL) displaysizer.Add(wx.StaticText(self.panel, -1, "1st Layer:"), pos = (0, 4), flag = wx.ALIGN_CENTER_VERTICAL) first_layer_boxer = wx.BoxSizer(wx.HORIZONTAL) self.first_layer = wx.CheckBox(self.panel, -1) self.first_layer.Bind(wx.EVT_CHECKBOX, self.show_first_layer) self.first_layer.SetHelpText("Displays the first layer of the model. Use this to project the first layer for longer so it holds to the base. Note: this value does not affect the first layer when the \"Present\" run is started, it should be used manually.") first_layer_boxer.Add(self.first_layer, flag = wx.ALIGN_CENTER_VERTICAL) first_layer_boxer.Add(wx.StaticText(self.panel, -1, " (s):"), flag = wx.ALIGN_CENTER_VERTICAL) self.show_first_layer_timer = wx.SpinCtrlDouble(self.panel, -1, initial = -1, inc = 1, size = (125, -1)) self.show_first_layer_timer.SetDigits(1) self.show_first_layer_timer.SetHelpText("How long to display the first layer for. -1 = unlimited.") first_layer_boxer.Add(self.show_first_layer_timer, flag = wx.ALIGN_CENTER_VERTICAL) displaysizer.Add(first_layer_boxer, pos = (0, 6), flag = wx.ALIGN_CENTER_VERTICAL) displaysizer.Add(wx.StaticText(self.panel, -1, "Red:"), pos = (0, 7), flag = wx.ALIGN_CENTER_VERTICAL) self.layer_red = wx.CheckBox(self.panel, -1) self.layer_red.Bind(wx.EVT_CHECKBOX, self.show_layer_red) self.layer_red.SetHelpText("Toggles whether the image should be red. Useful for positioning whilst resin is in the printer as it should not cause a reaction.") displaysizer.Add(self.layer_red, pos = (0, 8), flag = wx.ALIGN_CENTER_VERTICAL) displayboxsizer.Add(displaysizer) # Info infosizer = wx.StaticBoxSizer(wx.StaticBox(self.panel, label = "Info"), wx.VERTICAL) infofieldsizer = wx.GridBagSizer(10, 10) filelabel = wx.StaticText(self.panel, -1, "File:") filelabel.SetHelpText("The name of the model currently loaded.") infofieldsizer.Add(filelabel, pos = (0, 0)) self.filename = wx.StaticText(self.panel, -1, "") infofieldsizer.Add(self.filename, pos = (0, 1)) totallayerslabel = wx.StaticText(self.panel, -1, "Total Layers:") totallayerslabel.SetHelpText("The total number of layers found in the model.") infofieldsizer.Add(totallayerslabel, pos = (1, 0)) self.total_layers = wx.StaticText(self.panel, -1) infofieldsizer.Add(self.total_layers, pos = (1, 1)) currentlayerlabel = wx.StaticText(self.panel, -1, "Current Layer:") currentlayerlabel.SetHelpText("The current layer being displayed.") infofieldsizer.Add(currentlayerlabel, pos = (2, 0)) self.current_layer = wx.StaticText(self.panel, -1, "0") infofieldsizer.Add(self.current_layer, pos = (2, 1)) estimatedtimelabel = wx.StaticText(self.panel, -1, "Estimated Time:") estimatedtimelabel.SetHelpText("An estimate of the remaining time until print completion.") infofieldsizer.Add(estimatedtimelabel, pos = (3, 0)) self.estimated_time = wx.StaticText(self.panel, -1, "") infofieldsizer.Add(self.estimated_time, pos = (3, 1)) infosizer.Add(infofieldsizer) # vbox.Add(buttonbox, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP | wx.BOTTOM, border = 10) vbox.Add(fieldboxsizer, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 10) vbox.Add(displayboxsizer, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 10) vbox.Add(infosizer, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 10) self.panel.SetSizer(vbox) self.panel.Fit() self.Fit() self.SetPosition((0, 0)) self.Show() def __del__(self): if hasattr(self, 'image_dir') and self.image_dir != '': shutil.rmtree(self.image_dir) if self.display_frame: self.display_frame.Destroy() def set_total_layers(self, total): self.total_layers.SetLabel(str(total)) self.set_estimated_time() def set_current_layer(self, index): self.current_layer.SetLabel(str(index)) self.set_estimated_time() def display_filename(self, name): self.filename.SetLabel(name) def set_estimated_time(self): if not hasattr(self, 'layers'): return current_layer = int(self.current_layer.GetLabel()) remaining_layers = len(self.layers[0]) - current_layer # 0.5 for delay between hide and rise estimated_time = remaining_layers * (float(self.interval.GetValue()) + float(self.pause.GetValue()) + 0.5) self.estimated_time.SetLabel(time.strftime("%H:%M:%S", time.gmtime(estimated_time))) def parse_svg(self, name): et = xml.etree.ElementTree.ElementTree(file = name) # xml.etree.ElementTree.dump(et) slicer = 'Slic3r' if et.getroot().find('{http://www.w3.org/2000/svg}metadata') is None else 'Skeinforge' zlast = 0 zdiff = 0 ol = [] if (slicer == 'Slic3r'): height = et.getroot().get('height').replace('m', '') width = et.getroot().get('width').replace('m', '') for i in et.findall("{http://www.w3.org/2000/svg}g"): z = float(i.get('{http://slic3r.org/namespaces/slic3r}z')) zdiff = z - zlast zlast = z svgSnippet = xml.etree.ElementTree.Element('{http://www.w3.org/2000/svg}svg') svgSnippet.set('height', height + 'mm') svgSnippet.set('width', width + 'mm') svgSnippet.set('viewBox', '0 0 ' + width + ' ' + height) svgSnippet.set('style', 'background-color:black;fill:white;') svgSnippet.append(i) ol += [svgSnippet] else: slice_layers = et.findall("{http://www.w3.org/2000/svg}metadata")[0].findall("{http://www.reprap.org/slice}layers")[0] minX = slice_layers.get('minX') maxX = slice_layers.get('maxX') minY = slice_layers.get('minY') maxY = slice_layers.get('maxY') height = str(abs(float(minY)) + abs(float(maxY))) width = str(abs(float(minX)) + abs(float(maxX))) for g in et.findall("{http://www.w3.org/2000/svg}g")[0].findall("{http://www.w3.org/2000/svg}g"): g.set('transform', '') text_element = g.findall("{http://www.w3.org/2000/svg}text")[0] g.remove(text_element) path_elements = g.findall("{http://www.w3.org/2000/svg}path") for p in path_elements: p.set('transform', 'translate(' + maxX + ',' + maxY + ')') p.set('fill', 'white') z = float(g.get('id').split("z:")[-1]) zdiff = z - zlast zlast = z svgSnippet = xml.etree.ElementTree.Element('{http://www.w3.org/2000/svg}svg') svgSnippet.set('height', height + 'mm') svgSnippet.set('width', width + 'mm') svgSnippet.set('viewBox', '0 0 ' + width + ' ' + height) svgSnippet.set('style', 'background-color:black;fill:white;') svgSnippet.append(g) ol += [svgSnippet] return ol, zdiff, slicer def parse_3DLP_zip(self, name): if not zipfile.is_zipfile(name): raise Exception(name + " is not a zip file!") accepted_image_types = ['gif', 'tiff', 'jpg', 'jpeg', 'bmp', 'png'] zipFile = zipfile.ZipFile(name, 'r') self.image_dir = tempfile.mkdtemp() zipFile.extractall(self.image_dir) ol = [] # Note: the following funky code extracts any numbers from the filenames, matches # them with the original then sorts them. It allows for filenames of the # format: abc_1.png, which would be followed by abc_10.png alphabetically. os.chdir(self.image_dir) vals = [f for f in os.listdir('.') if os.path.isfile(f)] keys = (int(re.search('\d+', p).group()) for p in vals) imagefilesDict = dict(zip(keys, vals)) imagefilesOrderedDict = OrderedDict(sorted(imagefilesDict.items(), key = lambda t: t[0])) for f in imagefilesOrderedDict.values(): path = os.path.join(self.image_dir, f) if os.path.isfile(path) and imghdr.what(path) in accepted_image_types: ol.append(path) return ol, -1, "bitmap" def load_file(self, event): dlg = wx.FileDialog(self, ("Open file to print"), style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.SetWildcard(("Slic3r or Skeinforge svg files (;*.svg;*.SVG;);3DLP Zip (;*.3dlp.zip;)")) if dlg.ShowModal() == wx.ID_OK: name = dlg.GetPath() if not(os.path.exists(name)): self.status.SetStatusText(("File not found!")) return if name.endswith(".3dlp.zip"): layers = self.parse_3DLP_zip(name) layerHeight = float(self.thickness.GetValue()) else: layers = self.parse_svg(name) layerHeight = layers[1] self.thickness.SetValue(str(layers[1])) print("Layer thickness detected:", layerHeight, "mm") print(len(layers[0]), "layers found, total height", layerHeight * len(layers[0]), "mm") self.layers = layers self.set_total_layers(len(layers[0])) self.set_current_layer(0) self.current_filename = os.path.basename(name) self.display_filename(self.current_filename) self.slicer = layers[2] self.display_frame.slicer = self.slicer dlg.Destroy() def show_calibrate(self, event): if self.calibrate.IsChecked(): self.present_calibrate(event) else: if hasattr(self, 'layers'): self.display_frame.slicer = self.layers[2] self.display_frame.scale = float(self.scale.GetValue()) self.display_frame.clear_layer() def show_first_layer(self, event): if self.first_layer.IsChecked(): self.present_first_layer(event) else: if hasattr(self, 'layers'): self.display_frame.slicer = self.layers[2] self.display_frame.scale = float(self.scale.GetValue()) self.display_frame.clear_layer() def show_layer_red(self, event): self.display_frame.layer_red = self.layer_red.IsChecked() def present_calibrate(self, event): if self.calibrate.IsChecked(): self.display_frame.Raise() self.display_frame.offset = (float(self.offset_X.GetValue()), -float(self.offset_Y.GetValue())) self.display_frame.scale = 1.0 resolution_x_pixels = int(self.X.GetValue()) resolution_y_pixels = int(self.Y.GetValue()) gridBitmap = wx.Bitmap(resolution_x_pixels, resolution_y_pixels) dc = wx.MemoryDC() dc.SelectObject(gridBitmap) dc.SetBackground(wx.Brush("black")) dc.Clear() dc.SetPen(wx.Pen("red", 7)) dc.DrawLine(0, 0, resolution_x_pixels, 0) dc.DrawLine(0, 0, 0, resolution_y_pixels) dc.DrawLine(resolution_x_pixels, 0, resolution_x_pixels, resolution_y_pixels) dc.DrawLine(0, resolution_y_pixels, resolution_x_pixels, resolution_y_pixels) dc.SetPen(wx.Pen("red", 2)) aspectRatio = float(resolution_x_pixels) / float(resolution_y_pixels) projectedXmm = float(self.projected_X_mm.GetValue()) projectedYmm = round(projectedXmm / aspectRatio) pixelsXPerMM = resolution_x_pixels / projectedXmm pixelsYPerMM = resolution_y_pixels / projectedYmm gridCountX = int(projectedXmm / 10) gridCountY = int(projectedYmm / 10) for y in range(0, gridCountY + 1): for x in range(0, gridCountX + 1): dc.DrawLine(0, y * (pixelsYPerMM * 10), resolution_x_pixels, y * (pixelsYPerMM * 10)) dc.DrawLine(x * (pixelsXPerMM * 10), 0, x * (pixelsXPerMM * 10), resolution_y_pixels) self.first_layer.SetValue(False) self.display_frame.slicer = 'bitmap' self.display_frame.draw_layer(gridBitmap.ConvertToImage()) def present_first_layer(self, event): if (self.first_layer.GetValue()): if not hasattr(self, "layers"): print("No model loaded!") self.first_layer.SetValue(False) return self.display_frame.offset = (float(self.offset_X.GetValue()), float(self.offset_Y.GetValue())) self.display_frame.scale = float(self.scale.GetValue()) self.display_frame.slicer = self.layers[2] self.display_frame.dpi = self.get_dpi() self.display_frame.draw_layer(copy.deepcopy(self.layers[0][0])) self.calibrate.SetValue(False) if self.show_first_layer_timer != -1.0: def unpresent_first_layer(): self.display_frame.clear_layer() self.first_layer.SetValue(False) wx.CallLater(self.show_first_layer_timer.GetValue() * 1000, unpresent_first_layer) def update_offset(self, event): offset_x = float(self.offset_X.GetValue()) offset_y = float(self.offset_Y.GetValue()) self.display_frame.offset = (offset_x, offset_y) self._set_setting('project_offset_x', offset_x) self._set_setting('project_offset_y', offset_y) self.refresh_display(event) def refresh_display(self, event): self.present_calibrate(event) self.present_first_layer(event) def update_thickness(self, event): self._set_setting('project_layer', self.thickness.GetValue()) self.refresh_display(event) def update_projected_Xmm(self, event): self._set_setting('project_projected_x', self.projected_X_mm.GetValue()) self.refresh_display(event) def update_scale(self, event): scale = float(self.scale.GetValue()) self.display_frame.scale = scale self._set_setting('project_scale', scale) self.refresh_display(event) def update_interval(self, event): interval = float(self.interval.GetValue()) self.display_frame.interval = interval self._set_setting('project_interval', interval) self.set_estimated_time() self.refresh_display(event) def update_pause(self, event): pause = float(self.pause.GetValue()) self.display_frame.pause = pause self._set_setting('project_pause', pause) self.set_estimated_time() self.refresh_display(event) def update_overshoot(self, event): overshoot = float(self.overshoot.GetValue()) self.display_frame.pause = overshoot self._set_setting('project_overshoot', overshoot) def update_prelift_gcode(self, event): prelift_gcode = self.prelift_gcode.GetValue().replace('\n', "\\n") self.display_frame.prelift_gcode = prelift_gcode self._set_setting('project_prelift_gcode', prelift_gcode) def update_postlift_gcode(self, event): postlift_gcode = self.postlift_gcode.GetValue().replace('\n', "\\n") self.display_frame.postlift_gcode = postlift_gcode self._set_setting('project_postlift_gcode', postlift_gcode) def update_z_axis_rate(self, event): z_axis_rate = int(self.z_axis_rate.GetValue()) self.display_frame.z_axis_rate = z_axis_rate self._set_setting('project_z_axis_rate', z_axis_rate) def update_direction(self, event): direction = self.direction.GetValue() self.display_frame.direction = direction self._set_setting('project_direction', direction) def update_fullscreen(self, event): if (self.fullscreen.GetValue()): self.display_frame.ShowFullScreen(1) else: self.display_frame.ShowFullScreen(0) self.refresh_display(event) def update_resolution(self, event): x = int(self.X.GetValue()) y = int(self.Y.GetValue()) self.display_frame.resize((x, y)) self._set_setting('project_x', x) self._set_setting('project_y', y) self.refresh_display(event) def get_dpi(self): resolution_x_pixels = int(self.X.GetValue()) projected_x_mm = float(self.projected_X_mm.GetValue()) projected_x_inches = projected_x_mm / 25.4 return resolution_x_pixels / projected_x_inches def start_present(self, event): if not hasattr(self, "layers"): print("No model loaded!") return self.pause_button.SetLabel("Pause") self.set_current_layer(0) self.display_frame.Raise() if (self.fullscreen.GetValue()): self.display_frame.ShowFullScreen(1) self.display_frame.slicer = self.layers[2] self.display_frame.dpi = self.get_dpi() self.display_frame.present(self.layers[0][:], thickness = float(self.thickness.GetValue()), interval = float(self.interval.GetValue()), scale = float(self.scale.GetValue()), pause = float(self.pause.GetValue()), overshoot = float(self.overshoot.GetValue()), z_axis_rate = int(self.z_axis_rate.GetValue()), prelift_gcode = self.prelift_gcode.GetValue(), postlift_gcode = self.postlift_gcode.GetValue(), direction = self.direction.GetValue(), size = (float(self.X.GetValue()), float(self.Y.GetValue())), offset = (float(self.offset_X.GetValue()), float(self.offset_Y.GetValue())), layer_red = self.layer_red.IsChecked()) def stop_present(self, event): print("Stop") self.pause_button.SetLabel("Pause") self.set_current_layer(0) self.display_frame.running = False def pause_present(self, event): if self.pause_button.GetLabel() == 'Pause': print("Pause") self.pause_button.SetLabel("Continue") self.display_frame.running = False else: print("Continue") self.pause_button.SetLabel("Pause") self.display_frame.running = True self.display_frame.next_img() if __name__ == "__main__": provider = wx.SimpleHelpProvider() wx.HelpProvider_Set(provider) a = wx.App() SettingsFrame(None).Show() a.MainLoop() Printrun-printrun-2.0.0rc5/printrun/pronsole.py000066400000000000000000002142161325617007000217260ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import cmd import glob import os import platform import time import threading import sys import shutil import subprocess import codecs import argparse import locale import logging import traceback import re from appdirs import user_cache_dir, user_config_dir, user_data_dir from serial import SerialException from . import printcore from .utils import install_locale, run_command, get_command_output, \ format_time, format_duration, RemainingTimeEstimator, \ get_home_pos, parse_build_dimensions, parse_temperature_report, \ setup_logging install_locale('pronterface') from .settings import Settings, BuildDimensionsSetting from .power import powerset_print_start, powerset_print_stop from printrun import gcoder from .rpc import ProntRPC from printrun.spoolmanager import spoolmanager if os.name == "nt": try: import winreg except: pass READLINE = True try: import readline try: readline.rl.mode.show_all_if_ambiguous = "on" # config pyreadline on windows except: pass except: READLINE = False # neither readline module is available tempreading_exp = re.compile("(^T:| T:)") REPORT_NONE = 0 REPORT_POS = 1 REPORT_TEMP = 2 REPORT_MANUAL = 4 DEG = "\N{DEGREE SIGN}" class Status: def __init__(self): self.extruder_temp = 0 self.extruder_temp_target = 0 self.bed_temp = 0 self.bed_temp_target = 0 self.print_job = None self.print_job_progress = 1.0 def update_tempreading(self, tempstr): temps = parse_temperature_report(tempstr) if "T0" in temps and temps["T0"][0]: hotend_temp = float(temps["T0"][0]) elif "T" in temps and temps["T"][0]: hotend_temp = float(temps["T"][0]) else: hotend_temp = None if "T0" in temps and temps["T0"][1]: hotend_setpoint = float(temps["T0"][1]) elif "T" in temps and temps["T"][1]: hotend_setpoint = float(temps["T"][1]) else: hotend_setpoint = None if hotend_temp is not None: self.extruder_temp = hotend_temp if hotend_setpoint is not None: self.extruder_temp_target = hotend_setpoint bed_temp = float(temps["B"][0]) if "B" in temps and temps["B"][0] else None if bed_temp is not None: self.bed_temp = bed_temp setpoint = temps["B"][1] if setpoint: self.bed_temp_target = float(setpoint) @property def bed_enabled(self): return self.bed_temp != 0 @property def extruder_enabled(self): return self.extruder_temp != 0 class pronsole(cmd.Cmd): def __init__(self): cmd.Cmd.__init__(self) if not READLINE: self.completekey = None self.status = Status() self.dynamic_temp = False self.compute_eta = None self.statuscheck = False self.status_thread = None self.monitor_interval = 3 self.p = printcore.printcore() self.p.recvcb = self.recvcb self.p.startcb = self.startcb self.p.endcb = self.endcb self.p.layerchangecb = self.layer_change_cb self.p.process_host_command = self.process_host_command self.recvlisteners = [] self.in_macro = False self.p.onlinecb = self.online self.p.errorcb = self.logError self.fgcode = None self.filename = None self.rpc_server = None self.curlayer = 0 self.sdlisting = 0 self.sdlisting_echo = 0 self.sdfiles = [] self.paused = False self.sdprinting = 0 self.uploading = 0 # Unused, just for pronterface generalization self.temps = {"pla": "185", "abs": "230", "off": "0"} self.bedtemps = {"pla": "60", "abs": "110", "off": "0"} self.percentdone = 0 self.posreport = "" self.tempreadings = "" self.userm114 = 0 self.userm105 = 0 self.m105_waitcycles = 0 self.macros = {} self.rc_loaded = False self.processing_rc = False self.processing_args = False self.settings = Settings(self) self.settings._add(BuildDimensionsSetting("build_dimensions", "200x200x100+0+0+0+0+0+0", _("Build dimensions"), _("Dimensions of Build Platform\n & optional offset of origin\n & optional switch position\n\nExamples:\n XXXxYYY\n XXX,YYY,ZZZ\n XXXxYYYxZZZ+OffX+OffY+OffZ\nXXXxYYYxZZZ+OffX+OffY+OffZ+HomeX+HomeY+HomeZ"), "Printer"), self.update_build_dimensions) self.settings._port_list = self.scanserial self.settings._temperature_abs_cb = self.set_temp_preset self.settings._temperature_pla_cb = self.set_temp_preset self.settings._bedtemp_abs_cb = self.set_temp_preset self.settings._bedtemp_pla_cb = self.set_temp_preset self.update_build_dimensions(None, self.settings.build_dimensions) self.update_tcp_streaming_mode(None, self.settings.tcp_streaming_mode) self.monitoring = 0 self.starttime = 0 self.extra_print_time = 0 self.silent = False self.commandprefixes = 'MGT$' self.promptstrs = {"offline": "%(bold)soffline>%(normal)s ", "fallback": "%(bold)s%(red)s%(port)s%(white)s PC>%(normal)s ", "macro": "%(bold)s..>%(normal)s ", "online": "%(bold)s%(green)s%(port)s%(white)s %(extruder_temp_fancy)s%(progress_fancy)s>%(normal)s "} self.spool_manager = spoolmanager.SpoolManager(self) self.current_tool = 0 # Keep track of the extruder being used self.cache_dir = os.path.join(user_cache_dir("Printrun")) self.history_file = os.path.join(self.cache_dir,"history") self.config_dir = os.path.join(user_config_dir("Printrun")) self.data_dir = os.path.join(user_data_dir("Printrun")) self.lineignorepattern=re.compile("ok ?\d*$|.*busy: ?processing|.*busy: ?heating|.*Active Extruder: ?\d*$") # -------------------------------------------------------------- # General console handling # -------------------------------------------------------------- def postloop(self): self.p.disconnect() cmd.Cmd.postloop(self) def preloop(self): self.log(_("Welcome to the printer console! Type \"help\" for a list of available commands.")) self.prompt = self.promptf() cmd.Cmd.preloop(self) # We replace this function, defined in cmd.py . # It's default behavior with regards to Ctr-C # and Ctr-D doesn't make much sense... def cmdloop(self, intro=None): """Repeatedly issue a prompt, accept input, parse an initial prefix off the received input, and dispatch to action methods, passing them the remainder of the line as argument. """ self.preloop() if self.use_rawinput and self.completekey: try: import readline self.old_completer = readline.get_completer() readline.set_completer(self.complete) readline.parse_and_bind(self.completekey + ": complete") history = (self.history_file) if not os.path.exists(history): if not os.path.exists(self.cache_dir): os.makedirs(self.cache_dir) history = os.path.join(self.cache_dir, "history") if os.path.exists(history): readline.read_history_file(history) except ImportError: pass try: if intro is not None: self.intro = intro if self.intro: self.stdout.write(str(self.intro) + "\n") stop = None while not stop: if self.cmdqueue: line = self.cmdqueue.pop(0) else: if self.use_rawinput: try: line = input(self.prompt) except EOFError: self.log("") self.do_exit("") except KeyboardInterrupt: self.log("") line = "" else: self.stdout.write(self.prompt) self.stdout.flush() line = self.stdin.readline() if not len(line): line = "" else: line = line.rstrip('\r\n') line = self.precmd(line) stop = self.onecmd(line) stop = self.postcmd(stop, line) self.postloop() finally: if self.use_rawinput and self.completekey: try: import readline readline.set_completer(self.old_completer) readline.write_history_file(self.history_file) except ImportError: pass def confirm(self): y_or_n = input("y/n: ") if y_or_n == "y": return True elif y_or_n != "n": return self.confirm() return False def log(self, *msg): msg = "".join(str(i) for i in msg) logging.info(msg) def logError(self, *msg): msg = "".join(str(i) for i in msg) logging.error(msg) if not self.settings.error_command: return output = get_command_output(self.settings.error_command, {"$m": msg}) if output: self.log("Error command output:") self.log(output.rstrip()) def promptf(self): """A function to generate prompts so that we can do dynamic prompts. """ if self.in_macro: promptstr = self.promptstrs["macro"] elif not self.p.online: promptstr = self.promptstrs["offline"] elif self.status.extruder_enabled: promptstr = self.promptstrs["online"] else: promptstr = self.promptstrs["fallback"] if "%" not in promptstr: return promptstr else: specials = {} specials["extruder_temp"] = str(int(self.status.extruder_temp)) specials["extruder_temp_target"] = str(int(self.status.extruder_temp_target)) specials["port"] = self.settings.port[5:] if self.status.extruder_temp_target == 0: specials["extruder_temp_fancy"] = str(int(self.status.extruder_temp)) + DEG else: specials["extruder_temp_fancy"] = "%s%s/%s%s" % (str(int(self.status.extruder_temp)), DEG, str(int(self.status.extruder_temp_target)), DEG) if self.p.printing: progress = int(1000 * float(self.p.queueindex) / len(self.p.mainqueue)) / 10 elif self.sdprinting: progress = self.percentdone else: progress = 0.0 specials["progress"] = str(progress) if self.p.printing or self.sdprinting: specials["progress_fancy"] = " " + str(progress) + "%" else: specials["progress_fancy"] = "" specials["red"] = "\033[31m" specials["green"] = "\033[32m" specials["white"] = "\033[37m" specials["bold"] = "\033[01m" specials["normal"] = "\033[00m" return promptstr % specials def postcmd(self, stop, line): """ A hook we override to generate prompts after each command is executed, for the next prompt. We also use it to send M105 commands so that temp info gets updated for the prompt.""" if self.p.online and self.dynamic_temp: self.p.send_now("M105") self.prompt = self.promptf() return stop def kill(self): self.statuscheck = False if self.status_thread: self.status_thread.join() self.status_thread = None if self.rpc_server is not None: self.rpc_server.shutdown() def write_prompt(self): sys.stdout.write(self.promptf()) sys.stdout.flush() def help_help(self, l = ""): self.do_help("") def do_gcodes(self, l = ""): self.help_gcodes() def help_gcodes(self): self.log("Gcodes are passed through to the printer as they are") def precmd(self, line): if line.upper().startswith("M114"): self.userm114 += 1 elif line.upper().startswith("M105"): self.userm105 += 1 return line def help_shell(self): self.log("Executes a python command. Example:") self.log("! os.listdir('.')") def do_shell(self, l): exec(l) def emptyline(self): """Called when an empty line is entered - do not remove""" pass def default(self, l): if l[0].upper() in self.commandprefixes.upper(): if self.p and self.p.online: if not self.p.loud: self.log("SENDING:" + l.upper()) self.p.send_now(l.upper()) else: self.logError(_("Printer is not online.")) return elif l[0] == "@": if self.p and self.p.online: if not self.p.loud: self.log("SENDING:" + l[1:]) self.p.send_now(l[1:]) else: self.logError(_("Printer is not online.")) return else: cmd.Cmd.default(self, l) def do_exit(self, l): if self.status.extruder_temp_target != 0: self.log("Setting extruder temp to 0") self.p.send_now("M104 S0.0") if self.status.bed_enabled: if self.status.bed_temp_target != 0: self.log("Setting bed temp to 0") self.p.send_now("M140 S0.0") self.log("Disconnecting from printer...") if self.p.printing: self.log(_("Are you sure you want to exit while printing?\n\ (this will terminate the print).")) if not self.confirm(): return self.log(_("Exiting program. Goodbye!")) self.p.disconnect() self.kill() sys.exit() def help_exit(self): self.log(_("Disconnects from the printer and exits the program.")) # -------------------------------------------------------------- # Macro handling # -------------------------------------------------------------- def complete_macro(self, text, line, begidx, endidx): if (len(line.split()) == 2 and line[-1] != " ") or (len(line.split()) == 1 and line[-1] == " "): return [i for i in self.macros.keys() if i.startswith(text)] elif len(line.split()) == 3 or (len(line.split()) == 2 and line[-1] == " "): return [i for i in ["/D", "/S"] + self.completenames(text) if i.startswith(text)] else: return [] def hook_macro(self, l): l = l.rstrip() ls = l.lstrip() ws = l[:len(l) - len(ls)] # just leading whitespace if len(ws) == 0: self.end_macro() # pass the unprocessed line to regular command processor to not require empty line in .pronsolerc return self.onecmd(l) self.cur_macro_def += l + "\n" def end_macro(self): if "onecmd" in self.__dict__: del self.onecmd # remove override self.in_macro = False self.prompt = self.promptf() if self.cur_macro_def != "": self.macros[self.cur_macro_name] = self.cur_macro_def macro = self.compile_macro(self.cur_macro_name, self.cur_macro_def) setattr(self.__class__, "do_" + self.cur_macro_name, lambda self, largs, macro = macro: macro(self, *largs.split())) setattr(self.__class__, "help_" + self.cur_macro_name, lambda self, macro_name = self.cur_macro_name: self.subhelp_macro(macro_name)) if not self.processing_rc: self.log("Macro '" + self.cur_macro_name + "' defined") # save it if not self.processing_args: macro_key = "macro " + self.cur_macro_name macro_def = macro_key if "\n" in self.cur_macro_def: macro_def += "\n" else: macro_def += " " macro_def += self.cur_macro_def self.save_in_rc(macro_key, macro_def) else: self.logError("Empty macro - cancelled") del self.cur_macro_name, self.cur_macro_def def compile_macro_line(self, line): line = line.rstrip() ls = line.lstrip() ws = line[:len(line) - len(ls)] # just leading whitespace if ls == "" or ls.startswith('#'): return "" # no code if ls.startswith('!'): return ws + ls[1:] + "\n" # python mode else: ls = ls.replace('"', '\\"') # need to escape double quotes ret = ws + 'self.precmd("' + ls + '".format(*arg))\n' # parametric command mode return ret + ws + 'self.onecmd("' + ls + '".format(*arg))\n' def compile_macro(self, macro_name, macro_def): if macro_def.strip() == "": self.logError("Empty macro - cancelled") return macro = None namespace={} pycode = "def macro(self,*arg):\n" if "\n" not in macro_def.strip(): pycode += self.compile_macro_line(" " + macro_def.strip()) else: lines = macro_def.split("\n") for l in lines: pycode += self.compile_macro_line(l) exec(pycode,namespace) try: macro=namespace['macro'] except: pass return macro def start_macro(self, macro_name, prev_definition = "", suppress_instructions = False): if not self.processing_rc and not suppress_instructions: self.logError("Enter macro using indented lines, end with empty line") self.cur_macro_name = macro_name self.cur_macro_def = "" self.onecmd = self.hook_macro # override onecmd temporarily self.in_macro = False self.prompt = self.promptf() def delete_macro(self, macro_name): if macro_name in self.macros.keys(): delattr(self.__class__, "do_" + macro_name) del self.macros[macro_name] self.log("Macro '" + macro_name + "' removed") if not self.processing_rc and not self.processing_args: self.save_in_rc("macro " + macro_name, "") else: self.logError("Macro '" + macro_name + "' is not defined") def do_macro(self, args): if args.strip() == "": self.print_topics("User-defined macros", [str(k) for k in self.macros.keys()], 15, 80) return arglist = args.split(None, 1) macro_name = arglist[0] if macro_name not in self.macros and hasattr(self.__class__, "do_" + macro_name): self.logError("Name '" + macro_name + "' is being used by built-in command") return if len(arglist) == 2: macro_def = arglist[1] if macro_def.lower() == "/d": self.delete_macro(macro_name) return if macro_def.lower() == "/s": self.subhelp_macro(macro_name) return self.cur_macro_def = macro_def self.cur_macro_name = macro_name self.end_macro() return if macro_name in self.macros: self.start_macro(macro_name, self.macros[macro_name]) else: self.start_macro(macro_name) def help_macro(self): self.log("Define single-line macro: macro ") self.log("Define multi-line macro: macro ") self.log("Enter macro definition in indented lines. Use {0} .. {N} to substitute macro arguments") self.log("Enter python code, prefixed with ! Use arg[0] .. arg[N] to substitute macro arguments") self.log("Delete macro: macro /d") self.log("Show macro definition: macro /s") self.log("'macro' without arguments displays list of defined macros") def subhelp_macro(self, macro_name): if macro_name in self.macros.keys(): macro_def = self.macros[macro_name] if "\n" in macro_def: self.log("Macro '" + macro_name + "' defined as:") self.log(self.macros[macro_name] + "----------------") else: self.log("Macro '" + macro_name + "' defined as: '" + macro_def + "'") else: self.logError("Macro '" + macro_name + "' is not defined") # -------------------------------------------------------------- # Configuration handling # -------------------------------------------------------------- def set(self, var, str): try: t = type(getattr(self.settings, var)) value = self.settings._set(var, str) if not self.processing_rc and not self.processing_args: self.save_in_rc("set " + var, "set %s %s" % (var, value)) except AttributeError: logging.debug(_("Unknown variable '%s'") % var) except ValueError as ve: if hasattr(ve, "from_validator"): self.logError(_("Bad value %s for variable '%s': %s") % (str, var, ve.args[0])) else: self.logError(_("Bad value for variable '%s', expecting %s (%s)") % (var, repr(t)[1:-1], ve.args[0])) def do_set(self, argl): args = argl.split(None, 1) if len(args) < 1: for k in [kk for kk in dir(self.settings) if not kk.startswith("_")]: self.log("%s = %s" % (k, str(getattr(self.settings, k)))) return if len(args) < 2: # Try getting the default value of the setting to check whether it # actually exists try: getattr(self.settings, args[0]) except AttributeError: logging.warning("Unknown variable '%s'" % args[0]) return self.set(args[0], args[1]) def help_set(self): self.log("Set variable: set ") self.log("Show variable: set ") self.log("'set' without arguments displays all variables") def complete_set(self, text, line, begidx, endidx): if (len(line.split()) == 2 and line[-1] != " ") or (len(line.split()) == 1 and line[-1] == " "): return [i for i in dir(self.settings) if not i.startswith("_") and i.startswith(text)] elif len(line.split()) == 3 or (len(line.split()) == 2 and line[-1] == " "): return [i for i in self.settings._tabcomplete(line.split()[1]) if i.startswith(text)] else: return [] def load_rc(self, rc_filename): self.processing_rc = True try: rc = codecs.open(rc_filename, "r", "utf-8") self.rc_filename = os.path.abspath(rc_filename) for rc_cmd in rc: if not rc_cmd.lstrip().startswith("#"): self.onecmd(rc_cmd) rc.close() if hasattr(self, "cur_macro_def"): self.end_macro() self.rc_loaded = True finally: self.processing_rc = False def load_default_rc(self): # Check if a configuration file exists in an "old" location, # if not, use the "new" location provided by appdirs if os.path.exists(os.path.expanduser("~/.pronsolerc")): config = os.path.expanduser("~/.pronsolerc") elif os.path.exists(os.path.expanduser("~/printrunconf.ini")): config = os.path.expanduser("~/printrunconf.ini") else: if not os.path.exists(self.config_dir): os.makedirs(self.config_dir) if platform.system() == 'Windows': config_name = "printrunconf.ini" else: config_name = "pronsolerc" config = os.path.join(self.config_dir, config_name) # Load the default configuration file try: self.load_rc(config) except FileNotFoundError: # Make sure the filename is initialized, # and create the file if it doesn't exist self.rc_filename = config open(self.rc_filename, 'a').close() def save_in_rc(self, key, definition): """ Saves or updates macro or other definitions in .pronsolerc key is prefix that determines what is being defined/updated (e.g. 'macro foo') definition is the full definition (that is written to file). (e.g. 'macro foo move x 10') Set key as empty string to just add (and not overwrite) Set definition as empty string to remove it from .pronsolerc To delete line from .pronsolerc, set key as the line contents, and definition as empty string Only first definition with given key is overwritten. Updates are made in the same file position. Additions are made to the end of the file. """ rci, rco = None, None if definition != "" and not definition.endswith("\n"): definition += "\n" try: written = False if os.path.exists(self.rc_filename): if not os.path.exists(self.cache_dir): os.makedirs(self.cache_dir) configcache = os.path.join(self.cache_dir, os.path.basename(self.rc_filename)) configcachebak = configcache + "~bak" configcachenew = configcache + "~new" shutil.copy(self.rc_filename, configcachebak) rci = codecs.open(configcachebak, "r", "utf-8") rco = codecs.open(configcachenew, "w", "utf-8") if rci is not None: overwriting = False for rc_cmd in rci: l = rc_cmd.rstrip() ls = l.lstrip() ws = l[:len(l) - len(ls)] # just leading whitespace if overwriting and len(ws) == 0: overwriting = False if not written and key != "" and rc_cmd.startswith(key) and (rc_cmd + "\n")[len(key)].isspace(): overwriting = True written = True rco.write(definition) if not overwriting: rco.write(rc_cmd) if not rc_cmd.endswith("\n"): rco.write("\n") if not written: rco.write(definition) if rci is not None: rci.close() rco.close() shutil.move(configcachenew, self.rc_filename) # if definition != "": # self.log("Saved '"+key+"' to '"+self.rc_filename+"'") # else: # self.log("Removed '"+key+"' from '"+self.rc_filename+"'") except Exception as e: self.logError("Saving failed for ", key + ":", str(e)) finally: del rci, rco # -------------------------------------------------------------- # Configuration update callbacks # -------------------------------------------------------------- def update_build_dimensions(self, param, value): self.build_dimensions_list = parse_build_dimensions(value) self.p.analyzer.home_pos = get_home_pos(self.build_dimensions_list) def update_tcp_streaming_mode(self, param, value): self.p.tcp_streaming_mode = self.settings.tcp_streaming_mode def update_rpc_server(self, param, value): if value: if self.rpc_server is None: self.rpc_server = ProntRPC(self) else: if self.rpc_server is not None: self.rpc_server.shutdown() self.rpc_server = None # -------------------------------------------------------------- # Command line options handling # -------------------------------------------------------------- def add_cmdline_arguments(self, parser): parser.add_argument('-v', '--verbose', help = _("increase verbosity"), action = "store_true") parser.add_argument('-c', '--conf', '--config', help = _("load this file on startup instead of .pronsolerc ; you may chain config files, if so settings auto-save will use the last specified file"), action = "append", default = []) parser.add_argument('-e', '--execute', help = _("executes command after configuration/.pronsolerc is loaded ; macros/settings from these commands are not autosaved"), action = "append", default = []) parser.add_argument('filename', nargs='?', help = _("file to load")) def process_cmdline_arguments(self, args): if args.verbose: logger = logging.getLogger() logger.setLevel(logging.DEBUG) for config in args.conf: try: self.load_rc(config) except EnvironmentError as err: print(("ERROR: Unable to load configuration file: %s" % str(err)[10:])) sys.exit(1) if not self.rc_loaded: self.load_default_rc() self.processing_args = True for command in args.execute: self.onecmd(command) self.processing_args = False self.update_rpc_server(None, self.settings.rpc_server) if args.filename: filename = args.filename.decode(locale.getpreferredencoding()) self.cmdline_filename_callback(filename) def cmdline_filename_callback(self, filename): self.do_load(filename) def parse_cmdline(self, args): parser = argparse.ArgumentParser(description = 'Printrun 3D printer interface') self.add_cmdline_arguments(parser) args = [arg for arg in args if not arg.startswith("-psn")] args = parser.parse_args(args = args) self.process_cmdline_arguments(args) setup_logging(sys.stdout, self.settings.log_path, True) # -------------------------------------------------------------- # Printer connection handling # -------------------------------------------------------------- def connect_to_printer(self, port, baud, dtr): try: self.p.connect(port, baud, dtr) except SerialException as e: # Currently, there is no errno, but it should be there in the future if e.errno == 2: self.logError(_("Error: You are trying to connect to a non-existing port.")) elif e.errno == 8: self.logError(_("Error: You don't have permission to open %s.") % port) self.logError(_("You might need to add yourself to the dialout group.")) else: self.logError(traceback.format_exc()) # Kill the scope anyway return False except OSError as e: if e.errno == 2: self.logError(_("Error: You are trying to connect to a non-existing port.")) else: self.logError(traceback.format_exc()) return False self.statuscheck = True self.status_thread = threading.Thread(target = self.statuschecker) self.status_thread.start() return True def do_connect(self, l): a = l.split() p = self.scanserial() port = self.settings.port if (port == "" or port not in p) and len(p) > 0: port = p[0] baud = self.settings.baudrate or 115200 if len(a) > 0: port = a[0] if len(a) > 1: try: baud = int(a[1]) except: self.log("Bad baud value '" + a[1] + "' ignored") if len(p) == 0 and not port: self.log("No serial ports detected - please specify a port") return if len(a) == 0: self.log("No port specified - connecting to %s at %dbps" % (port, baud)) if port != self.settings.port: self.settings.port = port self.save_in_rc("set port", "set port %s" % port) if baud != self.settings.baudrate: self.settings.baudrate = baud self.save_in_rc("set baudrate", "set baudrate %d" % baud) self.connect_to_printer(port, baud, self.settings.dtr) def help_connect(self): self.log("Connect to printer") self.log("connect ") self.log("If port and baudrate are not specified, connects to first detected port at 115200bps") ports = self.scanserial() if ports: self.log("Available ports: ", " ".join(ports)) else: self.log("No serial ports were automatically found.") def complete_connect(self, text, line, begidx, endidx): if (len(line.split()) == 2 and line[-1] != " ") or (len(line.split()) == 1 and line[-1] == " "): return [i for i in self.scanserial() if i.startswith(text)] elif len(line.split()) == 3 or (len(line.split()) == 2 and line[-1] == " "): return [i for i in ["2400", "9600", "19200", "38400", "57600", "115200"] if i.startswith(text)] else: return [] def scanserial(self): """scan for available ports. return a list of device names.""" baselist = [] if os.name == "nt": try: key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM") i = 0 while(1): baselist += [winreg.EnumValue(key, i)[1]] i += 1 except: pass for g in ['/dev/ttyUSB*', '/dev/ttyACM*', "/dev/tty.*", "/dev/cu.*", "/dev/rfcomm*"]: baselist += glob.glob(g) return [p for p in baselist if self._bluetoothSerialFilter(p)] def _bluetoothSerialFilter(self, serial): return not ("Bluetooth" in serial or "FireFly" in serial) def online(self): self.log("\rPrinter is now online") self.write_prompt() def do_disconnect(self, l): self.p.disconnect() def help_disconnect(self): self.log("Disconnects from the printer") def do_block_until_online(self, l): while not self.p.online: time.sleep(0.1) def help_block_until_online(self, l): self.log("Blocks until printer is online") self.log("Warning: if something goes wrong, this can block pronsole forever") # -------------------------------------------------------------- # Printer status monitoring # -------------------------------------------------------------- def statuschecker_inner(self, do_monitoring = True): if self.p.online: if self.p.writefailures >= 4: self.logError(_("Disconnecting after 4 failed writes.")) self.status_thread = None self.disconnect() return if do_monitoring: if self.sdprinting and not self.paused: self.p.send_now("M27") if self.m105_waitcycles % 10 == 0: self.p.send_now("M105") self.m105_waitcycles += 1 cur_time = time.time() wait_time = 0 while time.time() < cur_time + self.monitor_interval - 0.25: if not self.statuscheck: break time.sleep(0.25) # Safeguard: if system time changes and goes back in the past, # we could get stuck almost forever wait_time += 0.25 if wait_time > self.monitor_interval - 0.25: break # Always sleep at least a bit, if something goes wrong with the # system time we'll avoid freezing the whole app this way time.sleep(0.25) def statuschecker(self): while self.statuscheck: self.statuschecker_inner() # -------------------------------------------------------------- # File loading handling # -------------------------------------------------------------- def do_load(self, filename): self._do_load(filename) def _do_load(self, filename): if not filename: self.logError("No file name given.") return self.log(_("Loading file: %s") % filename) if not os.path.exists(filename): self.logError("File not found!") return self.load_gcode(filename) self.log(_("Loaded %s, %d lines.") % (filename, len(self.fgcode))) self.log(_("Estimated duration: %d layers, %s") % self.fgcode.estimate_duration()) def load_gcode(self, filename, layer_callback = None, gcode = None): if gcode is None: self.fgcode = gcoder.LightGCode(deferred = True) else: self.fgcode = gcode self.fgcode.prepare(open(filename, "r", encoding="utf-8"), get_home_pos(self.build_dimensions_list), layer_callback = layer_callback) self.fgcode.estimate_duration() self.filename = filename def complete_load(self, text, line, begidx, endidx): s = line.split() if len(s) > 2: return [] if (len(s) == 1 and line[-1] == " ") or (len(s) == 2 and line[-1] != " "): if len(s) > 1: return [i[len(s[1]) - len(text):] for i in glob.glob(s[1] + "*/") + glob.glob(s[1] + "*.g*")] else: return glob.glob("*/") + glob.glob("*.g*") def help_load(self): self.log("Loads a gcode file (with tab-completion)") def do_slice(self, l): l = l.split() if len(l) == 0: self.logError(_("No file name given.")) return settings = 0 if l[0] == "set": settings = 1 else: self.log(_("Slicing file: %s") % l[0]) if not(os.path.exists(l[0])): self.logError(_("File not found!")) return try: if settings: command = self.settings.slicecommandpath+self.settings.sliceoptscommand self.log(_("Entering slicer settings: %s") % command) run_command(command, blocking = True) else: command = self.settings.slicecommandpath+self.settings.slicecommand stl_name = l[0] gcode_name = stl_name.replace(".stl", "_export.gcode").replace(".STL", "_export.gcode") run_command(command, {"$s": stl_name, "$o": gcode_name}, blocking = True) self.log(_("Loading sliced file.")) self.do_load(l[0].replace(".stl", "_export.gcode")) except Exception as e: self.logError(_("Slicing failed: %s") % e) def complete_slice(self, text, line, begidx, endidx): s = line.split() if len(s) > 2: return [] if (len(s) == 1 and line[-1] == " ") or (len(s) == 2 and line[-1] != " "): if len(s) > 1: return [i[len(s[1]) - len(text):] for i in glob.glob(s[1] + "*/") + glob.glob(s[1] + "*.stl")] else: return glob.glob("*/") + glob.glob("*.stl") def help_slice(self): self.log(_("Creates a gcode file from an stl model using the slicer (with tab-completion)")) self.log(_("slice filename.stl - create gcode file")) self.log(_("slice filename.stl view - create gcode file and view using skeiniso (if using skeinforge)")) self.log(_("slice set - adjust slicer settings")) # -------------------------------------------------------------- # Print/upload handling # -------------------------------------------------------------- def do_upload(self, l): names = l.split() if len(names) == 2: filename = names[0] targetname = names[1] else: self.logError(_("Please enter target name in 8.3 format.")) return if not self.p.online: self.logError(_("Not connected to printer.")) return self._do_load(filename) self.log(_("Uploading as %s") % targetname) self.log(_("Uploading %s") % self.filename) self.p.send_now("M28 " + targetname) self.log(_("Press Ctrl-C to interrupt upload.")) self.p.startprint(self.fgcode) try: sys.stdout.write(_("Progress: ") + "00.0%") sys.stdout.flush() while self.p.printing: time.sleep(0.5) sys.stdout.write("\b\b\b\b\b%04.1f%%" % (100 * float(self.p.queueindex) / len(self.p.mainqueue),)) sys.stdout.flush() self.p.send_now("M29 " + targetname) time.sleep(0.2) self.p.clear = True self._do_ls(False) self.log("\b\b\b\b\b100%.") self.log(_("Upload completed. %s should now be on the card.") % targetname) return except (KeyboardInterrupt, Exception) as e: if isinstance(e, KeyboardInterrupt): self.logError(_("...interrupted!")) else: self.logError(_("Something wrong happened while uploading:") + "\n" + traceback.format_exc()) self.p.pause() self.p.send_now("M29 " + targetname) time.sleep(0.2) self.p.cancelprint() self.logError(_("A partial file named %s may have been written to the sd card.") % targetname) def complete_upload(self, text, line, begidx, endidx): s = line.split() if len(s) > 2: return [] if (len(s) == 1 and line[-1] == " ") or (len(s) == 2 and line[-1] != " "): if len(s) > 1: return [i[len(s[1]) - len(text):] for i in glob.glob(s[1] + "*/") + glob.glob(s[1] + "*.g*")] else: return glob.glob("*/") + glob.glob("*.g*") def help_upload(self): self.log("Uploads a gcode file to the sd card") def help_print(self): if not self.fgcode: self.log(_("Send a loaded gcode file to the printer. Load a file with the load command first.")) else: self.log(_("Send a loaded gcode file to the printer. You have %s loaded right now.") % self.filename) def do_print(self, l): if not self.fgcode: self.logError(_("No file loaded. Please use load first.")) return if not self.p.online: self.logError(_("Not connected to printer.")) return self.log(_("Printing %s") % self.filename) self.log(_("You can monitor the print with the monitor command.")) self.sdprinting = False self.p.startprint(self.fgcode) def do_pause(self, l): if self.sdprinting: self.p.send_now("M25") else: if not self.p.printing: self.logError(_("Not printing, cannot pause.")) return self.p.pause() self.paused = True def help_pause(self): self.log(_("Pauses a running print")) def pause(self, event = None): return self.do_pause(None) def do_resume(self, l): if not self.paused: self.logError(_("Not paused, unable to resume. Start a print first.")) return self.paused = False if self.sdprinting: self.p.send_now("M24") return else: self.p.resume() def help_resume(self): self.log(_("Resumes a paused print.")) def listfiles(self, line): if "Begin file list" in line: self.sdlisting = 1 elif "End file list" in line: self.sdlisting = 0 self.recvlisteners.remove(self.listfiles) if self.sdlisting_echo: self.log(_("Files on SD card:")) self.log("\n".join(self.sdfiles)) elif self.sdlisting: self.sdfiles.append(re.sub(" \d+$","",line.strip().lower())) def _do_ls(self, echo): # FIXME: this was 2, but I think it should rather be 0 as in do_upload self.sdlisting = 0 self.sdlisting_echo = echo self.sdfiles = [] self.recvlisteners.append(self.listfiles) self.p.send_now("M20") def do_ls(self, l): if not self.p.online: self.logError(_("Printer is not online. Please connect to it first.")) return self._do_ls(True) def help_ls(self): self.log(_("Lists files on the SD card")) def waitforsdresponse(self, l): if "file.open failed" in l: self.logError(_("Opening file failed.")) self.recvlisteners.remove(self.waitforsdresponse) return if "File opened" in l: self.log(l) if "File selected" in l: self.log(_("Starting print")) self.p.send_now("M24") self.sdprinting = True # self.recvlisteners.remove(self.waitforsdresponse) return if "Done printing file" in l: self.log(l) self.sdprinting = False self.recvlisteners.remove(self.waitforsdresponse) return if "SD printing byte" in l: # M27 handler try: resp = l.split() vals = resp[-1].split("/") self.percentdone = 100.0 * int(vals[0]) / int(vals[1]) except: pass def do_reset(self, l): self.p.reset() def help_reset(self): self.log(_("Resets the printer.")) def do_sdprint(self, l): if not self.p.online: self.log(_("Printer is not online. Please connect to it first.")) return self._do_ls(False) while self.listfiles in self.recvlisteners: time.sleep(0.1) if l.lower() not in self.sdfiles: self.log(_("File is not present on card. Please upload it first.")) return self.recvlisteners.append(self.waitforsdresponse) self.p.send_now("M23 " + l.lower()) self.log(_("Printing file: %s from SD card.") % l.lower()) self.log(_("Requesting SD print...")) time.sleep(1) def help_sdprint(self): self.log(_("Print a file from the SD card. Tab completes with available file names.")) self.log(_("sdprint filename.g")) def complete_sdprint(self, text, line, begidx, endidx): if not self.sdfiles and self.p.online: self._do_ls(False) while self.listfiles in self.recvlisteners: time.sleep(0.1) if (len(line.split()) == 2 and line[-1] != " ") or (len(line.split()) == 1 and line[-1] == " "): return [i for i in self.sdfiles if i.startswith(text)] # -------------------------------------------------------------- # Printcore callbacks # -------------------------------------------------------------- def startcb(self, resuming = False): self.starttime = time.time() if resuming: self.log(_("Print resumed at: %s") % format_time(self.starttime)) else: self.log(_("Print started at: %s") % format_time(self.starttime)) if not self.sdprinting: self.compute_eta = RemainingTimeEstimator(self.fgcode) else: self.compute_eta = None if self.settings.start_command: output = get_command_output(self.settings.start_command, {"$s": str(self.filename), "$t": format_time(time.time())}) if output: self.log("Start command output:") self.log(output.rstrip()) try: powerset_print_start(reason = "Preventing sleep during print") except: self.logError(_("Failed to set power settings:") + "\n" + traceback.format_exc()) def endcb(self): try: powerset_print_stop() except: self.logError(_("Failed to set power settings:") + "\n" + traceback.format_exc()) if self.p.queueindex == 0: print_duration = int(time.time() - self.starttime + self.extra_print_time) self.log(_("Print ended at: %(end_time)s and took %(duration)s") % {"end_time": format_time(time.time()), "duration": format_duration(print_duration)}) # Update total filament length used if self.fgcode is not None: new_total = self.settings.total_filament_used + self.fgcode.filament_length self.set("total_filament_used", new_total) # Update the length of filament in the spools self.spool_manager.refresh() if(len(self.fgcode.filament_length_multi)>1): for i in enumerate(self.fgcode.filament_length_multi): if self.spool_manager.getSpoolName(i[0]) != None: self.spool_manager.editLength( -i[1], extruder = i[0]) else: if self.spool_manager.getSpoolName(0) != None: self.spool_manager.editLength( -self.fgcode.filament_length, extruder = 0) else: if not self.settings.final_command: return output = get_command_output(self.settings.final_command, {"$s": str(self.filename), "$t": format_duration(print_duration)}) if output: self.log("Final command output:") self.log(output.rstrip()) def recvcb_report(self, l): isreport = REPORT_NONE if "ok C:" in l or "Count" in l \ or ("X:" in l and len(gcoder.m114_exp.findall(l)) == 6): self.posreport = l isreport = REPORT_POS if self.userm114 > 0: self.userm114 -= 1 isreport |= REPORT_MANUAL if "ok T:" in l or tempreading_exp.findall(l): self.tempreadings = l isreport = REPORT_TEMP if self.userm105 > 0: self.userm105 -= 1 isreport |= REPORT_MANUAL else: self.m105_waitcycles = 0 return isreport def recvcb_actions(self, l): if l.startswith("!!"): self.do_pause(None) msg = l.split(" ", 1) if len(msg) > 1 and self.silent is False: self.logError(msg[1].ljust(15)) sys.stdout.write(self.promptf()) sys.stdout.flush() return True elif l.startswith("//"): command = l.split(" ", 1) if len(command) > 1: command = command[1] self.log(_("Received command %s") % command) command = command.split(":") if len(command) == 2 and command[0] == "action": command = command[1] if command == "pause": self.do_pause(None) sys.stdout.write(self.promptf()) sys.stdout.flush() return True elif command == "resume": self.do_resume(None) sys.stdout.write(self.promptf()) sys.stdout.flush() return True elif command == "disconnect": self.do_disconnect(None) sys.stdout.write(self.promptf()) sys.stdout.flush() return True return False def recvcb(self, l): l = l.rstrip() for listener in self.recvlisteners: listener(l) if not self.recvcb_actions(l): report_type = self.recvcb_report(l) if report_type & REPORT_TEMP: self.status.update_tempreading(l) if not self.lineignorepattern.match(l) and l[:4] != "wait" and not self.sdlisting \ and not self.monitoring and (report_type == REPORT_NONE or report_type & REPORT_MANUAL): if l[:5] == "echo:": l = l[5:].lstrip() if self.silent is False: self.log("\r" + l.ljust(15)) sys.stdout.write(self.promptf()) sys.stdout.flush() def layer_change_cb(self, newlayer): layerz = self.fgcode.all_layers[newlayer].z if layerz is not None: self.curlayer = layerz if self.compute_eta: secondselapsed = int(time.time() - self.starttime + self.extra_print_time) self.compute_eta.update_layer(newlayer, secondselapsed) def get_eta(self): if self.sdprinting or self.uploading: if self.uploading: fractioncomplete = float(self.p.queueindex) / len(self.p.mainqueue) else: fractioncomplete = float(self.percentdone / 100.0) secondselapsed = int(time.time() - self.starttime + self.extra_print_time) # Prevent division by zero secondsestimate = secondselapsed / max(fractioncomplete, 0.000001) secondsremain = secondsestimate - secondselapsed progress = fractioncomplete elif self.compute_eta is not None: secondselapsed = int(time.time() - self.starttime + self.extra_print_time) secondsremain, secondsestimate = self.compute_eta(self.p.queueindex, secondselapsed) progress = self.p.queueindex else: secondsremain, secondsestimate, progress = 1, 1, 0 return secondsremain, secondsestimate, progress def do_eta(self, l): if not self.p.printing: self.logError(_("Printer is not currently printing. No ETA available.")) else: secondsremain, secondsestimate, progress = self.get_eta() eta = _("Est: %s of %s remaining") % (format_duration(secondsremain), format_duration(secondsestimate)) self.log(eta.strip()) def help_eta(self): self.log(_("Displays estimated remaining print time.")) # -------------------------------------------------------------- # Temperature handling # -------------------------------------------------------------- def set_temp_preset(self, key, value): if not key.startswith("bed"): self.temps["pla"] = str(self.settings.temperature_pla) self.temps["abs"] = str(self.settings.temperature_abs) self.log("Hotend temperature presets updated, pla:%s, abs:%s" % (self.temps["pla"], self.temps["abs"])) else: self.bedtemps["pla"] = str(self.settings.bedtemp_pla) self.bedtemps["abs"] = str(self.settings.bedtemp_abs) self.log("Bed temperature presets updated, pla:%s, abs:%s" % (self.bedtemps["pla"], self.bedtemps["abs"])) def tempcb(self, l): if "T:" in l: self.log(l.strip().replace("T", "Hotend").replace("B", "Bed").replace("ok ", "")) def do_gettemp(self, l): if "dynamic" in l: self.dynamic_temp = True if self.p.online: self.p.send_now("M105") time.sleep(0.75) if not self.status.bed_enabled: self.log(_("Hotend: %s%s/%s%s") % (self.status.extruder_temp, DEG, self.status.extruder_temp_target, DEG)) else: self.log(_("Hotend: %s%s/%s%s") % (self.status.extruder_temp, DEG, self.status.extruder_temp_target, DEG)) self.log(_("Bed: %s%s/%s%s") % (self.status.bed_temp, DEG, self.status.bed_temp_target, DEG)) def help_gettemp(self): self.log(_("Read the extruder and bed temperature.")) def do_settemp(self, l): l = l.lower().replace(", ", ".") for i in self.temps.keys(): l = l.replace(i, self.temps[i]) try: f = float(l) except: self.logError(_("You must enter a temperature.")) return if f >= 0: if f > 250: self.log(_("%s is a high temperature to set your extruder to. Are you sure you want to do that?") % f) if not self.confirm(): return if self.p.online: self.p.send_now("M104 S" + l) self.log(_("Setting hotend temperature to %s degrees Celsius.") % f) else: self.logError(_("Printer is not online.")) else: self.logError(_("You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.")) def help_settemp(self): self.log(_("Sets the hotend temperature to the value entered.")) self.log(_("Enter either a temperature in celsius or one of the following keywords")) self.log(", ".join([i + "(" + self.temps[i] + ")" for i in self.temps.keys()])) def complete_settemp(self, text, line, begidx, endidx): if (len(line.split()) == 2 and line[-1] != " ") or (len(line.split()) == 1 and line[-1] == " "): return [i for i in self.temps.keys() if i.startswith(text)] def do_bedtemp(self, l): f = None try: l = l.lower().replace(", ", ".") for i in self.bedtemps.keys(): l = l.replace(i, self.bedtemps[i]) f = float(l) except: self.logError(_("You must enter a temperature.")) if f is not None and f >= 0: if self.p.online: self.p.send_now("M140 S" + l) self.log(_("Setting bed temperature to %s degrees Celsius.") % f) else: self.logError(_("Printer is not online.")) else: self.logError(_("You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.")) def help_bedtemp(self): self.log(_("Sets the bed temperature to the value entered.")) self.log(_("Enter either a temperature in celsius or one of the following keywords")) self.log(", ".join([i + "(" + self.bedtemps[i] + ")" for i in self.bedtemps.keys()])) def complete_bedtemp(self, text, line, begidx, endidx): if (len(line.split()) == 2 and line[-1] != " ") or (len(line.split()) == 1 and line[-1] == " "): return [i for i in self.bedtemps.keys() if i.startswith(text)] def do_monitor(self, l): interval = 5 if not self.p.online: self.logError(_("Printer is not online. Please connect to it first.")) return if not (self.p.printing or self.sdprinting): self.logError(_("Printer is not printing. Please print something before monitoring.")) return self.log(_("Monitoring printer, use ^C to interrupt.")) if len(l): try: interval = float(l) except: self.logError(_("Invalid period given.")) self.log(_("Updating values every %f seconds.") % (interval,)) self.monitoring = 1 prev_msg_len = 0 try: while True: self.p.send_now("M105") if self.sdprinting: self.p.send_now("M27") time.sleep(interval) if self.p.printing: preface = _("Print progress: ") progress = 100 * float(self.p.queueindex) / len(self.p.mainqueue) elif self.sdprinting: preface = _("SD print progress: ") progress = self.percentdone prev_msg = preface + "%.1f%%" % progress if self.silent is False: sys.stdout.write("\r" + prev_msg.ljust(prev_msg_len)) sys.stdout.flush() prev_msg_len = len(prev_msg) except KeyboardInterrupt: if self.silent is False: self.log(_("Done monitoring.")) self.monitoring = 0 def help_monitor(self): self.log(_("Monitor a machine's temperatures and an SD print's status.")) self.log(_("monitor - Reports temperature and SD print status (if SD printing) every 5 seconds")) self.log(_("monitor 2 - Reports temperature and SD print status (if SD printing) every 2 seconds")) # -------------------------------------------------------------- # Manual printer controls # -------------------------------------------------------------- def do_tool(self, l): tool = None try: tool = int(l.lower().strip()) except: self.logError(_("You must specify the tool index as an integer.")) if tool is not None and tool >= 0: if self.p.online: self.p.send_now("T%d" % tool) self.log(_("Using tool %d.") % tool) self.current_tool = tool else: self.logError(_("Printer is not online.")) else: self.logError(_("You cannot set negative tool numbers.")) def help_tool(self): self.log(_("Switches to the specified tool (e.g. doing tool 1 will emit a T1 G-Code).")) def do_move(self, l): if len(l.split()) < 2: self.logError(_("No move specified.")) return if self.p.printing: self.logError(_("Printer is currently printing. Please pause the print before you issue manual commands.")) return if not self.p.online: self.logError(_("Printer is not online. Unable to move.")) return l = l.split() if l[0].lower() == "x": feed = self.settings.xy_feedrate axis = "X" elif l[0].lower() == "y": feed = self.settings.xy_feedrate axis = "Y" elif l[0].lower() == "z": feed = self.settings.z_feedrate axis = "Z" elif l[0].lower() == "e": feed = self.settings.e_feedrate axis = "E" else: self.logError(_("Unknown axis.")) return try: float(l[1]) # check if distance can be a float except: self.logError(_("Invalid distance")) return try: feed = int(l[2]) except: pass self.p.send_now("G91") self.p.send_now("G0 " + axis + str(l[1]) + " F" + str(feed)) self.p.send_now("G90") def help_move(self): self.log(_("Move an axis. Specify the name of the axis and the amount. ")) self.log(_("move X 10 will move the X axis forward by 10mm at %s mm/min (default XY speed)") % self.settings.xy_feedrate) self.log(_("move Y 10 5000 will move the Y axis forward by 10mm at 5000mm/min")) self.log(_("move Z -1 will move the Z axis down by 1mm at %s mm/min (default Z speed)") % self.settings.z_feedrate) self.log(_("Common amounts are in the tabcomplete list.")) def complete_move(self, text, line, begidx, endidx): if (len(line.split()) == 2 and line[-1] != " ") or (len(line.split()) == 1 and line[-1] == " "): return [i for i in ["X ", "Y ", "Z ", "E "] if i.lower().startswith(text)] elif len(line.split()) == 3 or (len(line.split()) == 2 and line[-1] == " "): base = line.split()[-1] rlen = 0 if base.startswith("-"): rlen = 1 if line[-1] == " ": base = "" return [i[rlen:] for i in ["-100", "-10", "-1", "-0.1", "100", "10", "1", "0.1", "-50", "-5", "-0.5", "50", "5", "0.5", "-200", "-20", "-2", "-0.2", "200", "20", "2", "0.2"] if i.startswith(base)] else: return [] def do_extrude(self, l, override = None, overridefeed = 300): length = self.settings.default_extrusion # default extrusion length feed = self.settings.e_feedrate # default speed if not self.p.online: self.logError("Printer is not online. Unable to extrude.") return if self.p.printing: self.logError(_("Printer is currently printing. Please pause the print before you issue manual commands.")) return ls = l.split() if len(ls): try: length = float(ls[0]) except: self.logError(_("Invalid length given.")) if len(ls) > 1: try: feed = int(ls[1]) except: self.logError(_("Invalid speed given.")) if override is not None: length = override feed = overridefeed self.do_extrude_final(length, feed) def do_extrude_final(self, length, feed): if length > 0: self.log(_("Extruding %fmm of filament.") % (length,)) elif length < 0: self.log(_("Reversing %fmm of filament.") % (-length,)) else: self.log(_("Length is 0, not doing anything.")) self.p.send_now("G91") self.p.send_now("G1 E" + str(length) + " F" + str(feed)) self.p.send_now("G90") # Update the length of filament in the current spool self.spool_manager.refresh() if self.spool_manager.getSpoolName(self.current_tool) != None: self.spool_manager.editLength(-length, extruder = self.current_tool) def help_extrude(self): self.log(_("Extrudes a length of filament, 5mm by default, or the number of mm given as a parameter")) self.log(_("extrude - extrudes 5mm of filament at 300mm/min (5mm/s)")) self.log(_("extrude 20 - extrudes 20mm of filament at 300mm/min (5mm/s)")) self.log(_("extrude -5 - REVERSES 5mm of filament at 300mm/min (5mm/s)")) self.log(_("extrude 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)")) def do_reverse(self, l): length = self.settings.default_extrusion # default extrusion length feed = self.settings.e_feedrate # default speed if not self.p.online: self.logError(_("Printer is not online. Unable to reverse.")) return if self.p.printing: self.logError(_("Printer is currently printing. Please pause the print before you issue manual commands.")) return ls = l.split() if len(ls): try: length = float(ls[0]) except: self.logError(_("Invalid length given.")) if len(ls) > 1: try: feed = int(ls[1]) except: self.logError(_("Invalid speed given.")) self.do_extrude("", -length, feed) def help_reverse(self): self.log(_("Reverses the extruder, 5mm by default, or the number of mm given as a parameter")) self.log(_("reverse - reverses 5mm of filament at 300mm/min (5mm/s)")) self.log(_("reverse 20 - reverses 20mm of filament at 300mm/min (5mm/s)")) self.log(_("reverse 10 210 - extrudes 10mm of filament at 210mm/min (3.5mm/s)")) self.log(_("reverse -5 - EXTRUDES 5mm of filament at 300mm/min (5mm/s)")) def do_home(self, l): if not self.p.online: self.logError(_("Printer is not online. Unable to move.")) return if self.p.printing: self.logError(_("Printer is currently printing. Please pause the print before you issue manual commands.")) return if "x" in l.lower(): self.p.send_now("G28 X0") if "y" in l.lower(): self.p.send_now("G28 Y0") if "z" in l.lower(): self.p.send_now("G28 Z0") if "e" in l.lower(): self.p.send_now("G92 E0") if not len(l): self.p.send_now("G28") self.p.send_now("G92 E0") def help_home(self): self.log(_("Homes the printer")) self.log(_("home - homes all axes and zeroes the extruder(Using G28 and G92)")) self.log(_("home xy - homes x and y axes (Using G28)")) self.log(_("home z - homes z axis only (Using G28)")) self.log(_("home e - set extruder position to zero (Using G92)")) self.log(_("home xyze - homes all axes and zeroes the extruder (Using G28 and G92)")) def do_off(self, l): self.off() def off(self, ignore = None): if self.p.online: if self.p.printing: self.pause(None) self.log(_("; Motors off")) self.onecmd("M84") self.log(_("; Extruder off")) self.onecmd("M104 S0") self.log(_("; Heatbed off")) self.onecmd("M140 S0") self.log(_("; Fan off")) self.onecmd("M107") self.log(_("; Power supply off")) self.onecmd("M81") else: self.logError(_("Printer is not online. Unable to turn it off.")) def help_off(self): self.log(_("Turns off everything on the printer")) # -------------------------------------------------------------- # Host commands handling # -------------------------------------------------------------- def process_host_command(self, command): """Override host command handling""" command = command.lstrip() if command.startswith(";@"): command = command[2:] self.log(_("G-Code calling host command \"%s\"") % command) self.onecmd(command) def do_run_script(self, l): p = run_command(l, {"$s": str(self.filename)}, stdout = subprocess.PIPE, universal_newlines = True) for line in p.stdout.readlines(): self.log("<< " + line.strip()) def help_run_script(self): self.log(_("Runs a custom script. Current gcode filename can be given using $s token.")) def do_run_gcode_script(self, l): p = run_command(l, {"$s": str(self.filename)}, stdout = subprocess.PIPE, universal_newlines = True) for line in p.stdout.readlines(): self.onecmd(line.strip()) def help_run_gcode_script(self): self.log(_("Runs a custom script which output gcode which will in turn be executed. Current gcode filename can be given using $s token.")) Printrun-printrun-2.0.0rc5/printrun/pronterface.py000066400000000000000000003266731325617007000224100ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import os import queue import sys import time import threading import traceback import io as StringIO import subprocess import glob import logging import re try: import simplejson as json except ImportError: import json from . import pronsole from . import printcore from printrun.spoolmanager import spoolmanager_gui from .utils import install_locale, setup_logging, dosify, \ iconfile, configfile, format_time, format_duration, \ hexcolor_to_float, parse_temperature_report, \ prepare_command, check_rgb_color, check_rgba_color, compile_file, \ write_history_to, read_history_from install_locale('pronterface') try: import wx import wx.adv if wx.VERSION < (4,): raise ImportError() except: logging.error(_("WX >= 4 is not installed. This program requires WX >= 4 to run.")) raise from .gui.widgets import SpecialButton, MacroEditor, PronterOptions, ButtonEdit winsize = (800, 500) layerindex = 0 if os.name == "nt": winsize = (800, 530) pronterface_quitting = False class PronterfaceQuitException(Exception): pass from .gui import MainWindow from .settings import wxSetting, HiddenSetting, StringSetting, SpinSetting, \ FloatSpinSetting, BooleanSetting, StaticTextSetting from printrun import gcoder from .pronsole import REPORT_NONE, REPORT_POS, REPORT_TEMP, REPORT_MANUAL class ConsoleOutputHandler: """Handle console output. All messages go through the logging submodule. We setup a logging handler to get logged messages and write them to both stdout (unless a log file path is specified, in which case we add another logging handler to write to this file) and the log panel. We also redirect stdout and stderr to ourself to catch print messages and al.""" def __init__(self, target, log_path): self.stdout = sys.stdout self.stderr = sys.stderr sys.stdout = self sys.stderr = self if log_path: self.print_on_stdout = False setup_logging(self, log_path, reset_handlers = True) self.target = target else: self.print_on_stdout = True setup_logging(sys.stdout, reset_handlers = True) self.target = target def __del__(self): sys.stdout = self.stdout sys.stderr = self.stderr def write(self, data): try: self.target(data) except: pass if self.print_on_stdout: self.stdout.write(data) def flush(self): if self.stdout: self.stdout.flush() class ComboSetting(wxSetting): def __init__(self, name, default, choices, label = None, help = None, group = None): super(ComboSetting, self).__init__(name, default, label, help, group) self.choices = choices def get_specific_widget(self, parent): import wx self.widget = wx.ComboBox(parent, -1, str(self.value), choices = self.choices, style = wx.CB_DROPDOWN) return self.widget class PronterWindow(MainWindow, pronsole.pronsole): _fgcode = None printer_progress_time = time.time() def _get_fgcode(self): return self._fgcode def _set_fgcode(self, value): self._fgcode = value self.excluder = None self.excluder_e = None self.excluder_z_abs = None self.excluder_z_rel = None fgcode = property(_get_fgcode, _set_fgcode) def _get_display_graph(self): return self.settings.tempgraph display_graph = property(_get_display_graph) def _get_display_gauges(self): return self.settings.tempgauges display_gauges = property(_get_display_gauges) def __init__(self, app, filename = None, size = winsize): pronsole.pronsole.__init__(self) self.app = app self.window_ready = False self.ui_ready = False self._add_settings(size) for field in dir(self.settings): if field.startswith("_gcview_color_"): cleanname = field[1:] color = hexcolor_to_float(getattr(self.settings, cleanname), 4) setattr(self, cleanname, list(color)) self.pauseScript = None #"pause.gcode" self.endScript = None #"end.gcode" self.filename = filename self.capture_skip = {} self.capture_skip_newline = False self.fgcode = None self.excluder = None self.slicep = None self.current_pos = [0, 0, 0] self.paused = False self.uploading = False self.sentglines = queue.Queue(0) self.cpbuttons = { "motorsoff": SpecialButton(_("Motors off"), ("M84"), (250, 250, 250), _("Switch all motors off")), "extrude": SpecialButton(_("Extrude"), ("pront_extrude"), (225, 200, 200), _("Advance extruder by set length")), "reverse": SpecialButton(_("Reverse"), ("pront_reverse"), (225, 200, 200), _("Reverse extruder by set length")), } self.custombuttons = [] self.btndict = {} self.filehistory = None self.autoconnect = False self.parse_cmdline(sys.argv[1:]) self.autoscrolldisable=False # FIXME: We need to initialize the main window after loading the # configs to restore the size, but this might have some unforeseen # consequences. # -- Okai, it seems it breaks things like update_gviz_params >< os.putenv("UBUNTU_MENUPROXY", "0") size = (self.settings.last_window_width, self.settings.last_window_height) MainWindow.__init__(self, None, title = _("Pronterface"), size = size) if self.settings.last_window_maximized: self.Maximize() self.SetIcon(wx.Icon(iconfile("pronterface.png"), wx.BITMAP_TYPE_PNG)) self.Bind(wx.EVT_SIZE, self.on_resize) self.Bind(wx.EVT_MAXIMIZE, self.on_maximize) self.window_ready = True self.Bind(wx.EVT_CLOSE, self.closewin) # set feedrates in printcore for pause/resume self.p.xy_feedrate = self.settings.xy_feedrate self.p.z_feedrate = self.settings.z_feedrate self.panel.SetBackgroundColour(self.bgcolor) customdict = {} try: exec(compile_file(configfile("custombtn.txt")), customdict) if len(customdict["btns"]): if not len(self.custombuttons): try: self.custombuttons = customdict["btns"] for n in range(len(self.custombuttons)): self.cbutton_save(n, self.custombuttons[n]) os.rename("custombtn.txt", "custombtn.old") rco = open("custombtn.txt", "w") rco.write(_("# I moved all your custom buttons into .pronsolerc.\n# Please don't add them here any more.\n# Backup of your old buttons is in custombtn.old\n")) rco.close() except IOError as x: logging.error(str(x)) else: logging.warning(_("Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc")) logging.warning(_("Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt")) except: pass self.menustrip = wx.MenuBar() self.reload_ui() # disable all printer controls until we connect to a printer self.gui_set_disconnected() self.statusbar = self.CreateStatusBar() self.statusbar.SetStatusText(_("Not connected to printer.")) self.t = ConsoleOutputHandler(self.catchprint, self.settings.log_path) self.stdout = sys.stdout self.slicing = False self.loading_gcode = False self.loading_gcode_message = "" self.mini = False self.p.sendcb = self.sentcb self.p.preprintsendcb = self.preprintsendcb self.p.printsendcb = self.printsentcb self.p.startcb = self.startcb self.p.endcb = self.endcb self.cur_button = None self.predisconnect_mainqueue = None self.predisconnect_queueindex = None self.predisconnect_layer = None self.hsetpoint = 0.0 self.bsetpoint = 0.0 if self.autoconnect: self.connect() if self.filename is not None: self.do_load(self.filename) if self.settings.monitor: self.update_monitor() # -------------------------------------------------------------- # Main interface handling # -------------------------------------------------------------- def reset_ui(self): MainWindow.reset_ui(self) self.custombuttons_widgets = [] def reload_ui(self, *args): if not self.window_ready: return temp_monitor=self.settings.monitor self.settings.monitor=False self.update_monitor() self.Freeze() # If UI is being recreated, delete current one if self.ui_ready: # Store log console content logcontent = self.logbox.GetValue() while self.menustrip.GetMenuCount(): self.menustrip.Remove(0) if(len(self.commandbox.history)): #save current command box history history = (self.history_file) if not os.path.exists(history): if not os.path.exists(self.cache_dir): os.makedirs(self.cache_dir) write_history_to(history,self.commandbox.history) # Create a temporary panel to reparent widgets with state we want # to retain across UI changes temppanel = wx.Panel(self) # TODO: add viz widgets to statefulControls statefuls=self.statefulControls for control in statefuls: control.GetContainingSizer().Detach(control) control.Reparent(temppanel) #self.panel.DestroyChildren() #do not destroy children when redrawing so that any timers currently running do not have references to missing objects - they get recreated if necessary anyway self.gwindow.Destroy() self.reset_ui() # Create UI self.create_menu() self.update_recent_files("recentfiles", self.settings.recentfiles) if self.settings.uimode in (_("Tabbed"), _("Tabbed with platers")): self.createTabbedGui() else: self.createGui(self.settings.uimode == _("Compact"), self.settings.controlsmode == "Mini") if hasattr(self, "splitterwindow"): self.splitterwindow.SetSashPosition(self.settings.last_sash_position) def splitter_resize(event): self.splitterwindow.UpdateSize() self.splitterwindow.Bind(wx.EVT_SIZE, splitter_resize) def sash_position_changed(event): self.set("last_sash_position", self.splitterwindow.GetSashPosition()) self.splitterwindow.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, sash_position_changed) # Set gcview parameters here as they don't get set when viewers are # created self.update_gcview_params() # Finalize if self.online: self.gui_set_connected() if self.ui_ready: self.logbox.SetValue(logcontent) temppanel.Destroy() self.panel.Layout() if self.fgcode: self.start_viz_thread() self.ui_ready = True self.settings.monitor=temp_monitor; self.commandbox.history=read_history_from(self.history_file) self.commandbox.histindex == len(self.commandbox.history) self.Thaw() if self.settings.monitor: self.update_monitor() def on_resize(self, event): wx.CallAfter(self.on_resize_real) event.Skip() def on_resize_real(self): maximized = self.IsMaximized() self.set("last_window_maximized", maximized) if not maximized and not self.IsIconized(): size = self.GetSize() self.set("last_window_width", size[0]) self.set("last_window_height", size[1]) def on_maximize(self, event): self.set("last_window_maximized", self.IsMaximized()) event.Skip() def on_exit(self, event): self.Close() def closewin(self, e): e.StopPropagation() self.do_exit("") def kill(self, e=None): if(len(self.commandbox.history)): #save current command box history history = (self.history_file) if not os.path.exists(history): if not os.path.exists(self.cache_dir): os.makedirs(self.cache_dir) write_history_to(history,self.commandbox.history) if self.p.printing or self.p.paused: dlg = wx.MessageDialog(self, _("Print in progress ! Are you really sure you want to quit ?"), _("Exit"), wx.YES_NO | wx.ICON_WARNING) if dlg.ShowModal() == wx.ID_NO: return pronsole.pronsole.kill(self) global pronterface_quitting pronterface_quitting = True self.p.recvcb = None self.p.disconnect() if hasattr(self, "feedrates_changed"): self.save_in_rc("set xy_feedrate", "set xy_feedrate %d" % self.settings.xy_feedrate) self.save_in_rc("set z_feedrate", "set z_feedrate %d" % self.settings.z_feedrate) self.save_in_rc("set e_feedrate", "set e_feedrate %d" % self.settings.e_feedrate) if self.settings.last_extrusion != self.settings.default_extrusion: self.save_in_rc("set last_extrusion", "set last_extrusion %d" % self.settings.last_extrusion) if self.excluder: self.excluder.close_window() wx.CallAfter(self.gwindow.Destroy) wx.CallAfter(self.Destroy) def _get_bgcolor(self): if self.settings.bgcolor != "auto": return self.settings.bgcolor else: return wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWFRAME) bgcolor = property(_get_bgcolor) # -------------------------------------------------------------- # Main interface actions # -------------------------------------------------------------- def do_monitor(self, l = ""): if l.strip() == "": self.set("monitor", not self.settings.monitor) elif l.strip() == "off": self.set("monitor", False) else: try: self.monitor_interval = float(l) self.set("monitor", self.monitor_interval > 0) except: self.log(_("Invalid period given.")) if self.settings.monitor: self.log(_("Monitoring printer.")) else: self.log(_("Done monitoring.")) def do_pront_extrude(self, l = ""): if self.p.printing and not self.paused: self.log(_("Please pause or stop print before extruding.")) return feed = self.settings.e_feedrate self.do_extrude_final(self.edist.GetValue(), feed) def do_pront_reverse(self, l = ""): if self.p.printing and not self.paused: self.log(_("Please pause or stop print before reversing.")) return feed = self.settings.e_feedrate self.do_extrude_final(- self.edist.GetValue(), feed) def do_settemp(self, l = ""): try: if not isinstance(l, str) or not len(l): l = str(self.htemp.GetValue().split()[0]) l = l.lower().replace(", ", ".") for i in self.temps.keys(): l = l.replace(i, self.temps[i]) f = float(l) if f >= 0: if self.p.online: self.p.send_now("M104 S" + l) self.log(_("Setting hotend temperature to %f degrees Celsius.") % f) self.sethotendgui(f) else: self.logError(_("Printer is not online.")) else: self.logError(_("You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.")) except Exception as x: self.logError(_("You must enter a temperature. (%s)") % (repr(x),)) def do_bedtemp(self, l = ""): try: if not isinstance(l, str) or not len(l): l = str(self.btemp.GetValue().split()[0]) l = l.lower().replace(", ", ".") for i in self.bedtemps.keys(): l = l.replace(i, self.bedtemps[i]) f = float(l) if f >= 0: if self.p.online: self.p.send_now("M140 S" + l) self.log(_("Setting bed temperature to %f degrees Celsius.") % f) self.setbedgui(f) else: self.logError(_("Printer is not online.")) else: self.logError(_("You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.")) except Exception as x: self.logError(_("You must enter a temperature. (%s)") % (repr(x),)) def do_setspeed(self, l = ""): try: if not isinstance(l, str) or not len(l): l = str(self.speed_slider.GetValue()) else: l = l.lower() speed = int(l) if self.p.online: self.p.send_now("M220 S" + l) self.log(_("Setting print speed factor to %d%%.") % speed) else: self.logError(_("Printer is not online.")) except Exception as x: self.logError(_("You must enter a speed. (%s)") % (repr(x),)) def do_setflow(self, l = ""): try: if not isinstance(l, str) or not len(l): l = str(self.flow_slider.GetValue()) else: l = l.lower() flow = int(l) if self.p.online: self.p.send_now("M221 S" + l) self.log(_("Setting print flow factor to %d%%.") % flow) else: self.logError(_("Printer is not online.")) except Exception as x: self.logError(_("You must enter a flow. (%s)") % (repr(x),)) def setbedgui(self, f): self.bsetpoint = f if self.display_gauges: self.bedtgauge.SetTarget(int(f)) if self.display_graph: wx.CallAfter(self.graph.SetBedTargetTemperature, int(f)) if f > 0: wx.CallAfter(self.btemp.SetValue, str(f)) self.set("last_bed_temperature", str(f)) wx.CallAfter(self.setboff.SetBackgroundColour, None) wx.CallAfter(self.setboff.SetForegroundColour, None) wx.CallAfter(self.setbbtn.SetBackgroundColour, "#FFAA66") wx.CallAfter(self.setbbtn.SetForegroundColour, "#660000") wx.CallAfter(self.btemp.SetBackgroundColour, "#FFDABB") else: wx.CallAfter(self.setboff.SetBackgroundColour, "#0044CC") wx.CallAfter(self.setboff.SetForegroundColour, "white") wx.CallAfter(self.setbbtn.SetBackgroundColour, None) wx.CallAfter(self.setbbtn.SetForegroundColour, None) wx.CallAfter(self.btemp.SetBackgroundColour, "white") wx.CallAfter(self.btemp.Refresh) def sethotendgui(self, f): self.hsetpoint = f if self.display_gauges: self.hottgauge.SetTarget(int(f)) if self.display_graph: wx.CallAfter(self.graph.SetExtruder0TargetTemperature, int(f)) if f > 0: wx.CallAfter(self.htemp.SetValue, str(f)) self.set("last_temperature", str(f)) wx.CallAfter(self.settoff.SetBackgroundColour, None) wx.CallAfter(self.settoff.SetForegroundColour, None) wx.CallAfter(self.settbtn.SetBackgroundColour, "#FFAA66") wx.CallAfter(self.settbtn.SetForegroundColour, "#660000") wx.CallAfter(self.htemp.SetBackgroundColour, "#FFDABB") else: wx.CallAfter(self.settoff.SetBackgroundColour, "#0044CC") wx.CallAfter(self.settoff.SetForegroundColour, "white") wx.CallAfter(self.settbtn.SetBackgroundColour, None) wx.CallAfter(self.settbtn.SetForegroundColour, None) wx.CallAfter(self.htemp.SetBackgroundColour, "white") wx.CallAfter(self.htemp.Refresh) def rescanports(self, event = None): scanned = self.scanserial() portslist = list(scanned) if self.settings.port != "" and self.settings.port not in portslist: portslist.append(self.settings.port) self.serialport.Clear() self.serialport.AppendItems(portslist) if os.path.exists(self.settings.port) or self.settings.port in scanned: self.serialport.SetValue(self.settings.port) elif portslist: self.serialport.SetValue(portslist[0]) def cbkey(self, e): if e.GetKeyCode() == wx.WXK_UP: if self.commandbox.histindex == len(self.commandbox.history): self.commandbox.history.append(self.commandbox.GetValue()) # save current command if len(self.commandbox.history): self.commandbox.histindex = (self.commandbox.histindex - 1) % len(self.commandbox.history) self.commandbox.SetValue(self.commandbox.history[self.commandbox.histindex]) self.commandbox.SetSelection(0, len(self.commandbox.history[self.commandbox.histindex])) elif e.GetKeyCode() == wx.WXK_DOWN: if self.commandbox.histindex == len(self.commandbox.history): self.commandbox.history.append(self.commandbox.GetValue()) # save current command if len(self.commandbox.history): self.commandbox.histindex = (self.commandbox.histindex + 1) % len(self.commandbox.history) self.commandbox.SetValue(self.commandbox.history[self.commandbox.histindex]) self.commandbox.SetSelection(0, len(self.commandbox.history[self.commandbox.histindex])) else: e.Skip() def plate(self, e): from . import stlplater as plater self.log(_("Plate function activated")) plater.StlPlater(size = (800, 580), callback = self.platecb, parent = self, build_dimensions = self.build_dimensions_list, circular_platform = self.settings.circular_bed, simarrange_path = self.settings.simarrange_path, antialias_samples = int(self.settings.antialias3dsamples)).Show() def plate_gcode(self, e): from . import gcodeplater as plater self.log(_("G-Code plate function activated")) plater.GcodePlater(size = (800, 580), callback = self.platecb, parent = self, build_dimensions = self.build_dimensions_list, circular_platform = self.settings.circular_bed, antialias_samples = int(self.settings.antialias3dsamples)).Show() def platecb(self, name): self.log(_("Plated %s") % name) self.loadfile(None, name) if self.settings.uimode in (_("Tabbed"), _("Tabbed with platers")): # Switch to page 1 (Status tab) self.notebook.SetSelection(1) def do_editgcode(self, e = None): if self.filename is not None: MacroEditor(self.filename, [line.raw for line in self.fgcode], self.doneediting, True) def doneediting(self, gcode): open(self.filename, "w").write("\n".join(gcode)) wx.CallAfter(self.loadfile, None, self.filename) def sdmenu(self, e): obj = e.GetEventObject() popupmenu = wx.Menu() item = popupmenu.Append(-1, _("SD Upload")) if not self.fgcode: item.Enable(False) self.Bind(wx.EVT_MENU, self.upload, id = item.GetId()) item = popupmenu.Append(-1, _("SD Print")) self.Bind(wx.EVT_MENU, self.sdprintfile, id = item.GetId()) self.panel.PopupMenu(popupmenu, obj.GetPosition()) def htemp_change(self, event): if self.hsetpoint > 0: self.do_settemp("") wx.CallAfter(self.htemp.SetInsertionPoint, 0) def btemp_change(self, event): if self.bsetpoint > 0: self.do_bedtemp("") wx.CallAfter(self.btemp.SetInsertionPoint, 0) def tool_change(self, event): self.do_tool(self.extrudersel.GetValue()) def show_viz_window(self, event): if self.fgcode: self.gwindow.Show(True) self.gwindow.SetToolTip(wx.ToolTip("Mousewheel zooms the display\nShift / Mousewheel scrolls layers")) self.gwindow.Raise() def setfeeds(self, e): self.feedrates_changed = True try: if self.efeedc is not None: self.settings._set("e_feedrate", self.efeedc.GetValue()) except: pass try: self.settings._set("z_feedrate", self.zfeedc.GetValue()) except: pass try: self.settings._set("xy_feedrate", self.xyfeedc.GetValue()) except: pass try: self.settings._set("last_extrusion", self.edist.GetValue()) except: pass def homeButtonClicked(self, axis): # When user clicks on the XY control, the Z control no longer gets spacebar/repeat signals self.zb.clearRepeat() if axis == "x": self.onecmd('home X') elif axis == "y": # upper-right self.onecmd('home Y') elif axis == "z": self.onecmd('home Z') elif axis == "all": self.onecmd('home') elif axis == "center": center_x = self.build_dimensions_list[0] / 2 + self.build_dimensions_list[3] center_y = self.build_dimensions_list[1] / 2 + self.build_dimensions_list[4] feed = self.settings.xy_feedrate self.onecmd('G0 X%s Y%s F%s' % (center_x, center_y, feed)) else: return self.p.send_now('M114') def clamped_move_message(self): self.log(_("Manual move outside of the build volume prevented (see the \"Clamp manual moves\" option).")) def moveXY(self, x, y): # When user clicks on the XY control, the Z control no longer gets spacebar/repeat signals self.zb.clearRepeat() if x != 0: if self.settings.clamp_jogging: new_x = self.current_pos[0] + x if new_x < self.build_dimensions_list[3] or new_x > self.build_dimensions_list[0] + self.build_dimensions_list[3]: self.clamped_move_message() return self.onecmd('move X %s' % x) elif y != 0: if self.settings.clamp_jogging: new_y = self.current_pos[1] + y if new_y < self.build_dimensions_list[4] or new_y > self.build_dimensions_list[1] + self.build_dimensions_list[4]: self.clamped_move_message() return self.onecmd('move Y %s' % y) else: return self.p.send_now('M114') def moveZ(self, z): if z != 0: if self.settings.clamp_jogging: new_z = self.current_pos[2] + z if new_z < self.build_dimensions_list[5] or new_z > self.build_dimensions_list[2] + self.build_dimensions_list[5]: self.clamped_move_message() return self.onecmd('move Z %s' % z) self.p.send_now('M114') # When user clicks on the Z control, the XY control no longer gets spacebar/repeat signals self.xyb.clearRepeat() def spacebarAction(self): self.zb.repeatLast() self.xyb.repeatLast() # -------------------------------------------------------------- # Console handling # -------------------------------------------------------------- def catchprint(self, l): """Called by the Tee operator to write to the log box""" if not self.IsFrozen(): wx.CallAfter(self.addtexttolog, l) def addtexttolog(self, text): try: max_length = 20000 current_length = self.logbox.GetLastPosition() if current_length > max_length: self.logbox.Remove(0, current_length / 10) currentCaretPosition = self.logbox.GetInsertionPoint() currentLengthOfText = self.logbox.GetLastPosition() if self.autoscrolldisable: self.logbox.Freeze() (currentSelectionStart, currentSelectionEnd) = self.logbox.GetSelection() self.logbox.SetInsertionPointEnd() self.logbox.AppendText(text) self.logbox.SetInsertionPoint(currentCaretPosition) self.logbox.SetSelection(currentSelectionStart, currentSelectionEnd) self.logbox.Thaw() else: self.logbox.SetInsertionPointEnd() self.logbox.AppendText(text) except: self.log(_("Attempted to write invalid text to console, which could be due to an invalid baudrate")) def clear_log(self, e): self.logbox.Clear() def set_verbose_communications(self, e): self.p.loud = e.IsChecked() def set_autoscrolldisable(self,e): self.autoscrolldisable = e.IsChecked() def sendline(self, e): command = self.commandbox.GetValue() if not len(command): return logging.info(">>> " + command) line = self.precmd(str(command)) self.onecmd(line) self.commandbox.SetSelection(0, len(command)) self.commandbox.history.append(command) self.commandbox.histindex = len(self.commandbox.history) # -------------------------------------------------------------- # Main menu handling & actions # -------------------------------------------------------------- def create_menu(self): """Create main menu""" # File menu m = wx.Menu() self.Bind(wx.EVT_MENU, self.loadfile, m.Append(-1, _("&Open..."), _(" Open file"))) self.savebtn = m.Append(-1, _("&Save..."), _(" Save file")) self.savebtn.Enable(False) self.Bind(wx.EVT_MENU, self.savefile, self.savebtn) self.filehistory = wx.FileHistory(maxFiles = 8, idBase = wx.ID_FILE1) recent = wx.Menu() self.filehistory.UseMenu(recent) self.Bind(wx.EVT_MENU_RANGE, self.load_recent_file, id = wx.ID_FILE1, id2 = wx.ID_FILE9) m.Append(wx.ID_ANY, _("&Recent Files"), recent) self.Bind(wx.EVT_MENU, self.clear_log, m.Append(-1, _("Clear console"), _(" Clear output console"))) self.Bind(wx.EVT_MENU, self.on_exit, m.Append(wx.ID_EXIT, _("E&xit"), _(" Closes the Window"))) self.menustrip.Append(m, _("&File")) # Tools Menu m = wx.Menu() self.Bind(wx.EVT_MENU, self.do_editgcode, m.Append(-1, _("&Edit..."), _(" Edit open file"))) self.Bind(wx.EVT_MENU, self.plate, m.Append(-1, _("Plater"), _(" Compose 3D models into a single plate"))) self.Bind(wx.EVT_MENU, self.plate_gcode, m.Append(-1, _("G-Code Plater"), _(" Compose G-Codes into a single plate"))) self.Bind(wx.EVT_MENU, self.exclude, m.Append(-1, _("Excluder"), _(" Exclude parts of the bed from being printed"))) self.Bind(wx.EVT_MENU, self.project, m.Append(-1, _("Projector"), _(" Project slices"))) self.Bind(wx.EVT_MENU, self.show_spool_manager, m.Append(-1, _("Spool Manager"), _(" Manage different spools of filament"))) self.menustrip.Append(m, _("&Tools")) # Advanced Menu m = wx.Menu() self.recoverbtn = m.Append(-1, _("Recover"), _(" Recover previous print after a disconnect (homes X, Y, restores Z and E status)")) self.recoverbtn.Disable = lambda *a: self.recoverbtn.Enable(False) self.Bind(wx.EVT_MENU, self.recover, self.recoverbtn) self.menustrip.Append(m, _("&Advanced")) if self.settings.slic3rintegration: m = wx.Menu() print_menu = wx.Menu() filament_menu = wx.Menu() printer_menu = wx.Menu() m.AppendSubMenu(print_menu, _("Print &settings")) m.AppendSubMenu(filament_menu, _("&Filament")) m.AppendSubMenu(printer_menu, _("&Printer")) menus = {"print": print_menu, "filament": filament_menu, "printer": printer_menu} try: self.load_slic3r_configs(menus) self.menustrip.Append(m, _("&Slic3r")) except IOError: self.logError(_("Failed to load Slic3r configuration:") + "\n" + traceback.format_exc()) # Settings menu m = wx.Menu() self.macros_menu = wx.Menu() m.AppendSubMenu(self.macros_menu, _("&Macros")) self.Bind(wx.EVT_MENU, self.new_macro, self.macros_menu.Append(-1, _("<&New...>"))) self.Bind(wx.EVT_MENU, lambda *e: PronterOptions(self), m.Append(-1, _("&Options"), _(" Options dialog"))) self.Bind(wx.EVT_MENU, lambda x: threading.Thread(target = lambda: self.do_slice("set")).start(), m.Append(-1, _("Slicing settings"), _(" Adjust slicing settings"))) mItem = m.AppendCheckItem(-1, _("Debug communications"), _("Print all G-code sent to and received from the printer.")) m.Check(mItem.GetId(), self.p.loud) self.Bind(wx.EVT_MENU, self.set_verbose_communications, mItem) mItem = m.AppendCheckItem(-1, _("Don't autoscroll"), _("Disables automatic scrolling of the console when new text is added")) m.Check(mItem.GetId(), self.autoscrolldisable) self.Bind(wx.EVT_MENU, self.set_autoscrolldisable, mItem) self.menustrip.Append(m, _("&Settings")) self.update_macros_menu() self.SetMenuBar(self.menustrip) m = wx.Menu() self.Bind(wx.EVT_MENU, self.about, m.Append(-1, _("&About Printrun"), _("Show about dialog"))) self.menustrip.Append(m, _("&Help")) def project(self, event): """Start Projector tool""" from printrun import projectlayer projectlayer.SettingsFrame(self, self.p).Show() def exclude(self, event): """Start part excluder tool""" if not self.fgcode: wx.CallAfter(self.statusbar.SetStatusText, _("No file loaded. Please use load first.")) return if not self.excluder: from .excluder import Excluder self.excluder = Excluder() self.excluder.pop_window(self.fgcode, bgcolor = self.bgcolor, build_dimensions = self.build_dimensions_list) def show_spool_manager(self, event): """Show Spool Manager Window""" spoolmanager_gui.SpoolManagerMainWindow(self, self.spool_manager).Show() def about(self, event): """Show about dialog""" info = wx.adv.AboutDialogInfo() info.SetIcon(wx.Icon(iconfile("pronterface.png"), wx.BITMAP_TYPE_PNG)) info.SetName('Printrun') info.SetVersion(printcore.__version__) description = _("Printrun is a pure Python 3D printing" " (and other types of CNC) host software.") description += "\n\n" + \ _("%.02fmm of filament have been extruded during prints") \ % self.settings.total_filament_used info.SetDescription(description) info.SetCopyright('(C) 2011 - 2018') info.SetWebSite('https://github.com/kliment/Printrun') licence = """\ Printrun 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. Printrun is distributed in the hope that it will 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 Printrun. If not, see .""" info.SetLicence(licence) info.AddDeveloper('Kliment Yanev') info.AddDeveloper('Guillaume Seguin') wx.adv.AboutBox(info) # -------------------------------------------------------------- # Settings & command line handling (including update callbacks) # -------------------------------------------------------------- def _add_settings(self, size): self.settings._add(BooleanSetting("monitor", True, _("Monitor printer status"), _("Regularly monitor printer temperatures (required to have functional temperature graph or gauges)"), "Printer"), self.update_monitor) self.settings._add(StringSetting("simarrange_path", "", _("Simarrange command"), _("Path to the simarrange binary to use in the STL plater"), "External")) self.settings._add(BooleanSetting("circular_bed", False, _("Circular build platform"), _("Draw a circular (or oval) build platform instead of a rectangular one"), "Printer"), self.update_bed_viz) self.settings._add(SpinSetting("extruders", 0, 1, 5, _("Extruders count"), _("Number of extruders"), "Printer")) self.settings._add(BooleanSetting("clamp_jogging", False, _("Clamp manual moves"), _("Prevent manual moves from leaving the specified build dimensions"), "Printer")) self.settings._add(BooleanSetting("display_progress_on_printer", False, _("Display progress on printer"), _("Show progress on printers display (sent via M117, might not be supported by all printers)"), "Printer")) self.settings._add(SpinSetting("printer_progress_update_interval", 10., 0, 120, _("Printer progress update interval"), _("Interval in which pronterface sends the progress to the printer if enabled, in seconds"), "Printer")) self.settings._add(ComboSetting("uimode", _("Standard"), [_("Standard"), _("Compact"), ], _("Interface mode"), _("Standard interface is a one-page, three columns layout with controls/visualization/log\nCompact mode is a one-page, two columns layout with controls + log/visualization"), "UI"), self.reload_ui) #self.settings._add(ComboSetting("uimode", _("Standard"), [_("Standard"), _("Compact"), _("Tabbed"), _("Tabbed with platers")], _("Interface mode"), _("Standard interface is a one-page, three columns layout with controls/visualization/log\nCompact mode is a one-page, two columns layout with controls + log/visualization"), "UI"), self.reload_ui) self.settings._add(ComboSetting("controlsmode", "Standard", ["Standard", "Mini"], _("Controls mode"), _("Standard controls include all controls needed for printer setup and calibration, while Mini controls are limited to the ones needed for daily printing"), "UI"), self.reload_ui) self.settings._add(BooleanSetting("slic3rintegration", False, _("Enable Slic3r integration"), _("Add a menu to select Slic3r profiles directly from Pronterface"), "UI"), self.reload_ui) self.settings._add(BooleanSetting("slic3rupdate", False, _("Update Slic3r default presets"), _("When selecting a profile in Slic3r integration menu, also save it as the default Slic3r preset"), "UI")) self.settings._add(ComboSetting("mainviz", "3D", ["2D", "3D", "None"], _("Main visualization"), _("Select visualization for main window."), "Viewer"), self.reload_ui) self.settings._add(BooleanSetting("viz3d", False, _("Use 3D in GCode viewer window"), _("Use 3D mode instead of 2D layered mode in the visualization window"), "Viewer"), self.reload_ui) self.settings._add(StaticTextSetting("separator_3d_viewer", _("3D viewer options"), "", group = "Viewer")) self.settings._add(BooleanSetting("light3d", False, _("Use a lighter 3D visualization"), _("Use a lighter visualization with simple lines instead of extruded paths for 3D viewer"), "Viewer"), self.reload_ui) self.settings._add(ComboSetting("antialias3dsamples", "0", ["0", "2", "4", "8"], _("Number of anti-aliasing samples"), _("Amount of anti-aliasing samples used in the 3D viewer"), "Viewer"), self.reload_ui) self.settings._add(BooleanSetting("trackcurrentlayer3d", False, _("Track current layer in main 3D view"), _("Track the currently printing layer in the main 3D visualization"), "Viewer")) self.settings._add(FloatSpinSetting("gcview_path_width", 0.4, 0.01, 2, _("Extrusion width for 3D viewer"), _("Width of printed path in 3D viewer"), "Viewer", increment = 0.05), self.update_gcview_params) self.settings._add(FloatSpinSetting("gcview_path_height", 0.3, 0.01, 2, _("Layer height for 3D viewer"), _("Height of printed path in 3D viewer"), "Viewer", increment = 0.05), self.update_gcview_params) self.settings._add(BooleanSetting("tempgraph", True, _("Display temperature graph"), _("Display time-lapse temperature graph"), "UI"), self.reload_ui) self.settings._add(BooleanSetting("tempgauges", False, _("Display temperature gauges"), _("Display graphical gauges for temperatures visualization"), "UI"), self.reload_ui) self.settings._add(BooleanSetting("lockbox", False, _("Display interface lock checkbox"), _("Display a checkbox that, when check, locks most of Pronterface"), "UI"), self.reload_ui) self.settings._add(BooleanSetting("lockonstart", False, _("Lock interface upon print start"), _("If lock checkbox is enabled, lock the interface when starting a print"), "UI")) self.settings._add(BooleanSetting("refreshwhenloading", True, _("Update UI during G-Code load"), _("Regularly update visualization during the load of a G-Code file"), "UI")) self.settings._add(HiddenSetting("last_window_width", size[0])) self.settings._add(HiddenSetting("last_window_height", size[1])) self.settings._add(HiddenSetting("last_window_maximized", False)) self.settings._add(HiddenSetting("last_sash_position", -1)) self.settings._add(HiddenSetting("last_bed_temperature", 0.0)) self.settings._add(HiddenSetting("last_file_path", "")) self.settings._add(HiddenSetting("last_file_filter", 0)) self.settings._add(HiddenSetting("last_temperature", 0.0)) self.settings._add(StaticTextSetting("separator_2d_viewer", _("2D viewer options"), "", group = "Viewer")) self.settings._add(FloatSpinSetting("preview_extrusion_width", 0.5, 0, 10, _("Preview extrusion width"), _("Width of Extrusion in Preview"), "Viewer", increment = 0.1), self.update_gviz_params) self.settings._add(SpinSetting("preview_grid_step1", 10., 0, 200, _("Fine grid spacing"), _("Fine Grid Spacing"), "Viewer"), self.update_gviz_params) self.settings._add(SpinSetting("preview_grid_step2", 50., 0, 200, _("Coarse grid spacing"), _("Coarse Grid Spacing"), "Viewer"), self.update_gviz_params) self.settings._add(StringSetting("bgcolor", "#FFFFFF", _("Background color"), _("Pronterface background color"), "Colors"), self.reload_ui, validate = check_rgb_color) self.settings._add(StringSetting("gcview_color_background", "#FAFAC7FF", _("3D view background color"), _("Color of the 3D view background"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_travel", "#99999999", _("3D view travel moves color"), _("Color of travel moves in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_tool0", "#FF000099", _("3D view print moves color"), _("Color of print moves with tool 0 in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_tool1", "#AC0DFF99", _("3D view tool 1 moves color"), _("Color of print moves with tool 1 in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_tool2", "#FFCE0099", _("3D view tool 2 moves color"), _("Color of print moves with tool 2 in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_tool3", "#FF009F99", _("3D view tool 3 moves color"), _("Color of print moves with tool 3 in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_tool4", "#00FF8F99", _("3D view tool 4 moves color"), _("Color of print moves with tool 4 in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_printed", "#33BF0099", _("3D view printed moves color"), _("Color of printed moves in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_current", "#00E5FFCC", _("3D view current layer moves color"), _("Color of moves in current layer in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StringSetting("gcview_color_current_printed", "#196600CC", _("3D view printed current layer moves color"), _("Color of already printed moves from current layer in 3D view"), "Colors"), self.update_gcview_colors, validate = check_rgba_color) self.settings._add(StaticTextSetting("note1", _("Note:"), _("Changing some of these settings might require a restart to get effect"), group = "UI")) recentfilessetting = StringSetting("recentfiles", "[]") recentfilessetting.hidden = True self.settings._add(recentfilessetting, self.update_recent_files) def add_cmdline_arguments(self, parser): pronsole.pronsole.add_cmdline_arguments(self, parser) parser.add_argument('-a', '--autoconnect', help = _("automatically try to connect to printer on startup"), action = "store_true") def process_cmdline_arguments(self, args): pronsole.pronsole.process_cmdline_arguments(self, args) self.autoconnect = args.autoconnect def update_recent_files(self, param, value): if self.filehistory is None: return recent_files = [] try: recent_files = json.loads(value) except: self.logError(_("Failed to load recent files list:") + "\n" + traceback.format_exc()) # Clear history while self.filehistory.GetCount(): self.filehistory.RemoveFileFromHistory(0) recent_files.reverse() for f in recent_files: self.filehistory.AddFileToHistory(f) def update_gviz_params(self, param, value): params_map = {"preview_extrusion_width": "extrusion_width", "preview_grid_step1": "grid", "preview_grid_step2": "grid"} if param not in params_map: return if not hasattr(self, "gviz"): # GUI hasn't been loaded yet, ignore this setting return trueparam = params_map[param] if hasattr(self.gviz, trueparam): gviz = self.gviz elif hasattr(self.gwindow, "p") and hasattr(self.gwindow.p, trueparam): gviz = self.gwindow.p else: return if trueparam == "grid": try: item = int(param[-1]) # extract list item position grid = list(gviz.grid) grid[item - 1] = value value = tuple(grid) except: self.logError(traceback.format_exc()) if hasattr(self.gviz, trueparam): self.apply_gviz_params(self.gviz, trueparam, value) if hasattr(self.gwindow, "p") and hasattr(self.gwindow.p, trueparam): self.apply_gviz_params(self.gwindow.p, trueparam, value) def apply_gviz_params(self, widget, param, value): setattr(widget, param, value) widget.dirty = 1 wx.CallAfter(widget.Refresh) def update_gcview_colors(self, param, value): color = hexcolor_to_float(value, 4) # This is sort of a hack: we copy the color values into the preexisting # color tuple so that we don't need to update the tuple used by gcview target_color = getattr(self, param) for i, v in enumerate(color): target_color[i] = v wx.CallAfter(self.Refresh) def update_build_dimensions(self, param, value): pronsole.pronsole.update_build_dimensions(self, param, value) self.update_bed_viz() def update_bed_viz(self, *args): """Update bed visualization when size/type changed""" if hasattr(self, "gviz") and hasattr(self.gviz, "recreate_platform"): self.gviz.recreate_platform(self.build_dimensions_list, self.settings.circular_bed) if hasattr(self, "gwindow") and hasattr(self.gwindow, "recreate_platform"): self.gwindow.recreate_platform(self.build_dimensions_list, self.settings.circular_bed) def update_gcview_params(self, *args): need_reload = False if hasattr(self, "gviz") and hasattr(self.gviz, "set_gcview_params"): need_reload |= self.gviz.set_gcview_params(self.settings.gcview_path_width, self.settings.gcview_path_height) if hasattr(self, "gwindow") and hasattr(self.gwindow, "set_gcview_params"): need_reload |= self.gwindow.set_gcview_params(self.settings.gcview_path_width, self.settings.gcview_path_height) if need_reload: self.start_viz_thread() def update_monitor(self, *args): if hasattr(self, "graph") and self.display_graph: if self.settings.monitor: wx.CallAfter(self.graph.StartPlotting, 1000) else: wx.CallAfter(self.graph.StopPlotting) # -------------------------------------------------------------- # Statusbar handling # -------------------------------------------------------------- def statuschecker_inner(self): status_string = "" if self.sdprinting or self.uploading or self.p.printing: secondsremain, secondsestimate, progress = self.get_eta() if self.sdprinting or self.uploading: if self.uploading: status_string += _("SD upload: %04.2f%% |") % (100 * progress,) status_string += _(" Line# %d of %d lines |") % (self.p.queueindex, len(self.p.mainqueue)) else: status_string += _("SD printing: %04.2f%% |") % (self.percentdone,) elif self.p.printing: status_string += _("Printing: %04.2f%% |") % (100 * float(self.p.queueindex) / len(self.p.mainqueue),) status_string += _(" Line# %d of %d lines |") % (self.p.queueindex, len(self.p.mainqueue)) if progress > 0: status_string += _(" Est: %s of %s remaining | ") % (format_duration(secondsremain), format_duration(secondsestimate)) status_string += _(" Z: %.3f mm") % self.curlayer if self.settings.display_progress_on_printer and time.time() - self.printer_progress_time >= self.settings.printer_progress_update_interval: self.printer_progress_time = time.time() printer_progress_string = "M117 " + str(round(100 * float(self.p.queueindex) / len(self.p.mainqueue), 2)) + "% Est " + format_duration(secondsremain) #":" seems to be some kind of seperator for G-CODE" self.p.send_now(printer_progress_string.replace(":", ".")) logging.info(("The progress should be updated on the printer now: " + printer_progress_string)) if len(printer_progress_string) > 25: logging.info("Warning: The print progress message might be too long to be displayed properly") #13 chars for up to 99h est. elif self.loading_gcode: status_string = self.loading_gcode_message wx.CallAfter(self.statusbar.SetStatusText, status_string) wx.CallAfter(self.gviz.Refresh) # Call pronsole's statuschecker inner loop function to handle # temperature monitoring and status loop sleep pronsole.pronsole.statuschecker_inner(self, self.settings.monitor) try: while not self.sentglines.empty(): gc = self.sentglines.get_nowait() wx.CallAfter(self.gviz.addgcodehighlight, gc) self.sentglines.task_done() except queue.Empty: pass def statuschecker(self): pronsole.pronsole.statuschecker(self) wx.CallAfter(self.statusbar.SetStatusText, _("Not connected to printer.")) # -------------------------------------------------------------- # Interface lock handling # -------------------------------------------------------------- def lock(self, event = None, force = None): if force is not None: self.locker.SetValue(force) if self.locker.GetValue(): self.log(_("Locking interface.")) for panel in self.panels: panel.Disable() else: self.log(_("Unlocking interface.")) for panel in self.panels: panel.Enable() # -------------------------------------------------------------- # Printer connection handling # -------------------------------------------------------------- def connect(self, event = None): self.log(_("Connecting...")) port = None if self.serialport.GetValue(): port = str(self.serialport.GetValue()) else: scanned = self.scanserial() if scanned: port = scanned[0] baud = 115200 try: baud = int(self.baud.GetValue()) except: self.logError(_("Could not parse baud rate: ") + "\n" + traceback.format_exc()) if self.paused: self.p.paused = 0 self.p.printing = 0 wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.printbtn.SetLabel, _("Print")) wx.CallAfter(self.toolbarsizer.Layout) self.paused = 0 if self.sdprinting: self.p.send_now("M26 S0") if not self.connect_to_printer(port, baud, self.settings.dtr): return if port != self.settings.port: self.set("port", port) if baud != self.settings.baudrate: self.set("baudrate", str(baud)) if self.predisconnect_mainqueue: self.recoverbtn.Enable() def store_predisconnect_state(self): self.predisconnect_mainqueue = self.p.mainqueue self.predisconnect_queueindex = self.p.queueindex self.predisconnect_layer = self.curlayer def disconnect(self, event = None): self.log(_("Disconnected.")) if self.p.printing or self.p.paused or self.paused: self.store_predisconnect_state() self.p.disconnect() self.statuscheck = False if self.status_thread: self.status_thread.join() self.status_thread = None wx.CallAfter(self.connectbtn.SetLabel, _("Connect")) wx.CallAfter(self.connectbtn.SetToolTip, wx.ToolTip(_("Connect to the printer"))) wx.CallAfter(self.connectbtn.Bind, wx.EVT_BUTTON, self.connect) wx.CallAfter(self.gui_set_disconnected) if self.paused: self.p.paused = 0 self.p.printing = 0 wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.printbtn.SetLabel, _("Print")) self.paused = 0 if self.sdprinting: self.p.send_now("M26 S0") # Relayout the toolbar to handle new buttons size wx.CallAfter(self.toolbarsizer.Layout) def reset(self, event): self.log(_("Reset.")) dlg = wx.MessageDialog(self, _("Are you sure you want to reset the printer?"), _("Reset?"), wx.YES | wx.NO) if dlg.ShowModal() == wx.ID_YES: self.p.reset() self.sethotendgui(0) self.setbedgui(0) self.p.printing = 0 wx.CallAfter(self.printbtn.SetLabel, _("Print")) if self.paused: self.p.paused = 0 wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) self.paused = 0 wx.CallAfter(self.toolbarsizer.Layout) dlg.Destroy() # -------------------------------------------------------------- # Print/upload handling # -------------------------------------------------------------- def on_startprint(self): wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.pausebtn.Enable) wx.CallAfter(self.printbtn.SetLabel, _("Restart")) wx.CallAfter(self.toolbarsizer.Layout) def printfile(self, event): self.extra_print_time = 0 if self.paused: self.p.paused = 0 self.paused = 0 if self.sdprinting: self.on_startprint() self.p.send_now("M26 S0") self.p.send_now("M24") return if not self.fgcode: wx.CallAfter(self.statusbar.SetStatusText, _("No file loaded. Please use load first.")) return if not self.p.online: wx.CallAfter(self.statusbar.SetStatusText, _("Not connected to printer.")) return self.sdprinting = False self.on_startprint() self.p.startprint(self.fgcode) def sdprintfile(self, event): self.extra_print_time = 0 self.on_startprint() threading.Thread(target = self.getfiles).start() def upload(self, event): if not self.fgcode: return if not self.p.online: return dlg = wx.TextEntryDialog(self, ("Enter a target filename in 8.3 format:"), _("Pick SD filename"), dosify(self.filename)) if dlg.ShowModal() == wx.ID_OK: self.p.send_now("M21") self.p.send_now("M28 " + str(dlg.GetValue())) self.recvlisteners.append(self.uploadtrigger) dlg.Destroy() def uploadtrigger(self, l): if "Writing to file" in l: self.uploading = True self.p.startprint(self.fgcode) self.p.endcb = self.endupload self.recvlisteners.remove(self.uploadtrigger) elif "open failed, File" in l: self.recvlisteners.remove(self.uploadtrigger) def endupload(self): self.p.send_now("M29 ") wx.CallAfter(self.statusbar.SetStatusText, _("File upload complete")) time.sleep(0.5) self.p.clear = True self.uploading = False def pause(self, event = None): if not self.paused: self.log(_("Print paused at: %s") % format_time(time.time())) if self.settings.display_progress_on_printer: printer_progress_string = "M117 PausedInPronterface" self.p.send_now(printer_progress_string) if self.sdprinting: self.p.send_now("M25") else: if not self.p.printing: return self.p.pause() self.p.runSmallScript(self.pauseScript) self.paused = True # self.p.runSmallScript(self.pauseScript) self.extra_print_time += int(time.time() - self.starttime) wx.CallAfter(self.pausebtn.SetLabel, _("Resume")) wx.CallAfter(self.toolbarsizer.Layout) else: self.log(_("Resuming.")) if self.settings.display_progress_on_printer: printer_progress_string = "M117 Resuming" self.p.send_now(printer_progress_string) self.paused = False if self.sdprinting: self.p.send_now("M24") else: self.p.resume() wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.toolbarsizer.Layout) def recover(self, event): self.extra_print_time = 0 if not self.p.online: wx.CallAfter(self.statusbar.SetStatusText, _("Not connected to printer.")) return # Reset Z self.p.send_now("G92 Z%f" % self.predisconnect_layer) # Home X and Y self.p.send_now("G28 X Y") self.on_startprint() self.p.startprint(self.predisconnect_mainqueue, self.p.queueindex) # -------------------------------------------------------------- # File loading handling # -------------------------------------------------------------- def filesloaded(self): dlg = wx.SingleChoiceDialog(self, _("Select the file to print"), _("Pick SD file"), self.sdfiles) if dlg.ShowModal() == wx.ID_OK: target = dlg.GetStringSelection() if len(target): self.recvlisteners.append(self.waitforsdresponse) self.p.send_now("M23 " + target.lower()) dlg.Destroy() def getfiles(self): if not self.p.online: self.sdfiles = [] return self.sdlisting = 0 self.sdfiles = [] self.recvlisteners.append(self.listfiles) self.p.send_now("M21") self.p.send_now("M20") def model_to_gcode_filename(self, filename): suffix = "_export.gcode" for ext in [".stl", ".obj"]: filename = filename.replace(ext, suffix) filename = filename.replace(ext.upper(), suffix) return filename def slice_func(self): try: output_filename = self.model_to_gcode_filename(self.filename) pararray = prepare_command(self.settings.slicecommandpath+self.settings.slicecommand, {"$s": self.filename, "$o": output_filename}) if self.settings.slic3rintegration: for cat, config in self.slic3r_configs.items(): if config: fpath = os.path.join(self.slic3r_configpath, cat, config) pararray += ["--load", fpath] self.log(_("Running ") + " ".join(pararray)) self.slicep = subprocess.Popen(pararray, stdin=subprocess.DEVNULL, stderr = subprocess.STDOUT, stdout = subprocess.PIPE, universal_newlines = True) while True: o = self.slicep.stdout.read(1) if o == '' and self.slicep.poll() is not None: break sys.stdout.write(o) self.slicep.wait() self.stopsf = 1 except: self.logError(_("Failed to execute slicing software: ") + "\n" + traceback.format_exc()) self.stopsf = 1 def slice_monitor(self): while not self.stopsf: try: wx.CallAfter(self.statusbar.SetStatusText, _("Slicing...")) # +self.cout.getvalue().split("\n")[-1]) except: pass time.sleep(0.1) fn = self.filename try: self.load_gcode_async(self.model_to_gcode_filename(self.filename)) except: self.filename = fn self.slicing = False self.slicep = None self.loadbtn.SetLabel, _("Load file") def slice(self, filename): wx.CallAfter(self.loadbtn.SetLabel, _("Cancel")) wx.CallAfter(self.toolbarsizer.Layout) self.log(_("Slicing ") + filename) self.cout = StringIO.StringIO() self.filename = filename self.stopsf = 0 self.slicing = True threading.Thread(target = self.slice_func).start() threading.Thread(target = self.slice_monitor).start() def cmdline_filename_callback(self, filename): # Do nothing when processing a filename from command line, as we'll # handle it when everything has been prepared self.filename = filename def do_load(self, l): if hasattr(self, 'slicing'): self.loadfile(None, l) else: self._do_load(l) def load_recent_file(self, event): fileid = event.GetId() - wx.ID_FILE1 path = self.filehistory.GetHistoryFile(fileid) self.loadfile(None, filename = path) def loadfile(self, event, filename = None): if self.slicing and self.slicep is not None: self.slicep.terminate() return basedir = self.settings.last_file_path if not os.path.exists(basedir): basedir = "." try: basedir = os.path.split(self.filename)[0] except: pass dlg = None if filename is None: dlg = wx.FileDialog(self, _("Open file to print"), basedir, style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.SetWildcard(_("OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|GCODE files (*.gcode;*.gco;*.g)|*.gcode;*.gco;*.g|OBJ, STL files (*.stl;*.STL;*.obj;*.OBJ)|*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*")) try: dlg.SetFilterIndex(self.settings.last_file_filter) except: pass if filename or dlg.ShowModal() == wx.ID_OK: if filename: name = filename else: name = dlg.GetPath() self.set("last_file_filter", dlg.GetFilterIndex()) dlg.Destroy() if not os.path.exists(name): self.statusbar.SetStatusText(_("File not found!")) return path = os.path.split(name)[0] if path != self.settings.last_file_path: self.set("last_file_path", path) try: abspath = os.path.abspath(name) recent_files = [] try: recent_files = json.loads(self.settings.recentfiles) except: self.logError(_("Failed to load recent files list:") + "\n" + traceback.format_exc()) if abspath in recent_files: recent_files.remove(abspath) recent_files.insert(0, abspath) if len(recent_files) > 5: recent_files = recent_files[:5] self.set("recentfiles", json.dumps(recent_files)) except: self.logError(_("Could not update recent files list:") + "\n" + traceback.format_exc()) if name.lower().endswith(".stl") or name.lower().endswith(".obj"): self.slice(name) else: self.load_gcode_async(name) else: dlg.Destroy() def load_gcode_async(self, filename): self.filename = filename gcode = self.pre_gcode_load() self.log(_("Loading file: %s") % filename) threading.Thread(target = self.load_gcode_async_thread, args = (gcode,)).start() def load_gcode_async_thread(self, gcode): try: self.load_gcode(self.filename, layer_callback = self.layer_ready_cb, gcode = gcode) except PronterfaceQuitException: return except Exception as e: self.log(str(e)) wx.CallAfter(self.post_gcode_load,False,True) return wx.CallAfter(self.post_gcode_load) def layer_ready_cb(self, gcode, layer): global pronterface_quitting if pronterface_quitting: raise PronterfaceQuitException if not self.settings.refreshwhenloading: return self.viz_last_layer = layer if time.time() - self.viz_last_yield > 1.0: time.sleep(0.2) self.loading_gcode_message = _("Loading %s: %d layers loaded (%d lines)") % (self.filename, layer + 1, len(gcode)) self.viz_last_yield = time.time() wx.CallAfter(self.statusbar.SetStatusText, self.loading_gcode_message) def start_viz_thread(self, gcode = None): threading.Thread(target = self.loadviz, args = (gcode,)).start() def pre_gcode_load(self): self.loading_gcode = True self.loading_gcode_message = _("Loading %s...") % self.filename if self.settings.mainviz == "None": gcode = gcoder.LightGCode(deferred = True) else: gcode = gcoder.GCode(deferred = True) self.viz_last_yield = 0 self.viz_last_layer = -1 self.start_viz_thread(gcode) return gcode def post_gcode_load(self, print_stats = True, failed=False): # Must be called in wx.CallAfter for safety self.loading_gcode = False if failed == False: self.SetTitle(_("Pronterface - %s") % self.filename) message = _("Loaded %s, %d lines") % (self.filename, len(self.fgcode),) self.log(message) self.statusbar.SetStatusText(message) self.savebtn.Enable(True) self.loadbtn.SetLabel(_("Load File")) self.printbtn.SetLabel(_("Print")) self.pausebtn.SetLabel(_("Pause")) self.pausebtn.Disable() self.recoverbtn.Disable() if failed==False and self.p.online: self.printbtn.Enable() self.toolbarsizer.Layout() self.viz_last_layer = None if print_stats: self.output_gcode_stats() def calculate_remaining_filament(self, length, extruder = 0): """ float calculate_remaining_filament( float length, int extruder ) Calculate the remaining length of filament for the given extruder if the given length were to be extruded. """ remainder = self.spool_manager.getRemainingFilament(extruder) - length minimum_warning_length = 1000.0 if remainder < minimum_warning_length: self.log(_("\nWARNING: Currently loaded spool for extruder " + "%d will likely run out of filament during the print.\n" % extruder)) return remainder def output_gcode_stats(self): gcode = self.fgcode self.spool_manager.refresh() self.log(_("%.2fmm of filament used in this print") % gcode.filament_length) if(len(gcode.filament_length_multi)>1): for i in enumerate(gcode.filament_length_multi): if self.spool_manager.getSpoolName(i[0]) == None: logging.info("- Extruder %d: %0.02fmm" % (i[0], i[1])) else: logging.info(("- Extruder %d: %0.02fmm" % (i[0], i[1]) + " from spool '%s' (%.2fmm will remain)" % (self.spool_manager.getSpoolName(i[0]), self.calculate_remaining_filament(i[1], i[0])))) else: if self.spool_manager.getSpoolName(0) != None: self.log(_( "Using spool '%s' (%.2fmm of filament will remain)" % (self.spool_manager.getSpoolName(0), self.calculate_remaining_filament( gcode.filament_length, 0)))) self.log(_("The print goes:")) self.log(_("- from %.2f mm to %.2f mm in X and is %.2f mm wide") % (gcode.xmin, gcode.xmax, gcode.width)) self.log(_("- from %.2f mm to %.2f mm in Y and is %.2f mm deep") % (gcode.ymin, gcode.ymax, gcode.depth)) self.log(_("- from %.2f mm to %.2f mm in Z and is %.2f mm high") % (gcode.zmin, gcode.zmax, gcode.height)) self.log(_("Estimated duration: %d layers, %s") % gcode.estimate_duration()) def loadviz(self, gcode = None): try: self.gviz.clear() self.gwindow.p.clear() if gcode is not None: generator = self.gviz.addfile_perlayer(gcode, True) next_layer = 0 # Progressive loading of visualization # We load layers up to the last one which has been processed in GCoder # (self.viz_last_layer) # Once the GCode has been entirely loaded, this variable becomes None, # indicating that we can do the last generator call to finish the # loading of the visualization, which will itself return None. # During preloading we verify that the layer we added is the one we # expected through the assert call. while True: global pronterface_quitting if pronterface_quitting: return max_layer = self.viz_last_layer if max_layer is None: break while next_layer <= max_layer: assert(next(generator) == next_layer) next_layer += 1 time.sleep(0.1) generator_output = next(generator) while generator_output is not None: assert(generator_output in (None, next_layer)) next_layer += 1 generator_output = next(generator) else: # If GCode is not being loaded asynchroneously, it is already # loaded, so let's make visualization sequentially gcode = self.fgcode self.gviz.addfile(gcode) wx.CallAfter(self.gviz.Refresh) # Load external window sequentially now that everything is ready. # We can't really do any better as the 3D viewer might clone the # finalized model from the main visualization self.gwindow.p.addfile(gcode) except: wx.CallAfter(self.gviz.Refresh) # -------------------------------------------------------------- # File saving handling # -------------------------------------------------------------- def savefile(self, event): basedir = self.settings.last_file_path if not os.path.exists(basedir): basedir = "." try: basedir = os.path.split(self.filename)[0] except: pass dlg = wx.FileDialog(self, _("Save as"), basedir, style = wx.FD_SAVE) dlg.SetWildcard(_("GCODE files (*.gcode;*.gco;*.g)|*.gcode;*.gco;*.g|All Files (*.*)|*.*")) if dlg.ShowModal() == wx.ID_OK: name = dlg.GetPath() open(name, "w").write("\n".join((line.raw for line in self.fgcode))) self.log(_("G-Code succesfully saved to %s") % name) dlg.Destroy() # -------------------------------------------------------------- # Printcore callbacks # -------------------------------------------------------------- def process_host_command(self, command): """Override host command handling""" command = command.lstrip() if command.startswith(";@pause"): self.pause(None) else: pronsole.pronsole.process_host_command(self, command) def startcb(self, resuming = False): """Callback on print start""" pronsole.pronsole.startcb(self, resuming) if self.settings.lockbox and self.settings.lockonstart: wx.CallAfter(self.lock, force = True) def endcb(self): """Callback on print end/pause""" pronsole.pronsole.endcb(self) if self.p.queueindex == 0: self.p.runSmallScript(self.endScript) if self.settings.display_progress_on_printer: printer_progress_string = "M117 Finished Print" self.p.send_now(printer_progress_string) wx.CallAfter(self.pausebtn.Disable) wx.CallAfter(self.printbtn.SetLabel, _("Print")) wx.CallAfter(self.toolbarsizer.Layout) def online(self): """Callback when printer goes online""" self.log(_("Printer is now online.")) wx.CallAfter(self.online_gui) def online_gui(self): """Callback when printer goes online (graphical bits)""" self.connectbtn.SetLabel(_("Disconnect")) self.connectbtn.SetToolTip(wx.ToolTip("Disconnect from the printer")) self.connectbtn.Bind(wx.EVT_BUTTON, self.disconnect) if hasattr(self, "extrudersel"): self.do_tool(self.extrudersel.GetValue()) self.gui_set_connected() if self.filename: self.printbtn.Enable() wx.CallAfter(self.toolbarsizer.Layout) def sentcb(self, line, gline): """Callback when a printer gcode has been sent""" if not gline: pass elif gline.command in ["M104", "M109"]: gline_s = gcoder.S(gline) if gline_s is not None: temp = gline_s if self.display_gauges: wx.CallAfter(self.hottgauge.SetTarget, temp) if self.display_graph: wx.CallAfter(self.graph.SetExtruder0TargetTemperature, temp) elif gline.command in ["M140", "M190"]: gline_s = gcoder.S(gline) if gline_s is not None: temp = gline_s if self.display_gauges: wx.CallAfter(self.bedtgauge.SetTarget, temp) if self.display_graph: wx.CallAfter(self.graph.SetBedTargetTemperature, temp) elif gline.command in ["M106"]: gline_s=gcoder.S(gline) fanpow=255 if gline_s is not None: fanpow=gline_s if self.display_graph: wx.CallAfter(self.graph.SetFanPower, fanpow) elif gline.command in ["M107"]: if self.display_graph: wx.CallAfter(self.graph.SetFanPower, 0) elif gline.command.startswith("T"): tool = gline.command[1:] if hasattr(self, "extrudersel"): wx.CallAfter(self.extrudersel.SetValue, tool) if gline.is_move: self.sentglines.put_nowait(gline) def is_excluded_move(self, gline): """Check whether the given moves ends at a position specified as excluded in the part excluder""" if not gline.is_move or not self.excluder or not self.excluder.rectangles: return False for (x0, y0, x1, y1) in self.excluder.rectangles: if x0 <= gline.current_x <= x1 and y0 <= gline.current_y <= y1: return True return False def preprintsendcb(self, gline, next_gline): """Callback when a printer gcode is about to be sent. We use it to exclude moves defined by the part excluder tool""" if not self.is_excluded_move(gline): return gline else: if gline.z is not None: if gline.relative: if self.excluder_z_abs is not None: self.excluder_z_abs += gline.z elif self.excluder_z_rel is not None: self.excluder_z_rel += gline.z else: self.excluder_z_rel = gline.z else: self.excluder_z_rel = None self.excluder_z_abs = gline.z if gline.e is not None and not gline.relative_e: self.excluder_e = gline.e # If next move won't be excluded, push the changes we have to do if next_gline is not None and not self.is_excluded_move(next_gline): if self.excluder_e is not None: self.p.send_now("G92 E%.5f" % self.excluder_e) self.excluder_e = None if self.excluder_z_abs is not None: if gline.relative: self.p.send_now("G90") self.p.send_now("G1 Z%.5f" % self.excluder_z_abs) self.excluder_z_abs = None if gline.relative: self.p.send_now("G91") if self.excluder_z_rel is not None: if not gline.relative: self.p.send_now("G91") self.p.send_now("G1 Z%.5f" % self.excluder_z_rel) self.excluder_z_rel = None if not gline.relative: self.p.send_now("G90") return None def printsentcb(self, gline): """Callback when a print gcode has been sent""" if gline.is_move: if hasattr(self.gwindow, "set_current_gline"): wx.CallAfter(self.gwindow.set_current_gline, gline) if hasattr(self.gviz, "set_current_gline"): wx.CallAfter(self.gviz.set_current_gline, gline) def layer_change_cb(self, newlayer): """Callback when the printed layer changed""" pronsole.pronsole.layer_change_cb(self, newlayer) if self.settings.mainviz != "3D" or self.settings.trackcurrentlayer3d: wx.CallAfter(self.gviz.setlayer, newlayer) def update_tempdisplay(self): try: temps = parse_temperature_report(self.tempreadings) if "T0" in temps and temps["T0"][0]: hotend_temp = float(temps["T0"][0]) elif "T" in temps and temps["T"][0]: hotend_temp = float(temps["T"][0]) else: hotend_temp = None if hotend_temp is not None: if self.display_graph: wx.CallAfter(self.graph.SetExtruder0Temperature, hotend_temp) if self.display_gauges: wx.CallAfter(self.hottgauge.SetValue, hotend_temp) setpoint = None if "T0" in temps and temps["T0"][1]: setpoint = float(temps["T0"][1]) elif temps["T"][1]: setpoint = float(temps["T"][1]) if setpoint is not None: if self.display_graph: wx.CallAfter(self.graph.SetExtruder0TargetTemperature, setpoint) if self.display_gauges: wx.CallAfter(self.hottgauge.SetTarget, setpoint) if "T1" in temps: hotend_temp = float(temps["T1"][0]) if self.display_graph: wx.CallAfter(self.graph.SetExtruder1Temperature, hotend_temp) setpoint = temps["T1"][1] if setpoint and self.display_graph: wx.CallAfter(self.graph.SetExtruder1TargetTemperature, float(setpoint)) bed_temp = float(temps["B"][0]) if "B" in temps and temps["B"][0] else None if bed_temp is not None: if self.display_graph: wx.CallAfter(self.graph.SetBedTemperature, bed_temp) if self.display_gauges: wx.CallAfter(self.bedtgauge.SetValue, bed_temp) setpoint = temps["B"][1] if setpoint: setpoint = float(setpoint) if self.display_graph: wx.CallAfter(self.graph.SetBedTargetTemperature, setpoint) if self.display_gauges: wx.CallAfter(self.bedtgauge.SetTarget, setpoint) except: self.logError(traceback.format_exc()) def update_pos(self): bits = gcoder.m114_exp.findall(self.posreport) x = None y = None z = None for bit in bits: if not bit[0]: continue if x is None and bit[0] == "X": x = float(bit[1]) elif y is None and bit[0] == "Y": y = float(bit[1]) elif z is None and bit[0] == "Z": z = float(bit[1]) if x is not None: self.current_pos[0] = x if y is not None: self.current_pos[1] = y if z is not None: self.current_pos[2] = z def recvcb_actions(self, l): if l.startswith("!!"): if not self.paused: wx.CallAfter(self.pause) msg = l.split(" ", 1) if len(msg) > 1 and not self.p.loud: self.log(msg[1] + "\n") return True elif l.startswith("//"): command = l.split(" ", 1) if len(command) > 1: command = command[1] command = command.split(":") if len(command) == 2 and command[0] == "action": command = command[1] self.log(_("Received command %s") % command) if command == "pause": if not self.paused: wx.CallAfter(self.pause) return True elif command == "resume": if self.paused: wx.CallAfter(self.pause) return True elif command == "disconnect": wx.CallAfter(self.disconnect) return True return False def recvcb(self, l): l = l.rstrip() if not self.recvcb_actions(l): report_type = self.recvcb_report(l) isreport = report_type != REPORT_NONE if report_type & REPORT_POS: self.update_pos() elif report_type & REPORT_TEMP: wx.CallAfter(self.tempdisp.SetLabel, self.tempreadings.strip().replace("ok ", "")) self.update_tempdisplay() if not self.lineignorepattern.match(l) and not self.p.loud and (l not in ["ok", "wait"] and (not isreport or report_type & REPORT_MANUAL)): self.log(l) for listener in self.recvlisteners: listener(l) def listfiles(self, line, ignored = False): if "Begin file list" in line: self.sdlisting = True elif "End file list" in line: self.sdlisting = False self.recvlisteners.remove(self.listfiles) wx.CallAfter(self.filesloaded) elif self.sdlisting: self.sdfiles.append(re.sub(" \d+$","",line.strip().lower())) def waitforsdresponse(self, l): if "file.open failed" in l: wx.CallAfter(self.statusbar.SetStatusText, _("Opening file failed.")) self.recvlisteners.remove(self.waitforsdresponse) return if "File opened" in l: wx.CallAfter(self.statusbar.SetStatusText, l) if "File selected" in l: wx.CallAfter(self.statusbar.SetStatusText, _("Starting print")) self.sdprinting = True self.p.send_now("M24") self.startcb() return if "Done printing file" in l: wx.CallAfter(self.statusbar.SetStatusText, l) self.sdprinting = False self.recvlisteners.remove(self.waitforsdresponse) self.endcb() return if "SD printing byte" in l: # M27 handler try: resp = l.split() vals = resp[-1].split("/") self.percentdone = 100.0 * int(vals[0]) / int(vals[1]) except: pass # -------------------------------------------------------------- # Custom buttons handling # -------------------------------------------------------------- def cbuttons_reload(self): allcbs = getattr(self, "custombuttons_widgets", []) for button in allcbs: self.cbuttonssizer.Detach(button) button.Destroy() self.custombuttons_widgets = [] custombuttons = self.custombuttons[:] + [None] for i, btndef in enumerate(custombuttons): if btndef is None: if i == len(custombuttons) - 1: self.newbuttonbutton = b = wx.Button(self.centerpanel, -1, "+", size = (35, 18), style = wx.BU_EXACTFIT) b.SetForegroundColour("#4444ff") b.SetToolTip(wx.ToolTip(_("click to add new custom button"))) b.Bind(wx.EVT_BUTTON, self.cbutton_edit) else: b = wx.StaticText(self.panel, -1, "") else: b = wx.Button(self.centerpanel, -1, btndef.label, style = wx.BU_EXACTFIT) b.SetToolTip(wx.ToolTip(_("Execute command: ") + btndef.command)) if btndef.background: b.SetBackgroundColour(btndef.background) rr, gg, bb, aa = b.GetBackgroundColour().Get() #last item is alpha if 0.3 * rr + 0.59 * gg + 0.11 * bb < 60: b.SetForegroundColour("#ffffff") b.custombutton = i b.properties = btndef if btndef is not None: b.Bind(wx.EVT_BUTTON, self.process_button) b.Bind(wx.EVT_MOUSE_EVENTS, self.editbutton) self.custombuttons_widgets.append(b) if isinstance(self.cbuttonssizer, wx.GridBagSizer): self.cbuttonssizer.Add(b, pos = (i // 4, i % 4), flag = wx.EXPAND) else: self.cbuttonssizer.Add(b, flag = wx.EXPAND) self.centerpanel.Layout() self.centerpanel.GetContainingSizer().Layout() def help_button(self): self.log(_('Defines custom button. Usage: button "title" [/c "colour"] command')) def do_button(self, argstr): def nextarg(rest): rest = rest.lstrip() if rest.startswith('"'): return rest[1:].split('"', 1) else: return rest.split(None, 1) # try: num, argstr = nextarg(argstr) num = int(num) title, argstr = nextarg(argstr) colour = None try: c1, c2 = nextarg(argstr) if c1 == "/c": colour, argstr = nextarg(c2) except: pass command = argstr.strip() if num < 0 or num >= 64: self.log(_("Custom button number should be between 0 and 63")) return while num >= len(self.custombuttons): self.custombuttons.append(None) self.custombuttons[num] = SpecialButton(title, command) if colour is not None: self.custombuttons[num].background = colour if not self.processing_rc: self.cbuttons_reload() def cbutton_save(self, n, bdef, new_n = None): if new_n is None: new_n = n if bdef is None or bdef == "": self.save_in_rc(("button %d" % n), '') elif bdef.background: colour = bdef.background if not isinstance(colour, str): if isinstance(colour, tuple) and tuple(map(type, colour)) == (int, int, int): colour = (x % 256 for x in colour) colour = wx.Colour(*colour).GetAsString(wx.C2S_NAME | wx.C2S_HTML_SYNTAX) else: colour = wx.Colour(colour).GetAsString(wx.C2S_NAME | wx.C2S_HTML_SYNTAX) self.save_in_rc(("button %d" % n), 'button %d "%s" /c "%s" %s' % (new_n, bdef.label, colour, bdef.command)) else: self.save_in_rc(("button %d" % n), 'button %d "%s" %s' % (new_n, bdef.label, bdef.command)) def cbutton_edit(self, e, button = None): bedit = ButtonEdit(self) if button is not None: n = button.custombutton bedit.name.SetValue(button.properties.label) bedit.command.SetValue(button.properties.command) if button.properties.background: colour = button.properties.background if not isinstance(colour, str): if isinstance(colour, tuple) and tuple(map(type, colour)) == (int, int, int): colour = (x % 256 for x in colour) colour = wx.Colour(*colour).GetAsString(wx.C2S_NAME | wx.C2S_HTML_SYNTAX) else: colour = wx.Colour(colour).GetAsString(wx.C2S_NAME | wx.C2S_HTML_SYNTAX) bedit.color.SetValue(colour) else: n = len(self.custombuttons) while n > 0 and self.custombuttons[n - 1] is None: n -= 1 if bedit.ShowModal() == wx.ID_OK: if n == len(self.custombuttons): self.custombuttons.append(None) self.custombuttons[n] = SpecialButton(bedit.name.GetValue().strip(), bedit.command.GetValue().strip(), custom = True) if bedit.color.GetValue().strip() != "": self.custombuttons[n].background = bedit.color.GetValue() self.cbutton_save(n, self.custombuttons[n]) wx.CallAfter(bedit.Destroy) wx.CallAfter(self.cbuttons_reload) def cbutton_remove(self, e, button): n = button.custombutton self.cbutton_save(n, None) del self.custombuttons[n] for i in range(n, len(self.custombuttons)): self.cbutton_save(i, self.custombuttons[i]) wx.CallAfter(self.cbuttons_reload) def cbutton_order(self, e, button, dir): n = button.custombutton if dir < 0: n = n - 1 if n + 1 >= len(self.custombuttons): self.custombuttons.append(None) # pad # swap self.custombuttons[n], self.custombuttons[n + 1] = self.custombuttons[n + 1], self.custombuttons[n] self.cbutton_save(n, self.custombuttons[n]) self.cbutton_save(n + 1, self.custombuttons[n + 1]) wx.CallAfter(self.cbuttons_reload) def editbutton(self, e): if e.IsCommandEvent() or e.ButtonUp(wx.MOUSE_BTN_RIGHT): if e.IsCommandEvent(): pos = (0, 0) else: pos = e.GetPosition() popupmenu = wx.Menu() obj = e.GetEventObject() if hasattr(obj, "custombutton"): item = popupmenu.Append(-1, _("Edit custom button '%s'") % e.GetEventObject().GetLabelText()) self.Bind(wx.EVT_MENU, lambda e, button = e.GetEventObject(): self.cbutton_edit(e, button), item) item = popupmenu.Append(-1, _("Move left <<")) self.Bind(wx.EVT_MENU, lambda e, button = e.GetEventObject(): self.cbutton_order(e, button, -1), item) if obj.custombutton == 0: item.Enable(False) item = popupmenu.Append(-1, _("Move right >>")) self.Bind(wx.EVT_MENU, lambda e, button = e.GetEventObject(): self.cbutton_order(e, button, 1), item) if obj.custombutton == 63: item.Enable(False) pos = self.panel.ScreenToClient(e.GetEventObject().ClientToScreen(pos)) item = popupmenu.Append(-1, _("Remove custom button '%s'") % e.GetEventObject().GetLabelText()) self.Bind(wx.EVT_MENU, lambda e, button = e.GetEventObject(): self.cbutton_remove(e, button), item) else: item = popupmenu.Append(-1, _("Add custom button")) self.Bind(wx.EVT_MENU, self.cbutton_edit, item) self.panel.PopupMenu(popupmenu, pos) elif e.Dragging() and e.LeftIsDown(): obj = e.GetEventObject() scrpos = obj.ClientToScreen(e.GetPosition()) if not hasattr(self, "dragpos"): self.dragpos = scrpos e.Skip() return else: dx, dy = self.dragpos[0] - scrpos[0], self.dragpos[1] - scrpos[1] if dx * dx + dy * dy < 5 * 5: # threshold to detect dragging for jittery mice e.Skip() return if not hasattr(self, "dragging"): # init dragging of the custom button if hasattr(obj, "custombutton") and (not hasattr(obj,"properties") or obj.properties is not None): for b in self.custombuttons_widgets: if not hasattr(b,"properties") or b.properties is None: b.Enable() b.SetLabel("") b.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) b.SetForegroundColour("black") b.SetSize(obj.GetSize()) if self.toolbarsizer.GetItem(b) is not None: self.toolbarsizer.SetItemMinSize(b, obj.GetSize()) self.mainsizer.Layout() self.dragging = wx.Button(self.panel, -1, obj.GetLabel(), style = wx.BU_EXACTFIT) self.dragging.SetBackgroundColour(obj.GetBackgroundColour()) self.dragging.SetForegroundColour(obj.GetForegroundColour()) self.dragging.sourcebutton = obj self.dragging.Raise() self.dragging.Disable() self.dragging.SetPosition(self.panel.ScreenToClient(scrpos)) self.last_drag_dest = obj self.dragging.label = obj.s_label = obj.GetLabel() self.dragging.bgc = obj.s_bgc = obj.GetBackgroundColour() self.dragging.fgc = obj.s_fgc = obj.GetForegroundColour() else: # dragging in progress self.dragging.SetPosition(self.panel.ScreenToClient(scrpos)) wx.CallAfter(self.dragging.Refresh) dst = None src = self.dragging.sourcebutton drg = self.dragging for b in self.custombuttons_widgets: if b.GetScreenRect().Contains(scrpos): dst = b break if dst is not self.last_drag_dest: if self.last_drag_dest is not None: self.last_drag_dest.SetBackgroundColour(self.last_drag_dest.s_bgc) self.last_drag_dest.SetForegroundColour(self.last_drag_dest.s_fgc) self.last_drag_dest.SetLabel(self.last_drag_dest.s_label) if dst is not None and dst is not src: dst.s_bgc = dst.GetBackgroundColour() dst.s_fgc = dst.GetForegroundColour() dst.s_label = dst.GetLabel() src.SetBackgroundColour(dst.GetBackgroundColour()) src.SetForegroundColour(dst.GetForegroundColour()) src.SetLabel(dst.GetLabel()) dst.SetBackgroundColour(drg.bgc) dst.SetForegroundColour(drg.fgc) dst.SetLabel(drg.label) else: src.SetBackgroundColour(drg.bgc) src.SetForegroundColour(drg.fgc) src.SetLabel(drg.label) self.last_drag_dest = dst elif hasattr(self, "dragging") and not e.LeftIsDown(): # dragging finished obj = e.GetEventObject() scrpos = obj.ClientToScreen(e.GetPosition()) dst = None src = self.dragging.sourcebutton drg = self.dragging for b in self.custombuttons_widgets: if b.GetScreenRect().Contains(scrpos): dst = b break if dst is not None and hasattr(dst,"custombutton"): src_i = src.custombutton dst_i = dst.custombutton self.custombuttons[src_i], self.custombuttons[dst_i] = self.custombuttons[dst_i], self.custombuttons[src_i] self.cbutton_save(src_i, self.custombuttons[src_i]) self.cbutton_save(dst_i, self.custombuttons[dst_i]) while self.custombuttons[-1] is None: del self.custombuttons[-1] wx.CallAfter(self.dragging.Destroy) del self.dragging wx.CallAfter(self.cbuttons_reload) del self.last_drag_dest del self.dragpos else: e.Skip() def process_button(self, e): try: if hasattr(e.GetEventObject(), "custombutton"): if wx.GetKeyState(wx.WXK_CONTROL) or wx.GetKeyState(wx.WXK_ALT): return self.editbutton(e) self.cur_button = e.GetEventObject().custombutton command = e.GetEventObject().properties.command command = self.precmd(command) self.onecmd(command) self.cur_button = None except: self.log(_("Failed to handle button")) self.cur_button = None raise # -------------------------------------------------------------- # Macros handling # -------------------------------------------------------------- def start_macro(self, macro_name, old_macro_definition = ""): if not self.processing_rc: def cb(definition): if len(definition.strip()) == 0: if old_macro_definition != "": dialog = wx.MessageDialog(self, _("Do you want to erase the macro?"), style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION) if dialog.ShowModal() == wx.ID_YES: self.delete_macro(macro_name) return self.log(_("Cancelled.")) return self.cur_macro_name = macro_name self.cur_macro_def = definition self.end_macro() MacroEditor(macro_name, old_macro_definition, cb) else: pronsole.pronsole.start_macro(self, macro_name, old_macro_definition) def end_macro(self): pronsole.pronsole.end_macro(self) self.update_macros_menu() def delete_macro(self, macro_name): pronsole.pronsole.delete_macro(self, macro_name) self.update_macros_menu() def new_macro(self, e = None): dialog = wx.Dialog(self, -1, _("Enter macro name")) text = wx.StaticText(dialog, -1, _("Macro name:")) namectrl = wx.TextCtrl(dialog, -1, style = wx.TE_PROCESS_ENTER) okb = wx.Button(dialog, wx.ID_OK, _("Ok")) dialog.Bind(wx.EVT_TEXT_ENTER, lambda e: dialog.EndModal(wx.ID_OK), namectrl) cancel_button = wx.Button(dialog, wx.ID_CANCEL, _("Cancel")) # Layout ## Group the buttons horizontally buttons_sizer = wx.BoxSizer(wx.HORIZONTAL) buttons_sizer.Add(okb, 0) buttons_sizer.Add(cancel_button, 0) ## Set a minimum size for the name control box min_size = namectrl.GetTextExtent('Default Long Macro Name') namectrl.SetMinSize(wx.Size(min_size.width, -1)) ## Group the text and the name control box horizontally name_sizer = wx.BoxSizer(wx.HORIZONTAL) name_sizer.Add(text, 0, flag = wx.ALIGN_CENTER) name_sizer.AddSpacer(10) name_sizer.Add(namectrl, 1, wx.EXPAND) ## Group everything vertically dialog_sizer = wx.BoxSizer(wx.VERTICAL) dialog_sizer.Add(name_sizer, 0, border = 10, flag = wx.LEFT | wx.TOP | wx.RIGHT) dialog_sizer.Add(buttons_sizer, 0, border = 10, flag = wx.ALIGN_CENTER | wx.ALL) dialog.SetSizerAndFit(dialog_sizer) dialog.Centre() macro = "" if dialog.ShowModal() == wx.ID_OK: macro = namectrl.GetValue() if macro != "": wx.CallAfter(self.edit_macro, macro) dialog.Destroy() return macro def edit_macro(self, macro): if macro == "": return self.new_macro() if macro in self.macros: old_def = self.macros[macro] elif len([chr(c) for c in macro.encode("ascii", "replace") if not chr(c).isalnum() and chr(c) != "_"]): self.log(_("Macro name may contain only ASCII alphanumeric symbols and underscores")) return elif hasattr(self.__class__, "do_" + macro): self.log(_("Name '%s' is being used by built-in command") % macro) return else: old_def = "" self.start_macro(macro, old_def) return macro def update_macros_menu(self): if not hasattr(self, "macros_menu"): return # too early, menu not yet built try: while True: item = self.macros_menu.FindItemByPosition(1) if item is None: break self.macros_menu.DestroyItem(item) except: pass for macro in self.macros.keys(): self.Bind(wx.EVT_MENU, lambda x, m = macro: self.start_macro(m, self.macros[m]), self.macros_menu.Append(-1, macro)) # -------------------------------------------------------------- # Slic3r integration # -------------------------------------------------------------- def load_slic3r_configs(self, menus): """List Slic3r configurations and create menu""" # Hack to get correct path for Slic3r config orig_appname = self.app.GetAppName() self.app.SetAppName("Slic3r") configpath = wx.StandardPaths.Get().GetUserDataDir() self.slic3r_configpath = configpath configfile = os.path.join(configpath, "slic3r.ini") if not os.path.exists(configfile): self.app.SetAppName("Slic3rPE") configpath = wx.StandardPaths.Get().GetUserDataDir() self.slic3r_configpath = configpath configfile = os.path.join(configpath, "slic3r.ini") if not os.path.exists(configfile): self.settings.slic3rintegration=False; return self.app.SetAppName(orig_appname) config = self.read_slic3r_config(configfile) version = config.get("dummy", "version") # Slic3r version self.slic3r_configs = {} for cat in menus: menu = menus[cat] pattern = os.path.join(configpath, cat, "*.ini") files = sorted(glob.glob(pattern)) try: preset = config.get("presets", cat) # Starting from Slic3r 1.3.0, preset names have no extension if version.split(".") >= ["1","3","0"]: preset += ".ini" self.slic3r_configs[cat] = preset except: preset = None self.slic3r_configs[cat] = None for f in files: name = os.path.splitext(os.path.basename(f))[0] item = menu.Append(-1, name, f, wx.ITEM_RADIO) item.Check(os.path.basename(f) == preset) self.Bind(wx.EVT_MENU, lambda event, cat = cat, f = f: self.set_slic3r_config(configfile, cat, f), item) def read_slic3r_config(self, configfile, parser = None): """Helper to read a Slic3r configuration file""" import configparser parser = configparser.RawConfigParser() class add_header: def __init__(self, f): self.f = f self.header = '[dummy]' def readline(self): if self.header: try: return self.header finally: self.header = None else: return self.f.readline() def __iter__(self): import itertools return itertools.chain([self.header], iter(self.f)) parser.readfp(add_header(open(configfile)), configfile) return parser def set_slic3r_config(self, configfile, cat, file): """Set new preset for a given category""" self.slic3r_configs[cat] = file if self.settings.slic3rupdate: config = self.read_slic3r_config(configfile) version = config.get("dummy", "version") # Slic3r version preset = os.path.basename(file) # Starting from Slic3r 1.3.0, preset names have no extension if version.split(".") >= ["1","3","0"]: preset = os.path.splitext(preset)[0] config.set("presets", cat, preset) f = StringIO.StringIO() config.write(f) data = f.getvalue() f.close() data = data.replace("[dummy]\n", "") with open(configfile, "w") as f: f.write(data) class PronterApp(wx.App): mainwindow = None def __init__(self, *args, **kwargs): super(PronterApp, self).__init__(*args, **kwargs) self.SetAppName("Pronterface") self.mainwindow = PronterWindow(self) self.mainwindow.Show() Printrun-printrun-2.0.0rc5/printrun/rpc.py000066400000000000000000000101401325617007000206370ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . from xmlrpc.server import SimpleXMLRPCServer from threading import Thread import socket import logging from .utils import install_locale, parse_temperature_report install_locale('pronterface') RPC_PORT = 7978 class ProntRPC: server = None def __init__(self, pronsole, port = RPC_PORT): self.pronsole = pronsole used_port = port while True: try: self.server = SimpleXMLRPCServer(("localhost", used_port), allow_none = True, logRequests = False) if used_port != port: logging.warning(_("RPC server bound on non-default port %d") % used_port) break except socket.error as e: if e.errno == 98: used_port += 1 continue else: raise self.server.register_function(self.get_status, 'status') self.server.register_function(self.set_extruder_temperature,'settemp') self.server.register_function(self.set_bed_temperature,'setbedtemp') self.server.register_function(self.load_file,'load_file') self.server.register_function(self.startprint,'startprint') self.server.register_function(self.pauseprint,'pauseprint') self.server.register_function(self.resumeprint,'resumeprint') self.server.register_function(self.sendhome,'sendhome') self.server.register_function(self.connect,'connect') self.server.register_function(self.disconnect, 'disconnect') self.server.register_function(self.send, 'send') self.thread = Thread(target = self.run_server) self.thread.start() def run_server(self): self.server.serve_forever() def shutdown(self): self.server.shutdown() self.thread.join() def get_status(self): if self.pronsole.p.printing: progress = 100 * float(self.pronsole.p.queueindex) / len(self.pronsole.p.mainqueue) elif self.pronsole.sdprinting: progress = self.pronsole.percentdone else: progress = None if self.pronsole.p.printing or self.pronsole.sdprinting: eta = self.pronsole.get_eta() else: eta = None if self.pronsole.tempreadings: temps = parse_temperature_report(self.pronsole.tempreadings) else: temps = None z = self.pronsole.curlayer return {"filename": self.pronsole.filename, "progress": progress, "eta": eta, "temps": temps, "z": z, } def set_extruder_temperature(self, targettemp): if self.pronsole.p.online: self.pronsole.p.send_now("M104 S" + targettemp) def set_bed_temperature(self,targettemp): if self.pronsole.p.online: self.pronsole.p.send_now("M140 S" + targettemp) def load_file(self,filename): self.pronsole.do_load(filename) def startprint(self): self.pronsole.do_print("") def pauseprint(self): self.pronsole.do_pause("") def resumeprint(self): self.pronsole.do_resume("") def sendhome(self): self.pronsole.do_home("") def connect(self): self.pronsole.do_connect("") def disconnect(self): self.pronsole.do_disconnect("") def send(self, command): self.pronsole.p.send_now(command) Printrun-printrun-2.0.0rc5/printrun/settings.py000066400000000000000000000366411325617007000217310ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import logging import traceback import os import sys from functools import wraps from .utils import parse_build_dimensions def setting_add_tooltip(func): @wraps(func) def decorator(self, *args, **kwargs): widget = func(self, *args, **kwargs) helptxt = self.help or "" sep, deftxt = "", "" if len(helptxt): sep = "\n" if helptxt.find("\n") >= 0: sep = "\n\n" if self.default is not "": deftxt = _("Default: ") resethelp = _("(Control-doubleclick to reset to default value)") if len(repr(self.default)) > 10: deftxt += "\n " + repr(self.default).strip("'") + "\n" + resethelp else: deftxt += repr(self.default) + " " + resethelp helptxt += sep + deftxt if len(helptxt): widget.SetToolTip(helptxt) return widget return decorator class Setting: DEFAULT_GROUP = "Printer" hidden = False def __init__(self, name, default, label = None, help = None, group = None): self.name = name self.default = default self._value = default self.label = label self.help = help self.group = group if group else Setting.DEFAULT_GROUP def _get_value(self): return self._value def _set_value(self, value): raise NotImplementedError value = property(_get_value, _set_value) def set_default(self, e): import wx if e.CmdDown() and e.ButtonDClick() and self.default is not "": confirmation = wx.MessageDialog(None, _("Are you sure you want to reset the setting to the default value: {0!r} ?").format(self.default), _("Confirm set default"), wx.ICON_EXCLAMATION | wx.YES_NO | wx.NO_DEFAULT) if confirmation.ShowModal() == wx.ID_YES: self._set_value(self.default) else: e.Skip() @setting_add_tooltip def get_label(self, parent): import wx widget = wx.StaticText(parent, -1, self.label or self.name) widget.set_default = self.set_default return widget @setting_add_tooltip def get_widget(self, parent): return self.get_specific_widget(parent) def get_specific_widget(self, parent): raise NotImplementedError def update(self): raise NotImplementedError def __str__(self): return self.name def __repr__(self): return self.name class HiddenSetting(Setting): hidden = True def _set_value(self, value): self._value = value value = property(Setting._get_value, _set_value) class wxSetting(Setting): widget = None def _set_value(self, value): self._value = value if self.widget: self.widget.SetValue(value) value = property(Setting._get_value, _set_value) def update(self): self.value = self.widget.GetValue() class StringSetting(wxSetting): def get_specific_widget(self, parent): import wx self.widget = wx.TextCtrl(parent, -1, str(self.value)) return self.widget class ComboSetting(wxSetting): def __init__(self, name, default, choices, label = None, help = None, group = None): super(ComboSetting, self).__init__(name, default, label, help, group) self.choices = choices def get_specific_widget(self, parent): import wx self.widget = wx.ComboBox(parent, -1, str(self.value), choices = self.choices, style = wx.CB_DROPDOWN) return self.widget class SpinSetting(wxSetting): def __init__(self, name, default, min, max, label = None, help = None, group = None, increment = 0.1): super(SpinSetting, self).__init__(name, default, label, help, group) self.min = min self.max = max self.increment = increment def get_specific_widget(self, parent): from wx.lib.agw.floatspin import FloatSpin import wx self.widget = wx.SpinCtrlDouble(parent, -1, min = self.min, max = self.max) self.widget.SetDigits(0) self.widget.SetValue(self.value) orig = self.widget.GetValue self.widget.GetValue = lambda: int(orig()) return self.widget class FloatSpinSetting(SpinSetting): def get_specific_widget(self, parent): from wx.lib.agw.floatspin import FloatSpin import wx self.widget = wx.SpinCtrlDouble(parent, -1, initial = self.value, min = self.min, max = self.max, inc = self.increment) self.widget.SetDigits(2) return self.widget class BooleanSetting(wxSetting): def _get_value(self): return bool(self._value) def _set_value(self, value): self._value = value if self.widget: self.widget.SetValue(bool(value)) value = property(_get_value, _set_value) def get_specific_widget(self, parent): import wx self.widget = wx.CheckBox(parent, -1) self.widget.SetValue(bool(self.value)) return self.widget class StaticTextSetting(wxSetting): def __init__(self, name, label = " ", text = "", help = None, group = None): super(StaticTextSetting, self).__init__(name, "", label, help, group) self.text = text def update(self): pass def _get_value(self): return "" def _set_value(self, value): pass def get_specific_widget(self, parent): import wx self.widget = wx.StaticText(parent, -1, self.text) return self.widget class BuildDimensionsSetting(wxSetting): widgets = None def _set_value(self, value): self._value = value if self.widgets: self._set_widgets_values(value) value = property(wxSetting._get_value, _set_value) def _set_widgets_values(self, value): build_dimensions_list = parse_build_dimensions(value) for i in range(len(self.widgets)): self.widgets[i].SetValue(build_dimensions_list[i]) def get_widget(self, parent): from wx.lib.agw.floatspin import FloatSpin import wx build_dimensions = parse_build_dimensions(self.value) self.widgets = [] def w(val, m, M): self.widgets.append(wx.SpinCtrlDouble(parent, -1, initial = val, min = m, max = M)) self.widgets[-1].SetDigits(2) addlabel = lambda name, pos: self.widget.Add(wx.StaticText(parent, -1, name), pos = pos, flag = wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border = 5) addwidget = lambda *pos: self.widget.Add(self.widgets[-1], pos = pos, flag = wx.RIGHT, border = 5) self.widget = wx.GridBagSizer() addlabel(_("Width"), (0, 0)) w(build_dimensions[0], 0, 2000) addwidget(0, 1) addlabel(_("Depth"), (0, 2)) w(build_dimensions[1], 0, 2000) addwidget(0, 3) addlabel(_("Height"), (0, 4)) w(build_dimensions[2], 0, 2000) addwidget(0, 5) addlabel(_("X offset"), (1, 0)) w(build_dimensions[3], -2000, 2000) addwidget(1, 1) addlabel(_("Y offset"), (1, 2)) w(build_dimensions[4], -2000, 2000) addwidget(1, 3) addlabel(_("Z offset"), (1, 4)) w(build_dimensions[5], -2000, 2000) addwidget(1, 5) addlabel(_("X home pos."), (2, 0)) w(build_dimensions[6], -2000, 2000) self.widget.Add(self.widgets[-1], pos = (2, 1)) addlabel(_("Y home pos."), (2, 2)) w(build_dimensions[7], -2000, 2000) self.widget.Add(self.widgets[-1], pos = (2, 3)) addlabel(_("Z home pos."), (2, 4)) w(build_dimensions[8], -2000, 2000) self.widget.Add(self.widgets[-1], pos = (2, 5)) return self.widget def update(self): values = [float(w.GetValue()) for w in self.widgets] self.value = "%.02fx%.02fx%.02f%+.02f%+.02f%+.02f%+.02f%+.02f%+.02f" % tuple(values) class Settings: def __baudrate_list(self): return ["2400", "9600", "19200", "38400", "57600", "115200", "250000"] def __init__(self, root): # defaults here. # the initial value determines the type self._add(StringSetting("port", "", _("Serial port"), _("Port used to communicate with printer"))) self._add(ComboSetting("baudrate", 115200, self.__baudrate_list(), _("Baud rate"), _("Communications Speed"))) self._add(BooleanSetting("tcp_streaming_mode", False, _("TCP streaming mode"), _("When using a TCP connection to the printer, the streaming mode will not wait for acks from the printer to send new commands. This will break things such as ETA prediction, but can result in smoother prints.")), root.update_tcp_streaming_mode) self._add(BooleanSetting("rpc_server", True, _("RPC server"), _("Enable RPC server to allow remotely querying print status")), root.update_rpc_server) self._add(BooleanSetting("dtr", True, _("DTR"), _("Disabling DTR would prevent Arduino (RAMPS) from resetting upon connection"), "Printer")) self._add(SpinSetting("bedtemp_abs", 110, 0, 400, _("Bed temperature for ABS"), _("Heated Build Platform temp for ABS (deg C)"), "Printer")) self._add(SpinSetting("bedtemp_pla", 60, 0, 400, _("Bed temperature for PLA"), _("Heated Build Platform temp for PLA (deg C)"), "Printer")) self._add(SpinSetting("temperature_abs", 230, 0, 400, _("Extruder temperature for ABS"), _("Extruder temp for ABS (deg C)"), "Printer")) self._add(SpinSetting("temperature_pla", 185, 0, 400, _("Extruder temperature for PLA"), _("Extruder temp for PLA (deg C)"), "Printer")) self._add(SpinSetting("xy_feedrate", 3000, 0, 50000, _("X && Y manual feedrate"), _("Feedrate for Control Panel Moves in X and Y (mm/min)"), "Printer")) self._add(SpinSetting("z_feedrate", 100, 0, 50000, _("Z manual feedrate"), _("Feedrate for Control Panel Moves in Z (mm/min)"), "Printer")) self._add(SpinSetting("e_feedrate", 100, 0, 1000, _("E manual feedrate"), _("Feedrate for Control Panel Moves in Extrusions (mm/min)"), "Printer")) defaultslicerpath="" if sys.platform=="darwin" and getattr( sys, 'frozen', False ): defaultslicerpath="/Applications/Slic3r.app/Contents/MacOS/" if sys.platform=="win32" and getattr( sys, 'frozen', False ): defaultslicerpath=".\\slic3r\\" self._add(StringSetting("slicecommandpath", defaultslicerpath, _("Path to slicer"), _("Path to slicer"), "External")) self._add(StringSetting("slicecommand", "slic3r $s --output $o", _("Slice command"), _("Slice command"), "External")) if sys.platform=="win32": self._add(StringSetting("slicecommand", "slic3r-console $s --output $o", _("Slice command"), _("Slice command"), "External")) else: self._add(StringSetting("slicecommand", "slic3r $s --output $o", _("Slice command"), _("Slice command"), "External")) self._add(StringSetting("sliceoptscommand", "slic3r", _("Slicer options command"), _("Slice settings command"), "External")) self._add(StringSetting("start_command", "", _("Start command"), _("Executable to run when the print is started"), "External")) self._add(StringSetting("final_command", "", _("Final command"), _("Executable to run when the print is finished"), "External")) self._add(StringSetting("error_command", "", _("Error command"), _("Executable to run when an error occurs"), "External")) self._add(StringSetting("log_path", "", _("Log path"), _("Path to the log file. An empty path will log to the console."), "UI")) self._add(HiddenSetting("project_offset_x", 0.0)) self._add(HiddenSetting("project_offset_y", 0.0)) self._add(HiddenSetting("project_interval", 2.0)) self._add(HiddenSetting("project_pause", 2.5)) self._add(HiddenSetting("project_scale", 1.0)) self._add(HiddenSetting("project_x", 1024)) self._add(HiddenSetting("project_y", 768)) self._add(HiddenSetting("project_projected_x", 150.0)) self._add(HiddenSetting("project_direction", "Top Down")) self._add(HiddenSetting("project_overshoot", 3.0)) self._add(HiddenSetting("project_z_axis_rate", 200)) self._add(HiddenSetting("project_layer", 0.1)) self._add(HiddenSetting("project_prelift_gcode", "")) self._add(HiddenSetting("project_postlift_gcode", "")) self._add(HiddenSetting("pause_between_prints", True)) self._add(HiddenSetting("default_extrusion", 5.0)) self._add(HiddenSetting("last_extrusion", 5.0)) self._add(HiddenSetting("total_filament_used", 0.0)) self._add(HiddenSetting("spool_list", "")) _settings = [] def __setattr__(self, name, value): if name.startswith("_"): return object.__setattr__(self, name, value) if isinstance(value, Setting): if not value.hidden: self._settings.append(value) object.__setattr__(self, "_" + name, value) elif hasattr(self, "_" + name): getattr(self, "_" + name).value = value else: setattr(self, name, StringSetting(name = name, default = value)) def __getattr__(self, name): if name.startswith("_"): return object.__getattribute__(self, name) return getattr(self, "_" + name).value def _add(self, setting, callback = None, validate = None, alias = None, autocomplete_list = None): setattr(self, setting.name, setting) if callback: setattr(self, "__" + setting.name + "_cb", callback) if validate: setattr(self, "__" + setting.name + "_validate", validate) if alias: setattr(self, "__" + setting.name + "_alias", alias) if autocomplete_list: setattr(self, "__" + setting.name + "_list", autocomplete_list) def _set(self, key, value): try: value = getattr(self, "__%s_alias" % key)()[value] except KeyError: pass except AttributeError: pass try: getattr(self, "__%s_validate" % key)(value) except AttributeError: pass t = type(getattr(self, key)) if t == bool and value == "False": setattr(self, key, False) else: setattr(self, key, t(value)) try: cb = None try: cb = getattr(self, "__%s_cb" % key) except AttributeError: pass if cb is not None: cb(key, value) except: logging.warning((_("Failed to run callback after setting \"%s\":") % key) + "\n" + traceback.format_exc()) return value def _tabcomplete(self, key): try: return getattr(self, "__%s_list" % key)() except AttributeError: pass try: return list(getattr(self, "__%s_alias" % key)().keys()) except AttributeError: pass return [] def _all_settings(self): return self._settings Printrun-printrun-2.0.0rc5/printrun/spoolmanager/000077500000000000000000000000001325617007000221745ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/spoolmanager/__init__.py000066400000000000000000000000001325617007000242730ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/printrun/spoolmanager/spoolmanager.py000066400000000000000000000211361325617007000252400ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . # # Copyright 2017 Rock Storm # This module indirectly depends of pronsole and settings but it does not # import them class SpoolManager(): """ Back-end for the Spool Manager. It is expected to be called from an object which has the contents of settings.py and pronsole.py. This way the class is able to '_add' and 'set' settings. This class basically handles a single variable called '_spool_list'. It is a list of spool_items. A spool_item is in turn a list three elements: a string, a float and an integer. Namely: the name of the spool, the remaining length of filament and the extruder it is loaded to. E.g.: spool_item = [string name, float length, int extruder] _spool_list = [spool_item spool_1, ... , spool_item spool_n ] '_spool_list' is somehow a Nx3 matrix where N is the number of recorded spools. The first column contains the names of the spools, the second the lengths of remaining filament and the third column contains which extruder is the spool loaded for. The variable '_spool_list' is saved in the configuration file using a setting with the same name: 'spool_list'. It is saved as a single string. It concatenates every item from the list and separates them by a comma and a space. For instance, if the variable '_spool_list' was: _spool_list = [["spool_1", 100.0, 0], ["spool_2", 200.0, -1]] The 'spool_list' setting will look like: "spool_1, 100.0, 0, spool_2, 200.0, -1" """ def __init__(self, parent): self.parent = parent self.refresh() def refresh(self): """ Read the configuration file and populate the list of recorded spools. """ self._spool_list = self._readSetting(self.parent.settings.spool_list) def add(self, spool_name, spool_length): """Add the given spool to the list of recorded spools.""" self._spool_list.append([spool_name, spool_length, -1]) self._save() def load(self, spool_name, extruder): """Set the extruder field of the given spool item.""" # If there was a spool already loaded for this extruder unload it previous_spool = self._findByColumn(extruder, 2) if previous_spool != -1: self.unload(extruder) # Load the given spool new_spool = self._findByColumn(spool_name, 0) self.remove(spool_name) self._spool_list.append([new_spool[0], new_spool[1], extruder]) self._save() def remove(self, spool_name): """Remove the given spool item from the list of recorded spools.""" spool_item = self._findByColumn(spool_name, 0) self._spool_list.remove(spool_item) self._save() def unload(self, extruder): """Set to -1 the extruder field of the spool item currently on.""" spool_item = self._findByColumn(extruder, 2) if spool_item != -1: self.remove(spool_item[0]) self._spool_list.append([spool_item[0], spool_item[1], -1]) self._save() def isLoaded(self, spool_name): """ int isLoaded( string name ) Return the extruder that the given spool is loaded to. -1 if it is not loaded for any extruder or None if the given name does not match any known spool. """ spool_item = self._findByColumn(spool_name, 0) if spool_item != -1: return spool_item[2] else: return None def isListed(self, spool_name): """Return 'True' if the given spool is on the list.""" spool_item = self._findByColumn(spool_name, 0) if not spool_item == -1: return True else: return False def getSpoolName(self, extruder): """ string getSpoolName( int extruder ) Return the name of the spool loaded for the given extruder. """ spool_item = self._findByColumn(extruder, 2) if spool_item != -1: return spool_item[0] else: return None def getRemainingFilament(self, extruder): """ float getRemainingFilament( int extruder ) Return the name of the spool loaded for the given extruder. """ spool_item = self._findByColumn(extruder, 2) if spool_item != -1: return spool_item[1] else: return float("NaN") def editLength(self, increment, spool_name = None, extruder = -1): """ int editLength ( float increment, string spool_name, int extruder ) Add the given 'increment' amount to the length of filament of the given spool. Spool can be specified either by name or by the extruder it is loaded to. """ if spool_name != None: spool_item = self._findByColumn(spool_name, 0) elif extruder != -1: spool_item = self._findByColumn(extruder, 2) else: return -1 # Not enough arguments if spool_item == -1: return -2 # No spool found for the given name or extruder length = spool_item[1] + increment self.remove(spool_item[0]) self.add(spool_item[0], length) if spool_item[2] > -1: self.load(spool_item[0], spool_item[2]) self._save() return 0 def getExtruderCount(self): """int getExtruderCount()""" return self.parent.settings.extruders def getSpoolCount(self): """ int getSpoolCount() Return the number of currently recorded spools. """ return len(self._spool_list) def getSpoolList(self): """ [N][2] getSpoolList () Returns a list of the recorded spools. Returns a Nx2 matrix where N is the number of recorded spools. The first column contains the names of the spools and the second the lengths of remaining filament. """ slist = [] for i in range(self.getSpoolCount()): item = [self._spool_list[i][0], self._spool_list[i][1]] slist.append(item) return slist def _findByColumn(self, data, col = 0): """ Find which spool_item from the list contains certain data. The 'col' argument specifies in which field from the spool_item to look for. For instance, with the following list: _spool_list = [["spool_1", 100.0, 1], ["spool_2", 200.0, 0], . . . ["spool_10", 1000.0, 0]] A call like: _findByColumn("spool_2", 0) Will produce: ["spool_2", 200.0, 0] col = 0, would look into the "name's column" col = 1, would look into the "length's column" col = 2, would look into the "extruder's column" """ for spool_item in self._spool_list: if data == spool_item[col]: return spool_item return -1 def _save(self): """Update the list of recorded spools in the configuration file.""" self._setSetting(self._spool_list, "spool_list") def _setSetting(self, variable, setting): """ Write the given variable to the given setting of the configuration file. """ n = 3 # number of fields in spool_item string_list = [] for i in range(len(variable)): for j in range(n): string_list.append(str(variable[i][j])) separator = ", " self.parent.set(setting, separator.join(string_list)) def _readSetting(self, setting): """ Return the variable read. """ n = 3 # number of fields in spool_item string_list = setting.split(", ") variable = [] for i in range(len(string_list)//n): variable.append( [string_list[n*i], float(string_list[n*i+1]), int(string_list[n*i+2])]) return variable Printrun-printrun-2.0.0rc5/printrun/spoolmanager/spoolmanager_gui.py000066400000000000000000000620571325617007000261130ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . # # Copyright 2017 Rock Storm import wx from . import spoolmanager class SpoolManagerMainWindow(wx.Frame): """ Front-end for the Spool Manager. Main window which displays the currently loaded spools and the list of recorded ones with buttons to add, load, edit or delete them. """ def __init__(self, parent, spool_manager): wx.Frame.__init__(self, parent, title = "Spool Manager", style = wx.DEFAULT_FRAME_STYLE | wx.FRAME_FLOAT_ON_PARENT) self.statusbar = self.CreateStatusBar() self.SetIcon(parent.GetIcon()) # Initiate the back-end self.spool_manager = spool_manager self.spool_manager.refresh() # Generate the dialogs showing the current spools self.current_spools_dialog = CurrentSpoolDialog(self, self.spool_manager) # Generate the list of recorded spools self.spool_list = SpoolListView(self, self.spool_manager) # Generate the buttons self.new_button = wx.Button(self, wx.ID_ADD) self.new_button.SetToolTip("Add a new spool") self.edit_button = wx.Button(self, wx.ID_EDIT) self.edit_button.SetToolTip("Edit the selected spool") self.delete_button = wx.Button(self, wx.ID_DELETE) self.delete_button.SetToolTip("Delete the selected spool") # "Program" the buttons self.new_button.Bind(wx.EVT_BUTTON, self.onClickAdd) self.edit_button.Bind(wx.EVT_BUTTON, self.onClickEdit) self.delete_button.Bind(wx.EVT_BUTTON, self.onClickDelete) # Layout ## Group the buttons self.button_sizer = wx.BoxSizer(wx.VERTICAL) self.button_sizer.Add(self.new_button, 1, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) self.button_sizer.Add(self.edit_button, 1, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) self.button_sizer.Add(self.delete_button, 1, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) ## Group the buttons with the spool list self.list_sizer = wx.BoxSizer(wx.HORIZONTAL) self.list_sizer.Add(self.spool_list, 1, wx.EXPAND) self.list_sizer.Add(self.button_sizer, 0, wx.ALIGN_CENTER) ## Layout the whole thing self.full_sizer = wx.BoxSizer(wx.VERTICAL) self.full_sizer.Add(self.current_spools_dialog, 0, wx.EXPAND) self.full_sizer.Add(self.list_sizer, 1, wx.ALL | wx.EXPAND, 10) self.SetSizerAndFit(self.full_sizer) def onClickAdd(self, event): """Open the window for customizing the new spool.""" SpoolManagerAddWindow(self).Show(True) def onClickLoad(self, event, extruder): """Load the selected spool to the correspondent extruder.""" # Check whether there is a spool selected spool_index = self.spool_list.GetFirstSelected() if spool_index == -1 : self.statusbar.SetStatusText( "Could not load the spool. No spool selected.") return 0 else: spool_name = self.spool_list.GetItemText(spool_index) self.statusbar.SetStatusText("") # If selected spool is already loaded, do nothing spool_extruder = self.spool_manager.isLoaded(spool_name) if spool_extruder > -1: self.statusbar.SetStatusText( "Spool '%s' is already loaded for Extruder %d." % (spool_name, spool_extruder)) return 0 # Load the selected spool and refresh the current spools dialog self.spool_manager.load(spool_name, extruder) self.current_spools_dialog.refreshDialog(self.spool_manager) self.statusbar.SetStatusText( "Loaded spool '%s' for Extruder %d." % (spool_name, extruder)) def onClickUnload(self, event, extruder): """Unload the spool from the correspondent extruder.""" spool_name = self.spool_manager.getSpoolName(extruder) if spool_name != None: self.spool_manager.unload(extruder) self.current_spools_dialog.refreshDialog(self.spool_manager) self.statusbar.SetStatusText( "Unloaded spool from Extruder %d." % extruder) else: self.statusbar.SetStatusText( "There is no spool loaded for Extruder %d." % extruder) def onClickEdit(self, event): """Open the window for editing the data of the selected spool.""" # Check whether there is a spool selected spool_index = self.spool_list.GetFirstSelected() if spool_index == -1 : self.statusbar.SetStatusText( "Could not edit the spool. No spool selected.") return 0 # Open the edit window spool_name = self.spool_list.GetItemText(spool_index) spool_length = self.spool_list.GetItemText(spool_index, 1) SpoolManagerEditWindow(self, spool_name, spool_length).Show(True) self.statusbar.SetStatusText("") def onClickDelete(self, event): """Delete the selected spool.""" # Get the selected spool spool_index = self.spool_list.GetFirstSelected() if spool_index == -1 : self.statusbar.SetStatusText( "Could not delete the spool. No spool selected.") return 0 else: spool_name = self.spool_list.GetItemText(spool_index) self.statusbar.SetStatusText("") # Ask confirmation for deleting delete_dialog = wx.MessageDialog(self, message = "Are you sure you want to delete the '%s' spool" % spool_name, caption = "Delete Spool", style = wx.YES_NO | wx.ICON_EXCLAMATION) if delete_dialog.ShowModal() == wx.ID_YES: # Remove spool self.spool_manager.remove(spool_name) self.spool_list.refreshList(self.spool_manager) self.current_spools_dialog.refreshDialog(self.spool_manager) self.statusbar.SetStatusText( "Deleted spool '%s'." % spool_name) class SpoolListView(wx.ListView): """ Custom wxListView object which visualizes the list of available spools. """ def __init__(self, parent, spool_manager): wx.ListView.__init__(self, parent, style = wx.LC_REPORT | wx.LC_SINGLE_SEL) self.InsertColumn(0, "Spool", width = wx.LIST_AUTOSIZE_USEHEADER) self.InsertColumn(1, "Filament", width = wx.LIST_AUTOSIZE_USEHEADER) self.populateList(spool_manager) # "Program" the layout self.Bind(wx.EVT_SIZE, self.onResizeList) def populateList(self, spool_manager): """Get the list of recorded spools from the Spool Manager.""" spool_list = spool_manager.getSpoolList() for i in range(len(spool_list)): self.Append(spool_list[i]) def refreshList(self, spool_manager): """Refresh the list by re-reading the Spool Manager list.""" self.DeleteAllItems() self.populateList(spool_manager) def onResizeList(self, event): list_size = self.GetSize() self.SetColumnWidth(1, -2) filament_column_width = self.GetColumnWidth(1) self.SetColumnWidth(col = 0, width = list_size.width - filament_column_width) event.Skip() class CurrentSpoolDialog(wx.Panel): """ Custom wxStaticText object to display the currently loaded spools and their remaining filament. """ def __init__(self, parent, spool_manager): wx.Panel.__init__(self, parent) self.parent = parent self.extruders = spool_manager.getExtruderCount() full_sizer = wx.BoxSizer(wx.VERTICAL) # Calculate the minimum size needed to properly display the # extruder information min_size = self.GetTextExtent(" Remaining filament: 0000000.00") # Generate a dialog for every extruder self.extruder_dialog = [] load_button = [] unload_button = [] button_sizer = [] dialog_sizer = [] for i in range(self.extruders): # Generate the dialog with the spool information self.extruder_dialog.append( wx.StaticText(self, style = wx.ST_ELLIPSIZE_END)) self.extruder_dialog[i].SetMinSize(wx.Size(min_size.width, -1)) # Generate the "load" and "unload" buttons load_button.append(wx.Button(self, label = "Load")) load_button[i].SetToolTip( "Load selected spool for Extruder %d" % i) unload_button.append(wx.Button(self, label = "Unload")) unload_button[i].SetToolTip( "Unload the spool for Extruder %d" % i) # "Program" the buttons load_button[i].Bind(wx.EVT_BUTTON, lambda event, extruder=i: parent.onClickLoad(event, extruder)) unload_button[i].Bind(wx.EVT_BUTTON, lambda event, extruder=i: parent.onClickUnload(event, extruder)) # Layout button_sizer.append(wx.BoxSizer(wx.VERTICAL)) button_sizer[i].Add(load_button[i], 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) button_sizer[i].Add(unload_button[i], 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) dialog_sizer.append(wx.BoxSizer(wx.HORIZONTAL)) dialog_sizer[i].Add(self.extruder_dialog[i], 1, wx.ALIGN_CENTER) dialog_sizer[i].AddSpacer(10) dialog_sizer[i].Add(button_sizer[i], 0, wx.EXPAND) full_sizer.Add(dialog_sizer[i], 0, wx.ALL | wx.EXPAND, 10) self.refreshDialog(spool_manager) self.SetSizerAndFit(full_sizer) def refreshDialog(self, spool_manager): """Retrieve the current spools from the Spool Manager.""" for i in range(self.extruders): spool_name = spool_manager.getSpoolName(i) spool_filament = spool_manager.getRemainingFilament(i) label = ("Spool for Extruder %d:\n" % i + " Name: %s\n" % spool_name + " Remaining filament: %.2f" % spool_filament) self.extruder_dialog[i].SetLabelText(label) # --------------------------------------------------------------------------- def checkOverwrite(parent, spool_name): """Ask the user whether or not to overwrite the existing spool.""" overwrite_dialog = wx.MessageDialog(parent, message = "A spool with the name '%s'' already exists." % spool_name + "Do you wish to overwrite it?", caption = "Overwrite", style = wx.YES_NO | wx.ICON_EXCLAMATION) if overwrite_dialog.ShowModal() == wx.ID_YES: return True else: return False def getFloat(parent, number): """ Check whether the input number is a float. Either return the number or return False. """ try: return float(number) except ValueError: parent.statusbar.SetStatusText("Unrecognized number: %s" % number) return False # --------------------------------------------------------------------------- class SpoolManagerAddWindow(wx.Frame): """Window for adding spools.""" def __init__(self, parent): wx.Frame.__init__(self, parent, title = "Add Spool", style = wx.DEFAULT_FRAME_STYLE | wx.FRAME_FLOAT_ON_PARENT) self.statusbar = self.CreateStatusBar() self.parent = parent self.SetIcon(parent.GetIcon()) # Generate the dialogs self.name_dialog = LabeledTextCtrl(self, "Name", "Default Spool", "") self.diameter_dialog = LabeledTextCtrl(self, "Diameter", "1.75", "mm") self.diameter_dialog.SetToolTip( "Typically, either 1.75 mm or 2.85 mm (a.k.a '3')") self.weight_dialog = LabeledTextCtrl(self, "Weight", "1", "Kg") self.density_dialog = LabeledTextCtrl(self, "Density", "1.25", "g/cm^3") self.density_dialog.SetToolTip( "Typical densities are 1.25 g/cm^3 for PLA and 1.08 g/cm^3 for" + " ABS") self.length_dialog = LabeledTextCtrl(self, "Length", "332601.35", "mm") # "Program" the dialogs self.diameter_dialog.Bind(wx.EVT_TEXT, self.calculateLength) self.weight_dialog.Bind(wx.EVT_TEXT, self.calculateLength) self.density_dialog.Bind(wx.EVT_TEXT, self.calculateLength) self.length_dialog.Bind(wx.EVT_TEXT, self.calculateWeight) # Generate the bottom buttons self.add_button = wx.Button(self, wx.ID_ADD) self.cancel_button = wx.Button(self, wx.ID_CANCEL) # "Program" the bottom buttons self.add_button.Bind(wx.EVT_BUTTON, self.onClickAdd) self.cancel_button.Bind(wx.EVT_BUTTON, self.onClickCancel) # Layout ## Group the bottom buttons self.bottom_buttons_sizer = wx.BoxSizer(wx.HORIZONTAL) self.bottom_buttons_sizer.Add(self.add_button, 0, wx.FIXED_MINSIZE) self.bottom_buttons_sizer.Add(self.cancel_button, 0, wx.FIXED_MINSIZE) ## Group the whole window self.full_sizer = wx.BoxSizer(wx.VERTICAL) self.full_sizer.Add(self.name_dialog, 0, wx.TOP | wx.BOTTOM | wx.EXPAND, 10) self.full_sizer.Add(self.diameter_dialog, 0, wx.EXPAND) self.full_sizer.Add(self.weight_dialog, 0, wx.EXPAND) self.full_sizer.Add(self.density_dialog, 0, wx.EXPAND) self.full_sizer.Add(self.length_dialog, 0, wx.EXPAND) self.full_sizer.Add(self.bottom_buttons_sizer, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 10) self.SetSizerAndFit(self.full_sizer) # Don't allow this window to be resized in height add_window_size = self.GetSize() self.SetMaxSize((-1, add_window_size.height)) def onClickAdd(self, event): """Add the new spool and close the window.""" spool_name = self.name_dialog.field.GetValue() spool_length = getFloat(self, self.length_dialog.field.GetValue()) # Check whether the length is actually a number if not spool_length: self.statusbar.SetStatusText( "ERROR: Unrecognized length: %s." % self.length_dialog.field.GetValue()) return -1 # The remaining filament should always be a positive number if not spool_length > 0: self.statusbar.SetStatusText( "ERROR: Length is zero or negative: %.2f." % spool_length) return -1 # Check whether the name is already used. If it is used, prompt the # user before overwriting it if self.parent.spool_manager.isListed(spool_name): if checkOverwrite(self, spool_name): # Remove the "will be overwritten" spool self.parent.spool_manager.remove(spool_name) else: return 0 # Add the new spool self.parent.spool_manager.add(spool_name, spool_length) self.parent.spool_list.refreshList(self.parent.spool_manager) self.parent.current_spools_dialog.refreshDialog( self.parent.spool_manager) self.parent.statusbar.SetStatusText( "Added new spool '%s'" % spool_name + " with %.2f mm of remaining filament." % spool_length) self.Close(True) def onClickCancel(self, event): """Do nothing and close the window.""" self.Close(True) self.parent.statusbar.SetStatusText("") def calculateLength(self, event): """ Calculate the length of the filament given the mass, diameter and density of the filament. Set the 'Length' field to this quantity. """ mass = getFloat(self, self.weight_dialog.field.GetValue()) diameter = getFloat(self, self.diameter_dialog.field.GetValue()) density = getFloat(self, self.density_dialog.field.GetValue()) if mass and diameter and density: pi = 3.14159265359 length = 4e6 * mass / pi / diameter**2 / density self.length_dialog.field.ChangeValue("%.2f" % length) self.statusbar.SetStatusText("") else: self.length_dialog.field.ChangeValue("---") def calculateWeight(self, event): """ Calculate the weight of the filament given the length, diameter and density of the filament. Set the 'Weight' field to this value. """ length = getFloat(self, self.length_dialog.field.GetValue()) diameter = getFloat(self, self.diameter_dialog.field.GetValue()) density = getFloat(self, self.density_dialog.field.GetValue()) if length and diameter and density: pi = 3.14159265359 mass = length * pi * diameter**2 * density / 4e6 self.weight_dialog.field.ChangeValue("%.2f" % mass) self.statusbar.SetStatusText("") else: self.weight_dialog.field.ChangeValue("---") class LabeledTextCtrl(wx.Panel): """ Group together a wxTextCtrl with a preceding and a subsequent wxStaticText. """ def __init__(self, parent, preceding_text, field_value, subsequent_text): wx.Panel.__init__(self, parent) self.pretext = wx.StaticText(self, label = preceding_text, style = wx.ALIGN_RIGHT) self.field = wx.TextCtrl(self, value = field_value) self.subtext = wx.StaticText(self, label = subsequent_text) # Layout the panel self.sizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(self.pretext, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 10) self.sizer.SetItemMinSize(self.pretext, (80, -1)) self.sizer.Add(self.field, 1, wx.EXPAND) self.sizer.Add(self.subtext, 0, wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, 10) self.sizer.SetItemMinSize(self.subtext, (50, -1)) self.SetSizerAndFit(self.sizer) # --------------------------------------------------------------------------- class SpoolManagerEditWindow(wx.Frame): """Window for editing the name or the length of a spool.""" def __init__(self, parent, spool_name, spool_length): wx.Frame.__init__(self, parent, title = "Edit Spool", style = wx.DEFAULT_FRAME_STYLE | wx.FRAME_FLOAT_ON_PARENT) self.statusbar = self.CreateStatusBar() self.parent = parent self.SetIcon(parent.GetIcon()) self.old_spool_name = spool_name self.old_spool_length = getFloat(self, spool_length) # Set how many millimeters will the buttons add or subtract self.quantities = [-100.0, -50.0, -10.0, 10.0, 50.0, 100.0] # Generate the name field self.name_field = LabeledTextCtrl(self, "Name", self.old_spool_name, "") # Generate the length field and buttons self.length_title = wx.StaticText(self, label = "Remaining filament:") self.minus3_button = wx.Button(self, label = str(self.quantities[0]), style = wx.BU_EXACTFIT) self.minus2_button = wx.Button(self, label = str(self.quantities[1]), style = wx.BU_EXACTFIT) self.minus1_button = wx.Button(self, label = str(self.quantities[2]), style = wx.BU_EXACTFIT) self.length_field = wx.TextCtrl(self, value = str(self.old_spool_length)) self.plus1_button = wx.Button(self, label = "+" + str(self.quantities[3]), style = wx.BU_EXACTFIT) self.plus2_button = wx.Button(self, label = "+" + str(self.quantities[4]), style = wx.BU_EXACTFIT) self.plus3_button = wx.Button(self, label = "+" + str(self.quantities[5]), style = wx.BU_EXACTFIT) # "Program" the length buttons self.minus3_button.Bind(wx.EVT_BUTTON, self.changeLength) self.minus2_button.Bind(wx.EVT_BUTTON, self.changeLength) self.minus1_button.Bind(wx.EVT_BUTTON, self.changeLength) self.plus1_button.Bind(wx.EVT_BUTTON, self.changeLength) self.plus2_button.Bind(wx.EVT_BUTTON, self.changeLength) self.plus3_button.Bind(wx.EVT_BUTTON, self.changeLength) # Generate the bottom buttons self.save_button = wx.Button(self, wx.ID_SAVE) self.cancel_button = wx.Button(self, wx.ID_CANCEL) # "Program" the bottom buttons self.save_button.Bind(wx.EVT_BUTTON, self.onClickSave) self.cancel_button.Bind(wx.EVT_BUTTON, self.onClickCancel) # Layout ## Group the length field and its correspondent buttons self.length_sizer = wx.BoxSizer(wx.HORIZONTAL) self.length_sizer.Add(self.minus3_button, 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) self.length_sizer.Add(self.minus2_button, 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) self.length_sizer.Add(self.minus1_button, 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) self.length_sizer.Add(self.length_field, 1, wx.EXPAND) self.length_sizer.Add(self.plus1_button, 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) self.length_sizer.Add(self.plus2_button, 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) self.length_sizer.Add(self.plus3_button, 0, wx.FIXED_MINSIZE | wx.ALIGN_CENTER) ## Group the bottom buttons self.bottom_buttons_sizer = wx.BoxSizer(wx.HORIZONTAL) self.bottom_buttons_sizer.Add(self.save_button, 0, wx.EXPAND) self.bottom_buttons_sizer.Add(self.cancel_button, 0, wx.EXPAND) ## Lay out the whole window self.full_sizer = wx.BoxSizer(wx.VERTICAL) self.full_sizer.Add(self.name_field, 0, wx.EXPAND) self.full_sizer.AddSpacer(10) self.full_sizer.Add(self.length_title, 0, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) self.full_sizer.Add(self.length_sizer, 0, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) self.full_sizer.AddSpacer(10) self.full_sizer.Add(self.bottom_buttons_sizer, 0, wx.ALIGN_CENTER) self.SetSizerAndFit(self.full_sizer) # Don't allow this window to be resized in height edit_window_size = self.GetSize() self.SetMaxSize((-1, edit_window_size.height)) def changeLength(self, event): new_length = getFloat(self, self.length_field.GetValue()) if new_length: new_length = new_length + float(event.GetEventObject().GetLabel()) self.length_field.ChangeValue("%.2f" % new_length) self.statusbar.SetStatusText("") def onClickSave(self, event): new_spool_name = self.name_field.field.GetValue() new_spool_length = getFloat(self, self.length_field.GetValue()) # Check whether the length is actually a number if not new_spool_length: self.statusbar.SetStatusText( "ERROR: Unrecognized length: %s." % self.length_field.GetValue()) return -1 if not new_spool_length > 0: self.statusbar.SetStatusText( "ERROR: Length is zero or negative: %.2f." % new_spool_length) return -1 # Check whether the "old" spool was loaded new_spool_extruder = self.parent.spool_manager.isLoaded( self.old_spool_name) # Check whether the name has changed if new_spool_name == self.old_spool_name: # Remove only the "old" spool self.parent.spool_manager.remove(self.old_spool_name) else: # Check whether the new name is already used if self.parent.spool_manager.isListed(new_spool_name): if checkOverwrite(self, new_spool_name): # Remove the "old" and the "will be overwritten" spools self.parent.spool_manager.remove(self.old_spool_name) self.parent.spool_manager.remove(new_spool_name) else: return 0 else: # Remove only the "old" spool self.parent.spool_manager.remove(self.old_spool_name) # Add "new" or edited spool self.parent.spool_manager.add(new_spool_name, new_spool_length) self.parent.spool_manager.load(new_spool_name, new_spool_extruder) self.parent.spool_list.refreshList(self.parent.spool_manager) self.parent.current_spools_dialog.refreshDialog( self.parent.spool_manager) self.parent.statusbar.SetStatusText( "Edited spool '%s'" % new_spool_name + " with %.2f mm of remaining filament." % new_spool_length) self.Close(True) def onClickCancel(self, event): self.Close(True) self.parent.statusbar.SetStatusText("") Printrun-printrun-2.0.0rc5/printrun/stlplater.py000077500000000000000000000517231325617007000221040ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import os # Set up Internationalization using gettext # searching for installed locales on /usr/share; uses relative folder if not found (windows) from .utils import install_locale install_locale('pronterface') import wx import time import logging import threading import math import sys import re import traceback import subprocess from copy import copy from printrun import stltool from printrun.objectplater import make_plater, PlaterPanel glview = False if "-nogl" not in sys.argv: try: from printrun import stlview glview = True except: logging.warning("Could not load 3D viewer for plater:" + "\n" + traceback.format_exc()) def evalme(s): return eval(s[s.find("(") + 1:s.find(")")]) def transformation_matrix(model): matrix = stltool.I if any(model.centeroffset): matrix = model.translation_matrix(model.centeroffset).dot(matrix) if model.rot: matrix = model.rotation_matrix([0, 0, model.rot]).dot(matrix) if any(model.offsets): matrix = model.translation_matrix(model.offsets).dot(matrix) return matrix class showstl(wx.Window): def __init__(self, parent, size, pos): wx.Window.__init__(self, parent, size = size, pos = pos) self.i = 0 self.parent = parent self.previ = 0 self.Bind(wx.EVT_MOUSEWHEEL, self.rot) self.Bind(wx.EVT_MOUSE_EVENTS, self.move) self.Bind(wx.EVT_PAINT, self.repaint) self.Bind(wx.EVT_KEY_DOWN, self.keypress) self.triggered = 0 self.initpos = None self.prevsel = -1 def prepare_model(self, m, scale): m.bitmap = wx.Bitmap(800, 800, 32) dc = wx.MemoryDC() dc.SelectObject(m.bitmap) dc.SetBackground(wx.Brush((0, 0, 0, 0))) dc.SetBrush(wx.Brush((0, 0, 0, 255))) dc.SetBrush(wx.Brush(wx.Colour(128, 255, 128))) dc.SetPen(wx.Pen(wx.Colour(128, 128, 128))) for i in m.facets: dc.DrawPolygon([wx.Point(400 + scale * p[0], (400 - scale * p[1])) for p in i[1]]) dc.SelectObject(wx.NullBitmap) m.bitmap.SetMask(wx.Mask(m.bitmap, wx.Colour(0, 0, 0, 255))) def move_shape(self, delta): """moves shape (selected in l, which is list ListBox of shapes) by an offset specified in tuple delta. Positive numbers move to (rigt, down)""" name = self.parent.l.GetSelection() if name == wx.NOT_FOUND: return False name = self.parent.l.GetString(name) model = self.parent.models[name] model.offsets = [model.offsets[0] + delta[0], model.offsets[1] + delta[1], model.offsets[2] ] self.Refresh() return True def move(self, event): if event.ButtonUp(wx.MOUSE_BTN_LEFT): if self.initpos is not None: currentpos = event.GetPosition() delta = (0.5 * (currentpos[0] - self.initpos[0]), -0.5 * (currentpos[1] - self.initpos[1]) ) self.move_shape(delta) self.Refresh() self.initpos = None elif event.ButtonDown(wx.MOUSE_BTN_RIGHT): self.parent.right(event) elif event.Dragging(): if self.initpos is None: self.initpos = event.GetPosition() self.Refresh() dc = wx.ClientDC(self) p = event.GetPosition() dc.DrawLine(self.initpos[0], self.initpos[1], p[0], p[1]) del dc else: event.Skip() def rotate_shape(self, angle): """rotates acive shape positive angle is clockwise """ self.i += angle if not self.triggered: self.triggered = 1 threading.Thread(target = self.cr).start() def keypress(self, event): """gets keypress events and moves/rotates acive shape""" keycode = event.GetKeyCode() step = 5 angle = 18 if event.ControlDown(): step = 1 angle = 1 # h if keycode == 72: self.move_shape((-step, 0)) # l if keycode == 76: self.move_shape((step, 0)) # j if keycode == 75: self.move_shape((0, step)) # k if keycode == 74: self.move_shape((0, -step)) # [ if keycode == 91: self.rotate_shape(-angle) # ] if keycode == 93: self.rotate_shape(angle) event.Skip() def rotateafter(self): if self.i != self.previ: i = self.parent.l.GetSelection() if i != wx.NOT_FOUND: self.parent.models[self.parent.l.GetString(i)].rot -= 5 * (self.i - self.previ) self.previ = self.i self.Refresh() def cr(self): time.sleep(0.01) wx.CallAfter(self.rotateafter) self.triggered = 0 def rot(self, event): z = event.GetWheelRotation() s = self.parent.l.GetSelection() if self.prevsel != s: self.i = 0 self.prevsel = s if z < 0: self.rotate_shape(-1) else: self.rotate_shape(1) def repaint(self, event): dc = wx.PaintDC(self) self.paint(dc = dc) def paint(self, coord1 = "x", coord2 = "y", dc = None): if dc is None: dc = wx.ClientDC(self) scale = 2 dc.SetPen(wx.Pen(wx.Colour(100, 100, 100))) for i in range(20): dc.DrawLine(0, i * scale * 10, 400, i * scale * 10) dc.DrawLine(i * scale * 10, 0, i * scale * 10, 400) dc.SetPen(wx.Pen(wx.Colour(0, 0, 0))) for i in range(4): dc.DrawLine(0, i * scale * 50, 400, i * scale * 50) dc.DrawLine(i * scale * 50, 0, i * scale * 50, 400) dc.SetBrush(wx.Brush(wx.Colour(128, 255, 128))) dc.SetPen(wx.Pen(wx.Colour(128, 128, 128))) dcs = wx.MemoryDC() for m in self.parent.models.values(): b = m.bitmap im = b.ConvertToImage() imgc = wx.Point(im.GetWidth() / 2, im.GetHeight() / 2) im = im.Rotate(math.radians(m.rot), imgc, 0) bm = wx.BitmapFromImage(im) dcs.SelectObject(bm) bsz = bm.GetSize() dc.Blit(scale * m.offsets[0] - bsz[0] / 2, 400 - (scale * m.offsets[1] + bsz[1] / 2), bsz[0], bsz[1], dcs, 0, 0, useMask = 1) del dc class StlPlaterPanel(PlaterPanel): load_wildcard = _("STL files (*.stl;*.STL)|*.stl;*.STL|OpenSCAD files (*.scad)|*.scad") save_wildcard = _("STL files (*.stl;*.STL)|*.stl;*.STL") def prepare_ui(self, filenames = [], callback = None, parent = None, build_dimensions = None, circular_platform = False, simarrange_path = None, antialias_samples = 0): super(StlPlaterPanel, self).prepare_ui(filenames, callback, parent, build_dimensions) self.cutting = False self.cutting_axis = None self.cutting_dist = None if glview: viewer = stlview.StlViewPanel(self, (580, 580), build_dimensions = self.build_dimensions, circular = circular_platform, antialias_samples = antialias_samples) # Cutting tool nrows = self.menusizer.GetRows() self.menusizer.Add(wx.StaticText(self.menupanel, -1, _("Cut along:")), pos = (nrows, 0), span = (1, 1), flag = wx.ALIGN_CENTER) cutconfirmbutton = wx.Button(self.menupanel, label = _("Confirm cut")) cutconfirmbutton.Bind(wx.EVT_BUTTON, self.cut_confirm) cutconfirmbutton.Disable() self.cutconfirmbutton = cutconfirmbutton self.menusizer.Add(cutconfirmbutton, pos = (nrows, 1), span = (1, 1), flag = wx.EXPAND) cutpanel = wx.Panel(self.menupanel, -1) cutsizer = self.cutsizer = wx.BoxSizer(wx.HORIZONTAL) cutpanel.SetSizer(cutsizer) cutxplusbutton = wx.ToggleButton(cutpanel, label = _(">X"), style = wx.BU_EXACTFIT) cutxplusbutton.Bind(wx.EVT_TOGGLEBUTTON, lambda event: self.start_cutting_tool(event, "x", 1)) cutsizer.Add(cutxplusbutton, 1, flag = wx.EXPAND) cutzplusbutton = wx.ToggleButton(cutpanel, label = _(">Y"), style = wx.BU_EXACTFIT) cutzplusbutton.Bind(wx.EVT_TOGGLEBUTTON, lambda event: self.start_cutting_tool(event, "y", 1)) cutsizer.Add(cutzplusbutton, 1, flag = wx.EXPAND) cutzplusbutton = wx.ToggleButton(cutpanel, label = _(">Z"), style = wx.BU_EXACTFIT) cutzplusbutton.Bind(wx.EVT_TOGGLEBUTTON, lambda event: self.start_cutting_tool(event, "z", 1)) cutsizer.Add(cutzplusbutton, 1, flag = wx.EXPAND) cutxminusbutton = wx.ToggleButton(cutpanel, label = _(" 0: logging.error(_("Plate full, please remove some objects")) break if "File:" in line: bits = pos_regexp.match(line).groups() filename = bits[0] x = float(bits[1]) y = float(bits[2]) rot = -float(bits[3]) for name, model in list(models.items()): # FIXME: not sure this is going to work superwell with utf8 if model.filename == filename: model.offsets[0] = x + self.build_dimensions[3] model.offsets[1] = y + self.build_dimensions[4] model.rot = rot del models[name] break if p.wait() != 0: raise RuntimeError(_("simarrange failed")) StlPlater = make_plater(StlPlaterPanel) Printrun-printrun-2.0.0rc5/printrun/stltool.py000066400000000000000000000327561325617007000215740ustar00rootroot00000000000000# coding: utf-8 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import sys import struct import math import logging import numpy import numpy.linalg def normalize(v): return v / numpy.linalg.norm(v) def genfacet(v): veca = v[1] - v[0] vecb = v[2] - v[1] vecx = numpy.cross(veca, vecb) vlen = numpy.linalg.norm(vecx) if vlen == 0: vlen = 1 normal = vecx / vlen return (normal, v) I = numpy.identity(4) def homogeneous(v, w = 1): return numpy.append(v, w) def applymatrix(facet, matrix = I): return genfacet([matrix.dot(homogeneous(x))[:3] for x in facet[1]]) def ray_triangle_intersection(ray_near, ray_dir, v123): """ MУЖllerт€“Trumbore intersection algorithm in pure python Based on http://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm """ v1, v2, v3 = v123 eps = 0.000001 edge1 = v2 - v1 edge2 = v3 - v1 pvec = numpy.cross(ray_dir, edge2) det = edge1.dot(pvec) if abs(det) < eps: return False, None inv_det = 1. / det tvec = ray_near - v1 u = tvec.dot(pvec) * inv_det if u < 0. or u > 1.: return False, None qvec = numpy.cross(tvec, edge1) v = ray_dir.dot(qvec) * inv_det if v < 0. or u + v > 1.: return False, None t = edge2.dot(qvec) * inv_det if t < eps: return False, None return True, t def ray_rectangle_intersection(ray_near, ray_dir, p0, p1, p2, p3): match1, _ = ray_triangle_intersection(ray_near, ray_dir, (p0, p1, p2)) match2, _ = ray_triangle_intersection(ray_near, ray_dir, (p0, p2, p3)) return match1 or match2 def ray_box_intersection(ray_near, ray_dir, p0, p1): x0, y0, z0 = p0[:] x1, y1, z1 = p1[:] rectangles = [((x0, y0, z0), (x1, y0, z0), (x1, y1, z0), (x0, y1, z0)), ((x0, y0, z1), (x1, y0, z1), (x1, y1, z1), (x0, y1, z1)), ((x0, y0, z0), (x1, y0, z0), (x1, y0, z1), (x0, y0, z1)), ((x0, y1, z0), (x1, y1, z0), (x1, y1, z1), (x0, y1, z1)), ((x0, y0, z0), (x0, y1, z0), (x0, y1, z1), (x0, y0, z1)), ((x1, y0, z0), (x1, y1, z0), (x1, y1, z1), (x1, y0, z1)), ] rectangles = [(numpy.array(p) for p in rect) for rect in rectangles] for rect in rectangles: if ray_rectangle_intersection(ray_near, ray_dir, *rect): return True return False def emitstl(filename, facets = [], objname = "stltool_export", binary = True): if filename is None: return if binary: with open(filename, "wb") as f: buf = b"".join([b"\0"] * 80) buf += struct.pack(" maxx: maxx = vert[0] if vert[1] > maxy: maxy = vert[1] if vert[2] > maxz: maxz = vert[2] self._dims = [minx, maxx, miny, maxy, minz, maxz] return self._dims dims = property(_get_dims) def __init__(self, filename = None): self.facet = (numpy.zeros(3), (numpy.zeros(3), numpy.zeros(3), numpy.zeros(3))) self.facets = [] self.facetsminz = [] self.facetsmaxz = [] self.name = "" self.insolid = 0 self.infacet = 0 self.inloop = 0 self.facetloc = 0 if filename is None: return with open(filename,encoding="ascii",errors="ignore") as f: data = f.read() if "facet normal" in data[1:300] and "outer loop" in data[1:300]: lines = data.split("\n") for line in lines: if not self.parseline(line): return else: logging.warning("Not an ascii stl solid - attempting to parse as binary") f = open(filename, "rb") buf = f.read(84) while len(buf) < 84: newdata = f.read(84 - len(buf)) if not len(newdata): break buf += newdata facetcount = struct.unpack_from(" 0: e2 = - e2 e3 = - e3 matrix = [[e1[0], e2[0], e3[0], 0], [e1[1], e2[1], e3[1], 0], [e1[2], e2[2], e3[2], 0], [0, 0, 0, 1]] matrix = numpy.array(matrix) # Inverse change of basis matrix matrix = numpy.linalg.inv(matrix) # Set first vertex of facet as origin neworig = matrix.dot(homogeneous(facet[0])) matrix[:3, 3] = -neworig[:3] newmodel = self.transform(matrix) return newmodel def cut(self, axis, direction, dist): s = stl() s.facets = [] f = min if direction == 1 else max for _, facet in self.facets: minval = f([vertex[axis] for vertex in facet]) if direction * minval > direction * dist: continue vertices = [] for vertex in facet: vertex = numpy.copy(vertex) if direction * (vertex[axis] - dist) > 0: vertex[axis] = dist vertices.append(vertex) s.facets.append(genfacet(vertices)) s.insolid = 0 s.infacet = 0 s.inloop = 0 s.facetloc = 0 s.name = self.name for facet in s.facets: s.facetsminz += [(min(x[2] for x in facet[1]), facet)] s.facetsmaxz += [(max(x[2] for x in facet[1]), facet)] return s def translation_matrix(self, v): matrix = [[1, 0, 0, v[0]], [0, 1, 0, v[1]], [0, 0, 1, v[2]], [0, 0, 0, 1] ] return numpy.array(matrix) def translate(self, v = [0, 0, 0]): return self.transform(self.translation_matrix(v)) def rotation_matrix(self, v): z = v[2] matrix1 = [[math.cos(math.radians(z)), -math.sin(math.radians(z)), 0, 0], [math.sin(math.radians(z)), math.cos(math.radians(z)), 0, 0], [0, 0, 1, 0], [0, 0, 0, 1] ] matrix1 = numpy.array(matrix1) y = v[0] matrix2 = [[1, 0, 0, 0], [0, math.cos(math.radians(y)), -math.sin(math.radians(y)), 0], [0, math.sin(math.radians(y)), math.cos(math.radians(y)), 0], [0, 0, 0, 1] ] matrix2 = numpy.array(matrix2) x = v[1] matrix3 = [[math.cos(math.radians(x)), 0, -math.sin(math.radians(x)), 0], [0, 1, 0, 0], [math.sin(math.radians(x)), 0, math.cos(math.radians(x)), 0], [0, 0, 0, 1] ] matrix3 = numpy.array(matrix3) return matrix3.dot(matrix2.dot(matrix1)) def rotate(self, v = [0, 0, 0]): return self.transform(self.rotation_matrix(v)) def scale_matrix(self, v): matrix = [[v[0], 0, 0, 0], [0, v[1], 0, 0], [0, 0, v[2], 0], [0, 0, 0, 1] ] return numpy.array(matrix) def scale(self, v = [0, 0, 0]): return self.transform(self.scale_matrix(v)) def transform(self, m = I): s = stl() s.facets = [applymatrix(i, m) for i in self.facets] s.insolid = 0 s.infacet = 0 s.inloop = 0 s.facetloc = 0 s.name = self.name for facet in s.facets: s.facetsminz += [(min(x[2] for x in facet[1]), facet)] s.facetsmaxz += [(max(x[2] for x in facet[1]), facet)] return s def export(self, f = sys.stdout): f.write("solid " + self.name + "\n") for i in self.facets: f.write(" facet normal " + " ".join(map(str, i[0])) + "\n") f.write(" outer loop" + "\n") for j in i[1]: f.write(" vertex " + " ".join(map(str, j)) + "\n") f.write(" endloop" + "\n") f.write(" endfacet" + "\n") f.write("endsolid " + self.name + "\n") f.flush() def parseline(self, l): l = l.strip() if l.startswith("solid"): self.insolid = 1 self.name = l[6:] elif l.startswith("endsolid"): self.insolid = 0 return 0 elif l.startswith("facet normal"): l = l.replace(", ", ".") self.infacet = 1 self.facetloc = 0 normal = numpy.array([float(f) for f in l.split()[2:]]) self.facet = (normal, (numpy.zeros(3), numpy.zeros(3), numpy.zeros(3))) elif l.startswith("endfacet"): self.infacet = 0 self.facets.append(self.facet) facet = self.facet self.facetsminz += [(min(x[2] for x in facet[1]), facet)] self.facetsmaxz += [(max(x[2] for x in facet[1]), facet)] elif l.startswith("vertex"): l = l.replace(", ", ".") self.facet[1][self.facetloc][:] = numpy.array([float(f) for f in l.split()[1:]]) self.facetloc += 1 return 1 if __name__ == "__main__": s = stl("../../Downloads/frame-vertex-neo-foot-x4.stl") for i in range(11, 11): working = s.facets[:] for j in reversed(sorted(s.facetsminz)): if j[0] > i: working.remove(j[1]) else: break for j in (sorted(s.facetsmaxz)): if j[0] < i: working.remove(j[1]) else: break print(i, len(working)) emitstl("../../Downloads/frame-vertex-neo-foot-x4-a.stl", s.facets, "emitted_object") # stl("../prusamendel/stl/mendelplate.stl") Printrun-printrun-2.0.0rc5/printrun/stlview.py000077500000000000000000000432111325617007000215600ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx import time import numpy import pyglet pyglet.options['debug_gl'] = True from pyglet.gl import GL_AMBIENT_AND_DIFFUSE, glBegin, glClearColor, \ glColor3f, GL_CULL_FACE, GL_DEPTH_TEST, GL_DIFFUSE, GL_EMISSION, \ glEnable, glEnd, GL_FILL, GLfloat, GL_FRONT_AND_BACK, GL_LIGHT0, \ GL_LIGHT1, glLightfv, GL_LIGHTING, GL_LINE, glMaterialf, glMaterialfv, \ glMultMatrixd, glNormal3f, glPolygonMode, glPopMatrix, GL_POSITION, \ glPushMatrix, glRotatef, glScalef, glShadeModel, GL_SHININESS, \ GL_SMOOTH, GL_SPECULAR, glTranslatef, GL_TRIANGLES, glVertex3f, \ glGetDoublev, GL_MODELVIEW_MATRIX, GLdouble, glClearDepth, glDepthFunc, \ GL_LEQUAL, GL_BLEND, glBlendFunc, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, \ GL_LINE_LOOP, glGetFloatv, GL_LINE_WIDTH, glLineWidth, glDisable, \ GL_LINE_SMOOTH from pyglet import gl from .gl.panel import wxGLPanel from .gl.trackball import build_rotmatrix from .gl.libtatlin import actors def vec(*args): return (GLfloat * len(args))(*args) class stlview: def __init__(self, facets, batch): # Create the vertex and normal arrays. vertices = [] normals = [] for i in facets: for j in i[1]: vertices.extend(j) normals.extend(i[0]) # Create a list of triangle indices. indices = list(range(3 * len(facets))) # [[3*i, 3*i+1, 3*i+2] for i in xrange(len(facets))] self.vertex_list = batch.add_indexed(len(vertices) // 3, GL_TRIANGLES, None, # group, indices, ('v3f/static', vertices), ('n3f/static', normals)) def delete(self): self.vertex_list.delete() class StlViewPanel(wxGLPanel): do_lights = False def __init__(self, parent, size, id = wx.ID_ANY, build_dimensions = None, circular = False, antialias_samples = 0): super(StlViewPanel, self).__init__(parent, id, wx.DefaultPosition, size, 0, antialias_samples = antialias_samples) self.batches = [] self.rot = 0 self.canvas.Bind(wx.EVT_MOUSE_EVENTS, self.move) self.canvas.Bind(wx.EVT_MOUSEWHEEL, self.wheel) self.canvas.Bind(wx.EVT_LEFT_DCLICK, self.double_click) self.initialized = True self.parent = parent self.initpos = None if build_dimensions: self.build_dimensions = build_dimensions else: self.build_dimensions = [200, 200, 100, 0, 0, 0] self.platform = actors.Platform(self.build_dimensions, circular = circular) self.dist = max(self.build_dimensions[0], self.build_dimensions[1]) self.basequat = [0, 0, 0, 1] wx.CallAfter(self.forceresize) self.mousepos = (0, 0) def OnReshape(self): self.mview_initialized = False super(StlViewPanel, self).OnReshape() # ========================================================================== # GLFrame OpenGL Event Handlers # ========================================================================== def OnInitGL(self, call_reshape = True): '''Initialize OpenGL for use in the window.''' if self.GLinitialized: return self.GLinitialized = True # create a pyglet context for this panel self.pygletcontext = gl.Context(gl.current_context) self.pygletcontext.canvas = self self.pygletcontext.set_current() # normal gl init glClearColor(0, 0, 0, 1) glColor3f(1, 0, 0) glEnable(GL_DEPTH_TEST) glClearDepth(1.0) glDepthFunc(GL_LEQUAL) glEnable(GL_CULL_FACE) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) # Uncomment this line for a wireframe view # glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) # Simple light setup. On Windows GL_LIGHT0 is enabled by default, # but this is not the case on Linux or Mac, so remember to always # include it. glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glEnable(GL_LIGHT1) glLightfv(GL_LIGHT0, GL_POSITION, vec(.5, .5, 1, 0)) glLightfv(GL_LIGHT0, GL_SPECULAR, vec(.5, .5, 1, 1)) glLightfv(GL_LIGHT0, GL_DIFFUSE, vec(1, 1, 1, 1)) glLightfv(GL_LIGHT1, GL_POSITION, vec(1, 0, .5, 0)) glLightfv(GL_LIGHT1, GL_DIFFUSE, vec(.5, .5, .5, 1)) glLightfv(GL_LIGHT1, GL_SPECULAR, vec(1, 1, 1, 1)) glShadeModel(GL_SMOOTH) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.5, 0, 0.3, 1)) glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, vec(1, 1, 1, 1)) glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50) glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, vec(0, 0.1, 0, 0.9)) if call_reshape: self.OnReshape() if hasattr(self.parent, "filenames") and self.parent.filenames: for filename in self.parent.filenames: self.parent.load_file(filename) self.parent.autoplate() if hasattr(self.parent, "loadcb"): self.parent.loadcb() self.parent.filenames = None def double_click(self, event): if hasattr(self.parent, "clickcb") and self.parent.clickcb: self.parent.clickcb(event) def forceresize(self): self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] + 1)) self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] - 1)) self.initialized = False def move(self, event): """react to mouse actions: no mouse: show red mousedrop LMB: move active object, with shift rotate viewport RMB: nothing with shift move viewport """ self.mousepos = event.GetPosition() if event.Dragging() and event.LeftIsDown(): self.handle_rotation(event) elif event.Dragging() and event.RightIsDown(): self.handle_translation(event) elif event.ButtonUp(wx.MOUSE_BTN_LEFT): if self.initpos is not None: self.initpos = None elif event.ButtonUp(wx.MOUSE_BTN_RIGHT): if self.initpos is not None: self.initpos = None else: event.Skip() return event.Skip() wx.CallAfter(self.Refresh) def handle_wheel(self, event): delta = event.GetWheelRotation() factor = 1.05 x, y = event.GetPosition() x, y, _ = self.mouse_to_3d(x, y, local_transform = True) if delta > 0: self.zoom(factor, (x, y)) else: self.zoom(1 / factor, (x, y)) def wheel(self, event): """react to mouse wheel actions: rotate object with shift zoom viewport """ self.handle_wheel(event) wx.CallAfter(self.Refresh) def keypress(self, event): """gets keypress events and moves/rotates acive shape""" keycode = event.GetKeyCode() step = 5 angle = 18 if event.ControlDown(): step = 1 angle = 1 # h if keycode == 72: self.parent.move_shape((-step, 0)) # l if keycode == 76: self.parent.move_shape((step, 0)) # j if keycode == 75: self.parent.move_shape((0, step)) # k if keycode == 74: self.parent.move_shape((0, -step)) # [ if keycode == 91: self.parent.rotate_shape(-angle) # ] if keycode == 93: self.parent.rotate_shape(angle) event.Skip() wx.CallAfter(self.Refresh) def anim(self, obj): g = 50 * 9.8 v = 20 dt = 0.05 basepos = obj.offsets[2] obj.offsets[2] += obj.animoffset while obj.offsets[2] > -1: time.sleep(dt) obj.offsets[2] -= v * dt v += g * dt if obj.offsets[2] < 0: obj.scale[2] *= 1 - 3 * dt # return v = v / 4 while obj.offsets[2] < basepos: time.sleep(dt) obj.offsets[2] += v * dt v -= g * dt obj.scale[2] *= 1 + 5 * dt obj.scale[2] = 1.0 def create_objects(self): '''create opengl objects when opengl is initialized''' if not self.platform.initialized: self.platform.init() self.initialized = 1 wx.CallAfter(self.Refresh) def prepare_model(self, m, scale): batch = pyglet.graphics.Batch() stlview(m.facets, batch = batch) m.batch = batch # m.animoffset = 300 # threading.Thread(target = self.anim, args = (m, )).start() wx.CallAfter(self.Refresh) def update_object_resize(self): '''called when the window recieves only if opengl is initialized''' pass def draw_objects(self): '''called in the middle of ondraw after the buffer has been cleared''' self.create_objects() glPushMatrix() glTranslatef(0, 0, -self.dist) glMultMatrixd(build_rotmatrix(self.basequat)) # Rotate according to trackball glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.2, 0.2, 0.2, 1)) glTranslatef(- self.build_dimensions[3] - self.platform.width / 2, - self.build_dimensions[4] - self.platform.depth / 2, 0) # Move origin to bottom left of platform # Draw platform glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) glDisable(GL_LIGHTING) self.platform.draw() glEnable(GL_LIGHTING) # Draw mouse glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) inter = self.mouse_to_plane(self.mousepos[0], self.mousepos[1], plane_normal = (0, 0, 1), plane_offset = 0, local_transform = False) if inter is not None: glPushMatrix() glTranslatef(inter[0], inter[1], inter[2]) glBegin(GL_TRIANGLES) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(1, 0, 0, 1)) glNormal3f(0, 0, 1) glVertex3f(2, 2, 0) glVertex3f(-2, 2, 0) glVertex3f(-2, -2, 0) glVertex3f(2, -2, 0) glVertex3f(2, 2, 0) glVertex3f(-2, -2, 0) glEnd() glPopMatrix() # Draw objects glDisable(GL_CULL_FACE) glPushMatrix() glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.3, 0.7, 0.5, 1)) for i in self.parent.models: model = self.parent.models[i] glPushMatrix() glTranslatef(*(model.offsets)) glRotatef(model.rot, 0.0, 0.0, 1.0) glTranslatef(*(model.centeroffset)) glScalef(*model.scale) model.batch.draw() glPopMatrix() glPopMatrix() glEnable(GL_CULL_FACE) # Draw cutting plane if self.parent.cutting: # FIXME: make this a proper Actor axis = self.parent.cutting_axis fixed_dist = self.parent.cutting_dist dist, plane_width, plane_height = self.get_cutting_plane(axis, fixed_dist) if dist is not None: glPushMatrix() if axis == "x": glRotatef(90, 0, 1, 0) glRotatef(90, 0, 0, 1) glTranslatef(0, 0, dist) elif axis == "y": glRotatef(90, 1, 0, 0) glTranslatef(0, 0, -dist) elif axis == "z": glTranslatef(0, 0, dist) glDisable(GL_CULL_FACE) glBegin(GL_TRIANGLES) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0, 0.9, 0.15, 0.3)) glNormal3f(0, 0, self.parent.cutting_direction) glVertex3f(plane_width, plane_height, 0) glVertex3f(0, plane_height, 0) glVertex3f(0, 0, 0) glVertex3f(plane_width, 0, 0) glVertex3f(plane_width, plane_height, 0) glVertex3f(0, 0, 0) glEnd() glEnable(GL_CULL_FACE) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) glEnable(GL_LINE_SMOOTH) orig_linewidth = (GLfloat)() glGetFloatv(GL_LINE_WIDTH, orig_linewidth) glLineWidth(4.0) glBegin(GL_LINE_LOOP) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0, 0.8, 0.15, 1)) glVertex3f(0, 0, 0) glVertex3f(0, plane_height, 0) glVertex3f(plane_width, plane_height, 0) glVertex3f(plane_width, 0, 0) glEnd() glLineWidth(orig_linewidth) glDisable(GL_LINE_SMOOTH) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) glPopMatrix() glPopMatrix() # ========================================================================== # Utils # ========================================================================== def get_modelview_mat(self, local_transform): mvmat = (GLdouble * 16)() if local_transform: glPushMatrix() # Rotate according to trackball glTranslatef(0, 0, -self.dist) glMultMatrixd(build_rotmatrix(self.basequat)) # Rotate according to trackball glTranslatef(- self.build_dimensions[3] - self.platform.width / 2, - self.build_dimensions[4] - self.platform.depth / 2, 0) # Move origin to bottom left of platform glGetDoublev(GL_MODELVIEW_MATRIX, mvmat) glPopMatrix() else: glGetDoublev(GL_MODELVIEW_MATRIX, mvmat) return mvmat def get_cutting_plane(self, cutting_axis, fixed_dist, local_transform = False): cutting_plane_sizes = {"x": (self.platform.depth, self.platform.height), "y": (self.platform.width, self.platform.height), "z": (self.platform.width, self.platform.depth)} plane_width, plane_height = cutting_plane_sizes[cutting_axis] if fixed_dist is not None: return fixed_dist, plane_width, plane_height ref_sizes = {"x": self.platform.width, "y": self.platform.depth, "z": self.platform.height, } ref_planes = {"x": (0, 0, 1), "y": (0, 0, 1), "z": (0, 1, 0) } ref_offsets = {"x": 0, "y": 0, "z": - self.platform.depth / 2 } translate_axis = {"x": 0, "y": 1, "z": 2 } fallback_ref_planes = {"x": (0, 1, 0), "y": (1, 0, 0), "z": (1, 0, 0) } fallback_ref_offsets = {"x": - self.platform.height / 2, "y": - self.platform.width / 2, "z": - self.platform.width / 2, } ref_size = ref_sizes[cutting_axis] ref_plane = ref_planes[cutting_axis] ref_offset = ref_offsets[cutting_axis] inter = self.mouse_to_plane(self.mousepos[0], self.mousepos[1], plane_normal = ref_plane, plane_offset = ref_offset, local_transform = local_transform) max_size = max((self.platform.width, self.platform.depth, self.platform.height)) dist = None if inter is not None and numpy.fabs(inter).max() + max_size / 2 < 2 * max_size: dist = inter[translate_axis[cutting_axis]] if dist is None or dist < -0.5 * ref_size or dist > 1.5 * ref_size: ref_plane = fallback_ref_planes[cutting_axis] ref_offset = fallback_ref_offsets[cutting_axis] inter = self.mouse_to_plane(self.mousepos[0], self.mousepos[1], plane_normal = ref_plane, plane_offset = ref_offset, local_transform = False) if inter is not None and numpy.fabs(inter).max() + max_size / 2 < 2 * max_size: dist = inter[translate_axis[cutting_axis]] if dist is not None: dist = min(1.5 * ref_size, max(-0.5 * ref_size, dist)) return dist, plane_width, plane_height def main(): app = wx.App(redirect = False) frame = wx.Frame(None, -1, "GL Window", size = (400, 400)) StlViewPanel(frame) frame.Show(True) app.MainLoop() app.Destroy() if __name__ == "__main__": main() Printrun-printrun-2.0.0rc5/printrun/utils.py000066400000000000000000000223521325617007000212230ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import os import sys import re import gettext import datetime import subprocess import shlex import locale import logging def set_utf8_locale(): """Make sure we read/write all text files in UTF-8""" lang, encoding = locale.getlocale() if encoding != 'UTF-8': locale.setlocale(locale.LC_CTYPE, (lang, 'UTF-8')) # Set up Internationalization using gettext # searching for installed locales on /usr/share; uses relative folder if not # found (windows) def install_locale(domain): if os.path.exists('/usr/share/pronterface/locale'): gettext.install(domain, '/usr/share/pronterface/locale') elif os.path.exists('/usr/local/share/pronterface/locale'): gettext.install(domain, '/usr/local/share/pronterface/locale') else: gettext.install(domain, './locale') class LogFormatter(logging.Formatter): def __init__(self, format_default, format_info): super(LogFormatter, self).__init__(format_info) self.format_default = format_default self.format_info = format_info def format(self, record): if record.levelno == logging.INFO: self._fmt = self.format_info else: self._fmt = self.format_default return super(LogFormatter, self).format(record) def setup_logging(out, filepath = None, reset_handlers = False): logger = logging.getLogger() logger.setLevel(logging.INFO) if reset_handlers: logger.handlers = [] formatter = LogFormatter("[%(levelname)s] %(message)s", "%(message)s") logging_handler = logging.StreamHandler(out) logging_handler.setFormatter(formatter) logger.addHandler(logging_handler) if filepath: if os.path.isdir(filepath): filepath = os.path.join(filepath, "printrun.log") formatter = LogFormatter("%(asctime)s - [%(levelname)s] %(message)s", "%(asctime)s - %(message)s") logging_handler = logging.FileHandler(filepath) logging_handler.setFormatter(formatter) logger.addHandler(logging_handler) def iconfile(filename): if hasattr(sys, "frozen") and sys.frozen == "windows_exe": return sys.executable else: return pixmapfile(filename) def imagefile(filename): for prefix in ['/usr/local/share/pronterface/images', '/usr/share/pronterface/images']: candidate = os.path.join(prefix, filename) if os.path.exists(candidate): return candidate local_candidate = os.path.join(os.path.dirname(sys.argv[0]), "images", filename) if os.path.exists(local_candidate): return local_candidate frozen_candidate=os.path.join(getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__))),"images",filename) if os.path.exists(frozen_candidate): return frozen_candidate else: return os.path.join("images", filename) def lookup_file(filename, prefixes): local_candidate = os.path.join(os.path.dirname(sys.argv[0]), filename) if os.path.exists(local_candidate): return local_candidate if getattr(sys,"frozen",False): prefixes+=[getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__))),] for prefix in prefixes: candidate = os.path.join(prefix, filename) if os.path.exists(candidate): return candidate return filename def pixmapfile(filename): return lookup_file(filename, ['/usr/local/share/pixmaps', '/usr/share/pixmaps']) def sharedfile(filename): return lookup_file(filename, ['/usr/local/share/pronterface', '/usr/share/pronterface']) def configfile(filename): return lookup_file(filename, [os.path.expanduser("~/.printrun/"), ]) def decode_utf8(s): try: s = s.decode("utf-8") except: pass return s def format_time(timestamp): return datetime.datetime.fromtimestamp(timestamp).strftime("%H:%M:%S") def format_duration(delta): return str(datetime.timedelta(seconds = int(delta))) def prepare_command(command, replaces = None): command = shlex.split(command.replace("\\", "\\\\")) if replaces: replaces["$python"] = sys.executable for pattern, rep in replaces.items(): command = [bit.replace(pattern, rep) for bit in command] return command def run_command(command, replaces = None, stdout = subprocess.STDOUT, stderr = subprocess.STDOUT, blocking = False): command = prepare_command(command, replaces) if blocking: return subprocess.call(command) else: return subprocess.Popen(command, stderr = stderr, stdout = stdout) def get_command_output(command, replaces): p = run_command(command, replaces, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, blocking = False, universal_newlines = True) return p.stdout.read() def dosify(name): return os.path.split(name)[1].split(".")[0][:8] + ".g" class RemainingTimeEstimator: drift = None gcode = None def __init__(self, gcode): self.drift = 1 self.previous_layers_estimate = 0 self.current_layer_estimate = 0 self.current_layer_lines = 0 self.gcode = gcode self.remaining_layers_estimate = sum(layer.duration for layer in gcode.all_layers) if len(gcode) > 0: self.update_layer(0, 0) def update_layer(self, layer, printtime): self.previous_layers_estimate += self.current_layer_estimate if self.previous_layers_estimate > 1. and printtime > 1.: self.drift = printtime / self.previous_layers_estimate self.current_layer_estimate = self.gcode.all_layers[layer].duration self.current_layer_lines = len(self.gcode.all_layers[layer]) self.remaining_layers_estimate -= self.current_layer_estimate self.last_idx = -1 self.last_estimate = None def __call__(self, idx, printtime): if not self.current_layer_lines: return (0, 0) if idx == self.last_idx: return self.last_estimate layer, line = self.gcode.idxs(idx) layer_progress = (1 - (float(line + 1) / self.current_layer_lines)) remaining = layer_progress * self.current_layer_estimate + self.remaining_layers_estimate estimate = self.drift * remaining total = estimate + printtime self.last_idx = idx self.last_estimate = (estimate, total) return self.last_estimate def parse_build_dimensions(bdim): # a string containing up to six numbers delimited by almost anything # first 0-3 numbers specify the build volume, no sign, always positive # remaining 0-3 numbers specify the coordinates of the "southwest" corner of the build platform # "XXX,YYY" # "XXXxYYY+xxx-yyy" # "XXX,YYY,ZZZ+xxx+yyy-zzz" # etc bdl = re.findall("([-+]?[0-9]*\.?[0-9]*)", bdim) defaults = [200, 200, 100, 0, 0, 0, 0, 0, 0] bdl = [b for b in bdl if b] bdl_float = [float(value) if value else defaults[i] for i, value in enumerate(bdl)] if len(bdl_float) < len(defaults): bdl_float += [defaults[i] for i in range(len(bdl_float), len(defaults))] for i in range(3): # Check for nonpositive dimensions for build volume if bdl_float[i] <= 0: bdl_float[i] = 1 return bdl_float def get_home_pos(build_dimensions): return build_dimensions[6:9] if len(build_dimensions) >= 9 else None def hexcolor_to_float(color, components): color = color[1:] numel = len(color) ndigits = numel // components div = 16 ** ndigits - 1 return tuple(round(float(int(color[i:i + ndigits], 16)) / div, 2) for i in range(0, numel, ndigits)) def check_rgb_color(color): if len(color[1:]) % 3 != 0: ex = ValueError(_("Color must be specified as #RGB")) ex.from_validator = True raise ex def check_rgba_color(color): if len(color[1:]) % 4 != 0: ex = ValueError(_("Color must be specified as #RGBA")) ex.from_validator = True raise ex tempreport_exp = re.compile("([TB]\d*):([-+]?\d*\.?\d*)(?: ?\/)?([-+]?\d*\.?\d*)") def parse_temperature_report(report): matches = tempreport_exp.findall(report) return dict((m[0], (m[1], m[2])) for m in matches) def compile_file(filename): with open(filename) as f: return compile(f.read(), filename, 'exec') def read_history_from(filename): history=[] if os.path.exists(filename): _hf=open(filename,encoding="utf-8") for i in _hf: history.append(i.rstrip()) return history def write_history_to(filename, hist): _hf=open(filename,"w",encoding="utf-8") for i in hist: _hf.write(i+"\n") _hf.close() Printrun-printrun-2.0.0rc5/printrun/zscaper.py000066400000000000000000000112461325617007000215320ustar00rootroot00000000000000# This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import wx from .stltool import stl, genfacet, emitstl a = wx.App() def genscape(data = [[0, 1, 0, 0], [1, 0, 2, 0], [1, 0, 0, 0], [0, 1, 0, 1]], pscale = 1.0, bheight = 1.0, zscale = 1.0): o = stl(None) datal = len(data) datah = len(data[0]) # create bottom: bmidpoint = (pscale * (datal - 1) / 2.0, pscale * (datah - 1) / 2.0) # print range(datal), bmidpoint for i in list(zip(range(datal + 1)[:-1], range(datal + 1)[1:]))[:-1]: # print (pscale*i[0], pscale*i[1]) o.facets += [[[0, 0, -1], [[0.0, pscale * i[0], 0.0], [0.0, pscale * i[1], 0.0], [bmidpoint[0], bmidpoint[1], 0.0]]]] o.facets += [[[0, 0, -1], [[2.0 * bmidpoint[1], pscale * i[1], 0.0], [2.0 * bmidpoint[1], pscale * i[0], 0.0], [bmidpoint[0], bmidpoint[1], 0.0]]]] o.facets += [genfacet([[0.0, pscale * i[0], data[i[0]][0] * zscale + bheight], [0.0, pscale * i[1], data[i[1]][0] * zscale + bheight], [0.0, pscale * i[1], 0.0]])] o.facets += [genfacet([[2.0 * bmidpoint[1], pscale * i[1], data[i[1]][datah - 1] * zscale + bheight], [2.0 * bmidpoint[1], pscale * i[0], data[i[0]][datah - 1] * zscale + bheight], [2.0 * bmidpoint[1], pscale * i[1], 0.0]])] o.facets += [genfacet([[0.0, pscale * i[0], data[i[0]][0] * zscale + bheight], [0.0, pscale * i[1], 0.0], [0.0, pscale * i[0], 0.0]])] o.facets += [genfacet([[2.0 * bmidpoint[1], pscale * i[1], 0.0], [2.0 * bmidpoint[1], pscale * i[0], data[i[0]][datah - 1] * zscale + bheight], [2.0 * bmidpoint[1], pscale * i[0], 0.0]])] for i in list(zip(range(datah + 1)[: - 1], range(datah + 1)[1:]))[: - 1]: # print (pscale * i[0], pscale * i[1]) o.facets += [[[0, 0, -1], [[pscale * i[1], 0.0, 0.0], [pscale * i[0], 0.0, 0.0], [bmidpoint[0], bmidpoint[1], 0.0]]]] o.facets += [[[0, 0, -1], [[pscale * i[0], 2.0 * bmidpoint[0], 0.0], [pscale * i[1], 2.0 * bmidpoint[0], 0.0], [bmidpoint[0], bmidpoint[1], 0.0]]]] o.facets += [genfacet([[pscale * i[1], 0.0, data[0][i[1]] * zscale + bheight], [pscale * i[0], 0.0, data[0][i[0]] * zscale + bheight], [pscale * i[1], 0.0, 0.0]])] o.facets += [genfacet([[pscale * i[0], 2.0 * bmidpoint[0], data[datal - 1][i[0]] * zscale + bheight], [pscale * i[1], 2.0 * bmidpoint[0], data[datal - 1][i[1]] * zscale + bheight], [pscale * i[1], 2.0 * bmidpoint[0], 0.0]])] o.facets += [genfacet([[pscale * i[1], 0.0, 0.0], [pscale * i[0], 0.0, data[0][i[0]] * zscale + bheight], [pscale * i[0], 0.0, 0.0]])] o.facets += [genfacet([[pscale * i[0], 2.0 * bmidpoint[0], data[datal - 1][i[0]] * zscale + bheight], [pscale * i[1], 2.0 * bmidpoint[0], 0.0], [pscale * i[0], 2.0 * bmidpoint[0], 0.0]])] for i in range(datah - 1): for j in range(datal - 1): o.facets += [genfacet([[pscale * i, pscale * j, data[j][i] * zscale + bheight], [pscale * (i + 1), pscale * (j), data[j][i + 1] * zscale + bheight], [pscale * (i + 1), pscale * (j + 1), data[j + 1][i + 1] * zscale + bheight]])] o.facets += [genfacet([[pscale * (i), pscale * (j + 1), data[j + 1][i] * zscale + bheight], [pscale * i, pscale * j, data[j][i] * zscale + bheight], [pscale * (i + 1), pscale * (j + 1), data[j + 1][i + 1] * zscale + bheight]])] # print o.facets[-1] return o def zimage(name, out): i = wx.Image(name) s = i.GetSize() b = list(map(ord, i.GetData()[::3])) print(b) data = [] for i in range(s[0]): data += [b[i * s[1]:(i + 1) * s[1]]] # data = [i[::5] for i in data[::5]] emitstl(out, genscape(data, zscale = 0.1).facets, name) """ class scapewin(wx.Frame): def __init__(self, size = (400, 530)): wx.Frame.__init__(self, None, title = "Right-click to load an image", size = size) self.SetIcon(wx.Icon("plater.png", wx.BITMAP_TYPE_PNG)) self.SetClientSize(size) self.panel = wx.Panel(self, size = size) """ if __name__ == '__main__': """ app = wx.App(False) main = scapewin() main.Show() app.MainLoop() """ zimage("catposthtmap2.jpg", "testobj.stl") del a Printrun-printrun-2.0.0rc5/pronsole.appdata.xml000066400000000000000000000021371325617007000216230ustar00rootroot00000000000000 pronsole FSFAP GPL-3.0+ Pronsole 3D printer host software for console

Pronsole is a command line user interface for desktop 3D printers, such as RepRap. It lets you to load Gcode, connect to printer and send the Gcode to it. Best option for controlling 3D printer from headless or not enough powerful machines.

It allows you not only to send Gcode form file, but also control the printer manually or send Gcode commands directly to the printer.

It integrates with slicing tools, so if you load an STL 3D model to it,it will slice and load it automatically.

pronsole.desktop https://raw.github.com/kliment/Printrun/master/screenshots/pronsole.png https://github.com/kliment/Printrun
Printrun-printrun-2.0.0rc5/pronsole.desktop000066400000000000000000000004151325617007000210600ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Pronsole GenericName=Printer console Comment=Controls your 3D printer form console Icon=/usr/share/pixmaps/pronsole.png Exec=/usr/bin/pronsole.py StartupNotify=true Terminal=true Categories=Utility;Graphics;3DGraphics;ConsoleOnly; Printrun-printrun-2.0.0rc5/pronsole.ico000066400000000000000000001642761325617007000202010ustar00rootroot00000000000000xx Јш(x№ €шџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџўўўџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џ)*+џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџрџџџџџџџџџџџќ?џџџџџџџџџџРџџџџџџџџџўџџџџџџџџјџџџџџџџџрџџџџџџџџ€џџџџџџџўџџџџџџјџџџџџџрџџџџџџРџџџџџџ€џџџџџўџџџџќ?џџџџјџџџџ№џџџџрџџџџРџџџџ€џџџџџџџўџџќ?џџјџџ№џџ№џџрџџРџџ€џџ€џџџџџўўќ?ќ?јј№№рррРРРР€€€€€€€€€€РРРРррр№№јјќ?ќ?ўўџџџџџ€џџ€џџРџџрџџ№џџ№џџјџџќ?џџўџџџџџџџ€џџџџРџџџџрџџџџ№џџџџјџџџџќ?џџџџўџџџџџ€џџџџџџРџџџџџџрџџџџџџјџџџџџџўџџџџџџџ€џџџџџџџџрџџџџџџџџјџџџџџџџџўџџџџџџџџџРџџџџџџџџџџќ?џџџџџџџџџџџрџџџџџџPrintrun-printrun-2.0.0rc5/pronsole.png000066400000000000000000000021021325617007000201660ustar00rootroot00000000000000‰PNG  IHDRxx9d6вsBIT|dˆ pHYsзˆ^RГ фIDATxœэ[vТ EЃЫЩДЖѓHЋЇ§pб)yћр>ЮўЎ„f{РШENS Ўяo?эмюG;pћpЩм‹Wщn:­-t /ТMwвšд%,Ы6й1/bk,Š6е!Џbk,‰6б‘(bk,ˆкЈbkFŠrс,bkFˆVН`VБ5šЂе.ЙЏhIVЙфЖб,zˆн‡ЄhБ†!З)Щ"Bю1$$Г7Й4И%Г6ЙXK1œEѓHЏ/–RŒЇiщѕI+ХjЃ_п7j‹|~\ХкЮТ?уНщ•\слд)v5kО™Ђ№"иУм Щыд]%ИЩћ!ШZ‚:_nIќњОaNоС_‚­ ЯŸзMHr›ЙKѓC4RJУМрi‚d .Џazѓ4й›[ Х}Їю ж +Cї“А‚Їщ)9ЛhБ/:,1—œm.?{ј€ХIІT_пп~м бмRВˆv?Ds~чqјv‘`­ЄELЕyСk7|-q{+жЎEДй!šыЩGк‹0|ŸЈŸЂGНг)щqнQИЬu“3Шv'XтІFэFАжMЄќ?E›<ђ†EIЕйЂЛбЬћяљ‘ЩќsА(ЯдЃр<Š6ћE‡E<еМGЉs x(K\ElсrЛ?ШЯТо‰ђЬ[sЛ?NЉ-­-в Žšж%вЮ&Ж^p†axЫ4='уhДВ‹-?Ц>С=D[“^pDЉsв Ž.Ж№'8т<мBJЌЅвЅљЁЅHp–ДЖ Ж|ѓ,їM‹—ЉsфGUЎыпЊ§ќ)ХйљНh№Фъ”€3‚€3’‚s“€s“ƒГ ƒГ “ƒѓƒƒѓƒŽxї ыяHЖAЯзЩнп;CђXzз 0чаЪR<†#+}‡—!Y—ЃЫИЄЕ_HжВFO^м‡dYЈ,е,Gu [y$ѓТU:ХZЩ†DEЋX‰,$ї!UЎ,Z ЩћЌEW)r‡ш6› дv1@ђ+Z;HTЗЉ@ђЭэACі!e=bпзаfYDмаgb'aTбvjяРœ(Ђ-ˆ-˜щШЏЂ-‰-˜ыа/Ђ-Š-˜эX5й–ЅЮqбЩкТН­qйщ%ИЄ{•йтњР]‘Нр6IENDЎB`‚Printrun-printrun-2.0.0rc5/pronsole.py000077500000000000000000000043671325617007000200540ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import sys import traceback import logging from printrun.pronsole import pronsole import getopt if __name__ == "__main__": from printrun.printcore import __version__ as printcore_version usage = "Usage:\n"+\ " pronsole [OPTIONS] [FILE]\n\n"+\ "Options:\n"+\ " -h, --help\t\t\tPrint this help message and exit\n"+\ " -V, --version\t\t\tPrint program's version number and exit\n"+\ " -v, --verbose\t\t\tIncrease verbosity\n"+\ " -c, --conf, --config=CONFIG_FILE\tLoad this file on startup instead of .pronsolerc; you may chain config files, if so settings auto-save will use the last specified file\n"+\ " -e, --execute=COMMAND\t\tExecutes command after configuration/.pronsolerc is loaded; macros/settings from these commands are not autosaved" try: opts, args = getopt.getopt(sys.argv[1:], "hVvc:e:", ["help", "version", "verbose", "conf=", "config=", "execute="]) except getopt.GetoptError as err: print(str(err)) print(usage) sys.exit(2) for o, a in opts: if o in ('-V','--version'): print("printrun "+printcore_version) sys.exit(0) elif o in ('-h', '--help'): print(usage) sys.exit(0) interp = pronsole() interp.parse_cmdline(sys.argv[1:]) try: interp.cmdloop() except SystemExit: interp.p.disconnect() except: logging.error(_("Caught an exception, exiting:") + "\n" + traceback.format_exc()) interp.p.disconnect() Printrun-printrun-2.0.0rc5/pronterface.appdata.xml000066400000000000000000000022721325617007000222720ustar00rootroot00000000000000 pronterface FSFAP GPL-3.0+ Pronterface 3D printer host software

Pronterface is a graphical user interface for desktop 3D printers, such as RepRap. It lets you view Gcode, connect to printer and send the Gcode to it. It's feature rich yet minimalist application.

It allows you not only to send Gcode form file, but also control the printer manually or send Gcode commands directly trough input field.

It integrates with slicing tools, so if you load an STL 3D model to it, it will slice and load it automatically.

pronterface.desktop https://raw.github.com/kliment/Printrun/master/screenshots/pronterface.png https://raw.github.com/kliment/Printrun/master/screenshots/pronterface2.png https://github.com/kliment/Printrun
Printrun-printrun-2.0.0rc5/pronterface.desktop000066400000000000000000000005661325617007000215360ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Pronterface GenericName=Printer Interface Comment=Controls your 3D printer Icon=/usr/share/pixmaps/pronterface.png Exec=/usr/bin/pronterface.py %f Path=/usr/share/pronterface/ StartupNotify=true Terminal=false Categories=GNOME;GTK;Utility;Graphics;3DGraphics; MimeType=application/sla;model/x.stl-binary;model/x.stl-ascii;text/x.gcode; Printrun-printrun-2.0.0rc5/pronterface.ico000066400000000000000000002040761325617007000206410ustar00rootroot00000000000000€€ ((€ ииииизззжеедваЯЭЪЧУПЛЖБЌІ Ÿ ™ “  † € y s l fa[VPKFB?<:87766666 6/6Q6p66І6Н6б6с6ю6ј6ў6ў6ј6ю6с6б6Н6І66p6Q6/6 666666666666666678:<@EKS[e m w € ˆ ’ š ЂЉБЖМСХЪЭабгеезззииииииизззжеедваЯЬЪЦУПКЕАЊЄ ž ˜ ’ ‹ „ } w q jd^XSNIE@<:877666-6]6Œ6И6т6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6т6И6Œ6]6-6666666666666678:<AFNV_ h r | … Ž ˜ ŸЇЎЕЛРХШЬЯбгеезззииииизззжеедваЯЬЪЦУПКЕЏЉЃ  —  ‰ ‚ | u o hb\WQLHD@<:7766R6‹6У6љ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6љ6У6‹6R666666666666678:=BIPZc m w  ‹ ” ЅЌДКПФШЫЯбгеезззиииззззеедвбЯЭЪЦУПКДЎЉЃ  •  ˆ  z t m ga[VPLGD@<:77V6˜6и6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6и6˜6V66666666666679:?ELV_ i t ~ ˆ ’ šЃЋВЙОУШЪЮагеезззиззззжеевбаЭЪЦУПКДЎЉЃ œ • Ž ˆ  y s l fa[VPLHDA>;<9…7Ь7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6Ь6…6<666666666677:<AIP[e p { …  ˜ ЂЉБИОУЧЪЮагееззззззжеегбаЭЪЧУПКДЎЉЃ œ •  ‡ € y s l fa[VQNJFC@T>Ѓ<№:џ9џ9џ8џ8џ8џ8џ9џ9џ9џ9џ:џ:џ:џ:џ:џ:џ:џ:џ:џ9џ9џ9џ8џ7џ7џ7џ7џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6№6Ѓ6T666666666678:?ENWb l x ƒ  ˜  ЉАЗОУЧЪЮагееззззжеегваЭЪШФПЛЕЏЉЃ œ •  ˆ  y s l ga\XSOKI E^CБAџ@џ>џ=џ<џ<џ<џ<џ<џ<џ<џ=џ>џ>џ?џ?џ?џ?џ?џ?џ?џ?џ?џ?џ>џ=џ<џ<џ;џ:џ:џ:џ9џ8џ7џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6Б6^6 6666666677:=CKU` k v  Œ – ŸЈАЗНУЧЪЮбгежззжеедваЮЫШХРЛЖАЉЃ  • Ž ˆ  z t n hb^YVQNKXIБFџEџDџCџAџAџAџAџAџAџBџCџDџDџEџFџFџFџGџHџHџHџHџHџGџGџFџFџEџDџCџAџ@џ?џ>џ<џ;џ:џ:џ8џ7џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6Б6X66666666679;AIR] h t € ‹ • ŸЈЏЖНУЧЪЯбгеззжедваЯЬЩХСМЗБЋЄ ž —  ˆ ‚ | u o je`[XTPENЂLўKџIџHџGџGџFџGџGџHџIџIџKџKџLџNџNџPџPџPџQџRџSџSџSџSџSџRџQџPџPџOџNџKџKџIџFџEџCџAџ?џ=џ;џ:џ9џ7џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6ў6Ђ6E6666666678:?FP[ g s ~ Š • žЈЏЗОУШЫЯбдзжеегбаЭЪЦТОЙВЌЅ Ÿ ˜ ‘ Š ƒ } w r l fb^[W#T„RхPџNџNџMџLџLџLџMџNџOџPџPџRџSџVџVџXџYџ[џ[џ\џ]џ]џ^џ_џ_џ_џ_џ^џ^џ]џ\џ[џZџXџVџUџSџPџNџKџIџFџDџ@џ>џ<џ:џ9џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6х6„6#666666667:>EOZf r ~ Š • ŸЈАЗОУШЬавзеедваЭЪЧУПКДЎЇ   ™ “ Œ †  y s n iea][YXОVџTџSџRџQџQџRџRџSџTџVџWџXџ[џ[џ]џ`џaџbџdџeџ fџ gџ iџ jџ jџ kџ kџ lџ lџ kџ kџ jџ jџ hџ gџfџdџbџ`џ]џ[џXџVџRџOџKџHџDџAџ>џ<џ:џ8џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6О6Y666666667:=DNYe r ~ Š • ŸЉБИОФШЭажееваЯЫШХРЛЕЏЉ Ђ › •  ˆ  | v q l gda!]Š[ђZџXџWџVџVџVџWџXџYџ[џ\џ^џ`џbџdџfџ gџ jџ lџ mџ oџ rџ rџ tџ uџ vџ wџ wџ wџ xџ xџ xџ xџ wџ wџ vџ uџ tџ rџ pџ nџ lџ iџ fџcџ`џ\џXџUџPџKџHџDџ@џ=џ:џ9џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6ђ6Š6!666666679=DNYe r ~ ‹ •  ЉБЙПХЪЭеегваЭЪХСНЗБЋЄ ž —  Š ƒ ~ x s o k gdIaЕ_џ]џ\џ[џ[џ[џ[џ]џ^џ`џaџbџeџ gџ jџ lџ nџ qџ sџ uџ wџ yџ |џ }џ ~џ €џ џ ‚џ ƒџ „џ …џ †џ †џ †џ †џ …џ …џ ƒџ ƒџ ‚џ €џ ~џ |џ zџ wџ uџ rџ oџ kџ gџbџ^џZџUџPџKџFџAџ>џ:џ9џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6Е6I666666679<DNYf s  ‹ — ЁЊГКРХЪедваЮЪШУОЙД­Ї   ™ “  †  | w r n j gkeкcџaџaџ`џ`џ`џaџbџdџeџ gџ jџ lџ oџ rџ tџ wџ yџ |џ ~џ џ ƒџ †џ ˆџ ‰џ ‹џ џ Žџ џ џ ’џ “џ “џ “џ “џ “џ “џ “џ “џ ‘џ џ Žџ џ ‹џ ˆџ †џ ƒџ џ }џ yџ vџ rџ mџ hџcџ^џXџSџMџGџCџ?џ;џ9џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6к6k666666679=DNZ g t   ˜ ЂЌДЛСЧегбаЬЩХРЛЖЏЉЃ  •  ‰ ƒ ~ y u r n k‡ iњ gџfџeџeџeџeџ fџ gџ iџ lџ mџ pџ rџ vџ yџ |џ ~џ ‚џ „џ ˆџ Šџ џ џ ’џ “џ –џ ˜џ ™џ ›џ џ žџ Ÿџ Ÿџ  џ Ёџ Ђџ Ђџ Ђџ Ёџ  џ Ÿџ žџ џ œџ šџ ˜џ •џ “џ џ џ ‰џ †џ џ }џ xџ sџ mџ gџaџ[џUџNџHџCџ?џ:џ8џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6њ6‡666666679=EO[ h v ‚ Ž šЄЎЖНУеваЭЪЧУОИВЌЅ Ÿ ˜ “  ‡ ‚ } y u r( ož lџ kџ jџ iџ iџ iџ jџ lџ lџ oџ rџ tџ wџ yџ }џ €џ ƒџ †џ Šџ џ џ “џ –џ ˜џ œџ žџ  џЃџЄџЇџЉџЉџЋџЌџЎџЎџЎџЎџЏџЏџЎџЎџЎџ­џЌџЊџЉџЇџЄџ Ђџ Ÿџ œџ ˜џ •џ ‘џ џ ˆџ ‚џ }џ wџ rџ kџdџ]џVџNџHџBџ=џ:џ8џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6ž6(66666679>EP] j w … ‘ œІЏЗОгбаЬЩХРКЕЎЉ Ђ œ –  ‹ …  | x u6 rЏ qџ oџ nџ mџ mџ nџ oџ pџ rџ tџ wџ yџ }џ €џ ƒџ ‡џ ‹џ џ ’џ •џ ˜џ œџ Ÿџ ЂџЅџЈџЊџ­џЎџБџДџЕџЖџЙџКџКџЛџМџМџНџНџНџМџЛџЛџКџЙџЗџЕџДџБџЎџЋџЈџЄџ  џ џ ˜џ “џ џ ˆџ ‚џ {џ tџ lџeџ]џVџNџFџAџ<џ:џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6Џ666666667:?GR` l z ˆ “ žЉБЙваЮЪЦТОИВЌЅ Ÿ ™ “  ˆ „ € | y> wК tџ sџ rџ rџ rџ rџ tџ uџ wџ yџ |џ џ ‚џ †џ Šџ џ ’џ •џ ™џ џ ЁџЄџЇџЋџЎџБџДџЖџЙџЛџНџПџРџУџФџХџХџЧџШџШџШџШџШџШџШџЧџЦџХџФџУџРџПџМџКџЖџДџЏџЌџЇџ Ђџ џ ˜џ ’џ ‹џ „џ }џ vџ mџeџ\џTџKџEџ?џ:џ8џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6К6>6666667:@IUb p } Š – ЁЋДваЬЩХРЛЕЎЉЃ  ˜ ’  ˆ ƒ € }A {Р xџ wџ wџ vџ wџ wџ xџ yџ |џ ~џ ‚џ …џ ˆџ Œџ џ ”џ ˜џ џ  џЄџЈџЌџЏџГџЖџЙџЛџОџРџУџХџЧџЩџЪџЫџЭџЮџЯџаџаџаџаџбџбџбџаџаџаџЯџЭџЬџЪџЩџЧџХџУџПџМџЙџЕџБџЌџЇџ Ёџ ›џ ”џ џ †џ ~џ vџ lџcџ[џPџIџAџ<џ:џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6џ6Р6A6666667;AKXf s   ™ЄЎбЮЪЧУОЙГ­Ї Ё › •  Œ ˆ „ > ~Р }џ |џ zџ zџ zџ |џ }џ ~џ џ ƒџ ‡џ Šџ џ ’џ –џ šџ žџЃџЇџЋџЎџГџЖџЙџМџПџТџХџЧџЩџЪџЭџЮџаџаџвџвџдџеџеџеџеџеџеџеџеџеџеџеџеџдџвџвџаџаџЭџЫџЩџЦџФџРџНџЙџДџЎџЉџЃџ џ •џ џ †џ }џ tџ jџ`џVџMџEџ?џ:џ7џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6Р6>6666678<DN[ i w „ ‘ ЇаЭЪХРЛЖАЊЄ Ÿ ™ •  Œ ˆ …6 ‚К џ џ ~џ ~џ ~џ џ џ ƒџ †џ ˆџ ‹џ џ “џ ˜џ œџ ŸџЄџЉџ­џБџДџЙџЛџПџТџХџЧџЪџЫџЭџЯџаџвџвџдџеџеџеџжџзџзџзџзџзџзџзџзџзџзџзџзџжџжџеџеџдџРНѓџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџКџЖџАџЊџЄџ џ •џ џ ƒџ zџ pџfџ[џPџHџ@џ;џ8џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6К66џџџџџџџџџџџџџџџџџџџџџџџџFR` m { ˆ • ŸаЫШФПКДЎЉЃ ž ˜ ”  Œ ˆ( †Џ „џ ƒџ ‚џ ‚џ ‚џ ƒџ …џ ˆџ Šџ џ џ ”џ ˜џ џ ЁџЄџЉџЎџВџЖџКџНџРџУџХџШџЪџЭџЯџаџвџвџдџеџеџжџжџзџзџзџзџзџиџиџиџиџиџиџиџиџиџзџзџзџзџзџжџРНєџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџФџПџЛџЖџАџЉџЃџ ›џ “џ ‰џ €џ vџ kџ`џUџKџCџ<џ9џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6Џ6(џџџџџџџџџџџџџџџџџџџџџ@JVd r   ˜ЮЪЦТНИВ­Ї Ђ  ˜ ”   ‹ž ˆџ ˆџ †џ †џ ‡џ ˆџ ‰џ ‹џ џ ‘џ ”џ ˜џ џ ЁџЅџЉџЎџВџЖџКџОџРџФџЧџЪџЫџЭџаџбџвџгџеџеџеџжџзџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџзџРНєџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЪџЧџФџПџЛџЕџЎџЈџ  џ ˜џ Žџ …џ zџ oџcџXџNџDџ>џ:џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6ž6џџџџџџџџџџџџџџџџџџ;CN[ i w „ ‘ЭЪХРЛЖБЌІ Ё  ˜ ” ‘ އ џ ‹џ ‹џ ‹џ ‹џ Œџ џ џ “џ •џ ˜џ џ  џЄџЉџЎџВџЖџКџОџСџХџЧџЪџЬџЮџаџбџвџдџеџеџжџзџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНєџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџаџЭџЪџЧџУџОџЙџДџЌџЄџ џ “џ ˆџ ~џ rџ fџ[џPџFџ?џ:џ7џ6џ6џ6џ6џ6џ6џ6џ6џ6‡џџџџџџџџџџџџџџџџџџ9>FR` n | ˆЬШФПКЕЏЊЅ Ё  ˜ • “k ‘њ џ Žџ Žџ Žџ џ ‘џ “џ –џ ˜џ џ  џЄџЉџ­џБџЕџЙџНџРџФџЧџЪџЫџЮџаџбџвџдџеџеџжџзџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџвџбџЯџЬџЩџХџСџМџЖџЏџЉџ Ÿџ —џ џ џ vџ iџ]џPџFџ?џ:џ7џ6џ6џ6џ6џ6џ6џ6џ6њ6kџџџџџџџџџџџџџџџ7:AKXf t ЫШУОЙДЎЉЅ Ё  š —I •к “џ “џ “џ “џ “џ •џ —џ ™џ џ ŸџЃџЈџЌџАџДџЙџМџРџУџЦџЩџЫџЭџаџбџвџдџеџеџжџзџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџеџдџвџаџЮџЪџШџУџПџЙџГџЋџЃџ ™џ џ ƒџ wџ kџ^џRџGџ?џ:џ7џ6џ6џ6џ6џ6џ6џ6џ6к6Iџџџџџџџџџџџџ68<EP] l yЪЦТОЙДЎЉЅ Ђ ž ›! ˜Е ˜џ —џ –џ –џ ˜џ ˜џ šџ џ ŸџЃџЇџЊџЎџГџЗџЛџПџТџХџШџЪџЭџЯџаџвџгџеџеџжџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџжџеџеџгџбџаџЭџЩџХџРџЛџДџ­џЄџ ›џ ‘џ …џ yџ lџ_џSџHџ@џ:џ7џ6џ6џ6џ6џ6џ6џ6џ6Е6!џџџџџџџџџ67:@IVd rЪХСНИГЎЉІ Ђ Ÿ Š ›џ šџ šџ šџ ›џ џ žџ  џЃџЇџЉџЎџБџЕџЙџНџРџФџЧџЪџЬџЮџаџвџгџдџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџзџзџжџеџдџвџаџЭџЪџЦџТџНџЖџЎџЇџ џ ’џ †џ yџ lџ`џSџGџ?џ:џ7џ6џ6џ6џ6џ6џ6џ6џ6Šџџџџџџџџџ668<DO\ jЪХРМИГЎЊЇЃ ЂY Ÿђ žџ žџ žџ žџ Ÿџ ЂџЃџІџЉџЌџАџДџИџЛџПџУџХџШџЪџЭџаџбџвџдџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџзџзџзџжџеџеџгџбџЯџЫџШџУџОџЗџАџЇџ џ “џ †џ yџ lџ_џRџFџ?џ:џ7џ6џ6џ6џ6џ6џ6џ6ђ6Yџџџџџџ667:?IVcЩХРМИДЎЋЈЅ#ЃО Ђџ Ђџ Ђџ ЂџЃџЄџЇџЉџЌџЏџГџЖџКџОџРџФџЧџЪџЬџЮџаџвџгџеџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџзџзџзџеџеџгџбџаџЬџШџФџОџИџАџЇџ žџ “џ †џ yџ kџ]џPџEџ>џ9џ7џ6џ6џ6џ6џ6џ6џ6О6#џџџ6667<DO\ЩХРМИДАЌЉЈ„ІџЅџЅџЅџЇџЈџЉџЌџЎџВџЕџЙџЛџПџУџХџШџЪџЭџаџаџвџдџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџзџзџзџжџеџдџвџаџЭџЩџХџПџЙџАџЇџ џ ’џ …џ wџ jџ[џOџDџ=џ9џ7џ6џ6џ6џ6џ6џ6џ6„џџџ6667:@IVЩХРМЙДБЎЌEЊхЉџЉџЉџЉџЋџ­џЎџБџДџЗџКџОџРџФџЧџЪџЬџЮџаџбџвџдџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџзџзџзџжџеџдџвџаџЭџЩџХџПџИџАџЇџ œџ џ ƒџ uџ gџZџMџCџ<џ8џ7џ6џ6џ6џ6џ6џ6х6E66668<EPЩХСНЙЖГАЎЂ­џЌџЌџ­џЎџЏџБџДџЖџКџМџПџУџХџШџЪџЭџЯџаџвџгџеџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџзџзџжџеџеџвџаџЭџЩџХџОџЗџЎџЅџ šџ џ џ rџeџWџKџAџ;џ7џ6џ6џ6џ6џ6џ6џ6Ђ66667:AKЪХТОКЗДГXБўАџАџАџБџГџДџЖџЙџЛџОџСџФџЦџЩџЫџЭџаџбџвџдџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџзџзџжџеџеџвџаџЭџЩџФџОџЖџЎџЃџ ˜џ ‹џ }џ oџaџTџIџ@џ:џ7џ6џ6џ6џ6џ6џ6ў6X66679>FЪЦУПЛЙЖ ЕБДџДџДџДџЕџЗџЙџЛџОџРџУџХџШџЪџЭџЯџаџбџвџдџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџзџзџжџеџеџвџаџЬџШџУџНџДџЌџ Ёџ •џ ˆџ yџ lџ]џPџFџ>џ:џ7џ6џ6џ6џ6џ6џ6Б6 6667;CЪЧФРОЛЙ^ИџЗџЗџЗџЙџКџЛџОџРџТџХџЧџЪџЫџЭџаџаџвџгџеџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџзџзџжџеџеџвџаџЬџШџТџЛџГџЉџ žџ ‘џ ƒџ vџ gџZџNџDџ<џ8џ7џ6џ6џ6џ6џ6џ6^6667:@ЫШХТПОЛБКџКџКџЛџМџОџПџТџФџЦџЩџЪџЭџЯџаџбџвџдџеџеџеџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџзџзџжџеџдџвџЯџЫџЦџРџЙџАџІџ šџ џ џ rџcџVџKџAџ:џ7џ6џ6џ6џ6џ6џ6Б66679=ЭЪЧФСПTОџОџОџОџПџРџТџФџЦџШџЪџЭџЮџаџбџвџгџеџеџеџжџжџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџзџзџжџеџдџбџЮџЪџХџПџЖџ­џ Ђџ •џ ˆџ zџ lџ_џRџGџ?џ:џ7џ6џ6џ6џ6џ6џ6T6667;ЮЫШХФТЃСџРџСџТџУџХџЦџШџЪџЬџЮџаџбџвџгџеџеџеџеџжџзџзџзџзџзџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџзџзџжџеџгџаџЭџЩџУџМџДџЉџ џ џ ‚џ uџ gџ[џNџDџ=џ9џ7џ6џ6џ6џ6џ6Ѓ6667:аЭЪШЦ<Х№ХџХџХџХџЧџШџЪџЬџЮџаџбџвџдџеџеџеџеџqjцџРНєџџџџџџџџџаЭїџ{ъџ"кџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџA9рџ{ъџАЌђџаЭїџџџџџџџџџџџџџџџџџпољџРНђџ‹чџ`Yкџ ХџЙџЏџЄџ ˜џ ‹џ }џ oџbџVџKџAџ;џ7џ6џ6џ6џ6џ6№6<667:вЯЭЪЩ…ШџШџШџШџЩџЪџЬџЮџаџбџгџеџеџеџжџжџ"йџРНєџџџџџџџџџџџџџџџџџџџџџџџџџпоњџA9рџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџ2(нџ{ъџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЏЌщџ_YЮџЋџ Ÿџ “џ …џ wџ jџ]џQџFџ?џ:џ7џ6џ6џ6џ6џ6…6678дбЯЭЫЬЪџЪџЪџЫџЭџЯџаџвџгџеџеџзџзџзџзџзџ œяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџ"лџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџ"лџ{ъџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоѕџ^XФџ ™џ Œџ ~џ rџeџXџMџDџ<џ9џ7џ6џ6џ6џ6Ь6668егбаVЯџЮџЮџЯџаџаџвџдџеџжџзџиџиџиџиџиџA9рџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ъџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџA9рџпоњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЎЌпџšџ †џ xџ lџ`џSџIџ@џ:џ7џ6џ6џ6џ6џ6V667зедв˜бџбџбџвџгџеџеџзџиџиџ иџ иџ иџ иџ иџиџ{ъџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџqjшџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяюјџMHЋџ џ rџfџ[џOџEџ>џ:џ7џ6џ6џ6џ6˜667изжеиеџеџеџеџжџзџиџ иџ йџ йџ йџ йџ йџ йџ иџ иџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџA9рџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџmhЖџ xџ lџ`џVџKџBџ<џ8џ7џ6џ6џ6и667 й ииRзџзџзџзџиџиџ иџ йџ йџйџйџйџйџйџ йџ йџ иџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ2(нџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџmhВџ rџ fџ[џPџFџ?џ:џ7џ6џ6џ6џ6R67й й й‹ иџ иџ иџ иџ йџ йџйџйџйџкџкџкџкџйџйџ йџ иџЁœяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџаЭїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџ‹эџQIтџ"лџиџиџиџиџQIтџ{ъџРНєџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ;6’џ lџaџVџKџCџ<џ9џ7џ6џ6џ6‹67кййУ йџ йџ йџйџйџкџкџкџкџкџкџкџкџйџйџ йџ иџqkшџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ œяџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџqjшџиџиџиџиџиџиџиџиџиџиџзџ2(мџ œяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяюіџ{џfџ[џPџGџ@џ:џ7џ6џ6џ6У67кк-кљкџкџкџкџкџкџкџ кџ кџ кџ кџкџкџкџйџ йџ иџиџроњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџQIтџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ъџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџQIрџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ­Ћвџ kџ`џVџLџDџ=џ9џ7џ6џ6љ6-7!кк]кџкџкџкџ кџ!кџ!кџ"лџ#лџ#лџ#лџ"лџ!кџкџкџйџ йџ иџиџRJтџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‹эџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџqjшџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџжџA9нџаЭіџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџKG–џeџ[џPџHџ@џ:џ8џ7џ6џ6]7$л#лŒ!кџ!кџ!кџ"лџ#лџ$лџ%лџ%лџ&лџ%лџ%лџ$лџ"лџкџкџйџ йџ иџиџиџA9рџпоњџџџџџџџџџџџџџџџџџяюќџ{ъџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџqjшџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџеџA9нџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџооьџ jџ`џVџLџDџ>џ:џ7џ6џ6Œ7&л&лИ%лџ%лџ%лџ&лџ&лџ&лџ'мџ'мџ'мџ'мџ&лџ%лџ#лџ!кџкџйџ йџ иџиџиџиџиџQIтџ{ъџ{ъџaZхџ"лџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‹эџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџжџеџPIнџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџkhЈџdџZџPџHџAџ;џ8џ7џ6И7)м (мт'мџ'мџ(мџ)мџ)мџ* мџ* мџ* мџ* мџ)мџ(мџ&лџ$лџ!кџкџйџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџеџвџ œьџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџОМйџ hџ^џUџKџDџ>џ:џ7џ6т7 ,"м/+!мџ+!мџ+!мџ,"мџ,"мџ,"мџ-#мџ-#мџ-#мџ,"мџ+!мџ)мџ'мџ%лџ"лџкџйџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџqjшџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџжџдџ!гџяюћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ*%€џbџYџPџHџAџ<џ8џ7џ7//%нQ/%нџ.$нџ/%нџ/%нџ/%нџ/%нџ0&нџ0&нџ/%нџ/%нџ-#мџ+!мџ)мџ&лџ"лџкџйџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџеџбџ œъџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ|yГџfџ]џTџKџDџ?џ:џ8џ9Q2(нp2(нџ2(нџ2(нџ2(нџ2(нџ3)нџ3)нџ2(нџ2(нџ1'нџ/%нџ,"мџ* мџ&лџ#лџкџйџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‹эџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџеџвџA9зџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЮЭуџ jџaџXџOџGџAџ<џ:џ:p4+о4+оџ4+оџ4+оџ4+оџ5,оџ5,оџ5,оџ4+оџ4+оџ3)нџ1'нџ/%нџ+!мџ'мџ$лџкџйџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџQIтџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџжџдџЯџпојџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ lџdџ[џSџKџDџ?џ;џ;7.оІ7.оџ7.оџ7.оџ7.оџ8/оџ8/оџ7.оџ7.оџ6-оџ4+оџ2(нџ0&нџ,"мџ(мџ$лџкџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ2(нџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџжџеџаџ‹цџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџKG—џ gџ^џVџNџGџAџ>џ=І;2пН:1пџ:1пџ:1пџ;2пџ;2пџ;2пџ:1пџ:1пџ8/оџ6-оџ4+оџ1'нџ-#мџ)мџ$лџкџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџеџбџ`Zмџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ|yДџ jџaџYџQџKџEџ@џ@Н>5пб=4пџ>5пџ>5пџ>5пџ>5пџ=4пџ=4пџ<3пџ:1пџ8/оџ5,оџ2(нџ/%нџ)мџ%лџкџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџеџвџ1(вџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџŠРџ mџeџ\џUџNџGџCџAб@8рс@8рџ@8рџ@8рџ@8рџ@8рџ@7пџ@7пџ>5пџ=4пџ:1пџ7.оџ3*оџ0&нџ+!мџ&лџкџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџеџвџЭџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџОМлџ pџ gџ`џXџPџKџFџDсC;рюC;рџC;рџC;рџC;рџC;рџB:рџA9рџ@7пџ>5пџ<3пџ90оџ4+оџ1'нџ,"мџ&лџ кџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџжџгџЭџпоїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџОМмџ rџ jџbџ[џSџMџIџFюF=сјF=сџF=сџF=сџF=сџE<рџE<рџD<рџB:рџ@7пџ>5пџ:1пџ6-оџ2(нџ,"мџ&лџ!кџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџжџдџЮџРН№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ uџ lџeџ]џVџPџKџIјI@сўI@сџJAсџI@сџI@сџH?сџH?сџF=сџE<рџB:рџ@7пџ<3пџ8/оџ3*оџ.$нџ'мџ!кџкџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџ{ъџqjшџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџдџЯџРН№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ wџ oџ gџ`џYџRџNџKўLCсўMDтџMDтџMDтџLCсџKBсџKBсџI@сџG>сџD<рџA9рџ>5пџ:1пџ4+оџ/%нџ(мџ"лџкџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџеџаџРН№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ yџ rџ jџbџ[џVџPџNўOGтјOGтџOGтџOGтџNFтџMEтџMDтџKBсџI@сџF=сџC;рџ@7пџ;2пџ6-оџ0&нџ)мџ#лџкџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџеџаџРН№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ |џ tџ lџeџ]џXџSџPјRJуюRJуџRJуџRJуџQIтџPHтџOGтџMEтџKBсџH?сџE<рџA9рџ=4пџ7.оџ2(нџ* мџ$лџкџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџеџаџРНёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ }џ vџ nџ gџ`џ[џVџSюTLусUMуџUMуџUMуџTLуџSKуџRJуџPHтџMEтџKBсџH?сџC;рџ?6пџ90оџ3)нџ,"мџ$лџкџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџеџаџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџоояџ џ wџ pџ iџbџ\џXџVсWOубXPуџXPуџXPуџWOуџVNуџTLуџRJуџPHтџMEтџJAсџE<рџ@8рџ;2пџ4+оџ-#мџ&лџкџйџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџеџ!гџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџОМпџ џ yџ rџ lџeџ_џ[џYбZRфНZSфџZSфџZSфџZRфџYQфџWOуџUMуџSKуџOGтџLCсџH?сџB:рџ=4пџ6-оџ/%нџ&лџкџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ2(нџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџеџPIнџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџž›аџ ‚џ {џ tџ mџ gџaџ]џ[Н\UфІ]Vфџ]Vфџ\Uфџ\Uфџ[TфџZRфџXPуџUMуџRJуџMEтџJAсџD<рџ?6пџ7.оџ1'нџ(мџ!кџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџqjшџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџжџдџ€{цџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ}zСџ ƒџ }џ vџ oџ iџdџ`џ^І_Xх_Xхџ`Yхџ_Xхџ^Wхџ^Wхџ[TфџZRфџXPуџTLуџPHтџLCсџG>сџ@8рџ:1пџ2(нџ* мџ#лџкџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ œяџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџжџдџЯЭіџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџMHЋџ †џ ~џ wџ rџ kџfџbџaaZхpb[хџb[хџb[хџaZхџaZхџ^Wхџ\UфџZRфџWOуџSKуџNFтџI@сџB:рџ<3пџ4+оџ,"мџ$лџкџйџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџжџ2(кџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ•џ ‡џ €џ yџ sџ mџ hџeџepd]хQe^цџe^цџe^цџd]хџd]хџaZхџ_Xхџ\UфџZRфџVNуџPHтџKBсџE<рџ?6пџ7.оџ/%нџ&лџкџйџ йџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџaZхџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџеџ œэџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЮЭъџ џ ˆџ џ {џ tџ oџ kџ gџ gQg`ц/g`цџh`цџh`цџg`цџg`цџd]хџb[хџ_Xхџ[TфџYQфџSKуџMEтџH?сџ@8рџ90оџ1'нџ(мџ!кџйџ йџ иџиџqkшџРНѕџџџџџџџџџаЭїџ{ъџ"лџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџ"иџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ~zШџ џ ‰џ ‚џ |џ wџ rџ lџ jџ j/ibц ibцтjcчџjcчџibцџibцџg`цџe^цџb[хџ^Wхџ[TфџVNуџPHтџKBсџC;рџ<3пџ3*оџ* мџ#лџкџ йџ%лџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџпоњџA9рџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџaZхџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџзџ œюџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ-&Іџ ‘џ Šџ ƒџ ~џ xџ sџ oџ mт m kdчleчИleчџleчџleчџkdчџibцџh`цџe^цџb[хџ^WхџYQфџSKуџMEтџF=сџ?6пџ5,оџ-#мџ%лџкџйџЂ№џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџ"лџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяюќџ2(нџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџзџQIтџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЎЌпџ ˜џ ’џ ‹џ …џ џ zџ vџ rџ pИ qngчohчŒohчџohчџohчџngчџleчџjcчџhaцџe^цџaZхџ[TфџWOуџPHтџJAсџA9рџ90оџ0&нџ'мџ кџ91пџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ{ъџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџаЭїџ"лџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџA9пџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџNHЙџ ™џ “џ џ †џ џ |џ wџ tџ sŒ tpiчqjш]rkшџrkшџrkшџqjшџohчџngчџkdчџh`цџd]хџ_XхџZRфџSKуџMDтџE<рџ<3пџ3)нџ* мџ#лџ†ыџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџаЭїџ"лџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџA9пџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџПМшџ  џ šџ “џ џ ˆџ ‚џ ~џ yџ wџ v] wrkшslш-unшљunшџunшџtmшџrkшџqjшџngчџkdчџg`цџc\хџ]VфџWOуџPHтџH?сџ@7пџ6-оџ-#мџ&лџУРѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяюќџџџџџџџџџџџџџџџџџџџџџпоњџQIтџиџиџиџиџиџиџиџиџиџиџиџиџиџиџaZхџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ>7Йџ Ёџ šџ •џ Žџ ‰џ „џ €џ |џ yљ y- {unшunшvpщУwqщџwqщџvpщџunшџtmшџrkшџngчџjcчџf_цџaZхџZSфџSKуџLCсџB:рџ:1пџ1'нџ(мџФСѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџРНѕџџџџџџџџџџџџџџџџџџџџџџџџџџџџџQIтџяюќџџџџџџџџџџџџџџџџџџџџџџџџџ œяџ2(нџиџиџиџиџиџиџиџиџиџиџ2(нџАЌђџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ~zдџЈџ Ђџ ›џ •џ џ ‹џ †џ ‚џ ~џ }У | ~uoшwqщxrщ‹ysщџysщџysщџwqщџvpщџunшџrkшџngчџibцџd]хџ^WхџXPуџOGтџG>сџ>5пџ4+оџ,"мџЇЃёџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџпоњџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџпоњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџ{ъџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџ{ъџQIтџиџиџиџ"лџQIтџ{ъџаЭїџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЯЭ№џЎџЈџ Ђџ œџ –џ ‘џ Œџ ˆџ ƒџ џ ‹  ‚wqщysщztщR{uщџ{uщџ{uщџztщџysщџwqщџunшџrkшџleчџh`цџb[хџ[TфџSKуџKBсџB:рџ8/оџ/%нџ}wъџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ œяџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџ œяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЯЭёџЙџЎџЉџ Ђџ џ ˜џ “џ џ ‰џ †џ ƒџ ‚R ƒ …ysщ{uщ}wъ}wъи~xъџ~xъџ}wъџ|vщџztщџwqщџunшџqjшџleчџg`цџ_XхџXPуџOGтџF=сџ=4пџ3*оџ+!мџтрњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџQIтџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџиџиџиџ œяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяюћџ@8ШџДџЎџЉџЃџ žџ ˜џ “џ џ ‹џ ˆџ †и † † ˆ{uщ}wъ~xъ€zъ˜€zъџ€zъџ€zъџyъџ}wъџ{uщџwqщџunшџohчџibцџd]хџ\UфџTLуџKBсџA9рџ7.оџ/%нџaYхџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‹эџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџяюќџиџиџиџиџ œяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЯЭѓџ УџКџДџЎџЉџЃџ žџ ™џ •џ џ џ ‹џ ˆ˜ ˆ Š }wъyъ€zъ‚|ъV‚}ыџ‚}ыџ‚}ыџ‚|ъџ€zъџ~xъџ{uщџwqщџtmшџngчџh`цџaZхџYQфџPHтџF=сџ=4пџ3*оџ+!мџPGтџсрњџџџџџџџџџџџџџџџџџяяќџ{ъџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџqjшџяюќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ‹цџ ЩџПџКџДџЎџЉџЄџ Ÿџ šџ –џ “џ џ џ ŒV Œ  }wъ€zъ‚|ъ‚}ы„ыЬ…€ыџ…€ыџ„ыџ‚}ыџ‚|ъџyъџ{uщџwqщџrkшџleчџf_цџ^WхџUMуџKBсџA9рџ8/оџ0&нџ(мџ"лџYRфџ„ыџƒ}ыџc\хџ#лџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџ"лџ œяџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџаЭіџPIлџЪџХџПџКџДџЏџЉџЄџ  џ œџ ˜џ ”џ ’џ Ь Ž  ‘ •yъ‚|ъƒ~ы…€ы†ы…‡‚ыџ‡‚ыџ†ыџ…€ыџ„ыџ‚}ыџ€zъџ{uщџvpщџqjшџjcчџc\хџZSфџPHтџG>сџ=4пџ4+оџ,"мџ&лџ кџкџйџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРНѕџиџиџиџиџиџиџиџиџ2(нџ‹эџпоњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџАЌёџaZуџбџЭџЩџХџПџКџДџЏџЊџІџ Ђџ џ ™џ –џ “џ “… ’ “ • ˜€zъ‚}ы„ы†ыˆƒы<ˆƒы№‰ƒьџ‰ƒьџˆƒыџ‡‚ыџ…€ыџ‚}ыџ€zъџ{uщџuoшџohчџhaцџ`YхџVNуџMEтџB:рџ:1пџ2(нџ)мџ$лџкџкџйџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџA9рџ{ъџАЌђџРНѕџяюќџџџџџџџџџџџџџяяќџРНѕџ‘Œэџqkшџ"кџжџеџбџЭџЩџФџПџКџЕџАџЋџЇџ Ђџ žџ ›џ ˜џ –№ •< • — ™ €zъ‚}ы…€ыˆƒы‰ƒь‹…ьЃ‹…ьџ‹…ьџ‹…ьџŠ„ьџˆƒыџ†ыџ‚}ыџ€zъџztщџunшџmfчџf_цџ\UфџSKуџI@сџ@7пџ6-оџ/%нџ'мџ"лџкџйџ йџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџжџеџбџЭџЩџФџПџКџЕџБџЌџЈџЃџ  џ џ šџ ˜Ѓ ˜ ˜ š  Ё€zъƒ~ы†ы‰ƒь‹…ьŒ†ьTŽˆьџŽˆьџŽˆьџ‡ьџ‹…ьџ‰ƒьџ†ыџ‚}ыџyъџysщџslшџkdчџc\хџYQфџOGтџE<рџ=4пџ3*оџ,"мџ&лџ!кџкџйџ йџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџиџиџиџжџеџаџЭџЩџФџПџКџЖџБџ­џЉџЅџ Ђџ Ÿџ џ œT œ  ž ЁЄ€zъ„ы‡‚ыŠ„ьŒ†ьŽˆь‰ьБŠэџŠэџ‰ьџŽˆьџ‡ьџŠ„ьџ‡‚ыџ‚}ыџ~xъџxrщџqjшџibцџ`YхџVNуџMDтџB:рџ:1пџ2(нџ* мџ%лџ кџкџйџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ иџ иџиџиџзџеџаџЭџЩџФџПџЛџЖџВџЎџЊџЇџЃџ Ђџ ŸБ Ÿ Ÿ   ЂЅЉ€zъ„ыˆƒы‹…ьŽˆь‰ь‹э^‘Œэџ‘Œэџ‘Œэџ‹эџŠэџŽˆьџ‹…ьџ‡‚ыџ‚}ыџ}wъџwqщџohчџg`цџ]VфџSKуџJAсџ@7пџ7.оџ0&нџ)мџ$лџкџкџйџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ иџ иџ иџ иџ иџиџзџеџаџЭџЩџХџРџЛџЗџГџЎџЌџЉџІџЃџ Ђ^ Ђ ЂЄІЉ­yъƒ~ыˆƒы‹…ьŽˆь‹э‘Œэ “ŽэБ“Žэџ“Žэџ“Žэџ’эџ‹эџ‰ьџ‹…ьџˆƒыџ‚}ыџ}wъџuoшџmfчџd]хџZSфџPHтџG>сџ>5пџ5,оџ/%нџ(мџ#лџкџкџйџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ иџ йџ йџ йџ йџ иџиџзџеџбџЭџЩџХџРџМџИџДџАџ­џЊџЈџІБЅ ЅІЈЊЎБ}wъ‚}ыˆƒы‹…ь‰ь‹э“Žэ”эX•юў–‘юџ–‘юџ•юџ“Žэџ‘ŒэџŠэџŒ†ьџˆƒыџ‚}ыџ|vщџunшџleчџb[хџYQфџNFтџE<рџ=4пџ4+оџ-#мџ'мџ"лџкџкџйџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџ йџ йџ йџ йџиџзџеџбџЭџЩџХџРџНџЙџЕџВџЎџЌџЊўЉXЉЉЉЌЎБЕ|vщ‚}ы‡‚ы‹…ь‰ь‘Œэ“Žэ–‘ю–‘юЂ—’юџ˜“юџ—’юџ–‘юџ•юџ“Žэџ‹эџŒ†ьџˆƒыџ‚|ъџztщџslшџibцџaZхџVNуџMDтџC;рџ;2пџ3*оџ,"мџ&лџ"лџкџкџйџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџ йџйџйџ йџ йџ иџиџеџбџЭџЪџХџСџОџКџЖџДџБџЎџ­ЂЌЌЌЎЏГЖЙztщ€zъ…€ы‹…ь‰ь’э”э–‘ю˜“юE™”юх™”юџ™”юџ™”юџ˜“юџ–‘юџ“Žэџ‹эџ‡ьџ‡‚ыџ‚|ъџztщџrkшџhaцџ^WхџUMуџLCсџB:рџ:1пџ3)нџ,"мџ&лџ"лџкџкџйџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџ йџйџйџйџйџйџ йџ иџиџеџвџЮџЪџХџТџПџЛџИџЕџГџБхЏEЎЎАБДЖКНwqщyъ„ыŠ„ьŽˆь’э•ю—’ю™”ю›–ю„œ—яџœ—яџœ—яџ›–юџ™”юџ—’юџ”эџ‹эџ‡ьџ‡‚ыџ{ъџysщџqjшџh`цџ^WхџTLуџKBсџB:рџ:1пџ3)нџ,"мџ&лџ"лџкџкџйџ йџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџйџкџкџйџйџйџ йџиџеџвџЯџЪџЧџУџРџНџКџЗџЕџД„ГВГДЕИЛОРunш|vщ‚}ыˆƒыŽˆь‘Œэ•ю˜“юš•юœ—я#œ˜яОœ˜яџ™яџœ˜яџœ—яџ›–юџ™”юџ–‘юџ‘ŒэџŽˆьџ‡‚ыџ{ъџxrщџpiчџg`цџ]VфџSKуџKBсџB:рџ:1пџ3)нџ,"мџ'мџ#лџкџкџйџ йџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџйџкџкџкџкџкџкџйџ йџиџжџвџаџЫџШџХџСџОџЛџЙџИОЖ#ЖЖЖИКМПСХqjшysщ€zъ†ыŒ†ь‹э”э˜“юš•юœ—я™яYžšяђžšяџžšяџžšяџ™яџœ—яџ™”юџ–‘юџ’эџŽˆьџ‡‚ыџ€zъџxrщџpiчџg`цџ]VфџSKуџKBсџB:рџ:1пџ3*оџ-#мџ(мџ$лџ кџкџйџ йџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџкџкџкџкџкџкџкџкџйџ йџ иџзџгџаџЬџЩџХџУџРџОџЛђКYЙЙЙКЛОРУХШmfчuoш}wъ„ыŠ„ьŠэ“Žэ—’юš•юœ˜яžšяŸ›яŠ œяџЁ№џЁ№џ œяџžšяџœ˜яџ›–юџ—’юџ“ŽэџŽˆьџˆƒыџ{ъџxrщџpiчџg`цџ]VфџTLуџKBсџB:рџ<3пџ4+оџ/%нџ)мџ%лџ!кџкџйџйџ йџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџкџкџкџкџ кџ!кџ!кџ!кџкџкџкџйџ иџзџдџаџЭџЪџЧџХџТџРџОŠНММНОПСФЦЩЪibцrkшztщ‚|ъˆƒыŽˆь’э–‘юš•юœ˜яžšя œя!Ё№ЕЂž№џЂž№џЂž№џЁ№џ œяџžšяџœ—яџ˜“юџ“ŽэџŽˆьџˆƒыџ{ъџysщџqjшџh`цџ^WхџVNуџMDтџD<рџ=4пџ6-оџ0&нџ* мџ&лџ"лџкџкџйџ йџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџйџйџкџкџкџкџ!кџ"лџ#лџ$лџ#лџ"лџ!кџкџкџйџ йџиџеџвџЯџЫџШџХџФџТЕР!РПРРТУХШЪЬЮd]хmfчuoш~xъ…€ы‹…ь‹э•ю™”юœ—яžšяЁ№Ђž№IЃŸ№кЄ №џЄ №џЄ №џЃŸ№џЁ№џŸ›яџœ˜яџ™”юџ”эџŠэџ‰ƒьџ‚|ъџztщџrkшџibцџ`YхџWOуџNFтџF=сџ?6пџ8/оџ2(нџ,"мџ'мџ$лџ кџкџйџйџ йџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџкџкџкџ!кџ#лџ$лџ%лџ&лџ&лџ&лџ$лџ#лџ кџкџйџ йџиџеџвџаџЭџЪџШџЦкХIФУУУФХЧЩЪЭЯа^Wхhaцrkшztщ‚|ъˆƒы‰ь“Žэ˜“юœ—яžšяЁ№ЃŸ№Є №kЅЁ№њІЂ№џІЂ№џЅЁ№џЄ №џЂž№џ œяџ™яџš•юџ–‘юџ‹эџŠ„ьџ‚}ыџ{uщџslшџjcчџb[хџYQфџPHтџI@сџA9рџ:1пџ4+оџ/%нџ)мџ&лџ"лџкџкџйџ йџ йџ йџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџкџкџкџ!кџ#лџ%лџ&лџ'мџ(мџ(мџ(мџ'мџ&лџ$лџ!кџкџкџ йџ иџзџдџбџЯџЬџЪњШkШЦЦЦЧШЩЪЭЮабвYQфc\хleчunш}wъ…€ы‹…ь‘Œэ–‘ю›–юžšяЁ№ЃŸ№Є №ІЂ№‡ЇЃ№џЇЃ№џЇЃ№џЇЃ№џІЂ№џЄ №џЁ№џžšяџœ—яџ–‘юџ‘Œэџ‹…ьџ„ыџ}wъџunшџleчџd]хџ[TфџSKуџLCсџE<рџ>5пџ7.оџ2(нџ-#мџ(мџ$лџ!кџкџкџйџ йџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџкџкџ кџ!кџ$лџ&лџ&лџ)мџ* мџ+!мџ,"мџ,"мџ+!мџ)мџ'мџ&лџ#лџкџкџйџ йџиџеџгџаџЮџЭ‡ЫЪЪЪЪЪЫЭЮабвдеSKу]Vфg`цpiчxrщ{ъˆƒыŽˆь“Žэ™”юœ˜я œяЂž№Є №ЇЃ№ЇЃ№žЈЄёџЉЅёџЉЅёџЈЄёџЇЃ№џЅЁ№џЃŸ№џ œяџœ—яџ˜“юџ“Žэџ‡ьџ†ыџ€zъџwqщџohчџg`цџ_XхџXPуџPHтџH?сџA9рџ;2пџ5,оџ1'нџ,"мџ'мџ$лџ!кџкџкџйџ йџ йџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ йџ йџ йџйџйџкџкџкџ кџ"лџ$лџ&лџ(мџ* мџ,"мџ-#мџ.$нџ/%нџ/%нџ/%нџ-#мџ,"мџ)мџ&лџ$лџ!кџкџйџ йџиџзџеџвџаžаЮЭЭЭЭЮЯабвдеежMEтWOуaZхjcчtmш|vщƒ~ы‹…ь‹э–‘ю›–юžšяЁ№Є №ЇЃ№ЈЄё(ЉІёЏЉІёџЉІёџЉІёџЉІёџЈЄёџЇЃ№џЄ №џЁ№џ™яџ™”юџ”эџ‰ьџˆƒыџ‚|ъџztщџslшџkdчџc\хџ[TфџTLуџMEтџF=сџ@7пџ:1пџ4+оџ0&нџ,"мџ'мџ$лџ!кџкџкџйџйџ йџ йџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ иџ йџ йџ йџйџйџкџкџкџ!кџ$лџ&лџ'мџ)мџ,"мџ-#мџ/%нџ1'нџ2(нџ2(нџ2(нџ2(нџ1'нџ/%нџ-#мџ+!мџ(мџ%лџ"лџкџкџйџ йџиџжџеЏг(вааааабвгеежзззH?сPHтZSфd]хmfчvpщyъ†ыŽˆь“Žэ™”юœ˜я œяЄ №ІЂ№ЈЄёЉІё6ЉІёКЊІёџЋЇёџЊІёџЉІёџЉІёџЈЄёџЅЁ№џЂž№џžšяџœ—яџ–‘юџ‹эџ‹…ьџ„ыџ}wъџvpщџohчџh`цџ`YхџYQфџRJуџLCсџE<рџ@7пџ:1пџ4+оџ1'нџ,"мџ(мџ%лџ"лџкџкџкџйџйџ йџ йџ иџ иџ иџиџиџиџиџиџиџиџиџиџиџиџиџ иџ иџ иџ йџ йџ йџйџйџкџкџкџ!кџ#лџ%лџ&лџ)мџ+!мџ-#мџ/%нџ2(нџ3)нџ4+оџ5,оџ5,оџ6-оџ5,оџ4+оџ3*оџ2(нџ/%нџ,"мџ)мџ&лџ#лџ кџкџйџ йџ иџиКз6еедггддеежззииииB:рKBсTLу^Wхg`цqjшysщ‚|ъ‰ƒьŠэ–‘ю›–юžšяЂž№ЅЁ№ЇЃ№ЉІёЊІё>ЋЇёРЌЈёџЌЈёџЌЈёџЋЇёџЊІёџЉЅёџЇЃ№џЄ №џЁ№џœ˜яџ˜“юџ“ŽэџŽˆьџ‡‚ыџ{ъџztщџtmшџleчџf_цџ^WхџYQфџQIтџLCсџE<рџ@8рџ;2пџ7.оџ2(нџ/%нџ* мџ'мџ$лџ"лџкџкџкџйџйџ йџ йџ йџ йџ йџ иџ иџ иџ иџ иџ иџ йџ йџ йџ йџ йџйџйџкџкџкџкџ!кџ#лџ%лџ&лџ)мџ,"мџ.$нџ0&нџ2(нџ4+оџ5,оџ7.оџ8/оџ90оџ:1пџ:1пџ:1пџ8/оџ7.оџ5,оџ3)нџ1'нџ-#мџ* мџ'мџ$лџ!кџкџкџйџ йР и>ииззжжзззииии и и ии<3пE<рMEтWOуaZхibцtmш|vщ„ы‹…ь‘Œэ—’юœ—я œяЄ №ЇЃ№ЉЅёЊІёЌЈёAЌЈёР­Љђџ­Љђџ­ЉђџЌЈёџЋЇёџЉІёџЈЄёџЅЁ№џЂž№џžšяџš•юџ–‘юџ‹эџ‹…ьџ„ыџyъџwqщџrkшџkdчџe^цџ^WхџYQфџSKуџMEтџH?сџB:рџ>5пџ:1пџ5,оџ2(нџ/%нџ+!мџ(мџ&лџ$лџ!кџ кџкџкџкџкџйџйџйџйџйџйџйџйџкџкџкџкџкџ кџ!кџ$лџ%лџ&лџ)мџ* мџ,"мџ/%нџ1'нџ3)нџ4+оџ7.оџ90оџ:1пџ<3пџ=4пџ=4пџ>5пџ>5пџ=4пџ=4пџ;2пџ90оџ7.оџ4+оџ2(нџ/%нџ,"мџ(мџ&лџ#лџ кџкџкРйA й й и иииии и и и й й й й и и и6-о?6пG>сPHтZRфc\хleчuoш~xъ†ыŽˆь“Žэ™”ю™яЁ№ЅЁ№ЈЄёЉІёЋЇёЌЈё>ЎЊђКЎЊђџЏЋђџЎЊђџ­ЉђџЌЈёџЋЇёџЉІёџЇЃ№џЄ №џ œяџœ—яџ˜“юџ“ŽэџŽˆьџˆƒыџ‚}ыџ}wъџwqщџqjшџkdчџe^цџ_XхџZRфџUMуџPHтџKBсџF=сџB:рџ?6пџ:1пџ7.оџ4+оџ2(нџ/%нџ,"мџ* мџ(мџ&лџ&лџ$лџ$лџ#лџ"лџ"лџ"лџ"лџ#лџ#лџ$лџ$лџ&лџ&лџ'мџ)мџ* мџ,"мџ.$нџ0&нџ2(нџ3*оџ5,оџ7.оџ90оџ;2пџ=4пџ>5пџ@7пџ@8рџA9рџB:рџB:рџB:рџA9рџ@7пџ?6пџ=4пџ;2пџ8/оџ5,оџ3)нџ0&нџ-#мџ)мџ&лџ$лџ"лџкКк>кййй й й й й й й й й й й й й й и и2(н90о@8рJAсSKу[Tфf_цohчwqщ€zъˆƒы‰ь•ю›–юžšяЃŸ№ІЂ№ЉЅёЊІёЌЈёЎЊђ6ЏЋђЏЏЋђџЏЋђџЏЋђџЏЋђџ­ЉђџЌЈёџЉІёџЈЄёџЅЁ№џЂž№џžšяџ›–юџ–‘юџ‹эџŒ†ьџ‡‚ыџ‚|ъџ|vщџvpщџrkшџleчџg`цџaZхџ\UфџYQфџSKуџOGтџLCсџH?сџD<рџA9рџ>5пџ<3пџ90оџ7.оџ4+оџ3*оџ2(нџ1'нџ/%нџ/%нџ.$нџ-#мџ-#мџ-#мџ.$нџ.$нџ/%нџ/%нџ0&нџ2(нџ2(нџ3*оџ4+оџ6-оџ7.оџ90оџ;2пџ=4пџ>5пџ@7пџA9рџB:рџC;рџE<рџE<рџF=сџF=сџF=сџF=сџE<рџD<рџB:рџ@8рџ?6пџ=4пџ:1пџ7.оџ4+оџ2(нџ.$нџ+!мџ)мџ&лџ$лЏ"л6 кккккйййййййййй й й й й и,"м3*о:1пB:рLCсUMу^Wхh`цqjшztщ‚}ыŠ„ь‹э–‘юœ—я œяЄ №ЇЃ№ЉІёЌЈё­ЉђЏЋђ(ЏЋђžАЌђџАЌђџАЌђџЏЋђџЏЋђџ­ЉђџЋЇёџЉІёџЇЃ№џЄ №џ œяџœ˜яџ™”юџ”эџ‹эџ‹…ьџ†ыџ‚|ъџ|vщџwqщџrkшџngчџibцџe^цџaZхџ\UфџYQфџUMуџQIтџNFтџLCсџI@сџF=сџD<рџB:рџ@7пџ?6пџ=4пџ<3пџ;2пџ:1пџ:1пџ:1пџ:1пџ:1пџ:1пџ:1пџ:1пџ;2пџ=4пџ=4пџ>5пџ@7пџ@7пџA9рџB:рџD<рџE<рџF=сџH?сџH?сџI@сџKBсџKBсџKBсџKBсџKBсџKBсџI@сџH?сџG>сџE<рџB:рџ@7пџ>5пџ;2пџ8/оџ5,оџ3)нџ0&нџ-#мџ* мџ(мž&л($л#л!к ккккккккккйййй й й й и(м/%н4+о=4пE<рMEтVNу`Yхibцrkш{uщƒ~ы‹…ь‘Œэ—’юœ˜яЁ№Є №ЈЄёЊІёЌЈёЎЊђЏЋђАЌђ‡Б­ђњБ­ђџБ­ђџАЌђџЏЋђџЎЊђџЌЈёџЊІёџЉЅёџІЂ№џЂž№џžšяџœ—яџ˜“юџ“Žэџ‰ьџ‹…ьџ†ыџ‚|ъџ}wъџxrщџunшџpiчџleчџhaцџe^цџaZхџ^Wхџ[TфџYQфџVNуџSKуџPHтџNFтџMDтџKBсџJAсџH?сџH?сџG>сџF=сџE<рџE<рџE<рџE<рџE<рџE<рџF=сџG>сџH?сџH?сџI@сџJAсџKBсџKBсџMDтџMEтџMEтџNFтџOGтџOGтџPHтџPHтџOGтџOGтџNFтџMEтџLCсџKBсџH?сџF=сџD<рџA9рџ@7пџ=4пџ:1пџ7.оџ4+оџ2(нџ/%нњ,"м‡* м(м&л&л$л#л"л!к!к кккккккййй й й й и$л)м0&н6-о>5пF=сNFтXPуaZхjcчtmш}wъ„ыŒ†ь’э™”ю™яЁ№ЅЁ№ЉЅёЋЇё­ЉђЏЋђАЌђБ­ђkВЎђкВЎђџВЎђџБ­ђџАЌђџЏЋђџ­ЉђџЌЈёџЉІёџЇЃ№џЄ №џЁ№џžšяџ›–юџ–‘юџ“Žэџ‰ьџ‹…ьџ†ыџ‚}ыџyъџztщџwqщџtmшџpiчџleчџibцџg`цџd]хџaZхџ^Wхџ\UфџZSфџYQфџWOуџVNуџTLуџSKуџRJуџQIтџPHтџPHтџPHтџPHтџPHтџPHтџPHтџPHтџPHтџQIтџQIтџRJуџSKуџSKуџSKуџTLуџTLуџUMуџUMуџUMуџTLуџTLуџSKуџSKуџQIтџPHтџNFтџMDтџKBсџH?сџE<рџB:рџ@7пџ=4пџ:1пџ8/оџ5,оџ3)нк1'нk/%н,"м+!м)м'м&л&л%л$л#л"л!к!ккккккйй й й и и!к&л+!м1'н7.о@7пH?сPHтYQфb[хleчunш}wъ…€ы‡ь“Žэ™”ю™яЂž№ІЂ№ЉЅёЋЇё­ЉђЏЋђАЌђВЎђIВЎђЕВЎђџВЎђџВЎђџБ­ђџАЌђџЏЋђџЌЈёџЋЇёџЉЅёџЇЃ№џЄ №џ œяџ™яџš•юџ–‘юџ“Žэџ‰ьџ‹…ьџˆƒыџ„ыџ{ъџ}wъџztщџwqщџtmшџqjшџngчџleчџibцџg`цџe^цџd]хџaZхџ`Yхџ^Wхџ^Wхџ\Uфџ[Tфџ[TфџZSфџZRфџZRфџYQфџYQфџYQфџYQфџYQфџYQфџZRфџZRфџZRфџZRфџZSфџZSфџZSфџZRфџZRфџYQфџYQфџXPуџWOуџVNуџTLуџRJуџPHтџMEтџLCсџJAсџG>сџD<рџA9рџ?6пџ=4пџ:1пџ7.оЕ4+оI3)н1'н/%н-#м,"м* м)м'м&л&л%л$л#л!к ккккййй й й и ик"л&л,"м2(н90о@8рH?сQIтZRфd]хleчunш}wъ…€ы‡ь“Žэ™”юžšяЂž№ІЂ№ЉІёЋЇёЎЊђЏЋђБ­ђВЎђ!ВЎђŠГЏђђВЎђџВЎђџВЎђџБ­ђџЏЋђџЎЊђџЌЈёџЉІёџЈЄёџІЂ№џЃŸ№џ œяџœ˜яџš•юџ–‘юџ“ŽэџŠэџ‡ьџ‰ƒьџ†ыџ‚}ыџ€zъџ}wъџztщџwqщџuoшџslшџqjшџohчџmfчџkdчџibцџhaцџg`цџg`цџe^цџd]хџd]хџc\хџb[хџb[хџaZхџaZхџaZхџaZхџaZхџaZхџaZхџ`Yхџ`Yхџ`Yхџ_Xхџ_Xхџ^Wхџ^Wхџ]Vфџ[Tфџ[TфџZRфџXPуџVNуџTLуџRJуџOGтџMEтџKBсџH?сџE<рџB:рџ@7пџ>5пђ;2пŠ90о!7.о4+о3)н2(н/%н.$н,"м+!м* м)м'м&л%л$л"л!ккккйй й й й и икк#л&л,"м3)н:1пA9рI@сQIтZSфd]хleчuoш~xъ…€ы‡ь“Žэ™”ю™яЂž№ІЂ№ЉІёЋЇёЎЊђЏЋђБ­ђВЎђВЎђYГЏђОГЏђџГЏђџВЎђџВЎђџАЌђџЏЋђџ­ЉђџЋЇёџЉІёџЇЃ№џЅЁ№џЂž№џŸ›яџœ˜яџš•юџ—’юџ“Žэџ‹эџŽˆьџ‹…ьџˆƒыџ…€ыџ‚}ыџ€zъџ~xъџ|vщџztщџwqщџuoшџunшџslшџrkшџpiчџohчџmfчџleчџleчџjcчџibцџibцџibцџhaцџh`цџh`цџg`цџg`цџg`цџf_цџf_цџe^цџd]хџd]хџb[хџaZхџ`Yхџ^Wхџ]Vфџ[TфџZRфџXPуџVNуџSKуџPHтџNFтџLCсџJAсџG>сџD<рџB:рО@7пY=4п;2п90о7.о4+о3*о2(н0&н/%н-#м,"м* м)м'м&л$л"л!ккккйй й й и иийкк$л'м-#м3*о:1пA9рJAсRJу[Tфd]хleчunш}wъ…€ыŒ†ь’э™”ю™яЁ№ІЂ№ЉЅёЋЇё­ЉђЏЋђБ­ђВЎђГЏђ#ГЏђ„ГЏђхГЏђџВЎђџВЎђџБ­ђџЏЋђџЎЊђџЌЈёџЊІёџЉІёџЇЃ№џЄ №џЂž№џŸ›яџœ˜яџš•юџ—’юџ•юџ’эџŠэџ‡ьџ‹…ьџˆƒыџ…€ыџƒ~ыџ‚|ъџ€zъџ~xъџ|vщџztщџysщџwqщџvpщџunшџtmшџslшџrkшџqjшџpiчџohчџohчџngчџmfчџleчџleчџkdчџjcчџibцџibцџh`цџg`цџf_цџd]хџc\хџaZхџ_Xхџ^Wхџ[TфџYQфџWOуџUMуџRJуџPHтџMEтџKBсџH?схE<р„C;р#A9р?6п=4п:1п90о7.о5,о3*о2(н1'н/%н-#м+!м)м'м&л$л"л кккйй й й й и ии ййкк$л(м.$н4+о:1пB:рJAсRJуZSфd]хleчunш}wъ„ы‹…ь‘Œэ˜“юœ˜яЁ№ЅЁ№ЈЄёЊІё­ЉђЏЋђАЌђВЎђВЎђГЏђEГЏђЂГЏђўГЏђџВЎђџВЎђџАЌђџЏЋђџЎЊђџЌЈёџЊІёџЉЅёџЇЃ№џЄ №џЁ№џŸ›яџ™яџ›–юџ™”юџ–‘юџ“Žэџ‹эџ‰ьџ‡ьџ‹…ьџˆƒыџ†ыџ…€ыџ‚}ыџ‚|ъџ€zъџ~xъџ}wъџ|vщџztщџysщџxrщџwqщџvpщџuoшџunшџtmшџslшџrkшџqjшџpiчџohчџngчџleчџkdчџibцџhaцџg`цџe^цџd]хџaZхџ_Xхџ]Vфџ[TфџYQфџVNуџSKуџQIтџNFтўLCсЂJAсEG>сE<рB:р@8р?6п=4п:1п90о7.о4+о3*о2(н0&н.$н,"м)м'м&л$л!ккккйй й й и иии й ййк к$л)м.$н4+о:1пB:рJAсRJуZSфc\хkdчtmш|vщƒ~ы‹…ь‹э–‘юœ—я œяЄ №ЇЃ№ЉІёЌЈёЎЊђАЌђБ­ђВЎђГЏђГЏђXГЏђБГЏђџВЎђџВЎђџБ­ђџЏЋђџЏЋђџ­ЉђџЋЇёџЉІёџЈЄёџІЂ№џЄ №џЁ№џŸ›яџ™яџœ—яџ™”юџ—’юџ”эџ’эџ‹эџ‰ьџ‡ьџ‹…ьџ‰ƒьџˆƒыџ…€ыџ„ыџ‚}ыџ‚|ъџ€zъџyъџ~xъџ}wъџ{uщџztщџysщџxrщџwqщџuoшџunшџtmшџrkшџqjшџohчџngчџleчџjcчџibцџg`цџe^цџc\хџaZхџ^Wхџ[TфџZRфџWOуџUMуџRJуБPHтXMEтKBсI@сF=сD<рB:р@7п>5п<3п:1п8/о6-о4+о2(н0&н.$н,"м)м&л%л#л кккйй й й й ииии и й ййк к$л)м.$н4+о:1пA9рI@сQIтZRфb[хjcчslшztщ‚|ъˆƒы‰ь•юš•юžšяЂž№ІЂ№ЉЅёЋЇё­ЉђЏЋђАЌђВЎђВЎђВЎђ ГЏђ^ВЎђБВЎђџВЎђџБ­ђџАЌђџЏЋђџЎЊђџЌЈёџЊІёџЉІёџЈЄёџІЂ№џЄ №џЁ№џ œяџžšяџœ—яџš•юџ˜“юџ–‘юџ“Žэџ’эџ‹эџ‰ьџ‡ьџ‹…ьџŠ„ьџˆƒыџ†ыџ…€ыџƒ~ыџ‚}ыџ‚|ъџ€zъџyъџ}wъџ|vщџ{uщџztщџxrщџwqщџuoшџtmшџrkшџqjшџohчџleчџjcчџhaцџg`цџd]хџb[хџ`Yхџ]Vфџ[TфџYQфБVNу^SKу QIтNFтMDтKBсH?сE<рC;рA9р@7п=4п;2п90о6-о4+о2(н/%н-#м+!м(м&л$л!ккккй й й й и иииии и й ййк к$л)м.$н3*о:1п@8рH?сPHтYQфaZхibцqjшxrщ€zъ‡‚ыŽˆь“Žэ˜“юœ˜яЁ№Є №ЇЃ№ЉІёЌЈёЎЊђЏЋђАЌђВЎђВЎђВЎђВЎђTВЎђЃВЎђ№Б­ђџАЌђџЏЋђџЎЊђџ­ЉђџЌЈёџЊІёџЉЅёџЇЃ№џІЂ№џЄ №џЁ№џ œяџžšяџœ—яџ›–юџ™”юџ–‘юџ•юџ“Žэџ‘Œэџ‹эџŽˆьџ‡ьџ‹…ьџŠ„ьџˆƒыџ†ыџ…€ыџƒ~ыџ‚}ыџ{ъџ€zъџ~xъџ}wъџ{uщџztщџwqщџvpщџunшџrkшџqjшџohчџleчџjcчџh`цџf_цџd]хџaZх№^WхЃ[TфTZRфWOуUMуRJуPHтMEтKBсI@сG>сD<рB:р@7п=4п;2п90о6-о4+о2(н/%н,"м)м&л$л"л кккйй й й и иииииии и й ййк к$л(м.$н3*о:1п@7пH?сOGтWOу^Wхg`цohчvpщ~xъ„ы‹…ь‹э–‘ю›–юžšяЂž№ІЂ№ЈЄёЊІёЌЈёЎЊђЏЋђАЌђБ­ђБ­ђВЎђВЎђ<Б­ђ…Б­ђЬАЌђџЏЋђџЎЊђџ­ЉђџЌЈёџЊІёџЉІёџЈЄёџЇЃ№џЅЁ№џЃŸ№џЁ№џŸ›яџžšяџœ—яџ›–юџ™”юџ—’юџ–‘юџ“Žэџ’эџ‹эџ‰ьџŽˆьџŒ†ьџ‹…ьџˆƒыџ‡‚ыџ…€ыџ„ыџ‚}ыџ{ъџ€zъџ}wъџ|vщџztщџwqщџvpщџunшџrkшџpiчџngчџkdчџibцџg`цЬd]х…b[х<_Xх]VфZSфYQфVNуSKуPHтNFтLCсJAсG>сE<рB:р@7п=4п;2п8/о5,о3)н0&н-#м* м'м&л#л!кккйй й й и иииииииии и й ййк к$л(м-#м3)н8/о@7пF=сMEтUMу]Vфe^цleчunш{uщ‚|ъˆƒыŽˆь“Žэ˜“юœ—яŸ›яЃŸ№ІЂ№ЉЅёЊІёЌЈё­ЉђЏЋђЏЋђЏЋђАЌђАЌђАЌђЏЋђVЏЋђ˜ЏЋђиЎЊђџ­ЉђџЌЈёџЋЇёџЉІёџЉЅёџЇЃ№џІЂ№џЄ №џЃŸ№џЁ№џŸ›яџžšяџœ—яџ›–юџ™”юџ—’юџ–‘юџ“Žэџ’эџ‹эџ‰ьџŽˆьџŒ†ьџŠ„ьџˆƒыџ†ыџ…€ыџ‚}ыџ‚|ъџ€zъџ}wъџ|vщџztщџwqщџuoшџtmшџqjшџohчиleч˜ibцVh`цf_цc\х`Yх^Wх[TфYQфVNуSKуQIтNFтMDтJAсG>сE<рB:р@7п=4п:1п7.о4+о2(н/%н+!м(м&л$л!кккйй й й й иииииииииии и й ййкк$л'м,"м2(н7.о>5пD<рLCсSKуZSфb[хibцqjшwqщyъ…€ы‹…ь‹э•ю™”юœ˜я œяЃŸ№ІЂ№ЈЄёЉІёЋЇёЌЈё­ЉђЎЊђЎЊђЏЋђЏЋђЏЋђЎЊђЎЊђR­Љђ‹ЌЈёУЌЈёљЊІёџЉІёџЉЅёџЇЃ№џІЂ№џЄ №џЃŸ№џЁ№џ œяџžšяџ™яџœ—яџš•юџ™”юџ–‘юџ•юџ“Žэџ‘ŒэџŠэџŽˆьџŒ†ьџ‹…ьџˆƒыџ‡‚ыџ…€ыџ‚}ыџ{ъџyъџ}wъџztщџxrщљvpщУunш‹rkшRohчmfчjcчhaцf_цd]хaZх^Wх[TфYQфVNуSKуQIтNFтLCсI@сF=сC;р@8р>5п;2п8/о4+о2(н/%н,"м)м&л$л!ккккй й й й иииииииииииии и й ййкк#л&л+!м0&н5,о<3пB:рJAсPHтXPу_Xхg`цngчunш{uщ‚|ъ‡‚ы‡ь‹э–‘ю™”юœ˜я œяЃŸ№ЅЁ№ЇЃ№ЉЅёЉІёЊІёЋЇёЌЈёЌЈёЌЈёЌЈёЌЈёЌЈёЌЈёЋЇё-ЊІё]ЉІёŒЉЅёИЈЄётЇЃ№џІЂ№џЄ №џЃŸ№џЁ№џ œяџžšяџ™яџœ—яџš•юџ™”юџ–‘юџ•юџ“Žэџ‘ŒэџŠэџŽˆьџŒ†ьџŠ„ьџˆƒыџ†ыџ„ыџ‚}ыт€zъИ~xъŒ|vщ]ysщ-wqщunшrkшpiчmfчkdчhaцf_цc\хaZх^Wх[TфYQфVNуSKуPHтMEтKBсH?сE<рB:р@7п<3п90о5,о3)н0&н,"м)м&л$л!ккккй й й й иииииииииииииии и й ййкк"л&л)м/%н4+о:1п@7пG>сMEтUMу[Tфd]хjcчqjшwqщ}wъ‚}ыˆƒыŽˆь‘Œэ–‘ю™”юœ—яžšяЁ№Є №ЅЁ№ЇЃ№ЈЄёЉЅёЉІёЉІёЉІёЉІёЉІёЉІёЉІёЉІёЉЅёЈЄёЇЃ№ ЇЃ№/ЅЁ№QЄ №pЃŸ№Ё№І œяНžšяб™ясœ—яю›–юј™”юў—’юў–‘юј”эю’эс‹эб‰ьН‡ьІ‹…ьˆƒыp†ыQ„ы/‚}ы €zъ~xъ|vщysщwqщunшrkшohчleчjcчh`цe^цb[х_Xх]VфZSфXPуUMуRJуNFтLCсI@сF=сB:р@7п=4п:1п6-о3*о0&н,"м)м&л$л!ккккй й й й и иииииииииџџџџџџџџџџџџџџџџџџџџРџџџџџџџџџџџќ?џџџџџџџџџџрџџџџџџџџџџџџџџџџџџџќ?џџџџџџџџ№џџџџџџџџРџџџџџџџџџџџџџџџќ?џџџџџџјџџџџџџрџџџџџџРџџџџџџ€џџџџџўџџџџќ?џџџџјџџџџ№џџџџрџџџџРџџџџ€џџџџџџџўџџќ?џџќ?џџјџџ№џџрџџрџџРџџ€џџ€џџџџџўўќ?ќ?јј№№№рррРРРР€€€€€€€€€€€€РРРРррр№№№јјќ?ќ?ўўџџџџџ€џџ€џџРџџрџџрџџ№џџјџџќ?џџќ?џџўџџџџџџџ€џџџџРџџџџрџџџџ№џџџџјџџџџќ?џџџџўџџџџџ€џџџџџџРџџџџџџрџџџџџџјџџџџџџќ?џџџџџџџџџџџџџџџРџџџџџџџџ№џџџџџџџџќ?џџџџџџџџџџџџџџџџџџџрџџџџџџџџџџќ?џџџџџџџџџџџРџџџџџџџџџџџџџџџџџџџџPrintrun-printrun-2.0.0rc5/pronterface.png000066400000000000000000000215471325617007000206530ustar00rootroot00000000000000‰PNG  IHDR€€У>aЫsBIT|dˆ pHYsзˆ^RГ IDATxœэ}{еyчям{GТ†ШЂ"#‘хR€ЈтM,Ъak0bkЫ^cАLЊЏS1и‰m-‰‰0.#‘р v вЦŽ =(фŒ’иёJ‹Аv§&Abeƒ1 ЭhюЋћœoџ8ЏяœюОЗя<4/}5]}ЛЇoпюў§ОЧљЮwN ЬpмєШ’Д”@K„”ЇXDŠб|H9J„6)Y‡Ђa„Т›PъuRъЕS?џщл&ћ&RФd_РxЩрcп\/чƒш<-4ИzMС6ьg)2лf!Eў3ё§ђRѕ"ѕЃ%_њ‹л'ћžЧCІ-†ўі‰{сR—Rsв є1ORвŸKЪRRЖ‰дRјСвЏмѓщЩ~&Ѓ‘iE€#ї? €ЫA8DX"€T1јlF А”ь8ђпхšoˆBO„€ Pц)_„”Л–>xџ-“§ЌЪЪ”'Р‘'Жо% Ўшb8РЩƒЃембk}|LО>ž8)фѓJЪяќњЃ}~ВŸa'™ВкМ§QМD'qр№‰B­R9`q„ж"аxwю˜Быˆмˆ”Ц=(€ ez„Є|ђзПљш‡'ћ™цЩ”#РPџіmЎ€ №@Ћѕ\ы8№мФкЮIК5ѕ<~ "Јhл‚Я­ ПЅ@ЉкОlы7ЎЬчЫ”!РPџіmтќиƒUYриўЁŸƒЎ^k5Р№€sЂх‘o\мР>ѓk”2И>ЄrћВoїO "L:†њŸ|„@7!„Ÿ˜mЋi x’бƒŽЃu%ѓƒ9Їё”!€0QАПР5pЋС-‚ЕLькIJ‚”_;§йЇnœЬч?i8ВхЩu ЌЇeД>2ї$Й5БhŸнЃ•y~>d{M9лфШJаMЌEpЎ@ЊЌе2зKRОŠTnZўНgжk €I"Р‘ўэ;…ярlu› *OЛ №”ІсЖ= Bєа™ЙЯ4Э58`эЕЙЭhПYS|§м Xз”qбНщknљ?=ЗjЂžy‘S mоіeˆЪ--p;3Z/§CГ,MѕKгьЖbлаf7  вrA5НHb’АЕož"?љѕ*Kd5 )XёТї>3ЯЛŒ3 ѕo{ WЙмф‘zЄсЉtРS’† ГџЙc-cС kОY€ˆk?зі"№EєИјfєнLЌРяЭК%fЙBk—ю8уџьЙzlOМœ ѕoћ ЮњTg*™O7R*$ O<%‰вдХ™VBlіcпI јBˆі3п[… 6ˆЌ[|яNдKПёЯЯŸ5ц‡пэЖ&ђфGпr7*•ла ПMo-@š­W 4%I<%Љ&D’xИя№˜@†ЗГиѕPиdЖ-*џууьљљяАŒЂ&?Гќz­EHгD)ЙсЬ—ќйёЦЦнуDxшёў•5nїЙ<Ш“Lƒ9АэФOэЖП8rX№ѕg}Ž80дЭ>ж\Ьkђu|:ЈT2ŸEEАmЁ‰’s\F2ЭлиєGЎЗ ›Юќџќб1РQ|‹qв#пъп"„xА“™{—‘8cюлm xjРnЗЛЏнжкoжHЅўФ,nр1OнF€kПˆ5ИtГ•JДЭ,„Ј„ч„§Iгltqх ri”Њ­g§ђ_ЎoЌЦCпъР{!DNђ$вњФk1ЕPb7рSЋ­зn1.РЏc„4ˆ2Dџ№р#Ч8АЬк˜xQМ=иŽH!К KЦœќ†oэh—RPЉ|ць7_љ§ёФk\ 0ј'vU*т2ЛtзЦZo§ЛМЅзЭІ^ЗZ†-OG‚ЖџО‰ ‚8Рfоrzі‚ыЪ}""ДLГˆJеьеЊКZ IaЖђиsъ‹аы8_‘!€uжШнgМzљxa6nќЦуЛ„№рg>{&ИsZпniMo™uГЉ6DPŒHYаNмљœйЇœІ_œщs—з!№ѓlБA_Ž5Oˆj5ДеJ†Hќ7x`ъX†ШЎ•%ЙHЪнчŒќъђёРm\pфБП}ЂтЭОmGZЉBMnЗ@ЭЈе‚jкЯMПЯ#IŒkhG-щЕ#ЯдчЅu{z:,тШ`,жЯЩРн‚Б.NАч…ЂX@цКc1ž9Їљж˜нј 0јѕon@№‘OМ0“ŸбњІЛйдšоєрSГeƒ@šІ`ЌE чоC›?wŸер"28аЋaŒрP ]ПЎиX‚Чio)Ёˆ @[Яo Œ)0§њF!*kИ_ КDЅ НVлƒпh@5,шMcš FгcO’bрѓэМ}ЯЅWЭ%“ŒLЙГ‘›р.Ђ‘ьeZwРѓ.ыЩr$DP$EДщТіРЈ›ˆЃ&РР#_П[ёЇСN >Пл|Гр7[јFCk}ЃjДиb"~蘨јBm+шyRdŠЌB ИБ №$'A6ІPћY +CMОtqk`TЩЂбрсЧкBˆ0УфђЅђ[mPЫ€ЬСЏ7 аїѓf`*™†б}ЌёЧј<щdђмo1№X!Џ‰HфЕŸƒi R |§ЩяДцŒъ6FѓЅMќLˆЪ™ќЂc№іЖкP-oоUЃЁ PoxэwšпіYПTњФŽ”Ш”`M№БŒ•ˆЌРъ xhДŸШXВрыЂdТKџ6шЙя g <ј?Ÿ•JаЋдуE‰bО]ƒ^з. о€j6|аg}ОK gЕ>змO№Бt#B^Œр’E–6A”žGцпZ€€$§™(ЂяNŽєд‹XэхрУ_нјe!ФGь­iг—6oСЗС^ЃUЏkрGъ Fн“ЃEњ. кAыЇ №\ђb-#вŸHіћРHЭШѕ\’QюћэBіГgоX™wтУЊљLйK.шЕ(И?…[\nкuЙ*ŸŠхЭ< :ЄЎ­@ГСbєЅ6кзЏЋŸ›рљжЩ\8nA—ЙёјgЩ‹VCЋgЯnГ-*"C*ЈЇA)Ѕ pјoОКЄ€›{оэjЃuжЦЯ€пh:№US'`[ Љoъ&?SД1EСч’Ÿ№ќD7"АЎržЩd)6WЏ x№ЅоПрл} w–НдR.р­џі?жUDхFћЫЁbЩ™Є&x tД‚os§П—jz™ќ2EјnЗнvџ'ПQ…yммЫh­ВЎ`Х+ѓњОЁZ]‰PЪЅжXГTл§јmп‰гl™h_›ќ^РŸV&ПŒtВ@` ‹ Шe7уЮ+ћЩŒr№1@Ааš2—з•o§е§@бi<ЩфЉyџНб|еhш\~Уdі‚hП|—вrїг|+нbюˆ˜ЯЖzШ€юЗэY!NлЧo:uTKЗёsСov&K7kФ*,\‰OХж|ёn7tЛЄŽxыоЏl‘ˆЭ?IoMПядёО–ыкЕўЌпJф•Їu[Ї@Hg тБкТmО[ыxfEз8Ўй u]–ЉЏгуе;-л­лі>{L2ЫСЗШѕяyџЫ§?ђ`Œ %Ь@л)Дo~щоmоьћХеоёТŽ№Ље ЫЛЌХpU.9™НйО•KPИфYWФЭBТЦкл ­@' p ЉЌoтƒ2ˆ[€v›wDe])?vf)јVbK`їОXФююtЖ&г~2§$DЁШЕoЎЛчб +Ѕkб‚aX>ёcЛ{[оиmSЫ8ЏЗѓg#јVŠюН`QчMl x“Pј›клЭћ^ЎPJОЏb˜I6?ЭrўО2—•jЛ оVXЪmGюАмўlоЪ 0ех˜wбЈ.^„ЙfmEЂЕo?š/ьGrр †6oƒьzоАEІˆ• їх}'CЈ7ўќ‹wЁ">ЇЯШЬДl7Џ1ёЊe:|FLGOНюћZm]ъ$aачJГ1mpvѓ­ТџеwюЦЁЋVwќ~пŠхXtѓXp§Еш[БМчпкМ C§лpxѓVЄ€^ˆаhƒH@H HЭv нy$єХ?JF‚9‹В€д•Pa… ТЬŸ ўRоАхк~HdŠљПїЛ˜ћ[П (BћРAдПЛ rpаŸ†Kuё"œВю,КљІ1gсѕзbсѕзтэЗнŠ_Ќ§s ьмЭўЫbђZЗ $Ф•К@Љ‹љЩ‚њ>ќХEžЌtЫі Ю9їМуПп‡Огпœ^т№њЏр№њћЦє@Іƒ,Кљ&œВюŽРМUNXyўЭŽ-xm§}8ДўЏаfЎ!Юкў > €‹IОўЙ?{ hђeЪ’™џ—)‹Ь8>ућOИє,ћЛ-№ КhN]wN]wЧ8=’Щ—Й]йЗфў{Бфў{Ч|.KoПчэи‚ктEˆ=yœфFwWO|€ЖЄКмЅ yіMШрК,YЬьSšтдЛПаѕNО§VЬ_uйСд‘ф%їп;f“_FоЖђB\њгАpх…Йџчц_D ахќ˜Jлыg8žќIY2ШYƒ џуjєОЌд ,И~JL”5ЎrЌРЗR[Мчоџ—шc$Œ;Œ`ЦRˆГљї~љЧrOа ƒogщi и а–qЭ=џМвт4ВЩƒ]9љі[Л‚_пЙoЌН‡ЎZчНн-џВє7pшЊеxcэhюлпгЕ-\y!~gЧVa>РжФЎрŽъ‰їияz @ъваќgЧяuЖ„Эк4EэхДРЈšC“%ЩW:ўўЊЫpђmŸ,ќџрCухs/ЦЁЋVу№њћPЂx@ ЂОs7ЏПЏМk^>їb oюиШI+/ФYЗпъЖѓz - tЉ=Ю@в%Й ›yУvы’mкbP; У,”гл˜№%таUЋёњЧ?UЪŠ№яНњЁте}ВD~ѓЎ/`ёЪ Г§Ф“B„DрћOЅцЉ_о§ЫGъзМiЈƒC‰њю(}“БLgЩПЙo?^yзcКЯсЭлpшъеЅIpС]_РSУІnа "ЉРkџљжѕ<јs +Я–Q`IЃ`Qтшж'KпмШ "@,Э}ћёѓ€ы$­}ћK“`Щ—cщяЩ<&>U=a=`-€’чg:xШJР],ЭнgЛxлџzG6ці;’8ˆ#=мћг˜"{2нeЄЙo?^§PЙ1 g§сG2О_!"‚ ѓC’щyAЩ—k „cг‰ƒOЧЊыи}7яџѕ/:š=ыпЦѓM%y§НљћВ2Вs7J(ЭђыЏУТЫƒТ— p‹8p€–Йр!(U(ДQ5ЏРЁЋЏЧыŸјT@„цО§xcэxх]Wємд™.RпЙЛЇшНWљек;K)Юџс:_^AlЦ–Ж/€ѕЮЙ4Ѓн|ЊsЇ§Rf'aЖнНЌШc№С‡1јрЬ4ѓE28AnЭŒ„Ф‘ўm8ЙKОсŒыпКчоLJXBУ#ЭqЦdГСџЬЈ•ь1Н1ЮTIœPэ4оZџ•ЎЧКђ"ЬYМ(7АUУPљХnк76-˜&2їМVаeъкY™8V­šіƒhьћaзу~mхEQHК&ЧИ5еЙ**•K‰љ|тfп™vПжЅaй ž;ЮЫ3KЄu уšСўю–цзV^ш Cу^A –ж„RKВCMЂwщE>Ÿ]ІXѓЧQ:UсŒ‡”ЉфщEŽ…АГ”Б'­X‘;lЬЕH,Љ)™ž"ыŒ†*e^РФЗ•ђEшФќџ,Ебє+’њ н­ЭI+–‡…!ф“AЦ%œRC*ЁТcІœПкDkЙžМH7љQŽ›џc"Ж% TSpбЫѓ5КNP ZTŠфѕtšw7˜Н8ќ$ЩP—ГhХ зўчDАл)Ф‚I9?|ѓy“ЮfЖцšук?YRц‰‡р“г~ЮЏ))чTиш”ЬФЪМи жќМ‘=ЧI0хФЖљ…­ГN Rj&ёЁHŒЖŽŸтAёаf+уH‚7жо9nчЪ“2ƒ-І’№jŸВO™ћ~kRГ–дDšЖ!Фмр‡ˆ§OјИшпЯZ?О2JЧ{Šжн„gў8Єю$jз”Ru!07ѓM>мЙюћйqЧх˜ŠЕsWœоёИ}і9?‘$˜50B)PЏ ™CˆХ™qe%ЬяЧОŸpœЧXИљŸЗbyзc•јx№g3„У5’4ЈwSŽ2~™і??іИ3)SPћ‹}/№щb2Ÿ%hАFRО)ИGЩ™Й"г_8-Л§ўqBŒЛ„йzТ‰+ГЃ‘b9:0I~€ЈZжZ"ёf2}=ЈіЩTџјЋњэ;ШD—ЙѓpўEљЃИ2€gџєШb›Із+ђЕИв'3})7§вОsхЮщы”‡ирфЃЊ~ќьNчїMP4СЄx­rЦџїm|<™Йу}A‡kџз~.5в‰kО0oх…˜ЛbyЧяќ|п .њїšяA№=Jnгн€ЖцŸk?ъЌ€:nў;ШБыH МНФиУ>б”ŸБd^[f§~Žџ‹DxB(?~нк,= Hwpz‘8ћWYМ‹Ww'кѓOє;ЯЂ~G{^cвCАуџbKзZѓŸ—žЅРs9љітёckў—Ўћ33'@Бќьйч№Ы—8эOˆ7-™ш`Њ‚UЊ~" Ы„И%ъбфDFћЫЙљЋ.У<3~=9pѕЛgьx@[Sзн1.§qкїФUя.eў_xbГб|=OPЌ§њЄт'€- 'љ#RtЅ§… Х/9ТЊЁЬ[yN{lcІi$qxУЬž"цфлoErр•q+'шчyњc›КћжјћЏn |Пе~b €ЦœѕкЫЗE!6Pf>eЦ’rKЇїяЮ_uNџўЮмvquёЬ›"&OЦ:Qзўy+/РвПўЫRгЭ|ыc„Фh~тХŽлCЩэ@0<NШqГ<3˜8ˆŸ_=~MЪШЗ?іI|џС‡а™щb)гю…^ф[!HьВэGы;| ‘)уйТœaaНŒŽ™ISФXiюлз?ўЉ ЯuДёФ\ƒџѕрFДДIk{ 6њgГB$vёѓИ }ј–pAVёnE уљ€њЮрќeІN3јаУјљеЋ'lЄаСЭ[№Ш9П…—ОЛ-кЄ'nšЯ ТшŸЫ^J‚KfоЯЛЂY|RŽUˆ–ЦО§Ѕ 3yŠРO5ž•ЭѕёНо„Ї?x†б„ž%Мbр~zпѓёО јŽy…}+Е#ƒM*X2Фƒ­Йљек;;jїLŸ"ЦŠФсѕїсхs/Ц%gіШ“_mоŠўгGАуœ №вц-tф5 hB›ўt €ус;ёЎмо›œsв €8‰яЋ@@ЈЭЛш„БpŸЙ,Ољ&,МўZзЄiюлсўm|шсiW“_ІPІEУ_бЗbyІйи>p­Џ`dп1Мя‡xcч.@РŽ‚0 Т) 0lіЁrйП pdJ2Э“м7†HрI7ќpdB€" vH=ўLX’˜ѓ <є0zи#–йиwимЗпЭwѕђЪн:АгZm?kSп B@“Дж7Ё‹гНхЮп—ћЮ ЫкG>ЬK‡xLрZ ѓf >ђ„‚2dїлШFЃШйžMƒЏ рчёГi\ыу-јM2$€_З.PЯ5§іPњсМы(|mœ$кюz”Ђ%C hwr"фнhоƒ˜M’>S8ђЏih?паœh˜XРО.&/ъ"к^t-…xorфZe>пА9Nнщ` yѓƒOFРo~6“ ˆFю’ппkzн€>BpРКˆBг`/Ѕ…._+‰ЖѓіПmІ6у„а"$Œ! ђ­Aоƒ™Щ’wџ|АFjLЙNш0Ÿo4ОnHPЁД >ю7;h?а…W'CзІЙ„7cЗ`JтЉYE‚Nр[…IјmЄM~аљ}ш)“4жO—jыgІSИ„рšvuŽа’ЮќYэЗ~ПЈНDxn%kЫ\k)РЩ№* Ar‹ю’є+K„6:[ƒ™фb“o‰ЭЩžРGћЁЯїAоА}Vѓ{оKЩЊВз\šцFШИxгo-@BpQЊюŸfџCжx"„JгеФўоŽЭГжв>‹&гќ\№™ (ЊюЩљё:§;–žpsrє3ДУЇˆН™чп„Я`Е Bkр*W˜5Аю%v 1№S•œДмф[Ђ'L)№ЩЃFг9јіs/рaЧ^J>гЫ5їDИ%9zuJъ%^q№Dh1З`§ЗўmзХn!(и7™kНœEДE<ЙS'нО? Т†ьšМh˜gе|аK{)ЙКзkю™№‰tф, $МhФ.жм{ЭЗ№}и№™.gŒ5АGпT ‰чџІ Иѓ&п? рщіќQІљpG~™ЖО‘dЏJЯЭ5чv— кˆ?UС>п}\P3рU!аgJєч>HHjЊ дHзPAwГe,БплLL7s‚ёЌЯщ[7щО™W\Д_ІЂЗрт6ŒіОFM€л’‘Я~ЙvтЌМЯlI…pDHд t—@ЭЁ§Й x4qЊТЊŠlнEП „l,dшеЊДagс№§$.6н\6ЯnСЏЗP"ХыЏ‘hг^J?лѓЭ5р3щШGПX;qБо›a B„*ДІW…Ѓf‰P0‹Pƒ_ЄБUВр HTЁ Ђ‡%hxcЋŒž yМ,xMžkцБ‚Э&lœрZo]cЇ~§рКˆЖюЅДмЛф dL€ЯЅ#знY›џ4AМ7ОhЋЅЄакžшћlˆP3Ё BД;ЈŽ 2А ІJЩј2Еn–Ё“PЮКЬwы€KЗAh“њš€ыЮЕ)ош А™уяЛƒgіRz]Щ[*”qs—wTчя"ЫxыЋАБ7я}АZЏю3ыšАБƒжњЊ§лЎ@ bШP…'%D/&q4|z=еš7гМџ> RЛFЋ № €uчњв.^аaП‹ьоЃ’Ы{М­\зxщѓељЛЄ!5Щ(ЏеzЉ СЬПН‘ЇТeзœ– <&)Кё8Ч т5љDЯYQ–рqM^[Л>r…ƘЃTАЇeмР& `ў“к OKˆїj3: ˆюЙV[№­UРсї<DPЉl-‚НA[е\$>з@юГdk?ЫЖяђN(ьхНyМщз4~п–rёЄXЇbŽЬ5žйKЩя—8ДДLHaюзцoш§ёЭqmД›q цsЭД М -€#€А`{їР­0ПЬЩkПЗXсл5|RЧДя]ТŠX…ІппtZЮтFЋѕ@Y№iыxјќX&Ќ2ћжъ ЅРЂ,УЏљ&“СZ‚Њрр{7т­‰`.F‹u•шVГAЁзz˜—+хUьDІŸlFгЏyњлиё=ЄсDMхФ4ѕЦэЩ„–ц6ш§IDATМzТн ИM}VЛТїэљ*єШѓМƒ]3лUСОЧŽу.&жњМФQот+t}™Ж-еЖšЯ+ кd^иЁїёc{š3іP2ъv~79&c3ўА:яgœЩ;xј№€ЭY‚ыPъQKaœіПN’ њ7ЇОеX>пžŸ™tыгmЮ?ž›'яо; ^mzЗ9fƒsжTц=ЅЎ*в\мbА„Ш јИрCдђ.іїуbоwяЧиьЅњ-РО(ЦЇ}­Л є<рzѕzюигбY7Tч~YAма‚<"„AbhЮУёˆžм… ‡ќм\т$‹ xЅx˜|NHй§Оф-ќ2BР0єкЅ;™”сyЈЬйЉ„x'Aм‘“з–ЏВфN5їlЧчBрю—УбЮ\ћyћ?e ѓЩуЙНі#сЙ^*yЦK&…p}uю:­QЇйl›m1X€™ДдЗсy;ŸoлЬ_^рЧ%Oѓ9ј.€i2Б@ јhДн_Н*Hl*[У7о2iАrMuЮ#Šp"v y™DРx:№ГћТf^јіœёoГrqсj\ЎЦЯ9 !"њZ™вэ‰”I'€•?}лЄзФ>9OЌE(вєNрЧkў[qS%Џ>qДBDлЛи9V2e`х бЗM \“Bžeј:IО(ў?06Рн9І№VІЌМ[д•BМ€“ŠЋN. import os import sys import getopt try: import wx # NOQA if wx.VERSION < (4,): raise ImportError() except: print("wxPython >= 4 is not installed. This program requires wxPython >=4 to run.") raise from printrun.pronterface import PronterApp if __name__ == '__main__': from printrun.printcore import __version__ as printcore_version os.environ['GDK_BACKEND'] = 'x11' usage = "Usage:\n"+\ " pronterface [OPTIONS] [FILE]\n\n"+\ "Options:\n"+\ " -h, --help\t\t\tPrint this help message and exit\n"+\ " -V, --version\t\t\tPrint program's version number and exit\n"+\ " -v, --verbose\t\t\tIncrease verbosity\n"+\ " -a, --autoconnect\t\tAutomatically try to connect to printer on startup\n"+\ " -c, --conf, --config=CONFIG_FILE\tLoad this file on startup instead of .pronsolerc; you may chain config files, if so settings auto-save will use the last specified file\n"+\ " -e, --execute=COMMAND\t\tExecutes command after configuration/.pronsolerc is loaded; macros/settings from these commands are not autosaved" try: opts, args = getopt.getopt(sys.argv[1:], "hVvac:e:", ["help", "version", "verbose", "autoconnect", "conf=", "config=", "execute="]) except getopt.GetoptError as err: print(str(err)) print(usage) sys.exit(2) for o, a in opts: if o in ('-V','--version'): print("printrun "+printcore_version) sys.exit(0) elif o in ('-h', '--help'): print(usage) sys.exit(0) app = PronterApp(False) try: app.MainLoop() except KeyboardInterrupt: pass del app Printrun-printrun-2.0.0rc5/release_windows.bat000066400000000000000000000002531325617007000215060ustar00rootroot00000000000000d:\python27\python.exe setup_win.py py2exe -v xcopy images dist\images\ /Y /E xcopy locale dist\locale\ /Y /E xcopy Slic3r dist\Slic3r\ /Y /E copy MSVCP90.DLL dist\ pause Printrun-printrun-2.0.0rc5/requirements.txt000066400000000000000000000004611325617007000211110ustar00rootroot00000000000000# python (>= 3.6) pyserial >= 2.7 wxPython (>= 4.0) numpy (>= 1.8.2) pyglet (>= 1.1) cffi cairocffi cairosvg (>= 1.0.9) psutil (>= 2.1) lxml (>= 2.9.1) appdirs (>= 1.4.0) dbus-python >= 1.2.0 ; sys_platform == 'linux' pyobjc-framework-Cocoa ; sys_platform == 'darwin' pyreadline ; sys_platform == 'win32' Printrun-printrun-2.0.0rc5/screenshots/000077500000000000000000000000001325617007000201645ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/screenshots/plater.png000066400000000000000000001030131325617007000221570ustar00rootroot00000000000000‰PNG  IHDR$^EФСsBIT|dˆ IDATxœьн{|Tѕџёї@€ wWбxbН[ЛvФКfPtmжЊ(Біж_Ј%UiэхБ§mыЦv­н]Е^A t—RIEЉНФ&^jSФ ъЖF Bw.’œпЩLf&s;3ч:ѓzі15|ч|Яїr&y|?ѓ§~Я HRАВж8Јљк@ ŒЬ(›чv}ˆ–ІzIR‘дŒt}И%ъ€dR@Є‘FiЄ‘FiЄ‘FZAЇY{ЮcбŒВyjiЊя H$Љѓƒp0bФўзFiЄ‘FiЄ‘Fi™&ЧfžжљС;F’њУмИЄž$ƒ4вH#4вH#4вH+а4{ЮйwюH@N4ŒžŸŠz‡4вH#4вH#4вH+ИД”щ’ŒюžŸЄnuK ююn4@@ђrQ EбoDŸОяпвH#4вH#4вH#­`гтгћоH:ОtЌ.§ђtM3LC дC]кѕб^­yюM§Еѕ#œ3њ\}‰zR†z2d2KЛїšГ%IWп§ЌщМVЄ…ЫџЦнЯфtОјvмwЭпїžїйЄyя чЙчYKытvZОДƒ4вH#4вH#ДьвЄщ’’ ЈњNв?7QЈ)!ƒЊtТH}ћвгѕв[яЉю‰MъьŒ+Їя№Ј%[НaJ$Z „6toя \НјxЯmкђљѓ;ъ8д-FLоDч ЇнwmЯyЏОћ™”ЧeœІђ”А}џ4R–Юcm]ю?лњ”4вH#4вH#4?ІIъŸшyылsNзqGŒU2@@ЇnЂ+>]З<МA2Ф–гk@фЇnCъ6y?|dw_ŽЋяzZз.yNZоSйЩSTqіБъwЦИМ‰Юз/GКу<пеw>­ЏпѕLьq’ЉrЏОы]}згжЖЭ‰ўsЋ вH#4вH#4в<™–0н0єХ“"СШЂ;жыžпНЊC=JvvыжОЁъ[ž$}ўШqњтч&Ц–г9kџ%[2Т?$u+šaH;;ѕјЦV]pњ:љшqНѕъŽ:І;’їМSЇЊтяЇЩ0ЄЯідІ-шЁч6Ћу`—юЛЎ,’чОыЮ‘$}§Ю&Iд­/Ÿ8YГN™Њ’‘ХњhЯ5nкЁІWw$ЎŸбз №ЌСоŽCњKЫn=єьuuїwџЕсržŽфOЛПЗ^сКє5Ќ[†ЄhюйЧъK3&hXё иў‘!FЄm=чш+#ЌЋлPл{ЕЊщ-ННѓSIн8  ЫП|Œ‚ЧMьwоОКєЕ7eџ •2Ee'Ўq#‡шУЯЈще65ОК#вŽ@  В“''<&мŽHЛŒОrѕ=iЄ‘FiЄ‘Fiyš– нЁй_(М}ђбДiЫnнџЈЁ…џxЂъ}]Џmн­П?Йя˜ѓO?Z/МБS ˆ:_ўЗ§ дs„бSІбwИaєЄ вЂъЩ;|ш §фз/jgћ^}щИ‰Њ:o†:ЛКЕъщЗД№Ž&е-.“$-МЃ1ІмsNžЂЪачєч7vы?zY|сЭ+›ЎЎюn=§њЮўѕ‹ZГіЧM;єЛ?oбХgЃYЇLе'{щБ­‘vбuЮЄсїўп…_Fчœ8Ѕ_Ÿ†л›Њџf:U_ћћi=ulоЊ‹Я9ц№q#zO.ЧˆМзЗdЋWOАaєќ/ъ@ѕІ шТ/–J’6miOp\_оGžпЂжнŸъPW—ўєз’ЄSŽ)#YЙГN™*IњУ_обў‡ДіЅm’ЄYЇNMXПшђŸxБUћtъ‰[%I3ŸЄј*YлЕ#О~g~ОgКiэ‹лДЗужі–{\џŸ%щ7ЯoбоŽCкјж{’ЄIc†FЪљљЩ’ЄЧ7nго‡єј бчMдоф§Wvв”оОиІ}EњЂьфУ#Ч•<%a;Тщ‰к‘МяI#4вH#4вHЫЧДDщ“Ц Sёр zb‹!ƒjўьуtі‰GъхЭm:ѕ˜Iš?ћ8 дwLёр"M;"ъ|}<1 CQˆ:xйт ѕljoмДCkўДYŠ;aј<ЧLЉKfЃ#ЧаАт"…wо>D2[†aФ”;~TБ$щЇUјsO}XџМНuћdЯ†ЁOїŠ*ЯˆiGИЮ‰вњїG_A† 6ЄЇœН$CњdяС~эˆ>gєY>њЌC’дйе[ыЈшpЬ№žѓ~МЇC2 }Мч@ТК„л›ЊџЦŽшщПOїьэ‹ƒНщ}}>&ОcG IбŽDŸ вH#4вH#4вђ7­њЮіЯдqАKХƒJ ш`g—–7МЎзЗОЇуK'hУл%УаU_9QC ”dЈу`—vЖЂ€є;_Пчн2Œž{ qїфЊўљ#i€{\дy’Оў•U2ВXwўn“^пњЁ  {Ў9Ї70щ)#&OTЙя= ’‘CѕНeЯщУЯЦдЅ_ЙF@@пЗ‘УыУOhфa=MћhOGOƒ€ Уа€@@=ЛTК5fXБњ*‘И}zъїёž?zЈF ЌїvhФати&О|к‘Д‰>Є‘FiЄ‘FiЄхošд?>0 C;к?гБSFK2Дj}‹^пњžŽžк'IњТєё:ИH—ЮŒЊS’vФзљљПѕ,=Лр‹GjШр"§Co9с>ŒЎKЊў‹O{юЏm’ЄѓПp„† Ј ПxTПКФї}ВўћгџідёќгK5t№@џХž:6НК=r\ј˜јv4ѕnjOдŽЄ}OiЄ‘FiЄ‘FZ^І%Nhэ яHъY‘ѓТлѕ…щStнœ/hШ š?ћ8}ўШёz}ыnI’ щ‰ЖHЦ€Шљ  ‹Ь #||O0dH HОc%УˆЄХ9ЄїЭћ{]•ЁЯщћ—ADа{# =ђќлКdц1њЋfJ’ЎњљzЩž|y›>лwPГПpЄ~і{олмі‰жіnNЏ_tЯ=uЊЮ=uЊіvвSЏМЋЧ_и*ЩPРў{н_5џмуєѕ OˆLёm‹oG|6lеˆУщЌЯOвьгŽˆ9EР0bВ„ЫMдёiOlиЊХƒtж “#СTПКФѕ}Вў{lуV$Э<~ВЮ9щp}јY‡~§є›zъхw#эxь…­R@:ыѓБЧЌхнЄэHєй 4вH#4вH#-гЄўщ2Є oьPшд#5уˆqКyс9yирШ{ƒPЭ%ЇhЯОƒ’!§u[Л6МБC ˆ”PŸ@АВж˜Q6OŸm­'СDNfzЊ@šѓi‡ ЄЛkЮб'{ълї=уЙњ‘FiЄ‘FiЄ‘–џi’њЅzџ[4PККќ њЛуІ(ўЛ~Љg…бЦ–КяБ—дyаˆ)Ч1ѕ$Е4еkрд“ЫjKŽ:I?й•нPя|LЄ"ЄйŸіЯчЏwvЂ€ЄKfЋc'вГЏяаkяМя‰њ‘FiЄ‘FiЄ‘Vˆi в Љл0ДёЭz{ЧG:Мd„Ї RбРъ8дЅээŸщў†—єш_оVwWwТr†ŒšЈЖОоЗd+ќžWpЯД iNЄНЙ§#§ПЏЁбУ†шƒЯ:єлчпжЃyG†‘нљH#4вH#4вH#-—ДžŸbгЃпя6 НКх=НіЮ{ъVЗдшVР @\ŽшrЂ'TміЗW œNšSiЯНОCЯНОC Ўž'ъGiЄ‘FiЄ‘FZІEЅ‡ЧЈFєБнR@о`# ЩHyЮшЗњ’HrябнR$,"4вH#4вH#4в 0ЭЎrњЮЕd+œhD2PЯнЗH#4вH#4вH#ДТK“Mхєщї`Фžуž]№нiЄ‘FiЄ‘FiЄ‘VЈiЖ•гwњH@rыU_”$†Ёююn†Ё~ћJ`›@  @  Јчiі}И&іHдчгІMsЙV…ЁЊЎERє’-ѕ |;;;ѕёЧы“O>бЁC‡\Љ\!***вЈQЃ4fЬEШ\ћ$ыs8'ц.[дŽ;4|јp}щK_вЈQЃЄ9Р0 }ђЩ'њы_џЊmлЖiъдЉГ;ИДš§oЖЯрœ~Iј™б=#йhпŽСq|9Й,йЩv0Ÿ/њ:HJxMѕE&х›эCЛЏƒ€§пчpNТ€Ф0Œ˜gЖƒн\fZЮ;я<­_ПоTь”Mљfѓ„ћ>Q@bіМfЏЧьйГІG_ƒLЫЖBєѕЯІЭO@рŽ„KЖТџNХЬЌ‰йхDnnДЖs№›щБV,йЪІoŸ|ђЩŒЕKќЬEІЧцz €;2ZВ%e6рЭ$№03ШM6@ˆд#Kйі9œе/ Бjр›эР8“їŸzъ)еддhќјё?~МОљЭoъЉЇžŠМп}їщ”SNбрСƒ5lи0]uеUкИqcLўE‹iмИq*))‰ ЌsЉg.}Ÿ˜Н&й^‹ѓЯ?ПпK’ŠŠŠєУўPЫ–-гђхЫЕ|љr§№‡?ŒЬ€HRMMЦЇqуЦiбЂEZП~}фмбзЋЄЄD555§юhЖhб";Ж_;ВэћlћЮŠy0bxYГ@ є<Љо ПŸЊ|№&MšyђфЩjooќћЭ7пдВeЫДyѓfэйГG’4`Р€Ш9лллћхKзіTя[ѕ^єЕˆП&ЙєkКO™і €{’>‡$ZјпЩюЪ”ъnNfяє§ўWОђ•~я544шŠ+Ўа/~ё ]wнu’ЄГЯ>[‘|‹/жВeЫtѓЭ7kܘ1КьВЫєЇ?§)ђўW\ЁћяП?r'ЈK/НT/ПќrdpœЊОfпOі^ЊєDwй2sMRн=+е{ххх§ъѓшЃъюЛяжE]Єу?^†aшŒ3ЮP[[›юЙч}ы[п’$rЪ)КікkеййЉsЮ9'цz$Л^б§пїsчЮеwОѓэнЛWјУ’іU2‰оЫДЯрœ@АВж˜Q6O_?О]ызЏзwПћ]энЛЗя€$ЗщMuћоlп3sŒ]2”f€Єz/:}иАaКх–[tоyчIRПkbіzфr-2Н]tQв С,Їƒ?)ЖЯЯ:ыЌ k €\TеЕЈЅЉ>ёƒЃpЩО]ф%{/›іyх›ъLыav œ.OЊ#fr=ВЙN™ОŸLВйЅ\8œ0Cрž˜Лl%[ffp›юNYщђg’'[й <эœ9‰оуў9й51гчщЎG&з+бёЩъ’ŠйўЗ#0‰нчpNЬ Iє&пLЄмfˆ˜˜fs[лdВ=O.ƒуL„7‚‡Яcцšds=ВЙёчћЭo~cz0ouP˜KПЧї9œS§СƒkчЮ1bDN'Эd`—эL‡[3$Йф3Ѓ­­MХХХ‘AПз$гYЊLyy–*б}gE’ЁC‡ЊДДTызЏз%—\b{СЙ .s8z§[№uыжщшЃVqqБ$й~MВэ|Кё}чD’‘#Gъˆ#Žа† єаCiцЬ™šђ‡<љ™Чыѕ#yШуlЗ^Uu-FАВж p  зЄ HfЯžэD=`1Ўќ€ЎБ= ЩїoъЕЯщ6ч{ 1CР5=žњСдУ?ЌЎЎ.…B!-ZД(ђdыэлЗыПј…^yхuuuщДгNгЗП§m5*ђЭ}јПO>љdфпз]wVЏ^­ііvM:U‹/V[[›V­ZЅїп_Ч{ЌОїНящˆ#ŽH[Nјœ‹/жЏ§k}єбG:іиcu§ѕзыЈЃŽJлОЎЎ.§ъWПвКuыДoп>UVVъђЫ/œ7\яАpZЂі%kГaZЕj•ќqэнЛWgu–ЎЙцGŽџЦ7ОЁ5kжЈНН]ыж­‹)ѓх—_ж§їпЏmлЖiܘ1ЊЌЌд…^˜Д<Р2š!yщЅ—ДtщRнџ§кО}Лъыы#я§ф'?бWПњUеззkеЊU*))бђхЫ%ѕ ŽŸ|ђЩ~хПќх/њџј=ђШ#š5k–ўѕ_џUЯ=їœnОљf­YГFgžyІnП§іŒЪ лИqЃnНѕV­YГFgœqFLўT|№AНікkњЏџњ/­\ЙRяПџ~FљЕ/Y›зЌYЃM›6щ–[nбЪ•+еййЉ+VФœяеW_е]wне/‘ЄŸ§ьgКђЪ+ѕлпўVЗнv›ўіЗПЅ,№ƒŒ’šš•””ЈЄЄD‹-вњѕы#янwп}:ѕдS5dШ 6LW]u•6n옳œз_НІL™ЂттbЭ™3GћіэгЗОѕ-Mž<9’жввbЊœыЎЛN'NTqqБцЮЋЭ›7gд kзЎе5з\Ѓ)SІhј№сZДhQFљЬxьБЧtэЕзjвЄI>|ИЎОњj=ћьГ1ЧдддhмИq ѓ8P|№>ўјcM˜0Aз_Нхuœ–б’­Щ“'G~ž2eŠклл#џ~ѓЭ7UWWЇЭ›7kЯž=’ЄвЧ9cЧŽќ}Кzш!utthзЎ]§іЅ$j_ЂД‹.КHЗнv›ЖmлІЮЮNНѓЮ;КщІ›Rж+њvО?§щOеккЊЎЎ.IБAˆU} 8-ЌЌ5f”Эг‚im ƒ§˜={ЖЊЋЋѕ№УЋГГ3r—­AƒI’6lи {яНW;wюдиБc5wю\нsЯ=‘ ж?ќАxрэйГ'ц.[Щю\•,-]9™ž3‘ЮЮN§ђ—ПдњѕыЕџ~ЭŸ?_—]v™$iыж­КэЖлєілokܘ1КтŠ+tчwІl_Ђ4У0єЛп§NПџ§яЕkз.M:U ,аЬ™33ЊccЃVЎ\ЉнЛwыШ#деW_­SO=еT#Еццf…B!ЗЋ‘Vyu…лUжАlЕлUШHU]‹ZšъЅ`e­QUзb466ћїячХЋ`_†$ЯПЪЋ+ЫGђ'?ѓxН~ф!yœЭужЋЊЎХVж<€k2кдюwб{1тБЌ pOA$€7Бd €kHИ†€€kHИ†€€kHИ†€Ф"Љžuт4'ытЅvРђ* ap јK XYkЬ(›Їгк нЎoЭž=л3`ЬЅ.fѓzЉнЙjnnV(rЛi•WWИ]рa ЫVЛ]…ŒTеЕЈЅЉ^ VжUu-FccЃБџ~^YООќх/Л^+ъb6Џ—кыЋББбфљWyu…cљШCђфgЏз<ф!ГyмzUеЕСЪZ#э’­—_~Y‹-RyyЙцЯŸЏЧ<ђоьйГѕрƒjюмЙš3gŽюКы.uvvFопО}Л~ќуkЮœ9Кјт‹U[[ЋO>љ$ђ~WW—VЌXЁЪЪJ]zщЅzјс‡#я†Ёx@ѓчЯзЅ—^Њ[nЙE)ыНdkіьйzєбG5ў|•——ыКыЎгж­[ѕйgŸщђЫ/зž={bђ~ійgš;wЎіьй“ЖоКыЎЛ4gЮUTThѕъи(4]нgЯž­5kжшЪ+ЏдљчŸŸЖŸЭ^—hoНѕ–цЭ›ЇGy$mнТ§7{іь˜ОLu$%ьчDз$QZКЯP"ЉкpЧwhэкЕ1Ч?ёФКуŽ;В.іIќьg?г•W^ЉпўіЗКэЖлєЗП§-ц§—^zIK—.е§їпЏэлЗЋОО>ђоO~ђ}ѕЋ_U}}НV­ZЅ’’-_О<ђўƒ>Јз^{Mџѕ_џЅ•+Wъ§їпМЗfЭmкДIЗмr‹VЎ\ЉЮЮN­XБТTу6nмЈ[oНUkжЌбgœЁлoП]#FŒайgŸ­†††˜c4kж, >јр}ќёЧš0a‚ЎПўњ˜їkjjTRRЂ’’-ZДHызЏМwп}їщдSOе!C4lи0]uеUкИqcф§ЕkзъškЎб”)S4|јp-ZД(ђоc=ІkЏНV“&Mв№сУuѕеWыйgŸ5еИыЎЛN'NTqqБцЮЋЭ›7K’цЬ™Ѓпџўїъъъ’д3№шЃъВЫ.ЫЈоO=ѕTЄнуЧьfZїšš7.у~Ž—юјпџўїК§ілuгM7iцЬ™Іъ/еuJеЯ™JѕJ$UŠŠŠєЃ§HЫ–-гђхЫЕ|љr§шG?RQQQжхР>EщИёЦѕРhхЪ•1b„jjjtЦgDоŸyчЮ*--ќ\RRyяІ›nвќљѓuУ 7hиАaкЛwЏцЬ™yќјёjkkгQGеЏм &шц›oжФ‰ж+з;;Э™3GПќх/UVVІGyDз]w]Цѕ.))‰iw[[›ЉКK§ƒ€T§œЈ­щЎЫ­ЗоЊя~їЛ>|И**њюЪ”Ўn‰‚“Tз)СƒыР2dˆ$щУ?ьwLЊЯPЂЖЇkУ–-[ДvэZежжъюЛяжЬ™3cЊTхРYi—l§єЇ?UkkkdySќ€uщвЅjooW{{Л–.]ЊYГfEоышшаa‡ІттbэоН[?џљЯcђ^pСКћюЛЕsчNэйГGK—.МwбEщЖлnгЖmлдййЉwоyG7нtSNvњщЇkпО}њня~ЇЁC‡jкДiз{жЌY§к-›КЇыgГЧ?^Знv›žxт‰˜=щъ6rфHmлЖ-ц\ЉЎS:гЇOзC=ЄŽŽэкЕ+сў’TŸЁDRЕЁЃЃC?ћйЯєƒќ@gu–/^ЌŸќф'1Г6fЫ€}вЮœyц™КёЦЕ{їnyф‘њ—љ—˜їO;э4-ZДH …BКђЪ+#я}ч;пбНїоЋџїзиБc5wю옧 sчЮеў§ћѕя|Gћїязќљѓ#я]rЩ% Њ­­еЎ]Л4uъT-XАР‚&ї™3gŽ~ўѓŸыц›oŽIOWя+ЏМRK–,бТ… UTTЄЙsчъЅ—^ЪЉющњ9›уЧЇ[nЙEпћоїдееЅљѓчЇ­лзОі5-^МX{іь‰ЬNЄКNщ|ы[пвmЗнІњњz3FW\q…ўќч?Ч“ъ3”HЊ6мyчКф’KtвI'I’‚С vьиЁЛюКKп§юwГ*іI„BЁ”‹ЛтŠ+tХW$|яŒ3Юˆйз ѕ &#…щЊЋЎъЗ@ъљЦџ’K.‰9>шх=‰–њФЇ]xс…К№Т Mз{а AZМxБ/^I‹^•Ўю‰ъ–ЎŸЭ}ўБcЧЦм!,]н.Пќr]~љх1iЉЎSК~>ъЈЃtчwЦМбEХќ;еg(‘TmјўїПп/-|Г‚lЫ€}в.йЛpMNIЎwКœў ё™№–@АВж˜Q6O ІЕ) К]Р5ЭЭЭІіёИЅМК"§A `5,[эv2RUзЂ–Іz)XYkTеЕЦў§ћyё*иWccЃ!ЩѓЏђъ Чђ‘‡<фЩЯ<^ЏyШCgѓИѕЊЊk1‚•ЕFЬ]Ж~p?ЫYPИ.>y„лU(81ЩдЩунЊрnW рФ$]]нnе@Š HКмЊ€tЛ?Cr§eЇлжМрv52тЇК^tzd†$U=О_дЎnvА6ЉyЅЯ`ž р4Oю!IU›ыŸЯј<ЧNЃ3?ИІ” зўzgзЧj|ЅU{;™ЎгцЭLXЖWњ V pš'їXU3Ž›ЌцПmWыюOдmњвq‡ыЋgNзЏжПfYНМвgАBQњC`ЉД3$џVuNПДW<-I8p€fŸ~ŒN<ЊчvСЏo}_OОИ%ržЋ:G ЭoщЌаˆУ†шУOїщб?ПЅБ#‡ъь“ŽдШaCДыУ=њнŸZдўЩОШљƒŸ?\gžp„z§їДі…Эъъ6"ч —HgŸTЊгІORёр"НБ­]§eГuі +žиSяч_W3O8"щЌЦб“Чшќ/Ѓ’Q‡iяўƒzцеmzщ­‘>јсќГcкŸЌЯd&эІіўЛ1ђѓщŸ›ЂуŽ,‰wЮ)Ѕ*u˜–ўaЃ$щВГ?Џ/Ÿx„ўјђ;‘<гЋџyтэйPСуЇъЪѓNв;;?вŠu›ДЗ7­<8]ПxќхHžЃ'бвпѕlПєьЯыЌPу+[ћеsц GЈtв(§ї/Ћу@ЇОќœЪN-е6їkЧрЂњтqSєЮЮ’nоПєЫЧЉс/oъЭw?аАтС z”^hйЁўЛQ?ўчPL_Єъ3™ЩxЩжБ‡еп7EЫн9юфc'jхкWєбЇ=ГxОEѓgŸЂ'7іПyіЏњlпIвsЏЕъМгбoŸ§Ћ>л0’vЮ)GХ”§шѓoшЃЯzЮљшŸпа?Э>Uы_|Л_=Oџмd§ъЩM‘й•Чš[Дшт3д№ч–˜КпT}ž$iяўƒКя“ЖГлшж№тA*4P~КWkžљп˜їYВX+ЌЌ5f”Эг‚imzdг' š0f˜ўiіЉZўи‹њxOпгЌrеЙКqEЃ:{—-  Ћ щGПxJ’tѓТйњAн“1чJ—vѓТйњб/žЪшœ?ўчs5Ј(v#ВaњЫжїkУСE:ћЄR;eŒюыб‰7ЅdЄЮ=эh5iŒі8ЄGџмЂ–wлMЕўuщ)Ѓ …мЎFZхеnWp]i]UЬП[ЎpЉ&р= ЫVЛ]…ŒTеЕЈЅЉ>v†ФшнЇmјаСšо)zЈщu}єщў˜ї>н{@c†е{э‘$=TŸьэˆ9OЂsІK‹>ч˜QЩЯљёž§њХc/щЃЯbы•HGЧ!=ГiЋЮ>Й4aљ’ДуНOєЫЕЏ( iЦ‘уuй9ЧыІ•=ћE mь–Эšђъ гљШCЗђд ІђF(KхЖж-ђ8YyШCчѓјMЬє‚atї{§Ÿ NUуЫ[Дuч‡§о{es›.š9C#Ќ‘‡ жWgЮа+oэŒМŸшœщв$щЯќ\фœџxцчєђ[m mўпmšѓїЧkќшУ4 M3LѓЮ;)ђ~EшФої 6Xќн4mйлŽŸ]}~фчyчžЄ ЃS ъ–aє•ЕoџA}XкЖ№ђя €ЛJыЊTc4Є F–Ъ#Џж…+њ сs˜ jюˆ™!щ6њлфФб:rтhU„NŠЄ}oщу’Є'7nж?žyœЎНќLIвЋ›wi§‹›cЮ“шœщвокёЎЛ|Іш•Э;ѕд‹o'<чГЏЕЊЫ0єOœІБ#†ъ§їjэ oEоџп­ЛuхyЇhҘaњlпAНБэ}е?ЕЉ_љсПўЮn§гЇiЬˆЁк§б­Š:і/oQЭ%_ва!ƒ"эOж@цт‡t3‰Dч‰>_јчlЮ pFк%[пНчБЄ™uwщ‘gўWФmўN•7]ZјчЦЈMьЩŽ5dшЙM[ѕмІ­ нєжNmzkgвњЧŸях7лєђ›m {њх-zњх-IѓЬ‹ZЎАdнs8ј 0H;C€еЭŠXНю9Y`Тx№–ижбl 81c˜”жUI>Й ‚ДKЖАŠгСHД%r6К€Бd рŠЃСЕ=n– ˆŒ>м­zђ\Ђй ЇƒшY‚№†˜€фцЏЯvЋ€ыš››нЎPТ‚S›Э[ЎˆйМ HŒ€-œZХў№7@^ (" иЦщ=Ь–€џlSc4hI œР РnмбŠРМ€р7fKЄфћKVР}$[„Dƒ~–qТСЪZcFй<-˜жІ`0шv}з477+ Й]ДЪЋ+мЎБвК*IRыТчЄж…+2ЎјIƒOžЯTUзЂ–ІzŒјQ6hЪЋ+Lч#yrЭSг;р/­ЋJ=#ВlЕуГбAPКіљЁЏЭђr§ШCђф–ЧoXВА™eY­ WИВПр.€­Rэ%Iv< €cЬ,Ы"(€Т@@H+з§бС…й „Рђ Ѕ№ця№msГН}n.…н Зїp—-@RЉъбя95‹av? РћH Ѕ 8т‚ј'zЎGј+‚—%r‚Ш$€~Ђћ‰‚‹tJi]Uф$vY(Wyu…eUЌ1иЏ. D$šЩф![™lZЗkАЯ2.№7€ЄфЫАЭЄžЙШцщсЙ 0т.[€”ЌZх–]€П‚•ЕЦŒВyZ0­MС`аэњЎinnV(rЛieВ|0+г Уьl‰лВ ІќжFˆчє uЖЊъZдвTЯ’-РВљC“ЭђNžL7 ‡јщf!мnODя{™.уJж.ЯДЧЂб-<ёМ‹€5?%ЉА€{XВШ‰•€kš›› …мЎFZ І`…шлђЦЯИuЫ^Ћf.тыЯŒ€BгАlЕлUШHU]‹Zšъ™!ќ(›?4хеІѓ‘'ѓдєкЮNєžгщ}ЅuUІgKтћ QKукъ‡ыcw'Ы"yШу|П! €RZW•:‰’oЫИbкс“o АЉ DЖЗНm]ИТёлфfs›`3Ч‡ЯЯнИР}$чтойn<Л#г !—Р‚РмE@y*б@;з оKхЎ&V‹oГ&рі@I4˜Žx[ЕйбKћKВЉCјбчŠ>Ouч@HˆиХKIІ’ЭЅ NjВИ  =№Бј@Р­ѓ’@ЙуKь,™p јW‘Du№ђŒ%rгЫжТy–­&8€x1‰РЛѕФw;1sж# Hˆx§iМ^›1Б:PШ$8сŒЗ§ѓЪ€>[^˜1АЛсл!'Л•0 Й@АВж˜Q6O ІЕ) К]Р5ЭЭЭ …BnW#-Џ+kЅ[і”ыsEœцж2.7њ)Y[§vЭјOƒOfgЋъZдвTЯ’-РВљCо”KџфЩф›ѕ№ 7гзћ 7ЭщYƒвЈ[і:жъћ]not нœЊ›“e‘‡<фq>пАd <Шь€нoKƒмzкЛ[}Ф’.HŽ€<&—ЊŸЗ‰шNpћю_Щ(T$р!V L§і­Л‰њШ­€ М†€ђ”нfД.\QАIИ.PˆHР#ьzaаmFЁэ/‰ціr2p / И3хжr&77Н@Ё" pъ›ёвК*п&v7йЙнž-ёгѕ+№(@сAЏзП™Зs[|P_VПВm~аи’@9С€‚Ф ИЬЭрРЫ`Лы?’ьY!ёЧ;1ƒтхыVc†<Ф;.љeЖФ.сй’h™<'$>˜БBыТllPpHРEсAmыТ1щ…˜8=C((‰жКp…Ђ–lЅ[ох…>П+keѓД`Z›‚С лѕ\гммЌP(фv5в*ЏЎpЛ АPјл№ј€$б1NKU'ЛdлV+gВiwЂВГэПшsЙq ј_ƒЭ{оЌRUзЂ–ІzfH?ЪцMyu…щ|фБ7OќЗъIѓєІ;=kPZWЅ%rЧњ-—і5,[--[mI…л-m{\ЃDчIЇМК"fs{&}˜M_g›<ф!?ђј ›кРe™Zнx6GбрЪ ™vFkUeЛqн­чЇ€Ÿ€ЯИ˜и9C“hƒx.эД20и‹€\”Ы й§v&щюV•nГy*n%nм”ќŠ€\`е@е­%BNДЭ*ёЧхкGn=сž€@! X§ К_—qEчЯdЖ#ўЩъfіЗXбGйД7—>b? €B@@yФOIЖL˜˜бКpEN}”iyб–OwП" €<фж2Ў\і[ф’ЯЩrУхe„˜@,p‰нŸНМПФЊ6ЧЯB˜•kЅ*3еr2‚шC@yЮР$е&№l—j%“ыLIјйж%л2“Э–Ќ(Цє‰‘Ÿ H @xm—•ѕБ"( Ÿ'›zХЗгL’ѕк pQxащдгаsна­№€лЮoџ­ JтЯeF.хšНkф‹@АВж˜Q6O ІЕ) К]Р5ЭЭЭ …BnW#­ђъ ЗЋ‹…Ёn<ша­Аmn“хИбGn|ф†eЋнЎBZЦє‰Z№§gдвTЏ"З+РМlўа”WW˜ЮGgђдєx]Љ[яЯNю[H6ћ`Y_/[iOЂѓ™.gйj•WW8˜˜ЩІпВЭGђЧyќ†%[€МлЏ`ЧЬмКkф;€$gм^Н БvЖЅZ  †]‰гСˆ•›м›йА Ё|tл”„ЯoUљНЏ [$€”ЌXFфц`лю $О 7ђ€ŸвЪe&Р ƒэш:ЄzŠ|ЎexЁ­рЗvG~& dЬЯƒюјz‡ŸЮўp x„“ЯЩUІƒnЏ Ь—Ъ.AГ#0i]И"уіћщк€еHРCќ60M5ріZ0-P%š5БЃЌLд Ў<мF@.J4Жулz;%ићщyёѕw{—ŸЎ=X€<Ъo‰пy)0сК($`e­1ЃlžLkS0tЛ>€kš›› …мЎFZхеnW1Л<ЧЫГбmёr=3•шкибЎTŸ|шGюhXЖкэ*dЄЊЎE-MѕRАВжЈЊk1§ћїѓтUАЏЦЦFC’ч_хеŽх#НyjŒг/ЏЖ'О~^Њ[.yRѕПŸЛњРЋ§MђЧr2P`Ж@Ё! й\/…„€,?ИL4АtcstИ,n+ы}# KЖРёЫГ2yиЯвК*KЁB]fUPџ™!`PˆH GЙ *нzJЗепъч†ўPШСЪZcFй<-˜жІ`0шv}з477+ Й]ДЪЋ+мЎzХ?)нŠoЗнxњz.ѕзЗPПйЯЅ§бзКPћ€=–­vЛ ЉЊkQKS={H?ЪцMyu…щ|фIœ'н>‘œЪщЭчфRЈ№Р8йЗєЉкSг›7ў}П]гlѓ„л_ZWeњsP“ пj“e‘‡<фq>пАd L0ЛO$[n-у*д=!йЪі:бЯа‡€2hгКнђeIО3ЛСнщЯxKЖ …вКЊШвЩЄ›З fРl§ц@^ћ&лЭРDYьQ($с‡%†…ЎIq“/|ІР XВqмXžeћKМЩЬ;Џ}ІРM$Х/ЊsЋn%щ…“DзЧ­}Aрe,йЅП•ЏWБПФлш#H€@AK6Ї{u†$žЋћKШKЖ 7žœž О‘ј  €‚eцЙ~š pzŸA $!ЌVж3ЪцiСД6ƒAЗыИІЙЙYЁPШэjЄU^]сvђ‚KБќВПDВwщ™Ÿњ AƒOžUUзЂ–Іz6Е~”Эšђъ гљђ5UГЅuU g <йНЧй1У“ЈžьђИRyШCчѓј KЖЋфV/у ŸЯЎЅa­ WАŒ р)$ †Ы–Ќ"œмŸТў’ќQZWхЋНM€@ApjРVc4˜|ВЩc•| J m`ноBn;# їмȘɽp47„|˜-‰žЁ*”jЂvZл§vч;‰ШkбƒЇя•nАф…`$О|Зы`VВхJљ>H5ѓЙЪ7ЩЎЗпb   €М DДнp' LЂџН$PюЉ[чњ!0Щф›ё|˜ЂLЎ9з№nћ яФіу…гœИ$*ЯЫџ%rЯ юЬж':(Э™єAбPpmNt|>ѕЯ˜!Wв#бмž №У`Щ+Г7Й~ѓэЕР*[fкQˆmN”7_њШg$ђ†™`$šг‰лP6’ейюvX9 єћР4›њb›“Чя}ф3О—lПˆYN ™–се€ХЩzй1€єы Дg‡Иў@с рkйЮŠ$cчьE&чeРdџЗй~Л“}сЗЯ•зb РZ`e­1ЃlžLkS0tЛ>€kš›› …мЎFZхеnWС3Ђ-vэsАb`dІnсђМАo#;ышtАрх~–ЌяBko:^я [ ЫVЛ]…ŒTеЕЈЅЉžЛl~”Эšђъ гљМœ'›™‘ЌъІžўЮіUГuЋщ•жUЅЭыЦѕ‰ю‡Tч1[Ž[пXgвЯ’ћ}m•шіzэїлЯ@823+ъЕ~#yхё–l№Ћі‹˜eЖ+ъцЕЅ%V/Kt^7И]~"vжЉакы‡ђBG@Р7м|ъК”y‘mн’ ŠМ0XВ#ёRРх•zHЮдЅак› /}BC@Рьњv>ЉnkWнм,EЏыЗ2ё/ж)пyБЯНX' пБ‡€чЙŒd2@qЊ^N?кЎ™Џrћ пNnъ.­Ћ’\кјъхЯ€”OКМŽ€€Ї9Œ˜(YYГбЃСіekVїНƒаp§Ќ|žгR7щ~oЇез=šлС)PHXВРМ0(/ЩђЪ“жKыЊlˆYН_ЧЎСvыТЖ J мœ1№s;ЃƒЛtЏЯцљ€€zХЯ„9v ЙxЌм_/ЯŒxmЦЬЫexЁN”aч.і! €^^˜ѕШEЎIЂ€ЬŠ:Y-Qнќz›\+Ю=Kфv]МpnЛО@ (ьC@Ргœь\“žˆkпЭя‡Эыn.•ГcyœИvДбщЇЏ‡йёyёт5ђ _pkУЏ_e:[bЧ-ЩњЛEЅЊ—ї@Xužш~ёZ щ•ыbuPтV€ф3žчєЌEєЦЮС‡Sыі3yрЂ•п&[}%Џ-ЅГbЯзх[­ўy­}€п‚•ЕЦŒВyZ0­MС`аэњЎinnV(rЛi•WWИ]WDN=Ѕ=\І]хЙёMkыТ§ЪЕВ}VЖ)“zЙљmu6§цDџ8} ь,п,Ї?3N§-Ьjpщ7Vў‘‡ЛƒЋ§v- ђЃLnрWљм6fJї№ЅшЕнTƒБlЫN5Вc——ŸЩMНМ:ј‹Џ—ЯbБуиLин6ЋdS/‚Р]$|Ыщ™’d2 LВ ^Ќ "М<ћрхКe+|­|‹•yR ? 2ољјYќ‚€€Џй”˜T&Ј%J3;№Щ%0БkeE_3Ь\.}E?gЮŠОЪЧ` А пѓЪLIXЂo‘УA…“K‚Р<‚Рy$ђ‚A‰Uo+п™œЯЮ[ :{rЮч 1'п—эy‘§uТ XP 0Ш^tйYŸ%ђ„wЬВЛ*ŸY–S~Џ]#ЏГ:˜EцrэЏsnМЮЂšљ€@^ "ЌzVˆ—ХяoБ{Р™kŸ0 6ЧŽўт˜“kљсяр$ђ–]Я Щ„“С[O{7УыѕѓЛgз9њ А_ XYkЬ(›Їгк нЎрšццf…B!ЗЋ‘Vyu…лU№…шйГДтv­v=u<ОnN=н<—>БЃŽVпR7ж…++гзд 'ћ.КLЋyэwHЅaйjЗЋ‘ЊКЕ4еЋШэŠ0/›?4хеІѓљ:ЯВе‘Y„№@ЂuсŠДхX1;’I9ё2эƒšИ@Ы‰ОЮЅOЬ|ЛlІn5p—Ъћ"РЉk*Iхr.(Y(wtљRІ§aЊяЂўІ˜UZWezІХ3KЩуЫ<~У’-y+~)SВ‡К…гќДо›e$ЮpВŸнИІљо>ў@@ я%Ѕ BМі ТxNONЭŽxгћrмь+ЇлщїЯEЖќє…р4!|›мTŠј‡&ЛЕnЊќvK4ууE~^3Ÿь:кu}Н0@wКm^hsЖќќйМŠ=$ N6O<ївР?ўжЦсџZ=ШѓR›уйqMœ${mPnе-Гн.Яk§­Цh№t§З0C№тR“јojН@8еOn<4аЊ2НіYŠцt§ј№G/_?РHРЏ&ёѕБjs~Жч№Rпd"›ы™KНіљI&зzfгЇ~ш—hйжз+_^B@Y№к*Q`Rвэ J•ЧЩРТkŸ—L9нЮp~Гћ4ВЩР;иC9№тўЗъу•;EХ?Х>ž•їшOUnЖЯёЂp;УmJзЧV–Э‰rЭ№кя?рW$Ѓ№ ФkVГ­пXn]/]{ЛбЧЙёкп Рm,й ya0ŸяиМ„Я>;А@ќѓA@fСЪZcFй<-˜жІ`0шv}з477+ Й]ДЌ\џы…ƒЗ7иf[lƒ)Зл И‰пx_іЏUеЕЈЅЉž=$€eѓ‡&› ЖфЩ"Oя†п№%гхVз­ІЗќвКЊ˜:Є+Ї&‹UВуžМ>фqМЌ‚ШЗб?SЉЪі]ЧSyќ†%[`Бшo=­z.ˆYЌkј и > p+01Уыѕђ Пs@АIЂ‡Фљ!01ƒ™ П @іиC6Kє№М№Ф 3$р јYЛfLђiпHРёIi]•-A„30ЬюБјВC@.ВcI6љG=9Ї2dчј=пэ*Ў# —- ”ї{@š‰™ok+ŸY–SYВSія‹нЎр:6Е€G„ˆш@ФЬцwіќˆ€<&U`/й“еYЫ№ №ЈDЗ 6“?+keѓД`Z›‚С лѕ\гммЌP(фv5в*ЏЎpЛ pQi]UП§&Vз,;ъјПK№‚†eЋнЎBFЊъZдвTЯ рGйќЁ)ЏЎ0<ЬuŒ•х$[њ•JЊВ=зoфq­ЌBЫcея’WкCцёюВР5$\C@Р5$\C@Р5$\C@Р5$\C@а’@ЙлU П{ K5FƒлU<…п ;$\Vж3ЪцiСД6ƒAЗыИІЙЙYЁPШэjЄU^]сvЇJыЊLчi]ИТ†šўФяМЂaйjЗЋ‘ЊКЕ4еЋШэŠ0/›?4хеІѓ‘ЇАђдd1˜Jv./Д‡<о(Ћђ№;DЏфё–l$eЗЙ–5ѓ@l~иає рЎ! ф„e[(tќЙ! DАІpПk@@Юј†…ŠЯ>;Ў! ФШv) пЃаdћ™gЙ‹€€kxR; Ÿ%ђЌО§­1 юлпT§”ъЩн^эЇtз=Y›МкЛ0;X‡€€ YЙ,-|.Џ Psm[Ђќ^iocЩ !і’є)­ЋЪЫvй­ЦhPiŠY"ПbvАV XYkЬ(›Їгк нЎрšццf…B!ЗЋ‘Vyu…лU@Щe0йКp……5q‡ƒiЏєS!Е5…ў;hXЖкэ*dЄЊЎE-Mѕ,йќ(›?4хеІѓ‘‡пˆСІћђљфѓя`€эђyР‰ќЦgА #Й~гыХыTЈМx-r­Г#@fHЫЇ „КИ_vМ|Њ С9€)љ”‰ŒЮтСˆЧе ЎкЌ Š’Е!пƒ.;л]c4Иz›м|Пv€1C0ЭŠ`ТЯП%rОOРя§bХgвЯэмB@ШŠ_ƒ’вКЊЌѓf:рЮІoќђPЦLлŸЫч#—k”-‚Р=`e­1ЃlžLkS0tЛ>€kš›› …мЎFZхеnWˆaХрбЩ%:йжзlГ)ЧщЅJNдбЉўЮжѓo?ЏyМ/чѓ№4vxIУВеnW!#Uu-jiЊg рGйќЁ)ЏЎ0<фЩ(ЯВе9ЛДš§†йl{В­gыТІћ­&ЫИз4œ/ІыЇь‚’вК*SŸ‡lњЁЦhPЉrЈгег3ПЋф)˜<~У’-€gјy_ ќ…Яр$€œYЙvоkEіфЮk}hхgЬkmќˆ€` ЋƒЏ&feГЇРЩЭм~иуb5Ћ?W#€5H–Бz€цvPТ€г:nїЅеŸ%Злф€ЅьJмLр_v|~Fk,gЧв‚˜eЧgЦяЫж/" иТŽo‘§6[’OпЄћЉ-v}Nќд€Ÿ№€mТ8Ћ‡5FCоSЕ-Y?&{ц‰йѓфР˜!иЮЎйЛяJ•ЯwЇйн—ЅuU#€OaзРЮoЫИВ•M Ѕ_ьj'Ср €cьрхs`’KЛђЙOьlСрœ@АВж˜Q6O ІЕ) К]Р5ЭЭЭ …BnW#­ђъ ЗЋXТюхV‰ю†”m™ЙоY)з‡цкWЙžЫі'+зЯ р7 ЫVЛ]…ŒTеЕЈЅЉžMэ€eѓ‡ІМКТt>ђЧж<ЫVлњ wxрѓMweцвЩ6gRž}TZWеwƒъ’эg!ё3NЬєd2+тЉп!ђ'IП! ИfI міfєљY†у/N.7уГИ‡=$W- ”;6Ьv€kї2ЁdЌЛЕ—$лОsЊОN~ў$F@№жюЧВc@žЏмГХg№€gфыЗе~n“ŸыžLО~ЮП" xŽŒЬ.˜чЕ>ѓтч  РУ<Т*|–ят.[O‹мЎжcпЖУDяc†р ^Xn“KPфvнГ‘Kн Н№yfHОТŒ R!ќ‡€/- ”sлVDД.\A0ј Рзœ^šуЕ™/Ф~ТКзкРœ@АВж˜Q6O ІЕ) К]Р5ЭЭЭ …BnW#­ђъ ЗЋxšOUЯvfЦŽК…ыbчЙЭђђ5 AУВеnW!#Uu-jiЊg рGйќЁ)ЏЎ0<фёežЈлѕM}&ѕLV7+ыД$PоWŽ чŽ—щ5ЊБ) I5bХчЧэйЏшіљюїŽ<žЪу7,йф-Л–ѓИ=p•ЮНАtЩŽОqbY–Ў)PЈ˜!фНшС,O(ф}AщЄЊo6ГSfђx!шEўa†PPТ›РsXЙ9ˆMUw7ŒЙіIјК8Й?ФoСˆлш/и@СђуЬI&Ч’@y^ЕЧ.NlОЯGЅuU1{Е€\ ч‚? v ^XіуѕkрuсўѓТЕ„џ'~•l№Zc48: 3S–гOЊВМ6h%БŽгПШO$ЄбКp…ЇnыuёЗЏѕЎѕJ+Lrc№•M™NЮ’јa@jІ/ЙќЛкЙцo§в­|–D>G%ШwйРafnЙ єœ,ЫЫЬў#VЪЇ`$,лg€Мfv œЏA™J –lрaV ާpg/ЛB0ЎГ•ЫЩт™щG–oСЌ@АВж˜Q6O ІЕ) К]Р5ЭЭЭ …BnW#-ЏmLžaѕн(гMfŸ3тdле-гђуѓ:Uo/ї'b™ LнRUзЂ–ІzfH?Ъцпœ‘‡<ф1ŸЇ&ƒС]&ešЉ[ЎezЅя2ЩcзЬˆu‹>&U9ёз1|œэ}НlЕЉ~-­Ћrdі†<§ѓј {HpAКАK^м(г …АLЫ-fћЊP— ТfH@о(Ф`$КЭ‰fСЌncыТІ–oе ,пBJ$xŒƒф|орnЖ]…2HNз/™,х 6Э~ŽJыЊ$Ÿьk€ѓH№'ОБЯЧ Фь†ы%rЫжкgв—f§^=лaіsФнЗ {H€ЏЙЙL+п;ГиS+0C€KтПavr Qќ>Џ}slрšk= FЌgхLIќyВ™YŠЯуЕЯ6њ# РЌ\BdІL;есs{eЙ’зƒ?,iJі9 з› й`ЩАLбyy‰зњљТщ~цКцfHp™›ƒЊ|мрЯъўЭїўЪUЖŸЉLђ€ф'\ф…–ърfяц•JЖ§ž(AќŒ€8&н <_жv}сН &Ÿѕ‘*OО^ xO XYkЬ(›Їгк нЎрšццf…B!ЗЋ‘–г›^РŒt3щю$–Mў\ЫЬTІГ#љіРХшvgк6;ЎcЖљђэzdТl`ъ–ЊКЕ4е3CјQ6hЌўцŒ<ф!ѓиYVК;jй‘?л2ЭєAЊй‚tГ^ў,˜НІ ЫVлі9ШфnlV^џ0/ѕЕUyќ†€ …џпо§GGUпљMBbb~A)`ЊbщёЧ*j%ќˆќA@P . ЋсЇŠЪк]wu{ЈŠЌ[,XJTдEЁ­€h 9KYWС?pЃЌ6„`јйB’Щ§ўСwІ3“љqg23w&y>Ю™Cfю}юч~юЮч=ŸЯч^ЯgХФЫЏЯ@МрЖП~ЌА•8_=QO=oD#$ nEzсЕЗђУёєp:ћ €WбИЫ”Пc„3ё w NLй`<ƒ#і0Н­ћbЪРџG"D#$,CBР2$$bК`ау‘ŒФ'Ў[ї`+,[h =]ї>ЌТТBЋыXfзЎ]*..ЖК•T”Z]№Љ Р3-ъfЎ k| §Э3ж™9Чh1л–Ё|"у+ЎЛл\ЕЮъ*˜R^YЋкэемe ˆGЁќGSRQt1Фг=c"yЌ@йѓoцзnЯx3ѕѓuЬXОFn1&ccщ|BљD"ЦWœЋXjЗpХФІl l˜F…`‘А ЫА шЖVиJЌЎ€HHX†лў€ИСœ€ю‡„QEb WLй`–aЪˆ Ž;b•T”jsеК bC‰l…e !ЃЇыоС‡UXXhu}ЫькЕKХХХVW# ’ŠRЋЋ>T–ћн^7sM”j‚ž аїMъ™пЙxIЮЫ+kUЛНZ*,[h”Wж~јЁqіьY^МzьыУ?4$ХќЋЄЂ4jqФCLїŒ‰фБц›§ОbЉˆ‰џ˜@п73пЙX:ЋbЌz•Wж…e жА ЫА ЫА ЫА OjQ3Яиln??Мs<б@їР ˆ+f“to|КFH7HDКFH@мЁSк3qнЛ'[aйBcШшщКw№aZ]Р2ЛvэRqqБееЈЄЂдъ*€)~ж„KнЬ5?Ќз•яROќŽlЎZguL)ЏЌUэіjІlё(”џhJ*JƒŽ#†bКgLдŽUЕЮkL8х.Ј,з [ILЗ71]‹ ѕћbіцёаСЦФUо:ŠLХЇ‚ЪrПw[ѓ‡;БХжЫ­А•8_u3зеЁ$™щ~BНІС~wHH@L Іcѕ*ˆМyЦцˆOбBь!!1‹‘’žЃ+зd$О‘€˜FRвНuuT„d$ў‘РŒŠ@"!q€Q’ю…QИ"!qЄЄ{`TžHH@м )‰_ŒŠРDTWnЫL"в§‘€ИТ(IќшЪЈˆD2вSи ЫCFOзНƒЋААаъњ–йЕk—Š‹‹­ЎF@%ЅVWbB0ПКзЭ\СšР›ЎŒŠpНКfsе:ЋЋ`Jye­jЗW+ЩъŠ^(џб”T”G 1Фtߘh+Ђ1UыLџњ^PYощ糘;ŸnгеQ)ЧuŠ•ѓ‰Ч˜xCB€А`zBСЗшФЦ’„Š„Ф5:ГёыІl ъHDрР ˆ{м•)ОŒР#$ˆ xУ "ŽdО€И畇№!ВVиJ˜RϘВтZWФkч3Я%ЩŠчбчѕ‰“Ї‡#њHH,b6™rн/^““yЦцИ­;"‹„Ф­x G}=ЫˆЇN>I МБ–-4†ŒžЎ{VaaЁеѕ,Гkз.[]€J*J­ЎФ„`жФТ†HЎs‰Їѓ‹…Кvw›уdz\ye­jЗW3BФЃPўЃ)Љ( :Žbˆщž1бSb}ЪNАЩH4Ю'^ж“о˜ьš‘X )A,!!1'PG>:дбNF‚‰‰‡6DЯ@B`B<<%иу;тD ˆIБ4JOЃ С&%БtnБ:Х ‘EBрG,нQ+Rb))AЯCBрCМ&#ЁдƒЄV!!1+–Іm+ЩˆI т €ёАˆ=’Фƒ$з7ЛvэВЊ^­А•DН“м’‡PкožБ9цЯ н‡­АlЁ1dєt§[qЂеu,7x№`ЋЋPIEЉеU€Ј t{кp> =˜[сЦњSх]…r‹пpŸŸП:ФS[ЦКЭUыЌЎ‚)х•ЕЊн^э>BвU†a„Г8 (6›Эъ*DM(џб”T”G 1Фtߘh+\1ѓLtІC9NWŸУaц˜1гжUы‚)qДыhIWъця:z–3э‡1ё&l IGG‡tьи1ЕЕЕ‘œФ‘^НzЉOŸ>ЪЫЫSBBќ.+2 ЃG%%а“švTPY.љщИEbЪWЩc›ыПŽэў> tг\|ёХ***"˜жS:ЫV<€LмeЫ51ёЦfГ)//OЇOŸVkkЋzѕъбЛ4yvк}§ЪgС0l|%e‘МУ–Ѓ|ЧДЛ~§њEєXбрык<іиc$"а DЂумS’Ž@baД=щљ9Оnљ+I‰‰‰њС~ ЃGЊББQ­­­aЉ"ЯfГЉWЏ^ълЗЏњѕызЗќ•ќ'Š$#аsyK8B}ЈdOРh Ђ)l ”——з­яа„ияЩР<зѓ [ ЩE” ZТК‚™!ˆІYESИ ЖТВ…ЦбгѕoХ‰’ўі >oкКЧ œЩєрСƒ-ЎU`%ЅVWФАx-,ЏЌUэіjїУ0дооЎ“'OъдЉSjkkГЊ~@Ф%%%)33SйййJJJŠЋОPўЃ e:1Фг=cЂy,bˆ!&њ1ёЦ™†ЁжжV:tHщщщ6l˜233уЊ“˜e†N:Ѕ}ћіщР8p ’““­Ў@уLHьvЛŽ?Ў””:Їl1m нUFF††Ў?ўX'NœPпО}­Ў@уLH:::дииЈЂЂ"йэv+ыDех—_Ў;v(''ЧъЊє8n IKK‹ВВВдббaeКŒifбяЃhYYY:wю\мят‘лЧШˆUЬp%ёоAюЉЌМnэээ|o,Б„$”ф"V:„‘a3fŒўєЇ?EЌќagЧх IDATPФJЛ‡"\uЗлэqнёЊSBтx‰?f:ьсюмEs–йК‡ZЇhu|cБƒmEгѕЛ€шђš8:fО:мсъИгЁяЪ1#•ЬxЋгЗп~ЋеЋWkяоН:{іЌ.Йф§У?ќƒnМёFПqёЄЛ$TŽђIHЌуuЪ–ыg](ЅќHOыJђrша!-XА@ЅЅЅš7ožВГГЕџ~­[ЗЮ-!‰E‘ьŒGЊьp–KB`Іly ЧHŠйDР_™с 1 #фrжЌYЃЩ“'kъдЉЮЯ~јУъg?ћ™зr УакЕkЕeЫ577kфШ‘z№С•’’"I:x№ VЏ^­={іШnЗkшаЁzєбG•™™)I7nœцЬ™ЃѕызЋББQ555!Ÿs8„Ѓ+Ъ`„Р: Ž?<ЕzЙ2Г -v%6˜2Ь5ўГЯ>SqqБпr]­_П^{іьб’%KєкkЏЉНН]ЏОњЊsћSO=ЅI“&ЉККZkзЎUпО}ЕzѕjЗ2>џќsНјт‹“‘HЖIИЎMWПЁ~7%FHЌb+,[h =] §ЋvьиЁЙsчъмЙsОB=шЪш…БЁФнvлmњУў оН{ћмgмИqкКuЋ$щОћюгЯўs 4H’tтФ =єаCzу7МЦž9sFZЛv­ГЌ7оxC§њѕ КЎЁvТЛвyЗ"ж_\яоНЕrхJщњыЏЕjQSRQju@ л\ЕЮъ*˜R^YЋкэеюFtLеђеyГйl!ЏћшЪz‘`c]“‰PcCЉoFF†ѕНя}Яя~ŽВ=ЊћюЛЏгёлПќђKUUUiџў§jjj’$%$$Ие-77зђЉRбNj"чњ§ЁќGSRQt1Фг=cЂy,bˆ!&њ1ёЦя]Ж<9>vєР0B[—э8GЌкЩ5з\Ѓ>њHwнu—ЉcфццъйgŸU^^žзэ‹-вŒ3єф“Oъ‚ .PssГІM›цжqюj2bU|4уЬL'cЪ€5B^дl‡=”~ДGdК_VVІŸўєЇJJJRQQ‘233ѕѕз_ыwобO<смЯБVЇЄЄDK—.еœ9s”ŸŸЏƒъЭ7пду?.IjiiQJJŠzѕъЅ#GŽ8зИ^ŸpќЊOIIА1fі'!АŽЯ„$и[і†{o1]‰3ы/>PyљљљZМxБ^{э5­]ЛVчЮг%—\Ђ)SІИ•щј{тФ‰ВйlzњщЇеаа шюЛяvnјс‡UUUЅХ‹+;;[SІLбЮ;Н–е•ѓ0+Іu…В? €uмжxоeЫ“П}8іу/ЎЋБС”уЏМш_ўх_:}юЩиИqЃлЈFII‰JJJМю{нuзщКыЎsлVRRтГЌP…Ћ#э„%œЩŠнnЋ5$н…з#ZCт)”ч„њь’P’œH–гнYЌD+Qa„РFHќ-jїХЬўо hFЈqўЪЕœPŽMбъP[yWЏH##$жp!qмњ4ОPG/Т‘€DВЃоеКFJ4ыbѕОКЪnЗ3B`‘$з7ЩЩЩЊЏЏз…^hU}$…ЇƒЭб ЋGF<ХS2 >Ќ”””˜ЛŽ=3!IMMUAAЖmлІЩ“'[YЇААЊЃlUЇЖ;$VЉЉЉбХ_Ќ””ЋЋау8’ŒŒ 4HЛwяжлoП­#F(??Ÿ_ƒDb Уа‘#GДsчN9sFW^yЅ222ЌЎ@уLH’’’дП 6LuuuкАaƒšššЌЌ16›MщщщКьВЫtХWЈ_П~JJJ €АВ–-4†ŒžЎ+N”$ЕЗЗыФ‰jnnvошŽ•––Іььlg22x№`‹kXIEЉеU1lsе:ЋЋ`Jye­jЗWЋгOТ‰‰‰ЪЩЩQvv6гЂШfГЩfГ)!!Сы]Тw?уš„k›Ч›PўЃ)Љ( :Žbˆщž1б<1Ф§˜xу–†Ёііv|И>ўјc8qB}ћі•$ЎIљjsD3!щшшPccЃŠŠŠXЬnЁЫ/П\;vьPNNŽ$qMЂРГЭ=n IKK‹ВВВдбббƒЦѓ”ЃHNdeeщмЙsЮkщkOз"RmяйцˆЗ5$Ž_сЛвё3гСэюSŽКz~эээЮ2КzM]юt-Кr.Ўm€ш )!ёзЩ GЇЮЪ_э#н)5SОнn:!ёеf‘N.У-эl› z:%$Žg^Иђі\ 3Bэаz+?уpv@C-Ы3Юѕ:HђzMМЕ…™у놑ОсhџpДЛg› zМ&$†a8;žЭЭЭzы­ЗДcЧ566ЊWЏ^њЛПћ;Mš4IC‡uJ'9˜Ю­kYcЧŽеЖmлLЧz3nм8%&&*11QIIIЮm6›Nž<Љ>јРчёCЉГу§ъеЋѕо{яI’&L˜ Ÿќф'nЯё•xжн!;;[з_НfЯž­ŒŒ ччўЎЧИqуДuыVЗmfЏ…ЃŒp\ГМЕНЗs№З ђIHЌсuЪ–уН$-ZДHЙЙЙzњщЇ•——ЇццfэнЛWП§эoнЙ`ЇEcЊЗЮЌazўљчuѕеW›юœг‰нМyГ>§єS-_О\’єєгOЋџўКэЖлмі33eЫ‘0566jеЊUZБb…ќё€ѕ цZФњ”­p^#kœВѕљчŸkэкЕJOO—tўй EEE***rюwы­ЗъЁ‡в[oНЅ“'OъвK/е#<Ђяџћ’ЄoП§VЏМђŠіюн+ЛнЎЁC‡ъ‘GQffІ$щц›oVEE…оyчйэvkюмЙJJr{МЄПŒ;V’œПвЗЕЕЉВВR~јЁ$ЉИИX3gЮTЏ^НLw4_|ёE]rЩ%њћПџ{П1fЪѓЖЯж­[U^^ЎММ}4oо<Эš5ЫэzМџўћn Х-ЗмЂ>ј@7п|ГЄПЕcMMзњњЈ233;]ƒ­[ЗzM^ьvЛ^§uеддшЬ™3*++гдЉSчЙvэZmйВEЭЭЭ9rЄxрЅЄЄH:џ˜?Ооzы-8qB—^zЉ}єQ8лЫq.ŽфЬ0 UWWы§їпWssГFŒЁyѓц9ЫМѕж[5kж,mиАAЧŽsŽT1B`[aйBcШшщšm“vюмЉйГgымЙsЮ~іГŸщ‚ .аЄI“4x№`ЏOГОэЖл4bФЭž=[™™™ZП~Н>§єS=џќѓ’ЄЙsчjюмЙњсЈііvНњъЋjkkг#<"щ|gљкkЏеc=&IZВd‰ЎИт н}їнч+щбйѕœЎcГйєъЋЏjпО}њщO*IzюЙчtеUWщž{юёлŽNшъеЋ•œœь<ІчvзфС›їппgќ”)SєЪ+Џ8ЇV:uJїпПо~ћmч>Н{їжЊUЋ4rфHIђzMЦЏ-[Ж8пŸњЈвггЕ|љreeeiіьй’Ю'#FŒаœ9sœпЉџљŸџб/љKIчЏƒч9nиАAЛwяж#<ЂДД4­\ЙRYYYš9sІГ]†ЎyѓцЉOŸ>^лќКыЎыд.БІЄЂдъ*€ЖЙjеU0ЅМВVЕлЋЅТВ…Fye­ёЩ'ŸK—.5ZZZŒSЇN9_GŽ1–/_nмsЯ=֘1cŒЉSЇK—.5ъыыПўѕЏЦ_џњWcдЈQЦœя1cЦMMM^_G5&Ožl477ЭЭЭЦЈQЃŒ/ОјТљ~пО}FiiЉqцЬЏЏQЃFgЯžu{M›6Эјпџ§_чћ/ОјТ(--uлЧWy•••Ц’%KœЧїѕђu>MMMЮsїѕ:}њДQTTd?~м8}њДqњєiујёуЦ7ошжо---ЦвЅKO>љФч55j”ГŒoОљЦxт‰'Œ'žxТ8}њДѓzxдЈQЮККўнддфїœmдииhLž<йя5№|•––_|ё…зk0}њtуЫ/ПtО?tшqчwК}'<ш|ьи1Зя”ы98ЮqњєщЦ_|с|рРуЮ;яtЖеЈQЃŒ§ћїЇOŸійц’bўURQЕ8bˆ!І{ЦФz§ˆ!†˜шЦXѕ*ЏЌ5 ЫnFtLљq§U?55U3fЬаŒ3d†8 ѕызы?ўу?єѓŸџмЙ_VV–3.99Y­­­Юї_}ѕ•VЏ^­џћПџSSS“$)!!Сэ8yyyЮїљљљjll jкдБcЧдПџ€exОџня~ЇC‡9GgMл u*—aJMMUssГs„ЄЉЉIЉЉЉт\Џ…ч5qŒBŒ?^вљv:tЈsРБŸЗКxоYЪQžЗ}ПќђKНќђЫкППЯkЈ­•ŸŸя5цшбЃКяОћміїЌ‹ыwЊwяоnп)oчкаарl_eіэлзkЙЖ9ЂЧч]Ж|ЙшЂ‹4kж,н{яН;ЇŽЯ/^ЌџјЧњз§WЅЅЅЉЙЙYwнu—[L}}Н.Кш"чп}њєёЛ0лѓ6И}њєq+уаЁCъгЇпNц–-[Дwя^=љф“ЮњJ*‰€/›7oі{бEЉЖЖVз_НЄѓў‚‚ПЗ ѕМ&Ž7mкфѕвљ„АЅЅEН{ї–$8qТmЛЏ$ФетХ‹UVVІ'žxТyЭІM›цVF [чццъаЁC*((№КmбЂEЮѕ4Žњ™§NЙžƒуп~§њщЉЇžђ[ІЏуА†Р Ž?<Е;^?ўИўѓ?џSЧW[[›ъыыѕЪ+ЏшђЫ/яєKОыЫѕГ––ЅІІ*99YGŽбЏ~ѕ+Зэ’Дjе*}їнwњюЛяєы_џZХХХЪtМ222TWWч|oЗлuгM7iХŠjhhPCCƒVЌXЁбЃGћ,уќЃ>њш#§ѓ?џГГsшe†6mкфѓЕqуFПёХХХz§ѕзU__ЏњњzНўњы3fLЇcИ&!оЎ‰ЗіvДCGG‡.НєR­_П^gЮœQ}}Н^|ёEЗЯіѓіђМfЫ–-ѓ[†нnяє;vЌ–/_ЎУ‡ыєщгњѕЏэмПЄЄDЫ–-S]]Z[[ѕѕз_kётХІПSЎЧwДЯmЗнІ_§ъWne>їмsтэф­Э]GHJKKѕо{яiХŠjmmUvvЖЎЛю:-XАРэro9Ч цЯŸЏЊЊ*§ћПџЛВГГuЧwhчЮЮэ’tѕеWkўќљjooз7оЈiгІљќ~кДiZА`š››#wнu—^~љeЭŸ?_’TTTЄввRŸЬ_ўђ—Влэš|X)))ЮN8Ў‰йQ*Гby”*Ўm€шr&$ЉЉЉ*((аЖmл|оy*œКвЙŒцtЁhЋЉЉбХ_Ќ””IŠј5 Е=Кг5№lsD3!ЩШШа AƒД{їnН§іл1b„ђѓѓcђWуXыаv•a:rфˆvюмЉ3gЮшЪ+Џt>Э=VЏIМ_m€шБ–-4†ŒžЎ+NдйГgеаа КК:}ѕеWjjjВК~=‚ЭfSzzК.Ль2 4H§ћїWjjЊ$qM"ФW›<иъЊTRQju@ л\ЕЮъ*˜R^YЋкэеюkHRSS5pр@ЅЅЅЉ  РyЫYD^bbЂввв”­ЄЄП]ЎIфјjѓxЪ4%ЅAЧC 1н3&šЧ"†bЂo:ѕТ•““ЃьььИŸ–Ol6›l6›:mKJJRnnЎrss-Ј9n ‰ajooзЩ“'uъд)ЕЕЕYUЏ'))I™™™Ю_ыcainЯ!immеЁC‡”žžЎaУ†)33“Žq†ЁSЇNiпО}:pр€Јффdкнž3!Блэ:~ќИRRRTXXш|:8гЖЂ###CУ‡зЧЌ'NЈoпОqЗЎ–ГЧлббЁЦЦFБpкB—_~ЙvьиЁœœЋЋDœ[Bвв‍Ќ,uttDє ё<)в#FYYY:wю\ФЏ мж8FF"§ѕю> ЌЋчзоооэл$ч=f=/Хšy…bܘ1!ХEЛўfbэv; z„N#$†atš.ф9ъaЖГъд,oхGbф%œўPЫђŒsН@wч5!1 У-0г9і–0ŠГйl;vЌѓяддTхччыG?њ‘ІM›ІЬЬЬ ъ`Ж?vьXmлЖЭдОС–н•Gл“ Ї№К†ФёоŸ`FM|n8bЖnн*IjiiбСƒUSSЃYГfщ…^Pџў§œBxEr”ХьО$$ш)l…e !ЃЇысыšѕ_џѕ_ЊЈЈPkkkчML™ eŸ›oОY555іYГfъыыѕјуK:п™_Лv­ЖlйЂццf9R>ј RSS%Йzxю;bФ=јрƒJIIбИqумŽхH†М•џР(%%Ѕг9„kДЦл>ЩЩЩЊЊЊв№сУ•‘‘А „зрСƒ­ЎB@%ЅVWФАЭUыЌЎ‚)х•ЕЊн^mю.[6›ЭдˆЏ}‚ўe†nНѕVЭŸ?п9}l§њѕкЛwЏ–,YЂєєtНєвKZГffЯžн)ЩYП~НіьйЃ%K–(--Эmп­[ЗjмИqn‰ˆ#fяоНњХ/~Ёєєt-_О\kжЌбЌYГж5мл!A ЁќGSRQt1Фг=cЂy,bˆ!&њ1ёІг]ЖМнѕ)анЄBйюЪліœœ>}кЙ§НїогC=ЄММ<ЅЅЅiіьйкБc‡sЛk9›7ovю›žžюмзл99Мїо{z№СхЯœ9гYО™ѓшJy~FB€žТэСˆŽЛk…Ѓ3ьoTХs›З™cЧŽ)##УЙэшбЃКяОћL•уk_з}<yєшQнџ§ЯС_л„k›ыЕК3ŸwйŠ$3wёкВe‹†ъм–››ЋE‹)//ЯmПŽŽŽNЩFnnЎž}іYхххЙ•эшф{K4хїызЏS]§егзОЁnc„=‰з)[Ž_ш;::dЗлно‡ухz щo#gЯžеW_}Ѕ•+Wъƒ>аŒ3œлJJJДlй2еееЉЕЕU_§Еž}іYgЅѓk/ьvЛJJJДtщR§х/щДoGG‡222TWWчV'oх/^МиgНУѕђl_є$ІFHя}нъзп3HЬ<ŸЄЄЄD6›MН{їV~~ОЎНіZН№Т ЪЪЪr&-'N”ЭfггO?­†† 0@wп}ЗзŒ@ћN›6M ,PssГ6mк$Iš0a‚$щ™gžqЦܘ1УдˆQ(##ў>'!@OсЖ†Ф1врК~Сзд*SЎЬn“Єwп}ЗSЅ|нЕЋЄЄD%%%nŸ9ъКqуFЗzћлwвЄIš4iRЇcL˜0СgŒЋpЏ#ёќм1jtwoћле$ФьƒН5p4˜­GАЃ b!@Oбi„ФпЅPFBќuЌCIBЬ<|1P:ћfbB9ёФ z Зз…еf˜Н­ЏЗэўт§Х…kф дrКВžФ ЧТ|FHа$ЙОINNV}}Н.М№Т.jІ3ъH‡U#$]‰ ЦсУ‡•’’–ѓb3!IMMUAAЖmлІЩ“'GќР]щмwЅГы#555Кјт‹•’’buU€ˆГ–-4†ŒžЎ)2єэЗпjїюнJKKгˆ#”ŸŸЯ/ѕQ`†Ž9Ђ;wъЬ™36l˜  ЄЄЄРСЋСƒ[]…€J*J­Ўˆa›ЋжY]SЪ+kUЛНњo#$IIIъпПП† ІКК:mиАAMMMVжБЧАйlJOOзe—]І+ЎИB§њѕ#OёђŸ €nНоддT 8Piii*((pо‘—˜˜ЈДД4egg“Œ ЧшдѓMLLTNNŽВГГc~НEwd†кккЌЎF`ГйdГй”РдD‹И%$†aЈНН]'OžдЉSЇшЃ[KJJRffІsTŠЄ њмžCвккЊC‡)==]У† Sff&4tK†aшдЉSкЗoŸ8 *99йъjє8Ю„ФnЗыјёуJIIQaaЁѓ‰эLлBw•‘‘ЁсУ‡ыу?ж‰'дЗo_ЋЋау8’ŽŽ566ЊЈЈˆХьшQ.ПќrэиБC999VW ЧqKHZZZ”••ЅŽŽ+ыдeL3‹ЎxEЫЪЪвЙsчтў{мж8FFЌъ`†+‘ˆїrOeхukooч{`ˆ%$Ё$Бв!ьi#,БвюЁWнэv{\З@Мъ”†pъŠ™{И;wбLЬж=ж—Xь`[QЇ@Чt§ю КИvЪн]ЫuŸЎМ‚ЎуЌ[ЗN7п|Гж­[dSIcЧŽH;Dъ)ёpЭƒ§“XЃSBт*втhuВБzїнw5wю\mмИQQыФЧКH^ƒXњўј*Ÿ„Р!MйђфkъR0<ГгŸќ•ЈŒ?џљЯJOOзЄI“Дmл6эоН[7мpƒsћЭ7пЌššЗrЦЇ­[ЗjмИq’ў6JВuыVIR[[›*++Е}ћvIвшбЃ5sцLѕъеЫk§<ЈеЋWkЯž=ВлэКікkѕшЃ*33гYўмЙsѕЮ;яЈББQ[ЗnэєYMM<Ј—_~йYЮаЁCнЪ7nœ~јaНљц›:qт„.НєR-XА@пџўїѕ^Бb…>њш#%%%iЪ”)ЊЊЊRMMГЋЋЋЕeЫ577kфШ‘zр”’’вЕ1ЫŠ2!АŽз’`]Ч/псјеЫ}ъЉЇ4iв$Нљц›ЊЎЎVпО}ЕzѕjЗ§іюнЋ—^zЩэ8{їюе‹/ОшЌЧгO?­лoП]еееZЛv­зr>љф=џќѓZП~Н~єЃiйВeЮѓzу7даа пќц7ZБb…>ћь3Зи 6hяоНњХ/~Ёз^{MэээZГfMФЎM8ОЁ~7%FHЌтw ‰ПЮ^Є;‰сŽ­ЏЏWmm­F-У0tгM7ЉЖЖVѕѕѕ’SЯђџјЧ?jюмЙълЗЏњіэЋyѓцщOњ“ЯјUЋVщъЋЏVrrВ.Ир§ф'?бџїЛw[х’IDATМyЪЩЩщєYŸ>}мЪЙцškдЛwoŸх<єаCъзЏŸzїю­iгІiџў§Юј?ќPsцЬQNNŽrrr4gЮЗѓ{яНїєрƒ*//Oiiiš9sІvьиЗз?а~$$жp{0ЂcЊ–ЏŽ™Эf Љгж•8ѕ чЛiг&:uJ'NtлwуЦЊЈЈшT†ggжлп’tьи1ѕяппљy~~О}жљЫ/ПTUU•іяпЏІІ&IRBB‚лўЙЙЙт=?3SNvvЖѓ}rrВЮ;ч|ьи1ххх9їuќэиоаа ћяПп­ОЎcЈљXŠs§ў zМЎ!ёеqs|ьэn УљЙ$сˆkmmеж­[ѕъЋЏКuТ9ЂGyDwп}З’““•œœЌГgЯЊwяоВйl:qт„Г<Щ{‡МOŸ>ЊЏЏзE]$I:tшњєщуГsЛhб"ݘ1CO>љЄвввдммЌЉSЇz №|яњйЂE‹TVVІ'žxТYЮДiгќ&OЎŸ9ъ=pр@IчG\ЗїызOЯ<ѓŒ[{љЊW(Ђ(†ыxВхјЕизЫnЗм'/3u1З}ћv 2DЙЙЙnŸїызO—]v™>њш#utth№рСzчwtіьY>|X/М№‚ЄП§zž‘‘ЁКК:З2nКщ&­\ЙRGебЃGЕrхJ=кgнZZZ”’’Ђ^НzЉОО^K—.•t~ ƒc уoзЯМ•“ššЊффd9rDЫ–-sлЯ[Œыg7нt“V­ZЅЦЦF566jеЊUnлЧЏeЫ–ЉЎЎN­­­њњыЏЕxётˆ]ЃHНЬ|WIHЌуѓ.[F&<;oсоп[LЈq›6mRYY™зђЦЏъъj3F<№€^|ёE­[ЗNYYYš:uЊvэкхьЬO›6M ,PssГ6mк$›ЭІЛюКK/ПќВцЯŸ/I***RiiЉЯЮэУ?ЌЊЊ*-^МXйййš2eŠvюмizd#˜rѕvхјЌДДTПљЭo4wю\%%%iТ„ њќѓЯё'N”Эfг3Я<Ѓ†† 0@3fЬ№ZІб eыи ЫCFOзЌЫЕmл6=іиcjnnіОsгЇB™nе•ЇŸ‡ыЩщБўіp3 CљЫ_Дhб"UVVvЉœhЦ†+YIKKг’%K4vьX92шz xх•ЕЊн^нy„ФёЗ7ўЛГЈ1ўтЬФFЂœxЖzѕjнyчjkkгъеЋ5lиАА­ёKkFМэЯ €5мюВhQЛ/fіїLЬ#д8e„ZN(Ч‰І`Я)77WџјџЈііvнpУ њёljJV8к.к‹сqЌ5@tЙИ.ђ ЗPG/Т‘€Dђ—яЎж5RЬдeќјё?~МлgЁtЪЛzоVЗ›уцVз 'Jr}“œœЌњњz]xс…VеGRx:Јб­АzdФS4;жнЁј№aЅЄЄФмuш œ IjjЊ Дmл6Mž<йЪ:……UeЋ:Ен!1АJMM.ОјbЅЄЄX]€Ч™dddhа AкН{Зо~ћm1Bљљљќj$ƒј`†Ž9Ђ;wъЬ™3КђЪ+•‘‘auЕzgB’””Єў§ћkиАaЊЋЋг† дддdeн€ˆБйlJOOзe—]І+ЎИB§њѕSRRRр@„•[,55UTZZš œЗКЃФФDЅЅЅ);;›dР"Ю^иг:’›ЄœџџzŠѓпџђЪZ‹ыаГ$IRэіjЋы њ Ўr№ЦuxIENDЎB`‚Printrun-printrun-2.0.0rc5/screenshots/pronsole.png000066400000000000000000007256331325617007000225530ustar00rootroot00000000000000‰PNG  IHDR“„j-ЋCsBIT|dˆ IDATxœьНw˜Еѕ7ўбЬнОюлНЭ6.€`zo`г L $!Ё„`ј:B %HB€:ІЗЁ&L16ЖYЗ]{зk{wнАЗн;ч§Ce$цю’пћ}~/Я3‚ы9’ŽŽЄЃsŽŽЪ0ичŒk IHB’„$$! IHТ7>r-cв{ШЌџПщIB’„$$! IHТЗ$,}ч1@  ЩЬІF- ˆ†–РXK` ,%Аі­†§пХщ‰Б‡ЬТвwуЦ$Є7JC’ЬПФXK` ,%А–РиЗ†oЖџАєЦFЄ†€а˜$’‰…бЩЂ–РXK` ,%Аі-…§яр q+cR‰јƒ“РXK` ,%А–РОuАЌp№g‚ ƒЦтЫa ЅGшшУw–РXK` ,%А–РОЕ0Ц3Лд Х‰ŒFХ"фхјшюЭ`§цЏ1ї_ЫАdѕf0NWhL‚CA<b ,%А–РXK` ьлpp“аѓ~pдLSІЙѓr|д• ФЅ'юЯ–ЗуОз ЖЪ “kЫмТФT–&“Я„{~|рG|OС\щXK` ,%А–Риџ;0Q8уQ—Юиуj†".0ЦАטrця[Ÿžg–#‚ЇžщŸдJДЬ•.%А–РXK` ,§ПsТ‰0el…2$/ИуMмѕќBєІљЪžt€џб€мњ`чкa˜2Ім,GГ#Ым љФИї'‡ЈФОј`Ря|GtРј*6i8JцcѓіnМН я,\ 'ш^‘G?МѓќYУЫ Я }K' ђRT˜‹Џvєр‘З–aбъMŠ} ,%А–РXK` ,ц€Gю^ЇЂ'Ž(У‚Ц6мћсМщуqпK‹№ХЊ641L3uјИa< бЋOAЮЛуmмwЩЁ€ѓюxGИF ` OЈТ‡ŽС mИщЉЯ№=j1ыбШ„w­U'ќgЩz<ўо tvїB?єдПVbEы\yъЈ.)ЦSяЏФВЕ[pеЉ{`ж!Ѓёѓ?RДШruњXK` ,%А–РX ˆР1T•C†яГ+ћgўѓe ўќ"aбъvьЗs N;lŒJ3|иB–C*NЛˆЂpsІЄEХ4њ‡MЊМјQ:ЛгјЧЇЭ˜Жg›<я|бjфћŸ•ибнЋђЪ№ўЂЕЪ­ џZВ;Кz%ƒ dЉFЙ6} ,%А–РXK` ЬmУй№ЪaХШЯѕ•o//ЧЧ™GŽƒя3М5П{Ž­Ц™GŽCЪ—€ќм*†@лЦэ Ÿ ŽKЫtч%i‰ЅJ"]щ |РпнGO…ђС…™.аЏЖwye†Ѓ _wіЈgй0&-.њXK` ,%А–Р˜л†3сы6lCWOљЙ>†žtїПМ‹VЕc—К2ЬkXс{ЧŒG^Ž€ае“СК _С‹р‹м3ЩX"~яйgП)„1`Ыіn” *РœПќ ›Зѕ€1ъwо“NЃKЧчЂ/%А–РXK` ,Йm8NDhнА ЃЊ <њцR,ZеŽ•ƒqё‰Лс‘7№щВЕИџ•EИ№ј‰€5ЖB­P |2Јгм$ў пžIОН“{‡ ЪWА€€7цЗf8E)фцј˜P?—Ю˜ЌвЩ угХІгDђ&А–РXK` ,%А>an8У?>nl§К7ЌСюЃЋ№“Л#/ЧУ™GŽУЮЕЅXДЊMиbРk7ф)|‚ Ъ3ЩˆdznШ0ž§ЯJœАпHмєН§пПэM€7ц7cыŽLнЃVХ­Xћ^ћd5‚ц`ˆ>—NНЪ Z^›О–РXK` ,%А…Q8˜заŠC'зblЭ0ќцМƒ1А0WХхњ.‰+r+Щ€ˆИ ŽЯ й|Црyž’‡$Ъ”WАв™нНєІ9}8к "—ЖYэІїŸJЇёКЮ й†І­Ÿeу< Ы5XКзWх‰№ОлЎ`њ?Œ!rž#.шщœ|mL#Њ‡•=bчГ Н15˜mЯd­Eэ|Еn Eд•CwиЩ*‹…ё+цџ;‘Юp§лЮeюlRЌ '@ NЃƒdœІiѕ}>9О–в$Т‡„ћџpЪJJ_^‡ шAРНŸb’, Ы”ЧПJ,=–==НHЋЩВЈo@` я!  ˆЂ<C*хƒ)Z‚@жг–=moчќiћЏ;Т**е"l.фƒ5iЁmы9ПйЌ+Т­ыCа JЛSB<2ьS[FJ[бА9t'”_кXQЦА].гШШ‘ƒzz—у†ЄжОЧд2N@bIШ№DzЪ[№fN74‰€ €св“ё7”6?XЪ”СL†d —a`8м§ЃRБГПўxЕ:q ›ЂtйяЖwЩ™E$q–`ё"Ц‰іbcZ‘%ІдО]–ž0ЛбиП`ZMfЩё є,ЌhOљѕFK;hŠдIЎёNV2)kXзѕПИЇя|ќѓ™щ]†Пk–•nЛq†Є”ЃЎ1&€š|`УИ\PFЅ-ЇEзГ’к0ПnшѕQќЦТgввk5”Д’=ж…lazƒ zвјуFЅЧјž|Тœ"О*rнs№§‹fу­їџЅš$7TгA ЄVlRrRьyœЯ>aі|џmnYЩШ @w&@O&@š€4Є1ivщ| њиъkНџ#эJЋ1ЋSџ˜mш\ІS‰Ђ8œi­>t SЩЌEі.ш4„#ІЮ-• гМh2&u}ў:хѓVPїVSБdуУ>CŒФьiЈ{›ё7KJ ЇЦџЖ‘ЉЦЕ&Ч 8™я: KFбЖ6уЏ^М“6{ь7v'МџŸUŠ‘‹zА=1Б^‡Мˆ№ЖC6tЛhгdЕ>.]r22ЗБЦ•п™ШdNZ瑉2zˆ›l cШ€!C@/нBgo=itѕfае›Q2Š у˜Fс“љŸ!?'…ќмфцјB2EV:CшIшьNcGw/vtїЂЋ7о€ФŠŠ”Б)јО0юu @BњHЅ|фЄ<…[ўф^KЙW“yr 3(Amє9С–а&QzкrQƒEєŸеvџKМКр6tБЩGJ g†ЧТе*ІзгрљРФшх^‘v‚JcхЁРM—1О •IбВ#эˆhЙЊm“^YЇ@//pаЊсзm,еоvj}D0iГѓи§гЏлЗoЧ=їмƒэлЗЧt<Ц2ї—K—cчБЃБО­=Єˆ€ЧŽС’†e&128—­р:’Qbѓ эeЭМLœ QЗЃžšДЫб„VЌ–”eдв‹Ф)KцЕ=ЊС†’ЖрО>‚lK5дЇФЮ№™иЇh8ŸD~мА”‚,W|Ÿo,ї=)Ÿя‰dBHŸН Ѓ“yž&ˆхІw 7„с( ШmZšзDЕжЖдл4l”‡žдеЯа:ZчzшHg0‹зВŒИxY'—GР№јшєJИNcШ€Ќ`pˆЅs XС h§ќo:Hy‚ОjдџаOўя+ПжПF_ъf#л њA_ФыЃсTp'a@q1zz{cКфЉ(Ш бQЎŽ"ВќЗ<Зг9ыCІђІh ьНjщ(Л,pо•Ъ8 GЙ1FЄw‹У€рaР@м).*BooštрЮЎпу3|‰šрсо4Оџ2Ѓ ФдЛ7 Чї‘JЅ@р{4}ц!7Ч‡ч1.O‰У)Ш -›”…“{ЙzD\гVўѕР<€tЦБ‡бьWНt9)ž™-Ц"cžТЃыSN3Г8б$—ВЄЮби˜р !cђ‘WњиајPmIЇFЃSШй…jF]-=dUп(W‡ЧеЯQdŸщь1сj“žxœяПџОњ{єбGЧІ3<“_.]†]ЦŽEЖѓ˜№хвeё%Ћц\‚Ц…bssКћї(.*4 е’4˜ј:у8Ь{ыelmiРЊ/>ТїЮџ -ЫаНy->љз?qв Ч*ZŠŠ qЯПCлЊД­jРнwођ5kђ“шџЫч Бa!6З5уЁПмmŽ?]`pА„Ž1ы0ƒЮG јєУї1ѕˆУU\~~>:ZWЁД”яЯЂЎmИє'ЁЃЕ m-+qчmЗ //OUУї}\uХOбИt6З­СCїп‹тттјђeњeSђD'x<–.šЮЏ:№ЩяaђЄ *…*Пс о~їпУЫзežRФц­ЄэИєЧчЃcѕRД5-СЗўybќЈ<Ц_DY0Ы2mk =›R6hˆŠ pЯЗ ­qксюпп„ТТ‚PЮ ­ы0ч' љЫOёu[#.ћёb 3хВ„>ѓD,ћьпшj_…З^z ѕЕеzІh>+Пa@VпSIVƒ64kК!lЇн&ь‚WŸј6,ћнkWр“7_ТIгѓЗЏЕЏцЏэЋ@mM ѕMжJ“IЎо…ИћІАnбЧXЛшcќёІ_#З НєРіжFlђiCг2t4-CO&Ѓіyчјђ„ЗВ 7y9>rS>?ь#ъyъŒ№х‡яbћšxѕЉGQYY‰LР ™џ~ьЛ—№€њиgЏ=ёС;oŠCˆ>р”“NФ‚пЧ–5јЧsObD]-їмyŒѓФж6ЎCЄБЧДCŒžЧ͘œбрђbž~ъЩXЖ`К6Жт­WžE}mбn?ќоYшh^ŠіUK№Чп§љљyё}­YKrrr№‹ŸЮFуѓАЙy)КчN.Ÿt;@yУТБт— pђёгёс/bЫЊ/б4џ|яŒSU™EE…ИчЖпЂmщчh[њ9юОэ7šќhѓ<ёзЛБЉi1ЎНт2МієпБЙi Ю?їLПЉOмџ'ljёO§›ѓxЩџ'€eП‡Ўu+ёжѓO ОІZёmlСIгЦвоEgы |ђЯ—1yќ.ЊNљЙyјУMзЃmщчшXО—]xž1.v›А+^}ъalXёКз7с“З_СIЧcђmDeЙ„ˆRrKг!ЄЗГоwтЧєт*˜{%чЯŸКК:ЬŸ??Ћwвг_–4,УЮҘl^ђVљ)@„]ЦС—K—f_x=h6§dŒœАвщ4ЎПъg–бkk6вХ?њ~ёгйИєЪkQ9zŽšq:іл{ŠЊќuWЮAey9&э&p$j†Ч5W\fрўѓЧqЇƒkЎИ Зўс3ѓL\>ћЂОїЧaгgbфФН9}WџŒ;Іы%Gч`ƒЋРWёЦЯlP•Jн•?Eey&эw&яj†Wсš+ўЧЊВо‘џ`*Р№НЌИ\§8€џ9эф0ѕИSPR7/МђюКэЗ"žaіE?ФЁЖ&ыyyX1yO“Ё§x‡А/&x&4u5еИ|іzOЅ9ќ qЬЩГАѓ”§pФЁ‡€РїD­‰вкQЊВ™ @o†д m˜yтq˜qњй=iМіЦ›Иљ†_Ё7 є„ќЊШ­СлЗb˜јр'Ф/9я\КџО8ьФY9хоWќODyШA8ќ„SQ?iuј!Q%&'˜z€pёОЯљяŠ_ЂrєDuт,ьЗїžaџ^ѕ3TV”cвО‡`ђ~‡ђўНrŽС/ЇЭ<S›‰’к1xсхзpзm7ЉИg{?і$ъwо ƒ*G`іЯ~ŽГO?MХ_wеџ^aђоЃІz8ЎЙъђі8€Г|=ј@іщ9v"oŸk~Ёe"уQЖЛьU>*юћыƒ8я{пUГ§щЧ…ц}‚ііpуџ!ˆ‰{ь‹ISіE]m-Ўќi8>fџф"zШA8ь;г0rмNџЕW‡ќiяїЕIбї‚Ц$<э”“1uкё(ЉЊЧ /Н‚ЛюМ-,џт qшСёі'ля*ЋЋ•pц^ŸCмї:“і>u55ИrЮ%а˜-ŠЋ_†0"Ах`И<ŸCœз§BђчЁ˜МпaœЎœAuфЁс№щ'Ѓ~—)8ъˆCћ]>@˜qм1˜~ЪYZ7oМѕюЙ§ІˆсрЌoпЊqЩР†T‡3meр™‡юУУO>ƒњніУ ЛbіUзсьSOИXIиo ў\Ъ†|АЗ9it^їгKЙќ>l&>5УЋ№Ы9Г€/…{#рUpљ”ЊЈGnХtїшNѓы{zвuАЦї=фІRШЯ Ыќ'{4N<ѓ\”7п}ИљзшIg ЯМј2Ž›v 2Ё'СДcŽТ3/М?'yљЙШЯЫУ‰ЧNУ)gƒъ1Лр­wпУŸnЛI p%МAќ€&љ|i˜ ƒвOљ|Х мж ЧTшљ›qќ4L?i†Vя„7ўљюЙѓVЃЛІ5ї:ї>5УЋ№‹Ÿ]&ЛЯьs­Э)рокŸќшћ8фР§qјБ31jво\?]}…с‘ŒАfј\ќУsё‹9—рвŸ_ƒЪБ“qдIg`П=їPД]wХџ№ў;рL>h*—Я—[іСƒЧqЇŸ‹k.зьƒK.4уg(f{ ІŸz6†ŽиoМ§юЙэ7ёЇЭ8SgЬBЩNуёТЋЏуЎ[oTє_§гйЈ­ŽI‰I‰CмЯЯ<ќ<ќф\дOмƒjЧbі•зрьгNѕ”,‡ТђТі"­нФƒЮыRFKхђЋі‹ˆЉcм9x№` 8ƒV^JW`ћœq-=dš}І~.Пьb\8ћrМётг` 8|њЩИчŽ[№›пн‰7оz Ÿ§гN>+›VЪJKёёЛЏЁn—)Ѓ 7цTђЪ…тДs/РЧŸЮзЈž$FhњbІž0 ЫWђйсиб;сеЙЧШ‰ћ№jЕљe#z6ЌVЯ_Џ[‰м’4|ђ/L›y&V6­˜ яэW0bТ^€№Žёі”Тъ4йМ_­F$ТаДhІ*Ї€БcvТЋЯ<Š‘уїŠiaнетЂэmЁЉЅЅmыQ3n7Ќiх{* аБj ŠЪG hјф_˜~ъйXйдPZ2 Пѓъvн34"mяˆfEгЦ5ГчXоИ ŒcFРKџ Ль}_Z& Л}5vйыЌnnVЫх§мSOиавˆAUuс§ЅB˜mYㄉћЋѓч> IDAT€Еыж#C„мм<4}ё‡€Ф LыšР„ажћЁспoaкщч„ќUR‚пx u“ї›oc FюЖšV7›ѕŒx%ЂŠnхТqк9?ТЧŸ}щ€аДјSL=nfШ;э„WŸ}#Чѓ mя@ЭиIXгЪНз…љшh^†ЂЎ ŠGŸœ‹зп|ЫWЎD[{ЙєD„І/?ЧдcOТђ+9ў1ЃёъsObфЮ“Mв;7ЫЮ’Ь†…cк‰3БreoŸвR|ќŸwP7z„›aK[3Wж!єTjЫ;Ў%/2кс(|љuѕђХ7q к;:№ьрЩЙЯтБ'žт)КЖbЬјнА|хJ€€б;Т+ЯЯХш]y§~Ši'œŒ•:§я њПAPужєZRзVдŒкkZ[……шhmBбаr­ќ™Vљя nєЎ&њЎЏD§uу–vlҘ‰{ ў`НгHМђь=qO3mф9Юввшзњ†ЖЕ)ЃR‡7-ўS;ЫEџ= Џ>ћ˜!hлzŒœАr2сЄЋяPTTˆіЦE(ЊmУР1љ -­ќ0&EћhѓыЖŽЌqў№шгЯсѕЗпУђЦUhыиŽНŸ74›ЇСГUMђ?chњф}L=х,,oZ€aьЈxѕБ1rЏƒMњж7‚UŒпu)цщччђК ypF"!~шPоe™Ÿ—U‹>Уањ1 "Œпyž{єAŒйm0,›џŽ;э,,[О9Љ”Zщ‘KпЙЙЙh\ќ9JыЦhїђz7Џƒ?ИRU/,ŸчэнВўРrОеHЗ§)qЊ=?/kPTZ €Оо€1“іVђoєЈ‘xэЙ'1jТГ}ЖwˆC@Вя8т†ЯўУэƒU\6——•bолЏЂ~ќžрчж­ЩЂєІ аЪЯ?ФiчžЯэcbЩѕZгѓ0ѕФг4ўп Џ>§wŒœД/зo›[‘_>’лЋ_.ьƒЕ+‘[ZкbЧё+[VЏзPTXˆі QT56ЗЂfз)XГvЦхџЪ/x<|€яЬ8гЧИўhјј]АСУ >РЃO=‹зпzЫ›ажОA1љеe“>-ЙШBуHkй&+ЮSoлЗoЧ­ЗоЩ2gЮБšФУѕogАєЧЌ=“ ЫБЫИБ8ђАƒёцля‚1†#;;/ХžЩкъсXБрCy`l4ЭR7ЕееXМЄ!h *ЫЫбМfŠ^нв‚ЪђrЃвн==ъНЛЛ““HаїљњрnjУscgŒ„№Ъђr4З„‡sVЏєЉtКт†]DЂ‡ј‚X’`РŽЮ.юЦЦ`mѕp,џЬМX4‚аоˆЋ{ŸТrZжЎщжДЎУ№Ъ 09ЬХ^Ž–5kђ=u‡“+Ne 2€и{)і1QўšЕыˆД;ОоТ‚|Є-Nл]yjЋЋАbо{бњY}ЕЊЙ%Ьы rgшqтќзАд‘—?ѓўmU е--ЈЌ0~iHРŽЦ6‡cfœ†9—ќwмњŒ= лПў?Оьr<љєs…рV7 ќYїkєзTcХтЯ h8ўBЁоКV?рЭЮŒ hNfМc`иЖ§k<ѓм‹јю™Їу/<„иgœѓш ЭыЧщhnYƒсUсЄВЖІ+–,ˆЁџ‹ЇѕР IЗЃГ“/ њxљqэз?CЋЙ9џЭ-k0МВТ1Фc„$hщт–П5И’?чъ–5Bў˜ЌZнЂЩЙ(žИАћЄ ИщњЋБЧф‰2xPL}ь*ИxF‡Œ{Mэx­™Ž9хlЬЙј|мё›ы0v'1~.ПO>ї’c<УzБ-VM яWeyšзД†ђ{M+*ЫЫLж”›@Є>KЬˆa@†2``ќЮIaTNž8з^y9&Сƒ*<Й)–-Cggім}2РОўzОXВу{1ЧOžˆыЏў9&OСƒТі/ШЫwRђ€vhYUзЫЬc`јэЖћф ИщWПФЛM2№ћžЇю'i^гЊрЭkжd‘OQ'Imu5V,0ŽA бЦ;‘i>„СN@(ŸUyLсџ7З*ZV7З„ќ/вtwwAђ‚a К{К уwŸ87]wU џѓ є3‚Pў“Ѕ?эЋ[ZŒќЧЬ<s.Оwмt}Шп?Н O>ћ Ѓножdп4Уї%ƒЂЁИИз^{m–|f0–Й[Z[QTTˆSN:oО§о|ћ=Ь<ёX JXемŒЁ5cљђЌX†ёUi]ШЯЫ GќmimХ.уЦ8ъСузЗЗЃvx•zЏ>ыллaћфИVюЊц ­6А’џUТ2|sr@P{54КTч(rх§eц~ƒѕmэЈ­йSЕ5УЕKF…ДїhGQИЗ…O-УH9жƒ0WЕД |єф–ж ЇЄўаjј%ЕЁaкЉ@Б†iЫ PW3\Ќ|0дTWa}[ЛZ%O‰4y)y)~‚1#Nfw‹SбоО8э кЄ—В+ 3Mш€ДІ(ѕ+ЭˆФЖjЃ/о;M+ЉсПa5№KыŒОсIeПX<`oЗА–ЙZZ[БЫи1Ž~тa}[;jk†ЋшкjйПЖс)= xУвeјС…?СnћŒuИdЮЯqзэ7Ћќ Пфя~ўЗГГљrЏА XЕКC+ъРђЊŸoxy§wн}o#Ÿ†1Ѕ\BЏ5глЬЧa$ Ф{џњ ~pюй˜yв‰xљезБЃГг0юjkkTОккЌ[пІоW­nЦаJўA№ mЈMИ‹І˜ЪЉ:ЙЊЅ•_0HќУ/ЂђШLЊ§ЂyпЈў#Bэ№*^?›Еєю`ёhŸ жЗ;јг–а hm@‰ч'џv/њYŒœАиР ­ЇE“і‹ЋхПЯEWHFУВјСХsАлСGa`э8\rХ5ИыцТМboš’vй:NнJUђЛЕ••@РO†зVUb}{‡EŸо&\vs(уЫсŒ! †bш ]i~:|GOїџёN<љь ˜Ая\3 #'ђ%к\БЯ2?7/Оњfžpf,ž}щ~ќртCО Я}ЛьБUд`ФЮbП/R)yyЙ(ШЫР ЬМ_Шlо&Вп;;ЛPPP юђѕрЇ<ффІ№фCСSЯ>]Їьƒ!UuЈ;“+NœЈЋ­Vу ЖІ­ыжСьpЦћзO| ЌjnЦаъб`Хeќ7  ў JЕєЪЩLš‘ .“ZZ[БыЮcEё,\ЊзэƒъJеWЕУЋ8џлуO[ 2NOk< РмgxђС{№јмч0rто`ƒЊ0Дnч0}K [P6ХкѕыQ[-ьтќЅчiXК?Иш2ьЖџ8|'\ђГ_№erуЦ}œXzЦ5ў\ЊЩˆыKќп ž hXКьЛ7ўљі{xѓэwqаўћ Џ$/ќоП>Œћџt;FЌG^nінk ^xђo<^ыє‹уœ3Nх ЊЕЫяяКїпuінsфcЬЈИћіпЊF˜ћќKИљњ_ЂЂЌ eЅИх†Ћ1їљ—Uљa 9ƒї>№0юПыvŒQММ\ьЛчxсё‡ЂGртn]ЛгІЁ˜ sŸ 7п№KT”—ЁЂМЗќњЬ}ў%-‹ў5<ЁчhкQG ќ,TfF:zХрОяЁGqяЗbd}=rsѓАЯ^{р…G0”žМ<\^эЃЖQ Ь7]s*ЪJQ^Z‚›ЎЙ O>ћї‚†“Ё_,Т9g.Ц2РНї?€ћџќGŒ9‚ПНїТ Я<2дЙ%Z}…_П€fœ~./.щЪhЪSiIУR ‚€ˆˆP\ЮEetњЙчг'Ÿ}NлЖoЇц–Vњў…—Šј2*.Aї=јwjяи@эшОџNХх#U~Љђ8МŒМ4ћђЋЃє—…4ˆВВ§f{>5ЗДR&“QИcщЋiтPNPaўЌВgѓ#ПHGD„„A•„СU„СУ9lh5ah5љЅЕtщUзв—Ы–ѓњ-XH3Ю>0ЌšиАjJ•дP~Y-VдQAy-”зQnY-ЅJkШ/­!"ЂЫЏЛ‘6nоL6аŸxˆЪGЃa5#ЉЄ–џˆˆUеSQE-–зRQE ЈЊЇAе#Шђ+ы)ЇЂŽќŠz""ђ*ъ‰Uд+Џ'”sЪы eu„в:Bi-ЭњсЉyЭкАўУx§М’š§ѓkТњ}Оfœѕ}Т`йU<§ JоNіo@ЙуWЦЂOџžЭГ9П—Rqy=нїРУдобAэtпSqYЁЈ„P4Œ—]8ŒP4Œџ-”АЁ„ТЁtє Їа;я§›КККhуІMєђkЏгј)ћ † †PqI5нїРпBќ}ˆŠK†ђђЉп”§Ё%_6„у'o !oyƒhіœЫщЫ†ЅдййIŸ~6Ÿfœr:!Ї˜+xžќAoСAЇ›Щ_q џi0ˆŸЌ+J(ў † гEГчаŽ;Ј`hEHwС ""њйЯI7mЂіŽњу=їRўр2Bў@Bў ђ ‡аь9W„єЯџœfœzІQwўЈ§\pw^o3Oи1хŸv–hљDSі?дlGDєг+ѕњнGљƒ+ТМCC?№чa‚В§J—mLЩŸz‡|Ќзф[( ухБПЉЧŸJ‹–4Pww­lZEЇ~ї‡†| 7А’0 ’0А’І|-iXЖп w ЊRПЃO>“ољздееM7mІ—_џ'пч0ТрсЦoжї/Єц5šќ2œ0ЄZЩI ­! Ћ џŠ_qэ8КясЧТі{ј1*ЎG(Љ%”дˆПЕgi-—Weu„Вz!УФпђтЏљ›zЪYДЈauїєаЪUЋiжyQ^yVжг€с#hpЭHZйдD+›šЈД~4•дэDУъvЂЁ5Ѓш„Ygг’†ЅднгCЋVбй?И€чZIЙCЋœэ7 ЂŽr‡VQjH%х•VSAy-эф4њriиўЙC+)Пd8sвiДјЫАgЫћ75ЈœќA\ЇЮЙъZкИi3ЕЕwаwпGyC‡GјuЪG˜њ]№А7 Œfџь*KџžсяЏ­п€2:§ћа'ѓpљМІ•ОбЅ„\–WФш_!ы9ЏкЯъYСŠнicљП8ŠпАC,ПЄ–ўpЯ§джоA6nЂЫЎМЦˆ?zЦщєЮћџ љћoвјН6ѕ•УбqlЕ•jЧlr%дSбпаШoХŠпјїнћ–в>g\KЦœјЗФЄEлЦЎЖТ`d'+Нђ,–жЮ чЕтєrmЯР-і>ШаІ(8hˆф3w›(z)Ќ‹ђФh Ѕh`&=@И< RU“0У#‰pв+ОЄЄл›‘[^‡”Ч#юˆєФЬеўЄ .аѕТKd сОЩ4qЄœ ‘ь;2П}Yі#ыЏŠВgWЏ9тdC8'\зђщхлхЉ ёЈіšu–ыaЂ˜WїюРk3Ц жˆ"GІЅqГi љt0aжЬ“pкЬ8~цщFк`ЧfјECŒДЊ™œr‚™§gЫ†o:‰vц1:9|ЯЦ31cœŒ’Нмˆ д5.Naш ИjЃОZ6М}”aDыrЙПBTC­кЃuŒД_LZDъчт]nіE{hx№ХsMЭЄŒПBнД#ОЪУФГњq_2AРW†H.ekd0OнsIПнї@D2i_2ƒкw)+N.Kмсv=5‡Мv6žўў_ђЈ­CcЉ–ЗЏтњ;„ЮыЗН qфhzJпsютЏ,+‘Ј˜‹fХ(­pдStМНпЕ?Сq'nDZЁ}ЈЎ?к:›Y#J–‘ЇХGЪЕ…ИMВ0Љ’BfоЌѕeS„J;Ќ—ЪЬЂ[*y+*УqlсЖBrU\жŒnѓрТŠ?фpУ N.ˆј'ЙР’зMHУT Ќ^Ÿ—чfДrTЄ!Љ/Q`іmЪ6Œ5ž ёмАЈE”ХqEФ$Vьk1mXщј2œƒ8Ўиl‚%›‘+‚MŠl{bфвКЩ( ™*й1/7?њС9xрor#ЩЂ‹я­”§Ђ…A­Ц‹ƒFgНє—>dГ"tф2ZТqњпЕ.%A™pLCУЯВtŒ] љЊ[њГ ёY•iЖHr”iгCП‹e”вŠ$вЧ“=ж™VWq.….ћWeu№Ÿ=6В)wƒn“<Љ*/SЙŸŒ…'Иq М ‰ Л<Ф#>№р{`"W:РѓёYEqв;ФЊquљ AРх~Rп—пч–` ˆ›52A†7—СF L~.й2’єЊс‡%ьЯXіЧs)xh}р2є(=žХO}BdР$.Н_ВвЖ\е?ЗŽHЏŸ†+kАѓщВЩ!&‹ pыAЏKЬ$Šc‚ХЄ Ie DJЮЮБ†™M•GƒЫгћ4’оІЧUfŒц1№kŠKџАКnищL+tzт”ЁжI2?щщ5хb0Ј ЮџёФА–žCY7E‘ФOЏћ^јЕ€ўˆoјЮd%˜ќP/ія0№Џ;єfвH“иъ(сXMl0О>›UuPAД+#Ї–оpFšЌЌшШ/C,/ФЄ йвF*oўuЕMП'эЖ2sє.f"ЦŸџЖrŒЕЦtАЦeьбїQ‚ŒФ–ЬR &пЇ%ЗЙ #Ў в=ˆЊЗ™ќќ# yЮН’Ь“№ЋiИБ*Ћ-LшEоьa9ќ ŸЇš lbЩjŸlAlїЛŽЧo1ќ+љФ.:АфЇГ П“Џb™ Ѕ9.Ÿ Š)#2„ЉЭ[ЎЛo\†Є„Л Jݘ”лбјЦЛ”вv:kРЉ8ЫаВыЁ^z+eБØgW:‹q CP+УЈƒVіЖGZ~e1Ё јr€p'pzŸМFз9№Щ9Ѕђ—Ы’"R^JЯуЇ§|ŸЯLKъFЉ;афe|уvИЄЭ/ТрШt —ˆ_*ЎеXЃh žˆ—Q‹3вYеs‘~Дqыy4˜нз…o›/,њЃŒсjйжaФ ‹6Л= 2Y4}Т#žѓМюzо№.8ЙТєX€? D+:,РРŠK`№В&аГењП Ўю’cB1нsтjЏPFH!i/ї)л ВФнO)N–вSоO†ш„веR6мVšˆЩ‡—ЄlWВ,І•GаХl…-ш†UІ-ѓу‚=Љ4Ў0ГpF3[ЭРДњщ•аh&&лwzvчUFŠ4Ћ<)mšБl8юж7Є†Рqd, qЇЅИл—A-ћž&ОtуƒрgeЊƒ,—№+Œ2b\џpm*х‹У30ЦП ШЯDЪз–б ѕŽ^Љƒ‚>Gw_ќJŽxИуuXdiкЅ l:<Єв!,Ђфњ 1ѕБЫvfејахe4tWШWџ)ёZ6—ANіŠЛ Js™;tU˜Ц’Ё”хЃg %ГpкЮЏсяJСi1Œ*Wfba_o“љ+yтaЋЫO†Їk‰Г hы:AU0–ы4šщ+~з ПŒTchЉ”Є|юyкeѕ’{d4чb5кР/eЅuŠwЄеWŠŒІѕџZ,Ÿ1>KglniDae=gu—Єќw@„ДМt—фRЖ\”с—ЋVЈ љзž™ъЫD ,XЌRŒи1iэчЌFœc@)лCу›жXх8r”й— Ь&d]яЖ}a+G{ЉХRмжЈЕщP3N˜›ˆ™ЯЊЅlдбQьŽ67ф3Г1н›jІ‰Ъ+Rѕб(ЛIяЏXуТxАшдщЗфЅбЭzП1­Яф››gњЁUTKaщ^5нˆДЫ‰ cёбYЭN˜§ЃgqГЄoЩ—Xc<.ŸУИPїєкFтiSщFкЄ!аš<QђŠє№NЫ qуЯр щ€рye6у†Ёt™ 7&юН (Зс…ћ*Bа›†—Юp=•уЋ)PјYУД4L3т/ФD“ёБOкв”j*U=1Ё”ђG7Юt>T Љ7„е7}…_HоДѓъ}MZёVљ п0и“FУnЪЂЋє:2Ч–Ёџ_ЌGЛиPh2„Цa_†ЄBa”)3Z3$uт• Д‚нйЫуj {ЙCotMA№ЈЊ8 Гiв^#Г_+и J€1ѕmnоВMєД!ц1L#1ЕЌ,gnвPРЄyхЕМX`-EŠьyЄєЩ=2ќ+5п'уё=‘ЩO†їC2№™Ј<А0Е‰;MТk ћЈЏжЈясF”šіЛфЁ'‹РЦŒгaPe3ШРBъЫјs=Ћ ЧФgУЅ<ћ1щЦДќЇŸТSКSMy?™эq6јЙЄ @ЎЙ)?\Z'B†ЄХ nОœ-?{шX4„dб!}zu˜>sЗ“H>бŽžGЈЕ”aX@ёRМPŠ‹‹IяLоЯAмЅуjуlхИкЬ|ˆЩ`Ч3$h%у]CЁШ а)ќ+Ћ@|щ;œ]“е'Ж Жis){GV@быœќG2Х$’К>ТC2у­™nєЃЮrRќ'Н›Ч5ѓо}э+ПФћЏН€]wнYœаf№ќЎМф"Ќœї6/[€‡юќŠ CCŠэГRтщA Дq .Нрыuшг $‡ш#ŸсMuеЩ6 ЌДfaба'=ZэКИŒpй—њЊBЄL1U62ЊюЭrG™NкlƒFK#Е‚ю5—Ц’CюGо•!РФИEшбў:ёФПq]чjf'аЦ€тАѕW~юецkн˜ЭjpТ/ЪкAШя=’G#“#Нœl|­GI~sаnЇ7кУ1f#+4Юсъ(Oё˜‹lG{pЦзђє%K4УG|j0ќдЏ†Ыц{Э^˜ќЩЏ№pЇ@otg]НtіІбйг‹Ўž^є ЦрЇ|фцх ?/љЙќ——ƒмœ”:ЌI$юИLgанг‹žž4zzzбл›їWњHхІW‹Мќ\фхх_уQЫЉХ‰'юЎ“2#cXŽ?пгђ‰+’<пƒО%ЬЅ—ЭёЭДŸвЅхЕћХРi1€ЬlMЖ™QІUО>3uвўФѓ Ÿ Й)†ТМфЂИ …љ9ШЯѕ‘›у#ЧЮ%&v­jуDOЁЇЇ]н=шююс§к›AЏ№tџЗ!Дœт0мuЫ‘њE‹јKjСJjMфТтyђ*ъ‘_QТŠz~ь |§ѕЌ]Зž_рg?ЙџѓуѓёЋ›~‡Ыy=ОіИjЮluцЦ_\ійПјѕЭјbICX |›“ƒ;~{=–ўюў§­и{Я)ќЛйщ Кг|Йš1О0"SТ„о g–ЧMЧбЇž…ВwЧѓџxјЭѕ qяи%ч‹Cїп‡Э8#Їˆt:ыЏјЈo™ыСЖсѓ!ь‹‰ћŽIћŽКšj\yщХšЁBŽёЃ"ŠиVšЎEЁИŠU!Kп+МZ—СJŽ:Ј‚(lЇFГпu~Д%ƒ!””ДгХсvƒœAGхhWНŠњЕ!§*B t‡хЇ >ФдMјК’‘ЁчЦ,ЯЎ”Є3ьXІЅ‘Ъє!#В-—f‰Ъ Ѓ%рп•&‡b(ОыЇ'ЫТг}†,y4<† eYхЩSšњ_KŒDКH’n2c ц!–щНitѕІбе“FOoš_^ЮФ=”Љrrs‘›ЫТМœrRОXх4ђ Я3шэMЃЗЗ=ННHЇ3ќ„ИX:ЭЭM!GфЭIЅФ’;Sї{€ИШз]‰y9‰ѓј'!™Ч—`}/нчЄЮиЁЈБг$Оt/q^Mцiќ%СLбРo:1_ЗёgЋЉ8БЏЖŸ™2R}!'Х—ыЃИ ‹ 1 Иљy9м‘DлH]Jп›ЩˆЩƒvKнрzЁ%ЯЦњТ/р\~8юY6Œ{ыдiтa5МM6ЖђЋvB:н‹tћj?Дкh …ЇЄFk\mjхљ+F З7ŒРЧ†V†6Зšx­@›4:ˆ"фз•ˆX6ђ<™ŽеиМх+ =!”EVе2 ўъЇЌ%f>№83э>q<ўёЬушъъТсЧŸ‚e+A>zЃFдЃzьD Ш`ЭђХhnYƒ]і:щ€аИ`Њ*ЪQЙЫю№CытOХU#јї[}†]ЦŽХЩ'ЧMGѕ№*,[йˆ‡}wм}Џ8„#ю'пИ‘ш^З ѕ{ь‡–ЕыA ф cЩg(Б3@@УПџ‰iЇŸ‹•MЋЪJK№ё/Ђnв>F;гЦГo$|s+ЦьБ?–Џlˆ0zдHМђє#НћОŠœЦщЕў2”‚Ѕ@( ъЗЦюЗ’$“dU‡lYЪ<›Вжу7бнЮЖдƒœk_ТQpЖУР2л_‡ы СТЄM•q^eЬ"б46мшѕб Щ№Hv5—jђ0sxЛ‚LGт›Ž,д—нІй…S—7qИu#мшchF—Jѓlƒ!тЃ#pSЎђчlE D}ІЩR–,„ттњ\МWn\ПшєШKќ‰ТОpбgз=Ўm ђ4ЫEЧэрŽа+хA\sOП<ˆ!?‚!WфIѕ,сШБ#=}рFЉчёЏяјb%Œ_O$ПС­]ИRv—ЄWЎИAœNЦН“™€ЮdИ­MІЕ*Э›'ЄˆИ {I}Є…С%аЊRЇ‡Kќ™€а›N`J&„{ ­ћlГ07гЖŒ0]&kT0!8E‡Ћ>V§]хоX№ыuD!њн•ž^ЈіLz9dЦХ1IЎ8Š>Ћbэ<ЂМјгR :_’96\cZЅщCŸHv€•оOж@Œє.Єš‘gO^:me3$ЕЂУCЃAиК1л}Ёь—WЩ[М“X\–ЎOŒ‰Ыв=OА˜<И#ѓWБєЈъ1 <qЯгѓкЋ^œЮl4cШPFlЃс_i „N Uqснй<‰:†ь{ОВRТ šЮˆSъ$nFё™т#нжyJт4ф„+0/&љ^xŸ:XmpCиg 99ќц• “A&с:= 7 #Tr8œУiДКlž1шWI1ue`Ш/ю‹ШПIpœцЏОT*лQqЋ`нГ­9Эz7ђ3; La!сJHZF 1Ž6›";XжƒМ У++pає“1бbl[ѕ%olсІ'"lлў5Ё А;:ЭAЋ)ЭH `м˜QxэщGGŸt:–­PГ= ыж­Чˆњ:дэ< [ЖnхћRФр`ŒАiгfT”—ЁВtЈк )лЅG0б˜б;сд'р”УˆКZ4­^Gžxš›вˆ 0nD2Гљ цW@ОЛ|Us і?f6oљЪŠ7+нйй…ќМыщIЃЄx(Ќ!Y1є6r[ю?M я0‡ЈtЖ`р†{dФ}ЄШ>vћЬг&ЬCы:~хЮ>{ь†гŽв[ЬnA s>†ЯІ€fžЙFЯJц…Ÿh Ыб{ŠУк:6FЈу{ |ЯјЌ ‘_рPЇбlнОgЮœЁ’хјR H1`ст%€SN8ŒУ +dГ~ќ{ж Џ?§(ђrs1mц™XмАT‘,wž<ђд\Рe?Й……E3z'ќхЗƒ!х1МџŸ'7 '7]г“Ю 7рƒ7_СgяН‰K.8Ÿ|6'œv&і<јміЧ?Ё7а“ аНў DpЂСF5’ОЗ(РН=ŠћяИЃъы—›‹}ЇьŽљk˜<п‚ХKpЮЌ™|ж)9[0уЭПКхЅ(/+СЭПњ%{ъY-EDŸ%…ёdСL #ŸўЈЇ§o­зlFЃMSєХŽ[mв’E1DiГw}ђdh9}ЫР#7lхЄѕiŠЄ_2)Юлі КUНk"">O_D…'!CoЋ5ж­0Ы PFq zіўck#sM Ш|VЫєџ‡К/ЗЌІв§ВїЙ5Ђд<ХЄ>eRdВ[lЛQqB}ЂmЗvл-*Š Š bS€ (Š#j *Ђ >Х•Ё@p”ЉŠЂц БŠ{ЯЮz$ke%;йчм*њї~/pыœГ3­$+k}{%YсН•ЩЁ”†Ѕ3З:1(Dє$ЙД™цE2 - ъy:з#љ–2WІtJыІ1И]š˜f›жЋЫ(0Tд'Й6XUFL“Ѓо(7p@ƒ>}Kы[ŒіŒіwЈгџ5оr]Uщѕ0qТ&NœрўFF0вы9uўEб’w€оw‡wFGЧаяїAжТTzоhеq‡wFFFм9ШѕЄ7оЗeUзЈЋЪzu…^ЯmџспЕ‘хщЪ[хFz5FFzЮ@І,ЂФЮнŸШDскрpiG8hcЊ Ц/ыїzGjLžиУ”I#ўoІјCM“&імяЩ1adЦ8KшииЦњ}4MƒІi’љшОѓЖn?СЩЄ^эмLžшъ™:y"Ж™2 SЇLФд)1eђDLє§йыUbЅ$rэыcѓSЃиќдFЧŒŽіёдVР‰—Й №ЁOž†ѓN?з|чb\§~ЇV‚Еgн!/`@~Ѕ Ъо[ИZJИЭЌ*{х-‹>Нфп˜цwђё3сду?„;oКUUa›9 ADшђЬиu]с§= g§Ч'ёы]†яџшЧ =юэхУ?ч/њОxіИј‚s\ќЬ`єз-‹ЫїээЭи ЦГgЭ,Оіš(н6Гw†1РЙŸћ ођЦ#ёЏџєNм{пœ}ўч1бпBpњЂГБгŽ №‰уУЎ є5жћщ"р#'‚яџр*<ђшcАЬl4~X8kd%‰cgуЭў—О€pѕЅ_ЧNѓчуЯwпƒOs~ЋŒc>rОљХЯтТs>эАђыyуЭПХ7џMгр{WўЇŸu.тSF„Ж_]gђЌв<вeѓ Ъ‹‚"єŸƒƒЮj€іеm ˆЄ$NЇ%tд—ГІ˜œЄ…ЅЯtД*ЧWLQйЊ BЗeВ —Оrђ4KЁyz0њЖ№K#g (TЎЧ'r吘Ї­GЊ`}ЭmЖž~с^Э-Ј•Ђ7‰+ОtхД%/eКHjЃлСехњXžЅ@ЫФdfХM‰ЙJМŸy&ю†L\^њ[ЪMш”^ЦTезВдјgмgтr№gы c’‘ф+0Œx@в/•ѕњ‘WёФs}7Rе@ЏО+‰|Z6оp‚dО ПЌ^е5*доIК;мCт;Ф  ф›dќъ)Ќ[љуГЮнїyYWKЧЮ d­…ѕЇлѕўЧ№nHn<ЋЈП}pз]Fъ z@ƒdohˆаяaЌяЗ ј—ЖxуЏВѕVEy™…‰†ае[yа\ЫнэL; ъ2 [qХв*0РРWь† сЮ‰џ ˆї!œјШпЪ&Swws8Єй2t6Йy№оww_ДяИБ†ˆИВи.ЩЅ—ЎS1&‡MˆМЯФXЙUЦYйri имoм^EKЯАЯGƒ† NМmЉр юOxzѓ†fІK‰шАБYї)‘м…=RзЈkЧШ}q4nЅЭќve*gс$пЇм^n ]сf–5pдŸFХiаІуФ!)GWѓШ,3Іd•&ї^Ђ‡‘-м”+Т90Ђњд#дz<\џ!ZТK#Œ4ЄЯ‘ф+ехўбЩc,ЗПTj0‘У.<Ў)Ю1™я)й-(‡рїLЁЬŸХvD @;ђ‘н! dUбєШ€НжpŠ@ѓпMј~žЩб0(Э8CnŠ PWѕmQf‰^€PцЁbd1qœ-—&ЧЫHгњђгI6Œ(lUFё˜ъ _OŽ…М Ўѓw‡Wa МіКLЪчbˆїЦР†W1ч}Dќ%іB!ЫФP‡zl„S Сп8чuŸзБ yпЄЉ*ч_г_щЮ/Њау>PјхфЪИлъШТРјц‡ИлГТJ­fЬ‘ызfпѓjKМ1ЂЙяш щЙПХЇЄЏЯIОЭNFЯZ<жœžaш_nљuЗМNЙЫdр0•˜CЖbЯn#~9йнŽd0Jcѓ6М^хЮZи&0Ѕ‹j#ЕL…1й+С(œЋъ у›VG8 Х&jНDю;ЈWUa'ž'л ŒsCЩДыЗп)БШw“J…u…H&”<і ВЎХ™,рюЭю[Bпях Щ‰є‰ќ$p>Хx;R7)Ї№JЈ4кђh(NЏCЦJa0(Р.“7њLП—ЋŒОgtjЛœЈdiдЩ34Qђ;W@жђА%СЈ~ЫNfтыQЖМщќР{?АЊZУ/ƒѓM0&мф<2…ya|К^]ЃщїaЦLNfYefuOЧр~ЇRжXОСЅ’3NёA'qё#–Lјб`шFˆ(ьЉф­mмТ"Љ8іeUC Ю|0Y#~œˆЈщЮќi€Юœ;т­lcl3/{•Сˆї Х—ЫWЦ-СJ[LpССnœ5@yaї\Ф‡GтЙФJбФХј$zВ5SŸи2ЪbШЪЙ+(гЩ|ХEV№'удлQh !ƒпlDжaCЌѕ’ЏЇ‚q4ѕ<УщC5l1ЕЫй\Gk 2хfQжЅgњЗъИRzyЋMвd'Е‹gГ 1—ŽЂёBюy„А‘i—Юœ{žћšѕ›…XB Š7ЇЄРЕхœ§Жn30­/хр6ДO+х9Ц$­d@ €ІЄ[KJ/сПlš$})I+;Х}Їh .ƒRК3egЩу1Ьх-=уN-1UU+nр”с~MA9Аc(є‘Ж^ыС/Ќ”жA󙉌UЬiв|9А•­iNшOѓІI%MJcaL$O&Н№^:iг9Ё*ж‡ЌВДDhК=Ў‘ё mЃ/?#А`ђ ˆМпH†ŸFє—”F_р| з=я.pxš&ИRзєќ–RуЈXУзCєxЏvЗћ„›\ю\b*o с}u]ЫЩѓ‘^OшsЫУЕvxuађg3PУЪхxr{КяvoјБcC–ƒ.aм `Ќ=юjШяb5cжbŒOoSXyƒu7~Њd,[‰5P5ё‰oВ„К2˜аyрzp0йЋ &імRpП!PхЎdВbаd‚йwьП2Р„Ъ`ЄvФіЩJ^“L^‚С˜uŒуNе1ю;ћgП­ЁЫJB4нЎrŒ‘лso!ЄH’Ÿ—}~љИ=—)И€k0Б‹оРqЦїЗ™7ї4ˆє–Шh9[]}Хќжїo%}ЖDЄЏ\ёjвЫ^е[мя"—”ТH-”‘№J:WџfС•Qœц™ГBўTOj!œцэДмEѓѕА‹RtqЦ-™яTњ] ЃЅЈTК сJD†Вт/хDа{kЪРFŠъ0БLqћrqHкЭ€‘›”ЬЮœE<%EОSЂав<]М‘”гњ­x&тщ„—Z Љƒршх(Ÿt^Ф@@кЉРYЖJе­ўяр‰.l%RѕDж`ОзЇЂ$`Ўн@<ŽœЖeE_ќ,Ѓƒ€g†Ч" Œ8>ЕЪЗшЩб–$5h“™ђTvюњЬщиh™žROхЅюУVНКNЪїwIюˆNPeхкŠ0–Z?JRЎšjЦКFЖTълЅŒё'ЉС@o[9p–УНХcШ[мЭnћWSзЈр XЙгс–Яј>Аўд8/ ѓН1с KŒaGфлы\ YуЬАUUљazаxkЃЕфЖЄљUмк}n§е“–х%їЦŽ)шу‘ьsеiw ќУW4‡…|šоыБЗфїЕђ)ћ­ &G<ъ6 єЩFЬТlФЧзћ ŒіџB˜ЪЗС-ѓоФІ!БЂ њ…;5F€З\њсж–™Ьћ(йфЌ&ёЄЩЭ)џРzрЋч,пc „IaяЊРб"І{АXоњУxКPТџ6>П1ѕМћР_OеXнЁ Мw’Mэl„ВDКŽЁV{)н(&TвЈm;МJOКэИЌЦ*џ–"$Д,O$з—*щ”юьЬo кŸ —)Г4 f4m]ЯУкKF™9.”]<шV*ТGdІн˜ЪіNРž‰ЫИЖ<<Y4жЕLяg4~>AгўFfrxЁVny SWѓЇй nyМЁ` KќNЎƒ§CЋючCF• нpzпЗ,sfEнv8|eŒГїmXЊп’-sWп0Чn@ШšЊBгЗѓ@щsўЉœаi,0ц—eУёzзй77з$љ c“gIg5ŒU%џ=2ёP жЮЋTЄtЈoЄ€ZбѕpлJ ЄгЯЦ37SЦ;LєDб–H~лъѓFZјSYU…Њ›iи$ŒY+ЎЂ>T=$йIšHRqqЖnN!OKI”‘”ЁUš,)Lъ,)ŽaŠІs%$эKырr ZYк^Ј#Ћ':Ѕ`Щ ˆЃјфХЊ•(тї№)ћgZж8%š){џЬP]оДM™. ЈЌ ЏьLњiкE*™б^rхъЂ(пq 2Ъ6—\tд= ўъŠoY3q"/ƒШrЭԘјЇ”“Ѓ;ў’:Ывьџ1щУ.@Їл7žБ7…ўgЇј8ЙУа„аїТ+х,йќІu•™Йоnд v}‘lв}БЎT1gГ~л›ЊЊ‰Ќ•l1s'Л+чs‘= [бЌu/.œї_6JZсS`‹м=пbёcwYм.У‡[,Јиa;9АХСєd’Y^ЩѓЪƒ4јUrзGЖШ[; @щвy ЎqАžВ.ъeыш&OƒK†фWЕKЄ`ѕЭЩшёuЧtf Щ'„™‰ЩwЉМœМ6ёJqeFgе@ЪLЬ­§6 œ#ю>’єPФƒэ–Ь} >ЮYЪђѓB+ ƒаљЈ=SфRgi­ЋЪяy НнxSu(›ф ђ‘:xЗТиМ„‹ъMПМGЕ!ђwx{gуО[и‡Ÿ^ЦгP ƒЈ3U‡ЄРIђИЊЄАК”}.Dm˜Ј№{˜<щГ„)ZUpЈ† вЮ).a›–ЎеЩc‹s’*Uи>T•zaЪХ"й яы%0BЂP‡е`q•хQ‹4[H9lйБCиA ЩЈ“ЅuaЁCтФ‰›6к$В№DHщq€ЋaЊ–)Зѕ’Х2GiS@хUehа‘.эЇH#Э5Г&#УхwЋ­д—ˆџŒPу`FЉGw0їMFЅљЃ`ђб2'MG– ЧІ2ЬРЏ'ЯDПРDi”ЎЩбЭу‹ЈєЪxш/XАХвŸ їХй ХgфdsmPЃЕDшЩ9ыU!Л"j`ŒAcxлX…š*ё SѕzЈГ™V‚ѓыШ‡n`ун)Сxw<2Ж|v$р•Њr‡™{•qў4§•ЭМХNњZYk‰\њ>nђ0"ѕ"3жƒд­ &-cњŠФV=gEє{%$Ю§cŒ6l>5?ВIXO'в`H•ШЪЇЧ4“24ф,†Д!]ЈоtюN–Ј+‹ЄfПDG€~л ‰0h@и+ PpcФQjхxїЩяћ№>Ѕ р/Нї{ќќф%яЦюcгЖяЈvg“њЎZ M,ЈsжрLыЫЦ%ЯsєFхdt%мЪq[в §"–MžyaЯ Š82Dxш#z8qЬбЎЃЃщ]ДyšJЙIпѓјЇ2ХФиТюМќ!Y*Ћ-–`ŠевБЪR8llИЮбzWD}гˆ…ВЊkШХЦY*Љт}–‰ƒpВАж[ уЦ‡€H7DІTu 6RА{Є0.Xлр\žoЏсЊzu mЈ2`­лњЇќcjЗe’JD$п†уpQА3P2нŒ90˜|ЪЖБd"АЈёvq5†ћ†’Ц(~­ Й“]p дx№ЦЂphЛ2Юm1№ЇЊГвЯЯe€Z!о j–ю9­–•LД(Х+вё2ьУ‰§`’ y>™ЭЇhћ.Ђч4|:pЯйіЩЗюxщP"žXm-%Eщ;Jл dЯfNй*Ѕ>я ƒ”Zn(‡ЮЌ’ %Œy@SP•*ˆc3i!’i€Фul^NћRАƒ‰š$AgŸ$щXkQ™–\О(~ЎO)QцCŽMвOСuбQVЪsšч9^FuЖ"uбЌчG\ЁorщфРN дtTІ—Л^ъZy‡ьћa“wВЛ– LJЗ:‰ыј’АўЎЪхОЮс@ €в|йЦŒЃЏtžшВДщбA€'ХЯвќ”wЩ]QЋЮЖоkБ_d,Ш”лJИ_гђEŽdњYчТœеЋ:вnVЊ™ёUђрЮPXФ’•$чЊЪdЊp=!ƒЪК‚xЁ!Ќmќ^Ы6‚Бh‚c№Ъ@ТЉP‘Ж=^ &к|ћYе‚ RІђчы‚—щ&)ЧэЙ„Oя.hqq•L]УЙ^7О[У]тr=ЅoЏdBЪ‡ЄЗ…Ъ цœР;ќ!гOщblCБ?№- &ћž!Ђ~џзѓ;JЛ# RЊЧ]hаЖ\’{лЈaаcыЂяЙМ‡ќeѓoZ…3л6=рN2aуюXгDЪטd*јЙŸ­W)Єt>hŒ„ #Л>€aЋVŽГ%ВчЭьюŽwdIЂ7ОФ,ЌЎUŸ"ˆќфхЮщД*Њ‘‚Їы ~PeRўbC21—+Р$W†Њs…4’Z†Ж…I>у(ЖjSЎMЫ П#]%ЋтБpЛm|КZяс {SхPЌ {\съѕТЎKйSюY‰'№GЎЌA!В>цкЌњ˜вч:h6Јƒ|Э(Њ˜жјSQLЃЪЯ…,o!г.RMbб§фПЫЅЯ\ЇЛu‡%R…јЭЦ—ХхKоЎЁžŽ4I| u]ЦФi8”^О9Ў3Єs"Ч Й:ОЅ4’6I_nkЋЮF OЈДѕКи iЕžДPBn[ƒоrЦ'н™ WFе8ŒP“Amљ (oЙєk+Пt,ў›p2мZЗЦj­]ЦЪсŸЪј<•пЏщћ#Иrэ'K~ЫАЇ—NаќЩЫЯ'дЂ#и);Ћnу1ŒЪ5FЌlєMmBМš*=щхŠ1оЈсSъёй ~YŸн0СпЂGјhИіL ХШоqИ1шyAйЗ<ДпYНЪхщ[{ н0вИ…yDЈЛAс7V˜ёоDoЙ4сі‹АЯA;Gf™ „#і€b@Ф п•ЭЁ2 Ц]ОЌој=%–}ђЫyš—ЭЛ ГЎž†§ОoєМ—TІZ*D&Твј8[јОЅJЛELœGЃє|Ї„OQёР *+"А@€‰>Тc%јsж-]QŽЪOкx€gP›ЪАєоЪR}jt&z-ЛxAgё9ћMD,Р#џtЙЮOкЪН0nA‡$c%xeHХж‘ьaˆw1QWРA)жМJэО†‰MђвШq ѓthАСuЇ“Jѓe ,Ћ3LмВДњЂdІ] ї›Œƒ‰ЫД,.™ ќЈovюžG< „—љ”Й …ўађDП шВZѕкVпdюdš(ђЮ8MNDАžUHњYЭOcPU6оoiрююІЖЎv з ZY=ф}–ЦXєMrˆ—†MшF6BˆOKџ\D­ХМOђœЄнiюPЉВuyф@0,’Вј\‘%^ђgЗD|#’яу”?IPЇЙУнЮКСnя ыPK6оЛы Ў}~ƒ жиpx‡гјNf‹%Лћ Т#\ИЮѓЛ(I€м-0фРš…З(њ СЦeЄV!yЂ„w6рLаum"—ьС_і9њMЛЦ=SЛЭТО!ьCRœŽ1ˆдѕГаЂЄѓrрRвП%SUОqНAka˜~Щ€ДлJ&•:rЙœўH­)АщR6i;ГнХТBОDСE]Ђ…­ ­>e!ІЋrJЩH1&"YЁRЋьVЛYhWMЁm-хЉ-œТЋОQšрв CФЧm’ђЁDc!mєHKЇSОl“tЕи*лoi:­їC„мєŠЦЎPvЉ/K}N Э‹ 2ДШЪаЉљF4Џ…X,х† „4:€бРF• gѕ*‡"ђ*аЮйтyо*2'ѓКdoЋ‚\сšя(&5Ыz˜Ьc-ле$Щё їoŽЗ5 ХеNЃшNЛ:ZEQtIё^чУј=WžЌZРBUyПЮІB%†pƒКv'Фр[Б!ђїdC€ˆаh0hТВ:ƒ:љ.r"ИкamРЭm(ИђЧ)меˆЏтZХЦї%љюfCXQќo8у!b[щжРЂiещЖКrŸ.Y&гя•џЮЗА8Ѕїp‡kЬC}у}щhЧл:АšЗжu„%јУ-ЕлxJa%яeh№=šту‘%яњ #–фДбŒYyцыUС‘ЇѕŒЇяЭц1Ўыpdр{Г•H зF RЯДтЅјSЇсТˆТo/&+вћЌШ8ЗJ_ън ЊЧЦ-ѓoM0.^gЂм}‘€wѓуџHчЦ Ј—•5ы~Я—|ѕŸ4RзЅ–ѓ‰аЪ–dя„хЋgИSШ)\C~O –D& !ИЗ(`)d.№eѕ=vяу7Ъ6ПK”ј:F€яеtЬхњЉсЗтЅw“Ц4ЉВ,Z)40zLэ:GѕІ$Ѕј{rq9VT’ѕ: 5 И7ВИŒDЃЗWРPѕъ>ряeІщЬ)œ–2Шм:@ущ+ъ\V–Њž œ>е[-м‹™IŒЋИplтjKЭЇ№E |~8le(Š4M ІпMŸ™2„ ющъb6J•mCчjа5Х_cJH2S—–с…ъѕƒж^ЯB[ЦгЗ]у^Œk,“ќЉ–Х5арx Bx,И+В€.)-iк™яb}Ё$›т/УжЮG@ёХ@'’f‰В хЅЭв<%§ЉвЫЭ ўЭзЂлHH;Pк*v7дАO=ЮтV2ХВЊЌ0‚тЃб{lЉыСНPИЅF–…­ѓiXVaoЂ,-{`iќ–?ВaЏЅУG€:јtQ(Ъъ –§‹JЮaDW1њБ’nѕ}Ш`инšУђyŒЄЏŒ3˜ шј‚г"з@rp†бrєžЋžсќЊЛ=†]л–Јдф`w™- `cм•К"Љ!ЗЁЗo­˜рƒ/ЭДб шЄ‘(–@d”E ŠŸG!`9-l’4%…ФЯ\’йФ‚,e+сY$EU6ˆЛLBJ тЄбCma2Ёœі‰lŽаŠЫDEђ!Жрž!%З'˜Ћ4rНgNсП ™я‘w@RП]& PAбЊг‚ ШE (В<–уsєxЩПfz6ЕeлЁыHк?”@.ЬЯ,E…,­ќIТ ОLO: [Ђ\R)?ŒФз§Ќц ѓНЬЗ*“dэPO5–Ÿ2~uыy $Œ‡fѕЈ+ У’уюі\е‡ЪuN“ЪZжd’ЧеЋљЏћ‹З…ЌАцЦ^[^и‰М#dЅ1.S‰h%xэ/2VпЃяЌЎk Ўj_V8˜ТпHГ@уя СFrмXSї`(ьtю ),&gЋkПЊjŒяљЦ—[›€Щ‚ПjЇKД>$_ЈќуЊ2Ј[љЕбB{ЃйšРЄŒH˜˜МБ”Џђ#пQХGБ›F”АД7тqжя†KЂђјNoST“Ÿ фвч 'Дfыˆ0PЄйg\+Кv’жВ]Re+DBБ”FЩ4}TЎ)d+)jћ!;А[rrЦПИg#Ц‚їRKоl9NW2Žy(4Qѕ$|xЙ pJ4Ыї$HН;!І'WPБЛssGбЃчЄ>“ЎTЄei6QВєQxЎфТ `Z#=ЄЫU:R[ЋѕagnхГ"Рrг„хkЕ2ффtх_и ь‰aЭЪihЫ4љ *Syc ЦџnхД"5ni`АщёБ.m1,ЃќƒшVшNNЗу.Z15ыхзCфV^)/џЦТ2ЗzЈ17bR6д/`а8зAю–uJЩ+wЗЄювАЎЎŒНМЌ,ПU§Еq Ќs4фЬСЎK@36†Цƒ7окЋœ“qvяcР'Гˆд+От,еЗ­А}іaEс`єN4<уg-‹ЯЕЅВЈ@ѕГвwюќBоV™ˆ\ђЅГ3§™взЅ)uоa@'gHiЮхЫ НT!ш˜РПь‚"ЎƒЋ/(мДЬ‚ Œ@р_~{­kЗ'ш/7{,™ЎЩоC€м9ы//ђЄBЅ3;г‡У‰.в f‘Ј*U˜#И\”ё4бVЊЇє›ѓ@VrTI3j ƒ˜GВР$T2ir}—іеРОЗ4dQєПMaXУухfш>ўЭYaњќь-оѕПЅZU•ПcТ&жВ]аІ’грNgаЋТa]OуЏeJ/vЏы*,ѕѓ2ПпиъnЉёд›.<Х“ˆдwФJ"]юЮЈJ+П ВŠFъKNNXЄ“UЂJЪUгŸЃ3ЉLЇa№ДHзP&зЩZ'эJЅИ §Ј zЎЫЪL=­ЙйcSё2Жwхч–ЮЂа;zйЛ2|“œТѓ‚чdОWSžGпЇ‚;Wn_(Л HъЏЙ›šе]ЊЗЫRоВЪjХй.›ЗМФ}XhaРэ8  ”pkѓt ЕкlднEVFЖДв`РPtЕњ1MкСЪNр‚зјˆС„вЄFь YŒ#вКщ,QŸх$И-[^'–{ ЕтS$;MЇљПDw’цѕDЮsžЈx#Н‘ŒЇ_‹n•?х٘YЏ@ЅІЦФъ1Диžіё˜Ф„Љ\ы1CИCМP…%k ,IћmtѓйD|щxвxЋКЭ„ЯEђЫЅяЛюКхpš›qK42oфж?якQњ…eb=нвX&C'Vоjуўгїџ:z+@МЊ[Ћ˜B%tхъ #u…ЭЖяšЊ•Сс7 ЫT8sВоЗp’юX#VKVЌ<˜RWЦЕЖBњЋ,)4nL№#щ™Žї‹Š/&п*BМПДHї%‚йЧ‘њž‚ОЈ`“)'#[€!SЇsEсE…яIћrA&x>zёЯЉЕT!Х(чЙаћŽcџ`фПe.9’ЩRъ‡Ј3Ы<œћ^*ЃВР„m)+gљ1иR%дЂUгЏвiЌЇC"ˆCжlч ИФmCW()o§Sб\,&QмУVеUEhˆЦЬџHЫ–ёЁфЗџС2Ўе‡­MО™—ŸцЗЗt‘v=Ф 'Jнz4Кш”Ѕ9Ч2r<хЇaЦЊЅ;ДЌъЊ?Ї?дФ’h>Ѕ+ЬKEGWН9=˜’c€h)ОXV†”X №Ш–!a;їCдБ/зИГ_рэvьYЦyдˆіYТxЗl5иu )ьрСЅѕF€LH•чи@иRћš„фГРк Ж ђCY@ аКХ‡WШ|уињhкђ[&)€/c РV[8$ы:Тjfр8Opчr,>`vф›Uџ 9PBЕ рR УBGЏџП‰ГјtЌ+Ф}ИДЭУk0В§l№Ѓž_ЮжёЋњšЏў|lнJЉsћй р\dё‰Тp+„Uљ)ЧЏEн•Œw6$J#ŠbОLŠдy#^Š+ЂЭРL~fY_ы‡YОM@Š з\u9ЎПс&|zбй Нљтѕ;E…šШPkrheЅ_>X!ІэNAYTуJ2}(‹ax­q:dиMHДYBnЪк _ЊuШёdT^Ќ"krš!ЅAЅ—y. š~а@IЎЌ‹ч”j* 59JXwv2'Z€ЎЃ˜l(шЎ HVŽї(йqOЫжєЄUСLzц "Ъzl@>є‘тњ_^‹Я^№y<ЙщЩѕјт ЫэnФЯјœe5ъХk-%™(з(?юjO2n-eZШ;H1­AeЕШFЗ(Y^$* ѕ\ƒ.ShKЬшш0b‡ў€:сJ†+T . ‡(BАќh3mврažќмRЯѓЧфXWнњБrP@/›yШdњ?ЁAы™HwZ€TB2СŒюџ”$Џrs„ŸЅѓ63|VхqЗ№ј#KhМ1­‚EM•€ДръЭ{&.=ОЉ#ЋeРOЮPИўRП­NЪw§ьоg§Yѕ2IFaЙьА…etў@а–‡&}Ѓk—6mоŒUkжтП}ЮќќEИљJQКG(АŠPƒр2ˆЧflЌё~Cc ШпƒэQwє=DgЁю KІ“‰:ЛірЕЊн~J"BпZŒ)+$›ЃнRcКЎ№№ђћА§ŽЛЙƒ7ьŒœ-eEŸ>CGRМПѓisZŽаЅ˜<{!F&LРм9Гpј+ўз§рЛxљ›оŽЛя["+baAPКЌTУ=“ўМ1~iйH= њŠkcќЩkЃЦ2€GўфДь`œїw6жzыС|К”]з• ёБІqзZ“N "Г”4ЪP‡ЗЅ+šT&Ю#ŒЌjюВTЄf)a&MtFYЕ\…D-mЗOЪJтЄ IГ"Ё•Ё97СenЋ:}9Џ~еЁјоїЏ,ДOхЯ ЌЌ… WЙњ0a[DU…[Де][#+оWЉК‰љ1’ЮЊ[њцЊУ•œ} qxcдnžWбKLUцњ6эП–2IёiZDЂLZЁЈн:”_GžЁƒK{йхWте‡НВ&гNхЯфtџ  -Ђ“LЁ} фќzьZПн?МЄ‘мТ6%“ал*ПTЮxњ+ЗўшЊЅ˜0тќ=n^їО§ЅЯaэнРIЧ}?КєXwЯёžwМ •&Mшсу~?юМхзXё—?т чЩS&cДп`ѓXƒЧV-ХЏz%nПё—xфЛqгЯЎЦО{=Ue`ЩтСeїрЁœЕыБ•KёФЊЅxjЭ§hрNhWuџРПcщЭПТУїќпИрll3uŠыqk1id.8уЌћѓ­и№—псCя}Зы;YУДjф&…П7љjмђ‹ЋёшŠЛБьO‹ёЎЗНY8cъ”)јтy‹АюОлБюОлё…Яќ'ІLž uzt-О{ёExhљн8хcЧсЇW~ЏИџњЎЃнШ=КЮХЏИЇ|ь#*ў2Ьo}г‘Ич‹БyуJќї5W`Їѓ…Nzl^џšУqїcгЦИѕ7зbя=ŸЧ ‚I“&с‚s>uїџ–н…НяН эГзѓё“+П‹ЫяСS­Ц­Пљ^џкWЋ~цЇ &щЃюЛnИiqЂ|кєWаІПК\O>,лзсх/{)X)Lš< Wм‡гgИazќA{ЬПa§wcэ§СgЯњ4&NšфЎмЊ+ŒŒє№бу>ˆЛ~3ж/Л_є9<у™ЯїœЎWWЉ &є*Lш9+#/іЊWтжы…ѕЫ—р7?ћ іzўѓаЋ*Lше˜yvмs?МњЈЃqр~/№ћ(] “FzўЦƒкOФкTršћЫпКGО§ŸqвqРЙ^„зОѕ8ю˜їbвHјзЦK>Џ{Ыбићр—рЉбQœ№ЁЂЏŒПљuGрˆЗМ;=?ќјчзтьгOСXcбЗРЄй;cТь]уg-D5{!Ьь…Т|ї;ёвƒФпНўmXИппЂ?жЧi'|HFр> цЮС^/9{НфPМєХЊюL&“lп›ЧМчqвqФБ;Гwп‡љVДџ e”O=ё8Ьž9{ќ2ь§тПЧќysqђG? кE_џŽxѓлqђGУйч_ˆWНў­8сCЧH=}э›8тMoЧЩ'‡Г?{!^uф[pТБЧHў#8 ‡Псmи~ўnјљџ _ќьYšHѕ†зсхЏ~ІэИ~xЭOёљЯœ)qŸ8сУX0oі:рьuРK№вП}qDл—|пКє{ищ9{cл9;уƒ'| GПѕ(nОъ*-lєofЭœеkж" fЪv0SЖ‹ОѓoРрЫ_џ&о§я…wј+_›ћ;ЌпИQžНфoЦžМ{xv\0'~јƒрУ4яя{pШ‹ЦЁЏ}#іичEш7}ќЧЧOŒЛ) WLЈ+LЌ+LЈDК‰Ь №ѕЏ=‡Пщ­X№ь=ёуŸ§чљ)ЯыџњOяТСˆWПс(<яEctЌœЗJЦЫс<ћЩ ЖNђтƒАч‡`Џƒ^ŠчЯУ‰њ@рГHіІJЮ…g=k[ќѓ;пŽ_ўф*мvУcз]тиу?€`Іl3eћИ'o'cwъ'NФьYГАз~/Цо/њЬŸ7'ќЃбђЗ/Цž/<{эwАыпу?,Д™IЯ„™єŒ,]pЬП§+N:ёxћ‘bіŽЛраУ_‹ƒи_цдБЧ€]wYˆпн|#~љГŸрŸџёxжЖлњю _Нz fЯšе*ПKЗ9@ф` ёr0I"ЏмŸЖ‚хђ 'GхЙ ѕВхBђЇ в ‰йђ!uЄyrtЋшy:‚VјХrKЯ5ˆЂhpijф;5 lP†ЉКК9jƒžАњsиР§0И1M:гЇeDWZж0ДiЋ‹WЫЋHЊМ-™–”Ыuщ;›#€ЈОwveЪѓSh@Ш5оu sпcсV›ЦМoъОuлъЦњ Цњ`К›іјЪj+rŒWЩмЕЭ•П`ЅBхЗъ97‡•˜ЦпY-уWLrЕc*^*O7[k™4МэкуЗр’OŠŠ›зоg-p{ Gћ zН{р.LЗюЙхзxеQGуоЅЫ@Dи}—…Ицв‹ёœ§_€№чХПТлџхмњ‡?ТEwMc№иъћ1mСЎш7}YZ|pХRl?Œі<ОfЖПЌЕxlеL_јT†Ађю;0gЗчтІ_ќo:њŸpпвeАD˜>m~§гтйћ ƒ'V-Хю/<ЋжЌ…%ТЄI“АъЮпaлŸу^ЮЩпшГі~w;šР]з_‹Уоі.,Йџ„гІсЗ?ћ!vмлЦЅЗ^WМёуоЅїіиe!юКљ:˜эчЧЬX˜ Kўp#ŽњЧїтЗПћ=tтћoП/Э›qя’ћіиmWќфŠKА№љ/rE<К“І/€m,FZщО[‹'ж.У„эч‚[‡IгцУZrё;ЬwёыР„эkSЇLСњewaъєюЩу0НАrе*Р”ЩSАaљн>žАєŽл№ŠзМї.YъкПлЎИыї‹нў:cАєŽлpЩї.ЧЯ~ёKмЛd ж­пk-єXŠњ(/иŸ|p5ІЭпO>Й)ЫИєфУD*ЅіŒg<мѕG<{ŸА~уF\yщ7qйWс;пП€AѓшzьОЯўОнvй?Оќ<ћЂ6Зпr=^{длБфўe гЇOУтk‚ні~QИЗ]Нрђ>—Ц/i?Бn%vпgЌ]ЗЕ1˜2iюЛуї˜ГЫ€[~ѓKљЖwрОћ€%`кДiИщgWcч}0С>ДеіsdЫˆk4Y‹нї=їоЗaЗ]тЧ—_Šнік_uNDzПќлу ^„ŸќьZ|яђркџО§~?NЋћ—ЧШ/нзŸ№ђУ_‡{я[тЦї]ё“Ћ.ЧТчьщђmzЛ?o_мЛd‰яп…јёU—cЗџЕwTm~,€J х/ЙыvѕПп‰поz[Ё=.єFzјћП{)оќЦ7раWќnМi1^џІЗHќдЉSБaѕrLйvZдЎжRWЪŠWлСm1рќ•;\еpюg|КА˜еЩZŠ–Ziє5j]–­–ыД‚eцнxt‰^ТўДbЙЫПШdњc<•ІЫєEKй Ьќ\ŒяЪ‹фe…“47Ё5ЧQеOOiивbž&ZZ_SŽеiвŽJђ ъЋЈ_еt|:щ+е‡ь _Оз.?ƒуw:ERА]ŠqQќ" ˜Šoъrѓ lєE‘:ЬCq}КЙr;џ-Їбap§Я‚іУr0ЦрД_6ИћКKУžЩ смr]™шpЩл= =ќ0 ГfЮРЊUkнЏXЙ ГfЮ Їљѓцт/їму/V72џ —  БЮй,‘‘SгЮєыъkњcЮѕВ}4Fz=Œѕ1wЮќюњ_F ВжЂЎ*йkЖ|ѕQђ>ЙS&OrѕыеЮуX0wю[|]Ћ|ю‹й3g`љЪUђћ+UJVмЉЄ€єз‚yѓpч]wѓЬž9г•Pўь™3#zžzj4|пќ`dЄ'еEёЃЃШХиwЏ=qцiŸФ ій л=k[ФСеЩ@žмєЄ_fwL<{жL,—6XБ"ЪџЊ#Тqјw|іЌOcнvСуO<ї}ш\vХ|ŠnЩaэКѕ˜;gŽ€ щž3ѕнxьёЧqХUWуo; _§цЗё7ˆЃп§o0ІЛlu§ыfгђUЋ0wіl›œ?w.ў|ыQ•жZєjƒ‘Њr>ХШ)v џВъ%[о7Ќ_‡oБмДi&Ož,'ВчЭ‹л_п*Ÿ‚ЮRЏР ЫЯ-_БsgЯNњ3`Ш .&|ћB№ЄK@€џх+$б,ЧьY3ЃДЫW„јх+Vbюœйэ:4]ЊќѓчуЮ?џЙUoœA%XkХ2GŽЧцЮ™ƒЕыж!ъ?ё•њ#KSДlщДqŒљДтSCџŽђЋЬйhЃшaАсщ8НTОNЙrАЅУLвЦvЛк!ЇФSФУJ9ЧrѕHLyЁˆqZШLхё/г“ЫŸЮ]ŽA№g‰0ЅЌє aPuунЅБд<> oeП`Ч8&|'/у вцŽqЪЕЬMг9Ф­ї9=?Hёp”XЭЯNВJ^Е,ѓUЈ#ЪЯАO]‰ЈЊc–Ќ,ќARтФЯqcœJРHWPхы /W4x5КУ%K9qТFFмЖдІi06:ш7 –ЏX‰ŸЛ7Ж›П vXА+Ж_А+Жпqw4фNq@п/9ђ>HрЛv‚ždПJN‰ѓ‹eЫWbћні„™Б#ЬєaІ/@=c'щАеkзaкЏЕ`оЉЁ­—Йь VЌZ…чюБG< ЂD€ЕызcСМЙQљkзЏз 3пЫвчпћцW№я_…Я{Ь6гБ§М] ™mЯъ5kБ`ў\pьiѕМsз=їрнџўь{аKАэь№œˆЯŸЛnC1ЉЅ†Д’˜ј[ї{|рўО`џЇИнŸо&љћђХпТ?Пѓэxгы^ƒџьчиДiГWЬ.џ‚љѓЅъѓцaЭКuЮ–­Xщ Ÿ‹ ;ЬХЄщѓ0uЦщ0f§_CkЃ}чЁfЌiœ УІqпљ™xЄaЏ $d5о]"‘јбf:x‹еж“ЎO\'ѕ›UUcсN;тяyNњ№№‹Ю…№ƒk~‚O}тЃ˜9c:fޘŽџ<љD\yѕO|>їЅЏсѓчќ'ілwLž4 Л.мŸ=ѓtмщщ?нёgМїнџ„ 'bюœй8ѓдO8B*ЗёpЮ™ЧњЮf96жїї;апИф;И№мГАЫТ12qінgo\ђЕ‹м‰lпnЏ‚iЭV­Y‹У^vjS)&!|щ›пЦWЯ; ЛьИ#&NС/и?ќЏЏ “\zљАшдcцєi˜=c:Ю:ѕ$Ю*eуhзA>œwс—ёеЯƒ_єBL™< ЛяВ_8ї?Ѕ€ЫЏК‹NћfݘŽY3ІуЌгOЦхW]­+@[&-еs7Б.M™2ы7lФ“O>‰vœЯŸЛ(_—cB^свЫЎРЂгOХЬг1{жLœѕЉSURƒŸ§№rњђПЧдЉS1aТІN™‚‡z8лˆ^/cѓЃџo<ђЕI›‚pZЕz ;єхшѕzа'х` nЙэїиДi3N9щ\бъ;`бiŸФЌY30sц ,:э“ИєћWŠоџЪ7ў _Йр3иm—1uђ$Мџ~јюЗО7)ћфN]ї­ћ]WFzLЪеЂфпyя@иљЅo~_>яlьМѓNС/|~xЩХ %hрwм‰wОэЭЈЋК5Ž‹N;ГІOЧЬщгАшєOтвЫ.л˜S<ŠЧџњзG№хЏ‡МќpМрРCАtщ§8wбЇЃ<ЋVЏЦa‡Оu-ІX€—_yё˜5s&fЭœ‰Г>}:.ПђЊИЯ8 ГgЮФЬ™гБшŒгpщw/‹iщРчџy|ѕЂ/рР§їЧ”)“БћnЛт ŸћЌФŸ{і",Нџ~М№€ƒqШпП_ўкзёзG‰цŸ№І7‰]}jПњ$€Ц6Цђ[(ZЁЫZ“юyLhК™ иlэЗ ЗZ|ЉрЃШ87!1хаem ŠИў.ЅŸ6­0‹йЉ#rаЬeIћ|KCШ‘/]Дk aуяМЧв&бЬРЅхъCyЌAIР,…Ў|‰ бВ?ъѓLомт!аІ€‚TŸшЌz\:hЩNЋњYз'!}‘ЪQkл§еЉ€%1ИфП2љwCсЯэПDи‡i-FћсoЌ@ІœЃ;ќутШƒSїЩiЖ&DЇЙЙЩ/ПыюЛWч[xіnЛрeGМK–,E рŒs>‹zПЛюЇј§u?Х†тДГЯ<ђНрЫ_Уй|чœq*юП§6\}й%јнnwЗvXТћO8 Џ~хЫБъЎ?тšЫОЫ~№#74&јHzjЌ/`вјЇаЋ{јЪХпФ ‹oЦ%_НЫюј=Ю:§\ќя;emтvД‚фуO§4.\t:FWн ZПL2žџЅЏуз7.Це—| ]r'>wцщИјвЫРLuњ9чcхЊејгo~Žлoј…Xl'$јўДј:ќiёuXПa#N9уЌИaŠГr]Ч'сџђ>|њд“№икeјХеWр*џ"яЏіЃгЯ<ЧЕџ–пріп^_]–„‰,ЮНр 8сиїcуђ{БќюлёК#ЧыпrtЁ@г~цпхW§/zсОxіЛЧxгџв)И№МГ№дCkа<ЖnЃ†ДРWПё_xц6ЯР/ЎћЕ##qWvуЭЗтЮ›ƒлoКЋжЌСЇЮљ,иїу…_љ:nXМW^r1Vн{'Ю>у4\ђняЙгy …—у^nz=wУ Шё7r0fјœ "œџЅЏсW7о„]r1ўzџ]јмЂOстKО‹№‚рјь˜| яџ—Тиƒ+AЌ•чpут[pч­зуі[~UЋзрєEŸI ЂВbхУŠ•Ћpц9чaЯ§Šўј}žџŒ>КДщЩђig`уƒтOЗн„?нvжoи€SN?#ТпŒ;~ nПэfЌZНЇџч"fацЧ@›s?ŸzєдуQНчюBœyж9ИрМsАnх2\ћЎёFWџžћю‡3ЯњŒ_JїeRИј•<ћй{`ПОW\yU†чЦИ?;w‘Чeг R-Š'у‹k[нƒдxтЫM_\з•‚иєх-bЃO]†XK3эшDO№ћЉЬІRdWЩ\`Љ,•|Bœeг(ќ§їёшсŠР%ЧлшLVЛƒ^2TМІХjкsdЅ–СН ЊЌEђА#фъ!Ф‡vДŒN7’њ-Я(~yˆЌ™\lИ:1В$ŸФ№o—•œ Зdај-ƒ}ђЇЩхЛ;ќУ:iД!ч9ФњяЋчhыРЄРЙьЏPэ{„ŒпџшЌ0uЏv`Я;!ЇРнВПФpЇqЗ†9п(Уѓ‡ыМ#ѓЪ-Зїќ-5фСhУ&\ёOhHTxћSя?ЪНYх@Y‹)5@D†ы2*~ЎшJ'kб‚з)ёкZ_’l™ќVdћDwcЋmZђG(8ёИcётƒРaGеŠ7JйrU$I ођЦ#ёцзПGОѕn.ћ|іЏkQm7;Њг9+wќ6RЙгкМ7’ЏПт7BРŸъцSt^ˆY~C$ШўШРС-…‡ЁЃ[ŸOуЎЎœцњU[6R §л§0CG6шБ щј`MЫ†QфЋœА&K!_!•ћїЧ?ќ~s§ јє™g Ь›ЅEџ4jўІ`Ьд@ЏзqЇЋЊpэ+Ы6~_me*н2žOЦЫhIыЖ9з 6*GАŸ<вђJїѓ№Єƒ)вrDІJš†4_†ЌД%ўž&№Њї•vfыВNfт…”`J•Ё€s§–SЈ7’сjќВ}”Юе\шˆ|&(Ф›јk–Œœ^у :,Ъ?H жA­Ќ™єњ9Ы‡Aќ˜МУЕ~˜ЮБ‡ПLСЇёW[ј*K}Є…Ѕз'Nъ ы•ќ6јѓ зbЋрh z‡—•ПYЦ;гlњ}ч6Ш›D „AПUKГHЏз“t–Sш|мнTЦпbcбx№н•m’uўшЛRRЅЮс7ЇHШъS.Iy93v”U=hЦQT|iтB›1B цС&ЉF%S§Њy:ыƒшдѕ~њœѓ€s’4ў…„С$зЈѪIёž<ћ;pos‰ЫŸOѓde zаЋЩЦФ№вт^Ќє}л|Ыв_УIоЇдѕ DЫи9~Ыђ.ЕŸE†рqЎ+Їd `0THAVL?_љUІk 1ˆ—)›ъUGМvјf ”E!ЕІq ­PKЃc.Ў'8Цчu-ЪxKпуоE]"‘е-zUsŠњлdЧВ6Јл7LЇё‚PЂo<`}Ј0žВ4Ѓч:1“<тЬмуr€Б'щщ‹IЈфЊo§І!›Јл•‰+IŸGpJ r2Кƒ/а>ь–ЃK‘ѕkа6IкПВLьь_ŽЇТАшx•Ч9#/%IЈƒдs9qbјЦEIЫOтQkcŽчk"ЗvjЉгмŽb0вЋAжњC4ЎvА92a$Ђвщ1r Ъу:[oy‡š>s<ІJpТŽ%ь˜•[DЄРэBмџС+ IDATщй(Џ„Se*– NŸФCІвa2„{эTw*N‹ŠЬ€-gЗй9л%Д4­™ђ[щTZ$] еіV~*<.ƒŒ@—RаљxYPЈМб˜Tš'з-ЧЏЎП—~џJй:QWс…&И]Vѕ^LьѕPЧЋМ…­‘ьHќJzgАcЪJNр?ўAТgХQЬЦ”чдїbž4=w-оЪa‡bŒ n'/”Q.Б3HAkЁQNV."™/ѕеiЅ~~TNщѓЁђlЙ™ЂM$ЧxяЖS^•тu7QнЭ`ЦпД$ƒјЎyу|ЭСєћ7њ—y_!‘Э+PQь™Оi=ѓySЅ˜•ƒЅёŒ*l?Ю…Lђr4ЮiR%лsj@Оg™~0ЙЄˆј™ж[ "K%[1y,ЄћRXбEЉ<ƒ,ХeЦ­•5лиAqДЩФхЉЧЉ<@WєŒчкѓ!ЊRЭ—.вДБ@[„[[)нpъёI^”Iх'ОёЦ œ+єМ)†М˜хz ‹/›В|1О `ВЎkиІёkЧжнгXЁ–0U%ЫyВюяО–лAМPу%яЦZXkеН“Ў-UХKтœ–d)ВёУ`Н„пlое OЫ1ў.Ы? $AƒF~”(r„Љ7ќtщљаЉŸ @!—І7n  ыЏЇtСdв ЈЃгj’OД'ЄЩEdZo0ќk ЗКuВŒ]y 0aк\ПДjrЗгTЈїiУ‡0Ю9RЛC6$KпМЌ^vŸНј"њ­PЫZHёg’'_ЖO /EщиЕ~Дѓv†\yi^?*ЗёUтNяnmЖ­PFХBsМш?МЬЋzЕМиШнъliˆ@€ў б+$e)7М\!ц№Erх+ќЕl=wC“mЌМ !й"эЯJvU ХršЬ}Н„X…ІyYъЯЄг2rйфї0 /•aƒђtЄIw—ђV0ЗЊЯ№#рєŒ€‹ЈŒЊgІLшеŸЅF”Ќs-E–ЪЄŽ~гcІљBзЉ3YБz5*ИŸЦЊ§‘ў%IIwџЛsѕг’žIƒEвSч')щО.СєЛтoѕ †Џ&ыЃЎёг€ D:ЂšnZŠ•шђєt†TPЇ_д'BЌr‡{=TuФЗ К.0эт ƒE)яƒNKUUр}Жкъt­пЖсїvъ.yУ<ЯsЭїЅЃm&(KikЋ Žё"хџЬ*уAЁ% З& Q9)8щMэBКъ’Џ$ЙšЧz,ˆЫ0˜Ш -#5˜Ш‘гM,?Zу=ЬќT…tЩЖ–еФm•пЊ?MнЊzоŒePІЎЏSL%rP‡јЩLЦ8ъу#№3ЎSп ю_ …ЖGSЂex@Ш+Њы>Ёџщ &ЧыD”oPc§ђ2…Н”ьzг]яcМ_HПœжћ:вžйй"ФE„іВuдn…Д М P S‚*<Ч šСвМ-хЂђДF(-ЛELЧN“3˜ жсчV‡œ”QV oщ[KH#ЉyТ%“]/ ђЛаЈ'œТU–^Й§Р$ й}s+РпСэв№ВvпŸвўѕџќ!ъzљЬё.eОSR^‡АNу#ўЁVt‹ШTpvy!’+B‰‚ЪeD2ИАl5№ШiЈ/Жъ2@UŒq{d§UЎж[ђFЁЄHЭЫ.•ыћ+ьу5nkQBВоцсВ9‹hг8ПР–Џ•5&*;XЦ•–’ЯdLr€2З’# ЩиІщЧaГЁBnlU8Ž,­ККЪ.ŽЁŠ.)@?>ВЯ’х aAаŸ”ЯрQ€ŽуˆЖ$њ^ы]Nёѓ[BЎ—™№КЊ’ЩI^Ж&л~јH/УјНПlce‰’vPk>”Нž“‰"sЭѕВœ-ђ’]Ту<џHЫ8‚NnZ_ЦLћgYє=MќЄЪ4К№є{6ё8 GЧ‘МažD ,ЕМVy k‘š›cƒшЬЕЗ Ы8Ix#*+гTY№ˆЗЁё’{І~цЧЁРrf\Z€LšШR™Љ#'ЯIˆ eфp‹т‰ŒхSпщмђъ—‡” ‘ЏуœЏIP`ЮМЙiС)cKдŠœћ‚dх7ˆМ§’œI?­жєѓ[KT!t.eЁЋ|ЩЇ?Uл9Є:'Uр)cДx(Їь;тJћЪ…dhBF‡пЁ[Ј=В^—јœЂdbfRњЬФТ- €YищЮ‹A$+aЖЪhžг-уƒЦг"dњќ•!є*уNl#@ВЯ@вЯЉкР9"їVѕОѕN]-Ё Ы„"ЙяЂ‰žсЋH()І’1ЄќxFЯ3 АhХHОЇѕГ%#тЙ!Ы+сeЗи(х=ѕНTдаВБдˆTQ(6•X&љЙQќ ’ЁЅ:&/є6Ё!œт†чmz“ШызєšXBЌ€єг=v”QUUюV4ящ Z"T<‰Рд:=(dЧЌ ˜‹Ё#}ЄчЭј‹&t`‰@_щљ8ˆiЉ–P@Rф!ОыњZ8ЬЧ)viг=,­Q!IT”TеNИ&z@p@J›ЮXЊK'у2ЈЭiQйYкZЙ$ДѕaЉH-“3В=­+Њг9EъUcžƒцaЫ86ўаЫ>U&SІ‹РoЅp:эў‡р–хаO›нІ˜mŸшœ•F3 ™ Хч„ЖтP†Fя%$oTкœdŒт • ”НІn“›ЄЂ$=сZ*џ[–MOИˆ$“Ђпz[@  4идuбвa.]Х Q Tі.аЋ‘ЊFэ_о­wфЪзnœ!ЉЎ€ ЕKr7 ŒY‹ЦBnU ’b`nрfЕц]0YЩq’0HЙєвІAњ‚%N?„’ш’3уР [˜! JиІ eK‹юž<8Ё1ЮЏdіЋУ–o—Ўi9RJм?І”xИwo•Œy§iМ73‚сћyлcYУ€šЦmСŠЦЫ„іЕЦ0&q-кЌUћкsŠГнФкеЩЊЅ ЅЎ(ОЋ€BdЊ;Jэ~:BЋ.У2Љюћq*јьъ…6GО,cЋіa`џOKцЎ„ЩяA2Ј ˜Ў0Jч™Юицу(dY2СШT‰[@QсŽЌЦPИayЊŸК^ЦtљDhЛYв}U˜њЅwМ+ IЇЙ§Ни›V/)&ž4k'l^ЛЌ?2{!Цж,-Ц›Y AkХп_ŽŸО#hухјэчZYŽпnшсŽјmgƒYгџшкrќ3g‚]WŽЦLаcёлL=Оa+тw=ў`1ОšКь—ѓO|&шЉGЫё“Ÿкєзrќ”э@Ov”џŒщ Ч:шаНц џръb|Е§4Ў*ЦOŸП36Ќ(ѓз6svТуЋ—•ыŸБ§ѕЫ‹ёfЛ9 ‡Ыє™mf€__ŽŸВ=шЩ‡Ъё“Жm~Є#ў™ Эу7ё ЇлŠјm’k’ј л€FŸшˆŸ }В#~ЪжХLюМ"бL˜ эŽ—а’ЋЌ`+ Ўќ§иa%†? €mдK†(rяUnu'”†ё[ƒlг„8Џ€єщnжЦИCu]ЁБЖЅyЯАЌ Iф#ѕК4ЮuHц՘ыЋшk ZaЇtЃ˜\ЁU)ыЇPfЫы’TˆпЪ—.mˆсС’•§вюOыGVЫR™%в)yщ&sњЪ і?ТGpю|HfOщ$САЫЬЩc"rˆ? Z‘GoiЙ “z:‰b† <Ѕљ‰ђЯˆЎBвŸљОssTTH @(Z†-є…+-|xpЦs+R† HъэйI ѕdR /с?i”š%Q§*Н+ЮпЄфЏ:ŒкXŒй"yлђHЏЦФКŠЄі!Щx1эЗмяайh еїˆэ2уЁй6чЮЁKјˆ0䉆a<-и щSНфіь›!юi ЊВa‹.щЎHq№Јќе‰F–ЄЗЯБіћХ­еКкј`НД­§>n№2y8PЗКЊ0aЄkєЩŠлЊЦ:ЁЄаhЅžˆЪЩ9Zkу1кIёN‰Шp‰0šO‚€4ЃФ”TJв>н,їџ$D!ШŒьш4њ7щя&Ю—u–žІЩдzІбзi’БЪ0,’Ъ0Iš5ЧQBkы6EК…л шјˆђ§ЏІ”›єƒH^ч5io2є&ŠP—Б ЫhY€l7niPз):с3КцўrтY;ЃпЕ ={!Јk™{цЮ uљЇяк№@9ўzћ™Г,cˆИŒ=`™sа2ідi '6vФялБЬm&o кдБL:24V^ІЌІn‡Іk™|›iАƒ–БщшŸmg)їooк<є7–ЧЗž6ЭЦХјЉГр‰Ехeъi vЦЦŽepГУЖ ZЦИЬ=`У0ЫмЃЫмƒ–С'N=еЕ О•Ыму/ƒbр7'Кƒ7pРСbэнЄуіKZoЙ6zИіi#Чi^IЙеЦXITJ‰1ШЌLSQИ$оh—?ќЪЉQZ(\ 4Ж№ЕŠг<нw vaaЩGmв[s€эКp>kœLїЇ“'КBњПмНw˜Eі7ўЉюОwbX˜Р$дuLˆЌ ˜EQР5н]ПЎК&Ьˆ9ЌЈ ˆY\•5Вb\н]зР Ю0L„™!‰ sowНTЎЎ{gF|ЯОПzž;гн•NЊ:чSщ”ізHзpZ_vбљ3КN‘Я&%KЊ@cЩ[хI@ŠЋВ&ѓЗfРHae–~AAzU˜ЪZ 0ВQ4_Ж6FgdЧ>Ў„}=KЬЪЃщ_œ‘6ГІПC!Œ ,фOzєFМ…(ЧќЕ4­бЛEЫBьHўЮqКДY4’гC”4К$JqJeBфГWА‹жЧ”ПьX((‘JUЇ•ьX#cНВsiЦG*em$ч§Њдиr!Nw‹<ƒох№јђv2С– УЖIGЩЂJЩ>пr™WIEy%•ђ>nйєtўэRЊёS№QЕAвЃафЛU‰$ЛRЭі—З“Šуh"$wЧXšІOчїЌўzћЩйA ЌгЧЧМт†›Lщыў1E@’Ш@ј;”‡ј’ЬЯžПг_уo"ё‡Bбhf€дЌ$пŠ„я#™№сЖo1•Y9O’:§f$3§№ъ-s žяС8 #Ѕ$|џ›а•вК% Ф““CžvCYq[–‚'кŒЅbŸfx_WТo%ШpС.mаJW4›CŽfЬ"Cиџ'РЄЋPz=и§ХVнШCз‰њijн@К–т.ёЌhRЋ{б)Јƒїz{rIћYЕОw t3 >lжI{•р˜ФПgФШФ #гЪB7Я#cзrэ/u–Ы­oКу$˜dz‘п л4…Ћ‚;iЄЮe?›щА˜х(PІНˆ†я@Б<Ќєb$ѓJuвЏ=шє|ѕяЎŽa-KЇШ”ЙІф gбешЈљнизgёФHо*ˆhиФђЁъЛ.@˜­+U­v‡Щ4J„ЇЁљ sdжz–#3йџиЫРgW{†eћ$)д•œМJОЯУDH…ц=лњтЁфЇЭ?›ЏzxЙ‚`W}f‹?c|ы†Шдe Ъеqь<;ЁСYнB˜ђN™нA.ѓэ*шА-к бш №|пё<~?6E"№ј| @:д€Џr~36Є)ЋŒr \,qSЪгж|а(’m:ŠBv;Q€/ Yк F „эсє<C•—Ї…0їШK щБЋEЛд­К0ЖчteіАЋUдm'кŽUЗ.’dѓефѕv*Юџы.#п2.нЯіяЂўŽе+Џk1yЃЫ тAžіT Ќ~$t•}Bї23Э mЇfћЛ_Ж_эП+Јўn"АіQЧ†nГymгрЉ†=ˆU,ЂЇaЧ%ЮjU9‰Гz4Ч{Fьђѓк3ЉЉМuСkJxJ6pдЇ$и>2œŒhхсhTіlЬ‡dŽ#™ЏЧqхi З:Љ­|]Бг<\Ю.“цDšFкд*“Ю_€Р&–Аі,Fœr уПй6ˆŠЏЩxвo+ož‰uz•"U9+Иђ“Г)J7јe7ƒЄ#nуTSыЧцрЦШ5 щlЫиuэГД—ФЅќввг: 3HеСЇю)кN–Ж‰~§›Ћ=ши%цГm+ƒžu.mg /6 am[oƒ Fљ“- ˆ‰С,Ь1–љЖOО*Ѓх№СxŽ(@;1L$НuІhŠYWR.€Ѓ‡fхI8Ц^2ФгЅ#Lћ"\рй•gFЙЊХЗy …бїRЉhПŒЅlMКwЙqp"lA ” bЊУ сЌ‡з…Qa,rUxAŸ&„ ^Љ|ЖќС@ŽTt"7ЖєшОHб‘fЇЗ#]˜rХЪLЊЄ#jнЏЕЊ{h<ЭМ[m;г–†NтЭ,ŽЪе?ШЮЭШ “ДЂыГтЋ.є3ekЯйРБBЙ1BЈіЗ}ТЯЬї393яr> ОG@Ѓщ(BG*DGЩ™oбO™Ё|6ƒ)њБyzфэ˜z"ž‡œdЉO™Ч(вaШ \p—ьр П"lЖв#Ф@)E*f{+љŒ$œ”нхѓЛП)п“Щg!Х~Э0ŠЄˆbuЩ{Œ-›ѕw=ИГ] џ_мЙКJьцЎnІёџ„Ы oмJбr?ГР™&ь[kt"ю7ЩоЄўЭ@Џ„йDLЇД;œд=™€Ёўj):c\OPз]О[xCцЃgЩd‚н&fp$gшэ—Ѕк 8–bвЃDъV†‚i:_ %Ћ‡Гж§є‚>Э 6q.зІ8@Ќќn‚gКБbщЗ Х-zбі2vZjtСЎ%инЖ!–ё“f@Ђ§зыMh[dU$ФxPa7RЬ'*€CЌ$D*Оч!№™­О4ПK[_zсФСJЉКйC№кЈЊ~апEh~ќOІŽk<8„TgJUѕъаЯnKБб­†иХО'cvвŠып§ЖМŒб tIxЫ$Ќ=?БЈ‡1@щОЃ" тФg@28 Аƒ6„щtЖi@Фу}•Т'r’|Тl˜†‚" ЙŒэ1ze/рwЦSС@<пhѓ”‚ƒ<“їњUЃЯтlKЅ7=інГ’„Рї™RљьІ8у  шшH1[Тr€ еNŒім ~ыrО;Ы]NŸџ—r Z[†љўџ Їwєю );nЖoнpDЄЁ% 5щU7ЦъVYІKO_—Б>OмЏNйьУ’$f—Ь=–ЂмzŒxЊ2Q,tfv\Њоr‘!ћЌEo(ёK9&Й Є-Ћ@ŠћЉЬlЋW(ёЪ•џџ наВs9“Ё.с’I1шm>ІЈЛшВ*ЊЫ˜+т№v„ТŠBЌNiJc2rѓMmId?љ#Fvpѕ#ђ4Оы_•њьЂQ\-ŒАg*1“г^<-]б$UHізѓ˜сqпcvѓФŒЃАЉЫ)пcЪ7rCЯ”ЯОИЄpTћр]€QpЇгуd•хК%L,Њп@$OіgPв„з‰ГKeQЗ ЫCmѓ8нњHюŽјPѕ.ПgюwNKппEƒ@†0"Ј>JGœы„З}ЪЄ—H ќЁ yНK‘ ф&$&ы:R!Rщщr/.јŠнщ јHј"J™mгtЅrYлчf€hФї&B (Зљшq#хžчƒRf‘@_ЦтІЫЕ“пT.‡!;QюylPFГЙš№ ’ &ђлЗЅ80%Ь№:ЛЗžяV rшH‡ќЪQ‡ќqѕWПз?И”П-П2b™.€ЩDџжyџ].Fj'@цgg"вޘqг!vЇ‚TBЖ†š?б~ќTИ8№ц"б&Яа‘ZЛ2VЩК_$њc+ГШсФЇ™@kИб[™х]џтf9ї–E#D‘KuЖаKLћЭqЄЏgj/VІNb~ž3СЄNь№ЂЁшžh„ Ё’IPXєъп\ГnYЫяH;6 ž-.qфщу"Т ТХ5Sц2 8“ ЖŽљлB[м0ЁзЃL$!lцuEkк‘+X}фKД№z<@*9F‘уD™Ь‹_z­Х3МyКžEЖX&4ГWЪузЪQ€ядэљЉpЧfo(х` R‚PЬ,I›‰ф? (Е№нžгhs8эgбя\iшЩхsгM›7˜РTOG“F2MбSэбТ›FБЭђЊњЩ щДfдyЗ"ХДеC:Ћ=Лo”ƒЧЁEыeр IDATќ $р%фі.CТїивvРеtЄCЖu"Єь>wЎb9A€d і@†Q„>‹щ{ž" Єв!(ПYJƒД6OЌwg]šѕчЌЃЌ3’нPtБvеоэUџv#ѕчШ—Lql?KЏкeВв‘Џ:ˆ2ъЊŸ;WВоЎ“nbEЅfрюВЯ.ˆ}В›Xўv0MfбжЊQ*€џ/хАШrˆђ`ŸБТыќПAюЯfŽсL0Љ4щˆЩ/ЁDc#г Q7#щЦ&JбuчЪ†fnѓvўБШ‚ЁŽ!‚ўk4Ж#šPuгП;Нвш3f"užgрњИЦЁœAД™KжXГ&GŒ:БТНЎАˆИжђЦь\~ЅRXшрSаІŸЮfГ7ЌМТЄ ЛŽ Vd%РgQЄBu{MЄё•ЌeЫ€ыыЊ‘[R)g.евћ@74ƒьTЂ)PхдњfеEжъЈ}–V*` MXqщкBжЙldЖНЕL О3=цY§xк D™uзiЖснX9ŒчьrСnэF*ЎY- јl$М^"ЯрyьАJN"DРf;в!:RlF2СжжфU‚Šdрѓem–xQЄТщ!…4Еу1ЫЮкGтГAPPЪƒ‰ѓtˆ4Пх&‘@A*Ъ+=О2‘`ћ$;R!я#y&<$Žt[Sii*Ыї<ј>‰Bž `ƒНTšЮPƒDз>y]v9ыВEѕs€Є-Ю\~ФѕёПбuGЦяЎЫФ8ЅOЛЖВeЌNГВ›jэ†гCyDа@”œ—Рв–q@"V>IYфVЇdЛъ‡BЮИкпm )й“уH™Єd%S9TF3Ј1t“€ђ\цФUТzq\Xd;œ&…pМd"Šх!kљZGъФз`"=‡П“+lІJЬ–І e‹ŸgF[ЙjРQ’F8—ЂЮд:єF­‡еS?б\Г`XЈЅ5yв5Ђќ& "3Rdi}@ž8#њПGЪt '3р{CЪLЇDDйВ`„Э…ќФђ™2}цš—I(#~т‡nѕЋ ‹Ў6›QQX4МtFщщищК“u~аћ˜|~€+'сГ+ i„ŽTЉ0Bšя*=№иУdТ‡ЧgC>рщHГћЗ}о7є.Хк­КbбчІ<ЯC*fѕтљьŽю0тщ0—a: J#y"л#TіŽ;pЭdј„p щѓЩЖЅBnЙР“лGЂ0DвїHˆ§–ivП8…4о/ћ’`Ў1co1й)гЛу:бjvЗГћIЇГџMn{јdЛlHс—ЮƒXпКшb+‰k№gšњC[5“AѕсЃ­ЯD{ ,4gеF;7fW­pТУ•ŽkѕTN9:ЄАдЇJŽЫ~Q9ƒ"ЎЙ6ІжlŒ Д6КЛсдд“&,ЮљŸгАілЯаіэg˜sћMШM&eцОяaъ”‹PћљћиИjцн7= д&77їLП ­+>Чкъ/1љќ?IЦ Š@Пo§~5ћДi5шїЋA7­Ає/„кЏ>ЦЦЦ˜їрl–Оау?ЌСг=ˆ +p§U—сѕ… АБё;œwжяѓlС%œƒЕЋОAыЪЅ˜=§fффф(Є RуЂо@Œў’кћ‰ §2 \WZрJbъх“Qћэ—иив€ysрќei=1o.ИwЖЬџСћяСќЧцЪkЋбZџfпu;kŸ‚Чмыuх'( yhu%NLЦљ љx`і]h­[жКИoж]ШЫЯчcfд§д“OФђЏ>Eћ†ќыЕEшзЗR‚џмМ<ЬžyZjажT‹Щ/Д3RљыJ!ƒ3p@ж ,нЖO?љ86Д4уњiSёкЫЧ†жfœ{ЮйЌ|x`ЮlД6жЁЕБїн3 љљJ>Eл6cќИqXОє ДoZ‹%ОƒНї?`@rык&ќдв€ѕЋ@i„mЉлИU ‚іжliЉќИІыkБІЖлRilKG№9Иуж›QЗє3д/ћ ГnПљyyœ§L|пМ Я?_ђ>–/У9g§ž$lЏeN2qП}D)(ёHЅвlŸ#дўFБМН­#…TЁН­Ÿw6𗁕_-Сє[n@NN:вitЄйaЁ“&ŒУвоЦІЦjМўќєЋЌKрMЕ5 HF@ФNDы›!іgнkOМЖ№oXзTƒm›ZБфƒw0aмёВ§љОЉW]къхиИЎѓў:=zdП5)C‹Шшhz+.r jkАљ‡ ˜јз+8 ?O‹ЗяЫ&ЁvщbllЎЦМ‡юAJОа[хЯхш­˜pќБXёйћивV‡%яМНя)їR{D >c2‘cQ.q ЊИь@=k+6ў0‚ŸС‡ЙŽЩгsиhьuасиыЗ‡ЁМO Ў™rБ$bвygcдA#0zьIЈ2щt7MНL&1эв‰Ј(+Хр‡c№ˆУ0ъ бйБМђP<ГwЦЕIўF<Ѓ=UПйŸЅ?эJƒРџ:cO>з]5wЮКЧL8 WLVJmфA#Аз#1xјHTV”уЊ)C!rЛР™˜hAчH—jоЄй€$бZЗlД1щ‚ѓ0ъƒ0њˆcP5шзЌќзO“љœсD~иhŒ;a,Ц;‡:ч_$„)Iфiћ%ЃЁDž\О Щмžь †мЋТшcKзXbЃ˜Y!`3’!7Ž’ж–ƒSБДЌDх3›Šuњ ,фjІ\tv­ъ‡?ћr1л“F\№ЇГ0rФpŒ*Њіt:ФMW]*Иƒe§QPЪЎќє +рѕЎщUЎЪЖsKXјžХ =‹Œд“.8Ѓљ-FsЊіи›еЯuWE~pюc{тiИnъИѓю{pЬ 'уŠ)%Gќ[ьЕпA<ь`ж>/›Ќx‘;ЃрЅгQ- q ІŠ{У5WЂЄИƒ‡Œ!ŒDyYЎЛњ ш{cЧ=c'œ‚^eUјчПўƒћgЯ”ЉOЛђ2T”—cШў#0dџyШAŠƒ\a\VмN\AЌo>ќ(ЦNјЎЛцjм9cŽ9~ЎИt2р†kЏAII1я; Cї;ххeИіšЋќO9щDqь8єЊ€—^{sюКЯF(Ќш>U0‹ь   И;—ѕ”і„’~АKY?lх ѓъK/Aqa!і}4<| JћєС•S&‚№НТтю‘§уO={8‡Ž<„Ч(bћ~Й}Hqе!ЅQICтBё0•„ЂrЯдШУqрaGcф‘cP^ZŠ Я;Љ4(!№<'Œ9уЮј#Jю‰ЗоyГІпЦfEљrzGШlГ “YЌYБЇž| ѓŸz} ЦŽ…˜tщ8ѓŒгdнLКјBŒyF~$ЊьЦњЧ зgЌѕЎ€GW8ќАCqшGЁoџA8ъШ#љЅхєсйПaў“OЁяЎƒАуЏŠ0iђЅ8ѓNя м=ј№#;nЎ›6wЮИЧwЎИ|J<џЛЧђџY…эF˜ž§ц?a•я UОI_Фш;ЬMIцK§Aљ№’љжr7бєUпŒй0лuT2K[PЪ@$—ˆвъ)p™Щр…aў‚gбwїНБcI&]>gžz’Uр р‘ћюЦЩgžяЊWrВ(&Fќ[Œ3U{юЫёЩUвŸьPФЏдEFZN9ёqќЩшеwwМєъ?0чЮПШƒt>_…#ž~mЋЈmяЕ|tхЉc“X[бтеЖ}€’pњѕtаШS1яђCYr1pпƒQ]Л 0 Њ^n>њe pљ'ocЬЩПЧЪUu€ТоНАјпЏ ђ7УЕ_|€#Ч†ъ•Е€Aњcљ’w9`TnZЭюЩ6Ј–/yc~wVжђє{§ ‹пљ*їи§ЁЙН*E!:64!ЗWЂ(Тцж:$w)§Б‡ —љшпЏОАрf˜р5Н8И7уc#ЃLNKп˜бT‡j–§ЦŒ•ЕŒўТоНБјЃwQY5H?`иўxё…gcЧˆ?YЃІк5! wzў%Е…нЃьљќЇ–Й‰0€ n6P †ЈУ€еп8˜”к œX“nіВЗ*‹'I'јцЃЗqмщdѕK)vлЕ _НџvЎищŸПѓOŒ9§ЈYUЏјїЦ"єлћ@$|~јRlYН ^a#+PендвГH 2NЫђЯ?ԘёЇАіIТТ^Xќю?Q9h/VЬ-Лs Ђ(BЧІVўLБy]#’;•€n^‡ƒїзкg^]ј4ьЕ_œ?аљžКXѓдЧ%:ЛlщЩя зќV-§Gџ;Tз09hРЎxmсгЈкs#!1Ъ,ШЯGK§wиЁW€5п|ЃЦŽGuЭJ И+Ољb1ќќ`;*ынj›ZrбXxТŸхYrJAЗ§„мžПbќ§i#r{юТњџЦЕHіи ЋОћG3е55 €W_Zˆўƒіd†ыЗўˆђ{ЂЙЕ žяc‡hўюk” иЩ3чЭЕеиБO_ЄЂˆЭанхžє}ф&ЌЉ§Х§ve3’!e[&T/ycN:ѕ TѕХ OЮУ>b‡hСњ†•иї ‘hjl!ь~ь Иљ лRiЄТ-WЪmWљžЧЬ Жї—‚пМ“Ž@ ­ѕ2bъ“аЏo%ц?њ† ?žpSX7?ДѓN=ёнKP9шзшHЅё§ъz$z—iЫлt}3ШŽХЅЈ§ъ<ѕЬѓxуЭЁКІ­­­ˆТPЩЏeŸcЬqуАr%k_……НБјЃPYЕЋЃІ]7 уйдVT иЋV­ВЂ,_і%Ы_—ŸПЪЊ€кяОХS{oМљOTWз Е­ QЄfr˜мЬƒюєo4еŽм;БіЗхљМyгz$ѓ{Кѓџш}Tі˜Й\П Ћ­ўO-рхЋЉAkЋYОхЫОԘБуАre-ТъчУї4њxЏ3є‡p™t›]ЂЏыл/шєЗ6IЁVuД0DЩЭкЅKXћ§зPНВ­mk(@7ЏХ Їœ‰{юќ і=ш0Д­]gdЛќѓ0fТщXYЛ „сŸЗп@х{Ћ@”‚ўдfТс^?ЖЂ|З!hj^ШЯЯУкКoБCq?&ч4VRё ыэ ьˆY||1Ceˆ­\Эdйrw„мєVˆџY л™TЎЁЉYдадŒ’"Х”ŠВRд|іž>Š"iђЅЄЈ MMLЈolъrA@)Kџ‹ущkёЗmлІžЗnлœЎшo’|lhjFi‰­дlуF њKњ2ј;LgёЕQƒЕ7ВЂМ 5ЫП6ЂщТ>њјcдЎZJ)’™2wНл3…žй1ЕўIuДЬ ›tFкLЃЫБН!Б DBє*§ЄЁdЂс9}JŠQпи,MЊ44Г%щ7T^VŠъп1В'a H•ІN  hЁbУ_•ЖЂЌ5_/‰ЅЏѓuлЖљК­ЃA"‘BЎЁy5ФсІ†ІеМ}jBOeЇёKЏ#~Ѓо\ƒ!”–ГўЭiЉolBIБъп{ŒлoКћ ŒwкЩH‡ ЄИЭќ7ШўwрѕN ZХОJБ_5ЎfˆіЄ=ѓЧŽ­џsYH$№ђ56ЪdъQR\Ьк№ДVЗ­CHРѓвЉфчх!— Ё HЅYKG”гјH>rљA€™зIEiЊnW*.*Dѓъе, ЅhZНEE…ьюm­dMЭвіЃ˜}OЅ#„TйG%„ŽaˆјўJžE:Б8€QхЭЭЭ|РчЁЁБ %ХХ№&ПЪQГb™Q›Жќвг3]'€Cc`]}Н"…ы,џcŽ;—N™„Y3яТ §/сєwЭњg[ЪлщfљIЧњ§1Чf+ЇoygєйB(SНd‘5гsЙlydŠBЕ(BvЁ ,СG_|xЬкя…˜uЧ­Ќ§nў NОЯМ№w)`.Й№ŠdSy‚[аЌ~ВДšсЫjВѓŸМЖзEЏК1~œ<ЉЗјГАQ‘>KЇyM њV–ЫtЫxћJEьnэК†&ь2p/о Н+A +”TёR1Т#ЛгQЛm@kŸ:гxћ,эRаKўќ MЛ–ЋхwІ№D„ŠŠrж>=/VёН“:ВЗк™Е Н}+ђrsЁP;ѓiikCey„§аŠђ2ДДЖМ>žy|.ўімBT§zНАKY^t~ѕš”W”C,РTT”ѓь‰YnI‰ЛъП•т№”*Kіy ѓU AьЙЅЕ•ё—чS^^СЪ'юзрО\жЮMВoaИЖvЄбо‘nŒœ8–t A)‘!цо;SЅПџОXєєу IщrњoОNбѓuX ш‡Юp$›w'`MЇЦh^ЬxEfCs‡џЁ‡Хм‡юGџЊ*ффф`јУАhЁ5aЦЗуџ{.Ю:ћ<ЬИѓvfЇЯ.$šWЏЦ˜cŽ‚`ЭРTшT+D pЪ кOс мhяŸ)QЖі OmЫЈDБУќ)DO=З3nœ†ђ>%(ье 7_}9v2;ЂРCѓŸТмЛя@џО}‘““Ф№§іС‹ѓ‘фDМ ЭkZ0ц№бь$­(Е6[ЌкЇo€Э‡цЮУмћgЃU_V?УіХЂgŸ4ј–VП~гЕ(..DQQoLПщZ,xnЁ_ŠžХG хЇз˜нќѕО\К 8§~#"шљ_Цэ7]‡тЂB”тŽ[ЎЧ ‹^сw5фччЃmэ:lioGпЪ м;s:ЫšЯЌ-xім~Ы (,*DqqnПљN†ЇFЫ@љ‹;ˆ,‰fВ[л#Def ЏЙ™ы)?,:єбF:3LРФŠ—јущ“6ђ›R‚?ŠРіXFLІXћ=lzфх"'P—‹ П7ooпŠUu јУyсЉП>ˆќ|ЕэсЁGЧмћgЁП~ Ÿ<3пЄEЧйРнє]ХЫРЏ?ЅQ„ˆџhiРSЧ :-ћaІв93љоGŸ`йGoсЋїџ‰ЦІfмvз=’Ай>Šwоџ/?ѓ8ОoXŽ9wоŠЧžzFxѓєЛбДz5Оњ№пјњЃЗ№і{к’ЕV†ЫЏН їЭќ :ж7№гВ,РьС;яˆ—Ÿя›ЊYњOўЭбf3Wв}‚eKоУзŸМ‹цеkpѓєˆАЌZд Оє)f4eхИrд>кЫзњь# ­ДaХfЯЙяМћ^^є<О_ЗsfЯФcЯ—фо;ћnќuоуXМx >YМѓц?aŒЌЭгxэЮг‰СхWMУ}Гf cc шm–тwEaJKxлHs 1!Ђ ==АhпGрyђжsЙлЮšeС]sюЧw5ЕјфЭ—ёХлџР[я}Р 037ћсПт>ТЫO=Šяk–bЮm7bопžS ˜WЫ7оŠћІпŠŽ–U šcy^>эFм7s::66ƒn^+ПЯОџaМѓўxљЙј~ѕJЬ™1=Б€ГЭOБg^И>^ŒeŸМ‹Џ?zЭkZpѓw[С5`)ž=nP^чНн€'@@0ёђЋqбygЃcC3ш­вяК[Іcнњ јђУЗёх‡ocэкѕИсЖ;d=ѕч‹qл г№cKўѕђ xёхзќnž~ššWу‹пХŸМ‡Зпћ@хЏD}™F7YA оЈ2KЉ,eГХ&uYОoХКѕ№еЇсЋ% m§zмtћ јA€ `Wmц&™qqŸ(€К-Ђ#MёуšzyZЛНЅ?­ЉCNРХtpА™ЂWоtю™~ к›Њ‘n]%­мrч lиИяџѓuМћЦЋh[ЗЗо9SбЪy‘NЅA)јЋ3~hрyЌЊЁZN"№ј>’!3J.fюEб=BхЭ:Ÿ}ё9оz§UќчWбМf ў2ѓPPDQ„?Oš‚kЏМ+—~‰чžš—^{€X 8џВЋqТ1G`}Э2МЙ№i>а”O3яЙWL™ˆuЭЕhЈўуŽ?NRpfЯЙ—ЩЏтћѕm˜sЯнxlо|ˆЩ‚n;Чј!›“ђѓХ№§КЬ™}7{ќ щ?sж=ИтВ)Xз℆кŒ;a,&ќющўEqТёcБОЕoОў <§LЗˆUх^Ы~ж8юТe*lv`–Џš—яTўЯžs/оyOчЯLƒ?"џ9и' IDATяЫЏšŠћю™…Ž-›т–A:Ѕ‡dxюЊыd€˜€Mал7hƒZŠ™wпƒ+ІLТКІ•hјюkŒ;N>ƒMђшБ€т­ЗпУC}\Ј.џпћ/?џ$О_]ƒ93ў‚Чžј›ŒCj§ЉЅђc?еmщ|kђr [Ъb™О˜™"НLYнpпl‡Sp.хШ ‰{`:хщHSŒpф”Dw Ѕ1§i­:M%§е\GЇщdx5Ъ!F?vвH О+пИ-HK’Pw>Км•ЯYј'шъДc‹Oрћъ№и_"А% ˆњЯАgPBЌ8Жќ—јЖѕˆœщdьЂ'Уѕ9(f%Сgн„ФлLiŸbќчХgбПƒфip%HФЬ3Ѕ’№=€ВН•ьіmЦXŽѕњiй%#цГСтL€ƒёM-ЪКЮ$8т№МХѕy‚gйњЅc"T.Фп‡ЃХQн–Њ™ш,}R‡‰bXЁ%‹g_kїWп\ёe<Ю#§/хЖR a&ЋМ €яћ|№т!иm6ђšˆЭђu„вЁ: MРLюАkй^УtШM…ПY3 вžcрx в~#!ьЪNŸšвaZЪ{Я#ќЦ&‚T*ЭZ+!Џ=ВaЙ-Ъ+ХM1HЫ |ф$ДжUЃДjRщ4ГЙЪ—ТaƒИœd‚гaЫЖt„@š§СS RЯњЌ‡№гыk;“Yй<й.-сmo~Zп#ЄхшŠŽщ2Вm§яВ№XжEg:ЈЋѕd…•ЂГј]ШЃЫэ†hџЌm_†y<ž–3пЮъЩFФ IзЉvš†<”iiК'[1№‰ЅЏbЊŒ}ЈљђCќ2pьLЛBЅKзfŒ“эѓЯ†s"Y‡ПЫf№В>aoŒ€Ф[ИкзN—XМЃŠФ‘ЋзЦaž$ЁE}щРŠ'Р[Ѕ‰Ћ )5gС„3…y+ /МЬЪ#‘#Яˆ‚p№з93qЫЬ{аЖv-ЎНt^|§ -™xћмїoЧЏMд^эњu p O§ЃјЇЁ3чŒ/yˆFЯH2 ”0аG@)сћh`Хg/‚|Ч’(1' ЖыТ 0nТ‡В.СeCCУщrKЖ'•Ž.u.Qё—”ЪГм*”T8ќP‹чxž4ьэёY>Б7RйpЙ2pйеˆщH”ИDр!Щу‚R„aˆ4?БAЋzЪfєі ф6Ž(dъ}Рїй7„|PРћKQЄЃщ0„чљВф ј)‹ ЉЉPнО>sЩnбI>r“ 93™JЇy№x!˜§кd"€яyЃˆлЌ„4џ#ыH—WВ/шпŒŽЂЕоІЗџ§IыБлF~ag4_ЊРœ ”8•э/LејК]Впўюz—™fO:+9з)I–NюжXС”•йƒR7 r]вУСШКжЎwєœ‹И\ž9б™‘љƒTЃSЅ%'jŒ"h’™cjЅi“]Щ…_КХєЌЮМNQŒЮZN 8dї&њKwœ#|ЇIdЊ\ v€ЉrkяP6Ў(2hzынђ“ШnŒv#ЭдC]-ЩЮC+—ь  20ч‰Cv‰С A'ДGф^ Б‘№єйtНˆЎ”П8‰ љFšх5R"/BфQџxыМёмSH&xэЭуЦ;”DЃNЕ ОEОŒNЎЖ;ГKgžіjПkal@iёPJcAsЕ<ФЋ'ЫТxЧЎД”Р„a~TмЊ`ш jЄЋvЕIBйŒјЏС*‘ќЏjZЅЁЯ$R(P*б8ЙT/ЮVšАbР1СOfћќjТD‚+БНBP&,@Љ}‡ј0zŸШDрУуadмpc.•qЂѕїиВЁЃPзЧn8ЃOe“u]HЇ;ГzFЛІюя‚Ž.%ћ3щЖѓъR†КОЮdH\NH`Ќ…§l>ЊьВщ Ь2"ѓї˜4r|ƒVМl~ђpЭ4Ќу/ќ*RЅћxџŒИžдєe\fы<ŸmбXХ`PЌbъє йЄK Q—JЗ2mэ1 АвШєl0 нt˜dФЮUЇБ 3TМоH]эдExжВdЏу_PНГ%bХЅZВY€Ÿ 7RKЄz8ЃwжГDA'?хwъxжпГ  HъSјпГС–їBЪч†tC`DІёсJ*N•ёlAN"KіŸiЄ~UжЛGДпW[DRЉщˆЯrкѕЎЩ0)пД юЌгl†2D^†ОжUз-ЅшDK&ЂAR;œШN+ƒvЦщ.г2ХЩ’ŽЁ+-Y%пutХпmђ­ОоЅМЛьl§™gЫЂ38@ž…U–~Ѕz<обu+Ф“КбpЖОеip RœLжdЄ$‡2ЙH„ hiЃФ‘ŽNTРf>YgлЛч˜tб f6ВMыЭч єчвьжvюОš1 WcRŠMсБlQ4АNf"ЉNXЖBg&ЎžьЌ(ыП§l…%коўЩ#тj6О” Х5R`R5bрЧІZфїщ'Kсѓл>n^‚0Ї`O —Рѓ}v†jѕ!SaJ”ˆZVѕƒЇёBєeB (‰œьЫьлждЊoНЪUнu*Œ\Rч)Дt,ш ›|жl–Tё!™єћ5ЪЇ- $Юl’‡jймз(ъO4ХsЅWtкPфa*P"тiЖLuR”rЭВev‰чУуR’Щ@(#|$;ЄТ&ж8˜Д…6„И[lйГ— йэ7b"рQ6CœфГ| F|YІ"Бgо–Хь_(hђ€( ˆ,ѓ=ОM†:вiЄв)JЅСt€ђ}œьzр) šJ‡ъr^пЬ@:3nю6[šJѓ}Ÿ9АЅ€ЕЅ ›ж€ьаU+:сЬmуШрьў№‹€’,yщ§г ’є€Bџйё‰fгUхдPiƒИЮxgїOMvi)hКJЏ––‘З йtv%Н,a;-nјшJо˜1”a€\€’§Ї[жЋ,zєЖв#Њšе­ѓHkw аgƒ5QЮƒйэ!SкЪќ 9s™[зNіЌ‰г EрiнtDЋ,=!gZ'%ЉЛ‚КТ,з4tь™гiЛŒl”яЂ3kіЂёd~БwЋСй^vT[Аi ŸН3€Шlйё ЙњЋ-œHXš‚ВЁчёN}ў‹R@žЗцIŠt(hЃHЮIВEsЄъ]чœ Ьд3юь2ЌcПќ>Uˆ(Хж5Ћ”0ая2Э&д щxBтќ}‹Zщшяfў(j=ЂzђDх)ЂьЬlВŠћХЭ„UȘБp1ciЫMƒљт0mb_”GTбdЁ:ќЃЮ] YЃHWЫьЌNЄ— вƒчћl{ŸЊи„P‡NјђЕъ[ь™оV|"ХxžŠВУ]H†TqЩрj”ђеTk; ŠЊSГЏЬ yDљ6О’Rщ4:вlцPђсДAn"@NТ—бгQ„mьОn qН"@hB„0Dщ0’3’ihW%RэЇЕ}вГH–JЋ ує(1]бpD\сКfКрєИШ’В*›.Ыцo‡Э’DЇEьB>„PщiТؘЁД˜dд1Uи‰D Й;žКeг+rАЌЩjНИЖ:йхЭF|WС`Ц`нh/8ыŽ Di™ъuDЬ›Ђэ€]pй]Цt,АІ 4њг:Н2а%ДqФЗв5fЕџvЄX‘Ш–џпщˆыQДc H2_ћ&>ˆ8С­"z;,`Ш €ј< SКPћі @‘ЫŽ4Ђ|vˆJ)П0T-–)Л5&R{”lш3~"—иЄm>1лb,'(eBˆВ\˜mZќ'VqЧŸ‘ељ&–#-йf8=–œFW joЉ\Ьešaч ›gцUЦ*eоРŒQ0БY@ф?жMЌ}–P„З“№э T. BиЉlЌƒqЈEœR(A:F: Y{ €8HЦЖox|уёН”:€TЁ0bKкaI:=ј>?Шу{ D†iU|o'(Є-IŸ KЭ‘ШCSV„FH’ 6Ѓк‘NѓkеўHŸЏx мœ’QФf#г!Ю„пхЫ'ŸЙ ї]І#ad]є[^њОa9;ЉЫUjЕЁ эIv&.Sэ ‰\wX=)KЦtйщ§“šmв$Q№цџ ж; шˆб„8и‘ВХ2ЄKдёна7‚йт@€l™ІЖЈыфєњеЎ[4ф„—CAuе -K|W§иlа@д1ZэDЧ:ФўЦi<Ь0 5{ЩИЩЉgjљЩАFйј*6љ—Љ.ВЙэ–жžI;с,Š4SоJ+v{ 58еѓШЄ$]р’?шЬ–ѕAТHaJ•А§93œБ2ФаGчivцК”„Ž˜ГЮк91”ЛьZ”пдŸJЇЕлi˜gDТˆ+цˆr€'РЛіI€ёcœб:”U4ЩUыкЏˆƒЈЂА™3j†Ѓ{0Y`&=0ХmvP]hшh‰Јo6kЉ–СcЇОѕxавГ#<>!рзл™ ‘З€HдЧвVЇРY=SН=љЉХmлгЪ@)7GdФ$кп8KдТ†}њZ#QІЭіжz\ЦRЪvА(Фїјl87ѕCXXmjDШ[G*­@с‡Уч Љ Ѓˆwi*щ{)ХV X=9ƒI)EІљеœЊЯPPyT,w‡QЯ јli(г–ћ‚i„dр#'€RЪФЄ#Є"fv|Іm=r8шЅ5pQ€j Ylё=›3Šа‘fЇРг” Єж>I4ъ@RдИ§-0;‘‰NPГ‘wцєўeЄ­uЂ'nЧ „Јя6‘њЕББ|ГаЅe{ЮшьˆйxаIцР“~ШАЉ9ЫГГ‚:qн ћ3]&Œсrz§’LaуrдŸ ш —šэQKбоx"QЈТйKтт›ЯRрЋt ˜cјщykњЄћёg„ЭьдIIХЩуЧт“З^ЧЋЋQЗl1ЮњŸSЅ|)ШЯЧwOGkэRДж.Х§wпЮ,Фs&гZ0aьЌјь}ДЏmР’wоРНі”г[1сјcБтѓ”џo~ Спѓ1ѕВKPЛt 66з`оCsаЃGƒш“ЧOо~?ДЌBн7ŸсЌ3OSщo^КyёL7Џ7^&ЁQЭРИ~C UёT"јљ•—йљОЉW]къoАqэЬћыУшбC]wѕФМGёР}їH|јр}s0џБЙŠŠŽ- [ŒgкБЊ'аŸжсв‹ЯGУВOБyѕJLОр\9[јУъ:X   ыр 'сc‡ќ<ЬМѕ4-ћ-п~†KЮ;[–>ADП;…™@(3n сјˆ6ƒ2aЬQXёСПбоАПБ{§zw пЧдЩЃіГїББцkЬ›3=ђ XА§Ё—\x.жж}‹жкe˜}Ч­ШЩЩ•_—яr­TŠ "ZxqRӘж­ZеŸ9Ѕњѕ“6из”“тpˆGˆме0tЏ=ёкsOa]э7ижж€%џyуЧЋъPт\e8з\VwгЭ)”3ПЦш9Ј1iцЫз№=PЯёxA€D2‰œœ$’9 ф$H<_ЭRnZН оV}ѓЎœ2 ЯЬџ+ъП§џћћ3јvюЙцмqЊПXŒŸ~Œ;oЙ99ЙшH…ик‘ЦћoОŽЁƒ‡ #a[:ФоC†туПС,ГУxеф‹ёѕGяЂnщИwЦШЫЫAІ>ы(nM=ФIrЯѓ$Уˆb[Š-Л ут„2 ‘‰РG2АН™bF’›д|ТРpр9;Б J‘цЫрл;*lhzЬЮeТїбВЊgџсїXњщ'јцГOpл7РKфА=’Ђ=ЕеувѓЯAУWcss5&_pŽ”sє‡аZйE1™FAл7aТИуБbщчhпДK>|Cя%ћ…qiBzЋќ1OНнvHъ#1ши‚K'_‚†Uеиќ§zLžt1Єў№}LНђJдV‹mk0ябG љљЭзŸсР$8|8–}ѕ™ЬУїИќ§ŽЫпGF‚€ІЖрвЩ“аPћ6oZЧѓgќ:t0^{љяXзв„m›ПЧ’оЧ„q'Шќ•|џзЖФф{ЌмАŸY>ъ?5>:ЏНФѓџщ{,љј}L?NЪ™џw"џGИ~eiБњл"ЫISJŸФq)ЦУЈy\qўkМ{њЉљиаЖз_;ЏПђ"6Ў]ƒѓЮ=[њ_2ё"Ќ]гˆжцzЬОћ.фф$MdЧи@в†vl‰—OЃП  мwZ›ъакT‡ћчЬB~^žLЋ ПмkљЫrt‰Эп%Жз'ѓЋѕk…СєШ;b+–“КрчК_ЗŽp.:їqЭх—р’ЋЎEЩЎ{сЈqЇтРaћJџІ^†’т" > CђВR\wеЅа:хФpФи“аЋяnXєъ?pяŒП@o вПrѓŸyЛ,гЄ ЮСЈƒ‹бcЦЁъзћ NуІiW*њЮћЎЙb .Йђ”TэЃN8 л_њ“‚_ќŠ?ї2о Ћ,§ЮlЊ§ диk—ыЃѓ€“.ОЃFŒб‡ЊЛГђпp/pўE“pјaЃ1юјБТё8ьаQ8џЂIъ>™’,рЯђЇ€ wјЈCpши“аwЏa8rєHЛ ЈхI1‹ЧgJ.Нј|”—–bпQGaшШЃ1rФpт(.<ћ8dФp:ўTєпї ЄSi\Хd ЏsЃф”)bІ4 ’>Sž>є r9‡„gŠгSЦ‡#Nњєкm(^њЧ?qЯm7IЌ<ёмГ0ъЗУ1њ„SPЕЯЦПЋІ@6fCSAі:ђ иkј( >p4*ЫЫpе”‹U8ВиmžКпмHL ‘€зP Ьж­T§3BIч1[яTћ fўР{с‰G1џщчаї7ћaЧŠ˜tеЕ8ѓдпA]Љъ‰UП‚ъMэŒ ч‰чsУє‘3бњс-0›žяГ%фD€d2dN‰D€ с3cнќВЕ‚ІGц?…пy6Ўœ<Гю{ЮјІ\єgф$\}йdіЦЈcŽХ!G‹’тbLОшlK3?ЯПє*ЦŽ9š]cH ЦƒППќ*rr’.>їl8ˆ™UпgД2НЁxЦnЉaГ|ЇШсїЇТP›‘ф@вc§ Ьy2сƒнО“’ГЏ bFYѕŸРWv)Ж?†>ћ: ххЅИlт|щ\5ŽУG„C?}ї†ЃЅZЬEъвчЌ$pЪя&рˆcЦЂWŸJ,zљм;[˜цЂђ>jЦ§дВ­tЧЙ–59?l4=тhєнu7uФсВNКјЂЬђРГЯН€Ч“яП;q<ž}N\їH0iт…uШ!юј?TЫџШУхїž§ц?Й}w„UŒI“/У™gœ.§3ЪїNY“ PšпЬќ‹Tў0ў‚бGИљЏП|cЙ›$еЛЊп|)У:г_№рУs1vм‰ИnкTм9уnsм ИтВ)’†‘‡ŒНіоƒїй•ИъŠЫSДYЃ!z-Н<тY_ЎПсКi().Цр}іЧ}‡ЁМЌ зMЛZѓПFѓ?€ћOЯФˆсЯkHiп.fTšШВ%ы*ALГЧŸ%эл,е 8“Ќќъcœђ‡ѓАјгЯЭіЫ%бЊeKpФи“PН’Š4`WМЖpЊімћБхƒ†Ђi5;Ÿ—‡ЕѕпЂ А єЇV”‚ІfюŸŸ‡ЕѕЫQаЛХђЯ?Ԙ ЇaemŠТоНБј7QЙћFпз‹qЪЮСтO?гŒ@)шцѕqi/kћ…`љu"cŸ~„O€хKПИБуБre-@€То…XќбЛЈь?Ђw0lМјќГ€БуOФЧŸ,бh`•F;6KPЩв&<РѓAл7Ђj№0Ќjh›XcЫз„lmЉƒпЛB;ШB@зж#ЇЈ;ф%ёйЛoaьЉџƒoЋW"„‡ЛіЧ7яџ A;Э§ЭћџТБЇŸ…•uѕ€ТоПТ'џX„Њ}FШU'@OpS,jЙQ0Х лЦЃmѕ(2Mkиœљyhћц3ьTЕ<|ѕЮ?qЬiФЪкZ……НБјЭ—аwя\љВ|лзЌBЂЈa†j$H7­СРЁЂКv`@џ~xѕЙЇ0`я%ѕB5л 85‚1yH”>•ёojV;Д’ŠЉНн=9б†fјЛ”WJъЯ?ФSЯ.ФџўЊkWЁuэ:~$JдКЊЏ˜P ЩSћљЌ‡0œCDa$ЭгP^~O„зі?z|–2Œ„ЭEЂ <"6 чљnkЉУNAh„5(йuw ЫПFщ€нБфнЗ0ўєпЃzх*D”ЂU>љvлџ €ьЙћnX8.vлoeП‡Sџ№ПXQ] J)>јз?pъЮЦЊК:@я^Н№Я—џŽ}{Ш[s((_^іA)E*•РЪЖЅљ!ЪэB aФlBІјA›ѓXмYŸрЗ5%ЇF:тkщИƒо „‘taЁ­~%x–ЏЌC Њ_?МВ` ;DЕёu Јz VееЧе\сбŸж2љЉ}кў=ЪћяŽІІ&”Щїеѕ(иЉ—!3йž:uЇqЗН•IЦ(hG;Њю!ыHwR~ж2§TиЛ7є—ŸРoім/Пј<*ћA}э sм XКь€Ы—eˆ_5H+л–џЊКXпЈ­ўO-xoМљ/Tзд ЕЕѕ/NІ/хЛ–ОќdMŽЕепђќџ‰ъš•hmmeљ ў,ћR•‚ЩЧпCeџFВ4­зŸ6э еюиs(ј?+W2љYXhђŸvlAnE:ЖlтЯ!6oZdўŽ Љ-ИћoP]ГХ€Лте—ўŽЛ§ЦЭ.ўщс5?Й'дтяЊšoqФбЧЁКК0hа@МіђпQ5`‡?С A”П6XŠщпLЃ]v3!iљmРNLЊ…1вГ kgъР6М^kО^У>™ћ^eeXіэrу›ЎhJŠŠааи,§ъ›PRTddаДzЕ$nЫ–-|šXXIцпЮќiЈ(+CЭWŸщщЁЂМ ЫОY.‚Чxтd PМ@фЦЛмаЮ™н/€•–U/ххЈYОд EТєёbдЎZJ)’"нющЋК†Fљ,Ÿ(Tфhд”/,ьЦІflFЄ™зЅG˜EYTќ§сWL~G7фїxe†т6n,šВјадМFvАЭ[к‘Ÿ'6њ”—ѕAЭ'oЧђЇ<QЩ бQЕњlакgCгj”–;YIч“л™•~Š]a7—в4rQMUіGMРd#ІjŒ†уN>“/<ГnПƒvэŸ6oЦE—OХг/,тt2Ђ(!R—ыћR=nNЧ—dxž/o~дѓh fХšт@ ллHL~„`3zeFТe0KFУ4‚€/5GЬN@HЅCbUCвМ’›VЃИЈ –дTWcыж­8pПНAˆ‡-›7cщЗЫсёйОв>}АјЕё§ПB6x‘Ё8dfD]ьS г!hDAExHrCъщ0DGŠЎŽx{іXBx9 _?O‡l œu!Ъoгa†ЭE™BiЪˆ•yUгЖх@}ѓj”–A­ОА2Бў HfsJA55ЉЛьЗДЗ#??ћхa|ƒ˜6 ‚њЯПеезkпT2™х's_/]Šііv л?BАyѓf$yЖу[њЙЎОоьІќљ˜уЦсвЩ“0kц4p~њi3.œx žyіљУPНЇ IDAT.бsYAЄђDў'№ќявђŸд…ќЕD ‘ц/N’Ј–ўВxњZмm2ќЖmл‰DBњ746ЪМQкЇ"РІКB_FКЭз’тb4ˆО ОО%ХХnдз72тh п]4№†,–1 jр'•—ж?єі)@П­›bx‡+ Ўью‚гіLВŒ››БЧnЁT‘I@Kk*ЪKe9*ЪJбвк–9YžЎLQза€]Ъ€є()ш Rа~Я"ПБ‰г—UŠeT@юW @Cmяџf/^^GAдЋФo]ЈˆЎ`0!ЕKaЉБDэчю`$rњЉЇ`‡v@Яž=qк)'9gЇ}37p…Gиw>‘Žіі­ИЪKћШ№aDбвкŠ>}J@8Јш[^*S'ЈkhBЏAƒїcПЂ~ШщгŸ7/.(•Р*тр!”ЭўА>ьЊЛtšРMђ\u<Zъ›№ЋAƒAzW‚єЊщ] ПИŠ—‘ŸЌаОu+ђrsdo`э›‚ŠВRЌim5xHС.D €Еч"jУЁ>„(у›uјЩNCdj)4#ЙŒЬТЗЗoENnч ‘ѕћmu Ю™x)і=фь\9“ЎКsюИUkЫФ‹rR–G"‘`{l–-§jWŠmЬЈx"`с“ $’ЩA Œƒs~RH›ŽЉђ›iдЉcБ%‚уG$>3 ц—т7ПЄТ­mkЅђ!Ј,/E[лZ$|> ю,zѕuwЬб8іш#Б№•зR M)ТЂЁБ UПŠ^•§Q\5E§vEqе(Ф €еЪN ƒя™dц˜GŠœD€мDaЇН%дєЖŠ€Iп“з"2ћ‘ь`K‹o€Й’Ž˜ЩŸŽt„žhŸв>ђдvEiЌiiу2O5ЊьiЭL4PЊкœŠ‘Ё}ъёЕLLўtСщлEєь,н)вЗ$РхgQ)пюУ~~ЎЙчўЙчтФёуpтјqxюљ…ёј…}иђЇ_'/Ц;ц–ЏXГЯ§3†юwzюR„‰“/ХНГяŽЇ/шKфУЯщaІе%Ж3,џП|љ œ}ЮŸ1tпaшЙK!Я–Л| 7DљЬњ3ѕЗГ~ бвWKфЌ|ˆЩRЦŠŠrуyMK‹YHFљГёЭjО™кgKkЋ™y9ZЄќзќўЉ(3ќEfэээШЭэФšMWІ2HШЮ­yпаP-ыЫшї“8H`!ыћv8эŽ2&\юОї!ЬНw&†яП/ђѓђ0pз*мїtYич_|гoОХE…(.*Ф7_‡ч_|йфŒоб2Ъ \Вч‡}sя›…ў§њ"''‰сУіХЂgžСяОїAЬН†лљљy8 ?юŸuЇ™&Ѕh^НcŽ< >п“Р‚‰­ЂrВБŠBЏOГlє~ˆ H^ўGХм‡яGџЊ~Ќќ УЂ…ЯЪhEE…˜qЧ_№ЧГЯХY:3юМ…Нэ[šWЏЦ˜cŽ‚ЯM„ФђеЇ{Ф’2ОXК “Яџ ђђPQж3nš€-Хm #<Н№%м2m*Š‹ŠP\дЗђ§Ќ”ѓ№сљOс‘™гбПo%r“IИпоXјј#lТ‹ђУ TйѓыH уа`ї$sг(!ЅьjDj7€ЈrN7Qя™ПsgNGџ~•ШЩЭС№§іЦЂљШТ‹šџjйЗј§)'"ъt;OkњгP\TˆЂЂBLПi<џw™Ÿ{Д'шNLЪрК-M"y№)ФsД тјld œ‚/—}ƒ?žv2E…ИyкUxщЕHрEž_є Ž?ц(œ0цh<ЛшЄФM7xьЩ˜}Чэш[Y ?ўqя'WqЌ ?}fvWвЪи/э* ‰|pТизфh™`ьЫѕЫыыkl"ч,P!Ё„M2Fз$“‘1Ш‰$PЋИJ`,кsъћЃЛКЋћє™™•t_УjfNЇъъъЊчT'|yП§0эЮлѕtЕв‡ЂgйŸ4игЇTв•J'(KбX.Ё{S#š ”BЇicš‘йm<Œ 4–К5ъ5› @ggњX‘$)ЁбlDj(%(—5V ЈTRlщLб‘fш$…ŠслшЋ.CЫЮ;ЃЅW/ŒНъ2мџшуB^…о‹­‰єє`BЌj№tXЙrŽ>ъШМўЩ•e$ѕЊ5ШˆбqћwуЎлoУаЁCаддЄѕчЃ{iў№ШcјС№ёƒс'т˜дњїзUѓW Я>=G~8z6їDSSš›{`у‡ѓх‚ІFSўcGпCЋš=шr`фй?MЧ‘GŽž= ъПуnмuћЏ1tЈБ/šій—]ЉэПrITшТЪ•Ћpє‘ТΘёЅљџk :дёяБ‡ѓЉbkЧŽК­­-ZџŽКї?№Pž„аёЈ шіIћЈ zфбЧ1vд hmmAkk ns#yєqЫп‸ЯhДщнYяс'ЇџИКќ{КќшŸИіЦ›lќе7ŒХј1зcжы<1§\sуXзPЩ‡m9–K4ёЖ;гў=€9sчу†БЗИјЉЗc§† ˜4nŒІяУpэcр1‡]v%ІN‡~}ћъiЕ†@ё БH *“lяњХќhƒcMєŸoє'пІлџФ#с&\qўйXЖ|%.9?8і(*)aф-“0цъKёЦ_žFЙTЦи‰Spєaџn›3щŽ{OLЛ ƒіЧѓ`є„Щ^“љFоЂ`Žј›жdрiя†{“ДгЉ згЗSяО`њя‹СњcЮќИaМЋŸ“ŽИќќvв8L}НD;ЙЗбWп˜‰йЏџišтЁЧŸТШ›'†f‚ЊђЬ…DЙщ\оDDBov2ХHSцnš(—Ї u2eС%œsЩ•ИgъLЙщFнОћC0сЖ;pбйПФЃїо…O6oЦ?fО…“ўѓЇ†>воN§я5J‰Я •M6€жЌЃфЃЁвœXЬЭl3mГgBHy~C)1W:>Г7В’ё nИy<Ц\{%^}ўO€?=ї“f„ЗпŸƒЮJ№юœЙHlnЛћ^Р}wпњcо‚…ИљжЩњ%ˆЯu$IМЙК0гGў”’ ц~o ЭRЂSЛЩ†хA)Н{˜НЛ”e†ošжnw|FЪцЮn’iЊЯЅ„>?’§ ЏЮxГ_~i%ХCOLЧШq“|)eUС]KdOТ ^ zќ†tбЅ—aъф[…ўэюъЫMg#2~ЈG=›0qђTРєЧ…ў5ЦKѓюЌYf+0ыНїђљ)аПЃЦ4eќФIИјТѓ№иУр“O6уѕМс'ŸfГ[њrхзhЮюHрј8ўжIИјТѓёиУŠњhѕфФЩSL§њѕK5F ]zЙпўR†\џšѕ“'MˆђэЋеЧ‚™ЏОі:fПћ–жП?‚‘7މ%Ћ§ ВMўу\ћЬ&œЋЏНуЧн„YoЭ<ёдt\sнHpЎОv$ЦФпрзрЌчуопо‰Љ“&h꘿ўжфG‘Y)|™ЋU6_Ѕ е ЅŽр6рœћЭњr№œ~ЌђhЧеЂвHq*і”‚КЩgŠЗН^ ю˜хWЬUЅбћv@НQW}uтгS0htrnЋJ @Љ ”KњHшуNЫedЇ§{ЙВbWvЂ€†ЬЬ€$^oЉгё.bЦwƒ(мй0р\†љ”Э3ИБxќк[D s6ŸB…Ш^Їч p™м§Ъњцд‚кАъџє/ю"‹!TўЙŸ €љ№ipлbнdx”8Vћ]*@uHŒЌ‡Pф№ž1HWщ9IђІмё—Р’ЇˆИ,ЂdњхСнЅзђP!ѕи(ъч5•ZŽєіjР ЪžuЪчI–ŒgзЖ[xLYЖ2РюВN#ѓLчKЬЬЌ‰TJYЙДt›zмњпВН_;Kѕ•Žњpq}[N)Q(—ѕЕ‰ ќRЄћ052ШоOn?H№СœSЩЗйtf„ СЎ$дОjчANџqУ=Є(ёќBуy1ЅЯ‚Л\:%жљџП…љВK[/ Ј‘ЎЋ|щCЧ<[м'в‰т9T"хИ @KAНБrŠfqь|ЙУвk…j,ЎtХђPф{ЎмЎ o•єВ<ПЛREa?†и…?$АtiсмїБэp‚ђ§†…‡u1гЋ‚ЋPxТЦдЄДy і(ŸœrŒ`.Jз?ыщĘ +1xMšм WX‘еQ§]бux’д%y“ЯJp7-W2w ‹Fs$Œd7ѕhУЎгRF€"Гж/{N`ЊькЙinЏRюд.‡ЂŠ5*T1mОXЁ'ЇрМƒХ ”Є БzbПЋ…*ŠJЩ+Џ BU-Ъ8кŠъЗЈУ#"d™ОуXчTNaхˆаМ"вг^‘kЄЗвнДжm‹DэL )3 >њѓ$qгЎewэ‚‹'ВЧ1 6’iє•_ЉмZ=nPTAГoжРjУk˜ј•>•WЂХ`ЦЛІью|{~1М__Ј/XPюv!2šxepbг™нюbC?@$ПŠЎ'бV(хИRк;˜”LЯхє‡‚`рЪЉf}+ @dюГAЯj;žёfYGFz-# ЅyоP*!)0™щЕЙi™R s”‘Kђцуmє†§Hяh7ггМЉЄ7Ѕijo€тЛИЬкHfdІцЮl"‚JНЖеМ )•XdF=б‘@QFщ6N[ВМЋu•x‡љŠЂ•WЫфът:rзЃпC%+ƒPTQкТДu†Ј/HЇ‚’-Р1ŸеЪ /x™ЫQ[Лт•єђ4H/Н,Л‹`U~їH#Ї|КC›Щу"7U-!эrЈ3O Ш[Лк.йvўIlЈG‰Ъ˜‰ѕIOЩ‡e]“?˜Ж``Ъщ”DzшšђйUPг•3а1ZTфГ  Ќ;(Шšr$cŠžT4yс#e€a B4HKьДЁ6јЦЃd•Ю—š~чL ѕC9MЪ€‰Їѕ™пьѕ#3еYJь9†|јЙ>кэЎцщTQTР YДy дѕ(”ЎрƒФ“Š!PР.RT(я§'S@bŒ.ŸЗXJќ›bJі;‹ЖYr@ jмNј6™5з™&^$л_™ц„a{мђУ˜{vXуE7MлP*Zѕk@b@Џ e:lбФќƒШь!fй&ю;#g€ИЧ—Г“•EyЇx)IP2ЗчищnЪвоL$ @„,ѕщГrLт€{"[^CЙ„rтМˆ•4Ej7™ :аЇ46–ѕZGУЃ4ЫьxЦ‡ї‹Еь)gй)@dJ$nВїЄkСаМхЕПђ%**™ЩŽŠ( тѓrQŒЁЖFЇе“ЈŽBђЈЈžŠEцj 5D*!кJ{А5$vЅŒ€ЬeVFI‡@#–/цэŒеiСŠй)Т;ЛRтƒhлEС2О?bР)‡јлZ٘:;Ќ.qо Y#Э.x? du!Mо3щ4Д3RџZыnE0 hг:ЈžМ‹8`ŠœN‰ЉшЂѕ‹ќќлѓ@ЇСЧ ‹Очƒ•xП†вЙ5S<Бяѕ–ЩWU—Щ<ЮX3 &йКх(ѕd<ХœЇ‹Ї •ЫЊAxъL T§€<№–Ах‡Г{™yЭ,hг!Э€л gџЁі:Цо‰'ШЌHАx'ЅФdЄС'ŒЙ3§ќћmCž˜a„R%Иu‚О^вSЂesѕ’Ѕ’YSъŽВR<Ѕl@IЪ Ші›i“ЌqлЈh]ІbіЛ2pуv8љр!Ѕ„gд“3їG+ Tв}–™ƒИgЮ›ЮyЕчеa=œbл— ячўdяkцDкHnЂџЮ!јѕ„qшеk'єВЛ9ќ\ЇM”ТїО{(~=сfьмk'|ЁџP]‡щr < ‰ОІГlІВЙЧг,CšfnънвНћšA'•Jf7%ef=/Z5Hе€S/бSк&Н>бШПœј/fЖГCCbНŽ>Ѕ^ €c-ƒRЭЩ —T[ U 6-uV’?@КZYѕ–ЙY”šг€]!nЉ›еiК`Г/$9Гє3ышwѕ -GШ_ЕРЛYІ:[КыnЗaRЮ+Nю{lгlQQЖюZ?ъЋ‰MLн2ULz4OЇ>ћЊлтAО_тu(Ф=^ўmD’Ј6Эm+ђ^WРD: iтф›ˆ|ю…АТ:кпфž‡лиky!k*CiефgHoЌ—cqѕМJMΘэ5оˆЊ:ЉдEB;.”G№wХFБdё§-ю>/0t‚eтtЛ‡ѕЅ>КE{в2 љ"§Ќ’й:Cр›vГŽ“~™ќ™ˆВоО$ѓjШg.7=kлfР™c?щ›JJzWrйœЏH\‚ч •ѓь жоA”хAˆŠхMйmдАй.D–gжhxnХŽŸ|МMR2™ЬNфJЦžBІл‰šц•(SжЭ1€DЧоˆУРЭЖ ЦSЈЫi(•pљ…чсЬчсЕќCo\ЉЁв€їђ ЮХП8/Мђš{ё0 $ГўК\R(%e{UЁ‚9Рм}>H§$ЪЅM eЈФ€k8y—6”BRRŒ—K%ЛЙ&M3sЮІ>+%Н6’eb`аI!,ЄБ.ѕ'ќч9У"?C}V h E/0ђ9bњ-а[лСрmЏЁ-QтYŒі ЂŠžхђG@D]ycѕЉмwое-яГvёфЧзйЭЕщЈYK&  yв“’A5ЪѕЛ•5 Ў&њ^К:˜S‘ыzя-šМћc;ŒЏ*`В `Г_ƒИшК™•тcЫоЬ`zмnЄ ЯDŠаSTfaаЫwэз#х~М~лlїЯхщBE…9F›М ИjЄb6ќT}rњ‚Q@LШН7з#лхQ‰люсXі  /sbІzйГE‚' 9јцлfCЋœ~gъј{Ч„iЃ'~Ь>ХЛx #dШтнЧcOСnЮ`ГСSрк sДMЩЛ;™@тЊ=/’Ј’7ЄшњxGЏFДЌ$”Ќ8­псИЬЫгЭK xЭІ__wЉЫQf§hgЅbЇw3A‹RАkR•СокO"OŒдї&›вJЅ”’сžkA)QіhYюnC‡тѕ3fњv%"wО) АлЎCёвы38ЫьR НQІЄЇШM”ёцsШОщ/(Ms’˜[iЪњ…ЄяЉ˜#2>ц@™]нц:IЛ.вЮŸf„ЮŒь5‹z (1м_Ќž ЃФƒœб ШїHˆЮьT3:ОДФ=wE:Ѓ^фбqекАеЁНэ%Љ‡ўjќqЯЗ=DtѕіU_Ж&ЩSxbE,fЯbeIYbƒQen7>TЌUl-vЩБЂАнЧNLжЉ`j†@ycI*ArрЦ[@‘~Š)Л.а&wtч_OЖCP€цIШ}—Рж G‘ зKГЪ'‘Ц'ђіщБгаСkїИЫь-bыбrгуь‘фыЛ2эr * ˆБmKВХtИпЎHфх:љ€D={M9]!э#ЏнS €,ёІ^XфЊ§ЧG"•“Ъ%…r)AЩAФ^­4sы•(Iƒ^CщМwіЪ>3% ИЉl——)ttк Bјѓ.nЯыhўQІПєPгc ЯЌЇб4˜Л#ко&СgЎKщ5ЖЖ'•Ыы†CHAЩ#’мкRИ›[”ё6–ЫRdЉііьйŒO?ыАiI% dv§цчz6ЃЃГ‰с]I)44”P*%P‰ВроG}GxšБWд…Щ}Ќ7reЈT2{#ПdљСщљќHЙ.ВBvѕ~iтёЧНmuЅ@ёХšPo 'ЬWТја ъzCtкМШр$TгЏuе# ЎгˆШѕ€ЕВЦHѓј‚–Њ‡u!пжƒ1g/'œђQўЯКCє]CжЅgx-ц "eЧБH~”†uеxšКLtЬЊk˜†ДeЂHджЫ‡ФџIшж­ “ЦBћ’9XЗl.Ю;ыLЏ2њdН§‹ГпА}№ЇЧТњх АхУ嘚ђ_0ќ„c@ЬpЪNР/§Џ]ŽЅѓfсŒгОвЇЙ{7ќzЪ­h_Йэ+—сЖ)Ны§(н‚сп?ѓ>˜O?љ3пxћю;LФwT/•JИќВKБxс<|И~ ~wїшйгї0žrвpМёъ јxУ,]8gќфtW~Ч&PЧ&я;џрPV-QсŸўвии„ уЦ Нm1жЎX‚sЮњшГy™N9i8оxхяјxн*,?gќф?lБЭЭЭјѕф h_ОэЫсЖIуНЛsЛ55aвM7 }о;X7џ]œwцщ’ ˆ+•JИтм_aёЬ—№с‚wёЛIуаГйНAяћХНёд}ї`ЭмЗ№щŠљ˜ёч'1ќ˜#ђ`…Х41  ”$fН›л|і_%еkФМ1 X?цЬ{х/јtйЬќѓиї‹{й:{4їР”Б#БъН7АђН70iєuшбНЛѕ:Rћ‘R”ІТ‹•с_+тЗSoХŠйoс’ѓЮЦcгюЦŠ9oуŒџ8Э№QсЄЧ[/>і…ГёфгаП?НжвНsќбGтљ'Aлœw1ыеpкЩ?0Ы4лДj ЮљљaюЬWАnб8ччџЅНmJa‡ц˜4f$–МћП3F]‡цюньјзЄє'ƒ§’ržKЂЬxtѕ­;‰НvQƒФцц˜8іF,yяM,|gny-ztяЂ i%У‡+уЃKы—-ФњЖEњ–%ѓГЅ}ЖД/l^Н›V/EЗЦtяж`xn€i%еЗыtІш07і№2eМЁM etkj@cƒіŒfЄћЖ3M @д}#Wх’юзВйД”fњц-• Т– ш$>ђG,a`)зx#Ы&(}Дœu&кfЯФ'kуМ_§ЗN@zЩХхž‹ХяЯФ‡+сwЗOAЯžюB­Пџ€ѕ+cЫ?зbцЋ/`ј‰ЧYY/•ЪИќ’‹АxоћјА}%~wїэžўЄŽЭv :>1С”hь’#ь  Р~ћУŸІ?†ѕЋлАх_1ѓѕ—0ќћЧлЂКuя†IЦЁ}ХЌ[Е ч8KVъјчžsж­jCћŠЅ˜8ўfsэЈx­ыи„ ЮЖХѓ№ЩGыqоˆГ]м–MЖ]ap›‡Ÿx<цЭ~ŸўsfОі2іі%/žљСМвeесЈуљ~ћУŸžzыWЏР–Maцы/cј‰'xi†ŸxцЭ~Ÿ~М3_ХбGЦ>^z1ЯŸƒзЎЦ=wпž=›ОжыW#А ч’ŠўЎZ EОG€[X†ЄПлщy+_R>Љ“хcЙ‘qhjjЊƒ.]yssГЦ/+– }љм6iztяaы€гN=ѓgПƒЯ>^П>;ƒДЅtыж “ЦпŒіЖEXЗb Ю;чWЂЎZ€O0ЁfЗ„/›л˜дЪцЪ‹ЯЧРў§1ьРocи‡0WІ IDATраo}УЋ[5ї‚jю'Œо/Інї я9 Ÿo„^ŠгO;|фY?џ)ЎИјœ{ўEш3`qдqјкA_Е‡_{ѕшгЇУі;ћюџ 0W_u…ЃРЉЇœŒУŽ8НzїС“OMЧ”I=jN=ѕпŠ'ŸzЪ‹qЮй8єаC№? Cvл•Jз_{•?ы—?Ч—]Œs/И}СЧœ€Џ| “ћІžPц.UўЎšz ˆ№Ёќ IуйЙєЂѓБлЎЛbџƒО}О| О§­oŠєРYПјo\qЩ…8їТKбg№n8тиёЕƒДљЏНђ2єimХАЏ| ћ~ѕыаПЎОт[э•—œњaи7џУОu§цзl*Ѕ0тggраo| п§ў1ф€ojў\zОDxшю_уї?†]јўЯЎћ`Ф•зсє“О$``ў2ЗЋ—wQл Р)ЏZdяLlPœzќБ8ь”гбkЯ§№фŸŸУ”Qзк:ЏНpњєюaп9ћ~їєялWž9aПcк§8сєŸсЊѓЯЦИЉwршгЮР…ПњodP8ыggрЏŒУ~№#ьљеCІ\щv}'Џ%d@Щодє -Md4–ЕЇЪЎ™ЫєнЯvї{ЂєЮ`ГОЎЉЁьЏЉ4-Œ{§Є7•Œа™щMr­"ЗяФг†ЫЯ;уІоŽcOћ ЮћХЯЌь˜#У џёџаgЯ}ёќ /aќз™+Sќє?Œ Юў%.КњzьђЅЏрИў'ќђўюŒFг_п=ф›8цфaŸЏ‚я}чћ>tй#акЛ7ОёНЃpШЧ _пОИјМsь†žD%h(—­ЧКЬїLCђ&qZhOvgЅ‚ДRСeчŸ‹О­Нqш‘Чрп9§њіХyg§вœы˜ЁGы`єш3№Й~C№Й~ЛшщїTпNоГЯ`|ОŸОЋНe—нбwшh(ыѕ–YІїбW4Vl™ifŸO4˜Оjl(Л[nRMпЛІn­kЩOѓrСхW2lЉЄи’fшH ЄЄкЋtІ§ў~ о}o|~чОqўХ8§ЧЇйј+/ЛіЧАТАТЁпўVЎьoђM|щЫ_ХАФ AqщEчч*џоwПƒя~4яЖŽ8ь{А/Ш^{„юсдSNТaG‡^}рЩщФ”[Ч[,уOSЄМм_ЄзЬЗ'ўсЭŸніФч{ЕbФљтєџШЇяф“pи‘ЧЂWы<љдннс qіЏpш!‡р;п;Cvп•Jз]s•рNˆ+"“ŠтkyЯj…TЂЩмWћРы7ї§л‡| _кџ+іх1hр@\zб…5hq€јкЋ/зјх€ƒАяWЦ€§qѕ•—zu}џ„уpЬ 'aЧжxюљПсз“ннщW^zшa_љ†}хk8єoEъЋвdl УGџлСн€sŽ‹gП‰У? .ьБћЎ˜ћіы@В‡rTѓNFXœћhёœЗqпƒуйПќ ,D{ћZdi @/j_4я}œњЃг1cЦЬ …кSБxс|vФQXА`ЎнёЇ?NЧ]wзЉв Д VЌX шбЃ;жЕЏFѓчО€@iЇˆ'єшоыжКјЙsfушcЧЂE‹• wяW0hшž`шћ‰НЎ0оY Дх_TVaЏзОТзхв.œѓ.Ž:~8ц/Xиm稘џўлv7зЂfс䟼Ϙёц[бЂ–Ь}‡s,\спcШ^У(,ўр~ќЩXаЖHнПЏ§ IяA()…йЏќЧўј ,\В`ч^Н0уй'1h#3^Т>чўўц/^Š5ыж!MХ6–ЈR! МJЪьтЕk§мЙ…ск?7G щšХИџзБ|е*€LџЯy Эƒї”Т’/тАSў –,@иsш<}пoБлWAЂ€Žе‹БУ =‘f>Y>=э‰,#ќkЩl4ѕпМќ<ŽћёXМЌ @я^;сЕgžР/нМФ9ZШњDeЅаXжРзяЅЦCЅзЬ ` Э‹$бгЄ$Р7ƒШŠgŸ^(GŽ[V/Цчя Ъ2lj›ЯяВВ4ХЦХsаsРюрcr84їшŽяП‰‡ь`Юы/р'gž7пyзD_с€­\„/|к–ЏаGоdњЈЁ$QxчЕ1ќДгБhЩR+Пн{7іџњЗAІЭ ГK:;:‘Ё\.ыѕ‡Ѕ’>BGь”VJсз^РI?ў –,]†Dщђџчю;АЯпD%г2“$ ›V.ЦчћOзѓЫ{Цл—ЬGП]ї€н5ŸЙнж”‘Н}I)evq'L€e–lо,sЖ”ђЯёtЗзшј,% ќ+‘l\З’ћєvƒС7ђЂGџ\!_њ*–,msšС5їэWqє№bбbэНэнЋfМє<эЁНSZџЯ>џW,XИHыя,ЕеЭѕ&Ž>~8-жіЁїЮ;cЦk/bааН\ ”mйфж”зђ’„И ŠЊ\<я}мїРCxіЙПbСТ…h_ЛVП((јбЧk§`нwУмїоЖКšЖlТюџ6 , АлnCёє“aЗНwŽ:6aШ_Ф#У1bнqхбM›0`ШюXБвиЇюнБnUšПАГзFкђ T“‘Ш€š!ЯЈХѓgуОћФГЯџEлпЕыЬВ"–:>С€]vsєѕшaшгі}юћяршуО/њЗ7fМў нтќг~Б[л‚[ŽпФЧгm[(Ќ˜/ЄНaЧy№фnъјЛя§%+?ЛэК+ž~ъ1ьЖз>~iсž Sм’љГqиQЧљ2іїЉG1d‘_шдццfЌ]ОЭ;ЖЯ}‡s‚С_Єхwж›њ:фЂцчиуЏ4ЎlњпЮћ Xc_=ШpќinєimAлђібВЖхy‚$QvЇ”Ž8ъ„“аквЗо4 ‹цМƒ5ЫрфсЧ[ЯуР0{іћ№мeOаЇO+ккк\§ЫкаЇOЋG&IиМљS=+˜ЕbХ KфцO7ЛxРТљ€вPх3ДЏjCџ~§,€йsцдV€!уъIuJњЏ§њіёx.ћшйs>( A™ў[ ~ѓZжж†>­-6•э_ГXqйrЧK0 _Ь{§яHл—"k_Šій3бпђ_сшгў/ZzїЦ-#ЏЦ‚7^РъїgрфŽq%Ф‘„ё-НбЖr•ЭГlХ*єiщэ‰э–ŽTЬнЬшььDCЙ 0аДПsѕbtЌ^ŒяЭ@П>­рШnъоz­€†DЁ[C нЫ(›MiššЋєјЈ!7ЅЫЌS*&­і:fив™bK…Яфз,юawШw …’т[st + ВЮЈ,CCЙŒ„§ійzhкчО-ЋcуЂй– Р€ў§0oў|4–tklаїbѓЎmХphk[PІЄrKZzїЦЊеk4ˆА|љ ДєюэЮёДqt[В4г}a€žn‡ёHz-aцІє[zїЦвх+ь4ђвх+бвЛЗžN6Юyхgйм•ниPFSCЪцКC@пяНЅГ‚-f:ЛГЂНŠMKccнšбиP6ŸHпЕmМИ):ŒзD7”ј~юФl>вїzwtІјЌГ‚Я*ЖЄ„ђoБqžЦ№ ])ўђЭ+$9,]Жœ єŒХРў§Бpж аІѕ MыбОt.њїыkуЕўnС­уЦh§нЖ'џрћЖмњcсГєtя–Mh_БФщO3;тУ:UЃ—ЎJžЃŽŽж–VмzЫX,šћжД-ЦЩ' ЗћДЖVБ_:ДЕ­яњjk[~}ћфв,]Ж, ЃŽF™Чк>щt›?§ЬиŸHcЩ|їljѕ*ЂŠєGw"Z[[qы-7cбМйXГ|‰з,6ofћЈ 8`€ОRЏc3Јc3кW.Е§ы^fЛы:ЊрГVЙцe:t2ЃЌxЕAhГ2ЃаЖ|yT>Š‚–Пх–(m§мП}ёмгObуš6аgcг†ешбЃЛШ_ ДЫЎЈ%3”ћ’Оп“ЌZНєЗ”ьп/Ш"Z 7ЮdЅ˜;g~њ_?Ч~„vlС9чžЏншЄСуђх+Аї^{љ ЪnЭšv 8Рж6pрЌYг^_kЂх‡ЅK—aЧ^НЁJPЅ&Јr7”šzкv-_aш#YŽь)&ˆЬnж(BєыWт‹ќЁqхЊеиe№ ћ{а@ГžТчђ+Бїо{Ei€5эkMџщ0pРЌi_kыЖ§kуРўкА[жЖ-{ Ccы.hhнЅ–]Pю3джёС‚…јщЙcџя/ §"F\~ІŒОЮoDб›а›МљЄ”$('ЮшЦ{œ(ž4aZ67ЧЌYЛƒњѕБ9іы‹5kзydIъјЊFfёвх+аkЯ§PjЂџњ AcП]uГfВ”$њј! ‰ОJЏ[cY{Џˆ,8Ќd!­тіуuд€Fƒ’ЮŠоŒAыK•rюŽъ’]Њѕp.y€ЪжD)ќў7“ё№уOaяП…ž§†bРПэoј мŠ•ЋАчnЛ/žўуѕю(##џІMzS‰іо­]З§ћѕ5р^П­]ЗPЦcЇ;№R@ЙфANяГ/%`экuшлЇЏх]яwЦкЕыЌ,ё™€оЮЫ2шЃ‹: x€-tvђV§ŠS.'hll@Scƒр‰іЂrŸr1а™ <іш'Гу^cf{Е"ЏЃьЬ€NRЈ@YЄmДб6фЇcw7 З}Љ‡ѓ.:vi[vьПЋYЎДTѓN(ѕьeЮЗ?=ѓ,ьwр7БCяў8чќ‹1хжqvМ,]ж†[И%>=Q’gрщЮu›В ѕcј UтмпмyѓёгŸџћ}ѕыиЁWœsў…˜rы-6пЊеЋ1pР[†ћю‚o_њcѕš5Й4–ЖjQйE ВіsОЪе+Š`’•4a’чЮŸўї/АпWЦ;Етœѓ.pги9ДзгK—-УŽ-§Ф…(uы™KџщЇŸЂ[Зna-ЁёјjAі{-„ФМa[\drT.ЯЇŸч“‰аП.—“ТРљаѕъі5хЊYгоюЩœГП:ИџbьШkаВѓЮшгв‚›nМжQОg)Vє_І?Ÿ}њ yФїаГЙšЫhnю7‚%~Т­qзПССˆ=КcїнvУmS'лњyєQŒ3­­-hmmСMcGу‘G- ПPŠPГoПуNмuч:t(šššp№AтЩЧЖё&NС]ЗOєэŠл&ѓ`t=Аrе*}дс(™iКh`ф‘R]3LЛяŒПi4њїя‡оНwЦЈ‘зxy'LžŠЛn›ŒƒњЊупФ[lŠGcoМЮёяЦыёШуOš*юшQŒy5Zvю…>-Нqг5— ŽnŸv~3~,† ˆІЦFќ•§ёФД;mšgњёнo›ўmDЯцюијс?с `ž!`D™iŸІЈЄЉ1цт`t r Ж‘віЮo<іЧg0іЊKбwч^шЛѓЮИщЊK№шŸё8ЮGёpйђиЂ;Ін;ЧС]ЁБЉ }y<іЛ;ЬqЗтS)вw27”а­яeжРaK%EЏћ4р‘яO”>іЈ3е/ЖЄ:3}І % ’RIRВЛ}љЋ:2 "ЭЂсˆyхИуJєЇэ8™N–)Ÿ™AuћнїтЎлnХа!ƒбддˆƒПzž|ј>›єйщтШУП‡žЭЭhjlBsиИёC[ьэw§w§f*†"єчC9Еrе*}фF? fџ’@цbAл—УаГgO455ЁЙЙ?dњї?ј0ЦŽ‰––єщг‚›Fп+sьЈ‘hmiAKяо;ъмџрУЎОzŒl ћжЬЃМюбіуg?J„ЪBслЖ+јйЇŸТ‘G№gc@lŒpMРэwоЛnП C‡rџdьЃŸўнYяс'Їџ‡АR`•‹/—сw|§лД–)Aў@ЖЛоywЮ;їl4їшр–›GчвŒ}Z[[бвв‚БЃGтўџЃпЕЯЗџ<і„–/ЖПЃoР#==ztЧкuыБyѓЇїйежыž˜8i2^|ё%Lђq|Дq-&Oš€{~7ЭІš8y*Цм| &MИэ+–тљgžТЬp}Ђ.КєJL8›6jxёт­’пЂŠоVezЅ0ъІ[0oўМѕњKxџ­рЏСLЩъј‰Sƒ1ЗLРЄ[ЦЂ}йB<џє˜љж;6џезТњ 0kЦ+˜5уЌ]ПзŒcл?rЬЭК_ћо{љ/xсез-K РФ;юС‹Џ§OЛыЬТЄЏХяјƒхїјпм…‹Яњ9жЭ}Kп~'uNљgšУЛЙ(x]д§ЦO3‚З™[б Kƒw\Г!СM›sYDРЕcЧcУЦxћoOуП=uы7`фM€ь4АО&$тsђ]їтХзўЇІн‰чПƒIЃЎХ=>‚r›iГ єьFsЬK–‘иХ qw2R6VЪ­‡$^/'пДЅg‰ЯА4ђn– XЏ‘Н)Ѕ’eш4[‡SЪшuЧь”№‹ѓ.Тu—_„Е пЧєЇс~Ю‰)€люКЗN§ F]{5о›љ:Йoо™ѕžх›ц'ГV03u‘~6њ– иИёCМјьгxљЙgАaум|ы$(•иѕ…iъŽHЊˆ]ЯМ›_ƒI7хlћз ?Ф{oќэYЌпИc'L‚>д<Гe@ЇЙћкеС^P]bЉ” ЉСx!@"гwf›Љl‘>ž zi{Ѓ›Ы(—ѕUˆіаёŠІП3еgFВ'2м”ЖќC†d"Н…ЦфЇ#ТAaтmЗуХ—_ХєGюЧGЋ–`ђјБИgк}6ХјISqёљ#А~хbД-œ?УO§Б-zт”_уХ—^СєЧЦGkWbђ­уpЯНП‡g№Y?N’њ13№вл1"ueџŒŸ8_p.жЏZŠЖEsqтёЧaјЉ?В‰FŽ‹+WbжЬзёо›oр…—^Ю•ѕъkЏcі;3ёо[o`хЊU9jLШtП=’Лfz?ќ^WE]tщ†?Кг@b/–Ё=‰<~т$\|СyXПК m‹цсФŽУ№“OC<фmвФЩSётK/ыў]З “oНїмћ?Йєg8gџъLtnўXь†fœuюљ&ўŸzЗz€ЗђО…™brT­$?Э/ЮŽ;кWрЙgІуўўЫѕъkџpђБrFо˜—ГЮН@Зя“Œ шzЎОюЌ_ПГfОŽY3_ЧкuыpЭѕ7Z2~ђг31ъњЋёЏѕЋ№—gžТгџ(HU9њ&mŸп| яНљ'ПEЄE­QюK,rЋ‚и€sPОЂ№Yў–iŠЁ‚чл-lMйBИ,РK%О%#’‡ќ8nk5а-Ї:§њѕХЫyЛь5Lb|в+ŠЪ7эLJњ МRЩWXBWщ)`]н#Kч3йшЈ”л/ркЋљ#o\ ЉЕg#FZРоœŒпр‰\Й$i–7гИk aорˆДW“ЛЋ\*Й/ 8”‚В DPЄAicЂамНeуСъшЌ гk”𙈯пс@ЁJаiЇЮ,0ƒѓ^JоšЪ+Y*Р)lЫA+Š м:Юs/ЕЦ•ЪкkжY1(S™Э0 јњРВRhjд;Ўг4Е :ƒѓ$r()ГжбУge2uLь™YFірy7Š”тУл3ŸїІѕ^. Ÿ‘БD|ѕ$ѓЧBі ѓ†}ˆ|"оІ аЕ7ё,ВiƒщžFч—лˆУwХлЧсІБЩJ4ЙN‹Ќuє:8зЩˆЄ€I П:к‹Ї|„ёpвЂD\НhЁ(№˜? еrЁњЇТDєйП К}Ю%ЫщЯ@ЏG ˆ)сmАsѕTЋ+:+':D‰‚Ђm­#xyfЙRЄpи5ўДВ †іRЂLч›}€ь6<ћоl Š–:…мZ СВ†"x^Mе…žHof(ќ ŽjъN)фђ3b В0mAМ|бŒhЩŸЬBкHж'uN-хyI[hЈЋЁБЂzdлЫ6uцР‰ЭP‚n…ќ•Чф ЩєHоŽ†а–л•2ЋишКђФјЏќЄQ’b}')+L“чЉaѕЖ7Р…УИ(bћШeLzжU’л%Tcжv„ЙЮ”Ь|P-Є(КZОАCје=›vпƒ˜vпƒˆОM{?Už…ж(В‘Š xо(Vф>PIл>у5В€FЙŒДPAYo %0ЗŽшR3ЭЋŒсзS†ŽчgrЛ3&Яx2+iОТN% ‰™кщЋ5шu<Ш AXjKюJ<ыEЌ‡R^”dŠН^†pЪ”QЩRƒ аЖ@ТŒгG,щЉ\EКёям†іКъcqєsEjќ!€šсK‚аГKŸm‹в‡ŸлЋ! ьNgЂ n•Ѕ^“йaŽNr\зТC IDATы#]yІ‡зPЏ%)˜ѓн‘0ќaРЦ2СЛАЅг-3/ ЉГЄВуTš3:•nН=pЬ€МдыaУr>g~YITЂяOјJЫФpfкл]h=Ќа}янVъ+љrЮ%zЦZш\$ТоЫ_ цБЈ[e†@NЉfˆЋ„œ>”РE‰gБВUdлЬо?РцkFzCЃЬ.цдИ—u›(Ѕз:ђвл>8Чѕ08Ж ’Х0|ё:9ЮєЇ7/PЪоА№КLwX9sдnhb€›ќЕŽИ‹„3†’-ЇT*Йщkхn5"rгрžЮ&ёТ@мLЗMЬЏУќуyйbБPEтbF%ѓqNїлпЁ!ЎІ;)_Ž-O?ўj{б)ёК^Т•cœG{афЪЕ wпsрДЈzХЪ%Ю_Yd”n‘&|И2kс Ђ‹РCдИocŸЃБžФ*”ЉЂBыЄЏ žђОHЫхЉeЧ#qЙ>CžХEщЉ(ЂZ=9Щ „ Єˆ)ефЄЈьЂО0ѕDЃЗ]Цќ5“\aЌЏф[ё6­‘‘ Д…‹Иm(ЖЎдХnn—\ГSU^…bЈI?Ea№[ЦWѓHFŸЩrЄА•8ФsЪДBЗ зЬ 0SЌЮCЩ`0гпЦ KЏ{ йФ›Zxз7Џ$2›b4—ь”6З*QАyйx+Cƒyф7QrХиžЬ€+{PрЩI Є%(рДЌiЏ™нН­\9VEЙвSЂz*=ГоRe@ІYэ'ІAЙндJБR(ЭCыY4Щ2BGGХЕђ†0˜b2xд б‹)EХ2.Юrгiя]'ї[z%‰‚aЙЇbZN/HФц$lЇЦ{YI3ЛДТё\Ыšы?тЭЕ•|Ый]лмG™yQа›`eе$е”6рНМ{Г BЅ7’‡К7єf*{БЪŸŒБ,ЂзфИЉЅoНЉVИя9Џ$‚В=e*џЛ.‹‚рWјІ“tХq|Lбфв цЕ.ОJ59ўPШШ"`цпZ€и4kWbхVс_ЊсљХ“YПЄЁ дƒ‹„хhˆХхђ œр‘T”)†Јv=Б"Н1)Š­жцZŽТэ№ВтРd(TE‹оюъ U[yVЯ шЪРЉ!i1…]TŸїІ&‘*‚ЂДE В=mŒxЂu„х1}yкјJ9X/•о™œZCфІuэ­6фЏэSрM&|}Ђлž@H‘.бгŽVgЪ(iГФЯ’ŽЫўQB\4яvо.,IиОь18™яѕ”ь­№1?,wРˆ!MS-"J?хiS.по 5№Kp9˜w Ь4ПEЙFйKo"ѓЩbЫGи5|Ж,‰‰Ѓ‡,Mdћ‰щcІёйŠ,0Мы[ОЇ‰о_Ї /) ц^SЋ7 ™35aWЃ"ЖƒZ:кCљ/% Ѕ’>Дd@˜0:Ц‰иˆ г…Q-дшL‹H š9R%Н*~юё@Eвд С`­КўDj?!xљY–S2€Ч‡’boMїƒƒhЕrЦо‚TŸzCšяq,YЈЬ†Ќ^5e1ађnЕщ^Sч€Џ™SрМкЫЧ€ vs-МВрUрŽѕћ,# 8й+ЋŸ™ieS?{uœлЉЎљХ JзЁщrwydoубоLЇPJLk штtz9ŠЌЧR(љ4]иFђw{” 144Ј+—ЕкI+Љ='”щTJ{"ѕ$qДєŽ Зё…=чњH ЧwexРОKPЊL;В4ГžчŒШkХeКa­Ђђj)јD‘4С-ђXКyu?НЌ'gш"FBе“70(Йч~ѕT’аqЁ‘ЖщBн)m lv Г—оJgиD"OБ„`*вЄh{]VeђjыА#Qн xоЛœ™ˆиЖм3U\7џCў†!†’БMŽ!лЗjiХ‹h”Іšљƒъ< ФEeŸ#(HS‡Нйџмз‚r,Н‘1ŠШ#Љ[ЏнБЁnrцПyЌ*NПm!2ЭН=ƒ–@IqPЈ’&ьќjuT ХЌ,.“A–ŠI ,Š,dOб(РЊ@ВžС3jŽйI~kЋъм†&Z\ЄgгёnhqУ:#ћ“ФšCaШ(\"_>XПШѓ5HrОN `­^бJйЭьP;б№ркxрЉќШ %@ТёJ‚F>kгєтњ™љчnzVиtˆž™уi`зqњCo )— ЌЄ—ЮšDeкцžXр>’>х‹І  ,ЩЕ…8J˜€ЙA†ŒP'-—4”J6Ž…Œ”OПНrбь4ч5Е Швдo^ЉL+Й\†\ЉрŽ?В€н)žq) š dСk6љŸ–iАd_всn0—{OT­Џ@л8‘>œЖTС3T†р&І #е  (_R,пЊщУB#.ѕ[qѕфjѕNEШ @$zМФл~/Ъ(к`ы+Об‰ФЧъ)рI—[Тfx$иИzЭs­&VЭXDX!БuVKOСw1&ЊˆhQеО%EPЄўUЄG]ДCЯфжЩH)№1ЁŸInKАkyЕСvf˜.&aЇ=‚П@T.ыž‘<)Ђ#іXХ›В €Псel7$ЇcEF@юJ:WЛvRщѕz |ЮŠeo‚7нЬ0УлёьѓмPŠ7+–ж~+7дL•nŠ–ШN!лжFБsz–. zѕЎj]Њ›:SЌ‚хJ™нщ0 PtBжћІDЛПк€—Ь‚>j†з ˜2гБ0uёU^b эчV6ЕВ –л#ЪDfn3г,лу‚ђ0EиЇ„‰6§˜№aпцpѓ4хk §žІ2!юЬ9њ”)›ƒhR˜3#aŽ№1 бRѓ-#ˆКн.sЯ№‡оРP……žžаля…H:Ш J№LіAP†ї,дŸ ~НоŒ—@WD_†…N‘‘›ŽжKмW–У’Œz@€rtdВЏ"y•%Ф.с`й‘=!Иj єј‘Шячb”§J–АjAyЖ#Щ{Єњо‹й†:ƒє:FЊЎ:{—Ѓo{„ZјЂЮ ЃI”(*f„хѓ˜мз"5›ўoŠ<Ћ^ЌЌ'эж†m“вфt…АгЋut‘`T+7,ГNe–=б5хfžYСЋ"РЙЈAєšТeѓ VТЩgВМАaНг81ˆ€’3F№аUЃ”9ЂЦуPђюlžЦUp;nе~_ыM=:2єRђT;7)Ыѓ€Й7 4шU‚Hu’l;]/эP]ЄзЦњ$Іlі€z,0“ЇЂќ3С ;‘rFTюJ6‰QЩШЗуl !<9™tŽ3жЫЬіф{x\ ћ“оRdп*s&І |K /аZRd”й{О™ŸТzZ[ЫuЩнл `o ёэ!mбT6ыК( ЪћШеQ­)[ѕz.C™,š:п*OhW•ѓдЪіcQе*"VЊ [v‘ѕ…%пŠ“хтœjГ(Гд1ОйЮЁ `ВкРŠ шZSСїzуЋICy=Џ@tФЛпЁ‚‹Н­S$NцЗЏСa '$KЙDЪœ‡Ї3ЗCцUNˆl9RБ0 Ђџ2h7S№&)™т]й$І Э.eCoќШˆЇ &}ЇIKБЦѓДb`GH(РCЄ ydwлzv^˜оЭзCКу„”e­ƒ])иМЂщж Ш–LоФВ_œu(ў$8ж ќ%оА!гuЪЌ§“Мб…PаюўnK„жУ,HžЧХ@yIl›9Ц„Тh*…’J„ŒИ]ыі‰-‹№Ц‘ЌГV(2ˆѕ†йЌšжЗ}6.'ЯpŠЖˆDŠ>ЯЩ{œЇyљ]чЂ›Es5DєЧv]“БAЖВоŽ5m(0Бі–gƒOIзEцЛA~—J•›ЅEŠT(И|К m`XНTJй;ЅѕŽ^)]ARi„€звД5# ЩU‚GБŽЬи(yм&žBфdžšb’”• иЛЖAЋxэ”ѓ :Oй)mwДЌ32KІTД.ЏџЪ +RЮИ|>ноЗ;\й4Оa"ЅtfРА;ПQчг6—M Ъlwiњ` gƒUЅ јж2Џ‘\9ГЫ†S)цІE;ЪŒ!жXХШ 1­ўtВ1‹рѕiм>чEѕ"Вч?šЭж7/іВьё@BИ5Ў: є*Ъgоѓ@nЂibеФЪ&Œг•+KŽчЂb„NЬЉлМќчBtJ[–>ЗХG с)K(Œ\њ‚Њ‹Ки$`ВЌLАОTAfђyЫљ59ЪЇBОHњЫ’яХK@adžr;NTџy-Œиh%тC}Іј9зШLЋ­_5ІkVдяar™ЦГƒфк“лаf{e†у!Іk"}jгГ DшЯеUPV06Ќtц^DыЌg+C 0YЅ‚ИЎRЋ‚Я":ъ­#&ˆќYаžињљн›ы‹• _иŠвНС…d)iёИ\ж;^+s№Ž’р)0|ЖI‘Q—ЯЄ]rIтІёЌаУ<;Уgю|ц›o˜Я™[}pИ|Nƒ™ўЌИЯ™•XŽGШ)ЗSv=Ѕ–ірpЏYTИSHЄa3`F№ЧOйИ2IЙM7Šs(nŸўY‚Оƒ[{ьL™ђ2ѓeІС3йН~џЫї{Пw’0щ^рug|rnЗЮ50^ЪšYQ&w0З™|›ЧI,Ьэ]EnњŸAk)IрЯ 8’ц|а” ВдˆЁІ2Ы2XяЕiMš9O7y……Ÿl(фtsи|АШ+pL‚чЖЎЎшАjЁpHzsAш\жPчAќwVР›§љъ'UŽŸžGЧ‹^ну(„_‚ЖˆшЈ‘—iUP С_ юЦF<(O}qўkЮVH™Ѓ /\=n€ВЗs‘ut˜„^7К;ГiєЉ”#›БjыjƒХРйGEBБOœОJ_X`-ІJо\П‡2{ЫхѓќvЖ"žV4РžI є Очњќ1д“5Љ0OЌaY|ЪtEe„ЁZšp`v…ЉТкxJ'2иЃ‚dОЋ\‚xˆ&)Ў‡Н8Љ=џPpдpA4_aьr@кќцЛНЂt=|ЬŽ5АpЗвиЕx<&”žђVц!їrY”({зБ7=фЕ_в&Й§MІЬФА+Acb4хЪ,">Є9–Є Q %#УФцO…i РKU ‰‹™Ѓ7 jФР—iHzesp^}о(oЬВњоk‹Ÿ мNsoPУзЇEэ)раžN вIpУр3ъ9і…б)ё<7‹цє‹oѓbэ СP$( Њƒ‹‘IŠ@Б5Iеьi@›Ї$Ћd‹•aћ7ЦћH•€SђуЅАЖDКjДyM Ъц—р\!?1ЏdQПlcј_иЭ ФС`n”ф Ыˆ o˜6дЈa=ЁФлљAB;ž ƒ „аSЦ1Ћ Ц\МЮœIРz%T>Ќ\‹ YЎhГ ‡Adн~у ђ=UюHНkZ!Qnъв~хHbmlЏІЇdвЅЎEОW4рГн nЯwwчšEцжS&,›FФ[РEЌFІ6>„[2‹ЏpфryИЇ/ФXіZ tљ !s76{лtv1Еœl#ШВˆмOЧaт–˜–Sp(x$дT+І;5Э§lŽўслrј4ЎHЪ€mМyЮ‡ƒKњx-Ћ“УrД;ZU в\iаš(D$­”HЅ\.р=ъŠх!б˜œq( QЊУh™ц3ц9ЉІFУx]ˆ+ЋZˆщЇœJЄ||nо—?ЩхёЂ‹шˆw ЊH5ЯфгYі„l#UЊu]ЂŠљ,eJцЩy{Yм”УИV[йчЎї‚_…oEі(<М7*;ВqEm&ОѓЕ "*—$VGM-•Ї‰Геe­Рž‡qб™LРЎMЮНШ"ƒrУј˜мFeЙˆюќсТщэZcc+Уv“еLUT ж‘Ў У ы‰бГ=&щШї52xъd›N c+GO№fž26ЪЇ–Б‹ђ‘ig%f”ƒJ‚\ikсЅО МwGз-НHпcЊ‘Zѓйn 0†УНEз˜N Ѓ нсЎM nУŽ-J1MRQЛ‚нOR˜.ЅєЭ(~П'€вЅБ—–cУzBiс3эйLT‚$б›ЉєєЙ8Э’LZтЭ‰0м]ђЗђъЪБ.1кДR’|^ЃY.рЩЇВ/сN}йчђ|N—Т|“m) Юь˜В•I ИФfЮšВ™pY~ќD‚œ. єšЮ%д№БgљЏбР`%VЄ—?RьЫPяд\r|ЯбyР§eš ъ 2†рІjPё.ŠmЋ§„мГhp…ЭЪ35џ*#дo…Яsц.Šа|1ŠЈsžЭрvyeфњ"RŽWx “мБуŠr§Ђќ&‡iьГx;‹БUў­/Tс‘ЉŠн.”ЙИ.ЫП жЈšуbѕP˜Аz†мЌNqЁл=DРdЌЧk…•Њиї"гcP-ѓXдu„XёмЉЙ"XкYDћ,Tvfиыs‚,ЧЖрЩ*eх JјцяMShЬvйч&вIY‰:aлЪ`‚IвLџN =Љ™MрЎT qГєFrу5№пА”фм6œ`ЅA—kЂиЇbгйЩ•І„Ё vƒЉ’7мЃDцЋз‹І- ќИŒ@ftѓ&ІO)НЮ2oƒy3!Q|4ИBše?(хІ”m>XОpП№o™Ђ˜ВЖ † {рѓ)нAЯdDXF”u‘AЋ"ƒJ‚ХpнY‘WRiМт…ЌчЊшЂzМ–Й(Ÿ‚пUѕ|8Ž‹’ у_3}˜B}<З_ЋФ{љƒ_O9,Œ€шW~Ц:!Ќ[№гz—# ˆ™"ж•Иг$œ[=†ЊmШ?9ш(ц“/;Ў&ёЏ-о–ыђёuЁ”ыуzC`ЋЌ‘у‚‚О1ib‘ТYОТТ>ЏЮ _ыс”ЗWw‘ќ“чUžЋ?”ћH\8%ЦIЙЫЭ8Фє ЄGŒ“.їћж…˜ьjЭѕR+{АЮ™—dёLжvJ,mВTбƒP‘!АФЁ ћрЦWа&_n<)їмkFdхШху(Ž#ЇT‹иЙіƒьєЗ‚љЎ?Tю8.e g`Ф• S>4л?:лšP}ssјlBЇц7q[=oЁOoисч™rєШ)XРпФтŽruј пн ч2№9›Ђ}&)пЭэхSЩ2И[\єІ+­Kѕв;нЮЂjХ&І Й|?оё9ПІ”yЁљ ё•‚@OбЙ>ў_аbžQцvK ШxЧt ˜У)m RN'ŸQф{NѕTгA,;A9vМЦђжc=Л’GъЌ@bU$WTQzƒ&/Џ`Ж[ГФХŽ яЙ€~<ї€LФа“§ауe‚~•єH†8…ЈйЉхЭzъс‰œ%В…u„:gЬ -”яDЬ9P› шѓ‡)/с”Ў$Ц<ї6†RДB's1– Б6ПНvDd>жцš}R-А=(Ј/и63ЯТё”ы#ЁуьGL[ѓ8!џёVщ‹Ў…э0ЭяJ;tlЙБXˆЊ„|~YFФ8хлќЅЦbВƒA•-~’†ю"HL}ВAЇљмЮ>m^™Sж№хDЦ@­вйОаy%У‰< gŒ”ЯhS;TЯоЎRЉŒМbХ e0šДqЙЋЊїр\3Є‡ ””ВеsU 4Тлb$gь *œз•Lo$ŠЬ‰—32nэЁ†BђўjIрІe]У|šМ5ЌМ+3"™E;•>xt4OˆЗ.Q—Яk%љ\MыЭ4Ÿ7^™g\Œ‘Y JJќ@ач5J iћЪdЖЯ<"5DзШuEщђw @EX yaЩ­! ”xдхЧвЪШЂД^2i€Э6мB#ю;nУ|ЅЧщ9: Уп&Пз2$xSкБЖч•Gm• #(ЧП\ЉшCфvU rЖˆѓRPfјВOќиŒkszA~*’iщ—:Fн'ъRpƒ2†MdфgTDштЫ L Рeœжс<Е›(q–%{Iй0Ф`е@аLЙЙ}EЂмЦлЇœŸ”-Ф„xSnђ{N <цтѓigЮ™/DПЬQB№W‡Dw“лАУН3йБi^Н6^Y"Шu ЅŒyг]RжCœ“OŽН-=єq1#k)Ÿr†ЌZ№PАxV”DСяЈЅ.*Ї №Ђщѕ0Oaл"жТ>уНаV„Ц]EОђ.С‘є:Ди`У—‹˜э ŠrsњМQ6>? Нr…r•3-ˆћПs§Ъ§ЫъV.5ЪЕŸМіЙVh:НЎ‰a /ˆ†ТЉу&&п&"вWЁЬIащѕUФўR,.Јпsnuz WJ№M”eAž 2Ш„ДБ9kс†Hбђy]ѕH;­ƒŸyњМКМеБЖЈ˜…‰ЕБNнй…рƒI1ШЖ-zЗS~gVЭњѓК"іC$і  jоP|‡u$Oю‘Ъ?“^Ц  yrŸА|”љЪм3hќOP?пF њ0sYw DrЧ‘SГФБЌоf"џд~ї…=%ЃTвŒ‘сDJ&(ЃЃШъ*!!ч%дДИ<–Э9}'ј$ ”ЌуЖЏY е:D4"І-˜_rЬ9Cсt Џ8$K/РGš”ЃлS'Фk89 гz}$Eж?(02эŸkvd~п›jыдG1Ѕ›ТЮ•Ÿ+$N‹ф„ЭQ›абЏYfHSQ;e}EШАВ"ѕ›уœ'(,/BFЄ ї] r ˆмюdжrѓПАVmЗW!йёТKGX?з%6ЈBа"Чa<0­NI8і2Y лxcIEЛХ{›*e ’'TБž,Ђ?ТDЙRЖ<рŽХXйšV^ЫЉ”г{в^)'Ёнt'ЛNRIЕ. ьЋЄ)0)>^v2&ф=SOˆ ‘Š=7EUš'фhЯщэ|0Ipw%„rЖНhяJ9ѕІ ћЅъ&xgM!чЂіЅTВ›ћ!DЁv@~z,0сл’"“R%€'ЅyОца"|wŸ ‡п#•ќ#Нž2IДаз!šлL‚*эw"[EbђІЄџВp1ЏDIўšCФ]њ`эФЊ"gXH№щрK IDATЮТ\"иГorгw,+Rщ‡§‚2П•‚ЗМ+ЇL mіnjCЏЭHlфd9Ж”ВqёРZH›eˆxЄ‹y Йэ ю~kŸѓ*RОЫ›Ёf!щg~‡оy/Ÿп<__(#–)–ЖZQdhй/БgБ2cљэw9b"љы’QqбoO"щ,ZO)C•Ѕр]Сi‹5і‰‹VВM1Š76IŒ9=j‚мEЊž—Ѕљ/О <ЮЫш &аћ6F…iсњ.Жм!ДЙe.}lШфCPya?z0—^Їс~TЌSх­[М”IхЎ—Ь7б–cы'чEіT˜K“Лrж3Пс8чЧБqІтrфЁгЅ>ЭRrc˜ібёъїиXмі„(эА^ПjПяљэ]иАn V._Š џОmЧSХЯW5џОŸ‹їъHЄ^њТч2ќђgbЭЊиИОOOƒ ’ŠЏBй›в–AŸ~кќ!hгП#•}МЦ§§sЕ§cРйаа€Бз]•sпЦк…ясЖ[FЃGїю\ њѕiХ‹O?†ЖЭХ“Ц9ZŒРПљЗ?сЬ3NЧчwиС&Ћ ”?ЊТ`т†4цНѕ*>]熙/=‡}ПДmc))сђ ЯХтїgтУ №ЛпLDЯцŽ5Ra9ї љЄ5‹qюЯЮРКоФšй3pыз БЉ ™›]”2Šœ•ˆяі)Чƒзžy.|‹fОŒŸќ№d0„ыоЃ&‰ЖїоРЪїgрЖБ#ёЙцюN_Ж/С№cŽРМWў‚O—ЮСЬgŸФО{яхКtЭ ?цHЬ}ѕЏим6o<ћ$ОєХН)}юa’$Иєм_aСŒ—А~ўЛјэФ›бГGwйxœrТ1xуЙ'ёё’йXњі+8уGЇ8љ_ЛдОиаВXџ­Yьђ[уєSˆеФcтО3|#хюџЮи(*§vЯ7ф„]ЅД<ЛR(oГX|тФЪЧTћOZ}яyQ@%ЫЪbuzТ Dœ,KzЗЌё‹ђЎ№#VqЎьX9ёЖЫD|UвBp”IёГzzх~;dчџХ€g\$э|-& oF*—K(•ј*W!ЇJYЙч }эІ>ZKщ мkаУМб/АrŒјзАŒX бМ€79оЙяЦš˜Б!/Ь‰в1PЩЕ]˜xЫ‡|™EXD!кŸыkYTПЌŒ$ўѓР^)ЅЯ­M”BI)4”Kh(—єYП ƒ >С^k# ’ЦmF_&ЪkJ.Фњ=њтЫƒ3Р aRЉЛ ВХ‚ьЉЎНHўж+Ќ†žЊ†ъ90Yoxійчpьё'ЂoпОЫЭŽžRc]SмЯ>'ђЋ#?лт ^•ѕ&…/}iьЛџ~в)8ђˆ#0eђФxBЯУdЪoњTЗ]Ђ“PŸoе_шƒƒПw 6}ђ VЎ^m№’sЯТ…gџWн8#.Л??уt\}ЩљvРОц2|ѓрqйuЃ1ы§99’ў?оО;оЏЂкї;{џЮ9) Дєœ“H(їJoСBGŠ…r)ŠзіюеЇ‚‚rQЄwiЁŠТУЋяr-TQЏWАЁ Mi!$'=))чЗїМ?fжЬZkfџЮ/„ћ&Ÿ_ЮоSжЌY3ГжwOэСuпМKŸљ3О{н•xяЬнайаБrx>=ђ0јЁЃБйд­qїЯ~kЏИ8tАџ,ійы=иїУ1эvFЛнЦЙЇ•Ѕч`€•пжajя=wЧv{Œэї9S&OТЉ_ќ\ˆ^Y +kбЎkTж†ѕ•Р џђI|§Єpђ7ЮУРvЛтаc?™Лю Зa8уф“0~ьXьМя!иeПCб?i"Оqђ‰(Н€cћ оє?cГ­vРнџѕK\{б9ЂžŽ=ќƒ8№˜cГmvТнџ}/ЎЙш\н#pќg>НоН'і?т#иr—їЂнnуœЏ~Х Tз8с_>‰гПђ%œtк9˜АэЮ8шЈЦžЛюE=f*ܘЉёyьT˜Б›;йд ќ$ АuМŠ’6лИЌн™шчяЄпДЎЬ­/ c&!ыpїxјXЛЖ6Ž,vˆ^6" Е‡„&k7кrqQˆxMyZIS(oюŸˆйЇЋcFМќЩЈХQ^:ƒNКкZ)сM[}ЎЭ№Є ™‹… ЊбqMБ|‡уфƒƒƒЇйЈ—ИѓХЋъUUСZ‹VQ ,hЮ€Ы€Н‚нšd ш2€Ђ,АдЈ.ѓЎLБG5`ФЪGёkЦG,Ћ‘yёїВьі‹‡QЦ€AИн>|вm>1]Сј/R^вŠ‘#ЄЦИcШLСА`эЂ №ІЌљюb™XYшc t==-Œ金#њаjЕnТJљ/ŒAй*Q–-ПО6ђG€“з—3э,јыЪБ~фhЄИSuпlЙЕО G Rпw&Јћ[C™К.kо™=Ž;ЫnЕїG№нЯўЃЃЇvQы]бє>bд†B5ДZ„ОvS7ІЛЖ›г'с*ѓl;“^}ejэjМќђЫиdЬјHлoР1=# &=ьъз\œб›zх#;аNлП ПњЩБjѕjьuШxnю €ц<іЖœ6MнэvЏ/šƒљƒ Бљ3‹Ÿ~ ЧУилУƒхГџтђйtrря]лlуŽ:9ђУ˜< Гч>›Оw+.u=’iP(п_]†ў­wФЂХ‹ЃFТЪљЯ`єи)€ž§ѓ8єˆтљyѓ Œ;ќю—˜ВэЮ‘.ћквИУœ”‹1А/bЦю{cЮМљ€1˜>msќь?ўІЯмм ш0юїЬCПХ?і<њ—Ч7ѓИsЙѓqЬ}a> ,fl9 їќЧ-˜Блћk—ЭУдїФЂ%K#FŽРŠgўŒбSЖvэbљ|єяИ'-] Р`єШXёєŸ0zѓm\љџp>pмЇ№ќќЎќ›mЇљLнq&lmёќЃПЧБџђ<ђчЧeЛ2сў'ч• Јlьр‰Пі“@%L2`QCт%ѓB٘Ѕу_žТrл9 вЅ‚ЁЏb›˜ EуŠ6G3 †‡чL{ЮuzJo8­ ŸMaв*vˆзTžGCš,€ь@3‘вvг)NnДAŒ1 ”ЦH/AŸЗW ŠTcrЯЅQe7€ЛЛюЃЇВКnm_UЦ№>тЏі CiIеŽй‹јЈфьлН<ќ•ь gъФЈ—8тh`ыšхm4kЩ щJЪRъUо\7 tуѕА”uQАЊv•вещС=ЇЩ[PДКQЩVЋDa€В(Q[‹Еk‡аnWё{Jѕ!уyj•єжЕѕчяІK•(О\6i†ѕњГ%!С№aЊ‰ЦђgРa’WƒžА–%ЁўdeœL]7їЙgБ.{fŒ18їзfџцV62й%x%ЗfЭšиQ9.]’ОIQrојЏSОZяаЯћяПyјAќ§еПЁZы€ьFm4 ЗМТ,dХЩŠ€wmЛ ўћŽ`эк!ьїЁЃ№мѓ/„АЩ'^™џ ^_4а?ibпl“M/Пђ ўіђЫ™‚}цY|эœ Аљ3qЪYчcѓ\rіща~ћр^-YшНљц*?ЭюмРф٘ћз‡a__ ћЦJ,Ÿї4&Oš€иp3–FŠМ -ЃUƒ‹cв„qЄ bRуІН+јЕpПўЩ“№дГЯ0aъл§u}ТИБXИhqШ|pсbŒ7м-YКд]oh€5ЋWcдШ(‹јКhЩваБпXЕ ЃFŽ`хŸˆ9§ѕђљЈWЬЧВЇУф уAкl`ђ$<ѕььhЈу[62—УIгБjdЭ"ŒцбH_}sё­­ƒ ЯџТЊ•4Ќф‘ђМГ_]ЫВ№њeђвfт@ПГМХuŽp‚…Y–ЁDЄK/IzUЮ:г“zJe™Э?!ЃжWтпР‹АœHк|€Ќh|‰џјшbˆ2џ SВLQ ,M˜Ж6]№ђI:n”’šЬ2Ћ‘PWЕnПЊj1ZщІjй4Ћ.[цoі #žІ№W‡J:К6У(a(™O“Œ–"›оmДžхY$“eTnЋшФrа†P”ўoC#ИЙQeУфрG%ZЈc;тДеЛKNr`rЄчBZ‹vЛТаPЋзЌСъеk0дЎдшЏ й•ЅAO› 7pu_YМнХБMЙ|iЃog6ў%Ебш”NЫе\вr ДГWЃ> mщ!ЮWV5ш—џ'ЇЙY~EQ ЗWъ§џpMeюFZпdм-7п„]vо‡|рCи№ИщCЂџўїПFŽˆ KŽђ)֘ёкzЦ–ИїЎіћаQxњй9,ОqSо6о|[˜M'Уl:­БSBg~ЩШ7о›lМБЪпкvЋ8яДS0чбћqЩYЇaстХ8эМ‹;5Щ€:6dXN@žЧљƒƒиdђt˜ ЦјпX”я/€UЋVcD_+{Є1@ри'`щђ1[2hSРџ,АpёlЕеєИG(d`љŠ•˜2ybx˜4ЫWЌLŠТMрЇAќsЫЅ;‚‡зЅц.Т&3Ж‡П9ЬИЭaЦNE9nѓ и.^ŒmgLWrГЄјxс.эмWn8™04€ жH!ћВшѓ2щjЪТ \ЫПdЃђi7й fЙ8_†{2 “+_(—ўљРкЪ)kFМ+Ж {O@В*o‡юЧZ1ѓ@›< Чх ъ/‰д@ƒЃЌFщёђd­ NУ/ІqY–zz5ФЇ)Ю&дЊВ†yъi•ш) єДZё˜1Є‹yYФы9Х J:л1i‘Ўt~љeЋЫ Lе ”Œю№"свcPFЎ$ТldXvZЎТуz›ХxуџS™щQфВ,`JЕЮ”ёiВ‹ š6Х‰т˜8Еэy вЛВ(УВPUэv!џЋjy =ДЪ=­ЪЂ„ЕЕћ№ЈyЙНœ<ц А‰ŒН›Un(oW#y\wvŠЦi‰Z§=g;’МДgSЦЊ­‡‹`вчНxБ;${=vЧ‡о‘ЗndкыBY,їeЫ-Жёri™l[-З§Ез^УЧ>ібlіyќ РбG™ ‰' q#V[мwїблл‹;}њйЄЎО{ыЇ}х‹иpƒ АэV3№яз_ ўыћѕсCqЬсŠљјєљэуЉ~…Џ|ўГx№‘ЧАя‡Цє]п‹ .П:[т-ињŒю7џ;nКў*lБљцшыыУЬнvСн?ќbЃuх}ќЩЇ№ЩуŽq‹фљH€KЮњ:Цн уЦlŠKЮ<Зоv’‘(*”W`TEWнx3nМтьЖѓŽш9[LлW_|^сїќžq*&Œƒ cЧрЂ3ПŽ;њ_рЫd;–ѕја}a€@Ы”$,oќорІ+/СSІ ЏЗ3wй wџ&а™ŒW^џмtѕ71sз0jфЬиbs\џЭ $ЈЉ-/]†Cи'LеeTЂ˜U№СД_˜^а‰ёЃTЏ6dOІ—аРP5Я_ЗžDЧQ …—5Ћђ%ЃœО}аШ#Мъxа|p„ƒЪЂђЬ@ "ЙŽ  @–Rqu4e„tМ†|šјеtsar`РУХЯG€*c2bЯ\_фF-uYрњ]эзA† 3…AЁŒЖgBG‘Lyх™=љьФтЉ5s‚ЙI„в…б1 аmYЎЩOaI‘З—wQДЪeщж R^™z-ХЫƒІд ћЧпѓ-ФƒCеїУ™ЁЁбгˆoP’lј9q€‹хvk-#Јv`иҘBtї3с/ІнўeQ ЗЧ­Ћ€ЊЊPyОмђиžм(rс%•дœN`zNyЅRЕМbѓNєNЧВg&h‘iдт2?Ѕї:fЮ•U8ђЖ~€29ДќЫ'џЎМќ2ќє'wсžŸў,х­щны|Нƒzи›h”kLп’щO;у œ}ц™˜§ЬSЎсњpZ+™ЭпŸ?ўx\qйeјнo~…пv; tТ—NФЗЎП7\w nЙљ;.}ЅДkпєWНтТGo ˜8С­Нќгя~)т™'.КђZc№ёcџ 'ќыЇ1{юѓИр ‚_;ћl>Ѕžё5ќшЎŸr \‡9ў”гёt;^yхеМТ ёЕБ"e^ИЃ7,Sz>њЌы]yяЙэџbъРž~v6ЮПфŠ(#гУ 'Ÿ†Пёj\wљ…N9МsRру‡ХSИUUс‡wнƒѓ.Ÿ%y3Кћ7\ѕэ[Ађo/уЊ ЯЦV[l—_}ч~ѓJ:Œч\z%.=чt<іыŸ;>q/.ИьJДЪBи­PkH1а}нЮЗє ьšя|ї|џ&L˜ŒЇgЯС—_РшЌoнŒ_њЎОј\l5} МќЪЋ8ћтЫЅœaqЪ™чуКK/РЄ у\ћмt@–ПQAQGRЁжŠtњр+џƒ8RYbіоYЅQ *Y+ј |ъцз№Х-iГ NЯтК2-Лl1К([р‘w„aтuI:э~н$&uл)ЎЩY{№хф*+дu—аЧI]гЄЏ) ?ъ ƒКЎ%h&нид…’!m •hR\Жљ Я”ˆTХ+ЂгЧ&Kл ЊВdyX7'7рtњкдЉ)\P+NзРxЖќЙ<ЕрxМ.hgŸ3Uјsхъ4п§HS@Д.#YЇ“)OV6HхœйЉЙ\xŒЧWŒ„i”№ЅЃ™ржKhСјnф_ћъ˜&q-Ф‘щСўUNš*fЄР~>NсЇkм.fЙжЊ“Щ5№чKвm9^&ДK„‹МŸхЛ“y=P‡ы#"X`}ЋщБВЈšЦјmЖІŸв0QSб9LРќГІ€Šm@`B#8FвaЬ™PšxWwТ[F-zžFм),љд вљ;Љ…О6@<”œŸJ‘ђж‰њtЅб“3?еBЩФPwS`й†œ кЏВ‰Mэд_S9АBф§ЃР˜.цњХfelДБсЃцуАДM4ИbяЕевЂ4щ0нЛ1ŽйД9аЈyU|ёg^љ9цm&}ŽЭC'e›Эљ!ѕЫёБЮ@QvкŸїGŠ(њ%OЏјЃУј8’<№|)ЋxgVГžˆ1Ћђ7љФ†u;kУє)ЉрМ­,#/a„ƒ2о\/*ЃяјVКЪtŒЬO”Р›ТЮ^вaф—g`,`й­ю:p_BжgТnqЗЗ]ё{пЕЫчЕ{6ˆЖ А0…;Њ­, ”…[­^љBƒІFUдХtгф&IэЊv#Œl$’.\ 5ЉЅпе CGЉљј uЪž†5ѕЏІјˆЈPБOeKbvE20aЌПCСTџ&Џli§дГn[’WўэfІIЇC"Ук’ЌcЊSІ&mg10Л, „ѕ’T­9оЙŠє‰Х‚~фжУš ‚WR‘џ:€TNы Џƒщ˜1кшG›Єh :€QА1]ШпЃ0ўј z/ˆWƒЁv…ЁvэЊb"!вˆl•nуNЛ]Ё]UЈ*ыwu› Я гHЄ)мYœUх~q œщрPЎ№Ћ3§Ю§љs†“?˜нЯEхКŽЫLžќƒлкЈƒїQ`“}‹Ў3˜l†o—Ыi) .Есўo—)џzMй#Ѓ*:1рЕ?м;CŒь‡‰™hІmЬ5Zћт˜1”‘HФбŸVђ˜№ЏrŽ/“IЏъЊˆт…ќЩ@Ce ВB6–‹шц РЯЪz2…WВЄ„вмƒIRPN9pV“B  —•xkR]Эa žšФl‚ѕњ…IAЮёŒ˜$(-Е€с9гtњ$ Ў75эЩь b1TоКЯwA“GOTŒIуvуrЪ~јШЪлfЂ)! GžеwЊ˜дЛЩШЮdтEбч4m1ќЯфœLшР `xоЂ=ZХЃbЫ`Бў†ƒ:œЩвdš†AT!NF№йИпJ‹F}шИЕ„”KЮљyKЊ3MяжY|MІУŠ&№/ ІF‘ Я—2ђ“iЋ&ЦЂ(\0-ЇђЃyWИ’‹Т} xh Xы#рŽђiљЈчPлnфђвЁj( ЗЃЎM4pржOкЅЇЕУYŸ~ =Niзh{ IzZШ0шnu›h$Њ3ыr§Ђ=Ы&isЉ)ыгр{ЯыыоfЩн[Ÿц~л]—Н;ыoSЏр1Œ‡YЗц‰•ELР%bУhE№ H€3 зvbЬ@LЧwўбЂ!ОжeЁT€щtЖIхЦ:ДфA›Гp иТёЭХ i{>(В5љgХyэTOьŒ№Jdey ћ•ЦЦБrИ~0Ш#•F†)zЇ4КНВњ_Е6Сf4­фCНЁа—€ќј(ЕЎFZ@ЫљiДI’v=ЌЫХ7ђ9№ ѓ\WК™l”Вюк%хь&}Ц0qƒЅ~xЧСžшˆ/F§%чЯ5ы6нoГ`gJqX}…[ bZ.ў~”Њ uН[џGЩ|oэBџЕЃn–њА&=”=S^– ‡rњ@рЭxLCgCФr5J^BЊc%я#ЅBС2@S+`D џёxэх1џљ9јєЇ> `лkУСхєЌ2'бх^mЕ6ŒJкіџ[Ђ=7\{5–/Z€х‹цуњkЎrw[gЕЅ•йКС“>џЌœћW,і/˜uс9шыыeїНиqђ>ƒСЧТƒЯтЫŸћз@ЯЎ\~i9 ьЪAљСC0ћспaев№шo~wиЮ_mиW–Ђ~Хнrd_]ћъRиW—z Q lЕpк)'с…'СЫ‹цтЛ7^ƒ FŸJЕЏЏФЩ_њŸ§ оxq_ўтчXљ)’•"˜Дœє-)‚#ЯщQ|>КP Ы#6+Ÿe ]CЕEЛ†ћ:іS-šuRЄТx№r чDБ;ВРЗJЄtDќ0PєИ…в~AЩ61–e"-4ŒI­Є„š‹œЕАœNgх(kТ/чЙ)ƒŒзeL:ЇЫx`ђ9—}іƒ-Їр9iŠЧP™Дf*o ŠШLd`C—! TАѓ#9ИтђQщyЗ•#k< TMБВЇПЂ(cVЌX_>зЏcЧ#xtv0ЪJ(ћЬ7Ћq-ЁЫ˜7Z3х"й r( ФнеV%№ЉИˆш8АYG€o[ Ъed9ЌMd*ЮIу^Ћ…Ђ(<Ќ§_Жy'№fб* ŒшыХЈНшэ)Q Ў*?‚I вj?кйзуF-{{ZшёїЙзЖFЛvq‡*7zЎсURIжё .А&=Ј‘OЯЕƒF]5МгV)Lжs]Тк}šа@6Ш№˜љJЃˆЎПр†qђ:E Аџўјбoфюь3П ЦcћvХ;я†ўўЩ8ѓЇ‹B{Ьб8№рCБйИ‰Ић'їркЋg‰К№C\јнїркЋЏ a'~щьГїоиї€1mњжhЗл8їьГBј ЧЇ§Tœєх“1aђtШАчЬ=Ђ€Z}0­>ім›мž#]АЪNЁ$щGРДFАђŸ уЧcћwУЛьŽўЩ“qцщ_gтВђРBйћ={bЛ=їСіянS&OТзОјyЯJl0ь§^ьwјБ˜КгЛqа~{^ݘ)~НdЦyњЧўAјOЧaГлсюџњ%ЎЙє|И/№о1§(7vwgODЙёDД6žбIЧћМяниїа#0эwqђ?уTшыьЛ7і;єLнfGtРО,x‡хЃf>MŒCWэU X6uЮ0RYЫKшдGLМЖЫ€eeуЏm=ИД4=ЎidЪЊ3ty› +Їk уЎ+ 7ця4з+|Z”ю6)с/—a 6E•ЁЏ­D5PъvД/Ё­e&'щІЭН6аЬђЋњc6?MЏ™…4‰Jк FeЪ HFй3€ =њ ьŒCљцЇ€e4PЮ5*k%Эшц ГЦрp cТe”Љ’—b)„њKY `YЩƒ”АБ_Љ)шœБ ещУФбe&юМц4lј—ouV=Щ[r­RLkЧДEИšаQЕ\ЦžКПкА‘фАœnб-чЁБ>‹­В@oo Н=-ДZEи|c™~ ŸqЖFa€ОžFъУШО7’YUhЕˆђSк№ѕдзыІРћz[ш) ”DљQШЁЪЂэ?jБj'ъ^$•Юёr§]йЂаЧ‰лф­ћЋ|Ћ aVыЈиљkьOШ†ыиAљ’­Г‹7рќяэCЋ_Ч†mŠеЋiЭЁdaомй8№рC0gЮѓ€­ЖšŸпs7ІMпк1и^ўЉ[`бЂE€QЃFaхВХ§ŽMК іЉ'pш‡УѓЯ;њcЧŽХ#|SІm РрљчžСБЧ} <ђhЧ‚йіš ;ФJЪ—O•њМ9ЯтРƒ?€9syљяФДџЈСоу.nћЦ‹˜БуLЬya` ІoЙ~іЃяcњЎя ЪлЎ\€i;Пѓ ЊaЫvх ܘ)Њ,Ю`ћ=АpёXŒ9+ž{Lžtrmkи—— мd’јš0ž|ј~|№шaЮмyААЛйfxфwџ)[яѓx}%І§УޘЗ`A”^HЊ†жйgpHІb8kTXЮh*д’р&У-ІЕУ’‡Ё2 ˆюИ.=3QVЊѓћ{Нд=d"тЙn”2—ЕаЅzЃNЮi"TEfеŸІ‹™Ѓ™hЛaшwф]еC‘Вm†еНЖ5с=gЈ "upгhFѕнŒŒЋухђiъ{‚.ъ,OWbV—Иіэ74у$iЬ$Њэ8xК‘пШ ѕ:ХЮ8фщ$Ў$гNmJ­_ДђP#k3m€—„&6ЪDLвВофO "(I„o~Ёiь@Яа–CвežЎud ИM1­ВўQNŽvщЯ‹tіУ†нгэЊі›eрљZ…СШО^єѕИЭ5u]ЃнnchЈvUЃmуЊ'cмtК[щ7ЏkwNdUеђЧ YАU=$АёёЮўRoПM#В†иŸІxЌўЌђЯв‘ŽђФкЗ&Я>^­|oN }ВЙЯ> ›еyMйцnРёRyёХ—0aТЬ›72Ьх:aТx . !  b‚ПšœŠŽУ7п|“Mƒ[Θ…ЏŠсшЧмйO zuoLшЧSO=У„бЩ*uД„ШjІ8ОбL˜0ƒ † ƒƒ˜0~|&E8V'|ЙЮ:8И(А58И“Цw=…>ЬєyPGh4 Љ‘ZИdIˆїцЊе5r$ш8 ЎšЌuS…q_Л@џЄI˜§ЇEIъК˜r ќR Uh=ьf†М‘6i•˜3В˜8SJijІ›ЊzXХТёбЄ8 –†ТВ7!D?[Y9 ,ВВ~ѓ;ИMYщPД<Цa|'#i Д† Яшзц8M.#ŒсКxЧ sQYмD!лжДgSwС,)д}=;бOх}‰—ЛўуqhtOЂЊ,X%ЬтВsРІ CШ­мD’РQU‘ЬŒjŸ€hФƒяЇсЌX~­ }%х1~АЁxе_Ќ 7X4в"ыFВOљђЋ\&’№–Р4€H ЃyŠB,ї тcДљzyZPnњКХnА!9дсдяx,SХь1;ИEaаSшыiaDo мтCCncЛІЃ{шœHƒVЋ…–пЁ kУх•_зDВr$•hйГђу2mЗS?&гЗNLУєщDY"В-œЯЎъыYй +­cv\Ђ9юНя>ѕOG"6cˆчeЫ–c` ?ФшЧВeЫ•4№чНM•}ўќиdЬ„0НlZ#PіŽ Є.\„mЗнZб$eiM~Ѓ@žЗЮЮЅзтБЎќ§§ шяЧВхЫ)˜§ѕ :™ц&O €g`ђD, щcGЩп‰Њwќ­[+ˆГWёаrwžbмнМ`сBŒŸЖ z7™€ž& |чx”MˆМ jШBд\†yˆFОl\6\1P‡ЪN?€ЅgПЊ–Лž—'W.ќ—ьT^сХВG–ИКoJdеЪТЪЅЫЉ_›Dj'QЖЎhКŒšн6›кjN!7„­ГЫ•[бР`” НcнђЩњ[аНКБpњщбQnђxQњЖnгЎъ9ЁЇ> :XŒГa&Жї0ьh:тcыiZ+ЯЯх;Œcž6•-ёt‹Ж+,s]еЌи–W(’ћt–§so1‚ь!ьΘ0VŽ<+‰x ТђZ’’ЌsёЙП!/ˆх.ў# lЌЬј+b?^Ї`–L<`<Ъ&Ог]иэŠ<юЦЎ5ДСІ#ћzблг`1фwiЌ­М( zzJєѕє Їх€pUеXлncэŸвЎ§ДЙ)ФNњX.ЅЏš€dVЯ+?оД‚nцtxх6щDщT•ќt@R3Ѕѓяё7ьЄ`2CГ;8д•KРф™gŸ‹О№yœјЅап?}}}иmЗ]ёГ{юмvЧИфЂ 0~ќ8Œ?—^|!nЛ§IЄ“mхЯœyуwnТMпО[l1 }#њ0sцюИћЮИ†ѓЪYWуІo 3gюŽQЃFbЦŒщИўкЋ“J[Мx =ф`”e Вас=2г—‚Ў(џИqИєЂ pлэwЦмИGOбШ/9яLŒ;уЦl†KЮ9ЗўјрUщЉШЈpuS( пѕ—ju­[žpы™/]†М”­,І,ОsЫїё­Ћ/Ч›oŽ‘#њ№юнwСO~№НМНЪUtв/8АЩu0t\NWtPzfp*Е^RчO#йnу]дV§х∋ƒEх Pэ-1Œ9з Й0c3з™ёцУ(ЊnяIСЃ–UА6ѓгў™xTŸIНStešDбШƒ6чЌ_&8œЄс9Оsэ3aK•ЫйгВѕRФ~ЈЖC‘8ˆ ЯCaX\Уп Ё ?"iXљ’Тф›hЫyG’" C@БЭQDеЖ8џœбœyДŒO-E3Ч џУqE|ДЂЦУЧ4ы7zI@VбaЗ5ЩТњ№Вˆk=ЃxM”т§еєƒ% J4m<ЃeЦ#ўкZд•EЛ]cЭл ГvЈЁЖлЉ]ёЭ‰~”ВЇtSкЃGєbdoZЅ­+ЌYГk(mmaс€soO }~sMQИбЮЁvk‡†АЖ]cmmб­‰tgўІzBжYw@Rыn” #€ЯгГЖбЈ“ЌјCЖУˆ0Ѕ‹=оЧ#с§B’$­~ЮјЅaН›цv”_xaікwœ}цјк)џ†M7нsцЮХyч_РЭ+Оy)žјѓc€Люў Ю:чМцrh>Œ›uЭЕ€{юОSЇLСгЯ<ƒѓ/ИX„ПјтKИњЊ+АеŒxљхWpіЙч%r;хkЇтКkfaвЄ‰nлD#‹œў)_ћz&НqхПьR<ё'ЗfѓЎŸмƒГЮ9A Фg­Ё|^ќёa<ѕш§ЈЊ?М§.œwЩ•ўщZ*NQлўы,ьтЊюЙ;E4є&}ЩсФзЮ:з~ѓLš0о}o<•ЕИъ[пЕwоњя˜2аgf?‡ /Лв,kиƒч-ŒX С1TвЈрY~№‘'n ,‹’1кОу&†6Абз §3qxUЄ=ИCœРtŒcŒŽ Ѓ1й_v^œ&1q„5RПз<яМŠcЃ˜aН mœu­жyЉњъЄ’бH†їЋ†|B[iЂ•cСВrАŠHЊJ—ХчЃз,х\t ™„:]fJX~Иp>MJ?ѓ–J$ Иi0џЄŒ>ˆDЬЛ|‹#УШћ_S?сY‡Q47‚)žž+’LŸ|Гe#BЎ‘]ђі,ЋР†]ЁhРкEд›RyIx4ЙЯ9›ЉЁ~юgрЌu‡—3§ЦoЄЁГrC3­ЅКЉ­?УЖŽЧЃ›ъЯ}ИЛЗ§бAў Фюђ„vЛrg@VЕYД~УPY†ЃŠ м:ЪЊЊќБB6l~Ќ}сј”ПиyЮu4гYy•Ѓы›й,ЂЇ& Œ­ёЭ:eзrq}cђQ2іЅ џ5…iv3ИЁ‘љNцњ-ИdNЧќ5Юy{X`DЛПRрВе2жсMЌ5z’V4ъўcЪи+<Лъe˜Q›2ъ7чаZ%>Z§ъSТзw,У”Pю€[rt‡5Xœxї­ Mчхёє‚сul•Ѓr †5дŸ–':ŠhqRƒм LіЬij­’бSљРLљc‡ЈТh6Е*jV чxI ‡ЪžmїJ~нT-œємЉ_ЅаYЁt €\Ц фђ<хъŸљs “е!ьЅ›2&§иШ"7ѕ Уќ4‰ўб@/ј)•,ІћDђa‹|š эPфЊ7еl /‚eНЬGžЁшŠс—э [5Є•.е yј<nnт.D|Я4ѕgpблPC9ЧЏ7>}!кЈЭLчћДJЗ.’„b­[“XU4€сž…ДАˆzњЦјѓЫ2мDc|X]зЈъUЛrGЊСOСћ;сКZŸgлпЅэF §”Жe 2Œ@Њ›Мr@2.œMŸ›[ђQ•‹У:#Mj ы1 9œНX'œЅћuгsgїіlРсђг€KМи.јъdE2Ъвfќ; @[a#B„Љe€ТnСsŽT.+ЁP†3v% ‹И ‡б;3Fupј0ŸЫ|[ мзLеСwїVцкwlЗ96~ыAEiшИ ƒкп†ІщЂ[їШ6•І@][БxМPf“PІYЖAq ­ђlgQy‰є$ЉxAц–sJ*ЇјѕY П Ѕ)ž2—€SўНJaЋ‘[›UДЛ{„+OДRiš\ Ћ“Д’яФзЃІ)n—Y6Цхѕ˜iPўMњ*лЖ9№3џNРгТ1шlrЙzіЪ$Ёiв$Й*ГВi2ЦmЉUЕнlЗцФ3э‰–qXєYNзƒ}PЇХN`$‰ЯF?0‰[І3 Gќe Ш”(ЃюДXјЂЅ0УкЉœЁЈ8И„Ÿ2WM•жHЦЕ’EH[еU‘$ Т.ft4с€hЋlЁхявІc–j ыЪб fЫјЉїVщЇъсз]ж~‡Ж[?YYRƒ&BЊ,­y?3HZ'gЈ˜=ƒ зNkйЈd]4Dop"]З`­Ш!"*]в‰6—]ВдЩЩЛЙГD3Š-89cа“ИВЫQЇ6пlсг<в•…1яЗ$/ЁФ;€ЎЬЉсфF€Д1…ђдpwV.•q`yШН†Tъј?WL•ЗившbсС&Х/Lсvn PЩІ;BПВaњ•‹ Й“фL_ЌЗђhZы€ЭЪЮЋ;ЋP(м3dО*Iо№jЏЈєд{.}nкм6фŸ№Љ_s€ЮЊ~bЂly’†ь$oЖAЖ)'"'зБ;iЎœ?—ы[шСBйє=ЫRƒ!kRiЙ>о(kЊяДO7‚Йa§T†œфc”Ныt,0нjсAђz‹ђАl:аЇ3~'u'уiХГ †i4_Wё:Eоgтh–kВ6€АТјѓckєžЮ'ЉZЧ]GmМU‰gF]dтЧnGsoўЬXдuфˆ-—АжMM‡Г7Ї.{ 06мVcmG(m< „ЮЃ …ф иВfnмэ7м?Н~ЗuYОZнt:эКЎык-=їМЅAnrЛч+:FЈІ{ЗщАёИ42b§\7ыїќcY D4йQ&KУМ§й’*ф§dнQmД1Ёў2vЉЩ%*E1йI—wЩ]ЇзЗт"˜$ц›L7 щ mД3Юц‚yЗ:ЂІл ?ІсЙ‰iУŒ_ЧJh0쉙‘AL—е+>w…—яXt‡Uд:.)›юt`жЯx&$uz7aQ“Вš…1ёF"іcК_•ЈIбYнrBЪ!‘ Ÿю ђ!9cд^ЪsX€ШѓШЕƒањ4ЃГ.ЭKƒ=Ђe тW•M’Є/Zƒ$ќ…1obiqЕќ:aРФi…/4:cаvGГЉ[[§’cвfтBђdY\Q™ќ› /чpzQ<+}aT„\х7вШ„жєУђvњŸч4эщPЛЊ$Ш4Fн Š#:@Ъ]хf@xР„8сЌHе/ЗЫпŸHдмоƒšJš Џc“іK№йyфё еfЄ_j­ЌNŸmІЈЪЧƒ(ЇћПЂЛЭЮЦѕ•eQ е*н4Ж“CэЖЧdn*йд*д0…A]љнеЕМ—…PhЕ ДŠB\ЅHгиЕuгдєlМО.‹"€Hуe[зnSgЛЊУКH‘5ŸN&№ШGЙЎЏ+І]nMŸVŽE…hыЈы+’юVЪжoЕщ@ƒы Ž^MЁ{˜&ќmrlš{=)‡1в\ЮPЅvSКЗ Пю\€_ ™ЅЪЁ‘NN1'б)гЎdфЕnЕ5м4–ч‘Одœ&с“Y8@щp…SІсЋгpN–јЄ)pcіK‹акt2Ј—Йœ<џ>Їию­’с8 Qn.—Мэ/ТŒоLІE4ЊИVљЋЦe<П|tŠЊф(ђЈ‘VdЎA2eG†Нг(…ТŽ bњшЭv{†i;Zгфkˆє2`;hљižlьУѕЩ\КDŽVХ  ЫЪˆР\6ГŒ„ТwWчЏт cІ dХЉќ“gџž4{х&к"яп`ВEўГ%М™‚ЭЅс~њ‹$єaYg4Ве* Z­в‹ЩнJхХ@Р€Šы“…?QуV№Ю›N<ЌЇ0ь>jU(:о‡Ю“Єe= ŠУћ]в§-\LZ|ъ™ЊЬн@уG§ШвЙšzіАaG5щicсљBьЫтуЯU0IšТ/ш€ёКF+ь70І@к`^гкQwŒOUзN6ˆГSАм֘VO+HР­нЄQHZыXУMY[’џ…[†<ˆЌ<€ЌjwkMэС<@SкF61њжІ ъ(ы@ўMК=- O†~–.яPЯMЮˆ?УЦ[Ч1Чџ€k EЙўFQw„L:.†ођЪљлсM|[§’3]­ЌcЦ†ЏŸхѓ@'GOѕZ?н­љЎ=ЂhdE4{ЫЋ†Љ‘dm‡!ЯЖБЦБLгXьдЂF;uf,…ёЮ5"UŠ1 у'dЎтYjУJЩ2'ЧGG7zЂаб аTP.’с!у“1%lŒм`••ЌVxћX7Љч$ЋТ)3Э%Є_ŽŽMЇAб'‰)Ц_V—eЪЂг яeЩ4pdiХЌC.MИЬekи ‘l`/сŸЕЅx‡JLж#жЕw€:є„ЉРHлx„I &Nуц:ƒeџЫ#ž=j2Аˆы]М˜Ж†;F+ЅЦРZј­м3,ЕЯбФsуЧИ[o^e‰кZ ЕЋ v&щШТВ*rgiЉвЈlЬб†кэфюl€Ѕj†EЛн†гпt„эО&РdТ:wчпззУF§ЧЊŸBђ7баfэ-ќЈ%ПвбZws ZV5ќДю˜'Я|н~˜з K|mh§ шЖ›=фtЃ‘tЁДuЩ6рk…кk]8eВi„&з1†KШЃ*лФqY“ ~\`ВCЎй \…ц\ЦBd'".а•"•2Zг32!ЃВцoЦŸњ‚Эб”-/ƒ.Я"ч:vл‘Д?€ђoТR‰ўтс]цЌk“M„Љ"7bО‚вчЈРЬИ2Ф“шk}Е.ШшmMешh2ЅЭbд\ЙМj,2gЪФFЬ?ICgЇh>~]Eу №aS4чэйЂ=РЦ“-XcВ N ф){—E$ьl_Ny8žќйfIs‘гNHСvбVxчвVOлY>e­j:ДЧкцИ№$†Ќ эR+ЊŒ4Р 5,чMїE1­Ѓћ$їгЄ!.|ЭцkшЛBq5ш ёЬ Е{ЌЫТ# лlДnЪQђ;џжн‘,„ю1Ш*%ЎѓD<Э$ЬЄїљaйVУГ5Щ;ЋCЋќGЊjШ"=Ї_H?г)вёЫкZc-с@5DЦўfYfЦћ+ЇМi9[М#лƒH-Z73.VњгВ–ж'ЪŸЕЕс’ k­;8м0§јуvРstРбыcт>ŸPЁИЅZў8ž–?кЧ]0QЙQПК§Ёу5б-ТˆЅ›Ь"Yј0Z6SW5j[ЃЎм§хn$2Њ—Ђ(`Т”ЖуЎм4z˜ЮЎ=ˆtрЕРœыJЫ.иfm.єGЫžEУ8-&Ÿ|їmђ7,ЌЉп+~ЛpдE9šјh"™єѕFХХў*Н`йƒЖ ]Йu/]і"жcŽў'<ќряёкпV`ўѓЯтгŸњx=z4nИv–/Z€х‹рњkЎrwk“§^ћ&Ž<ќ0Ь~ъqЌzэoxєРлЧ3,эк7qф‡aіSO`еk/ЧpЏTЫВ…гN§*žюiќmХRмrѓwАСш „`Ž9ъŸ№аїуе—–cомgёщO~œб_Лv•xЖkW)xJЭмŠj1™чўўЩ8хф/у‰??тв ­ТI_:+—.ТђХƒ˜uххшыы tG…ЎН ЫЭУђEѓp§еWbдЈ‘!Аk^УЩ'}ƒsŸЦ/-С—Пјљи†пxіѕ•юљѕАЏ-…}miрљ‰?м‡SОј9Lž0СwLvP-w„GСЮГ^ ’EџЄ‰8х„ЯсёћDќЏŸ8+ž{ЫŸ{Г.9}#њIЏшŽ;њpЬўгАjљќъЇЗcъ”)d `џО"2@<МО2ŒdŒ1W_v–Я+gЛВ‹zБАoМˆ“Пє Ю~oЌ\ˆ/ёsрыЃG‰чЋџЖПњйэ˜:09жщы+`џО\<лзWкeQрД;/ќѕММш9|ї†Yи`є(lёФƒSNќ&Oš :œbс]ГІИЙŠNеШа7ќ]хFЎ8&™‚ЏФЬ9ЅШ:ъЅќ„бАђ9МзЌMgЪ–ЫOˆ&ЃРЙ.Ж:A1MРHХР§‚,Lќ%™#Ц5`q]> Ъ™3,œ’І>qJ›˜"яxўЌћ?Ž8Щ–тЪžNšЈ:іЮmШg#FзF‰ЎПу? 3eiТšЯDД1uHJ З0…Х+иM5б’джњщыкжсўjтVЛ0› ?>рІйeыCс€doЋ…оž2яS˜pХЁq6м,Kеgрж<і”FєЖ0ЂЗ}==hљУУ­uгђkлжа5†UхoЋŒ_лъiЁеjЙГ"‹?зjWX3дЦšЊЦšкb­†,PС 2jVЪњ~]ћОl!КжSКЏftљ3jиЙпk›)њс#€Р›hуУйF щыMќ4$bСдЖК†o§@$Й&=бŽџlЗу.и~ч]1e`Ї~ѕпB§Ÿ}цщ˜0~<ЖпywьАыLєїOЦ™ЇŸ н@иoьwа1uЦ?т ї м™Q›ИCЭ˜ ЦРl0fУБсЪР“N=[Nлњэ/№ыЛˆљиGАб†ФЋsЮ%жp gУ 7ФЇŽћ~yЧ№№}?Х–г6ЧWN?tљЁь‡эп{ЖяўшŸ4Ї}хKбцУтˆ‚У>ђ Œйb[мћ›ћqУ•—Тэ>OЌ’xГжтŒЏ~§“А§{cћ=іЦ>я{‹іћэ§9SЗйСЩ‡эˆ8ђ#иdв–јх}ПС ГО:В=fƒ1L~єюТOќТgАЯћоƒ}=гўagДлmœ{ЦWCњ“Оz:Жœ6њ§НјѕЯnЧП|т8lєŽ шсейЉѓ7ЙА‘Sv^.ќšCБ)Ра&EвqнVч4)<лЄЊb|bULЁќCЃ‘р‘kSйjБ4ЙfђЭх‰єU8У•lF„"VЯtAюЇЁ  EГGoРЂшЈМйЪф" eœШ%@#7 Ј тѓљзъ]œ{›с=ДЋЊ:NбђKh­cЃЅЬžтY…Ф/Ќѕ€вm*ЁЪ­Ђ;ЊC\)kO$ТЂ№;Ас7"n­dщћkЇ_ЄбG9„ДНlJcOeТDљТчU–ќlG'ЋŠNюdюž CрГФˆОžpWvOOЫoЊqЧє б5‰m Й[h, LQЂlЕаггƒо^—ЎU–€ёрЕнFЛ]aэP…5э k+`mm1T;Iwh‡~\лxеmИКltВ–" –ыўxiзG“@sяQїe?”ДnY/З>р.ЃSѓАQ…П ˜2о€ѓљЯЯ~ Чїq<ђшcйѓц<ƒў цЬ иjЦ ќќž;1mЦЖЛіMєO›ŽE‹F‰•KbєF›uўь“С>|ц>џ`ьи1xфСпcЪ[ј;ћ)|фИOрсGЭ—ˆ:ѓа*˜1ЭзЎёџЧ!jрЖў'іœЙ~ў‹_р‡?К ї§ъWjЗCƒВCЋ1c›w…ђOпrKќьž;1}›w)љ<Р`Ћ­Іуч?ЙгЖњЧЃ]ѓwLлњ]˜7Ђ"ї5щ}ѓ%ЗУYŒ`Ф_ЋЇ…§їй Чў!Дџ>xрЁGqф'џUбсrqџнvЫиsЗ]№_їў?КымїлћбЎЊLжЎX€mwп Я=џjk1}кцјљО-vzwPйсvŒ5 Kf?Ž &nk-ь+Kaо1NжХпW€їТ“т§‡9s]§n5}K<ћчC8`a_гўa'Ь›?yчgK27zдHЌX№FщG\ЙCœЩтй??ˆCќ(žaƒБc6У#Пћ%ІlГƒ л*KьПя^8цШУpаћс?>Œ#?њIeь;#V9PФ›`ђеhгGв a$Ф пŽ]ОZэ†c]Мqи4 ˆЄm|“#O:*IыYдѕd‡I—q\fŸЪз ’ѓБNJвЄЂ6H_єШЂxЮd˜­4 a‚žэZђг)?^U&‘]ГpђР6}Щє†=K,ГѕБн^ўd жz‹Ђш:БdТ#АтVќU~†­Чє@•`^ јѕ†ќЌ^7_јcqŒПїšж_…сE ЧфxђЌЯq^c?0&žџX–nдгF#юэ)бS–~ЕŽuЃ•Є 1Ц—Гє;Б=к9O›gиŽl›NcE S˜h  жМжtVжŠ‘iсєG\ЭbXЖ”(;l# (?G’Ж!.ы8п"šŒKК‘ЪgyY9oMъZЮ3зa;ы*šВ]*лЙO?‘ъ§Žфr7рx7апЇž~Цгї†thЋХ„ёу1ИpaˆП`pЦ4(Р›oЎrгр]†єїcЮ3OŠјuЯхшяЧ“O?нЉtьйџеВЁЖ@ €л~#Єt2=†—pсBLš81М'ђYАаЩGЦљѓiрUжрkЗ^бњ1amЕ FЪ<~сЪЏл€%K—ЂUКˆ /С„qуk;mџ.\|жiиiћэАёFя ”љ‘Сfzд„ёу0ИpQ”“ёѓЦфЬ`юДУvИјМ3БѓŽлcу6т‚bђт~\9 Lž„ЙO<,rЄіЅгRpEтІ diHd7tшЮ*ЌeД’ђЮ­X˜yІ]QT‘ЩЦ6с“,I2„Ј UQ:;KзgdxюфT'ЭЁ!ђЦ%Q‚6гКd'IІ„ 6 с/&Ю~Y%Я,ŸІИс]ёдhА$МŠЖЪ„wБЎЛЄЃ јъ9яТ9U_6IЌn}2тLсg\Ќу…@­q„жŽг†10ЕMСŸчКU–ЮъYЦНёКЮжВ%23тhЧPc§шЄ?2Ј, ZЅ:юЇ0Ас,w%!ЌEЛ]ћУЩm(Oэyюёw^ƒ0Oы=m]љщoŽтWLьFœТŸ i=ѓ6л•›BЏ--I@юY'fи;UЂ^\ЈVв€ђўйŒ‡їoд р ]k™Н‡бuыЈ††M”t Іггј0бб˜’эZзч]ВfrсЂEиv›mb>ўС›T,[О§§!ў@?–-_О~\07Сl2n"LяЈ№+Gl јлК…ищтq8,XjЦD—qд1иц]лу=ŒSПњoX28пКўьЗяо!вР+џ@?–.[ш$ђ˜ьфЃъИѓЈOм :Ѕo,ћэѕ|ыЊobЩsуд“NРƒ=Šmv}/ŽјиЇ!vЩщсЏiјфgАЭЬ}№ЧGџ„Џј,zђQмpй…иїНяŽ>єЖйiё‘OАŠВъ™Ы›+RФ0Z/$те1ЬЯЪg~\‡ЕЕџЙч8}ФѓЈЙ вз_3‹—Аxёz№A(Ы’ ЧтX)O6ЂЏМђ*О§›Бї~bчнgт…цсŠЫ. с—\xЦ‡qуЦт’ /Р­џљУф3nЦ‹K/:Зн~WІAГNxŠс‹—,ХЁ€вNKaW\|^˜7;Пgь}№aјі-пУ+/ПЂ :тz•Ьz”W^{ пўо­ићУGc—§С ѓqйygVЮ?уыЛйf7f3\tжiјпсm˜СЈQЃАтЅ—№ЦЊешяЧе—žKc€ЧŸ| _>ўcУ GcЪ”~\~б9QўИѕЧЗу’ѓЯТИБc0aќ8\zўYшшLL Иiѕ+_Ф›oЎТд)ИіŠK„8Щ-^В‡| Ћ&зoў.nКў*l1u њњz0sЗ]pїОъцŠKМ|пН/і~џ‡œ|_y5Әђ.„40ЃњaР’щrp)gг&NJ‰+Ѕмblыђјwc‘ь•Tђ5—Щ@ёещk_(˜D~оЯ’ЖЯА)Œ|ІtTОАf8Ѓ i^“кq˜KфЦ€ѓ“1 єjY’EЧO#i#ЎЃЅ›ЏФЈœ2’1[џa—D4*ЦлМР Њˆ”払вyЖDќЯfwж:АF#|Д–БхGџZ%пШуњEœњuР@ma~.zэЫ‰ ЭRў‚ *Єj.`8mбzЭ0Їн-n3L;о*й ”OЋUЂеjљƒЫ§M3эЪ­ƒŠ@rЈЊ§§зЎ~zzZDњЕ…AX 9фAфкЊЦ_йFY>bmД7F…%§Yы7ж˜r€Oєs jb’эЌЂI5$  вfђV]“^ХЅBJщПУА)tNЂ‡” с\7­‹ыЂЬыс˜ЄЮzѕЕзутo^†ЋЏМ ЫЭЧНџѕS<њиŸB‚3Я9/Ојžxь<ёи#XБb%Ю:їќЗЁYз\‡пнџ{мsзmxeхR\sеИхпП'Т/Оє2\}ххXОh>ю§…фм)Їž†ыЎЙ kпx5ьюNŒuZл,а… стK/Уv;эќx№A<ѕјŸёз??†ХK–рМ ."b8ѓьs|ўє0žxьa)Ÿ$›LЫѓэ”ЏŸ‰ыЎњ&жОК іCЃнnїїстЫgaсЂХБѓNm=‹8Jˆ•й.^Š‹f]эоw`њ§Цcїп‹G~ѓ ,\М—\u­Пббр“ЧŸ„ Ю8Џ >‡{яќюњй/НуO>‡њ~Ќ|ўiќї?Роц?4Ъ( œwщ•XДx žxшwјыУїуЗП QіЦp#т:Я'?{<.<ч ќ}ХмїГ;pз=?ЯІ=хДГpн•—:љНљR№ŸuнјняР=ЗнŠW–ЮУ5W\Œ[Оwk”яЎяСХ—]‰…  ЃAWFK$Р'‡ІЩaVhи ]Г$ІЎИcF‡жн ­Этk#F~dгP<УтГxсцžŽ цžУШк0ˆь6;Œ—uмІ’УЧЕž6€ИˆсiЧEЦD‚еXрЭ6„uйvrŠhНœhp`2Cдg—nŽ‘ЉЕЇE(fH3к4Šо"|Т`^ЙвйnЎu†Ю6“W'ЅœsFН4ЮeгRпВь=KЂjИ`єГJЋ+‹OТG&ы BM3SЦœ,“x&›UdЩˆ(Ј‘”D‡ ЯКœJcЗ|JьЃ‰щ).ибŽiJЯ7ЖTДЖ™ѓЯDР7†;Ђ™XъpЂг`дЖ1aЗГЃяў@вгќšѓЊ–ы>§ rЗ)†vk—АжъэІ­kЯЩйFPmŒпLуЏ)d7гxЕж 0šчвФ+уэ-сPsvЄЕДв„[h… р‰=#ў~bУM 2`–ЦЩЄKt{']Сј q3zŸ}L5бK.ђЃбŒн-8Ÿ]Й…3ў9cощЭ}цmм€уœjы тtЁџЇрєz:­ а-Ј щ­і —тLФƒшi„†Ѓ2АŒЧ5Q Jf№яЄŒ П >’№dТYeьkЛ`Ъп)%W„ƒrc7‹ŠQ›jу•Б5~Э<Ь …TВ:И ˆ%ЇHvс’~j" §С!ъЎ­†€pГbчОE~№ХяtАѓpE y"ž^Ь<Яœ‰2O“Е=jЊ|> КbVЄSж-'ћN@2Ц*[wЁ8џ˜MбЬšР% Ыљ…ј™w^Бf)n7рr>пЦЕ-UЧ2~Ь/Йд€ZZjњ,ЛyЦИYјј4сDэЦЦœJ#Р7•tб†ˆpа8еqгЁoћB#[ІС8uМP<к1 ы6Ж8=љѓх6eGG C;k\”кЦЋ‰Сx  gAвеЉД[МЊъ&ЉGhwHGхт9˜6.Јќy’Щ-5Z‰‘ИД“Оœ$SЊC*@#йuФйЄ\—vт5К =F#lКIђЂЦ2Џ\y4єбN]WлЅur:яЏйžКNށЩ&aф2\†.ŒЈЕ зЅЁ Чу[uЬp(Џ$ZNжЬЎцieiУР§, П>TRю‰EГhB0ЙгНb…ЖZєъќШpФЛК]&.СG!tё8л"‚#ц€ІП1ТZXќЫxЇ:БUэ*!Ё9YGEеєоp5DЪГУI2"ј”ф2iЕюbЪЁ™$Ў~Ю)№рХыЇKЅХGлнJЙ+0Х€a2ZШТHфэ-u|ЎпяК?gu’юЗFЖ“œ~A‡VЩ‹ШxHЧFМЅЦўьуНЦZ br™вv\У‰Ÿšгf" їд[t’EмcaТе‡HњgР…yИS’Е2^5F0›—Џћ&6(PјЭ1l:œЕЗюaФ!ЩЛ0­–;gВєыNiЗЙѕы5ЋКFUБйФeщЅЦdPљД1MМ•(ŒfТpŒB№є›F }щŸFбА<œбIП82jЗ“ŽŒYЏУ†бЕ†ўXя•бпё+e0˜I;сŠајИЧК8Ѓž­Ъ?Џrз)&_<Ѓс4œŽ“{Л]W­gxYz\ЛЦmzф1Gтш—aыУWžQя‰? †ш…с Edф{ШŸбa_ѓс>oNЇ†яь^ˆR{ІцLбмqkGZHЙйРљqЊ”ŸѕGmDУхЎEcWУщі(њB‘vhб#"џ„Їœ2c :›‡Ў?ЌЌфS<ФВѓЌDкРi6ю:MІНц1ЙZН'нG—)_%o trпŽsВШЙ,(Fё™šFіE%gN[/W Д”RWЃЦIІY?гЙјЂ T^M•єчгА~–Ћ#H1Йб<ДHѕ N‘џёi<]Їт„2o= $ЪРЎ1ˆ‡›И№ЊЉ†Ÿ–ŽВ0ёZ?ИЦИнй^ЂЈI№щ`У–ФЉq-щ0sкMх)hюšƒk/3ъыt,МJ­kыўЂ  иZ‹жнЪSшщiљбD_MaгOЛvWV–жeЦc„ Кођ…ПЧ—Лђr ›ЋпL?г ™ПiCQс9}Уt/з[9 М;буiдCNw ІЕ_ъ„D<ЯёH5yjДё‰qhSЏ&уmCњЎг[ *Ш[Ёльдб@&#k+У=я?p,_4vэ™8 ŽzLЂ`Л-д0Ц$жIhќsFb>Еь|q2Ъф—iзvѕk ЌьD–§DмŒ?Ны[rœж…}i!xу.ш„x&%эf$R…_sD чѕM!ќ- V.т BиZ”SѕЦŒLы~qе@@Ьœ$WЎ Р)Й4*Щ w.ЬыIџe$У.oЖ+пrњќ—лљ­лŠњ%~Ќќ‰?НZиеЏІќ2їўїУђ…ЯЧіЌ>dœџКI ƒЊ3Лъ•hYМFК,’сm%$…О2рэ.Фm2ЙбУЄlдСЌbƒХ §r—ŒШ7SрLж7&tф”‡Кўl1pSИ=-КQЦdv*ЧF: ;lєё4„ПJПџояУœП<‚з—ЬХ%ўп\2/ъ‘:)l&)ŒpТвY”аЙŸŸb6юъСоVЫnЅ!}g§=дъx І›уЗg<шћхEѓќш EQhбБ>ўfœнЁт•[WYЙ 5ДУlћ IDATNД(м&mФqЧЙД”OUзhW5кЕE›xЕr*;щбAЇфtѓЯщn_]–ЖiвGZЏpš‰юр:“ХOž!›{.>зН\gъќ)Ы|3хЅˆк$v@;­4ѓMЎ“эы&mЇlšєю[ШŠ9&5ИумЄЦ№мГО~ќ“0НjЄ.Ф'RŒV"я\ž:Э‹ŽЃщЈ›W&И‘%HЮІ­Щ…ўЅ 8љiƒј, =#–оŸŸG˜S t­ПіJ ХїЋ!ЃP›wS.t(Џ[tюnx(B „kЗ,тbЭ<А, ˜Ђ€)K˜ВєˆвzЗєШ@eDДМS6ћЄžДБV.ˆ>C7ш@Cј) &ъ4Їќ˜ЙN.Б0šЧ4’ё.хpю™gрЃџ_.žPˆN.fф;SРЅп5iЎˆ)nh †§х§Ÿ]kулїг…mЈАб1|ЇH†o“Іехд~ЗeйЂОјршк+Р@dЭ }—>ф яФ–Э‚ŒЏпчыGщzТˆ;ЉMŠEx7&пSВ|C1-pъЩ'с3'œˆwNžцЇ"9aѓуz@Ф‘B№‘ЮXОваy” ањсžВDЋ,аSшёgЪТPоnЛгэЪэФnWr "Щ‡>†У]оО”e ЅПуК,[юЦРOaWюHџkUЈ+ЇЛЫ’Ÿ)й <ўH ЯЯкЖлЩ=TУ]ohкА+ЕNЋk ЎќOй ЕсZDІ{ЌVЬюhлЄ1AъŸu=˜tл дВР”‚йњОэX-ЁkбаЯr•љeu)gЉPшф:ш*ЂŸП Ћоѓ-˜ю’CЫэк7дяЭ Рж[ЭР§Пџуˆ;Іш‰Ђ+X7ia“89'#Фб@чmr&ѓгМ'.6мГ6АяЯїЦ+/<‡‹БњћnЬњъs\{ѕъ”A яYП>Эп~ ЋПGѓЌЏqЦЏNэ“Кщ-и9“BHaQPЊ€^mюCЁММ6l„ЖHЗgќ`тЇ(kџ>„(—V.Oпk/ hЄФэcŽMb `ч-ŠэЭ`1вP“ Й„f-G7ЭмФ”4lCвДŠy™Ќpѕ]o#ЁЗ Њ<­L*Ёч\i…ЁЖŸ‘€>­…фнm‰єŠJ9­’УІѕъЩ2’лї1EЅ„&MъОaR:л$h:z BVДОuРpщ#я§!fЃњяRѓL ЦДќЫЫЫЄ|Ш™W.цжŸRdDпЈ YМ,Ст_N AxПMpXгфa8>;›є†ILЩеUТ0оА‚LzxVЇIЏБf-MfАЄY–B€:&9хЩН)€З2<…EŽШЖe=œmWWЋх0zч2ЪЪJБ~§Жz™€Na HR№Hљcп N_DroЧll=›vS6+e")НЧюtœьT-ХвѓYYgkХљэQчKQЃ…Ћ+ш#!RЇу@^^ddыМЋЁіЌЂЋ1y%ј‘.з7иBFџ…_шoГђјФу…‚/Г2OgmШду‚ТЏYаќe™XЇ ЇŽJ ЩfЄ_HNљAц†ŒХŸђн€Р з^?>њЮЛp"–,щ@mm ЎЙђr<§фу8lќБ8zќИъђKqЪ/ЯРгЇcЬілу‰ЧўˆeЫ—уХ—_ –зз`=“iяѕ|ЕЧвЙчТPxїо;ZП]p>Кл[бйж‚{џ[šѕ^”••A`j3#МcЃ еЉQ„“Ž= sОјжuЗтэз^Pѕc‡ЮГ+;1ёќsА`жXЕd&œ{Ж=“ЩрЪK.ТќoІayл<<ўр”•—СњLxдэ3­YЃŽ8 Гg|†ЕЫ—`к‡џЦvлnЃ+ЅЅХxрОпЃГЕ­Э˜zя]()Бћ’вкяAkWкћu+=/ešЕ'пoПн(МёЪ XКИыW-ХДоУQGnѓ_З ]p.Кл sб<м{з(,,4йd2\uљ%˜џнзXбЙ?ќ(+-sЪ:ю˜Ѓ№щя`UїbДЬ™‰гN=…хПДvЅСС“гqyапiнЪ Ё˜Щdpеe“0џлXбБ?4eЅЖS[TT„ћ~w:ЮFwk3&žЎ*[з›pя§+єЭѓjwдсјє7Бjё\ДЬœ†гN9СTKiI1ИыtЮ™Ю930ѕЎлd§*9IЫлpдЁу0ћгїАvёж/Y€ -∋FoЛ^ъqt}ї%жЖ5у“М‚ё‡d Lз›Cl\ўnш\ˆѕ k;ZАІЃk–,0mДЄИїMО g~Ž…пLУНwм‚тЂ"eфйэrИ-e$`eл|ЌlŸXй>k:ZўаeЎ^в"ѓTC_ЫaцялцуТГЏ?љ‹fƒѓЮ:]ЮЬDЕѕжxсЩЧаўнtЌjŸ‡џў*;ј@ГрeiыќвђŠ0ўаƒqјqЇ`Ша-№ЯwоУwп ЈєкkГя>{тч‡ŒGгVcpРОћ˜ђ/<ч,ьНЧnиgм‘ОѕhєєєрІkЎє†Т=rƒRеџ1уБџЁу1И~SМђк˜rЗ=jѓ†kЎ”ќ;v7lЗуюЈЏЋХuW]nГ*ю/ч Х§фUд/YwЁњ№Т3Oт‰П<І‘[Ѓ_E&LК П8щ'і^{ьŽmЧьŒQ;ь‚Ц†z\qщХ֘™pў9и{Я=АЯ‡`ицлHќЏПкЄ=џœГpѕх—рЂKЏ@uгxшxьВѓNw sZрп%Ў§Сл}Ѓ§„ѓЯСо{эŽ}: УЖмNТwнеІ­^sљ%hЈЏУЈїРЈїРо{юž ‹*аIЏga~Ю?ы \}щEИшŠыP=r"vйёgўЎМеU•ЕлОиn§P_[‹ы.Лис™уЧ†§: ƒGl‹Wо| SюМХтЪПTп'п нЖ'œu:іоmgьsф ЖУюшщЩтІ+'IЃРПў%Ўžx&^{3jЖљ:ўTь2vшUЩyUCQX= P\3 E5УP\Ѓцxю‘№ф__Ф№1ЛaРІлрЂknФ)ЧŒЗмЭЂЦZ”‘@iЭ0”еШќЫj†ЂДz(JЊšTuЎОф"TUV`Ь^bь>ЃЎЖWMš ЊЭi&v$ДAЃДЊ%•Вѓ^\йˆтЪ&^c(ЎjBiѕPж85‹"э=ім}WŒ?сdьАл^и{Я=T5ЦуNСSЯПˆЭwиУЗТЄknФ‰ЧŽ7иђš&єЋ‘eіЏmBПк&lRгdЮР.ШЗУЮvЯШlLии“Х%œ‹кšjŒйћ Œйћ ьБыЮ`Юл>џЌгБчnЛтрcNТж;я‰lœХ5—M2+ић7 Gџ†MхЕУPZ3%еCе9й„sЮ< {юК і"†эА;6ієрІ+.6Вљќ3NХе‹ЎОе[ŒЦЧœŒ]~6zиZ ЌƒX'щйПF^§jLњ чќ{яБ і9фh лfЌlW_fјѓšK'ЂЁОЃvоЃvо {яБЋзиzЭѓvюЕћЎиvьюЕуюR>]2ztш†k.їфgЎЛъ2јaПŸяŸt(š6л юПŸ1fEQ9DQЙФЏЈ‘Кdљю)p‰…6*Œ?ђprиx ЌЈЦ[џќјУ}–ѓ‹ЭЁ%њоbТjќ7фНќЏ‚,`qы@Ћ—Ѓ~ф6hkWѕ_\ŒюжЙ(\X№э ьШ‘’…Рf#6Х/џУL§Љ|зЎДFЙeђКГd˜џнзјЫгЯтџ|ЭsчЁГЋ 1л№ж­ТШ­ЗWхKўy§хч1b+‰пw_}ŽqGƒyѓe§WT СgО‹Ц[ц}ћŽ?хWјŒQjэ ћŠУŸr…Е1Oš'W@” H|ўnњЇ7ўxЬ›ПРТїўПаИЙЄпќ™_р€УFѓм€аќћ1Dй`ШTУ1Ўmѓf|ŒуOћ >ћbК“\‡3>СўуO@ѓќ61o<ћ†оEтЕЌ ѕлŽE[ћ„’тt7Я@iнHѕ}Fэ„ЖХK%ХEшš=х›˜ѕбл8фФг0OёnХСјьЏ`иш]Ьљф]œtжљјlњW&.Оє щѕ PЌŒ.Оz{жЧятщ^Ц[яМц-шьZŠ˜bu\ЊbCВыИЅGбz&ѕ<ТUmѓP^;ЬЮTpЬžі:цdЬПQ$АљІУёв_Уж;эaђ€*УžєjїhдпWw.DIeЃgšи­ƒV/Y€A ›ЪЭЊэdcЙњyEлlПЫžXдж&ЫbхMџш]<ћТЫxыwб<ПнK—!ŽГ‰y”Ћ/@џКa†v‚uFPdьрГ?}w цЮoŒмtОљ№mUE ЬxяŸ8њд3А`a+„† Œw^{[эД‡lЧjDfuћV7йЉ‹ЪLўіУaмIЇaо‚…ђKђGуvвhїйћ8ўзчтГ/g$ ŒYhE;DџšФїяІ}€qЧœЄфЃтПwџŽЦ-F˜џѕg8р№уа‚(Т IбЉZН#G§ ЭЭѓFl:ЏПј,Fl3“ŸL?YљЉ`_ЛУЖи ZZx™Чu?X#J’;^S§ь;xtu]ZZ‚ЎХ‹Pкo›ПžNТeЙ3Х žLhУš”ЬќЛ•I с`ьЯvРЗоŒgžћ+nНC;5lЙЧ5їп}vпg?Ьiž‹ькU(ю76lР§їм…ѓ.œˆ‚‚ЌљОy%§0wж Ї“з[шУ 89“‡Ÿ§Ѓ~ЬМ Їd@ыЂE&nыЂ6джT›(еUUh]дfžЖ.BuUUŠ–…­ЖИџЦcь `qНн(мqыЭ3z{ P†€1$`ЭšЕjr+‡4Ж.ђRћF‚HмЪє@ыЂEЈЎЊ4Fo? wмrЦŒоњ{№%˜РѕJBеU•’ОЊМ…šж^}ЕДДК№J-ƒбЃЖС7\…1ЃЖХ€ўЬ˜0ќвкzs  ЁЖs>s{Fq!.›Й>ћЦЁЃQл~л­qЧ з`Ьv^љPsДTМ…‹кфа“ђhјъъ0їЋЯхыљiЕqВк”и=ЎLfоΘеџкЕЮ0ŒЁЏАѕ/ыЯ$d„HFcеx№сGaвEрžпMЦf#7ХЋWуМ “№ь__0qdљіОЖІкРгP_‡ЙØЁЄёW…6дзaцЌoнђ}јњкsьЭˆsxKў6дзaю7Ÿр „Ђяbcѕўх^ЫgzНј†К:Ьќі;іЪЭ КВ­э‹![ДЖ/FueЅЏmёѕaЭКu().v`k_вaцЎSпѕ"†КZ4њn] uŘљнЗSeјDЮщГ:“TО–Ž<љWИ№ь3qз-зaф№aјqѕj\tхѕxсеП™4œ"f•З€š‡шєэВЗЊВm‹Oik[Њ*+$ММЃЈŸ™) EйI”я1YNmКeдж=zоЃ"ШŽАэJcђШ“~‰ s&~wЫ 1|VЏ^‹ЏК/Мђš‘Aš B-Ј1ЖђBъyžюіfdёo_bdYkлbUGВ~ыjk0уƒЗѕЛБ'FLjŸL… 0Rъj0ї“wщЕз­ЁЎ3Пэъо)чT@_4деbює“љЋје••L‡є[РxѕфXkk›ypє?)љйжf`Гђг%DЫТ… ЗњMž8У:ѕёН§vИуЖ[0fєшT§,ЬД%[~Jg6WЦž|т /_Оoў§-4Я‡O>xW“2^~~>nЛљ{єxŒ;т(Ьi–Ю­UЋ~РРабб‰ѓ.М€РрСƒАrхЊ€ќќiСs’єN К_ЇеГ`ŸTE6дз;ЪmI‡нЇЊЃГ ѕuцЙЁОn1,ŽІдЧiЅ eЇ…gŸzO?ћ†mЖDAVжѕžˆЖxЩ‰Ÿ†ПЁ>'=9ЃфsC}=к/1ѕ№ь“сщgџŠa›o QмЋ›œlжЎ]‹’т"ѓ\_[kђ‹—t ЁЎКaЩ{ћн`oи[Піб№єѓ/cиv;A ЌХРс[йЯFpЅПƒ @ЫЂEИщжj8МбрzT6‚я[ЉWqы-6ф№Зќ}іБёєѓ/aиЈ!д``гВxвFЈіh6=ЇIDZZ[1А~Dљy• Ff“ лдp?iТЏ7iwВ!;]N74дЁЃГЫЁЁЬCѓg‚Dі>ёAрЛйspЦйчaћwХ&CjqсХ—aЪ=ПГМЈі#у7дзcI‡m?- [1АКA ЏoQД 2%§UtEmэиr‹ЭSЫw€ їТїЁH‰,ZZa`э0ˆвЅƒ Ъ9ѕГxIУVV$d€/РНїц;,joЧ–›L[ ЃЋKЖХ“ѕuшшъvqI“™ЬSA­tV‹-є ф…‹кPБй(фU6!ЃЎМЊaаmjQћblЙй'KНc‚sŒйгjДQ(Ьiž‡п\|)vќљСЈиtkLКњFмsл 4г!„:>0ВлљкRžDaQ%evvuЃЁЖFwQ_[ƒЮЎn Їі"ВrєЖnшЩЊmдйкJFJмф<Ъ%hЈЋQ‹ 4дKљ“ъ^ИЈ 5[nЂša(ЌŠќЊ&ж Ч†˜аCcžІ|Ч^' ЅЕ Gl 1ЄQ^ƒЉh2‘ЕЗcЫ‘# \ОV†koœ–я\>›8ђБa3ˆM*!Ъх•щW…„ў OАѕ$ž~ц9 Й9D~1VTуЩMќ#[jBз§”ры˜ё™.s7nмhф 6ОѓOlЙХцН󡘲G™„РєЏОТžЛяцЛз{`њW_%3ў‰С3щ+ВОиaНZГLЉИ“oЛUU•ЈЌЌРфлnСSЯ{6Пђ§ƒ<އЇо‡сУ†ЁАА;§^yіIчЉч^ќЋл—ц_iU'hUЇ“ЗSž3 ьwO}пv;%ХХ9|(Іоu›IіќЋo`ђ WЃКb*‡ Сз]‰ч_{Nнѕ"`Œ SМњі№OсЁЛ'cгЁM(.,РЮ;ŒЦЫOќQ:;мћѕѕЧ" IDATр#xшї“БгЃQR\„C‡тОлoVпе c!•ўСћюƒL&уЌn~ѕ™'pр>{ЃМД……(-)ЦђяWC@bЁVы`:‹ЫaнХK:pРЯї†ˆ"Г!7№тkoржkЏDeEЊ**pыЕWт•зп0^MЇ$“Pћ(цЁ ?ƒ‚|НЈ%ШЯЫ(ƒ’ŸRУъ===jkЕЭN6kЖADЩEІу хЧЋЯ<~ОЗi?%%ХXё§їˆ!хOOLшЩЦXМЄћюЕbРlн#З’Ш•зjђМ ђеyкЯОє*nНіJT ŒЪŠ мvЭдмJzт)ќсЗЗЃБЁyљ;f ^јг‘…мRK+?3ŠЁЅl}№OOтсЛ'cxS# ѓѓБѓЃёЪŸ6ѕsїд?тсћюФЮ;ŒFIQFŠЉwнn =к/СИі•gГ№рЃOрс)ПЧ№ЁM(,,РЮcwР+Я>aвšічы&Sу§Tњ_ЩЧЪŠ!˜|Ы xъйчMŒч_z“oНUUZ~оhѕПlОЁцfхkІW’ЉџЛЄ~kjФ”{я Цko_Œqшв/бэKшkЉЬоxѕ%Аџ~иЄп&())СиБ;рЩЧС} €РЩ'iџљЏНў&Ц~–.]fa0eъƒИуж›АћnЛЂЌД{ьЖ+nПхFм?ѕџ~*рЩАгIзгЉЭ&” Ъ(PPЪЎ2BAiр}п."ЂK.ПŠ–-[N]]нtџдџЃЂM eљe+щЁGЃЎЎnъъъІ‡yŒЪVЪяъ""ч9tpЪЏЈuб"ЪfГ ж2S†НNълўFпЬœEызЏЇyѓчгq'§ТС•ˆљ%ЮХп•ЄћІLЅЮЮ.ZКtMМфВ`{•кKхёЅWаВeЫЉГГ‹ю2• Ы Ы …хДџИ#| шИ“ЉшбPиЖЛMћтKZЗnЭžгLу?E~/юO(@EЊщОЉRgW-]ЖŒ&^vЕќ^2H^ЅƒхsщBйBY…Н6ЉЄ§8ŽОљі;ZП~Э[аBЧ§ъlП a@­Мжб П>—Zл[њЊ' ЊЇhH#MИъzњvN3­]ЛŽ>Ÿё5?ѕзц;еQ4Иž2ƒы(o{eзгGŸHп|;л”ќщЊќ5„ўе„ўеђЙ_Ё_‰~UѕЏІЈeњWQўРšxХ5єнlYўгПЂЃNў‰M*H”!” &”"”$”ЈЫмPД@(@B§ ѕ\6ЄŽzєOденM]ннєаЃSй:Eџў„Ђ~„Ђ~tТ/NЇжEm–>Х§фUЄЏMиeŸ:ь(zчНїiнКuДlљrњлЇ­GяhО]rХ5ДlљrъъюІћxŠњW˜яQIš0щrњіЛйДvэZњќЫщ4ўИ“YЙ§шФ_žAгОј’~јсGj]дFЇŸ}žњж?,4nХфЅщЄюљLЯш•Ё —^IпЮžЃр›AуO’j†oFDD›RџšЁTVеHХ T\бфŸђЊF*Џj ВЊ*­’qJk†ЊЋ‰JЋ‡RYЭ0*ЋFуO>ЭУџп4fЏ§ЉЈЊ‰ŠЊšЈАВ‘ +щ~E•T\еHЅеMTV;”Ъы†г&ѕђ*Џ“WqЭPъзД9MyјqъьюІЅЫ—гХзн,yЂВ‰DeeЊ†б„Ћo oU§~ўез4ўWg*šCдUбD'œuЕВђ1ИAЪЯС 4сЪыЌќœў?х ЩŸ§j§ЊщФгЯqљїм‹мvАIpкйдкжnѓW2>кЄ’&\zЕjыdћ;с—„вС„вСT4А–ю›ње—k§1PъгцКm_Щ"ЂKЎМ–ЩЇ‡ЈЈЅ‘=eƒkшЁGЗђѓ‘ЧЉl`•бŽў/*#QT.ЏТ2sЁ ”N8х—ЎўЯ+VWQЮkџƒЁofЮДњџФ“Uz/ПˆN8љT7џќт^Ўs”ž=‘јЎьЃ?‰ўѓё'ДfЭњўћ•4эѓ/шЬпœGQQЙБвBџŠZBa}о…4wо<кАaЭ7ŸЮ8ћ\c7Э;—š››ћ|Э;—N}h6эtвѕdрœЗм…Е†“ђ cўЧqz><ј(СЮзы‹Рg/NoC]Ё D’д—6:Ž)Уw#k7„Н#?ДїПy=->фЫ]*Ёїr,иѓќ„‹ гJэчъWГFˆЬorсŽлitPb8йјНЭ+­RнЪјЬ3феPž>ДНЇK,Œс|“ с”Ж˜ЫБяУшБcjТœё›‘UCЫ–Ж ‚С/O@mЅ!E ’[№d{Є—OŸ/QЧъ2тlй,ЩЭМуй˜јœAjXZOkŠ14ŽdЈkыХЁ/вƒьиBЏЗ&в7Шi:њ<ьиФ І#ˆнјВGіŽёІ–K‚ŒСђШ§ю“K_j˜ќВќя:Žз~‚ яœ8!8м<тBеq‚~<Ÿ,и“бm{юЋнТу{њиЧ#-ф’Э~QN:VPэЌЙ3Ї;mЃз"E`ŽТЅЕрL›uЈr„Ч` !С+K$Яiі!kn J{я)€ЋŒPОН)ЫœИhш+x\Џ>gPxпxfГ(FзKžСVЪnšСЮг:8 $д‰=}4HоШeСВв*…+e"Н?Ѕ0фy№•‡—Œ"5єбlБš›fX&ѓ1†№ЄQЊ€NЉG?Op ‹АдKвзщœјбsЄ4ЖцY„ђ ОcпxХ„т‹PŒЗUњгqЮt…4$О7yЪ‹6ђ4п{єsM п!ŽАqyŸJŸ7#„ймЄ$"W_cPЁЈуєd н‰Š‰T!›0Йл2•ЧšЎIЅ 'і.#"ГКYАЅfЖшщkмh3—рsŸеs,а9П1&ЈMЧe[ЊMЦjЁKO66SБu{7›•ЋЭЯ5Цьр‹dGш:ВlЇ t[azёŒ­GЁšž€Y‹€(kсФЊюbˆdѓ№и"iDjCˆщ~яwŽљ1ЙŽў№Јyd2&!“=рrЩЉ iђ>%›ДИ9ПЉ:у њхћ†d0{#YZ.•ўђчž$`J‘AНZˆНЩ €Ўђ Сm’эЇ8ыўGЧ›аІЮUJд%2Џ0NЯHa?.pоo.˜Цh/qяBёяЋŽ=#JП2ЦTрI”ЫђфНKŸ™ћœuШ 4€ТЉ›\МŸрEVwкHuziFrл$)ƒгjЏ,FŠm<тщСЪа‚™ј!$рйxpHцё“п.љ}АЭљхфj˜ЁrњŒ|ѓ„ЖЮ’Gу*ф˜№dщЖпm_yЋVoˆ”<‚ЭŽм}зxи% „р@їžT8F•‰oХp ŒёЂ ;e= ЙЧТюїЈ"нyваlчHуCD‘†MОзFЈІ‚ [УКCep…\ЄлЛЦ‡‰dБRрТф"qЭшуL цЙЅŽ„ЧЁJˆUудmM/š€YЌ$]„Y$ЉLВйЌк|œЬмFmWHРк#ѓђђsЪu[чfš|жL6§KКюгxŠW87vИв‰яЫ_/”Ц/(aзЄ)п№ .ЙžsНKЃGXМ&–ьž:;Вt ‚У[$Пї єt’–oЯ№)љхЂƒ[pр>Q‰)ЯЌ,Ўwrый ?EІЇcLцф#ЮfU7ђ<)ТИ№Ў> ,`6M Мтњ„ G”dFaX@с:sВa†MТшѓђ7yЅ4пАVЦR&оi ІОљ :‘~хсfв 8^щ >oXЋЬЕШLАрР4kŒОœ =Џкމфy:>Щ{!Д`Х ЅxuvŽЗ’€иЪmс`™ѓv-)ьЛ5*­ZхЄsЛпƒvП/\]œO.џ‹’9Œ/ž&MІ& А'…гјёЬo  ˜_Mј(=_?­)G$т ѕ>Бb†RNsWІ‡cPYCQ™GжЛІоЩ!Paъ]{Че*рœQ­ =4+д;K&эy”m+ЗљЩЫDІ§IXЩUцЌhѕ ’;@лcЭЂV0У“ѓžёа+Z(d M,Ш(М\=‡,,ќBб$KФБaТY]Mˆ­ГФ<†ЃІ]F­vч{]v:JOl=~;”лт2œDЄd€0ќ лПiЧА†Ђ„›œzKј”yЛжЙr&p СРw‰џŠТiS“‘{O9тЄЅs ~<Џgѓђс$oяйфwПE†;ždT‡щф'`їНуиI~і"' нC sdЦe—їžмvг‡Н_С“ищ IИXњ>—+cВЄЄ6lDOOтЌмѓŠлЦŽXЛЂxѕа[щ~уHЋ$/zŸт Ї`qьЎ*R’'ю•1Уё щtЧР!ЏмОƒnЈ,/є„&g8Ї.эНW<хM€;Эб9-mšД‹<ФЭsЏ­<ё WIFHё Јђ„PCтжћ žAOA‰ —†…ыfj›Л: У\™iхжŽr ёј8:uAhZИАO{aгјB(!6т)‡УЙѕіQ˜ŒCCHЮ"Њ\g‹&mаDмЭОxйиЌ„БœЁO‘Ќэ™“Чый“PŒоWУСжЃ- `p%ђ•Џ-Фy>ДžЛЈ 4<_uђ(…ŸœЫ_hЬќњ_СшAА†'D ’э\ТТ– Вћ`*, Uc@nЬЊŽžајлјzю[Єїxд,ІnД””‘ЌлŸgJ $МТЮЕьiї5ПкдqxeС`жt$M8^™61ёч@Hx'Щ^eС+‹З=Ў#œ&‚Ч‡#Ч7§*5Џ\i}8uА›аЫhсt” ЕMou —w_C@ў†>љїОM€т'цЦw…–‘9К=q[›ЯЕўџŒ1Y\\„‚Тd{zАqcмvacмE+\пъ7ђ;ЄфgОвъ:'…w+’|у—Ÿf_…шо–ЏDyœФфНŸZёсЂsЖыд"<#ЂЯ pуDожCЩ2NxЇН†ТJў.&k(eЋ…/S§s4›ШQПіANЬHŠy“ёљURЁЦ14ШЁ+H+qІ№\Еѓ]*/ЖYКЂm)ЏЊГGGFeЪЧмЉL5m,ŸчœW}C{J­лЁ4zяOnќkЮСѕn[К&tzЫж+щя™˜9к8ˆДРДєё‡’!ЯyзJШФДѕ)X:с‘3bЦЁТ^эh‡Ё#Сю•j…ДЖьАkrОЉї1Йг9d’ql II!iDr2Є”ѓm( Џ1ТцFЁ0biX$ЫKšє ŠЅ7V,г›3Е8U,ь‚"mnъ!у4яИў–…В_WYЏЅЗЉ…ЅЇ2"cёeVMйвШд‹ќ•Д2-3д<5‘љГƒ•юHŒАŒжёNŽ^(чe nz™`Т:СЇт9@оЏŸІѕN‚ЋfѓМFQчLяe•:t.2ёŽ+rž…o!…˜5э^ Б \џE^†О>œƒ!$љœ\ЧыЦЪ0†НjЩ~#JrБ˜ъC (ŽR>‘0У%к€4ыm…юмз"С‹RтљƒˆyR€YAqFЏW‰‰,пиё–QwM+сНіЕŸŸЮ |Цi“Тћ/IЁХJJЩлˆXОпxУ/ж#eщ&IхCыТжfukВ“gL@O6FІ{mkHFš/Ш.ј UWЖ’XaЎЫˆD„˜mœ-HэsHА^ESНdŒГ˜ †Ј™СС№фМЄщ _šE/†ё"“6l5sžх§?bLF†ѓу5ЮЦci]/БЦU™TСмiŸИc8†іўѓсoRu&Ь08ЉŽ)КЊM•9€Р”сy$Ёчsк ibyЦ ' cш )йє!ƒбШŽЦчщє{П a]И`‘Э_јQќ)e9B#€c(xпƒЖ“•Ђ_‚N!xЁWл-ЄЙ~ ФЭ™g@N‹ОЄC ј7–—gDЪгšф†ћ"ŠЄ4г~шјFžКъŽU/Ежk0ЦdO6F v№ИшМsqоФIјъ›oАЭV[aЪя‹U?ЌТ /ПvЗu3ЌЁоP00ъ™^›ЃеМ|‘›р`УFŒкоЛ[npWXј‹XmСl)є"'№aEЬ“ђДŽ VЃ‡‚ІkmbeВxОwNxqtймј№QДмГo:О№ fT‘[І~јXСЬ  ЬŽЦ1^KвD‡kуB{“Œ2Ž#щ6!=ŒhyТCЪїњ5mi/ЉqвSЩQ ’›Рч<мЛхя1 0N}ТуЛ@лѕXф P-NГCHи*aц4–“ЦˆГю{ˆH˜Z2щб4лдh0™1 ˆ"ЪHБq!ЋН{4Ыg’ljNЄ6li2‘єzЛ[дSŒ0ЦВ’CэБ|#@@ђb^$‡Њ(ŽЅсiЮУ–М#403›Ф‘,єš“У& E[Mж|d0EЪг,#;ЛђТшџl~Ц‡#BK еy0CжЬгЂХE ig7˜хCюvŸ”ЈcъBиыD‡9MЋфМH>ѓл4oeШ™Hœ+xe'tY'ш"ябœ^З– ФRjњњхыa_щЄ•вЧЙтО‹”їЉс'ТЦuИYм*n,FЂ(cOwcmAВ]кNUbJЂ)YђpJГ’`]OŒu=1~qвIИўжлёсЧŸ`ѕъ5јјгЯpыфпсœ3Я@YЉ<ƒњœ3OGчТЙшXиŒћяОХХХZѓ=.:џtЗЭGgы\м{зdB ЩэGТ/П€Ѕэ-XПr)І}є.Ž:ђp]пJk?Š™Щc>WВ+-ccиxщ€АbLЯаЫ;G. ‘r9 љB,%Ž/ Д№ЫйЦљІН~ЦŒ!œx№ФЉВœ§‚c†g"+E C?§N?їХ0Сло“ІEояW7ОЪІNЏхwШф!ЪЫGІ ™ќBu@фхQ"“‡H]"Ъ0$МК[/–юшяф֘мжїФиvы-ёя?Цz}„TLјр?cы-ЗD~A>`мA`З}РN{ю‹†њz\sљ%fU#ьЕЧюѕГ]1jьnhlЈЧ—N4„zс™'ёФ_žFгf[Ѓ_e&LКП8ё„џ ‰` яžяƒ теошžf™8љ0ѕ%S-L|и=ЩOШЫIт!•шq“+Еx>о‹\Нh. ѕeВ№a‚Wvœ%ŸD|/?чFУG–‘€й—‹ўћО>єCBˆyљ‡>Їd•ј˜j0ёВ‰=R“GрНH}`iМДџБФG&Ї"R­Щ ‰oЌ=7>“ЁG-Ї„œdŠ#%э Щхнд?rЗыŠ­T2ЈpUЭфЧџŒŠ‰P‰№шС-W_†Нv‹~e%иcчqые—aЪ#‚rLт†+/У Aƒ0pР@\sљЅxюХ—фY*ЏЏЙ  ѕhhЈУф[nФs/ОŒМ‚ˆLѕEtР~(//GQa!ЪJKБ|љ V1оХ5АЅ~№6x›%ў‚`Шo[ьы]ЎФmr'єЅlNDX‰ЉBJ!FlbBљ1ЁхЗотОћC>Й„Z(­“† US%њ1YPђђWЯ8ЩЩ–Ё‡ТuЯ?іёсы…PŽy0ѕ^vТП;МJ*ОfiщЙŒи|Ф^.9Š4ІЯ~!h›:QuќЌqУ€ЕŒ|іІdvтJиœ™Yй9 йа7ц@<ЕР™<ˆ<э…фђУnСЦѕЅ™‰ЭŒNЁіšдsі‘м?еШ]+cхїџЖne0žЩ8Ž ПНљ&€юšŒКкДЕЗуЖпп‹зоќЛБљї?аггƒ^y ПЛя&=|6эs|№ж›ШfГxщoЏуžЉџ‡’вblмиƒ)ў—_|Ц>ѕgЌ^ГŸ~6 Ч|*2QФ” ЗБШљ[G˜џц4pЗљбyЊ~ћ6ХxiЏsŠ‹Мч—dй>B^љ‰р ?Z ЮKї4С€ѓсё3Œћ‚CMG‘ќфgNф6fу‹yЏГgќ=G…Пd=1чзыд3Y!”ˆkAs‚_ŽzчpœŸЊ@YХЌпjяŒbtэ‘K’Ry2ДW<Ј• їєљЎ'S6ЫB$iШ…}Џл˜ngЬ TBЪЮйьЛmЁжХŒ*"SэЮ)цК|ЎS”рд ; 0j;KaщФ­А“Q<Жц,цГ,+й…CШНyѕбЮiJ Х“Ь+†єтйax[OFЎqcYpј4с<й—Ёv 6‡lŽЂ‚YАЈ =ЬтsЯІ–Хъ\†лђHє"щв>š:ѓe:ОqЅ eЙi‚ Hš^ Х aлMьWMЂ Ш9ЎЗврGЗДїЁrя)хо‹“SŸА8,О^с aљІ›rBЗ!а`эsЈ-;чЅ%є€iФЎLфtь пDаќ @к”—ˆ2ШhCRxћч:Ж™§1Шшw /я?€eAо‚Љ6§ObЇ“ЎЇЭі:Џмp€_gЪФvж˜ˆ"‹ŒЉc!‡>–.œ‡!УЯ)$хЪЧ,(Žхuq ЛТˆдІшIЌ$1Oƒ6шЬщ<юqZс†С2 Ю— ž6ЎрДы•aоѕвизƒнЯ+„DЂ]ъV—жаTdПA:ŸEЇ$xуH }fH#њЧћf<кžа№^й)ѕЪѓq„IŠ‚3eБrXЎˆmT—а|‡`х2lvфШ:ЎР Kє…ю АCз*ln4:єpŒ GEˆ‰9osvѓк‹p"ГќYžЖ XЃХЇБщЏї›ЭKтjђJiЗмPфлFYІЫ$Нџ$цПомC*нiъОŽгl ПЋFыеL fˆйQСіA9§<ЅМo9šЄ !#Q[ЕІ>y>†1^ѕh_АЦх$БВљœїPэXкf}№ЯT Bмєя,fПѓ”ѕLђyN‚ЉcДрk„’!J§фYХHБYžЧvШХzhрJУG€MЧШЦz•Ѓ|6цэШ˜ЅВЯУ'Й„Oд˜@b#ёDV~Ѓ$–œёйГГщДњх‚ХбœБBЛY ,)кеxRО›8:/žkw&§zьЦтп\F№ Е дЁ‚=W]—і›кў\ "зCЈŸ<ЉЧYбW BТ#VIЩlЪЖ Gиіќ4ЂФ‹3)ƒD RŸЄ\€щrЬ§.Р"ю+ŸжТюлыЅ|ОЉ50…KoІ4y$ ~›ф|Яф\^OИы# uБ\ˆ“16]˜…zišyЋљD—­MtїЂ ЙžEMw>UsŽ,3‰EйъaьШffWфёфЫВ4йр nпљ.bмЩАx/pƒNчcˆ’ХŒOгЌX…lо б‹чУ™@п++сЕѓ їсѕО“C ^Я9вјВ8$ЫђЧњ„’_њQ0^†Y˜ЈчлмнLZжю40i9D:_^УЮ~дКэzB™ЙіДыVDn;цх9:ЂтЖщœ“Š‰€(Omћ&ЬўЉЖ й:"ЇmN~Ь™ѕ< В#g ѕ)Ќtљ_Н“Ц˜Œ4\y­_ЃФ1w.”<ЇжбЇ `3a\PЄ<К‘bёЊwэMуXUTЄŒШ8ŽAЪѓ3Џeав&^AVhБ‚tФОC4_ х0bњšwЏek Џ9)dІ( ЎМ’‰=;0љJnzХB)‚8‘n<пж гЉ7СВЇ`МWю7–‡ё*јBажњ>—` )§Ь[мxАОHђ‹и™ЃфYзq,lѕђfЈгimЖ’‘х0qdЪrЖэб0Гс&Їƒю!Џ•%‹и5VlZ2F‘Ѕˆr”bг“ƒМ№”ЊSЮ;Ѕ‚„”%–ЕШФщНYшccћYѓЎ`‘‰бе%Ž—ЕL+УЧе˜`бх]Тд—I&˜R А˘jВC冧4]u{ tœЕіёДAqь[sю%XЯdB$й>хћЄpдŸ5љ ž!тŸ# Рє@„M0СъиzD2ЬK€тЌ|жоЮ8–[K˜}еЊ@!\$rМ™БЎxШtgЙ l !С4ЁвNФK{чФЪp@а-@ХKR:Žп*YnA˜МtqLб™ђ=eЪ@OОКјёКNЁ3\|ЩRмŒЦ:'.gVи2| ьч›№zђ|D’мНЭwBm}'Ш^ Ю"&ьМsЯ}{7‚ьє)Q”№fщl;З€јCѓ"pgЪbРЙмч™%›ё~Ž—”+6)C2m(ŠУfRƒ›ь{їn?њ)yF–ц†—ЌpжJЬ,XАG!Ž}eiЮWЬлa2к(_l+>б‹l4 БњHЊЉ›ŽйB4їnЏХЃЏ?’po Vі8оpЎXrДБДg.cb—6QF „Wад•A‘”C6sКhHАђ1 ЇГpртЗЙЪі“ŸžКцeъ]&0‡nС5ЮДСЈНkЕ`ЬЈНL‰ЄїЎеЦЄ™om:§l=tЂЙwР*цшSі_}pАUуH _kяnЃF.YГд_œЈ…n1!1“МIљ9ѕlяЎёiЬ'†Иv˜™Qђpд2ЧрыЪmЮюЙяњђмG%тЩ"ЉмBТ;дуѓ„?џЬv6.дŠ]‘I™ЯєКФ^КЏˆŒJ`iы< Ќ НG[rеЂVMЄ№“ћš§иНФФЩ/9o™иzLŸ_Рй&$в^„s фь‰ђzБ O>њJJ$oSу†8.ЉєТ^„^ўфžёcaJОŽРх‚›3’HЦч0™`\ž#}uššЊ7^q N9ы|М§ў‡F %Q№ЉМЙ”B›ПщАŠ+-cј 9„ІухБ8cЅ„ˆtz­~Ђp“і›Ќђs7V^I $4teRXЫ^БКVјsV0R.!6ќzъƒlЪe”9Ѕ1#ЩбV"8pŽЎрr’HhЃ‘ПїхўDKПŽў/ТИћљљїi№$вФЩWщ/X>LЖхЊ?gФЬcР№Пў5CЕŠW3™Œl"У6і‡:ќ )пл4еIчЃ‚%dљ(‚AгЦЖЭХŽb ;‹Її$хg|;%;ф2ZЋ(kмYнaкЮAbqЁB*і№ф _b“‰ЛPбЊg//+Ы\tфбЅ.’чЎВєъСšжџ›)щ“Вˆх чтOO=ƒ /ЛвFЌl›Mъ†)ЌЖrЦщ;Ѕ„”v“MaъР8Т анЇ-СjOГАmEэШІ˜!о0RgŒQcddef€H_XЈц_f‘Щfйqf1тЌvМГmH|ae №+ЙягтЇ"PЯ:ˆМЂмёœВє-ЙЏzn lж@9,ЛОСЧ~5у'”ƒНO№БИNtљ@?tA”W$СО zЩ|нќ]Xы‚’yбЪˆўеn_Кјy&Ъѓ —^^‚щw­Ы\(Av=•лДŽDG‘—Х&Їћe#YЅ›Žї?ў AFaоEƒВЊћHDfЕЛ– >$|LНЯСе€fЫі%КоЇМ$pyЈѓезFІ?wQ{NЙїVЫI7MW-+/‚ё Є .rЦ#$М„М :ђŒбЦhМ!Г­yљњ3’рХЅDb$кШХХпЋH’SF†&€sщчGK—†SВh7x2ФZbІ}шНQѕйчкуhNOђВrћЬЖmX‡“ЌR<Р›ƒ1s„EлёА;h 'Ёt>YУVЫrЊж. фгml+rЫ–лДй}p5Кm“eКњ:\АісГПЂєY№6=™Ёs_ƒjКAгWw*’ŽCnн)з43ђЭ6‡‡Їѕ=А}&Щ`іѓНіРиблуг/ОД•9щл jЄТŠЏжєхvвXч†Дтѕо”‚Х…Э$TРљ5ёIЎА'РЬQˆ"О †gфИйЫз у­ШЯWѓ)Ѕ‡3ŽcФ=YФБно(kVУLbwW{В`ф@_ F„уqуЪOш5Ž0KиС9 ^Шж((&Ь/Й Щєц3Y&Щ%0Eт&%0<ŒP–СќR‡™gЪ˜ЊЄy|ѕЪxЫ=TУd$Ѓ№Оё$ЙљлsЙq_ЌёВєcя]4œФ);”—•a§Ц (dПL jrXT tГ/#“О>ж2ЦD Dж8&FfbiТОЃ>t›Jxф;€b…Д@жЇяЉˆ\Йwg‡xuiРэ‹\рМŸЄДВ<|\мRM§р{у§ічGОѕсx)Sф_љNљ^ZGцѕЅнњYЪGtЫ }N{AЙтх‚Ч“КЭ э=Œь‰*Q„(#ЗЂб+ˆЕСІг9 ;Xѕh}ФO$ЋBxоKM~kрЙьЪHZеB “—‡‹Я?3>| П™ŽЉwџЅЅЅр“жДЯЧ„пќЭг>ФВyптќГNWgЗЦXб:ЫЮEї‚9vB­–‹ъјaјфЂНy^zъЯЈЋ­5ЇC8nq! Ђ ЂL2yyШЫЯG~Q! ŠŠфU\ŒТтbЃ Аљ…ˆзЎТХ.@їтtЖЭЧ}Пџ-ŠŠЌБДДLЙm-шlkСдћяAII‰S)Дa &]<­ šБzх2Lœp§жГдГNнЏѕЌ7ЯА§vЃ№Цп^СвЮХXПfІ}њŽ„Эмс.lcЬ™9›_Аo6rц|ѓ% “ЩрЊЫ'aўЗ3АЂc!џуT”•–Кіак˜4с<Д6ƒеЫcт…чšo™LW]v1цЯњ+–,Ру§AІg %М№'wцЬј ы–/ЦлЏП„ІЦzŸV/MЄЂеKMОєc7шЧnљўЧnа]цJKŠёР=wЂsС,t.˜‰ЉwOFIqБЭыЧn<ѓЇ‡АМ­з_y о|щiЌh›‹ГO?UТЧ8ё˜ё˜ѓхАЎ{о~эy45д:гЊаЪ™зЊаЊNљЌк­ь}Пє§{&Йк“UVSŒуŽ8ŸОѕ7ЌZ8-г?Сi'чыФЃФœЯоЧКХѓёіKЯЂЉЁŽ)eЏўљЫ.„i{`клo`ПНїTф(,,BїьЏP1xАЪIŸмТN9!;м“эnEЖЛэjEЖЋ•~"PRZ‚?мy–Ьњ‹g~Ž)“o‘эGЅпабbЯ‹&ЙcУ†Ю…’єъў№ƒФзќ пЗ|‡о|лlЙ…Ѕ Аwпz#кg~Ž%ГОРg!a! Чш‰cyоК !u&5„ХЩЧ vлђтШг[„<_šШЫC(К&ŸєЉ>м€TWЊФOщc‹ьХOx!Ц_ŠwЭЏЙШђY(-Р”`#ч›щ€АќMљА<Юпi™dt%ѓvƒ)ЯKЋaё#“) №5ГoсІЖ9B™ЬiiMЭŠ?Д‡1“A^^ђѓѓPPТТЂАЈEХХ(*.DAA>2yЃЛ!$яѕєdбггƒžžlьщСЦlГ16fcєdГшЩкб9НЕŸХDŽЙС< ц„АSУLYЈQmрiMЩх|’#ƒъЌіЌ<ЋО'ыŸ)O)C$ТžTЅМ˜dОіzNcȘHtњи k cШЛžЯTƒ-ФзкР x>§]j„ŠoŒcŽG–С„§џCАЧ)Fжh|ѕЭ }IЮ>у4G&ХЎ˜x!Њ**Ал‡bїƒC]M .ПшBƒH†3Edяѕ|ЦПќq*žyс%lЕѓžЈнbЛџGл{ЧiU\џуяЙЯѓlЕ"lп–bl‰5_+іžbдhу'MЂF,(іо11‰%ЖˆK4ЛЂ(ewйь.]…vŸ;П?fЮЬ™ЙsŸ]%ПсѕАЗL9sцЬ9я{Іс‚ЫЏТ;кTћWЇŸ†Нїи‡žx2Жпs_єїїу’ѓЇuНџП {уа‚­vлю7СЬ иИvЄŽ'ЃУ…,–‡| N8ѕ ŒиnGLѓmмrЭ•ЪˆhA2sЩЄ§"R_u2Q™l™\й\ВEEШ•kY иoп}№ННіХЎ{LРˆ ˜tсљцЌЭ+.Лее•ЗЫї1~знP__‡Щ—LbMЂ ?рћу‚ЃЖТСhоŠ\‰ой§+6щžzђ <є№#1j,6Rs{>~zђubЏѕ1PПi/Мˆ}ікгы}іо г^|pюйgaП ћ`џƒCуV; ППWNΘхIєя‡rFlЙ=>рцѕЙgџ ћMићrЗЏгO‚Uж!EъZбcŽ<‡{†д6тезўƒ{oПy%Ьr* Q>дЙхC ЎИфBTWUbмn0~З}Q_W‹Щ“ЮяэКџAqќO0yвљИщіЛqш1'тТѓЮ6я9тPvь0Є~4^ўюНэFcДХЦfx]lRЉ~lИ]lZБiUj§ѓŸс’ѓЯХy“&ЃzЫq8јиa]wБЦ8–8fт!8ьФŸbHу6xѕѕ7qяЭзЙFŸ{8пBЪЬѓФќљСG№ѓ“hŒзaўџ§x&z–.ƒ7*Щ Ѕ€жQ1\e_1bXƒcЇЏИрЗЈЎЌРИ cЧ§A]M .;џ—ж6пrФъm;oay{3vкk?4ЕД@Ц1G ЧS>„mwќт|ѓ?Ÿ‰ƒ;ѓц7Rbьи1xщљЇб8vKпњ5hЛ )тќ IDAT,hѕ8IвчLЖЬŸƒG{ ЏМђoЬojFww7т8vB№Ы§їлЇђSœ|кщxьЁПП?9ѕ <ќїПрЏ<„щЏП‰9Г>ТФЃŽGsЫ@ХАaјрнз1|ьvІёхк•hмzДЖyд Ьљt&}ЂM_1 М=УЧnЯIQ’uР”P^V†žіљ(Z @@ЎYQО…SІ\НTFюъ_НTЧsљАр‹qрЧa~S `ЫБЃёвгЃqлIп,EЩZФqŒѕ+ЋkcuO;Š6ЏЁ2љ•—•ЁЇmЪ‡58tЫo–@l4 vќС|ЂЋї_uЛ R‡цOџ‹“N;|ќ‰х“У7^uђђ2єЬџ х5ЃмђW,В‹||Й€\к БE]‚їoДкfО­vл=K—тщџ‚'ž†GŸz–ен#ЦL[А$Ыž6*yВНƒџ1цЗДЖнˆ—{ЛьЅЂљщєГЈb„ъ“=mЈП;:Ћ]ЪJJАdЮL”п-М…ƒN8ѓЕќm9zцМ;ЂrD’ОK.PxЮ3яu‰Јёђ хщащ!?’”nˆPм@!i ‡wˆљq)$в0\ Œ'Ќ‘ЁˆсВ Ё:$* Чгj€vJ>ƒxьgLHE ђ.С Я’w‰ЭDфМЁ А&‰ѕТЏ<;‚№œСIТxжA6V— LЄ"2^C~в Uл\ы6Г*нzбx}Й-ГЕȚoЮ‚"XYЕfA4eУg)а+э–NŸNFŠ№пJЇЮФўбыф!„ўМŽЊЕsЏйŠkЇмф3ЇЛ9 (Ды ЌA`ілЏŽ ŸNР1žIЩK‰ИыЯїу†)—!Џ]uy TVT ЕsЁўR‘hэXˆЪŠ эfCХ|—„Й>њфгQYQЏИ ŸПѓ,јф}}иЁЦЕ\W[ƒЯо~ Ћ;šАКc>|ђ>jЋЊnнŽŽNd„цlсцs3\ЗЎђlŽлa;<ћшУhŸ=п,lAOгl”•–€†šhƒTЦ[ЉNжсЋв,д™#aНІ‹ЛЛеCQК—,EMu5ŠJеаxUUКz– —Ы!“Щ ГГеUUк+lЄЕ­•hСдЦ=є№#QUY…лoЛЭѓО@зТvœpќqК‘yЬЄРМѕі;иa‡э‰"ьПяќП§їC$vи~;МѕіЛ€†њ:4}1rэ*ШЕЋанб„Ккя‹ hmkч›2ъыа4ћcШоН+ан6OЅp5€CЊ4НqЇёу№ъДЇБ|Q фšхјfi'ЪЪJн„Щ^l^ћЊ“ўЊыъЊJДwtšxmmЈЎЊtВ_Зnњњњьѕњ>фr9;пЏ>?Ы;› ПY‚ozкœarOХ2у{QРоY­дPW‡й_ЮatK'нNуЖЧЋЯ<Žх­s W,Т7MЊќч)цУ‹ЄcwЁMЬг_ѕ5žšіN9щ8lОщІи{ЗясйџХђсz№zl?=ЌЎЌ@{ч"Ї­c!Њ++ќЋлоw.^lŠ[гл‹ВвC‡Щ_‡ЖЮ…ЌYX{ ѕƒg‰M>pѓHxѓр–УЫMасЕ Н3S<ЙIxШmрШ+Чђіђ2Я<:B?јtјЌ4ю…TЖкєЁњPX§>‡ГMфу№чэїOV!еЏP!О<Єеu Ѓ-дq{4lЩeдTЋ\й\Fa+dQ‘zžЫe‘Эfє‘|0Н|^yу|lІnєЧаS:ˆсxЮ h% Gчь/"›ЋжЌД‹ec wк8ЫЅЁ…МŒ|б™г”FE3иhь{ˆaGBЄюЅЖѕАгOЄ4<рщœ. $ФF‰ˆХt6Жпu’ и;‘ бЉ€$Ћ7›‚пSўw=’€ф†&еœ!ЉЏUуоіЇП`Ф№с8№ћњђ1К{– ККкИОЋЋЋбнГ§y‰ОXЊ9 Б<›gбЧјb~3~ёЛ?`—'b‹Б;рМЫІрЖЋЏ0sZ;:1lы‘Ћ…ЂкQ(Ў…ђњ1ˆѕœШМіВ™#u#вмNAŠ5W3Š”+^Яјћ=wbъsг0nЯ}БiУh4lЗ“Šk6\UЇwэZхŠ•K>&НD>Яп~ 1ыkk•ˆ"4дзЁЛЇй\r%%шYВ#G5ЂИДХeЅh5 н==jюJ&2'й•\с†“RъzКцЬ™‹3~q&vмe7l2d~sояpїЗУКVy&p$МЏЏsчЮУ Ч‹OgЭТчГgу„уŽЦœЙsбзЗ­mэRеQМ D‰њeЪ6ƒпu%ЭёЃgњКЕ­CjF@”nf~™ђ!ЌЗВ4œV@J<ё№_ёи?ЇЂqыёeC0ЄІбЉooЏ—*ГњКZb˜гУљЪ?КК{аP_gюъыаенз0г@ЇЧD <ёр_№и?ŸBуЖ;C”ХКбAfл•y)ЦЫаьOv,\ˆmЖ0о*ЩП=љ wјФІU2|KЗў:яооЕ().і†ѕ/Žећ\.XQ}яОЦ'џЧ1/МђжЌ^эЭГ‹Мœ<`ѓq ИКяъY‚†Zђ№ Е5шъБsZ{зЎeр\ЂОІ:иi|QW7ъxўеЌMMыИ #РИ<Б8\44?Q_;|‰н_‚—Рhј›ђ<Њњc—ОXyF#•m†ЈНјA ЦЪс гЮ­ЋLў|Й‰9Н>яy™ix{ј|ёЪu€ўв™>§Ay Щ`к3XW˜:"!“Э [”CЎ(‡тЂ"—фPT”C‘ŽЙ\>ЬЬРc>ŸGО?ОўМВY`г6AFю/ D:г5Xн­г„'tњSrXWЭ#іEUz"чЎSАZ•Vlsю0Я,{Ю›“тЉђСђc4 5оT=Н‚Ч3+нi”Шo/6E‡;$юЦ9„X=њнd|g У“овp7Ž'ж‡–ž LJфщZƒСЕыћёы /ХЭWNжq€Љ/МŒk/НУ†nЁCЗР5—ќS_x}Бд“tе_3?BТљM{єАп”––!›ЫЁДДЫWЎ4_1~шQмwЫѕ1МйlплyG<љЗћЬœ~­ѓ `•lв,;BрКƒЄH ЌДK—/GяКu^_‡[ЎОB1B -њќ‹9јщIЧ!“ЩВ/,iМ•§zNI^вмLыбœ<щT ŠЁ[lЫ'§O=7Э€Ыч_zWMО5uЕЈ­ЋУuWOСsг^T xŠдМРžSšжв .ТФCF&›}9Р+/П€C9•—ЃИЈхххXОbya‰aJoк /aЪ—с‘GЧ#>Ž+ЏИ г^xЩ0ѓОПќїџщnŒj‰ттbьў§ясЙЉ[Хъї^DHмwџпqџяrг?љ(ТJжЭ ЪЪЪаГd жЌщХˆ†zм}лNД™Г>ЧoЯ9 ххehЈЏУ-з_Х2Ає-\Д>™LІ0ѕ™чqУU—ЃЊВU•ИёšЫ1ѕ™ч]іљ@кKпŒ^ЛoН!wсЂХ˜xаjOЗDEЅmчуЖЛџ„ћяО ЛяК3ЪJŠ1vє(ќёжŒБ-+-EЯ’ЅЊќ†:м}ѓuџ(пO?ŸStЂ-пcНyEж kЃ>уЃOалл‹)“~'Ÿ}оешЮbŽиђм—вЦхї˜њќ‹Иaђ$T ŠЊaCqухcъѓ/šє3?›пўъч(/-ECM n™rЉЮ‹€шаз>ѕ,n˜< •CЗ@uХ0мHѓ}‰6Mьiƒ\вЦР Н—о/ Иђь%ž3чз+-ЄхЫЫц`‘XАr ь:aі<љеCВЦ,ВзfH)o РhHЎR‚IНХњrt2šzC'{ЯлPшЃЕ3$“Щ ›Ы"—S В(—CqQEEYd3Yd2ДОAшоb3яБO/šБ‰X Hщr2ЦлщЂѕS^IEЉGŸd Sf_>oзHЛ>САˆјЂ‡ƒ9ЈqZФАƒЯ%tQЃТйvqŽŽюў5iС^X@ц'1Gъфs‰'мьœЕэЎЖ)DТ›˜еЙ™ 4™| ыѓїѓхCџ‰зь8ея,˜д€P“lѓкўж?РkoНЃiИќЦлАtйrЬќЯK˜љŸ—аНtЎИё6#Ъ•­гш—HЦИѕOїуќџћ%zОј­НƒЃ9Чўь,#ФЗпџ о|ož№/X>яSм~ЭјлуO:ЋфбЋ•fљXbUл|Ќl›@Эџ\б6пYˆѓЋп]€Ы.ј:Ϙ‰ч}гўѕЊj-Ј<џВ)јеЯNСЪЖyјІГ…З‹™єK€Y­rSї№ўунПŒЗ_y‹wсІ;ябe\лXБr%о~ѕeМѓк+XЖbnМ§N•–"WZŠ\‰ђК(`™C6Ћ•GФW… \pб$мsзXПц+Шў^P%nН§\xўяБД{!к4сшЃŽРБЧŸФЈЇР<•ь3№Х—^FmM žzц<ѕЬ3Ј­ЉС‹/НЌ LŒ;юКoОѕ6І=ѓOЌьюР]ЗнŒП?ј&Љ…ђŽ{юХ›oПƒiO=Ž•]mИыЖёї‡a1И!qЩ…N§љYИvЪd|НЄЏНє,žіЂ“юЌпќG~(–u6уеiOуб'Іz(MwСХ“qЯm7a§Ъ.ШеЫŒжœ|еuXКlfЭxГfМ…ž%KqљезЈ‘k4O§Хџск)—сыю6МіТгxіyM78Rт‚K.Ч=Знˆѕ+C~Гдф%ПYjюэЪsЫŒ;юЙзпrюМщZt/јџ~юI|јёLЃpO=ѓl\{љХјzQ ^{~*žіЋ7Œё;ћї“pЮ™ЇЃoYфЊХ№Ю>џbœѓЫгбЗДr…І<ўќР?АЩFупЏПe 5чі5˜РžX“ЏЙK—-ЧЌ7_СЌ7^QќПюf€Ю:Ž:ф@,›7 ЏN§њŒЭ‹ЪчžQ\UњЋnК  bжЏрГ7_ХяМчвS`Яи2яЅ}Чјц5жАТјрFіз—1~э№“ƒXюY$Ођ7~yЌ}8ш §рџѕ"˜vf р4ГД эW}АЦЗЕ+чa ЧтЅ#йEм~Ы“D‘ЦV^ШŒн1ЄH [гаu6Ї6З^GНˆ%ŸGœ7‹ZьќGc§Wd2ˆВjG’LV-šБ[т$ISlГ^CШюйенБq>ЉUе4МMр„œpьW і 1€e5ѓVЩ‡Ё§Й’4Ož;ЊЃ€fЗ`Ю_;ї“іиєРЃ`sPЃШл“RУcх­Эd"dѕOM3а?о ƒ]ОKи)žI {яn!%m@TпzпRœљбœ\zpJ™ЎЋз'”y]Uъžы,ѓLЧIЃ[‰ŸрIТх™ncпСсю\6Щ—„Ь™ѓшŽАu‘D‹*Ык?›V2‰њbѕТ(Џ >XЅЦkрУD ›ЧzK‰8Ю#ЮЋ_ОПп<ЇЁuES щљ@_HD|Ђё GТїœЩд"‹"‰їу †ОoЂ [-^%ѓљ‰”оќЎsп (ў ц3“чом ‚WЉяёХЫЫїiIЊ@yЁЏ№фГw4N:цHљУSсЮlgТфЭоK )—\сЖS"Џ@8‰…тRл2…вŠыгэ‘ ЩЁЫ/“%іhЈKщ†w `Ан{0†Є`ї№УЇkА…№Иtф<ЏсW2E†Ÿ`C,.7NJoŠH-ž‘н@<ЃGЅTе,p%№E{+вќ@D/Р Y RЩ7 f]€ZХЌы$awdЭЌ ѕjзіj0$МГЂ*ŒЭƒ” VђRŒ 1ъY˜: )ЭмL€mDхAoУєrЄЫV QX–fбЬЗ”­шцп МО–ваiMaDSфФ2жcE™]””в™њІ<Ц%­;D2Ѕ#џТДŒдЌрЖЮKЈ'|љЮПгqE №8ЮймFy:N5Дp2АnSН <Б; –“FzšцŒYYf'hH{ФLJ,'‰—ІЛщmуЃm>ЎЮея#;дЭ›M—ЈЫtWVIv4utћЮ f,ѓvЎ‰‰оzCјH ’zu\œЄD>ŸG–@eоЬи,”–ЏОATŠhJ ”JИяœяЄœШ†:„NgДFэ.зЕЬЩG&zH#xЦК`9ўc,mšAwˆвyІЩоѓј&;ŸЇОŠ аЊ _ƒPžљD` С5ьХEEјхЉ'уo? хЅіНяе‹<О{Ы­†LвэгiHё^zёНўэ_:^2Šяѓ!‘> ;œ5ОѕЫd§5йЌo}Ыњ џ€I§ˆ =чiё рQ Ќ ƒ—}ЊоHM—w…ŠLШC 2ЪРцUt†ЕОІy§ <2AŠccг”з] ­ˆњ‰ШЬЗ„‘RЦ@DЋxлъ&Жз€y/(ЁІА6Sё‹ЯЄE7Ю‰,R­e јД—#щ”8Ž=беЖз)ЧX4§Ююйh%LъnытњTѕај Г@I˜<Ѕ­:+й ”ЮљuЛz^ВхьRиC\lЦќЦQpNйЄЈ HщlМюŠГ€R!:)QŒѓШцЕaђnРЄqЏ1Я3књ2‚2+T (Ръ^ >*яœy/Јщu~Ю‰"JPEІQй!oŽ­іu •hэЂm%ƒоЅ„ˆЄˆ…4_@‚ђ6ќІ<ћ—ъ*эqFNгЪRvЉy()m@PЗЇ ‰(‚Ьf!уQ>™Я#пзч€KZLВВ€žзє§s@ˆ—•`щLz§Тt9fЬ;хџ?⧉№­Р9р€ž‡_?b|ТIРB.№.”6ARJSфпљ@2NЂ,Z`ЪР3пгmhє*ќ€љ§55n/yёоѓ№W\рY ‰ѓœњDZ›…h-pяДЋ№шчЏ…љ2ёmШqt`—Т, D„(ЃuМі"ˆ$$iыЏ ДR iч”#"ваЪ9|Cw?ШXПЕ `.Nк•УlEp=r~5#OIDЬFЛпШnйг„o7їЭйлцX`ЩєчЛ§™ЂЄЋNќЃOЙ|›:mіыCќ Ќ&<Ш\Н‡њ+ЯBцB Р@ѓ0адŃ̘&N’MќmСќ ˜ЬXdЃ}еИ… hз1, šЁBЛЄAB єЋдм‘oуlFТЅХ^Z цw&$H$#ЫМЖГэ*uƒ)цK›)ш(вѕГžXi‡КПžBuжЭ†A6ЪРu› г™b@ U Х šУ!8‘‚†„”E[$e2БD&›Eмп<§є–аъ&Yёёёл‚&*‡ЇT†Ъ–u žTs3`­^’MDњVDщРъуƒ€4Х`)ЙA dЎ$ €L'Цлџh”Œя™sІ9Мј”7…<Фєžшѕxdн/,НЧ/21@бЋ—Ѓ#8 ~œСєPyПтmСбчTGй;ЧаЂ+-ž/рHоО ЩЁ I9 Y*П§Mё~љiММЩз.Б2!“щЗа—œ/ˆ4+Э™з‘Y|iп3z$ 7ЧЌЙэFомоY#Ќm„ ЉоI ГНŽYЃ ŒѕѓПkљЩ3дmhw€ЮЗ—ЮџЦОљ]”ш–Буqx*C•#мгш]эЖ’іЖцуФ‘­Ь™\3Г8!мeЪbМpH—aм’Ш'`@—/>"IДk"S_$_ЇЖ—'_AРRnС:†ž BXBrЎC’~щМJОу СыСњџ H„AIJяHуH€ё6ЊЭУ#& D’>Жћъщ\€W+‹ЅЮзэЪж†RYvјVлi$%6Йk0ЂьЖ5ьRВCёІjPCИЊI"ш9–њУ!–l:ZœмŠЧ/в˜EžЎ/`І€A‚ьВ7vПЩHfлШищвфьс{_:гЭLй–.R‘v|ETгФvaЌѓгuёOх2‹iL§S‚у\Ž­фЊЭС7XК УЪB: tŠFP“|ч`С$ЌŽvu){з8щndњ yш˜ЭЯЁŸg’tЭ_ъ8’ѕUЗуg˜Нu ŠлЈR_љlЬˆ ЎбћbщЦ'EЃО:JjFAJ‰u‹[ э€а#uŒVПў8VC †Ж,’5dMип=R(œFлЩœš(-Ђ:@dЂЌєLFЏЬ#пЏe>ГƒЄЁпš. DЈ )iн„є\шп R”lЂЎж~хw|”(›‡џQ7ё™шhЩК ЇЏ|ЗЙoфђ„w? СіЏЩ3ˆžь;3п1`дC€tэщ^{‘ РaVа ењo@‰Њ?ЁgТ{ф17•з^~ЌгСTЁЬЉ?“3Г4ёњ't4Л vK?{ЩКЁ3žСіП”()њМ`zПЎie&>Вш!žxВgž‹Д:SЋ{Г™HяИ!ЬІоv[7"C&~h{2ІДhУЄ4Рді’йš„$i]‘`—ŽOЇзDš5ююЊ.ЌJо75[ЌДиГЇп$д5рŽ4 ЕЩ€БзF6…›HZXiLŠгžvџDВ0vLЦ;$vRТІ6­ЕЛТ№€к„іИцl5РXГюVС‰­ош)qЁбЊЈЃКќ>omЋЃ–ЩF{%rz †ДГA;ЬmкTzя!:СD†@ЅK0dјлiЕC ŸЪиAз‘ŽPlR?ЪЌФв§ж)eэЪ3ИyУ(f‡э ГЭъеёqЗбZ`…dТ- Ј ьщ(ЬfЭfгВе#5Нb=Ru:‚рMзQ’щOІ\˜бу\ЭЧБva]dВˆ" eчѓЪKEˆЬ №XƒJ’зA(ћдД‚ТчyнВЦk9С €Rl…в€’f708М$EрG"й!vI@1mЈЯ7†…Рt‚/VF–n ЄKЖях™ FЄR‡5йѓ„1їСd|gР’ЗE 8ќJ#–гA н{х“чМ ёй{fhk'ъQˆзПgBгвCЁJ†Bрг6в;FtВB‘ ЖЫ`ѕkg_†‚ “оЪG{Ћ"Нx&—еRиaaы(Ь†Р\Л›Q+Oi веN\  "БD$4Љi„ђ’б.КdWщд8хиГCаp}”ы?fк‹ah†&•`іX0Я-Xѓ >))ш$mшДІОŒ w7OЋ9…‡ѓ’щNCЙ`6нdЂѓ0[њ№ЎЃђŠ­WйkФ`двZЕЈ™кЭuЋюЧ&}ъhАіЎ:#ь@н\P§ЄДEРŽSdzЧяBj%й0Зfœїхo—™[шьШn q+2i M.E o™•*`WWPЅйudsеoCЂR Ќ{x5D(ѓŒ ­ДЅ€љњЃ ’PУеал˜Ž$pЕa46жUhќ>Џны‘ю<Є0Є€P 2жѓsD?Ђ(ВCпљв™“шž Оpа3'Ађ Ц’nCš—@RЊY+:Ь;ЯІˆ P јж+…oМѓ“2HХТ‚7Ћy EŸіџЄ}юD-_Шћ–`U@VH‹л›Т$ћXЃ,I“#РfПsњќgŒЇSy@!Dr"?о3=ysЕ‰›IB,rТНoІ\Џ}=щАAњвЫ2јxађjWЇ$HЏ„<‡О,л‡ѕ-ѓШkпД:8/ўJ/„"Ѓ(B”aI}oч-JmащЏWmmЃLЦёжqТ7 —Œ%hоБЩи0Ё‡‹…Pлщ*…5 џЄ›/+/‚&†p$чВП`ХЌ‘4ьЪжЁјiVЌS<]ЪдCCп–WЊiT]mНЄц5_ъKO]№dш3eщSє ,Ќ,iЗфѓU…“УGКL3Ÿ6ZаГ IDATгQsVню@v@ЄмЇЈ+O}Pѕtо‡YlH0ў>Ёi^йо„•эЭj•€U-јЊГEн рыЮЌъhЦ=Зм€ІO?Тч3оСa‡ šЋБdС|,Y0ЫZчcy[“tZНМva ж-lС§Зн„ЎйcС'яс˜У5•њКГ_u4cUG3–З5ЉдFQ@шќч› ,kkТВіfГёшђіf,ooЦ §зЎ:W%Hќђд“БргXјХ'xњЁПbDC2Т.,2Ь‰ьцІJ‘є/jAž~‹[Д№ єш—Н‹`ѕТ|ГАХдee{“:џ3V‹h.Пш|Ьё|2З^3%eЅFЈЉЎЦ+O?Esfсž›эfй}y‰ОўгЇ=‹S~ќ#lМбЦŠ'єe dГYdsEШ![\Œ\I1ВХХШъ#ЗшЋљиcŽТм/fЁїыј№ПяbќИL9™L_t!Zц‰KК№Р_џ‚ЪЫ KџZьыХyчžƒ%] бНЈwмv Š‹‹l/№sŽкK€х„ђВ2м{з­шnŸюŽ&ќёЮ[ейЫЬлёЃУМЯ>Тк•н˜ўђѓ1МСфPR\Œ;oЙнэѓАЄГ П=ч,“wЈ<RКZШPs,BжР*‹ЩЈ—п№Š]ћJ.AЫcао›@yNЦњ'свСќММx:ЇNŽ”’ь‚@йH–Ыiєщѕпqк<ёпЫ+Tё‹чAљ„xФЋ!ќДЃ%ФћPћБwцЙJQHжО…L%кЪ+?Ш;иgN^Ё:БИ&ПBt†žiTE@& ‘Э"ЪЉ ХГЙ,ВЙ,ŠŠш(УRя-Јі ŽIn5јЬшЙэъ^Яs,шЂ}ѓњ”7ЕёЗtУFŒ6ёhЈ:Š2,§є7пЦqЇўе••Иўђ‹-eЕЃP^7ЪФ3‡6ш#Ч ЊqЌy_е8U#Чњ*FŽqЪЇчJцдзШілl…Н8'џт,АџОИхš)ь ЯWђ YPT;йZKŸъUі<аЈК™ъFdЋБзФc№Эъ5XДИЫœpюЏ~sЯќ9ЎМёVœљ•8уфaвyП1m0eвљиу{ЛрђыnТч_ЮБЄЅ`Вй,nКњ Ьўр]мyгѕјўЮ;Cu#­џ2ВйВЙ"dєi 9}TЃ:z8щФуqр!‡chUž{~š:Л[‡sЯ9ћэ;ћp0Чn…ў|?Ўœr9 ЌmїАvиqgŒлiW ўpoz ;Б}W у\qй$TWUaм.{`ќЎ{ЂОЎ“/ўƒm/!qЬ‘GрАЃOРъсxѕЕџро;o5эxщЄ аP_‡qЛю‰qЛю‰§&ьЭr]юЉЮ‰ /fм e,–nŒ-@[€>О ђ75pEg<ађгX8НСФ№бчu!рщ7‹бЖњчЏ//'”GЈ 7DWш~0,’@Rэ+&2a Cхѓ>Ъџа Ељ@ДЄ•7ЈЖКe рЗ-ЋЈяЬ™ Ђl§1žЭFШf3ШjЯ$Hч H*дОYuzY6 ~ŠŠнzЯmcТnDЮЖ+ŒѕГlГ yиСOв.РIВBm-dŽў•ъјCЉЫЗђ%M|‚GОВQ„ЌЮїќnх–Ь7э(žЫ~И-‚ђгЦхui еьNQBЯ"=Ь/Œs‹Eф@Єу)щд<:нGёKZQі*Mі—з— E^y|ƒ7xЃ›шЩІyЧўzМ7<снЬЫЩŸnXH}›`NР™vхЁPž>:b ˜UйCFCJ‰Э€Њб[ЃППŸНEU†Ku>[ mWQI‰U:§аQл ЏПЋкцЪъЄЏƒо…jЬІlю$Ў.эЌi›05RJtыїУFŒж_`’хЏСraYы|Ќ\ѕFnП“yЗRгИQ]#ьж n{ї-Tq25Њоvб‘єЖпЏ=љєЎ]‹}> ѓ›•wwЮћЏcдˆсЈиjђ§§Xж4mиzЗ B щЃwQ]Y‘уП  uц5FR­ўлnы­pв1GтјЃŽ@]m šš[№'žФнњГ§2$Сc5днЏцQЎ^о‘cЗF{{Єдg9/jGљfC)1gіЇ˜xФбhnVќЏЈЈРяПс РАЋТ9ИаЯЧnНцЯo„Р˜бЃ№тѓЯbЬVлњЂ—ђIЄПизЏ(оˆ$ЪФ]0їs8ёHЬoRќпrьXМємT4nЕ=\аЅЎЫЫЫбгбŒђ-Њ ДЬљ~ŒJ/-ЧŽСœY@”l†„†rРbZW ЉЕ”`Щby џ…—ЕTSЂ ”3˜ЄƒJ—RЦЗ)zРx>p=%,њ†ЊЭDцђфJжw<Ћo[/cmXt>R@›_Ір7~оWИ b іѕыš:3`—у§Ъ/зЏЃАЭЖ€ˆ2ˆєТ{дžMЪч’нˆ„:RVtе0iЬm&Nr1Ч ж’ЗC@д‰ фЄ!@#MО^2]џPwЖuв Q82ьАбH›::Qq‚r€EЃš|кžБ”ьєўЧROЋ­Mг O єОˆкirOYЛЮС2УnЏdETЂ˜…}Jи'ВQЭ3—зАј5›ИТ2апf&mЈ€џHВwкЖJwЁ2s(oа 8Ц39(dЪЈ\З~Н:……“-Щmnsru‹Э`нњѕШчйъ(j<ИGќцcЉGCэœ…Тt&пЊ %ШћэНІП№,:Оќ ЫhћЂM6fsA§мьЖ ŽgС)Я9–лoН%ўѕјƒXпз‡џЬmiUч•Ј­ЎєЬљЫšfъjЊѕYу1ЖЂЖЈYЖr–­XЩJQв.ЂГчЮХeзм€mwл—^uъ1љЂ є]VaбyЁ™lйЂВХE€Ў%KЭйпыжЏGYY™ёD7дзЃiЮlШО^ШО^t/lC]mm:Л}†hoяаDKДЗw ЖЖ&А€ёuМC|(ЈЎЊD{{Ї‰нжоŽъЊJ“vЇёу№ъ‹Яaљт6ШЕЋ№ЭВE(++5mЇвkњ„JOзщЁФ дsD№’}њxљ„ ѓ zч!”ў[‚ '‰Ч‹Н8єœѕ›T/!ТЌH“ЦјЂk B­TŠЧMм@хЊ<з?ыD™^ј QАДžЭrƒћAчъAjON ЃїeПL.NQ’YE_пВъ ^t8вШ@QF igеyиЙЌ§e2 ЦyH&ыц\цœіDF‘f‰і’Хlс†дЯaчуЧRЈsДuЅј–<\f; ;'Яl€@ЕУЊfuВ№AfhШV*ћ"ьv=™HƒЩˆ-„…іi‘бЌŒРЪТœy(6 nџhќйцбmNм GЮJx№UёьLeт‘œѓhЅPšу'ѓБD,б/<„ј^n‚*рШМ›іN8wО8Kѓ@šїNтПD_№є)ДЇšб›: ќ…0ћ\KИГ…6$˜8љX:И@шЙ.сў­}`ОlРWпц2фЩэцЁіžђсA/ые&ДуОHЄу„…єЂ"Kрю[nDuU%&w>›§кПœe@Єъpп|ГmTŽв’Ќщ] лˆТЌ Ѓ`VЫщ/Ї­Ц4те'ќрјŸр‹yM†).юТЈУБљиqXљеW}B,[Ое•иx“й†Б0'%H)Бѕ˜18сЈУqќ‘‡cф№ДДЖссЧџЉкD‘uЃ ЕхD”ъ‹[чWTRЉdŒ5 Я!ЮчбкжŽН&ь+VиЮiКО­yoo/JJJАvэZјЁЁЁ^{ў$ъБxqW"LоЌЅXУѕііЂЄИHчoTККЛбP_‹љM-€ъыаенcв=ёШИі†›qќOЦЪ•ЋАљц›ayWЛЁ}бт.4дз)њtњ‚4…€€dЗ…Q(RЛh0iџв{%\FYјCdƒ"Ё =М ?3Ўѕќr§t<™ЄСЫ2DА‚q%р.hтЯНМ.>_ЩJњњ%TОC›`Р‰чщё$!g‰ŒцБW1odРязиxуБѕи1xрЎ[CM‚~§їЧL<ЧqЈЫ/яџыy|8§eœѓЫ30ууOpш ?Ц{э‡nП[=аФa0ЁБ^JШdГШфАб u W\‚\q юџћИџЯїbє˜б(-)СюЛя†чž~nјtжg8ѕЇ'{*мpн5ЈЊЌDee%nИю<њју‰8nvТщвЫ_‚<”SŸz7\{%Њ*‡ЁЊВ7^{І>§ЌЩЊЌЌ=K–`Mo/F oРнЗпlЫ‘РЃџ7\3•УP]Y‰ЏН’Œ„Сw $МwќBкєƒэ‘ЮG‘WЖS†G›уrйЉgЎ…"1^™NAЁwњНяyт48ЪДџx]=^›ŸG–O^(~Јч>P7Ї^“†ПOЉCZс‚ѓк—/’…ђdўMJ;'ъ\Hи|„13oЛDў’§I‘Џ`Ÿв!ŠдНzqM&—E6›A.ЇжhOŸ:ББM@”ЩшЙ“ъG““з2ŽcфѓБYPгŸ'O—Z(“—0žАДяiы `s-5%рЄžИ4Чаx)sч;$щ­ЃRЌŸдх;y.3І,Л"EzK{zœ“Й.‹ЏмІМ]'qФж:p*8ёќ&–ФЁНЃvžЅТZ\зxйx]ЬlOНЃ4Rџя6ž“џF ­їљХe\x™кХ$ЌN~§Rєc Iљ–С€Ir}OКтjtїєрёПпїпзD$ІІSЃтЌъlСЊЮѓјыЮf|нйЌˆхуз!##ѕ] АžDГЎЋkКZ Эы†Иъ†›АИЋ яMн šдз ŒбнкŒюж&“ОЛЕIнKејч_|:-ТД>†wиоЉŸšл!pбф)јhцЇИѕкЋАЊН _u6ы МЋƘљœА~Q ж/Rѓ!…jЊ*Бй&уЃWž‡\мl~ЎЛы^LОё6}ШX2ћC›љ.\„ЋЎО.]nHHДv<ћ7чђ—˜|Х•XКt)f}є_Ьњ№}єєєрђ)W›оpъgтк+/ЧзKсЕMУГЯП`В€ЋЎН bж‡ясГпЧoНmЫN€6FŸѕFрЦЇЎŒЈ 2Yf!рХiє1ЮBg€W2@CZў…@_С2§ПОХёŸб/кв NБbЁ{9P^э о„јШžѓ22ЉД†hђeХRl/п8=pйIЉечхЇд1бviyю}њѕpЖЪЮ!ЪхдєŸЌХЙ2 ЮelН‘PЧ"j™ЩЈE9ТФs†Ic‰Ош‹%њ"ЅvаOЯЁы-tї фЖ—` ы%4Ѕ=Њю24}‹иФМœ Д*GH6rЕШ†Р˜ˆ;mGTыщVЮ!^лЩиpУO $†Љх ІРgCюOzrшуL Р#:їœM[Ѓ2 52)Y’U†cXчЛпЋЋѕTК2ьд1І3геЁ9s[ы2ØBJ}&Г хGї9мdлђ•vmSŽ+ђRЏN2™Шx&љЪЧшэpЛЯ!˜Ї‘yс’ГBЄ=™‡ъG6OК—2чXŠ6'бQВ)eJiЯЇіH 4ДNШѓ2hЅЛz&б—Ќ\xleндN  Ž\cIВЙ’ЧJЊЄэ‹ТЖ"3ЧЎ1у2џjрЬtы/іЊщняОЧЮ™”€v>­ЎтBeЇрВy‰Мо (ЉŸДih™K“@Ѕ&ЬЕёТОФМ uAѓљ&ЖtUŽ‚7`RЗ`tВ.nЈ ќУчЌ№ч@Fв0О§ђБЪD—эЫk0с”ЃœХjŸ1ХPSMПŒдрЏ5ВBH@DZ6c}К€ЎƒЄ=w™СвUšяFщ uВCœ‰бпЏ”m)`чѓЖ#Р­C"8РQ$ъœžVЈŒ‚ ŠiH ХЇ# —VwS^ЁМ ОВŠ;ˆO fЭш ^>|‹ž’С p“tўŽ* Ъ@x—в0О/T)­тѕЫ1YћeN>чeњK–—‰ВLкС!^њУI‚!˜‡ЫНгС‘љQ%ЛТНџЎСКLј^R‰Є<АK!д\HEzGх]$g7Л–zoЅOL–фdрžAвБ1IiїjdЄј" aЯХ&›CКT$њŒЇ‚”fЦвфы|"ВЅФ*Aiьp*йОFPУЪf(мXMmXZНoж7Ењй) ЅЖџnWж6бsВ€е•БТ &›ч6чЗуБŒ!єIkЦўš,ЄЋК Ў…їлp…Ь3б2eвсГ]ЖТn†м^9rЮѕ—8+ћЉПџCОЕЭqƒ“$ ЦлЅkRLaЎм€бTКвЖ*б+…=ЌhЉ{ŽiЬŽї6KПЛфж‰јœ‡МёдмЫиtHе3tжЊ)Э Ћ9€шЪ ЯєVЯ"iЄ>4РY-гЖ<30ы-€’Ќ@жЁb@ЙЩ…T{~im<7BR­H'ЧБ4ќ6 “ЗŸІ,Ъˆ82МЭGФQт|„|Ÿњ яW›Й|СШ3)м6†ИЄg0пНІƒ8€Чз№…zЋe D HмГ2 _XSѓ€жA‡‚Hьл—•Ph№­cИЭ,пЃQњќ-” ™ŽЪ•VWy}1Еlѓ(@Ÿo™‚єЄъбтг—–‰`бр‰ Е§`‚o1CQќv Е}€ЇzЁjЏљm) Љ)=ъшCЕ*л~<лЁШXк9‚і]з•ЁЖљ‰-(’zЧа.$Т8nЕHM цx кCž@—kЄЯ…Б%4–—Ъ8№c‡VQNu\2й>gt‘2ьœ@eгhXZЯ еД[лhwhЖj^$L€ѕnкМOHюeЂ;JУ n н3qшk!Є3­Nбšє*:m@YЅŽјI^’'ТICСjцЕљ*№ •ьЏZШ…j>Ќ„ћz!єfтџ/ь‰ Yї–О>„6ЩR­XRŸHœUь˜Ž`ПbН$dfйўU@\ CнyIŠ7вшPbїØ §АьWoU&іЬnнаЮЂ!󆆔LбЁф 6зюСїа_ŽОskOзf?.)-g„U€ЬЧvxіkSu&ОЊаm(WсQk:#!Ѕ6‰"ФqDО@?Gbk(HЉ†ИР„йhSO` ?|ЁsВdВd k7s>/Ѓ3@К“/uд uРYъ—Vе4 щ”GёB™Єeю)пDЦќНcђRM ЉЪбЖЖ<џБR‹—юх ШLcЊLlђ  С–Ујšі*˜жЇ/Э„d}Є ип|ЦІёь1цhGлѓ}‹š-4’™”ЌгHA­ ОHћѓДиЦђљіЦќg`E{s(CєД6Й†SгеЕ`>КЬGOk“QЎQ6ƒ(“E”S“жE& ‘Щъy >`pвEт…чŸБ|c^рЫЩ_єˆСјЁe&Ž!зЏdˆѕЯ9Юбђ/I?э6pрyъўБv•КvД9Япыр~v‰ьSш5ŠƒџќќЧu~єq'‹џџ‚ ^šJБЖТFA?gTр9ЩTў%=^,3­>ƒd"ягTFъ;! †Д3}х™Х62],ЮRгžЌ/ƒ+wiБ“R8'ћ‡p˜Џœˆ+-“pB%р№б]UЮкB2mTŽuыжХПЦм9џЄdјNџ.Ъn DB1$“ЩШd3ШЫ"’yfШгZ™Ечс‡MФџœjЄриНЋнМ6Ш-O4єЪc”qй “дФћЎ}шчЋlvI#;…Џ\9гНž"<r~F3б7`Œyсq|™ ц№;ЌќS”—§?Ї>У=?иPпЗ!вœNЮ. [ŸкщqJш5€glЪN NFгњYˆ–ТyД"yя—kњWрyТv $…іBfє”ЕШ†­М& ЄЁшL&2›c“ZŠc;ДKкŒtД ЩюYћFНЦIau*Я‡o5g4янЊHЛРбaхM•Шh˜MЪu:Лы‰cЄ–/`љУН—ча|ЮXѓ$r–ˆ€„t}Šўwє‘ДЯ%Zq@M№ДI˜ CВr“8ЉvŒn€йDіж†Кйi ™шcОЂgњйц$At/O§њ —пС>M:пЫњ;;gвt *?щ­€вВRмxѕ•˜§сћјтУџтЦЋІ ЄЄФ УK {д‘ј№­щшj™‹ч ѕuF€‹KJp§•—cЮЧ30ягpж/ЮАх ЖлO<№WЬ›љ!ЭџЏ=џ4Ž8є`л] l šŸЂ&[ЋНo"H!pьQGbЦЏaqѓ\<їј?аP_ ъЮд)iОwEл;ds9\=љЬљшϘїЩ œyњiXйоЌ69іШУ0}к3шјb>}яMќјФуѕ„ЅЅЅИэкЋа2sšgЮР­зLAYi‰хe%ХИѕЊЫбўщXјйGјэ/O7эAЭнЙш7gЁщ§зБlЮLќэіQ^F‹Z4ƒйЖЃкlнтXГhЕќЪŽ|%$–Ж7ci[3–Д6Ц™cЖ[рЦkT­LsЙ.8їЬўр]tЗЮЧпюЛmМБѕ\ћЦ5%ьВѓNxчнїHи Ьћт3l9vl"ю–cЧ`о—Ÿ)’њзšsУ­АкKйПВ­О^™_™_яфwьБGcюГбЛњ+|8у}Œ7Ž)^pˆ9Б™c)зЏVѓ.Шu_CЎ§rнзК]дМ”x<ц}ў жЎZŠщџz#†wђўХщЇaIчєt.Р]Зп„’’—]Y'qтqЧ`ЦлЏуЋ%‹а:o6~vЪЩцmyyюНѓ6tw4ЃЛЃМѓV”•ъ}?…„\ћшяXоеŽЫ/™„—Ÿ+Ккqц?SЙїЎТyчќ–tЖ ЛН wм|Š‹ŠвHq”Шd2ИјТпЃхЫYXбеŽўr/6*/ЗIzWAіЎrЎеНєž­„ЕnЖYЪЫЪpяЗЂЛm>КлцуЗпЂыЇЃїЎФБGЙГ>DяŠ.|јюы?n{фIМѓоћиeЇнЬЉ>~Ё0ž*сЈС†o‘† бкŸ—O"+щв&Мј$п~CЎŸФON|Iћ0$#ЭРžЁW BŸ\“E”+B6W„\.‡\NЅЭDъZЊ–д+ЏѕBAZPHћKвЖ@RЦШїчѕМxЈSkєЦуtZM@*`6ђ†§ГѓъaN5SлщUпњg8ЁF‚ш"KЇFН„ц!А–rєЫDШ &йќoђ‚ЋmЅ9]†ydЅцmoЄцFъ9’ ЙЁ! Iэhs$gЂTѓїшGz“ЫЉєцїqљ5cЏQ\=фє‡Аr=z)^ЬЪ1щsыyO|И[ІіLєЩЎўИvњНєвI7 ' СK//Њћ„ФiЖ ћ•І6dUТvСЙПAEХ0ьs№DL8фpдждр‚ѓЮqъ|ј!сјSNЧ№mЦcњ›oуцkЏ2яЮЏQWSƒ}žˆ}žˆНіиЭ)ћћюСO=ƒїмлэˆKІ\mŽ=LГБ ”ы)ЫB`т!с‡ЇQлэˆзпzЗ\w5ЏэpІубІГ1Ю=ыLŒ9ћzі<№PьЕЛЂ/jqв™Ї‚ѓЯљ5&MЙcwў>ŽљЩiјўЮ;™Ж˜єЛsQY1 Люv?`"ъjjpбyП1њТпќѕ55иуРCБЧ‡b‚ЎF+‹sЯ8 ћэЙ;8ўЧѓ§ шяяЧўNеSТ*aх“&wgPZ3e5#х5#БI]ЃiH`hC#†64кЦтlq9 gž~*іоc7vќАѕ.{ ?п)“/U`ў[|кTUUbбтХЮГi/О„}іо+wТ>{cк /*ЪВ%йMІHx/ј{‘)†ШAd\0tв‰'тРƒХаŠj<їм4м}зъ…Џ˜œЏXAd‹ѕ№Й-KфJ5иT“й9ъpvдБRY‡Wџ=їоu›гЩ'rvиe7ьАЫnЈЏЋУ%8Hj€dч‡Фйg‰K.Кч!Њ‡ЦС‡=vћОIuХЅЃКЊ уvйуwнѕuu˜|ёl§ќщ/УЧžˆЩџ7нz;=тX\јћѓLћюГvиeŒлe oЈЧEќЮUT‰/YЋHЯ§ѕYиoТ>иџрУаИешяяЧ•—_bлЇt3ˆвMѕѕІцgпЛїО ПтвIЈЎЊФИ]їФјяэ…њКZ]?чЄуХ‡…ЁЕ#ёмДqїm71ўЊП‹-FuUe BђœАœŸ~2‚рїiСЫЫ› +DSр}!РыgaЎCyљЦŒхk]`Ўg…DџšЧ‘оЕhЊ‰ˆ2ˆ29DYujкђGЏв3дLП @ЋЇ$Ž€іŠЬЧz‘I,бЧШЧњДvы ЛА#УЋ›;ž=Г($!ъt:bO2архЈ№Дн\œ˜ф•!ЅЪW'ишюЬ Cќ1ЎKыXЩƒ@Ѕt%л…W| ŽБёdŽЫ–tЫф~f§ЩJpяСуУ+#ЅOKЏќBѕуВЧŒЉtюSњН!Aи~в%>­>œћеcЖРЬwпРq?9-­m€”=Њџ§ЯЋваHр“wпРдgžУоx Э­­XКl[рСь˜ужuЯХьЖ ЅЅ%˜?ѓCTйдЈќюB`ц;ЏуИŸў Э- !0jф|єцkиМa4€пžŽг}.>ž9K—)M}c)ёХћoaт‰'ЃЅu"!АешQ˜њ№п0n}!Ьzїu§уSбМРђяУз_ХFu>~уU§ггбдк)ЁCЗРћ/=‹Ц]і4Ч=€t: зV_wЖ`“КFцa–Цћ)„РвіfT ХxъКлЛ[ѕ{ч)№оєWqТЉЇЃЙЅ}§ylОйfxяЕ1|ьv@ОЮyЁm<Ќљj9†VжbMЏѕ0юПпО8э”ŸтфS~†Чy§§§јЩ)Їссў†Пў§LŸў›kџZo"щ№УЬ™є:ЏЬЏG§№‘шь\(++У’юE(пx3 ќЋR6'HZw+ЈхххшYдŽђЭ†ыПСиmЧc~“Zр4fєhМ<эŒкzћd> DвЛц9ŸсЄŸœŠ>њШЉ:Л`юlxш˜пд `ЫБcёвsOЁqЋэTдЕ_ЃdгЁˆуыП^nЎW/яFбЦ[@Ў§ cЗлQЅ0fє(МјьTŒйvМS/йЛЪЮeЯч|њ!&u<š[Z!P1l(>xч Л­[ЕоUhtы~,˜ѓ<ь(Cп–cЧрЅgЇЂqыLКњбл s!kпŽ”oQ> T^Ўž— ЉJ”ЁЊD§KВ{.KЁс)ўN:эТЊІЏНсЊ`>^”T]_ШhвњтъЏЁђ D2ю@!HЂtљŠ#„ZЅЩЊ­~и~BL8€О5эЙж‰Ё@mЋb $еОШжFsgрйпеRщT9БЄ•ЭlЃж!jџЧŒі8вЕdрH’Ќ0NЭƒТ‚JыXЁ4‚њ&хC`˜§Ѕљў @ "ќу% Y.пЊ]]нЈ­­5  оzћмzѓ Шd2иП}Ч1Ђ(Т;l‡ЗЬк)Д ^ў €5kж ЌЌЌp2VЉСОлiЧq§uз`чvТц›3€Ъ6yooo3љЕwt(™Ш“#з~m‹.йМЮ ѕu˜§ХIњtЈЎЊD{GЇщmmэЬЇ"Ў[ЛЮЄYЗv5}СвдiiэшDmMЕ­gš‘–ОІ/f:oу8FК zJ‘ЌxJ0ѕгВджосymŸжЌщEŸ&ЂCmM КК{в *јн!†žљQЙђу‡ЪЌ|“! ЭЁ4CЪš с$ri54‡hd ЩOJ'(§•јЇ5Rл§dВ9DHв\GcRл B€*™ѕТу­ƒ(жэ№ГђКBg@™‘Gл€*+Х?ЉѓJЄe6д?”ƒкF‚F%Ћб)*СшaбкЖАНЦflы s‚4 85хJыiеДцЭ;fY}`у{ў8oмDHНF“Џ—Œ˜Њˆ$=i 0ф§dЏ #8 єыB‹ќЙЛўGЅ№žЭЉiќчTfŠNIшMiiе/„šy\Ђ…ъЫыКС sг|ЦEoОкЄоЯ0–шюY‚Њъj5$ %jjkанГDЯ ‘xјОЛёФгЯaЋ]їBYѕдmЅ=К]ннЈ3Ц ЈЋ­БРМцfќњїbŸƒ'ЂaЋэ№‡ЫІр†ЋЎvЇс;”Gч!уЙч<ѕьsиqЯ}0ЄaЗлQU4Вл@Ё•Mкf“Б/юТ№†zC3бЇјcсТEиjьhЅИРg’(анГѕЕ5Іcзеж gЩгО]]нЈЏ­mд ѓЯЌшшшФШэwФf ЃАi§(lTзˆF›§?Iйљ-вЌДѓП8ћ™Гg5­oЉФо`экЕ())@GG'ЗMkGЂМj8J†е!Л™kЬ“2)з~є1імcw'V__цЮŽ?ŸЮš…ЯgЯЦ Ч‹9sцЂЏЏі }рР'ИЇрtОDцЉљ?ёи#xьё'а8zKˆl1† Ћ2iЈ7деš!ё†к,\ДjяЫˆ%DёFцg‰QПŽЮNlГѕжЉdwuї AЫ/ ааPЇASRАЅЁОЮ(у†К:,юъNФщээMШДЖЕcHuDЩ&ъWК 2e›%+ AЃФ•?7$р?]Пњ:гяъы 0™Ю{юў}|јбЧу$ѓ <“ЁEч†зЇ 42Pч4#xхx}$ЛЎgХЇ=й=]zЃ7­ўœ^)aї0фuД{’ќ'xG@8“ВYDEХШ!›гCл™Œђ6‚эЋс`5—оЮ ŒиЭРџЧм{ЧYQdяУOuп{' ТЬfF’˜sЮʘ0ЂЋЎюЊыКъКkРœPDEУЊЋЎP Š `РР‚HœР “H’gюэzџЈtЊКћЮ€~ŸЗј4гЗ+:UuЮSЇ’вkТ йœš3i2Ѕ­€Ѕъk GѓxЎh•щЉ Mtдаvс@NЋsd2BЧŠcd˜ S~ƒъ‘АšЪfdЋu˜FWs"Žц€Ѓ)#žцhцтQы:9чі\<чі:G5]­к„.cTћ MC1и‰лИ‰уž•HПYOD8^1ХѕЗЪA“:)LYhxkэЭƒє›аU§Іm$ЊБzhМPпsТ[ѕж*гЗƒNƒI1]ЋЎЂГЅMxђ{30єОЛбБS'tъд УюЛ “п›!hb љyyhXГ›ЗmCIїnx|јC"йР'О3ƒюЙ …wCqa!Ыѕ\b ‡ЩoМŠSN:Hхф П ыжo ‡„2‹ц R!(ђѓђPпиˆЭ›З [з.1t.ŸvtэѓДbУј‰“ё№ ћбЕktьдм}‡Х‹g^| c}‡| ђѓrбЛчю5|ˆ@rМ;m†нwŠ ;ЂАcGЊC|уfdЋjNўЈi‘ж8`сЯ‹qё/@"с[~џ}cFнЫJ‘““ƒ#=S&Мf–(k@HкяSЇMУ/ђoкt t?о7oŒ›€!ƒР{гfДŽp2‚­ЎЎAџ3N;ЯwЦEѕ+R„ИєѓѓѓQ__-[З ЌДcЧ'ПS œJЪ7bиЁЈЈF ‚qоВчјёЇџсŠП\ _žkЊЪјя_Т‹ЯŽEЯЛ#''…#; S&NАЪе55шњЉ’Ў№sъх‰“пХˆЁƒQTTˆтТB<:l&ОѓЎ]iTyE7Ž Я€Љгgиa[ћXТ9–hчН‡\”Т“.„|Ј"Qaœ ДPв­ИфБРЂ 4(H œПQŠ"˜Ї$KЄєкHѕаl јжHЕ6вїi8{р­6—ˆУЗYш&Х%o=цЩѕ‰цРpЪЄP-ЋІЊaД[ХЪДJМѕ:Ч5RБ[щ0ЙщŒ™ы{aжmЊЕ .@ds4iЮфкHfЭžТWї k bAVщ ЅU^NФ Ѓ"њ—Е9‡TЂ\UšYв‰ЊA–ќIЙєСšNXЗ`ЬЁ#фЂhВы=ЋЫ@]yз™ KуД’ІGvss§csmЖШgkmЖеV`[mɘ9 ыжсЛOfтЛOfЂОq-†<іЄ`Лщ6 ЙћЌYО3оzя}0Kf FM‹šеŘ§С Ь™5_Ьg!*pїЬ‹/сЦыЎХђŸцуѓОФYЇŸŠЫЎЙъŒCбiдЃњЋЙњъ7н‚юМЋ–,Ф”ёЏcњЬ›ИйpXЩtѓ№ФгЯbщŠ˜ѓў{˜їёћ˜§хWHg2zїпП_zO>ѓ2KПџяŽ ?ќД@оrУ0єБ'АfэZ|ѓбLЬћhз`иcЃtž#GEЭъеј|ж |>k&Оœ'Ы/y№т+ЏтЋЏПСј—žGљџ~РШ‡сѕЗ&‚юд§ м’TЫЧ8, ЩЌЉ\ЦЪ€њђхЈ+_†(wїтЊ+.CѕВ_P_anбyўхџтЋyѓ№ц+/ЂfЩŒzx(^7Ж)p—*6ђ:qв;8ьаCбЗяФƒaњЬїбЕKLšќ.&M~]ЛtСє3…7‡иЩы,­]нzJKИляМ O?5Mл6‡vsяД#}MЇПuxzЛў~Х•У№Ёaуњ5јhжћxwЪTRxAпч_|‰…?§€ŸОџUUЋ0ќ‘Geс(pЬˆ'H‹ЕЈAŒg0zЬX<ђшcѓФHдU­Ф‡3І ›lл ~kжрЇoчтЇoчЂОЁЖCХќrю<,ќў,˜?е55xhј(Ѕ­њЪѕoХ џќš7ЏГІхG}Г?џяM~ ыыVсЉQ#ёђЋЏ…˜xћ]їсщбЃiу_ь6чл~Пд;ф &Ыї~њю+SО0wq{юБ=ј Lš<Х %T#.w§ }–ћmВ9кiЦBm^П+ZbЇС_DWб„ДГ зНЌ5JЪЎd№щy@" $х&›ЄАDњžЇ7ЭРТ­,”5RпН H+d РTР‘ЮЭ“jc‰ .j‚щ_t •UŒЙ—zиГA-ђ+КхJп“ч=лЗяhiЕ=МХtЖМ+ŽшUnБ+h €І€ы]кjšл4e 5sŠЂфUн*An@Еъє`Ц€Фw-(„IŸжhgЗK“ћ2ЛхЄЛЗеђœ8ОD Œ\РшQњNУИ’І“еEѕUZWnп G3Јп†/F }ЬЬaр8с`XРЩ4ˆмЊ{•†КСg@‚ЩEнЊа‚RЃ‡Р4І>ИЄг„lv*šдƒцц42щ4вщf№цД<†ƒ+&hsС]Зп†cŽ> §Я>/ФгШŸйLЋ”HнИH‹њ%кб–ЫВгŠCKЗЫLxf™нo–58†З“КЌоОQЎгtШsѕmЋЪсv4nTНщ6ысgОOw"ц|ў%†?њё‹i єshЪ1Ъэ,cb3 чаВjЧвt,GЁМœяr7>yвЈvˆ‰[l|a‘є№§О?!ЇЋI§Љ%XКЅ{žЙЎPбlЌЁЛГii„6Ђ Rјшуж Њм–ŸЎT38СічšхŽА6%p<ІeЕ’Ыръј:JБIƒAX0U:‚{§П^*I$AŠcх$эЪ~!?Ѓ:.Зš•)ДѓЮЙгwмФ™ym• Žыуй“ЅСЙ‘%jVvЇ–Fej!ўђ?ЎЩ‚ь79Fy ‡Lz]і§р; W"7рЈEЭ*€=]YM­ №Ѓњ‰бvЊc1й) Хю0 Іtкœ+;QМ˜Ж oѓE4&‰ѕФ c84su-ЗвSс†~>љpчР0э§Y&fкŸ]\RЧЬбf ‚щp Њq.•Оа€I>ш4eHneЋ-]Тnёд“‘(ј5эCgЈыNнjcœЂ”t]EЖBђ=ю1јž‡Рїфbѓ@ДgQЛU(УG<ЊЭ"АЂ?…У8ЪU5впв+Ѓ”ЋˆеР$k6TBД„Іby” —эЮ@q€’žDбO‚ѕ-N0G‚ЗКУ@# и‰ЄƒњE?†3ЮЙРŠ#{At<Й0]ыTLљт”nˆžl..ЁБеV Ђ9Тэ'[:JvЕ†Џ4•чnЪ[йw<3Еэљ y-Ђ\ЫЎжŠs.Сš:Cz:Xн У 0'kfM$эBsкZџRyљ;ŠtAО‘жZо1ВkлxТЊ &жШЋs#е§нšЫJoi e— Шˆ6{wЖйXљzІJфMŽв‰;ѕjм”Ъi€єL~Уі‹’ѕжЗlЮbЈ<ЎЫ9YiZh“f”6Зђмя1NнёЈъШuЈЬTr7žХбž5•AQђсђpЇЎYDœtL‚vH™АбЯfчВђw­U†PёWа,Жf5bќ‡dUЈXІлk`#+E­иb:!ЇђAлŽЊ\F’фœууO>У” Џ!•Lbц‡cшЃkPjvN3MŒММGDІ…~ъ–ІП)АЈКфвJШN+вД*Оqћ8Ћ Щzbƒ|5U"iфP еmFЋлŽ˜L,T7Є2hГTVЭDТзW˜e<"ЙyB IDATA:­7C‰sЬ”PŒjЈ1Рющ1с"zmHм ЯЂ:w Ž’эfIбsЧЙlJ8юsKDЛхŠаšVRJ€3ѓлŸєђл8!MгŠьИJp ОиУS<" (nвtЭю]†єI§лRџVNбyг4(•a-RЂ&Iукmœs”#sтКЩiKч6Nю|oe;ŠjЂ!EЪГYС"ъ;к"™|žg€ЄЏў‘zGYнИ5чcІД И:оЦЌ—фJ‰SʘгЦh -ž ~3‡џКЄDЇSc‹Х§Юxd@R•Аз‚BъM“ЭДўЬп"_u@КВDr’žU—Жв€Љ{fћEНЋјtSVhOђДК]„ЌрtъАг"‚лщ+ONшK„ЪDZJ''я.oB}ƒцA*?фG’в˜УѕwЫПƒr#$?MqaЉRW2:ђдёж; &mжˆ_ъЬHКP ”\Їh%тгkЗыIљЙЬcDЩNЉ,tрr­ чжє0‚6рвќЅЌUъ‡ЉђŸ8 уоždЕ;mmѕШtŠЪSi&n-аŠO•PZJЙ5ЋщЦ$?˜р—ЙЫ№FMEˆЫe8ЩНѕзlљрH0БіF cRnzeЂ!›С­У'ТSе_$6 šСO&СA& dЩdd2ШЄгШd2њ WЎйЪбљЊБlпЈ‹$Y:g6O”DtjcйiЪ"ьўOœ+М) Tр0Щъ6GёZi8р“–=žA]kCaј—ц;M—Ы†vцЦ3Š!м™7}чFПR(­ HS…gUyMqŠ*&GЩа–PgЪцZр‰ыt;ˆRŽф;Ѓ){ŠК}|РїЯ‡'wjЋuєz_}Ћ Œ,VЪ@ˆG3%ЌOљ€АHrJŽ’Э Б=‘Л?ˆ2E1БUKдW+сЈ2Šk+dBIF†BЄ Д+Ј~ Ўu ˆQKщjфВЌЁщJеЎHЙЌB+Z-ІбxQщ9Мreœ‹“ЩЁіpU„f ЊbѓvЫхІыF$э<ЎqX(в'B–Z'ПШЅ*qђ„П$?m$qњ`(-Ї\zкSт…khlЮQWW‡ЦЦF477#•JЁC‡(**"Чg3iПњг‰Ё:Ўй="™аžЉ›<ќЂ2uAl1эЏЂё4­ёs:яnОƒыЯИœт ж:eАІRlщPв3ДЮб‚œЊ‚ЧZЙ1EЙv]JЕАB ІБ \Лj% cY/x–v"@BЈŽЈ:>' XЏYє -”ШuU"ŸЖ]wƒ\)…ŽВp*`чCN›xtъ‡ЫьEœuехК|эЛэ.ъœ5#(œJ“‚’qЩ UeœУcќ$€ИY" 2СЏѕеШнe7,3ц”v-1!§еQтCдwf:OktЎrV_TѕHЩh иfK0&DІ ,‘r„[LoЩ4ƒљЩШŸЇ›Ь@ЊуmгŽГ"CДFЇd: 0ЋtЇZн-Њ3hЕT87˜ЎI6РЎ^‡МЃсEќњЁИzБ4z YЉ іГ…БТХС#Ч)Tф‚]Ђ—УUх*"м’ЋTСE(d ѕЛg€ЄЎMЕ,А:_“>Е8 КEљѕwZнЅвEЖ1вB-F˜"жф!3qСЅыBr&ŠfЊˆlВ,ѓ4Хі;…„ЪAП)§G™@ѓЪV6"SwДœ‘ў*ˆгЎУ-‡]>J?u/МКЪdЭБdЩd2фццъاѕWlмИН{їс*L‚ЌO!4™бŸшЂуBзKx j2QР“qZ6І;Б,zйы.Яћ—(№Рc“OЬЁнлdm =*‚;”єчыЊVh5Jд<бk eљuОЭбЌУbd mzКFбиJ1$ŽЅе2ръŽY†€4$‰s*}ђОrU9T@qькЅчјuu%>Œ/ЬUILu8сІќƒоI)ІЊ|$ №ЄFчхч#“Щ н,Ќ•™LZ,р\nк!pѕ-‹ЁBšN7jЋ4ГЩгьжЧШ/s’ЭлŽcN%\Fчw„ЩЎX[ЈМlЪ5[є(Н`cGњA”2rвlЁmXб ЊXbЩYЕŸ€IyХŸ’>ђЏяЋЋхвjЬаУ]‘ŽŽD_)gCDЉi”Eƒ œi3К[e2ƒ~ЅGЌЩEY vО rSЄ\WЎІяѕzK‰"Э4ОТ LЁєm†м €МЛmRЁU›f+Œ{$ gVпlЕАa•X‹лИwTјH‹^HiDќtлED2:жCыzPѕMeEžFŠ~чб‚ŒиС:аР№SwAO[$]мTWWЇ$uЩdMMMЈЏЏGQ‘}ОД†Ђщ@hšQмs}PyZюˆ3GЯŽk†Eт 6„–u*еМбЛ’uю9џ+рњє€L І)XЇRАТ2ЙўХЌQч„mЏ-Чжех!КгG: ]—2ьвuw}иИй‘NvЩЉ‘#cfз91п*аЦШУ!hlS\‚ЖK‘ЩШdЄ3Є3в™@пXЃХЇL›ббЈЎnq/Ћ>Ћu/'CJz|Йh;х3Є|9 )пCТg№ЩЛtjˆ4)1I~’іffnMУЃAЕЯd4ЫђgХkp}yNeNn.rѓѓ‘зІљШЫЫGNn’Љ$ќdBЯ›6ƒ7moк‚ЭыБфчŸ0rФptша>FЙ1чЏћnx<гЄŸЭзcЩтEљш#"§8Ї Њ˜Ѓo+иQG‰/ц|ŠьB`GФџЁгš[Ч9œOє[XPuфјbі'v8bЕŠC ’–Ю"фЂ/[сД–ƒА­#—œп1чy†т†ќеБ&qёbђп‰'šѕџ'Э&T…n]bшаEe@’Ьы!=_М‹ѕ=Т"щ‹Э6>БJzdЊMI}6Е3№GпZЉѕ‘Œ+B’йЅ@AхВ eR&Х5А–§^‡ф2/eсфQђЩ)mљЋ‡къ*/ Ёƒ{#g˜щ—’К ‡ŒCxУ:qыЊЪДшб=V[kФ#ЊЛ‡…[єDѕ‰кЛЎ '>œt­8NЈ—5кQр€„uгЄyвуƒЌ>ЅœQР—fŽCџях8 GE 0ЪЫ[ 5xѓЩНѕћ466"•JЩЂйK&’Щ$Bй™p4X3Їх №gОЉЫ[dTDУЃэЦ )NМLADдР*XFžЃ•цђ 1M3ЎѓAPЇђз“‡рzžМuT‡<Я+ 9A:Э‰pSЧЩщh•žŒЋвВš,чіи4‰&/џIK VzZ[ !U 2]}3Л5=1ƒ#-ˆнЧ1 q.,Єщ Gs&@s: ’! ‚=$ ЄrRШЭЯC^~>rѓђJх ‘JТOCЙ—л^ЊЛwЧЙч_„Ž;т­ёЏУ6идкнwЛ€ЬOљ)ьжЉч8_Єџцј–“еТЭqYРmЗоŒ‘=ыGcЄpнQG‘Жќм,\3SЖИQрR tŽлnˆ‘ЗІќ4=Rn%/ДьIії(ХŠыЬ!‡Т$fќQкьЗ8юќнбxЮя–Ц@qеЋxl .ђCйсtpEОЋJI#*+ЏˆoQПн№Qm•Ъ‘–2lMП э&дEЌ*шV)Cc єDџy@ŽK˜ЙPі75f`vkNЇг‘ы"‘^sssшЛЙТи\[Žцкrm=Ьд—#ЈЏ0эЉОМО/‰5Пќ€ъѓpС™Їk&ђњr№†rљЗТnTœƒ7T€7Tрхб2ўOѓpСYgш0ЪŸ7T€з—‡FўМ^~—.S_t}2œ!†mЕхиR[ŽЭЋЫБiuЙО6Ћ9`'УqхeЦ/п цcќЫ/ kз.жaпІ.$јR‡сz ›VW`гъ lЎ­ФцкJ]ДL @д†U+БОjжU-ЧКЪхX_%!иrsRzп]XіУ}њєж|с™&№t“.+OoЗЌ”п}3Їєы%sssбXWƒТТNЁЛ|ЄпH&}SДW еРЭ2O.5QF3j™м‘Г&•гБ…йœKЃ+| k6>јx6ЮКєJt).ТнЏ Х:–€u,Еs‰`ФŸЬЦY—ќ5&~‰zhцњГNЅ`JuЧє ЫрšќХеYfЊ<pьЕg_~вiИфoзЂп‰'рб‡Щ;Оmф`\ *wэоЛtыA8ШРR), 7?ЉœђѓѓбЋWO ~№>|ќщgnКс_8ёјуqRП3аЃЯ^HЇ32шSH'і;№`ьаЁ(--С]wоЉ,SЉzєшСƒРЧŸ|ЊПpЮ<ћtшX„YГ>ТГЯNo zїнЫŠзЉS'|;я+єн{_™—(хЪeПр”гЯРвЅтЫ=њєСŒiSбЃwбџ2Mшгw/B/Ьœ> ={яЊR{7Зhџ‹-DџГЮЦђТ^XXˆЏчЮEYžч2Э8wРљѓф“8фАУQ__oЕ•”оUnцWХŠЅшЛї~ЈЏЏЧф‰oсЭЗоЦИёoš`\•џKєн{?lнЖ•vm№цmшбЛ/V–—ыtaКЏЖ  ѕ5•(иeЗPљ)]Y…НLYЂЂ2Ф&&4ЮЯЭд%ІIэЌkUš,ђ'§jJРЌпт#’њ]ЅРТљKыˆАV2ј‰„œњЅ;šЅ\ч'2LmфЭpЕTп%кѓ 7{ЊнЉ?Gm!jS+ЇmЕTk-ѕ:zв_ш48—эЪœвсщ\˜ђбн†n›“XFгЦ ЎhаEEnЕ8@∓vШ?*–\D……тгОГ“§E‡‹‘ !{э‰ioОŽІцfœvСХјeй21тtщ\ Јјп|дќВаЕsgНžrЗы7ќŠЕыж‡ŠЫ,ZМƒ~u {Ѕ%нёРнwXьŽ Z5PўиœFQa!ЊЋWKйУБЊКE……р\№cŸНїЦФ7^УЪE?bCM%ъVќ‚ММ\$< пCqQ!jыъєj•ЋЊЭX[кœ а”Ю`Л|oN‹ЅВFД[яОшЕяўшБї~8њЄ~8ќаC№‡“OD*7…’юнАєчŸ4moкŒКUхшжЕЋ.TVUщ2UVЎBзЎ]Дž€dnкЕяˆvЛю†}і;‡vN8ўx t f}0kыР3Mиєы:3 -у›є9*+ЋDњŽћчuзт?/НЌAЋj<;ЃВваWQY‰Ю‹­ŠЈЌЌ$яUшмЙs(§АФ•”tЧВ%‹СгЭвЭЈ­ЉFЗn]-њоt#6lи€SO=E~ЖnмИ“&ПƒЫ/ћ3кЗoc9šм?ЎƒсŸз]ƒџМ,ЫбmЫ+*dxNњ0ЧA€YяOУк†ерЭ[Бi}ch@Xf‘[Єо#ЫцFmQКJ.[мyv$Ÿp;\WО",f‰бЁ“€0a6жxОDpъб!Qдœ3ѓењsS)b"]ЏOюŒfЬRxQ1#:›‘zŠФDqˆ•Qхю\Oэ™QК*lРЭ:}=­ Ѓ/”nВ6ЖJоаu›ІЂhо•— HZiRX Є:"jФ‘еqѓWŽцзGВ”!2_2(Ѕсн†lё‚&цФ)BШ#Фw^б@;WDYCќpѓq‰тFОЩ~тЩUєšHZ'Iх™ЯœП;ыьљNв=!•HXо!HІНэžРxˆхŸ•^TЅё˜tЕ?йE)Угщ]wcЫKcУ!ь‡3.О mЫі :Пкt”€›6’ЉН‰G­б]м8‰ХеъьАО}zcЦ[Џƒ8э‚K№ѓ’efќЫЌ^] (нћ1eоН':”эЁ‹Иvн:РЎэwE{ВУXф)LпоНqЯmЗрыйуЛяDuM †>њ˜CGм6KЭA[ЗmCN2тO}CКtщЌЋЗKч.ЈohB>рxёщЇ№і;SАїЁЧ ЏА]ћьЋs№Cm]=JЛwA2с#™єБ{iwЩcшƒ„еюћmщ[›Амž PЭŠСѓ},_YŽ[юМ#†=„‚6mPYЕ нzюМ]:"еІ=љЛ ™П‹™NPRRЅJJКkž; УТ…‹pеезр‰ЧFТѓ<М9~ЦOx=zэ–ШA‡ŽђјЂKКwзпЂвЯЫЫУ_/ПcŸy–|qkkыPRbЌј%%нQ[[gХ/))БќЋЋk"ш'ЩН]^^н:ТKЄє“HхРР§ЯТ9чž‡‡Цž{ю™,чмžка‚јїѓ/тЊ+ЏФ/8гІЯР–-[­ИyyЙЂќO?ІUuSы~;рЭqЏ ўїю –ЬC‡N1@КUŠL&оoЇ$ЈБuэt‚.ШнYчЪдVЇыJ‡АД0i+ыЃ’~ТZkхЩ)4kZŠfNFЇЖA6бЈGeЋжzщ)6s|™І”… €mв4ФЋ!л9‰ХУlє:СlЖ %'•Хфvˆтд4Н $ѕКQЩЋЏ˜„ЭяаT6"ЁЪ5њXссdфИЌ§ŽЂ%*ьubё'Ў}G!"šЃщ_щщІk‹рcœLбr2ъ‰ ЬmoћаАЬI‡.бP ‘1Бй—k ѕ€LижѕЩ20у<‚GУ:X*›Ѓ+.€ЃZ*Ц#>Ю<Э.XЈ NaЃFFжˆ*"МrЂзаK­Мх#ёЈkhє*+ЃНP†Гз=вј нИ ўуJ€?ўoрм3ћыЃ‡в!PibЊc <Ц0уЭзJЅpцХСЯП,‘г8ž.ЦыoО ИхњыPŸ‡=zѕФsЃе`nі_Ю;ѓ œV’RsоŸ†Џ>ўз]}Ољю{œ{ёŸqшёРO=CЊˆ ЄюL7ЛЋyРБpбЯИфТѓс{>“Рдщ3qџнwbЗŽБ[ЇŽИяЎ;0eњLЄƒфхчЁЎЁЗlEїюн№ФУ‰ъ“ЗмLzw Мыvvь€Ю…0фž;ЩD‰DB+“@ ац€c{†c{:РіДЈЗцtFX*х`хЋЏПЦкuыpі™gрЕё№мибиsЏ=бnз]qЬ1GcЪЄЗЬ:#ŠттbaФУУ0nТDšЈdњєГйh\гˆsЯ9љљљЈЏoР–-[QVZŠБO†ыF<2ХEХ(*,ТˆG†cмј –џ—_†щ3fЂББб‰Щ0qвdŒxx8Š‹‹P\\„Gy'M ЇЏшфaМўЦ!\ЇJіќ Яу…чџž={ ''…#8яО3й ГuыVЌ,/Ч_Џќоx§UфЫЕЊдUWWЃџgРї};p|§Э7иКm+?јоž8 Ў4дх_у”П%нСИрCЖlн"ј?цI' ўћБп ф(;ЊOЧ?г‚vІoЈнз№zѓŒXчœ€Ÿ;ВѕNk!™‰KжP iЮ*VbлзІ ЂЎф5ђKК(Нb‰B•㘺:PггТ#TЃVžъh:1(&Чё(ž‘?„ћ8=§˜t](ІuMHЄКже­є5JяFZUт“,I<œž•ЎО%1MЃ!f~ЋЖЋЂ‡њDL'qЊ1k_Ъж№(ЯтXеˆЃФ‰e ѕ NэжіCƒ;їf@НЮd­1Ы^фж8&ХŸ›я„еuѕ˜6сПшЪЩ„ Шs%-__ ООкy‘ IDAT|^_ ОЎк€EхЂ@c§mю=ƒ‡Ѓzu-~љf6јкUњ;_Г |Э*ПБ МБJчн­wЃrU5fO} ‡АЏ ' чИўЎћ1oў;rЖе–c[mвr ќзъ•јu•Й)чзЊхјЕj9”0ъ\T„]кЕУ—яП‡-5+БeЕиY&6щ<ід3њшу8ыДSБbС|ќgь“˜9ы#Mп}CЦМяцcа]ЗcпНЭ:<#а8nЛяAьy№ИцІ[0чЋЙZЉ#$ФЖ"М>ъIa1Ђpл=їуъ+Џ@CХRЌЋ.з`sиШ'аИf->{:>›9 k№№cЃДEёъnС {ю@уŠŸёўЄё˜:ѓA Д|ђ)ддЌЦg3пУьїЇу‹yѓDCѓ’О‡TТG*с!щ3}Жœ SэMђ˜!uоiРg_xџјћUјЯ_ХМoОХ„з^FѕђХ§иŒ{{"RyЙHШsБОš; œп‡ъš<4дьŠs=> Зо2W\љ7 њ6nXƒfНoOсJїх—_aс‚яБрЧяP]]ƒ‡† з~žчсЦыџ…ЧGŠШ…уAƒбиИ?}џ~њў;дззуСAC,aђљч_bс‚ёгѓQUЕ У~$œUм0]qє˜Б˜3чsL}ї]Ќ[гˆ1cFу•Wў)(>љєS<џќ ;fLHюо~ч]xњЉ1hкКYяюІхxў…џ ]ЛЖј№Ѓ­яІќOfзQ‚žWќэ* :з5тЃfўЫаŠ…р‘.4ЊЖаOєг*Ёќ~7ГckВџ?Ш‡1X;Д§˜ŸаGљx Е#дЖBƒ/BЭІЅм@ЌКt€Ћ,vЁЕЛкВ'œ^?EЖѕЂЌ‰цˆ6W‡Л§п~И§лЩœs.-$qе­ДшŽmFviгM9ъ’`t0Eс” \bC дbp#у@)Id<'§‘њu;э*\\Ѓhа€R hщіMЋЛ:}—š№bЂgЅ!Ж%€эД>ХgТ&Іo­‘}аWЛЕ}=c`[ѕaЏdj“XkмЂаѕ–-ШГчЖВqчЗ*QkFА‘ЕўІУТтЇ•ˆƒанєc˜ъ$цјs•$Гт(*UOО{٘š)MЦŒЌxЦЙн яъ6|P‚Ыц‹L–˜ІЭ‰ѕ.kИХ"*ˆе;з—‘0Y^Ў•4‹`+Гœ9?RЙ‘єЭ=рЊЎašЎха|хжЮ@"(чњЈ#ŸžЯ$ЗFЈMR 0Т7#юЯЄ3иPWмЖIЇхZ%ћ\RXBzкГŠ•оnэnvн€ѓЮХŸ/Н.ИАЕ)ЦќŒS—т{2™Фц“WЕ№‚‘џнXnQГ•ОeЮ0ќщт‹pёEтœѓЮЗ|tљџxQ ?&ƒЌђъ7'KіьPФm"ёщьD{лЉ,bЭпЅ…h+gWЖВњ{žXzЂњ њ ’e0-‘y€Џ6шШSЄdк7ИшЌ•lŒžръib‡…tЊNШg‘†dq„rBQEё—f(чКн0J5dЏчtdљU-к_ѓ’œуЌХEУm[і“мД)жЭ‘AО~‡ќUВ‹Ѕˆв1ыOdрƒ\aEA•в!l'К“УCš]ˆNDc’lп#e97јТђШЦа˜А $ъ 6r§БšЮV›k˜:sLЊј€9йVг0џ3{Ž;Е­в‹к€cEF€‘Ш‚YKvДИZхy\їŽ Лд,‚VЦТ•е9ЂhуІТА"ўL]ы%ƒ2\€К€сЧŒ*гS€в2MюЩТ8S5M™ŽйТЏ"'} ђЛ(ъЗс2Ž:ф\…T€„ЛТ fэ=ž‚[}E˜ЬElX"73paaДn’v|8CQVSЩЮ‘цтpю>‡Гs (% ™/!ЎpL$пrѓѓNЇ‘nnїƒg2Ђ6˜q‹KФЃЕR*юж[тжлюl1œ•g–. /У{ю9XМј]oq”Y|fћ;ŸBz#ЮхффрšЋЏТK/џ7фwы-qыэwў6ЬХеч[EЁ›v DRYцф,лџ1TYdu”ЎВ—PLёУœu‘* Щеп€Д@-S˜9і‡X58 RхN{ЄиšЄˆ<Б,ЖЄ‡ЙJб•нЫFё]ёРL3›єTdЎгSژ3ЎхЛОНЦчв4РX$Љ\щ.ArР#ќщ_U Ч_—”МЧЙˆќЌя;аgBЭ; DFНGy‘.)ЬД+(уЪЛп+~ŽП›Ї ЬHCsБFd~„ <*,yЯц }žК№ФSЇ#wвзДž—1M‡Й”&Џћеo”O ы—nK. ŠШЧЪ<ŽGYF%цFe$ŒЪƒ9ЙCœл TŠk„‹ˆOю‚v#щS€*гДя0гГ“wАzтl3І@7’*{.+И˜ї}s]TA‚*TеšгШЙ*ŠќeЊOЦUN q… ИU‚ЯœaF…L/ a4›8 ­€ЃŽ=6Hw рќve )‘Iь€‚лЁА4ZTцGIuz‚Ч Іё•%RЭкщbщwb еёК-Лй“A]KгмФ2D ѕЂ…6UХEХuтDˆ&ЁЎшс™“gљгFmqаrПkiфвъv(Ю™Цœ*jс`ЬLгЊlЭЪTwњ[ЄЏFѓ T2ЮР|Ў‹ЬXИмјЛмеУeъ\IКfТ,•еxYJЖ@ђТ> У~WtC…бJ†LLq 7 3Л 3AЦХуjšœ‰]hО'зЉkУq[є5є:I ”c(кН7<ЯG2х ј‰$‚LFX*гiщ 2™4xAЦ‘НъG\Їa`‰мp{h•‹2ZЙЖ^+эЄі6ŠАuєиŠ0ќMДtЃфуpnдљ“к…c$­!єwp}ї79ЊРTк;ЂМувфяQљFЩЭИ№-0ž‚H2­­ж[yž™NS§Q9Юе@DGЂœl3)Ї9ЬЙŒ‘yзŽ@QЎ7фРШŸ€ВЩ)ЕўEr‘€7‹#Š5@чмJоZvdНЪ$=*'ЬСЙ]_Vй\kЃR*Nб@’гˆФ?ЦEъWxэ@'eє7С єЛVz.№thвGХhљюQЎ2JsвqњRT1›x5 Q ”рАаo…œОЩœРŒтЈV ЉЯРЬLЃы!=Е6йЖFК@в$Gq“ъ[ƒ8ЇwштйŽГJ{šлэiœzКЙ8/<в3Т‘^DѓRОыРкgIC#Ќ№7žЋрœ­kнўРЬCŠ*ЎЂ•ц’ П (]шpDW3f6и€€J#ЃЩЬЇ* e“іБѓ3эѓїsLF4фШЧhY+тхxTЃЅ@xš‡€JЫ•ZИГАП•DLQТлm :ŽњNг‡hœЫлŒевLqxL€NUљэКѕ@ђ3x`К*!ЦЃ*о)ŸjHb§"э|ДшRЈС,€7‚ль& Ы1й Ј”•­зЈ›ѕNnNS–йЁИžжР) є<Н6Щg>^рЩM@>d_NЮ0&Їа=&ЯўTД0јђ 7юyр‰‚DBO}Ї%АддЫ‘Ћ™63хS’‚ЪHjцhƒnhЛ0d№ \rщ_№бЧŸPЯш~р&o}ДKРмРn7Г>0-{УgŒEЉnз)Сй1пГЪмlљў?vжЬьФqtGщЧXKИ)JіF…Ѕ~Žf f—ЖјыЩщ25Ѕ­RЁы! №ўњNjbб3:д([kЗЗEH{g™œ„2KkуTОJќqnJ g(1Џ~Ky@74Њ\`•_гЂ­•&Л—иЕ­Жmh~RƒМkоИa,mћG9zЩюXФЈ™= ўTXХpžQІУЊZїTй17=+ЩЮ•+ЄбvШЩwа'z\8™CGœU`‡iћQuоjG­+ВDq§мтаъ‹Š'eўс1а5цмGr\—RшJЖpЛ'‹3ыфf0ƒMљ…ћˆVRФqѕПЃ:BUцт(‡цŽ/Ї§ъbгщhъoжqЊ"ы lŽŒ1єЪєbк'U‰чEыG­Ы-У‡zЇ|Gє€)Ю?rЖшЇЈpŒДo+,i;Vy™нŽее|!О™ЈћљKtTИс’4hp——ŒЄуDsu}8€м€C?PgE‹HG…сN%"gtУ€œžдп˜L“nt3РUЌTхTGџЈіmюЕWm™pгjФœ…‘bђп..‰Г-—ѓMuИѕЦыPЙј{lnЈРЭз_kEКфТXђу\l[Г OŸˆ2r=мћя‹“ЧЃБђl_Г пЮž…ѓЯ9гdГЉџu *Ѓnх"Œ~trR)+§Ћџњ4T,F}љЯxъё‡‘›kЮѕѓ=їм6+|ƒuЋ–т•чЦ MA49Р7жсжЎCхЯпcs]9nўз5 %œƒџZ+§чcsнJмќЯkДпws>Р)'ЏѓЫЭЩAуŠ…(ьиmQЩ`;чрkЊ0№кПЃс—Pїѓ|Œ6ЉdJƒœцњ 4зW`{]…ДTŠЛЉг—VKЙI% MюзpўY§1{њ;Ј[ђ?,ўњs\vё…zК7\pЮйјсѓБfхbМ7сutыкUn|сиgЏН0щЕ—PЕ№{ЌЏ\Š/fNХ9gœ†L 8gž{^п}uЫр•ЇŸ@›‚|Ћ}Јџ{ь^†>Н{aЦЌEљ Fe‡т8РhK#r|ЙЩ’ž8&Шc@Cх ќыšПу‡ЙŸЃт—…ИіЊ+%ŸХє€ГЯФзŸЬBЭвE˜:с5є(+A2щ#‘№БЕЖлъФнжлъ+БЅЎ›V—Ѓ)`{sMЭ4Ї3Hg2r$&жZ&>rrRјЕО7нј/T—/EMХrŒ3 mлТO$ЅднIH^Є ИфOcЩтџaлц јјУїQVVjкz›АJрщ&§џ&№ŒјЭ3ц]Йќ‚|<ѓєXджЌBmЭ*<§дSШЯЫ7э@ІЙ Зм|3ЪWЌРЦ ы1№І›4Ёщцэ7юu4дзсћюУєїоCC}ЎОњj+ wЏ^шлЗ/ІLjFБ€Ј,ƒ*#тм>уњY|lЩ)ЩI›Jуw”ŒІƒџiЕ–.fГ1[Д(IР”А %„52‘KІр%“ђцћі5JU‹эед˜1№Е5в—Ї)h ˆЌusчq„ЉЊ2VїМШ‡К#Ж`0€VШcœђ!*ƒœQП™8VL=кЂЉБЩ™оБ#К3#yЦWŒ#NcШ}w„Ъ щпы`œі‡“Bяwтq8Йџљ(лыœжяDяљ—_Уп/ПTгsцЉРМoчЃОЁСFљYF’'}і;Жі?юT”vяŠ;oМNпыT Џ“bœщ;Сее™@мZЈCНЙ9ыёW^Ž;nКЗо?Ѕћ‚3/О ‡ruАјйgœŠЙ]њюfЯСш‡‡jПёџyЏП5=>э{ь›ю„?_xОІяІkЎФ‰Ч…“ЮН=< щц4†м}›]^йZoќЧећя‘ЩdД"QтSЏЄфЯœ[§ЫгKžияэ1qК:BфјcС/§ =ц8œtќёD0sœyк)Ишђ+бcя№ЩьЯёиаС`RaД/щ…]Kz :—!ЗЈЉТœЫ;СqЛN&@: Ш!Y{ьQGтј~ЇуИ~ЇЁДДwпyrrsЪЩA"!nсЃ7Т 8я\œyіtшдГ>ќЯ>§”іc‰\}ш9KфШ'Ѕ›/ѓS`ОјMп•єРшмЙt<јPtяомŒД…љУNFПSNE^НqкЉЇXi<џќ 8oРљИяО{ёјOрЌГЯСэЗнJъM<о„бЃЧˆу”˜%ѕKМzљш*?цјЕ„нB#•п&џпЙАB‰х\kј™ОєњУDžŸSй‰Є˜>#ЛДѕze)яф4ЏuОЄк˜cР„ъяђ1Йfм)U4eСДfn њŠkИњ˜‚КŸœRьР9э(dІSwYѕЭБэмŠ@Tƒ CtкмGУНI "NТ!,J-Ђc@X`9gRPeYЯ\№Ѕ2tл;M&М;Ѕю1 ЮєЦQMьМt‘ШoЦ9ыдњцNуS^б4ЂuЖ# ЇЇ-@Ќщ!<‘yxj*лw@$Й-Šы{ь ˜єф NŸbЂ!хw›Љ“Ѕq123R\гЅ-Lƒ›pn:jšˆoЊGНСЪђŠЌ‘   ѕ‹QаБАbсwxуЭЗёС‡Ÿ`щђ•ЈЋoЪHYД67ЂЯ~‡aщђ•€оНz`њЄёшНпaИ№пџp,]ЖCя^=0ѓ шЙЯ!€Х?ЬEџТђ•х€ТN№ЭьY(нѓЭОЉ=ї9+**#iцыбcŸCБвѕg mл bб|є=јhд74bђ/сЭIS0юэЩ:ŒGџх__>ƒЅ+VŒЁwЯн1§ЭWбћc­№МБЌS‰]`FFx$ Wз.§f.Йцz|;џЧ(#'чШЩЯЯУЊ…пcзВ=p`щЗŸcмФw№ў'ГБtEЙЉ™љтyŸЂџХWўr АгnјцЃi(нїp‹’NwУЗŸЬРЧœˆ нŒ„я›Э3Ž ф2в ЋЎHчHјr’Im-Pж‘š•Ыpфё'ЁrU•”Йdcчњ^\Юќќ|,џi>КійK*;Су5хKБKїžвЂЫЭ0yОˆ'СgТcH$<јђИ…К•Kqјё'a…l_=v/УјW^ТСG ž єєї–ѕHхя"€4Q n‡+ШЯG§ъ*Ды`ёЯОI‡‡tЯ4 щ4З•Ы–тдгOЧвЅЫ{ьбгп{=ћєбŠ2гМ={їAyy9,ИЫ€tгvДiл™L€­[6ЁMлv‚жЏCAA[ДcЇŽ˜;ї+ьНЯОиКuЋC\Дн.Є/]%ІцZм0йfШOkZ›Зёџ.1 @+gІYЊЂМuЦ“– ЯgEJ ЄŽЪеюl30:вьеЫ:HЕЩ.ЊgY,ph…m В”М‹+ІЦFjкЌрLoШƒЄ Š•‘ь‰хВ”ыи–lЕьd!QлUТж7ny…sхnКІИ‰*‘Р"&Цh–­sєЈєB`Ъ€>c‘•|ЃєDвІt ЌŠџD[Š€ѓ ,yІ ђ–4nBщДm_!АЃŽХsОЪ \’m lQоЁcдЈЄ7n’В ЫЗр‡bЙ:™1šедЕgё†mE :Žˆ@zљˆЮ‡„ГјПИ‡ž3ЉјuŽc™4ЫC@L|?ш€§0ыНЗБЖz)јцlЊЏ@~^”X9уМ‹Q\T„'GЧђџ}ƒк• qсљчX)UV­в•PYЙ ]ЛиGUVЎвyVVVЁsq‘і+щжЫ|ОЉ|SъV.BЗЎCєЏЌЈ4Ьв#:CCyЅђЗесЦ›0iЪ4\~Щ…hПы.8іЈ#№юД$7iqђ›мАRЙЪм-^YUЎХЄ|ю&–iEo›Щ'х_Аш§;“f`кп}0§ЭзАњ—Б­ЖkWќŒќМ\žg\|9Š ёфАAXўЭд.њЊe(щкЫООІ |mъ~љнКt&МBхŸW]—о˜€M[Ж‰ЉљL@Ў['kІ˜xї4hдгNЬs‚ІБЎЊ^eY”Хaџ}їСфqЏaхТБОК5K!//WфŸ‘›™`є|_L'ž<~HŒ№8ФщЭA€цt€ц@X+ jUЕю@е5ЋбЙИЩDЉœrѓr‘›ŸHхх ™“‚ŸH€Щ[C:ш@Ьš9 kыWƒ7oХІ k/Уgu­РA @чЮХЈЈЌвЭЅЂЂ;“&ФхїŠа7хЖoпŽццfы=™L A$щјЧ?ЎХЫ/ПŒm[З’z  СyuЕoШq'`X№лУь8Gт3šюџп$FккрTv™Ю"~шc~| ‘€ч&LЛ IDATЇрљI1ЅSкžяiхЌ’Tы—=јО‡d"!7Е‰ўт{Ор ХЙМx@цєе†0 ’:NшчЮw}Y4EdццЬ^Б<ЦlЊa ;Ќ‰В•а:’ЯЪ‘аVXслUсЈj7GАйœрдŸ”Яа@Jn1Ыщ';$C7љ[ЭёЋ"„6кxжЛк|%ЮA†жy<&–љЎЅŽа Р c–хM+НЩK[уфђ y€>MЫXиˆХЭЊžцЃюЕfОo—WЗГЎаВЪЊ"ЈZ БW7hY@M‰{ž'­rp'7МЉCШѕ‰N^дКЎІЖCЂBFЬoUUЌlВИБLкk&Щ_ЎA|$СoОњЦП5 =і:Ќ #:tэe%ИxЩ\uн8№ШаЎЈ 7оz7Ц>ёˆ•vIїЎКЃ”tяŠеЕuVТ_НwCuM­і+ЏЌB‡nНРкtдпЎ0ЄШЬљ‹б,ГЏЎВнП_zW]~)ўxюY˜6sЖlйjвт4Ž–ф@Iз.њ{IЗ.X]WgZM[`ІšЌЙиТDUе5иkо0‚‡kву_xу&OAƒ+,E‡оћKn8/Y†ЋnМ к•э‰я~cG<Єг*ЏЊB‡нїkп Ќ}WАі]сяVBhbШЫЫХ_/НOПј Бж2ЈыхЮNM™шъкEu…Ђ˜ЮLЃvф#—ЋХіžT(/<=яL™Šƒ>Kz ЧошК ЕC^Єы1OЏ“Jј’ОЇзV +ЊШ7 адœЦіц4 ИИX/7швЙ3ъъыuя;СиЖmvйuWффх!7/9yЙH$Sxsмk˜№жлшЙЧž№RљшPиQŽK ВUhL…pCmmJKJДWII jkыДJвниjЇЖр ’,pЮ‘›—‹+.ПЯ<ѓlˆ=QшвІѕЃСУб‘тŠuTЂк§яїw;Jля‘_ п•тїХ.m–HСOІрЇ’HЄ’HH0щљBФ›л.$S}"щ#•L •LЪ~сЅf–Яj]ЗАєS€Є(ІuhоŒlхЎ,ЮR]J‘+Хю1ІзGy ­*ŽЁХ#Э0ІKEСwћ;a;#>А\Ÿ’˜s*M™•”PeЃk9 (!иDЦbјF@TˆT€‘LёŠ#gќ№TЕžtђaMK ”ЕN)Г0еž.ЇuЊЄОbWЗЇƒU]+Љ@Ј*З)КЛЌAжЩWуp9hБэЦc#eРПњЋЋCђI=`т@Яї4xЄ—Ј J_нЅfЭшХ'Эд›>Eэ!ёeЩпKjFЌ™Д•ыђѓѓQпаˆ-[Ж ЌЄЛ 9№СдЗqњ)'ЃMA>rR)фчcэкѕЈ1tŠ‹ QTи #†>ˆqoN"  1єAuBQЇŽ1єAМ>с-їпџy/>§$zю^†œT GvІМљ:ЁPC˜ Й])œуыoчcыжm|яxћЉ&œŠВNкIŽ|Š;uBQЧн0bаНїі;VљЌ№BRУмЈвЄЧ ™gдГ/тХ'GрШCD~n.њєиЯŒЊгЫЯЫC}УlйВeнКaь#CHfМ§:N?љDДЩЯCN2‰‚М<Ќ]Зо№їхзёт˜ЧаsїRСпCЦ”q/YРѕŠK.ФєYcэкuZ™\(št&а– ЕžŠFpЊNЭе-7дЂџP›“ [я№C^^жЌ]‹ІэлPVв#‡‰ђ)ы чA&ƒšеЕшwТqђ uРgО/Ѕ:Z(щУOx№|бёе.№AїоіvCћіэqџнwт­ЩSNвњ*4ЧТŸув‹/B^~>RЙ9Hхц"•—‹‚‚4Ў]‡mлšPVV†Бcžeq†‰ее5шЦщ№~ИЕ†Є”Њ=މ“&с‘‡‡ЃИИХХХёШӘ4yВŒцN‚DJ7щPЦ—]vfܘ‰ЦЦЦ0MаъбQ &Л.ДF 1ZОеNEtLTЦП!yы7З‘‹ ћЛЛЈ єцšD,‘„ŸL!‘JСO‰M6^"ЁyAЧКjSŠ/OPH&HJЩ<“њ’e‘дц-ЪbРЈ6ѕbQм.kе7Г–к€+Ё+хmcЪJI@ZИzИ}4ЮZЩŠуІcJхєN•ТЌ˜vŠ–хK—Ч\К@хЄZJS3Т‹ФOLЩ%dѓŒ‘žяYVБшM*"= "501a-ьИŒnмбє9ЎЪыЉщlfј`fЈЬ”ЏВ:‚ШT#CМaD1’ (ЕъЩЉ3"рT{виœШbЩCЩWЯ—KMЏ=wЅЄKћcЊТSЅ-АVг3h jЛП8%sЪрЁŒ]ъ=Юй31 нAŽ+Ўў'†Оы+№бєЩxїНVф'Ц<ƒ;nОUKQЙє'œwNœџЇЫЌ‚|9їk,œџ%|ћ9Њkj№а##­,?џr.Юџ?}3UЋЊ1ќбQ:ўшЇџй_|‰ї&ŽУњšxъёxљЕ7BєУŒлљ#%И]vЮёќЫЏЂ]лЖј№“й6Bёi†В|ѓОСТЏ?У‚Џ>AuM-zt”6 ђЕЋРзŠi|§NG’>ЃŸ{<љ Ц ŒКХѓёсФqјіћŸДџџКУяНЫЦG“Цснщњ$P}т™чqЧ џ@уВЈ\№5Ю;ѓtœљп5 ЃŸ{ГПќ яы+уЉG‡тхзпд<№<†Џ§ž|цyБyЦ3]ŸY™1ŠШmВŒЉЃ’ФM8jЛВfКЮбЩnОэvм{ЧmXБh&Оё*оџPь$OШІL‚Т{УШaCPЗb1жT,C:“A&ШШNЙ^вGвї‘L$фšOбц~ћцЯљѓ>…ъšеіи(loNыр™t€;я{W]q9VЏX‚5Ћ*р'HЄRИц†6јAЌo\пŸŽ)SЇ™‚%pћwсщЇЦ iы&ЙЛ;{зVbьСAƒбииˆПџ?~џъёрр!YтДЯ–‡чyИсњс‰QOТЈN|[Бpbn`ECЬLСЮ;З§щGuqwрј;eе*ЇлŽй\У x‰$ќdќT~2)ŽЗђдк+2уЁз<Оя‹ЖšЧaE%ТЉћыEŒ(œьˆtƒхёбр :5ЉйЕэ„WSйцaFЩ‚ЩЂj{ ЌШdM:АZВЩƒ+yd-ƒе; я\ЪMZФ ФЩїhIМуXЬЄ‡XŒ‚uЦ šЌ4™mачщлЬІ*2ЌЮ/tˆ6 ‰М+КЁжкп(јQпTqЮ%Œ€ЗM~[VlRqvKБGлмњLх‚ISЅЫ"xЈ bXф:дЩ?ъ {­Ÿ<ХgrЋЎGЙs[іa=нЮџ АЕ–JФ еX.€мњ•mгMœц‰Š—Вч†ЃbIћmЮ)ј–Е`љt3 …бпєЈЏ% э:цЖ#=B‰Ђ)Šњу\|Сy8чтЫbЂDtfp№_ыРк‡щ qЂЪУ(m-”зMЇЅщ=ЅФC}VхХУйЦ$9рьгё—‹.РEН Й3”.)J@ }пƒџџїоёUMмјwЯНщв’@вPQСЎ`CQŠ(EE –Gl]ь+6QЊˆ’JzшЈ$@rїїЧЖй=ч}оїѓўŸKNйГ;3;;ѓ=Г|…s˜=З$шфBž‡9G‡єeЃW Вњи0>^йCb d7km*ЧЖ ЕчSЮ9v—ЁEfžЕ/xDqњеЈŒОАL/мЬ#ˆ44ЂсаAБVЅм]ŽstАр}NšYЂ>;MЎƒо=и0\|ЩХqсHcpƒš ЙgОСИ/™ХM`[ќПq4Сфџ’еџ+€дnнћ*rЂіф …eд#,Ц`‘qgаQВ5(iaЙ ‰аYЩЊœм ’š TїЖЮf[C&uB§Ж…ИgPИza ш‡][є‰<=yS•ЅVЌ1щ•eЁзт ЈLKIЩzh‡/туRHЗLДђсмж>bZ§‡§ а.(ЙqКІЇ™СнТHЄPл цWZЬ+3ЉJO‘™ы.wТwа`š№fЋ 7бHЋ|Y{м4НzyП‘G‘ЫзщЂ‰Юљel|šюЏaFї@ыйyйmЉу–.ZЩШћHVzюШŠIЬ`Ccщ}Ж“ ФКХl!јвDm^kwNФY’Ъ“—  8ўEЫ:hRѕ)fБџЌ1MЦИ? ї}mƒаŽЙg…aнšа‹‘yS’?ттbqн˜+№ТЂзI>ЮЛ‡pъ*+E>>Чв„Cд fж_`RЊ`rё љqыДЩƒЗŽПЗЭœ 5 иcLя %Šт&ЊбШНcх`2,‰ШхyРƒТzFx“dhў‹ мc`‘/н N21‘@šEёy1UjШѓфЌx™žEd~ `сrl‹2’ž 0Аpм С yh8tžчЁБЁ zЋFHY§ЯшХЏўбгiй[ьњ›€I“&тЖлЇ’WmН‘еgНl9O]іqѕo1о?Ц…ALR§уŒўпIUŽћ1Hлˆ:$€„2њ(КаФG‘jwz™8€‰™кЁpH/НХ#б`в€ AˆъrSC?hї™nя fћWrЧI%с3фЉЌБށ@ХuŒ.м3umEVнzeђІД[œ‹кщmh6й8ёZDpЙ тзкЋYd\ 'ђ‰мирк1ђŽP'І‹7`вШЮ€9YžlЊАˆk‰ьˆ!'yr+ƒОІ>СЄѕ,Лn,ЗЉщ8€HDO”фœCь м8ЙuцаЬЎ[wд!jИfТКд‘V?0ГЌЦG)Ю5о'сGRm:ПmV8‰iМ`СNnђrѓ1Ч4ПіY№a>ZŒ-бc§Žpр]“›pщsЊzю38Я$дAЉЅЯѓWВЂGe-O,Сѓ zhJS д0дяЌРВяОЧыoНkхХџЊ Ан<еSY> 8(фШ‘Q™DќЋžQ~| ЬqІДХ6FWбМЉx~ъРѓр…Ф’:Є‰вТ0 gсœ€9aјDЯ‹42€ˆцEРрЁ1ACЃŠyˆ/ROсР­]ЃЄ чzаВ9KХ„CиS^…7q••+s4уА8"Œ!Т _Ј­2E„•1 тЂћ-$– …LwRC(яа!А рzСtelнztын8џщPyуьњюнЗŸяUКŠVй@ьfРƒЩР6ѕnЮџ”^s8цЈэк%ђџЧC}x+‡рЋnBЋŠьщёV!xaГх!ЌkgЌР$ˆ™дб(ІEФ!Ђ–LEЂє{t\™l{;sЩДžtє тлœыіiЂ?,аnб;hpЊЬќе92ѓœ4ѕРZжСВ}аИэ‡З#Аg‚*oО‰ЉЖ40РІZšmJšБŠŠ1‹BкЖTдЮхѕмЁЦЏшe/HTL|T(PЧєЖЙFцN–Ю…\m!AE&<)I“‰К“;qŽбg3^зЂGт#[C)Љx•хv5ц ўис‹ъЂ{/ШЂЈЙŠ&еŽє‰Єв“І,–OžMЪ–мh•Юбfеj{AGаЩІКЙƒ#“дaИ P“сПДГ!Р–pЄП<їpЕЬЉPšŽ3G№NГ%>Ю_&э' iXГd?Œ™ћцІѕр~@Љ ОUЎsЁ˜p…7%`wOЈ€Ь-lжЪžћ“P­'ж\G1"\Gц„!aˆx‰шn™FНЦЈW*цŒЋpП‡ˆ\šGŒ]ђЬF3м|х2ЗЊЂш!cLwA0НмIrn{\FSŒлбŒ™™kёъAD.ЛѓфцhŒ(бEa 13е=3)фyh …jh@УЁCh8tH.c$'^IpЋЯpщŽ*ГYоМ#аБ)чvКƒЛaйŸipв˜wЙ&ц­)Т›dЈ Лс{ўЏЄѓџАQ‡}nybоетрdШŽH2˜™ЖюŠэ[IЃурTЄ?Т#zG<еЎ Єо QЕOТ†ВЋОa Za˜%ъ@‰GЕ-Ž3%mи4CЃЃAљЛf.xєЕXђ\ЩK§8do ]\§u˜‰JњщjвYЫџL‡<ЫчЃ!ЪW˜œЋq Š˜ў?А^зcFiзЙQЫ `ZŠoкюЖ<}m™i)е{ЅžGLЦmЃI^Vfє!Г0€z#ц ьИє€ЋКUў2Tе[ІЦ†rѕШі]A>псOйP Ul†цДНuѓ5Œ‹:dЮыџчЖв€ЩРВЃ‰м=ŒШ@ЊLнn рёпўї b O=Uz)Е0ђї.qt”MЎж2nџхџ{ЇEKjm qКкљ_лХeГdЈЦЁ3Ђ-˜ж7Jiт 'Ÿё=•тДe†§LwгвВ›8›{+Mі*OK>№‰ЦтG…D„щE‘Un„™ˆb„sь+/С‘йmбNŽqˆ( 8QX1–2ЂЃ’žŠ~SЪ -ŠTНь‰2ђ;b@.т1„ˆ‘Ѕ`.E)"ЋЂ›\|5DЄЧm2"rfЗ=]PˆШѓfGШuЦBa Bс0%АŒ46"виЈVЄсX8ЪpYUћ"rшB1qˆv™††ƒзd*'БŸН№mAыЫ$ј ~O1№ehЪс‡ъСbтЭуiпЌї}eИН_“№я JLРЙеf™Й–‘H1у6,їŠЩ5ъBЈRQ;iŽ0TDЇ‘zЦ r4„1$ЩіЧЬ"цЙUЙcMЕ@ЉœŠ”ЬЩ‚лчAtЛ‚wIp.X‹tQьоЊZЙќB”йVЪщ‰ЦЄ™lШЩШ“]вѓD"ЂK›35кШyCЂбЊIJBzжŸcьHW›• SMўсœыuѓ ѓ"М(Ау19fJL„УЈ”_Ъ2ВЪC˜I№с`ˆ 1ЂьœŠиFapЂ<B8Ft}7ЪhSУЁCˆ44˜HЅфе7Ђ# ~›’MFЦВКЭїpю№0>нмdLШŠ/щvgЛў•}ЃЎэŸцѓЏЬєџљЁB[šDтєU—ЖŠ@†BrжЕкŸ—P-uЬu+БђІъ;@Ц 1ЊЬЮЫдЬЈ6Њ&оИ]‚ўZтО3к}ЉpзхGV1љВЛ””†rnЬ07fY§4єQžxQ•­тšYi…ћ‘у#ЙQ#‹qma9?fZВbŠWх;[ЃM)НA™в S§r95IЉыяДгНђЅrыъˆУЋž‹ЇA*ЫНФ­j]sХЭGљ#њх“1?mV7ПяŒLЪOоm~nˆзУКЩ­њуnзŸJE"жєњŒ™l ^ЕЙ7 ‘ШcЂIGэЇ—t”І“˜)›~РhХ?v:8щЈeРK:/nпѓЉ З/IУіч­јЇ­% ЉюЙ/HD,Šk8d‹Ё‹ъjN"муАIsыy@„ыСЯUD№<ГЏЈ'џ]нU”шЂыъъQU]ЯПњ =ў$іюлИ•Г2ўCЭ>%42Й`Ќn№•E[MўѕѕЈЎЎЦч_.ХќЧŸРЮ={0EКœЄ ФˆхBƒч…‰ˆЅ’BЊл[„‹Фтщ `ЬУ)]NЦЬгpюˆ‘3ˆНWХњ–Bс1уЛБrWЯ Ыѕ7ƒ+є№шpЯщaЛwquшр„cу,РЉ-gtВ|Июд=0їћбЇпщт&ƒЅЧQ1ЪПa ћоП.M s(ЦЌHЄ| ОЄрЉЅ~МŒ^‡єтЬК$…ф6ВЃŽKм"^:nВ(˜ЌЏ)E|jŽп‘šM …ALFsxrќуzЙѓ’%1њ…HюбH–пљЪіяtЙЛ<š,œщ"Qš чš`Пѓчф†/LвDЋ7Јљrе‚!ƒОMыƒkПGСЊгУТ™ь•Гл+ХђŠуF@7(Idф? ^Ў09Y‰‚ 2{оШРТ€Ъ/їI€POмІ›ŠЊЙfСщ8>Tbš@ёЌ.НRЯhЄ—ыХєеG=yЫdсЏ#Њ,QД" OЩ“южV<;БHNк$ЉLх?›:”U3К=ЯC4 D‹LКкcЃ`EлŽ<&Љ…ењ-лб`nЋЉѓм џ*ў”ІЛ€/ э># nЛJ$щ $EеЄrЪЊеEqJОЪvЌyPx‡ћN`ёDIfКIŒ1вQђSCб•­із ŽA я"}bТшЩЏAцС#ќD`Оxšeф1†Фј8ДЭЩЦ„qзу™'тТK.‘Mк Д8Œў‰ѕО"і˜rdЖmˆ‹CNVЦ]-žyb!F\r™Ѕ0бP3H№щq%й /-ctт‘™ 3юКkёјгЯhчЌк3cX˜!тh yhl Ё1„bcФ$9Ыж0Ѓн ЈCšВ‰&iхcм4xд—Јg€9?Ь1yђD<ђшЃvŒDZHFбЭдџzА€Lџбџ&џ”ЦпО™Ч/$—ј Ы™кd:йр"м ERбG:фУЦ-ђžдEmђИ  ФћV4S9#5ІNщ†Век!q‹-уxЭј.›у€1И4ЪAќ:#­6PТHrкT&$Ђlв§Ц™ћdc3@kаŸЏЊX[cGl”bъN]ЊД…%.˜q1\ЊВuг$CЯ ЬсSЩбягЉнєHj}œ\iвЭEДо˜ ?ŒKђqЋ r{ iŸІ‡ш•ZїиаШ­ шgNП&TИjУПщ0эеѕНі0т‹EВЃІnƒэsБ›rœзм\˜“/ХMяE”Оpxн№њ=њЏл-Ў9ЙЎлŸy;+‹PQє;F\pдŽ-МnѕгC5r™џ‹Я>!о/ўCОS>}пaŸзэпПлмйПлКŽќН‘ПwщŸ”€•ЫзEuЩfьЊ,ТЇ‹пBnNЖцп‘І}ќяжЯЮŸЫ=УkЭяOёSGL8Œgп‰ŠЭ?ЃЖј<9яA$ЦЧыr2гг№эg`oХV<Л№?О [їэИaьhйЂ9ЬюИфЧФ_\Dc’ыcyjы.‘W(ФФžеa) yš7OТгѓBѕ–_PНe#žќЯ\4k–„'З& yИxФ0ќђУrьоЖŸМѓВГВєИСИј8Ь=[зЏFёЯы0ўкБЂ0&їУG#‡ˆМi№ЈnшЩћыр-…˜qЯtэв"jwѓу№уђЏБyУzЬјA$$$ŠœУівB\?іjќМ[7ЌС§ГюBllЌЌ&QžиїœЃОЎ›З`ць{бЕKg]У‡‹5ЫПFuбf|єжыШЩn†wn+ФucЎФІѕЋёЧк1wж]HLˆн’zœ[мcШЭЭCћvљјјѓ/б gЙЧЧ'`юНГёЫšUјmнj<|џ4oо1Бqz,уЕз^ƒЊВT•—bс‚љHjоLяыЪ<†ЦƒѕтwЈŒ,‚ЫC8ЦєiгАuыfьЈ­С /<‡fЭ›.ЂŽу:uТŠo—ЃCћvBwСбpА у+ЌЧЁƒѕњеЋ~Р™hƒŸъЊJ$ЇЩiВ9Дoз9~ј‘.ЛѓI'тг>DmU%ъџо‡5ЋVbјРзі$}+П[Žэл[їљЁzм:i"ЖряНЛ0iТ-жѓkЧŽСіЊ дV–aсc">о …Т˜1m*ŠЖlТюэ5xщљчаЌY3_йЂќcБђЛeОђ›:BЁfLЛE[џРюэеxщљgDўвОђв xњ‰…ХФ!&.O?>/=ѓЄм‰&ŒПЊJqгЕcPДq- 6ЌЦм{юBlL сD›7k†пЂ_жЂxу:ЬŸ;I‰ dэ>`enО~,ЖЌ[‰E›pѓucХ№ Ј)ХšR":YW]‚ПЋŠh<t&6&ѓю‰š?жЃvгzмrэерлKЁкЧШѓ†тЧ%‹БЋрWЌ]+Gд&2)!OЇœqВГ2qзm“ЌA§ч >#.ƒьcOТ7п­РЃм+7исИuќШЪШ@яГ†Ђз ЁшлЋ‡‘ ЌJ3a€њь†§uЫФФФ 'Ї ІNžˆяVў€чИцЊ+аЋg\0њ2œмЇ0uђDН`8єюй}ž>‡ ++ЗŒЛ^юъЁЊJDGУ11Шn“)“&`ХЪЄѓazж \|еXД;О3–}ї=ўѓР p…Н{є@я3ЯBпƒ‘™ уЎ—F!brљуЏПO<ћ<54Ђ!ТqЈ‘cђ„[’œŒгЯ‚3† EfF:n›x‹Ќ™<{р™шqк™шоЗ?ВГГ1}кTБ4LXDБb›5G\Гц/,v4QыNИхfœvz? xк} pЯнwKЙCаЛwoќїщЇ0њтKАeыV§,‡АЕси8ФФЦ#&жLhyюЙч1fЬек<ЋзЌЦікэFWe1“&NРќЧ€G"вШqМѓі›xхезпОŽl‚I“ЇрђK/5Ћ @ŸоН№ьŸФEЃ}юqц€3pЦРГлюhœ5h ѕlШрГqBч“qB—“‘•…;ІOеЯ&м|N?­њŸ9mл љЬž5г—П(џ)\4њвРђЃn/ѓ? m;t4љ3QПу'MС™њу‚ѓЯУУЮEџ~}1yњ]Ђ Ъ™кН{і@Я3ЮFЯ3ЮFvf&&'†W„<ܘ2 iЉ)ш3h(њœ5Y˜6y€“=IЯшлƒ†Fћ.ЇтЬў§єЂмБ)9ˆMЩФЅц 1=Э2ђdН—eCCЙЋЉЗŒCћЖyшrЦпw NынSЇcns%ІOЩ3ч ыјn2ъ єьvВN3ѓЖ‰HOMСЩ§у”3† +#г'OаEп6с&def зР!ш=pњœкУ’я cЎBŸ^=1tф%8О‡hџwо>дnS[cfG'Ѓ€ ?LЂКаАi@ctвYяИч>м2Ь0{|ЙCЄI}Аы}Э-pIѓƒg2n jЄщњ‰† 8В ˜edЋw%Ђ UZX{v  pT/ЋhЂтЭџК+кЃЏ‚Z)Hg<ВРїќрžЪK‹J)ЁZTЇхЄЇзG;x <ЁѕифЭQza™ѓз$їждvŠfœ›К‰Фѕ{Х шЂ]ЧЗLСЁC‡а(Ѓ‚т9iаѕћф§Љц§d:дрМOˆvЪuЙхuђyBK§€1#/еє$&Ф—чyhќk'vяйƒЃвѓtщу1ƒЊ†я“tєиI‡€.'€Џ?]ŒКњzєt.ЖЖn\vmѓpdf>ёgM JJЫаі8apЫЗlDFzRл ЦЊ  єZІˆЦс1lG\ ‹Ц’’‚5?|‡ЖG'fiЧ„бЃ{wМНшyРЈЋЎХкŸ6шїї–ЁsЏгPPT  Пmо}ѕ%tэгЬcјщћe~Щ•(,.чэкцсE/ SОђƒ ЈЋ.СбнzЃИДЬчHNжŠ1“4*cЂ\є‰ФўЮБeѕr uЖ љЖЭУ–UЫJЩl]ѓ-.Оn<жnиH*ЬœЌ]ГG^†‚тx 8&?МіŽэб Рo?.Чљ—\‰Ђт0pДЯЯЧšх_тШЌЖрж,џ ^>E%Ѕ€фж­АќгаБ[/(њј–††uгšБзТnROлt—;MK#ZоtЬВя™ТД”…&\ИЏќр’ь<ЙОˆ’iLу&Њ›Z­Њ^ВyoŠ^аањD@†™’Й?Ё9,f6џ*2Ќ?h‡r ЬК†eŒVˆУ7Н2‡[ЯОz'Кл|ЂFЩ5Aўќ)Є‚H”ѕxэђЏ vРiбЂ8чО1“ŒБРpьШЄ™ш*qр@="СЬОf?8pр "ї}юKgнуСJ@ЫVNл}Ќю€гћaЭŠЏёgm9џ€№ˆ–-}Y‰#Z3Жjиw~|ЇcёХGяррЁƒ8c№љH2pdeЄvWтЯš@vV†ˆ*z ­[‰ЈчŸюХО}І›? щIПoоŒ;цмЃOющГц ЗMмїbВ‰мH^Œщs6˜зЯEL,|,ПхўЁiЉ)(ЋЌ‚кOДЌЂiЉ)P_žO8НБeП§„?Ы QНѕ7$$ФƒCt+ЅІЄ ЌВRЫЈМЂТ’&•`&šHыэˆ6э‘vєёH?цœrЦYшzв‰шеГ;"ШЬШРъхKБНЄ;J Аi§jdЄЅЁ‘sНеVyeЅЎ–ВЪJЄЅЅъЎmHЩы€œŽ' Їу ш5р,tщ|"NэбœЧз яМњ2 6ў„Ѕ…(лє т HА­ЂRц””W"=- Вѓ€kЎИ‹оx„Z6) 55%•8ФƒŽтВrЄІЄшnpЈЈЌ3zУaTдд"--^L,̘8Аp,X8‰ЎO„bРC1рсА˜Xdgeсї_6ЂюяПPПџo”m+Eff&Т1bћ=˜pЫЭиЗw :^ˆЩYч0_јЪ@г?џќ‹/Цe—]Š#8Н{ѕЦ‡}фkt7мp=^xё%аe^чœ{вRг0я?`ыІпQQVŠ‘#FXmТ-7cяоН4№L_љъ(‘`Тж(ql++ГЮггвєu›ьllў ќP=јЁzдTnCVVІ|*˜xЫЭиЛo/НќhG›ьllњ ќPјС§Ј)/AVf&bтт‡pLж§М%лЪP\Z†u~V†эmхZfUеHOKеm:5%EъЗh;ЅхHMMббvеžJЖ•ЙиvS;Nк! ЃћjЫSг-,]#УpJЫM›оFк7ДЩЪФя›ЖиB!€!=5e•’g ДМ\иyЄЅІ`[y…ю ,“eЉ.ыЌЬ lјўьЋ(ТОŠ"ўМщiZy|ц[ѓЪ%žфD)~Љk pЖбМ +ˆ›"Љ]Sл№AG §”КчЧ€ОƒR)Цlлv”@Lѓ—Жmu &ZiG8эюb5d 2ˆfxВxзv„YєhОЙйg]y0`Шјcѓ9ЮBŒ[ЉЈЊ$чДGь‘Љˆ=2 ­3ф:„vэу<[Е: ­[›юt5ЯѓB8ЖcGЬš~;~[§=ю›yЪ++1ѓўЁ6šЗ~Lm8ящч` uѕѕˆOŠbО8jjЗЃMVдКŠй™™ЈЉнЎ•щх'р>Тq=ћЂEV>кзй’uuu 2ггЕмГ2ФZ–Ziе…м†DЦщиДe+nКmюŸyc(++Gўё]аЊM;е&GfчуЈœіzLdfЄkЃ”•™‰ššZ­*vurќБy nЙmюНыx!Я=Бя}јNюе­sђбюј.šFЕ“AvfІpL`ШЪЬ@uM­Ћ‘G|\.9ЯМДH*Oua љffd"Т9CzzjjЗKА) ШЪЬ”†аCvVЊЊkФ–z!БM#Ba &#^gap/ŒвВ2Єчw@BЋd$е GЕBГV­Сbb–cG‡]x!FŒ…YwпŽ:‰ ВЋ\ћTЫ*1ВФ‘ФГЯ=‡1W_…сУ/Р’%KАџ~г€+ЏИO>ѕ”ЉdОиМy ЎЛўt=Ѕ;Žj‚‰“'cСcѓ­ж4фœs1ьќс˜3{Žэи1ащ6енв&;л:ЏЈ4kЋ–”–тЈ”tА˜x§ Х%‚Г‡ž‹sЯ9ГяFЧcމZŽџ`"џд,x -J:Б-S”œ‰p\ТББХ„1zФhоЌZ4o†УЮ &b>ЌВ23„ыf йYЂ§)žkЗo—Є№eІЇЃІvЛˆKш>7˜qYŒŒ‹Sпм t2&гG\E`vHЁsА+ЊЊ‘зІц8GqeЫ**бёші–ЇmОКv;В33ДДГ2…ў+zЋЊk•‘ЁщЩпЪќn++G›cOBѓЬЖhž!~-ГђЩG)qЊ~ОнgќS?{Gт š†;Њ;ефьєб~M•-.ŸзВ­ђŽ Цв­MђPі–Ž…@кН€DКћ˜№тfC ГMІнK)dєŽSОЪC€qf†1f†w13ЮвZдН3РŒ % ‰™в›ŠHвGОzбsм’‹б?ЄкчbЗ ;юШœТџЩAС?WЁ+'ј-2„ЌЉУ3 mx{tя† †л]б[{У/ЙqИL+P#ЛчкхЗ…FMН/џ„etfпО?qщш‹œdB6lќ0rј0!ш&хh}жbщ'я#66ƒЮпўиЄ>{!1fъ•7оLŸ2 -ZДРБ;т…ЇŸ …/„х+V.8я\Œ8˜)ЦQФеп|ŽŸО[Š уЎУЊЕыqж№бшдГœџD”б|ївAЯzІ5ƒ†љ§\>ъB„ТaнJ8ђюЛsR““‘šœŒћюš†>§L+^bbvьм…њњzфdgс?їоР(§;|„{fLErыжHKIЦь;Фx5cЬXы+њTTЉЮŠVaчЎн:шLМјк˜џаШЭiƒИиXt;Й3оxўПђ5ёўЌS‘’œŒффжИgЦTМѓСGV3хš`A”Ъџьg"1A№ЗПОйYY˜;g*1чŽЉHKIAZJ2юНcољр# .Хят ‡уѓЅп`чЎнрœ›m=†>§ sюœ†””dЄІ$cЮBОœЬвœ5c*’“[#%Йfп1oПџЩМмfOF—НАаP,Цs/ПŠЇЬG~~{Ф'4Cю=ёЮoЁX№“u‡QZY…kn—_xI-Z‚ХФР‹ ‡СТ!TVVbШа!ˆ‹‹ЕЖ†є<kзЎE]]юО{&о}я=#Tсopљe—aЩ’ЯАsЧbEЂ%Ÿ~ŒГЮ„fЭ’‡ЄФ$ьоН дTжееЃЄЄWЙЏ.z‰‰‰‡uМєx№ћ–šŠддT<јР}xѕЕ7єГџ>ѓžћяSШoлqqqшйЃ>|џ]ЋзееЃИИW^} ^{хE$&ўƒEЬХWўћм‹xю™ЇаОC$6kŽ^Нzтнз…B`ЁRS’qя]3pУЄлpУЄлpпЬ;аъЈЃ,ƒ=чЎHMIFrr2ю™1я~№‘Ž~јЩgИ{њTДnеЩ­[cЮгАј“%Z:z‰.ЯŒуLЮќ&:ZQUГЮь ЁЂ[џдUЃОКDЧз”гyхэї№шœ;‘•‘Ž”ж­qџj<ЊH9џщчёЬЃsбЃkg$&ФЃCл<,œ;G7Зї?^‚юš†ДdЁџм5яВDfСёітEћHnд”ЬОsš|$ђс•зёј#ЂmnттbqJзЮxѓХgеы:BЋюž2 5`† "щp•І|(1!TRxi@б^ Ю кf„?ЊOV\%;А VСщs•Z\Ђ^фЄС"Еу:’щ€OMсŸ€BѕQЊџТў)РGяй“eИ=zЁ•ц ˆG›\ўџЏ` ­7№хкЩ)ў4 Ѓ ~Xя: @k–б2fкfр„з‘q0ђ2r d—›БЅ‡”N77ЧЄ)гPU]OПƒ!gjђх@œWПO—~РОЖц?чі яџIЎM-ЮИk**+Бљ—ѕ&ЮСыіъё”фѕ]iуn™ŒmeхјіЫOбэф.ЬŒŸ8ЋжЌХS ўƒШпЛєn<РїяпПЫw­fJgЄЇсˆ–-БvХзhиW‹†}Е8ДЗVюlссЁЧЧьЙуМЁgЃbыoXєь“XђеRБћѓ0cЮXЕvfп1'зЩˆGF9ч˜8э.фа Wп4пЎќб(•GvП­Jя8у™n0†Щ3юЦИ1W`пЖ-и_Y$Ыц<<;wэТšЏ?ХšЏ—`ЧЮИя‘љZЇo˜8ГІMAхц_№б‹№щч_њZ№8*ЊЊ№§Ÿтћ/—рћW;uN•ЩB9Э‹Ы…џ}7]w žzсeЌ\ЕЏП№ Š눇цЬТЋяМЇ/ЌZЛ?,§+П\‚Ъъ<Мрq8-RG%TдFх?nвmИѓі)(§уМџњ"|њ…рF*VЏ[5_ŽU_-AUu Z№„Ž$†B!м0цJ,|цyЋ<еряџЯ|ькЕЋПZ‚U_-Сі;qя#ѓ-њXН+Пњп~ў)**Ћ0яёЇL„S-#'kЈЩSъоЯН„?ЌТЛЏОŒЊЂЭxtю§XєЦл€'"—тЅp/Œх+Фs‹aо#ƒ…cРB1@8,‹;юž…љѓцaяž=Јћћo„bТ№dWЙс…_D‹цЭБlй2IƒаЏp8„›Чп„y=ІН˜‰F0ЬlІм:е•(*иŠaУЮХ…"бc—-[ŽgŸ}/˜ЏЋ‘йZРŠяWтЗАq§Z”•—уўЙъg-|п~Зј>іьЈСТЧХ‹//ђyјfйrќї™ч№И9Е "еЂу џћ<#!гу"ЛБ%xтnŸu?>x/і—oХСъb œдXIЪ =тќљO`KAж§ ~§ю |§эїhhhдЕАр™№а‚Їёи}ГPљл:|ўЮЋXїГ?9ыЁyиБk7ж/[‚ѕп,AэŽ˜§а<]Цмy QQY…UK?ХъЏ—`ХЋ,q?љмKXёу*М§вГ(пє3Йw^}ыB-‰Ъ:?§œД{uбз~ЇФШЛЮ#џЕыќнžNf кœС‡=(ЄйRЪ(јдзмКЅщВЪвyRлФИЭВ/LŽИУ'—”bГ–ЃщŽЖ"Šv!=6­ў1…nЄ4 vdлwX‚&mаG‹>щa”Fг3ŸL]0юэпGлЉSDa4ˆњA`#­ДzЮ';бЦ&^єзˆ™а]Ј˜%C`ѕ№(Оˆ(ѓgAŸЛ<Йя6yШŒГy…1 ЬощDюŸЫtкBЬ;Іi8ЩWБУЙеhŒ!‰Nїaъ; =Б:~ВЬu”П`6эмjІцj€п"š”РЉ>Зк9€Нл pD›v$[ ф'˜5еžmh)ѓJ}Юйƒ0ъќѓpЩЕуфCЎы\ ќWOНeжѓВžZ  z\WЂ{гѓТиYє;ZЖiЏЫЁUH—Б1\к2Й\ щїg:-з*ЯРЎ:пхв_ВПqф№с~Сp\4zДОЧœwю9=jFmEлИŠШй J ќеЭБи№M7Ћ#ŠНбЯўХ!О СdЄ˜Щ!Ьѓ‡E Єv`bˆЈU-$?jwВЁъЊK˜ž+Э…kќe]JрЩ9‚щД6(щЉгв•8,K?ЅнRЏщqСВ2ггАтуwбЖkoљзГв-ѓI§,7іХpЮmgЇLЎжE•;tйCИ ‘~-wŸб–Уѕ:†Š>ZОeЂЙД€Уяmk#"Ш4НБЅDА§B‡kХЈ§бOU[вѕТ|яSЇю 2;’мhЄ t”nG[/Q§ЁКߘ“ТспІš‘хЪыЖЁЃl RMfqѕеШCљП‡SѕшъЖ›†4AЪЎ/GЗцu›ћDAxЁf6h}RЧэsŽеЫОдpZЖl)?bЭO~MР!‹–3иЋZњP›_:AL0ї‚GOЋЫqNѕ”ї›rAž…йї4+V(№АŸ+CЇ1 ’!c= DŒGфŒ€KŸ §BdФТZ>6PйMœ /csЙ ЈK мT#‚1(О*#šЋІЪ€“™‹$шџЃ?k•~™<Ю9й№УўхNMŠ3&џjь~х#N˜№n9(y7_;wЬЙпжЌ€эЊЌњŠb И-Dm =УТ–‚BmЬ ЃЎЃaв™›Ъжk‘Щ6ЁОИХ.*еnЙЄDРчББ1ИњъЋёЪkЏƒ…c Ц[{р˜8afмy'ТБ1ˆD"z, Е ˜šCЃ{ъЪ#žV-\O`FQЛІq4*œї=O=‘ 2,ігfrїOŽMf`r’йбˆ љFh9N4ˆУд“$б@т8]1P€ШнwnеX/“Lъ:Б1*ЏEOЬЧьGцЃКv;юОm"/љœt‡yўЬ‰иT3ђW#Z@Д7Ю—VЇ2чAМјx;ЬsZз–§UєхЊT‹ж_ю<уVЉdf9ѓC fSaђ`0яEѓгмЉ|ќh‹­†уЛ­­gpК1„%кŠщC[ŸЈ.љлa)+rl\ЉЙї|іD}LG=ДE‡к}Шд>едш[ШЃр#ЈющЅЊ‹–! YzŽјаЄ @E# дГШ Ѕ›шgLяmn(“)˜MПщсВЪЃ‹3 .lЎэvЎ\Їњ`ќќ›хXњўˆ‰СЧ_,Х]ї?B хPиQ­—.Т’‡jЗкIћ>І]‹ІюкКюС­?ш щУAмЏ7”љ–;­ˆЊcЄІЙЖ­И nˆd˜Љ4„|R єл~ћЋxВЂtЪ}OH IDATъ‘|`кёDбdЋЗкењ№БП%іEњ(Qnш3;ŠъЋ(xФк)/рPМК"4ЉэHЈK—пѕ;mФzDeхЇУ…б;ыџўчЬїџџ~lЇ(ŠЂ( uн”њШчџ+•”&щi2/WыT><к<Љ XiЏПА=ЕPЊTqЯ3Ю™FЕёїЉуcDV_IЙYЯ У&Kyщ‘“ЩBїХ4m5-qЭƒEMЌдfњ@”ЎznнjZ`[~ћдT7жœТ ы •G‹ьv6=ВжaЈЕА28šыѕ2aщ( ЦИЩŒЋ\ˆЫфЖQr”єМe›v2WЇ§kчйЈB˜‰ 1‘‡љ№Q…™і ђБhђ€–9К|ІЦaЪЎnэ:%Xу`ž˜„ЄЖ„'ЛЬ-щNœpŠXMw;0jкiлhКNƒžИ†&ш>РbХиf9щ)# У {Щ­UЭš}Д’d=ш1LŒ>уHЪШ“ (,hЂэŠQНуц]EЏщт‚b'Д. ˆQЖPёB` ч/Пѕ.^~ѓ]G†˜{ЄŠŽм`uгq˜­ђ8 #ГrP[у€LѕШздn]gЇ Ожї•­ЂіаЩ]мГZ7TM9f’дJpї#Шs ŒX  tУ&­.MЋїнГЪ#љ[Ў—RЮi3лішњ 4NqV›&С _о=ЛЁјe@П&щЛT Ѓ”*T^мСЖžИчбŽ }В\О›3ГгZчђ?žq+C;™6щv›Ђ>H“џ§бФ:“ЊУƒУ>?ќ4A'xвЮaЪbpdB,э–—j†m(фщЅwBЁB1! 4E›qpя9гх@ћњ•bF­7%fиzи_]ЧU%ЈЋ*‘]рt&Е$CЎыч1БKЕх•Ь.ФШVNЬhŠ^;R9#Х4‰lЊ†Ќ§Л(]Є ацћ9 f(Чђ“™гэЂTўLзwЊDFЊ˜1jъ3АкLe`,Ъќ<˜gћЪ PхW ѕ|їЖRˆЭƒ’#`ƒ”?Ы ЩLFfёЬ@—5тЖШз=Œnšmy-л-iЅ>УЮлnјVuзjd ќ;э%ђчУHA‡Ж›N2wœgPя)lбDЗœ‰Lj#DЦџСё?ОЮт[иRf”ќŸјЧZЋnwЦГš Ы$`ŒсюгpХuу№Эw+Ф {ЙN Аi Љ9PЈIхЫY№we1<˜0Оt2KЙt ђ*„^чЫŒОthe”‚’ЮЩЏг„р,"м5мT!Њы4Ј{о­"aЄЏДёFЇ„1џЙўNcv$‹цсйжЦЩУШфЈœvv9JоœК;з5†– яpё–Њ5œv*лIЫ7ы:ЄПtпaе=*ŒO€ѓ yC3И%zЪ™ЩCЕB†А`Eh,!`,ЄЅZ,р2вфsБН"ѓ"`\Mь‰Їc[fЁcФ@ Т”лWъ)OкУXh—V*зœ2ћЏќXT й ‰эt&Н%ёКюДž+Їm ŽŽЅдЂЌn+г-м‡=Ј lО‚šЃOU=“LЕS6ћ‘RBї=­,Ж“v/Д>K]гyTЧюk№ЖS6d0 •] У„^КіеI#юšюnЋ.ŒI!…и‹œT.й8”}Ъ “ ЬцЧЅPжГЅjш‚|Ÿ%‡5щWGЕS+ ЈўГэ юRЗь€ёЯ–эІyYЁ]C“к5†Q2ыу”ž}WVСК! 0э…ћхтвJ тЬЫЉ_šNѕќу‘; ~њєQЉЋ]VмеЅљыфЪ6Й4GС:ЕМщєОnn~`X\ ћІХыE­єџ…#Jѓ(ДW7EН); –ЩEФ…KPHЃEкЗУЪеkСМt5Д…АЈBe Ь7LtFs6˜рsm’1uВGŽЉФzy•ееXђхWxdс“иГgЏѕ%СЭз*}pўKёшТ'Б{яWЏ …šDwє7ђ 4ЈчЇtэ‚YгЇb№№‘š.3”7 Јw<}сЏ#э^u1|sђXе™m=І( ЧЩАГД­rк‰.•П%KЎЛxt™љv?Й юЙc*ž?RыŽю=•ТаіЫ*`FЊЈ6a~˜Вˆв.,ŠчЫˆœбоTўЬГ xрždBЦžd„л|б‹н`˜Мˆk)ђ‰Dez{7эIѕЊvеx7qз8!‰•‘дPЁ‡ƒЕeh–й`fb‰а( $m†ŠЈJ’EFtZ—уВUMŽ)Т!њmЂ– б“цЎЛv—Ю\Ut)ŠnщeОкпКcЗƒц ЫзY:gƒэрѓ7 o;ћ‰CЋжЮŸА@ыЉh“tњQЭУКžœё‘ŒrlsшЃGhƒN§‹ R§`жIРh:Fў0mЁХ=nо``b2œmиlš  Гi%хqћ’ъК?п њІ:Ќlm[€ћЌ”\bецˆQ!щЛхdM%Р`l‡”ŸЖѓ&ЕАaF'ЂVЧѕYўћСmІŠ’‚1k6wSG№˜IWОУеˆшфўыУїU”FўG-Ћ~еT†АхLЏЇЛ†•Г“3.…с1М0ЦаМY3lh€ZцЧЄfŸ МьЄ ‹Rlа2;‡мьlLw^zr!Ю}™.РЭеХшŠt*WѕЮ‘riœјј8фЖЩЦ-з_‹žZ€ѓG_Н8*ЂЅ­хFбПёз]ƒЧџћЌЎШ‰t П“w€н šъ#‚ћя3иŽ–цщщs ќЈ2й+‡Џœ˜feTД/ІFQ<ОљњkАрщglк­д“œ‚"I.Ј0]k”qЂї„Wз›AќмК+hџ™їUЅЩu.žдkeU9aF‚GЮсЉYфœ‹1–‘И'ž‰ю<™-Ў­5­MЫљй2†r<–Ф‰mѓBrЬIŒоТДЭ€ўЫС!ЖM'МЦУЈLdуScD]Чdћиˆ$KеБДTŒдyз F­~ЭЉЊШGœШЩ§тT_…rŸxЛБЉ ха5ф‘U мОgйІ(Yи’ ’ЊџiаЕИiПD›П|ТŸ~СИkŸ;Іэžрђ`žIЉ4ъ€ыš›Њ%2жС›Dѓ:cz•šЉ=іZ9$ѓВНШˆ Y Жѓыћ€ЕX’їL{ Ўа wœR o LХ(;jw§ьš7ˆ^oЁW\< [~ZƒЭыWуСйw#!>ЮШ;JХОо;J є=YE‡BИuќ8ќДт”ќКO=њ0Z$%Bэ-˜Ž=цh|іўлhз6OзћŽ’l/б[UЮЮвНSУђO?DџО}4=‰ёq(мИ)­[Щ{Ц фчх CЛ||њхRў„NЧтН—ŸCщЦЕиYєОћt1† dЕ.ЃvЧгKПƒvmѓтœіn+РЭзХяЋW zѓЏИqьеиИќтQ(јi ЖЎ_gЯD|\œ–SL8Œ[oО?}џ Šн€'}Э›5г ц НбјNЧ/П‹vљmэ9й+ ЛŽНАое'‡)“&сзuЋQQИO?ё8[Ш§ШŸ{іY,xь1н~>О/М№МмžсаzLИхfTU–ЃВlцЯ{ ёё:њк,) O=Б5eЈЉи†'Œи/g|ЈЗNžˆm›№їЮjLОх&a7< лЫpPк‡ПЪ ёgy!ў,/‚кQЁ’y1({ кwLLм}Š^mПЎХcЏB]uБо>0ТсчХwK>Рі‚пБeнJ\1zЄмжHHLРcsяEё/kPДq цЭƒФГCO\\НwЪ~]ƒЊ?жaт cHл[dޘp# з|‡][Ц‹ џƒfII Цr@ОШПvЇц9щкFžs7?…fЌa 2ЪJНHJу у)eDкќ#…щ?Ржё'A€„žЛЯЙ›NвЋъM\;уч рЊоŸ ф=ЙGКn‡6эAхS[aA fпё\+ŸсgОЉЉŽn.6ТOЅя~ќ# Д Эиущ]ляt(UPоFњ?+ьeЩ`ёkqЫŒцPᘸЏ †ЕЮЙzdTм­Н \‰3юІUOќкЊкœЏžƒŽУI‘„ћёEРAРфсаЇ`tжг‘ž–†ЛѕТIнz#;+ 3gLГ’]pоЙzўH•žƒ/—~ƒЇЬгяœvкdgсФЎЇтФnЇтє~}­wYBKАј–фžFhZЁFŽAч Cjv[|ќщ<>џ?№Bbї‘iS&Ѓ}ћvшqкtэ}њѕщ# …Щ„9y@эWMЖ!LJЯCbz )=Iщy”$eДEГŒЖ„49‰dІOnц7цJє=Е†ŽМЧŸк ˜1eвatЭџ=aыsJ”Р*.6y9й˜~ыD|Зђ07ŒЙ}zіРАQ—ЁKягdљ-5юнГ;zŒ>ƒ† ;+“nК ЮўЊ`2џ6˜>yVЌќQ;ЌЁg ФХW]ƒі'tСВяVрсћцXRшеГ;њ <§ Fvf&мxƒэЈЄEwЭ<§м‹р=ъЗMМЉ)Щ8эьЁ8эьЁШЪHЧэo†jъ0Аџiш;h0њŒЬє4LОiœ%Ъж9эœk/<ЎŠН~Ь•шнГ†К]z‰њ™~ы$WТшй­+цЯНcoМ…E%КŠRђк#9O,$ž’л)ЙЂ,%п—_WŒОH_<Ѓ?жmи€;vZ'!ŒПv,žz^№ЏЦїОњЬxуНаЉg_dv< Sяžƒ‹‡ŸБRѕпы”ЎxќЁpх уQXTlwo8НO/ НшRtъйNя Ўw>иџ4є8НAfz:&7 А_ЕдŸб—ЁГдŸщЗNtœpjїS№иCръЧЃЈИD;OI X23БgмЕcбЗїЉ2b4:uы…††Fм9m*8РsТэгбџєгqЮЙчсМaчЃџщЇcТ­ЗъI<аЏ__tэж нN9Йmr0ѕі)r20kцHOOУ‰'wУI]Л ћuчF4r‡3œч\€МуЛсЌ§ѕ>ї1)9ˆKЫ$Єч!!=‰щЙˆфPkЭBЫMЭмŸ|г h——‡gE—гЁяЉ=TpуЦ^‰i“ЦужЛf#чјn:ъrєшvВtLwN™„ддœrЦ`є0Y˜~ы-Zіг'ŽGvfN9c0КѕŒгz*Y з]г{ŸŠ\ŒќЎ}ааа€йг&чЄ›ƒ\ШYгоЩrоAu~ЫХ­џА"Žœ3К Ѓ=`zИ‹ЪЯ8o9љˆsюd­=Ё,мu~Аkƒrњ‘ІвD`sЌ і мNeдЩбAr§RауhОУ'Z"MЯMЛЕЪђЯАж˜Vў˜ЃeъъpШ#˜N*.ѓЁця˜ЮЂѕzЮџ%дW)Ÿч‡€ф930Z AНR.}т§ EљgtЛђВd эWаŒkвщpЦwТЎп+&ПиЩєYёц_0pШ0l-(нЁ=–|ј.кs‚\в•””ˆкВ"$•€Ѓhг/4д~гЦu` @рu{ѕ=ЊМ яFо1ЧЁЂЂ` II‰Ј(к‚VmЦ№лКе6ъl-*РаЎm~YЕIЉйDЛA„МйўЊb$eфiVtWЏ|яЯђBДШЪзРH€м)%;j\*cэВ/qсcQTZ  Йuk,ћф}tъоЧзlЈёп1чvи|OY!Q_Whж, я,ўЇNG]]=~ќц ŒКъ”””‚1†фV­№хGясФžдя(-@з~G~^.оzщytы{Ж—ˆќыeўIIxїƒ1iъ дееkъ”^&&&`гњ5Ш>І8vn+DЗО§QTR†ЖyЙxѓЅчб­_‹Ыж­ZсЋЃgџЈ“eРКЫpсЅWЂЈЄœэкцсЭ—ŸЧЩНNєo+Ф)§ЮаІmn.оZєNюгпзфv” Е•’оПљЃЎ‹тQ?­[ :Nъб`РŽвB\~эѕx`жL 8ч|lпБ“дНЉ э%[‘’зодН4dII‰јљ‡ш~њьиБ‹ž} ‹?њя}ј‘UЯ­Z…Ѕ/Ц)Ї+ў…гќyХ7x{ё‡XК| ‹KА}ЧND"ZKі–ттБзуЁ{fЂпaиЙs(B7OьuJЫЪmнчРоВtщ{ ‹KРC~^о]єКєщ`ѕзBŠKK§]Jєggi.ЛцџGwщЎ^BЗ.'сE/F\rжЎ] 1ў2‚ПvяЦ‰;Ѓ`k88ђѓѓБјНїpьqЧƒsŽ-›7сЌСCБuk8€кcЩЧЂm‡Žдz!DъіЁн ]QR^)wИ“ЎЪp КёTRв4дЊЎў_W~ƒѓ.Й [ ‹Р9п6ќА сд\0lYѓ-.Йn<жўє3‚Ž­kW`ШE—ЃАЄр@‡ќ<|№к‹ши]ШџUпbшш+PX,кGћќ<ќВb)bRsСќі§зzЩU(*й&ыЏVё!r:Ÿ уM„IЩ\йˆBuюЁОЖЭ ш.SцЧJA‡яЙŒz нц"n>–ЉiєЙ:йяшvю8MuЗКзœд=…>№Ё‡Kи@ЫQ!сЖŸљјуњ5§ƒEУЌS]ЊEЙЇњxU‰Ndвnџў&N‰ЯUЙ>љК ,J:)3[ѓШAъNP Р{rХ&рЮЕџ0ќћљuк”a“Ънd6Ѕ–нхж}ЖUМцЇяО‚Ле§wР‰ЦІ ]вгRБ­ЌLп)нV†єДT}нЅѓ‰˜{я=8ЙЫI8ђˆ#ьь8фћхђCЉ:Ї%ЫšѕBž2EЧU5Е№bТъBbB‚ЯФ22вQVQ%"ЪЋЊхЬ*OЎЅmЊР“<Ћ‰б8Ы,hˆo чШЪЬР†_[ї"2ђф6,хИMžЅVZy?%ЏƒІ­c‡XєьSшнЃ;Оњf9232АvљR_љБ•••`rаUEe%ввRAkzлЃuc<КC{,zц)œкЃ;–~ГЧз 3ЇоŽ?-[К%тЈЈЌвЙ\хяHэъЫ/ХЋoОњњz#sЄІЄ МВRЇ.ЋЈDjJŠ•П~.щOMI ТфЄ4У{fFж~ыЏЁ2"ѕѕcЎЦО}тєОНёі{X–нoЗсхўќыo|Мф3ŒqНў&ztы†ыЦOiИYpŒУПBЃ#Џƒ›ЎЛоsкЕЭУпяЧ”;яЦт?б%о8і*ьћѓOœyZМѕоb™ЗЭoyE…Јsjh˜’_•ўRђUщВ23Аю[Пўа™~зНJЫчЭї‡ItдŒСдЂчY™иј§2_ў^(ЄфšŸ~FёЖmрœcэ†ŸХфЮЁцЭWTзР‹‰чUUШШШ@(чЄЇЅЁВЂЁ˜мR^Ж щiiЂ­{vЃДЂ Lž ђ§ёe'LGW@Fё SfЄЇЁЄЌ\GЌЖ•Wš<CvV&~лДEчЪIХ1Ц–š‚m••PЙ’ђJЄЅІhНKKMAYEЅЎO•?d}ЖЩЪРжUЫ}ђЩƒlОxWЭxvWQАж„š<ўљŠЎ4/“œ3 %ЕKзіА)ŒHЛаљ?”Ў™ 9жИgе:Рˆxl+ма…тŽŽЮГ цDrdьЅПЌ(ВхКъЩ-wMZњЖУ‡Ž›n`ФqSa№ [65яЗ›+"]b­ДмV#&'рщтфxб€с TD> щ‚|ЩnО5žѕWœ+‚Йi9џтЧŸ'!з‚ЖЊjHYЦFq§\ЩC-oФ}šiѓKяEkKі˜Iц;ёWздЂMvЖОн&; е5Е:щ[ЏО„7о‘JпGЅчз*ЋЊб&;KЃŸ6йYђг{?*євKp„d7–ФО!Гp0$hTƒх+ЋЊ‘››ЋѓЫЩЮ–љЋ­тMї“э^[k3EЎйщ~хѓл3sUW_јј8_УиVVŽму:уˆь|бІŽhгGхЖЗѓTtШkzNЫd$Нњ Ј{1>eѓ–­˜xћtЬ™y<ЯCYy9кŸx2Rrлщ_Zлѕйщ" +#5ЕЕвБСwˆќg`Ю]3рy Я=ўоћш#œмЛ’sкЁн ]4Е œgefhZГIўЊnтqёШxўхW|хmпОYњ:+#ЕлЗ[iшѓЬŒ TWзpьШŠžВђrфŸа­rкЁuN;ДЮЩGj^{0Ђ7ЃЏƒЫЎЙгo„ЃлЗ#љ1]zXк#ШуЅзоРeЃ.ТyCуЫЏПA]]Нът%џЯОє РЙюКaЖтц)SбwаPdw<Sgоƒ‡чЬВxyљеИdЬŘ1EаЇјГ‚GœKž˜*Єў3гuйЈЊЎ2YлЪЪ‘w|йІќхЃUn{™%зх_|Е,ПYdлпњж жЖ••ЃMЇЮh‘еVџt„_І5т4oж -š7ЧEУ‡,dЦ_Шj“#зВŒA›м7‘V'в­mNіК>šДюŸИЯЬ$ Ю}УЂeюУbм№*>ф ќŠXMЙ†šhр‹цб@вќ“[Om0XŠЃAВ КЇ} ?`ƒь3хIз­’‘;p~ўдLwЇ-~сЋЛhђёIB8t\озљFeЮ”˜DCeSш p€s{ГЗ ™6#z"ˆp&џкХбЕ%it2ксŒ™tЌDWяОџМo6вRS‘––ЇюŸwпџ@3˜˜€кэлБrsкрёљXяПўжлx№ОйHMMљџXћю8-ŠeэЇп…%йМЫЛ 3Ш`Х€тQ HPT JЮQ*ˆ(AAЂ YrŽ6g`P9Tиўў˜U=ѓ‚їоoјНьLOwuUuЅг„јxŒ>ФC$"Єж=†Ёж>щ ŒCeЪњДPГі‘“RD`жм0jаHLHDTT4іэЅ˜@|“pН–ЫЄЧСf нѓ‘Wk0‡уЙЇ[#BnХьщ3gcв˜‘HЉ^ х#ЫЂnк˜=uŠzo]‡ўxƒ)›ЉгЎе!ЈЉјЇ›6oХЉSЇёpѓёѕЬйјpдpTЏV ‘‘‘ИГNmЬјт3fГћїэ˜˜hDGUС€>НёУТХ†‡Ж{mмтСЈйƒЈPЁ"JJNсмљѓЈZѓі IDAT5Ѓ† 4єыk@поˆ‰ŽFLtєэљ Н)^чйЇ[cхъЕ8uњ4у3Аxйr шг 1ббˆŽТРОНБdщOЌ‚ю‚…Ж­д г вSќzцl|4zRЊ%Ѓ\d$юЊSп|9…х?џчyффцсЭw{сгЧy#уЊ§М: ‹ŽуС{яADD„1LКMvэй‹sчЯуНwпЦЂЅЫ”сБ<ћєSXЙz-JN†;§1ялщxрžІЈXЉ"ЪEFЂRХ 8}ц шuюќydчцЁы;=1хЃё~ЊУdчyIхxPŸоˆŽFLTѕэяЕ~CbњЬй˜8fRЊWCЙШHм]ЇfMТZјмЙѓШЪЭХыяєФ”‰уQЁ|yцис<™рD|5s6>;Љ5ЊЃ\ЙrИћŽ:јюЋ/|ЦDGcфРїёjЗшќvŒд111Іƒ C @l\bут0dр@ЬПР|tЗpё :q ‰ˆOLФˆ#А`б"D”-‹Ељ8ВaКхзЉѓ№((,B‹юCD™6jЉ(СљЂ,œ/Ъєœ\Љ4kўОљўŒє>у…a§z™2N™ŠЯЧDН;ы B…ђЈ•Z“G1ћaЩ2 џр=ФFG!6:#?шƒ~\lЮ™ПУо1бQˆ‹‰С№Мѕькё|>c&Оœ0 )5ЊЃ\ЙHдПГ6Эј‚Щ єЉЮш6Ви’…љRТліЉ”81‹л/uК†Ёѓ“ŸЄ%]gOс’ї1#/о†}УzбТџŽЎЫs№2јаY1ƒ.оZJih№@лhХ…‚)ѓе- M’гЦ„џ‡ю:Gзлh˜ к| V/гEИЌ№wў‹жG?8bДs„лvŒgN%|O_^B…АёOгб#m%•е"Кm?нŽ†F:S §pT>н™Н %.–J‹вћщuМ&hyаіэrт~ЭMПЈ–ч~ƒ<я§ џрс(.)СО›АoЧ&œ8YŒCF˜H­]Їз0|№ќQœU?-ЦТХ?2иCFŒF^Aіmп„};6cУЦMМQШˆˆќѕ{ ў<у4?uчKŠ B‰3b)BТœЦaЗ!ё=ёcMЯРІ•KАcэrЌћe3.\МШFк№>'Ы.>ѕ,р­I<­іZ<“›ŽгЙщц=НщљСМњђK(Юs6F @ои` м7Š[ЖяР–UЫБqХRф`ќфOЬЛЯІMЧІ-л0{ъdмQC<љх—‡ы†M[№еЗГ1zШ@6’D{Шqž>›і56*§Ш=Дc‡ФЗпЭ3К1~ј`ܘ3ЛіюУЮ=ћ0ѓћy?bьŒЦж;БmУlYЗ…EЧ1zТDoLD 5%ЇOcћІMиОiŠKNaишБeНS}T0о)TZft ЉјдwШ|4bўШ9†ѓ…™,Dр§rЧ7тУq$-;~^‚}ы—cЭ/›pстEг>“>џ Ѓ'~Ї DСС]X1o&vьйoЪ5Х%ЇБkЭ2ьZГ 'ŠK0xєSЧА “WPˆЋ—bзкeXПyЋЦ 0щ‹ЏА~ѓV,ўцKœNл‰УaњœЙnˆрaЃ(э^Кv–s9‘ќМрK;&ъѕ]ЧO#% HњЈ,Ёћ@GФ tˆСNR;~љпЖ’lXBЩЁЇ§ис›FлУП™7m)№р№AOcZ:є:TaСA—N"џШЪŒтб@I\‚;Єѓeс“РŒgfљ$Эkбс0ТжыЯ"}œ;’пЦ Тїоуƒdyнњ‚zах‰дЗЎН§YNИ Н)ЅБ…D–к].ђjќm`hž= w‘pю“EВ?МЮЫ)“ЭfЇbЩWЯъoШœ<уmСc7'гpаЇIж<ъЇ‚Ј‰NˆУЪљпс–њMa=.gах>{їw—ШФzz СŸ`йX§.lЗНЄњ œДolл˜:„_ш/C€ЦћdvЂЊе4•љglцŠ/Hћ˜тE<™ŽшjЉОњѕ\ЫЭ№єЃн+Џ^PXЎ1ё/Т†)Ч ц™Ъ–)ƒь#‘zƒƒЁх­ № РeЫ‡9.}2 џJлh§иЃxЂе#xЁуЋаNiб O?љИ ъ2КЦcсмSMЇх-h‚ЋаФЙ3Ї‡_ДGЯлJ?бg:-Ѓ=5ЗИіЋ`ю85ОšNЭЇпѓ2peb шщ2FЉЉƒnŒi—"x6Ч~lуkWEЗЕ‚Д‡MвS–ЦшKx6Э œuл$ФХa§’ЙЈygcЪEЂѓЌ:‹•G§ŸЃЌМNк€k{ ^^Э?"ђš=ЅЈєЂ &lлQDЕб„^-ŸвДaи‹фЙi4_№Ѓпоš—Ъ& ЦГРЕ`ncСђRˆцMиРФ>IПЯrŒЗ‡щр л^юу Kчжкфл\ћХюœv2`Яи084сС З=FF4 щ–fШ3 рbя#нѕ…TcРщђ‹Bѓ‹ Э€и œWК>bЙщдРQPјV3ˆИ4hН2AОR*сЏ*­џ №ѕ)BПn\…џэ8—9›;к“F_Ћ@QO]GD ЂLяќ]Е2ЂŒ7 y?{ЦЕ=ѓZŸNЃсY%sЮr6ЯS'MРѕ5SpЭUWЂoїЗАdљJ•Чы•i%ЕS6AДxF3l—В†hэ‘И#žж<Њdр%‰Љ’ЎTфтHq§'—Дг3nіLЂнг G€oр!O)бх•N˜ќйчfфЊT{e§Чs78 ЎOOЃ™…цCЭ›сXZК}Џ^hgЉѓS.-"|ДЩL$iF„cqхЪEтЅЖЯbЩВхцЅ~зѕеNјјГ/ <40#ТG‰lћл6ѓOНт K’PiНrыб_авІ ћІ9Ъ0ŠСGа|k=’BRД.ы€‡FVŠ›оі<Bйсй0 Rч{ПPD„Y!У‹№F)эКjM—7ZЄзr\Б ШЛŸёё\_3W_y%њїь†…ЫV˜ЃSЃ~ЇIжрвKиЖ ќАBИ%HЫ№X†Œ6i<ќмшєр+ mM яА‘bŠ”Ъ€w.WќАL­ФfzXVяmРхVшMk€Р–ŸХБ:жHїЦе›fЖ=’NЛR9ДVвё№oмcх‰ЕЅДМд… в` j•‹Ш›Щз†œ%ЎєаЪ("№ЦqШњ€k"8Jo$ˆЁЃ>•к4š.HЂvк]ы ВОжс™[MэVжеšбRoЊZЏ,•d[Jі—–“RŸ1ŽџгEОцe3њчHmИ‹і6”ч щ# ѕШЂфcЏЁєкC0jVљ-'$o AЯcV­[%п}‹Вe#Б|еj ;СŒ@hyaУЪюЅ{'ЩzАх‡‘žнЩжщК§uаъѕНIЬЪРуMm.ƒvАќб?вб џТ-@JŠЁЧX{l˜Ÿз‚е Дxќ)9KЌk‡У;4сЯЇ UIn АЈ]ощ7cЅ`mЁ?ф‘в‘ДНВŽХžьWlмМEmФZ ?ёI!=~ЉАœr˜Хјж^бяCI18Їњ8ЄKEUrjEРд‚жE!€kзcхМ™ˆŒ,‹WЌЦ€‘упЅ0шq^ƒЄ9І‡ЎЫРGˆ•зЁцFY&с0J•х2Є ‰їзšJ`}.іx€ж[сІщ"‚Ї RПœб\˜3•%{х+Ю<[Нws{Ў_PХ#DSxЬMHkЧ‚‚~#~ u7Špѕ•йNcKЙўеaГpB}ltкQК дг9sИtЦрqРhЭ%АЊЈэАгKжq]д ZˆvL„6аНVuќсЗАpъаєiй‘Ќ}Д8ЛBР’єl, [ђ— [—v&кi"`[л|7!ц˜\<§!ˆе-ў&аШ0кg›q*ўђдŒHњЌЫ8†о‡„Є@у,‰r‘ќкюSъЄƒ+Эkџ *йNAГ€DTŸДsІјњПЇ№Љ#3=3#Ќ„0ц№ў‰YВ5kt4„kЊІpј˜ЭИfƒ•йgˆ/Y?Ed+:9е!ƒIirЧiЇьњз51Зхї"AžЩМ`э*БNШЂ’­Œ8G.р‹сЋІ#њНњpХчЈ•СіП:ЙfXcЧzi‚žŽPhь1ШЎтCэrЦy6Jрлячу›яч#\ыљRˆsiЃ6CќЈу іЙЎ{гY}’ )§EЕ'жбЯш8e|‹ •‹ЗЖ ‚—ЗЮ‚=ы€’wщќєRщІшЖЃN•О’ 2RCAЭьП$ќЭDд›WaєZ,Ь~1VйЎЂыe­\‘<ЉљkŠŽI› AŸApЗhѓ|~VЋ`FэKŠcЅЯя|љХєHсТ"$‚ђС8@ЛSЏ„Jš….м$#›&;kоqЪ SиQbг ]лЉoЄСY7€.[JрњЉТ<ўУЏЙ.3>LLVsEHxSйЁЪ”ѕІГCeдv>оOˆH‚Tгзц(УPџ-Ъ!ѕ№ѕ”fjIOŸ ЅЖ!ЛођЗМt’Ÿ(aЋаŒ•А`(CЋЃtFљk` ўlŽOtђ… ПВ–ЂpЎ.hбt‡фЉд—XMшw:Yв-€'ВвŽœ,ЅФЩь4аie|љ -ыI"ф’Lїix6мЈМWpшQuЇs3XYЎm%}ЯGi-М“йщf Г Х•ађW_'sвНі–ЖVУOS—­œMV“?”bнŽіЃ*‹DFЉ\IЗ5ёqќ$зUџˆ­#МжљQ —цВеїBНе>ЫG 3ЃоГ>TXЯжXлЫ}žiC C‚w Єг6сш КџбІхђПЇxAЗЂъx1aЌ{{AzE„:7ЄЗы3wUW\/|7ŸQO=Є‡n^“ŠМд’œtђdЋвТn{СЎp|юОЃ–§№Нх–вњUЙ;aЊc=oJИtђёђ~렘—фП‚ЭКП—юВNЯŒ СЎЩеЊтІ@xBіН§ё­‚G ѕ lihЄ@qPћ2.SНW` ш„в[˜§ЭITда™сМѓХtFyМŠt7Ш0Ѕsf”вŽ€кŸ‡ПВ?„ОПŠ2ёЗњббbŸЭеЋ&!џРvќ]”iёР+/>‡У›зт\ў1оВэл>cHŒКі|2z(ВvmТs gї&|6fЂЋ\ Р;Юsмрї‘Йk#ЮхХсЭk№Zћ8ЙšЇднє_Т”ГЙ>њ~К{Vм•—ЅћЮEдЭOыa^™Peз–шЦАm{ќТDЁ4ѕ“$f 5ОTw\-!v NYЗZRŠЮй‘oэ3ЙЎjіа Ьˆ pѓZB,Ежvъ8Ќ:MlиcсRјЅф™біr-%<лfDЙ|–иб;kY9vв№е“ њбRxKM0 l@GЏЄ4Ѓz?H§!ЭE \P?К/$—W= Љё…7kЋДTЗЃ_ˆвiю )oїВ‘"уЌu'F(U0 !"ф"B­]Цn0ЎПЬжs9‚nщ`pM0ЉЇ‚l`<эФ‚>Л:ЦЩЖŽьšфT\S5еoЉƒч:МŠЈ*зbњЇ“lyъи›Ц…з­+*9QЩЉЈykМаёU\{эŘіЩ$šс ЯkЇяz/jP‰†t}ѕLњьѓ@ЃЃ‹hcPЪф'h Ч1"рc}ўщfk8|žЙu'^н LЯi˜Zy%!л€ЃS:Р_СЄЯМM­ќq*. €Kyf ŠHB7џRТHЃІ‹84Ю#їВћ†R(мќt„KЗ‡t /ЗVщМ{Џ;x,Mыhо*m/њŽJ„Y@Щ‚2с ЪєZPСкŠJ.зOлQЄUmˆйу\ г$ЪБHыbљ”ЗcП`щЊ‚rё5Ј@™ўTZй2јіг0zтЇ іS>ŒїКuХ+яєBь Еёjїошз§-<іPsР7ŸNФŸџ…FДЦеЉ7ЃaЫжјыЏП0ѓГ‰€qƒ?@фЊx№ЉЖИІц-h§ђЋxьЁцxўщ' ЁМљЕа'ŒИ3P<йЕ“>} ŠцЅяЬf’*#u‚AA)ƒуЪЖ}OuйRу”ŽIцЧЅ<W№RђфъѕtЌNђ‚v>™ЇN žМi]ў ЯБу†~З9НЌщ(ЋЩZ>ЯчРI!š0Сё ,3[ˆƒn—ЗVB\ЏCh‘ф=ХŸЉг§#~въrнЕP6$?Г™И†Щž4 Е$…/УВћuCнЈ№џє Пf’ЦPШl*~х•Wр“Ц"џи!ф=„‰cGЁbЅJ№6їЖђiѓфиЗyNчУВЙГP=YiT,_у‡DіОэШйПoОкСCDѕ2eауЭЎиПi-rюСЇЦ rЅŠ†вrхЪaєрў8Ж{вїnGзWМђстeСок'!€ПўњGгвбwаPмuG@eЪDрн7К`їЦЕШ<ИƒЪ+x'ГгбЙC{йНПюм†сћЃ\dЄЁжічŸтШБ4є4wоQЧHлS?†эыWЃ эW,˜§ ’“ žШNЧЋ^Цсн;phчV ј"#ЫЂŸRЃ:ЎЋ™ŠŸVќlв*VЈ€БУу№Ў­8Вk+Ц „ х+0Х}сЙgqxЯоН#@љђх˜’•фЄЋŸЗf’і2#""а§.иГiВэХЇЦЂсНўu§uјiў\дЌQУєœ4l8•“S9^=Šы–-Ц}M›хЫ•CњўˆЎRХ?ЅzuдЊ™ŠЅ+V*nЙљ&|?cвіэФёЬ#XЗlkйBMХ;јнp=–/˜‹д”€Д†єtnошм ћЗnDобCx­SЃЌ№Rлg‘Бo'вїэРш!ƒYЎœQx?]Бkу:dиЧEЅŠ•xХЪjоp§uXІъŒУž#"BшўЦыиЕq-вьСфёcPЉR% O‡бУь‰)cF Хфёу ў'rвбЙЃ–Џm6р}DF–5jХŠ0vјќКk~нЕ Ѓ‡F… HєœЬJУыЏtФžЭ}ј^ыиоu2+ Хй^ћ–dЇ{ПœєРЉXрQЪ•-‹a§ћс№Ю­8Вk:Зo‡S9iFg€ЇZЕФкчЃр№>мВ/>ћД +VЈ€qУ†ршЎm8КkЦ„ хЫN–+‰QƒњушЎ­HпГ]:iмНe"Ърн7Л`я&зў„П$hg—43 |I`ЌgK=rщў€!яѕ@ЩЉг˜4eЊс-ЄDчvЯуНAУБaѓVœ={ы7oEпЁЃ№zћ!дНЃ6њ‡МќBќѕзпШ-(Фћ#ЦЂnл!<жтtюбЧ2ВpюмŸ8pј^~Ѓ;:Нј\ъ|‘Ÿx*ЛПBўVљ[A``(OчЁuЋ‡qdл:œ+HУŽ5KqћЭ7šїшћю[ШиЛЇГХєO& r%Ѕ?RЂі-7aйw_Ѓји>ќY˜ŽЋ~DыG"ž\њHур:QIž‰|кQ6ЛiЉю<€ŽNљGЌ§>9œg"ј\.50›№Iћ—†<Ш"ї,н{4а5Т: ђGхPTЛЕfљ†ы( NњС@$Н0ЗЩh]~€є#DŠЅр#Љ?BЙс‹…!Э+;шaгh oCI:jhJмРб ,•МIm˜ Иkї/ъбHIзCъС)D:Я†щ~AћЇпaŽSд‹ЩCъУš2eдЏl>шл qqqИћоQїўцЈš”ˆО=Л*„сБ–-ањ…іHќзmXНў|4rЈ9їКїлo jbъ?и š=‚& ъb„Кt|MжУ#џ~З6h‚‹. пЛя,{Ое‰ ёhдьa4jі0зЏЧ‰'?Њ(t\[Є”‹ŒDфЊшг§mlиД!ЏuxдУcЯДEMpсТпшгуУohXП.š4M[ДDRbКuy LеUЖlYTONЦ{нпЦ/›6›єGjŽЗы€д›kcэ†3l0kж†ѕыЁqГ‡ ќЗКМЦэВ"ыѕW:ргЉгpБєЂ)лЛ{7ФЦФ qГ–hмќ$%$ з;oA€яЛM›=Œ&ЭFB|<ощк…СО6Й&Ў%_оъ%Є”шмсe4nXЖyЗдkŒ _@Пžн| ‰zwп…G@ћзп@ZfІg $pmr*ЎMNTINA•фTTЉšb№џълйxщЙgŒДxр>ьмНХ%%>wyЅ#>§r.––e§њѓO0gо|мZЏ1’oИНњЦГO=IЮnѕtІонwaтh…_F&3ЖpOуFhѕL[мZЏИЗЉ 4 љ§їЂо}-Pїў‡˜ov5КйЙУЫhд цyдiи.\@ŸяјќAНЛюФ„QУб‘дOG6­‘жУƒпИA}<ўL[дiиФƒџю;†5=ћѕGгЦ ёp‹fxфЁhвЈ!zєћ€Ъ†ѕыЁIГ‡аДљУЈš”ˆЗКМfхчnˆ‰Fгц-qo‹–}ноДzЅpЙЇQC<љьѓЈг  юoкФј‡шъ5]н;<ЊZ*ЂЊеDtЕšV–(Д“ж=НеЅ3RkдРН-[ЁQГ‡аЈ~]/Ћ№ИбЙ§KшёfWє87мYOН№2ъоy‡ћ^їnˆ‹Fуц-бЄХ#HLˆGяwо2Фї<)И­ IDATxЋ+’убЈyK4jоMд#ќ^ыадЧЃЯ<л6ѕьOwX@hаnZ@@ bwTm ]žшћцї5Хг?ŠWЛНKќЎGРэЗм„ ъT}­лИЗн|#€…KBџн”ВeЫ )!ztУ?ўфб)еb~HHaъ-џК†IztHhg*­я Ž тЊxˆ+уЁ*уJнџћЩЧаьЩg•r3-[Щc†рн^ыˆ{7Р}>”[ытТ… мї]@m<џУ7_`ЦœyЈ~k]\•|КѕщŸiMЂ@чG-Ї‰Fм@HROЮоIigєШ§Іш’,!№uаA-t\‚aЇIuFЬш%lРыЕ4§4ЯТbєЋ{=кЧFС§*Љ(№ ŸьшНдВD›Ц­]’@]ъgЏцNёк€,€oЌјч‰Rv”$Џ+–е&ˆ3ћк)=0Ѕ—LEKЩ2д4˜@бrюїˆ^$ПвRP–Jƒ‡СЪmPӘRјˆђPо]іœn^P'Я– ьU1|Њ9dG)эм‚Gл<‡ДЬ,зеLХ‚™_уЦКіКиЛRХŠШкПqЕnьлДOДm‡ДЌ,@ЕRSАsнJ\™” !€kWтщ—:"3;Uk—,РЭѕ<ј{7ЎХmл!#3p]ЭTl[Лз&ЇТжJtь{qv.\МˆѓчЮ*WЎ„Й Ё[Яї№пѓчБmЭJќЛ]dfщњЃ№ѓ pЛЊП8'u›оŒЌ,xЃƒГІOEн&ї№F]јѓ4ќsч| PБbEнГIзн@Ђ$7w5Й™YY€д50{њTмнє>M‰*зVСЯ?.@н{ФЙѓчŒьйМO>ї"в3=ўжLMСмгp[}oДяL~&юj|/2ГВ „@j˜3cюl|ŸQNя’8•“nЖђ‘№‚БmkWЁЭKэ‘ž™)=ўЌ[Ж7неBПхgсљЏbфИПхc8Q\ЂлћOwмNхd Jr*˜Ё•@ЅJ•ppћFдit?N–cід)XАјGЬ[Д!Ѓ QUЊ`ѕ pї=тмЙsІйїlZ‡ЙѓaѕКѕHЫЬBб‰br\№ŸТ,<зўŒ2ї>м Х%%мАK‰3yИ­~Sdчц0i’RтL~noxв2В дLЉ3ЇуіMРіuЋ<љЩЮ]Ѕ V§ИЗжk o­ш‹:cј ўx ху8Q\ЌŒƒ„zHМӘ{m_ћ3žiзYйnбQQXЙd>nЏпиаpgэл1у‹ЯmлwТЎ={ ”тœ мнф>ddeHЉQ sІOУнMМіпЕižjћ"22Г!рщчьЏЇтЎFїŽgЇуЎЦї ;'ЄUЉxтdvšDš^ЯЙHщSаыWс™—:"]иЉ5ЊaћКUЈ’ьЪДѓ—5шиЕvяйgјЃцђ ьнДOЖm‡ŒЬ,@ЕRR№нз_ті†ў{6ЊїY^ћеJIСіЕ+qЕњиlћšxІ]Gddч№ьЯš%ѓqK=;Z.UeЎiUMH^hšнn>oѕщШВeё[ц!THЊ…ЋЎМЫцЬРЗпjefї^<№дѓј§ьY|4–{ђл'юsЌoдСИ—Ўo„Џ<щ3JАПўДы!Ѕ=‡ЮШбнr.yNH”)ЃЮЅеЇж”ёNЉ EDxЯ„"‹ќ‚"шЃГѓ НхF[oС’9п џз=8[‰уiQЁByƒHll ђ  {щyљљŠ^єœ”˜€=ПЌЦoЙщј-7iЛЗ!!>Юƒќ‚шiјм<]^5„р?§Žк”ј”ыQуІлP§І[бшИЃіmhXП %АcУ”фf $7‡woCBœ­ђ ў…ˆeBŸrjмx+Њпx =аujj„хж›oТГf §Рn”фf їШTЈPоіBфх˜ЖЮЫ/@\\ЌІN5Л@ћ—žЧЗsОЧЙѓчYЏ(6&yљ€‰ЫЩЫCll щёЙОђ У„ЪU*jЌ’Аћ—Еј=? d!cп$ЦЧЉ›—яЕNэёћяро&aŒD€АЛ+л$€?Юў‹–.ЧsmZуъ+ЏD§КwaщђD1МR^zпЬљо $ ь6/ЖGlL4F ъ=›ж!}я6<йъ…Ÿ—яѕN№ћрОІє;оqЫЩЫsЕf27ЏРрž“—ИиЃtF~д‡^GфЇsЭŸFglЯ—ё†А.11;ќтœtќКk+тт@зэиЕйЙЙШЪЩСЮ={л{Ю+(0†ŽЪ—€'?љљ…ЦАчхч#6&^GC9ЙyDHЄ§1„uаeЫИ.9>.ЙљљІЅѓђ g€ЄФD>rњX!„];)ў`ЎТ_pcо+єrѓЩWЩЪўькАgrвp&' Чщхџb^Ѕ 09БŸхYћc—ы)№i“'рѓщп`у–mФ1є№ћйГИіъЋ!МеЇ?яЃ›пўјРдЧ`ћЎ=HНГ*VН5юhˆэ{ісыIcяі†єЌЌќўќ–Оs>Ÿ„WЎFЩЉгЇU,н,еŸ% Т&7ФОщєџž;Š*˜ьЩI‰HлГЩL•Oл‡Є„xѓўсЇžG\l >9щЛ7ЁшШnДyќQъemНl”RП“ўwAK–kУ]љ™ѕmpзђqvИхм_@1v/}їЪnBr@іг#^ІДG˜}yм<šuрт_x)њ,оdєŽоKN‹[?_BУ…R:эh=Ёз5Всшжт"Н.‘в g–ь 4в?z(Н-}8aъ–v;&;‚ЩыЄПsDe€нRKЅ›Hж^рў— &Ы”‰@™я1BR{Bъ3kEЧOœDRRЂ ““qќФIc,g|6 ѓ.Ц­ѕ›тЊЄTЛЙ6ЋАшјq$%&˜&Џš˜fё{NnЊнTW%Ѕšп5Щ5PйђЄЪгKУІ і§—ЧРУGЁ[Я>жПBШЩЭCЪЭЕqmе\[5UЊІ˜i;ZЇPнЪЄ„x?q‚i­эE 9z нzО‡Ё§пG(ТдO<ўдnаUЊІ хцл=lˆЃNLˆ7#‰ОХЛBљђxЎЭSјbњ І`Р‰'‘”`В'%$рФ‰“Ьn&&&1NHH@сёутЌ‰рЬЫЭЭCѕ›nЧ еQ)О:*ЦWGхФ&рO=пЯНм }{vЧѕЕќчpke"dх]Н*•SgЬDЛЖџЦЖФђŸW›]ЇBљђhЋшЇ—p,-oМл šЕDB­›бу§˜0|3ЊOЖ}џnз§zО‹ыjе„1œ$SЉšVГЦB˜‡ФФЃЋUPXtкPiљЉ’œŠkЋzzUЉV‹ёПЭ‹/ЃmћNшгГ;ЎЋ™ъw\АВр*xnnRnЉ­ІН_lZЌјSO<†Ъ•*сŠЪ•ёду­|ьOL№tFJ )!ЧOœ0еœ8y’щTBBNœ @Є4nP§zМГ™јOA&ўSр­[>_˜`яChв@M§K/TiкАі8„ИПic 5ЙљјћяП‘›_€~УЧрІ)ёпѓчаkаpЄмйх“ЎУЭ›ЁRЅŠXЕ~ЃŸ5ъ?о§ЙsчQО\yM€Э8є#' wd?+'з&пqeМ7e~U<"ЎI4яMCЧЎнQЛбƒИ2Боъѕ>&\ŸHКA%ЭOЋk”иƒC‡“§Rы(ƒ’йpыТЄйjщ™Ї€G~3'- hИуІМ~r/uЉ№љ`ђqБ №/uБ,J‰QѕЛсэ)-К‹‹Ёœ JУ€x2мi(иЧ™в‚ ў•Jѕ%vЉЗЧЋфћМ2”@ \ aG&ƒэŒа—ИL0ЉЯЩ`IѕQНXју2 yПbbbƒaєСТ—y@PЁb—”рмљѓЈ–\c‡bЮ]АƒћіFLTФЦDcPпоц№еЗГ0yьHЄTOFљr‘Ј{GmЬ™іЙ9wоТХдЗ7bЂЃƒA§xy:BIe&h‹G}mмМ%ЇOЃeГ1}цlL35ЊWCЙШHмuGЬœњ9(ЃћїщшЈhDW‰Тћ}zcўЂХl˜ж/ќВi+JNТУЭDХŠP\\‚sчЮЃjR"FёјCЗ6иї=DGG#ЊJ шћц-XЬ‚š?н+WЏUЃ ’ЩЮЂЅ?a`Поˆ‰ŽFltПџќИŒ)ю Оя!&:бQQаЇ7цЊг‚Є h0Bы9ŠЏО…I„?uяЈƒЙгП№ЪЉМчЯŸGvNКМнS&N@…ђхЦ№‚†fїн‹5.ЁЇzэЛїрмЙsшзГ;,Yj’"ѕй6OaХъ5(.9хН!|оЬЏёР}ї RЅŠˆŒŒDХ qъєo #FчЮCVv^ћ]|>щCTЌPž€џ/ ЭКœЁяїAlL4bЂЃ0єƒ>˜=oОснєogaт˜‘Ј^­Ъ•‹ФнwдЦЌЉS@5їмљsШЩЭEWХŸŠЪƒXqSх—–юЏО…‰Ѓ=ј‘‘‘ИЋNm|ѓхS>:Њ Пп]ЛїФяіТњ":Њ Їх+:* њіЦМ‹MK–ў„ўJПbдћХK"цYYёyF+Ж}•M1COfЇуdvК1сšЯп§АC?ш‹Фј8ФDEЁЏІ^ рг/ПТGЃGрЮ:ЕQЁ|9ЄжЈŽ1кЦH`ЩВхиЇbЃЃ}zcБ>]Ь[ИDйП§‘Оš9“ЧŒDjЩˆ,ыёwц—Ÿ‘Qяw&' grгM,EэŽїLЇЗ„ Ќ§›IѓЎЇР•‰5pE‚§UNЈ(ч§§dъзў~o4Њ{*WЊ„ЦѕюЦаОН№йДЏРЮ={1шНw‘œ˜€ВeЫ 91CпыmЛіц57нpЪ•+‡”ъЩшг­ о~ЕŒvЙіR№{BЛЖmHћњѓј˜;zШъѓђM™6_Nд”ъ(‰њwн‰EГЇ8+ЬТCо‡Ъ•*Ђ\ЙHTЊXЇNŸбžи8Ty:Ял8нРvœ­ѕожАИQ DСѓјпс™/YџЯпзЦФ ирAВк<[щЂэєо:њojЄ}’NџzlќјєFћ.x­@іб4Щ’]’q\2ЪћЎТ–vdнV іŠU2ašZ:ЗЈє‚oуЃЯй$нС@3Ъ $нЮšЎƒШЏœцїЕЬџњВСdHў(ЪХйЂ\ќЇ(g ГqЖ g В 3ЇNЦЖUЫАmе2—`јИЭжЏНноы‰ќ#ћБhі ,]О’б8цЃЩШ/,ФЦ•KБљчŸАq _LўйДЏБqЫVЬљъ dкƒбCbцїѓŒГ3q2 ‹№ЫŠЅиИr6mй€”‡TКh`р–љxЪшкЙ>Ÿ6›ЖnХьi_ ѓа^Œ2ГОŸЧpмОc~љy9ж­X†ТЂ"ŒŸ8™w(T“Ї|ЎЏvТыoїРяѕDЮ‘X0ћ[ќИ|…ХJйКc'ЖЌYЋ~BAaЦ~4Щ6˜се—_ТЧSОd#išжacЦЃфдilњy6­њ '‹Oaш˜ fБ/lкЖ›зЌР†•Ы_P€ “?ёKјqgAВ>›6Пlй†Й_OEСб§?|О™3з1он†M›1§лY=t}Ћ˜оиHŒ6ЧгxЇв‘.)ЉпЬТWTЦъѕП0] ‰:Зo‡ЩSО„P€O>ŸŠnЏwFцн8МsZ=мЯvьЬŒ †Еaу&Lџv&F€Џsњ"ЌІлЖcзњŸБ}ЭOШЫ/Рш'›SІ~…[ЖbжДЯ‘ypF ˆ™пЯ5њLс1ўhкKЩHE@pЉѕcждЯ‘q`FіфSgеѕэкЛ;wяХЌяРЈС[wьФцеЫёЫЯ?Ё Ју&N6яFŒ›€SЇNaнŠeXЗbŠKJ0rм‡к51|ј?eПT–УFbдаA(L?ŒтœthЇр#”ЩUjEПјZћЬъ\Y~/ШТ• еЭt™P=ЊzhйЂ9к<љ8^xх53JТ+ЕаKU‡~щ& !"Bъј7gDU—-[Ж rD|ъѕ†?zjѓТE{^ІG›oƒiН‰s€Lуž<깋ЅtъTЂЭ­ацёVxІ]GDшЕqxфЁxІѕxЁcgƒ-‡щеуѕюМщZ_!”!Ї7с‘жмʘгщ ЃRЂLШлBЫS" Єyшˆ€–c Koур;шeN!)5­є#Ўg™~жyNхfрZђѕМжоT–tѓwР’%„›fPXЈ|н—~y‰‹‹УвцріMƒs8|ЖДšьчС/œ›д:IЭ›ащЅ1Ј_o4{Ќ5іњеW†СwвƒЄKcGmЄекЩЂчщj|BТћH’Є, с_– фHн @Эо№х oЄ–WOhKЅє5pЧф0Ќ`џшЂ™2‘$8h}еw7_pяUР^Wz"\С‘Ю_vI[„TzФ‡шdи Н ђF ™Ѓхy\ОYЙQo$0Т д?1\~Ћ#|nžK n8ЇL…ŽмУI3я% РХanъcŠЄѓQIuP†–TZФO›Еj$Sџlь•ю˜М.Л§ŒзUієлБCaI?.ЌqxDё`™Pл,-|TК§РI=Ы їzm#?Ѕ–ЁkMJ—ЄІ—вь0M‚јjWЄ?}ђЂ19#<2Ь@rLѕŽЩlи№=^"З…џƒГЙ;тжХGBhLг}Jр$ї‰7ђзzРKрfCTјG>нZžBsJАQPХ’мIізЎ#QЅ$ i`O‰p98(#bрR9’ЅоО~Bе%€цЗ68J– |sm•–;Ёƒ-8гŽŠ ЇrН)ЗТЂ"tyЇ‡ЉЖ%8ŸƒФ’Г$xШŽ ќ–sы7mСw?,ДєЉ›[ЕЖ „6vDЁ ˜ВЃВ~в%57ƒфгm†ў_Ђm[jЗKm:[˜Р{]”BЩ4{>Rуlр ~>[`z:Oz Іm|j%%Xx‹p— ЪзъuыБ`і7([Ж,VЌZƒсcјz>ёкDˆн2LЫ…c…†)AОИжU(lкт‘№4аNё!„•Ъјm‡ЦзЬРx aіл#Ѓ#К9Є-P>Z{ЈM­вjlЙЃ#—j/€8З€t пu,)СяЉЃ5XАШ™\qXйЄiсˆ L—=,ц6Мышщ”–kахЁЃ/Ќ!Ф|xЊіdu‘†'v†ЮxшВF^X§„EaXj§пV^ђвА ЛьГ‡‡~Жo•хе#_аД0eДЭHч^лY:*OуЊК}LыJgћs† ж?№aЋмa2лщЫoFР%ŸRtѕ…aEVЦd@Zј$[­dї— (m0Љ#*’YwмСфѓЅћps– šf{щV!>€Тфе‚€­SЛР„J§GеѓŸЯ*Щ)DЅВї"Lѕ„6њрlPVŠЏюЅ+ЅT&^( жUIZ*LKС ŽW%сБїюšЄлzO•Ан† Т—OH щШ‘Ы eZP!Ў:iŽзГш{ТLuзШЈаЭX/ [8NW(C8FБњбНС,ŽCq@ёdФ@Њš$€Jqе яiOа?ЏpœšG,Ÿ S•Њ}‰СІОC "O—гЉp ПЁйQ\ђh5˜ръ@љnо||7o~ "Р>Щ­4PѓЄ›п^ОnЉ–kэз•СзђzЙЫДŸrVtєšвр˜9› Tђ9%"у~сќOќ  ЧШЌгьКнЈБяУћ“ jТНЃƒAЦo6žЪЯlЯiъсЪтб K•ю HŸЌ№МLЦмvsХœжХG”8H_=рѕ˜|’Ні=ќјŸ_ldRяХцжшщ3Џ—|&з;RэšЊ|kэд5эtѓjSy"; ШІйT$с’ўы„:в-Ж9ЩХ‡9O)VЧќщЋ [[ЦЏ5‚WЅjŠ)”ЇаvЯ392<Л„•#гБЇNРoY€kkh;9Р)1BРщеxџ чŽgЃR\5ћJђQ3Z;S9%Фgђ2MY/шгѕs“V*I{QE rФG$Y/cM ­.ь>Т L%Бзmv ЊДТЪѕ™МL\TУ ‹'э)bИnР‰G%ЛcсЃчtЃј`пEп˜cL5<щ1п: сvЃB>њ†.i3№‚kuиˆK’џ­ќаКєШ8œ\~аŒаmoSМ`ˆШН~C ЇлеЏ—:к„މЄSв+4]ŽГІйќЫяlxiл@2{3ЋЁ![“C–рŒ‚ œY:Тлѓ o ” HHegќЙЬ3 T}CЗсj ‡›юЪ ›Ч ру7сmP=4/ŸТЇЯEK3G6мбL“7­‡Ш9-kІѕjЉ IDATхЫЁ™№ZrхcЌUSmJьgЉ…xQўг‹›gюit c:@tBѓDН54<БЛЁJ^—aƒaŸф–jмєћR‚М{оŽЋјVmл:F^ЗНwдh…Uƒ <скјrзЅѓ\nj›^<˜4џщщм šг'd—ыЅsЧ(MУ‡ЕЇЄjПAїy)ЁїЮ ЗD”:цЏXI6ПtŸ­№x’i—+`Ži294я^s*иЄšH |=ŒTС„k§”љТЪ€ќW'еР…‹g Гъїўrƒ5M'ЭH ЭoзёР?SVŽ… ’ьўв”‘D阧•zм/=ў7eLI иt ›Оg€ќгШЙm&%#|д€ƒ”p?nСƒŒœ@‡„KBЄ“GЫ‘T|t{ќМ>т‡…-х5јƒ7}" ееѓƒdірЎ)ЖГAв€цurj<™ 3ZцбяМќ— m ш0Kš4ЫМС+юœ˜pg`Љ6Š.џ’Э!BŒŸV6HT$u‚ž^dA‘w’bшеЯnD ё1ьv‡Ђ*h^Iв.gНIн4ЏOAUcшtЃ/!Ым: dyi9мt=уЏ[Fч ЂЯЩs‰йEc\€р“08В)LзVВjЄ-ыVoитz-IШTђЊќНЕЯ*dEjмќфSO4і‹Š6.5ЎИ@чўМє‰ЪC %F’іжXсцj'@ ”ƒ0uКЩв}сѓ†…ыфpш§Gгм>ƒЃR‰+тЦŽзшCыj3ІЉ ”уЁ0ŒљRYbЬyОŽ!U—Eд#—€zˆVЁG— 8Єž&•6П k,‰F@М|з$е`№Ѕ’b!$—CE8Sя,†}!†“>љрkЄТS" %>УOрjВТд2А`r#‰ь’@Bƒ7**ЏБN­КчЩϘЗ › wюьз‡~ФЏ)=АJdхнЖЁнpZъƒXЌ2:Z'УJг†V~tY[>(DrјЃЇ4%чЋ”*АЫДЃqрй ›;šRЋ0Š~ђЈƒH)”CRј ŽЙЋ]Ь)Pћk`[чb:!Ц– ƒЕO NJ0АšЇДM…ТcЇ8т_2”Bљl I|ўŸBєY9~‰лБђsPН#LNЅBcўr5C&Рd&‡Ј‘цw’aьЇЌК‹п(ОсІšнtŸS“Ю_kѓy~UП!FР7ч4HЃАhOЫM.M&Р#yˆmрMьђ3œСЏL‡„є•€ЧНУA№Вк6Aейx@ІйыЁ`—о№DкЁ Авiv:ЊЋГЙ#НŒ‡2о+jt.3kšЪЇ”~йєSЙqр1ј.я]УPPњn.3,?ТНјч— &MАЧДПЗBџwoˆydіŒlЃ"Hš ьHY‡&kЈ™лИdаHи/ЗM{šУИј@Ue§§€•АдЌkЄя/9шџ ы‹dwдІM=z6‰lн -kщє гЧ~гgО7 =дцк‹С0івБцC ‡ж{"a‘7єЙkŠ|ˆ]–гN€…ЛН†чj8vДЄ‘sКОд50ТБН6уПеMqd>KфhіE’ђŠjСЅ Ѕ:ZBЫ™ЛTУN-{†BМщpO~91… ІЛЖN3)u cгЕџІм 3Є“bЛГt0СЖ•рEМЅ‹БHЗg€_бэiу^Л05‘ќ…^пfy z‰§0ŒvЄ„Ы8€Е-ЗВГэРљ,HЯ4РOГU$њ–4 (иJТ™Ъ@›уТ Hљ B, ~ грЎђљ ТDWЩk_0H‚MI„„6 "ръ?WF|Кs Z}ЏјЧe”›ŽгЙщЪшHœЩЭР™м |2n42їяТс›ёи#€gђ2p&/ЇsНŸкўЬ ЊOΘ8v4Žьй‰}[7ЂUЫ‡”—NdЇсD–§A@Mхx№‹sвq’Ќm,Vgk|‹s3иOТm#‰і/ДХС[‘Жo7fѕ%ЊVM‚Oљ(‹ЅхљщМLігEДQ>Љ№гxщ3О“QЖlY ьл‡vlЦБН;0~ј”ЏPоT›‡U чтxк|<8#’оѕ{aКvъ€Ќ;‘Бo;FюШШH?[ RЖ}"ЫFbЬрўШ>АйvЁKЇіfJнkK‰ж­Zbнв…(™0•+ZњoПљ&,œ9y‡vуLЮ1lXОЕ|ˆM3вѕ€.­Ъ3јЈЫO8йЕьi>z'6имдNв`Ь{аˆ8hоыi)X hvЧ ыаFмЪAдk( ч›|eЬ Oƒ+a6zъ`Ўo5+(ŸиГЎž:$ б-ˆ4šЌœ€С“-™sfх|8 в†vЫЉЂ`!дО“*Д Bџр§Мэ…М6fяUнJš'ТСцНuиzџWaSб*А€W—Оhл9?#Lѓь=}Яъ“ +Cъ2хJљ3"t|ƒt)љt“ч^К8P:I0zМЮТОёЉSИСщf“ОМ\їУЖ—Уƒ•ƒГ‹ŒЏ,Х1 }@ђКхќDјyBлYRТ<ЛmУd‚фВGД^.@NК›зс‘O(T™0vјs…ТНpƒPЗ“Еj§<гЎтbc1М?@ѕ[ЏNJС5фУ•pИЎYПЯЗяˆИиX zПЏЩ[Н&bеYиДМž*JN5k JŸ­Џ*Ю3РGVЄnќз ИЗEKМмљuмя=5d ЊывŽUJрЊФИ2ЁКIГчfz5EUMATr Њ$Ї љc­ёŸџќ…EE‡З^яŒ7:П‚aЃЧуНƒбсХЖшгН›ТвЏжЛ §‡ТwCdeЪ–ХиaƒqtЯ6|њс84Ић.cЗр:!xъёVxќпЯ#хІкXКтgŒ>иT№zЧіhм ZЕyЗзo‚ . oю”“аLђщœњлЈA=дНЏъоџЊ&%ЂћЏ›ќ\ЧL]юљцыЈ™Rѕl‰Люi†Ц ъ›їРkкЁWЗ7аыƒСHНэN<ёмKИћЮ;ЬшaпwпFlL4юОџ!м}џУHJL@Пo{Пѓ&Њ&& ў§ЁўЃIУњ ї.кЃqƒњx”впѓЃГІ~†™sР w6D|­›бы§xющжŒa;Е$]З…>&дъ‰ -G›VЅIЭ j\SAьe`№d ")\W™оšEюмГQGиЖ…Њ—я“ъ>УЖЛ;мQ>€ї0…ІYй‡Ž4ќѓъt@Ёj€йMРќ(іŽ”> ЈН …ŸЇuпэЄ€›ŸЅ$ьѓЪы*И …„9•Ьћi8’г)ьЎЮJk‡џ’БнрЃJРŽц›ŒДЭиTЖЎ}$BФ0Й„г Ҙšn @ƒ”@АвyйШ– ОєџJKеOкJL•ФБKђNУ‚ћ>ˆ„жpЌђЂ4Щ Ь9А˜Žљђ8TЪOŠАЫО’гGы Ашtш‘Оьœaфe'ђх 8)-rЉc šЇдЉWКe\>‘ђŒN‡,У–7˜жВЧ${ЮТоштiѕіЕЩЉRтДUЛІЊЗ%Ющ<я96ѕќ§їœЪIcяѕЅѓUINa3њу–ЄZџТ… P”yЬƒW]Џ‘єЎЂЌ4•žъг/ iриР‘3Ђ$7г{ŸTУcэ=+# …P”y g~ћ5oЉm ”Ј‘OяЄЩdФУAтї‚,№NЋШi2^Зо|Ю™‰ѓžGЫжЯ =3;6ЌAъеP§Цл№зпPpь Вsѓpн] dэнŠјИX$пTeBћw№‚XпMџКmžx O?о I‰ 8–žof‡>љŒЩцEЉ6Р&ТrЎ(ззЉ‡ТТ"сфeииšџ$АsУ*ДyБ=ВВГбQQX§уBм\З!ЄД'ъќЇ0ЫlсЃ/„ЗWтэ яAZF$€š5ЊcўЬщИ­ASу,ЉДgžJ@мМЗm‡cщЈ•R{7ЎEх„ъl^vЏНЛїОгыРж_№ш3ЯуhfЄЎKMСЂYгqУн ёыЖxьпЯ#=3 BдЊ™Š]ыWЉ3%voXЇ^xй99€ЂЃЋ`Э‹pу] Q*%lн€9?,ФЊuы‘ž‘‰“'‹YjŒАйі$ €яыН0эyпЖJЭЦйаљŠ]СвAЈNзэ~Qz=-щс вЮ^ /бЁ0ЯА2/эЉDЅФ`…H~/~ ™%+юR :EFлмЌэ$С–~}6ГuъFxж2ёлН„‘ш1h|Љ#аЖWOSг Œ…šlъ<РЭq 8RЌ€mkl‡[FУЅQ—Е7дшЖЅ>0 jлf #ОN§В”tмЫG­‹{Pкџѕ"-,‚вщ#IЛЄ<}Ѓ.—qК&шWЯ>žЕ†sяЮU›Њђ_F -Мц‘ЏЁўG­$ex^јš?Œ<0AдДЪ`Z윘ёС”3ь№ŽхSgиќЄ˜1KрвLлл5$—У%ьххOлГє”В8„П—>G#ч"ц§_§х0е1цQ,1Pц_§…вRОЅД™њr•^9qmB€Љіw.­slвЈV.YˆЬCћM {е•WH~9% +§vБДД”ИHр_з_y3ПЦ_џ…VmžУБє ЧЧЧВэEСБƒ€Є„xУП*UЎр5жщ3g|”РСC‡биHмRЏ1>2е’Ћb`по {їKWЪЃ‚Т"ƒыЯC… хM%%&`їЦЕfџшžэHˆ єˆўбяЪЭ+Аїљˆ‹Е`yH?б2“‡œм‡Р‚Њ&%тасЃєTЉ`6$66ЙзœМ|ФХЦhŒƒмќУ‘œМ|ЦŸЄФьнДgђ2q&?Чіь№шWз“mл!.&c† Р­Бžhѕ(у0§Ћ7$ >h.ОДЫчHРрЋ|…[в­'№ѕr‚дьT—rŽ6†Ыhшѓ;ŒР)3b7‚)qРлџMсOљ@МЖЯ&ˆœюh  Ю$ і-- ‚§дШ дHЇIІЃрЗiœD@Cе"SЫ!ANщб?ƒПƒ БЯœ&U7лА шЈВыXtТогуy“n@KУЛЃT yišЮђМЕГ–ќќЩыђ—*/З>Їšц‰Pї№‰ДЛp™М;А|Ю)fюŒGсyH?( М(mцЏ <ЅќЃm@щ(uкL ЛЬ€ж)<~[туНљ•кЅ ЎœјјFъђЅ]Ђ-Нёсdющ{ЗН§ХmšфЯAє‡Нd@нџь Љdра+ˆ(S– "х~ш}§Ї;9‰№0пЅ3K7і…Мœ€wPыXН7“ЦF|\}ъпи№ В~няcЬйГџAхЪ•PЁ|yœ;оРбAi)ЅOсЌSЎЋ™ŠљГgZЕi‹УGг`ж-J ААzdђєoП{ч=—Z:uqБ1ИњЊЋQ&"X…ЏПЎІ™Ќ^-™YйјfЮї.уœ+ чGЂ@Эњœм<4{Ќ5~џ§w“NyЉGaЮ?ђхЪсЯ?ЯГ0№ВєЬ,s_tќDx]0ї…EЈž\GвМuАЩI‰ЌL^~nИЎvянЫjѕФO𼉓HJHРБЬ,@UpќФISYaбqTMLє№“@RBCHгцЗпmВДaл‘ДtМўNO@™ˆ<йъŒ>?,^ту•”ANыёыGа%!!c—ƒ/сЛsћbКmТ+Овфд%чMnkЖЭуГї’—ЃпЦn*И’RЂпоЃўТœZcIhчрђk’ц‘Z ,гuљB a›&ўС+%@лГf‘05YmzG#kв#NКФб‘iw@RЅщЛЇR}ЃTD№<0Т~xd>HTŽСm\_C‡yIhрйУs›цcP]ЉЮуЏЄ‚p‘–ЙAiІИ ŽtЂцЁЯ Ф)bфЫ<“ђ—Mѕ2ћЖ‚ГК/ш cA.йцAiŸ(- С‹X0.яТЃц—!-+вi“ ”ƒфгХ[У,I6 rјйНtžœJ/‘'Lг—-[ЅЅЅ…ќ+!Ѕ”(SІŒ/н—ГАШЕКГNm<кЂ9Ћ“й(зkB35ш Њ0žФРЗ=ђ“ХХ€”ъе/[Љ™№ЧйГxњЩ'8|ѕWЏU|ќб–О@г *…šN–^я}Сœo‰ЧžyёІpKЅ7§`жїѓнпь‚Ъ•*сњZЕ№х${\мк›O>њ0žT#^€ЕMW,ХіЕ+ёFчNиЖsmѓюh|/ЦMœЬh№ЇwЉ;ŽЦƒywгО™‰ЩуFЁzЕjˆŒŒФнџЏНяŽгЊИўўЮГШТ.б$ВЛАЛРюЂщиЉ5RDёGHˆ5і bAPPЊ ˆиR#в„ MкоЅˆ‚”эŽAƒ;яїЮЬ93sжф§ч§М Ÿ‡}ž{Яœ9§œ;wцоЫ/УД cYG р‹/wуЮн‹%@yšТ5t`ЄЄЄ ЅfM иЯžЫrДдc‰ЏBу•˜ђёП№ђрШLЏд”šќ\_ЦШлŒЧЛЃGтЊ+.GѕъеQ?'Ѓ_р’Рœ 1l`ЄЅЄ Vj ^zЁ?fЯ_Œ'€Гч`шРўHMЉ‰ДДT аO‰B„ќПњ2rВъ!11рњЄБкЌчMћ7^пЩЩЩHLLDrRu?ё1_щЬB?K“И‡=›]a'F_ž$БMщN?ІƒшеОеЌtSљ‹PЉџЗ†&ZіїрЮXDšnrиЧ*_ХhСHЩ>Ё%К% eйџE3ќСTњiSѕЉ’ЅZF Tб&YZzЙFFб$˜.*5V№бяъІrЗшfу шDнG˜w "}“РднЊgЕ–Ъœ cККЁнц6К0DхrŠR–ЗаТЏgИдљ ч›mВgмшPQ…oф –Ч6ђа;2vf:ИДЮгlгюЃЭсЯУВiѕЕg§|c8ДЋc–(ЯЖ~$щcѓэ№ЂNWИућшpшЉрјЈэDща'SZ$R\д~и‚dC9cГcв:v6˜ˆn„ /М?§єS@–іѓ §ћпџFJJŠУ2+&€чЧСC‡0}в8мx}{sN№й ћ9‘ъшбЂ\§~g8Fv3ѓй'ђќ§zН$Ь?€ƒљ`”Р 9 eххиДj™^)+ЮУ1ђ––cХљ8VœЇuіTџ(.-ХМЇЁyг<…НяРБѕѓxѕЅЁ8Zx€экўОЌ'Ы tŸS qВМЈ–† Ю?k–,РЗ%yјЖ4п–цыЖЏН§.^ѕКtь€м]л0ён7АpщВ‰ч‡О„M[Жaаs}бЄбЅŒ> BVрЩўqQГ+ё`ЏоXГ~|3]ь"<Щј.D•_О7n"жmќ г'CСюxeш |4cІЃ­>ЯН€ЧИпРїeљсЙёЦЭ[БmѕRlYЙЅeх9цMЈъеšЦ @рх7пСОЙиАtЖЌ\‚еkзуЬЯ?kјwЦNРЋoП‡W‡ BоЮ­˜7§#|ОsЇЦ5tд=v[V,Т–‹pјШQ ѕšNš#ЧМ…’в2lZО›W,Цк ›ŒђПiІO‡Тн;1jи Lž>Sуѓ§qшгѓQэоŽЏЗmРЭ;тŽћ6хŠ^ЧdЄe_ˆ)8*S~Бь.xь ]’DoўFчмPћ“!AмтєЩ1хџ,юЛ^Lы оGыФhЩњVЈt7ЙŸАшдE&СЄЦ•|ЇЕWLњЏŠl–ВŠ7ЕкєWJqо`PFпюK”$ШдэtE—).љЃмѕ­uЭ‡€БpM­АŠJhљ)пЅ"2ыz-UQэ9ЮфW•lОмѕ›%ўˆфЬ (Я‡ј гЯWаD]Сy -ыИ†тГHЗьl2`єF№nѓ6AiЕ i_“ Л—}tг•ршЪЦСњРЅлGЇ§ёвЁЮYњŽЂ'’qы'ƒЗiіtЃ4œmьЪ|p4ЦЏiiiiHHHР?ўЈcЖ”?§єbБRSSTdNG7X$№]&iRН)yN`щU+/nмAY`f:5;Їz}ѕNуŒ4с.Ч083Ž . x,QJЉgжc№1H$Ф‚н“Ўoёлj“ГB"Фiжж ђаыИјх>ХŽXŒпxT ЛТ#‹˜фm›фIR0йKiжџQП 6t§PlЬ Ѕ`]WBЬМе€ŽЋ№M„}‚~щЕjaЩœ™hxU=ЎВ•<%щixч› ш,Oлy†HUџ …S*ЫŒNuЫ‡ю Vž"”}аѕЂ/“d…СЉз‚‚Й.-ћбЛC:›yиэVKGЅк% ь™…ІПz•^џЂЯ?UИRИ„}‚ /]Ъшё„ ›Œљ§Kэ?:ЦXtаѕ†юњBƒ—ЪкnьqCRIаИЄDK8ЯшІ*№цYrŒ6o: tгШ,%‘#ЪФ4Ю“Х›”Юц+нЯб-§.uNj=Йv|ѕ]Sщg˜*— U NС;ЉdeЊёин<§НЗ€­‚XЦƒ­>jА.“?ѕwUЅУ+#W‡>ШпёšєtДдmРI˜‘лI6•‡ЯI*EЋэЄžўъНР„$"7j“ ­t вп[FёEл4FсёАш9­э€аГЧF:„#GŽрЇŸ~Тyч‡””ЄІІВœЂ6рX7О=„+zˆЕMЧг3ЛДЮpНЈќ1KŠќжb~э&™‡zШЎ;ЃЊсш хs0^‡TЩ{šфуч›cчb2Bj-ЁO"€цм@ЧЃџGвL‚*ueвAйVœ ч$AEx[Ц„ЗЧ`фkoтШ‘#шџToЬ_ДФ‘nЁЇДšТСš™Rљ„pЎ7ЩdF-Ÿ~уGЈЅв8dsЬПЋ7ќxlл:ф1S3'оэ8чѓo_Uј(дNU_!У7YEиŸУGј_P№šœWH8ХЖыыRлК`ИЄƒ_‹Q|Аё”sЁЄdFудКБЦЋ‹ˆDZ,H… &H О‡PkXГkyI“ьЃS™эєж Ћ“-3=ŽBaQaуЃp>zь™,њХ+‚—^Y3Nй…і>:†бЙGhбnэmxЄс-ъ-Gёfј˜PЂd#9UЋž‡…K—cШЫЃ]П†JЦ*liг]Ъt^*Њ™вРшјyZPњмаыј ŒМyХŠIЬ}ДLUїuЅЭё BКБyЛд §щ‚џщM{ЦЪ›бDfїuG Q5ыhнЭАў7р №N6„žM Я› 8вYKFNT.œK—ч€%šœ]НPћє6я”^ќ–Ж :41СрІnьКЁр'Єй<#Ыwвэ+дB(ЉIoUvFЪhЩъqЬг;l2Нr“2!œЦЩEАa Ъ,Kд2)n;†0*P: \ˆ€ЃEД о ЂpиМR|Фі!9ф‡§Ж*gЧSЯN‡АЧV?XE4>/^E<‡щЋvpљЗр=іЌ‡вAЩI€ЎгE^xЦвxьеююc]'gЩ›wи(ВсUќоxo7;їГwsSšє­N‹;_:Ђ‰+Еz—%BўШ{ˆm№Н˜%vT=РNg&щ­Ќ8Ўsk& јdgœCŸT.jфeЯ†JK^КЂё‘аФѕmK”ЄŸ9OК уѓC“’‹+gЃ5ђbЩЊzэ,# эъИHQI7| SgЮЦє™ГѕGvеЫЎШ%?ФтЕ№Ъˆ)Bщ„[и™jDOмƒ 1ОЫI IDATnw—OЊдRЌЙA\л—pFс-ЄЧёi‹нрXD0#dH”іK2лGѕ )Іём%ЭЌŒшI%Ђfаы#ѕP‚ŸзNъzЗ`БшїRэ?ЃЮлЅП]CіoœР,ЭЁqЮЬщщТR1 НCћ,щ7šFOњšSщ№(BлЕqг‚ЧјЕ™Й Ѓ_ˆлОХЏ‰ˆЬUО“qЃ3мфC‹Ю’Е3OЦЁСЫІOКрnбЈОЙљ‹"IЮ‘€Ю‚˜тMњё8ќЈC4h„ШипœГ‰ёвІУ3ЄЉЂbŠ-{.и 6Р‹тГа@ѕeУ:пЪF•ВQЯиŽœсQIН[cјdьEЧNьCv@ДћY$љЧ< m‹tІ<Ъц§ˆрчї‹Кыuм™™dRQrаОяЌ„qОA€]…]_шь,%žп‘АТmяœ9 Wа‡Ќѕс(Їќ˜Q>=ЯЦ\LЇДАKР\ПУM›9:˜`б4къ42R-б‹—јХž™N27>шm7пОїЖ)›&3žит9ІЅ{hм|ЃŒŠ\M…D‹VшЅ FFœ$3kюТЉBPяŒ#ж“ЂерЁš$2В“/lPФ<„Pп4E‰кЃ b~DфЕJЃ kLWТЖ-nEдп жс ЖM+нШР46ЉиAЄTІњйіХŽышIў…SIcЙ‚"іd@щчGЄeb‹Б—Р|ИmХТYщБe“ŠNсYƒЫшвЖin_kйeшB>д7ѕы HГt‡qCщ э“9rRСK%ьˆRrfƒxьš5+ЗiZHЬАSЖvн‡пŠRТЗšб`ђP?И“›ѓ6?Ъш•"”CлђRrіlЖ•œ$5%УсVˆEГtŒз8ЃЂМRЃѕХ%ж/дщiлmŠ#И‹WгЯєфЃ“ P№піx”g_ АЩdчˆVь@yжцeўШ[e^ЃЈšž™Є*ЩЎWяŽy_mл„вмЏБjбtэr“ЮNzfЋ$$YЁSКпЉH˜xТЖ”ЄЏгƒAqРЬЋ(ExФŒ+!Rї4ОЧЧГ’чЧYе!єи†?JГ!бьМѕJјЅмјrЂ*fdє[ ЄfPщ1Кљl^ЭTЉ`?–ч‡чˆD<єYH†žчrЕhdЖe„Ѓl•ю&џћ№Ь‚ƒ7и*$3ѓfCЋс•58ч…_Цl'Е€~\эKƒИта1?OуЙ‰–нSг!`ЉгУrSЁZ#иAQкЖСHФwЅљЦ6ЄtьФŽу‚РjЉdfЧўнеЎєƒВігј=F˜cѓЧŠr•,ц ѕJMї‚•~WьБIv Iй‡yЌŽ? 5"Avэ‡}дc… бк`’ЁMњ(ДД ШkГвУ=яыOЯщЏж1лs‘эвЈQxŠ‹єЅХ‹я‚‡:ˆ=+GЧ ќ8МXhУџEˆЫ~3•:Юй$ё4N}ЕП“Иk97чг™EЄ?нёxbƒиz8>A`PŸЎщ!лО<шY_кcЦ•‡н$ИЬуёєЫЛЭ-%UЗ.>™1[ЗoЧ 7uEіЅM№dПч‚xг$РЩ)ЬfТ#ёf’ЉŸ0ХыAвжЋфHЌюj1N€ЄFkгвЯn•в‚–ўvЌ ?л'( MЉрк’ГvZ[Дƒt№‘ЄГ`Ь—U|H‹2Пв”јSojуGLQф‘ЗњO’пJ=ъ6ЅO&’c й”АСГЛ?n•.gЦ"MТ Ч Цьƒв•І&ЃœЮy 7ЛбЧл№ЧxqYдAяШf•ЇƒœбfЃqtЂуkдb* "'Z@Q’<>Џэ||"nЮлЮњ ДПš‘УъпQ5Х-Љ<ЄВ3˘Ђ_l[lъ’_HrлY0К§ ‚цУЉP}žФ@Ж”Iї3ў/ТЧ“™Ч. K.QМў‚F“E$€њ*Ѓ?v`+—І f~=АёP™…ЫЮCЖ~QЧ=b`•$В&jШУХУ$c^еЊ|С,_1Ћzp”wCсШ(ž=8кЮk‡ДЈжЧ,љиђbc‘>в&ЧН…&Ѕѕ,†Ю†ѓиfмПАIŸ <Жљ_4ўаrєэгŒŸˆqџ‰вВ2ќєуOињљvмћ№cЎk—›АhЮlьџr'ЖЌ_лўќ'Ј[jIII5|(voћ ЛЗ}†QУ‡ zѕjšдФФDŒђ"ОоОћwnХcнЯиŠХ№DЏЧБeн*ьџb;о§ ’“’ ŠЫ&bњ?'`яŽm(=№5–:7wюH„ю<žж§КbЫš(Ы§sІ„:™VG sёјCт‹MыPКo7ш]ф&TIРГOєТžЭkQОї |№цhдHNЛв M‚)ќО+ЭCЯ‡юCс—лP№ХМ:ьE$V­Њ ќЅл­иЙ~%ŽьХТ™SQ733Р%fт“)“Pјеч8RАЋЮХЭ7uвД7mмŸL™ˆтЏЖс›Ђ}XЗxnэв*§TIHР3Н{сЫMkPњѕN|№Цh$'%iЪЋ%&т•ЁƒАЧф~Б=-§hBub‘єN•хуt8+yЊМ?”хућВ|&џЎ7uТіu+p<џkЌ_2Э7bч(ЫЧп}{ЗnРбм=јл#сЅLRѕъxcфpфюм‚§;6cє№ЁсЛХЅюkч:ўyчUХШС‘Лs3ђПи‚ЧИ7œE4ЁkчNиВz9Ъsї`еТЙсУуЙ-YeЈ>pВ4'ЫђєИп•цуDIžюŸT= cF У›‘Зs3о1IIеL“`YлЖфoJђѕЌфБ№§щt–’ЪїHў^Ќ^4M7в3G xђo=Б}§*фЕяŽyЩЩIŒоxzВМ=Ољ_~Ž;Зр•!/ 1БЊжП”РЗ%љшѕшCиѕй:”юнЧ|@ГoJђ№]ihъ"$‡яKѓpыMБcнrЫпƒu‹чЂiЃ†ZФп•фщuЗ?”хуTy>~,/€ВР„„єэн Л6­EЩз_р§зG#99™иЏРёЂшљ№иБi- і|‰‡МпЪAToЕ2Й*јз­ы-иИrŠїяЦьЉЁnfІюпЄQ#L›4_oпŠт§{АdўtщDт“/&‘œtЌ(ЧУ—<-ЬХ‘Т\)< TИЙSGl\БХ{ПФВљsаИсЅКјЋR%OіzŸЏ[‰М]лёЮkЃP#9)аЁV.œ‹ыкЕеЩЋZb"ьиŠ”š5ЭEY)Ќ'єPёЉp>5 ѕъж оЧž?}Д}z=Šм][№mY.њє|X_%Ё ž{њ фюкŒу%ћ1щ§ЗУјљ ’™“Ѓi‚Ч.Ј#ОkДpА †ˆцЉ{ј Šз"ж)N|чaњ:WCДAШислuЄ”скhбшюЦзИ §XjXpњЌ‹t—АсЩащ}2e$mžIi%еŸш€6 BqHШ1:„}о&дCZЅ/М"єях9 іПkЮœпЗkƒЙŸ.у‚т{юЦНzbРрЁhrХејЫнїтЪЫ/з Яєљ;вRSpm‡ЮИЖCdЄЇЃoŸолгН{!3#mўа ­oш„Ж­[C„Fќ№їЂMЋ–ИЕЧИМu;ќћЬ<ћдка'Нџ.ІЯšц-л ЋaSєqzќБ (ІЯнзŸрЭ: Ч_яCNЃцXЙz-F[kэлЕС-=nG“kZу†ізъќоыСћpmы–шиэ/hxeœ9sŸ}вŒ`щH\}лVзрЊы:тЊы:ЁnfžљлcF@ ыMб§Ў{‘б )–ЏZƒ7_ЎЉŸ6ў}L™9—^й—4Aп†рЖюнЮ0uм?0uцl4ИВ j]мOŒ;ўдMЊ?t?кЕn‰ЮнoCУЋктч3g№ТГOщ‰†gžј23вбњ†@?э”~ДXL9Z•T; IсzИъЕъ!ЙV=ќ*=‹HшоѕfмвуNd6l‹—т—†й€ыЏmƒNнoCƒ+[сЦыЎеН<гЕвRбђњNh§‡ЮШШЈ~}z;2Ї32J1Oіz ѕГГбцЦ.ИЊ}ДkuюЃžuјЧЎ]аэЖЛгИ>]ђП§вИЭнџ $Їg#Љv6€`]рљщYјufЖюеџЉ'–šŠ–7tFЋ?м„ЬŒtєВЗЦт›|4ёSт‚Œ,ќ&Фїл:9јmfЖў­Zї[љf5lŽO—,ХЈсC4ЂGИэZЗФ-=ю@ѓ–эpцЬєњID5wГаЎUK\s]ДКОъdfрЩ^i:LћЖmаЕЧэhzM\пўка~$ЮOЯТЏшzЩБ ЬwПѕfмму.mЏН4Dу=?#5в~ЋзЮFЕZYHЌ•Ѕ§ЌчCод§/h|uрŸžщCвF№­}Л6ИЕЧИЌu[\wm;§vѓ0u•\gъŽ аЅSм~я§ИИI Ќ\ГжШРФїпХŒ}‚ЫZЕCNЃfx~аќљнH[(4#ŽпжЩСoыф.Ќ›ƒšсGУјŸ[КрOwў—4П‹–ў/^:HŸ{фў{бІе5Иѕ/wЂEыkC§іб§'M™†ЛoыЁЧьp§uиК}Л~=-+(Eјђ€˜бЋ@зЮа§ЎћPЇA3,_ЕЏП<іTшѕПo‡]џ„‹›\‰Ž7Д‡ђ—о=„іэZуњ›К!Їё8sц † ьruzіjчСЈМшƒsŠ*&ЊPГПлАqŠ9Z˜БB2Ђ’>8uЬ‡_rО(Ў|ХŽ‚NBЩWвяtСЅъwжйaыЏЭ.‰lФmТ•Я’1•Юp("pSžYp'ˆЂh–X†ш†ъŸл>§лЈuпџМщ7рЬ\=Ьл‡z šрЧд@‡У+удКѕБyэ <дѓяиОcgˆ qЫк•ш~Ч_Б?7РХ99˜ёсДhнРчыWЃлэwу@^рЂœlYГПNЯ‚РgЋ—уЖПо‡М‚BЄ\XK|‚ІWЗ|Оnf~2+VЏEn^9ŠŠ№M С[jдK”ьд›3b1ЖQHNJТО[‘ёЛ†š‡cEЙhбъZфъЊ"|ЗіЖ5ЫбэЮ{‘›_€˜RjжФъEѓарŠVЦѕ-ž№6oЬШшл’<4oнћѓђP!њYYјdЪ$4jйNSj=$%%Ё`з6\˜нАћГ5˜ўЏ9XОz ђђђqш№T+ЦVcЦь9јп•kА?7‡ŽЌЈаoйКf9ўxзНШЭ+€D@џšEsбрŠ–ˆиЕi-Кн~7ічњЛ(Ї>Ж­Y†фкй:ЙšY‹йP˜ФX(ЫGR­zњM6šџв|4ИМ%ŠJЫ TЋV Х_mЧ…9 $Џ“eљhtM[фQS…”{6ЏХЭ=ю@~~bBрЂњй˜5yšД ‚яKѓТb.\.%~(/РљaAЛc§*ќёЮ{Б/7АПњйYиОnЮЏ]Bп” б•­PZfшЫћтsдЬЙTJЗ1aЖ‹™ї‹іђCY>~•žМ79ІьиАЗо~іхцИИ~ўѕбD4ЙІm +хS’ћЙњO­•;^œЧŠHѕ6яJѓpЩх­PRZ‰фЄjШлЕЏцќlе2єјы§Ш-($šr!–-˜ƒцз˜7 БHjœ$}_V€­ЏХМќP~9˜ѕбD4o§{fуЭZЖCa‘бŸђMГО/ЫGrэЌ€'-ерјE—ЕDIY€ЄjеPєеvЄжo /4ЈžѕMєа.wЌ]Ž?оuђѓ Љ))XЕp.†ёCјІ8Э[]‹ЂЂ"шЗb‘„FwwSЇ[f‚oIIеБgћдЛ$˜]пВv%f}2+зЌAn^>>‚Ÿ+ŒJг™7’ ‚YЩšuы[G  й5mPZV ˜ЉпГ} ъ5h H`§Š%ИэžWФЎš^ˆeѓgЃЩ5m дЈ‘Œ/6ЎХUэџ€У‡`ђиї0{оЬš;оVaюЗT„ŽкIRRuфяꆔьK”№№§СB4МЂec*”-НОмВ7wПђђ!ЅDjJM|Жj)ъ]к 9Mј,ЉЦkєМ€ž^FT­‘ЫIЌув.|§#Ц }м WA язИ№‚|Ї… %Чо$тГI[\VЗ№Јcо™ИџЄEhfЫ‚:SъЅ+ŽƒV–д_ФАvgЊТs^Vb˜ЙHђbџ›5фїпQЃF9Ÿzъ)дЈQCџіПGЧOœ@jJ ‹‹ѕ5ыфрHQ.$$222АчыН† тPRJЄІІЂИЄ4Ф'QTRŒДДTЭwZZ*ŠKK5|0N№Ющ23вБeэJFVP,пџtї}шѕШƒxi№@\”“ƒ“'Oт™ч_Фьyѓс\qP}„sАЭš4Т чњЁYгЦјѕPЫі]vЋ“™]W;єщё$I82(dmУTќ@aI)вkЇi2[4iŒaњЁ…EŸ:ыїр‰GТ+C^РХѕўŸ~ўEЬš;@З;яХп}Ѓ†šѓ}њП€йѓ@ 3#;зЏrшWІЅЅЂ(ЄO(*)!М ыЖ—IЌІ(Аэл %a"€SЇO#Љz5яTЬ+,*zЛЦ$€Zi}ЉнЌ…Х%}Ї‚МЫ †ЕkзBБmЊ UЌ”––iџњсдщр6:сOŽеpн–ЙpШGZZ*ŠJЪ4|aq jЅЅ"ъ)ёлaKZIiTщЃшWБ4##[зЎ`№§р^фRQ\R ЕЫМИЄЕk™7$(Zџ Ћ$};Ls+Й•”–Ајсt@П 3ођ@jєЈ“™Ž/6ИўЉЂЎњы‹ћю…КЕmчN iуFиџY4kвПОр|‡–люЙ?є †Нј.ЪЩЦЩ“?рйA|тšЕќBА?ЖрI…'Ы”џHрдЉSЈ^Э,ѓШLOЧцеЫўcЄО?yѓ.ЦmнЛaв”ihyе•x goЭЏMO0kЪC4kмƒŸя‡цN|т • ‹AЂR;~+ЄDнЬLьнБЩЁЯiNсђK IпoпЙˆBO›ЏXєф—JcuА -WDЅЃ нŸ ЁŠІ№Л-?УЉƒув&р“™ЂŸl6Є79DРzuBKї7fФT‚ ЅOgБ#њSQќХЋщИіБИўр%2j?Ў5jръЋЏF^^вввp№рAdggГB’6s›;ФЗnУ&tщtЃ9`џ’вRќют‹!Yсfк:|щZ‰™щщ8tшА†,/?ˆЬєt=lfF№]Эъ#ЇQ3ќ63[.Ќ[_п‚кЛo?z=йзоxъ6hŒgЦ+УE‹Dšg Aо{3чЬEѓ–mё›Ьld7jІЧчн$EЁ[AajџЎ ’jеCкѕ‚[™9ЄИА д5иЬєtMlнЬt”<Є!'Пџ6f~2Ўn‹фкYHoаŒЁйГo?эѓ кмxъ\в}ЦЈиЛџэгзмаi5ТSсЕ—kщЃnУfЈ‘žЅ?чgфшўххQGыG NЈЇPЗ9$… хЇfф Пe!\˜bШ'&Е0œЎC•8xшp@S_'#‡†*mO>jеЊYзfјЫЪЪQЏn]}ОnFFCdPBЗнЬiг)&/Ў9:tuMъdЄурЁУабQ№Бˆ‡Б ?}›ŒУ?D_TTŒœЦЭё›:9јMш_)YA'AтoгuB™ \ќjжЋдЌ‹й†˜‰SІтЎПќЗvщŒ%ЫWрдЉSpmе?Ъ–&§уmЬš3MЎn‡_еЮFK›‘ѓVЙvRчbB  А)ѕ.A•ѓгp~*bПJE• вјХуВ2­йZaЅ2ЛqlntЎ|њVcžXjп^go ђ’Ѓѓсгpё VoiGЖзЪRXЪ XTNёƒЅ‡^4цй…Є цE-нѓ‘уXHl}Јf;ЂД‰ё l•ДEMO%`›@p9P^Яю_mлЖХ‰'№эЗптФ‰hлЖm$ЌГfђезпDЏGЦ§wп…кЕjсМЊUбЂ™)Ио;c^+.Л еЋUGNv6^jж Эџt^ьџ,RkІ -%ƒžяyŸ.вfцœЙќ|?дЌYiЉЉ:р9УВ”˜8y оѕ2ВыеCеЊUqХe-0eТXЈ5•ГЇ~ˆ?\ї{$%%ЁъyU‘”TЧO|Ѓ“[BРŒ!ШIIеqфшQќpъ4ъжЩФЈaОѕpMу?œ‚Œ…њYѕX5W_qfLыU?рCєCZj RkжФ№§1cі\0’Њє:u ѕъdb YЏ',˜>ЎoфЄ$T­jјWmюДƒѓЩЩHLLDrѕ$?ёІkтф)xће—‘“•…ФЊ‰Иъђ€~ ј3чЬХр§ZГ&вRS0t@?W в” †?СbmiY9:оp=b 0щаШQ%lЄ@ў‘хŸ,XˆaŸCZj*RSR0d@Ьљtaќ!БѓЫЏ№ЗG@RR23в1rа@FћДYГ1bаdдЎдš5ёbџg ŽsEaѓN#š>еŽxўЋTI`Нч~КCєCZJ вRS0l`ЬYАPIае,Ї­ЌМ7^w"ƒŒї&~45єЏКHЌšˆ+/П SЦрР+§p›О а?Дп 1d@?|ќЩ\г)^ФГ’žВНkн›3C[#Х|;наUє…Œ€РјЇтз^AvН,$V­иї„ Oў‚пRЃЗїi-јчсЃGёУЉSЈ“™‘C‡Мдݘ< зЗџ=’“’QЕj"’ЋWЧёoNнѕpЭŒё| єлUЊYQЙiйQЭќsЪTМўЪˆPПUqхe-№бјї5^`лі8}њ4ž{ъ ЬYАPяw.K4уІЄHJ ј?uњ4ъеЭdы‰ЅR”V˜@,ƒˆХ‚п1Б“&уƒЗ_C§œlTKЌ†–W]93&юш•h=|vD Ћx…‹sмњ­lœ^ЄбуДЂуQ#’р4Бa.AYt\:љиx=ЧмhаGЏй|ёuФ•.ˆXCi‘†9( НL†6n ‡3АЅ;лТСXЂА>ЙZВŒd:ТŽќе­Ÿf›?Ч~УП„FыБMЇo4)5jд@‹-PPP€-ZDЮJžbђЫ={№ч;яС зЕЧњeKАч6Œђ"ъљwяŸ€7оy#†МˆЏЖmЦЌЉbћЮ`§Є”РˆWЧршБcXГєSЌYКGŽХˆзЦhŒz§-””•aУВEиИb VЏпРяwЧNРК›0uв8фяо‰W† ЦGг?жЂxы§Бш§и#8АыsькМ]:uР]rУF iј[пчqsЧQК{;ЬјЯžЫш{ѕЭwАяРЌ]2›V,ЦЊЕыqцчŸйZZ/mб.ŸОГЏр€C_Тш—†тPо>НлZ>ъ59z–-ФЦe qјШQ ѕ5ŸdCфжЌTјх…a#0jјЪл‹%y.­Т7Щ#ёёБ~у&L›8љЛwрхЁƒ0eЦLw|ТЂћГ-[БiхRlXОЅххxљѕЗ"Œž T"XЉžСyВ,п—ц;E/…З›Вгч‡ŽР˜CёMс>œ*ЫзцѕЮИа?'GЩо]к?щюl…[йЏš}Ќ@‡єy›*ž}žЦ€gŸAўž]јзДЩXЦeŸџ7Нy{ЖoСі kбЙcмЇŸ„a`N ‰—‡Aщ=сšu# aйžњ"ŒјOЌпИ ‹ЛЖcфA˜њё, +§N†5j`екuŒWцd\>ё4^ьї JїэТќсгХKЩY.+~”тољ`<жЎпˆЙ3>ФбЂ}xsєLš<ЭгŸнЄлзAхСу ^‘ЩпѓнW 9xь~V[я /э#Ѕі]?џaAcќёUъЛДj(rqщ6ЂР’Hx>*рœG­я(љz№ё9 —ŽџКEйV%ћ9р– EݘГЮёЦЋ -ASГ‘ёf% 8ƒ:†CТ љќэвtF  ЩчkДmHГј^B]§‡ј˜b‚mиpel|PСSљЂЂЛЂј™ ‚gB,ИJ†Аd.ш˜ЭjwЇњ+р5S1ГЪЭ< “{‚оЄA7 ”фсќŒlќL6#ˆ№ŠBmЎ0xC,Jv!aСІш=о‹75ыЎyВёŸ–ZІLЇZO^+ЄЭWЬЌщж6-™lEЈЯ -G%+œТJЄ  fЩжЕ<%Ф[*ѓ7іш>РЋЙ…2 ‰єZЕАtЮL4НІ­.РŽ`3‚„Hјз›j@ќ…№­хdљˆ}СЈэMš[тњэ&Zв gpЬlhRJWњQ „ю#№QЁE„ђЁTJГ‘в, ё]Y~“‘Хlˆ]RЫGћRШОel˜в:W3ƒ–œЮoЊYC5&ѕ\Ё|Š*|mІђ!;ox‰Ў…аpfЭІЉфЬ3MLЂM%iТ2З/ќТFЧ[3(etYК:W–г­ы-шvKмqџУ† ^’^іФNЉџ[U>Цž!+‚Ча„…=ћNфю<5‚)T“>ЋЖHœAВўžтY!В/ЌдјОлTОAE%ˆЁИ§gыgl+ zы:_?u(JЬv;ыŒ^т8ƒD7i§VРо—Цџ7э?РЅ/ˆрНhd„ЩгƒП„ЛŸ9Мзfї8€ђђrдЊUЫ{NmРqf&љІ хдv  ЃчQPРЋI|дсЭA’№и‡Œ^ДиБdЁœРrZz% цыТ|еџЋ@І%eХоOЃP aПP/L4†Шд.2T*5Ў й’ГџV]TТ•—]aИM0Єк‹2DŽCЙxЊў—вЗЙЩMА<#xrvBМ€Iі!Цо| зЯСчŸўOѕЦќХKœ™< „3*  ті" •ьm!ъœ'пXЊq‰Ж(1>ЃGЅJДЮшZ_QiХя•ёam|џЄ` щ2Ч9пMLЃi@’ Rђu\ †јЭ”‰!ўТХцеŽ\іy_“€Ž—в=чvЂБ“гЯоЙ­€œРчУOl’T Бj"юЙу6,XДXПPР\xpŸс>H0 улT‚ЌсMЗЛcсХˆ‘Оє бa‡уˆжLˆ:kН`х)oВ№В@zNЉ˜хкЄ l’V ГЛбѓ6q˜іёр 3s‘ёуЪйЂ9>EЄч{eѕ"­c,рV†рxtС#ћxнщјф;гuіaЏО}pqXё}“ Ђ Iкt1Љ’нђ@gдуAиEІД6HА Ш)H"ІИM.0Хœўа~6гФ6Tajf,ТАІr|8›#йHМ™"гSЈЉПaЁ‚І=… ќ2‰рэn1 №™.§8%NLЃCй “ќЅ2wg} Ћя$љ8˜˜ѕ&щ‡S ЛfюsdстѕаhdnѕцYˆњ8•Л,—­\љ3Ї`Чњ•ЈRЅ †П2кV’Т—‘B7F <‚pƒy­ЄЂN№ёUmj|ХиЃŸ3ŠkG<@вї,ыйNјЄ­КѓOЭWЈYсp4jSdф№ЏЂ_’зVšcіЈjуž*`ЮЎsЩѕHСШo)шhLBŒzч<ўхmвє3Œ"џM_{=šT:ѓ hл9увфНrДьCXУVВ7Є”јзœyP!ŒПб<ѓеіŸю‡pЖ>†А@$oСбјљ'о… ўТ<ЫˆЗХ;g•i‹сфљžmŸ5QџVЩN}Їњ‹ТAOнJ љю›§ЃŠiѓ`c&5ЅСC‚ST‘я> 0ЧхНџgх ZЪM4Е8}Н…>хћ\NT&dDMlзŠzІQТ+ыgoUœ#ŒЉщ“ [ fm4ё$x3ƒVИ!бdЊ’O‚і2Ц*uлSУ”^.š3™Ьдуѓ‹E=Їт4ЩfФMЪ  i ?SшЗкbЊHfь 2s‚Р/Tg9r VR ­€u{.Ъ9=\=Zfz д8ТююHг‘Д!ўГFѕ@чwЅС D^фбЂ‰]LЯ"рoкЌй˜6k6TСЅ–"h[”€ДžƒЁ I…3*(ca@мжi ” яW])*н—${BM…В.)Sж КЕBџЁ‹€€Сш" Б_ПЩШ⇕ПQЄ~Ќ{FЁ†с™2 (!'ЪE IвœazВ­@>Ь}FBJaЦ*ўKЋ7w!ŠhAЅЯIчйЭІЄ‡`пХаYvхrCрЕЂ›ж>J ‚NmоРš‰љA­S1ёƒ„ЩbŽ€zўЊСCнЊGЁ& *$*Т‚ВТ‚зHl{ё2­”yИГ5Ÿ"}ТŽ:Ў Ы‡&и:žгЧ•‚kЮСщAњ3вю™9јьх=4ƒлƒТЃƒЪŒчИ= c' л^Мё,ТcДЬmxЦЭЋ^pЧVуШЩ†зIЭЫXtЃfТи…Œ]ФНpЋ\гХфЭ/,њЏ‘kчкЙvЎkчкЙvЎkџяЕ!+~ўћV€ЏWN§ПFЬЙvЎkчкЙvЎkчкЙіџOћ?мѓ žgџzIENDЎB`‚Printrun-printrun-2.0.0rc5/screenshots/pronterface.png000066400000000000000000004307031325617007000232110ustar00rootroot00000000000000‰PNG  IHDR%T"ІœЬbKGDџџџ НЇ“ pHYs  šœtIMEн  цˆr… IDATxкь}w|Uїў3Л)›о !@ЈЁза[@6јB A‚š/ЖпЋЏ/"Ђ "Ђˆ‘‚)/ЂRЄ‰вT’H   Є’NBH/[цїG2УьdЖ$йM6с<љь'ЛЯНsяЙїž93їЬЙw6k9 @ @ „&Тяп.gЮ!ќ ѕ@ @ Г#см^€№Р!ЁО—,ШТ, 0 Ž8тˆ#Ž8тˆ#Ž8тˆ#Ž8т:Ю•ъgтˆ#Ž8тˆ#Ž8тˆ#Ž8тˆГЎn: !;№ѓщОН—œ‹Э?Б˜їTolљ)зSs1Іяƒ<uФ•ВС@І]6Є^ Ъ0ќ2†šА A”Ыж†lдх8\К™ƒ}ПнFEЕ `YŒяяЇЧtС™ЋјсTќпА<=Ж рЬе ­c/џƒ}ПоFŸŽ˜;Бž{$Ыvџ‰yŸŸУ–WkѓО8ЇѕЪдБ}ќ0k\7\ў'ј ЕУ3С]ЁжАјѕz–0Ж—jЫЏЈR АЅжй1яѓs|y`Y8клрƒН1Ш.(Уаю>xўб@Ј4D§r ‹ё§лт™Б]q#§–яЙ‚j•“†€eYŒэлV[žўкђp}*еЯФGqФGqФGqФgQœv:У2№ѓtфчй/=б {ЯXувпwАщGёiyбЃžпЯгжУЉЖіС+=j!G д8иš?бb,Ќd ЊёxФ%чзЩїПKI(ЏRђ\p?Р‰˜t”U*ёsLz пзOтиd”U)q%1рыfЧЫЂKОё§ќ?§‘‚ђЊхяпЖЮБ‡.&ЁЂJ)б6эіўяbвѓŠQ­VутЭl@ПŽ|Оэћ~Н…{%•(ЉЈFдЙФšzkхљБVž“Бwxy„uHѕ3qФGqФGqФGqФY '•юыс… Sу_АЕ–cvHwŒюннЮBџNΘвЖжђ(lЌрыюЄЁ3RЂц…‚щњl}uПбх/q™8tёЖј]ЂИ_ZЅuЌЛ“P\VА,ŠЪЊдюч :ЖАЄВfљ†К68„aъ ZђyЙд”џсѓУДВљИкз9ЖЈДZд"дщ”ŽОޘ2Ђ3к{9ТAaХя"ъцhЫчswЌй‹"ПЈR;jD ЯGђ№›‰ъьgтˆ#Ž8тˆ#Ž8тˆ#Ž8тˆГ$N;=;П•еj(lфTЋдиv4ёЉyшйСў“А,ц<бЖжr,*ЋеШЮ/ЊYО!*Oр”рVohРВLэы:Дпе1їГГ<Ч0Ќv>A9Тc K+суjg;м+Ћ„“5  ИЊЦС ыXїкђн/­‚Ї‹оиrїKЋ$хгuЌTН/?бžЮ |qфnЄ@nХрЋ…СЕ’š|їJ+сщlOg[d”kЕї~Y<э№ц–‹ИWV)нW,#йЯФGqФGqФGqФg)œ”€eYdц— ГŸ+QЇŸš‡Žm\Бxъ|{њФ$faлБx,јПО€ŒќтG ­ВЕ–oдcдl‚ЩВ5лWˆЂ„œ8Ÿp†/ЬwёFЭђ‡ AэЁАБТФ і€sз2є+цJ+”g;­|ЇўЊY>І ьэЌ`k-Gяw,:€ЯЧЫo„ЬrYMчTT*!Зb:Вs|'cjъ|zl7И;кТNa…№б]С‚ХЉкхгЧtƒТЖ62єързBћыэ?тˆ#Ž8тˆ#Ž8тˆ#Ž8тˆГ$N:СЯWRjWDTуЪ?иеKBТжZ†й!нбЃНтSsља‹W’VЦ—')С–АЕя­йФB{ђЮqт||.Б6пБ+ЉŒьбcћДХН’Jьћ5ЇЏоЉ!эvfNDЇ=(O П!™7‹ЧЬqн№fи@Шdкq\ОгWгQR^… ƒ:`ХѓCQY­Ц‘ЫЩ`XЇ8yŠф‰IглФGqФGqФGqФgIœфмŸўќ'уњЗG`;Ќš7Юі6|š\†SњЁДМ`›щљјѓŸL0AbЪfиЌхl`№3(ЩИ^ыœ`јТj"*Xтˆ#Ž8тˆ#Ž8тˆ#Ž8тˆ#ю!уX‰tn—+90џЩмнЂчљќJ…ш„ll: U5ЋU6ЫАpђяƒ„s{!їяМм3 Њ‹rEЛIВ^ћAqФGqФGqФGqФ=\œ. hXб‰йHЪ,D[O'(l­a%—ЁRЉFF~ 6ХO$AЃжH–mытƒ‚дјЫ7И4VT1УGqФGqФGqФGqЧHј„љ4,‹kЩyИž’ 4Б2h VЦ/б`%ЪVHМ”[иСёФGqФGqФGqФGмУЦБ>‚ ‚c4SћЊO†seш)›•tJоA а@АЫ%qФGqФGqФGqФїPqТm)MZЖФл7И1lЉЩ‚Љ}+qФGqФGqФGqФїАqц)ћј.+ sДœЌаyAqФGqФGqФGqФ=Tœ9ЫVИЕбошR#^м!ќYoŽmФБ­c,HЖйda,hŒи‡Jџtы$У-дЂѓЃ9жt’б’хсЦ‚da›MЦ‚Цˆ}(эs]dšёкm™чGsp,щ$йIВ“d'р˜жпїцœkжТЊnM­ьC[Йх ЃэЄzhС0sBXЦPаљбќ:iAc@Жšl5йjВе:Iv’ь$йIЫЖ“tŽ˜ КпОAhй:i6ЃYч=Ќѕ‹0rˆ@ [Eэ'[MЖš@Аt[Ev’ь$йIBBbЃKКп5•эДdЧ6гќ"аE–@j№0л(ъВеt’H ШNšH˜‡Qщ!Д"U H s(†E„6ёKvЌй/шŒ%iчУ-cAгqіaжВеdЋЩV“­&[Mvв4v’†‰ьфC)…жЙйђЯ+SЖeџђP„/џ_ѓv clsx/aяџЏIІ@ФК§ї^(ТЭ!™aHnK>Mšц)$KWЬІъьFž›­яnв‚/шѕАеЭЅ H]ШV“­&[нRDLГХУd+й‡ќє%;IvвьN Жкu`љ4„-?„Ц–гєж‚mЖeѕъWЫTА– ЗXWЩІв•œа‚l5Љ,Љ :›@Ж’@cAн*aєђƒяOЏУMя ІПwаь“SЉК…2Qџ(3ѓiеф˜ѕho|{:?\L0vvoЂк :9u'к+Ќ1uT †іє‡‡Г”*5nІхујЗq=9Я8gУћг&в1ЧJшŠЅ`TŸv˜>Ж|мqЗлŽ§…в ZŸЕБ€h\ :Д u С ­Єѓ‚lu 8+,b,ШNRGДмs“ЅГТЄN cztњ{šхTж{№§0НrдwNož'ќ †СФСАѓDžо?\J4ЊЎ–КнЈо=IKУ†!ПЈэЙ€ЛїЫaЏАFяŽ^˜>ЖЎ%х]TпšclTЂйз˜~АўаŸШИ[‚НќёъДЁxхГc­ЯpБЭ9ЕшFЗЖКѕ^в[ыыY[рЛxЪШVЗ[ЭД&ѓ@v’ь$йI§Ч>Ќ"˜Ч)aд„Y"ЯЁс˜Жl< У`к˜xdPGилZуЯ2Бѕш_ЈЊV™рfЖІk+ž щ‡‘}к.^ПƒнЇт TiŒJ–еЇ“žŸиў^NИ_Z…ƒПоФщ˜”ЋЩРЎО(­ЌЦбпoaLПішпХБ‰й:^.У‹їЧЈ>э Rk№УЅD€ƒТ^} ‹??вŠj>ПЃ ОXђ–|q޳ƘвН;zC&cp=9_‰AqyUэ˜„aѓБ˜:К;\m‘’}‘GbžWЫ„їФИАГЕЦС_oт‡‹‰‚qы.З,­qг%wC=;xтЅO~DyЅPTІЦХј;ИG`џФ2=аЅC+ТW„І-л/Щ‰uѕаŠplў1SGїєQ4пGжV2МјјŒь]гЮ/%тй }љуыЅ/њцУнчљя‰wђkьН™fl­k.овяViЇЫцПЁчM‡’Љ3Д ‘%}hйЖКU9ШN’$;I-2П­ЉпF—Ќ|эїЇFtEяŽ^xoћ9”W*ёв“№ЬИоиyтЊЩЦlк˜žhчэŒЗ"O–LŠiЃ{bпйxА‚є7kг_>ЁЕщтsыеiCБѕh,ЂВрт @јИ^8мрБylHgћ§6XА8ўчm<>Є3bГј,ЁcКУЯУџкј3˜књ ЄЂ —odрб Ž8|ў>HPGœП–†’Š*Ќ˜3лŽ]ХњCРJ.УЬGњ`VHo|u$šЯпП‹–mџEeU˜<ВцOˆџl9 ˜2Њ;zv№Ф{лЯЁДЂaС=љŽЗ^ќИMЋ•{щ—5r/™>д ‘вЇZё)yxeђ Н| Щй…ЈVЊыф™4Ђ+zеЪTV+ггЕКњп§јпс§яטЧI!tžєыт‹џn;‹Ђђ*ќпШ@ЬŸ<яl9Уы–—‹=–n8X:DЋЏN‚­Gc#а—гбIRk_wGќgі(|{ъРjLzВГ&šЗє гRоmFЗdMг№И…Б Еhщћ˜3бВЦ)kBе’- йjSHТZ‚J“$;IvвмvВ•иJ™vњ>РЁТЕ>„`ЕОГ,‹AАљ‡фо+EIyvПŠaНк‚eйF}И‰%ЫВгЗ=ЖE~Q9ђ‹ЪБѕЇXŒюзО&Ÿ Н ЈЕщcњЕЏ™XВ‚.YjnŽ Иил"џ~ОњўO#њDњууъ€.mнqўZРВИp-]кКУЧеžЏolПиv,ї8йŽЦђђќt9щyэs9LмЙf_ –Хв/F|r.ЊЋU(ЏЈFдЉkаеЗІlMMЛО>м{ЅЈЌRтШљаЉпoуtФ–Ÿb‘]P‚’ђ*l?іŸfhмЦєыРї)зчТ1бњдўё§-ёYїнedн-ЦЫ“bї;SЙє єн}вўСБмw/WlјзљX“ydмэsЏ”џ]Pg;>юєКЁЋП=АqН0c|/”VTcлбX­хѕСcC:УйСпНЇНAчФС]Аычšˆg;d”ђ§••_ТїQF^вs‹0ЌЇ?.\OЧА^э№OZ>юо/tiыŽч&іCЧ6npДГh4к[XZС7ЏВZk9Ÿющb‡ЌќЩ1з5n\^}r7Ф•YVYЈгзuњ:hчх‚)ЃЛciи0Ќќц7ЃdвU?ЫВУŠ4GЂT*kћH [Й…%ќяь{ЅZЧЏњі<ТњВUŸОщвmяуŠKёщfѕIГЭуќД˜Ч-ЕЙbsЎзЖЈатцпanu0эcЇЋƒ%<mў~h”ЌЉЅ [нЊЎ­!R’ь$йIВ“­жNZеч&UW!_ѓХнЂ2Ќиyy…efИЁЎЉ№^q|мpЇv_wW€­ }з^w2›”yЋїœУЛљaбдЁxqѕсzЫfm%ЧИ1эZmїqsРšˆ ˆ:}J•Х№usРМb@7G­“хЧK xz|o\И–ŽIУБщ‡h>эѕ#Аџl<жќsхUJилZcїЛЁ’ЫhЄ_TŽ6ŽHЯ-Њ“vЗЈ\яИWРз] ЗЛЃЩЮ|–вѓŠАэh,ЖМ5™?о.q:'ЩБ•U2§^qМ]yЗІОnZMJЮ,Фъ=x}Y1€wbБ,‹зf ‡П—3d А,4&_:ќсгf;lQ-6­)BM:й|2XЮM&K >ч,=КЕкН&[MvВѕщ:йIВ“­дNВІГsVѕrЗ*Ÿ.%@ЃбрпГFУЧЭYљХˆ:}Э4nк2œЧѓРЇ &.^OЧ_тљш‡§ЕщkuЄs“LјуfўпЌQ№ru@F^1>лЉAo”x|XWDК&yьёп>О7ЮЦ$уР/ёxщЩAј|ЩPЋ5јўќпшзй—п~М№L‚їwœгтП<є;ц<9o==їJ*№§љП1МW;­<адѕoq{'ўязПak%ЧGs­О;ЯЇ§x1 Ћ5nпžКЮлў_n`Ў@юУчџAПЮО†UwтОГзёфАnˆ˜26жr–T &! Ÿ~w‘wІќx9V[—О=}O?јы |ќJ6јПwЂъpSо‰юxH|sћ‰ЧмЇс‹WkкyєїDєэфУЇџq3џž§@_жэПЄџЕЈF_њЭsТд†лБљ“!Ы{=s"сsйЂF…Ёгƒl5йъжwЙ0qЈ<йIВ“d'-ЬNšP!™aГ–ГСЯ ѓњo­j€HQЭeИfe[Ь рыŠwž‹—зiЩfƒІЃqE'} [нT*٘(ћP˜:7ЩV[š>lIvВ –ь$йJёPД`hлg Юэ­пF—ЄдuJf,{0˜FѓвSAјпЏ7`-—aЮSƒ№Ч; lkІюhYУЏєb›ьФ`›XћШJQ/4O?А-F%‹†5Ѓ-Ч^“­Жœƒь$йIВ“n'›гVВMЉžцŸ№YЕVгїа‡65U?Аl$)^юНRЌ]ј8Ќх2ќ~3ЛŽƒeљюX:'ЉХдKdЋ[dg3А$)Е˜Ц„ь$йIВ“46:`eŽК,"‚ф!wбУz3eЛИ№7~И№З.+4 }ЈЭƒ%МUЬыsЩV“­nёэ&[MЖквд!;Iv’ь$”С‘h ЖђСђжrЪгУI)%С’GТ"6OЃмRJ ‚@ Є‘А Ad4Є@ @ š|ЄDyaѕ@ @ „&я”ИМч=5oсPЋе`YЖЩоШС0 †\.Уh/LQ*•PЉT­цэ „‡œ~[[[збё†‚Ю ЫЧцАMнv]vкRлоenЊЖ+•JО§Mu~˜ЃЮж ›%ЪoŽk@ bМА5Qл)JЅЉЉЉШШШ@eee“\  ќ§§Шd5ЋJ*++‘––†+WЎ   jЕšFŽа$hлЖ­IЫГГГC‡аЙsg8884њ&Ю ЫЧцВM ]vк’лоe6wлеj5*++ўљЅЅЅ&kЛƒƒбЗo_­ѓУœuЖй,Q~]ѕ`0Уf-gƒŸСŽ—КЂВВWЎ\­­-сттbі ЫВ(**BBB*++1tшPиккBЅR!%%ЇOŸЦˆ#аІMўІŠ@07Ю;‡АА0“щј§ћїqуЦ TVVт‘GiдyЅT*щмА qdYЖYlgSB—`Бmo‰27EлЫЫЫqќјqШхrєюнnnn&i;ЫВ(,,D||}+%“>9Х§ЬВЌV}@ ˜эž]xЁфnиъуMoш“ qyмЭЁ№m t…„„аШЙ\n’s@xЇуІp&CТrЦQŸэ4fi€ЉьjclББ2‰эДЁЖ7E[ еQ_™›jМЦЇ3экЕkЏ“ЦпрёOЄѕEыњЎыЩО.GŽX6./'ЇTТHaЉЈЉђФ‘ †d;Фђ 'іТпЦо7 ѓ Т6IEЉ4D~Љў~ ёчŸтќљѓќ>$ўљ'.\И 5>@ ˜VbЇї_ъ‰‰Љ6ІвЕоR(MМЭъ­„§7цКё$ЇDыGБэЌO–В!Є1y„“ЁЗ]W›ЬйVCm0$ss—ЎH­[Зтѕз_GPP4 }єQœ>}šO7єЖ}у%д[]Oчѕ=A—šИK…аFщВWКœJКpсТŒ5ЊЮ„_j|Ф]іSј]xŒFЃ‘ŒrЫhЬ~њЪ+v(pВл'%П8Bѓ.О IDATDьАвпДД4tщвnnnZП]]]uŽ%@ Mц”^Œ&L˜РgvssCPP"""рььмрЧœ:uJђтlŒS"55Ы–-У7п|cіжХЩ-„Їњђ гЪЪЪАoп>œ?љљљАЖЖFпО}1eЪ~У)aDУ0puuEџў§1oо\Кt ЙЙЙАЗЗGŸ>}0mк4э”ъ„”žщK—Š0цЙrх іяп›7oТббC‡ХмЙsy[`HзšC›bХvKxм;wАcЧФХХЁЂЂ:uТŒ30fЬ“СцvBmџЩ“'%'KR|a>сuУйй=zє@DDџŠVSНэAJП…2rJ:VзЄдму•’’‚ў§ћѓu Џ—ЦŽЇЁыЊ№8ЕZЬЬL ЊЊ 2™ ...hгІ \]]СВ,.\ИРч—ЫхP(pssƒŸŸЌЌЌъє‡Ў‰3‡K—.ёп­­­съъŠŽ;ТккКŽ3„УШ‘#%/т †apётE>ПИБlbЧЅ”l:uтлЉЫaYоCIЪ9ЁЫс#EQQQддTѓчa@@ьээљњш#|ійg€ЃG"66‘‘‘€+VРЯЯ?ў8iПЩЌд ЂОЕТ†t[—Г-::+VЌ@HH>јрјћћЃВВ111XП~=† †E‹х”рєAз&cгЅpша!„……ЁOŸ>ЈЊЊТЎ]ЛАfЭЌ\Йв(]k]lŠq”В™™‰7оxaaaxх•Wрцц†ЄЄ$8pЃGnВIЏБNˆњЄ эДTл…зттb>|kжЌСчŸЎwТfŠы‰.Ю™uэа”N –eQZZЪ/=jˆ#Bпxqz+”5!!ЖЖЖшбЃььь RЉPTT„;wюРее•ЯЫE)ЈеjTTT 77WЏ^EŸ>}`kkЋUП1‘#FŒУ0ЈЎЎFJJ RRRЈЅКЮUq_‹ѓъ;‡ѕЩЦ•;rфHА,ЫП]'99ЙŽlњєX_ФО7`шjЃаI!–_\WUUтуусяя.]К€aмН{ёёёшзЏ ?ŽœSC&“i§::Ш)A „&sJŸІpa‹тHwww,ZДsчЮх9ЅR‰-[ЖрмЙs€qуЦaюмЙќгŽМђЪ+8x№ ъD`œ8q‚ЏCќDGзE=&&†ŸШЈT*DFFт—_~••ІOŸ^ч&-** ЧGYYFމE‹AЉTтХ_ФЮ;сшшШч/))Сœ9sАcЧ8::ђuq“8юџЉSЇ$Йз^{ “&MТИqуј2ѓђђАxёblпОншЙ~§:Оћю;888ЈйXoьиБ;vЌЮЬž=3fЬаšdО№Т ќ›^xсDEE‘SТˆЩЌ№\0t“)ОiъŸј‰—№/''яПџ>VЎ\‰~§њёМBЁР#<‚#F`Щ’%8sц yф“N~ъ‹еЋWѓпэьь0oо<<ѓЬ3FыZsшbSŒЃиvrиН{7&OžŒааPžыж­о}ї]ОЌъъjlлЖЗŸСССuьчЋЏОŠ}ћіЁАА;wЦkЏН†€€0 ƒG}TgК.ћЗpсB( ^юoП§ЇNByy9žyцL›6 =і`тФ‰€уЧCъZСMl„mчњ‘ћэфф„АА0|ИжјъsnˆЃ.ЌЌЌДdЋЈЈ@ZZŠŠŠј Лtщ+++0 Sg‰ з–QЃFёћ6ЄІІЂММжжж№її‡ЏЏ/_я;w›› ЕZ wwwtъдIв#хфрžž___јљљё\лЖmЁRЉžžŽnнКё‘/Т|п1BвQG ‚YюйХ7.Т ЗЎ ЎФўДД4lмИ_}ѕ’““ЅUЩЕkзАaУœ8q‚ПБ:qтг(,пађ •J…јјx>Д5** иМy36nмˆ+WЎhх?tштттАvэZьоН*• Лvэ‚““FЭ‡’s8zє(ЦGGG­КИ'ШЇNвњ.цfЮœ‰={іhѕгž={Ъ;ŒAП~§№йgŸсЦЈЊЊ2˜Ÿ‹”иЛw/y>55Uыw`` вввHѓ €Л9ORЙOvv6цЭ›‡yѓцaюмɘ;w.џћх—_FVV–ЮѓFX6Ї§њѕCbb"ž}іYLœ8п|ѓ F ;;;,ZД{іьЉ3й6ІOŸŽЇžz ѓцЭУсУ‡ѕОръеЋшмЙГбКжКиу(e;Йў жЛёноН{‘ššŠ/Пќ_~љ%’““Бwя^­6\ЙrŸ~њ):„!C†`§њѕZщббб’щ,Ыђія“O>С7п|Ул?Nž§ћїуњѕыјјуБsчN~Ю qќјqўЛ”З]jЂ]\\ŒяОћzeтАjе*Ьš5 GŽСКuы№їпKЖgзЎ]PЉTјц›oРВ,яр>qтŽ?^G]2ыёuN|qqqXНz5vьиСї‡ЎёкЁСХХЗoпFqq1я8я!!(--хг333QTT„оН{cрР`YiiiuњK_ЄЫВИџ>МММъ<рёѕѕХ§ћї€ж5jFŽЩ;!†ЮчŽЅH @ 4ЉSBИCЗдx~~>"##љ‹%œ9s№ђђ‚ЇЇ'.\ˆГgЯjwwwƒЛu‹eКоМyэлЗчЃЮœ9ƒ Ргг^^^XИpЁVўcЧŽaётХ№ѕѕ…ЃЃ#цЯŸѓчЯBCCёУ?№7ЈjЕ?§єІM›&Y—1 ‚~љх5!мббб˜2eJНц?џљкЕk‡/ОјЁЁЁxюЙчАyѓf”••iх AHH&L˜€3fршбЃXМx1Ÿ^QQЁх qpp@yy9iОЁCТ*>|}}ёТ /РЩЩ AAA2d‚‚‚рфф„чŸmкДбЉыBНО|љ2џdї“O>С”)SpфШ­1“šМ›у&ёдЉS8x№ >Œ7п|Пўњ+6mк$™їіэлјђЫ/ЕЮ7CКжКиу(Д[ТOqq1мммєкМГgЯ"""‚*Н`Сœ9sF+Я’%Kрээ [[[„……сіэлZmXВd ||| P(јt.эиБcXДh|||ррр€yѓцё;эsр Рззxљх—zK‰АНRm€Ч{ =іТТТ№ѓЯ?уwоЫВ8~ќ8/“ЃЃ#^~љe^&Юй“ŸŸТТBx{{cщвЅ’эqttФмЙsy{ЎЋŸы#ГЎk”pœ<<<Ёu‹ŒŒDпО}akk Мјт‹ZŽю:ХГ№М‘šјыs˜П?~ .фЧoюмЙИpс‚ЮЖ‹мЇkзЎP(HNNЦќшшhЄЄЄшм+E(‡Mў”š8ыыуЊЊ*ЄЄЄдй`‘лcBзuъд ЖЖЖЩdhлЖ-}4tŸЁkП CВБ,‹~§њСйй У@.—ЃC‡(,,”t@H9щИх*еееАББAчЮљКrssбЉS'иии@.—Ѓ}ћіИwяžQ}+LWЉT|ЗЖЖ†RЉ4Јgтў Ї@ Ь ~љ†Z­ЎѓФ‹:ыъъŠ`ўќљќХЊ  ОООќU___фччk]ш<==ыМъJќ:/юПPЉ aLLŒжљљљhгІ џ[Ўд,˜3gN›hзЎpўќyуЗп~CЏ^Нрээ-Y—Б˜9s&ЖnнŠрр`ькЕ ссс|8­••”J%УРЁККZыi‡НН=žўy<џќѓќг’`еЊUќ~n"ЩЁЈЈџћпџАqуF|ђЩ'jТьЙЭЌ€š­„]tOfЅn.…ЁЩУ† У7’’‚6mк ;;нЛwЧ№сУыМтNј]Јзїюнуѕ-%%O>љ$ ž|ђIў‰wVV<<<Ью”р`mmnнКсwоСќљѓЁ•‡?ўoП§ЖVЄ„!]k]lŠqлNЎl'''о>щкП  >>>|™ОООZЫм8Л+œTTUUiйOWWWў7—.œфМєвKuьŸаб, л~]Ы„mжuн8zє(/УКuыpыж-x{{ы•‰eY,_Оп~ћ-vяо '''DDD`№рСzл#”S|­1$ГxЃDЉ7pч)—оІM№uнКu лЗoЧэлЗљ'п2™ŒOЯЯЯ‡жuRзuаPп ѓцццbоМy:ћCЊэтхмфК}ћіhпО=я@ЬЬЬDBBzѕъЅїќЉЌЌ„ЕЕЕVyRK$Єоhqљђe^o]]]љh666’ї B[ЅЋнRњ.Œ‘J+%У0(--EZZЪЪЪјНIЄоbЂkюнЛ###щщщАВВBЧŽсцц†aPUU…ПўњЋЮ1R§ЏK~с}†\.зJЏЊЊт<Кф:Єъ#СЌN }Џ§щЇŸъ„? ї™ШЪЪB‡дDxxxHоPIнъ Бе5ёŠХЫ/ПЬџієєDvv6_VV–V~oooЌZЕ >>>’ŠoОљССС8|ј0–,YЂГ.c7Г>|8vюм‰mлЖсцЭ›xы­ЗДœ&IIIшоНЛж1IIIќфTЊŽ€€DDD`жЌY:гХХ3fЬ@xx8Я !!C† PГЁзW§“Yёў*R7лГgЯЦ|€ЄЄ$иллcіьй:ŸЪKщЕЋЋ+?q Р‰'№јуѓЫŠвггБfЭ­НЬэ”ъиyvюм9|§ѕзXО|y6ЄkЭЁ‹M1ŽR{J0 ƒ~§њсЗп~CXXX№jюЗи~r(]OШuMRФп99МННБrхJоё!.ггг“Џ_пk!ХѕшкŸAjc>___Мљц›XКt) ooo|№СќФ\8 g;wЦВeЫРВ,Пt…[*СЕGh+ХoWбѕфз˜}0Єі`YюююШЮЮFћіэСВlqт–œМѓЮ;ppp@YYТУУљ6yxx№Ч ЏSњ–GщsRprz{{у§їпз9ОRуХ…ћылрдЮЮˆ‰‰бљћž——ЧПБСаf’т§F†jp‚-51жзV)•И,Љхтz‡ VчЯВ,Пќ"00пђЪ•+Z§+<Ф‘ шж­€šх'ЗoпцпАФm6*о4TЌ—К–opЧИИИ //экЕгВyyyyМSXзЙ-хиЁH @ ˜}ю%х”аЦШнФqџ5 ‚ƒƒёѕз_#//yyyˆŒŒЌГŽZx ЫВpvvFzzКdˆ­>ЇDii)юмЙƒ=z№мјёу‰ќќ|~y‰“&MТКuыžž•J…””|јс‡|њ AƒP^^Ž#GŽРЮЮ]КtбY'ЗRУ0˜9s&іяпYГfiНFьџўяџАnн:\Лv ххх(//G\\ж­[‡Щ“'ѓљ^§uќњыЏ(,,„JЅBNNЖmл†оН{ыЬттb8p:uтЙьмЙ999ШЩЩСЮ;љ с†'ГBН•:Ќ­­ђђrDDDРккZo~ё qPPNŸ> xу7p№рALš4 %%%pvvЦš5k0{іl­ЭЭu“јбG!55•п mэкЕZЋяЊUЋšš ЅR FЃ5†O<ёжЏ_єєt(•J$''cѕъе’2‹хж%Га9ЁKWЦŒƒM›6сюнЛZуФЅWVVBЁPРжжЙЙЙZo^'…ЧK­”,RŽNОЧ6lрЧ755kжЌб9^тs‚уnоМ‰ќќ|(•J~ЩBZZšжы~Х’ВВ2ЄІІђ“_ЉsOъ<”ŠвхˆбчдхАу`mmЪЪJЩК––Hе#жkю \dCrrВVйШШШ€Z­Fee%’’’ДвQQQ!щѓёёARRŸ^VV†[ЗnѕJSa_Дmл999ШЪЪ‚RЉDuu5ВВВ џ:чЉЎў%Ї@ š ZЫ7ФыBu==~ЧŽ;јƒбЃG#,,LђЉ‡iгІсЭ7пDYYŽ9RgO a˜Љ§ѕzїю­5ЩŸ9s&Оњъ+Ь›7VVV Cll,Ÿ>eЪ0 ƒхЫ—#''ўўўxс…ДЪ ХgŸ}†UЋVщ­ыщЇŸЦЋЏОŠввR~й„Ч]ФлЖmЫя t’( lкД ™™™ќ DxxИжnыЯ>ћ,Оџў{Ќ_ПеееpwwЧ!C№яџЛЮDƒ““zїю­•чЩ'ŸDvv6‚џф“Oђ;ыtƒлФPјФKќ”г[Ќ^НŽŽŽ’Ёутs@ИљтьйГБpсB <нЛwзкаRЌЇbЧ—„њ |+Œ1щЃFТЊUЋpчЮxyy!88X+2‡л_B>џУ?РЮЮЮ Ў5‡.6Х8Šm'___Ќ\ЙЛwяЦО}ћPUU…Ž;"44”Я†]Лvс_џњ—–§дѕфWŠг—ўдSOЈйˆ177mлЖхЃ@`ъдЉЈЈЈРлoПЪЪJܘ1ƒ?vкДixы­ЗPVV†яПџ^Ыž эДИэтPyŽ›8q"vэкХПЎX,“№щљЪ•+љЩюыЏПЮЇMš4 Уш}њдY ЎGпkwqLдч7???ФЧЧC­VcшаЁFЩf(JCЃб sчЮHKKУ­[З`cc???­%W:uBrr2233ammЖmлђћB€››PUUХ?.пРЇ+ јћћз‘УPпкййЁgЯžHOOЧ;wј(Нzѕтпr#u?ЇЋf­[Зђ7Ёт‹ŸЁїƒыКсаѕ[ъfпССkжЌСмЙsсююŽЃG"88NNN€Я?џэлЗЧдЉSЭо1­ыПџ§/ЦЏѕjPBЫA||\ЈyЕнЧŒАА0<њшЃ№ёёAaa!Nœ8Пџў}є‘VхххuЮ BѓcFF†–э4жFжїцП>}ЁљК&^ЦкoЁ yнhШ5C_ћъ#Ÿдw}2?LухююŽŸўУ‡GNNŽС} Є–MH-ы/ЩєѕѕХхЫ—1uъT”——Kжilџъкг@JC§iH6cЧTjпCЏ2—z%ЋјЗ1z`lпЃЏ†њNм_@ ˜/lMDТЙНв{J##ФZ}дњ8&tнєы[ОSяЗX4 ­‹eY;v ЙЙЙ&MkЁаЕОsAŸУM8ЉыѕшбЃ€нЛwcётХ(,,„““њіэ‹3fш”`у(Жbћ&e3Ѕђшš$шK3їdWWЉ§Єіv0іšaш:b Ч„.™ЖёкЉуЅ&Ўњb‡”’ЊSЊЉЈёЄ]|оълoBЇя• њЦTмV}\ъkЇОВŒбC}Ый=Cћuшr0‰ї‡Ёы @ Ь о)!^ƒЊыІРи(‰њо4r2Јеj>lU|!фоПоhh]&L€–-[F!-|2+uгXŸ'bR7ыК^ЏжЎ];МѓЮ;ѕ–аќу(e;u•ЃkђmЊ'юф3!лiЉЖык7 Ё c'œКЪ1Fц‡eМФ{(шjЗxb*,OМЁЈ!ƒTтћ ЉОж5йзЏЫЙbЬІ™КњCъ8юXс›>Єl‰ЎЗWHmШ*оҘ{*}ђKE^ЧS'еwєі @ 4ЉS‚aикк";;ЛNHИОЉу”#++ |™VVV zкдœЎп'ДьЩЌдDЫиuвКєНЊЊŠ=lЃNмxnДжqдg;@Zв$зФvкPлѕ]?ълОњ„ъ7Fцж:^ У@ЁP№Ы™єMъ…ёЄ\пцˆ У ММœнЏЎ:u9;цњ–BдW6)Šx"ohѓN}y„›hJН9І!ђыŠМŠ(1ДЇ‡И>@ Ью”АГГCЏ^Нpюм9<љф“ѕ*Фи=% сЬ™3шлЗ/ьььР0 œqџў}~pЁ)'ГХХХѕж}C:_XXOOЯFЩFч†ecclЇ)ьЌ)'АѕЕгLжіњю)a 2ЗДё’ЫхќІ–К&šњžњыШЪЪBЧŽРЈ:›Ђ+›”УƒsPˆ7†tBŸƒЧTђ‘dЬђ[a}@ ˜ rџОСЫ=њ |XX[[уњѕыHJJ‚ЋЋЋбоqЉзšе'їюнЛ8uъЊЊЊ0rфHДiг2™ 666HHH€ƒƒяЈ šEEEFE4дGчЋЋЋ!—ЫбЖmлFЫGч†хŒЃMƒmg}'TЦ~ЬQЗ”V(&kЛЉлг2ЗДёВВВ‚ђђђ T*aeeeRлСВ,*** —ЫбЇO0 ™Lfж:›SЖЦДЃОЧ6uпJеG ‚Љё}l RуМ}cчмn(++Cff&nоМ‰˜˜мПпь‚Шd2ИККbР€шбЃќ§§срр цЕmїюнCbbЂQO; SЁsчЮ&-ЯккЎЎЎpss3ЩЭ–5ŽЭa;›њьДЅЖН%Ъмmчœ )))Иsч*++MR'З” ]ЛvмИбдuЖй,Q~}ѕ`JpoпаrJ€RЉDAAJJJ RЉšD+++899СУУжжж4:„f‡Z­†\.ЇŽ q4Эa;›њьДЅЖН%ЪLзU@ ›SТJъFЦнн...MО‘žRЉ„RЉl‘Ъ0 фr9Ќ­­ЭіTAЉTBЅR=Д2 ++Ћ&ЙСnm вѓыŽЕЕ5|}}сыыл"њƒ@ ]`YIIIuј;wюPчТЏЦ!Єдj5ЊЊЊ––Ц‡вџЦAЁPРппАЗЗ7љMee%вввpхЪ@­VЗј>3ДѓНюююшпП?:tш+++RКzшЮŸ"Њ0 ЩUЩPБ-џЉАЛТН^љ;иt@˜S‚‚HwjQ]§ЛIЪ9y2& 4™\–\žЉeГБfВqАєЖZry–<tNа9б\ч„> 6Œ.ЂЁбј§їіžП;gYUUUˆ‰‰BЁРаЁCсььLOдŒЫВ())С?џќƒ˜˜Œ=кЄх+•JЄЇЇуЬ™31bПhKЧ?ќ€—^zЩЈМјэЗп`mmіэл“тЉ;W*ЎруЛcчS Ÿ IDATЌЯXŒЖ гђuчћ;пcoЧНFхUБ*\ЏИŽw7ТЦк­’bа‚‚SЇN5Щё­ЋЅї•ЅззЧЬћЁЉћдJ8yЙsчlmmЄ5с&†““Œшшh$''›tƒ=•J…+WЎ`фШ‘ l5}&“ЩД–z•Z›6m0rфH\Нz•œѕаo‹ОEАo0z:їl5э’3rTЃjдD БаЏ;нэЛcžз<КэЩ)A @xИ`ЩЮў‘ЉZ­FfffЋšє6Кuы†єєt“–ЩВ,юнЛз"жЊзKљd2ЈеjЈT*(•JЈеjўЃRЉД~s{"јњњЂЈЈˆ­К“V?;ПVЇ;UЈBЅФ_*$љ@Л@dЊ3I)@0СфІ5!55Я=їЩи Ч3$$„џL›6 яОћ.233Mv˜ЋlsŒЛ)Ѓ(Lн­хеееpvv&MnœœœP]]m–IXkXВ!n“8R‚[.Єы;-'j@?3ВVБdC.RBU( ,hы rFЎ7Ђ‚@ ТУ‰ииX 4ˆdlЅуЩMЦ‹‹‹qј№aЌYГŸўЙI'њц(Л5ЛЁvX‰'‰м$а00 c–‰sksHpmвh4аh4`†w>p20 F™L–e[ЅsЦьxYы{ЕЉœ‘Ѓ UPB Œ–ГЁВЂ ;…–C‚ kXCЮаk^ @0'”J%Жlй‚sчЮ‚ƒƒ1oо<ў XиО};Ў^Н ЕZ`щвЅpqqPГє422Пќђ ЌЌЌ0}њt­ђY–ETTŽ?ŽВВ2Œ9‹-‚BЁ0ъx)ФФФрёЧчџєгOиЗo бЙsgМікk0Њ}!!!XВd іяпќќ|јћћуеW_EVVЂЂЂpїю]tюмoОљ&кЕkgT›Ф2ЊеjьйГ'OžDyy9fЭšЅеN}ђK…№ ЙМђЪ+8tшђѓѓqђфЩзїкkЏaвЄI7nŸ7//‹/ЦіэлQXXЈWЄd1f|ХуЩСййaaa8pр€Q§‚ЙsчтрСƒPЋе7n"""$7M—mŒЎSОА-†tОћю;х Чйуpыж-,[Ж сссјъЋЏјВ8ЇŒЁqvppа9&ќМАЅL|ЙЩО№c.фффрЛяОУЖmл$7‡ЁЕ:%„Ы54 дj5№кkЏ!!!jЕ,Ыj-ч ЇD=ћ™i}§Х9%ЊQЭ;'”P"6&“GOFlL,Я ѓ‘S‚@ ѓ"** iiiиИq#6nмˆ””DEEёщ|№&OžŒН{ї"** žžžZїиQQQШШШРцЭ›БqуF\ЙrEЋќC‡!..kзЎХюнЛЁRЉАkз.ЃCЅR!>>§ћїчЙшшh|њщЇ8tш† ‚ѕызн>ју?№ёЧу№сУ?~<ўѓŸџрТ… XЕj:„сУ‡k•iЈMbПћю;\П~Ÿ|ђ vяоЛwяjеЏO~cpэк5lиА'OžlT}3gЮФž={ДxяйГЁЁЁppp0Ј RВ_ЉёфPRR‚§ћїЃcЧŽFѕ;Pѓ„?22›7oFFFію•оh]\Ж1КnЈ|q[Œб=cх5Іэ@Э2о~ћm,^МSЇNхЇNтПg}cЂз)СВlƒ?цBSж‘#GbЮœ9`YЖЮoCэojЇDQQfЮœYg}Oii)жЌYƒааPLŸ>п|ѓMНв…ыЄИЉл$о;"11›7o†——6oоŒФФФ:{MДTЇ„ЉпЪRŸ М1'b№ŸGўƒPЛP<чїΘћJ JДЮЗџofИЭРгюOcзлЛДЮ9CщMбІjСŸJќѓо_њ>ќкћс§ЅяуЏ˜П „R+9%@0/Юœ9ƒ РЫЫ ^^^XИp!Юž=ЫЇoкД §ћї‡­­-0gЮDGGз9огг“?^ˆcЧŽaётХ№ѕѕ…ЃЃ#цЯŸѓчЯ}М7oоDћіэсшшШsK–, ТТТpћіmЃлЏНіќќќ P(Šђђrќы_џB›6mx.!!Сш6‰eќљчŸБhб"јљљСббZѕы“п,XАќя†ж;;;ќђЫ/€ЬЬLDGGcЪ”)Fщ‚”,†ЦWj<ЙyLhh(Ž?Žwп}зЈ~чъїєє„ЇЇ'"""pњєiЩљ’ИьњДOWљтЖЃ{†ф5Vч€š7%Ў_П~ј!FŒЁS_ Гд˜ˆQgљ†1ў;vРееЁЁЁ’^—ћїяcЮœ9F)§іэлЮлT(,,D›6m$Kѕ8jƒ›4єбGАББСoМЁ•ўЩ'Ÿ@ЅR!''cЦŒСДiгДњяќљѓu<šњ&тп|ѓ &Mš„элЗkё‘‘‘PЉTМGnуЦјљчŸ1qтDЃв9/˜ЙР-прњ499™ т<А_~љ%,XР{›sљFJJ ў§яуЛяОkаётН>3f ЌЌЌ —Ы!—Ыљя2™ ………|—Б­яз}ЉoLХGџ•х•јvйЗXїќ:Мїг{€›OръщЋј"і‹]žў|;ћbтм‰FЅ›мF—мл7ўŽљяЯP‘^xwўЛxoг{ш1Ј@ ŠВ!См(((аКіѓѓC~~>џ;11[ЖlСэлЗQZZZч^%??ПЮёBфххе™;яХ /FLLLЕююююќw[[[TUUн>Љу •iЈMbѓѓѓѕЖK_]ЦРлл[ыwcъ›9s&ЖnнŠрр`ькЕ ссс|Ÿв]Вш_ЉёљфмО}>>>ћ€СБжUЖБэгWОИ-ЦшžЁtcu<ˆ &ѕ" }у,5&њ дЪЪ щщщZЏfLKK“\cгГLУдOhЋЋЋЕњBј[ИљЂT§мОœ—tўќљ8}њ4}єQ^qуууБyѓf$%%сНїоУ”)S —ЫЁRЉАoп>ЌXБТш~HOOGtt4ЖlйRЧ)ёћяПcлЖmpuu,\И+VЌр†в›bbЩэ)XЛv­V[Y–еЪcŒžš WЎ\С!CšЅюп~ћMRя?ўјc 0@?K,пјрфќw…Ѓs>™ƒч§ŸчЙ3ЛЮрй•ЯТЇcQ}vхГиџс~ощ`(нм3r(Ё„ *Ш Cр @ьо dќhР‚… *h Ќ(R‚@ 3УУУйййшаЁ ++ žžž|њ‡~ˆйГgcйВeppp@YY™жƒNOOЯ:Ч‹'ЉЋV­т'~b:^ŒииXМќђЫ&k_C`ЈMbНММ••ХяQиии ЊЊŠŸ0оЛwЯрМЃ1ѕ >;wюФЖmлpѓцMМѕж[Fы‚”,†ЦWзx2 ???~)Т€ і;­КВГГ%ЧZЊl{{{ЃкЇЏ|q[Œб=cф5FчргO?ХoМGGG„‡‡ы—ъgcЮ1™БqZŸ>}p§њu-юњѕышлЗЏЇVЋёЧ`яоНиЛw/ўјуЈе5O7ЙIєіэлБ}ћv~ЏFУ…пџ?Жmл†јјxьлЗлЖmУ0ШЮЮЦ‘#GАkз.ьпП‰‰‰:лR™ФПыгW …+VЌР† žžŽєєtlмИ+WЎ„­­-zіь‰.]Кh­ЭщвЅ zєшQ'д_зD|гІMxўљчacccpм†AjjjНвЇOŸŽЇžz ѓцЭУсУ‡ЕœІpJpЫ7Иˆ ю?їђRЫ7FяПџссс?~<ž{ю9\Лv ЧЧ3Я<ƒGyЏМђ вввu PГЌ'((ЈQѕŠe уѓ&''зЋџжЏ_.]Кдq"‰uט‰xмй8tьї` \њttмџн5Ј+вnЄоN nЏnљ† *ЈЁ†ЈЁ† *­хДЇ@ цЧИqу№еW_сюнЛИ{ї.6nмЈЕ^ee%ьээЁP(››‹Я>ћLыјёуЧ#22љљљШЯЯGddЄVњЄI“Аnн:ЄЇЇCЅR!%%~јЁбЧ QZZŠ;wю G&k_C ЏMR2Nœ8_~љ%ВГГQZZЊЗbtэк@ee%rrrŒкoЂ1ѕ1 ƒ™3gbџў§˜5k–жlCК }уkЬxz{{Ѓwяо8{іЌA]PЇЎёуЧUЖБэгUОT[Œб=cх5Іэ^^^XЗnNœ8ЁЕ7…ГГ3вггgcЯ1Нoп?БЂC‡ˆ‰‰Ann.МНН‘““ƒЪЪJ>r‚Ы‡ТТBLž<@ЭпИИ8 8sцЬбZОСsѕъе:Ч\НzдђMš4 ііі`YПўњ+† †vэкЁЂЂWЏ^EЗnнЄ'`Е2Mš4 @MX}\\ €_|;vьР‹/ОШчўж•!ф…“ц:`сТ…јяџ XМx1Пг.Ь›7яПџ>&L˜€Н{їbљђх:'№bФФФ ИИXЇ!2d"##ёЪ+Џ№JZQQat:ч,Q*•HIIСW_}…œœœ:ыШу”рœм[7„)Т( ЮIС0LОИtщ>ћь3xxxрРxѓЭ71pр@|њщЇpwwЧАvэZlиАЁСЧ(•J\Лv Ы–-kTНBќљчŸиАa\]]Бoп>Ќ]Л–_Оb_§5\]]кQкаF—I%сыE_cйкVQZ{{ўЗƒЋ*ў?{gU}юџї™-™ьЫLі•U$(Ие+‹…кV{] Zа+"\ ˆTаЖкпUPAмИЕP)^ZЅкіZ+T‹Х[}eй—™dВM’YЮљ§1™“™Щ$3!|п8Џ™œх{Олчљœчћ< ЭaяПЂ„Cqр–мhб"#ЃХ“ђSƒF&|џi­%@ ш!‚ХлВe SІLaеЊUъZџбЃG3yђdѕ˜ №Цo№ќѓЯ“””ФЄI“ќ–ИNž<™+V0cЦ t:“&MbяоНъў;яМI’XИp!dee1uъдАЯїeпО}tЫг;TћЮ†ЎкЌŽ“&MЂЙЙ™ аммЬ§їпіЕ~іГŸБlй2жЏ_Obb"їо{/лЗoяђœsЙžї7ff&&L№лj.ЃЋё w<№ƒАzѕj–/_ох\1bГfЭТхr1vьиcэ-ћілoЋ}•Ќ-сЬНpыъ>ђ’œœЬ+ЏМТO<лэцўћячОћюcоМy466њ-ѕ6ЮсŽIЗ–oЊ!:tˆ[oН•ƒ2lиА'OžфЛп§.бббŒ5ŠПџ§я~C#щфIЦпх9ЃF"**ЪЏ>vЛ––bbbИљц›У.фШ‘|ійg!нрЛsуљ2aТ6nмˆVЋхж[oѕлзЏ_? РвЅK8p §њѕS…’Pcѓц›oђшЃvъЕ1{іl^§uzш!єz=wнuћїя{ПН^Я AƒxъЉЇ˜9sцy%М1M|S„zL%~ё‹_Јp&MšФ[oНХO<ЁЎo›4iR‡hВн=чыЏП&77з/@Ый\з—Ч\=іОћюуwо ЋпжЌYCkkЋ*&Юмёrhы!^}рUїqњ яЇn7ЦБзй‰3ХаdkТk {џ…%мИq+'‰і{РЛlУзkТ{Bˆ@ œ;]Х3 Ь™3Їг“7мpC‡хАо€xопѓцЭcоМyъЖ@зё;яМгяœРп­]яЫоН{ƒЦшЊНЁкъќ`лКjSА:ъt:ІM›4._Јkхххё›пќЦoПїAmgчŸЫѕМ?јрƒhЕкnЭ…`ew5ОсŽчЕз^Ћзе\Иїо{Йїо{УkпВCЕЏЋђƒЕ%мЙЌZіzэO,ўћbВ‡dwиымЪкџЗ–ь+<ћжўПЕќ`жТоОбj<.edtŠŽу{ŽѓлY—ЩЬ]9—~зіSbj5ТSB ‡?ќсЂŽч‘ &ššЪгO?н­пЎ—c_яЖ<ўјуܘ1у‚sИэшrљFАи 6ŒaУ†uК???ŸЏОњJ]NёеW_ЉKРѓ„иfГЉx–4tuN0ЖnнЪ№сУ‰‹‹ Ygoљ7нtрYлЊќPbDА~liiсщЇŸVsƒgзгO?Э[oНЅFН ЦП§лПљЙсŸЭ<|јpцЮKcc#<ћьГ~ё,BэПљц›yс…(..Цl63fЬІL™вЃЂ„wY†FЃ!''‡|ѕызKCC?љЩOTAтb‰ 1tша‹іХДyѓf>ћь3^zщЅЎoЁцNАўњн‚п0ыJџЅ84|@dL$ЗЭМŠSљЄ˜(C”8†|o+zка?Ђ„$IФХХaГйTЕЎЏˆ.—ЋЫљl||гХ BЯ ]uЎ:тuё}G”аhiUкSЈКёdqё ^AТяYKš.ML @ Ю‘ёуЧѓгŸў”M›6aБXиМy3%%%М§ільпПЗлЭˆ#xьБЧˆїќўиЗooНѕEEE$&&2eЪОџ§яЋхMŸ>>јЗлЭиБc™5k–_<Џїо{Џг§ŠЂАnн:>љфšššИщІ›xф‘Gд”эСъИ­  €;юИƒБcЧЊзЌЊЊbюмЙМ§ілDGGwй]еП+зЗлЭ;яМУцЭ›БлэL™2Eѕа=—> е'рIзш=о—ИИ8&MšФћяПЏnыыуы‹ЩdbюмЙ<ќ№У~cьУ‹9f}Џёb0hmm=/†w^—ЪЕ‚бккŠС`шYхHЇЃџўœ:uŠъъjеГ /ˆ^O п—лэV_Ол%IТхru;D|юŒзЇаQˆХiщ`Ј_ВЂ„7ІDРЫЁ8hUZq(ПэzECvp‹ў1)@ ш<Шoћ[6oо РsЯ=Ч~є#жЏ_ЯКuы0™LЌ^НZ=~щвЅLž<™>њˆeЫ–ёЭ7пј•Зwя^VЎ\Щ[oНEII ызЏ{џІM›8pрЏМђ kзЎХхrёћпџОЫњn›}:ОЖ†еjХfГ‘’’Тќљѓ;”g2™˜5kЯ<ѓ <№@XћџњзПВhб"вв<‘3gЮdюмЙЬœ9ГгњnЛюКы0ќуџ`мИq”––В{їnцЬ™vtUџЮјєгOYДhъЙ=бЇЁњфШ‘#фффЃžуW!))‰пќц7—хјZ­Vо|ѓMПЅ-НaЬ. QBЏз‹еjХjЕ‡^ЏпИaтt:ЉЏЏG’Єѓ"ъшt:RRRHIIщ3}цvЛбjХџѓ~“ыt aCtCФм@а#ў&=vьЋV­тФ‰466ўKУ-ZФЛяОЫкЕk‰eіьй~™№вггеЯX,ПђЛк_UUХДiгќŽ\>ь7tрЖЩ“'ѓЛп§Ž1cЦ№ћпџžџјЧDDD„еЁъп‹E5n9—> е'{іьщ`toйВEQ(//чх—_цФ‰ЄІІ^6уыeИікk§Ф†о0fОЂQ_ МЉѓmАбh$++ ›ЭFmmmаѕў‚Ю ПјјxuН 4ТЈˆЙ#СЅI QИxёbюПџ~ž~њiЂЃЃijjтюЛяVї8… Ђ( ;wюфеW_ѕ &^^^NnnЎњйћд<œ§)))М№Т ЊN}ƒmЛёЦYГf ЋWЏцШ‘#ќќч?Л?BеП3Ьf3eeeфххuиw.}ЊOіюнЫўчэ“ŒŒ ž|ђIцЮЫˆ#ˆŠŠК,Ц7\CџbY_ЮЂ 6p‰‰‰ТE^ @ „EKK QQQDFFRYYЩЊUЋќі/YВ„)SІЈ)& Ц•+WђјуЋŸЧіў;юИƒeЫ–1gЮ222(..fнКuќъWПъЖа2yђd/^Ьќљѓ§1†"T§;у{пћЏПў: , 66–ЕkзЊOшЯЅOЛъ“ЦЦFŠ‹‹2Єs/к”” јќѓЯЙ§іл/ћёНиcжзб‰ЏP@ @p.,XА€7оxƒчŸžЄЄ$&MšФЖmлд§7оx#‹-ЂВВ’œœ~љЫ_њ?bФfЭš…ЫхbьиБLž<9ь§Tg* IDATwоy'’$БpсB***ШЪЪbъдЉgеFCff&&LшжyЁъп“&MЂЙЙ™ аммЬ§їпп#}кUŸьлЗ‚‚‚Fљ~№VЏ^ЭэЗп~йяХГОŽ4jЪBe№˜ŸАfњ ёm*—УП$сpьш‘В6oоЫ„ зєXнzsy=]7ƒaTCooko.Џ7ƒИ'Ф=qБю EQ8yђd‡}ХХХŒ5ЊЧџПдUЪЬ Э§з1nм8Пд‘—R§УсЕз^#''‡ЛюКы‚\яR_СљaЧŽЌ9‘Сб­ылS‚ @ СхˆЂ(|ќёЧTVV2fܘ>нж={іpЭ5зˆёєФђ @ @pY3aТRSSyњщЇ;ФC№ЭzШЅ|№јƒ_AЏтВ%Eщ•ѕКoŽž‹ЫЅХ@а—ш †}WuUПОœсr_СХЇO/пPY–§^ŠЂєЪWgѕМ”ћОЋі{ЙнюnПB•XKЕ/е9,рђЃ+Яб7‚@њЄЇDgFhЈП/O—Н+Š‚$Iъ{o} нYŸОwі9и„—Ўђћю і9иq•yБћ4p_ ѓ7p›ЗŽцМїе…ш›PѓK @аw сa!D‰Г#:„еjэU\w ŸЄЄ$ zсг™АLŒg[WŸЛk†ѓю+№јО{ХŸ‹йзОm—e™У‡_’sилwIII 6 I’eЙЧФЕPsьBˆЭ-!P@ ПЫЭАѕѕ.lЋЂ(Ќ^Нš?ў€лoПiгІЉП—vюмЩ† јілo‰хКыЎcњєщ$&&†U~Јѓƒy>„;BЂФY о—еjE‘[Arћ(—‚Q'Ё(`Е:Q”Ё(Šтї”љB<]}С–F„каккŠлэЦщtтrЙpЙ\ИнnѕГя6­V‹NЇS_Z­VнІзыбh4 єz}—тCЈmл/–HслWееЊЊ›§gmo&књI+Е‹+’$Ёбhдё?лОєž/ЫВњЗїГяЖюˆ.—+dŽюЎDˆЎц‘@ Сх€зx&|ќёЧьнЛ—•+W№ьГЯ’‘‘СїПџ}оџ}юЙчЎОњj4 ќуYВd /ПќrXхwч|%.š8qѓwF@7јоaЫЕ3_ўk/ŠЂрvЛбh4ШВ|A…‰`OЂ}ОР8ОЂїНЉЉ‰ЦЦFѕНББЛнNss3F}iЕZ$IBЋеЂбh$ Nч'(Š‚ЫхRЫvЛнjџјЦ00DEEMLL бббъЫ[Жз@ііЁяv_ЃвлпСDŠѓбџСњUQd`р kкДE}яbZЛ&!qъФ^u\|чp иs6‚„oќŠІІ&Юœ9C]]:УA–eЊЊЊp8˜’MDEEuћ~5$''“››лa.љЮ1@ њуЧgњєщ|№СИнnЦŽЫЌYГ‚ §%%%М§ільпПЗлЭˆ#xьБЧˆWLяЛзxT…uыжёЩ'ŸаддФM7нФ#єQ"ИAЇ2Вьюt~o%EAЁнрї5ъЮ—ALŒшЌ_}?;N, VЋ‹Х‚нnЇЕЕƒС@DDƒƒС@tt4‰‰‰DDD еj{М nЗ›жжV­­­444ЈŸ‡Z‡ффd’’’HNNЦ`0t0"НŸ}—tцMбS"Q`ПћŠTс9@}яЅš„G/‘Ъ‰'иКu+ПљЭoќ<<КjзgŸ}ЦsЯ=‡йl`Юœ9<ѓЬ3~ЂФьйГUA"\>џќs/^Ќž7kж,П>њєгOYДhъ~/ЁъєйgŸёьГЯЊmš3g3fЬш‘О‡ццfП?бббиэіЧyНIxэЕзК}ЮЮї BNЇ“гЇOГbХ ***ќњ0\}єQ’’’˜4i’ŸGFЈ~дjЕX­Vl6)))ЬŸ?_|‰є%Q"˜aэ&h3bкŸД*mVœЧ оћМЙДЄ’S…Ѕ ьŸMZКљsm.яrЛБ++э˜ЏСыmпЙП]‰Oъ(--ЅЊЊŠккZt:бббFВГГЛeФ]L"""ˆˆˆ 66жяKВББ‘’’Ž=ŠЫх"!!“ЩDff&111~KMB‰чВФ#xZMХk‘ћŒ›м.J\РP)55XЊKHIЭ%!Сь?i›Ф H’oеE _/‰pчБяѕ .—‹ттbbccЛ-H”••бам€Љж/ A‡B5vk3ХХХфффtл]1::šъъj233=_Њ:н9-UЙPlоМЗW–елЫmmх‰Ж^.х…"==]§œ‘‘Хb zмБcЧXЕj'Nœ ББ•ЋЊЊŠiгІљџfѓџЉЁЮMLLфЛп§.яМѓ3gЮьрmйUЛЌVkШvЇЄЄtЛ/­VЋjЬжРbБЈ‚DАsЛЊ“ХbщАПЇњ:ŒF#MMMФЧЧаддє!т–-[Алэ|№СМђЪ+,[ЖЌ[з uО^Џgа A<ѕдSЬœ9ѓЌD Џ сЕ-Z[[УюЧE‹ёюЛяВvэZbcc™={67мpƒP#њŠ(hlћЙОуё8№ŠВ"уq˜h7tіюћ–г…ЅdeІђЏшп?›aCћ_XaB’j’Ђ(œ9ѓ5жъb’в9ybц”\23uhЇШЭ7ІФй kОѓдэvуvЛЉ­­%!!Ё[m)//ЇЎЉ9B&­_*њ= `ЪLІЪmЁЅЖE&"""Т.WЃбЈѕ єЂщЭЫ8&LИІЧ~їTYННМžЎ[OŽCooko/яrjЋИ'ФИіхххj\ЅђђrѕI| ‹/цўћячщЇŸ&::šІІ&юОћю.+ЅЄЄ№Т /ššкэz…:їдЉS|њщЇ,\Из_я|ч;~†zWэJNNіл_VVжЁнg“v>99™ŠŠ ВГГеыњb6›)++SуžлUL&S‡§=езс——ЧбЃGUќшбЃj]‰ŠŠbтФ‰Мџўћgu­pЮ—$Љ[Еzjо 8… Ђ( ;wюфеW_хНїоj„їїt_%—(Вї%#Лл^mŸšјєгэTTX?n#ЏЪшЛ†тЂ ОјчЪJЋјлЇџт?оЦ™Ђ Yі{U№щцэ|Кy;‡WЗ9rJн^VZесМŽ/E­—ті|і<їїX8›ИOпН†“7г…7ћ…гщЄККš№ЗП§mлЖQSSCzz:dee‘pС ›ЭFQQ1EEХиlЖ ЇащtФЧЧ“••EAAдееБ}ћvЖlйТСƒЉЎЎЦсpЈЏР "ОС7ƒe"щжќU$Ÿ%GŠВ*H( MоWaсaмЪЁƒ[qЙœ~ACНлЫJwz~KK#_оF­š+ nІ_ПЋЩM7нФМyѓxюЙчќžxwеЎБcЧВbХ ЊЋЋЉЎЎfљђхŒ;ЖЫњkјg’;v,oМёVЋЋеЪoМсwьїОї=^§uЪЫЫillTc^„SЇqуЦuhSwћ:Xж‹p?~/]@ ИиŒ1‚YГfсrЙ;v,“'Ozм‚ xу7xўљчIJJbвЄIlлЖMнп}ї1oо<еѕџwоy'’$БpсB***ШЪЪbъдЉaеЋЋsѓ›пpчw2lи0FEii)П§эoyќёЧCЖkЪ”)ЌZЕŠ9sц0zєшNлнUћ™2e +VЌ`њєщшt:ў§пџ§ћїЋћ'MšDss3 , ЙЙ™ћяП?ь:Mž<™+V0cЦ t:“&MbяоНaѕРз_ЭаЁCC ŸНm§сHyyЙК\т‡?ќ!Знv›zќ7оШтХ‹еЌ#GŽфПјEих‡:џц›oц…^ ИИГйܘ1c˜2eJпЁњёЦodбЂETVV’““У/љKё%тћ[|д”…Ър1?aЭєA—Ќ с5ВНOЋN'лЗoG‘[y§э1\nі<ЦЩ“Ѕ\3b0yyщ—TБkїZZФЧЧpЭˆСЄЇ%SXXЦСУ'Бл[Иzи@† ЩыhьTзђчПxОTѓѓ20t=V„FЃсЎ;G“˜zќ2:@sГƒ#пžF– \§(5˜žVЋEЇгљЅЮ 4ъ:[žс+JИнnJKK9~ќ8 ˜ЭfтттzEl›ЭFyE%nЗžФ$]ЕжEzzъE&‚бввB]]еееФФФŸŸOFF†KР›ъ4œ ™С<МяџїџТVч"ПпеЊс+кFМЫz:vќыCE!5Нƒ{мцNпKiщ1Д:=пЙщnПyЄ( EEGАT‘›[€)%›kЇOФщh%**–œМRАTSRz”ж;9ЙCЩШшiЋFтЬЉƒФЧk9r$zНNч7НЏPїЖЏwз3ЅЕЕ•ЃG†DЪjЕRmЉЦс$%/cœБ-‹‰т“fUQ3оИ]n*OWA“B”.šмммАDЋеЪ€ˆŒŒФ`0јнЗсДѕ‚ёKЧŽ)KИЊŸ=УЈ‡оожо\^oqOˆ{тbнŠЂpђфЩћŠ‹‹5jTX%.EzKЛN:Х3Я<у—eуbёФO0eЪ”ГЮˆ!tЦŽ;Xs"ƒЃ[зї­” оЯОяr[і‚ЦF;џк~‡гЩ­уЎ#66š§ћѓэБBtZ‘‘47ЗђЏэ‡Иbp.CЎШ#>!–нЛПЅЄДšЌЌЂЃ§ wSrWіу№‘Sœ.l_ŸuЭ№СФЧХД*ьв:№d‘$ЈЖи(-­BQ$ЂЂbќкNћЛŠбввТЉSЇ8yђ$zН“ЩDNNNЏqђ$’’3ˆ7{GЕŒђђ‹ч1Hdd$‘‘‘ЄЄЄ`Гй8vь_§5ЙЙЙфччЋiOƒyP‹;бй˜jЕДZ(+;ŽЩ”…Vg№Ш’–0ЁгыIHLЇЖІŒZkВЂ IPSуYЇh2g{вwЖ•бккЬЉу{qЛн z3ЦЈŠЮ|MyйI4ZzCG+'Žя!=}Y0FЧSxњ5Ех$™20c|jьо<сб+и„Cmm­G0И0чš‰Š YVCJžЧcТоdWcL„#*xы'–o@ ш.+WЎфо{яХщtђЦopгM7ѕŠzІ'ЮКОд˜ТžT %Ѕ•|ѕеa22Ь\wэ`š›l§b•U5D ЊёЋi39…ЭжР5з bЬшсьлœ­_ьсКkЏ 5еџщь5зІЈИ‚њO`F“)žaУњ‹]'Š„гхђ”QoЧ-kHJJэ4LwФЗл­Эeee$&&’ŸŸпы2fј ЩІLтуMЊбп–щСкЫ„ №]ЦЮ]пpэ5Wžо.Lh% ‘‘Њ(ah+3\cЄЁСNQQ9Ї Rйй9$%%љ@с,е№ѕŠ№.б8zє(˜Эf†к+зЖ{ Y6lЪ !СмЁятЬ(Š'.Bo&МxSЄzг0mпОЈЈ( @FF†ъ9LœшL№ˆ‹‹уЪ+ЏЄААъj+Е5Ѕ45кH6eЂещUс ЩWўђя;“)“c’E‘Бж”b0x)Н>’јD3 жъ O"7П“9›ККjNŸмгсР яќБеVrЄљ_єыwљ§ЏЦRUФЉћ`РЕJоxнŸн$ќв§vyO5P^QŽ;ТMRV†Џџя 0ј†СhДэїVm…’oK:і]›‡UD”(--%++ЋKп{Pˆ@ шЫ\Lуџ|^ћbЖыЎЛютЎЛю“KpYrЩgпцюћ99)ŽёуG’Ÿ—СЉгЅќѓЫ§8œ.є!иiЕZьMЭ|љЏ””V“ŸŸСЭ7'6Ю?фзпœІЊКV§ЛЌЌšcЧŠТЊwYЙ…'KhnUат0` ]Кќ МйœN'ххх|ійg:tˆ„„ HMMэЕ‚DEEВл@rr‰‰цNO0‘˜”ŽУЉЃЌМђ‚fхшZ­–ддT HJJтлoПхŸџќ'•••fь№ЫЖ{BЇг‘——GџўљФХj‘н”—žРоX‡Fв i кйKЇеc2gPc-ЇЖІsJ<чЧФ&2tиП‘bЮСRUЬбoОТэr… ђЈеjqД6sєлЏАY+HMЭуЪ+ПCtT\HБ№lюo_Ў3)++У­w“‘@BJŽfх'Ы)?YбaIUKS жR+жR+5Ѕ5эЏВZl6ŒqFœ M ”••uйŽPСi@ .gŽ9ТдЉS;ѕv9|ј0“'OКџ\2€\Ў\J}Іыг#Ё@ll4ŠьFVЊЋj<Ўє>^~†ƒ$ЉK84 .—‹kY&М‚Dлёѕ vіь§€Ь 3MMЭиъйЙћВ2ЭDEE­–Ы%SxІœњ†f\n-fs*ЉЉЉ~ №<‰еh4~Y МAm6‡ТfГ‘žžNRRRЏ‡DUЛ‡DЂ™PууM xb"”•ѕN _HHH ІІ†={іЯW\Ё.ы№О'ЯTєlгjЕШВLBBFЃ‘ттbjjъАZ‹hu4‘””бa G )Љ9TWбPoХЎ­SЗyнŒЦіј% V58gћmЄ Шъ-тч- бHИм.kH6gчйFЈ’p2p ]y!иэvJKKqынФЇХ“”–4ГˆпœJ‰g№ЈAjаKЇУEсB”6ё"*> cœ‘ъгъъЪ%П\цОt&–aB V­ZХŒ3:—ёілo3ў|ЎЛю:еЈю‹U{‹`б›њVзїЛ\Ё-ЧІЧШbХЦFЁеhpИ\45Еј эЂ€`hРЖџ;€л-#I7\?„ЦЦfЖ|Ж ЇгХ—л1сжы‚NN–бкъF‘"ШЫЫ!&&ЦЯHѕuѓŒ9˜БЉЉ‰У‡SQQAjj*W^yeЏЯ{ы+H˜МK6Т<7>о„‚чЉџЅ L$%%‘˜˜ˆХbaЧŽ˜ЭfЎИт bbbTЁЩ+ј>aїІ”єЦЄ0 фххcЁДДŒцІ*Z[0Їф з:5~“’3бjuИн.мn‘бФ'˜дxОh4ZПэ !aŒŽA#ipЙ]ДЖ6љ#!!yчЊї~щС)иYЪ__ZZZ())С­w“‹)Ы–kФй–щCц№жCЊ ‘wu.ё)ё(($ч$a9cЅЎОFCZZZЇu^@ И\ЈЋЋcжЌYTWWћ8;wюdУ† |ћэЗФЦЦrнuз1}њt{dwыS^^ЮŠ+8|ј0Ьž=›єєtѕџпЋWЏцу?рілogкДiъoъЦЦFVЌXСŽ;аh4ќшG?т?ўу?ќ М@|ЏlTTњгŸТКўйіGoудЉSмpУ ю?}њД_–KIИд”оVWнх№…ЉјH ОŸeEaШ ЪF#yNюй{”ŠŠšv#бч<_Ž|SHU•gйЦ+r‰&>>šьL3ХЅе”–Vsьd)ћgЊІ›еZGIi5N—DDD,ЙЙЙ † ‚„яє@cL–eZ[[љц›o(,,Фd2qх•WіКДƒ U(В“9ƒФ„”nož@˜ Е5—Ž0!IfГ™ффd*++љч?џIvv6$22ВƒWŒїн+HxВqx–р˜L&ŒF#EEE465Q^vœdSббё€ofZsJ6хЇHMЩ *HНwd…ŒьЄgєG#IИ\.Nм­ЖІcчSыlžДЖЖR\\Œ[ы&кƒ9ЫЬ—ќ{[œп›wлћэyбSrЬ ЙiˆњїёЧЉЋЊ cPІ5 IDAT:ƒ3дkЂ"HЪNЂІЈlžqIII Ћ~@ єUў№‡?pЧw№ілoћmџ§їЙчž{ИњъЋбh4ќёdЩ’%j&‡sнпнњ,]К”сУ‡ѓ‹_ќ€7ВtщR^{э5>ўјcіюнЫЪ•+xійgЩШШрћпџ>рЩŒсrЙXНz5Ы—/чгO?х{пћ^XF^рОM›6aЕZеПC]џlћЃЗaЗлбыѕюoll Й|Xа7щуЃЎ€мю)hЁx ХxД’gЛAЇ%1>–ђ2 Ј~›Œ`p\9$—+‡фњZ$м:юк@K E’в*,жz\n‰‰ЩЄЇЇ"МK8|]ш}ХEQ8vьGU—tusїFABV ˜Ь™ž%giЧХЧ›…кšŠKF˜№Š щщщ˜L&***јќѓЯ0`§ћїяќв7Ж„WЄђn‰‰aрРS[[‡ЅЊGМ‰Єфt$ЉЃœ˜ЂŠi§шд™FЂmFлŸHˆ7ЋKžєz=11 джT‚ЄѕоHhдњЖН_ ўt8у’\MFRsSU1E ’’зw›oњш#ўћПџ;ьыwЗ?ЦЯЃ>ЪЦБX,dee1oо<ЪЪЪXЗnеееєяпŸ'žx‚ьььГ>'ЇгЩЊUЋиКu+cЦŒaЦŒшѕzе[Фћ(дюяJь)))сэЗпfџў§ИнnFŒСc=F||ќYЗEQж­[Ч'Ÿ|BSS7нt<ђ‘‘‘j™ѓцЭcУ† джжвПцЯŸO^^^ШЖљЖ1XЛНліэлЧ[oНEQQ‰‰‰L™2EЁъчrЙXЙr%џјЧ?ащtLœ8БЫyш{нЎкvСlЄОў…щI ъя!h,(>ћeEюpœŒџ1нyЙм2'N•ReЉЧ-ШШШ"33N‡NЇѓ#М‚„Џъ#\.uuuќуџрЬ™3 8ьььKPˆРdЮ$1)…ЦЦ:ј’ƒџЗлхЇћœ>uˆ§ћЖr`џИ\Ž6]HСхvqшр?9|pu$$ЄбъаPZж{ƒ_CЏз“Э Aƒ(--хЫ/ПФfГЉA0Н0НB†ojQяЫЛœ#++ЃQЁЁСBeХЗЛЭBТхtви`ЃДє„*цx<*ЄN^Ся!пc‚;HОЊЦщCЇгIqq1NœD&G’ž—Іо7ƒoЬА[†1ь–aф_•ЏžsХЈ+Иђц+ЙђІ!dі­8UAбзžрДБІXDgЊ16’ИŒ8šЅfЊЋЋЉ­­ )F@аyѓЭ7y№СеЬsбввТŸўє'?ЗќžмN}FŽЩћяПOSSlмИ‘‘#GЊћ tЛн;vŒ­[ЗЭ€ˆˆˆш§=пЖфЄЖЖ–ђŠ*%“Й=эgk‹вв“”•žD–нž1j;GЏРR]‚ЅК„k…:vЖкJЌ–RЌжR""ŒФЦ%“˜FkЋ†’’ jkk/Љu§ 0€ииXЖoпЮЩ“';dх№іЅЏ8с+hЅЄЄ0ФAœмˆГХ†хдзшl5h$А}ЫЎŸP_яqЬЩвцЭќЈ8ЈRCрqAю3uПІчd‰`йuмnЗG( QдTжb-ЗRSnEЇзaŒ1’’“BRz{аз”мвђRIЭO%оOm…c_їŒETƒGђˆ€ŽfuUuдWеS_UG}u=ѕUѕИ.ЄH ЛdЇВВ’КК:ёЫT —{іьЁООžБcЧvyмјёуЙуŽ;иДiГgЯюё§сжgжЌYlйВ…;яМ“ЛюК‹Пџ§я~х577­ўнnWџОс†XЙr%6› ›ЭЦЪ•+innі3Ј?јр>ќ№Cžxт Ојт о|ѓЭ Пk6nмШќcПэЁЎпнў˜?>DFFrїнwcЗлљйЯ~FzzККэшбЃч|Ž/Ÿ}іГgЯЦl6c6›™3gŸўљyФ†NDDбббL›6нЛwŸS[ўњзП2wю\вввˆ‰‰aцЬ™lлЖЭЏЬG}”ддT"##™4i'NœшбviЕZЌV+6›””цЯŸv§М}o2™дОячЛmЁшћ‹v”іхёБQШВЌLВзhѕ1xМ"€wЙМ,+ФDЁ[Ц­„ноЬЉТrаbШЭЭ%""Т/ˆeА –оwЏAнааРоН{qЛн 4ЈзЁFЃїo›ЭFeЅ&s:‰‰цЖсP:0єІkTГ9‹ЃпюBQ,еЅ$'g"+25жrЯФеˆo‹G›„"+дк*))­DQПЅоыКЯї&wzГйL\\ХХХTTTPPP@LLŒпМ№ Š,Ѓљі[t 9.ž(Ї“ЁЦ(Nдзгш„тJn4 F ‘FвугШŠNІЕ Щ **E.Fю0Ў>ž;ŠŒ,Л‘м’Z—Hc сx]єvЛ‡гЁ€ Жr›ЉД§Ї„ЬОQќMБкЦV{+Л?оуЗ?&)†ЄД$Я2,ŸяЏєиŠ‹ХrI, 'ТG}4фoЉ-[Ж`Злљрƒxх•WXЖlYюЗ>/Пќ2уЦSХ€7ђвK/ёт‹/`4ijjRнџ›ššдЅГgЯцѕз_чЁ‡BЏзsз]wБџўзбыѕ 4ˆЇžzŠ™3g2kж,П§_|ёYYYфффјmu§юір—‰Яk?nkmm=чs|БZ­j№P€ŒŒ ,KЯПcЧŽБjе*Nœ8Acc#@‡иzнmKUUгІMывVшN_œ ‹-тнwпeэкЕФЦЦ2{іl50hЈњY,–}пЮwл.kQ"аw!??ЗЌPWпˆ„Ч№7шѕ~fK\\4йY)jpС„јВГЭн} aЋkЄЈЈ ЇKCtt<ЙЙЙ~K3Хпь ^CаэvsђфIŽ;FZZfГЙзŠ] V Њ‡„,їbeFV ­Ю@bR5жrЌж2з 55$›2ё,%№œ›„Ќ(иl•””T"Ы2ёёё~qB­ыПи"…зkТbБ№еW_‘ŸŸO~~О:7$I{де#ХФ 45"к†"uZЎHˆчЄЭFГвъ3Є%ЄёнЋ|ž8И#ZЇЗо€№žž‘‚‚НЉIђ!zƒСЯ;"::SJ&ZЮ# ХФ“’šэяIqžЛ2::šиии.гƒ657!ЛхsКŽ ЩЩAД 9Q~OK@ шыœ>}šЧ{Ьo[gйЂЂЂ˜8q"яПџ~Їџ=—§сдчыЏПц™gžё‹)сы­——ЧбЃGU№шбЃфцЖЧŽ‹хЩ'ŸTџўѓŸџмхђ I’‚.БоАasчЮэА=дѕЛл‹ффdЪЫЫеК—••љ-Sщ)/^Ь§їпЯгO?Mtt4MMMм}їнчTfJJ /М№ЉЉЉgu~8v„С` ЕЕUIjjjќі8… Ђ( ;wюфеW_хНїо Ћ~&“ЉCп_Jє§@—>я:–СƒВКtщЯЪ4‘•yі7ХjЃДФŠKж‘˜h"##ЃгtŸi?=ЦЙLCCћіэыUо Св5*ŠB]]UU5Hš’M$$˜Pd™mџќ3v{cРјР?З~рsSe1шŠы1™ВЉБ–уpД`ГUЃбшhnір щ8ŽЖЅ.š6C5Y–ЉГUQZZT˜|яь фb &“‰ииXŠ‹‹ЉЌЌTН&ДZ-ra!J]jѕ+JћrŠ=•\bЦжвŠS–бЩnŽUЖ0 %›„шЯБ€БоГмР-ЫД§m­FKvжР.ыg6eb6eњє•GŒѓ bM˜FЃщ2ШЄХbЁЉЙ €ФДDОћЗzФЩЯЈЋЦkŸЗъђ!ЯмДUкАWк‰ŠŠ љ?T!JрrЂЋ`}/Ој"?љЩOШШШ ЖЖ–їо{ЋЏОКЧі^3T}њїяЯЦер7ndР€~ЧЏYГFѕ`XГf wмq‡КщвЅ<ќ№УFvэкХ† T/ €%K–0yђdВВВ(++cљђхŒ=кЏN;wю$22’ЁC‡vшЯPзЇ?zcЧŽeХŠ<ўју€'KIЈ%>gCKK QQQDFFRYYЩЊUЋЮЙЬ;юИƒeЫ–1gЮ222(..fнКuќъWП ыќИИ8ŠŠŠ:xСŠяПџ>'NФfГБbХ П§K–,aЪ”)dffvАGBеoмИqЌ\ЙRэ{o&!JєMBnK‘ш56TЃЃЇc Hее6JЫkpЛѕЄЅЅc6›;$3-xњ3gЮpфШвввЮ‹ВxЖBDАЯО‚Duu- '!оLtt|8sчЮЅББ‘‚‚ž}іYП 7п|3/М№ХХ՘ЭfЦŒУ”)SќъА~§њБ$ТН~OїЧљbЪ”)ЌZЕJg0zєh&OžмузYА`oМёЯ?џЁздэ|ЖЕЏ—'к*ЪmНМч‰@ \(њ|і Хч_№дŸчІy”–Vc­iDV"ЩЩЩ!>>Оƒс5и}Ÿа{ ›ЭЦЮ;IHH№‹˜к…ˆццf\.‘‘‘шt:туу1DFFЂбhhhh ЎЎЎ­ЌЮ Ъ246жiŒYЧ”дlt:=.—Зл‰бCBb ŠіІzЂЂ@Ї•:1’НтV ŒшэwяїІІ&мnЗŸРтћФ?P Œь{>Х IQH*)FђЩsНГМœу5Е8eЙ›c-coВ e(дЗЖ’Cjt4’ьЦX_ЌеаvuUWmД‰8тЛЕзsоžўnѓ9•}9=юЩqшэmээх]Nmї„W@ ЂФ…W%:“ХeeЌжFd"ЩЫЫ#66ЖƒЬCТkф—––rрРВГГ/hJСpХY–innF–e"""ˆˆˆРd2!H ‚иии.#{йГg_иuеhДЄЇчS\| №d‡dФˆнjПFЃ!**ŠЈЈ(’““q8455баа zЎh4 C o т9!IШ’-2nEС-+48н$|ЧКЉбк6}%ZFмmо’ЇcФ7Ђ@ @ ЂDЯ"ЗНzP‘ ЂЂ‹ЕЅMˆ‹‹CЃбЈBD (сkд‚'5QQQ РшГОџbˆВьoУщtвввBdd$FЃ‘ииXЂЃЃбщzvКЄЄdrЯФŸ"Ћkћƒ—”œІŠY!2Cœ ƒƒС@bb".—K(\.—šЖЧWT ЖдЃЇХ ,Y_Ђе€l-­|xьXOЬьMV$IЂЄVCMK УЬftmэ188# tw)FЈЅ.@ њ6Ѕ‚ЫZ”№Цўя,ѕ ЊЊmTVз#ЫфцхдCТрЮ7уƒ,ЫlпОІІ&му†ўйŠ^ЏEQˆˆˆ 99™„„„ 9–/Ng+MMѕœ)ќ€„Фbbzо“1ФfГaЗлimmUE'Fуч1q>–uыыˆВйдПЃє:xрЂЃЃYНz5NЇгЏЮcЦŒ!''NGII [ЗnХnЗ=ІББ‘}ћіS]]NЃEЋI 4.— Eъ^6o3§’n]B СE-„@"QЂwЬIт,%$ Ќж*ЪmШD’$†„Џ с@б+”””PQQСUW]uоZ#Н"\.џŸН7’ЃКѓ|?‘ћZЙUfUЅЊT›6АХтІБ1јй–§ш3ю7 zкŒ `фжДЯxІЯiƒё‚Бqslƒ0j˜Ёлؘ‡žynћЭ6ž91- ­ЕHЊ=+Ћ*їЬXо™ŠЬЪкTUЂ$нNžЪЪИq#тоЊќ}уЗdГYNЇ“P(„Яч[OЛїтНwOeсююоxFoЗл‰FЃhšF:&™LNѓžачз,Rд Ї3–yŸїф’Іr49коЮе]хŸЕ§ё‹_ЄЋВ  ЅЅ…ŽŽќq …Bн6‘H„?ќсM9С›'zИ ЉПУjБ VТVvoœ* *I/5ё?Ќ@ B`8Ѓ"СBŽ% @ˆЫk”ƒ‘рrБž’уiN$P4'­­­гЊlшхџъyIш"РЊUЋXП~=‡bэкЕЫт)1—g„^B5›ЭтrЙ„BхВ™+ Лн‰луЧщtгвмASsћr’$сїћёћ§фѓy’Щ$…B\.‡гщ4 sЮХxNXTїд$šсKџˆ+B!ь•$ЕДЖЖвее…Іiќђ—П$“Щ№ёDЃQ6lиРоН{glѓGєŽ?A&@ G,€НP ДРЕ еМ–ЏзK>ŸŸq{ЁP(‡тL•™j•’;šіR еR WБZQ‘А*2› ­ЂЇф3yE1J‘Юu>@ @ˆѕT‰E{JHdвyNžL ЈтёUD"‘Y s. ({(шязЌYCЉTт№сУK.L˜EГЂ ŠЂNЇqЛн„B!"‘Ш !9кVЏЃЕm­1—ЊІ~рчфrЙhiiA–e‰Й\ЮwЬт„.L˜Ћwшs2—8сШdpOM•пGЃиjrŽ˜EЇ 6pєшQ<РО}ћју?ўcC”˜­Э‡?|!ЏМђя9ия&шёaЯчPl6Tћж…tц•‰UЋVЭИЭnЗЃ( ф|Y–—DŒЈ'D(ŠbМІІІe™@ @<ЇЉЉiХ +›ЭFSSёxПпoфф0ЗЂ(ЈЊZ2S+*дЃрѕRr•…ˆП§ ?ўўїyт‰'ъЖD" ŸŒŒ‡чlГnн:TUf,9Ь@b€bЉˆfЗƒн^ ФXш?]Ѓј`У"‘Ћтqš%‰ЛЋ•—“MЅХч-П<юђOЏ‡oх3‹D‹УQnяtВJ‚HCƒX№@ Tа ї_|qšџц›oђрƒВ{їn.ПќrzшЁК}мџ§м|ѓЭќъWПтG?њ˜ѕ˜{іьaЧŽ<іиcœ8q‚_ќтUлїэлЧO~ђ^xс…КћЯt^Г]‹@ ЂФвЩš†Іж/y9з 4ф’Loя%йFC LKKKU•Й‰кЊ цъ­­­„Уa:Д(aЂžЁ ЊЊ’JЅ( ј§~тё8ёxМnIOСТq8֘zН^E!ŸЯO'єЙ˜ОЦІcUєlžv‹…pХ Ѓ *М@Я#Ё‡ЬЇMиaХ.gш;Œ†„VпћaЮ—Д"’\Z-bС Ћ™x!Oмщ юѓбь-ПЦВ9<6;я'ЦqXЌLф œNЃMмч#žЫвЌ(иВY–5ЛЊ@ чwп}7MMMИ\.nИсŽ9RџяДеJ"‘`bb‚X,ЦіэлgэїŽ;ю ББ‘ЦЦFЖnнЪ?џѓ?OлЎ?„YЬy ‚ё˜|$ TUЃяј(љ"Им~кккъ&ЕœЭCТ,˜]љuБbеЊUЈЊЪЁC‡XЗnн‚<jsGдŠХbY–ёxаїQdБР@ €EWi[Лv-їмsšІёЦo№рƒђЫ_ўrЦіƒƒƒДЗЗя—ь|VBХ9р|Ч"† >у‰уY,Vэээ8ŽК^Е"„Y4ЈЭ! IЊЊ266Цшш(™LЦpыohh sєшбYC9ъхŽ0чШчѓфѓy|>ёx\С`ащe™RЉ4я\ŠнŽRІM#U,ЮxœL&€пTУWё‚Ц€ IDATЊаЗЭЇЭdЁ€УjЁ;Тi)1•grbєдыЙТ6рЬ—рЈїХbџўВ—D…їЦЦxЙЗTБ8Ћ aFVUЦs9~?8ШƒC†|)ѕѕayћm(•ФСyMCC§§§ЇНџwПћ]њњњ ЯЭЙ„;v066Ции;vьрSŸњдŠЙ@АxЮё’ j•w„йkЂЎQ#Iфr†Цб47ЋV­Тыѕж#j=#jХ‚кџ`‹Х"'Nœ@UUœN'nЗ›ЭFЁP ›ЭЧŽЃЋЋkšЧD­ёZ[т3“ЩрvЛ‰D"БК?`ьv;­­­LNN211AЁPРсpT‰IцВБњrЅг8u/‡’ŒзaG™с}}}lмИ‘ііvcџЮЮNz{{чнЦmГ‘—ŠІ9ilŒ …Њr˜ Г!Ы2ЏМђ ---lмИбшЯќsxxMг№ћ§DЃбђёХx’žL&ўjC9fђŽаsG(ŠBCCБXLTдXaМ^/###F…›ЭV%Œ™У9 n7vŸg&ƒпagгъvў9™Ќлїў§ћљмч>Gcc#љ—I>ŸЇЛЛMгxчwцеЦmГё‰ЖжђњВкДЖU†G“ євбЙ‹ХŠ&Q?сЃЎЁ{HX8ѓžВŒдлk„ZdJ%ўŸї"WDŠ+ЏМ’7ђъЋЏђўћяWэzбEёЁ}ˆP(ФШШoОљІ!ж(šЦг№Љіv: €„tьZ[+xМbq рМфњыЏчњыЏЏњЌžAoўЬќ~гІMlкДiоЧЛёЦЙёЦыn[Шqы}VяZС™хмп˜ŸQyЌqђФ8Х‚„лг@<Ÿц!ЁfABг4о|ѓMTUЅЇЇ‡Зп~Y–‘eйpзO&“ œN'ёxЛнnˆVЋЛнN8ЦыѕтѓљƒФ-ЗмbдT‡ВЧE2ŸGеMEJЇRiБЈ@ ‚ЅА•ЮЫœ]™(›Yc‰SЉдj?збp8Рr–х&ђћ§8†‡‡ЩхrFЎ]lв+uЈУCX+kcM(HsБФНїо[ЗЯОО>~№ƒ‰DАйlŒŒŒ šТfkуДYЙiУи­УИЗNL …Btttp№рAВ™ ’ЩТсfЈ—"ж№”NНЮА,!YmрpBБ@ІTтљž.Йф>ђ‘акк:cЌъ'>ё оxу оxу ЎЙцКЛЛЙтŠ+ o €"ьrбhЩ5т†@ @ ЂD}9BU+{kZљїzЮљ|‰с‘I4<ДЕ­ЦхrЭВЁiЃЃЃ8p€uыжmжЎ]ЫсУ‡б4ЕkзbЕZЩхrИ\ЎŠW6’t#TЧхraГй(‹477p№рAжЎ][UЕ#ŸЯуїћinnžжЧJ'h`rrr‰њ:ћrgшхC‡ЩфrUb„$IŒ31žD …ЂaWуЉџŒы\гІ•ЧšOEеP+wƒфѕ!Ј‘–ЪZ\Нz5ЧŽѕ062€зыЧщєTхOY( вў§х›Ш•ЪоMMMДЕЕЭИ[KK hšЦЫ/ПLЁPрwПћнннtwwcЗл)™’Z‰25щ№!XПЭчE@ XFDž@ˆч‚,ЈЬф)!!Ёi*'ЦP5бhŒ@ P•GТ,Hшо šІ‘ЩdјУў`Tч0еfcЭš59r€ЎЎЎЊ<ЕeBkEI’АZ­8NZZZŒ]]]†‘ …ˆFЃgЧ дАњxЬД}ОшуWыP›Ыc%!ѕѕ–ч<вHыШ09— U!8•'061Срр ---Ly<„ІІ№кэмxСќЏуЧL/MшРšPˆ?niЦ*UmкmXVЗW•г ƒФbQFF єббЙaZbW}˜ѕЯ-gК$Је L”ѓnМ94„Њi<џќѓ<џќѓlпОНЊњ”Н–&''zхЃЃЃЦ=ЊDœ? ВЪяЧяАƒг…цо@ дВyѓf!$!JTщšvЪKBЯЩPх‚Ў1<2IО сrљiii™–ив,Lш}‹E^§ubБи4cЪ•жЌYc„rƒAdY&›ЭF=aЂP( i‡УЩˆЧу аппOkk+‘HФ(щИвˆкŠ!ѓ}oўНV\Ј'6˜ЧR}jI~PB…4<Œ4p­БЉbфJуу iИ3iмR9ŸI)™ФW*Б>цЄз‹ЫщФ:1Q^OV vЋ…ЫЕdЂDФэЦkЗПЋЙV]XЈ„'išF<'•J‘Щf$kЅкзHїSХ|Т7–l.dM‘#FмnNЄRsюцѕ–UцMе9ЬяН^o•(б • @“$Єbэ,ЮсђТ {–­ЏХіН”чЖмзz.ї'ЎUє'Ўѕќ^'BB”X2UЂќSCЖMB"›-HЄ‘,^кккІ‰Кf6вTUeЯž=8ЮYНьv;kзЎхаЁCДЗЗуvЛУыѕbЏƒЕТФјј8nЗЛ*OD<'NcБX№x<+VˆЈ!j“tЮеf^FО٘­}_+>˜ч­њщОДь…tМRѓ:UE9ЕQ-MHК54h*иЌ i4–J8ѓ9r­­XNœ=Ч@QИД)ЦGу-ќњШQF+yJJG РЇкл)Vjƒk.RW7VЗЛЪ‹GЯ{bГйhooчаЁУŒ'‡№ћƒИ=^ЃЭ)O‰щ)%Ю„$e2HЂЄЊєЮ34HПѕщхiQЇmз9’LryK 6‹„”ЯЁ%“АТюХ…№йЯ~dЩОWѕѕї/,Њяi§-ѕљ­О–zVњЕЎєўЮЇkї„˜зЅ0јgbЅ 9!`B”XМARЧш1П/GЬk {J˜ž№ЊšЪЩСq\45ЕрѓљІyGшТ„йА>x№ щtšЕkзЮЫ№б…‰еЋW#I'OžЄЅЅХ$IBUU†††ШчѓF%ЙУЎпчѓQ*• їJ"ъUЉ§Ні3НœЉ^aФмfІЙж_6› Лн^•‹ЁЖndš7йВ Е"хђ’Iт­Ёaкxkx˜ ‘0щb‰ЈЧCдуFб4Ќ’DCЊЖ!7”АP1œн•'ѓЋXнаРўББSЙц рtв тБлБHрВUТ†ђdЇ,ЌІЌfЯ ЏзKSSŒСС{щьКIВTпwЬэБт„@s ва v‹…ЕсoЭЙŸžчХ,>˜ЋзшлušН^l•ЬЊZC­ЅEќСy‡й€Н@ ЂФœFФОwњЪв„ІU'NЩ I<ž#aЄЙв†.HшO„uс ЗЗ—ѕызЯлРr8Ќ]Л–ЃGвкк ”Ћ!шоВ,“ЫхPХ(яiЗлЋžь› шbБјѓ"ъНєФœЕ"‹nЮ”TTOьЉПЬ%4‹Х"™Lfš„ЭfУщtVЭљe)jŠ%yЊЏ(XіПWЎа`cхф‹П>zЭЦP&Уžсaњ+9#м6aЗ‹fЏK›b†…m<#УX#lђш(J*ХЅMБђкВZЩdU•ОJ_ЕЌ …ШЫ266вжp*дЈшrSДлL$№Ž‹ХІ‰7ц|'---LMM‘Щц8xpo%&Њъv;U2д"Mˆ–эžз45~ЭЬЯƒ$“)—A5‡_™пЇkТd&ђyJŠZЎT25…‚ЈТ!A~§ы_ѓєгO“L&щююfћіэFЙmMгиЕkП§эoЩd2\yх•мuз]F2јZ6oоЬmЗнЦГЯ>‹Ђ(lкД‰­[З6oоЬWОђvяоЭии/М№B•XВyѓfЖmлVї|tЏ§чLKЉTт‘GсЕз^УfГёчўчќ§пџНбОT*БsчN^}ѕUЎОњjЖlйb<ј˜ыšпzы-{ь1њћћ …BмrЫ-\sЭ5BќQтl$$I" 2>Ў"Y<ЈЊŠES #йќlзaЗгоо^%FиlЖЊФ–њ&Хb‘Н{їВzѕъЊ'ЊѓСщtвннЭсУ‡щшшРхr!ЫВaI’„Яч#‹aБXPЅ*ФЃV8“3…b˜_zO}œr•ЊКQъp8ƒИнnьv;‡cIЮ[їЖ(•JфѓyRЉ”Q~UUU, .—ЫyЬTj ГРqКЦДЄiP,V}імСC”T•TБШT%Ёb-9Yцd*Э`:CџдjldM(hєekръъ&“œЈкoC$Ь‡Ы ?0Ш%M1і уs8X ђЮш(—WžшЋ5^(ЊЭF.Съp№ўћяъ 3цyъшшр№сУ”JљВМ'MПџtA)е&–ZЄаЩщ„ŠшЕЉНЇо{вKњћћQUЗлMss3CCCЦІЩЩЩibЎn_m”N•ьvДаSI ‚•Ь›oОЩƒ>H рйgŸхЁ‡тЁ‡`їюньнЛ—ў№‡ј|>~њгŸђф“OrћэЗЯипž={иБc?јСјХ/~СПћwџЮиОoп>~ђ“ŸIЌч{>/ОјтМ ўЇžzŠ‘‘vюмiœƒ™]ЛvбззЧУ? Р<РЎ]Лјв—О4ЏkОџўћЙыЎЛјиЧ>F2™фч?џy•(!Qт,#j_ызЏЇT*!Ыrеікф‡Г%Ед1§)§ЛяО‹пяЏ›иrОТ„žќrУ† ƒA \zбэvуp8d /ЗЧФL!fBŸЭf)‹Цљ744рѓљŒыZ.tбСхrсїћК0’NЇIЅR†+Оž@д,:щ…YАаЏ{!овёуH““T|p861ЩP&УИ)yтœ"‹І1šЭВot”lЉФ†H‡еBi`%‘Реб#54}kVгy}4оbќДT>Пмb`Љ${HЦу83 •D~ПŸ††>Ь\P%дшb>^Џ—7їDэ§dОl6[е=i^ЃK*LHкКѕHяНХyYЦmЗSšAвЩfГ9r„uыжqгM7бггУ† иЛwoѕНkГRR*"‡dA[ЗL9_@ œтюЛя&pУ 7№єгOл~ѓ›пpяНївмм РэЗпЮWПњеYE‰;юИƒЦЦFЖnнЪ7ПљЭ*QтŽ;ю˜Q˜ы|цУЫ/ПЬwОѓу[ЗnхЖлn3ЖПєвKмwп}Цїа;яМ“o~ѓ›†(1з5[­V‰Фb1Жoп^u|с%!ЂФY(N˜ NГQe6ДuƒV™=$є§ЭћŒŒŒ022Т\АЈstЙ\ЌYГ†їпŸ .И€xoœk$ЁЁЁї piw88PЮ055Хфф$щtUUqЙ\†Ч†йSЂžїФ|Œi)‚Т)Ђgb‚žy&]Ќe<—у\Ž5ЁЋЕG-ф‘œNьб(Š,SВX)Ш2Z(„ВьAЁZЌXTeкћt$‚{rХfGv8k„ЂжжV8Рии˜ЦЁЏ'}~Эї˜ŠSOфЋ}еK@Кфї~&ХВсsиљг5kјљ{яЭЙпsЯ=ЧЭ7пL[[—\r P~кђкkЏUЕћdлjVљ+o4’I9%@ Ј‹.@љЁ\Сє `dd„/љЫгОУЯF‹щon<ЏЊŽ‹ХNћ|цC"‘0…кѓбЗЯvŽs]ѓНїоЫSO=Х?ўу?тїћЙуŽ;ИќђЫХBQтl#j… ]l0n„pT~7'Д4{I˜ѓH˜У6–Т№wЛнtwwsрР$Išі›йHжЯ6qbЉ<&ц ЯаŸŽыFНХb!‰‡ЇU*XiИнnмn7MMM”J%ЦЧЧI&“ ЃЂI­1­Џ“к1­[’4‘0ђH…чѕ0R #ЙђЪ+йИq#ЏОњ*яПџўД?ЂW\q…Q]х№сУМўњыЦі_>ЬeЭЭЌ ‡,VЉ1,6я<Ш@6Ыš5kА[­ИђyЛL0Hxр$Њdabе*ќЃЃhфќ фќ 3ŽХbaѕъеOБX4ђ8 T•4\ШљдŠfB–e …Щd’T*…гщЄЕЕ•ѕызI9Я&ьv;MMMЌ_ПžжжVœN'щtšЩЩI …В,/s‚ЭкcнхѓHН=)'FДJ#d#sеUWбдд4Эƒ$‰pы­ЗrЩ%—‹ХшъътsŸћŸ§ьg6йR Й2ЇšЊP8vŒЁ={ ЛЛЋеŠ $››I56ЂкlŒЏjebе*T‹…ЩІ&ІbѓћЃoу(•JUсЕЁNц{Јі~š)jЙН%ДpиШСсЕлИzu->пМіMЇг?~|š aЗXј\W'MоJщOUПL @@ ЬŸЯўѓќшG?ЂППY–щщщс;пљЮЌћьиБƒББ1ЦЦЦиБcŸњдЇ–ь|шяяŸЕЭІM›xєбGI$$ }єбiлyфFGGхс‡fгІMѓОця~їЛєѕѕeЪkП+ЭV†U 88gТ7ЬюіцRž’$Ё(JUyCC‘Љ ѓ0?зђЅ л0 faЂГГ“wп}зЈКЁc6цєпeY&‘HЏМzˆ‚n@‹ENœ8AkkыМ<&j=#єы6‹ЅR‰t:$I„B!Я:bЖ5гаа@CCЅR‰ББ1&&&ШfГxНоКЁ4ЕЂ•$IрrЯ”N‘-ЩќGŽ№с‹.т#љ­­­3с—]vnЗ›‘‘ž}іYж­[Чg>ѓ.Пќr^{э5У@~}`€ #hHœЄГГsZh’Бva0ыa‰D‚h4j\Џ~?™='js˜Н!fѓ”XЮjZsK9”c" РЧVХЭfљнё юыCЌ …N}рѓЃЙнhۘ#E ‚skЏНI’Ичž{ЂЕЕ•[oНuж}.НєRЖnнŠ,ЫlкД‰›oОyЩЮчІ›nbлЖmЄгщs7мrЫ-<ђШ#мvлmиl6ўьЯўŒЗп~ЛjћЮ;ЙѓЮ;јф'?YuŽs]ѓW\СНїоЫ№№0ЋWЏцпј†X(!Jœm†Ѕ™кdzК!Uћtл,dд№КAОдaѕD—ЫEGG™LЦСЈЭa ПFFF(•J8N"‘vЛUUЩfГхR™ љ|ž“'OВjеЊYЯЙ^Ј†йCТ,FƒAЂбш9#FдУnЗгввBcc#ЃЃЃLNNЂЊj•8aНЬЦЕЅЗЉR>вm/пRMMM†‹пLшIџх_ўХPжЏИт М^/kзЎхнwп-ЏGMУыЈTbAcЃЧMRQkŒ§кќЇƒЦqша!€!.шз]ЛІj…Окœ.ЕžЫю-бм щ4RE”Л\.R…"ЩBОyфјˆИнtƒЌnh ф:•ЬR брj*СЙN=#~ЎЯ$IткkЏхкkЏїqnМёFnМёЦг:‡ЙЖ_§ѕ\§ѕГпсp№ЕЏ}Џ}эk;vŒчŸОjћwоiˆѕь•йЎyгІMUžѓЙF@ˆ+TœЈ—РьA1гSнкy]˜XЪА™DY–‘$‰X,F2™dllŒЦЦЦ*CЯfГ1>>NЉTТхrбкк €Ђ(ЈЊŠЧуСщtbЗл< 3х˜˜)o„9\#•JЁi@€X,vN‹ѕФ‰xm Y,ЃњЪШШˆёљшш(^ЏwZщп въїc•$ьЊŠ–ЯЃšМ–ВьІОц>Ь…^8MŒ0 ѕМЬmЬ‚„х •адмnˆ”у8ЅФ .kiІЄЊьqтАXй3>N4­Њcі†аяБZСЅV,1WђXЮ№ ЌVДŽ(•cњ``ЗXИЌ’9Л+ФчАs<•Ђея'[’qлlXЄЊMƒHcY˜@pовммЬ]wнEЉTтуџ8џўпџ{1(%ъ‹К‘TЯ;Ђ^јF­БЎшћїяЇЙЙyбдl‚D&“ЁЁЁP%nнbБаммЬааPN„ЈiВ,Ѓ( .— —ЫeВНІч№zНфr9#9уРР---†Qhі1'ВLЅRX,тёИё_PvЧыююfbb‚ЁЁ!ІІІ№zН†0dSdН=ШЊЪБ‰Щyїkˆ•ЄFцїЕ‚Pяф$'RAZ§~й -^§ВŒлэžцХАТ„$I477гггC(ЊJ\i&jY[ЧМ}йХˆщЪъњ H6єѕ•KЖV„_%І­тСт­„ншл5Щ7B6‹&<$@ јРX)Ё з]wз]w˜`8gЊoдКЎзVс0W0ПjŸмЊЊЪрр …Baš §b„‰ZQ"“ЩрёxІ•ВX,455‘ЩdH&“”J%ђљ<šІaЗлЇ…Ÿ˜ЏХfГсt:ыЕйl†0Ё‡zшч ‹™L†t:пяgЭš5B˜`0Шš5kфr9ВйlY,в[йРЕY,Юyѕ—­” -лЮіiяЭлЁ\"bTя№„УxН^2™Œ!Z™чиМіN—H$BЉTbttд8†ЙџкѕW›мђL'ЙЌ‹Я‡цrЁЕЎB‹ЧQ/И Эj;%6Инр.{ІhhЋлЁГЭn‚„@ ЇЩў§ћЙѕж[Eхрc9ющsЮSТlŒеAЕсzйMГї‚,Ы8p€–––%#Ьяѕcфѓy\.ЭЭЭuуь­Vk•ЧDCCšІQ(І‰z{ГЈ"INЇги.Ы2†ч‡n\NLLeW}пЏsGœ>ŸююnњћћIЇг„FO%ЊTр™аззGWWєєєрёxˆV цОООЊЖn›lЉ„ЯaGJMСј8іH„X,ЦааХbБjks=œЎ0f``€еЋWњzЎЭ/q&бЋ—Ьyl M‘Q󔆆А†C(Й,~Л%›ХтАузp% IDATъhGIgpT’ЩЮ—їп_м@ ˜8vь—_~љ~јУxц™gиП?>Ÿ~єЃмvлm444b-ГŒѓionГRЯЅ2ŒgЛжљŽэфф$[ЗnettєМћг=Џќр8ЖmлVѕљC=„,Ыќѕ_џЕ%Ю6ъU(‹љ$<№пўіЗOлHœЋНО§|]™ыZч3Жџ№џРч?џyžxт 1іГpїнwsз]wёЪ+Џ%d_~љeіяпЯO~ђ“ГњкЮKQB‚lі`P…cЧŽсvЛёzНKвПў^я?—Ысёx‡УѓŸ ›ІІ&†††Œ'в===DЃQ#сbЁP ‘HЩdа4ІІІQНКC,‚Ф"‘$‰h4Ъб‰ МщTљpI&фrЭK”иЛw/‘H„ЋЎКŠ‹.К€ёёqžzъЉЊv^Л’Ђг„УhЖSЗn8&›Э255…лэЎ&–B0№x<ИнnŽ?NWWWU н[ЂЖšЭŠЙз…мО}ш%[uJŠŠнj!‘ЫqЛ(**ыЉ{Іp№`YдёxАх˜@ ц…nъ?_|ёE6oоЬWОђvяоЭии/М№ЅR‰;wђъЋЏpѕеWГeЫCЬиМy3wп}7Я<ѓ cccДЖЖВmл6иЕkЃЃЃtwwѓѕЏЖЖЖКчrџ§їянn7[Жlс‹_ќтŠЋ…^уbЧЅоќsЮЧrаппЯ›oОЩЮ;ч%JœэcЏїaOЖmлЦгO?M2™ЄЛЛ›элЗгбб1m?ЇгЩпўэпђз§зЌYГ€Ÿ§ьg<јрƒ8gШkwтФ žxт о~ћmEсвK/хЏўъЏŒЈ€ЙŽ/Ы2;vьр•W^СfГq§ѕз Qb)E‰кА|>Я‘#GXЗnн’ЕaŠЂрp8ˆFЃ Ž?ЗйlF(‡\Щ#0444Эe^їЌpЛн”JЅiЉYŒщщщЁГГг№И,œRЉDOOJ>ЃђоcЗёйЮž|ч]J•Я~єЃЭиЧЫ/ПЬя~ї;bБщtšЩЩще;ўЈЙ™Ў )œ(SBR‹ХB45‡‚Ќ№сhПУСКpШhŸ}ћ-$ЛяW ‰М@ Ь ]„Ј}ЊНoп>~ђ“ŸЩфwэкE__?ќ0<№ЛvэтK_њ’БЯяџ{Оџ§я‡yюЙчј›Пљ.ОјbОїНя …xюЙчxшЁ‡x№СчunoП§6нннUŸ]§ѕфѓyZZZј“?љўьЯўlжяы m?Їs‹—™цg>ѓБPцЋŸ§ьg|щK_šw8љй>іѕxѓЭ7y№С <ћьГ<єаC<єаCuлЖЕЕёџуфОћю`ыж­ДЮv|п}їБuыVўѓўЯШВЬћoџЧœэлЗЯыјЛvэтФ‰<іиchšЦ< D‰Ѕ$ЬЂ^ЕраЁCƒСUІХˆzrЫP(4ЏАЙ„ нCB–e4MУхrсvЛ ‡УX,TU­R4Эз,IХb‘bБ(„‰E ЧŽ#ŸЯЃJ'Уa"йЎ|Ž‚ЂА.црј8В)\`ЖОjУ5 1РяЧ­ЯdAыюFЋФ@šqЛнx<ВйЌЦЁ{1шТХb„ ЇгI  ЏЏuыжыoЅzKШуу(™ДЎЁi№ЯНН gГфeЙЊmКXр­сa,’Dяф$—ЗДt9AUб ”D[$ч0сp|lYњѕ\{эВѕ}."ЦJЬƒ@ЬХљФwмQUнюЅ—^тОћю3rjнyч|ѓ›пЌ2‚Зoпnxс _р‰'žрk_ћZеgЕ^І3qфШ~њгŸn ыпЧzzzxф‘Gbыж­3 . i?Nч—r\2 ЇfЋ§зejjЪEXlgыип}їнЦО7мpO?§єЌэ?§щOГ{їnЌV+W_}ѕЌmіГŸU}Ÿџђ—ПЬmЗн6яуПєвK|ы[пЂББбX[ЖlЂФR f†\.ЧёуЧЙр‚ –D№0‹ЊЊЩ)ѕќД'ЫЪ‡‰FЃ8l6[UySнЭеJ ˜WYF+‘œNJƒƒhЁЧ{{) Ј’„нnGВлБO•C8œV+WЌŠSPŽ$“‹:іgклБыašZ#˜СшFЃфѓљe уˆЧуьпПŸЖЖ6cЭ)ŠВтМ%фD‚моЗп‡2і 3NЯЙЏЊiєOM‘*йVМ&4rяьУбб‰ГЋыœYзХтыKвЯ /ьсГŸ§ˆё{№поПЈОkћ[ъѓ[)}щЦзRЭУJПж•мпJžqOˆ{тƒК'цтt“ ЦbБЊп‰DUХЛxР’цѕТ6ьvћi…mЬtъ’$™ƒЭшFb­ыОŽ~у abvJ•’Ѕс!”ё$П55EЩf'&Ы”,&ќ~\Х"EЏ—R4 љ<жdајpД‘VПŸWћћ|ьŽ@€GЁђДцѓƒл6KО=ŒC–edYžVcБa6›@ Ррр nЗ{EzKhЊŠj*Ї:Y(ђі№H]A"АeЫо{я=~ћлпVmKцѓМ=jЧЊЇЇ‡ПњЋПš&xЭw}­cПњњњxт‰'јЛПћ;4McћіэЌ[ЗnЦќпљЮwј‹Пј ўіoџЏзK&“с _јТМзии8mM,чUt­—„.єіі.њ†3 цушЩ-=Я’]‡нnЇЉЉ‰D"СддЅR Y– ‘Eb-I’ћoЗл—Ус0^VЋ•BЁРБcЧkмкЯд|д w™щUoŸЅFE%рљћ+U4ддTyќхU!69AУD_>ЭfУвж†žУ бэfM(ШКp˜VП^Чvлl|ИБ‘ "šН^ьКхѕЂ­^ •вЏ3сёx№zН”JЅ*сЭцЋ_|БъUO№:Чўt) |ћлпцЋ_§*---ФуqюМѓNюЛяОН+ђљ<—ЫХ№№0їwЗ c~ъSŸbЧŽŒ166ЦŽ;–хкЮЫ№ Г 100€Эf[”hP+Hш§—J%<ЯЂУ6ъсp8ˆХb TЭ.ћfaТьТ_›ќRг4ŠХ"ЧŽЃЋЋkY<&jC[j?ЬзQ{]ЇћЄ^+•ШНГoкчzu†бlŽЈЧ=­ZƒkАЌк"ДhЩbEрџjkEб4^эяЧgw№Юш(v‹…’ЊbГXU•ЈЧCЋпOРщdMшTKЭчЩb”ЏpP(Шd2гМ%є0‹г#ЧƒУс0\Йl6ŠЂоt‡Хх2оŸLЅ9HLksбEбнн=/e}8“сб16FЫЂЅtš9a@ Lч–[naчЮмyч|ђ“Ÿфц›o^вcш1ѕџс?ќ‡ЊЯџчџќŸИнnЎКъ*ОїНяqќјqЂб(W_}5ЗмrЫŒ§ЭЇНйЎ­pБRИщІ›иЖmщtк8Зг™йЎuЁc;чЪиŸ.?ўёЙьВЫИђЪ+Я>ё‰O№Ю;я№уџ˜Џ§ыгіљOџщ?ёшЃђэo›p8Ь 7мРя~їЛyѓц›oц‘GaЫ–-иl6nИсіьйГфз&}ь–{ДѕW‘џ~лКsњ?НкФ–zшТџљ?џ‡@ @(ZTпЕеоeM(D^‘qZ­xыЩZkZSг‚Ч?‘H0<<ŒЭfЋz™C{jЧhО$“I‰_|1nЗЇг‰Ус0Ÿ'—Ы‘JЅІ=эаJ%вџћ—soяŒŽёћY\Ь.Кш"ЎЛю:іюнЫЏ~ѕЋлu|КтВрОј’rвKяПџ>>ŸЯPЂѕ11ћJЊNRNxЛ|9%&žљЦ’ѕЗдчЗRњ?ПRњ9%Ф=!цuњ99I:6bd–ТјжџbБˆлэ^”и1з15MУnЗгииhxLј+ašІU•lд=&є}E!NS,б4ЭxТЭf9x№ ыж­;­­za,ЕПЯійBŒ* ЪиЋѕYˆ8Ё ЈЉД!HhМкпЯЩtzZЕ†LЉ\­сѕ“и-zјh<ŽЧnC+PI–ёlМ€тРrтT’ U~_й(Ž•=h<іщЗЁЖf-фrhЇ'h…B!вщ4ЉTЪЈШЂч}XЌ'C0ффЩ“ЄR)C3‡и|PЦЗdГaѕћQІ&б€§K˜ ` •&U,тw8NЌ>Ÿј+"@ ,ч…(Q›рRїf8vь‹6ЂЬ^fo‰@ А$Щ-gWЬТD8f||œ\.G,+W„0цњyиl62™ #•'џЧhЋ?‰. 8p€ѕызЯЋDЊYPPŒѕѓE˜зНI …Ѕ’\йW3D}ZЬя- VЋ —Ы‰лэЎђЉ­>bўМvЬ…<ž їіЉj У™,яŽв319чЕ—T•Ѓф…Giѓћб™‰з^Хsс‡А67cE#ŸЫ2хpž(WуPN,Хšd›ЉTBmŒ–ѓZjZ А Z, U%B—*щЅ$I466200@CCВ,о9z‡ўѓL J:’.чPTЅ:ђкP%ЙЅV,"'и—)ѓА`i8›J Šђ‡bjYJO@ „(Б‚D‰ZA"ŸЯ344Ф…^ИhБЃі…BЗл]З2ЦR‰+Ес"щtšX,Цфф$уу󆇆ЭfЋЪ+ЁЊ*уууX­VBЁ@Mг(•JЦИŒ“Эf9|ј06l˜1”c&ЏГј`~ŸЯHЇSфѓyєЁs8ьИ\.pЛн†@"I,Љъ |БX$—Ы‘ЯчЩfГLMЅ$]˜q4рp8 cXїбt‹ХRe ѓgšGYUйŸ›— aцd*…Іi4yМFЎ UQ@Q-–ШGc’hИнTПW?J8ŒжрЧšGknF2‰I‹% 255Хдд”!дѓ&9йП?…BС№МбsK|P /ЫзЃ PKWфиф$—Ч[АHRY4[Aa‚њ†ЅйЈЎъ+уZEј†Њ>Јљ%V f/†Ѕ,ZЏj”нч—вKb&ƒ_Q’Щ$^Џ—ЦЦFBЁ===$“IC˜0‡:ŒŽŽЂi@€X,f“њ8И\.#$—Ыqј№aжЎ][5NЕžЕчfЎіЫх˜˜˜@–, ЏзKGG>ŸЧ"K+ЊЊJ&“%›ЭT2Т&€r(J Рэvb„~^Ет„::J~џ{FŸЏ r49QїxГ•HЇyЙЏџЛЋ€ќСї)Œ“їxшшшРjЕв›N3–Ыб Id*ŸI’„жвR^/‹HBYЯH…BфѓyEЉkj…ƒ…O/:44DGGGU•Ѕ Y№ѕz#Ÿ‡љš–J”€rŽ‘‰‰ &&& /†Z‰г%вггC[[›ТЁ{K˜…3&L( j:]?`c4ЦПœ<ЙшnЛƒA# ЉV*ЂfГUU>+O8пУ7<з^Kv–ф­gЃa.8?…!NW цD D‰sR”PU•dВзϘ2 цОkŸ‡Ус%5Фъ]ƒЊЊфr94MЃНННJ\Айl†0111aВ,#Ы2NЇГЪѓЁž0сvЛБйlF•’cЧŽбййYхž_+F‹EЦЧЧ)KИнn6lXзы=cs­ С`Y–чфЩ‡АZ-466VU&БJџqcџЉBtБ4­п…”,* cйœ!J $Y†Ъ[­VVЏ^Moo/љ|‡УQ5ўцœKх-‡ЩхrKю-сёx$‰ЩЩI#„УМ>—:ŸЪœзjЗуОшbroП@Шх4JЏ.†ЈїдџŽЎ.lсАјЫqЕ†љRъžkЏ5оЯt s›Z–[0XюўgЛЖzчRЏ§\чИXctЁbШэБВюi}юЭт„&V‹1~Э%kћљУўР3Я<Уў§ћёљ||єЃхЖлn3BЂгщ4<ђЏПў:‹…?§г?х/џђ/g§§јуѓOџєOќ›ѓoјђ—П\ѕgЖѓ9_цD ЂФ2 њOГБ400@0\tПЕ‚AЁPРхr-Љ!^›ЗЁЖфhSSnЗ{њФкlДЗЗглл‹$I*уW7zѕџ”k… =Ќ@џY(8vь˜ёдп<žВ,“HŒ“ЯчЌ_П~бЁ‹^и6БXŒX,V'N2<<‚нn#‰`ЗлбdЕт!Ћo еэыќџaˆз]wнœЧ>4>ЮХБ дL­X“w…лэ&244TхaЮћpКBA=М^/.—‹T*ЕфоС`ББ1BЁс…TbTOєZ.д\Юxїљи‰№ЮшhнЖћіэcпО}ГізфѕђсЦЦSїЉС,ытпоПИўў…Шцу™ рZcx!Цєщшѓ9ЦrœЧJeІkяЬК–fY'K1ЦgЛЗЩ™˜л…ŒбBл›…=ЄCч– atvяоЭ 7мРЦ) <љф“<№Р|ћлп`ЧŽШВЬу?РУ?ЬѓЯ?Яч>їЙКЧњЇњ'іьйУŽ;јжЗОE<чškЎ™зљ!J,™Qo6 Eaxx˜еЋW/КпкОKЅв’{Iд;–Ђ(ЄR)‘ШЬ%#эv;єєєdљ{9,уTRЩщТ„,ЫH’d<ЩЯчѓ‹EzzzhooG’$Earr’ЩЩI<7nќРХˆz„УaТс0ccc?~œССA|>С†,>ЄRи,NЋе(їЙкаЃB,>?–:с‘H„d2I&“ЉБєФЄKЦ!Iх\SSS†З„йSB[D‹`0Hooo• aЮ)rІC8ь-- ЉрТЦS…}SS ю+рtrХЊSU6ьёU8ЛЛХ_9˜xц‹к!1ъf#ХќЄЛžёГ! щѓl"цКЦ™Цћt ћ…ŽSэz[ ‡Г1ќeЙѓ>њЯ…ю?ŸіЕч%„‰•‹9Tр­ЗотБЧЃППŸP(Ф-ЗмReє/„ћя?%DКнnЖlйТПјEуГз_ЧмјN{чwђ­o}kFQтХ_фж[oЅЙЙ€[oН•]ЛvіљmоМ™ЛяО›gžy†ББ1Z[[йЖmькЕ‹ббQКЛЛљњзПN[[лiяcцK_њїо{ЏvўТ /№йЯ~€оо^ОљЭoђф“OVЭ‰,ЫьиБƒW^y›ЭЦѕз_?ЭЖиЕkП§эoЩd2\yх•мuз]ИDxЊ@ˆЫ#HдєКaЖиакўEСыѕ.ЪcЖўkУ$$IЂЕЕuNcЯЪЁ Хb‘ббQZZZ cд,LШВL*U.­шёx Ѓ5ŸЯ9&Z[[46lИЏзГтзCcc#сp˜“'O–~ŽЉ\чdЁШx>П$Ч9œLraД‘‡5Ђxђ$ЮЮЮiBAkk+===Ц|жЋБT}  N“ЩdЊJwšEƒг9–О>RЉTU›ЭVuŒ3%JH їЉЕшw8И(Cе4ŽWцz>Dмn.ŠFi4y!IN'вF2™фч?џљi§ЕМ§ілtз<Јѕ(еПужЃЗЗ—ѕызПЏ_ПžОООEгяџ{Оџ§я‡yюЙчј›Пљ.ОјbОїНя …xюЙчxшЁ‡x№СЕЮe—]Ц;яМCGGЃЃЃ<ќ№У\uеUx<іэлЧe—]6mŸ]ЛvqтФ {ь14MуЈкО{їnіюнЫјC|>?§щOyђЩ'Й§ілХ‚QbЉ ГaЏ{ .IшF­XЫхƒ‹Ўц1г1Э^йl–P(T7lЃvЛнхаH=Af45ђ H’DЉTbhhY–„…BСш+ŸЯ#Ы2„BaКК:ЯЊuaБXhkk#sєаaђйЎR‘€гAихZ2aЂЁт1bёxqЌZUЗлэ&H$Œ<ЫЦaЗлБлэ”J%C0Ј'LœЎр‘H$UоЕžgь?ЕHЯGўˆќЈЙ,M^Ÿэъф•О~гirВ<уОVIbu Ыš› .ю‹/U7ЮBуљtУ7цу`6ЮkьmЂЯ\тCН6њ{Г1;_сa.&žљЦДžг‡™˜RЄXhNŽ3uЎѓ9Ю\чiЗfkЋ Т[bebЕZI$LLL‹ХиО}ћ’є{фШ~њгŸrп}їŸ]~љхьиБƒЏ|х+@9œ#7Khe.—ЋђHѕzНdГйEзіэл WђK}с _р‰'žрk_ћZеgO=ѕдЂї1‹/Пќ2Ÿџќчyљх—БлэМікk\sЭ5ьлЗЯ|ц3гіyщЅ—јжЗОEc%ѕЮ;яdЫ–-Ціпќц7м{яН†ЩэЗпЮWПњU!J„(Б\ТDmшЦааёx|б§жіэp8ўіОW№1WLŒ1 ТQ†D ‰1&9їЊQY\ЎїD@D qЙjrЎЙ7ЃцФf‘e˜}ŸщНКЊыћЃЇjЊkЊЛЋЛЋ{z†z8}ІЛы­wяІŸч§-#2]шб†вУхrЂ(щKD+†‘,&Ьf3ќ~?zzzрp8`ЗлAг4|>мn7hšFQQ‘”тTо/‚ РqAз Їг‰ŒŒŒ1З7Ьf3L`ц‚ю\@€чuЉ;Рэч`Ѓ)м.|>aмZJJJрp8рѕzGІ+е9Cnn.мn78ŽœU.ИХ*Nфццтќљѓ!.bЙˆ—Ъє dNL™™А>€чAX4yк]ntК\hьэIшѓz‘cБРэїувЂ"d04*хЂ%I‚`‚i@‰ю4jБд‚N† J™SЋwУ–-[pџ§ї‡XJджжтщЇŸЦќcа4я}я{8vьXиzЌV+\.ВГГ.—+akщиэvј§~Инn0 3ъY8Є"3gBр|ч04%vJь6\\PЪD`РД’с(гШёлц\rш‡ŒёAАѕ&\Ѓ}ŠžL"ЇEŒа:~5ЂЏЇ`ю~=з])RŒЗ§œъ}m§ Abь`кДixр >ќ№C<ёФјЏџњЏИы;rфžyц<№РЈЎЎЙ–™™‰ћяП_z§ч?џsцЬ [WEE%‘ЄББ“'OSѓkЕZQZZŠwоyfГѓцЭУK/Н„ќу(++SQPP€ЖЖ6iЌ­­­!з‹ŠŠАiг&и@Z`\§…sБHдuC­n‘иeыH\дžчсt:AQTBm‰Т„Ых‚ХbAAA”FГЈЈ(**EQ0™L’й?Mг`fГYњK’$xžУW_‚гщS‚„Чу/рJ1Yf3ь Ц `Hљ2ЗКМ„J K9ВГГAгД”ЖS-`Є^]ŒТЙYФл–˜…C-‡ИG„Щыь9АЮž˜dis‡ˆl3ђZ„eЦХА\r‰!HЄ)r–oN8 І^Ф+Rv‰б+єВ Ь0вЕHѓЁьcЌЎ§ћ~ђPОєjэ›М\8Ћ˜tЂв‰Ь‰|/BФиФЃ>ŠsчЮВ8Mфeџў§иЕkЖnн:B‚ё+КККрt:ёілocяоНјсRFžEЃІІ{іьA{{;кллБgЯžАA1гпќц7ёЬ3ЯрњыЏ,ZДO?§Дj< ёњŽ;аннююn)ћˆˆ›nК O>љ$šššРqЮœ9ƒGyФиЬF уоRBNю:::PTTЄЛh`ЕZuM*Bоw‘фХъЖЁГйŒЩ“'умЙsYYY`F"Фгmё„['CќFќЫВьХФW˜>}ZRцAoAТэі@‚.74ЫJзKь6LЬЪBCOъ§šRHкl˜”•9МWќЌІО•––ЂЉЉIЪŽ!F)УЕ–АлэАлэpЙ\вžв#ИfNNZ[[1iв$е}+Ža4LЉ!ѓHыЌY@ ЎЛўіvPљљрКЛ@fч рvƒ`hXЊg рvГx0…ДF"cZ}х“%œ$rrЭ2"YŠR+Кjь[ГЫŸ;1eЈ™?дbaШз}<“шxD­СK Qg|aС‚x№СЅьvПњUdбX)Уi9wюм ИуŽ;BюљѓŸџ ЋеŠ9sцрЇ?§)œN'fЮœ‰‡zH5c…ˆoМmmmXЗnєњ†nамŸtСW\?ќсXИp!`сТ…иЙs'ОљЭoЊ–_БbЖoпŽЕkз‚Ђ(,[Ж G•Ўп|ѓЭ <№кллQ^^ŽUЋV›йРЈ˜ПђЁъК`ЯšщуfPrыПп–eсp8№Ю;ярвK/[ˆPжЭq\.233#~!&"Іp'eУ ( гЇыЗN>ŸgЯžENN222$a‚$I$)TAЄ~ˆѓ)ј|ОЁŒ tк У‚„[Š">lЌцІІ ШТ№~s3ОюяЙвŒ \?y2,T№Dо<Н LyЙцћOž< Зл-ЙYа4-­‡(щAъ›ššалл Ће*Е! RтКЧгЮчŸŽйГg#33VЋUВЊыыŽхsьїћСqœДЯМ^/<”&^˜‚€Хч…Жd˜пŒŒ иl6X,–cзkэtћт'ќїo“пяЫŸ;ˆ}kxОdImXrЎ™Ž7žФX ЏсњЈeўb іi."™ѓЋ‘Xqэеж?‘ЖеШt"ѓ“юB‚^ЂN,т–š ­=ё;kЩ’к1ћ§5VАdI-AРз_=ткљѓч1ў|c’ 00>јрь9U†Ц#ЏŒoK љim___ТdYЭuC$#ЩъПрR/+ 9ф@аOONZФSz‚ TcXШ$cSА8yђ+TUMOJ|D —Ыžч%Т/КЄP2—†4aFAxAРйЭm”ed`VaЁ$H MPL§,))‘Ќ%D‹ ЙХŠ^ж™™™ Бd­%‰aaЗл188Лнж=DOb~љх—Чїйђћсыю•‘ ЖЇц‚№n7˜ЌЈфЇc‹_ЎK=е­.Mѕ=wpјКќyŠHЛ+‰XHэh‰ бdЌd;ѓ}­їЩн4ємwZ‰ps™ЈEŒощ Ž„›­AQЕ|gi]{=їIЪПыFЙ> H%Ц(Ё&ш%J(ыAWз ЅoП<(MгШ’Х?а ‹'NDгЅ@ffІ4‡E…˜ѕ›L&Щ•CI. ‚„‰ЦЦ“i#Lˆ‚„гщЧqв ЖУl6ƒЪШ—џ—_@№xPbЗЁи6o;‡6— о)$)“ Г2Б l‚м&іyѓ`в˜ВU„шF#Ђ]8DС@ЏLЂ ‡h5ЂWjPQ”ГЖŒvjа{СсРРЇŸР  p §eђ `bdуЦџ iŠбŠ%ЁL•0Ёе}C/1"UsЯКЧ2пj8Е\KtŒgїpYL’!Ц0`Р€C”HKaB.ˆЂDaaЁ.B‡<ы†нn!ЛBЂт„(Lшm%!—(LˆЂх‡ ’0ЁcBI`Х> UАйЌЃГ8юцft45СцѕТ*а4@’ddР<$LHж!33xТЯВ рњŠЩhq8бчѕт‹Ў.'Ы"ƒЁСђ\V\;Э`jЮp0D‚ІAX­1 " BвkЪcKшe)С0 H’„пяWЭТ‘ˆибжжQ•И‚€юЗпBРчƒ’іUљЫіt|џглдJdTUџCP%ёŠ Љ&дN хm&CŒаJкУ‘їdХPЋ7R`RЕыёЄ25RYŽмс ёК1g 0`ˆуRP’z‡УŠŠŠ„ Мв#VђИ,Ы&œqCЫxЬf3ЪЫЫqўќyА,’;Yg@ў\I.Х> ЈЎЎ‚еš:a‚w:с:}žѓчA€2’эgшяC /ф„ !1˜9—рyєў›tЫ„Ь LШЬРєМ<0Є нn lVјxfЫлe—У”€;Ovv6:::рїћЅ,b№Qqўѕ іvЛ§§§#>/r!ї ЧŽуT3ˆŒ†Ѕ„ЏГŽуЧСЛнУл€ гэ†ляGПЯ‡ †ЦЄЌl˜I”‰€РѓpŸ9 OrцЮA[/З1…xЌ$є"ИzІdЄ•dйР0ѓGŒ—e?€kЃeM<бВў#№мС„…ŠH'їjsЅEXJЇдЁЃ 5Q'œ@a`ќсФ‰иКu+ZZZв.pЄтCMMMR>ЯукRB$ј0›ЭвIЂѕŠ$ЫbБшOBй†зыENNŽnІћrABž!Рl6#77§§рy!U жЇД˜p:Чq!BЯ{ааа€ъъъ”ОŽvєєQДСL=нzКašu)ЈтbЩD иgЯA€чс9ўЅTž!ƒc.ВќP цЊj&SB‚„(eddHщ5х.ЂЕ„–bPFŸЯж…#жЖL&†гщ„Хb ›r4U–œУззЇРЛœС=.ЈящХ‡­­рЩћhA‘н†+JJP–‘уРііР}њ4ь]˜Цeіd: zg*ˆ•АЋе%љpФ0‘О$JЖc Ž ŒtпPњЯ3Ь1ѕY)HшцsДВЏЄЃ . eИыЦvэк…ЕkзтЪ+Џ4&У€ћБŒq%JЈY3‚ [KљУяїKQі“%ІˆЄД   щТ №x<t`жЌ™8uъњњњ››;МYdФгћЮЮNx<$ Гй,ЙА,+eJЈЏЏЧХ_ ‹Х’ДЕјфxллЄзМ  ЯуE}OИЁ€ЄЄЩ„‹ѓѓ‘kЕ€"Цо/ПпйЬ9—IѓB@р8xKJсїћ‘рСѕі"`БТфѕ6рё€АX@O™ Сы]VІлXђѓѓ188тТЁ‡%Cˆˆb6ƒІiИ\.P"P%*v8фхх…ИOF\ Чёу№Ѕwuћ9|мгƒ“aЫїx}xЇЕ 3ss1Ћ0ј™sžliЗУ2a‚ёПХ(b4cIh!•‰Š‘ю­ДррСЃXЎb= Ю]$‹ НњЭ’@Э$еЄ])вФв~Ќ)W/TЋ‰HБdм00ЖqњєiЬ;7- rBјс‡bяоНhhh@ff&ЎИт ЌYГ&ф7АбЪєбGиЗoNœ8ŒŒ Ь›7kжЌIJlИt Цђљ WпРРж­[‡ЎЎЎeNŸ>gŸ}Ч‡нnЧЊUЋFЄmеZ~ЌЬ}Мѓ~яНїтЊЋЎТwПћ]щН7оxџјЧ?АuыVC”H7aBOЂПП?nQBNЂ”Ђ„<[…ž‚‡xТьvЛС0ŒЎVЪЬ!УV <КККPQ1fГеееhhh@oooˆ+‡<ЮDww7X–…ХbAQQhš–в˜zН^єііТхrСуƘH†0сin†ЏЛ[ВjшtЛqДНЭ*i#OііЂ<3——ЃШf\o/иЖVа%ЅRЪЎЎ.x-VTЯ™“  ЗНM(! @фчƒ@2 Р0 dqtљ1gГ фт„nўЁКеЌтЕhнBF;Ў„їќyјћњІЬ,L˜7ЅCзъъъаж6,`б4ММ<\}ѕеШЩЩСюнЛa&ILЯ ўИp~ut~>Ш$Šj.\$3Ю„\Ш­)єЪ!ж“hПGKH$vFЌыvЁYMhq…1‰ фћm(P{К“РW_}Зоz+fЯž “Щ„з^{ >њ({ьБИЪ8pЫ–-УЌYГрѓљ№Ч?ў[ЗnХУ?<.зYœ[5ёGФ /М€›nК Я?џ|ШћЭЭЭјэo‹;юИП§эoсvЛёмsЯ…%Ђ•яsЧwрс‡Ц’%K@’$8ŽУў§ћёлпўvЬэ‚ШОбппŸЕA8Ÿ{НтIШл‘“9žч‘“““Д9’ћ§їѕѕСl6KI’’0!ZLˆD’ xН^8N$‰I“&$I№CA)Š’„Šііv№<Џз;$LЬ€ХЂЃu Яc№иЇвыГƒ|вн>ABDЇЯ‡#Э-˜[\ŒŠь,~?œŸŽЌќp@P№њP]]%ЙЭф——Ѓcаж‡‚€@’€ЩrhЭє D ЙЙЙR SЙРІg;Ђ›ˆ\8‹+ёДcЗлбккВGУR‚эя‡РГІ˜ЋЊpюќyьлЗЫ—/Чѕз_—^zI*[XXˆЋЎК &L€Ус€ јЄНх™™АбxЇЏз%F Ѓqc, jVЂ ЧАЕФš‰фx#jУХ6ˆ–ЙDQуB$Т‰:†@1ў TёяЁC‡PSSƒЛюК @ww7<Пп]ЛvсШ‘#€ыЎЛkзЎ•ФŒššм}їниЗoКЛЛQ^^Ž 6 ЕЕuuuшъъBee%юНї^Lœ81ЎО*Х‡[oН{їюЛќцЭУ1pЌV+жЎ]‹ќрч*ж1&:/jы ъzФƒІІ&|ќёЧиЕkзQт…^РmЗн†ыЏП^њmњы_џ:ЂИЉќX˜{БɘГaУьнЛ}}}ЈЌЌФЦUc!VWWcъдЉxы­ЗPSSƒЗоz •••ЈЎЎ+т<џќѓ8vьxžЧe—]†Ÿ§ьgRЌТhms‡;vрэЗпEQXКtiвО3Ц•ЃДšХЧу‘т%ш%vЄИn(… šІuГЦPЮ\ј№ћ§pЛн#6П(Lp‡ОО>ј§~)ˆЁcˆєчччƒІi)#I’RъPŠЂ——†a X–ECC=|>Ÿncќт S;|I цўрXsз]ИуŽ;FXeиl6L˜0kзЎХм+ЏФџЕД ЫэСѓ†Лў„Њ !bЪ” xН^p'=’Ш133fГYZ#%Щ—я™xa6›aГйBіƒ|ŸФ[Ї8GrABю’la‚wЛс9п$НІ33бпп h>Ј([[[Бoп>)ћ Иќ~œ^;_˜cœєЧKАТ;L–0‘ˆxГoЭbUAG$Dk Е‡ћ7Т>R=–tм сDЄxbqŒз ‘ qŸЩп3bIŒoˆ„ыаЁC!V Ÿў9~џћпурС ˆZWW‡sчЮaлЖmиЖmЮœ9ƒККККўљЯbЫ–-x§ѕзБhб"ќц7ПС{яН‡M›6сРXА`žzъЉˆ§YКt)–,Y‚Еkзтѕз_—~ѓ(сѕzёЇ?§ sцЬб4N-х;†ЪЪЪˆѕФ3ЦDц%мњhYXБsчNм~ћэЊй ;†ОО>|џћпЧ-Зм‚­[ЗТщtFœЫXЫЇлмЋсу?ЦO<`юмЙя]Нz5іэл‡@ €W_}?ўёУ–§ня~‡я|ч;xх•WPWW‡‚‚ьоН[sлuuuhnnЦГЯ>‹mлЖсЃhБћ Q"<љд%ž„М^Žуайй‰ІІ&н…yКQ‚ twwЖ]-z{{‘““Ћъ&"&z{{СВ,ќ~?<DєƒœžP&ЌV+(Š‚ЩdI’№љXдзы'LАннвЫ/Чпўі7<ўјуШЭЭХW\RvњєщИђЪ+%ы—п/ЛЛиюx<^UABT\srrазз/ rС@Ok‹Х“ЩПп?Тт@/bпдд„ЎЎ.)@Љš5P<АлэpЙ\a]7’ ‚І$ЁЊзы…‰ЂрїћOДЊ§ƒь№5бFŽб@К[IшMЈт!i9Ы7Gœ'ёzЮђЭК cIˆPГNаУкaМЮ—ŸљО’ЯИ”Е†8qс ЖЖљљљвыУ‡ЃЖЖ………(,,Фњѕыёж[o…мГqуF”••СbБр–[nлэЦ=їмƒввRщНЦ‡‡Тў§ћёњыЏуо{яХ;яМƒ;wŽ(WSSƒ›nК @mmmдБh)ъд)<§єгXП~}ФКтcЂѓЂ-ы >љф bсТ…Њзажж†;wтљчŸ—NцУ!–ђciюяОћnУbБ`йВe8uъTиВЈЌЌФO<ЪЪЪˆй%wюм‰9sцРl6УnЗcѕъејју5З-ю‡‚‚i?$ уц—ЖR8I~"ўljё$8ŽCKK ,f.—Kw!E$Ÿ~П?фK[OёC$―„пяGyyј@~JWŽММ<)ѕЇ(н7B?—ѓGM\бz-YЇхЩ&Н‰X=ŒewŽHжZ‰TэњC4ћ5‹€’œцчч‡ŸnmmMJж9eТ§FДйlXКt)Оњъ+m{6Lљ#GŽ`гІMјЗћ7Ьš5+-зPM(а{=Юœ9ƒŸ§ьgЈЉЉЧІN:т@,Д” sŸ(DЁ@.Јс‘GСтХ‹ёТ /рЏ§+^{эЕАЎKj(((Б Q"Fв-)‘ШiМžчбкк С!;Ы ’4щжg%qуy&“IЗ@šjV"бх84І;” тIxooЏd5Ё&L @I‰ЧсФ‰ œУ–*ЎЁиёœˆgвУћƒJ! ххх ISˆ ‘ KЛн.EжUЦ“а $iBNЖ @GG‡.Т„йlЫВ#ЌRe)`YЩRТL’јєУa6›qчwТl6у§їп‡йlЦеW_=тФFŽ<™ычpП@ $иE”dO)XDrПшпїЋАЪмЦ+6i!єЦ’ƒZ?еbЏФ+ТФ……… bћіэшъъBWWЖmлжд?^<њшЃ8{і,8ŽCSSќq\{эЕвѕ-[Ж ЉЉ ЧЁЋЋ Я?џU№zНАйlАX,шшшРќЧФtџЂE‹АcЧtwwЃЛЛ;ЂkMЂЗй7DфvЛQXXЈ‹ !>иэ *ЇNРзЇл(ЗRs №љ|0›ЭКІMTГ’p80›Э1Ѕ…‰њњxНŽŽKnЂ(бзз‡ССAМММ„дчѓe}ЈЏЏЧŒк\9DAТсp‚€1ы0сg100€3f`ppйййhiiAii)fܘїо{/Ќјa‘Х  4AAХ"e3’#QŠЂBЌQєtпТdBх”2œќЊ .7‹ііі!б…ŒЛNЙЅDЊуI••KiМm­АP$2§,žxт deeappPъЧƒ>rпkЏН6МЯ гђ†ѓ“gTWПSˆБb%ЁбŠжŽZJЕћf>ўћПЗЋо!КmЈ Zз&–ЕзУCйnКІеК‡c$д`ИpАrхJькЕKђUПікkБbХ ]лИъЊЋАiг&œ?………ИюКыАrхJщњ‚ №Ш# ЉЉ ЙЙɘ7oюЛяОАѕE+/ЦЋИуŽ;BюћѓŸџгoюdуЖлnУ† рt:%Ё žѕ‹ЪlбpУ 7 ЃЃkжЌЯѓ˜?>юКыЎИЫ•ЙO~ўѓŸу™gžСУ?ŒММ<,[Ж яОћЎцћWЌXэлЗcэкЕ ( Ы–-УбЃG Q"щV{ˆ?^ˆ1$М6S*J`fЈ єэЛHтxžOJКQy;bšЮЩ“'Ч\I’˜1Ѓ_~y^Џ§§§№x<ШЬЬ„еjЧqpЙ\’ЅBaa!, 8ŽQ—ЯчƒЯЇM˜ <ЯІ)Р'’H>Œ›oО3fЬ@KK Ž?Ž3fръЋЏЦG}V” Йе‹ЖE-))ЦщгЇ%K žч%wyœ‰DEЛнŽССAUї=bXЬ …ŠЩХ8зд—‹Ekk+&Nœ8ТчL+DK Еьzѕ;Lцс}4ЇЈ_їѕc@–M#*ssQ4ФLŒ D.єNЋЉ#Ђ‘е%KjCњ fлHйO”иЦв7U‹•ЈЉ›’)ЄЄAWГ ‰Дџc$R•сЦ@ъЁ$ІjD•aЌ_П>l=Е{ДО'тškЎС5з\їue§бЪЧъвЯѕ˜—ЅK—ŽHёm=ЏZйлoПЗп~Лц{"•+sO}ё”™;w.цЮђоЭВяъhmг4 6`У†Щ­л IDAT в{Ы—/7D‰X ИЯч“‚,Цƒ@ €––№œv)SJAљ˜ыХЇдHІЩd’мєЊ_мuƒ фццЦU/I’˜9ѓ’!ї‹рЉ8ЫВуHˆQhхnЪѓaa"ќRЭЯO$œЮ  С0 x‚@Рэ)Рcz^.^ќт дззУfГapp@0аЭgŸ}R—2QеP€‚f@чцinn.ЈЁЌ4MKs* ‰XШ‘‘‘ŠЂЂЦgˆ—р'5aЪфœ=з—'(L”——Ч%ЌˆŸ9Пп?BH2/™ џРќ}}АP$O™‚џ=}>ž.8йэИfbљp]3gЪиb љXўмСД \Ž,i!з‰ˆёљt!зЃE0SеЎžжЪО6AЗїєpз0Ф 00.E %aK$Ш%ЯѓhnnчїРjЅ0uj(Š ’P‚аХHBM ­žЉ@•ѕ8иlЖ„Ш3I’ИјтЈЏo РnЗ#€aиl6иl6)ЃƒЩdRDЂ&М’Х„МьА сЯѓ`‹УР4ТL’ИЌИŸvtH‚„\V\ FŒ" 5Š4$IТfГa`` У€$IP5Т#Qk‹ХšІCО<5ЈЛТа:‰ŠŠRœ=зЗл+YLШ3ЋФвo1ы…ZfœЄƒ `8 МЧ‹€зƒB›ЗTMЧ‘Іѓh “ЯкL’˜ž—‡yeУAƒшм<˜#Ф00ў QК}пУ=RЫб&зzЖN€а[ˆMЋ‰pq3 AТ€ ЂDв­$>nЗ;Ў —Ђ…ЫК`Г‘˜:Ѕ 4-f’­$tŒ'!ОSЇЯдw~фю!~П?jФV­ф|ЦŒ`КP–e‘——šІAQTHКPa… ёzP˜`C„ QЦUРl6ƒa˜Эfа4 ~BШцf@PŸ‡‡nЗІОйlЈЮ-#d^|qLcЯЯЯЧРР@HŠUŠЂFьУD„ †a@„j0M=ъРd" š&1ЅЂgЮЖУэqЃЅЅE˜ˆ4MУчѓЉfФQлџЩ€uв$XЮ†z€ІqcхT|нп6Ї ^ŽCПЯ;McRV&Šlvкdў†„ 9пјL: „"#gљцˆ$вz‘P%ŒV_$ЋбДPPЖ+­хZ8БCi=s№рQ,^|ЙьЛ2zlŽБА"ѕ=UkЊе:"AbЌЇ@5`Р€†(Г8Ѕ„ hiiЯч‚Э$ЬfzˆT‰D|xк>§єгИћš••…Щ“'‡є›у8н­$фs#’[€@VV–.mˆС/аггƒќќќс FQ!.‘„ ‚ РВ,X–E}}ЊЋЋаииЏз Ћ€ЂЈa‚ЪШ€0”дNгИВМџhiA‡ЫБЯХv;ўп„ А‹}1АhЬB"";;{„k…шТЁ'щ–З!OzњєiИ\ЎИ,BзO‚"Уа˜2Ѕ gЮДТуu‡Иrh…Хb ЩРЁ&H$;Ўи/КцЂ"єМћwˆрЪœTFqЧ0#kжЅуZ8x№hZжO}‰ДЏ%5ЅZšCљћ‰œf+  жћSuRЏE‰66=ˆЈкыНяэc2м8дъO&ЉWі?R{ёzэXж~<}зЅК>Ѓ‹ššš˜c$0`ˆi H(Х –eЅ“ы˜ ЏV‹ ••`fhб\^A˜@šLШЩЖЃР•@‰Р{rг|НЌ$”s"gЏз ’4%TOaB$еЂлƒпяЯѓјќѓ/@СК†EQ’(Aг4†Mг ч~ОcŸ!рѓ"пjСЂЩ“ааг‹/ККР)RhR&fЂ:?O$L+ђ,Ѓ+‹шЖСВlаjcШRBLщЊ—0С0ЬAрp8@S<q“ћœl;H“ & AЖaahTN€гЇ[сё:%‹ ­эа4’5DM$Kй—\VђЎМ lOœѕ'‚aдк'˜hйsц€ЪЩIGkЅt„ќ”9бСzд%fмˆЇОxлW/e`ЩXв4ЦzšHЦ‡б&щŸ}RЎБж}mэqС‰4Іd zќHC: Ъ= ѕ3Џзї“оu…њ ТlР€C”HˆЧcu V ЪЉA A‚Ў†b# LІM›˜P??ќЈЉjкЎgЪŘ^Џ7)iqŘ… 1Х&Чq!я‰ЂMг!вb&Oлвох„Іё’b|ЃЄЇњњС Aa‚$LЈЬЭœV“™АNœ2Юl'VЋНННАZ­вќ*ЩЗq%„q№Э+f$дЧq0™pœ эwЬ ЉSЪpњL+<ž 01aТMm™LІˆ.'Љ“:'–вR|>ИЯœiГСзбKYxЗееAabœ‹ТЁh$)\*ЮDˆЊ^b„VabД‘Њ˜Њ™9FqПЅТЭBOЗ!y}б У]У€ˆx Їг‰элЗуƒ>€ЩdТwОѓќшG?ў}ќс‡иЛw/™™‰+ЎИkжЌ ˜=ZyAА{їnМљц›€%K–`ѕъеIЗд4`РР,JЈЙ*h ф(Z[[сq;`Б•S'Рb>ЩZB$Щ‰+AЕяAЈК7$2'ЪДŒЧщцКЁ‡0!ОХŽуЄ8 ђzI’”тUШAР:e шМ<8?љžС, хЊ›щ$ ‚$‘=gNB™ВВВаггт^!&єˆћ К­(Х%q%Кх{Zмя„@@ ˜-4ІN-УзЇ[рq;аккŠВВВЈугЂ&3ѓFТy’нn 3p8‚Џ7ўG%ˆVЩ"Ц‘RjIуЉ%ЂТOЪФTсdъhnjЎ0БьŘбтTŒu"QwŽpё>є$ 1Т€;vьЧqиН{7`лЖmјы_џŠo}ы[€W_}Зоz+fЯž “Щ„з^{ >њ({ь1ењЂ•ѓЭ7qєшQьиБ№аCЁЌЌ пўіЗХ0`Р%’/LЬшЃ•okkƒл5‹yX'tФ›^tdЛЉ€”y#юra‚ иуД H†0! &“)$‹…HМХkђыт_ё˜23‘qЭ5№65Сл|№Б0BS@šЄЭыФIАNžœ№XэvЛ”TNР€n{Ebф–riK.h%К_”ћ X,Lаbтt+мЎAДЕ(--иž(J(ыжS р8.}ОHЉq™]y\CN–дLж#‘?ЙKG8вЎЮt%ЈЃA" "‰YЃŠ4UэЧуЮЁfmŸ‚„%фюŸ~њ)ž}іY455!77+WЎ Kњ?јрьоН9CBызЏЧC=$‰Jёсж[oХоН{Уі#ZљC‡aеЊU())ЌZЕ uuuaћWSSƒЛяОћіэCww7ЪЫЫБaУДЖЖЂЎЎ]]]ЈЌЌФͿ'Ц}кoš;vрэЗпEQXКtщˆпhuuuјŸџљИ\.\yх•јЩO~"YгFЛ^SSƒ5kж`џў§рy .ФКuыŒп/вІё0Е@zZˆЁ(H80›LZ Ћ•A№є9 ѓБˆє/фНDJK 9згRBMX!Bзь‘„ žчбггПпŽуРqœDохq$фnb K‹Х‹ХГйђIК(TˆѓРqz) Н%eШ[0Йѓц#ывйШšu)rчЭGюќљШЛъj] @ЬŽa Б’а›€г4="F…Tї G"{RЫ§V+ƒЉSKa6 p9ажжqlЂ(.уЦhЙqH?$гJ"YJ„8Йпx#D ˆ–"S,Ÿl‚šбOfц=D9–?w0Ѕћ&Va%šа•Ќ~h‰Ё!п'j{Ц$ ФŠЭ›7cХŠxу7№ф“OЂОО>byљЁA8{іЌj9Џз‹?§щO˜3gŽІ~Ј•?{і,ЊЊЊЄзUUU8wю\ФzўљЯbЫ–-x§ѕзБhб"ќц7ПС{яН‡M›6сРXА`žzъЉ„я‘ЃЎЎЭЭЭxійgБmл6|єбG!з8€Я>ћ ?ў8^|ёEp‡?ўёšЏ,Fž}іY477у•W^16ЏC”H…PЩRBДЗЗУщ€…0uJ)lV3 '{*ЯAРЛяУЁП}ˆCћрѓБ8t8јоћџј\=ž1E$tz 5ЁdI%b&DqЂ() ЅХbУ0!QŒ]9Фџдф‚Dgg'М^ЊЋЋ`ЮЭSXыЄ USX*+[з1Š);ХёDZзx!wЏЗ#[ьˆћ­ПпЗ|‚З|Ž ЕinюФЁУс§џ;ŽгgкЅКNŸnХ{яППї9:;ћA€ЭjЦд)AaТщ@{{{иБ‰"ЪhЦ‘0` œ@ &NФJ@хўїђz”"EЌm$“(GšdЭs2к‹–:6^с)V,Ѓ%J)уE„ фšˆ !Џ7бНb`l$Iєєє ППEEEиИqcиВsчЮХŽ;аппўў~ьиБgDЙššмtгM8pрjkkЃі!\yЧblЗлсŽ’:~уЦ(++ƒХbС-ЗмЗл{юЙЅЅЅв{ п#ЧсУ‡Q[[‹‚‚b§њѕ!зџђ—ПрЇ?§)JJJ‘‘;яМяОћЎцыЄњ Аnн:ќэo36ЏДСИvпн!даоо‡Ѓf&€)SJaГY†mAŒmђ\˜%ХљxћЃCЄ”ЦЕWЯСбOqњt+р[‹ч “EЕ>FщЛоСwффX Љ—kVaЂЁЁНННШЫЫ Ѓ(.ˆЏEe HљCy*ЮЎЎ.I cЬЄЗЊg2 b%PdќаЃ ЅиЁtс€ мЎqЙМ8љеyР• .ШсЕ/-ЩЧћџї9њћhmэFiIšТбcЇРѓфчeЁ  [кГ6›S*JpњLŽў`ЅЅЊыЮѓ|ФЯЇЉА’Pšв'+#…TЖ™Ъd-.cё4[žЅ%YтI*з й"ˆВjЯ儇TYGу>ј ^~љeМјт‹ШЬЬDmm-цЮЋZЖЖЖO?§4~ќуƒІi|я{пУБcЧF”;tшмn7іяпЧO>љdФ>„+oЕZсrЙ=є›Ш›ЭБ.ёЗ*)Sђ=ŸЯ—№=rtww‡ќž*++ Йойй‰еЋW‡М'џMэКђїZYYКЛЛЭk m0Ў,%д]Њ‘oI ˜RQЛЭ2|к<$BШŸ‡AгІMФФ‰E€†Цs8sЖ _? ˜vQ9&O*2TУ&їщЏ’„ъ5'ђGpNRqX&8ŽCoo_H KЙ#ЦŒPfк­#D‹ ЅˆСѓ<:;;сёxS*H щ›$ЎЬОЁЗ(ЁВРвО Лпф{ ЁeMЄ з^sйPп|yќ,ОT„ љЃИ0гЇ•џlыХйs€™—T +гІ*zиэVTT”€Ёy єЁЃЃCU”ађ95pa"еБ$"ЈDтJЈЙq„'F#D:j„7UkŽ"L*Ц­/BKкOC0}єQœ;wN: ‰є;sѓцЭшъъ‚гщФлoПН{їт‡?ќЁt}Ы–-hjjЧqшъъТѓЯ?йГg‡дQSSЃЙ|MM іьйƒііvДЗЗcЯž=RPЭtТЂE‹АcЧtwwЃЛЛ[Ъ"тІ›nТ“O>)ѕЬ™3xф‘G4_0ЂўE‹›з@кр‚ЪОаззšцPP˜Лн†$ №љќxыШЇ bmТ­п+€vЛѓц^Œїоџ\т}W]y)35tЉъ}3c$k>‚d6‚-J&Nœ8ССAфцц†ˆ Jps!'ч~Пgд‰`?‡E’фЕA„8е§іъўЗ1шpиo/Мє?вѓЉSЪА№КЫƒФЬЩhnщ‚л4-ЬЭЭ@еє‰СКУ vЛ…йшшьG__ ‡3Ё„% qТ@:уhЄUIДЂ•‹фKЏДШџM'WŽб„–ОХc%‘n–"ЉX‡HЉ=ЃЅ§Œ5~D,т…ё рСDGG&Mš„_§*ќguЮœ9јщO Їг‰™3gтЁ‡ ЩHБ`С<ђШ#R&yѓцсОћю‹иvЄђ7оx#кккАnн:щѕ 7мvsИbХ lпОkзЎEQXЖlYHъѓ›oОAр@{{;ЪЫЫБjе*ЭзрВЫ.УКuыРq.\ˆ+V›з€!JЄB˜P“Щ„ќќ|єіvЃЋГ6ЋYY65Ma#?‚t)3УrЩlfM\KH)9Sžк†ЅDh_ Х^P мMŒЉЛЛGЊgДD‰`ц AuЎ“НО O .PГBŸН$M&˜J%š ЦЈъctЃЋГG!??_еэШti ^‚Љ'I‹…ќЦ"jФ3BЭ]d4„‰HM2њЂgН9Ы7‡ОёмAнкIц:ЈeКаЛНH„ќuИ –Б †a@L .ФТ… 5нwУ 7DЎЙц\sЭ5šлŽVž Ќ]ЛkзЎy\Zп‹ч%hšЦ† АaУщНхЫ—‡Œуц›oЦЭa„жhзрћпџ>Оџ§я›з€!JЄ$IŽ Ћ………}}=8wЎ“'!+г6‚ш14…%џ:B@@@@r –пЯсяя}rп;яУ-7_**9Vg’тixВDšс6ЃВЧЁООE‚a˜.rAB‹•D @~~!€ЦЦFTUUщžN5,Ym(лSkwўМKрїs€О~Ž}v pѕ•—‚Ђ‚ћ3Уn•ю§ъЋєѕЛЄћ;:ћqњL*Ї–Љjƒ7ЮыЫQШЭЭGaaсQ$UСT аB6•'ц‘NŠЃ‰ZШЇжўЄђФ9’x’,’я<)ЁБ<ŠХ‹//XŒТ>‹&JЅBј —ѕ%’еˆ!H0`Р€C”HВ(СѓќˆєЂЂ`Ъ 0б‰ŠЩEШ&&VCЇ№@ЯKa?ј№8\./`ж%SёХёгtс“O1oюŒЈ’„ф&њЩВf <ŸzQB$x>‹Хё=жБgff‚у8444 КК:хТ„šEBВDЅ‘ян7”36i(+ДЖѕHЂФ”)Ѕ`h*d7 К№ХёГСЯFa6<^‡Ÿ}~ЅЅyАлC-‚œ ABќ<Ђ„-­XjЄ<i3ЃY$Є‹8‘jrЉLЇmbщ_ЮђЭ1e4н:єš­жсі—сЎaР€вуš5ШSK*QTT„œœ<А‰Гч:рtИe(…ч‚ўaШ…!œhЬиС9I­(! ,Ы†dўˆWxQs•АX,444РяїЇt|‚\u?Bф§&—СeBїГЁЈР%OФЌK&ќ?9гщpуьЙА‰œœдззcЦŒI&X–Яѓ!ѓЋм‡zЕОЮФDel!$ћŒ—›ХЙ&э‚„Иеіžžssљх—ЇЭwŽљ$fЯž}С~_ŒQB(‰й7До/ЊpЂ01yR!,fr+ ‘ќž9лŽA?$Шn‘pŠ–Щš“ ‘'000еQ$'xžУ00›Э0›Э`F%(Š_B)H8dddD$С&“IRВL)‚ РчѓСчѓсФ‰I&$Ћ€pё2&X–ЫВRџCХ Ч>?w;Y™ &O*Ъ jфёјадм ?G###ЅЅЅšлS"нN b„‹‰б"­jBVЫ‰xЩd*2s(-@дЌYвAJе>P›s­тƒšХ„кОŽ7нЇ!Lˆ"џ:t555ИыЎЛpрРtwwурСƒ№ћ§иЕkŽ9ИюКыАvэZIЬЈЉЉСнwп}ћіЁЛЛхххиАaZ[[QWW‡ЎЎ.TVVто{яХФ‰У’цUЋVI–žЋV­B]]]X!ZљXы‹g ‰Ž[mўDяT‘цюыЏПЦІM›`ГГ"оvлmxэЕз"юГTЯ­X‡\ЌйАaіюн‹ОО>TVVbуЦЈЈЈа@ РcасaЪŒO‚)333FЬ єш:'ЪMг№xМ)$, †‘Ђ !З”Ч- H‚  ЕЕ ]]](++EAA ]gЙ‹ќСВ,М^oв„ Ч# ђ>Щ_ыб†ZЌЬЬLИ\.„)ЌE4 :œрyЯЩь#ЏХљцј§22Гc$€aK‰dYћŽ"Њ IDATHMY]ЫŸ;ˆ}kkn3жОЩЫG;uN%љеBЪcuчHE*бx„ 5—­ui фkы~‹ЂYЌE2‰xіjЊОГbYћT~зЗњ%ŸjюŸў9~џћп#??PWW‡sчЮaлЖm€­[ЗЂЎЎЗп~ЛtЯ?џљOlйВyyyx§ѕзё›пќГgЯЦІM›››‹з_O=ѕžxт еОœ={UUUвыЊЊ*œ;w.lпЃ•ЕОxЧШИУЭП–љŽK—.…зыEii)ўѕ_џп§юwУZЫF›ЛyѓцсеW_ХвЅK!іяпyѓцЅемЊсу?ЦO<ььlьпПO=ѕžzъ)Mї>їмsШЩЩСїОїНˆх~їЛпaнКuИяОћРqў№‡?`їюниИqЃІ~дееЁЙЙЯ>ћ,AРж­[5ЏёцЭ›ё“ŸќѓчЯG__^zщ%C”а*LУ0№љ|1п_VV†–!(LœыТФ‰љ`hžуРѓ<!W№ВЫ.‹ЋŸт‰>Чq#HvВ2GШE Ÿ…ЯчƒйlNš !ZG(Ÿ‹Бф_XЂˆаббЇг…йГ/ХЩ“_СяїЃ   $г†’ќSж!YТ„ЯчЯ@’dHП"эЩxрїћ%QBўЈЈЈЌDТЕ Ÿ~њ)0$q~?‚€ №zYДДіѕ“АлГb$Ф§ 6Я† ‘>XМXŸ˜^зs5ЗЇЉОcбBдДjё$єЬЎЏ;‡вЊ@/qB9'zXLЈн)јЅц§њмA]ї№h‹S‘Ќ%Ђ ‰ ZЪЅƒkrН“љ}’ŠКЦB}ЩBmm­$HРсУ‡ёЛп§………€ѕызупџ§пCHђЦ‘——Их–[№ќѓЯуž{ю yях—_лІЧунn—^лэvИнюИЫЧZ_МcHtмjа2пБŠOтoе3gЮ`ћіэhooЧКuытšлuыжсž{юСK/Н ˜)1šыF:Ьэнwп-нЛlй2ьнЛWг}/НєX–Хš5kЂ–нЙsЇємl6cѕъе#ю‹дУ‡уЁ‡’{зЏ_Еkзjъ'I’шщщA?ŠŠŠB„C”а@Р­V+cОзd2Щ„‰>4яЦФђ|P”iˆpёКіS~‚L’dˆP‘hНђЧp6ќ~?Ѕ/ЅdЂ!ZKШ­$ф$Zюvбйй —Ыъъ*$‰ЊЊщhl<‰@ €ќќќ1$)UŒ-!8’-L ТчѓСd MMЊЇ•„8ПЪ5е“фs/‰ЌŸ— ›mXˆЕЏз ›Э6аЅ Ѓ™!!šIМ’ŒЧ*(шMLу).[GЌ§T#УzˆБЌ“–yї“^'ТЩ šhь­Ў‰ёXУ${?ˆќ0ŠŠŠB^їєє„И—••ЁЛЛ;ЄŒHВD2Іі^ЄCHЋе —Ы%™ЙЛ\.Щ= žђБжяЗДЬw< iгЇOЧЏ§kмyчaE‰hsїиcaбЂEXО|9€`L‰­[ЗbЫ–-i=ЗёмћкkЏЁЕЕїо{ЏІ6Nž<‰]ЛvсдЉSp:gекюююkЏ>ј ^~љeМјт‹ШЬЬDmm­юAlЧE$:5ѓp‚ `БXbўАЪ…‰ввRXЌY`YšЮwѕљрљр_]bhS™L&Щэ ТЧ0‘анн“RAB pЉ$xžЧqhoя$€ DUеtИ\.tuuIAyžВXBм8Ф€šr Б/$IJТ„ТOww78Юж‚C2ЮВьWˆpE<†іГ РВš›{рѓ0›3PRRwАJŸЯќS) B…T@+)Œ5 BВHl,eе,дHl,=еъSZ˜$š‰$1`,Іе:яrk 51mД хоH‡ИF‡’Бў&•#??mmmвыжжVщ$W/TTT ББQzнииˆЩ“'Ч]>жњF“)‘ьљ-ВулуЧуЖлnCFF222pлmЗсјёууюѓѓ—ПќŸ}і~ўѓŸkў=ќШ#`ётХxс…№зПўЏНіZLa FЌНVL›6 <№іяпuыжivk‰ук}УjЕЦ-JˆAYYš›№Иамвƒв’lXЬ‚.§TSD+Ч“pZPeН"q7™L0›Э№xмрy^R%HˆDWДŽрy№xМ!‚„ДI) еееЈЏo€ є 777ФB.rD‹^<ЯУэv‡Xm„‹Ё<X–›!сv,ЫЃЃs>жГХŽттт„Вg(гкъ=/ЦЦ:‰д“xБьЊѓ#ЂпЏГ|ф}ђљ“—WыпО5‹БќЙƒaЧ!жЅ\—œх›c6пWЖы\]шЄ6’˜ 5†к=‰ФˆGH3,& $Š… bћіэјХ/~иЖm.\Јk555иГg&MšиГgnКщІeф #•зR_: ++ MMMR?“1п>њ(VЌXђђrДЖЖbлЖmИікkуžлЪЪJьлЗO ТИoп>\tбEуjЯ>|GŽСУ?­- :::Аk硘к]Дhvьи!­Н˜Eы:Џ\Й&Lа‡{ŒwQByŠLгДЇ ^‚%ZL47ѓ№zбвкŠ Z‡” сE ŽуBL›єiфжEСэvЃЗЗ7.Н ŽуаееV&ЊаааШЮЮ–м4”1R!LєііeYIPКШшEТ].М^oHђXjы›!РЫњбжоkcЖЃЈЈ(ЄўXыГŸа4­›ХˆБОpюБ’Ўd‰5ЁbФцˆЯе ЕК”‚„Вe}‰бpd:ж9г:Яz \ЃeEk ЯdzЛ^юєРЪ•+Бkз.Ќ_ПpэЕзbХŠКЖqу7Ђ­­Mr)ИёЦqУ 7Ф]>жњF Знv6lиЇг)‰ёЬЗмUG™ЭуЊЋЎТІM›pўќyтКыЎУЪ•+уžл_ўђ—иЖm~јУ.Йфќђ—ПW{ўБЧЯѓИёЦUЏ‡Г>њљЯŽgžy?ќ0ђђђАlй2МћюЛšл]БbЖoпŽЕkз‚Ђ(,[Ж Gjs…\А`|№Attt`вЄIјеЏє?p"цЏ|@ЈКюиГfњ˜]\1sЯѓ№ћ§щєzНј№У1yђdX­ж˜ы”ŸфГ,‹––А>lV$Щ€brуt)jбuСяїK}wЛнШШШРєщгžљФ6|>М^/‘‘‘YГfš бйй ЏзQУяїЃЁЁVЋйййRœ Й0Ё6ЗbZM1M(ЫВрy‹%.aт‹/ОDOOЬfVЋ‹Ešб…DЬ0’!?yђ$ККК`6›C2™„›лX№щЇŸ‚cћСё>8~PДЅЅЅaуh‡ЧуС™3g0mк4иl6X­VX­жДАZц&Hю:ткyН^x<8\~yњє:zє(222$[ЋroІ“€ЋvrТW‹—DЦЌaцƒe?qвЏ5[A$В‰,ЧCРФ~ЪХБ 5 yY-‡gAЭRBMрPОۘд,&ТeпˆUGtхѓЄЖOf~Tq*м:ЇR‹$<(чOK™dЛkФ;жxл4ё;Kќмы§}’ЪКвН>†™A№ѕз_ИvўќyЬŸ?пPS 00>јрь9U†Ц#ЏŒ˜тlљs=тJШы$IХХХ )мž:ZJ(Oи)Š’т%шQЗ2Юи–еj•DБ HС@:еее№x<шяя‰1!žа';Ц„лэ†Яч…ЩD„ŒO-ЖDЂЂ’<ШЅr=•{4Ин<@˜C2œ$ŸЯšІ#ц4,' $zŸˆЋљјЧв†(8ˆB€в}BљžRœаRПšшNˆEја"&D›Зh;ZНЩpJещОж8б\"вUїG/!ЯˆYaР€Цћ†ZАЫD‚FЪы$I………hmѕƒу0f§њ,Ж!’[žчсrЙ‘‘ЁЋP#@’$\.š››5YeŒЖ !&ЊЊЊааа 999!з“эЪбмм—Ы Š"Ѕy” zŠЛ\.pЇZЗ^Т„Ÿ'РёђѓѓTыVлKбРВьQ")Б0 Є-Цj, ­d;œkHДИ 3|]|.ПG~=t>Е‘КхQ f= жяœх›ЪФ­LДПу]‹5‹†š@O@ЫTЛVЄKъP 00і0ЎВo(IОh рѕzukƒ$IфччƒЄl Х|P#}ђ“vŸЯ‡]чGЌ[NЄЭf3gTс&]‰ся ЊЋЋрѕz%‹ ПпŸt‹ –eсp Bв<Ъсˆx<шяя ІЉw ЭььlP” YYY!ЎЪЯRЌPГ”PЫbРРx€8ЮАѕЦSПЯчƒЩd’вЊџ4Šё‹БK"QB+YзУ‚"–h5ы -ї(ћЊ—+@ИРŽ‘D”БДWТ‰с\zєДHgWУjтТ иЪ}5ђщд_ьоНoОљ&`Щ’%XНzЕє{Ё­­ лЗoЧ—_~ ˜9s&jkkQZZ:ІцЬА|0``œ‹J‚/'C™™™p:q‰с\+„џЯо™GIV–їџ[kWoећогнГ3Ѓ$јЃHŽЃЦa$р9!: jдф'Y…рIXф`д ˜ЭЩD=bEЖa˜™оІЛz­ЎЊЎ}ПЫяюїЮ[oНїжНUене=я—SдvыНя]ЊІŸЯ}žяЃЊH&“E&‹VЧ&6иђ ЛнEQ‡бннН&P‚м;Nx<Єг)ƒAtvvj@"™LB–e-› ЎЎ.—Ћf€Q]]e~iƒзлЌ &HаЌЇL&ЃeL0 ‘J%ЕђsшЖ™ЌЇD% ‡УH[ ? `ХH3ŸЯkЁу&“Ix<žЂ9гп%!ЁZ fJ * ТЋD–ъд`uЙjУ‰Е№ІX‹@Йч˜•,3Ч‚ЗЯЫ"Е'ЖВШй(`ы]§З€џєЇ?ХЫ/ПŒ|№ѕЏ§§§јр?ИуŽ;pўљчу‹_ќ"рШ‘#ИуŽ;№эo[!!%jHАИзыE,CGGGUЦ%c[i#Y Аc“РY’$ЄR)444T}П8N ЈЊŠT*ŸЯ‡ЦЦFŒ!•JA–х‚RњОV€ &V2&€ццъ€‰Н{їbzк‡|^вЖ™€ ux~eџс–J!ŸЯeI№<*‘$Iх-МŒЋыI$”рy™ˆ,‰­Ћ­%QЪЂœРо(Eпh]•ŽOП^.˜рЭгШгB/+d+/^v„•зЦе3ИД 9jѕ;&Р„ 0ЎЙцєііЎЙц>|XƒИ§ілЕП‡ЏМђJќјЧ?жя}я{nИс9rС`ƒƒƒИёЦ1??У‡#`чЮИх–[4Иr>УгќЧр‰'ž@8ЦЮ;qѓЭ7cddD[5љ|<№~љЫ_Тщtтcћyф‘˜c4–€5 %иРŠdJ,,,T Ћтљ|™LЇj`‚ @3™ †‡‡Ћ @иEQP__D"уЧп„$х5 сrЙ4я…ZDOіюнƒSЇNа$0ІС„ЋЊŠ\.‡T*cЧо€$хсvЛ 2$шэ'`‚оЯх* њI№ )­(“Щ —Ыy™АcZ?‘H ЇЇЇdЧ&„6k Zn •ЫНPqєRˆљRIаCЦ Ÿ;rш>rДhdœжƒgЦfA’QћаJ‰_ŠЭ3ЪЩ‚Аš]bfпеz`_j0Бѕuљх—#“Щ ЏЏњЇŠ|ф#кпЌІІІАwя^эљЪЁiэљ…^ˆ'Ÿ|—_~9TUХSO=… /Маp§/Ој"юМѓNДЗЗу™gžСWОђœwоyИ§ілбжж†gžyїнwюЙчžŠ>УъЅ—^Т=їмƒ––<ѕдSИяОћpп}ї-їЃ§KKKxјс‡wп}wйc mvmЃKНl›Э†ІІ&фr9ШВ\VOOqЩd‰DЂЊ@…-Б •PTкай$РЖлэˆЧуHЇSPEЫ aD-‰3`ТƒН{ї"‹k,xц—tF Н­…й NЄг)„BЁе?мЯьКtƒ ьЫ•,ЫкёfлЗVГѓF"‘@<7єЊА:О,ЫШчѓЈЏЏ74ч@bыЉVВ$иЎ’,^UЭJoEŽ|Iz№Bя34рFlд1й(Qu˜iщЉ˜—ZПоЙЋз"t3єfK‹xйBVl~=їмsxъЉЇ№Ь3Яр–[nС/љK|ч;пб]>NЃББQ{оииX`TнuзсЙчžУЅ—^Š~єЃјяџўo\§ѕ†sИљц›бппЧƒЫ.Л ЉT 7нtњњњДзШEЌJ>Уъ†n@OO<ЎИт Œs—ћпџ§_|ц3ŸAGG:::pнuз•=–€5 (иŒ€ЦЦFnw‰rэ+Q­ЙъuсШfГˆD"U…64ј fС`Pƒ lvЙ‘ž|Іж€D!˜иƒX,ŽD"Q&E)ЮА0ІББ---ˆD"Ќa[‚V+K"‰ NРЃЮх*™LdJTУ@3™LЂЎЎЎЈ=ЊШZя hГ4МyЖМЃ$зJщШЁ%aбzƒ‰rкŠжЂа+ŸА*ЌРДjьзZџАmaиZrЙ\иГgОќх/ушбЃКЫеззќML& J—яОћn\rЩ%xц™g№Ь3Яр’K.С]wнeИюііvэ1ё•c_c;щ•ѓ™Rые[> iх*ИІVз-$$ DС6РonnЎ №:+ЖЙ\Ўъ …ОI’„`0Xѕ}D‚^X\\д~№ш–™Nа0‚”*д* џлЛwЂб(LАМvЁфqCCАММ EQ L.Ћ•%С`ЩdВxАPЂвв\.I’t}$*ФO‚mZM/ ЁквСGŽn™Ž%оўЃЁ=aPшkцНZ5 JЪЭŽЈ 3 ЖjР.2$ЖОl6›Ё—зШШHAТЉSЇ J—?Ž+ЏМMMMhjjТ•W^‰уЧoъ}вббЁ§§  ЂRs!ЁЭЎ-л}ƒgv977Wq0ЯY‰DЩdnЗЛjР€зЖ3—Ы!‰TЅлыK0;; Y–5№РцДБ#Щ ћЙV &іьй‹бб•vЁA1 xчDgГYј§~lлЖMыŒQ­Ўбh™LІЈCJ5Н$<ˆFЃ†&šьїЩŒтё8Z[[uЧ­vщЦЫ/П,~С…j"x5,•Иœё|ИУ4d0&Ь”еЌeщ^;ЬrЛRЌЇŒŒ)цjdlЪОg6C‚ЗмfF]n„ЖŽnЛэ6\uеUФќќ<юПџ~Мч=я)X†6}|пћо‡Ч{ CCC€Ч{ ў№‡Еewюм‰#GŽрђЫ/Ав}cзЎ]›zНїНяХC=„›oО№аC‰GH@‰­%xe^ЏccceC6˜'їЙ\ёxmmmU)Є(Yщt~П---vєКdY†ЯчC.—г6ы!A^#ž› Hh5дcЯž=хОЯ‚ vў,ЈШd2XXXРааVџXiА­Њ*‰DрvЛ кŒвС}5жЧ‘ЭfсvЛ Ы7ЌЎ'“Щ”є“ЈЦќ‰Ю9чœš9ЧNž<Йщ~+­ъ|ф(Ž:P•БЪ[Ез]mxA_vЛѕЛp№о3zН,ŽEд­љѓЃЧm=И~P мVІМуМVЧоœ Ћ ЫЬљУыЦБ•рƒ•mЂїF§Flфo]-ўв­@ЩcўјџЗп~;fffаее…‹/ОW_}ЕюXња‡ААА љ*|шCТ>№э§/|с Иџўћё‰O|№–ЗМ_јТ6uЬrѕеWуРЁC‡рt:ё‘|ЏОњЊˆN…”и @BИнnдзз#‹Сыѕ– ;иБI ‡$Ip:ЯŸЭ”eYЫ–ШfГˆХbhiiЉx_ЩВŒЉЉ)Єгi(ШŽ otЩ`’ђY–jHœ иН{ЗІиИt' аsЙццц0<<ŒњњњЊfIуЭ‚‰jdJH’Є™h•oXU,у ъyKmМИ ђAVЋ2ѕGЕ•ёИ@›GЕƒЇJ—нш Ўг_Ћm+ЗЭЈеNь9aх<БК§еЪŽ03—R@‚5kЅKCj%[Т>№о+ї;DoГЧоъяЩzЕЦ3#Кu%ЋwПћнxїЛпmњѓ6› з^{-ЎНіZюВИэЖл*š[ЉзЪљL%ыpЛнИщІ›pгM7&''ё_џѕ_eЏ[HH@‰„<†ііvD"‘В „< ]8*)­а›;э-@Ўа{НоŠ‚;Y–qњєi$“I(ŠRд]ƒѕ Ы€Т Пп_ѓ@‚ЈБББL466Р:рЇЛŸшA€\.ŸЯ‡элЗkfHхHUU,.."j)ы-QЩК$IТфф$RЉ•ЖŸtV[ЖAwйр‰Э!СЛvэЦјјl6›цьЌЊjAFыС–p˜‘Яч155U˜ YdНtgžСe%ŠFЃHЅRZщ†4А Ђб(†††Šк˜ВыZЯРвl;FЋAЄеё6"ШвK‘/єU#ахђМ}VъиTcП™mХYNv„•9Zѕ0Ъ"YыРНšАЈмyZнПBB›UНННјмч>‡|>?њЃ?Т_§е_‰"$ ФVЌЏD}}=мn7‰ššš,GЪBљ>вŠd2YаcЙ’љГ%ЄL$NcaaЭЭЭ–A‰DBF-?щ ю4HЅвиЗяœM$ˆššБkз.Œ#‰Е`r8PUЕаМ§zњєщВР„,ЫE^tPOїєЙ]Ž’ЩЄV"Т–UT’‰‘H$рt: М0жкOBhcЕ–цˆЕ6JНn%ѓ`НŒ@Q ˜ AOЅћ7жZяOДВ[gЕ€яјTВпЊЊyМиr#$„Ю}єЃХG?њQБ#„”иŠ@‚ѕ• |RТaJАуГрУnЗ#‘Hh)ь•Ь7ЖУс€Ђ(p8pЙ\HЅR˜ŸŸЧЖmлЊ $HЦ{Ѕ^UUЭ?B–eФb1,//Ущt!•JЃЙЙiг'ЄЅT$СТТњњњ4№Р-№ќ&$Iв2&Ќtb™ŸŸG,+Ш†aїЕJТс0Тсp8ЈЦ:"‘ˆVКa”%!€„аZЫ(Р4—ГЎrЏДoT0ШЫі0л-BoЛxЫђіщzˆRСo9ЧЌ atžUZR АЌзyVуКM=…ЮбCжbyБХўPb Т ЖЖ”pœ8qƒƒƒeЉWТсp8Яч‘Яч ћ0[] %HЖ1<` IDATМLЅRZљA%@BЯд’ф$CB–eDЃQј|>єєє`ii ccЃшььФРРв٘ˆЧу…ЊЭЭЭ…BX\\Dooя™/ЦЊi)НxFІddГYфѓyLNNbЧŽІРD*•B,C:F]]]ŒЈІŸ97IF№кЁš…фјЕ3PbkЈ–Г$6т +фГы]ЏTћr‚kzоz€‚Э„0(ђ2)jщ)7;ТъЙХлЏz­A­ž#zэVз n­зxB"ћRH@‰M $x†‘vЛ]ЛЂkЕд‚—С‚‰X,†H$‚ЎЎЎŠцЮtWY–Ч133ƒ={і{f€)л`Лl€›”lDЃQЬЮЮЂППNЇ===X^^Цьь‚Санн]ГчE6›Хшш(2™,РуЉƒЭfCoo/ќ~?zzzŠ 1aдa…€ RЪa&TUХЬЬ ‚СрКdID"„Ус"PW)8HЅRАлэ№x<Кцœt аVЅJШ{4аqЛ/BУЅ—ъBžжƒw}†МЦћШЁ8Hu"Щх^( —Шxz,tЉFН‘Yы‘Ё$Ъ9'з;гAHШJрЫ“™`˜4ЏuНUѕи—Ќ&''ёня~ЧGcc#ЎЙц­ЋЊЊјоїО‡ŸўєЇ€?ћГ?У'?љЩ-їwся~ї;9roОљ&šššpс…таЁCКЭ~ћлпт‰'žРЩ“'бммŒЗП§э8tшкккtП_ јЩO~bъ;Щž›с8lщL =УШжжVDЃбВK-xž‡’$!•JјOTkўt ‡гщ„Ђ(HЇгК Р* X Y–‰DАИИˆmлЖСщt"ŸЯX)ƒp8вˆFЃ˜œЬb~~ƒƒƒшшшЈ™=—Ыa||Щdйl‡nЗЛР#d``‹‹‹XZZBww7\.WСћz`‚ч5‘ЫхJ‚‰@ €D"ЁGєеюКЁЊ*RЉВйЌvŒЋU^‡баа [КAŸOLl~mV/‰jy ˜ зr4H EыС; €D9а††МРк(Фl€nі8UћxЕЇЌfv„U QM№ :W­ЗФеxЁййY|ѕЋ_ХЇ>ѕ)|ѕЋ_E*•Т#<ЂA‰ŸўєЇxљх—ёрƒОўѕЏЃППќрЗд~xњщЇqХWрмsЯE6›ХїПџ}мuз]јЧќGюђO>љ$>іБсМѓЮƒнnЧќcмvлmИћюЛЙп­ЇŸ~ЁPШдї‘46УqиВ™tVмwvvbtt§§§ЭBT*…D"цццŠцЯ‚ К„ƒ€‚l6‹`0ˆІІІЂ2$HлЯr€ёˆFЃ№ћ§иЖmмn7$I*€2.— ^Џw’‘JЅрёxазз‡ŽŽK еT<žРфф$rЙ,RЉdY.ЪйѓbлЖm˜ŸŸG0DgggAm&x";vь(*чIЅRƒˆЧуšБ(m.JgIT#Ы ‘H ‘Hш–VTвЖ3‰ ЇЇ‡ TияŸP­ŠЕхvщ0‚Ѕ` +ЌТ АЁ_ЃяЋсP+в#GKюzО<рRэVŸеn{jfе0НЌE ШВЙѕЪ+ЏрЛп§.|>кккpѕеWуƒќ 0‘{:ЂпpУ 8rф‚С qу7b~~‡F РЮ;qЫ-ЗhўjГГГxєбGёъЋЏB–eМэmoУ_џѕ_ЃЅЅEwЊЊт№сУјЯџќO$“IМы]яТч>ї9x<эoщ|?џљЯсt:qљх—nsЉхyY ьvц3ŸСгO?`0ˆЃG–Е]є˜љ|?ќ0~ё‹_.Ојb\{эЕкпІя{пћpу7т‰'ž@8ЦЮ;qѓЭ7cddФpоDџњЏџŠ+ЏМђ'`хbх—Пќх‚@љškЎбJЄЏЙц>|иT0lДэ7п|3>ќсуНя}ЏЖќвв>џљЯубGECCƒсБхэkНsжŒюИуЬПQѕѕѕИікkёёКЧšРЂ}ьcxт‰'tЯЋgŸ}џєOџTђ|2х‡ѕв–x@‚dЭЭЭАйlH&“СоищtЫЫЫ†нЌЌOЏ5( dcБ|>$Iт Y–Й†–VФааъыы‹цEвnЗMMШчѓХыЏУoG(*˜уZ)“Щ`ll Пџ§яqќј…‚ˆD"$Љ D…nНIŽ%љ|С`PѓaeŠЂhЧ”оv—ЫUдRЕЎЎNѓ9}њД–UBŽЯчC а>OцФњyTЃу†ЊЊX^^F4-YКaUЩdЊЊdJАаC”nlmЕŽћ,юНї^œ8qЂ p~юЙч Њ_|wоy'žyц\rЩ%јЪWО‚чŸЗп~;ž~њiМѓяФ}їнЇ-џo|ўчŽЧ‡Fgg'ОїНяЎѓщЇŸЦkЏН†o}ы[јС~I’№§я_{џ№сӘХwПћ]мџ§јня~gИЭV—чщѕз_Ч?џѓ?ушбЃeo;Їщщiмџ§Иџўћqњєi>|И`™—^z їмsž~њiМуя(иЏЅєъЋЏ"ууџ8.Ль2мuз]Z&0LMMaяоНкѓН{їbzzкдиFл~еUWс‡?ќaAМѕУў—]vK[оОж;gЫбЋЏОŠ;wšŽ]~ђ“ŸрќѓЯз чw:;;ЫžO%ЧaНфмЪ?ˆzAНУсаŒЗoп^биЌЏ„гщD2™D,CKKKEsзШбj ’-AgL(Š‚D"ŸЯ‡;veHсёx ‚g3@"‰  bddnЗŠЂeoњGјљ|ЁPЊЊ"РуёРщtЁГГMMMhll,™q`ц‹œH$рїћ‘Щd I2’Щ$$)Џэ3:р'†žМЬrвќ:::Д§Bћm˜ѕ˜ K9\.|>Ђбhˆ [АВ™ •(‹fITвВsii ---м, ЖЌB›NшНWЋ`‚МІŒxžV[НЎ<0adрИ–І—dлмю‹LОVЪ5Њ=чЕ(ЕиjB›GМ4q;„B!D"twwуц›oЖ4іЭ7пŒііvРe—]†G}7нtSСk?њбДхПѓяhыъъ№ЩO~‡2\ЧЯ~і3мzы­кеуOњгјќч?Oњг€џљŸџСзПўu-ќьg?‹kЏНVw<ЋЫѓt§ѕзk{–Л]ьœОёoh~wŸ§ьgёџўпџУ_ўх_jЫмpУ к~НтŠ+ŠЎиСЃh4Š……mž<№|№AмrЫ-€t:]P.пииˆT*ejюFлўіЗПѕѕѕјљЯŽK.ЙsssxщЅ—№йЯ~ждБхэыJЯYЂёёqќЫПќ Оёo”мф;дккŠoћлEяЋЊŠ#GŽрж[oе§Ў™Q%ЧA@‰* ЖЬ‚˜КЛЛ177gЙ[\щ‰t:H$‚цццЊЄ­“ѕ ›Дш$7I’ДР<jО4„ яЭ‰p8ŒP(„ссaИнюЂ}IЯ…і_ @‚ЮъeYƒЊЊ"  ЁЁaезСЗлЧƒ††Fде­МцpиWї­ U]Й\Щd™LйlŠ"C’dd2iфѓyH’ @-Pl№ЯfL№Ъ%FFF0==P(T№ƒЅ&є2crЙœ–1бвв‚x<Ў•‘А@‚ЬЕ’r ZŠЂ ‰hЄ”СЅ•ѕфѓyФb1lпО}ЭМ0„jG[-Kb#=2NыСТчЉgŸ…л­Пі=zNє{f—г[НМˆР3ЏДђО•§žzій"гЮЃG_Ц”}ŒцUэ’‹ѕю # …аzЩ((Кѕж[ёЃ§?јСаммŒыЏПяxЧ;LM‚dђ^ЫfГкѓббQ<ќ№УзЎд—њ|ii Ÿќф'uџЮƒшыыгž—*ћЖК<Ј+ЅŽ-o_WzЮРkЏН†;яМїwg*SтЙчžC*•ТSO=…o}ы[Иїо{ оџх/‰ССA Uє]­ф8(Q%0Сѓ”p8pЙ\hooG (ыGƒŸзК3#‰|бЫŸlvЙ\@@+ @‚†х‰КК:mфžnJwЈр I’Дђ2ОЂ(Z6‰ЂЈАлЩ~tРэvСnwЌ>ЗAQT+л›ЯчЕьВэфЪnЗЏ~жЮ…єqЇЫ7єЪ%ьv;FFF055e Lа`‹§бЫхrЋYвщ4мnwQ)СЮЅ\ С=#J+ hjj**…!7zп(!Дб`'3жjNхЊVЭr:dш­KoНМ,НR˜rEж­ч)aŠ”{\Ю!3ЦЉFћNdKР4к|кН{7ОіЕЏAUUќіЗПХ=їмƒћЗ[ГП ОљЭoтŸјўсўH&“ИьВЫtџ6#AщэЗпŽžžю˜XXXР№№0`~~оpЅ–wЛнШfГZрМММlјЗЙлEЋЃЃЃhN•”АкБcGС…9і"нШШN:ЅїЇNвцRщ1}ч;п‰Ч{ пћої№ц›oт _ј‚щcЫлwFчЌ§тПРC=„Џ}эk8чœsЬџ64рђЫ/Ч“O>YєоO<ЯўѓЇJŽУziЫЛЯљ2єєє  –хџ@gАAžУс@.—гЎŠWЎаЕЫх‚УсаЬ ѕ€)й 7$ ЫЫЫ…Bб~4ѕМ4HpNЦЄ}<ъъъP__Џ=іx<кМW_ябЖP‘Эf‘NЇL&Ч‘LЎlW:†,ЫPUU[7)KЁН<ъыы‹цAжЫТ6ІЏь;ŒŒŒ@’$„B!фr9H’I’И4№a}<ъъъNЇ‘L&aГйtчPЉЯi›H$ŠJ*xF”VжЗ’эDkk+7уDdJl-mц,‰J‚3ў •Ьƒіo03ўZœFA;›ЉP*k‚}Ќ_*i9ђ%эvфа‚чz^ f‚]3ўМ[ЉАнњTљBЉлnЛ гггкпСєп^Џ>ŸЏЊыЫd2hhh€Чупя/2ф­ѓУў0юНї^Э›эєщгјц7ПЉНЩ%—рСD0D0д:шЉдђЛwяЦ“O>‰L&ƒХХESо хl­їОїНxрpџ§ї˜Cš‘^ћWxџћп‡z‘H‘H>ј .КшЂ‚Я>іиcX\\Фтт"{ь1Мџ§яЏЪ1ЕйlИъЊЋpфШ\}ѕе%еЅŽ­еsЖд~xъЉЇ№№УуЎЛювєчяМѓNmn@>њ(Ю;яМ‚хћлпТуёр-oy‹хуТ[ЖмуА^кђ™єе}L466ЂООсpиRFCЉюЄu'i;Z ‘дЫPX тБъзеoаA8 ‚ѕ€D8F8ж<$Œh" кЩь~ #В,kї$K‚НБ™Fˆнч<(ФрЅ<h С^н'`ЂœŒ v;H9O<з eP­В кБdїA5 .УсА^єіЏшК!Дб*7dƒЙjxBЭХŒЧРZЗfJи§RNF)cLГs(Ъ–рД@еƒ*FЧВмЌ# QЩ9X)ˆ`аzЬЃ’n%ЂЬdѓЪШSтя|'nНѕVЭ,§K_:ЗЏМђJмxуH$Uk+њ7ѓ7xшЁ‡№џјhooЧW\_§ъW†ыМєвKaГй№ЕЏ} ‹‹‹Ф5з\Ѓ}цЊЋЎТ<€kЏНNЇW\q^~љeн9”ZўІ›nТНїо‹ЧmmmјјЧ?Žпќц7Uп.ZW_}5~јaЭkс=яyЎКъЊЊјРрїћqша!ШВŒ‹.КŸљЬgДї?єЁaaaз]wіœД ­є˜+pр@ЁбsЉcЫ“б9{ќјq]8œёПјдЇ>U№њПџћПkиu}ѓ›пд:}\xс…јтПXАЬу?Žƒ–ѕ}d;ВTrж-nПшъЏЉ{/ў а%эээ˜žžF2™,p%53Ў™l‰p8 Зл]`2SщЖL„@ EQ ЪH№ЩfHАb9@‚оnbvIгА€Ь:[‚+lїЖ“‡бёфС J№В(XaЖћ„еŒ ЁєЖХfГ!ЃЛЛnЗЛЊ%@ЁPЈШSЃYЉT ’$ЁЙЙ™л^•—ё!$T O5ЕVО•Œ[§df™ё™0X;fпуЕD-wПђЖЁдМi СЫ№ЈЅРГјIˆв !!ЁruрР<ўјујлП§[ёїц‘ѓlиHrВђ:38tuuaqq’$Y*Г0“-Ё( Ђб(мn7ъыы+ЊБЗйlP‹‹‹Z— :+‚ |I0NF’й@€D @"‘РіэлЫ*/aK*иЬ :Ѓ‚эtїE4и{=0УТ6аfГ7xŸaЗСŒиŒ тB:‘АFћLUWŒ=z{{W[Є–џУЊ( ‚С @‘f5L4%IB,У№№0wќrЫA„6FnїE%†RЫдЪvltf&УЁT†€QlЅєЄT@Э{Нм§W f˜}Ÿo>ф8ы“fіAЉ"fŽ…•їj žm@ћЭ№л$$$ДvЊ–‰€ы%XУKњJЏЧуAWWцццЪjR J8D"дееЁЗЗЗЂ saaйlЊЊdHаЦ–<пкЗA’$,--!•JaddЄbП N€›mлIПЦ‚˜0Z—˜ ыbС(W4г`" ЂЃЃC›s)0AЮEZЙ\~П}}}EЃVДДД„ххenЉ›бRN–Фммš›› Мx™,ЊM•ЊЩ6[З] ž++ЏсЏє s)8A_эЯх^а+v?“,•жƒwhяЕ,>vd,Вь‘Cp2ЄЧm=x.НД ћЅвЬГћЬŠ„оxФ;„l}žэ ГVxу˜9іМ# Qi ПVР`#M/зњ7KxJЌ§xњ ­ЗЮšђ :Ѓ;02ƒОО>Фb1d2™Вr=гEВI’JЅJЅЪѓѓѓШd2PЅ ‚.й #Щ’ й$C"NWHшэcЃЎl0KцK{c”Кб-Qй™ЗоjuЕ`С]ЪAL Œ"€„œdюМ’`Ѕ4B’ЄђўMЅL&‘L&Й@‚…V•ЩdFбоо^ДпyЅBB›Qе кєЪ/*Єѕ%‡€ ђZфШ— €яѓєh Q­эх†RpТ т•p˜)3ЂчgІЕЉ X‹se-UЫeЂtCHHHHшЌ†Д!"}ЋЋЋCOOццц*Ÿз~дщt" iц”• :3‚nIРШšZ(rтФ Фb1ŒŒŒh-=зcыuС`GKнихєЦхeT[Ld2LLLhP‚€ :K„†(t™ щB2aHiŽ•ѓ#`qqБh_uіАВOfggсѕz‹ ^щ†B› FЌEPWNG^M  и§ШЁ%ƒњj Ѓ}jeЛщRГС*QbTвТЫ~0{Ьkн?bЋ@ !!!!ЁГ[ЮГmƒѕJ8œN'zzzАДД„D"ІІ&Kc’”ŒOќш2Їг‰X,†`0ˆюююВmI{H№к’ ‰x<މ‰ xН^dГY,,, ППП" +ћ‡нWЌЗяБйёєо[k‘cC@Фмм ЖdЋfДЊЊjm^ћњњLgБƒAD".lЋ†љ$1ЮмЖmUУЏЂихy`ТLАJќ3h(CЗ5&ШњyаžGЉ2!!!!!!ЁЪe?›6– X0бнн EQ‰DЪ›.]`ƒC—Ы…ххeфrЙВmjIЃt†ЇOŸFGG‡ц]`Гйрt:‘L&199‰X,VSЧЈдmЃ‹Х099‰H$Y–Еywtt Уяї”r–Ё4ЃН3xо Є”ƒŒЯS.—C €пя7Ь`ЈФм2‰@’$xНо"ђН­@…jYl ZЮеyоеѓrD_­6у[`eмRу• ќЫYЉ ^†™ЬГЂЫ7Ь\}72Г4Г6kщƒ^ІJЕП[BBBBBBJ”єђJ8œN'0??oъЊНєр•А{тРѓ—`Д–ŠЂ@–eЄR)LMMЁ­­ ЇЈь€ ŸЯ‡ЉЉ)Ы^g›ђљ<ІІІрѓљ … (Jб1яььD"‘РввrЙ\” =&X0СB'&цччЙ`‚Д†]XXрТЏj”nЈЊŠЙЙ9ДЖЖ™‘nd–„UP+&АrЅлЫЯj&‚СгhlоМшхЭfHш•З˜н.Ж„УШ “з–uЋ€‰Еќ~•:DЦ‰ЋГвS‚ј=аЅ4”hkkƒпяЧђђ2:::ЪZ >Щ:ш–œфq8†гщD m?Y3KГ@"›Эbjj ­­­hhh(ИЂЯ–Џ$“I­3Hww7:::D€ЩчЁPKKKˆFЃШfГpЛн™6ДoDww7‚С ККК Цbл…–*ЯШхrZ)эIБИИˆххeЈЊЪ5Ќ†Йe(‚нnGss3H8Ю‚ѓI€ ЁЭЄY Œ+ ц W#Xфее*V>УЮEoYНїY aХSТJЮТж‹a­ыѕіzи -B…„„„„”иє`‚ащю.— В,ЃППЇOŸF[[›%3Hžщ%€0An’$!# ЁЃЃЃH(ŠЂЅіГ6ŒJ6˜œœ„зыEccЃfМШdЛsЙ–——ЕћЁЁ!x<žГў ’ЩdрѓљL&‡aГйŠМxWzzz 50ALeха‡ЁPБX щtZЗCIЅYЄ|ЄЋЋЋ`l^І„€B› D˜ L7L№`BЅ€‚ЮN(їЊЖQ Ишem˜,œ0;пrANЉ,ŠЭкЃM/…„„„„„€ГА|ƒ†z†—NЇ---№z͘™™){fЪ8‰Ђб(RЉTA†„^-ѓі№ IDATЫЯR@"—Ыajj ^ЏЭЭЭEWЩy@‚›‡ёxKKK˜˜˜Рєє4ВйьYљХ F–˜ŸŸзВШўч>вРщtЂЗЗЉTJѓбkJЦ%fЋzЅ HЅRˆFЃˆFЃ–„p033ƒњњz466rЗЙZ=„„ЖКєхRС9ЏУj‹M6ћ дчщв ŒT $x%z>МёˆwD%йє~ф­›ч5a`™лџ€ (Ё X(AАССAФуqЫFЌщ% иu…УaЄгiрšв6Œ€ФщгЇбаа€цццЂ9ё€p’ё•6“ѓѓѓ˜˜˜€Яч34хмJЪхr№љ|ЧЬЬ 4ЃQњFі—‘З‚нnGoo/вщ4‚С`Х`"“Щ   zь\ЌвЭЃЃЃЃ`=<(!`„акgЌ‚U™kAŒЌWJћьчЊењдlі‡Y0QЭl›ѕШмY+гK!!!!!ЁJф<[7œ”Yа%Ф[B–e СчѓaпО}5§VЦ'ы ed›ЭEQ`ГйаввR AУ6ж---†лJЯAZр9 "‘H ЙЙннныоBt=”ЭfБДД„x<Žp8ŒT*Ѕ™Qђnl =& бййyцЫЧ)х Pˆˆ-ыX^^†пяGOOцkQЪрвŠdYЦєє4клл „0Й*OЙм h=x‡v@7иІqВ, щзЩуЃG_ЦСGŽjŸ_y§KEу‘nzv9ач Ё—Q*жЫ”`ЗЁ:;wzЛJu4a 0E@ѕ•айЅ-›)A{7(ŠТНyKРГЕЕ^ЏГГГerЯk №zНhmm-Ияёx J8ш ˜ŒGЖ-ŸЯczznЗmmm†sрu!ыdoф }>ŸЧввfgg1>>ŽёёqD"nчЭ$EQF166†ёёqј|>ЬЭЭ!“ЩuФрeJ№КPа  ’Œ ^ЛPЧƒŽŽьиБС`В,sK7XHPNй1Зфuн`aћcНSЌvБZ‹€ЈмхЊHULGŽ|I Ъ­ŽeЬW+#ТЬ>,їъ< `Ž:PА-Ѕ‚^Н @АѓcЧдлЖrЪk6R›%[Bdq (Б%`„ ]*ш€‰tO`Ы8Ъ*у ЧЅoHЬЮЮЂЙЙНННEAЈQ†ЩАPEѓp8hoo7ЕўR%ьњY8177‡гЇOудЉSZывЭЄL&ƒљљyœ:u “““˜ХммВй,З='ЯзƒЭ–акЭ"˜`a}L:::0<< ПпI’ [€–SЖAgIА†…Fп1'„6›ж#ЊЄў,4ш Г$x=Ф“Я“1Ќn7›!P­Ю!kмѓќ1J™UвЫбаBLTЫgbНqQЦ!$$$$TKк2х$р!СЯБcЧД–‰ь2tашѕzqюЙчљ?8N \дееaлЖm˜žžЦў§ћЫ.у )њљ|^ѓ~шьь,tй[@ЦЃ„Ячƒнn/йК”–й‘-7 7№’{Y–Е[4E$A4E8†Ус€зыEKK j*_UUЄR)D"ФуqH’Є™‹’mЎЋЋ+*ƒр•gРмшmЛеRв.”."ЧяЙЙ9ŒŒŒРхrU$шВ rюё€?~ёxМрМЂ;ЮаjooЧЙчž[є]Њ]љЎf†[rБ C/‚єыєѓrР $Њрђж_ O‰rZЏВћхl/ч(gЛDщ†аY%h Ё( BЁPЩРЬfГ!bzzCCCZРDкw’ЖœВ,ЃЕЕ‘HГГГЖ4/:SЈЏЏ/tV йty$$I‚ЯчƒЊЊZЫI+ѓ a„QЫP Wї%IB6›е :———бдд—Ы…††xН^x<x<žu DUUE&“A:F<G2™„$IˆХbШd2PUUOЌ?‚Œ`Koш}Х–ШILАЧ„mCKЗšЅС„ЊЊ˜žžЦЮ;5TЮО&eфјёJTьv;цччŽ„‘’%Ю5РesЫ+ч,й&„6ƒЊTвA­л}‘іКл§,ї1+3ЫЙн|аz№Ž‚m`?O?Ях^ацW*hg[|šн_Ѕ†™v х‚‰r€яГь|73˜(ЇEЈ€ BBBBBJ”€t*9 |.ЙфнЯEЃQќўїП‡ЯчC{{;ДР‰P ˜РЩ“'‹Хрѕz-ƒ‰|>ББ1x<-EžNЫчљGар€˜Z*ŠŸЯEQаннmyєcж[ƒvЛ]{L`RsPђ^.—C(‚ЊЊpЙ\ ћБЉЉ Wс+U>ŸзJ!RЉ”– !Ы2вщ4вщДж9„ЮpрJаяг †nѕZNЫM=0ЁЊ*7c‚—љ@Ю‰ЮЮNиl6LNNbїюнЈЏЏЗ4рLйЦРРзм’ls&“Сьь,Ђљ(:vt ОЙaхМdЯБеѕЯН6‹zЅ^ѓЁї›Bg˜Ј†ŒцRL˜uС0jЅYюvё~vкGƒ€ :CЄT ]ђНЌ #ЯŒЭ–%Pэѓ^dI 5P‚tlM;{Е™UKK 155…ббQ­ŒƒP$@ЅЧ$eчœsŽЅ Z’$ŒŽŽЂЎЎЎHа0‚мx@‚@ЙЙ9фѓyЫ@‚…$c€ОЇ3&Ш>$BQ”ЂЌ кŸƒОW‰Dёx\ыісt:Q__ЏmY]Р–GаугДƒ$IШчѓHЇгШчѓeЙ ІKиLœ`СQNv„Y0A2!шR rOЪwшcD/‘ёёqьйГЧд™ššBgggб*[ЖaЗл111d> wЋž&etZˆ%Tи‚BВ-zeBBЕ еBPЦУЈНe%™FAИоКє`‚йь оrМq ˆ8rш€e№QЭу@Cој< +m`з+˜C„„„„„”ЈŒ`3%ˆЅc=вЩ bnn§§§м.dмжжVЄR)LLL`Яž=%С $кккИ@‚.л KшэJ$…BШd2шщщЉ8Ау]y'.эƒAрЙ'mSЩ>Ёгйtж  бhДриe8NH’Ф5Lф™”’Б\.WQ) L<и`"XСЮБб`"h>tЦ &xфXutt@QŒaЯž=ІкЖЊЊŠББ1477•mАй:~ПбX)Є0а?ИzUU Щ’Pa+…є\щЧNmu0Q-уG+н-є‚шrцУ[ЏQ&…8Pо><гuDЛ?p!бƒ(ец7{9G9eBBBBBBJшXєUuR^Pr8иГg^{э5LOOЃЕЕѕѕѕ2ШиnЗŠЂh]ІЇЇБ}ћvS@‚Ды$‚mљIќ#шє}z›тё8оxу єїїWH” 'HЩ[ТСfLар€…ьtН Єь‚7WЇгYрУР‚ J№В$x%<С3БЌжў'`bnnГГГxллоЦѕ§`лpђц@Ъ@˜pЛн†ыžšš‚гщд@ню”ЮfЩчѓ№љ|ˆцЃhn‡ЭОтPдТЖА*ЛЭи  sШ1@bcuєшЫUYЦЪrеœ[5з]ыŒ:%XЙњ^ NшЂьО1Гn3нЌxайGОlЉ%шZзМmвЫšиъ˜Ѕ`ZЕжћ7Ђ~ы6b>ާћїА.—Ћ `hhccc№ћ§шщщБ$и, HА …˜vўъWПB?ЂбЈжщЂкbM/р (иЌL BАK$`xНlЃLˆR b-щD"Y–‘JЅpьи1­[ x™zчВЊЊ5~ПЉT }}}E@‚5јC2—€Ћй…Ц–(Š UU Ј*VЪ4VЭъџdU…jМ–ИBЋЬUцr—9zєeSЫYљЃкЪxFЫ–ђ)и AUА`NаЏ•ьg­кV|/xуБYFрa=­YLЋ`bНЦfШ– Пыf#ЊљћДбПuы=ž€eB 686 %`їюн‡УZ‡СССЂ@Š4’uŒŒŒ`ll ѕѕѕE@ЏdƒОё2$шm’eсpПўѕЏ144—Ы…\.‡`0ˆt:юююЊЩь•lœ оzрЮ.a!§/CBLАлЩ+m _уeL њXѓЪ%жFЈЊŠЅЅ%$ ЄR)ДЖЖbaa6› o}ы[@ƒ,|1 ьI7–ббQьнЛЗШћ$‹СяїЃЏЏO;y>6› EBH#ўСўТуЅвЧk•JЈЄ|Ѓ№{IЮњ&2%„ж2HЌ%АPI‰š И­tQаƒFхfчЃчIaŠєZ‚вїVзЗ^AНб1иl˜ЂŒCHHHHH@‰*Р +PТэvcџў§xх•W0;; Џз‹–––‚+д4˜PU ЦддіюнЋеё сёx RуK КэЇ,ЫˆFЃxўљч188ˆњњzH’ЛнŽ|>p8Œ\.‡ОО>8е?ŒFp‚ѕ NкC@/3ЂŒа;nl™ /‹—щРњVeDАхk8K’„……Фb1фr9Инnиэv bnn6› ћїячf‚˜Щ6 СФž={40‘Эf155…ЎЎ.дззsVЩљ˜L&133ƒX>†Ў]p8ЊByИPЧJUБ’!Ер;Igж •l`ЎgYmS*3У(ажѓs0*Ља0F0щМСƒе4ДЌж~dчT‰цf‚f UP‚ fЫDэээСФФЦЦЦ№№pЛнZm=нмZ[[‘Эf111Н{їjц hooз лігH‰чŸhjjвъђщ 6kmAI+ШЕ‚єsJАpЌw„ЯчC<чGНч<8`Гйадд„ССС’™z№aНВ"hЅгi,--! BQ”‚L‡УссaЬЬЬіяпЏ!ке ˜шюю.(хp8˜˜˜@{{;М^oс* $TUХјј8тљ8š;Qп\UQАъnIeKЈ„Аa%CТЦ/^Ц М„„ЊЎH0Г>ВL.їBСыМ š.MШх^(X†~oхё™шшб—q№‘ЃкsvFrЛ/*yЕП”oƒ^ЛPН, +PоV= QkСНбќjеgЂжЪ8DЖ†€›LX-п кБcЂб(ќ~Пи+э$3ŒпггƒL&ƒЉЉ)dГY477ЃГГSЫЌ kіЭdH$“I<џќѓшщщзы-ЊЩ'7EQДРЖ­­ ­­­kКŸлQƒ~ЮB‰T*›Нn%х_] im1' švе]ЅЎР“l@2™†лэцfLшНІ— Бr4Хђђ2ДvЅьмœN'ЖoпŽЉЉ)œ8qћіэ+изfРyПЏЏ6› cccpЛнhhh@WWЗ(Щ G,<@[; nаВ#Дя—jгŽ‡ЊЖе2pЬKЊ5HQnАSnАЄW~@{&№–ЃФzЃ 3cщ=7Z™§9ђЅ"SkAЋ•,НsiГф" •P‚&Ъ$˜лП?’Щ$"‘000P&X(A`ЦммъъъаззWаj’О­$LIЇгxўљчбйй‰іііЂN Ќ'Й\‰D===Ek 'x€‚ОgЏŽлэvШ’{ЯЙ`ЕƒCЁaт TтWЈZМ‹Щ‰зрrf№ эеБ ђљ<ќ~?’Щ$––– 놔І;wbrrРJЦ-Г`Тсp`ppNЇёx\{L`§˜œЏKKKX -­Дџщ‡mеМRUЈЊиЈьЈЋ—ЋTТЖ’+ЁкŠПfŒL…„jnT46\zidр6в`Bя§ѕ$Ky3XНкOgPX mh БЮР№2j%˜ЏЅl‰Э`H+$$$$$ „.˜ЈD{їюХБcЧ0==††ДЕЕДŽЄAтѓ@рвй<#A2_Y–5 бккŠŽŽŽЂ“іH f’d[Ѓб(‰$IBKK кккжeŸѓк‰влХкЃТnЗŸ! +ЅЁ„ЭfƒнvцXАЅМЧqu>#bqqљ|ОрМ  ˜ Н#vэк…‰‰ œ8qчœsŽi0AŸ'’$aлЖmћžЌ›†vЛБX ЇOŸF\ŠЁkИЎ:'dЅАLƒі˜Ў`‰•ŒлJ‡ј…ЊIU3аб иєжQ ,Аk->Ьvƒр-[*`­Цў6ktYы`‚WжТ`š9 *„„„„„„”X0бннэлЗcbbЃЃЃ8їмsбииШmЭHЗ %WщЌ €’Ч< ‘Щd№ы_џMMMшюю.и2–ЊЊŒ`Ё„ЊЊ$ ‹‹‹HЇгZж„^KШ€g^?|ЋŠ ;АЦкH‰Р@Ё}†\}з ФЪzНL„DЙ\~ПёxС`АѓmПЩњ_8NькЕ ууу`&иŒКkŒ,Ы™+є:Щ}.—УијтrЭн^4Е5žLЗ•R•зl8SОлЪs›VУŠ2—„„6[аЉї>‘лЭъизнюbР[ЦИн™‚3ЉgŸE.їBСђМЋїЅ 1­ ^ ksш– GРСGŽъЖЕMжыaЗOoпвћeЃ`@ЙырBHHHHшЌ†МКѕJЕ}ћvЄR)ЬЭЭсфЩ“8їмsЕ. lKIтС‚:ш# =OY–‘ЭfёџїЈЋЋCooЏnOwб РeYF$A<‡$I№zНEY)ЮМfќОс1Ж ‚W‚пѕ1ЇДЊP(„X,†……­kА`Г%шэq:иН{7ЦЦЦ С–‘ѓ’6ЅЯMr“eЇNB4…ЫыDGћJY гюuх@œ9ДЩ%љ№ !Ё­ rГЌfX цЋБMь`$ˆŒ-ƒm;aЗлޘЊ*eAŒ,Љ’ эќдбЪœEg ЁM ^e5Рж оЋœU2FЙлfХ7BЏєЂШasz,ЃЬ "6kЂ”џ;ŸZmЊч3Q sйBBBBBJlА<Ю=ї\МђЪ+pЛн*М–™є=I'Зп§юwШхr†@‚юjA™єћМL :Р•e@‡Й\uuuшъъB]]8И*›Э" Ncii ’$HcSНr ž—я|т‰}ћіщB)<Fž“льь,ццTшпнЇЫEѓ8уёБbфAŒ,y%RlљЦЦB Y– …4hWЎ:::t;œmј`&РГbXYРЬl6BЅЊ$ѓТЪ|є<'*=FФѓ‚DЌЇ„бq1IynвѓІї7›=RэѓЂZ BHHHHHH@‰u’зыХў§ћёЦo`vvNЇГЈU(/+‚ˆEСK/Н„D";v”,? Ё™AЪ@h`!Ыr” EСтт"\.rЙ<КККжМ…шVT>ŸG @&“бКjиэіЁ%XЏЖДGHш‰§ћїыfXачZŠЭЯЯcЪ7…„GїH<(ЊR`4ЊКР IаF—ыС$цццtп ‡У…BZkвreƒ эыжЭFhэeфsР Њѕ‚eЃ€ЬlаЖ^@ТJыR^ \щўЕ NJ!ZHшe№ŽЃQ'‘ZєK•sдЂщЅ€BBBBBJЌ“КККАoп>Мљц›˜žž†Ус@___‘ч}•š EС+ЏМ‚p8Ќ•˜8єzyY4ЈPE{ОИИЗлl6 ЗлЖЖ6444ˆƒ\ъГT сpXыЌ‘Эf5A›™В0‚†Мr њ8š &Nž<Љ КTƒэђBПЗДД„‰гˆЫqt wЃЉЕq%CBYЙ­t9Y1ХЊПЅVЧaгр XыL т“Ђ'—ЫЛгеЋ ЎбГТKVЫJЮј^€rцЕ3lХŽL2ƒl4 —ЫЧc8ŸP(Џз+О ›PаA/(/7…оjЙ–VDЙs1k ЊЗoJ•}ан7ЬžRѓм,хVS-€ !!!!!!%жHННН$ ЃЃЃ˜œœ„гщDOOO Яi ЁЊ*fffАИИˆ={іС‹rРэР Y–‹:,аѓљ<цччсrЙL&QWW‡––xНоВцЖUЅ( bБЂб(2™ BЁ–СЖєфЖѕІ^fUУN&^§uьнЛWƒ^F-R  bll 9ŽЮm№Ж7­tк`;иЌњœSU>pрlK-иJд5жЁЕЛE3DЕ­špЎЬ“ъоBљa@^ #ЭŠ/РY#єрФZnех–kTh–`ŒrНl $HKP3pХj[вZМЧ&xы`BHHHHЈZ‘gФЮ;сёx0::Š`0ЈЕ]Є[/в№€ЈППmmmG>Ÿ/k§ХС_aћQЖэЄгщ„ЫхвnnЗ[ЛЙ\.(Š‚@ €љљyј|>ЬЬЬhYgГВй,ќ~?fff0== ŸЯ‡ХХE(ŠRА/yщ9f -Э*ŸЯc||mmmч}вAQ,//уфЩ“ˆJQДіЕЁЕЋe%ƒbѕ3tІФ™Џfh]OŠo4ЈА‰ЎB5#и@šНjЮОV­ sН€іoeПX fГ xМ1ŒцЬšZ|ф("GОЄнJњ˜’ѕё‚џZF%FєёZЯyыэЇЕx (!TBУУУF]]Nž<‰@ I’ р+’>ўљчЃЗЗЇNB2™,{F`‚\­з4œ Яm6‰fffрѓљ077ŸЯЇ•+œ Ъхr‡УкіOMMajj бh6› и§Hƒ^І›%QH&“8uъкккАџ~ Dа@ŒО)Š‚`0ˆ7ŽПh>‚–/кћкVM-Ё™W*ЊrІlƒœcЖBЦэ,Ce"РFУ !Ё ьŒ^[OAЃ`ЎZы-ї*:ЯXБвРбl ЬЫŽаtІD90Š7зZmПidиY+]:4PbƒЕsчЮ0сїћ‹Р›9ACнЛwcrrЫЫЫ œ aLшeNаЏ‘вŽЙЙ9LOOcvvггг…BШd2[ъ8f2ƒAm;OŸ>щщiЬЬЬ —Ыь/63BFш‰JГ#`yyшыыCOOOєbя №ћ§Ћ@"Šцюft vžy_UЮtмаcюmЦЗ‚L RК!˜„PxМЋћхуFЏ™Мк@‚ОКО^>•”z№і™•+џМвr‚i^kвZМ ѕfZЖ (БЮкЕkЖoпЧƒББ1ЬЯЯ€ њъ5{uЙННчœs1;;ЫiГh NАыа+щ h=8Aюm6RЉ”(ІІІ4@БДД„d2 I’6е1“$ ЩdKKK| AD"‘рfE•jАа‡Cмь‹"-<ччч188Јyаcђ€ФТТо<љ&bR-Н^tmы^}яL— АPТvцо(C‚›)!$ДI E5—5ЛLЕƒ8НŽ Ѕ>S (Rю~сeЌ”1ЙVВ&Ž:€жƒwpM/KэwН jœЎзЙК‘`b=Юk!!!!ЁГKТшВ кО};ЦЧЧ111Y–БmлЖHРЖю$З††ькЕ гггЧŽ;ИF…VРm|I‚SкЌаnЗk8hsDRE)ЪјP ˆЧŒ IDAT™LщtZ к›ššP__ЛнŽ|>P(TˆЏ‡^yхУ@^UUєѕѕXёaPЉT ‰DйlЖ`ПаmTЩ=}Мє:hаŸ-ЇЭg)ЩВЌ[}}}ЈЏЏ/ШФ`Г0˜ŸŸЧиФтrƒhыi]eЪJ™†ЊЊк=l6@QWH„ЊТJЊƒMћџѓHЁкжбЃ/We+ЫUsnkЕn^рЗVœLНeЪэ–БжЌ™qKeŒ№Ц8rш€vЌЩ=)сА&єŒyћБ\УаЕf|&жzОezIз7ъ7b#ы6њїPHHHH@‰M ЁЁ!8œ:u гггe###ZРHƒ›ЭЇг Y–сt:сёx022‚љљyœ8qЛvэ*й‚а œ Џ‘чЄ# %TU-xNУ (H Kn’$ayyЙ`мd2Їie›m6иmvиvиmvиь6иlvи`CSS wюЩd Ч^џ?@zz‡АmhЏіоьЬќ‹г€sЯ{7НШecШлTЈЊВrх_Q + Y†ЌЌМnЗх5!IRДс$hС4Мрuд ѓJ‚єl6‹ббQдззЃГГnЗЛШ/„ž1ггг˜š™BBN kЈ­н­Pф3ЅЊrц~х„Yх *VлdZЩм!0‚‚тgЁІuрРUYцшб—M-gхj+уUsны!+0РHXmiY–Ÿf`‰еm6 HИ  [‚>O".@ыСђk#УSФЉ5ољАж€`#:oапuГпћjў>mєoнz'$$$$ Ф:+‰  ЂЋЋ ---e300‡У'N`vv™L{іь)Ш ЌЂ(p:pЛнWѓнn7FGGбггSрP œ`_c3(шЖЂ4xPU• #XП jИ\N$“ де5ЃЕН ^oЧj`o‡Ую€Эюаж‹ХЮ\a_ѕ!Ал]/ЭІHЦагЛ]›ыщгЧ-ЃЉЙ ™LЭЭ]: bЅmЇ"Ы$ љМ„x<„drЊšFSЃљ|О(‚Оgѓ2 XXЁ#ш}_iЦ€пя‡пя‡зы…зы-шœBУ њSуууXXZ@JIЂgЄоNя*PДZщЋї6эiсмiN9œиvIТчѓBBА•PЏА *§|5ЗйЊ‰ЅQPoа”Ъ†03Ій@š—AЁ—ЩБочRЉ<иВоsц—BBBBBJXЊЊ№љ|‡,ۘ››УЎ]Л000Pі˜НННpЙ\8~ќ8–——qьи1ьлЗnЗЛL8Ю‚ айй‰њњz,.."‰`xxИЂЌ В>Ж=)§ єcrO€ !xPBQxН^8)ЄR DТ+UЭЭmШчщn4QUЈT иакж џт$ё0ќўy8uШe3ˆЧV A›šКGVГ#VЎќC…6n:E*Й ›-osНV^Тњm Нчz写LSSSPE;'ˆ—E]]]їmЂ)IFGGŠ…A{PпмАкђѓŒЧ‰КвocхV&VŽ;ћ|^Bx!ŒШRэНmhэi…гх,РŒ8“2БfRЁPHз‡%•JUяэT С`P?Hkhџ’lXБо@ТjgЎшЮ•dI”*§а3@ДjЪSфШ— <$Juп0<Œx6ЃDЏеъF 3хы „PЂeГYŒajj mmmшыыУтт"оxу $“Iєєє`vvВ,cppэээІЧюшшР\€cЧŽ!уЕз^УО}ћаииЈЋЄe' ШmhhЁPЇNBoooеВ&JС ’ё@У”0К_ЙzŸB<žD,€нfCГЗ ЊЂBQЯјD#@Х TРŠЇASS;ZZЛс_œѓшшD$ВЄЭйлвM™‡кaЗ‘ђRЉвЉьіZМMhhhр‚„Rйf ыQ ЌdG,..ЂЙЙЭЭЭ‚ОЙ\Ў_‰\.‡“'O"’Ž@vЩк=wН{ЕУSВA UВaГq2$TЙtГЃГˆchяmЧќј’бњvѕСщrBЪK€ Иъ\p8э9жJЩdВt JЇhzqљlžкZ›іw ћпѕэГЉTЪrИ\.ДЖЖŠM6 „а 4K•dF РЬ<ЪМЮ хњIЌG№i&лЁ 5ш#GЕчfA‡•@нLIФF ^‰ ;пЕ8vzч’Ш–PТЄТс0Nœ8P(„ссa #™Lт-oyЫJўд|>fff I’ж)УŠššš№‡ј‡8vьТс0^§uœsЮ9hiiб‚L№<КККаддПпp8Œ‘‘‘ЊdM№^ЃЛ6SNNЧ<С{LКPDc DЃиь6x›лa[…ВœЧЉ“/ЬУnЗу‚ЗЭЭэЈЋk@6›B<DWї’Щ•,‰ЦЦVx<+AѕъU~u5”N%"HЇТp:rhmѕЂБББш•\˜yl”Q-AgGtuueDА-HщЖЃ‰DЃЃЃˆчуА7и1ВgЇ}F(Ъa!CB‘$"ILН1‡г}ЗЧюс.L›Цщз&бопљБyШВŒЁ}Cшъ^-ХYлl‰††HŠ„p> и€ІŽ&иmZRиИœ.4Ж5ђТШІВмїъъVрW‡—2Љ]=іЋ{*•H#“ЬР–ГЁГГsгu 9›С„йЊTр^ QjzЦ‹х€’Jдr<,єо6–кяДŸА’)A|&ЌwЖФСL№Ю ќKuYK@СЫм0fЯjЬE€ !!!!!%JHUUЬЬЬрфЩ“Po}ы[сѕzёЦoРяїcлЖmиЕkš››qђфIdГYdГYЄгщВжчvЛqўљчуџГїюбmœuўџ{t—,_фћ5v.Žsk“Дi“Д ]–mЖДЫ5”’/]l”Ыв…](_N!PшЖ]р”впІ,эž_ЖиJЛэсPhB’&MšЦNc'Žяї›lKВdI3П?Є™<ѓhFЩ’э8ŸwЅ™б\žgфц§šЯх­ЗоТ№№0Ю;‡eЫ–ЁІІ&Ё.^ZЩdB]]]VЃ&x#ЭGO˜ЭfUZ -x@СB LH’Єч я&НrФD)$Iвщ0"(Ч..ЉС@џјІЧ ІЇbсѓХ%5ёm.C №љЦсLРj ЃИи“$Œ€НкlT;nйь0!GGИнn$ДekH№@b``]=]˜gр(r zeuЬLЧыGФЂ$ФЫ‘2ˆH!™ cЌoН­=(Љ)Eнš:јЇќъFY])VпиˆОЖ>t5w!<†1у›‰ШTя+2›ЭЈЏЋGД+ŠЉш4ЂГQжzb…Tex Ф"iДДђКˆFD%нdЈsБМФв1LfŠЪ‹˜љŽEЬј˜ђB (/*Gaa!ЦЦЦшџ&WЈ2Ша3rйŠŽШ&0 {вЇtъKШ‚…—#'Œ#SГœj~ PшОэk6Ѓ&BH$‰ D† …BИxё":::PXXˆЕkз"рјёушююV:ILNNbнКuИс†PPP€ѓчЯcrrЁPvЛ=#ѓД~§zИ\.tuuЁЇЇгггhll„ХbQ ЏмAAЋиЂйlFYYђѓѓ144Џз‹eЫ–Сщtц N№б, р—%ћ)**‚ХbСи˜^яС„‚ТRиэNмАѕvЅ„э C‰ђђ: є_€(F16кp8@@Iщe(Фв|Оqј§уАY"(--лэж… F~јэy‘M133ƒююnDЃQ%:‚‡ђoHШ0B’$\Иp#у#H”ж” ЄК4>іrt„ќъ.Ъou„„$Г3!єЖіТ;тEУ5ЫQTVˆ‘žt6w"<Цhя(ъззЃvuмEљшmэ…вл(A0™цЅФЅеjE}m=:z:р›ђarШ„ЂJz|Їf0;3{yоЎ|Ъ–•Aю2о?‰СpКИцmєџŽЬ„аiХyХ())Ёџ‹ц $єŒe:@"†аHKR=А“ ШH•^Тж•рkJ№pC/uƒп&т™ЄџЬ' аJ7б‚Rѓ•ŠC ‚D"‘H%ёщ шыыУйГg122яaE$СХ‹сѓљА~§z\sЭ5(((@gg'оxу %§"гПbХ р­ЗоТддо|ѓM455)u&d @#јпuuuЧ… PPP€ъъjиlЖЌТ P№рB J$[цёx`6›1::މ‰a‚ …EЅБЖ RЌЮD 0ШЕ$Иѓ=pх"рŸD_o ААЛ+–|гSc№MТf‰ ММ4)а‚zыs "`vv}}}˜ššB~~>Š‹‹•ш=СFGƒAДЕЕa*8…А%ŒкЕpцХS4тm?!aЄog;шУkйš:WЧŒЕс›єЁѓl'L&жнДfЋЭ]ш€Хb†ЭnCd6‚і7ксŸєЃЖЉЎ‚Ft6wardг•>фчУdšŸЮ‡ѕ510сїУlБ  Ќ@Y?paƒэCЊЯ,пДЫже|у>ДМкЂдФиє7›`shŸТЁ0њ.іAš•Pф(ЪZФiс•ЌўР\€D6>g ™tњ0в’4ныеjMšЮxЫ`тƒOПo†эЕ ћ\Œ&ŸЯ\Ѕ ц LP‰D"‘J$бшш(N:QБ~§zумЙs8ў<ќ~ПЊиЄаппПпЕkзbхЪ•pЛнИpсN:…Э›7g\дЎДД[ЖlAKK М^/Юž=‹+V ЌЌ,!€š`Ё„5!‡ŒПѕж[())AeeeBсЬl ~9ŸвСC-x!ƒ‰ссQLL B€ТЂВXњ@м@Ыb)!ЪЫ—ЁГу,ЂбXAТвђКXъHJLMbzj6kхШЯЯзь‚‘j™|rP!‰```уууpЙ\JЗўGЋv„M3::ŠŽŽјDЌ.+V4Ў€ХnQ""DІхg`:€сюaнѓ)Ћ+S€ФHяzЮї ЄІѕkы˜  эdІЦІ`ЕY/K8 Д 0@У†4ни„оѓНИxъ"j›jQY_9oпq—Ы…eеЫанп…Љс)˜-fИujIА Bxѓ•ГˆFЂ0™MИіэз*Љ ѓŽЂЏНbH„лтFUU§пу ѓq0ЪАMЋ˜K— =ш*хТhZC:чУЇlШz….SС>Ѕ#]а ƒЏ5ŽFїc4Њ#еuЮѕ>%-m Ћџ§P^^NƒB"‘JdЂ`0‡УЕkзŽ?ŽЮЮNDЃQM/ЗыœœœФщгЇ199‰7bгІMhkkK]ё?…œN'ЎЛю:ДЕЕa``эээ№zНXБb…’Юa6›… $иŸŠŠ b||чЮCyy9ЪЫЫu;фPА BTСd2ХСФ №•+Y(HЈЈЈGgЧйјБL(+ЋƒЩl‚$““#˜žнAee ЮW/т!xrTœQE cxxvЛ]IеЃ Д€DЌ‹ЩхшQ•tЬ АЌѕ0™LБњlСбјž ЎйqMl\!! ЃэD›2'ЎќXw’ёЁqєœяAУ†WcД7až Ћ€+“й„ЩсIДoEУњдЏЏ‡луFЯљ8\Žy§žчччЃКМ}У͘˜€йb‚ЋР‰К uЈnЊ‰е—@,}УfЗ"Žрь+g•дŽѕЗЌGa™v”1pЉ‘™ђjkjsvŸРШ’ЅiєrЕ§\‹Sj‹пgКћIuЎщœчС{wтƒOПdL$+ЪЯy:зeДf:№*›щZщ&Zs›­ˆlFKdуЛHšЛBH$‚YRii)JJJрt:qєшQДЖЖ*yљЌцMЉйlЦьь,оzы-x<lкД љљљY1ќ&“IIЙpсМ^/оxу 466ЂААPГ „”ŸžлэvЬЬЬ`||УУУЈЎЎFiiiЮЦ4ЄрЗaЧзуёРd2aphуƒ0A@ЁЇ$Тe0a2 pххУюp!  ДД6›яфІ&G`ГFQUU‰‚‚]И :Ь‡ЙE?l6JJJT0‚‡rК #Ьf3ІІІpБ§"|Г>D-QTзWЃ Д оRU.h)*Џe(”WWK'_<ЉЬGгM(ЎŠu•Щ/ЪЧ†[6Р™яФРХ\8}A98бр&ћ2˜Bh;й†UзЏBe}%ђ‹ѓaЕX1‰y§Ў{<D" ŽbЌwц†28ђАйу9d %ЭnпЋƒБ|уrU!2V uZэ6хоьФЌoЩкeЕY‡~ЄЅ&2 F:nЄ ц$ŒЄ5$‹аъІ‘Њ=gІRЕMУќЇŠœHgм2­31_€"Pв‚*щоЏFР‰D"‘HW=”`[hњ|>%ђ€5Ь‡‚ bvvVUл!Уя™—l–”UUU…ТТBœ?^ЏoНѕ*++Бlй2Эh љG6‹‹сpX1Ў‡~П###Fee%<ONЗ–Щg!„ЌPРФр0ЦЧ!№—C’b…%I‚п7…ё‰!„‚@uЭJ‚€ЩЩLNУf‹ЂКЊRЗЦ‡^ыгљ’$I˜˜˜РРР€b˜NЇ’ДR6јкђќwuuЁЈAс(p ae,6ЫхШˆ8$ СtќTЗ§lyЕE)шXПЎ ы”ѓuК/плггL‚’ІЁtъP]рхe‚I@$‰™ќz /?oСŒ{YYЂб(†'‡1к=ŠŠх 5"|>Ѕгtœщ@Ч™е6ЕћЏ`ЕY1м=Œ™ЉиЂ6д-ЋЫjŠщЪ ѓ $јeй|’ѓзŠ а2ђщv™‹М€Э–Y]ˆdF:нB–йЎз PЄ[l“/ь™IкЪ\О{*ЎхH™ццfŒљЦТ(Џ+GIUIМЈЋ!Щ-?%ЅјgŒIH€Єєд@ћщvєЗї*ъ+АfыšXЯL­ёSŠЎ^ўМйjA~‘; Т1!FEešLА0ѓPQQыІУHз*VTРbKџOнXп|у>XУVдееe­ ,iщ)ЎЗmЊЈ Ѓ@%(‰L M9Џt":Œ›ѓВ>ozбьяLлКцВ>IІpM pхLPбЫЅ#‚$‰ Ф%1!BBюZТЖW•™@_[.Оq1ƒЪ‹pэ_mL nюЗ(IЈ]UƒъЦ&бpmЏЗaМo &ГР}’…йЛ_вM‚  ККбž(М!o L,Џ€йKйЪ/ЩЧ­џчm[‚*E)€wdо/Ќa+jЋkUWЄ+ЄkфŒ†ЖЇ $ДЖ›‹БŸ+ 0jS жФgЫxЮ—е*Љu]FЮi.=2™DЅ№QZп•tквцт{ЫF„H$‰ Ф’лБСl6#//Ђ(.ШЙрњыЏЧЋЏОŠh4Њ*Ц)CFD"œˆD"Š–…ќлсp cjj 0›Э(//Gqqё‚ь“khєї`|l€"O9Жнєwф4ˆ!LL Тj‰&˜oI’„ёёq AE8N”——'tЬа<Œ;kА…8•BЁрt9 ЦЛ’ˆr— F\. &eC0ж?†цУЭ‡лkoНbTŒE90›M01ѕUтЎ^A@AYЁrZтQЃН#0СЄ‰˜С—?Ћу г‰4ч2™LЈ­­EД;Šщр4FКc`B0ЇОпЇЧЇ1о7Kи‚ъЪъ…xЄ…ƒFРDЖ€„‘ЎЉрж~Œд'˜K4_81“.F‹`f21ћЩ"Œ~ћ\›ъLКxhЅsЄsПЅѕВЕOвќ‹в7H$A‰™ШLЖ1ђЙlI.Р)Š"ЂбЈ*}C6ˆђгt\№p‚šˆD"JEЧŸЯ‡‘‘єѕѕЁЄЄ.—kСцEюœбп?€ёёH’„ЂxФФФјМоСxЪF•ЊЫЦB)`bbcccАZ­ШЫЫƒЫхRъ}№б<„`и)]40!I——‰’Шы%щrt„L#тo;š;”}}AќљЙ?ЋЎЅa}жn[›pП ‰_UЖ‡(ruCTЏ*q#ёЛДЌn:Л:сїћ0к3ŠВњr$уpЉFzFa [PYV9чћ-“HвТK/"еВdІ>UAK#<“кЩŒjЎв;24FцbОц?Yд„Q •I Ш\ЬКE2Е>;_u&HW†BH$‚9гщTŠВЦ7dЂ(*лШ…0 ШбВ•Ућ$ПŒFЃЊ”6Z‚џaS;ІЇЇqщвЅ(*‚Чулэ^P011+~ №zaЕ,<№љ|˜˜˜PR{ьv;JJJ`ГйTBHш>eƒ,“тщ’Kп€Ј‚/ М6lœy3/˜дЧŽC Aу3ЊЮ5q‘нЕБч#IR™}‹Х‚Кк:tuwaf*€ёО1”жjwІ љƒъ‚9lFЉЇ'Ѓѓ$-i™ЪдЯ%:"0Ёв‰Ќа[Ÿ ОфЊ€ЈQ3Ќзy#гѓвЊ СЮ–y7jќчгрНПДЎ/[`‚Ђ%H$‰DPBC F0„ E1ЁšОгщDqq1ЌV+$I‚гщDmmэМŸЋ(ЇУ*№РšіGŽ”С„œі!Cˆh4Њ 'ЌV+œN'Ђб(BЁќ~?КККFQXXЧЃJo™W01ыZБP@B’$LOOcbb“““0›ЭJKOЖ % "є€Л^ FА@Bž{хwМЫХхšRbJ„Ф`Iн*у†7Є}эnІn“jоС>ЅƒfГyEyЬВьКdgЗл ЅVиэvдежЁЛЇўё,/Ш$‰D"(a@UUUиКu+fffŒАЌккZ8NИ\Ў _“#%,‹иЖšВ‰•Ё„(Š*8!FўМ _GЃQиl6И\.Ѕ-ЊЯчCoo/Тс0 QPPЗлѓ,˜0Џ@BОющщixН^ЅGiiЉ&TH%є@„Œ`Э+ &DQŒwг ЁњOл@vžжWЎЈ„ўiПВЬцДЉі_œЊUЪї$Џ0хЕхJ˜„ХšьЩїЛнn‡ЯчƒЫх2tЭNЇ5е5шэыХф№ЬV3 JcЕI"Г ^„Pр,@eeeZч‰D’ ‚WŽДЬ““oдtgв2SozЉF# R‰TP…?#5 єр† !У‡Ђ>яС№вKЇАsчu†ч$нyLДц/UšF.ыL5љщЖе1H$‰DP"…qIeL&ЊЋЋ“юЇИИХХХ ~=rM ЖЖ€(ŠJэLШp‚­7!У y?rф„ ,x(СОf#(ТсАЊ…$IШЫЫƒлэVк]fлt(№#WЉ3’$!РчѓСчѓСяїCЅ;FyyЙR|R <ˆа‚Z0‚н#јyдњяЈ!cF_^u`DVd6›Q혝{RR]‚’ъ’Dx GHйћ^ГїЖќлсp  СыѕЂ  @ЉХ’LnЗU•UшьЧDџЬV \n';†€ рЖЙQ]]mј~–$ сpггг(..NшœВиЃ%^zщTVЖIgЛlž›‘mг}ŠŸmЈaФЬЇFRэ\ НЇќ™šSНЖ”FцљрН;QєСGp№онw™tб0YŒж›ШE—’LA†оМыE6dqDwљ IDATšЮ‘­h vОГѕ7"—›–ТўH$‰ Ф L20q%I~ZЮжОр!&иш 9‚‚MщћУ bШ?6› ‡C9ййYЅЭшшш(fggсt:HaЗлaЗлчмR5›0BE„B!ЬЮЮbzz>Ÿ333АйlАX,ЊД ъА ‚ F"!ДЂ"Д`D*гЋмлпCZ$%%c`D>љo.цœџ>Ыэqх—ЫПпЩЩЩ„ёJzoй˜™šС@ћЌ "О(ь’ЎB&&&в:G“ЩЗл­м;,-єпКљо‰D"”Ш˜€W^yхŠОF$ЛfNШPBlєћлШМ­ЭfƒгщT“`0ˆP(ŸЯЇЄ†˜L&иl6R8хНеjЭњ8…Уa<Шч#П—k‡Шu!\.<ЪDВ?z@BяG BШЏY“ЪУОѕЇŒMўЙзЮ)Zi‹цћ&ВІ9Ї1АcЦŽЕœ&#Аp8Œp8ЌмЏЩО/‹vK,§#ŠТЖР]тF0Ly.ђ9Ш5ђ=Э*іž"‘–В21ЅЉ †jAžt“ьЉ|ВNzŸЫvЄ‚щІё,4 `‹`њбƒ;F`‰D"‘J\б0B6………№ћ§˜URипѓйцгшyГf&“HNPР„|эlє„ ’ іНжЖЂ(ТnЗЋ":DQTд ˜žžVEcШF5qZ_яј’$)ц“­ЇСІPИ\.ЊŽСџN$ј§&Z?ZЁќщ˜sOc“cЂБШIŒ ‹цVA‡x= “ЛіТТBЭˆ‡tЦ€3HШХhй}ѓ)OZ@ЌNˆз‚P(„’Ъ’„‚З зХœ‡ d0СЖzх#%L\НЦ<н'ЪВСѓ|@ГЈcВ Н4•TiFл…fR #гkd{ЙІ„,іЉА^=SЌWƒoЊgФSЕе‚z&>[Qzu/цjјЕкЃђзbє8&H$‰ДdЁ„VQ9“Щ„•+W" *?ГГГ‡УЊ 'X3.›6К€7jфјB˜|ZліT~- є@Лж{ўА51$н–п'e`ЕZaЗл5!{hE&$л&‡нW2@Ё’‡dB+…# ЁuюЉ"&’ЅtY—+‘ЪиЫ‘ь:О>ЧbЙ‡yгž,R"н"—Виі8l ОжF6ХF>hЅћШ….e0AКz`„Ѓ•*JAЯМђр_І5с=јlЖџNYќ2у?—Žs1ЁšL[PЃE3ЕКpzР#@СУ~ЛќрН;БsчuiЅwШї@ЎЄW0”Нq!0A"‘HЄ%%ДŠ8ђц…Mй`Ÿц/F ТЖаƒ !R]лqBОј”ХtыAЁdщ0sZ…ZчclвНЗH ЋT†0цЧШ1Œn-ƒЪ‡ѓ'3mќ2Нк щ\/ѕЁW8гhAЭЙŒeЖ"’Ћбk0йЁ5ZBЋ`)/HЬWDІуš LАу’j‰D"‘J\‘@‚­!ЗЖdУнS„„”`_ыX\,Ц“wv™б(ˆdѓNKP=Гh\,4„аКљŽђZŒпELШз’qNvџЭїИ,&˜Ešа1Ц‰7ЉЉ"ДвEДрDЖR7євT’‰LЃ.4СMбz8Y йdчœ ал^1S­Ž,ќЖйОЗчr_kE‘=A"‘HЄ%)!‹5sZ…#”р…ž™[lІGЯм ЃŸkЈНААсC:`‚я’ВиЁ„жНЪЕlЬVЯBЬ-Aˆ+Gzн25ГFЂ2ЉŠeъuЯH–о‘д Нsг‹ЦXшFSYRЅƒmdЎЕЂ"єЂ'иЂ–Zѕ3’EMшЕ—ЭЖљO5ОЩ КRбK‰D"-I(Ёeю>™_ЬfюJ5?F`@ЖчbЉD­БЫ$Ђd1єљК‡ rmlљnFŸЇcЖŒl› H}њlt}Њ'пЩ€‰Vˆ~ЊkЩVэdѓ‘Ўбж+#5>јЯiE:h LМwЇf+б\GMOЃїѓ\ZА’H$‰ ФmъX3w%š–ЅnДШH-0q%D}H‹4ЄkL“™n=ЃfLzлkЃ9ч’ЪaЄ^EВЇхщоx'v&љя9Я{2ha4…#й5ъA„T€‚эО‘­”ŽTз™ `N $‰DP‚Œ/‰Dї2‰tе ЃEѕЂRэƒ/ъ7з4­(ˆt"7цb.“K*›ъvЊ`u№о~4’юbVdrўЩ ^&+|)_ЏVдЛ>йѕ$+NšЋ{GЏШ%}DP‚D"‘JH$‰Д$•ЌЕc*CšъЩП€‘ъsщFQшЅUdЋ•cВ1aЯСшЕёы“ЕбLfьѕZ‚І&јœTЧNU 2›J*иšЉZˆђE2C1I­sаЊёB`‚D"‘JH$‰ДdeЄ}e:№a.@d.з $Вб1AЯ€1цs1эЩ"-јkK0фё”­.%F`_#DЋю?FЩ:œЬЈаRВzщмWѓ'’е™ ‘H$A‰%+I’‡FЄe йl†еjMН‡УˆD"‹О“ТB*йј-жy]Šї1ii~^zщTЪЯй&эŒ*§ЅкжшSё\РЃэ˜2-SlдLн2Г=iЄЭfЊH•ƒїюT­39`tŒР #c”lN~їЛWћ|Р‹Хfј“ЅsЄѓ]Яцпˆ\§mZ ћ#‘H$‚YP4E0Dss3ЮŸ?ŸЯ7Џ†.//MMMИікk‘——Ї‚`0ˆЎЎ.œ8qcccˆFЃKbМkjjВК?Їг‰њњzЌ\ЙR5~‹u^sy‡‚A\:qнgЮ`fjŠРЩјї(?ЫЎНЫoМynЗrПюмy]ЪЯйцЅ—Nк.TЇГ?Ѓл&3е™tЩШІI3z,#ц~.Ччѓќsqн™F№ѓ|[fЄаЅ‘БЮД]j2xСƒ”tы`Є^вЙоtЗЫі=Џ5aє0њНЯцпЇ…ў[7пћ#‘H$‚Y$Iƒxс…`6›qгM7СуёЄ4’$em›‰‰ 477у…^РЎ]Л Тс0КЛЛё‡?ќ7нtЊЊЊ`2™–Ф˜ПђЪ+ИыЎЛВ6^Џ---8vьоёŽw,ъyЭх} qьч?‡ХbСІwМљЅЅKІшЅ@ЖSŽж{Y‚Є dИЯHЪтиr­їТњ;8=:Š‹ЏПŽ‘ŽМ§уЧU ­™Щ D:f9Uд@:mBњIvВˆ­Ш’dЉ Щ`G*А‘эёа‹,IvОЉŠ–ІsnЩЎ'SШР*YAЬ…О‡2§,е” ‘H$‚KNсp---0™LиВe ќ~?FGGчѕAР–-[pђфIœ9s›7oF$С‰'pѓЭ7ЃЉЉiIЙЩd‚$IY{Š_XXˆ›oОљЫ_ажж†ІІІE;ЏЙМ;_fГvь@ШчƒohhО­кШrц]`р‚Фƒ€T!О_I’!Sрж+бй‡ъ|9№СЮМФOтжЇ„ЬЕёcРТеОјБœЇћuУŽh>|mЧŽЁщІ›ЎЊџЩЅгmУhKЮlЗM4jЊЄŸdуœє@EЊуkЕ{LZшIгx3i™cЃЉ4щю?зА)л ‚ъ:H$‰ DFбккŠ­[ЗТяї+ІFяiИо“gхimŠѕќ2!ўЄзчѓaУ† 8~ќ86oо I’0>>ŽЪЪЪ%7ц2”EбQв?^kзЎХkЏН†ІІІE;ЏЙМЛЯœС5ѕWNMЅ%”5Ф В<‚<–œ™’<Їёз‚ Ф 8'Фјz ’$%Т fЬ.BХЫ‘м{YЂ4IvЏБ›ŠЂ>0яf_’жўЁКFцЕШмwЪљ'KОия„ЈtœšТЊыЎУйW^YђP"Y„QуeДGЎAŠб–•Й2—щ?Љѓm”ЩŒ“H$‰DP"g’Уќ=ъI:џ}­Šщ„љk™kўѓEEEƒ*ѓОTR6x(ЁeшЕЦ3ŒрзbvvvбЯkЎюупќвRјгпg|Y( gйhKqГ­2чђ6ВБцžєЫF1ърЂ&dУ—ПFf?юЪ{0hЭmвћKбИ§ чЂZІqНsНЊcђїc ТЅФœЋР€"К№Р( ю’„ќўЋH йOЧ fлМ’N.бxЭ} щ$‘H$A‰op$№Їz"Ю.›ššBkk+BЁnЙхLNNЂ­­MyЯn›Ь_Љ@тйgŸEKK Оѕ­oiЎ7›ЭЊєtЂ!є Й$I 'лѓЪ.KKЄ,?С6 {ЮœђІLЫXИ ›zISтЫјz ‚V-­ѓ`#˜T6Š@„иguLЕФц5;цJф „Ј`я‰‡Zз?gљмY8ЂКЯљ f;Є7е\qu.TPGоFgџЂЦВиВФъIЬЮƒЭЖ ГГЧ”зйL­ШЖ™Kчœцл0jМ\h;—cІS@1еXh­7RWƒппBЮi&зЙиОы$‰D"(qEŠ}r/о”ъ=™EQIG—wvvbеЊU№x<$ ]]]Њїќ>й§ВІњJ„С`‡ТїПџ§Єу­•О‘Ў’xƒЙšWQБзи>yЭ\“ЏHЈуРFˆlѓtž5ї’М„”ux;-0 ƒ5бђяпŸ<‰;oИAYР6Bb>ЫзЇрТяNœРпнpƒъ3š0AHёч jŒЅЄ‘nТF•А‘’FaL­qaЏKwlЕЂ-!фelt w,G6Е„9ЎА#ДŒБХfИЃL•N1пщ+Мaц;VhuАйЖeeЬt…ШzШзn=ˆƒїюЬЈЋ‚‘Ž$ѓ AH$‰DКЊЁk"ЕLЇ шььФдд    pЙ\Ъv@EEEЪ>§~?ŠŠŠžМЋBУуЧI%Nœ8ƒтмЙspЛниКu+юНї^^{э5ќќч?Чљѓч‘ŸŸ-[Жро{я…ЧуQіqлmЗ)Џ_~љх”Цџ™gžСѓЯ?јЛПћ;|ќуз‡ЦКuы’Ж§ф ]ђcœ‚МLoќДц5ЂЗЗccc…B0™L(,,DUUŠŠŠTаDям>Œ›oО9­yЭ9”`Ђ:ДžЄЋЬЈ|]’‘5ДЌ‰жќz6"@Г $џŸ›KжѓEP& Ьљ l!IжX3Ч‘КCoц>ЃsLUT„FtƒШw‘Џ‹/в™xsЋЏCЃѓ‡ TpыљHЖІ;ўWƒvKJhEK\‰р„5Ю™ДЭ\J†Н–tž'›џtЧ'р(гт”|њ%UQЯЙBžlп?щжl™Ы=-зI$‰DPBW;vьРЋЏОšіКlGJ№&™§Ч§ЬЬ š››Q[[‹UЋVAŒŒŒ ЙЙ7n„УсD"хјВље2дZOйSA‰C‡сЎЛюТ5з\ƒP(„џјЧxьБЧ”T‰чž{ЛvэТЦa2™№Ћ_§ ?ќ0ўэпў-DАpBOЯ?џ]Wn”aM. L‡ 6mBLЯЬ ­Џc>Ђб(ђNЌЈЌD•Ч“/xгЬІhhІ/Аs+ŸŸVJВNёЙ|ўфIмqУ иnqю…„Ї"7NK5}ƒ–рMŒV˜ІЪцО€ь?ѕ]Ьзšэ§Э˜ШЖ!чSPr=vFв7~=&џн ( ‰D"(‘U‰ЂˆŸўєЇјня~Пп;vрŸўщŸ”ˆ„žžќ№‡?ФщгЇFq§ѕзуK_њ БcЧP~Г|…–‘хѓщA€зыХЦŒFyy9о|ѓM‚€[nЙE щ—З9rфˆ#$аuv_щж”xу7АrхJЭuС`џѓ?џƒM›6e<hjjRо755ЁЋЋKwћ‰‰ ”””$нЇйlжН~ФзПўuнЯялЗUUUš ‚нwЊy-,,D{{;ЊЊЊŸŸŸ0ЏаппЩЩIlиА‹эээшщщACCƒjЎг™з\Щd2ЉBѓU*dPСŒldљтˆlєXsЮvΘЅФDШOо/  ОЌ ЫЫЫ•m<.Ў[О\eьЛGFа>8ˆP$‚Їздз#?ž%J. Ђ{t‘H•ж/[ГœрB?zЧЦ‰FБЊКЫ+* аd €“.`ee%–WTЈ`ЫяOž<џ}ч–-Ёoа=ія_ъыqipСйYИ\ГlЁ. `&Fг‰kяp@ŠkMM . APэё`m]LИ\яCЋш%;оlg‰‹Ир ”Ъ‘+& HХ)…Uм[Њ`BЫЬЎ>Ѕs,f8”‹1Ив@}ЏI$‰ DNємsЯсєщгxт‰'рvЛёјуущЇŸЦg?ћYРƒ>ˆќЧФƒ>ˆH$‚§шGxъЉЇ№х/ЏОњjZщќSwVВЙŒD"АZ­ ыm6ТсpТ~ѕіЉѕ:YЁF=]МxO>љ$zшЁ„urjFQQQ–Љ433ƒММ<х}^^€юіF:h№уЭCƒЪЪJьйГ‡BSSL&DQDkk+оџўї' Uи97~ЩцuѕъешыыУЅK—033›Э†’’дееСbБ(€dнКu [О|9Юœ9ƒњњzЭ942ЏЙ’ќt[фч@ ЂЈ ’F‡ Ж ЇФЅHёх"тб&гх„% cггXUUЅ‚$"kЎуЦydj [›š`ЗXpipЭнниод @ЧаFЇІАЕБ6Ћ-]]hэыУкК:@pБПу>ЖЎ^ ЋеŠ‹§§ H†&'ёfGЎmh@yQ‘Кh%€;Жl‰ммВхђшФиє4Ж66ТjЕт\wwьиЕЕ єіzqcc#ьV+:‡‡qттE”ИнИ!~О]CChюъТЖІ&хœFІІpЫкЕ$ gЛКpq`UU—гf˜О!Ф(-Фx ШFИ0уЯЮъ`;ЉHRl 4ъSШЉ"KНаЅlZЎ„КМсZhcN"-жянЧ$‰DP"mЩ Щєлпў?ќ0ЊтЦц3Ÿљ >љЩO*PтРЪЖvЛ{їюХпџ§пЇм/*ДЂ"ДЬЖХbA(‚гщT-…BАZ­ н$Œь[ЏD*(qцЬ<њшЃјЪWОЂ)ёђЫ/#р—Пќ%Оѓяр{пћ^Fѓфt:сїћQXX VДS.ъЉЅттbŒЉR\Д „–‰g№Жmлавв‚ŽŽTUUa``kжЌСіэлU…-SЅo${ГйŒКК:,[ЖL0}}}hmmХКuыФЂMNЦŸ ыЭ[Кѓš3(БШъЬF"pX­)ЗлPW›ЭРŠŠ \RжѕŒŽbЫЪ•pйэkjkё—ѓчcP@яиЖЌZ—нжХ—ЫъFћРnhlDQ^вi:л3:ЊкїšкZќх­ЗАЖЖVйцšњzиузиP^ŽжО>lXЖ v› R|йХСAе~зееС‡›ыъъpВНёПqѓІЉ3ТUPS‚71WsњЦ•g–2"Œ ‘H$в№<їмsЯSCCZ[[qу7Z[[UQМVЏ^ццf”Айl уЭж”р„Ќ{юЙ=єкллсrЙpЯ=їЈЦW­ё32Џђ{Їг‰њњzœ:uJйжnЗc§њѕЊkаЊS‘ЮМцJІxк…ЊгBŒV\юОСЅuH’№iђrnNиЯЫ'j30ЧВY,…У0лlъИ\˜@ЬРЧ_›ЭfDE1– 8;‹?ЕДЈс .Ї1УaИиЙсLuЧаjKKQ|mŠ„ШyМЬЬЮт•цц„c—=Ѓь IDATЃQd !0slЗй”ё”Џ‡MБШ‹ œV+‚ё(+~мUЧ”;АщмИkЅBIгPЕRe;—pЧ’€%ОAJgР,ц§-ієХМПХъH$‰t•B #ЊЈЈРwПћ]ЅШ"Џ}ћіaЯž=xшЁ‡рvЛсѓљpчw2џ7іДO+€7œP[[‹ццf˜Эf”••FFF000€kЎЙ&!R‚7ZFVы\’й_ўђ—јѕЏЧ{LyТЯъбGХюнЛQ]]‰‰ ќтПPъ`[˜ђЖлnУ”c8pяzзЛt?Л}ћvќщOТЮ;•eКу­e /ГZ­ИяОћ№аCс‹_ќЂ*%“є ^---ЈЈЈ@aa!, fggбззЇДW•$ Иpс–/_Їг‰™™єіі*зdЕZЂg’ЭkЎ$˜LJ˜П`2Љ‹Ъu%pЙnвЁ"ое&“вСAbŒПЊ~„œОСжЂЏ›+ђXьvc`|+**д3Ия…V„D"‡Э†V­RРƒФД/Їе _0ˆ|—Kе}BN…иКz5ŽЗЕСb6cEEХх$\Q0у$ЇЉШЧvrP*КЉ;L~Н?BžУHќЁP,j‚ЉљСь(aŒ•дQTuGс[“JŒ`ЯIе‘„O‰ПJH$‰D"‘Jя}я{ёшЃтўћяGuu5zzz№“ŸќћіэpЙогщФрр ў§пџ]ѕљТТBtuu%<йчkMАOЖљЇТь6NЇыж­Cww7КЛЛXП~НRs YЗ!Yл?V˜ZPх‡?ќ!$tИјЭo~Їг‰элЗулпў6КЛЛсёxАuыV|љЫ_N€ќkЖ;Ћ;яМИяОћ”їЗп~ЛюœэиБO=ѕz{{QsПџўћUлШХ(йю|Д„<xф‘GрvЛ5&иB—ЉцЕЖЖƒƒƒшшш€(ŠАZ­№xЪЇe@Уь?Ё'Xќ“3>eтЖ дэWљБb–Ћ€›V"G™0ЕKєц4Г[ARЅoЄjЛgД5Е?œ›љZЌ­(Љ%(}'Ўюя‰D"ЭЋ\ЊfЕZQWWЇ<бN'2AяЉД‘Їеќі@‹+VЌˆQ ‹+WЎФЅK—022Ђн6ё Al1IНQU?ЩЖ …BАX,JЋжХ:ЏЙ’ АЙ\њ§š],цКo%Ѕ€`Ђ"dуЖH(›bРД­ИёTцV$ђq$)v HрrЋKЄx] љќ–ig~иЯJqУІHШэVхыWBuŸФГї­b˜kR?ѓ^Uї‚m1Ъ\Г€tu„|>8мnњП‰D"‘H$iQiIЇoфххaћіэшшш@OO‚СрМ_n3йа࠘ ЋеŠЪЪJиl6ДЕЕсьйГKfЬWЎ\ ŸЯ—UАTTTЧГшч5— ЇtљrŒїєР•—Зp“ЫЇАЋ4–A#:B ћАЉ М)g ПИыtSŸОfЗœMmQ"'вОE(7.IЧrчoДЛЋWгџѕH$‰D"‘H%цг@РŠ+rўD;­AЗXP^^Žђђђ%5обhfГљЊз\ШjЕЂdе*јGF№љ`ЯЫƒiŠkЮЋ_ж‚z0#CЏ1–Ї(WьјJ‚~?,V+ЊжЎЅџы‘H$‰D"‘•,4Єli>€Фе&AрЪЫУšПљ ЕЖbЄНГё"Ÿ$’‘ћЧъrЁlХ T45ЭKЗ‰D"‘H$)” ‘Ўc •kж rЭ‰D"‘H$‰ДdДфЁ„$I‡УˆFЃѓо†S˜ЭfX­ж„'”сp‘HdIЖё[ЌѓJ"‘H$‰D"‘H$уZвP"" ЂЙЙчЯŸ‡Яч›W›——‡ІІ&\{эЕШЫЫS l0DWWNœ8ББ1DЃб%1о555YнŸгщD}}=VЎ\ЉПХ:Џ$‰D"‘H$‰DJOKJH’„`0ˆ^xfГ7нt<OJ)IRжЖ™˜˜@ss3^xськЕ ‚ ЃЛЛјУpгM7ЁЊЊ &гвшЬњЪ+ЏрЎЛюЪкќyН^ДДДриБcxЧ;оБЈч•D"‘H$‰D"‘H%…УaДДДРd2aЫ–-№ћ§зs[ЖlСЩ“'qцЬlоМ‘H'NœРЭ7пŒІІІ%5ц&“ ’$e-jЁАА7п|3ўђ—П ­­ MMM‹v^чCЂ("IЎ",ѓЂ„];vьРЋЏОJyI$‰D"‘H$вв†бh­­­иКu+ќ~Пbфєž†ы=э–?—j=ПLH’ŸЯ‡ 6рјёуиМy3$IТјј8*++—м˜ЫPBECЦ^oќx­]ЛЏНіšššэМЮЧ§м?<ާПx ]}Уˆ&уu•јє‡vЂВдћ’[Јž-‰D"‘H$‰D"(1Џ’Уќ=ъI:oBЕ (ІцЏeЎљЯ! ЊЬћRIйрЁ„–ЁзЯd0‚_WXXˆйййE?ЏЙTh6ŒќПпСцrуг{>ГЩ€П бh‡žп}ъЇјі—>Ѕ $о§юwуаЁCАZ­ЪВџћџ/~јaх§ьь,vэк…ŸўєЇ(**в=/Š| ‘H$‰D"‘HW-”Heˆxc)›Nж\Іz"Ю.›ššBkk+BЁnЙхLNNЂ­­MyЯn›Ь/V ёьГЯЂЅЅпњжЗ2њМйlVЅoЄ Ё $IJ€8йžWvY*XbnфBбHэнјЧНХ‰жD""RќT §“А†№љ?$РfГ%ьk§њѕ8|ј0оўіЗІІІpфШLNNЂАА№ч?џ6lH $H$‰D"‘H$щЊ†ЉФ>Й—M+oJyƒ+ПEQIG—wvvbеЊU№x<$ ]]]Њїќ>й§ВІz1B‰`0ˆC‡сћпџўœЦ[+}#]ЯŽ9 &r5ЏЂ(ъnŸЮМцJDЃˆ†У`АЗ ŽМИмљтЇ'˜žЧЅ7у[_њ4,V+"‘ˆцОюИуќюwПS Dss3DQФйГgИіТ /рНя}/zzz№УўЇOŸF4Хѕз_/}щK(,,ФŽ;@љ-Тh4Šр…^€пяЧG?њQ|шCRŽџпџ§пјйЯ~†ёёq466тK_њVЌXAI$‰D"‘HЄЋPѓтЈvьиЁќМэmoУ{оѓьлЗ###ѓ%d)fўI9œ;wGХбЃGqюм9ЅеЄќЙ@  zrьїћQTT”А?іВ‘M%|>{ь1Мџ§яЧ>№ќф'?I0ъO?§4оїОїс}я{žyц™”Oѕгйў№сУXЗnнœкzВ….ЕЦ8 !„dPBo^Ѓб(:;;ёњыЏушбЃ8~ќ8оzы-xН^BАŸг‚&‡N{^s)Q!Ffбгй‰щОVДŸў3ќSSE Ђ(aj|эЇcп?‰’т"|упў?нVГлЗoGkk+&&&gЯžХ7оˆГgЯFFFpётElпО>ј оџўїуWПњ:„ВВ2<ѕдS*ёъЋЏЊ"–~іГŸсЬ™3јўїПƒ&|Я_{э5ќр?РѓЯ?mлЖс;пљ§%&‘H$‰D"‘JфVВqyх•W№Ь3Я ЌЌ ћіэ›7(!I­'р333hnnFQQЎЛю:\§ѕ(**Bss3BЁђЙH$Ђ<‘!СєБ†•}ЪoJьпП‘HЯ<ѓ ~єЃЁЛЛџћПџЋЌўљчqъд)ьпПћїяЧыЏПŽ_|QїкгнўшбЃИѕж[Г2оl*„жk=ЁїЙTуЧЯыљѓч‡БvэZlпОз_=JKKбггЃк^+хƒ_–ЮМцRQQD42‹sgпР>ѕїјк?н‹Kg^EР?‹8sпјчOЂІЊџяПF[{Їn1L‹Х‚ПўыПЦЫ/ПЌ@‰}ьc ”xёХёŽwМ‹Рuз]ЛнŽММ<ьнЛЧOzЎ/М№юПџ~ддд ??ŸћмчTыџљŸџ•••p8ја‡>„ЖЖ6њKL"‘H$‰D"”˜ЇšL(--Хž={аккЊ,E?ўёqз]wсŽ;юРПўыПЊŠ†Уa|я{пУwо‰їМч=xійgі-‡‘Гf•}rЏeŒ%IBww7*++Q]] ›ЭЋеŠššTUUЁЛЛ@ьЩЙќћШ‘#Ъћ#GŽрШ‘#š›§aЎж“љcЧŽсгŸў4<<>ѓ™ЯЈ ТЫ/ПŒ={і ВВ•••иГg Z№JwћЖЖ6Ќ]ЛVЕьЖлnKиŽ]vњєщ„Й•# ф­Бр#Д~ј}№5%’эsjj p8$ ‹ЅЅЅиАaƒъ|{zzpђфI;v mmmˆFcэ6ѕц6еМцJDЃˆFТ% €šЊ |эŸюEћЏтв™#јЦПФ€ФЏџ ŒћсЪ/д”€wОѓxёХ‡1== 6`jj сp/Ој"ољЮwЮŸ?ЯўѓИуŽ;АcЧм~ћэKzЎУУУЈ­­е]_\\ЌМv8…Bє—˜D"‘H$‰DКJ5я5%DQ„зыХСƒU&јЙчžУщгЇёФOРэvуёЧЧгO?Я~іГ€ŸўєЇшщщСРP1F-#ЋѕdмыѕbуЦЊэ ММoОљ&AР-Зм‚У‡уц›oVЖ9rфnОљfe_<˜`їeЄІ.:;;•їhjjRо755ЁЋЋKїкгн~bb%%%iЭх#<‚_ќтЪ{ГйЌ{§088ˆЏ§ыКћлЗoЊЊЊ4‹NВћN5Џ………hooGUUђѓѓцњћћ199‰ 6РbБ НН===hhhPЭu:ѓšляMbduЫёНЇ~‚oќЫЇу`b/‡Їо<‡_ќўOјјЧџЧ_? Qд‡bQ ыж­Ќ[З‡‚ЭfSжялЗ{іьСC=Зл ŸЯ‡;яМ3)`+//Goo/е‰ ‘H$‰D"‘HЉ}ћ|HЎ)qы­Зт=яy~ѓ›пр _ј‚ВўЗП§-О№…/(Fђ3Ÿљ ўєЇ?)ы_zщ%|ўѓŸGYYЪЪЪ№љЯ>с|'ОЦж“uI’‰D`ЕZžИлl6„Ус„у$K5аћI%nМёFьпП^Џ^ЏћїяЧЬЬŒВ~ffyyyЪћММ<нёNwћL:dА @oМй}ЫљљљиВe nМёFlйВљљљјшG?š$’_ВБ^Нz5.]К„cЧŽсѕз_GGG‡*r`ppЋV­‚Ус€ХbСђхЫ1::ЊyоFч5ЇP"*" ЃЖЁQg9Оіи“№fP[UкЊ єуБ§?СšЭЗ0ХЂ*Ђbв}о~ћэјџјlоМАyѓfќчўЇ%СоGNЇƒƒƒxьБЧTћ(,,L€]wмqќqєїїczz?јСш/-‰D"‘H$‰DвдМEJАРРыѕтЙчžУу?Ўt{Ф‡?ќс“+kddеееЪћdссВДЂ"ДЬИХbA(‚гщT-…BАZ­ н$Œь[Џ„”јєЇ?'Ÿ|ћиЧ`ЕZёОїНoМё†ВощtТяї+-§~?\.—юЕЇЛ}qq1ЦЦЦTcœJпјЦ74чKЏхІ иЖmZZZаббЊЊ* `Эš5иО}Л2ЮZ GЋ%Јои›ЭfдееaйВeŠБюыыCkkЋ qђфIЭyх[з\*BЃ8vіJЊ—cЄOРз}їђя}ї‡Ј[ГЛ GЯЖC ЯъvпЕsчNьпП_%Тс0vюмЉlѓРрЩ'ŸФзОі5”””`їюн*XxЯ=їрSŸњ|>ŸђпН{7fff№йЯ~С`{іьЁПД‹P/Нt*+лЄГ]6ЯmЁіGзJзJћЃkНZіG"‘HKJА***Т‡?ќaМћняV–UTTрЛп§.*++5?SVV†ўў~444њњњRЧd2iЖqд їA]]jн№№Аbъy“ЬЬдЊ3РšзT‘љљљјЪWОЂМџЭo~ƒM›6)яаккŠoМаккŠњњzнkOwћеЋWЃЙЙY%l6BЁьv;`||\ѕ9ФŸН.ЖЃ$X#ћаCЁНН.— їмsnt…^њ‹‘y•п;NдззудЉSЪЖvЛызЏ‡ЭfSmЏ•Ўat^s)Г鄆e5ш:їjзnAIе2Œ HјтЗїJЋъ‘я)G$AїЙзАrљ2˜-ц”пУ?ўёЪћЪЪJе{ жЉcћіэЊeЛvэR^п}їнИћюЛеT,|тŸР'>ё‰„cђбLzЫHЙзЮзee›—^:ehЛtўQНXї—эs3:ЦKсZћўЎІkЅяЭ+‰D"-6™т “““xійgБjе*eй{пћ^<њшЃшъъB8ЦЅK—Tн9nЛэ6ќр?РШШFFF№ФO$ь—/tЉцЯЮккZ  ПП‘Hсp§§§@mmmBQўiЙо~љsIfdyфŒŒŒРчѓсќ#~ўѓŸуž{юQ]џ088ˆССA8pћЗЋк[„вШіМљфЭacc#ž{ю9ƒA тёЧW­јс‡uЧ[ЋШЅМЬjЕтОћюC Р}їнЇDЃшmo4}CVKK FGG‡!Š"‚С КЛЛQPP ЬOEE.\И€@ I’pсТe_VЋUYgt^s)ЧƒO~ф.8ЂS8њыџРсCћбњ—пУллoo.žx‡эЧёп< gt ŸќШ](іxш/‰D"‘H$‰DZдšЗH ркkЏХƒ>Ј,лЕkL&ОњеЏЂППuuuиЛwЏВў#љžxт |єЃ…ХbСюнЛ5УяYБOЖхзZсїNЇыж­CwwЗвmЃ  ызЏ‡УсHић[oŸќvЉКolкД ŸћмчрѓљАaУ|ѓ›пD]]ВўЮ;яФРРюЛя>х§эЗпЎ{эщnПcЧ<ѕдSшээURcюПџ~|я{пУГЯ> ЧƒЛяОGU Vr 9R‚{О@dEEyфИнnUкџ[~ЭжЏH5ЏЕЕЕDGGDQ„еj…ЧуСЊUЋ”ЯTUUAДЖЖ" Ссp(‘2PSSƒ––D"lлЖЭаМцRyyyXЛІ _ћ—ЯЊКвhнѓvЛeeeЊš"$‰D"‘H$‰tеB #сй&“ ЛvэR…†ГВZ­јтПˆ/~ё‹ЪВнЛw'=ћD5Б‚ (FX6•NЇMMM щьgЗmлІJMиКuk‚Ё–їЭšp#….oП§іЄа@ьнЛWjxНќђЫimЯЪnЗcзЎ]иП?О§эoˆЅ€№)яzзЛ”зoћлuЧ›kHШc›——ЇeТ‰d‘ZѓъvЛRKј6Ђ2ЉЈЈH€'ь:6%еМцZnЗnЗ›ўj‘H$‰D"‘H$‚W‚XУЈсРšQНэДžˆkэƒ}­u,#-AZ<фЩdМЕjJАуЧG•ЄїTPg1Э+‰D"‘H$‰D"‘J$˜d=ЃЩK+-@Ы<'Kха3ФЉКo,•ёц <-СC#@~Џ)Биц•D"‘H$‰D"‘H%#ъp84MЏSЪP~9ђЏe’A@ PЕуДX,IMє• %Д€BЊzЉц‡э˜ч•D"‘H$‰D"‘H%Ф #ЪSGН~о”j-O$IB?–/_ЎьЃ  ^ЏWщБ” ФддTЪэx0‘j '&&PZZКЈч•D"‘H$‰D"‘HјШЅzaVЋuuuЪэt"ДZ?&[žl?@‹+VЌ‹’XЙr%.]К„‘‘ЅPцRйlжlеЉеъ“§IЖm(‚ХbAYYйЂžW‰D"‘H$‰D"ЅЏ%О‘——‡элЗЃЃЃ===I[)цтјr›Щ††хiМеjEee%l6кккpіьй%3ц+WЎ„ЯчЫкўЌV+ŠŠŠўію;>Š2џјgЖ$RH!!HВ4cAQЄ ‡вСrМSA„Г Ђž"Їи‚ EšЂ(‘v@(в!”$$$RvГЛ3П?vg23й$ьfѓyП^ ›щѓ<лОпyцy№ѕJDDDDDD5д]ЪcЫ–-ъŠЖЩdBBB‚ЊМ].ŒFcН­W""""""Њa|ЌŸ I\.WPvЦlA€бh„йlікWыВnзeff&ЌVыe=ь“ћНМћ%"""" šЄ„Ых‚нfУ‘-[Йs'J ЬИАШHX;vD‹nнЁГЌЫрЉK"""""Ђ`Ѕ$%$I‚нfCњ‚0™LшдГ'"5 ИРH”сP?Џх}@’*ю/ЪB’p>/‡ЖmCюбЃИѕўћ•ђ`]G]Њж)џ IDATе‹Є„УсРБmл`2qUїюАЁ('чвьUl ђАšйBХЋњъЭK+/-/%е  гƒр%˜еяUЏзcИD­AРUнЛcЯ† 8˜žŽж7мРК ЂК$"""""ЊI —Ы…Ь;бЁGи /(№’ˆеnšПх MмAŸчЁОu@№Š‚jM @0мѓНю^P‚ОJЏЎЫЧ  ЎѕyПњѕєлѕvлƒrCy@ЋКЏ>?Awьš2Q—W5х[U@‡В’жeеЅ,;#й8ЙcfO›†_ггёр“OђŒˆˆˆˆˆ‚#)Ёž N’$ˆЂшЬф+еЊyЪЏ"{›'Џ/ЏЋ\q–—ёЬхрUох[Ж(ћхsѕЃўис9_бsќъуU+ѓUeЇ.OБВyrљЋЖ/ш^жeхuЉо]ЈK5“бˆа@Ii)?СˆˆˆˆˆЈNгŒОa0”РIОz,ЩСЌ.XT—:`дСЄМŒЊЙМза\!згo(ПТ.ƒї}џš+вђёy №МЬ“AЛ/љЪП.РЌђXЁmО/щn]амЖрЅ 5Ињ П:Јѕ,'з` жЅ/uЉы3"аыR=„ућ ЯMŸИФˆK6МЃП†ф~/ŸеЋЗзЪ25YЎ6Э_луЙђ\Й=žk}й‘_’ђеu@wOМ'@”›П+™Ср§іO fW9˜U{њfэ+Зnѕz КvеОJЋ DWnйЂ,‡ъњ Pї  ЛeAаэC™ЏЛmA}5пk‰ъх-ф} p_AдAЗЎ>$Qдм!ЈЫT” žхЅ.еѕb2!:<эЌV„[,њЉ№V—‚>щPлuЉK>r]Z­VР—п|ƒ§ћпp‰"ІNœˆqїо{ЩeyŸ—;@ч~/_"ЄwяЮе.ыЫ2ЋWoїiЙšќЈдэеіБљZЦСpЎОНњtЎ|OА^‰ˆ:)a04W’х+Йъ+ЮЂ:Pг_y—ƒ5Я_бГ.СНЌ|ѕZзС кЋе§ЏНЖBp(ЉnP:(єжЂ*ј”tЫBtЪгдAЄОВЌ—cЈ0Oи КrRцЉ‚Xˆ"DyDOyщAPн> йP!˜•$ЉbK ?зeџ.]IB™г‰уgЮ`ч‘#ИОm[MЁЊКt‰‘кЊKIuмuЁ.`Ю'ŸрхYГ/=§4=šŸ^DDDDD\I AЈщЏАЋƒHxi†Џ,е§ђž ­BƒКЁ х WЛˆ6‘qќ8ЂУУ‘мЈ‘ВП“yyјГИ™ЙЙ€ž+єКt`Х–-h—œŒ#99А••a@зЎXсiQ!ЈЮuХж­аЅ‹rџО“'q:?A@ЫЦ5Ч!JggуD^œ.GGу*Ћенš@]N•\WWQ,PхзЫ-B%-є#oAјЋ[dшЪ\нярщ ВŠ>%ќU—ъ:,s:qєЬD„…‚€Ѓ99юђkгf“ {ЧSЇšœŒФ˜œШЭEЋФDe[™yyh“бˆЃ99Ш;imкРd4bof&іŸ<‰vЊf№gЯŸЧЉЉА„„@’$ь8zэ­V$4lЛг‰ƒЇO#ЙQЃ:S—L>QАЊ0њ†fєѕh њ‘j2OžцЫ<+ЗmУ*еcхЖm€$С S‹иъ”ђИІE m€­п€іV+,&“з‘!*мџ/I8uі,к%'Уb6У‚vЩЩšхOфхЁ}r2ТBCa6аЖiSdдќ\/ІLНЬгї)сзКєдуЪmл№ѓЮ8™—‡kZДœШЭХUЩЩ q—_R’R~Э7Цё3gЪ[gHŽчцЂ…ЇЕЪ‰м\\eЕЂAHЬF#RUыЪћngЕТb6knЭА••ЁЬс@˜йŒЭšеЉК$""""" VZJP5Mї\ѕU:њгїп ъ4Q}•XнŸrхXеёЂвW„zUзЏsч !Ъ,f3šЦЦт`Vк&%Сb6Wь#@юHаГН0ГЙќеџы[gxжЕ9 Qšд‡‡†jŽЁДЌ ПюнЋ™Іi5mGˆђљ*хшщ“ъ+хК+ыъ$Ёл–rЕ^еЂA@Х–~­KИћ‘$ Ѕv;v?ŽТ’„…„ ДЌ Пx)?@Dh("ТТUP Д†‰ WъАДЌ ПьоэЕьхђ ѓМ&фѓьвЊfeсPVЬF#к%'#>*ЊЮд%QНHJž&џšќtAš2‚€мП‚LЉ‡œ”ƒ6ЯеzЅУDuЂAн_„.(“;<5Њ;,,.Ц‰Мє-%ќY—њђМКyslкПq‘‘А„„ ы•WТb6kњXЫЁy|<fe!1:ЧrrаоjuПeнА%) М QБCвША0tnбфž;‡]ЧуЖъL]+Mф#_U" ыпСpIъ`ЪєЫ- 4Wзеџ{ bЁЛя-Ј”ЙDЛŽGЧцЭ‘аА!к%'уGŽРхr’„“ E6›{auр,Ššfђ УТp$;.QDЉЭ†нž!ђф}^ƒ}'N дс@iYіž8Ё9k|:aOf&Ќqqˆmа‚$ЁqУ†(БлБчФ tДZбВqcЄяп‡Ы…О:UЭCжоjХюЬLЮЩAЈЩ„ 8sюœћJ9€–cпЉSјmп>‚€ёё8{ўМdZутIТіЃGQjЗ#<4)‰‰Ъњšsзн"Ђ4щWЗžeеe.щ†ŽдAОњі ѕ•љJњ”№G]*Щ Я6%IBRl,de!­M@’№П#GPZVц.П+Ўа Уй<>{NœРЕ­ZЙЗы9Žfёё€ђВЗX’˜ЈвT•T‘$DEЙїхp "4W{FњЈ+uIDDDDDT/’ъЋГђ•^С`(oZеp‡rІКХB^Osћ„— NYNNQЄєщиQyЎ|;x:œTўам3<Ј$IhоЈšЧЧ+ћ’};uвŒЎИћ-HKIбижF” и }гІhŸ”ЄЌл"!ЁќіЭ5B3е:rpЊцmhHхмЁDз'†|Х]R ПЉ,+п uУszk)сЏКьлБcy0юYЗQd$т"#!H’R~JйщFэHŠER\œІ.хчжFмѕЅ/SIrзЗ:Щ It4šФФhGЛЈCuIDDDDDT/’rPЊте} ш›š D—ЋМcI9Xѕt†шŽUEЅIЛЈ‚Rќ‰ъ@W5,Ѕњ ЙЄОТЏО2­ю QLЪЇ—‚КcFн–Ъmѕw/ћWі­юЯBni€ŠЗ7HЊ§JЊNеНЄ*wЅЬtWмелеДdаї)СК ŠК$"""""ЊI ЃмфП:КРOў[„Њ“ Uszyt uѓ§}љ‚ h‚KЙщП(ЏЇАUЃBЊ ZвЃњціК@\НшƒXніЁ ˆеЎМzS§~еG Њ:Iдп!ъ–е—oеU")wВ.ƒЋ.‰ˆˆˆˆˆ‚>)!Ь РVTфЕ™К/дWЙНПRљЮ*єO !CDЊЏ–kњ>№Ќ'ЪWЁuAЃшcЈП]AоЏЈКњ-п>"ЈЖЇ^GYAjн›RЧQЁуЩ !А!4"‚udu)KьаAѓwvF?Нˆˆˆˆˆ(x’FЃё-["џФ 4аDЕNwћМнПЏŠUЏ ъTQаw–YУРPE^ NUУBB”!)Ёя[СЫqжфЊxm•gоёуHlг†uduЉOBш“DDDDDDA‘”0›ЭˆЛђJхцЂИЈ–№№РjBЎ:ЏїуWЄж(єLCПkV/JьХХ0†„ Ij*ы2Шъ’ˆˆˆˆˆЈ^$%A@ƒ№pЄо~;rіяGюсУ(+)a 0љ6ј–-бИMeєжe№д%dffVXолДкtЉЗЯ§њwПDDDDDТЄŒ Бm[$ЖmЫвЉуA.ы28X­VŸІеf |)ЗЯ§њПDDDDD‚у‘_˜XDOпСЅќ7Gс """"ЂКЌBRТсpРщtj;ЌGA€Щd‚йlЎчЫњЎѕЭфеЖеЋЗзЪ25YЎ6Э_луЙђ\Й=žk}й‘_’6› ЇїяЧюџўYY]Ў:‚QQ5ZОaуЦh{ѓЭИЂuk˜LСн„ѕ˜ѕ}єшQ<ѓЬ3XИp!?Ёш’щнЛs­,ГzѕvŸ–ЋЩъ@н^m›Џe чшлЋOчЪїы•ˆ(`“‡Y`гТ…ИђъЋбІcG†КпхФЎ 0єйgЕ%I;ЄчoбхBЮ‘#иВt)Ьf3šЄЄmХГОЗОЗlй‚nнКёг‰ˆˆˆˆˆъORТщtbїš5Hщд ‰ЭšЭ  8ЫЪм(рОMЁ’ UФ[­ш<`і§њkP'%Xп5ЋяюнЛуЉЇžТќљѓ‘——‡ЄЄ$L˜0ЇNТgŸ}†3gЮ %%“'OF3Oy^Ш:АuыV 0€ŸNDDDDDє хqš„s99h\'h0@t8р*+ƒГЌ bY\ђџvЛцoЇчyЃЄ$=дЯњЎy}oмИГfЭТЪ•+бЋW/Lœ8Пўњ+fЮœ‰+VрЦoФŒ3.j‡У]ЛvскkЏхЇеŸЄ„аC~§9ЙœNИw ъpРхtКR‡У§Пг ЇgОЫс€$ŠЪ•і Ў|жwъ{вЄIhкД), † †’’Lœ8W\q…2mпО}ЕЮž={аЌY3DDD№г‰ˆˆˆˆˆ‚žIаС`€XVQИ[‚Hl6, хг\Ў  ж+ рƒНОЕPпqЊV%‹Ћ™fЗл/j-[Ж kзЎќd"""""ЂzС ш‚1№v:J“~Щщ„ЋЌ [ЗmCЯў§Бuл6Эtбщ„гщ Ъ€н[ьѕ-џ_Wъ›I """""ЊO|j)б,-My~<=]3O’$ќћнw1џЛя uчxњс‡•ЋаеЭПфAЊббщ„шt*юиЕ S^|ЩM›bђѓЯуе^@ЇŽ•N & Fc@W\nn.,X€7"'' 4@‡0dШtщвХчОЊКіVчўЎЯ`ЎяѓчЯ#33элЗч'S]чiEDDDDDЕ”ƒRoыќяОУ†Э›БђгOу&OFГЄ$ќuа Ÿц_ђиР`€шtBrЙ;іьСSІJNќѓ™g№цЋЏтjU0Ш­ЖnнŠ—^z НzѕТЫ/ПŒЄЄ$иl6lлЖ oНѕввв№иc]PRBŸ„Јi}ћ=ЌУѕН}ћvtьи&“цm‰ДДŠ Ÿє[лT,ЁЁЕЖџД4щЗxјxј№в—KzКTхr•ЭЏ2Бр~ЃёёРИqРдЉЕvќЭV[5Kz_юp!0іWрy@чFРЇЗ-"љхEDDDDA˜”ИРlёЪ•˜8n’ЏИ0qм8М=wЎЄV7џR3 юfњЂС`РUЉЉXѓнwюЋш$$ˆ’бх‚$А\Ўj›ѓ_Ю!"еВГГёт‹/bкДiИњъЋ•щ‹={іФ 7м€ЧkжЌAЯž=Ћ рkЛО§эRеїњѕыk<­ІыTvыFzК„Wоz Ы<є[oЛЏ@тЄIx<ё}LљЧ?ъѕ˜ЗDƒгщ€Щdж,у-БуIDXЗ2ЄV“•%""`VНЧo†З~ь ќп~рёMРВоќђ""""ЂрPaєš:pф:ІІ*wHMХЃG}ž9‚TЙ9ПKюkРs%]єЄ.Їг=нсP–ѕЅ,.Ч‘z_|ёюКы.\}ѕе8pрF>}њрГЯ>Cїюн†Ч{ _|ё…OeуЭ5}ћЂmш=jц.Z—ЊгHзЇ?ыћRЋЊ?‰Ѕ?ќ <яyѓЭ€яПњ'ввtыП\АьqЄЅ Ъ“Мћоjtэš‚Д4ƒfњ‹//@зЎ‰шж5окK кгжжїšе™0ѕљЮœ9iinК)DљћЂ `4={§ћЛЇ-X4iФФгЇЛЇ­^ ДnэnUQƒ[™„Ыу7КџљЄќoи˜мпh`rџП!›_\DDDD<.КЅDIi)ЂTУ6Œˆ@qqБЯѓ/W*I’;X№мы-Щ‡'P•$IR4| R'MšЄŒЎ0lи0|јс‡˜8qЂ2КТАaУ№Љч6‡‹YGmгІMјЯўxу70x№` 0+VЌP–iгІ ŽЏО ОЗњ–oн(s8№ЧЁCxqж,œ8}ЯџѓŸQŸўЌяKmсТ…І юNШG—ЖРкH4WŸs1rЄЕH{e­6`_ } я.У=}Є2}wщЯчЇ uюУьыЏпЉ№ЗzZ[K\Їћћ№| mОћЙœЗY2Щ§€Xнд)дhѓ[tгЖHа@ЯwЫЇЗі.ПМˆˆˆˆ(“˜5 CaQbЃЃчŠŠюѓќKM0 zЎ’ŒFH Ђ€рRђ4ч‡ЇIПA’fˆHНќќ|$$$Ž=ŠРbБ`Р€xы­ЗЇOŸжьЇЊО2!f3:ІІтэ—^BŸбЃ•Є„ПыгŸѕэ‹‡еjEЗО}aјѓGЄп ўыхяŒ}ћаКE Ÿч_ђ4нЭіEЂЫˆby3~—Kiж/_A‡gй@}#::yyy€цЭ›у‡~€нnWZJdffbњєщ9rdѕeуC} BЬц€ЉЯњVпВA}њ(ЯўѕW€1є/˜q(,Sщzїнџ ўяp&z>д_|y‡2}№рЗёюcHйCЙЅУ`М§~+BђGmыЬ˜ўі;7vьXЏмОЁмšr!­?С}KЦ]wЏОъžіілРшбх-qр“O€G,wBТзЭыnпoЭXŸ]~ћЦлз_ОpџџŸыљХEDDDDСуЂoпвЏоxџ}Дђ\y{у§ї1zШŸч_ђ еsх\E’„Œ?ўРфз^ЋАмk“'Ѓ}JŠВœ!@Џœwщв?џќ3F &`кДixїнwqїнw#** гЇOЧ=їмƒ›nКЩЇ„ƒојчžУccЧЂЅеŠуЇNс…™3q‡ЊУLзg]ЊяюнЛ{эиђB<ѕ№У8_T„Ћ~ўиј:Ц ŽЉ'"ЬђЅf9§И)<м<|NЇˆЯ>џяН{7)р_S†с_S†i–ѕФРю–uрУЫ[Ы‡I“оwЗ’QеgGнUжвaи0їC­woррСmўxяŠ-4оП %Р ЪŸДŠжпС/+""""ЊI‰Ъ3ѕP ђsЙяQwо‰ЬгЇбŒћjэЈСƒ1bр@eљъц_jrs~I’`а>%ЏLš„iГg#6:љў‰gџё%@=Aj 6чПчž{№шЃЂkзЎhлЖ­ІCЫБcЧж8€зылЃўёТ 8|ќ8š$$`PЏ^џ§SŸuЉОk+!a ^ю9Мўмs5^7-M€$!9­•r pзЃA§Ёfрс|}:~DDDDDLJЈЩ ЏA  `ЪcaЪc]аќЫ (ЭјF@qUJ ž?џzу М2q"ЎJIЫщtwˆшrЙћ!€!"НiжЌ&Mš„ &`иАaИ§ілбИqcр‡~РО}ћ№ЊмЬќ‚З={b@C‰њЛ>kZп‚$еJ}зeмR€ˆˆˆˆˆшr&%„ Ь”бD‚(B0 R[ЕТќйГa …ЫсPFc<ЫrкН{w4oоŸў9Ц‚‚DFFЂcЧŽ1b„ЯлЉ/ѕ-дB}wяоO=ѕцЯŸММ<$%%aТ„ 8uъ>ћь3œ9s)))˜§єгJзŸ0a‚Вь_џњWM D—лъелke™š,W›ЧцЏэё\yЎмЯЕОlˆшВ'%A@x\ь%% š4 p:ƒWе•qIѕ+!<&&Ј+žѕ]ѓњ–`БX@I2Шгьv{ЅызdYЂK­wяЮЕВЬъел}ZЎ&?Њu{Е}lО–q0œk oЏ>+пЌW"Ђ€‹с”ь„Щ„фkЎAс™3(), š+шrs~§Ct:•‡zКСh„Ыс@R‡A]ёЌяњUпDDDDDD›ЪOЬf3тš5ƒЙW/лЖ Й™™Aq‚Qqq>м‚С€ аИm[D%&uХГОыW}Ђ }JФ&'#699hNахrСXњ‡И Ъg}‘?ув`?AЈѕЫЅЊoyhЯšLЋьyUг|•ЈЛн$;#ƒ•ODDDDDuށE@Tїdgd0ADDDDDu“DDDDDDDф&Q`ЫЬЬDЗ”П7ЏXсu™коЇПЮ•ћ%""""Њ?˜” pVЋЕк[5ЌVk­ЪЕЙ=ю7№іKDDDD(xћљ[JеAњб7фПйљ%е%LJеAL>Q0рэDDDDDDDфLJ‘_0)ADDDDDDD~СЄљ“DDDDDDDфLJ‘_pHP"ЂzІСрСˆўяj— Ica]b,cжБ.MYY: ˆ.+&%ˆˆъ™тoПe!Q@`R‚ЈJьаAyо0* WЗk‡чž|RSY8DDDDDTg0)ATegdœ.~ўѕWŒ}ќq<јф“ј}е*еьш’Ј3 ””–В@ˆˆˆˆˆЈnХ4,ЂР–™™‰n(o^БByўпп~УsгЇю1™™™ЕЖOg—ј IDAT+їKDDDDT0)AрЌVЋrЛ†к—п|ƒ§ћпp‰"ІNœˆqїо[kВеjѕK€Ю§^ž§ &%ˆъ 9Ÿ|‚—gЭМєєгxhєh е9ьS‚Ј’№ќєщHьаA3"Q]Р–DuЗл9ˆˆˆˆˆˆъЖ” """""""П`R‚ˆˆˆˆˆˆˆќ‚I """""""ђ &%ˆˆˆˆˆˆˆШ/˜” `VЋЕ^ь“ћ ў§yуuє2QТ'GЮaё‰s8tо†мwžEЩO‹Нn QпСhљј$˜ &A„бѓПћ!СXсyљќ ЫЊ™ЏZПђmU?_}L&A„Щ`BЈ9FcDЧŸp9s ‰e$@Bљџъч IМLƒgRљsIѕŸЗmщжW&KšiЖяYPђ2MЛ^љ4ЩыЖМ3 љpўкrЈњќхѕ%Ю_йnЧW~\^ЪЗ’ѓз,[ЩёщЯUђсќ5х[ЩёU^>дY5e*пEзY%Ч,UWІ5­3хЕ[}™^TUњўQНЮkЃЮМдфУљ{-пjоѓ’Tѕљ,сižŠЈ^#7єaC-ќІ#"""ЂК“”8]ъФВАя\ЉДGўэ_pfDйўšeУлv@ђУъ~)He™pч!$% "ЊkФвbиіmmяф/›‡&Џ/Fdr+ lGDDDDGѓ+е.Jјk62ўДkLfФ=§&ŒБёЪ4Sl<šMy‚Щ\ч С$ˆ|%QаqйSюФЙГЙp:,"""" Мx\§‡шк… ЗUЖh~O™‰>З?—$O~циxu; 7 "Ж Ђ х:ЖgПљТ_GTT[LQ`Хфъ?Ю–V}%эЪЋлсхOЃФќœкEЮКЬ&$ˆ(Ийж}‹тРl6#<<œBDDDDC›”(qUЛBŸaƒM DЬ9"TКмЊ^ЗЏљY™іe~€~]~СќЗŽ>л§~­€APu(ФЎŸыuzЮ†1xхƒэјdЩ~<8Д-&?аЉb@cwсХїЗcљ/™€;nЖт…‡Ў%Ф}ХѕыŸaЮЂ}XћA?иЪ\xщЃXОс wм”„чшKˆ‘я6"?‘N„ЭfƒЭfCXX[KQРаќ2=[ъєљбЪт№iпожГТДЛИшнўяЌН8ГщОђQрE@’$$м8/ўѓцLЦЧKŽ"Мља ыЮќ,sП;€щ/§oЭ~s—Р;Ћ†wЏ=ŽсЙn˜Ž7ПмƒЙЫbњ‹že—ТœŸЬŒ!Ќ"Б•РnЗУсpАo """" (š–љ%5§БzсfqюYlzћcœоžбх„Еs{є™x?bЧт…Ў#•хBУ-И"%C'ќoмѓВ2]м­4эƒќœ?1їпKёћИœ.tКюJќsъ`4i…Д–ЯhіЛ/ѓ%ДNž Ш<ѕ\НЊьмєћЕ‰ŠпЦЦ n1ЭФC#га ioгџКtэqРЃŸAсОYё;І>5 ЧЗ}†ѕџЫС{ŒCiжoXъiMqчНЯрмюмЫЎкŒЉOЮФљ?От;ŽШO\.—ђ """" ШЄDu}J\9y Зvк,œкО ГчЯУ5-[уцДаHАрЎйёт–Џ№|—ПТхraЧŽшвЅ ОeО9ј=†ЄИoQ_ѕяxdЄРЇ‹>@ыfэq§u7СфŠТѓF+Ы,ZДC‡ѕЯѓ€ф+^ТŸgžЉї/‚ЉvСŒ3–xJOџTa~v^ ""%ЅВВВ`i|Оџe:ЕGыNН‘Лс dŸ-U–-.к[Оl“™” ђ#ЛнЇгЉљь$"""" ЌЄDIэ_ASџV'(Юь;јЧнc•iлг7уѓн№ФыЯ"~ш“ј3+Ю2їm"їDЄ›4лўjяћ0 "юr_Щ3Мќ–Žєл?_љћЎЛюТЩГKP\КNLEJв Ќ}•ЂЃ Ptdр%`Ilд™YE(*r? I“&0„FcЩaФ]}с8wЎв\$Ц…!3ЛИтВ–2i\pŸ5iU1lэOЙnЕfZBћ6€%K–Рсp@’$иl64‹ŒЧOџ™МуYXЕцGЌљяЂ("Ц sЈ——ЇlЋѕеЭНn+Ъ’Є,c4QXтОЪп:y*AР‰гЯѓрƒA=Ќ€+V`Эц3€#FрШ ьиŸ‘ї>ŠвЌпмЫоЌZvkЎВЌh+`A‘ЦХѕ)q}оім“879yф 2DiQёмц…ИљўСињХше§6Э:єНЏ/6,м€јјxю>%ў9§^Ќzw[…mm8<]ГОЄfƒЗoјцЉ1`36УO<ЩYŠћ‡п„чž{oL‡юз&уŠV]qцїшOŽj›Й|йћ†Й—Еe­fA‘ЦЗ”ШtV‘шїгк ї.ZЗJ™ж 6эžzпякŒsіˆžб ^ъ:7ŽˆЏwўŒR‡]%B^oа#Ск?~†нiƒ$I–њЂEс—ћcыўЕ(uœW–ПБхDЄљw…у8pbjННЏ:gуиŸ{XЈ Џќ-ЧЖЯGvжI|єљ ›А`ёrќuш(Ып БЌаГЌгЦ&ршж/uБШћ E‡ОсЛˆˆˆˆˆˆ4„ДQSЅ6=Fbоƒ­qуЧ‹}ZI4QдЈ)ŒFŒ‚“ Т$H0 "ŒžџхiЦ ЯЫчWXжPЭ|Э~*[ЖњљъcŠ4••їЃ <э)фдџkІy–ѕ2MН-ѕ4ЉвmщжW&KšiЖяYPђ2MЛ^љ4ЩыЖМГЇeI5ч—і:Š-CщщѕеžПМОфУљ+х[Хё•——ђ­фќ5ЫVr|њs•Њ8§1KU_хuсCUSІђёљRgкзnеeЊЉГЊЪДІuІМvЋ/г‹ЊГJп?Њзymд™—њ‘|8Џх[Э{^’Њ?џђr(п–§§ЭˆG||<4hРo?""ЊвсУ‡+L;qтвввX8Dtбвгг1яаиПюЋšОqnуШhФ €НИзwgг'yэ“ˆ‡ЦB """Ђ€ЄIJФІоŒmљ6/­мЯ]ў‡œХѓa­S•кЁЮ€( 00ЙBDAЬ‘аŒ…@DDDDIщSтдЉSшa.ЌtAWўœy§)HN$Ї'^›G~n/—$№U@DAЭйЅ7BCCa2™4C3љ›’”0оHDKГЃТB’гГгŸ„K•„pцчтјЋ“ 9uћЧКd€ўH'ЂрT–иЮюƒa4•Q P’fГ‘–PМйЄ-eš…Ює ЪіяЌАrё8ёоŒ:_NЩРW{у(Мџ„6ˆ@hh(Ьf3L& †ˆˆˆˆ†ђыдbБРbБ Y”р<ОЩАСŠlЩуУSћШ •ŽˆˆuКN ‹-(Г›Z†№pL‘Џ"ЊsФ Jc›Ђ uBzн№†бhа ђo00 KDDDDCIJ„……СсpРхrю6•`ˆНNЇ%%%еoI’ЮЈiд*—чADа§OD—ETl4h€ˆˆ„‡‡#,ŒЃpQ`Q’ƒм§K„††ТnЗУхr!<<œ%EDTЧФФФРbБ <<l%ADDDDGssБЩdBTTЬf3l6›вrТщtВЄˆˆъ˜ˆˆX,„……1!ADDDDЉBgƒсссlADDDDDDD—”зnиЫD Ÿ9‡Х'Юсаyrпy%?-іКF}Ѓху“`ђt€щ­#Lэѓђљ–5T3_Е~хлЊ~Оњ˜L‚“С„Ps<ŒЦ(ˆŽ?сrц@ЫHž~2$UŸRyп’ЩЫ4x&•?—Tџyл–n}eВЄ™Vaћž%/гДы•O“МnЫл1’чЏ-‡ЊЯ_^_ђсќ•эVq|хЧхЅ|+9ЭВ•Ÿў\%Ю_SО•_хuсCUSІђё]tUrЬRueZг:S^Ле—щEеYЅяеыМ6ъЬK§H>œПзђ­ц=/IUŸПСސцЉˆъ5qC†1дТo:""""Њ;I‰гЅNмЙ! ћЮ•*A{фпўgцС У‚†Зэ€ф‡'д§RЪ :2сЮCHОїзID`Фвbиіmmяф/›‡&Џ/Fdr+оОADDDDIѓ+е.Jјk62ўДkLfФ=§&ŒБёЪ4Sl<šMy‚Щ\ч С$pјO" >Ž#ЛqjТ8w6—}Q`Цуъ?Dз.lИ­ВEу№{ЪLєЙ§И$ yђы0ЧЦЈлНI!Аm)зБН8ћЭўњ8ЂЂЂиb‚ˆˆˆˆ+&WџqЖДъ+iW^н/Яx%.рчдŽ(r^њ`~Bч{яь˜{IЖo˜ Ђрf[ї-Š>ГйЬNŒ‰ˆˆˆ( h“%ЎjWш3l iˆ9G„J—[еыжђX,ˆLNBЇю…ѕњ.t ^=яяњЄж Р Ј:” b з{OъфlƒW>иŽO–ьЧƒCлbђ*4v^|;–џ’ Иуf+^xшXBмW\Пўљц,к‡Еєƒ­Ь…—>к‰хNpЧMIxўŽА„љn#ђщфAиl6иl6JDDDDEѓЫєlЉгчG+‹УЗУ’„ПўŠ‚ƒ‡А{жtTѕKA—Я™Mї•2рЉI’pу<|МјЬ›3/9Š№цC+Ќ;ѓГ Ь§юІПєOМ5ћЬ]zяЌ BпЎ=ŽсЙn˜Ž7ПмƒЙЫbњ‹že—ТœŸЬŒ!Ќ"Б•РnЗУсpАo """" (š–љ%5§Бъ[ љlЦ@LУ†x u<М|/~чCœоžбхDђ5WЁї„ƒьЧ№§‹spца M _§`nЦ‡ЌЙ ›~П6QёлXИѭ1цБ™xhd4этcкс_—Ў=Иsє3(ќу#Р7+~ЧдЇfсјЖЯАў9xяƒq(Эњ K=­)юМїœл§{йU›1ѕЩ™8џЧWЌ"?qЙ\Ъƒˆˆˆˆ( “еѕ)q!С}‹‡бlЦўѓ”Кœјх•7qzћNМѕхЇшм27_vBё—ЗžЦЇЏ~ˆœƒ™X№§bD™ џўЖ9іЊПсѓ=АіjЩдGЛ`ЦŒKМ ЅЇЊ0?;Џ’в?YYYА4Опџ2 кЦЃuЇоШн№ВЯ–*Ыэ-_ЖЩLJљ‘нn‡гщЌь%""""ђ'ээ%Ў=|!Iіюн —У‡y_к‹м}ћџ57_`{њf iйgŸмйg ђ›iя{~oчџёѕ%Rttr7>„ЂЃ‹*ЬKlдРНLQŠŠŠMš4!4Kў{ #юьЧЙУp•ц"1.ЬћВ–2U‘”ЈAŸ5iUёЯп7КеѓчqoJ{ФЗo XВd $I‚ЭfCѓШx$ДJќђЫ/XЗnf;_§AРМнБц.ЃA=Ќ€+V`Эц3€#FрШ ьиŸ‘ї>ŠвЌпмЫоЌZvkЎВЌh+`A‘ЦХѕ)сC—‚ Р`2!Жys|8k,Fz<ћŠОњ<ђ† ЂД~˜ќћ" ˜ђжПі)њєщSiЋоОqy=5ІlЦfxт‰' 9Kqџ№›№мsЯсЉуа§кd\бЊ+ЮќтнуЩQэa3—/{п0їВЖЌе,H""""""вИр–™ЮЊ3§~ZЋŒ№рr8sј0КѕОsьFXl к<љ –юм‚?э%=ЫНкm[7Ч‹оDvqОВОœœрэ/gуи—aXЈ Џќ-ЧЖЯGvжI|єљ ›А`ёrќuш(Ып БЌаГЌгЦ&ршж/uБШћ E‡Оaс‘†ЖЃKћ‰ FEФРXЭrƒжЌ…QaD˜Щѓ\‚I ЫьјєрvЯ<Я|ƒ“d—руН+a$э|ј8уџ`DVо…:ГёОЏ#ЙЪPИ.АџР“гXїa_ФЅMBёБeКeэ(мѓ(м§БgIDDDDDDT]RТ‡~"Юmќ/ИA# DЇToMŸФЄQ€“BУXDDDD4I‰ид›Б-пІiнрn•р~ю:№?ф,žkŠЈдuОDI€Щ" bŽ„f,"""" HJŸЇNBsaЅ КђЯрЬыOAr: 98ёк$8ђsы|И$оBDСЭйЅ7BCCa2™ ќЬ#"""ЂРЁ$%ŒF#†7бвьЈАфtрьє'сR%!œљЙ8ўъ$HNGнўБ. ?в‰(8•%Ж„Гћ`FхADDDD(”Є„йlFЄ%o6)FKc™fЁѓН‚В§;+Ќ\ќGNМ7ЃЮ‚S2№•@DAЧоИ яЁ " Гй “ЩФ‚!"""Ђ€Ёќ:ЕX,АX,heЧ8oђlА‡"[2Сј№TФ>ђ‚Ї §ˆ"БN‚Уi@aБevТBЫnƒЩ ђеADuŽbAilSДNCHЏЛо0 4P>у &a‰ˆˆˆ(p(I‰АА08И\юaAя6•`ˆНNЇ%%%еoIB у0@еHЃVЙ< ‚ю"К,Ђbуа ADDD <<aa…ƒˆˆˆˆ‹’”0 ˆˆˆрю_"44vЛ.— ссс,)"Ђ:&&&‹сссˆˆˆ`+ """" 8š›‹M&ЂЂЂ`6›aГй”–NЇ“%EDTЧDDDРbБ ,,Œ """" Hz<3 gы"""""""КЄxщŒˆˆˆˆˆˆˆќ‚I """""""ђ &%ˆˆˆˆˆˆˆШ/˜” """""""П`R‚ˆˆˆˆˆˆˆќ‚I """""""ђ &%ˆˆˆˆˆˆˆШ/˜” """""""П`R‚ˆˆˆˆˆˆˆќ‚I """""""ђ &%ˆˆˆˆˆˆˆШ/˜” """""""П`R‚ˆˆˆˆˆˆˆќ‚I """""""ђ &%ˆˆˆˆˆˆˆШ/L,"""""ђEzz: ˆj“DDDDDT­=zœN'$IbЁљ™ 0™L0›Эšщ’$СхrA’Є€xЏ ‚A`4!`оЁ˜” """""йl6?~[ЖlСйГgсrЙX(D~дЈQ#ЄЅЅЁeЫ–0™мсН(Šp88vьNž< ›ЭцїФ„ХbARRš7oސ х=I0)ADDDDDеr8ШЬЬФš5kpУ 7 I“&šР‚ˆ./Q‘••…Ÿў§њѕC‹- Iьv;Жlй‚ааP\{эЕhиАЁв:С$IТЙsчАџ~ќўћяИюКыЊЬgR‚ˆˆˆˆˆЊхt:БeЫмxуhгІ „(4lи‹щщщhбЂŽ= ЃбˆnнК)ЗoјЛЅDTTКuы†M›6сшбЃИђЪ+•yLmQЕ$IB~~>YDФjЕЂ  €ЛѕФсУ‡бЖm[И\.ˆЂxQuRуbЗхrЙаІM>|Xsы[J‘O oй РїЅмТхrЁЈЈбббEБЪѕ|ЙЅЃІ-,Њ[>::EEEšЄ?QˆˆˆˆˆШчр‡ˆїН)К!?з?дМЭПи‡~ћЗнv›ІЅ€ ЃїАЅНšцmш2"bR‚ЈЎ$%фџЋњЛпoоОcе-6дЧ'cR‚ˆˆˆ‚š(Š(++УёуЧ}ЭbБ iгІhоМ9BCCˆщ" ЬїІ>ш—џ/..ЦТ… Б~§zфххСl6ЃcЧŽ)ЁПbЄNLЈŸЋ“ъчњЙˆјQ О7ѕ}JШпsњя>ЋеЇzcЦŒQОїдaЊзQ'7М}Ъѓутт••Ће I’••UсћUNœ№і """Њ7I ‡УЁќH“oЫ8а‚-ИуŽPмqG((г S~ЬI’‡УСЄ“Du.)ЁП}c§њѕ(((@YYВГГ1wю\Дoп^YІџў˜={6233•ŽЂ_}ѕUхЛSоОќPOEЗмr >ќ№Cфцц"//~јЁfОМ‡%""Ђz™”I’„яО+† ЪU AƒТАti‰ъЧVљ/&%ˆЪqє ЂР~oК\Ў -`ФˆXБbцЬ™ƒВВ2ФФФ K—.xђЩ'•„ xљх—‘““ƒІM›тž{юб|zћ>”Ї >}є{ь1FмyчиБcG…л7œN'oп ""Ђњ—”t ‚ мЦЁАдЃsЈЬ1)ATŽ-%ˆћНЉ}C}ћЦUW]…:THbЈПѓ`Р€0`€зл—-[ІYОџў{ešбhФИqу№їПџ]™џ—ПќЅкл7˜” ""Ђ NJШWŒ\.—’ˆа'$дI oН„3)AФЄQ]JJш[JШ љЊžЋе ЁэmООUbeЯ™” ""ЂzCюс[п ЂКЄ„њ‡“Уср DLJе‰їІ>СЎO шњяB_о’ Оќ-ŸќН,cR‚ˆˆˆ‚ZHHВВВЅIFЈˆ-Xp.WХ8NŸ>АА0"‘<˜L>,DtyˆЂЈ$%A@hh(ВВВYm"С[?1ОєS]K‰Ъœ>}сссš}0еIDDDA+,, ЉЉЉXП~=L&œNЇвС–ќПќPOw:0™LXЗn:tшРФ‘'P‰ŠŠТŸўЩТ љљљˆŽŽVОїкЗouыж)ЃfTѕPъП+{T6п—§­YГ;vд|Џ2)ADDDAЋaУ†hзЎ А`Сdggk~<щLЩЯЯœ9ƒ… ЂИИmлЖEУ† Y˜Tя™L&Дjе GŽAnn.ћZ!ђ3Q‘——‡={і 55іэлЃААп}їВГГ+э3ЉЊGU‰… йж™3g№нwпСnЗ#55111хŸ-ЌJ""" ц ъŠ+ЎРРБgЯ,YВЄкЋМƒбббИцškаЎ];4nм&2™Эf$&&"$$@FF …Ш "##qЭ5з !!AyŸ&%%aрРиЛw/О§і[ПЗnRЏІІІЂI“&šяU~УQP GѓцЭ‰іэлУщtVЛŽЩdBdd$ттт`6›YˆDЊїFBB‚Q`~яЕhбQQQ>я]ŽЯŽЪОW•ЄФсУ‡Y{DDDд BBB|ZЖИИХХХ,4"Ц Dѕт{яRЋь{•}J‘_TИ}cУ† ,"""""""ЊucЦŒбДМђкЇФM7нФ’"""""""ЂKŠЗo‘_0)ADDDDDDD~СЄљжЁn‚„IDATEР%%ЦŽ{йжПи}еѕВ є§cb9S™ђѕСз=БlY?,""Њ[иR‚ˆ?вˆѕFЌC"ОџˆˆШ/LО|РЯ›7/hNјдЉSxы­З№Цo№ƒЌ>е?F"""аЊU+м}їнhмИq­ўаЉэm_ŠzЏ­їь…МџљњѕНееїY] zЂЂЂаЁCŒ9]‡Е]С|žС~~њзБў\%IТз_uыжAєшбC‡… €]ЛvaХŠ8|ј0"""pеUWaј№сˆŠŠђiће­я-Брk}д‡їQНLJ›={ірЊЋЎт1i}Ъ?HŠŠŠАzѕj|єбGxійgk5`МлІzчы—яГ`'ŸAAцЯŸ/ОјуЦу …ъмkи[`нКuиГg^|ёEР;яМƒ„„мrЫ-€UЋVЁwяоHMM…С`Р?ўˆїо{“&Mђiћ5YŸˆˆ˜”Ј–гщФЂE‹žžHKKУ№сУa2Й7›Х‹cпО}EэкЕУиБcЉЌџеW_!==FЃ§њѕгl_’$,[Ж Пўњ+JKKбЙsgмsЯ= ѕi}ovяо­|БРкЕkБ|љrТjЕтОћюCRR’Oч7vьXм{яНXЕj аИqcŒ3gЮœСВeЫŸŸЋеŠ|Mš4ёщœєЧшrЙАtщRќілo(--Х AƒаЗo_ŸŽплеѕДБcЧbфШ‘јёЧQPP€Йsч^№ў^}ѕUєьйз]wВьйГgёђЫ/уЕз^УЙsчЊ|-x;_ъW_ŸВˆˆєяп?ќ№ƒOх>vьX >?ќ№\.ввв0rфHЅЎЋкЖ/Џu_ЖЏ>—ъ^{АrхЪJЗЇЎg_^sВcЧŽaіьйшзЏцЯŸЏљQ9oоМjы9,,LsоъЕКВкЛw/.\ˆгЇO#** ƒ вlЏКrЌЊ\|yшW?-%%Ѕк2ЈLuЧ_екЊо›SІ5§LКиїB]Џ_ؘŒ=SІLёњыЯ:ЋщkO­Њc“?дŸ zLО|зњщЇhйВ%КwяЎ,П~§z9rcЦŒЉіМ|љWзП$I^ЯЯляŸ/Пќ›7o†бhDпО}Бhб"ŸъОКcКипFыЗп~У!C2d–-[ІМўдЩшгЇVЌXсѓі/v§ЊшуŒ3ІвпHе•cUяA""Њ]еЇФїпSЇNaъ䊘:u*Nœ8eЫ–)ѓчЬ™ƒž={bжЌYxѓЭ7ƒХ‹+ѓ—/_ŽььlL›6 SЇNХЎ]Л4лџёЧёЧ`вЄI˜>}:\.О§і[Ÿзїі#трСƒHMMUІedd`ђфЩxчwаБcG|њщЇ>ŸьмЙ'NФœ9s––†7п|лЖmУ„ №Ю;я SЇNšmVwNњc\Йr%8€I“&с7о@~~ОfџUП/іяпчŸsчЮНЈ§ 8K—.U~аРвЅKбЋW/„……UћZ№v,ееЏЗњ”cхЪ•ЪъЪ€rehкДiШЮЮЦђхЫН–™~лОМжЋлОў\|yэљzМОœ;ьиБ3gЮФшбЃбЛwoх‡нМyѓ”чееГЗ:бзkueѕс‡bрРxяНї0eЪ>|ИFч]е|_ЪBМњiе•Au|­7НЊо›SІ5§LКиїBАзo дйХОіЊ:6oŸ sLе­;jд(lиА›7oќўћяиАaюЙчŸЮЫ—ЯRu§Wv~о~џœ={ЏМђ ^zщ%ьнЛзчКЏю˜.іЗбХ:uъZДhЁќнЂE œ:uЪыВvЛkжЌёњљр‹Ъж?~<zш!<ћьГјщЇŸ ŠтmПЊпHе•cuŸUDDT3ўљ'BBBj?)Бiг&Œ5 БББˆХЈQЃАiг&eўЫ/ПŒддT„„„ ,, C† AFF†2уЦјџіЮ5$Š.ŒуЫRлА]лжВ•Evл нJ*# 7(ш&Д–еFK”ThНAH_КP‹‘hхЅкЌ„РќoV] ˆ"^вФ Х&u 4WММТСYgцœнёоѓћД;gЮ9ЯѓќŸsіььœй”” Б~wЪЫЫБ}ћvL˜0:[ЖlСызЏЙы{SQQˆˆŒ3Fyлиаа ъ—Z_<„……Iоkщ/99ЗoпFtt4юнЛ‡ЄЄ$1&Ќ\Г…ЅЏœžyyyшьь„ Иzѕ*ЊЋЋa4™q щЫd2ѕаZЉm^џдкїі…'їXіђц<|јБББ’_Ч”PгYNo]YБ:x№ JJJpџў}шt:ЄЄЄ`ўќљм~Ћ•ѓФТл^Йcj1`СЋ›7jcSKL}“ДŽ…с oз­§ЁЁЁˆŠŠRќB6Pš)=d7їxц3цы†††bйВe())С–-[$TdљХ3—Ъх„ЏыŸюЏYкГlвК6вJpp0š››Х­DЭЭЭюq^^^~џўВВ2фффHЖ1ёРЊˆiгІaяоН8qт„_>ДЌЧXsAсjпS5]”аыѕўќЂd0ФrЇг‰ѕызcсТ… СяпПсp8ФrƒС Љџ§ћї …У‡‹‹]oXѕх.JlоМЙзќѓ–Oо6†……ЁЎЎNr{4/ЃFBkkЋИ˜ўљѓgsфьўіg6›qїю]И\.TTT`зЎ]мЙ g K_%=`2™`Злqъд)DEE1у@в— ВZЫЕЬхŸZћоО№фН<9щщщШЪЪ‚NЇ“ь_–[шЊщ,Ї‰wЌXM™2@gg'оН{‡œœœ?žлoЕržXШљь}L-,xu“гQilj‰ЉЏs’жБ0єх}п@iІdoюБl“‹!Oь§§\ќњѕ+ž>}Чћї#??fГYђE]Э/žЙдлž/ј]эv=/JnэY6i]ieђфЩЈЊЊП€WUUaђфЩВч†„„ !!ЅЅЅ~ѕХS? @ій'ZaХ‘5WAlмn7L&Z[[%ЏНбД}УbБ    hhh@AA,‹Xюёx‚   дззKі№vе/,,DccЃјѓюЌ^НЙЙЙЈЉЉA[[О}ћЇгЩ]П;MMMЈ­­ХŒ3zЭ?PѓIЮЦииXфччC455ЉњшЭдЉSQZZ ЧAИвZњ @rr2JKKaЕZ%‹V.(Х_I_=ЧШШHМxё‚™KzєЕtщRЎЖy§Sj_ЮžмуЕ—ЧїАА0ЄЇЇЃММ\В{ьиБЈЉЉсв™wŒБbхt:QSSƒііvй/,ПеЪybЁ5зYј’gМcSKL}“ДŽ…сЎя@kжЙЧВMn^а{ЕКйййАлэXМx1l6._О,YаЈљхЯчИœ€є‹Х‚ЂЂ"ИнnИнnqkЯВIыкШлV_YО|9Š‹‹!A@qq1bccХђ+WЎˆЙйаа€ттbЬž=›Л}V}Їг‰oпОЁ­­ 555ШЩЩAtttЏ/”YqdЭUA›ю[64oпPњЯhЋеŠ[Зn!33ффdёœДД4твЅKаыѕHLLФ›7oФrЋеŠ‚‚?~\|Тє‡ФђјјxŒ1/^„ ˜8q"6lиР]П;?~DddЄd* –ў ц“œIIIhmmХ™3gрёx`ЕZЙћВйlШЭЭХƒŠuыжсэлЗЊuДєќЙХ7<<Ы—/—gх‚Rќ•єхеsхЪ•pЙ\ШЬЬTЭ%˜3g222аооŽ˜˜Іж]mЧХХqљЇдОœ/<ЙЧk/kuЁзыХ;&:::`ЕZБnн:œ>}ЭЭЭ’‹Zr:ѓjТŠеЂE‹pсТдзз#""vЛн'ПеЪycЁ%зYјšgaцЬ™мы:яYЕjОџŽŒŒ @\\VЌX!žo6›сt:Q[[‹ааP,XА{іьсnŸUЩ’%ШЮЮFmm-ТТТуѓZDkоёЬUA›ю?"ЈmпАЄdvЮZЕ'тў,:Ÿ={&Й">\Иvэ&Mš„Еkз’}ШЙsч`БX4пQвпБRћ+ЦОnПЗ}щшшРюнЛ‘““гЏ:їGўіЕN}ыƒЩўС8' u}3C-ї†š__П~Х… pіьйЗ%++ VЋеяФ ‚ -(mйшўzњєщЈЌЌФ?џЖуПЧEкЖo %оПЙsч’}Dgg'?~Œ?~ &&†b5€ОTWWћќ$љоаy8i2˜rц$в—œтчЯŸЈЏЏGQQ‘ъ?ѕ'GŽЁ AФ€ЁДeЃЯў}c(1~Н6*БcЧF8Ž~йw9”cезОdeeaгІM§ЎѓpвФпЈэуŠПRџ-šф\і70мЦEFЃ'OžD[[Ьf36nмHbA=J[6hћAAAAНЯ– кОAAAADЏУГeУЇэ6›ЂJAAADЏSYY)yШ: ‚ ‚ ‚ Ђ//Jќѓo;Eƒ ‚ ‚ ‚ ˆ~#ў{\D‘ ‚ ‚ ‚ Ђ_љь^R§нž•IENDЎB`‚Printrun-printrun-2.0.0rc5/screenshots/pronterface2.png000066400000000000000000001445741325617007000233030ustar00rootroot00000000000000‰PNG  IHDR6rзŠOsBIT|dˆ IDATxœьНyœе™џџЉКkЏ4н 4[Э*KГШІЂ"jk”ЬDЫ$љ&hfкŒ&ѓrђЫd&П_ц›ŒIfќЮoЦq˜Ј˜Ьb4šL‚HŒЖ€ˆˆ‚ ˆ, ВЖt7аћvћnUѕ§уоК}nuеНuЛo7P|оОxY§мГ@Ck Џl"ЉђЕю2Х^j‡.—‡,оэєž8„љІяуУЇ‹-™я_Ъ.U™йяš†Х3Ч&Œš?џ—Э˜;y4К}.љРЉf8еqЏœ>7/šˆВ‘9…МКћо9аI’АВr,VЮ’BZЛBиЖПoэЏх­ie w]; ЫfŽFžп-ОЂHв4Ќ˜;ЋцO@iЁmн!Мѕq=ЖэЏOjЉ ]ђs<ј‡o\Цжќя>4 9>7žX{ $ јюs;ёМ№а“oP!ИvN™Eњ@Eй|яю…8yЎ?yiМўщЁ€П|ц]„" ОwЯ"LSˆŸОМ'ЮvšжЉ(Ћ(ЫЧŸЌ˜Š ЅypЫ2>mшР›{?УСг­IиЇџ"6‚TT -=xaлЇ8оиxц/ЎO”у™GЎыGD—=єфЖ~ʘХеУIVVŽ3oC Іeг€pTХљіr|nŒШѕЂ#ЦЏЖ~ŠЇ[вц‘яїрОqUЂ=5Й>žX{$IТwŸл‰юоVЬ‡UѓЧкЏšAП‚oкєњњЧ6[§ЏЂ,пЛ{QЂј џєа5ёКи‰P$ŠПNКWКe|ЦЂЏлЩWПgві$ЊЛ_н‹uўLт>ˆ?#$ 7$že~Дv…ње‹фє*ЪFрOVTъВѕ~ŸІ_ЅК/MŸ/аŸ™1йM &рюыІAг€Ўо0>>б‚пь8†Ђ<ўюO—"ŽтџљХ{†UŒсЧПВ gлјџ{З-§ЬњiBЧ4Я?Ъ.7Yџп5hИyб$§WTNOœУ3›4<Иz.žнtŸœ:‡ы*ћТT]9д6B‚œœ6Й/-і/–Їp­a~E рУOЯ'dfсn˜?}n6Ё~јќјЛ>Рј’|hpCхxм{§tЊkХ_=їеЕсЫзOУ •уi|nё$Ќš?язžУЃ?[?ю3Ђє<Ў›7Кj&ъšКёWЯН‡>={WNЧЕsЧ%щЂш DАџd &”цcBi4•“KрvIјјd3:a$•шŸўБ&!}рDc:zҘP’I’0ЛМnY†л%уЉ#!Щ&”цЃЃ'{iYд•(ћЦ-W`њИјEM-}zўАћ4n˜пW/:я>‹Gў~љf-&ŽЪЧWnœ™HO,ЧƒњРƒџВ-іЯDfІKЊp7Ь7ЖakП64ІЇѓ›Чc† [Ц„в|lнw?ћэ^”јqяЪiЖђш „ћкsTЌ_UN.†л%ууЭшьФлoFМ§v э7ЖŸ~vвЫДџ8лйз? avљШОўQ>’$aBi^ЌФ_дЉњ†иўПyGЏCWЌ?ЎЧЯ~ЃзсєDјиН6-V‡ыw&пkBIЮ/Йi@_П|#о/?ЈвЎ›76^]ёКhВЈ‹МјН"дХФЂф{ЅБ3I‡X_п_жћzњ|ћюуд§РX^Бюќс>x2~$ъw\_5жЏE[~у–YёК<ŒGŸй?ьЎУ •уlї+ЛїЏи_DY~Ž?њѕGxјпЖуї;OткЙcqчUhl р““-ШёКБbN,Џ%3FіoЮшЙЋГѓаY<ђѓx№ЩmІњQF™ёZв$Œ+ЭOєЁoм6W]1ћOУгЏ~‚§ЇЮсЊ+&тЫЋf$ТŒ/)А|†% ›О›A Хў‹,Ьёк{B йГЌФГЦўщВ›NќњэOбвDwo/l; @УЪژЫъъаŒрN@BЎiЎКb рѕъEёzБ6ЌKДЁUz:яh@]SпˆќнCgqъl' tDŽэ<єіМњŠ2ХлѓнCIэїъЎ“ш E“кЯLПtщ%jТfџS5Ё”њGE)Цїѕ щћ†ЈУŽƒ 8-дсŽƒ8}ЎЏѕИњ=eМVVŽыWІўmоз‡є~)I r<8rІ џКqBПО{хTМ.Ф{ЩuQœƒSK-яЭа_b}=‚>5іѕєљкэЦђы>Йэћъjee,Ÿ7>ЊCO(’TПVmйW—@пƒЃѕmx2Q—іŸk‚ЦнППпyЇЯu"Ђ(xїPьй7ПЂšІ%ъцІ Ы–L6{Ž7 HПпэ<Ž@(’R?Ъ._™йяe%y№{]$@’b‹…ИyЎ[ŽНЧА Ђ м< >O_ПзВт!Н>Lш“’oj]НŒШѓЂ0ЧƒжЎ 4kџљ-Ќџі zdhŠѓcы:š;z2=Нт? Ѓ'h@GOlЖЄИРЯ[BQ^,~gм€ъьщ1ыщKчёЏ.O*ؘЂм˜ ˜ЈКXОNЖ Ѓ'ŒЅ3Ч`ућЇ0ЛМ=a8й’\ёk=§П7I_ПїxЎŸ7“GЂrr о9аHVЬ‹OЯД'Ты@ЌSQі?;ŽуюыІссеѓMНјѕлŸтуЭ}цm]A€ЂФ[*ОЉ?ЉImУпF™™~Vсє6ьь š–д†fu/FП@wo8Q6нзj'Н=—ЭƒWп?‰9ёіќфd  ЅяF§вЅ'T†эўзз? RіНпЇъ"=СHђпН!щ‰u(оGzšѕ3™о/ЋћѕЫhаlм+’I]4,ъЂЖЎ Š/Ÿ$lчkЏ˜еIнЧѓеI~–iшьї,KDKЄg]—ЭЖћUŸК™нПe…XsuЪG ЯяNь6™я4рШ™6œ:з…Щc pчUS0Ў$6Ѓx2юцЮTПіюPJ§(ЃЬј{cs‚a~Џ €„pTСs8€ЇЮcіЄби]{а4|§ЖЙ№y\4У ›;bЎ(Cz§ЮБ‘$š[иЃХїP}rЊ+цŒУТŠRlўј3@“ I‚/Бp­нA”ц Д  mн‰pš&Ё­;ˆ1EЙ(ШёЂН'ˆ‚œивв„ІХђmыatQ r=hы Ѓ0зн/іžJ s№WЯО‹жž`<­ŸЮzОЊІaчсF|nё$<Аj:ё.4MJОWz‚Іх0жХЁК Qё{EЏ “В™ЩьфkЇЫ›Ўяъq“žeн!фzтѕДМЗоо_‡0Ё$s'уЮЋЇЦюёMіŸk†~`ЗПЊУ7o›ƒ[Oь;оMЈ—ЌъGйe-њ?ї4MC}sІŽ+ с…ЭGpрдyL[„ПИs!~ЕЙmРsЏ@ѕ*gš;уЯ3$Ѕ ˆklтџЉZЌgЊаbБiЬŽžж\]Ѕ3ЦРяuad~пƒPWѓQlzђЫ+ЇcdОЙ~7юКv: ix7юњЙeq9|^7nНВт‹ЯbљОw8цЪI№ћ\ЈŠ‡ѓx3>њЅыІ!ЯяЯ+cЮЄќх$щ,–у1wУ’1Wз;с„G4 xso,§ЛЏ›†м7|цN.Цwю\˜H/UёЩЩL•ЈЂтh}ŽžiGTQ1qT>9й‚АЂ@г€чОГ ыП}cП:ѕ{xu%&ŒЪC]S7žŠ-&Œ(j_8C˜ЩŒхшВюјš‘Q…~K]R…глАjq9ќ^7nYЌЗсЫєzХeb3+‡<єі\:3оžщщэwзЕг‘—у†зуТМЩХјЮX–7UzщEIъŸжЗуh}ЂŠŠђQљјфd "бXћЎџіxю;ЋRЖ‡Б-геiт^3мGoэ?“Шуl[Аhњ(фxнИѓъŠ~}шсЯЯУјв|œiъN,юŽ(j"пD]_7 Й~ќs&у/я\˜а%U їJ;>=ЃзEќ^‰Њ–e3“йЩзN?0–зXїњ}PR˜“дz§оze9|>nIдoНх}^§љy˜PšЯšЛc‹Муu™IПВ{џћ‹KŽ=№Ё(<. wЎк:їƒЃчамLШїkJЪУŽ~Ц|­єЃьђ–™џ.сN:{Тј і M‡GОИ>Œnž…+ЪGсРЉsё>МўС @“щ‰їtbJDŠїL ˆ f4 i1Шџ~a7ж\5ї\7о:Сˆ‚њ–nœhь;pgѓо:tі†pЫЂIјбW–!V№Ъ{' I^ћр з\1зЯжЎ ~§іQlої$-Ів>8…‚ЎОЂ,Б^GИ[ iР›{ъаЃjQ9~іѕиn“cѕ1?w|Ј ўЃ—уl[Ž5t`кИјДЁg[{сФ›АYOџJCњžŽ[žБzй{ь<–ЮƒOкŽ(€kшРЌ‰#Бїјy@г Х(ЊЊ%Х5ъЗ§@=ю^1 SЦŽ€ЂЈЈ§Ќ /ПѓiЂ^Œu`&3–#ёЇя†Чё…Ћ+№гoФЪѕѕџs?]R…Kе†Vu/ъ%’­Ъf's­†іlыIфћц^“іkˆЕŸXbySЅ7аў—шѕэGHšа?Ž AF_џАЌ?ГЖLSЇЏ}x pЭCю§,QŽ_жТ7ЮТCŸ›“xёћа;ŸдуЎгPЁїЫ3mxљэOљІЊ ]M2д…ё^9vОЏfe3‘йЩзN?0–зXїПя8ж\U‘ˆџѕк HР?шЋпы*cѕћRМ~­юѓэŸдуЎkЇЁЂЬP—є+ЛїЏБП<§кмУ |їK‹ ›ДЕ&šЊсЭНuИїњБХ3­IѕbGП~§дЂ?SvyЫLћЌьЎ­Ч Ъ1sb ~ђрѕ(Ьѕ&~ѓКdTЏ™ю@а€CuЭи][ 2„ю–@Z~џЕ™+яEз™ObMJ${hj” PЖhЦh<ќљJ<їЧƒиyИёЂгВ +Лrњ(<ќљљxюѕƒиyАёЂгВЫK6m|ОџхХи}ф~ў‡O.:§(s†L3љ]їЛ]Р7o_„%ГЦСhƒБЦ4тщзі ж’вж$ цсШЖMNжЏѓŠВЩnНr^~ћ(о=дoС‹K?Ъ.Ќ,б?ж_p](ЛМeEЙ>ќщ3ЁiЖюћ šІ^TњQц аяw  IˆjжmќsїзсЎыЏ@YI>ќ‚g[ЛёвЖƒ8pЊRŠД36uћћ2(ЃŒ2Ъ(sЌЬ%Kxю/oFwo/Н}$Бцьbб2gЩЬ~7 '*TШš UR!irЪД%х•Щ36§ЖKКœ2Ъ(ЃŒ2ЇЪEУзžx#.МјєЃЬYВ$KCJjb›Э‰яŸJ™ЖјSџO*шЁUe”QFe”QFY–d‰љ•lЇнgкє[cг—iмNв4Ъ(ЃŒ2Ъ(ЃŒВЌШ†&э>ња ЏХVыyPFe”QFe” R6ti#AТАљ?__ B!„K‘НћоPП`B!„\ЊXяŠ"„њ !d8PбhЊЊB–ex<Шrъ9wЪ_ !„B.ŠЂ ЕЕ555hllԘ1c№Х/~#FŒ@4ЕŒGW!„B.:Ђб(jjjF1ў|ШВŒ 6РяїЇŒGW!Ф6tEB† UUбдд„3fРхraвЄIxяНї†Ц …бжйƒPDEOo/TUC Л Й>І”G~~ў€ ‘)сHMmшьщE8Ђ@QTD#aŒШѓcтј1(ЬЯ=.uьЕ|ЉBnєw$IPU5эЛ(#УFQU44Е#"yсі@•4HШ С]‡ЖоNь>Œwз]Нnїа,с G"8на„Ю ŠБу&Ђt„ С`Сp‘H=дМw…>ркЅѓ‘уїe-oMгрrЙ ЊjжвbОФоо^@NN\.WVг7ЃЁ5Š/§§'ˆТ 5ЌФЯа KdI‚$Љн. Тџ|2Š‹‹сѕz‡\/rсЊўM!У…mWT8СЉГm(,‹h0‚`H…ЫхCЎ?>Џ‚юž(]НP]yh ёђЋ[pл Ы0bФˆЌ*ŽDАџh&N™ _DAG{ђђ уЭ…зэGooнн№љѓбŽрљ [qћЪХ;І4+љ+ŠЗлUзЂ(hjjТБcЧ IІM›†ввв!7nFЁТQјмms'k+*дЈ†юЈŠцЎ(Юv+8пpgБeЫЌZЕ eeeCЊЙА Eџ&„сФж”ŠЊj8uЖ%cбнDiё(”—Ту‘c_рTpTEWO/ўћ@A^)6жlЧ—зм Ч“eУ‘>>r“ЇЯA{kЦŽS*рrЩ‰C ЃŠŠŠ)“PпxЏОљFС+[wуkwоfnEЫхJЙ";гєššš№яuЁЛЉЙЭ ЛЛ .DIIЩ7В,C…†ёy.4uє іl­ КC Uƒ&Ы"Ш’ŒгЇO# f5џа‰уhћнџ@щъAщWП п”):ŒокƒЗДAmiвоW~>rчЯCоŠыр..ЮЊ$™lїoBnl6ЇЮУ_8 ž ІWT  ?Њ;ЭXUcЇћН2|о<,ЛВAеЃЕ"/ 6ПЕŸЋК1+Ъ=yeЇЂЋЃ sgЭ„пяƒшiгШВ ^Or&OРu+Vт­ЗЗblйDlмђюО}х uаЇъГЂ(hnnЦя рHh,Тye(ыlУюнЛ!I,X0,ЦЯ%Ё­[E{@ƒЧ-!_’U4Dс†ь‘’c~MMг iZжжкДОє2ђežБcqющЇс--…миˆМёу‘7Њющг!ЛнPNеЁѕ­A4 EЗнџŒYб$“ЭўM!‚ДЎЈ`(ŒЎА0ŒiхS—›ƒP№И€pXУЯ~еˆh4Œя§щDфњ]ШѓЫX4w:::Лао|g:B8wюF=(EЛ{ш IpїєтŠЉ№љ|PUР-<ƒѕЯEhМЎЈ(Csћrœќє#јМyЈo<‡qeƒгCбvЊ^QДДДр…]ј Ћ wЭ“шщЦяBU˜жN2nFŽ9$/MгрvЛрѕЪШёК‘ы‰ар’%DdnШdРх’“ ›l:~…ГgТ[Z я'ћ0ЂЂўŠЩˆv Кhm…ЄIpхјр9љхз"ко‰– сЯЏAС 7dM#[§›B.iЯБ9звUr#з›ƒ’’D Њс(Œhјь\Юœэ†$.9f\ŒЬsaіЌ™€” _A1>ўфр ­?лŒ#K‘чѓaDa!4 F€ŽЄфЙ~7fT”Уэ‚‚BœЌoДvVdЇC?tшх]эј02пўв•№O\Ѕ`2Њ*‚8˜џ9ДЛ&`їюниП?кллЁ(Ъ u7Уу‘‘уrМ2||n>Oќк#Уы‘ Й†юИЃи †’ЋЎ‚Ы­ЁчфI„кZ D5И§Йpхх@г$(]ш9~ЊЊbєŠkкД НŸь2Н.жЎ];ьyfЃBШ…$­+ЊНЋAЭ‡’)E% Ч фХпsбЈI ZЊ Ш.qЃЂЌЄ%ЅcаоDУЙцAЛ0ЮЗї Ї(гЫ'B–З№{cыjB‘иП`№КŸ'ІƒпцљP^>MgkбЃq ŠЂ ­­ Пнн†эYxxѕd4Д„Œ(pŽ…ŒрІѕx§а­Xа§ькЕ ’$ЁВВEEEYŸЙqЩ.И]2< > h\Š —+цŠвdРэКІjPzCœ:йы…'ПЁŽє6зCЁ†Ђ№€Пd4мљљˆvЕC їЂdљR4§ђ9Шпy О‰Sц!љљљЈЈЈР=їмƒ1cЦ YЙє|зЏ_?рјƒ‰K!—+i ›Žž4P4Ђ.…5<ёыѓшъ" ЃЗЗ‘pпћч]PЃaфx5ќMѕЕШёЙ1ЊЄэ-Ї—ЁP(эiЉPT ]]н(ШЯ…Kdјгз!" ХџLњћЭ_| .YТфIQz?к‚счŸ EA{{;~ЗЋ›лgсс/LЧйЖ Bс(Ђš†ˆЂР=b,ЁVЮ8-‡nУтоWЦЭМyѓВnмШ.96KŸЉsEЙ.Y†ъ– Ѕ9 i0hŠ‚оњЯтКxбyђm№ŒќеЋ‘;{6zіяGЧлoУsц gЬ@$€фэFQхB4џr=Ц§р‡1K6К‘аннЭ›7уПјўњЏџzШЪE!фТvMo E<. n€ІсаёДДїJ^wбHv#алƒŽ  ?7'цђ’‘вЈ‰F‚hэBl–Щч,KpЩžAЏаз™dšŽnдlин„?ЖЭРŸн1g[ƒ†#1Ѓ&Њ!ЊЊP ЎТq„\5Н;пŽeЁxџ§ї!IцЮ‹ЂЂЂД'/І+ƒŽЫ-Уы–сwЩ№y]€ЊТ%kpЩ2<ЁШ€KŽ Цu6YqYЈ*4’Ыoi)|ЧЃ@ИЙ{і рњыQxу(\Е чўst:ŽМЩSjnB^љИZк<ў)|SЇл*s^^nЙхМёЦ‰ВМікkxчwалл‹… то{я…ЯлAwј№aќіЗПEcc# qћэЗукkЏMЄiїСа7[єьГЯ&щгггƒП§лПХпџ§п#777Iўƒќ?ўёёшЃ&тЅЪыћпџ>Оѕ­oaмИq€;wтъЋЏ444рЉЇžТу?nЋ9кdfiЅ IDATП !фb!эŒЂ3мP(з reќЌz"TUEw ‚Пљз=PХSпП~ŸŒHШЫё DCШЭЩAWЛ2шУњК:;–rайй†бЅ%$рwЧvЦhˆЙЄ4-ОSKhэTс`9Й9Шq]W”ЊЊшььФІšАсlЊзЬФЙжzУ(ЊлЄЈˆ*EEX‘ ŒE(Ј`сДvМW{Ў oФЎ]Л Ы2цЬ™ƒ#Fddмt…%<ё– =н=@8(aк;б-‚K–рѓКуR К$Иф˜qЃТ…KƒтSїЕxrГ —П ’KF^Ž~ŠвЂмЗ­gтDhŠ}k[ ОЄипВлrЇ#I§o ё'?ЗН .Ÿ‘ž.јЦŽEши‰Д†NOOо|ѓML˜0Аyѓf9r=іrssёт‹/т•W^Снwп xюЙчpп}їЁВВxѕеW†MЊИЯ>ћ,|№С~N^^ЎМђJlпОЗоzkBО}ћv,[Ж,ЩиI—зœ9spєшQŒ7mmmxёХБhб"ј§~=zsчЮЕU7„твО•`TИаxі|РуцOЭСТщyX0Нj4 5ЦТ+JБЌВ g—Ту– i@oOђђќ№ЛЅФx Œ)ЗлSЇыр’cЛЁ\rќŸ›™‘уы{фxСєыsgЯРяѓТуК0Ѓа`0ˆЭŸДуЗgІрЁ5sqЎ#ЈŒЪ“с“5єF„"*BНŠŠE0…4bТЎ|Ь™цСЛИ ]кH8puuu…BщяQБrRŽvЋn[ŒUЗ-Ся[‰ян7#}ˆЕ‘ЧП;Оpи+УыбрѓњБєЦх№V^ŽhѓkиuВхъ‡јьфєєє xt_|яНИНh;ѕYьп‰гh=q ­ЧOЁЋ+€т{яOŽрѕ"џšknoЭvЕ#gф„NœH›зƒ>ˆ|пўіЗБcЧ|ѓ›п3$юЛя>”––"77wнuіьй“ˆчrЙаооŽЮЮNуЋ_§jтЗtqгqгM7с­ЗоJœђЋЊ*о~ћmм|ѓЭ§ТІЪkюмЙ8zє(`зЎ]№x<јрƒGŽСœ9slыD!—:i]QS'ЧюујфШ1,™?—ŒЈ3(Т]нˆF‚†Ђ№zМш ФлєЛ EC˜8ОlаSлг&ХЉŽсаёгXКh.<юОCџдјoU2Њл14œЎ;ЏЯƒ‰ЃђГ6Хn7Mг№ўiрПУŸп5P"˜P(#uaR‘ŒсЮ„ThšŠˆwGi2КŽР;ЊxQ=˜1гƒЗŽVсkЅ' … …рѓљ2r-Јтsјїп§Щ<œщˆРЅ)E5єD$ј}2T%ЖО&ЂIˆ*FN˜ 2”Ў0\rŸдіb•o "ЭQxІ-OО8zѕNŠбп§nкњёL™ŒžЎ.`м8DЛЛс-№ОOвцџЬ3Я@г4477у—Пќ%NŸ>ттbДДДр?јARXI’щUWWcгІMиИq#ђђђ№х/91’.Ў™ў"cЦŒСИqу№с‡bЩ’%ј№У1uъTŒ92OџЊМfЮœ‰^x!жзо_ћкз№кkЏaХŠ8qтОњеЏfм>tEB.UвњfޘŽ}Е›QпьЦюНpЭ’J1їO^Žџі7+ DUфхИŠ€“'ЂА0ЧїŒEз,ДЂcF• з]‹ž0АsїGИщњх‰skїXh ХнPњія]яя€фB=­˜Бl№zdJwDЦлu…˜Qиƒ­Џ}˜pˆсёoЬG0Њ!Q ЂЯЅТ…P8ˆ}[оЧ, FŒšwЮ,›Rˆ:y1nЏP‘——“ёПп›ц!8g6HЈ^3Эšz"PT 9ЂВ —,С­ЈC‚&Ышn:ЏвŽEpЕіф#€9sЎByyљ gт2EvЛ!Љ4-цVT{ƒ1w– $IТЈQЃАvэZќф'?СW\’’<њшЃ())1S^^Žъъjhš†р?џѓ?ёџј6ЎіЙщІ›АqуF,YВ[ЖlС}їнg.U^>ŸЃFТ‡~Џз‹yѓцaгІMиЗoF5ьmD!’ДЎ(I’А|С h‘Жь:ˆ>>“№{%\ЗЈ 7,—;vˆІ*8\{Q%ˆцsѕ˜4nŠГt ўЊхѓшjУ“чёіЛЛ‡cЫ1тЫ2$)6{ŒЊІснwЗЃў\=К:;БlодЌш)^ ?ЌŠрПшХ?м“‹ИЏOU—#Чя†Ђj…уюЇ„;*fшD ВлiиŽGnRёсю-ФџЗ&cJ ДЎE–eтѓKGcMй <ћкŒ)іЁРя…п-ЧNŽЛЁ|^ђrНаКсSкБї˜‚хб? ФзƒeЫ–aіьйЏѓI…ш…fуУ‹Н‡CіzЁУ€DКЛрMГнлHqq1ІM›†нЛwуњыЏЧ§зЁББбhѕѕѕIыbž}іY466&Ю•tqѓѓѓбии˜R—йГg# т­Зо‚ЯчCyyЙiИtyЭ™3/Пќ2–-[XЖl^|ёEЎЏ!„\vињцЄђr44žУБ– ^нў1NжŸУU gctI1\‚a Ћ;„ѓЭm8uІš,уј‰S<gЯŸУсУŘ5kц •-,ШУЊ%ГАуу“иЂЧыоРŠ%s1iтxИн^( аоФЩгgАыЃ=k2zƒAфy%4ЖGрѓtТяѓ jлy6vhš%Њ"UTT„т_жN,"–%„еиw1ŽўRLоКqsЧbб]G№ЬЋ.<ќ…™hjBс(мВ†ˆт‚ъ•бyОоp ољTУв№&ŒtЗaщвх˜3g ћЙ]JДОZ šь‚ЗЂТrыЖŽ А{7ђF—@ ‡!{НˆvwУПlyZ=ŒПЏXБПџ§яё§я’$спџ§пбммŒ1cЦр _јB"ќќљѓБnн:ДЖЖЂЌЌ _џњзПнpУ )уоzы­јйЯ~†@ €ЇŸ~кRЗoМЯ?џ<yф‘~zкЭkіьйиАa/^ MгАxёbМќђЫ˜={vFmФ]Q„Kiљ§?дfЎМпН:§Gя>кћ1žj†Пp4ђѓ|[Z„œœH’ 24Y†пяУЩУ{q№Р!ŒrJ|!l~}nКщ&мЅ#№›ZкБЏЖЎмиЖg-D ЇЊ&!Њjd7 Щїv |tо|яnЙ~)ЖНё J‹ђёРРыѕ(я@ €qуЦЁНН}Рњkš†›ŸъТ_~y67єрШйpмАQе4DсA№м4œюТўпсо{яХфЩ“Гz"ЌxPрлйxxѕt4wФ T$7:Юз!м^зѓЛ6ЁX:‡eЫ–e§,ЕЅJCфŽv„{ЦŽ…оМўЦEгSџWУgШXŽрй3Ш™0Ђшћп‡gьиЌшsЙ“Ўг­E.z{{ёєгOcцЬ™№љ|№љ|иБcќqtttє џЃЗйіЂН`ъ\Йp>&MlЦю=ЃЇХ…†HљE№ћНˆ„{блб‚ho;fMŸŠљ3nE[W/ЮœњЭЭMиВe dХИUR„›Џ)ТЉ3gqЖЕ mС"Њ EUЁD#()tЃЌ$sІЯx}~Œ*ЪAОпиI2PуF–хЌŒfUATQ‰hET@SU5D ЂЉ@TКQГЫхТШ‘#ё'K4(Лсй7\й|јс‡XИp!>ћьГA7В,#M?Л•ŽHDEoш Чжз1WTDQЁ@B8ЂASвЏ9 .— ХХХИkЉхƒјчпЖрЎy2\=]Ј9сЧьЎWQЄœС’ЅK‡цдcЗсюn а ЕЛZw'|Вj(„ряўбњFh^|(˜:ю‚|t? Iж Л ае舑<’5}Hіњ7!„\(l­Б1#??љљљ˜2yrПпєѕ UUЗ`У† ˜1cnНѕVМўњыиМy3$IТŠ+­М]FމВВ2œ:u wмq6nм˜0nюПџўŒ›СžЂЌiЂQсАŠоpˆ bFMTб…[c#6C5Š–eХХХИgБ†ШюsxэpТJ*šџ€ЁXМt)цЮ‹‘#Gf}4/љ|JJб{ь<š%BЈНю3˜—N,ѓКt +ŠB!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ŽС-ўQSГgX2Ў|˜ѓb^ЮШЫ‰eb^ЬыrЬk8H2lЊЊ y†55{†%ц•=œX.ц•јЬ`^f8Б\ЬывЎ(B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„8ЗјGMЭžaЩtИђa^Ь‹y9#/'–‰y1ЏЫ1Џс ЩАЉЊZ4фждь–|˜WіpbɘWvр3ƒy™сФr1ЏKКЂ!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тмт55{†%гсЪ‡y1/цхŒМœX&цХМ.ЧМ†ƒ$УІЊjбgXSГgXђa^йУ‰хb^йЯ цe†ЫХМ.шŠ"„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆcp‹xНЫ/”ф"†§‚XСОAЬ`П ’$У&~Ш3ЌЉйƒЊЊECžѓЪ^яђaщ€sыаЉy Wпpj§95/>3œзЅ`ДвE!„Ч@У†B!ށ† !„B B!„86„Bq 4l!„тhиB!Ф1аА!„Bˆc aC!„Ч@У†B!ށ† !„Bƒ;}’ŠKсЛ:ыж­Pœѕыї 6ц\ŒyUWWБ&ц зїv!ФIpЦfxНЫd,’Žpј}xНЫсѕ.VcB.u8c3@є™;ЃyнјБ Лuы&ЌZЕ:eќYГЪћ…YЗn]кќafЭ*Gmm]Z/vФr ѕЕŽБ.sзЌA`УKэДтL`uu5ЊЋ‡fgЧŽц”}/—вŒ%>Мох8thІMѓ_hUШegl€ёaОnн:œ9Гыж­KќлКuSт:іbŠНрФpzмUЋV'…‡пOќЎПЬV­Zm*гуъзЦkmmжЎMўD§ЌYхОгЪжЕШwTš†Љ­­Kш1ыђђОtєt­ЎuЊЋЋћЕаПюd#dгІО>qша61cV #і‰­[7%ЩѕєВiDЌ_П^яђA5„XБuы&ЬžН’3Žф‚@У&CФ—ЫКuыайљ`уЦ§xр…‰пV­Z0htУG'О0ѕЗјт]П~OFз,УˆXХMѕrПчžІђъjЗ<:7юоbНšщ]Wg]gщtхтЌŒU\=Џкк:œ=л XБЂ;v4'Œ˜YГЪсЫЪђФ^zк^яђЌ7^яђŒf’DЃ+г0ƒkG7+DбŽмnм–ЧƒqmЇŠkѕлPхЇЬњрŠ3{d8Ё+*є55ед`г#kQ[[‡чŸп›xi^•ЋпєwмQ‰їcуЦ§‰пжЏп“0x6nмŸpEщ.ЇккКФ,Nmm]’KФ(Ÿ5ЋSЙUZйК`+Œ•оКA” НEвЩ­кMOSŸyлБЃ@ЬРбЏЎЎN/[ЗnТŠЅ‰ДВѕr0›mыѓтљчї&]‹F1Моэ^лПŸ0Ьѕ:уWWW›о7bZњпbоЋV­6•g7UytНu§вщšЎ<ƒ‰kЌWГђшˆѕm–Ўnш­XQš(ŸžіЌYх C]GO[яoыж­Kч„ 5œБЩъъj“YЃЛLьЯ?П<Аеее(,М*Љ_wvО‡ъъъ~§&їЅи&ЉТ‹3^ЉкTЧNКfЦhЖуІв[ŸЫД<Љт Б–'оЋV­NєW=OQ'qvXt­ы\Ј…фђ„†MФбЦЌYхlи€еOЎOz№ыћѕыї$НxѕY џУШЬЅЁчaŒ[XxUbф$ЪŸ~oт!ѓвKћ’FSЙkжєKSŸ…1ІЃыge4 дЕ$К“ь\‹и ŸЪ@IхJЅk:WдUU(КћЇ‰КŸ0aEЂ}Ь\…тЗЖЖЎпW|ЬšUŽЕk%^--; |БЎОІFяgњ]ьzП),М*i­–FGЏїcБюEЙ•K0]\§oн•!†гgН€ў†Ѓ1]}6sэкE‰пŒђLуІ*ўЗиЎЂЉ#зbІх4Ц5г)U]”—УД<їмГ ЯЊŽ9аЁН8“ЉпzЧš.)2а•њM)КCl&%6Кэ ›n€b5‚бхV‹:г-іге^lиxЩы +їŽш^ЏэФЯж5оe oхŠЌN:fЛœrзЌIjЋібгI5r++ЫЧŽЭ–ЎЏLа]№XMM’QЃП$ŒѓчŸпkщОЬw™­чвлЁoз_пю>бРГŠЋыn,ЧКuы’єKЅ“hЄŠщW3ЌтІ+X1Ѓ~uuшW+§RеЗК0ђ:т '“:€•+g'ЙСзЎ]„;š“ТЌ]ЛЈŸ1Г~§ЫЭ„dЮи €3gv$F7OTUЁь+?ГwИЇdЋЋЋиА!1sciZэ2NGЦ§”i\QГ…ПЕЕц‹š3б[tEЅгUЌЫ’i\}‘ётХ%‰БШљѓQг T&ЎзЏпгoіPŸezЌІ&Щ…Њ/‚7Ю.gяє™йЌЃ^NЃмиІтЕU\;;їєјЉt2„™ш4ИЂоткЃЎщмCщтŠГйЌ ГпЬв]БЂ4бGdЗЊ>ѓЗjеjгКЅШP#-Пџ‡кЬ•їт?œ9, Лjjі ЊjxЌѕlцeм Ѕ^єХС—ТЭЊ7OTUЅсщи —­k їЫ`гЩІ~ЉfЩвe3PЖnн„ВВќЄ—‡Ј‡nˆ˜!.ўеЖH,‚ЂЊ wмQ‰ VdKuKГ>ШlЖ,yлбi0q­HUž––()Йz@щкСJяtчiЅУ,ОИ№[,oЖо5—ъћфRЮЫы]Ž9џЌeœЯСoK€cЧŽйŽглл‹ЇŸ~3gЮ„ЯчƒЯчУŽ;№јуЃЃЃЃ_јНЅрШЖщŠ(ЉŒуŽ(рТ ЦыеOЎЧш3nЌм0z9эКkЬђˆ;IЯWЌkнрБ›NІyЇК6л•#жЅеn•TзїмГ/НД@Ÿ1'Nлы/}дЎoзёћ%˜agš_/ЯUUxЌІедЄ Ÿ-ГОbАЋМэш4˜ИVЄ*ЯP5€Еоƒ=гHŒЏїлљѓ‹˜Я 2Tа5&LXбo;%а7+žYcœvOхБуЦŒЋчГчО‹ЧjjR†1ъšюlc<б80[ШkumЌCq]@&gэЄ*SmmВ+JŒ/^лЉcЋМЌєгuз6шЦœИ˜XпuВjеjЌZЕГgЏD*tЗSyyЪ`§є{ЂЊ ›Y›>!6З†ќqыж†\ŽаeГQŽnаш‹‡EљХшъ1ЙIс–HК@п а73!ЪЌЎЫЫcЛ•Œ\Ln)уЕxІQ6tеGђњЌŠО шлщєMх‹ѕXїyЃ+UЬлlЦQдЫЊНDЃ^”‹3•vк}А}ьB]DoБnФўn•‡8Гg6Ы7Иб;]|+—­ИNˆЎ(gфu)ИЂ’ ›M›јAG+VЏЖ>Є HžZжітƒKМРХgм ŒСzzƒIg0Ў7г1 IDATРк-8дЦЁ•NVu,6@пnГя„щщиAьПтСqzZbџеП§ђBЌдлОо:Ц>XЛЗјЎЙtYНКњв2l8ccй‰­т)­f/``#9ЋXІ#aЛзEwџДпЫй.гбЂUyэж‡ˆў›едŽбbќлjДlЇŽuЁзŸUeђВа_‡mKr?fZнЋvfltФйЋХёC§ТДгЧЌкjЈtВsщН(†ПzІЏ[…гџovBЕ~RБбpчŒЭЅ›зЅ0c#gЌIШІŸЬjD!иНЌ†Гsxм`Џ7=Вед`ѕ“ыР4œqMHКkЋђжжк[зcLgэкEI:ˆзbНѓДZ”щ}ЉъBЧЊŽRЕ{m­љЉЫГgЏL|(s0пѓ1Уь@IЃQ“ъP:3ЙеїХЬккNГjЋty Хѕ@яEГ%эд“и7Ќж‚eЂї`њКY8Г6њњюFеЗŠ2аАЕЕu§Оо-’ю…`ірвџЮФ ЪцuћЫпKь’ЩVКњпЦ‡АеCT|БgГФQ_:#ЦъA>TѕР–NЦEЧV/=‰3HФѕ5й@4hєЯ'15Vэ%žЃ’ЉœЭКЯІ‘?œzлЉ'БoXіУЁЗq€ cvя}ЛјtƒЦЮ‡G Щ4lHmmпсeњёЗT/„t#9;ЛŸВЕsЪЈ“hмdcd ˜?„ЮTшгхVГVrГнHњпVЛЂ2yШєыч@z#H>фL”qІБКККп'5tŒ}8›aІ3vPу?гˆVп9nН3бЩюСjpІ3{іЪЄoJ2œpMФ5Ц54V ;ХBЊ№йТь‹УНжoЫFZЉ0ЎЅЈЊZ„ѓчЃIОIGЕ_ИЦМКОХъ:[э%К”Ќж‰ zuЬІ№ГЦЦj7ŸŽй1у ŽЎ—йЎЈlэЦHЛv? VoБoX­ƒБГцmЈѕNuŸнЇЦu\\csщцХ56ЅЖЖ.iDmu“ZЭ0dб ѓMwj"SЗ”XfГk+Фr*VЌ(M„буиЙь(?›˜Эд‰љ™…з]žйZk#КЂD—ЊŽY]gp{Ў(ёzЈg'Œz\lю'Лz[}ьuИн}щfqRн'Ђ1n\№MШPCУfˆSЌњЧтDФ–й AЧјЂПФ ƒu?Џѕ‡f&nЉСIЦАЉŒ˜tх4‹cuиаз^ƒm_b~"+WЮN Џвйрљчїі[lLлЌ/ Ц-•щС‡V.*;§0›ЦGЖнOУЅwЖнOњю'ГtЬŒr}эauu5Мох–†;!C]Q6бЇQ­п3лъ(ОЌФ‚й”эЌYБ3Q6$ЙФИ."]ЎYXt d{Њ9Зд` ННЬ\QFŒгэƒ™‚ONl/§лPbлФ*nKЫNSЗŒˆшŠуgsЛЗоOвccU/bŸOw@_ЖћЂнkЃN›ћ)•о™n%NwŸнћ$н!tE]Кyбх@tї“ИееlёœеhЬј23КЈЬОn,ŽкѕY1ŽЮ`І—­FдЂ[jѕ“ыmMC'ЦйQfїZџ;“ВGЊЉv?щн2"Ц­шцдћDЖаGвV ;гЭ шeДrEЅк~?\зF.6їS*Н3нJžMw_Ію'ЋОžэY]B2†ЭЗyWWWїћ2ВйУ0ПЩaЌтзђˆщXMл›Mлy8šm1}ЂЊ OTUaѕ“ы‡ѕЁ š Ф|Э\$™ОШkcO$АaCТeЈчїDUŠюўiRК@cEcVc~Ђ›г,САnнКD_ВjУtaІляэИ–ььЬ$Ў™NvЎ‡Т§dGяС§p!мOV§S\`юѕ.чЮ(2ЌаАњ,ЎГIЗјRЧl]К—>КNЕe\ЧюСuН6{‰gћХ;Фй„lђ‡“‰Єk/}ЦХ,ŽxmЬOgеЊе–:–ъъjгmшЉt3Лж_ŽVѕiч<Ћ0йŠЋыdЧ(I—–#2]ьk7ощŒ;:й™ЁЪt&NGПєчc6g I ›`МЉ­_к™йахтKP oœЉЦ‡EІгЫvFХЂЫM—ы37bЂq“‰+*н(_ФјQ?н€ lиИ ^3§R]ыЌ[З.сђЌЎЎЮjы'g[kз  ЄlЮCq и3J.]эъ}!w?YЭD‰шƒНTЯ>B† 6D|Б_`щD"Љ\Qf35’жйфЎY“бtБМ8КзQˆrЃ[jЈ№ћ%Kw”Žq”+žT м-e\;ЅК#0Йkж$}ўРj–ХЮ‹D/“ўrа ‘lQ[[—аеьфl3нЬњ•й7Ѕь‘vvH‰rЋУГЙыhИv?й+К%эТ§d6Ћi<~тb™е%—4lР`_ŠЬšлM ЮЬšеч~J7АaŠюўiB6œ#PЃ[ъBaЌН;Z6Кє6Щ]ГІ_{цыЂDьŒМЭЪ”ЭйT/›Ьlш/ЭLЛкq?‰пŠВзЎС*–c(мOйr]щК^Ќю'у}#Юde&Ф 6@4hЌІZS”ŒсŒrб§dЅG "vІ—3НNїЁC}цFŸA.ЮŸ@кХ—ƒ)ПўЗˆN?шЮhXagфm o5+˜ tWT&.ГT}уRqK]ЬюЇTz_,ю'ёŒ%Ћчš>#(КS .hи }Эƒ8ТБ3r4Ђ? ЬмOV Эжѕd2rДsmчtY}Чдc55XП~OFџŠО`кЮтЫСКЅDжЏяћКxа+cФЮШ[?Tпкг^ЗnЅQ•Ю aж725(эИ–DW”€щ\@щТ fMZ&ЛŸR…Oх–jїSК№лЖJ{Џшrб:Ц9!fаАйX|Љ#2,нOЦыMЌ5=ЉxИG”тCW\ћ“MŒыlЬfkвr;ZGЇVF­ёZќ;еШ[Ч8+˜Ъ(ЮЃБdU†ЮldbPкq-‰Ў(ЋЕ`v\/FУw0oІ_нЖ2Рэ|Сш–jїг`f†DDЙеГ’Ё€†ЭЈ­­KкцmeмX Ьаг0эšтњ'ЊЊњ-"jW”јаMeмXНш­fЛь`6[cUQп”пјРNЗXZЏ3Г-ЎvмЦ№щњMІˆ‹›­ЪbзmaЖcЮhд ЗЁmчкю‚т‹экю‚тtхNѕ|БоЮЎ(qWчPЙR Б‚†ЭI5ŠN7‚1~СlДk4$ЌђЭ–ћЩŽ+ЪЎq“ъЁdіМѓчЃ‰А™Œ:­ъеюVZc‹/F§:•A'bW_н]”э%еееiћЄ]=­vЬeУ-•щЮ);qгѕti ЦЕfЧ§d%ЗКїSеMЖнOvg“tМохIюЮlіaBвAУfЇWs^‰qїќb0{јˆЛЈ ћдЮCW|бЇzыиѕыї ЮbRтќљ(ž~oвA„™ъmЌзLGі"Ђ!ffшГ5vŒуЕŽИЭ;лгјЦO‚ѕЬfŸЩФ Дrщdzp_І‡Tкеc0Ў5;ю'+y*Н/ї“Y24Ц!C ?‚iё#‚:КAsЧ•IŸU0ћ0 x-ОЄТсїrёcŠb§$јrжЌи‡3u#"АaCкМ­Ў­>МgѕqM1ŒQ?ё!І7Љ>ЂЉЃы0м;Ќ†šР† аяуІтЧ ѕњ?L)Ъuєп‡ђ#˜ыж­Гѕ!FЋ`š•Ы8ƒ яG­Ъ ъ:м:eЊЗи&тѕ@ЪmоЌэRЩэ<зŒ}[џ=\Њя“K9ЏKс#˜4llbіb™|йъKред`г#k“^~Ц‚~LЙОЦFџкєКuыcˆЦƒyY@yyпЂдtсэЅ?Јэ%ОшЭŒ†T_}зЏХЏy›ЩucиЄK{ЈОoœСьтЕƒk0_OЅGЖ vвџПьНaŒ]GvпyšR(šЦRhэ‚гHŒеЁН‘P`г˜аЄР ‚‹фІзуфљƒТ ИmіCl8Д? „AgiЧБAФ b Ђm'€цf3c@i4ЭГ@як=V!Ј1G”9\šdяЮЙ<їМ:UЇъж}н§јџынОїVнКuЋNSчTзrЇ&]ѓKѕkŒlKžнщsйЉуЩNЮ ‚M€эќТb№Р Ї”А"ЯсДHRrрkиCъж[Џ;аP9JgŽ%Ўд.•^OD#ЧК7!-Т™3GщТ…З[uœc’B' )-LHˆт6$яхМ]/ o.7mOšVk 7–r;ЅЗK9j–;єїкхэ3Ѕ„`Гsѓк ‚ЭЎьв=сш5Усhш}>[4[ ŒюЌЌа•зZ]юXYхНRюењZэХСё_<љщz’Јѕ<ž–ЗпW 51BюіВsзkА<я…сvv§њz/›Ъ<ЅP#ЫЉЯгiЫc.Vїує–Ъ]јЛ]МЅЌo4ѕНЦъ_ЦŠяYЬl—№qоIЎо`œ@А)@Кy/..Жжз…Ако-1ЌNS—#wссЅKяš\шк 71 ‰Оў•Wž7ŸЧГ 3$TX3лxЋ…ЁХБїBDM8{Ѕ|П§ЇоYз•*›Чc.UїВЮ=‡ЧЃ($tч.ќЭё–ђ”5їкP9rуд„ъŸЈ (vОчЛ‰}Oж= Œ6ШŽ]ЦГaR33“g5|OЙA!ЯиѕqЙсЂЄцl4ещЪЮsOў-57Vi]Я•ZГkўЊ?.Gш}БWZш„оWjVЌЫЁїйЉ)м ‡@s~~>ЉqдeЈ‘жЂќ`xж9ЕЪЊѓ№JžНŸњ№F Н/Ц{~—МCШs Œ“ж›еUHд і§Сђ`Ч Tciy9{–ЧcщаТOЯЕКrЃ<ЯГS^ыyNОяЁЯ'"Y0Bо‹яGDцѓXЯf=Oьz+Эяkqq‘VW—hcƒšХнžwJЧ<•фямoUЖпН'OŽЌuђ,~зЯ/Эlžњ Е­С)Љ3™Ю}‡žtз2х–лjЏžoЫSБ>сјёУtхЪ{ЎwЇыіЉћЬ.эlЗ§,v’у.[:Аi/›œP—Э+мxЮЫuѕцЭтЙЕЕжЂgяѕƒС1Z_П™§<]ыCП/щ~/г%хрї9NЏ(™/Q\8юZЧЁДжрЕtЫCЊЖWO,­ѓѓxjy\Їћ.wпп€DїEБ6ŒХУ;7/,žPRzеЗЙvња9šœ{†Ъ”Z7SЂ:ЗvрfѕќљљyкъЌћrYф3ч”)Ƙ2їљфЕ2ћNc!ѓk"w\ŽэwfЕЗ’:ŠЅЅPУЫн‹Љv™tZчч шYЃвЕ|žEјžѓЛ|Dэ5ilВэГ ‚MzƒBэбТЧ-K``J6єуђфкўu™.^|'лћ)еЙъЁќќќ<-МЙм:.гБNx}§цШѓЄ<вb‹)НЯ' uђЙ Еe 8ЮC бЕˆ­ђ”_–г9^G!Ў‹ЗT—МЗв[Њдk+ж‡фžпѕ}кk4д?а'l б…Фаsf>9кэ\2ув‚HвЪ/ф-ХТЭЙЕЕЄъ„gg_0gзжћёЮЮcyїЁ JkЛРyiЭ у-ЇЧ+*ЧkMjpdž!эZn[Ќ••У# „4Ё]МЖЌїRkarN™BHЏбнЛ_iпє ›јƒ HDeГK›ЈeN ЅНЎ%мtэ sTфђ7knJ:a]ZЋ’S79ЯЪЯћ~­М?ќ№Ы­Qk 2ОŽєШ“ш2{M™]г!сЦвЎеЮл›жх№(лйќдѕ§…У#H­ ”€>€`S€о аcŠJu|rп9 ђиђхNК]\Lѕя’вЪЯ+XQа,х5hГQxPєдM*o Л{Ož4пoЮь7ЄеЊ‰жЖHBeN™2­БsЭ-1ЭMn[мŽf)Y–&j+ЬOЉї›њЌIмМСVСІсpЃ™ш 2CEюЬЧлЪu]f~БŽ,ЇƒДђѓ V\l–Jэъ„s„ЕмйЙЮo086ВNЅk~D#здд0Љ]УKЪl-№Э5ЗHЁf08–нžЖЋY*T–&jЋЬOЅп@ЈЪЩVцTb@А)@ќЉ}%оOЉYqЩM]6=лГ:ВAЩЃ"Эdхп8€ 7Быcя)T&9[NEГх­ыЩЪ/G‹ADMp?ЙІУсF+x %мtѕфък~К,(WšШЇ Ќ]7ЅчЫєёу‡нч‡ђ'"sВРИ€`S€ўРCgFЅеП ЇcГтвšЁВХ:2ч‹•wNgђbДpc•W—=Ж XЮ–=бlCyЫу|ž,ЋUџБїЈЫЊ=˜jЁg‰е>SэŠЈLхЁ589їн.f)Яdc+ЬOWЎМзICE4Љ›ЈН(]їaŒ6…HF8]fœЎiз—щœu?D>Я6УsО|~§лbeЗw[{ш9Jђ•ЕцZ}Oн~ЛжQЉљЩJk ŽїО[m–Ъ З›љЩЋЁВdНыlР8`S€'@_ГQЌ/НПœ…чЈВНчyД2оВZ& ЏY*Е x8ДnІМгєћаƒJЮНЌsˆF_жджhЏ(kЏЈqьŽэЙяєєЈ''­єЛоwЋЭOЉї+г–`.MžXgЦ›<њJЬFLШUsVœЋЪіžзeІ)Ÿ?fвТЭ™3G]eзf)kсf,ŠЌЕaЅЮ;єжLн2GъХ—ЁЃ}Oщ‘G”6бхh0R‹i=ї э)ЕецЇд яиBѕdе‡%(чдeЎљ)Ѕ ™ЂˆFП-+ €>`S€ЖЫ‰Ј?STщЌ8Чќ4ЎйhъљuG)ѓ–S.Мэ.ЛЌз’ђщѕ$КМжsфжбЈ№ЁыЃЫ{NRѓ}ж^LЫпРv0?ЅЬ ^Mз“U– М]4T>hkР8`S€Ч]6w‘ зU2+–лtQeч^:+™Ÿ,—уqЭF=iO]ыВKЭW$ђ™ЅЌ:cМяб›–ФBвялЗ+јя+_y'x\"яY#@ŸїЙjпWkpˆЖЮќ{nРf]ПнЬOђѕ2Иdь<њ‚M!вr—­Ѕ&*›чz?•ЮFS>БДЅ y…+љЗїПxЎŠY*ЇЮBЯсyяЯЋа=kСїLшЫ-Њ§”^лz`;˜ЅКЎ‡Ы1zыЌK:ѕ~ˆ(Јё•шр’њ O и НU,•Еpшк.Гтхх:МbљyіВВвZ’smЈ^KЬRЁ ~ž:“hѓAЈž}—Є)ŠяЩfЃк‹/c&‚TЛЭ}ЯКЭф^Ÿкz@kp8Я­0?Ѕк›чњмѓkЇs3†„›™™vpIФБу‚M!КУ §-wіЇЏхџKfХЅТŠN[‘‡=л tM[їЭ„YЈ№ьЮuBджyh"ћ]—ж #НIj/ОфМњаг.єйfД‡hыЬOЉі–j3оѓЗCкГю к0n икУ'WЕkЅЛЬŠНƒMjAБy8Ен@Љ—…\JhоzыЕf‡№”yƒЏЏпt{ђФђ–цЄ.Њ~щMRлЅє…юЏЫYj~ЊбfМЛ`г,UкжcГ‚5–ф—ˆЏє§†жЩr[бйш“ЉWц—7_:ўгєП№нЛїео3\[ЛJѓѓu;ъqф%w№О|yЕŒgfІGvђGЬЌ7}nmЮЯЯЗюхЙŽ;u}<іЗ>в9чхœп%яskkДzvрОžhtіl/п—>oсЭe:??Ÿ§RPŽЕ3ы[ЕкМlПЁіЫw;Д™œДжрQЕt_ЯЊ‹qМ‹Ўпn(OŒXШaj5;u<йЩyэо§*§ш6Гѓљц/MбЕkзмз|я{пЃ/}щKєвK/б3ЯЯ;№zЃ„žAяхдщцЭ^W’ЁЄ–6#єЬђ]•дЉжрpž5„’Zšžм85]Ы‘+tъ~ФS>ЉБ†Іll аѕщг/7ƒkmtP5oчЮщмYVj–щ=OЇЛ„в—ЯЫл*Ÿ<^В@SчЇЭRБœ… -мШХСБчѓдЙефЕ},ОфМd@yџЎкŒмэ4ЖЛYЊ/MOюљ[i–ђФЋ’№тї˜“}СІљсKЕы•3nCЮ;ЫђЬ2CљІ:ѕЁєхмSTHа+Эл2KЩТeок%YЏЙ эђzzђм^ 4Еcиp^z˜>Ч#д–jrЬ‰%І(љ ]ЬR}hzЌ‰CіJз№~ŠН;†ЫX6№ŒуЂхЕКŠ†gБАісшмкZа,КFІKНЂrг}нwЛфЫ{zњ‘iCзwъњ;w6šыј{>Yз{=Вt"j{“№9R˜ћ­ЪіЫШ6ЙU^Qуl3њЂv{щ­zюэPOЅiй>Ечœ1жь\ЗНWмНhwYљQЧhїюWiii‰NŸ~™>ёџŸŸo}ЬЁ*6ZюІ2mнЯ:џФ‰#­ѕђw—ДD?}њхV4нэ‚%LZu(џDѕћ(qљ–‚.‡Ч]6хюmЕУмЖЪх •ггў<Ч=ѕ•›НЧ>вЙпЌќVЌk­sЦё ЋК}./_mЕgИ{OF^pїž`Иs$ЂVШћ‹пЁ;++B_уUwБ§{дџќЛFZ"oGЁ†ЈН@›ŒBѕ&Џ‘яŠˆFЬRЁ5ЉwК/›‡,U)9^Q)“‰М1зќ”2K•ИдщpЃŸЉFЁ:Ш1ѕфš…k”лcЦі”ƒйНћеVШšm€l  Мœ–ГиMйЛWп?ЗѓM =ж@іЄ џйТL…зћhЗVk0№Ўbф;ж.мЅxНЂЌчєЖГiЂ|ядD€Пм‰A“šѕTЫ[JчСxЫAD#М}СІўYˆс…˜Ьтт"нYYiѓx4=TJ]OcPhхМЌ‹‹‹4k•+єяЬ™ЃtцЬб‘пђ_ш:~цСрMO?Кџ‰G’љщМ­ckуM-мЄо•>'Ж 8w€’їyяН+­ WkRтeoЬ]Ќšу9•*SŽ0ЯЯаeAq­Щ†Е(кГh;ДeB_Я@DfљЌНЂRAњ‚M!МA!бЈ "Wu\k†g]›Уђђеhuїю&эй3E{іL5ЧјЗќwїюцШП­@*ZИa'eV" Ћчcзx@yп+Wоk„шZZ]NЫ+*e2ё˜ЂrЭO1гЉW JMјД'чО5ЬOV|YŠл…>^ћRхГіŠвС’~€R и ЭOжG-gТ,ЅTЧњИwFhЭ№Rš›ЫЫWTHЈaсD 41BТŽМзg>sдuŸа}Е:&Ÿ[*ZИсТcf%Цвю„ЎёhлєНф.пЕїХШщгdвU›U;h`j"БЭOБzЊѕ %y3В э#@_@А)@лŽ­Х—)•2џ ž<Шy:Jk†ЇЏ i ,ј>–– ЄЅ)хаЁ§ДgЯ§—џђіˆ0вEЋsсТл­пЁКЗ„En<ИЮCџі К Б@УІ(Я;ѓТїц jЁgш"Pз0?YЧCхKеiъʘЅrЭOђO|Y*tNэzђф-Бњ;Ц›єІ–к•ЃR&В;ŽкГ)‡ЭђђецМййFўžЋЅЩEпЗд„ЕМ|Е ЈЧfЖr`Нѕжkp“2…вlквš˜” €ˆš™Ў49д‚яk]ъZцЇ”YЊІYEkpJѓШ9пГUDŸоRžzbѕТNнОЗ{КћђџК „Ў‰Е™­Ў›ОыIІuдlЋm!ђ№NЮ ‘‡'žљ№ЌW/РŒЭо<Њ\ю JfЙžŒZmќЄ`Э–НjћеГƒ‘ТЅЖ,ч§ZчIffІЃZСRbyЦЮлЎщ>ю+…šдЛкnцЇqжS(жj“'у‚MR awhMLрАTЪ’PGщ]ˆ™Г.GчЗг‘Я!гвћ…ш‘)ЪкY[wкzwrnЌѓCя44РXfy›ЂjшуvЬн;є<–)*зьгХte-ф.)G,-НЅBeьjѓxE…ёХњыœ’zВёYяHТІ(kїxњ‚M:\ИхUтХPcжф]—#‘Ј.‹NЫ]Fм•i)8ЩДeoЯН6Д5?GЈNДї Qz"ў}сТл#‚#o~щёpВfЖžvаG€>)а„МUt9­6”ЛWT-Я)K+RRŽTšяњvbmЦ“‡Ч+Ъ Ф—ы-UROV ОиwЃя/cyеŽœ €›Lt ›аG]"”дšiцЊeњЪ•їFž#”–‚œмшRІ­ 3ЕXzmlƒMKS"Э ]діВ3пътї:Oя#@Ÿ™в8ІžmЋво:эšЕ›м6Г•щ’87ЅЯ#‘Чkяw@ 6™H7я”ЫwЮ:OЬˆXК†DdkibлЮiЂАZоS7ќлђ|!Ђ‘57:/&ЧH›ћ аw§њњШГx4Ž|MSTmѓ“ЗN­С='-лMЌL9Яч1Euё–Jiwbљ‘љ S:Зж!а'№Šr2.Џ(щA“smIZbsтФ‘ГеNEzЌLOSЫЕ—Шя-uњєЫtёт;tnmnНѕ-/_mі—b•МžНнRyЬЬ<і ЕЁZ^QЮGо›Е’БrŽЋvmпЕяыНџvЉƒ’z’фм+4С“}%МЂ&#/xEM(ZНZъš§.МЙ<Ђ ŠЅНyyдЦЁєЄ5Dсѕ КnxЁАЌcŽžЪщчŸџ‰ц}ёё;++#;„Ыu@Љ9џfRAєКАДД4ВИS“*gi›ыšіh^jю Ўгr0пЮѕд%Ю~О’>EЏC Mє›JМЂB Z-|ge…ˆˆіž<™UžXGf™ŸЌХЗ“LHбЧфBсЄpуYрi-ОLбыJhq'у)ЇЦ=B†їxЊэzъ4Е§BWГ”.SЊžj™–rЬOЕЗ_№xKIBm€qS”“˜)ŠˆZГоS”4A№…–љ@Rjі’„:ž7югOгэлiпО]ДО~“^|ёY:x№™*ˆЙS•QŽљ}нИqŸоџVАS”ы‰4ЁшШЁѕ#УсFcŠ’ЧBя3CfяЩ“0Jд~вќф1Eiu~*ˆ^пњJLл9§Єц=ЮВjsІюaŠšŒМ`Šš@КzEЅоIЁFnлАДДD~јхъС-xšnмИOЯ?џtћіCš}>јрcњкз>Єkзю:k+ЮЁCћЋм'Ўwщj+…-4IЗhљ.,7iО^jnˆь…˜оX:5сAHюђ{+*giЯж%л/єaъёОЯ>в5ДR]Ы!‘пžш6™hO(й™ItЧсQ3,дшутХw‚&ЄмЮЫ*ГцРЇщњѕuкЗoW#мА€SKИЩ!І­ё ы}8 Оgхъќ­2r>RИБL%:&ˆDšЂjz•ha-7SЪ„QлќdХ{ёФVI•5G8’eЪЯК—иʘЅRu“ыe™ѓŽ,S”%40 и Ум/..вСƒГ­П‡:‹мйwКcаё[J;/яЂрƒgщЦћpCD-сFo4™CЮц—Ё†w§Жаѕ~цЬб`№Ни@/kBя”MPЁќcm@Ўсъ3†MЎЦб*sпСїjЅuЙТQЭМЅРf "eѕфYГ#сsxс}Э6 @ 6№‡ЌMŒю,<Г1 ›є€Ђ†к8%œАY*$мд4MYtедHфѓГPcЭz­9БЂЈЦдћчжжšТ=Z4iВx!rjF=nFЬЌb™Ђ<БUњ2 •jЂњЌЇZ‹ЂЛ”•‘%kЦaР›єGšСЫs<Г1FšRЎЬЋдЃУ‹%м”˜ІbЯ:З–Pы”ѕ1Щввэ=yВ6bѕšйВжfѕь€Ю­­ЙДhьFЮдx-Ы ‡ У BїЕLQRУb}c)гPnПš(ОWю>P)ЯЪ.ц'+@hЮЛ“p8Kp O и"kС’йŽ4uxЂ—vd]J)мЕMS[БіЦKlvЭТMЈfсdџЉ7ZkrBчЩћ…в,мЄfМкмYЙ гŠaгЗ У jj3Юф~Ћђz]N-мА n=‹'M”я6ьЙЏѕ§t9ЇЄЌž<њЪ[іVžsЌ~ єъo&цўБfчВААИэнНЧЦ‰Žc#?ъСрX2ЮM*­уІXї˜›[hХOсѓфЂW+m•сIЁф}QЫCЯ[\\ЄН'OвљљљжЛГюк.cсЭe:???r_ОWЌ\]тиє‡ЩjWV[”ƒ{—)ЪIЬeЭрsдМ9 DйЪ‡(_u>щШgхКЉ§>dМšа§<;ЗЧжNщѕ<5MQњоЕLQКm7ѓSЌЌ[e6гyo‡њ№–екн;єMСЕsѓ‚)j‚Бf)DeкŒMЧЧбiЂјж^еЙDЮЦdZvFrv)# [зЪѓSu•ТКЏЇLђЙЅPSњ>и••щэrоЛLŸŸŸom€kc]№ЬДћ6aє‘GЭВn•йLч=ŽчfК–Uт  @_@Ащ€мх[2vWЧюaхЃекž@eŒєвiљlr-‘Œ€l]+Яз‚Tъ8\<ыB;<ыЮйЊымpЄывcŠВоы‰GЭIЪTдЋlБsjš0rM7жжЕLTЁ`€ќ[ЖƒкцЇдї›k~ъВ?T-šФгЮш˜Ђœ„vк–*}эъШЧљƒ.QѓZї˜5bз?Щ„L В^x›}Ўnј\iжb'yЎN{vљЖМЂj™ЂєŽф!њ0EyлхvKOzо’ЎїIyжС5yС5Ёш§{BТ/MwЙ‡gAт“JШФ ыEяЅЃтЪsѕZ&Vчѕ>Q{ГU-дtсЮЪ э=yВ1ЋЩtЊќ]г%‹tЗ:Нy{j=_­ћHєFСOzПЦ ›ДЛЗFvт:эUыc!}ŽpSхaƒctцЬQ Žќ[\\ §;qтH№јщг/7iЮOў>~ќ09s”ІЇЉЙ—п›ЗќwцЬбцy˜д@euи—.Н;RЧБЮН†љ†шqHњОyY[‚д0?хДKЫь!MQЙ[ д(wщѕж– V nOоЕЭR%щP?Ј#gkс€>`S@Ън›ШЗ$7Cš9ˆF;ЛаuБзкІ&МŸ”†З`л0p9ƒcЭfšŸљЬб^ЪE”ЈX`IэЧ#Я ­Шн‹Ч:‡їŠbсІіюШЫЫv*—оuŒЇ}ІвžЗБkЌНЂrЗ@ЈUю’ы­-rудxЏЏЙoTN:$м№oжnзо€l 7Z^2жўM]TЛ^яN{$і­Ž 7ћі=nn2ž oІYsЇ№={ІFv- rяЇСр]МјNPИ idч.=ЃКЈ§n[М.ЇіŒ—…&щ…Хд4yфЖЫэ’wYkЦийЊz’шѓ'l ‘nhЭM-uqL;`iRЛ kSTm,с†‘BфЮ њрƒщЃьk=АPѓбGšcЁЮ˜htMMLИ iє§j™Ђ,7ћА[9 MЁћ—”?e~JЕKы{№xu1Нф”Л4”ЧуѕWZжё.Яc•O2"@и и g/ЁэjЉ‹CкPМiОпФ„›СриˆYŠсТkЃ;cжд„ўЦТЗ^НЊ{ЦsŽдЪ’Л"ЭwVVhqqqФуЏд$б%о ‘§=фКњї]ю’gсЭeW€Ом|&|ozњбРBф ŠцЉKDbчr ?ы OЦЏЙ|yЕЅЕщКW/tfЏЈTpЕqЇЗ2яTОэRŽ™™щ VQЖ%ш›ŒМ oб1lє,ˆбЧ-M•–Гmлжї/IЫ5&O вќДБAСйЈў-…K“ЦЧй3*і~cyHx`­`MA”нМљўšмЖкU{вЄ”–ЃVЙћ2EЩ{y4QЉ-$ЖS=IиХ!1рю Ц ›xmTЧJМЊу˜ЗGЈѓвAv1EБцЂ&жf˜mnЩIЫkeНцЄe‡m™“јЗ~'жљ!uМ5ШчˆУ;†‡„žЎH7o`kЗЉv–k– Їы#и\щwК—'_ш^–)ЪЊ?kuэК)­' з›Щ0 иРЉ /6їz{шcжљ]fbLЉ гВ|ž€‚жљVКФ›$ЕЩe,а˜~'Z˜ДД1ЅƒІ% зnИЭЎžаЙЕ5—`^ЫћЉЄіlЎk™фН<јЦQO5НѓКі)|\:Y@kЦ›јCЖєё9]<Bƒ3џжїбyщ sЁДžэеHзМW­ДŒRцЄиЛ’ТЄe> н;$ќxЉЦзѕмогђДђfr/ м…Ц^Эen™<щ. Ђ|S”u/)*g o™МЯPR7Œtїю{{4l ‰ЭЂSГ О>жYШћkэбЈ9C›™<3БP™хН‰ЈщL‰lГu\п77z^]&Ћм1с$зг#дсЧЬ'ђ<цВЩYЌ5Ѓ•jќкГ]9иxѓљ‰Щх›™rудpо]ЬR54=5ѓѓ˜ЂrЗH•ЩsN—К!jЗ[ыњ‚Mќ‘ђ`Єg#оYSJ]œ{mю R>‹юа˜‹пiв—.НлЪ?uœяk-€LЅeљЌu%ТIЎЊнКовЦxƒЌQ‘BOmИ<…X’`kjOrпCГTЭrŒ3Пšх#JЗЯЎyЫvkMЄш6HfiiЩЕј2зЃСRЯKmEшZяLЬк-М,сШ“ЖЪ—›цп!/І ˆint}=ђŒZxsй4м†іž<йШь‚НДДDяНwe$€^-rзˆщКЩ5Euё–ъj–ЊЕ˜–ЈžЧ2EyЖиŽѕ$WиJ иР5OЭx=Њcы|)$XзzfbRxxHix<СїјwЌОcчЕ7Ы$z$РrЇЯїmK.L­kƒbSL(•3W{R#ˆпИЬO9yчмЫ2EyLsлБž$|^Q`+@€>']єyвЁпжљчжжZњЌѓф1€­|gg_ Ђі ЮЯэmњZЯпnмИOiil€˜7 QЗ/п7Іѕса§ЁkOœ8в˜™BšK+47З@KKKtцЬQzюЙOgзGЪ† лЯЬЭ-аѕыыt№р,]ПОNяП+8г#"њ№У/гѓЯџDВ\}є•&ЁЇюcк’дЛ’ iдфyZCТ[Ќž4я!ЅьŠдкМјтГєЪ?§BSІœ:иiЂќwЗ“ђл)хЕO™W‹рСжАн560E9‘Њ|Kp‘ћќдR‡ЮбЇGэœЪkvі…FcГgЯTыЙSэ"Ѕ­Y_Пйš%Qcњ’АYъЦћ`cнзc–К{wГayœjў˜ЙpЋLQьmѕо{WmHr/ЊbŠђМ‡IЩo'”;fŠ"Т^Q“’LQЪpИб,њДV§ЫA9–Ž™Ѕƒcюћh3‰М/w.жљ!!У‹ЧХe˜}ЁљтwоЅ7юЛђѕ˜ЅЄ€&ЫСщѓ“UїБП…Ю“ТУЗ!щ.[лEDtј№qš›[h™Tх dЕKоjSTЩ{(I‡ЖLЈq_Ы+Њ-$$}е“$д6l X\\Єƒg›•ўк~ЬƒWяў­НnЌш:HмХ‹яŒtњќЎФ„^7У ‚ЛO,мxжнHСEжeЪ3Ф<ЮѓŽ8мЖvя~uKмe=^K]МЂњHїu_kЫ„ЎїЕМЂњиB‚ˆzЏ' ›žiїюWƒчаl2‘Ў‹ж \krгRXƒ# дњкPi•™йГgŠюоMЋCBfRк іђВoп.—іЦЊяšЩ<яˆ‘B1Џ7’2_S+†ЭввRГH˜џёНѕПаѓlїДwAёNЭЏKZ–3хpа5-‘}%жз€qС&m~ВT­ZЅьёziфп†Уі>Pж.ЫЉNW^ЫзА–ayљ*]И№vsliiЉIЫђ:ў7n4џRч†ўml<:явЅw›йsнђђUКxёГœВ.ʘŸКšЅД$лGˆс№ё&‚5НJЮЯЯ7‹ЯSФžЇЫ^Q9{ yП]П}˜[jцчй+*ЗБ†ДAЕыFb}Œ,v"ЇVњїБј’ˆшЬ™ЃtсТлІWTькгЇ_n‚ћБYъIBж‡|ўZяGзwъёпхoіŠ’Ш…шžХ—V›пъ&Нzv@/ОјlЫ^ў Z}дSпщIЯoЛ•;ЫK.Hї,~ЯeЇŽ';9/,žPфL?ДЮFkrTлБYОммвКжRЧжђьTф3XiЦšm—МЋ˜ЪŸЫУжћЕюAD-•~—9ь?ѕэ?ѕ­žаъйбˆP#cўhгсv0Ѕф~3у0;П>ъЉГУšmiЖ`\@А)@w–WTЎљIІх92hwњк’NоBц >HDA5їИгКŽCц " šьbяDšћd:з3G–зZ\Ьз„аљфВџдtы­зшж[ЏЕŽkM /№–iY†WœЁЧъ&7№œЧ,eеЉ%И{ѓ.5E•цч1EyLvVЇЪZл,%сНЂєїР8€`SШђђUs§wkц#Я‘š™Gi'Ÿd~КѓЫеz„ђѕІSзъ:–iYюK—оЭъ№хѓЫt‰gNЌьЁwЪH’\Џ(жвhF#57Z‹#БМ‚<^QЙћy<‚JДЕ<jцgyEYѕgеUЧЙп_зК‘HOЈIбƒ›Є@##ш2%*тдювКтп%|J˜рћђГrz08<'–fМчч^+Ы}њєЫСВѕg~ еќЭiЏЖ‡‘%9 ‡O-ЏЕ4m~ВLQВl}з_ю7“Л€vœхи.ѕDdoбб‡YŠб;{k}СІ€ЅЅЅfё›Ѕju"ž™ЊuKИЩQЃѓяPZŸ+ес tЯ>Ў е!ЇsFч”g0“y[ІЈиlv8є{EБ–ц­AклЩ2?…LQКЭHГ”eŠЊЕя‘2IфгXŒT~–Щ­/3˜eŠ*ѕ~вхcr5eЅяK2k„ђ{їО:і8LрЩ‚M‹‹‹б5ЉNФ3P[ъсrњєЫйjє–рЃѓЫIѓZў­Ÿ7w@ВъЌФмФЌwJ”ж JЌЕ4!ѓ“eŠвe–f)Ы•k~ђ ЖЕДБќ,“[_f0ЫхЉП˜љЩjcЕЪэ1EщsXћР8€`SРхЫЋ#Л|K<*тдL5Є АьђрЭ7І!˜B‚O­1Ѕa’ѕ|ы­зшмкš[л#гЏ(яZš9ІЈ˜VjiЯ‚т-Q2хh3ЦUO]ДcжТћ(t­еWаl 7šUџжЮж1БgІЊёяTЧщЩWvdO];Яц19yއђ‘фji$%ІЈVJšnʘŸRыЫ< ŠsЕDЅe-е>…ю%MQЕЬOЅik‘rNнHƒc­ЩД5`œ @Ÿ+@пpИ1"ида' э€zV№7ЂЧј"Ћ^­=Я8-йъјD]П1љ 5LQГпЫђŠђožњњЖŽІВ-sQЊюu:4ѓЖ[&ƒгЇ_ІskkД№цrЋМrwdж€дРЋqдЯj?VкК6”і˜n<&'Я9žЮг_™Лму0KuёЫ5?yžС2K1мЮd;`\@А)@№Ё5žХ€–йТгI…:@ОOŽЗ”МзИАђю3-ыТЊw>/e†АвDі6–iрџ№_аъйСHlyŽ\˜[X’wjД)JІk˜ЅBзXІIЧsŽgГ4{yЫнЇY*дoФђcʘŸ<Я2KIxТ7Г76…,/_57(Ь™ѕ{ДК3тsCГ@}~H№Ii~dTb)АiMCш|+ЂqlfjЭ"хљžйЈЅГђMе‘NЧДlБч[зžћ IDAT=;hЖVру o.гъйA0ЂЧ3^yŸZЄ4ŽDm! ”іжЅ%Ltљ6Ц™wЙЛцGTз+3'_‰nЛnР8`S€hЎ__љ{l№Еє-б#AAЯѕрxљwшўr&gmthiЁdZо?43MЭ"­ы=17є}jyЧФЧђaЄ ЗК$ЌТ—1Ajсб8ђпbšGр ]›+ЄZњrM/гP(ЖLЮѕЙ&PYsž#дЦКжMi§Itл­)˜ЂЕxxuћyX,,<юјх‚NЂбpсБХ—оєєє#ЕИNЯЬŒ.ЖюЛПЦЪяФ‰#–Ш:'7­Ыaч)_ЊЌ]оAЭk8–^D,З\8ЗЖж,N-ђЭ§Veће‹пѕ~gК}?~˜Ў\yЯLїU—л-=щљuMЫ>0ЖQ~ћл‡……ХmПx^QNє:„{їОкВi[CHШЫFў=ц­уѕф™ДМ4]gžtш}бˆ'›RЅWTj?ВRЏ(‰Е•ЊGžы5ћ№пЖ:zжкщ\ЕЛЌ#яBQЯ‰GF6дљXѕqњєЫНэŽМДДд ,В<}—:žьфМ Б™PєŒUSCУѓŒ`BчшdlцїЄбх№пR3dŽIУ.м|ПѓѓѓД№цr2OІЯн‘йЪк5іђ–Л‹yй2?…ЮёцM”чљЇыЏдќŠSŠ_ѓ$NЄРжСІ)аX{јдкЛ&Е‡”uОеЩъѓKрН™fg_ ѕѕ›ДО~ГѕwпvРŒЬ+TъСќмкZГ–&–#ЫнП%2€осУЧЋЯxcm D(‘щцЦЃђЭГ\њkэеUРЭ-‡G˜Jх*S­}Ѓ<ѕDєИ”Бl'l №,ОфПеVџЪŽ,Ѕ"NХЙщ‚nЄ€“кќrœ;zkМѕыиЯœ9кк…лгщЇŽKdНšr^жТфЁDІЅpS"(nUкЃy‘ѕз5?Ыќ”*_ш]lU=ЅLQ}Фa ›ЭYQ{*Q‡вКƒГ"+ЄЙБgF—п‹мU›œїпПUtЏОIyЂфІЯ­­б‹џѓџоD–їжяEЎe™›[p њНзD 4KKKAСмcVспВ~њи~AšЂ,ѓ“МЖдфбМфмз*‡дŒ”–/Ї]ЬOЁѕzБїШ№qН“<у‚M—/ЏŽ XЏккЛW w4VЧ 7р Эœ­YwWЄpCDtша~"ЂѓдVcеuЩр Е4zяcB1УсфРP ОgJ0Яйп(ЄЙЉЕ§‚4EYц'ymsЗЌžћZхШеv-Gѓ“Е^ЯгЇШу}шX@А)`8мhT­žХ—ќЛД# ~Ё§}b3Ԙv +RИaЕўf+‰еЏ'-звшŽ<дЙыйъ•к{ђd№|ыZYош{І$я`–:Я#4–фн—Y%ЅЕЈ‘_ђЋž48БIŒMђ|™Wj–>щФLQБЕNЌЁЙѕжkбѓЫДtgeЅZ}ю|TGєxсАeђМ{7Пc‘ї–^WК]…ЬГ Q?Л‚KSTЎйЧSnO:B!UОZцЇГTоO)ST_G<@А)@/О”;3zŒэvœъќ†УЦœСBЇй$Ss‡Ъ#;ЂмєNХRѓ‡:јskkДџдЭт`Я€РHѓ“Nsр>ох› еяpи6yJњk_ћжзo 8œ—.›UOVZЦкЩsГ•&–ви6ж}rђыЃ|}еYюЂh‰е6l аГ‘Й‡Ш ‰Ъ:0)y4=БsCТO(ЯXеE8Ъ <чЫђYщ˜№ШщPф`}NjЦjН;>Ю‹YИбƒ.Ѓv™}^|ёYњкз>ЬnBяXk„<Н^€ЌлЗч&з[JzEuёќЩб˜„О%­qJy)YїЪё~ŠЅ™оR9хˆyŒ1Z#8 #Аs€`“I­Х—Dн<<šžœ™˜Dо#5xy”.\э+VwЌEЩ‰ќBѕhiyЮЯЯгъйСH>.—65J>љЩ=4;ћBЃНЩayљЊ9;U‡оі]Ы,х1Eyъ:WHЕкї›Юm›%Bt­ОЅK9Ќ~АЏ8LЄ€`“‰^ѓ bІOеБ•‡>GЋ=ƒ~n'І”аёО]RНъt=HЩК кЫ-ЗЮг[ђђ"cngвдhСк›ѕѕ›є™Я5ЯcR‘ГНѕвцх>ь;‘[ItlK4=њншkRЯмЗљЩЪЋkп’[љ IR“'њ‚MzёхСƒГ­Пw cщ’2?yуPXy†ИX*ѓю:…юŸлЧК^МјNа…ЛыŒ5ѕ~­­.ˆЈq п{ђdpЯ‹O~rл4%ƒЅЩђHЌЖчбце2KI-OшкккМK—оm™НbіВžЙ/ѓ“едъ[rЫ!ћ‰4Ёюо§jе8LЄ€`S€ьиЛ,ОЬU[зK{ЛuЎ5 Єђдk‰bЈ%pфšЈ,STiGЪK 4пўЕ’U>)*і~SkиƒŠЫЈяeёЩOюЁ;w6’ ‹ѕ>ьЦЬфjХ<эЛoЉ>ЬOвьр9ЋныrєaіGпR’Qл[3Ѕq 6l  ФЁХ—9ЁнљЗG3:?%XB‰–ФъафѕЙnЅЙчч–O^ЫоNччч‰ЈоŠœЇGГeе;У§XРЩR ‹S{јxЕb9kъљYHˆivМїё–I?CЊнФЪ-Яї>sюЂшвtzЪ1Qа[€qСІkm Q^HњЯ yžю\b€МwЊC#jяЋфМД)Ѓж,0ЇмVНЩДЕ8ИFYхЛIiЖ,ѓЂЎCщ"~nm­ф/ElaБМ7ЧЪбXmЏ‹РЪїЕ„—СрXRГ#яSЫќ”Г&”ЏЙЩ}чЙ‹Ђkн5ЬOБ<ˆhФ„ъ5ЇP 6X^(\~ЩРш5?щД%QV‡&,ЯрЅэьЙГyk[n]oВ ЉХСЅeѕ˜ЂМяWЂЏgэ ЏПёТк›иН5ЕSы-ХjЧКЌЉЖ™[І”й2є žя/ї›ю*№зъ[КО_Й./жЮш 6ФbыœГ”Ѕ2—чшЮEwиЬ8ьњ’мй|зѕЁшвЅwГ—”ЕD8 §-ФpИ1т’ЭЮўSoаўSoЏг|ђ“{\ї–ГкЋl‡)ЏЈдѓЧоЧpижцљЎкц'kpЌмоw^jŠ"ВMЯVzњqэ,Р{LQмЖtЙl ™ЂxF-SqКФ,eЉЬ%zвТ Qx1ЄWpЪМˆЈe–Њ93M ‰!ˆŽь0Л”ЕЫћхѕ>LЪ%ћж[Џб­З^s 79ї&ВЭЈRшєxEх˜ЅєћH™ŸrBt1?х Воw^bŠ нЧ“–y•\ŸcŠ"jo ‚}`м@А) дљyvЏѕ’1O ]ЂАKЗЅйёhIф§sЏYЪ3л“ƒT*ТrlџŸСр‘ЧгТ›Ы­§Rзzз#дˆЌk$RшАЮ!ЂFИЩpМїю*˜z4dМб%‘mо! ›ŸМЁ RТJЌ]zžСc–ЪнR%–_—Кяc]™е††У ш[›BкжlмzыЕрˆœЏ1OŒи *…ž ї90Х4,ЙГC9Hy",[3vщёдХќЦхѓЌёБоKЮћЕДq)sQ[{sjyЭ<ˆшњѕѕрsKtйЌѕRЅІ(§М][™З†љ)WЈ•ЧB[ЊŒЫ+ЪліМ)ЪЊ'Ц›Bdq№рl33сNkpМ ^­A–;KMдd|OgoЭRsMQЁЮ0іl^A)”Ÿ|^эёdЭЦeэ1KyпOзї+п+бcsQŽGЩ­З^ЃЗѓQ ЮСƒГ­ѕжL[ЗжЌtnлъ’&Ђ‘>!ДfШЊзи}sЮ/iуЁrыДŽt{`Ў__Йќ{­БfЇŽ';9ЏнЛ_ні‚ЭЎьв"j›ДЊо:?GEœRїJaE_kнWЋЪ=І%iŠ:sцh№|Яоu!›Н<ОМ|ехТЛ!Д^ЧSЇЁѓ.\x;y^ьzЂQ…%8ЏП‘ёotОў>ѕœВУэIюЙS)рШ]О%)A–ŸГ†W”gрхпЙбЌSяX/(Ю]dЪ+ф§ЄЏЩј­…љ9оOЭ‹ЇмБwЄлч‰Gšm;юнћj‘Ж€R ик EГИИиZз;јъXЯіљ7Ц3Ье"X3ј’™bLЪћачЮ7.моYj `ыўБѓrюЇг2H ЕејУцќќ|уIІё І}˜ЂbBЃ7šumѓS—MY­krЯїІkNTJо‘ѕЎ,!€>€`“IЬќ”ЂdжЊж%…€œ™`Ў]пšСЫќKДжпфZšиЬ9есЦЌвYpш<"j T– ˜ГЖI—Й}ћ!•Рš СрXГwVhƒM№њ[щмА[e~J №оЩEi9jhЧК–ƒˆšˆУ|\kГш6™Шдњ`Ѕ –гЙ3АP,Я T%3Сš3МвŽ˜ѓ"Q“F.ЎЕщaюŒн[ЇDmЪcifiiЉicЁ5 ћіэ*n–––Zл}œŸŸomА™ЊЏљЄD‹ZФЭ:UоОЭO9fІщщМѓk˜ŸJ{ЫС№BtmN`\@А)€…•д….ƒo,њЎ>Ц”ЮНE-S”ЌYЖ j 4Б2чф—3цоп[ЧоДDЖБаlЗTИ™™™nкАМ7ЏПYxs9ЛЬ]OыœœќЖ“љЩ[n_*v~ЊŽkMNКОпP_и‡9€l р”Е5Ён‘eс™§хЌ с2шYММ&w&ы4™ZІЈprс& /Кю:K­= цпD”НР5gЁhnrœд=ѕњ]ЮаЦ•ќЛж *Пщюmyяl7ѓSьлЭ™\0}і}˜Ѕ$RыъЋш 6H†єiфЧо%6„5‹”їз`щХиљž-w@руr'§З>fІ5aZ‹ЙНљXІ(>ю IПoпЎlэЭђђеж.п’™™щжњ›skk­rЪX3Ѕf kWяаї нНCо;ЉwМUц'ылх{щНЂr&#]кXi_ф­3 МЂРVСІНnFЦq!*ЙсM3ЁQў…ЋѓБfŽђ|Og/яgižBƒŒЕПSшОžйxцЇœЫБzѕІПЦыюНoп.њєЇ_Nž'+† —чќќ<­ž4юіžђ{Ь'–pTR_Е„й>ЬOБr‡іŠВОѕОЪQRюXIфqьЦ ›L<^Q%ЎЧ,вŽ„:D]ЋУхЁЯї.ŒLЭіє #звXЯH”ŽџSтœc~ђ.X•ЗД Q+~MЬlЄљЪWоIjnx­Ы,бe{џ‹чUЊўє=KЪмя!&жмsПудСЪOžOD#^aЕњ“.Ів”`.ыШжє ›LBјBC“„G8А:DЫ4’;ГюЎBh-ѕŒЙЯKз4?…Љ.BWhЦ"SxЬRVОЉg9?џhїp^^Ер‘2?yП‡а*ЏgpЯ1?х~Чž ‚U&Љж^aЕњ“.щX1ZыРИ€`S€є&с5’Z3DK8`BvЪ,•Г0p8мкЦcхБ)аpє`gl‘Јg0J™Мѕ›КOH§^ы]3<(„„K1с&Е 3UNНўЦћ\ЕЬOz­™еŽ=ƒћ8ЭOЙ“ Ђv_’ЯgмхжВ4Ѓццt‚Mќ‘Jw\9#бDUА5[ŠuиЁŽ„я›ZЈuiz“љZх о§є"Q‰g0вЧЧe~ эЙу–,A“MQ2fR.–p#t...šІЈ”6уќќ<}ћзўIГўЦ&cДGЋк3ЅъcBQУќгr„к—<–ŠчSлћвs\—QТ хѓ0 иРЖж'‘PUА5˜І:fнљШћЦf`9ЛЇ„Ўћ;•­ешRПV:f~ВімёKКmшw•Š™”Тn–—Џ6їЖ4Ž^o>іhлъlСУЃUйиHЛ§ыvS2pЫќф5я№Л(бєt1KхЖсPЙ‰к 'l .И!Я’ZГEЋ3cRГБкоRž™6ŸГџдЭ‚SяŒ843їh•bх№цН•цЇићху]BвялзўЬe^Rx х›“ХП‰ ЅBjL3b њлЭќ”Vt=Ym}+Ы+7QЛmAИу‚M&2bkh–BTІўЕвrСЅФ; š<ф,h ŽЕЪ`х+]Иc 8­™Йь4eYdйbкY(gАг9c EVўž}Ѓф`Ѕ5‚5_ъ|CЧ’Ж: ЎП‘mXЗ1ЯЗzZ3’ыНуxћ4?Х&DЃA­oЎДм}xKIфпЌаєСдЋ?ѓЫ›/џiњ_xЉхкkkWi~>ќ!lчМДКžс5(в‘?`,jЇо\nМŠМзrЧ(‘‚OшZы^њ†šЎЯ(Ы*=DДЗH_ѕЫi™ŸXњЬѓмкZГ+ќхЫЋ­sdГОUЋЭЫіЫэ“…=ЃжљvmЋDDЋgYmLжyзr…п%бЃѕQ/ОSхYkЇ­Пхž?ЮДlGВдюоЕЦš:žьфМvя~•~є ›йљ|ѓ—ІˆˆшкЕkюkОїНяб—Оє%zщЅ—ш™gžЁgžy†жззщѕз_Їя~їЛ#чџъя? ?Мђ[аи” 7И ХhшCхЫшДw6–2KхЬxхL“ЈН ЗЧ”ŠKтYГЛ>–оŽц'™&"к{ђфˆ7IH,Eш NЋљ\МўЦZ\Л^kЮЌwчЉSЯЇОпmюЗng}ы[]n­Й™™™nЙ|0. иЂwъ5 5і в…^T(ЫЁгЙоR9ё*ˆк…[›ƒBƒ™7NЬпАДї“eJ M]ЬOžќsоѕ••dœЄ.Ш}ж§ЛЖ[m~вёoBТMJHеяЎЋз‘%lчzе0?щњˆеЭv3KiсŸ‘;{зЬHS”ЉЪ™ˆъ›Ђ$33eІ(™Ўa–тJюТнх-ѓ“e6аЯPЋЎ­МkчcЅйЕїфЩЦ$EєЈЭе2EюФм—)ЪzF"iУDѕЬOБvмw}•;єЗмѓћNKѓІ.‡lc0EэмМ`ŠšPј#e5ЋўHkЋyѕ=e9Jfе9f)й ‡С@{sgЖ—вЄhMw6оеќдu1jюЛfЄ›wЭє—/Џ6эз РXыЙBяcq8жюе3?Хъw;x?ХъIОYx+ЭR–vLЖ-Ћ}аl ы–––FfѕЅЇCžPКу ќ9щPg|d€ОPф`ОgŽ’w`‘х “2™хMо0”Ч‘є,”W-†У– е]:їy=эзпМђOПаhqbз{wщіšЅюћ• ‡ЭфqlР8`“IhLщ!$щЊцЕюУшŽFž_Ы,к…[cmœ™3лгЧх3љзE„ђѓ.ю”ƒDЈnbТN­4sgeЅЕ`Э/чeХШщњ,MOhaЗŒКІV]гДKЫ€”a>з,Ѕї[Ћ]БђЩ|ƒcˆaЦJkё№ъ*ŸХТТh|k"_MO? >ЧiyЏєТR+гђ‘НРSŸ"'пXZџ–ѕ(љЪу5ђž™]^n7VйOœ8B‡>wОY<Ь2>GЖЗмo5дцИ<КMЪуЉњюRїБ2џцќќМ™_n:жЮjхбЕŒїћхбзszЪZ„ъ'1жь\З§тaxE9‰yEщšзЅXtЕlHЈaUяввR'o!О6h/WИ‘Шѓ=оO}y<хЄћP{МЦ /5 ХЪйG:дXРЖќѕ%Dя”ДѕЗ­zЮаwšТ+jчцЏЈ EЋ`S!щљ7Ћs™’0у!M$d>ёšb8Юˆtсist'ЉŸKЂЏ•‹Œ"2?щ2Єв%цЇPZ>|?]зЙxžƒй{ђdkƒеA2†\ Ъз[ЮXнчxЁЩД^Я1<оЂaсЭхь2yЪ7nГ”Ь[šЂJwцЖђ‹ЕщЎхN••сў­ітwR@А)dyљj+‚Ћ$дQкНƒcСфдJz^---5i­нž­+Еиѓмкэ?ѕFуЅЂ;9ЃfЮœ9JƒС1š}fg_ СриH6Дї—ъ‚GЩ]р[ЩАЦ@j1ЄG‘|?KKKt§њz“ў№У/g=‡50АwI BkФЌЕ5МŸє{ШY№.як`г ’Z—у]Pl №]гЁќфоhZШo-ъ =З^#nJНЖbп–„лXh}СІ€вєDэlџЉ7ˆшёЦї y?Б&%4јІfЫБ2-МЙм4Ёй333н LБџM›“КрDjЯЈ^яТš9= ‘М~ФћВОЄ—P-с‘эНЎBхьcь˜g_JшбlЪoЩJч !}сеж•ж+Qј}Х47%^[^#Еки8ъ‚MоєЁYЄ„MЋcуkX›ТЧѕЙкŒ˜tYЅ wh€‘БiјјЬЬ4­ЏпЄѕѕ›Ўzb!шФ‰#MšџЭЬL7щгЇ_ІгЇ_Іщi2ыВдФаef*сc–З”%DzŸУšбZZСhSN9YауtЮЎъ1MŠG›ХБ”ЄеvЦcІcbm4_‡ыяУ&Cч—šŸЌ~ћJИ{ƒq‚ХУNB!щyFD”ЗјRžЫо/ƒС1кНће‘ћІђђ ЗИИшZєiнSЇѕNкКг’Т ЧaфuуЦ}:pрщ‘kѕ5DDЗo?ЄЏ§;єЉO§элЗkDуsцЬQКpсэhЙkЅѕћ\xs™nНѕкHм-hЪп'NЁƒg›п,€`SРpИбZрk 7–ЁЯ[=;hжqxЭOz!!ЃзxpZ.ц{zМ‚ЌЮhЯž)К{ї‘дЎœ™™iКtщн Pcikжзoв;ŸsпОЧM3&ˆœ9s4љ<Ѕл=HюЌЌаЙЕЕЁ&Ф/ф)—30Е…жZ”Ўлл}„‚Tz„•\ѓSHH—ЬЮО@ЋgєСo~~ЌŽh,ЌК™Џђ§№ё'ŽДМЅЌ1Бй337ЗTѕ— 7Zуh 7ЙТJЎidІ( ›@/\xЛйФ5w§M)5ы †‰ыУЮљ˜gП9ыНШХѕ5&7x`S€6=X‹/e03kVУnнжьTЮvіŸzƒЮ­­б••V`@эeЭrЅљ)ЅтцпrkVYЇX_ПйœЧїЮ™‘Ї<ИrЬOЙyHM–$GcФИ噇fЯZ тu wVVЂ›–7ZуhiЈИl9ТŠЎу&'+э%ДXšІˆ›ЇN-ЏUpЌ6ъй_ЫгІ=fЂXИŸЅ‘I•OоWš9aŠу{E9‘Б>юнћ*­ЏпlФщшУжžMМL яжхю%гZh Cdяд=ЃЛw7iЯžG{€ЌЏп РZє–/VІZїВв5о› ЗwVVFк‰^иЉї+уѓt;жЧЧ™–„Nй^cыњњMzх•ч›6Ь}ЦўSotоJ/€пŠzъђ=•|Б~PЖ3ьЕsѓТ^QЪюнЏЖдЌz†oЉŽcб‡s‘aёsМŸdZG9ЖTаr ŽVe_И№vЫг)„Ѕцю2SЉХ=&'C$tЮо“'Gўхrge…юЌЌаљљљцож‚џнzыЕжoо“Ях4п‹џБ†џНџХstы­зш­СќШпnНѕZsбурќЬж;Гъ{œоOVк"зU[/,fj›ЇєsXЧsлt “–u^Щї'бцTЦ›._^Ѕызз›пЁ s–ъИіЎчYц–˜šк2ЋhсЦš1‡ {ZЭн%zІ“S*œН$фŽлЙА*gТLlяpИᘀRСљrLR,Dхl‚ЩхI™ŸДїSЎ'TŽI†‘!J\ЕхТbI­ѕ7–чPJИŽЕщ/%KJ}OБя5–7УцTl~ Ц LQNЄ)ъНїЎа|LD:ХххЋІ жRлKДZ—ЏžTW;KГ’з$#ОœќB&Ќ”šЛ–НkšuзКЇ$BuУЧйл)уHЖ1ы[Е\ёѕЖ |onoзoЛОKо;Ss ‡6MIXИёšЈ,S”d;дЅч§zЯЗњA-мРЕsѓ‚)jB9|јxc/цнЌ%r&ЃЕ&Œžљ№lgсЭхЦ<схxBХМXBч‡Ж №˜Ќu9)5wюsцдЌKЯ^Q5ЪЧљ†„Ћ^Йо?њш+ЭoKЋЃyчw“šЉq7шkЏџQ#мœ[[ёјJЭьѕy}Ѕћ^ˆzчЮFа4EджрфЂы0чYkжБЕ+x-Г”ѕЬинŒ6№Р07З@ss #І(=pЩАЕДМЂVWБРЫbaсёЌvuu‰ію}ќ!ЯЭ-Œ7Z3сее%киxфmѓўЯ5jvщ5%цЯ‚gпьsњєЫєќѓ?б”CюYКOn~ђ™ѕѕžћLO?ьbiY—2Эч№ЛaГŒdяЩ“НxЄ…Ъ'…š оnМЂи#Ывдф|Ћ/П|„œm~ГЗŠuяT€ОX*ѕ$“фžпЧЦ•ќпЙck N-Зы‚h{xK‡™ёы#ДaЅЇ3‘оER Ч­Д<_ІѕІ2F‹ŒhЬ|јс—“‘fcхhЗчж}jvи: *ч!ЗЌ‘ЇО­ѓSe’ТЭsЯ}К“ЛЗецCюо,р ЧZ—šЁмw!л–eнXэXоGЗVYЦZxћŒѕѕ›СјUжоH‡‘ЯъЉмtnлѕЄ­ќф9ВЪˆь::;мНwn^;Сн‚“PЧЯЄjкO—.НЛ-<BsЛ››DЄ†‚›­DkŒXЫ'Е.]~цT&"[р1ŽBƒЁrxa|š„­lˆт1oˆз9ƒ9э*VЏБє847ЁМљ-и№ѕZ“СfчцЕЌБ)фФ‰#AУьь #‹UЧEh€мКKKKcpЗЌ9йjЁ†‘kЮЯЯгЁЯЏvo^0<7З@ЛwП ЌЄr=…ŒqZs!ЗŠЈБшXІЗ1Џ) w9лrЄжЧдђ~ЪM[yыs$žѕ‡дd4D)HrќјсF#ЃЃ ѓ‡ЮЎБ}Ђ;JiО(бqpЖskkлrЧ>‚Œ0?ќ№Ы­ЕF’в:і\{ge…Юќцчiyљjp=R Ў__ЇK—о1Cѕ?ћўџwы‘ƒСж тlŽŠioј}Џžа№ћ&Eiоe­‡lвDщMГљIЇљўБtЮљБђIЄJў o иdР”^S333MwюlаХ‹я<š‘Ў=Z_@g4;ћBЧAš­јИЕ37.|\Џ‹!j 233гMЇЉgд|_i:ч'ЭV™фљђў|>чkјoќœЁp§9їЭyыž­k•‰„ы|nnЁxBЯ333э~wЁчфћђЂaЂЧы"x‘ ŠeћЋСћяпjёаъ>сv+…чэЂ)+EК„Чжо№ЛџњзПгД'+V‘,XШеЧљ>r1КLK­Š•Ю=?TОGј•=f† o`ŠrrяоW[ƒ )УсЭЮО@Ї–зZіˆЈ%дШѓХŸm:ССрXГYЋџчцSЋяхюЯьr+yJBц%MDдИƒЪkчцZ!іe™d€>yЯа§ѕŒMЋЇйb™<їхžсst]Єю)ЏхkшЂv`8YЧ!U§ммBуъ:7ЗаrП нџТ…З›МЕPѓмsŸnђѓhажзoвоНгДО~sфŸцаЁ§­СЕћЙuЮввRЇ FЗcˆ~+цРYш7шSŸњЁІнXfЫ={œцЇГ”|f6wr,›эјЮРdMіŸzЃYь);ўЈх Ž;ОЙЙzяН+ДО~Г1§АЛћZš9{#В=sфL‹;Wё—Я!ЂрŒ(Ќ7Z)МЩуDzžе1,dАжŠŸЧsп‹пiвziihBuЁgЌZГєH№Yj=ƒЌясpƒЎ__ЇƒgЭѕ&\п\&жТШ|.]zЗ9.…~іуЧгХEZ\YiД+!a%& Hmu^L›Ш‹Œ­EтїЭяqqqБUg2myм8ёШ-]/ЖхP Вюх=Ќи2%|ц3G;пя•WžО9Ёсї­_~і–†V*kЗ[Z§ рl–—fњ‚Mzћў`uН_|–цц›(фпЄ№ђЪ?§= юХ бї;ўяп“бƒ‘5{c…5кЂЫЃѓч„ђжіt=“гyЩђщПIСХИbїѕ>Ї.tОК^­“вѕ8VgЬ… oгёу‡›§™8ЭцЈG3]jiо>NDд<‡Щu08ѕp`Y€…yДpёр;33н2ЁZІEYŸЉ№ўКžх{чКdч™пќ<=їмЇщдђZ3q`СO–зђJ*Ё–7JШuхЪ{РЗО~“ІЇ?П|Ёж‰кnсЉobмi" † ацT>€>)*6 H#љЁЮЮОаЌС™}Ё•51lNZ=; [oНжlЫРълЧк‚Ч3b}œЈ=`Ъѕ;кŒ#Э'кМЃя+ЯБђŽ™‰BљЪѓxpЖдм9їЭ}žиЕ1sšUЧRЋ%ы‰БŽЫM'9ЭчБк^cxP ŽџЅ™ыXƒ(зйШчќдЇ~Ј9_з Оњъz’&HYџк4)з`Q#ьŸŸoLВчжжšу;‰™™щцЙ8ЮоНг-!_ЃЭ>Ёжл%M4КW”4Ї2аж€qM&fVпŸБ~_ЕЊ;%^CoE~6[PЧГvяq9 <>wєкаёа}KЮБюo-vхВъПчоЗVYsЫma][єЋзn1:РYз™Ўд haKЎ§Є<ВX(\\|Мў‰гвd'сY|LУ%UЯЬLгyz‰yQ}S)wыx“ Т—У+Џ.žё‡"иЪc5ћ-]]„&-ЄrЩС>uм2ћlѓS(рЙьc|™”ёd'хЕєAcSЄj@Ÿд іэл5ŸЧЧFšћbф^/‡ДhкЧкЋJžяQjhlєфЇ­YmЧЎ‘Шѕ_z-˜g=зVЅYшфчюKЈР‚MGјƒнЮvЦй)MjŽ3/ћіэjXBMз:%f:ыќq5Е№N~Д&ŠШvьѓ7lxBuћЁз>эDX[РVС€'˜.аИДyлMух%U7“Ј5 ,ƒ­юо˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰ЁЕWіј!а.€кvЖ’–`3iк!ЏюŒkЃCЂЩ­УIЭk7СD^нAŸ1йyэЁІ(L l01@АРФСL l01@АРФСL l01@АРФСL l01@АРФСL l01@АРФСL l01@АРФСl+677щСƒDDє№сУцџ-ЦдЋ?ѓЫ›/џiњ_x‰VW—z/,иY,,,Ђ]€ h кХdГААH?њ…И`т›П4EDDзЎ]KžћрСњјущкЕkєэo›žzъ)""кЕk}јс‡єГ?ћГє№сУц8ѓЋПџ€ў№ЪoбгђрќќБьТцВЖvu,љ ЏzLтs!Џ: Я@^!&ёЙзxx№р§ЗџіпшъеЋtєшQњлћoгў§ћ‰ˆшж­[tѕъUњнп§]:zє(§№џ№ˆpCSЖ›››єёЧг§Џџ•~ъЇ~ŠўЦпјPCDДџ~њЩŸќIњЉŸњ)њƒ?јњГ?ћГ Y ‚ Жœ‡вЗОѕ-:rфMOOгдддШ9SSSє‰O|‚>LпњжЗšu76иr>|Hђ'B‡ЂЇžzŠ677ЭŸќф'щџјƒ‚Эг{Œ•ЉЉ)њшЃш~р“дкlnnв§ћїщСƒДwя^К}ћvPЋС[ЮдднПŸюнЛGїюнn677щсУ‡ДЙЙйœСл’ЉЉ)zъЉЇшЦДwя^кЕkMMMЕnnоМIЯ<ѓ lOvэкEхЏќњЦ7ОAљ/џeкГgOPАЙ{ї.}уп щщiкЕktЉ0Ис`{}№у?ўуєЏџѕПІљ‘ЁПњWџjPАљу?ўcКzѕ*§ƒ№‚ї€`€њ‹ўH\љЮ­’Л{#ђ0&6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &†жюоkkWЧ’щИђA^Ш yMF^“јLШ y=‰yƒ–`3?Ќї зжЎŽ%фUI|.фUєШ+Ф$>ђк9Р€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰сiљcmэъX2W>Ш y!ЏЩШkŸ y!Џ'1ЏqаlцчѕžсккеБфƒМъ1‰Я…Мъ€>y…˜ФчB^;˜Ђ01@АРФСL l01@АРФСL l01@АРФСL l01@АРФСL l01@АРФСL l01@АРФСL l01<-Ќ­]KІуЪy!/ф5yMт3!/фѕ$ц5Z‚ЭќќБо3\[Л:–|W=&ёЙWаg Џ“ј\ШkчS&6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6˜ и`b€`€‰‚ &6иvLMMбЎ]Лˆ67щСƒћДЙЙщКющžЫЭдд§їžЇя|LЗi“ІўќџЃOќwшСƒбы БРЖу/ќ…П@Ÿ§’žџС]єg7ОMqїCZќ™К{їnє:hlАэиЕk=џ—ў"§oПј?бSO=E< Лwяв§ћїЃзЕ›нЛ_эЕ`g‚v,а6@Д тоНЏвЦFо5їяпЇ?ў8ыšFАЙvэZ^nx2љЃŒsП/^ф 5Ѕ` &†‘56ыыы[Q€l~юч~ŽўшЋ‚‹‡gggЧV €ZР€‰‚ &6˜ и`b€`ГE|іГŸнъ"GrK…Я~іГєoўЭПCQЪBЈœЉП—№ня~—.]КD_џњзщOџєOiЯž=є#?ђ#єwўЮпЁ#GŽИюбgЦоYпяѓчўчщЉЇžЂ]ЛvбSO=еќ›ššЂлЗoгЏ§кЏUЯѓпј§юяў.]Лv~№Ž9BЇNЂgŸ}6xўЛяОKПѓ;ПCєGDЯ>ћ,§и§:uŠž{юЙжyЗoпІіЯў}ч;пiейцц&§ЛїяшЪ•+455EЧЇПџїџ>MMMU6yьјНЂxРБ4 ЉПчђЇњЇєЯџљ?ЇПўзџ:§уќщ…^ {їюбЕkзш?§Їџфl&•_џѕ_9ЖЙЙIПўыПN333НфљўУ Пћwџ.:tˆюнЛGџўпџ{њWџъ_б?њGџ(xўя§оябќќ<§ЕПізhзЎ]єџуЄљ/џ%}ўѓŸoЗВВBsssєлП§л­уWЎ\Ёo~ѓ›є+Пђ+DDєХ/~‘8@гц5шыIDATѓoўЭ^ž€ŸN‚Э|@П§лПMпњжЗшсУ‡tј№aњьg?KћіэЃз_ўжпњ[єу?ўџЗwП1M]oЧПТЄ”‰,-‚A_–˜/АЬХ(ˆˆ7Р?@ u…dЩиTцt!nЩLŒб bФФRўŒ­›РВLіБэЭЦf0›#АБЁ аЙ "П„ЛlЉДќtёљ$MnЯ=їмЇ-аЇч9ЗЌTњR^^Ю;яМƒПП?VЋ•O?§”‘‘тттШЭЭEЅR‰Hvv6--- пї ѓahjj"!!-[Ж(m~~~ФФФЃДS__ЯW_}€С``лЖm<ёФФSn?sb2™ШЯЯчТ… ќѕз_DFFRPPРтХ‹•БЬf3_§5ОООlиАњњzg^L&лЖmЃЙЙ›Э†С` ;;[‰б[Юž=KDDЯ=їœWЧTZZЊlћћћГ}ћvЇI 0-IIIсƒ>phћ§їпщььфрСƒг›/Ој‚ЬЬLBCCШЬЬФjЕ:MlL&yyy\Мx‘ссaєz=љљљ\П~ЋеЪаа‘‘‘ькЕ‹ЇžzjжЧ!„№0Б9~ќ8999bГйhllфНїоЃ  €ДД4, ёёёЪ§ЙsчHNNF­VгммLWWЏПў:˜ЭfšššШЪЪRЦПrх oОљ&ЦГGщEпџ=ЛwяžБпљѓчщыыуРœ>žІІ&6nмˆŸŸ0Q–šњIsътЫЉ Ф\sgЁё‚ ",,lZ_ћуoмИЁ”*єz=УУУNЯЄlћљљ9dЁSЧВпО___ЦЧЧЇ•”юоН;э9ЖKЇгЙŒёAbЗЖЖrэк5vэкхВŸ7uuuQYYIQQ‘‘‘3іЏЎЎfdd„––N:ХоН{АX,фхх9] ьяяЯэлЗ ріэлјћћЛ<—}‚>љ;ръ5Ÿэ1Bё8pѕЗЯЃФІЂЂ‚^x˜˜дj5###+ћcccyџ§їihhрчŸvx“ ЁЄЄ­VыtќџїU&юЬ ЌXБ‚Я>ћŒ­[ЗКьЇбhрщЇŸ&fЌ‚ƒƒgзфX“k)\ізыѕєєєАlй2‡іоо^-ZфаfуРР€Ын9ikkЃЋЋ‹ттbЗ_COKQX,^yх–.]ъж9дj5)))\МxQiћэЗпxћэЗЇХ7Cxx8нннЪBёююnТУУн>ЇBˆg_~rUŠђ(БЙsчjЕ•JХрр uuuћчЭ›GZZьиБУa!11‘гЇOc4бщtєїїcЕZyљх—= iЮЅЇЇS^^ŽЭfcѕъеhЕZюоНЫO?§фаЯ`0`6›йЙs'fГƒС0Ћs , ;vь&f\IJJтєщгфццВdЩрпMRR’Cпšš%ЦššfуЄііv:::xѕеWёѕѕuћ8OB777ѓбGёкkЏ)IкTі‰Iee%›6mBЏзsѓцM>ќ№C‡+ЖІЦ2ѕљUЋVбииЈ$š$&&Ю:~!„3Г/?y\ŠКпЇщъъjvюмIMM ЧGЃбššЪЗп~ыаЯЧЧН^ЯЊUЋк“““ёёёсиБc FFF†;с8mrлўMhІ§jбЂEьлЗsчЮёюЛяrыж-дj5Ы—/ч7оPњmоМ™КК:eёp||>Nll,™™™;$!„bN9+?ЭйUQЎH‰УЛжЏ_ЯњѕыН:ІМFB!5ю”Ÿць њ„B!МЩђг•ЂђѓѓН›B!ФœКzѕЊУ§i‰ЭдB!„џJbSў‰эaЦ!„BсБ'Ў\r§MЖB!„џџ7X–PT=IENDЎB`‚Printrun-printrun-2.0.0rc5/setup.py000077500000000000000000000135151325617007000173460ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import sys import os from stat import S_IRUSR, S_IWUSR, S_IRGRP, S_IROTH from setuptools import setup from setuptools import find_packages from distutils.command.install import install as _install from distutils.command.install_data import install_data as _install_data try: from Cython.Build import cythonize extensions = cythonize("printrun/gcoder_line.pyx") from Cython.Distutils import build_ext except ImportError as e: print("WARNING: Failed to cythonize: %s" % e) # Debug helper: uncomment these: # import traceback # traceback.print_exc() extensions = None build_ext = None from printrun.printcore import __version__ as printcore_version INSTALLED_FILES = "installed_files" class install (_install): def run(self): _install.run(self) outputs = self.get_outputs() length = 0 if self.root: length += len(self.root) if self.prefix: length += len(self.prefix) if length: for counter in range(len(outputs)): outputs[counter] = outputs[counter][length:] data = "\n".join(outputs) try: file = open(INSTALLED_FILES, "w") except: self.warn("Could not write installed files list %s" % INSTALLED_FILES) return file.write(data) file.close() class install_data(_install_data): def run(self): def chmod_data_file(file): try: os.chmod(file, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) except: self.warn("Could not chmod data file %s" % file) _install_data.run(self) map(chmod_data_file, self.get_outputs()) class uninstall(_install): def run(self): try: file = open(INSTALLED_FILES, "r") except: self.warn("Could not read installed files list %s" % INSTALLED_FILES) return files = file.readlines() file.close() prepend = "" if self.root: prepend += self.root if self.prefix: prepend += self.prefix if len(prepend): for counter in range(len(files)): files[counter] = prepend + files[counter].rstrip() for file in files: print("Uninstalling", file) try: os.unlink(file) except: self.warn("Could not remove file %s" % file) ops = ("install", "build", "sdist", "uninstall", "clean", "build_ext") if len(sys.argv) < 2 or sys.argv[1] not in ops: print("Please specify operation : %s" % " | ".join(ops)) raise SystemExit prefix = None if len(sys.argv) > 2: i = 0 for o in sys.argv: if o.startswith("--prefix"): if o == "--prefix": if len(sys.argv) >= i: prefix = sys.argv[i + 1] sys.argv.remove(prefix) elif o.startswith("--prefix=") and len(o[9:]): prefix = o[9:] sys.argv.remove(o) i += 1 if not prefix and "PREFIX" in os.environ: prefix = os.environ["PREFIX"] if not prefix or not len(prefix): prefix = sys.prefix if sys.argv[1] in("install", "uninstall") and len(prefix): sys.argv += ["--prefix", prefix] target_images_path = "share/pronterface/images/" data_files = [('share/pixmaps', ['pronterface.png', 'plater.png', 'pronsole.png']), ('share/applications', ['pronterface.desktop', 'pronsole.desktop', 'plater.desktop']), ('share/metainfo', ['pronterface.appdata.xml', 'pronsole.appdata.xml', 'plater.appdata.xml'])] for basedir, subdirs, files in os.walk("images"): images = [] for filename in files: if filename.find(".svg") or filename.find(".png"): file_path = os.path.join(basedir, filename) images.append(file_path) data_files.append((target_images_path + basedir[len("images/"):], images)) for basedir, subdirs, files in os.walk("locale"): if not basedir.endswith("LC_MESSAGES"): continue destpath = os.path.join("share", "pronterface", basedir) files = (f for f in files if f.endswith(".mo")) files = [os.path.join(basedir, f) for f in files] data_files.append((destpath, files)) extra_data_dirs = ["css"] for extra_data_dir in extra_data_dirs: for basedir, subdirs, files in os.walk(extra_data_dir): files = [os.path.join(basedir, x) for x in files] destpath = os.path.join("share", "pronterface", basedir) data_files.append((destpath, files)) cmdclass = {"uninstall": uninstall, "install": install, "install_data": install_data} if build_ext: cmdclass['build_ext'] = build_ext setup(name = "Printrun", version = printcore_version, description = "Host software for 3D printers", author = "Kliment Yanev", url = "http://github.com/kliment/Printrun/", license = "GPLv3", data_files = data_files, packages = find_packages(), scripts = ["pronsole.py", "pronterface.py", "plater.py", "printcore.py"], cmdclass = cmdclass, ext_modules = extensions, classifiers=["Programming Language :: Python :: 3 :: Only"], ) Printrun-printrun-2.0.0rc5/setup_win.py000066400000000000000000000012121325617007000202070ustar00rootroot00000000000000from distutils.core import setup setup(windows = [{"script": "pronterface.py", "icon_resources": [(1, "P-face.ico")]}, {"script": "plater.py", "icon_resources": [(1, "plater.ico")]}, ], console = [{"script": "pronsole.py", "icon_resources": [(1, "pronsole.ico")]}, ], options = {"py2exe": {"bundle_files": 1, "dll_excludes": ["w9xpopen.exe"], "compressed": 1, "excludes": ['_ssl', 'pickle', 'calendar', 'Tkconstants', 'Tkinter', 'tcl', 'email'] } } ) Printrun-printrun-2.0.0rc5/testfiles/000077500000000000000000000000001325617007000176265ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/testfiles/PCB-milling-and-(comment).gcode000066400000000000000000000021131325617007000252040ustar00rootroot00000000000000(Created by G-code exporter) (Fri Apr 27 22:20:09 2012) (Board size: 100.00 x 130.00 mm) (---------------------------------) G21 G90 G0 X14.392 Y30.94113 Z1. G4 M104 S255 G1 Z-0.2 F60 G1 X14.05334 Y30.60247 G1 X12.02134 Y30.60247 G1 X11.598 Y30.85647 G1 X11.00534 Y31.5338 G1 X10.074 Y32.5498 G1 X9.98933 Y34.41247 G0 Z1. (RepRap Gen7 v1.4) G0 Z1. (R) G0 X9.9753 Y6.9723 G1 Z-0.20 F60 G1 X11.4761 Y6.9723 F250 G1 X11.8514 Y6.5971 G1 X11.8514 Y5.8467 G1 X11.4761 Y5.4715 G1 X10.3505 Y5.4715 G1 X11.8514 Y3.9456 G0 Z1. G0 X10.3505 Y6.9723 G1 Z-0.20 F60 G1 X10.3505 Y3.9456 F250 G0 Z1. (e) G0 X12.7519 Y4.696 G1 Z-0.20 F60 G1 X14.2778 Y4.696 F250 G1 X14.2778 Y5.0962 G1 X13.9025 Y5.4715 G1 X13.1271 Y5.4715 G1 X12.7519 Y5.0962 G1 X12.7519 Y4.3208 G1 X13.1271 Y3.9456 G1 X14.2778 Y3.9456 G0 Z1. (p) G0 X15.5535 Y2.8199 G1 Z-0.20 F60 G1 X15.5535 Y5.0962 F250 G1 X15.1783 Y5.4715 G1 X15.5535 Y5.0962 G1 X15.9287 Y5.4715 G1 X16.6792 Y5.4715 G1 X17.0544 Y5.0962 G1 X17.0544 Y4.3208 G1 X16.6792 Y3.9456 G1 X15.9287 Y3.9456 G1 X15.5535 Y4.3208 G0 Z1. G4 M104 S0 (tool change position) G1 X2. Y2. Z40. F400 M2 Printrun-printrun-2.0.0rc5/testfiles/belt_pulley3.skeinforge.large.svg000066400000000000000000004316041325617007000262060ustar00rootroot00000000000000 belt_pulley3.stl - Slice Layers Layer 0, z:-1.8 Layer 1, z:-1.4 Layer 2, z:-1.0 Layer 3, z:-0.6 Layer 4, z:-0.2 Layer 5, z:0.2 Layer 6, z:0.6 Layer 7, z:1.0 Layer 8, z:1.4 Layer 9, z:1.8 Layer 10, z:2.2 Layer 11, z:2.6 Layer 12, z:3.0 Layer 13, z:3.4 Layer 14, z:3.8 Layer 15, z:4.2 Layer 16, z:4.6 Layer 17, z:5.0 Layer 18, z:5.4 Layer 19, z:5.8 Layer 20, z:6.2 Layer 21, z:6.6 Layer 22, z:7.0 Layer 23, z:7.4 Layer 24, z:7.8 Layer 25, z:8.2 Layer 26, z:8.6 Layer 27, z:9.0 Layer 28, z:9.4 Layer 29, z:9.8 Latitude < > Longitude < > Scale 1 < > Min X: -11.919 mm Y: -11.919 mm Z: -2.0 mm Max X: 11.919 mm Y: 11.919 mm Z: 10.0 mm Dimension X: 23.838 mm Y: 23.838 mm Z: 12.0 mm Statistics Layer Height: 0.4 mm Number of Layers: 30 Volume: 1.8836 cm3 Y X 0 1 Layer < > Scale 1 < > Min X: -11.919 mm Y: -11.919 mm Z: -2.0 mm Max X: 11.919 mm Y: 11.919 mm Z: 10.0 mm Dimension X: 23.838 mm Y: 23.838 mm Z: 12.0 mm Statistics Layer Height: 0.4 mm Number of Layers: 30 Volume: 1.8836 cm3 Y X Scale : 1 < > Min X: -11.919 mm Y: -11.919 mm Z: -2.0 mm Max X: 11.919 mm Y: 11.919 mm Z: 10.0 mm Dimension X: 23.838 mm Y: 23.838 mm Z: 12.0 mm Statistics Layer Height: 0.4 mm Number of Layers: 30 Volume: 1.8836 cm3 [Iso View] Iso View [Layer View] Layer View [Scroll View] Scroll View Printrun-printrun-2.0.0rc5/testfiles/belt_pulley3.skeinforge.small.svg000066400000000000000000000660211325617007000262210ustar00rootroot00000000000000 belt_pulley3.stl - Slice Layers Layer 0, z:-1.8 Layer 1, z:-1.4 Latitude < > Longitude < > Scale 1 < > Min X: -11.919 mm Y: -11.919 mm Z: -2.0 mm Max X: 11.919 mm Y: 11.919 mm Z: 10.0 mm Dimension X: 23.838 mm Y: 23.838 mm Z: 12.0 mm Statistics Layer Height: 0.4 mm Number of Layers: 30 Volume: 1.8836 cm3 Y X 0 1 Layer < > Scale 1 < > Min X: -11.919 mm Y: -11.919 mm Z: -2.0 mm Max X: 11.919 mm Y: 11.919 mm Z: 10.0 mm Dimension X: 23.838 mm Y: 23.838 mm Z: 12.0 mm Statistics Layer Height: 0.4 mm Number of Layers: 30 Volume: 1.8836 cm3 Y X Scale : 1 < > Min X: -11.919 mm Y: -11.919 mm Z: -2.0 mm Max X: 11.919 mm Y: 11.919 mm Z: 10.0 mm Dimension X: 23.838 mm Y: 23.838 mm Z: 12.0 mm Statistics Layer Height: 0.4 mm Number of Layers: 30 Volume: 1.8836 cm3 [Iso View] Iso View [Layer View] Layer View [Scroll View] Scroll View Printrun-printrun-2.0.0rc5/testfiles/belt_pulley3.slic3r.large.svg000066400000000000000000030157371325617007000252610ustar00rootroot00000000000000 Printrun-printrun-2.0.0rc5/testfiles/belt_pulley3.slic3r.small.svg000066400000000000000000000156321325617007000252660ustar00rootroot00000000000000 Printrun-printrun-2.0.0rc5/testfiles/grid.svg000066400000000000000000000052671325617007000213060ustar00rootroot00000000000000 Printrun-printrun-2.0.0rc5/testfiles/out.3dlp.zip000066400000000000000000012034201325617007000220240ustar00rootroot00000000000000PK }”К@œЂd›XX 00000.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK }”К@œЂd›XX 00001.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00002.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00003.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00004.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00005.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00006.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00007.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00008.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00009.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00010.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œЂd›XX 00011.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@XйŠ\\ 00012.bmpBM >( X  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœM1џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@œgwqll 00013.bmpBM >( X.  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœlџџœmџџœmџџœnџџœnџџœnџџœnџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœoџџœnџџœnџџœnџџœmџџœmџџœmџџœlџџœlџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœA %џџœC'џџœE)џџœH,џџœM1џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@uj‹oxx 00014.bmpBM >( X:  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœmџџœnџџœoџџœoџџœpџџœpџџœpџџœqџџœqџџœqџџœrџџœrџџœrџџœrџџœrџџœsџџœsџџœsџџœsџџœsџџœsџџœsџџœrџџœrџџœrџџœrџџœrџџœrџџœqџџœqџџœqџџœpџџœpџџœoџџœoџџœnџџœnџџœmџџœlџџœlџџœkџџœkџџœkџџœkџџœkџџœ;,џџœ=) џџœ>&"џџœ@"$џџœA %џџœD(џџœF*џџœJ.џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@йќб„„ 00015.bmpBM >( XF  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœnџџœoџџœpџџœpџџœqџџœqџџœrџџœrџџœsџџœsџџœtџџœtџџœtџџœtџџœuџџœuџџœuџџœuџџœuџџœuџџœvџџœvџџœvџџœvџџœvџџœuџџœuџџœuџџœuџџœuџџœuџџœuџџœtџџœtџџœtџџœsџџœsџџœsџџœrџџœrџџœqџџœpџџœpџџœoџџœoџџœnџџœmџџœlџџœkџџœ74џџœ82џџœ90џџœ:.џџœ<* џџœ=(!џџœ?$#џџœA %џџœC'џџœF*џџœK .џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@ППV 00016.bmpBM >( XR  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœoџџœpџџœqџџœqџџœrџџœsџџœsџџœtџџœtџџœuџџœuџџœuџџœvџџœvџџœvџџœwџџœwџџœwџџœwџџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœx џџœwџџœwџџœwџџœwџџœvџџœvџџœvџџœuџџœuџџœtџџœtџџœsџџœsџџœrџџœrџџœqџџœpџџœoџџœoџџœ3<џџœ4:џџœ58џџœ66џџœ82џџœ90џџœ:.џџœ<* џџœ=(!џџœ?$#џџœB&џџœD(џџœH,џџœO3џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@‡љ^˜˜ 00017.bmpBM >( XZ  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœoџџœpџџœqџџœrџџœsџџœsџџœtџџœuџџœuџџœvџџœvџџœwџџœwџџœwџџœx џџœx џџœx џџœy џџœy џџœy џџœy џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœz џџœy џџœy џџœy џџœy џџœx џџœx џџœx џџœwџџœwџџœvџџœvџџœuџџœuџџœtџџœtџџœsџџœrџџœqџџœ0Bџџœ1@џџœ2>џџœ3<џџœ4:џџœ58џџœ74џџœ82џџœ90џџœ;,џџœ=(!џџœ?%"џџœA %џџœC'џџœG+џџœL 0џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@ѓДаП   00018.bmpBM >( Xb  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœoџџœpџџœqџџœrџџœsџџœtџџœtџџœuџџœvџџœvџџœwџџœwџџœx џџœx џџœy џџœy џџœz џџœz џџœz џџœz џџœ{ џџœ{ џџœ{ џџœ{ џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ| џџœ{ џџœ{ џџœ{ џџœ{ џџœz џџœz џџœz џџœy џџœy џџœx џџœx џџœwџџœwџџœvџџœvџџœuџџœuџџœtџџœ.Fџџœ/Dџџœ0Bџџœ1Aџџœ2?џџœ3=џџœ4:џџœ58џџœ66џџœ74џџœ90џџœ:.џџœ<* џџœ>&"џџœA %џџœC'џџœG+џџœM1џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@гёАaЄЄ 00019.bmpBM >( Xf  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœpџџœqџџœrџџœrџџœsџџœtџџœuџџœvџџœvџџœwџџœx џџœx џџœy џџœy џџœz џџœz џџœ{ џџœ{ џџœ{ џџœ| џџœ| џџœ| џџœ}џџœ}џџœ}џџœ}џџœ}џџœ}џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ}џџœ}џџœ}џџœ}џџœ}џџœ| џџœ| џџœ| џџœ{ џџœ{ џџœ{ џџœz џџœz џџœy џџœy џџœx џџœx џџœwџџœwџџœvџџœ,Jџџœ-Hџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ2>џџœ3<џџœ58џџœ66џџœ74џџœ90џџœ;,џџœ<* џџœ?$#џџœA %џџœD(џџœH,џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@ш’ ЌЌ 00020.bmpBM >( Xn  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœpџџœqџџœrџџœsџџœtџџœtџџœuџџœvџџœwџџœwџџœx џџœy џџœy џџœz џџœz џџœ{ џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ}џџœ~џџœ~џџœ~џџœ~џџœ~џџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœ~џџœ~џџœ~џџœ~џџœ}џџœ}џџœ}џџœ| џџœ| џџœ{ џџœ{ џџœ{ џџœz џџœy џџœy џџœx џџœx џџœ*Nџџœ+Lџџœ,Kџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ2>џџœ3<џџœ58џџœ66џџœ82џџœ90џџœ;,џџœ=(!џџœ@"$џџœB&џџœF*џџœK /џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK €”К@кr)АА 00021.bmpBM >( Xr  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœmџџœnџџœoџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœx џџœy џџœz џџœz џџœ{ џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ~џџœ~џџœ~џџœџџœџџœџџœџџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœџџœџџœџџœџџœџџœџџœџџœџџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœџџœџџœџџœџџœ~џџœ~џџœ~џџœ}џџœ}џџœ| џџœ| џџœ{ џџœ{ џџœz џџœz џџœy џџœ)Q џџœ)P џџœ*Nџџœ+Lџџœ,Kџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ3<џџœ4:џџœ58џџœ74џџœ91џџœ:.џџœ<* џџœ?$#џџœA %џџœE)џџœI-џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@U}6ДД 00022.bmpBM >( Xv  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ{ џџœ| џџœ}џџœ}џџœ}џџœ~џџœ~џџœџџœџџœџџœ€џџœ€џџœ€џџœџџœџџœџџœџџœџџœџџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœџџœџџœџџœџџœџџœџџœ€џџœ€џџœ€џџœ€џџœџџœџџœ~џџœ~џџœ~џџœ}џџœ}џџœ| џџœ| џџœ{ џџœz џџœ'T џџœ(R џџœ)Q џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ2>џџœ3<џџœ58џџœ66џџœ82џџœ:.џџœ<* џџœ>&"џџœA %џџœD(џџœI-џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@ЙИИ 00023.bmpBM >( Xz  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœoџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœy џџœz џџœ{ џџœ{ џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœџџœ€џџœ€џџœ€џџœџџœџџœџџœџџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœџџœџџœџџœџџœ€џџœ€џџœџџœџџœџџœ~џџœ~џџœ}џџœ}џџœ| џџœ| џџœ&V џџœ'T џџœ'T џџœ(R џџœ)P џџœ*Nџџœ+Mџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ1@џџœ2>џџœ3<џџœ58џџœ66џџœ82џџœ:.џџœ<* џџœ>&"џџœA %џџœD(џџœI-џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@эГŠММ 00024.bmpBM >( X~  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœoџџœpџџœqџџœrџџœsџџœuџџœuџџœvџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœџџœ‚џџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœ‚џџœџџœџџœџџœ€џџœ€џџœ€џџœџџœџџœ~џџœ~џџœ}џџœ}џџœ%X џџœ&V џџœ&V џџœ'T џџœ(R џџœ)P џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ1@џџœ2>џџœ3<џџœ58џџœ66џџœ82џџœ:.џџœ<* џџœ>&"џџœA %џџœE)џџœJ.џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@Ў[RњРР 00025.bmpBM >( X‚  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœmџџœnџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ| џџœ| џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœ€џџœџџœџџœ‚џџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœџџœџџœџџœ€џџœ€џџœџџœџџœ~џџœ~џџœ}џџœ$Zџџœ%X џџœ&V џџœ&V џџœ'T џџœ(R џџœ)P џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ0Bџџœ1@џџœ2>џџœ4;џџœ58џџœ74џџœ91џџœ;-џџœ=(!џџœ?$#џџœB&џџœF*џџœN2џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@иОл/ЎЎ 00026.bmpBM >( Xp  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœnџџœoџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ| џџœ| џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœџџœџџœ€џџœ€џџœџџœџџœ~џџœ~џџœ$Zџџœ$Zџџœ%X џџœ&V џџœ&V џџœ'T џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ3<џџœ4:џџœ66џџœ74џџœ90џџœ;,џџœ>&"џџœA %џџœD(џџœI-џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@˜š3ЂЂ 00027.bmpBM >( Xd  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœmџџœoџџœpџџœqџџœrџџœtџџœuџџœvџџœwџџœx џџœx џџœy џџœz џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ„џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœџџœџџœ€џџœ€џџœџџœџџœ~џџœ#\џџœ$Zџџœ%X џџœ%X џџœ&V џџœ'T џџœ(S џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ1@џџœ2>џџœ3<џџœ58џџœ74џџœ90џџœ;,џџœ=(!џџœ@##џџœC'џџœG+џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@IЮНЕžž 00028.bmpBM >( X`  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœoџџœpџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ| џџœ| џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ„џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœџџœџџœџџœ€џџœ€џџœџџœџџœ#\џџœ$Zџџœ$Zџџœ%X џџœ&V џџœ&V џџœ'T џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ2>џџœ3<џџœ58џџœ66џџœ82џџœ:.џџœ<* џџœ?$#џџœB&џџœF*џџœMџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџPK ”К@ДЩЬ(œœ 00029.bmpBM >( X^  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœnџџœoџџœpџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœ€џџœ€џџœ€џџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœџџœџџœ€џџœ€џџœџџœџџœ#\џџœ$Zџџœ$Zџџœ%X џџœ&V џџœ&V џџœ'T џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ2?џџœ3<џџœ4:џџœ66џџœ82џџœ:.џџœ<* џџœ?$#џџœB&џџœE)џџœL џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџPK ”К@kїУЎœœ 00030.bmpBM >( X^  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœnџџœoџџœpџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœџџœџџœџџœ€џџœ€џџœџџœџџœ#\џџœ$Zџџœ$Zџџœ%X џџœ&V џџœ&V џџœ'T џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ2>џџœ3<џџœ59џџœ66џџœ82џџœ:.џџœ<* џџœ?$#џџœB&џџœF*џџœL џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџPK ”К@eKЅZ   00031.bmpBM >( Xb  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœoџџœpџџœqџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœy џџœz џџœ{ џџœ| џџœ| џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœџџœџџœ€џџœ€џџœџџœџџœ~џџœ#\џџœ$Zџџœ$Zџџœ%X џџœ&V џџœ'T џџœ'T џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ1Aџџœ2>џџœ3<џџœ58џџœ75џџœ82џџœ:.џџœ=(!џџœ?$#џџœB&џџœF*џџœOџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџPK ”К@ю vЈЈ 00032.bmpBM >( Xj  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœmџџœnџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœy џџœz џџœ{ џџœ{ џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ…џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœџџœџџœџџœ€џџœ€џџœџџœџџœ~џџœ$Zџџœ$Zџџœ%X џџœ&W џџœ&V џџœ'T џџœ(R џџœ)P џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ/Eџџœ0Bџџœ1@џџœ2>џџœ4:џџœ58џџœ74џџœ90џџœ;,џџœ=(!џџœ@"$џџœD'џџœH,џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@ь\2•РР 00033.bmpBM >( X‚  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœoџџœpџџœqџџœsџџœtџџœuџџœvџџœwџџœx џџœx џџœy џџœz џџœ{ џџœ{ џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœџџœџџœџџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœџџœџџœ€џџœ€џџœ€џџœџџœџџœ~џџœ~џџœ$Zџџœ%X џџœ%X џџœ&V џџœ'T џџœ(S џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ2>џџœ3<џџœ58џџœ66џџœ82џџœ:.џџœ<* џџœ?$#џџœB&џџœE)џџœK /џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@ƒЃљщММ 00034.bmpBM >( X~  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœnџџœoџџœpџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœx џџœy џџœz џџœ{ џџœ{ џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœ€џџœџџœџџœ‚џџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœ„џџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœ‚џџœџџœџџœџџœ€џџœ€џџœџџœџџœ~џџœ~џџœ}џџœ}џџœ%X џџœ%X џџœ&V џџœ'T џџœ(S џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ3<џџœ4:џџœ66џџœ74џџœ90џџœ;,џџœ>&"џџœ@"$џџœD(џџœH,џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@'Kѕ*ИИ 00035.bmpBM >( Xz  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœmџџœnџџœoџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœx џџœx џџœy џџœz џџœ{ џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœ€џџœ€џџœ€џџœџџœџџœџџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœƒџџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœџџœџџœџџœџџœ€џџœ€џџœџџœџџœџџœ~џџœ~џџœ}џџœ}џџœ| џџœ&V џџœ&V џџœ'T џџœ(R џџœ(R џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ3<џџœ4:џџœ67џџœ74џџœ90џџœ;,џџœ=(!џџœ@"$џџœC'џџœG+џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@ŒIу ИИ 00036.bmpBM >( Xz  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœnџџœoџџœpџџœrџџœsџџœtџџœuџџœvџџœvџџœwџџœx џџœy џџœy џџœz џџœ{ џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ~џџœ~џџœџџœџџœџџœ€џџœ€џџœ€џџœџџœџџœџџœџџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœ‚џџœџџœџџœџџœџџœџџœ€џџœ€џџœ€џџœџџœџџœ~џџœ~џџœ~џџœ}џџœ}џџœ| џџœ| џџœ{ џџœ'T џџœ'T џџœ(R џџœ)P џџœ*Nџџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ3<џџœ4:џџœ66џџœ74џџœ90џџœ;,џџœ=(!џџœ@"$џџœC'џџœG*џџœN2џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@њоЄŽДД 00037.bmpBM >( Xv  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœoџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœwџџœx џџœy џџœz џџœz џџœ{ џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ~џџœ~џџœ~џџœџџœџџœџџœ€џџœ€џџœ€џџœ€џџœ€џџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœџџœ€џџœ€џџœ€џџœ€џџœџџœџџœџџœџџœ~џџœ~џџœ}џџœ}џџœ| џџœ| џџœ{ џџœ{ џџœz џџœz џџœ(R џџœ)P џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ-Hџџœ.Fџџœ/Eџџœ0Bџџœ1@џџœ2>џџœ3<џџœ59џџœ66џџœ82џџœ90џџœ;,џџœ=(!џџœ@"$џџœC'џџœG+џџœN2џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ”К@xъЌЌ 00038.bmpBM >( Xn  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœmџџœnџџœoџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœwџџœwџџœx џџœy џџœy џџœz џџœz џџœ{ џџœ{ џџœ| џџœ| џџœ}џџœ}џџœ}џџœ~џџœ~џџœ~џџœџџœџџœџџœџџœџџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœ€џџœџџœџџœџџœџџœџџœ~џџœ~џџœ~џџœ~џџœ}џџœ}џџœ| џџœ| џџœ| џџœ{ џџœ{ џџœz џџœz џџœy џџœx џџœ)P џџœ*Nџџœ+Lџџœ,Jџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ3<џџœ4:џџœ58џџœ74џџœ82џџœ:.џџœ<* џџœ>&"џџœA %џџœD(џџœH,џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@7е%AЈЈ 00039.bmpBM >( Xj  џџџ†џџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœkџџœlџџœmџџœnџџœoџџœpџџœqџџœrџџœsџџœtџџœuџџœvџџœvџџœwџџœx џџœx џџœy џџœy џџœz џџœz џџœ{ џџœ{ џџœ| џџœ| џџœ| џџœ}џџœ}џџœ}џџœ}џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœџџœџџœџџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ~џџœ}џџœ}џџœ}џџœ}џџœ| џџœ| џџœ| џџœ{ џџœ{ џџœ{ џџœz џџœz џџœy џџœx џџœx џџœwџџœwџџœ+Lџџœ,Jџџœ-Hџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1@џџœ2>џџœ4:џџœ58џџœ66џџœ82џџœ90џџœ;,џџœ=(!џџœ?$#џџœB&џџœE)џџœJ.џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@Rлw 00040.bmpBM >( Xж  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœJ.џџœE)џџœB&џџœ@"$џџœ=(!џџœ;,џџœ:.џџœ82џџœ74џџœ58џџœ4:џџœ3<џџœ2>џџœ1@џџœ0Bџџœ/Dџџœ.Fџџœ-Hџџœ-Hџџœ,Jџџœ+Lџџœ+Lџџœ*Nџџœ*O џџœ)P џџœ(R џџœ(R џџœ(R џџœ'T џџœ'T џџœ&V џџœ&V џџœ&V џџœ&V џџœ%X џџœ%X џџœ%X џџœ%X џџœ%X џџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ$Zџџœ%Yџџœ%X џџœ%X џџœ%X џџœ%X џџœ%X џџœ&V џџœ&V џџœ&V џџœ'T џџœ'T џџœ'T џџœ(R џџœ(R џџœ)P џџœ)P џџœ*Nџџœ*Nџџœ+Lџџœ,Jџџœ,Jџџœ-Hџџœ.Fџџœ/Dџџœ0Bџџœ1Aџџœ2?џџœ3<џџœ4:џџœ58џџœ66џџœ82џџœ90џџœ;,џџœ=(!џџœ?$#џџœA %џџœD(џџœH,џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@Kœ­G 00041.bmpBM >( XЪ  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœI-џџœE)џџœB&џџœ@##џџœ=(!џџœ<* џџœ:.џџœ82џџœ74џџœ66џџœ58џџœ3<џџœ2>џџœ1@џџœ1@џџœ0Bџџœ/Dџџœ.Fџџœ-Hџџœ-Hџџœ,Jџџœ,Jџџœ+Lџџœ+Mџџœ*Nџџœ*Nџџœ)P џџœ)P џџœ(R џџœ(R џџœ(R џџœ'T џџœ'T џџœ'T џџœ'T џџœ'T џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ&V џџœ'U џџœ'T џџœ'T џџœ'T џџœ'T џџœ(R џџœ(R џџœ(R џџœ)P џџœ)P џџœ)P џџœ*Nџџœ*Nџџœ+Lџџœ+Lџџœ,Jџџœ-Hџџœ-Hџџœ.Fџџœ/Dџџœ/Dџџœ0Bџџœ1@џџœ2>џџœ3<џџœ4:џџœ58џџœ74џџœ82џџœ90џџœ;,џџœ=(!џџœ?$#џџœA %џџœD(џџœH,џџœO3џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@4‡Џ4єє 00042.bmpBM >( XЖ  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœJ.џџœF*џџœC'џџœ@"$џџœ>&"џџœ<* џџœ;,џџœ90џџœ82џџœ74џџœ58џџœ4:џџœ3<џџœ2>џџœ2>џџœ1@џџœ0Bџџœ/Dџџœ/Dџџœ.Fџџœ-Hџџœ-Hџџœ,Jџџœ,Jџџœ+Lџџœ+Lџџœ+Lџџœ*Nџџœ*Nџџœ*Nџџœ)P џџœ)P џџœ)P џџœ)P џџœ)Q џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ(R џџœ)P џџœ)P џџœ)P џџœ)P џџœ*O џџœ*Nџџœ*Nџџœ*Nџџœ+Lџџœ+Lџџœ,Jџџœ,Jџџœ-Hџџœ-Hџџœ.Fџџœ.Fџџœ/Dџџœ0Bџџœ1Aџџœ1@џџœ2>џџœ3<џџœ4:џџœ58џџœ66џџœ74џџœ90џџœ:.џџœ<* џџœ=(!џџœ?$#џџœB&џџœD(џџœH,џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@Цkqфф 00043.bmpBM >( XІ  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœM1џџœG+џџœD(џџœA %џџœ?$#џџœ>'!џџœ<* џџœ:.џџœ90џџœ82џџœ74џџœ66џџœ58џџœ4:џџœ3<џџœ2>џџœ2?џџœ1@џџœ0Bџџœ0Bџџœ/Dџџœ/Eџџœ.Fџџœ.Fџџœ-Hџџœ-Hџџœ,Jџџœ,Jџџœ,Jџџœ,Kџџœ+Lџџœ+Lџџœ+Lџџœ+Lџџœ+Lџџœ+Mџџœ*Nџџœ*Nџџœ*Nџџœ*Nџџœ*Nџџœ+Mџџœ+Lџџœ+Lџџœ+Lџџœ+Lџџœ+Lџџœ+Lџџœ,Jџџœ,Jџџœ,Jџџœ-Hџџœ-Hџџœ-Hџџœ.Fџџœ.Fџџœ/Dџџœ/Dџџœ0Bџџœ1@џџœ1@џџœ2>џџœ3<џџœ4;џџœ4:џџœ58џџœ66џџœ74џџœ90џџœ:.џџœ;,џџœ=(!џџœ?$#џџœA %џџœC'џџœF*џџœJ.џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@GК•ЗЬЬ 00044.bmpBM >( XŽ  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœK /џџœG+џџœD(џџœA %џџœ@##џџœ>&"џџœ<* џџœ;,џџœ:.џџœ90џџœ82џџœ74џџœ66џџœ58џџœ4:џџœ3<џџœ3<џџœ2>џџœ2>џџœ1@џџœ1Aџџœ0Bџџœ0Bџџœ/Dџџœ/Dџџœ/Dџџœ.Fџџœ.Fџџœ.Fџџœ.Fџџœ.Gџџœ-Hџџœ-Hџџœ-Hџџœ-Hџџœ-Hџџœ-Hџџœ-Hџџœ-Hџџœ-Hџџœ-Hџџœ.Fџџœ.Fџџœ.Fџџœ.Fџџœ/Eџџœ/Dџџœ/Dџџœ0Cџџœ0Bџџœ0Bџџœ1@џџœ1@џџœ2>џџœ3=џџœ3<џџœ4:џџœ58џџœ58џџœ66џџœ74џџœ82џџœ90џџœ;-џџœ<* џџœ=(!џџœ?$#џџœA %џџœC'џџœF)џџœI-џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@EiёœДД 00045.bmpBM >( Xv  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœL 0џџœH,џџœE)џџœC&џџœA %џџœ?$#џџœ>&"џџœ<* џџœ;,џџœ:.џџœ90џџœ82џџœ74џџœ74џџœ66џџœ58џџœ58џџœ4:џџœ4:џџœ3<џџœ3<џџœ2>џџœ2>џџœ2>џџœ1@џџœ1@џџœ1@џџœ1@џџœ1@џџœ0Bџџœ0Bџџœ0Bџџœ0Bџџœ0Bџџœ0Bџџœ0Bџџœ1Aџџœ1@џџœ1@џџœ1@џџœ1@џџœ2?џџœ2>џџœ2>џџœ3<џџœ3<џџœ3<џџœ4:џџœ4:џџœ58џџœ66џџœ66џџœ74џџœ82џџœ90џџœ:.џџœ;,џџœ<* џџœ=(!џџœ?%"џџœ@"$џџœB&џџœD(џџœG*џџœJ.џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@QќЄC”” 00046.bmpBM >( XV  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœK /џџœG+џџœE)џџœC'џџœA %џџœ@"$џџœ?%"џџœ=(!џџœ<* џџœ;,џџœ;,џџœ:.џџœ90џџœ82џџœ82џџœ74џџœ74џџœ66џџœ66џџœ66џџœ58џџœ58џџœ58џџœ59џџœ4:џџœ4:џџœ4:џџœ4:џџœ4:џџœ4:џџœ4:џџœ4:џџœ4:џџœ59џџœ58џџœ58џџœ58џџœ58џџœ66џџœ66џџœ74џџœ74џџœ82џџœ82џџœ90џџœ:/џџœ:.џџœ;,џџœ<* џџœ=(!џџœ>&"џџœ?$#џџœA %џџœB&џџœD(џџœF*џџœJ-џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@8еStt 00047.bmpBM >( X6  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœP4џџœJ.џџœG+џџœE)џџœD(џџœB&џџœA %џџœ@"$џџœ?$#џџœ>&"џџœ=(!џџœ=(!џџœ<* џџœ;,џџœ;,џџœ;-џџœ:.џџœ:.џџœ:/џџœ90џџœ90џџœ90џџœ90џџœ90џџœ90џџœ90џџœ90џџœ90џџœ90џџœ90џџœ90џџœ:.џџœ:.џџœ:.џџœ;,џџœ;,џџœ<* џџœ<* џџœ=(!џџœ>&"џџœ?$#џџœ@##џџœA %џџœB&џџœC'џџœE)џџœG*џџœI-џџœM1џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@dЅїС@@ 00048.bmpBM >( X  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœK /џџœI-џџœG+џџœF*џџœE(џџœD'џџœC'џџœB&џџœA %џџœA %џџœ@"$џџœ@"$џџœ@"$џџœ?$#џџœ?$#џџœ?$#џџœ?$#џџœ?$#џџœ?$#џџœ?$#џџœ?$#џџœ?$#џџœ?$#џџœ@"$џџœ@"$џџœA %џџœA %џџœB&џџœB&џџœC'џџœD(џџœE)џџœG+џџœH,џџœJ.џџœN2џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK ‚”К@kИьь 00049.bmpBM >( XЎ  џџџ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœO3џџœM1џџœL 0џџœK /џџœJ.џџœJ.џџœJ.џџœJ-џџœJ-џџœJ.џџœJ.џџœK .џџœK /џџœL 0џџœN2џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœ†џџœџџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#џџџ#PK }”К@œЂd›XX 00000.bmpPK }”К@œЂd›XX 00001.bmpPK €”К@œЂd›XX ў200002.bmpPK €”К@œЂd›XX }L00003.bmpPK €”К@œЂd›XX ќe00004.bmpPK €”К@œЂd›XX {00005.bmpPK €”К@œЂd›XX њ˜00006.bmpPK €”К@œЂd›XX yВ00007.bmpPK €”К@œЂd›XX јЫ00008.bmpPK €”К@œЂd›XX wх00009.bmpPK €”К@œЂd›XX іў00010.bmpPK €”К@œЂd›XX u00011.bmpPK €”К@XйŠ\\ є100012.bmpPK €”К@œgwqll wK00013.bmpPK €”К@uj‹oxx e00014.bmpPK €”К@йќб„„ Љ~00015.bmpPK €”К@ППV T˜00016.bmpPK €”К@‡љ^˜˜ В00017.bmpPK €”К@ѓДаП   ЪЫ00018.bmpPK €”К@гёАaЄЄ ‘х00019.bmpPK €”К@ш’ ЌЌ \џ00020.bmpPK €”К@кr)АА /00021.bmpPK ”К@U}6ДД 300022.bmpPK ”К@ЙИИ сL00023.bmpPK ”К@эГŠММ Рf00024.bmpPK ”К@Ў[RњРР Ѓ€00025.bmpPK ”К@иОл/ЎЎ Šš00026.bmpPK ”К@˜š3ЂЂ _Д00027.bmpPK ”К@IЮНЕžž (Ю00028.bmpPK ”К@ДЩЬ(œœ эч00029.bmpPK ”К@kїУЎœœ А00030.bmpPK ”К@eKЅZ   s00031.bmpPK ”К@ю vЈЈ :500032.bmpPK ”К@ь\2•РР O00033.bmpPK ”К@ƒЃљщММ №h00034.bmpPK ”К@'Kѕ*ИИ г‚00035.bmpPK ”К@ŒIу ИИ Вœ00036.bmpPK ”К@њоЄŽДД ‘Ж00037.bmpPK ”К@xъЌЌ lа00038.bmpPK ‚”К@7е%AЈЈ ?ъ00039.bmpPK ‚”К@Rлw 00040.bmpPK ‚”К@Kœ­G I00041.bmpPK ‚”К@4‡Џ4єє x600042.bmpPK ‚”К@Цkqфф “O00043.bmpPK ‚”К@GК•ЗЬЬ žh00044.bmpPK ‚”К@EiёœДД ‘00045.bmpPK ‚”К@QќЄC”” lš00046.bmpPK ‚”К@8еStt 'Г00047.bmpPK ‚”К@dЅїС@@ ТЫ00048.bmpPK ‚”К@kИьь )ф00049.bmpPK22О <ќPrintrun-printrun-2.0.0rc5/testfiles/quick-test.gcode000066400000000000000000000053321325617007000227250ustar00rootroot00000000000000; THIS IS A TZST. DO NOT ATTZMPT TO PRINT THIS FILZ. ; gZnZratZd by Slic3r 0.9.3-dZv on 2012-09-02 at 04:02:31 ; layZr_hZight = 0.4 ; pZrimZtZrs = 3 ; solid_layZrs = 3 ; fill_dZnsity = 0.4 ; pZrimZtZr_spZZd = 30 ; infill_spZZd = 60 ; travZl_spZZd = 130 ; scalZ = 1 ; nozzlZ_diamZtZr = 0.5 ; filamZnt_diamZtZr = 3 ; Zxtrusion_multipliZr = 1 ; singlZ wall width = 0.53mm ; first layZr singlZ wall width = 0.80mm M104 S200 ; sZt tZmpZraturZ ;G28 ; homZ all axZs ;M109 S200 ; wait for tZmpZraturZ to bZ rZachZd G90 ; usZ absolutZ coordinatZs G21 ; sZt units to millimZtZrs G92 Z0 M82 ; usZ absolutZ distancZs for Zxtrusion G1 Z0.400 F71800.000 G1 X75.725 Y86.681 G1 F1800.000 Z1.00000 G1 X87.905 Y75.241 F1040.000 Z1.69560 G1 X88.365 Y74.871 Z1.72017 G1 X88.865 Y74.541 Z1.74511 G1 X89.395 Y74.261 Z1.77006 G1 X89.945 Y74.031 Z1.79488 G1 X90.225 Y73.931 Z1.80726 G1 X90.805 Y73.771 Z1.83230 G1 X92.375 Y73.501 Z1.89862 G1 X92.935 Y73.471 Z1.92196 G1 X109.165 Y73.961 Z2.59789 G1 X109.475 Y73.991 Z2.61085 G1 X110.105 Y74.101 Z2.63747 G1 X110.715 Y74.271 Z2.66383 G1 X111.795 Y74.681 Z2.71192 G1 X112.355 Y74.951 Z2.73780 G1 X112.875 Y75.271 Z2.76322 G1 X113.135 Y75.451 Z2.77638 G1 X113.615 Y75.841 Z2.80213 G1 X124.855 Y87.841 Z3.48656 G1 X125.485 Y88.631 Z3.52863 G1 X125.975 Y89.351 Z3.56488 G1 X126.385 Y90.111 Z3.60083 G1 X126.605 Y90.651 Z3.62510 G1 X126.775 Y91.201 Z3.64906 G1 X126.905 Y91.771 Z3.67340 G1 X126.975 Y92.341 Z3.69731 G1 X127.005 Y92.921 Z3.72148 G1 X126.325 Y109.851 Z4.42681 G1 X126.255 Y110.391 Z4.44947 G1 X126.145 Y110.921 Z4.47201 G1 X125.995 Y111.441 Z4.49453 G1 X125.805 Y111.951 Z4.51719 G1 X125.575 Y112.441 Z4.53972 G1 X125.165 Y113.131 Z4.57313 G1 X124.835 Y113.571 Z4.59603 G1 X124.485 Y113.971 Z4.61815 G1 X124.095 Y114.351 Z4.64082 G1 X123.885 Y114.531 Z4.65233 G1 X123.005 Y115.151 Z4.69715 G1 X122.525 Y115.401 Z4.71967 G1 X96.195 Y125.661 Z5.89600 G1 X95.515 Y125.881 Z5.92575 G1 X94.385 Y126.141 Z5.97402 G1 X91.335 Y126.551 Z6.10213 G1 X91.055 Y126.561 Z6.11379 G1 X90.775 Y126.561 Z6.12545 G1 X90.215 Y126.521 Z6.14882 G1 X89.375 Y126.371 Z6.18434 G1 X88.835 Y126.221 Z6.20767 G1 X88.305 Y126.021 Z6.23125 G1 X87.795 Y125.781 Z6.25471 G1 X87.075 Y125.341 Z6.28984 G1 X86.415 Y124.811 Z6.32507 G1 X75.155 Y112.801 Z7.01038 G1 X74.955 Y112.561 Z7.02339 G1 X74.595 Y112.041 Z7.04972 G1 X73.825 Y110.701 Z7.11405 G1 X73.695 Y110.441 Z7.12615 G1 X73.475 Y109.911 Z7.15004 G1 X73.305 Y109.361 Z7.17400 G1 X73.175 Y108.801 Z7.19794 G1 X73.095 Y108.231 Z7.22190 G1 X73.065 Y107.651 Z7.24607 G1 X73.615 Y91.111 Z7.93497 G1 X73.725 Y90.281 Z7.96982 G1 X73.785 Y90.011 Z7.98134 G1 X74.035 Y89.211 Z8.01623 G1 X74.255 Y88.701 Z8.03935 G1 X74.515 Y88.201 Z8.06281 G1 X74.815 Y87.731 Z8.08602 G1 X75.335 Y87.081 Z8.12067 G1 X75.640 Y86.766 Z8.13893 Printrun-printrun-2.0.0rc5/testtools/000077500000000000000000000000001325617007000176645ustar00rootroot00000000000000Printrun-printrun-2.0.0rc5/testtools/gcodeviewer.py000077500000000000000000000037361325617007000225550ustar00rootroot00000000000000#!/usr/bin/env python3 # This file is part of the Printrun suite. # # Printrun 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. # # Printrun is distributed in the hope that it will 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 Printrun. If not, see . import sys import os import logging logging.basicConfig(level=logging.INFO) import wx sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) from printrun.gcview import GcodeViewFrame from printrun import gcoder app = wx.App(redirect = False) build_dimensions = [200, 200, 100, -100, -100, 0] build_dimensions = [200, 200, 100, 0, 0, 0] frame = GcodeViewFrame(None, wx.ID_ANY, 'Gcode view, shift to move view, mousewheel to set layer', size = (800, 800), build_dimensions = build_dimensions) gcode = gcoder.GCode(open(sys.argv[1])) print("Gcode loaded") frame.addfile(gcode) first_move = None for i in range(len(gcode.lines)): if gcode.lines[i].is_move: first_move = gcode.lines[i] break last_move = None for i in range(len(gcode.lines) - 1, -1, -1): if gcode.lines[i].is_move: last_move = gcode.lines[i] break nsteps = 20 steptime = 50 lines = [first_move] \ + [gcode.lines[int(float(i) * (len(gcode.lines) - 1) / nsteps)] for i in range(1, nsteps)] + [last_move] current_line = 0 def setLine(): global current_line frame.set_current_gline(lines[current_line]) current_line = (current_line + 1) % len(lines) timer.Start() timer = wx.CallLater(steptime, setLine) timer.Start() frame.Show(True) app.MainLoop() app.Destroy()