pax_global_header00006660000000000000000000000064145355360040014517gustar00rootroot0000000000000052 comment=cd7014f42490ccd4f43267ac9075ff2f22a5dce9 qstardict/000077500000000000000000000000001453553600400130615ustar00rootroot00000000000000qstardict/.gitignore000066400000000000000000000002721453553600400150520ustar00rootroot00000000000000qstardict/qstardict translations/*.qm *.o *.so moc_*.cpp qrc_*.cpp ui_*.h Makefile .*.sw[a-z] CMakeLists.txt.user *.pro.user *-meta.h .DS_Store .qmake* *.dmg *.log *.json *.dylib *moc_* qstardict/.travis.yml000066400000000000000000000012541453553600400151740ustar00rootroot00000000000000language: c++ cache: ccache sudo: enabled os: - linux - osx dist: bionic osx_image: xcode10 before_script: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get update; sudo apt-get install -y cppcheck cmake extra-cmake-modules libkf5globalaccel-dev libkf5notifications-dev libkf5windowsystem-dev libx11-dev qt5-qmake qtbase5-dev qtbase5-private-dev qttools5-dev-tools libglib2.0-dev zlib1g-dev qt5-default; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install cppcheck qt5 glib; brew link --force qt5; fi script: - cppcheck -j1 --quiet -f --error-exitcode=2 -iplugins/stardict -iqxt . - qmake - make -j$(nproc || sysctl -n hw.ncpu) - sudo make install qstardict/AUTHORS000066400000000000000000000013271453553600400141340ustar00rootroot00000000000000Alexander Rodin The authors of the StarDict plugin: Hu Zheng Opera Wang Evgeniy Dushistov Rickard E. Faith The author of the SWAC plugin: Nicolas Vion The author of the Multitran plugin and KDE 4 plasmoid: Nick Shaforostoff QStarDict uses the Oxygen theme under Creative Common Attribution-ShareAlike 3.0 license taken from https://websvn.kde.org/trunk/KDE/kdelibs/pics/oxygen/?pathrev=688823 . The QStarDict icon is taken from an old revision of Oxygen Icons, originally it was committed to KDE SVN repository by Jeff Cooper . qstardict/COPYING000066400000000000000000001045151453553600400141220ustar00rootroot00000000000000 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 . qstardict/ChangeLog000066400000000000000000000113351453553600400146360ustar00rootroot00000000000000* Version 0.01 - initial release * Version 0.02 - add dictionary directories selection in settings dialog - redesign menus - add Oxygen icons - add "Save translation" action - add pop up window opacity item to settings dialog - rename actions - add .desktop file * Version 0.03 - fix bug when build fails on x86_64 - fix categories in .desktop file - add option "Show pop up only if modifier is pressed" in settings dialog - improve selection scanning - fix bug with closing window when it must hide - setting Qt 4.2 compitibility - add russian translation - add traditional chinese translation * Version 0.04 - add ukrainian translation - fix bug when popup window violates from desktop - add translations reformater - add popup window timeout before hide after mouse over to settings dialog - fix bug with "Up" buttons in settings dialog - add popup window default width and height items to settings dialog - change PopupWindow base class from QWidget to QFrame - add D-Bus support - make popup window resizable - add current translation title to main window header * Version 0.05 - fix bug with hard font-family in translation CSS - make popup window border more useful - fix bug with words list - add simplified chinese translation - fix bug with uncorrect displayed hierarchical lists - set to run only one instance of application - set to search for dictionaries recursively * Version 0.06 - add bulgarian translation - add speech support - fix bug with broken main window title when search is empty * Version 0.07 - add "translate" and "translateHtml" methods to D-Bus interface - change license from GPLv3 to GPLv2 * Version 0.08 - add czech translation - fix bug with multiple running from different users - add brazilian portuguese translation - update the traditional chinese translation - add support for configurable instant search - add support for separate translations * Version 0.09 - add polish translation - fix bug with instant search - add italian translation - fix bug with simlinks to dictionaries - add german translation - improve popup window - update the german translation - reorganize project - add basic Windows support - add plugins support - add toolbar to dictionary widget - add for links in translations (by pressing Ctrl and clicking on the word) - improve instant search - improve popup window - add support for closing popup by double click on toolbar * Version 0.10 - change tray icon if scanning disabled - add font editor - some improves and bugfixes * Version 0.11 - fix bug with bad source word - fix bug with removed last letter in translation * Version 0.12 - update italian translation - add support for popup window moving * Version 0.12.1 - fix critical bug with popup window * Version 0.12.2 - fix bug with building on Ubuntu Hardy * Version 0.12.3 - update simplified chinese translation * Version 0.12.4 - update polish translation * Version 0.12.5 - fix bug with main window title * Version 0.12.6 - update german translation * Version 0.12.7 - fix bug with empty speech cmd * Version 0.12.8 - add localization for standard Qt dialogs - add support for Escape key in main window - update ukrainian translation - update chinese translation - fix bug with speaker - remove alphabetical sorting of results - improve saving - add a tooltip for the tray icon * Version 0.12.9 - update german translation - fix typo in the COPYING filename * Version 0.13.0 - add french and turkish translation - improve Windows port - add SWAC and Multitran plugins - add command line support - improve the simplified chinese translation - fix bug with settings saving - improve D-Bus support - fix bug with Qt 4.5 * Version 0.13.1 - fix bugs with installation - add spanish translation - update italian and german translations * Version 0.13.2 - improve system tray support - improve the save dialog - updated the traditional chinese translation - added the lithuanian translation * Version 1.0 - search in dict widget - stabilized release after some months of usage * Version 1.0.1 - compilation fix for newer UNIX/Linux systems - fix for 'unsaved prefs' thanks to Robin 'cheese' Lee from Fedora Project * Version 1.1 - add support for showing translation by shortcut * Version 1.2 - Update libqxt * Version 1.3 - Fix KDE integration plugin * Version 1.4 - add a Kiwix plugin - add support for StarDict 3.x dictionaries - add support for HTML articles in StarDict dictionaries (Tom Hall) - support installation of dictionaries using the GUI - improve cross-article links in translations - improve support for HiDPI screens - drop Qt4 support - move "print" and "save to file" actions to plugins disabled by default - remove Anki and KDE plugins * Version 1.4.1 - update the contacts qstardict/Doxyfile000066400000000000000000001562471453553600400146060ustar00rootroot00000000000000# Doxyfile 1.5.5 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = qstardict # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = dev-doc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, # and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h *.cpp # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is enabled by default, which results in a transparent # background. Warning: Depending on the platform used, enabling this option # may lead to badly anti-aliased labels on the edges of a graph (i.e. they # become hard to read). DOT_TRANSPARENT = YES # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO qstardict/INSTALL000066400000000000000000000036631453553600400141220ustar00rootroot00000000000000Dependencies ============ In order to install QStarDict, it is necessary to install its dependencies. The dependencies: * Qt 5 (LGPLv3) https://doc.qt.io/qt-5/ * GLib (LGPL-2.1-or-later) https://docs.gtk.org/glib/ is used in the StarDict plugin * ZLib (License of ZLib) https://zlib.net/ is used in the StarDict plugin * LibZIM (GPLv2-or-later) https://openzim.org/wiki/Libzim is used in the Kiwix plugin * ESpeak (GPLv3-or-later) https://espeak.sourceforge.net/ is used for pronouncing words On systems based on Debian or Ubuntu all of the dependencies can be installed using the following command: sudo apt install build-essential \ qt5-qmake qtbase5-dev qtbase5-private-dev \ qttools5-dev-tools libx11-dev \ libglib2.0-dev zlib1g-dev \ libzim-dev \ espeak Building and installing QStarDict ================================= When the dependencies are installed, it is possible to build and install QStarDict using the following commands: qmake # to configure the project make # build sudo make install qmake switches ============== QStarDict consists of a core and plugins. There are the following plugins: * kiwix - adds support for Kiwix Wiktionary dictionaries * stardict - adds support for StarDict 2.x dictionaries * web - adds support for online web dictionaries * savetofile - adds a toolbar action for saving translations to files * print - adds a toolbar action for printing translations By default, all of these plugins are built, although not all of them are enabled by default. If you want to select only a subset of the plugins, add ENABLED_PLUGINS option to the invocation of qmake: qmake ENABLED_PLUGINS= In order to enable the developer mode for plugins, run qmake as qmake DEV=1 In order to install QStarDict to an install prefix other than /usr, run qmake as qmake INSTALL_PREFIX= qstardict/INSTALL.MACOS000066400000000000000000000015671453553600400147640ustar00rootroot00000000000000QStarDict for macOS is set to be built as a "bundle" application. Distributed packages should contain all required stuff to run out-of-the-box. All following notes are important for developers. BUILDING REQUIREMENTS: * Qt5 libraries/frameworks (tested with homebrew) * glib2 devel environment (tested with homebrew as well) * all other libraries are propably part of mac's OS CONFIRURE PHASE: qmake it will build qstardict and install it into /Applications (`make install` will be required) or: qmake INSTALL_PREFIX=/absolute/path/to/selected/dir it will build qstardict and install it into this location. The path *must* be absolute. Relative path will cause install problems. example: qmake INSTALL_PREFIX=/Users/pvanek/oss/qstardict/release MAKE PHASE: just run: make INSTALL PHASE: make install DEPLOY PHASE: make QStarDict.dmg qstardict/INSTALL.WINDOWS000066400000000000000000000005111453553600400152400ustar00rootroot00000000000000qmake params for Windows: GLIB2PATH - path to the Glib-2.x development environment (includes, ...) ZLIBPATH - path to the Zlib development environment (includes, ...) sample usage: qmake GLIB2PATH=d:\oss\glib\ ZLIBPATH=d:\oss\zlib\ Requirements: Glib2 development env. Glib2 runtime env. Zlib env. qstardict/README000066400000000000000000000005631453553600400137450ustar00rootroot00000000000000QStarDict is a dictionary application for learning foreign languages written using Qt. The main features: * Support of Kiwix dictionaries * Support of StarDict 2.x and 3.x dictionaries * Background mode * Showing translations for words selected by mouse in any application in a popup window * Pronuncation of words See the INSTALL file for installation instructions. qstardict/THANKS000066400000000000000000000034451453553600400140020ustar00rootroot00000000000000Thanks to: Petr Vanek who offered some improves and added the Windows support, the Mac OS X support Andrew Gaydenko who helped to fix a bug with building in x86_64 Vadim Kalinnikov who gave a hosting Hoopoe who added the traditional Chinese translation Yurij Goncharuck who fixed bug when popup window violates from desktop and added a Ukrainian translation Truth who added the simplified Chinese translation Nikola Valentinov Petrov who added a Bulgarian translation Jiri Hlinka who added a Czech translation Klaos Lacerda and Bruno Gonçalves who added a Brazilian Portuguese translation Zhengpeng Hou who updated the traditional Chinese translation Grzegorz Gibas who added the Polish translation Simone Solinas who added the Italian translation Stefan Kombrink who improved the popup window and updated the German translation Matthias Fehring who updated the German translations Albert Tugushev who helped to fix a bug with empty speech command Ilya Kotov who helped to improve localization Alex Koudr who helped with with mouse scanning on Windows Nicolas Vion who added the French translation Andriy Rysin who added the command line support Yao Ziyuan who improved the simplified Chinese translation Serdar Soytetir who added the Turkish translation Sergey Ilinyh who improved the D-Bus support and added the plugin manager Frank Ren who improved the save dialog Embarembar who added the Lithuanian translation Frank Ren who updated the traditional Chinese translation Boyuan Yang who updated the Chinese translation and improved the documentation Giorgos Kostopoulos who added the Greek translation Tom Hall who added support for HTML articles in StarDict dictionaries qstardict/docs/000077500000000000000000000000001453553600400140115ustar00rootroot00000000000000qstardict/docs/en_GB/000077500000000000000000000000001453553600400147635ustar00rootroot00000000000000qstardict/docs/en_GB/images/000077500000000000000000000000001453553600400162305ustar00rootroot00000000000000qstardict/docs/en_GB/images/add-dialog-kiwix.png000066400000000000000000001013531453553600400220570ustar00rootroot00000000000000PNG  IHDR|kV pHYs+ IDATx^wx_wiԐЋI ( PTA( HSM&{Ga3ٽyݝovD"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$萤*r%D"y&:$ GD"H$@1H$$#c H$ J$D"?#e-#nD"H$EF\qͣ&@kkD"H/^MqVVH$D=i%j=*bR{SD"H$Gj?y؄Mjmoj+H$$I-Z8ImM~RMD"Q6T? 4RjSoIy"mD"H2MRT!#n[r{Cr֑D"<$G%$wm*dTёJN[wگVT?D"&)%t||oINi*d41IN[o6|MiD"<ڤhe=z +9mS"ikS?]/D"<*")-'9mS : Img]bD"H$xGɉyKRHj!EIR֟6FܵY},)tD")-pg7$}Rڤ).ѱjR~wƗ\D"H2*_ruڤ6)mMz _kU;_f>+庋6O"H$]Y|{v'|ncgYO] <%D"y$lbf>35?Yu}y'`sD}`O*)ݟD"H$ސBŪ?3m3rDh5?ɤhu])/3یk7umV&nVmw1"E}fx )zI$t#% Ij]}W̷}OV^71z]􋥎S݊ xH/\fJ/|bLG5ĸbƟp1ֱ{CrJ$%9ª$~jhK{1Wq߳AƺY#)-5,f^qbF1_r%D㋠pkYYucߏbb >T 1c;=PrzO>xނ }@X7ڢߓسzw _:fq#Q(B tzjϿ+ִۣi[Qƶ^"?-Q2 +<*hoGSDሉ>{mӧ6** j6_~Ow|>R~|:0V>}UJ``/^hkC$D"1n6z]<<~eB >D"H$~~~!O{׿k8l\&1>b5b.xH3|RۋA1F!~Ş^Ulp)._ fɟ~hq \Jb!Mpb(2H$Dqzkl.)<xVO>cLiƸHZd `p3ĸnMDL,5t:k6dBP@i6E⾨*p~n߿A'J$D"Ikb O3 ;bFEѯeFbƺTFcp9hy4M3jD"H$Cƙ==k}qu#ƛYL?UHi竺17ABѦX4;cL/rvN۸8uAp[1( D*6D\CCCD"H$iQ艢OBlh>~3;|w[ˆG~Os=.=,Qfa܋k'TP%*gT*i9D"H E`Fq3r|fvėxq`x}b`a)ܼ+ ; I_?;l`)Ք TnS`SY>\.UUnH2 }c܇tcȐ,XKA޽Xߋ/HѢǽ!$$} EfMUNĦM{nT٧ҥ!C"yؽ{wI&::#F{Ittr>m,źc̗ꤕ9/Fg\7GQPl6v U,T)"Wqʏ!@ vU>Ide4l؀*Uj /kߞ={p#7t:ht<:ufA\xQLK`Q'y񥞄l =^ٳ=x0׮]y^ʪի0pP|AoIy[7̙ž~ݻ?ϒKyڶkϻCΛK/Sٛ;wǺwҼE#F|t1"OnvL'dZrXBg{+V=aLbR7"BR$|F;*`~>UU5ݮb[8\ܸwHY S.X6l ~69'xDFFy6mJX,_">ic~@"EX0>&M`^El6 c9sĴx.c}(O_1 @%9|[nxblk.Rr%c3UJ:)\.>0gtD #gΞe39y$Qil7}=ŋ3j ?`Ϙ5k&9sL.""!CޣeX g'Xz K,Ϲt2Gc9ܹ,S4~:3:祗zhtؑ;wr X5b5;YLh)Q9jTR?EC(bb]Ӆ|f KwTUߎݦĿLJ#=b8~y e 4DQb#]Idڵ}CU:w6n<ץ ٲfߟnݻ)4mJr.RUu{Y`ɛF*c\:A^n] 00Z5kr̙XٲO|UJxxx| mgPAA͓+fMMif&N$A\袋'E,%ߣXG":4j/cfuRGS uƝm'^7z]7u,I8ç `WP~J&\Nl6]5N/mH2K-i&̕3~)Qeʔfժ5˟E0cLN',mq|{Oq7nPD φSʕ+GnX܉ΝXԮ(5UgϞ=9rJ+ -b0SԯϫQ"|7b kb޼ܹ`?)ԫWիW9<<;w"#((ǎH4Vf ._bu8N.^ȯJYq (Hpp0zU/ߘahѢ9N|RH1ESb/U(LvX=2eʘ+ VColxusB_0)u9F[K T۝ͬn}UEQl3|ME @IDܹF(Ȓ}s>WEJ$wq&5I~Yb9ʿGҡc'3ϴSm\˽_ӧ/G qFb%]:wh"L8Q Pr%Ξ=KjՀX1GBɖ= ˖-¹o-[aK/7Oz"ݟ P@A1 ڵkӭ[7ƎV!C};޽^bgѥ˳\ٳXt);tޣU05NkߞK/K0pEgkZ#4k\ IT}l8{ht[Cf:¨ĺm+K]<8Xfh߼}ٶ1׭p\|lsW\!ߓ %vPWU{ڕB\]J$Iry9s)<̞5Æv!{W\l4'1<ݕ"V~OqKmbOŌBBA(f17{*NhʃzS"H$_}MӦͤؓWQy Z@uMmca+nO2wRʯc_mOG!#Χ/z)*#&&&vq@aq@L8UTM'H2=;wnrbX"`'}ZA;3?٤4}ƺR)${O4N'ܾ}{qB(P]ʃ(K|@it8Pm6oI$IZҫW/z%%}_3.kR3yJ=_}F }ED8ƺg7 <3"4MpPl9{HlsEt9p\ (MUϏLj+HÁcaD"H$~7ci>5_"H$IL:A_pSzyk[a܆#< ~q1>Mۻo_\H"H$#~׿|ao\1aHKg8A4:FE_[tlQ׭&H$Q{7t'9RN4Bj>4@ySu0u>/D"H$&J1cwX7S<Ɉ;0i@V IDAT\cD"H$f:@!Xb3_ =q0FfF(%D"<ژiODۈ7~zڂClcv0Ҹ3%_"H$I@yo,uD AX8biX$D"<uULG?H+';۪nR-bL%D"<f}0ةBZ >3t78xqp|D"H$.}E Q[fq4"aDӌ|b68uO"H$ɣ߬ny"f EF| A+b|qS"H$ɣM)tD;]IkgOAlfH"H$wZ@b bs_҂ϛ7}1G"H$ɣp ĺFDhOěI+zR> ^řgy&C K<` cCU}~D"HJ҅z@Jѧ\cLvo\_I/g,wtPҸ}I3hV bXh9™g(RvFIJi{UՙՊ =q q#0߫ö}pdsCBޫ'|oL\9)}let[,iǫG 7)/ɯZ[>:O}s~:#~}' A<8)x>v<<缙&}'6/EI/g@ h[(g}y[7Kz C %l7q]cٯ6^T{g(wR י|+[L`{bw<EAg"GTnЎݛR2kNGc6&+lY[0]bln~[tmR)$)'.L`C"fz3s~7y7_k぀3_g]D -N?'Y=fcWIwu5?pbPԜzS>'WLiAUh`^ʭmDMP9ogjF[Yҍ|fD[uY!^2qm͚ڵSG]<ǥe(T ^芕3/ZV&bj5k“Aݳ?MįS-[N V3ۉ".. Уv*z]󄩒|g0 .Azq-{ d}؊եUkl\=Jz`ucfE+RQ gLjNι,h)Yqd/;,T'i2'wCy2akѶ}>⯰]埶&Q`>+ )w8f\?F3kY*weKs"UTkoӻzN o>m ?`bMku⹓㙺?-/dtL<7Ͽȴy~/krNjؿ ȡKQd_jh7}`k>8 C{ªYr}r<Ղ7AV/{WLf1JLkܝ}(Yd6Vsq? -?odծ\@by!ȗx/ʽ̄)q=Y"'Ѯ|=F3krO-JcS&og܎e,;~xZI.NL_q.Nx.( h7rzON;{}Șι8']Œ5giB'k]~Wڠ q;c[O%8a=0N4"3u_G/N<'4Cu7gtYD[<"J2ORm,Y< ط2{J@r}wModY9e2v\N&S-M2Sn>x/hVԭW0xv.gEZ Ҥc=B'gvŅF0`R$-;i,4ΐZu ٱ[Z4v~p(u(.v`/ZT>f6 צyĜLg ]L06]&WtjT[f0Oz[Zv/+spq\FO\ TnRGV>Ecͥa޿'"S\ %,U1.vuິ]Džrp]2SF9"((,5 穞sɒ JTAI<j/)ylj Kau9ǝB Qߣ '6݈/tWoqs݇>q#7BJPTiV%u 8Ol`I'b+c"pqaHOZʱ 7/ 2d|GWະ&g/n? 6o?i7=m;,kWq9r, av~|knLg3cyUmC65)B9nl+Lg z +(JRSh}55Ib]9c^jАϙR>(I:4h fӱx3VƗt70>IV16.@Iݲݹ+hcؚM]L@va< \FQDyݯ^N1]y&_-tT@͖erͯv`?Mq5~;wfQ|G?þ*TڕsNr9(Fs*uSi:&xuunǑ( 'ڑ8grY?iXm+s8FWQ¨u ҏ7ʚM׃p݇R ў1[fӾhH"wd~2yl{r[kb4n!Ù%( %(@@%((wރY~qhLtZC]3(K9}WQSMm_U[\JuHPPlj`ȻD=w!lO:3qj^BU?iGVNv'&h(y޸TTa?2?JAn.:Ep2.ƥf}F0<#zɧS|M5R[0\ >wJqC/¦*h. u+Wrq[-/3.|T3¨+@t} G%G'ȗIA'K&Z:._jPrh׹r+@ԼɧWF,>?qb e+,ݻwqGE%x0Ycز=\hЈv.ȉ՛hλl?wvp/pihhܺ)T` r)p1v 5^~QL9/KxYAlYpƁ=zG.ԯ?ήp 5M27N%+9 !/W$NP'krԚr&Nd{NPǢ>Eqb s55Xem8+ -%u+]:}s|@!͈0J0cEfƻOh+7v(Iycś|h7+y\ "qk7 < yo`(D@=ؼ{QL7. aW{WycZQ@_Qmdܱ$ߌݿN@%sh]Z=4{Lb-q•F](d...]"Ftx ;: в-j dϊhZrOTGۘޟ/MnHm+fct q\%؃#b~Ԭx/٫/)ү?~Q:X\\\Ѱe]BLw"'mnj~Vvr lj7p=ʅc'(^4V.e7P Cۜj{ }ߝω}_a=4Dw;sGfkZ˸8@(䇱; gyLQr9zOV_ӰӉ^GQYsJ5|?'rbah\Hysp Ɵ :Tk\_=gGl$ç-G~îH?é8 ~}_mORG6dߋ ϼ?l ӫރ}j}ϲyٟ\(ӗWf+؃qY7[zGFU}\%T&PdB܋B-PE)dҏK`;sDhR,3- @z֦k 7 OJ{\4n[l OCZUswdUQ&z;3>gldߓLd`+,OzŢعxKA<5TP)bdA դih xg@)[2Z¦cq>DiX2nYNxWƍzYΰ VgG㱃ຼY!φ%|o L@2g@ cQh}INfҧ1{#A}f>f/YtF[?3fRK-v~rc?|%;wAzڧ1m-H92)e_4}OB_{uSxYO*W,%G\\Z8Nwi}z,s\}+>me=)_|!J2N.bgҪN\CLh1o} H넯1J&=ŻT/Ϻ.|aw_"ݻGPP7,&G"x[p>\,UڮTEue#^eA O`- /^M_4hm/|_ ~?ď_eKToIFtK~QB$!~1Pџ<47 /ҿ*q?]mHX?X?3;g5:dh9i{^|Uƽ#`|&@;dә{H緇ѷfͽ{k݆qFjbma|b)$dqcrfNMxWQI1hANyg^mћHdVZAǝ8jHKHwC{m oeqgG -6VrgHma㬾̠(ݺZΟ7cl굩K+x\߱azGlӂ }0m0m΀Ao11RI$)}gu:M O~E\mɭȰDw]$=ILoX~xД|}݋m׵9i m\E:ӯiA[^xVs.%믡wd!jfEl߁~M щ\;YˏE՘ԧV̸`#:22$}RI$ IDAT$I/w9V$]0gۼddMO.# Mf\"\ q;<ȐJTT6}?_91_?*!9x #.^N=D"dteh2 Nr%@kc>?]Uߖժ :|_8@֍)l%GV?O籹@K)nroCN#Fj4{~{D"xͳ"S$R 1~eZ:]BZ5L5w > e+4Q:]?JLZmjsfNnA_Wbn y<]9/|QӇժRZU-IQnͺTޖ Ee~<  kP(6VQrONۤ OPz>gI<6M Jo8vz!k0F2]fׁ#C舔&>M;J:|tV~_|Ggus\G$(6%x=Յ1?uayԸ{x5[ h\<" kKޢ=T~&̑b'vc7-:I6m?+L".י|+[L`ᰚ3 f?=ۇծ0MHRIj[y2^>W8[zN,9")'.L`yٍ$!NsܒoL|vpL]sw_G~fz3s~7y7_kZ2mdт]:A*9Mf4߯|,6{ -8uʒ ^_(xDą'lY[0]ɒxRI+O%-HɃ yͶYSXYv >W8k$*[=Z NŅ_3aznC1T *̌^F+?g^:l"Xv`y4IE1,{HZӕQXyǿxRx}\2)q?!a|:>J6"9#^Ђ-" ~߀sß*!g̚p\_>Mg1UM'qw{Al؊}(/_#qijQ |܅6}e:nFZuiئ~GT?fw~ wpй4396yElˆԬYF_a.lI(ܔefS~VRvZˊ-j^4' j(Q^R oH?jEժթ.@XɛkPt$ܶ{ҹV ǖĎR;% ,X_"HM{kjrɀ9a'Pj-F̾h[:5,!'8\#lGu9^#cر3V?!=iӸ?ϻg;{~nnրv5:ōq_?3yK3j? Kw囮\ksreOZuÞos;0)=30C2"&ɊPW*bDQ*躺]sv " UQAɠI]ӗsVuLOs{{g7=08``0|rKU$WhRL{هCd0￈ fApc-Yvl&8l O=O>÷] wbH~?/\;XgNz&wE”i۟<쿸|J Yy0{ ګÎqe>y[__8WgU?θR]~^Z^@NҪ?xھ\4}Cv=gp8l >b^3>+e~YI22FPn'S'H :Nݹ1}G?+/=7aݻs9x㍩<6v'>R//B L aоpͯ~fSIXSMIG{y-!Qyy$|g} >6y۟kIy{'Tn><#l}%WU^c*m O_~IvQLn5;w#ζaţ9qһ|6 d=PLx8n{Gm8ꂱ]̜ǿe\yx  EgćC޻m+Eؾlǿf->1|6y.`-cT4~&}Ђ}߇틿ͻ˶a}ثC d&]|/3;n/;K,ca۽}oXjn+G֦e,{>Ef.6`3 @e~Dv ե;d~EN'xsMOo98 3zc>r<٭kH!sv!{߄t(cna| N1<5?,Z=<GЃ/9./o2e,Zf_Lb?C#(x{il鼶$A^2ciW`ٛS`cS9lp(kahAyg]~t‚?f~hI.}:EN6ÏYG Ѓl0Lj8齑<%HlsW'ՅrbU^/Rx6`vcvĀ%|=}*_oKwg9y {gs̟tt?|,я +ЩTB:w7+M<`}C歙|f3oQ}T'|D{]~[G/͟´K{=V( aK@Ā6c.>kq)=s8ɥ$lq">mXO>ˇ+@=߆$h[(\σ h|n}IQAx}l+s"}ռ3i~(nF 攮Y\(ab_8p̍\O#]q˒}U/R_ D_C';+Wf։Φ]iK/AvYBemCΥ_Gჩk9;4լMx:) v$% _ï/7K33C30thbdW3gl,`>q|gؾQ kR{n;Zztڦ9^׬dUn~_6}eXoglLxwDK8#MVsw5o؋ŔxhMR ֩/:>f~4{)>hm?[dvo .+Ïӓ>,z5e|yU@>=%mlM`ՊUVl>KW|e3>l CH"PpӳU/*pc x$I65hRФ/ԑO>gۙH4ޛpqY|>|u)sOY&n _ے oJ~&.6q+Eо_ )}4mXeX/-["}ڵUTIep㙲L{5+%_Mɗ7mDk\f>Q9%KJߗe_5oA󘇿'~R"yt >75gu/_>,x)Kjء]׆}=o`s;пo; Il;ۙ^=3r{ ` ⯜ݏ~NQVK0{|]ԹU^)Yl{HF hʷn嚧~S/y"̾MmZ#ҟk [.i4v^<M>r5wGɮn+ͮGN|(A24|E~^|&˦u$QߢyjϤgpy9s~K_oOq(K_Ƿ.Ïx$X9{2y[^ˑ/zw~CS‰r`|Ey=}8y{С4}=̶4'1;S\Pf\uفYY9gŚ^z7#qʢ((,,$++SkF| Fߘ> ŃslF1ݚ'9-^}=M/b?0BN| Cz3Gc>l]ќ;m`_Pl~_?]zVxq &9xFm/Lvt9b_ ȉmfʜe.i4[ƨkeLS`kч!dϖ_1cWܯ#)޿nrͽ\-:g_f=sơQ&G|zXzK"3-ۍMٵ3?lvwN+ycgE#vyMa_ĹU؞kCcN[Ws.rޮhٶq;ܱ-v'~+lE?Z6.gHQ!^LcP_8S~%6:bCGtݚH*uGv~G>1㿣W7u`Xzw /kY;|2kc[1hߝw|&+$ ;Ze,}y2_b zXon|/}0הVy˙|d%NZ.MX6<׬wbػ:޼}:n)^{.aS~_F!ցcĹúÛ<ĿywEGm~\0 ls> fϽŢf].xC8,<}؍Op SϽv@&El*̦gdC,HA; 7&q+d.>;{g҈ճ/*k?;mJ񓘵ڣ#1Yg+x瓸 8&4|=k{Ķ>{5q'N=mObmv@sxn1iHno<4o_NNs2cTiB]9w͜=+}&{wezc-q`eқ|&pޞ+dEK_ô%[|q%7Dk yx6{so!;6^c>a߁]c,z|q3yyglhw|ecxV :k/})EwXK=q ,%ި yӤI#_1{&|I}<>wUJL3(Ho0D} ؎e3cqYq8+gY&^?aȑȚ5kXb%7WW rrrhׄmZӢE $s~|(xs4hx,Ӽmx +HSu]KwU@qE"&d\L}X̟r4˜!VN|<ϣ))xMҼysRI'ya\65tO^(|>cGGp]g&Q$ &~OWf㪡A]XSNgj{x7N|S/M<#?? o2RE|* -ȿe/pd?܄h>=HU:0Yϟ#eE6)J$bls!ǹ3\+uouRW:7VEQEiSEQEiSEQEiSEQEil/oEQEilj\\ŝ\EQEQBhREQhp^|_u䊢(5EI"̅jF69X $/;F6׵-XD"feZ !++-vm8j-XEQ\_7yޫ++]i[&Jxf.\t9}MN~o:7߰ly{n{AVE|b#uTW g߭#_(SXv wI^%ɡN;fiO/Sޝ$EQ`CQB^hRxqq*S՗32NS_I̮((J%SxLW-;|:p$((Rkd+djSW _UH`GSEQ~7%WN| IDATu~:EQEQQ}@Ժ :?%WYШu(4|uu`*{T5a9EQEQaT~Qy6KfLk^sW^3Gl29^PhL rd|P.ɛ)uEQ(**/⥧$V8apo6GMV5̸h cbf6vM>?1.dҦMkڵmː?b=vK.#\,rPً0s t su0|T넂[SEQjBl ,^sLLxv{]pM'{m`%G;SM`>7rXQ}y {}X|a|,c#)IsϗU/3' [^!~.?!#_|$ĥ٤Kҭ25m2֒9yA(R04jԘ&B<+WxxDۙhb;v?/3p!S9ݯf܈=hRs/y>2[5bq<‹tI◗ex=ljMVnL1}c84p}: yen1 Пރ3/\M7۞{`{q<ڏEfj u?#+C&JIMtr.]EQZ`/E<.psJዹ,l9~;7:Dف?ք1Li5.O~=2{ ,d=׷Oٳ ~[Nlx64Qyغ\fϜшny6um!F7gnj[f’PGk?Oٯ=wo;sȝSyܴ\}|[$kW@9V4|Q {a9cW^QE&~ZVP c/I\zMry7 6 oI3fWOO_ǣfSA~-  ~[D,*FtؗΫ|=Zw 'lN-ڟ~-xI?gsء1-vv4fs^Acbv‘x{[2FX]XV-N8Ngƍ<䚋FҪM[ƌH<+%wtYsL!߽.+wΛ _my9Xu{n!3lp*'_ψos-XxI.yr#~qo5e˖| ޚ6O̞zq-7 /}{Ooϼ;}ؽxuOП'q1'q/1eTGwpq{87X{4Rpk޼8ݗCOgb]^< aKK֥Mgf\uA(3&uqȶ43-6a9([87 YJ<|.1o<7X)Z7n׮]ȯV{k[ʁu]Kw@(-%blZ1N4c|Gl ejHc6S.H @cy`PEQ:y0xN~L)qy\ck.֥E5A|yRi^On+(!574k VkԖz\'@jD(( 'iMԺR[/ @˓cew\sEQEiy0㠹r:+2mtp}\c[SE͊(*(ME%ffeeQXX(e%"deUS\8uVH̬>c:zEQ-nq,\l**a¥tO!yy|7j*Aaa!_ yy2y h,5Wock2/R0XmL>вi ʾ#EQ6͘tS>2$'[dwf2Uv۱rJHM_$ ڷ(`vmOaq8J\-Ԕ ç7k@nncSgL/5rEQ-yl;%z/-8M6y2U|<ϣ)ǹi@^`+g9K yҠ§i 28Hj( y˔A8Lt78 6aT:)[~(ln#Dwk0|Qq '> FSEQO3ƥ zv^^M,7{a9EQEQ>a%gcfc: $v;ݎmΙ1 9(4l|\~nR7MׯjKуN݂PEQ<ĥ۱F.,60M 5i((Jel a}*-jo*O0\5. ;>.8 a4WR竅M>۱\"9kLx4khCvvvAVVV(Kyx~{P~!aiDA T6|h栢nbs@]5%()6~8VD"}4/Hcr}+1S ~J{{{ ft ؼ(Dl2!~i}Vf6،mͥ}((eh& P;kFs%V^%Vތnk4(N2U64[7c[4Tj6AȃQzcVnd=F.ecooOޞM3KRsAT5(4,뗋yWo7[3 Sd1vV6K&Tކ;Grlz9ĥ*S/4Ď]9q"3I 6Pfdg5sg/a ޥIl͕WEQ 5Nb_oM5Ԙ+{lX5v3uL::R ' aqXV)6 rP~|ӻj8=klcUByX5K9{ Ø7yIE26c.REQ}tẶʱkmfLnqq͚HzW \ph=s$AzF)gf2d}`.Ǧ JO*"6cG*lPNͣKŅflM vE((.\@(q_µ[KF gr!8Xu _6&hiz" *a@$>_MPfmsϾgLYh2XQEQ*cK;ښΚK3ft۴|^ڵ#L v˺Z!slu kC3-IdL_1wr; ,;gJ36fi3F<9' Wޥ)( gpi6v޾ڽ\s= ̘fzyO6iflvFfgJl\[hXDMγ< /x:KfM{mcX%klˌȼ%.ݥ)(}54p_snbOleKz_W\;arlb<^yU"S/ST4&]4()=iؘ-(59${^s6X7ӂ4[c#qi(2k\#؎]5R 2]mKR9r}96صA9K5jsP<6*k7PƄۘsCg6=+obXAcKSEQjp]WXAdil͎t{X=!sT Gly96qPӆ'}a{<`͙OI17`{!ݳm0z:cEQEIy:6 l\mCf45l3gz9yffңP9 ۄH]6&:@`yi'G2'M!MOzƐkDrlz=3MZE(e⺮y9sf_ \=f 5A1c{]X6Bdl3JM>OEb4۱Kd,X˭mg*-]cLlִQf[f\4sgO ]r.MQEQܚz3u94[^v *K7c9GnO!bcYcҪ0|>͇=W}gAY۾Ì=`4{nQzIFe((׵2As Ml.ٵ2ui Ei6R0ҩ5i| ۺa6dl775pe\/C~2'1f AG64\s )( FCٱAkn.'𹌝=˻rȼ披L>LޥAŃYcbcѓfΘ>$5ߊl}c &uWlRA(ũt?@svˀBwݱ[9c]$.ݥn}(6|qn?Р۵>ɼmlCht۰gg=JnF'4nkAc[s.(([Q1ʱ} ԥY3-6tv4tXcNP^"l\BM>Oy#ͣٱ}6w&f^nf_lg#mh}:a}A ]QEٲ 2A6A`zfedFϕcBb?غX*_-T;\3S:O6f&HM%]ҍldLK cC(e#e/57s-W4n@92Tvfb0;d0|*Ri2/ 6T7'h&o?S#ɼ\=7PQ(Meov3Z:ZX^r]9 v,s]3*Mut)oN\1Ib2b a9|u2gf.5cٻ4klkXRռ(e"t&u]+'aZnp9WM*͕1q1ݓĮ3Ls26eތeoR{9R9EQEjbd\57c}f7Qt9%AzmSfR͔ǡsLĮq:m31c;K3ۚ|XNQEQRv AYޮK5{fdZ*XƲ7H=(_kdr=kɼiA98$,(F*f)XRw4̧u;ork",KLrqi2{W˼FqܚM(hR ]ތm=S9˼]5EXMX.-2m Rn>Yތ9˼e>H(qQl*3GQET@D#b8Lq.>U as 2T5L_𣬗nk,א]g &Q׺Q Tf(R:GօA[+3?7qD]Sެ875۱5;w^ΕۄQZ((N昜^Γ]Xٖ+TIfej̓D`뙪{96eӡ*sEQ*FΕ567zj\Md"S5ce(5Ped T̹ٱ̻jzW.hl)=2(RȄZ*k's7BX6qQD:.Q׬l< c㪓cWQEQR"&Y&KK5GƲcC:HTavXdd͘K3ȜmRnݥA9EQE4a&$(] Kuq\U'Ǯ8(uQjҦ: CԵ+[dd!̐椪:G]L((JbF*Sdd.&UZ9vAd.-0D];jTJe\\y&z+(J} ȴH=Ulp.fwͷknPFڨuiQ"ֺ̗k6A5AcA ݐ*FU*( TsA!dmj6A5z"jWmY?ZX˜MP]FƩH*7GQEQ$1ΑƆ s4եSN}:iQS vd}M ٸrR!HWEQL4tTDZWijd֧\ WKIEQŦ&$,ʮQyGUڤZ'UҩUEQB:'JmTTeutTe2Wuu^mU(( 2)l'jmԺ(Te(uTe27tM>L((IM[[B]6UݷΏBUQ(R_ܨTuU_-ӑ}:Q폢(R7k'S:B}2LI>)(Jf(Suf4kk]EQEQj2eյnƩFWEQn#Vg`lj1vEQENMNLLm=ڮ(l Ԗ٪flTc((E]4Tuq̖f@ǫ((J0 ܹP@QEQsBNj)(Jg6tP3Su*(J YYx+(JjEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQԻiIENDB`qstardict/docs/en_GB/images/file-dialog-kiwix.png000066400000000000000000002216131453553600400222500ustar00rootroot00000000000000PNG  IHDRVP pHYs+ IDATxw|ON  e8@T (CP@((p1Q Q@dR\ -7~WӐ宷~ޯ׽;E>Z_>{E]'&%"""""4V/w2䋋xo* N xr"""""""$qG9پ@}!PE0 \,DDDDDDdNz =)R7/=#Lq嘮gBDDDDDTcȏ.z.źCR\ms<5߈;O6l4 V%Ps""""""rޡ>.V׎9o,>Xm Q\ T/Ä y/q5 R\ X|Yⱀ0+B D3ve%""""""bջ8Aut W9)gR΄"jE'Υwz""""""*\g?:GkWX *LPŕ@E+LQnw%Qkꄷ!""""""qRDXjpX+U T)zWfqmDDDDDDTx83΄z=!/•BRCMo[{p +DDDDDDE;&u:EO^;tqS_+ U)Ooj+`=q섴 Y+z=ZVNNp1Q-g?ޓ(έFmC\ W }P ™@vQsIB̝Vwͫ&ovzYw@ǙZu /s%Tq9@FsPF'CDDDDDD8x{7P;hg/԰Wnmm՞)T]v=k*= T;| 뵸Y2l!"""""rwL>j{WLQʣ\BŢئuV8;,uf gC `?PqGI:o,DDDDDD= TQ\hPgB=!Zm :ܧH+4TQ&G-H3Hrs6laBDDDDD䟜p6T;g F{E6WW[)T U,jWl!=\;[LUJD9TH^Xjݐ VYފ\NDDDDDDa**VUثVQ>C{*UԪW^UϦ\|FOHOWPE\(TSV퓽ϫDDDDDDTx Iu4F!|? n4 [/dˢ|*uʟIY9U'+V\VqT7>wvcV}!z=z!|c׹ssP=g.֭[7x>!'Oرcۏ;'O:sH@Z]™Eׇ 4K TQ,nX;)U$HRNE՛B$QȩZ0nE- "l̘бz;y]ݻx\O=*V-[-whin͹s'bÕOuZrjQqc_DNѴiS_wC8xێW&MV=ʤr@vvmpBm'sqx+Xq4Q;6Dv"&5&@D@$ D(!EIB8$F}qG̽a̩`Id QQ3aÆAN;wb^9WӦMPD69?_RjU+[֓]s3g".6uw:s j֬ C5j@2e|+"Q U<ǎŋcǺ-\Y&&WOw̃1a)NP**zG|@kz9GdɏeV-AS1H(I0 9 ILd"Uc9w=o3 W @$bݻ$>S\LUaC_EHH֭[Z!.r1bx^萚E Я`6Yf2d0BCC啉`!N8!aŊ2phsy? ;ۄ1a0[8u"#ѥk~ޑ#G~z֭##&*WG S|{AtL ޚ;o9 1xo݊?)S~ @"4$;vVlq{9ٌ7g#Gp33&1c 0v8z9k6$IB˖-`ʔy?iS۱,[)))ݻڵkq8v8*V+-Zb ?ŋ (tGAwh?%K[WVZxqy?Ŋ+q)%([Ыg|mL&L -˰pB;PxێzGE@` GuSU{L?Umc (~߸v7fCΨWn^2a_yۭ!ۦvKf:8;ѬXU͕l#fR6:vVDQ d0$ 0Yv"-gbĆGN9J+V/s՟=7]vņ_g0筷a6گ9̙kVJ*:mZW_%J`ʕXj%1{Μ|{x:<ԩ#m V-T<ګV\۷︭jŴ鯢B Xz5̙m۶i>羅֭ŨQ#QbE :qqXj%ޚ;z .1cagxv>c&Ng^m۶rXXp!vڍ]v$I}˰>8oߔ)+ƌXp!:w_CjZZϹmVo._Zj!l"VZ'صk7N }v]^z;uš51Yo_]wڵk0j(,XwE "--_nڤ1c駟`ŋ L:˕Èaժ(YgSNCLl,֬sf}bw""ʡUaSԫW7_1'OS$2h q:^ eh7k[+ɝcEE 0HB<+rom$c6N_ 5A $q(QԵk*U hܨ!T inDZE=taa0 x8{,Ξ= /ѣ߿~O?Bzzz=UA'BBBP]$ %Jw")IYqxo_ niw[ѧwo'# @PUV W.n}}^t $!:&j¿޸qcB$4jeggcs@Ƣ^zoGŭ,ܭs.QFgĕ.6m@E'ģ{Gy7yƢ}AE4i$@ppCP^};w^|ʕE+WFTd$.\VI8~8$!>>-i@%"*NBe*x"\a+qr䈼A9 HkD~>᮫=㙜MTZU)Dmûd{eA[$5`("$N^KDT,EEF潖$򖍹mLAAA Ejj*F#BCC=.6׮^6\%8իW#b HJJƃ$rj*Jyܴ+W]ŔTruqHt)o9:::vWs95'OV\~ 11ڗU<];w%KѫgO|u+ڶmI?M||DY۔)ұH_xo$Is &mߎ͛7##=\rEW_\>ul6lX7nJرcv#?)R3yҤ_DN:|QWmre=jYewL V+Q>kU,j`E$)ʢʔvf y]9I "H+, 222p5DEE IHO@zzz^|!(":濠*_;v Cm##"[n!((pUcBT.Ah"#"or/-;A|sbcc1{֛mȒrFyp1#fz~'R%22S?9"be!J"5Ǐǜo9Q97|Q% QjB1)/?/ xc00W.N\ժbA?-0*uVY[+CZFNj_r4JVɐ<@VlN(@@ԉIp>o܈Դ4f,}TXeP&5kމ˗#337of>@֭a4j +fKʆ[5kB$_'>!+T+a6q5lXy[j?)))ys CZj*Үh߾=;Mڕ+(Q"4{%on(S WE!##V.p>3g%Tr f͚ZKЪW:[^Kx3(bHHMB)'K @Q`hƵqWD!_ KR_ ǎť˗1ƼyT3z RRQRbίIwã= ݴ LH+׶m[kz{Ç?dׯƎH$$AU#&L澃G@Td$z/ޝ7O}gaɒ%PdeBժU1glTRZBEۯ^2h^{mҮ!!!^{a޼(V moo~:vĪ?°CuGKXX8^5_Λp<Х ڷ/xҤqcؾ}싘ԩS5*q`IXhfKap.""[oWb5 vmwnNWNң6TGo'ZTOvZ ={-4Q|ֶ,)H6yiN}X,Xx~ر)))C@B 7^ ș%Pjj1FDDS}0jԨBe(8wO>X6DDDχV&M0Q+U"{ȶɟ۔Pl00 GCʈn$BrEZE Q T@+DD?P.Ʉ ] UvmE`Dy=.RQViMFͧ<9NJ*g%eXʱ\PȩZQ @Eܼy9%{dlٺGYh+DDDfٳ QخZ{bq;oU͛\&kAv zkV+f3puܼyׯ (u -'U=h`a6 Jw "mժBӯ_? ""*jlnpm]^k{wRV(_kq7Irתrq8jd2v:PC 2!(w5r*[$Q`(0 EI)&rQkmIkÀ g(j<MUhh,jeGL( BUQW*峲B^ŢcE)kX<9NJ=zk,jC{㵈H?GZ{dz7+x;XQ7LahW\v޵k|sBcW$Xq&&hlJE9DHmhFEN-p%8Z֦@gM IDAT鐽7Ml/ptIP """""""w':Qhe{t{M7tHo,Çc""""""6Y-[BΤ'U׺ rfb/(3G,FGk۲?ÿ9 :iͩ-> b<9LjghיE-5 8#yVGU-ΌRaBDDDDDD> Ej6%_+Z֛do{a\V9YLy:Xp2p E+=#"""""""iq&hQ?+l@ Y!3"""""""rrmo?R,=)V ƙkog 9o+z'W gBk"""""""*{ s{ˮeVt ኣFOɑڐ """""""r GSt8*PPŭ? zM}Z!""""""DDDqD@3b6+2eڧEz([ܵqQO;+=+zCDD~.%%a¼V(I GJJ} K?\d/qJt7ηbLnx5g|0k=g{DDŇd(I^?(N ),$"""* G!mZs^OX["_lu~:_i  A-Zi?<s[>,^1 q+V;/VH(smk 6%>; #III8s,Ґ  DDD&&">>=$GOJAGضMx7Xq<*,Wo6b`8*4~D5 $jŵ;'p-d!ۡkS*~=v;L!ǛaO')"$&5%roۂǒn q۾ZIDDDDDqɔjUAz g#));N:  $8=>&u&TZwH+tqsb)#;ˢ^?ehd%4`J ڎCw>fQfٱUCO=!&\fFI s+HG^Q?Ɗ;?ŧ'"=T$`*DDDDDQjj~gԯW+W d  CxXjTӧĎ;ФIDFFD_s;s wkU- 娽3xZŌۖbvR` D%VG^R`MR*Jb+\ø~ D2QcsT,e`DD$dk@ԯGqJ4.[GV<""Pcǎm۶^9w}5k4׿g6`}8wM(&MD*U|үjn۷w67<`7m?_꧿|nDDd%fd{F֭m R2ðml!kqb'\$'_ipQԩ] Lҥ|'w^!xu?αŕWjMAϠopD]u_\ ٸv͂j AtIōpFZw؎nIC,+XIݽ+ѦU-'#mx'T5k杓 uvb/#1 DQs?`h߮-FϨᭋxAdii#짣|R&Oɓ&"Q1L8"l(o~ԯ[a"zb߾}hժ],֔-{ҤS_a)Xh/:5 j ,^cg|Mb!Xa!!~!F4y ށށ7ŮcH j{ioCohӦ-Õ\O=uժVAUйs'L: Gwޞp0_zQJ%̛7~wԨaÆ!&FkO:A )9 QRRLlT\qc*+o3(X+z =ěa8Pm[~}mn V\}3 :c B|d Xo8}͊ %Fu#ڃqw\/]c_LJ@4eR-G"7#>"Rh4qbF^P[Jߠ~}C)ti̟.{KK)z̛7Wñ~F;>Nk}!*}z?7fF'`BDfgΞEUoSEAPj>r/@ǟXA@ppJǕFXXZȠ}rbWq\9O+zGmTiVlƗGP%+EFVTa=Z6f -s7y)+EV?/ÎYBS%,sjaA2dbmt7*EC W8q/x}ÕϜ_ou}E'NOA}6 i3NJ 10_۔)dѣ;ޘ5z( 2e?|#" .-- s8r8bcTۀOWbƐAt+ |F9c}+8QQ7lD QFu_w [snޣGwtG=""K,2]fff-],dgg`E".6.^t*Xiظ0HMMsj_o(]: iuwSR7X}pT|[bpE؂Oxo>L2˖Õ-Z ?L8H񗪕aÆ1a^::ԫw6*._܉jYYYB` Uf6?&޺.J Vř 5EpE-TrƔz:\9wԯ cȳpwVTZ,HOG%Xn=a7 _FN; [T#&&*)zy~n;""OstG w} DzF:]+$=#0HRQ؆LBS%U|>U\p VfD+ZÕleK#44Dļ xAFSKݻw-{*\!""̸/e$%%$%%˸v#~&k˗+kWY/TaR &*9` *oU8 Ul<sQj,YnV-[ĉ?0١$It[?3sS e5ѣǰf:4E_9vލiӦ&N̩jqwR>7""P Elb"~wԨ^;YV'TԾN >r;> XF``(BŔ+ޜe5N$pe5nЃbܹKֵ-\[}E-T;f jּk~v+q C|ҿ[2{=QQ Q [ c!&:Z>).ÇQR%3g<ҷH]D&9^>>ڵj╉Qt#~;GsP#Wr'ԝ9u‘c֏U}:u,re˺>/DT4UZ&$8M7m;piXו?;~؉ +l:}:*WVjj4y)Uh)3|]w)Q#Gb0tsx啉+WNpeW_*/p2w>Êh|Ov؈@˖-o>7TZ ə8?=#III8y4#*U q~=|'MDtt ~ :uujWH•@@@y{.fϙO<-Z 1 f Ν;m;#88O={cvc_.8E +P%@DE%KnPQ[N!hժ%Μ=Ϝű#3LVDp0JDbBG#&&c uޜ:r1\1ԯŋxTًbO uI[r1ǎ+֡M@@^7ݻw7  р2hР:wn:j0H*gL2 'MdBDEj@F\>PƏǫnDZ51e$E+`BE@||WCmz\A*U0z)/wu)L/oO}㱤Ō!ee7\Q`!?wo)]:y۫tQ.[t,]nǡ@^d2lݺ=oy^興9Ԡ~}X!Pewh<|{XŊgZMס}G{"""""""Vx؆%DTog }ex7"O111r JA$b굫ѽOa'99 Ul6qq8fŵ`ԲxXT9WǍ|du?ޅ`sy -/@As<۴zny_BaQ% /{#^AE#"?HIId9 bbbέGa'9c/T7n-+剆p DpǷPP"A0T=&]"fhZq%IeVHg[jv}?LV2eʠL2]DDDD<+no4lTw[$T}bf? ÖX3j8N.f#n }ճWr'[ѹ JKTXVX-בr)I?FM3Z%ƣ^%|_8s#"""5Pt1X0[- !+}bb DE %9Vg…4DDG#G,`T=+Uts]? LH= +vE];\ĤШӽq k?Ƃ"""""""UX)h ]Y/NfFNT0wb̝ a DV1m\y[BDDDDDDT\VkNPy-_V>lU3k${eٲ$n-rFWO6lXwAͱBDDDDDD͛4qL3r/_mȖ͹&VٲYl]g=Ua#_Vnѳ.V""""""s    % 7u{<"""""""+n7,q6qQc}"""""""?^b3P~[bqA;.so& `0="""""s-j?{žm] {~)c 8rЗ_n›oAvvY+| 4l6yױiTK4lf񉈈aRX F͝{V`˰@9l}ym:<39X.Dq_xxldQيadX6b*6=eFG$ `Mlj 30hݦ:=> v$!;wkFK~@<~j(_"@Νfu_b=y6nMFmо`_0$#"""""(+P161cF6/Owf`Ɖoc}`_j ~G=:?[Vc܄cР 9@%u3pk?eihZ|WX5:6/}=7՛}$L"h4b9\1u:@-P]}0 z?_+zI"!,o#t_m}G0BPE<`}\4 ._[O5+\E5i3&q/á>-۲ʡa@d>l0rg uScpp>(npEA'ǘq·+ʽ:?<3?iYG#[ӻrf\n4l `ФIk*xM=WcU+9~eَycD-ЬuW<>f!jō_?!OkhvOt=K\={ѼE{t'dgbPhެZg7iaRpUGD Мk~r7 :tƒ3’} 1`8(ą݉w{}P(}~"bZ<mqxi\n $RBzfY1#6B?`٤ؙXlśÏZPY4WL^#.w!db)$|h0ӈAI1mQE \}bRS@>sY30`]>"ܖ%X2.!":2/^FHXpB Xȷ @j [}WC_Ì!fDPgяЬQI|{O<'C|){0PD0"JK;oX0"_nh,NyBfu-[v糸S)e{b{=sv4EƏ?b% ډWj<x1Wƌ}97 IDATc 9ZO|O1U!"""""cŊ4lYqzL&A0Bغl%d +L˰lX!Tb5+eFmĉ0^sO,aL + 4`tX`BUX+ ݑʙ~O=[V+n oJC{M٘5k.$Ɉצ/.^D#!Xz)V/S:|C䯍iN6lذx])XqmtDi^:d'T!"""""y%M0~"S [,mn-sMșs,n=[_ Ua#_Vnѳ.^Q(y~~ T   5 7m1p@􆈈<ۻ'uMd2`BDDDDDDTp(ɫW,]/dzoFMqfhܼ5 K {NeDDDDDDDNca{9p~n م=>{ |*>{uY63X!"""""BC|١Ab@)$QsÑ, sFA,eǥ,#j#S3ŷ²͇p憄yO!b <~64Alh!?Z76A]0XOqhX)5.ێM^:#V\;~gns~M!'hsk7` PG0F w i6 R y]r43&2'DDDDDDڂ$XE])tȒ˜sE(m0a1dwmŬ1٨S*'LcEԊ1hC_#b{a-$]0!&Hqk[?ÑWqH= Fŋ-GUcPzK=wߏT.}WǮE miy.2q+LaŽo￀?Es<fw`o ]Gq]$KҖ"J_C/Bs$<>ٹݛ=wgfMWný+ظA1:p$B6;w<%Kxxe6fbޅ~nJ&ywo݂2O3 QMټ-ߎ(Ett-ۢ҅*l۸+'6xV6V\ֺ1ԨݻCޡ[ݜX+z+ v&qDk* 8PVUr! V ysb>5^4o`\5Mt+n/A!B!kY}Ƒ+oAعaJ,PIVO#̡GR0KOq1qWwܔ  Nh`M?ژ٨xLR`Eg-ʣT-W&g:bi=9+AwKWHPE!B(j ^}^I` f!08?.a4Aw!ဢs1 ~^(jhj)#+@Spswڻ5g3J J̳~;v`G_ fZUa !B!7 be'^O\;'q'|VP&ٷd9AdM㊶`Ulٵh)'@-BU9s`ӑ}~/>os/&T+6j^nF^ 8p5bMS v hpU6-Y6߄~ʊ;i`Jy|n? h+E~`_i"B!i/gJSr] H,z|+!iL7~lϞ=g(dҳ+?xB!__+}&um9sÇLIHHOW-椴q"_5i"y-)e:e2 b%B!Bv1VB!B!VB!B!VB!U1?UD$"ī(Q-BRUډN!B>7Od9|ٶ>)U6;a-hֻ?mKk5gi^ =@qp/د1WKn0sN~?vx^W];SUb[V\z/B!/JʠJ\*һ%toBÙw>7BXʰ(qhVM^t:Gʼׂw;@Mo+o$DEaT=\S BHsn+^#2X>'ɶvY),q7<'~OGUS:l'u :'\7סGES;!{Iա1*G!?+..*,9Mc+SЬ$ † ە?bTKjm'/~)AI5=x}*EɃz9 7sA<:BhۥR D]T|"p˱WTj^`쏔in q8.3`Z4{,XW]w{ d@!fkk̀w ϱ=]bC H)`bd튛MDn+^buwx3%F☭(%j}@ua'{+svD7SXQCJV?jFwRΘ9:܌R18X|q!B!q',g@Mָ)Mݏ13C3ә_qOadmg\m>;%bNLچExPnO&ȇq{`Ԕf^AgDm1U%j`CZjZɫ[We49>_ǂI5i-gJSrVƼBb:"ȷH&y+q3{B3aGuiPQkg;{-g軹 !vm :0hbGXgӓs_w.8,ĸ]>+d;F!BΝ?O%^u1^M fu팷̚9sÇLIHHOW-椴_f|⯚4ƼΔ22r|7^3{`hK2$_8׮ަbWF#cgSz7@1ɬy+\ ק_P-OwX9jb(Z>Iğ,?WLJ'*C!#VoƩ\&w+rw L;Q#dfB2-(`ec"^ߋ60} qbԀ̛?3գW%bmӅ+3s цBnB!Bh >1Up%9cD[):DGrуΉͺQUpו\s1M*8w*ӷWJ~ᎂ n6=:IKѕL""̄KiOspt#* 4[!6/[k!u:Ԉ[78{xp?!N~eJhۢ \B!BKb\^@P]8PGIk:lI!s ָ9Qtچe:g - +(k&,)NY JCqr@kW=Sf7v(88;i1Y}:ͧQWV`@~ͶnUqB!B!^ %WiPE _Y0[.V]P Zםӿp3hZC:Tl(TA{~ᬡ:,eKe#P 9l)Ѡ }= g'UjGFQ8V@uM" ~<ĄF-lXQq{ hpQf9B!BH(W*PyM\ۚt֎*Ez0*$&t^2ş7 4Nc%`WڇEs>o jH9矘{is hƕ~CcR !B!^r}1oN9%ѥ1z:"ȷH&y+q3{B3ai$4<#"4]MO[cg WT!Bo:w<%Kxxe6.յm3̙3>l`J@B|rj6'M8|EfWMHc^KgJfNgLF>{Xy$P"R |EB!,}.3?O+BDٳ?1#GRR\B!^W{Zy"=GfB!B!I+B!B!I+B!B!IXy)"B!B& +{lQ̓naB!?F 8]s)[)z_:Rp¦vdQ2HM`Ϝ.:+>ɀWyeўi ]gK"Bd4SZ6fԾW]!hbEX mv> 0홋*6V4pSzߌuk3['>,fOC/n:q=͞eȠҶSgũHVjh(dKQ;|\uة*F3Lfu]1{e1n6`}sZ1hQ։N 8j*nE1\ )mӾf'H ֙n o 56(Fan#w-ebjܙYw c5rMQ }R`4?FyR}rkǁojb6:˷qN$[jweqQ4"ԩ?4|GcjS ;9X-+g쩆gư#9ѩ IDATu⟝3W+}ve b yk a= NL2)sJ1Z C t͠SFrvbj'-UpCd12ps(}\VėW=xX[ѣ36L `6s, ͐B Yޟ˙-m[3#wu߶#\dQI&J_4nLSg&Caop6HZu,kK~=ZV*qAX?ÆQH3J?ϙ*ٺGz5$BI@jZGGq͞zU3G.Gݵ-SIF3D,M]z3>҆EqG'|դ@;Jr'SspS4nD3L͉vfTճB䳁8月bOS@rNfQFdS\}S‰ι x $,D9BKnT5#9 Q^!."ŧ"Y9Y؆v 8#gdڥ{;RfMoi=^ gld,]$wİ+ Dq(@eH'kdCF:@\h, C357mGVkHOgfvw:+ zHˢu'簧nB,<:Vr{RR`dpv36]K<\5e!*φ+xܘ<-2Q:7V`7BO/oyZ&ղͻ)]|Y*9ӎSdrASll[V4 k)vVKYz|uM.BǸP'4W,`˱ ptG eU h&v] gv8+kz-gAG.|[ف;;El9Xu8aN:[ҥPÀ94*vi&8;43PY>dEO)wKL T/nO8U9xg"4PԊRXP!6Clì>DLDSTCdqz81`,7ӎRP>5qYA1,`G&mߏϰxNmiĀ`XP  (kCIxd2lq+D#fhiK·1M: r8t:sFo&е %p)Kx%f3{<' 8]T.&$& yt8!9tiH8SǁSqz4[ 8K$~vF 獉J, 8P9-E|no*$q,Ȍwqt_.3fJE9'+U ;Fa-Qȼjv6(E1dlP hY0FENl41"@MXNpgIcbTK$Ӌ &XA*&}#ّ2H!N XM|Ke잺F؎ߜYDaR LG߼s -ƖY 43&{LzҸؗlx<2-cy5_G)qӸbc;P5J0oJ.uu0GeS4?aG3jc..-/_0źUGuyeG/܌~Zf3)5JɪQj !p-3fs8~FK(Kwq{ċ"(#݁ҥؓ?_[6{ ,Ru|'ۏÁV[B2rL9Wlք=glsDWGOhiV pQ%*CA@QpQ6[j'bOQ*<\HEA1ڮ[ A"`o{EÀbm*g{*7,n)M`h[b6b@5tHߔb06&u3iX[=DClfтHpAibZOSHGț՞AUp=v/7EF w҃cy= [s? O_BdžI7(fGϤEB9.UqkoQ*ʦA3kM%-4?|4k {<sGһ(9?IX}8XVܽ_1WE[%X bchkS0q_6[)7U߯Je8reKaGg342ws3Q.,K1nn[{C~l85>{3./3'nzw~qTMLnZ|֎2nzJ[Rl.w`?&[~9L|uk,bC J<>ushpuWcn&P0wPG6lHzMi Rtm3pҊ:7C54dg cA PK}q񜰱Zvk9θ!jL,#ޑa O\n@[\Dt=beC{\"rW( cN1_4-v4ߌ#,-=m5ij):)7p0-7%Nxs$''8EO.4Rc'Ow2R<\4`/[f||l8/+0cnw;]n^LJ , y|NFuw"f)(׹LL>őtU*Ų=RO9=w.R@ ޡ8bMfn6Ƙmqiig[u K,cr8GsO'"3-ZuóAȑ }*78gJlng.PoJ\!_ G2&%~|UTNCdÕG%~g׋ٲs.dxP.VJS*A&mOގ4,{sc1GQgNѼMx~Eʊ3ߡ7 &4&g.r7G$,FrK0bYac טMrfް zgoM)d6̥ߦM'l̎-+տ5eSxN8o߂ݺ oAq609쩬Ƴ?0'p0HOdF:wQ%8>bvgMzd캴,oƣmOsgaO*TM]qGZ!; @gmy7iXؖ1)x;KBBδ#oʠB!^$W,p/d\ ΝbY]:u9Zѷ#d3܍L@UMD?|Hxo%X'GP<_j?h^ Ԭ}e%s7*k\C%,K6yhla+@}16ve\R1bdkPz,o Ÿ|@I=`g诘/ 3v+4[>,#6&XgW ȴ齳 c~o8bbbnj[Gqf*`Y}1ޥf;0# 9^_̣7U5>bLhbl]3fsmjQ)+пC3ԣvESҠYqlA`d?]4݂> Ưٟͬw {|YOt8ǖmQ Bl6-db[!:ȕNx]q~{7hƟbV'`hfwbfc{bF!HсQ 9HtUHM`p&}ix];4buDg󦉏+Yy"qB8S9ҳ'9d4sJc"ݪ&MX>2X_%&<rb8;2'Y O:3C_OJ'W2h4TRCF1֑V!!ȜM@*Z`0>gq˸BB?E:{["ΊYig_\srNS[D%T8 C>+WDS'7rww@6vu1hqu: {Y/BA ]Q+4'=VL/:'B!ē][FoxEFКA4^TeRFq'~fѥJR8ږgKsf>4Hـ[V Ci?c@gWt1^ rnh FHp(@O&ѷR(&}[myM1zCaYq?# qxLV=`NQ!wy>1r~~Bz'm3ޯ7F۟voU~cI8A?=.MmNQ-L>sc@o[4z:_zȱ,5"o`߁JhCs6ΊKYĖe)i Ōcb܌&O;oMviZRdPLIc2rJ>4@oWg6XViCd9oe;n؞={fQȄ}Ruiظ)LKھﲻZ&8ˆiyy$msiBK&9M/K{B~8oIS|t]6Mj=ڻE?{Y z[W, !j W Rpb>),-vı3;|hKcڲeh]/yuea^#F) !ye9FhD٬]!^ZY] &9sÇ qH~HHOW-椴f|&)tdyd'H(3-R<<<2Mч~l/\!kHQСYaqہ~w0i9V1rl]3na@+o d֚΅ A@?<\Oqơ3a w&I5~\Igye|Q^ !":'.JPEטV^cD'G`3Ɩra7Rt^y"q?'/RjQ켃Jȵ Dx!ιL`fV[˖!ҤH'ʻ<CUE!ȨBLVxMzMqg.`ݞ;< 1db]e~d~e5N FF 1- Һ/էe9"/fJ?6E*~?s%N-=ko _|j6UN/w&S>~i7g"I^Z >܁R/ϗ SJCF* Z~ؒ-qdSsOsjm*W^rcAG}NmҾR/J4.W2*QB*l^#mݚSͧ:wekyPReSLzGZrb.ۈԭ^5[M>{%-ׄ,DXۙ5# kRj]Z|>mwY^0pp1û¯Zu*ص\Izws'vYZTVL -j0GOgJ}72=?jK!/#;QhQOx˽@aZp}MJLyE%׊Mn9ZMN;qCs2Ј3A`+Gw/_ @s^ňe[8|/~zVQ&B~}L"1 ~-ǰa^LO!9cDW=aGjTN 2a}fn5)w,} _sj~#q/UyrXyGw.G] ˋ6ǁUC(yv~ hQPc;)o@ IDATYՑ#&)v2S=k4rqt쵒OShQi0ixx2[OV^}25 2TZkzn'1V 'r$)Ln>3fuG' SiĘ cǦi6x#'3`H6jF)GI0XWܼUkԦN>L@b=#O{ԭOv_vkzc#_ףoC b Ryǯ*ƬgIt7]v>Ң/ԩQj|ۮã>ZY :5C|xgÖԫ[jGyޞ6%th9⣦VݧQB%Rwho-|g$5 I\q,[:zڣ|H#UJ ywҫ*N6suR /wbHĶ87B(V^v"6+HŦ{ ׂ2(:G 5E QAEhRk@Vrǽ9rc}kє+Srpuh9K~:ḣcso i3ȳ#!x[)XxPyL )zK)PͼחOMۢ՛miR?j'e :l<ѬYep?wlQX]6 g0&2r3[wRwԡwSذkyP &'t?|'qԓi_D[6u*6gWA///:+J4ޭL]hCn(vJ!c (6j43U[2|6g6OXQkN`JV/QK\'S$"H`;vPBZcw8|hFqO;xswdzP{.ǎ]rlC fӿnBf#u.<}͆M =PL]}[Y9sɍ8|n=un3:)`x~y{׍tf4dl܈f*rmGOoJi3 86+fg_;ٻf ɗs3][76{-_uڏ[̦;:!K{=Y Lcw._w$ V~d۞]l_)0[J94\LILߌ*g{7oMܾ,,rw]E 8Cs7ŵ]nrf~ߧY2R--S2wFFީ*r K\ʯ5)kU/\! e[ _-6yHe ɑH?;ػӘKԛ;{gR̚_BզO @z9T|S! OݘF-Ye1i:]9(' k"ټ5|)מoW'b@<]Ɠ#KX5R҈ō\v U&L:_,xVBF.8T 3S^@ǩ([$`̑6{K6V4Υ}q7/yБz -eCRTPO5[]x>$^ ;7Iw)]-{)Ce@٫PFle ?\(d""2dȒ-"CP @[hNJ P|?ssIMsΝG͘3g^`DT\*TՈ=1moҘKsjt1߁3+8My+exyp牣8q?)0SŶ0c*wjr*TEM:Ȓ:y;^v/Յ8, <4/Rgޡ=ߴS8ړךZyIOv\&~Zs2tb/}ؚB;1(ٴ197/aKF8tzǝkS2+SF>{Vc(=SL4qN޼ W!~G ~ZQ*ƈ&\ꊋ-ܔޅ 9~À;ֆX`k{b|y&h/1:yY'ԉҢz k<χ{&ۈf»lH+;e3s)˗d8>7f/%e{d+sr(S7@WsV6/B|wTR/)GzIl\8/:^!T OZ+mh!8t>8O;gmQ\ K/1ə˛kWÓA3~vXXlX v`.ލ6:ҮCW>|/B<or*,K8\Zx c uorj)/)_xlG']9,Q]ov :Ѯ]a}0s돂bð~9 r$jr-_5^x{޺C]Z`~l~ gY:5>fp5XbwV[l73/h?jۅ&oB>_Ϯݻرh8OJkj`+'r řpqs!.&All<0 ~{<{xҲLLyɕ"F1@Y-?fo|Ɍl&/qf3f+""i~ΥH<]B"sˢaX/eJ4qkgn{yRFA/cc:¦n8pؘXps5 Q[g0Z}:5Km&7\HKL,&W]x'w#ojBpX&_tھ=>FGko4|7ז`਎Lnƾk˛{2w)/^f09tkz5cIަ=I;+K:痓:ûpȖL)N^a;;ε&eK;%שI`&|'VW ];!-h>3$M`=< c_{2{3jɬs6?džq| 6lEq" tiIzԒNo$'p`:6F͚p)[aspǠ$<-g49?w<{zt9| jwxdJ߸}^w SgNg֌)Q58%)9'ʵhϖUlۿѵrA,f/=q]<ETJ`+5.׹0e;{g`q-&/9.Ob9}2q4,3T>˚UKY4m0'JL3[jF|zJo'"""I29xdc']>5g6mJ7s=ˑ+غtjP>,nЦ)OGfsPQ :q Q n" mpsBu )bOB"Iw܊rdZΊy_ӿd8=+P)6CA;r u{Q X]|@}(^ ϰ{_)+Y8{҃z</<+/ςو?Ͷ糔/S f;/ղ l\<>Mw<>?d[!c0czrUcx.#O3`J-E?WmY6v Yn-O⃎i5 <[,bc ZijT8ǒwCK;3~>xux;lgܾN- Cꓸ[~Ʒ[|i;ƫfĆKyq1AڟW̅в>|AS*ܭciVw`mg/bo­ځfOϱ$B#XI 'ʣ0 fÌ{V҃5[)ڿ5 VyRPfգ,Eew1ר3pX֢6q+ pN~ϸߘky1oT3.hb1pBpmOcXlv.G֣z3.^_a$Mtt 6l~D Îm$.G;^U7[/`ךoYp2AI -)KƱ:v ]XϨF lX< 63:ȝ9D^:ǥDΌ5X2w6?Ν͏s)W^~G Mw|C%CqW80{ S}7MpV7XȷLiPyIޙ:SC vbzg$ <~aqio'w7{+s@brG86B7}Ba4|( &:&x=k\c>\vs,Dcٽ5lgc(W7 O "vNE+~H0 ;KY{dXІj_ppA֘Tq[{Nmbt&L@n zd$Pt(<^0gVJ(i R'nHL߰Me^v(wm`kV LB]CfcP?h=3cɻ ?͠;P_ y+e —CQ{Å\kag,􌌈޶u/apyfK_||R&L{9Xƿ:{/al/}|[ዯ=B껳hS Y*IsJ:0W /~Cp's>Z~sѬZ( nu8VHlX>u.!jHޠ<Xzީ7.qI[lK έ!I%.gt?x M ln3K{Ƕ~Cf辟蓥m/Tf7Ik R~^xtϲma(>ֈ, G3ay΢Jm| 1y )65HVzƭR,)˩ȶۨ0i&Mr[p%+=;c pLZ0c2m^ frh=1xGӁsW>5ZEzqrhz|}JS}<, L6&N;N %)qj; DϮ5]sҵ8eeÒxSy)D;UV 7GS dux^_=u|el|Hv,E3ÑUDD?.A붢B+Y>TѽzVIs9y;ϾRܦk>HB>d 9_&KnH(Sċ[kF`PFA=e:uw#suTgG":d!|C.C$DLѓǜx򹁌")SINW78l&G൏Q^=MApV߹*fVͪe~"""q|"Q VXJ^9E,%xK:7|/i1wDͣ<z2ZމC#_>xzn~:QHf,;7l OP(ũ#lD[q(HoH\ Zo1[Mȝ4Jϱr?ҝcE k9V26걒(Xqqxr,"""""r?< ydLR""""""""I VDDDDDDDD2IH&)X$+""""""""8_߻{j< VB _bs6+-FğGrߤaFCXFzu۟LRͿXv~B![].}^睡<< VXFzu*5`De5V9?u޻g2EDDDDDDSc&w=5gRZF8c;;ε&&6 FhA:A}I?G`.b;nD. ׍3P^c='L,'}BV[v~#!"""""""t VX݀^)i-ǜ&ڵ'غz(jģ|h}kWθ_) s dc1mjO|-8~=ValU?Ǹ~uÀȟcTx>֭fCY """"""_`I\Y}iРTZOmc˅ghb|,`^6c+M9c:fu!z]$;lՙF,.([Kq8zxׇrS1Yl)ݯ OLxT "p>ԕ'rpo3]z\t57ٓ`JX>>oӘqFB*$ڢz͋"~v 9ȕ#߮p,+Gl4>y+leB٧ PPVF5 _'ɠɟF"sv/G ,pLfnX|vNCΉ?3P,/2.;`.M>#i|ٟfP_' jr79lXLbeiT'WoP 1{/Dy<9H=g꤭6/ |,FXH IDATZF] G^"8Xќ8&&xL=V߾ܲ2AsǼR=˰>}4sqUv)wFR mG &qDz $"ތ{<S]?ɣ>X3^%ʨTq/qG,:&'gV~ϑƈ$t3_zLiۗS/)4MlWv+[ɋ}yC{'C=d40I+olC,[|ɰZBYT%?€$&/V !U~=fW&îl+n^7պΒ¾~lzd!%"""""""-!"""""""I VDDDDDDDD2IH&)X$+""""""""`EDDDDDDD$dLR""""""""Io+ݽDDDDDDDD+Y(u”YAK!ƶ}^kȿ,w;“–}d=ʄ:`4EDDDDDDFC,Eh޳͏q(FPݺؘTux.}8xQ;h,""""""POXWW`"{Qlnl_v6-W fV^>޶\oۭP """""""X$+""""""""`EDDDDDDD$dLR""""""""I VDDDDDDDD2IH&)X$+""""""""`EDDDDDDD$dLR""""""""I VDDDDDDDD2IH&)X$G݀~3e' suZ'W7[DDDDDD?FJnw^ wֲp<_nEYǶ?O0ZDDDDDD?HJ8{D۲6p7cDbM?{+'?/.XcWA8|! {~* 穟t<U!Ki⁍qSF}N P:K`:-9CJ3"kAr/H3aYcҹEa"t"tI1G S~DO?0} lM޹qiU8 }e:9}f?.XVN,ݐơS^zaN6KX9q2|)Ӵ]] 9q7~JU agI-;nt'< ݡOύ P8G ׮'>;Ne3&̸LbQ:t[-㋈HfJv^ ھ9|wkNlQH8ؐaM(puw5ѬɌ10 0m#&FLx4F-kSLx=Sgeh_[6ܝ+RN>#&-D^#9\y=lVrCC%k |FGJQ 7AD_H܋#˕vh;?a`]8S`Ƅ WCY"""""""bO=VbMOQ,-a[3',%:фW^* gϵ סuM^8nXxlTϓ4ǫLU}-ߏݍӓٰh>b.6SKٽ9uIӀܚve]]!y_w/6|h޽dU6IJEG  (E3~_ $*ۯr"`ؕve#y[F:K r:}26 """""""I VDDDDDDDD2IH&)X$+""""""""`EDDDDDDD$dLR""""""""I VDDDDDDDD2IH&)X$G݀Ǒa,ZKr-V͚Ҭ&PDDDDDDD,vj ˋWzh"8yEnz#niVK`f|gӻ#""""""h(P2 ѸqcBǛJ+0|3pР{(%U?d[v6ٝDu$g$"""""""w`% -^O//5 m={VQddw?؍۲ d猱R"""""""(XB,yHm/Yr~CBXd=fK=(3Eي_aԯߐv0ylFƼMaMCZ3dz7z&&5 [RD`~s9XCw0NׯOVt6ÑIIvزu"K _qĚeCK=Aܽ_:%+Y'(ZlZZl޲Jٺy*PhQN8y$hL^Y?k޸3Z]Yðwcj;k3k?egt!Y,]<P:? `=Eup;c:?;M d7N1Al VeioXǕf/e\h"MJ)IU_9Vw?_,xmEDDDDDD<fMfWZ!o~̷}[AB׺p2YoAٴƝ=\L/ə}nXcNLU:w?[CAG@pj#O=M9ɵ el K:aAWS \]nC2%d{Fn<dŊrIU d%TpG?NH";9/A՟2@4&S[f0O[p0  7/XN#XL (x|DfUZe/l;B}^fWpV*b˅E$ْR_v$qQ"""""""9+YywLJҴ-ZܞsfrNV#V 3>8=ӋY+Wf ֬Z k\n̐߭DE*zf-l Fi V yV9HbJXKFߺ-"'%-1a#81Q]|c 9GDDDDDD`% 4kƵV\uիu&jTʕ~ޝ|!xo$͑&|pjV$bqE`c' '=r%&R,ĭX{J աI.B9)P^wb"[xh9Y1x4KJ2L 4+Vٽg/aaᄅ{^`W`ps>ݍI9gC|Ӫ^jkIr:0yPCGroOyoe/ՓTQ.iRYRTͩKOR Hҗy^rdhx!v}s"""""""#fJcݾzI wiݭٮ`W;ڕuGaÇ;O^ 2 KhқW)R͛5Ϟ*olC,[|ɰZBYT%?€$&/V !U~=fW&IjWoڒX7YRؗSmqrL&CB<4HDDDDDDD$dLR""""""""I VDDDDDDDD2IH&)X$+""""""""`EDDDDDDD$dLR""""""""I VDDDDDDDD2IH&)X$+""""""""`EDDDDDDD$ubex&̎.dYסjG\_< sIiyD-y)X΋^qZ.Z˭((ɝ8\HJ8{D۲6p7cDbM?{+'?/.ai=[%<Ό[JlH>K<7z1.ǙqUZjP˂FPB">hnyRIJzy>~SHRΏy(XbFB$;_c#=r,wS:([X:.4)ٟ~dչ49v݊Nn`O7BO29Se|# 4$ fz{Q6*D:ͨ|[ΔeK"""""""R%8O6a^MUW~KyԲ0f$cq87 pvoNz sy6& _}stbx:PxNA, """""""5 Vb'6\%mbFNdž k"Fxlxnĺ#F,Q\c>c5%oh@Nɝlnw1`0dEDDDDDD$,e뙚</CJޘݲ\^!J=*z7h"l.\19_@[TÔnFxcRWA)ȃro(_)a?H0k nK^Jta#aDN.[_B46h\#&#m0j"eoSX cS .f KN4앗 A-ș݉BZRwzVLkq&UU)Z57nٷt- 5t58b!Z(TEZy$}ys0]Ko)ur%׌9u`5ەzGCbh_:l޽{Ы rmes""""""VkQ(jǏ0ɋHHU_OٕD洰v4֍tuddm4HDDDDDDD$dLR""""""""I VDDDDDDDD2IH&)X$+""""""""`EDDDDDDD$dLR""""""""Iӭѽ=w{I=VwޱL$e lyxEeg34ˇ.ӉA4€q=%s;ڱoBp֨Ok<@ ,IV۠ Ͻ: 璂ٙtm=ysҥE#jj@^_ yy;fȆk`,f̦cw՟51i ^FAm؊n/D~v'Q^cZͦ+""""""" /` s,`;ÜXrVTj1OLg@5'~m>ÿAEX.\J jX "6LyΦl2p32NBBj5tˢgo:=2JAf'~B.L_Q_S4~GYs,KHH`ܸ 4 nB&7۶dІjժSVsS?7XitԡE5x5뢨ѹ3]8{@e X^E17lnLv>C)B:T#VD;w'=Y9:+ Ӡa0 weQ]!VJ`v4cr)LHHylV9 zh5FP"""""""$M8NrV\#8q=@Wf0}.KEV|&^ %,ni̸位8lUIFsERH._ַ^N؈7h\/9o%f3l2X(~ؙ̓,ftvq9:;`[ʌln dL&-GVW\Y?lʕ̜>FeѾVR۬-ƘX|vNCzTNEz%]?쁯+E:L`zעwtUM5oIRS7o|}}o;~X+ƕp@|X=~!o狼XmyXCTѿr$z௩XuنH=g꤭6/ ukit_M[O!BZD-#$F|>&5j͉lRZ_.O\4Ld|{aːԯUZM2toDf0Xޡ#I漷2}W2‰GnܘѠL9:<S~0 ~"""""""wqfJcݾzI wiݭٮ`W;ڕuGaÇ;O^ H+eǶ-L8+WIAKϞ=ptLk?%ϼ4yA$;geUji+]qΏY""""""`[`2x$l N?Cmcvyߎ/蚏6oЯM3z SVlRmh|:qK=ٙt c9nUjζ/d0WNT-ɖ`#l>;FadˏWxSE|̀qcK& S -6sз" s dcAL[Q˫<1՜Z vcp)?'cy+t#825~8“;R[ʼSbrgX|: gwdY|^ۥ ~gƳn>L[wėe4o~FOf1IW" 3|4B oߡ7?j~Qǂ53eؼAo#Hw9Ԙٓ'<{46=IB&}7n 0 M`Ƕ-W"&ZT՜we ,?V6s89[(?>3yLIoGL8?"C>GX.RfJL#zKɉϵ)Y Oy+Xr$ߵ,[7d<cwtUwwH!Bh"-HP *+;( ]#EA`)*HtR|$%$Āsd;Iμ{̙u)]~]k~ZQcjٳCrR5ܺXnOX"kGD'lmj̖HEx7ɥVH]OW&iVs|MrdQv6QZe[UaR~![a 7VXY|l }V>_(f1.L,%S7vSσ1rfѰIM>>.$&$c6h\8SEPvݥs#\`ŢjШ|||4l`VYW,mO_~V&OyWWT;i]rS׮d 6C=T)!A,Fyev\5;WW9y;eIa׮&_,:hFnI3mc[ٳԕkfpyrhfeI'=yΣ}Z0lͧozp]aUҾSzk ]X0CC2ƅj쭺edU:q,9R``I:p*5֝gk2K#gS!l?vRl)c*66qSEjkIW՜h`3ʿnUY9OKF""҅ Pg$Yo[tڒ8RF:x"Yow RK]v׎;Hr."ydKʼn?IF5fR4jX5i( G0(k`/f١ꃪ2O!u3(<%z.*u@}fLјWJQޥԄ鯫x,}45}z宬WF ̯G>꯽c鏙T;I~FA&P:א 5eJ/=?>BVhҥ lC6ȑT ^~Mk=ӧ_6t0}mdl?jW$͊bfӚ0)y[ S"ruۤf}1zأ{1Uӂ1VD 8`A+"Xp VD 8`A+"Xp VdKe,>md8et~Q:UI2:3 *Ŕ=8G%k֖9' 'w쏅I7+{Jhݼt\6go6Ux.Y{cf02Ms/KuwrSG7Ѧ߯2+{jjTYOfR?jĝ\O2i2:`bwQ&|CG6זCc[Jz@=cյf1喳P1Odhӡ+ks\?sƞ(VҋK/h3d.SH׶.KԲS+=]}[|ԾF)J:%ԡr.BhMi"j޶u+"sjtWUZwQ_.mbQE^gkj֩ HWBM7F#W]ӝ't͘W;ġ:|]%JpK:|$F`Vg\ENәߏX$!PZ9COMY}N~?\r%c6XI7VݽLnnr՝Q:ç:e,e*XIKWt*O<3^%T3Q.Rwݔ#If;Mp͆lk!gZ6iѶh T $)-1T*|'gzp[ߒ*H#T]ytbp[Hݾcr؅+rwwo6j+CcKrQ\5B+9bu\ {wWǯ|YU2Qutvm$Yu)n|vbTR9t_t3*],)u_]d3v E2`颊>E{.G*IH]|CQlbxLٕ3[fYE¢fiNGJ5[(INz ju-16\Tjc5uAe-VJy6yqO52@ qV͝[1?SU/~uժfq6݊MEj($2=- wlr29#oi5 Kc@򷹪l*L*RzRjٷˌyTsʙ|U* -UGmJyrG8 "Xp VD 8`A+"Xp Vvܞ5Y~nWF!@#XIAA6d|||[Qcjm?,9K6wd槠WV֥k-mɯkz_ s3H:l>Wmѣ|G}[ױҾE5:x*t$prQ5~L |T{*k/_^2>Tٳw:u&IѰ!Y?M!кMll$u Uk7+'zoqY$Y-Y=[v]IӷgI_EwNӐze*myzڨaW+4馒d պ08A_ި?/Ղq]ԼJe1HʜWrd mӎ?kٴzT (:5\ U$YNŻj{t`ReܩCRb(7wRI&yohٌF[5(LL^%TGׯ^E-*RUY7dGbz%VqIӇ8<\dpU-ޟ9d%p[>:B)2y院QWFI_ZܛrV54(._U#ςM+ЯzQ=լ\o^ӱ 𥎞N\!]EREmZ6j: _T?d_k2gYbpJMWvP 'A6-`rC7"--13P >DŽ+ľ@{SŜ!}ح 60=w9h =:a6_[U5+&UAaڰcU:w[gt:< KpRqri87rz23*Oq5mVY;u=$IR~ps5&/xVhUڟiy_UJ̔ >dž{t0{\͞ɽ*wn7͞3-[um_DGJV[6(kp;/[ߞ.VU6K¯TL*wVMch5b̚M7NDEYes*F ܵa" M6o_aJ:FM}o]J>gpFtw"7z&Ct0{()2_X R-w.[ߎ+DcMQn9T˚ثRAzCMn[C嚏Ҁz2(J['\FUZƼ2Q4;Fe/TC(OrqL ꫑5mř2+kgU$M?ʸB&/XFqV3(:硱#Cd*\jiF4y~8AMӇo5;V9e}V~vvo#66yG΂Me~>"/;vM2^5&]J ۗNd Lv?ve'n])aw/=fT=r,@޹e-On>ymnlC6ȑT ^~Mk~q闇 2L9aHKRO\o+[fI6ŮlKX!!-)}9:mR>XI)1Vҁ595P *<+YDI%c5cQF'PnD7|eVW27/P `<AXyMUp$ό(Z8`A+"Xp VD 8`A+"Xp VD 8`A+"Xp VD 8`A+"Xp VD 8`A+"Xp VD 8`A+"Xp VD 8`A+"Xp VD 8`A+"Xp VD 8`A+"Xp VD d@ژ Ȥ N j@''r4s V-9ij_]<3:#qw^OLV1 )hW-z{MEYl]Hɠ;USFWC6MjS?Lo+"Xp VD 8)+ng:a@L/I/p!!XɮV"[SE=U:هH2]t:BWYJd7g] NNDX U<5y:x%!Xp VD  2!MakK?8| lvɅ*zt_[ruq䏦rqq uh'IvR_&ӝwl k\ SᦫJMkQӖSWv :Uoi:ٸ/>j٨4|QQd%TDNw0z_wLNp-RY/9ֽ=MYLR!CX.ie&^1LՕTV==%b߼WB l]_TXmTS>YIBT9@^PНh9kZ5_)XY#.JU}*K *zeYx^z-Y/Wj9ؓ)VO@/_ &,g?SF#ŢjY7H+TU7>K)}HFPjm;3Z9UUŀjX-?&A5|-WꭇG# IDATZ};B5 R2_JY {q56( tjSĶZs)EwVKύZ]ɘ]{UZa29ge5櫋g/"ɵTKz$H]OJhͺHkJxeoUVE2M2'n@?dmU?-L6RZu@-SM WW7KZZOк;iTJTNb8$*qqճz议]:>nz}'ݷ?mۯwRtt:f3˜vͫfidCOkWW3kԯ{b?-]mRY˵jmA|;-h5g)Iq:MiƟÀr8N]fڽkV +]C{jڶh{/Ҧiä-l^D Lӏj(T}*,!<)Iv٦ Ú*XN$skzI'4`_E}F&Jqr~)+j_1s:"I*Ӽ>[A;/|jܧ[˔hS#WԸjo+Q}&&/qJ'u]NwևUNj|Ʊ2j[={Y()<9.B&Ξ:/w??H<*RȢ'.>إrI{REhEb85åNduVBsV 't2ia>/?;JoBIeQ?iuڴKੂ^S$$)}/^[NߩsaZ=O wu?3gևSWv w4jdÕkZ<&+xY,Rf0{"¨U/Sj][NrRjT,r?ju_Eeep) yNX Yk!t Vrі?o*2*w*wxEI1{7rrըqtFjF}U(_NÆ~ \I U  e` ]cOc5~i7QkVKtYm|n?QƸ0M^^%FQ,Ya@&dJP~ mKɳPVIro2yeЛzS*eWkS>Eo )h Cib*dSԎqj8uV\޺yFB8bW?2&LVl f[We0t|2׍1O=kLƽZ5^SxkOU`ytmay@=mJ%VVfR>dr2JVl6);smb?&(3]=~<Vz)IEn.cX#\nvǏԑVϟiTT17y-JM}]'ŇsNЮqnr1D+*ʦċmRMY\މ崾U__[/Ѱ)WrDUL$}d2e̚M1$V"ҦWQg3~Iq԰W ,I*`O cfJ6rJy=HS?&Y|miHK>޾z~7_ۧ^_NNN%k\TհYڰ.TWQdǫ5iUՏo~KjaǢʜ.ŰUٳgҵKdS΄qr}}J0pmk5<}/哫!Va $M2!iR[jmdm ![9^2=!:&zI_z[K M¯j(g&n,Z?H&W㤢 .^ͬY?׶~=R6eA-.&?$-y4)J5{o#G3ԾtkʨE (S VU$E8-L|h{띍5jnoUNe1yU/ SюvXP\tL'sO]zO._ꋫ~<)7ŴaΫ3եÚs)+Nu1 ruI/$+(I8a&lsN91y?ƽ\T!.Y-5TIrZ.hRjz.6O_w&!hdw6=yTb%̻Za>~GV{foʮMK=2E+oS4wSu{-YdQ?u."̢FOQQRŠlAMtl:z&U$MU7ш)T%ZE۹N{TUmZGs\S2SFZ?kc~͛M3mesȳaYNi4m 㟽9vۮxh8Hڛ61U>tCOJBr4q&M$TI/+xQw;(Є*r7_Dov|OsQImU %P zW֚ލP)HϿ*}jH=;.! ye<:1TZgixOUUƴr*JH_M?9J RnE,tjXHuUH=QOzb`̭̚z]4R=E5dJw2`>評\Jv'$II:HeOjq2x7{䖪T>H/~r[-& VOGs¾j[_V~G?ޖ"OĎM_JkΪiU.+'յV-~5}{=.ւcԮs3_m۴Yci}ulKx2P^"\^ʗ+UKj>.edI{#]$3oP?ve'n])aw/=fT=r,ilC6mzc~<ݿS-&˪Eo*=6Mΰ1]?;uڤ+iy?-h闇 2L9aHKRO\o+[f``[oiM̼-)}9:mR>d \ߢS`z(I{ n9hUv,l0v#&|~fu(1ӧ z~o<V<,j[4H&h=ZS'>N$Whūu˺Sau|:dt=4Ne5`ƌ_a+"X҉'>@1I+ e5hx\FWRHx g%&H+4]u(b^i;j] 8c@:oB7e_GX26֞y  rUT\i'SI:ph_uYZ׍W@<<{n6P&.W(N+QR9qg%\zT<]ɾU]V䗰sJj'~ nh<6Ʌ*zt_[ruq䏦rqq uK &LQFM+Fotf)V]Z3V?ݫk? !-=d ݡP T?}"l#߲Z_t[Z74l1'(UAY AZ-Fg罢r*&I6.%[ uޤM4YuS5R{&P_%\Ж[+`0uhLboQxXWX+h׺Od_1KZ:qn4-;kӡMC(?3gևSWv w4jdÕkZ<&+xJYtdN{5lX6V&܊zvV+ߪ,_'9wmi/56HW/*d]GUN@XCh=4d> ڻlm| ZZX% nV=M2Uߠ*P],CaPrҷT|9 :p%1T6t*/5w>O){u&;>4$vM7b裗eYF&+eϗWqJro֨WFk4BR:VPHMuZ6johKh}vW٦&)"ɮRJ2qTU06\Kz(UKjudiyLz,3_հ[<6%KiP_hs5oƺWU Tz??>ظ8{Oۦ}2l`I"TI'+xj9yǮٕ`!)]C ܫQt<F/y5r1P3,T2Iхڳ{UN?z*ްIQ(dn)+MSdFW[>lhե`} b lJ/HrwN*Tjr!ߟfy'p?FA.)~5*JwJ&NO zy( ]lVqZ0{.FY%YyN\}!W6j{S|hAY+;eҢfn4e GhS3 .i*m7h{UjH =\FWxܴR tRuP̱QLLbc-x4Z4v^ p4$TV!gsjlqNO\v['ShU2fQ~ʮX>.qZ{Ӧ?'r@IU(_N&פ*`FiV/8-W |o5W#T'lSzLmrbyJ+!mV*inc9wMmdw` :wZUU0i[֎_kh==*:}w~,άF[WT*05RF] Z7&?(s5%&-XǾʬr=?֨ G4UMPYUBj0l:=XUW7]5Ak< WKrTJzI]Hrۥ̼̐}97H24ڕ&ve~پ&Vt] Hrwwjr3[Ja바6nZ|)㖳 !Qb`cOoC]I"\_Y_:OyG9S{tu=wO%_ɓ'wR3X:a3:.QjlMJ)=Č0R+k^y@_z7Z4f=OGO:B;wQFC_<\=_Ձ3gll|,:Otsu֗-7K\iݯ_\Սz.yF񍱛bz'Xzsbb+!WEKgItWkI ZϿCkx_ jV:5PH9Z=wçtOkǏ^y;ޡ9N/:C(\+VbG=WPrFӃB밬Vv^9]}_j҆վ#tWh/ggķҏv}-xaOa}M?|guǮ@sZ=EetC>އ5Z7F;v>k瑭Ϳ.}S3t//D3gcjS>1]{ :9s.>u [kʌY;4V7|C޳P|֍:TS|Hݶә뙛uϳ[#v!ѽ5"i+懲tO~ūjjɺSޑo7w}G_3fUM:JgGBcn_E^O۴b%3+#L0< ϮDk4XxfZr$I??ϼMM6x?KG4]MPGԏ>{z?ЧǾ&}Ghꩫ7~@O?c5udCDr{ߣ K}[ہfNn1,h2x޽u-MjvJm7g :f+X_8N{ϙYI] HחiҺիjM8YG|wky4Z*/:#jM7k֡Qb+}ۺ9ZzƳGלMinVR/K{6֓FkovW:l`q[!j%w˭,SZ>F>'~R{p.~-Zћ/neS5Q{z[jOMwPgz.SC z7juܜ٪UkʹO9;'O=MGI V;g]_|[B^^9o)kR}Ů2=:oIz}+z>Z*prKj].V):*!X}PJ{`Sqνz~t_ײ1}8G~~iCՒ+N߼L&L}K޵*ie͗j'В.s7tn:T* t֗I[iiTZ9]sw%_J%ex[ϙvJW_qnr6]cN:S2>zm9z:|ⳑW:F3?ιB}[&I͝~9sW/KR}4ij\w(Zhl6VyM+Wb+\|*>j7}5ޮIaK{%~Qwr街u{5usϏ{;'u(}z[Gm7u)&GsfOORb5 >ͿO}?ҜNUfP(7][nhcCmyuSt̝%o맿zYowrؑ=cԾ7'|p%#Gj옱<ǎ&fzڎy VB S\}c*WV͖Qhh%Zqj„ }{{{UT4j( p3YEgWIZ&k_LKh۴:XI+8I;U Y|CO}ox%XJE i玱+R׺Ֆ6vRZkĖv{׏ed"L3c혱=k,*1B˔@i%Ai Ǵ<;TUb)Z}阅j|sJD d Tbꦢ[˂vV}9TY~ Ҧ${,^H61yiU-m@> *5J۲. -T*n9VN+*VTn>T{MU.aCpdғ$H}:  VBIo>sMt^vpbӁ  PIާ}CS|c2<(m~=+x'km q %$=-hivuM,iAL~qܬ@s"fo}k~Hzz}OeZ TAv UB,iKox5??a'kR1LWd V\mi!&XuL ;<1+XpO*;U˸Bwq}_},hi>fՆfWU!tX3|=&dfPŞ dNulLU\BU6aNqfq*iA>3dl{{jv+y*Wg"F>e-vԵ^?6GYIHbVTi}}2J`EY(FJPȒ_bqv`ow(v s{ ҂(U*N=n9kckJ48`IBJM>+YK%i3?ǞT1\멄Ҧ@9 }m>i_Wa#W5u)uB1ZR@{:ٯbzM U"YAb^KR<*Ib~*9'>sy|U*1(*5|A95+VdaGUeHIZ>U|)uUB&`uUBas6i> R% Pϩ[@S7i>B ;T1^mXi؀%y}s*{ʎΊ;\Ykn1UrWuF\Sziϗ3>)A'yU\*ɹ}*4#s gS0:/K L\B ן^gq~Y [\][qM)T+dq163D1M|Բ9]Gy슕WۮPXe*)A--p!XJ VB~;8b*>|/M +Z|본%P~w7F'DڼZ̛$k_rފOB2 Zs&)ɶTv'Bsv{= K`UaoB ĚeUJiG/7} r)p#T /d+Ua48<+S _̠\k\x֬TCsZ{Wfdkc\+\ipVup:d";x/{e֐]/PqUB;vs!DRMb/$+mB1$i}JsZ멸T1/mڏ/lq@{ c*3gU*?_&*$ U0&Tv{cߋT W N|S}ɱ Mӑ+k[J:YR54ڕ*@R|@y€d;45kW 3k_bWBwI~Ymt"X Uaڶ%?]bVaI_RZ^+ t0Ud S@1 v_Z 9\]*f I|,@www+ V M*}{ [#ފlj?Ǭ$IBkT*5Ub(F>4W05`qK :|SyBk$C\>I<+:XR;}Sp[;4#v"83뮸F (i먤)&PNi@ZP`6+I@$nk*o>eQhRͮLIvbk*T^\gE<Ա@UjKCw kkoW 4AYf*U|Iͥm*R )i!ӁrW m Zhw V*Q~ʕj;p7TcC0 )@%Q`;KEz"PgOQk*\gk>ٖu W -ʏPK=(}g׫풥oVTJvWIhTq6_3a3Sbaq& ǾPzs!&LIH b ;Pp;M**Tu_L[n p&7 ȼ)pe@C^Jg){WRqC6Ymn&@!l2O Q|}\PHZؑ% Y%&I^xVVLIohS0b>Y\b*kW"qr1_]\m>1,Z]aUد0~HqqU}ט} SLeX}iڟfxAvfP"<9\!f_[lPLukZАVS"m_leKK=ky{ԙ6j_Y?=cC"@y,1aKZ5Klw_%OboR&2MJ*k6aWc?5ȮV 퓵Ͷwk ~_ߢBJu^i`o[t:X1;HI W*~v$i@}iDh۵ꗆeS $Bm0E~i*s>u} [Z=(dpms_vq|3Cgt7_>4ļ|B]ﻅmiKӡL+VͫV+N)A9fܶ[kc(RT } †}(0Td Vb!k>]f\1gixIwH PV!XrZA$P럧yimkMfBhe V>1!DpuSb>w~Y#B(P %Px[Q-YB_{8䂕y4 XBǧ]7;6Bh1iӈ|I;ߥ>Qʰxm  פ<>>K>sTĴ>Yy0$˴,*]U Z1ߧU#1d6PLxPD効'yij_̴ W[Z[3%|1EςQ`=kJ3e>3c>1MLካ_sfiw  yEz4Eʁy+W|]6ouJ+Ut[RŒ5[u;շ*N+;զ,Ǹj@wj!EÒvLlJ]`7Oxg *S^#ؐ0%kduJ74Pl;r<:]3c.hjRҎcΑ_־tc럥%_+*R:>E,T-\C̹I᭘L;(bLBiAc,w\CB*+E/*`i\>C@niIDATwgzP Ƽoչb_t9owWD(ҩ>&0*Gst}"ީ5Fb"By-0dYඈ0%VUKY%`]Ӆ U+}XDlLboѹv!WN|+DDDDDDŇUQnQӏZ[=,Zw ;THOk-^ W :8 TDo #¹~(yr!""""""}]N@WPjX+։mj j)ޮXqv5zC{a@E*}VZ\,;&u+s QSbQl:va+WTy3Xqu`8 [Dmg7""""""*(Qs4W|3!ِEy 6S,GCc (C{ԎzN v90\!"""""OVR83EOEZGmካ`C*BDy u^ySuf VSa.p^V@*\u, WnH?+Tq^%6cjECU [BDDDDDDEjG~Z:EY^szr ſ~zC{(Ze:Ϥ\QY|Ɠ+T8ڪU(1((8 h0HេL&kW}l n|Z%P$GwbڳZ[%`P|83]h+'LW|v/IR n_lN;w6c믎 WԆqgR!A V ;ΫbohZ"=*ةcGQK97QI&XZjUS/^>SR吽{$A;qz^7p4A󪨅-PECXNP_DDDDDDDNh߽Kd[Frd>ZPKh٫<hM*:EVΣr[8`7t$)&halkq׀=d^;N!La&i-lg SkA*BQ )$ !.m5o X%%wc %㪣LhwQ^Sk)(8,HDmmVE{[;9A+ȳ[o2Z)Vdo@=pQ^ٌ= TR.2@"! (8u(gE~L"""""""O(U^`%WÕBvd KԶ_ePEYbjũS7_C$ wnkhE,[%& "j.DDDDDDDŖERE+RԂ@;hڦx5`qwlx(GȗmĵPn- ._ ٌ&T @f `Œ@y,\VEDDDDDDOljܶM~de劲Bohlśw7Gmeb/tQe h$I$7s@\@Q},`(KDDDDDDD'V΋Z]]VV+g~87Ҷ6G~e?( `(A\ P$1 $IA5DDDqX뗿|ƌq_@Ev'ῊIʭHvS@Q$ U+"`( DDTM0 tEp_w'_kسgW5h T\am_]`shyOKOumΝ;?^% >!]5kQv-l)&On]yCqa/;;/NzC3!Z[\o:GaOVhXvmzKDLAkM($I0$"PJFh]y,I쏖vL[0VH$b{W#GQFN]?{x\͛7CRv{ >`uJQ|yOv-Μ9XDGG# q̙3S?ժU ʕqG6.T}:t0&N&-\SN)pC9s0uʔ)NP**zG|@kz9GdɏeV-AS1H(I0 ILUd Cs ;BBId QIӿ<>q[S/zj5ÿ 2ڵo?xX\rUVųώae8arLhѢzjBCCiXd)N8F AɄCU>lh>;wo/Z99&4l'pWcoԩSDoyǎ  ''y۷̛Z*{v4f̚ cbxy߾}1R/"66O<1-@!4$~ZѺ=5jDQlѣ 1q#L<ƌC$n fΜs~]ߘ=sf]~իcǎ+\2_hժ5Ǝy'-_Aٽ~A`` ~G<(U4ǵkpw'rYKDz=~}hc20s,âEKj*,]o*U{^IKÛocǎ! 0CzwMDD٪=N ꫶do\a;k yѠApe)=?6[-CMuqvY<ʗ:+EF^mIuV?`!I`d#EdX` z ]s'%VD.XF=z`O1xXƛ07m  QZ5̚=;K/ARv]`Aʫx≁'ٳ'v킶m`5*5w'ΝnkgZ1{KT6_ aǎ?g#GͅoO6bܸ\2F> bvpm0,]I&`OSOᕹ_ٱcV Kb=ؽ{7@$ۮ-V^H|G^L{>^;˖.Ensؾ:v,Я6mZcĈH,kvރy)_@]az,x}[|]q;K.]||HK/nU}_1q[14.^X`YPB<;z֮]ҥJi~V0klbuX0>cWQ.jBV}AwU؎9c,̘90Akȏr)xݶFk1U^,\QL+(`AYwm+ spϨS^BP CJ=L2 D&QZ54jpO˖u&.G `왳8{.\cǎaȐ@HHy??@OԿ>!O~ IJ E;@r퓲$0h@ ^hw1'# @PիW hР>n}}~t$!:&wֽ{&{ӦMIФI\ߖѣF">!AAE ;[Yٸ[\$;63/+[۷(OGa QѬYSHzDppCаAC;w^|*GŊUVETd$.\V8~8 QVO?\$Z!2 qq<L9rD^̠Vx"?pտLΦJR*vex]lIB̻Ų -s@raD'%"*"#_KaaƼ6&YJxDx렠 ʕ+0 AHHH8X,_K6\%8#b* HNN=nkw -0<%&&ViW"6N{QjbczRrtttF1+`8y`tDh_^ WD}С=$k6 emS/"6"YdTT$!<]2H0L۱s'mۆ̌L@pUX]}rr{'יrLhܸqKDTҸy(M$Ǒwn1}za/"7Q>(+s69۲Z;S+L(*TPEW" {eQD^eJn;H $IA` QI$^HOOGTT Lddd)R "c nRI&ѩS'_~EmdD223q-_$ GpZ""-[p%- fy+WFbb9$K@:w`͛xЮ];ڿclRVV233qG:).CljOGJ50HOOMiM6 ٜ?GJX0]:uo'Ojÿa/СC=oz[Yعc}$IB.b*ǗEJtKMwB|0HNN'?AΝ\>Mի(U*4~5n(Wj֬e˖!33V).p> kPȽ{*:uz.C*F^ G2ly.P\!AzW 7Qk$_H, I+VDI Z\7. ",B&>?2 ܿ A_I1M'M¥˗xyTծm;L?WҮjjxũ_O_|o/ZyAy3 SVCynm۶ѣ.U ƤɓrܹqAiS·P>ĠAE?9+VAv-T^ GjЦu :1Xli4/E4$$cSu2d`,Z[eʠ}9ܯk.X3Σ%,,2/Y-BxD8zvN 4kv€"&&C&M }\1}:.[lEٲqxv(:?@śUŸX #B]g[~ۯӕ( [ɪՓv{xl^+M&-KgD9McKs>~xe- V,_vDjj*k Hh?HAfe'Ͷr` 0BoFQԿ7}+Ν;O=?H6DDDk$O:a+U"{ȶɟ۔Pl00 GCʈn$BrEZE Q T@+DD?PɄ%KcN UvmE`Dy=.RQViMFͧ<9NJ*g%eXʱ\PȭZQ @Eܼy999-{䘀ٺGYh+DDDf۷ QخZ{bŽq;oU͛\&kAv zkV+f3puܼyׯ (s -'U;h`a6 Jw "m5B3x` < ""*nlnpm]^k{wRV(_kq7Irתrq8jd2nz3ȀdBP--j VHQa0R"rL& '"""""""*ʇ)AΆ%^ Qx:Xћ(ثZ* XʎQjի"""""""*!lU(ge1E9NJ b<9LjghיE-508#yVGU-ΌRaBDDDDDD> Ej6%_+Z֛do{a\V9YLy:Xp2p E+=#"""""""iq&hQ?+l@ Y!3"""""""rrmo?R,=)V ƙkog 9o+z'W gBk"""""""*{ s{ˮeVt0ኣFOɑڐ """""""r GSt8*PPŭ? zM}Z!""""""DDDEqUD@3b6굫rڧEz([ܵqQO;+=+zCDD~.55ae¼V(I Gjj}J?\d/qJt7ηbLnx57oxDD%d(I^?(N )*$"""*$G!mZs^OX["_lu[/@ UFVмRȿ9{-cBkdž߂pEV$w(6 5*=56o=:;  8s,Ґ DDD'&">>=$*@OJaGضMx7Xq<*,Wo6b`8*5Bjo".| \Ll aGhU!`w} -KDH&xі('eHWmFp \;ƮdChw=cdf`2Fh԰BCBHNNSNQF q ;zIj Uxbŝ3w ]Xaʼ¿ J2 24 hJA0;G(3@QZڎ 2м4_xsDߜDa}Q)Ȋ[i fBDDDDT]_~ GժU /YZ5k鿰k.4k >1%ȝZU/9f9j7V1xu)kc{P%fl)EU@Q\a"Yޥ%*10""rp uAlEܾc8}D?Wqd:x o؈}wSKN{ >t3؏s!'DŽqqhּ)~TV'jܴn~xC{in&m<^pW?s#"'+W(C 63&~ ڵkhmA@jU;vu )T_K<7:=m|%%f͞#G^;i([6Χ}Rpu+W +Z\{ѭHHh$6 wp,ݍG,t j X2q+ѥ7jٸvj#:j;&! ⚢#o.bD6w"6=?b S09^;g:uߡ} Wl߱AA HL,Qqy:l:uqc" 3w~x"^-tPzx;}?3gciHDT89?p wDGAؿ?ڴilK4=G˶u^4}L8x>c&/[.9Nwno"(+z27טم _EGF@n@BH`&߰pEDh1ĨAhy_l>1'x^PaÆ^;o||<ڷp%ϠܶFjQuYfcc֛ }K?JME?Nv9r$bb>)$`|R+DDn )UVqXZ*88s '@|w!΁U__/W"(1sf&d;N[QԪiĦ{Q7nTtHё\&ovFL\JH]pGB F\X XK|[bK཰'lY,^69 ,'K)z,Z*V³ώƦ[Ř5cί ^7{ 9{5WmN=A@p1\ Q,bA(WaaaGh#G<]>@_u3q>[?Tp fjP9 _~AFTwVnnE7q-K@h#_}v]ˆqHfV$#J'EV)|KrAL~~ `+s<{ j  (6m*}lz9WH9V?NgG#22艧k}y9s6}k_>E3g/qDD~!99IIIСKQ.?>>GG\l JƬVYQ.!QQQn; Vi;sX1G݅vwOoJat3֭_Ō$ǣc-[0~XD]&6mނ^Ħ[PVM_w  nާOoG=""+WaÐUYYYTvEhHrrSbA\xѩ`qvo߷7;+iN eaE>>N. V J Ul|C[29W؏Y3g`ժw@wҺU+0ջA =)R2rHx1zz$j֪Q<;v/DDC_l_wX6i_w(umVS.|@ XȯkbpE-Trǔz:\9w5lFK⩧GڵѶMն722Pti$&CJJEOX@űѺӎhٓps3&sߖ"""r .#F(JlVP׮߰@ PyMWU*rm*R6l/۪o: Ul<sQz5.]n6[ĉ?1g0dH,~8g(76)Jjcǒa'x~DlكٳgM˭jqwR>7""P E|b"~ԪY;YVUԾN9z;> DF2IݯW9IHl֏k?N̗2l<1h |8ٿoo岅*&LGN *]:ne98(T5n#%^ߎA\8xoőE%%FVmgF"%CE+6;J W=s_q/6īs_q[?WN;`ٰ֬X,6t*/~ Fyg>}rq{7mynXlmS<7'I-HTfMaǎ]8y4V?~*VBD =&yiTZ >Yk`k4Ȟ"9Âv6nX~v 9 /8 eK")lPbSz'5klbOvĈ@֭~wԨ^  ɝ8?#38y4#T q~;r3OCtt pjWH•@@@zs!/XG=֭Z!1f Ν;v"88=αrI' %c-TI(.QrŊ*TֹShhڴi3g3gtde݂ FXHL(poN^{WX# ֬6eKrn*v1X &_EH-\Yaׂɓѻwo|e ^: )))0 H,F[׮CޞV rF]lʌ1c4*DTɃP><%Cvvsqa4yBrCM2/2z=uffi3{/5XG*6lա@:tڹժaXS_RB_Rٟ8%cECoι("((AA0 "C~*SlW}]T'%"""""""9+b*X """""""(CfUؾ}gC:[u< jbCl%ocEʂbѷ*<O~pl1[CDDDDDDD-Xy91 X,Eb6`+o[n߷}_8ۘfN^5#8maD~ FokKD/KH]/Mm.!f'<=y-۸kWV& $yү!&&F>EDDDD<+n(T\b!8?-U7ěj z'OQ'?IFbؘghBno0{¸OW=g_W@e#"?HMMd9 bbbϭGQ'9c/T϶lk䉆h_.oD6-70vy+CPېBi@b 4o $u;NѫZDuzuECD&+DA@rP\9_wŮO""""r7ڿo/7m}?6oayl7'r ~ }W&[ѹ JKLXVX-בz)?G׭3Z-ƣA&%|_4s#"""5P|1X0[- !+}bb)DE 5%V…4DDG#G,`TkWtsô=l: Lrx-kI׶e6 kU΂"""""""UX)j6 Yy/9bF9NL1X8b9ꏥ)Fja="|!""""""*A^.Z'/+Q@=elYm7ʖ yk|yKsf92^׻X!""""""o-J6u4/_۶[del,[歳Zڪ/+YW+V܌ Q9V\`E V\`E V\`E V\`E V\duM;~ y78¸zd*nNހIQ1`Yb˘ @'Dbpv"x&oѨ#9J60Qq9VuGm޽wgxgJw{ [?=t#ظh3^z[ xțxysxs\Rxh1j3?Y"""""+EPc©h>|}V>o?>]:}0d8}3w}X9qt v-Kő8? +U–IX5Axh2>M <v;dW2rO:_MsNMܲ=<u 7o[Õ]ѺYs4nMDk (0X)BMѡG'!98z2&݅i6C1yQdÌĦx˯ XŃZq鵍/vBM|yVp ^9_Nǜ/.F#Ə P DMX8 x!|%E2ȹl1|2ZxDAq qp, b9}~ ׬rm1q3sMá>-GwB ``Ku}. 1[ ڏʓ኱Vw<7v<?4^ߦ~Sb޳۹Z=w~5 [ƴEaq32;6m~ ލf}#Oxh?my{qZA-Y9PgsO[)ZwWm ]8{wG{Z}}0-33o!ڶ5Zw9?\A?\K^8]۵ݭCGł ȣ)&\t 4_At|?:vWs 1]gbغ88=0$X0 3#nW<1zzTÛ_KfX3|2wC*ͷ8sj_(f8 䈈ȣxk"zy 4_4"cczLhv`Th5/z Oƛ 19Ѩ0*{.\M +bV…4DDG_Z\+T ,!XoFF?󝗁Θ` ڄXq5|e6o>'7G5N;Km3p|0>g"nA#[#R5 x% qb9G:؋a]FXGOĉO)-ƭ@]Wd~70Ap)Epp`5#0g IDATaj0F<<e$/DDDDDT"иisgYn^=0q0hp't Ukp 5VXa~O_\9 ekB3m#N@Dń|1A2s0!<0+Zд{{M2` WбcT|[|YܲZqxwkmR V4`޼$#^gnl -n52.$ģ`K ˋ>~{=?Q 4At9#v F箠S (QLi,VR%^RYM;IJ˕T\2CxWwth:7mdz\t `H@A\N$4 {ԆX0??<OjK""""""rVx}{p BL:_(k_< gnX`(SMFFz|7g'arn2ށ%7CWë51xx(,xf K. .N!w{P ~ 4Dу3Bvl ?FZQaY bxh?.,FΝuR6Tb~ X*@cGn C[ IF}Q=obEX"Q1rp`4UT1 CҎaEb p6DaIҵ{j|(-l[܋G^"""""< V̕Ə騝1GEos&>T=a*}\|[>UÒ.!& c0ICUr~ _ۃIeiYcn0.-@ăϟp,+ ѻ[};npꡢaYyGעl>'x?G|:{"$"mW8a];6`47/! Xw'ºqm\޳g-rqf}ԯ HF""""""ObFT)Ԇ~[J+LgFDģj1 \03 { |-+bX=w@ ݠ>TZ6Ԟ.erw`0D@1f@U40=^o?FAB|02VlߏOFb[D/⇍ ĠJ'ft;KDDDDDE5Z;ukasU^ $ٳ([6Ȗ%vlِ6ʗg4gȑ#u `E 辥)/틲Xqv̩BDDDDDe-J6u4ȗm-es޲ sNeۭgK*ru A@nC7_`BDDDDDTƀE V\`E V\`E V\`E_wiܴm aC7DDDDDDDI V<`7m+W""""""bCĉ 3܄4 Ѷhq L Ru+}8b=0x3z<^;'rxk}x*oҤ[;ō_bċs5`7776Ո,?ga@|Cߗ?{wpw+n % ܂["@ ^(Rhq(^8w!! ه#7l6YvbN\( ܍0#䏓B!+|R.[_;\ѳjk$AG,yhO|D$q+N/[SQ ; ֑z~e신Jǎxgաt$gnW,{\5i^-+hp*]+*4b]J^Y{*Gvp"tɁŹlSj3$cW6r6ņʓORlš'Kra5 UPOgwk !B!>xn]X  Kcdr 5dqZ`$!0GgJ-N6&茓Р`"hPFTw'ⴸG%V4ָPXƨ&?dJ2ˏvY?ͦgZhG\1 A!B!GьX)V>"j!v1!g~z(n穿%.6({lC C5FUFpXȊ"ZlƚpM>x֙ߊܕ1rBʸC}#+YDB!B!Ŀ#kq*[W-S@n8WTs@1+Fzr B ` Ư+Pz^:0/O5Xx0F 9cyǗ*yeis/񾻞n1ߺZADj$eƣ>g!r !B!It\sqn UZڒ)'?Z%9E;Of3Ԧ>~1 ՠL)?_Yb::xfřZ3q K\Ӣ;gM  7ߤHccŎm!4nw%t°ExgΑB>RYZ!B!𤯷GR[0oN>%Ѥ0Z5&i3dI,q277M0q|=*dPZ7V| `c] !BG{>\]{:r>q2ҦI&iCbZO8ɿĉT$LgK;$!B!MXB!B!xCXB!B!xCXB!BJ2h._&!5_-MZ#t,$#{A[B!D OiX'-RE=JP7g=܎JsDznہoxz8. ^.epgl}LYR+awt !BBʨ `bE-VE|fx̚ .GjZ|OK:nX;cN*_ 6ɓ&Y=IZޘQ)K ~|ް6*VN'&@i2mtkZޕa-^l:<&Oe L4I{}?I+B/jžu+sEkA|;-qI9YQ-=6'>]}rH 2Oxz`ؐA\yG$"{7@f#s7E+94(U(X7y7&ĻӀ΍-ڐe\0ÌP4 OTԁ]~Z4/\ȅB!>Xt]l;%Ǟj{5CSga B 'E+ZAxƸ8ȡ'lO|DqbW erac)*$y)X]J ;2X6G`_̫/4&Θ{^_!ĨE-}568;^$5 ;vՠňQ< :&7aiH"B!Ҡai4sַgmdt9UMe[['0?zPuKRH6;e"?_b#g׳pn|Ǣ(?Ģu*:{ÌY_ $I ̘5?,@ӥQXy:z)|ϙTlƨ|"72#a/ז`j,^0RNZ wҪՕU;F33wQ-B!#=uC.ON)4Wg+ v\Ʈ>-BІe|h/aUX)q̉wENK3`YB*otzǖ9T8?#V\K?bɚtt O?HCφ3v P,s\u[oڄҬ8ڲ{2N=EEE7B!1<8ӷxų|NG9^~2>aӸ0TTT9߷L$vI‘Y~FA6kaVF-jJ^cIrծ>#fY8Z9Qy|xv؅܏0bfr_gfA׷wB!UaWuF#Rocn|̀(&?~/e B քeڜ-+Vs<3f=hBAL+{!f(h,Ȓ׃ʍMycLތvFŸE^AcQn;ݖ@{s3RԖ))̛OI]M ՘LZ&it4=~=zȖbHQk{Zt>MjGF4p5 k嘦&Inlp˸Er'#Oִg½V㣏y86vyOB!o+|R.[_;l dsh7oӑ#O6OZo4IzzL֫&'RWS3͓e/؟e?8 & q /R %iؿuFLN>s{2kL ND;6wZ>-/oCZ4ڝ c9: VyŹw6V 0|L:1$ՕxA&Eyq]Y< cٓ_ >LW?s&/?$,2h:psYzgŒm PUr8tsgssbfE(,=քB!B|-i܂p_~᯿/oBL)sn^BO,~Ϸ)GK8.oލ] Sxx,K R%t{&1 s}݈Kb|zlXG'Y8qL;Km֟Ice,;2j~mnQI>B!B!>\.^n#&\I t1K޵:ڡDaxlC-hӰ35{9g2[1W3գ~Y O¨pJ rS=43'Ds!,kv f{w_NpUq!oi,5L҅0 |FY1C.O#jUΔ_L1gNWȩ;Dָȋ '#B!&]JRT# BÜbr pv~p$Jٲε[QX8,~)Z}x|.͛t#}dⓥMM҆Ĵ4YkLHa^MeJbN4OzDZE("!B G2ZjU~҃Qܳ,>ܣ_s}Qt|MGПebM .Tbn^=TjE=(I buJ͇E4uRKtX'wbȓOē fXע !⟉}%ŇgP9q4 Jm;ȫ0lrBAI!=3%T4hS[ql¢Cfn$&:'a0'|J˙[%E_b^ /Q4k=8ӻ }UॖFی8 '\?krn@f}Ʋ)e~ XY;%u&WO\(R; IDATen у}JIu|\Sm`(nsGFl$8oΤaFUQvP ?8k4rrhʷ ->%kyH #^e˥̩BIp= UN*uΨ/Kqph-VGQel>HTfV52??gmZcSҽQTB7uʯص-ٍ8fnL@,Xf*BQtgC~9QT1_ss&3o_܏R=sް<'.gvl.mTBέfw+9|?,%i5x+fBawsp6ؓ+r/US_:9C AVf''B|tEZ3HRʂB |(6u= `BJ+i`#^V  Pq% "4\7Ӈ=晑 V{/wɣ>5-h"{*-In+*лWujN̥(arcS ѹV!-W7JggKbG]7)u~s`2QLQ,}QE4@):w, vzɂ߾8s veHXѢs(Aϥq՞cSj|ǕZir|g./Y},@b{:˜) >C퓂m ͘`ȶ>\s&hCAGopoY^sͼI- Lm[0dj Ŀ)=V̞l1K+$8^š90,fNe#é_Es4[i7?#cèG8s; M|7!ۀ9tg̩l|lLaO1Ӄ0#\8Փ> Mš8 :e[[#zA鰌#'ePv oό`ɒ> 5P +L> $YNg팩bF2?#l=I_ !H߳\Tl y}h^!3J^ƈp"`DxyUZ>)iTEv`]ßsyl^¤QE,8=Q6uCsV/⸰/b#޷z<_bs]ru~A Ԧ^)};(Q&SJ%?/v?wz J㖖R3)1kSdR炘dQU4jNɪc[s~7$h4]*9BT@ёޟdJXp;8={5K床FZCk-j[6btZnI%h =sEl7Q:]{WX~߼˖y[ wwT$Ϡ^_սh=ZˇrNyY.|ƵB[Qz4F9#O"8VzZE8<1Bdqa .Tʮtv3`ɖLSYSTlHl K,˷A69Al]΋jfgrV4Ƿ*/2_MrJi!#aP~*Wցb䌕1;ѻ,֭KW![RjՀ^\K&ͨjyt hQ-8M}iأvY`3w_d^+~"\1kЮGO:T̊[PmTJ:jlY3p_ Mz5K>1sJV^?tXY@Bg"2V)5z6fPT0o9d8`xcsq$^s&St!3y`exh#O}>;_Lgpo;cRLagixncʤ,욉wCPzJ&[<{v+/Fb0>cﶛdI? +V{ d xN@I&5´eq+G%r) -Z8UC0"Hػjג6_/ųb8 6ʐ>)bxL&Ԡ$Sn*۬4-X<!ʜrp##g=i0HE|^eyb.}bJV!re1x2{e27'kVgBB!> f:A_eK:̵ع:':޸'mm|S0+] ph"kFѻhoO׈!Yjۗ3k~hǏӚ1Xg-A:u>ŗ(vi{ ӞG71TC9<*L86JhM(2eqE=BJʁʫFSFjt41klu/vQi6Oa / Ψkz/.G,ǺR>ˡu8󝌝O(lD`4b݁>ۈ61M5J{*VD!IQ!: kONJLXy޸ jFmo]BmlOj<}<[m <)|93kR9^aND afw_Fhq.ҚuC`k5ή֠ԵN6!X㈳}(Nx|z t?sf%qğ`}Ho~]V\HDRLTh\\,9["sQ9q h_-D"#4Z,I'³A8grB!G@x7#%||72:+e49zÀO >b݀܇ekݤdÖan/jÚ=(Chqt0Ve{:9 ͧdT?zU O8:aɧV^|!{•{'9x-9Jy ,rkzTJg~:QabńFUfw5$xm5{՘ f>r?F$+>ހ˟ Mf [1PCns+(54f❐LYzH:ϥ{X ?;w` \e6,;j.JOoaIMw \ers=$A{-VҤ`>'}J%5*)-=U͌+6ж _9%*rR<qeï?ԭiEEKi e ~Y,ŏj'~T=< ՛Pqb^ `w.sfxBvM0wqFAb8rJB񁋻A]~Dz&eE %VD%!N(S(`.nŪ]>Ϲ7qڼ2SLo3`Ec:ѠCgCkg&DnGĿW%z?C?J%hԞ5)*2y>V.6YL _&h=?RVϤIKÕO'N0fxl_i"UB,q[p74@5O {vh^WGn L+A!j ș;݉.m>ϚFY>8%h7fE|e5M1XuFx5LY?<xq_BGMзf-y1qDjp) gsjЩO Y͋u,>шG1uj/j'Y6aج"v NI} 5QT ( E1+XQ4g0w=fcœ&cC !xN.λA5aǰZ}]FY=aي8sXXH%:DT&rB~H,}rRs{w'EGV_0S8+l[85Z !Ϟs`*[V~s 8q]%΅ϱܟ9j'D`n_p`WZ2 N6/xl,]q'üʖ{+Pz  ;jW!5}sVW:V)`Mn͞4'5ad~偒BW@DFVOPmwz4xEW ?7) %27͜fNkMW2[U[צtB!-W"~jCv&~pmcsu]͛7G'K'7 i= &i5qYRj*Stuyҳ%b-HtS-GʳW(l(CZ_*a!a&wߊܕ1rBʸC}#Myd_$xoAW<BxC5Tol"B!dt!>`;@<|#qqqŅ1Gs:J6~D~|Pl_ɡɜlq8w#aXici|.y#A/s/4 9 @\!,̋SM+Vq60y@DSýLeK{Sܧ >ӿoB!a"|r޵#2/ZzYawx0Z=b/hGTY #.°ExgΑB>R9SV6>g1:<\=S)%\k am! B!⃦t盾r+oq@:|4^,1VB!m1Vҵ%b-z)B!B!8I`EHM~B!y{ٿ"!>"2xB!B!B!B!B!B!B!B!k8":B!BWX#1P46̯aƝ7(/B:]ѣZ39e_lI4ˎ/\Q ;e[>-!B!ĿF !D"ct,.F) ug*A!⣥_chQe+SeR؄gs^oB^+QɳRP7Π^/Y)SzdǝȹYmʕ@_2狄IO/Q2jׂ+Rj~lj/Sֲ>+U\F+j*;;Ӳ F!b\>+[Ӻ7Z|ÚgF }+ayH3}m_ɨoSJUSq/.}LubEXj]R1pW y$g-Q!Q<0vB!>fqO.pEȟ'ǭv, mJ_=dac$BPDFK ׄAOߊc#Cs#7@Frⓕpj}qwXPؖ } cg0c`~C5~VX1?Zlgm 1 {͋ϰvmyK_4Ma /@NJ/݈Jѫ `_ŰG⸿k*-+oe ?dզ+=K,'/jz4 %{pW #o) {Տ#`_)59^{3tEH`-*[.CϜ:J"_@ʂ/ Tcs [AtǠR_2IQ$/pא-= Znl1*k|䲀pT,hW–Ʈ܎`֭x45X DM4:RX6!RE?tHdރ meYx/~MޟTŁ阩+!Dk] qL*X }T\m_ց/cY,-ZBI_nz)kBtܭ:M@J;U52ÌmXlxi~|S9ki*yJ(Ԡ}''^zLq͓8(nb6_Uj]Q˰ٜ*MƙTΥk~C;y![FdG}ߎ`LukUWyw{q#܉M~^4:C=yM,#ՔgFLefV&c^J &csٓ9SiJ>fHj'4KK͊G@#O⧓d;")|^fO#Xy֯e;Zj!lۈ' (=Y y7=h&k%:*J^PϱrfV!|˖IM~/%[4v԰gX <0m25CIWB h̨KÉQ\г~b[h1Âb9tT+)Q(˂lKWp@k[;?'O+B SŻJY_-v6B茕1kdAXZW_Uw4^ɳ 㦔QF?`E9T<*:+,jOx$R4Zj.wҗc(8Y@`!QDT#A&o1EC. ΢*.?LƜ5]61FyD34y *+ ( NFż(g$8èãrHB6)bǽ,m}4&3#( Ζ I?ڈF~QB!>FL>63K:õغ8':RAWZon΁3tʟА9{P Q]?'0jh;A!!FaMO*(n?ɓhY?,%hT9nۓ%JmAL\5u(`(hȑ q6JVd@ѐ) PURT^5:bV!DXaceTI(N|:s?b ~?v#c06.齤{ . 4^3vo7jH Zѩeϯ+MapgL\76f❐;vXlsPUC1`P)f>l\N5 "S,W Rm[#C{7$J_:c='ڑ|g&j@n+8#affjy .-s(k`_AHLPpg+ J*.)Ȏc0Y7e0IAU bi*Xò1ҙӦh-!QUcU\&I! m+B|O2Bbz7,xO zKeuJވfs▁^|͆!Y܃ I"w-.2Yڑ%Pu:Pa?>Tg`r93M'lbW5*a1П@r`c-pR+<}=dK@ܻH6{IZ4ǑMt񪿲5g| OI8ذho4alWs|s-t,P㈈ 8s>Ky|51at@`n m|)g(_D{,> Z-U3ӿlCIѾWpCpPnLV?O#ɝ,#o]_H~^.`gi;p11&_u3A$?wwe%ͳc*%y-V .\ՐǙ5ie1T_QFh͵RfXzxq8CXXie aOm-y%'6#vjQ~2y2߂cP4Ʀ+35ER/]mv4Qy+>W%P~,R4z0kZg1^ !k9jǩCTQ(h-љv"ic fNsYț _ /O+QX5p aVr8F(Z tf`4FޅZޯt11>8~?'>)v*7גu1Ѡ }fxe6k~-Jp?ތBsƏۂ^V-oaq hMKY}~ 2wtT†gfH(!!tARlK&Uizg/rk ˵b+"E`!!231u֜}s{>/DCj`L OSrAS |Y>8Cf-3_x Gpo\Mosqc9p\!Jd)=&njuZ63|;"_O_DFB`~>.ӈc ;vJ3X*d' \~YJHLY87攻FjL2q>26Z@~ra[*qVʓhR.Ԣwxi|{ԨSS^ejРϭ}&R'Ii Q,XmY*C|KӜ%ٜ;'_xD%Ba~]ύ#YàҜ-@rjJ GYzw+pD3)ذ~/_MdqLx|W/n. ۆ1hz(E8㾋虵5VȪߊ?zl:{f,!+>㉇?v2c;>"*5l)Ihrs ~9$kDdzҎe wFtaQN5hq%XI<>>ha >z)P)48.}(w{Ѳr)W=B0kϘS3XW$1 Z=$$ iόI@"%@rL2$q>R'GZ 2$HZ ʥly9nD7Yih?oˏaIeި;iaܮYu^GfGvv,rm~żc 1PL}bL9a[z-CXXwa76oSF@sa9vkyҾi4N~}g~ a1/_AmKx=fMEyZ[x5ٗu-,-|)|MKmYOoהML[Dٮ*G2%psR|/ldI$`R a|䫭3CN aepwj] p cGb-B6Gc^#pANbEb69#Gml Vp$˕܆oY) g]ۮc$ns0~-ّ&fdfdqM4D.ٱ`]\~mdp`h{&RrA>n*ݎv$I?%?B+T:TgF˲(,~%a-_˒|FL%ěǺ]Ј]Ә2)f'J7hUQdOA=!1-3y,0#>X]$I+%lkV%$_;ݮe} uˆ_vx7խ8Әs%;.s@4bWO9s#q=Y!~4;zJga9rCɤI/o(YkpᲜ} I$l{y׾Tr\cX-vƊ+$I*y3X)ֱm8bH$Ib"I$I}݁?$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$IqJ+iڼojPO$I$I`,4ˎD~x/L ?~C y2$I$iq*P +(]gv?٦bݛn7`S6yVnPE$I$=+%8#Rv&GvǼISX~Ą֌4؄}{F.$I$y+8A*wFhk%,Ձ$Y gI7nZ0aұcWzx9#>!!&YxQWF.]Lo[*1K8G:v?Ÿ[N&qI]|\KwB$I?:ͣRvŶٙ`#~؏L<0@t3&O]iTqt<瞙D⎯g3esv _q?oB;ՕkmE֯a}JT,ܟ <օΛ'-т<"r)j]:b+PB>_@4-g_H6߼84?1$Wn$P$I$IeX)aq1usʋؠ?Gdʉq߃|.ɕ>4Yas}&'{ރY$jCyP)κFŰ{|SzJr=oHJ&c$I$IvzX`Ӄ;`L9!O)'lbcCoe.Fq7rEVlbZߊ$ITl,gLb>|A_7(ܲ"rxKƔ1c<~t'VumslX)A%$I$8C$I$)N+$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N eMܦQO$I$IҞ`R)kҴy?VR8N_$I$>]xek 'c߇K<+_q%I$IM@{n:Q(x{M۞  H$IGO{P쨔2'  6^Nϛ'39t6x8Q٩ Gy o|_@d4zvJ=.lRsSҥt92F|hII$I'vpFtaS=5Ą4y=$fTnx%^k{ݸDv%I$I 1Xكb.n֮R~3iʗa|(AVGa LW$I$Iq*П]6}9ᥲKNꜹ/p4?tuۖڷ}$I$/`,01yz6 Rۼ~[vzȳvtF\ ONݽ$I$o`}}I$IƊ$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$Iq2X$I$I$I$IRu6yc~LLl9mGQO6,eehT7޾$I$I3+%"DNpzt"yXd^3rC㴽ُ(~?5砺%I$I2X)arwXCM,dĩ|x=tj5;ͫBxQa]C$:ͺw:g) Ԩ#O@?}6#$NvGҶ^Yrw^΃ HiЃ3:$K$I`E qV3]͇c^GsFZffƙU7(dow\\!ʒwS?O#㴁IX1 K }s9%+E3y嗙Q4h؍˗Μף+|H$I{xmv9NU_UhZ B\} }0R8+$T[ 58ʤ |mjUȺ@>F8$+AjUYJd=%I$IRR"BTp&(ǺاJ޼I$' <~li % P*ԯ SHe DQ!7BJ,LLT6%"I$IR VJTCO筏qrSK\ARqH sRfK&{}.~ [F,$I$I= TBUhyD=ּ6ss(kNQ JX~Gwv'ZM.,#J i԰ AJM!rֆ(%|}I$I+{@JִS-n4ۋț[ 9*wKŲ=JՑ:Le+#xgCPj4ޏU6OIov2OId@:%z}I$IΎv[.m>)'ĔC11-[~blyͷ 8p`b75eVݐ$Ibk?f9c: Ç_6[0PP>So)јr8rlѝl[ŖŶ)αm8dA$I$)N+$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$Iq2X$I$I$I$IRu(c^}W_N:u4{"J$I`RVZ!C(Gڵ`c^}7| !33c0^sO'jo~W;>$I$IkQ.=ݺns?M|Gtލ1Ww}@ 66Je3`"I$IcRƼ:}zث]>{3ws՟SrqesÙ}9n8*FHt-3﹄ۧf'qti[Xp[ ?箾p[aᲱBx{4zy$7fn^D?'=qAN>A態lyJ?.za>yu$I$)ͧNL>63mt7kʌiSiެ)ua>Y =u|ah%r7_5;i,O_nei}Mz` -.}_}4E|DәU>7|2{8хMVnFdx|,,/;̭Cr [I$I V` H2e ;C^W0[>SrfXfUYѼ/GVm~K ÚgX YZF3|9}Y*·`N:9Y(Un{o0}3G~9ٯ R~(\sCqǿ" I$I VJPu`mڴfhӦ5v#X?uj?U&l"Zo=ҭ]z e!swͨl>ny6i·3l>/۔5׬bmZʰÔ IDATY)"Jdk9TՊ>'Wy$-K$I$/`uv>ڍyUs+2ǘN`s^|Fy9gǏc҄qL0Lf –vF,Ҵ\>z{:f]j? A(#~fy,dP!ckZ ]pLkx>3?Q#I$I_J ݫ֮e o׶-3M]۶?o ͚/o^#dAdG&V| Kr(CzO.hqXG$ Bu[ӢpOO[4$ ߑn\QcXֲ;w5 %@ (WdnPq7ŴF+$I.qƎun?b5^>kqq~`5\y65W<Is5tHpdeh{ʩTq5Gهkǯ&J"7fՂ4md h,?HCJm9q y(?ę=cy1x|A_7(ܲ"rxKYc1-;؏d*\.Mqm#aw m"I$I_S$I$Id"I$I'I$I8H$I$`E$I$)N+$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$Iq2X$I$I$I$IR V$I$I┰;緑Ϟ@`b e+m;eYr<s`>$I$I}+%"DNpzt"yXd^3rC}џM,5uH$IPr9;!զ`Uv҂Ds2sT>^Hb:IUI(\͗Y$r3Ԛj|6g~͊ Ҿ{;y'_XK ̍Z1Hrwؿ y_I$Ir VJX gΏi59<#|8u|4gEj<^z ofQuXKLXR>CB֭S&y ;hyˊtфT굣wOu8e {ះh:]ҥ o\1G#9|^tS8dsPY gw;/03v}.9^^Zfs O]ͬOqӔw7"ں 6W3i/a]ξ oiY#<]ұsO+"I$Ip*П@dr>=3rlD]OkI p=$Wra4-e?%g}\JN%aިK5Tj%[AT.k?5i}M:T>>YZBy\ͭs;rsw8|Ug.Ӧm8@ϙȫ3>Jc"I$I#qC#p+Wd e=4 /`7LO3*4bN&=sUY7O[ZG ʥ0˪*FY2e3.حD`͍B) I& D"D8;_͉] D!XլXey#DR FFO_F;* xlc W$I$I+{y'ڽ' ZN>b+[<| ܝO؏Pz&rCXtVN/+ ဘːQڧQfȼa|(AVGawP"I$I2=g eǏe*PYm}6gFOv&'NGҮ}W!/+J۸grRWZѓ3?Em})wNhY }+=T*ϸõWfJq$۹7uFOhߙ.'_! }kOA#{U*$I?]Lm `?\twB1rBL9SSNز'Ɩ|ЁV)](Rޛ9AˀILi}+nH$IR1R~] p cGb-B6?ƼFuѝl[ŖŶ)αmJ Y ~Ú*$I$©@$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$IqJ+iڼv: ;}I$I9be{xu7"?<ǀ>1qMt_wE$I7ሕGGGkyңIH.KM9EѲ"=ߝj&ts+kyҾi4NW VnÙDrpuI$I VMsa]mw\NJ8'v'^x;=3EpͬcB6;V':;V߷ݒ$I$! U"H1 tە#Y>/3Q6-b0j§, D=L'mf~vrX-g8%t;6{k¤ؓo3˸}jr><LŏrC ~w"~!Z:^e5%3D7kpS,s]s\f?o%Kn z^2K%sr֩_p[R _ĤŨIXHfNѣv)(}' 'f11`C89YyK<4+VAJV9< H$I2X)a;SD8.9#|ٔck  Cxb\KWLdȀg&۾h-iM,(9㲇Wr=/PF]7/w>OgPgg~]4/aMO5T$I$mk8n=ཙwB\aca cn g +to(3Ρp.̡gТr tר@2pB]OoT4ۃ1s3 }J$A y?ڷ9%KXւzDfJA|[GNlARB)2NF HՃ[R|"ޢ)5,geqcٴ=D XǜA[QޖFI4=dH@۷b?4 J5c7)_=j1V$I$m+{C`\2a<.]+F<ͨ9mLkW-gul>'oi-#*p.֧S'Wf\͸ciU847 @&]J5@T*V$m*fjM!Yem?dLyq^=AXnXˮfպtjއ`*UUSLH(D~ gxsYOngrj"I$I^0vxy vIff&O=}7VA:~/_=/w#IP:S!KeB8 A2df)YuuM`ߚ)_!|fCCH(MzzUW%+}ayznՆ{ﺞCD'Arkiy!r"+X" [I bjO2uܡGrOx|5\5/\ȿ4$I_8h/kڼoSҁr^;~|&ݙ?3X1D]\>?ǫ NJXIY6RDײ7'Pr=\ Do (CFZ6GZ¦(.#7S#X[3F0rZa֭YO~ H6&OgaIhDxY>_H6߼84e7>10?RXPP%I$I;{Az0& [ѳ{pe[YN㡑V8F yzfm~ 畷r@R4;6.yn9+?ht:?[_N6IΠzuMv|@ڞr*nHť2GF|1D ZQ'x.\w{6sGߺHjUa dtW=y$VjEQ'O崓ltDsvڟ%κFŰ{|SzJ wq?b OII)d5>k;ؿ0$ImwٱcEf;`L9!O)'lbcCoe.F7s:=4XT)ַ$I$[1a>|A_7Ϳ.@ArHL9\1јȖGwm[.Zۦ8Ƕ/KЮ|sMI$Ig+$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+dL}a&,,=$I$I;;緑Ϟ "WbMTHfVk$I$ȟKDjڥۓx򇵜|bKEɪ{@IvT$I$ P~&t9.Qo0u^co|D'6Lz{&~,NJϹGRs˷Q0r9MX+u@Z!(\͗Y$r3Ԛj|6g~͊ Ҿ{; ޞ;sbC*qH׾oo$I$I+{JX+ȘRؤ6ḡ g㨖_zgrVFg,sfD sx`_j&_NXw^b’zWjn}2![0@pXVӟW?i-),&}ADZJMkV[PE$I{LR)G2glNRH! oYNvlZȼiԨ*E2<hݚZe &|Fi(/&ذVL"Ha[母,AE| R)H$IW㈕=&†$@ΆAoaI ɏ@7Py|_ hrٰ) edaMdEkQ#?JRs; ODVt:Ϣ$I$ 0Xs6| RPpiie8tھmVC߭&ب3lRHM%;'c•@2iid83d(zn ⁴} s TJ$I$Nl]¢X`6o<7ŕrDRJ|5c?dٴ+6lNԨ"?~1ϗUq$47bц0D ^hggә,@a.+f#%k T*L$ދwD$I.G0K<̿&$S&*ጦS6@6c o>>yQB)ٿUd @XM]#o1nԽ Vǜؒ*u:sxGyg]>фT굣w 7^ǜ( DToLM$I$I*+[)> ]P:G#vRڈ^hct:_IY4zM}s"Y:qbN۟rsN|w$I$Iqp$I$IR V$I$Id"I$I'I$I8H$I$`E$I$)N+$I$Iq2X$I$I$I$IR V$I$Id"I$I'I$I8%4m޲X>`9ο >v3]uw$I$I V6mZ3kUz0f̘DVˏ0r;YC\ڜt)W߈5|ʣT&6x;q|.Zm[Rkw IDAT"?9[S{%I$Iqt Uf1@ff&vnOgxxeX~9QݐIe[o1!4__nx@ :"'㥛W!g}\ROpqtVm Y7[šsfyrJ4;:oIH! T&AE@}(JoQiRĊU,(6@EQC 5dw?`q2̖l:|?i;{ wssT!GX5y7xf74C^ݢT'Pˡݻ+ܯ)*|yoSdL`T`ztr7Zzxhw.9Jk5)}\$m/uU&WUk)}JbHdWtJ*dsRRᲅRî]T~ZudO 4mM) hTN#C*S .ɵm=|>oB[5.cQ߫V!j;]}:G-Isb vQzNII|@uZ&}==ooݭ̈́V2AGIX"I]򾞽|@UT3/Ȧwnj]CBnʯѸ l7ѺH}RWA/%[>fvsZ*AR,2.;5<~*oTj݋ziE:k+I>DK>dm{e&m1}o?Vh)NZieZ2B5H+\lBj_xǸOamմI =%鯮uc..!%v*c͝Iɕ\]EJVj㉋qI݆*[Dv%j{c;[t^aն.,[eN>o,7[)VWMzbl[\r;ѓSyOK~ҹ+LTcb}|vsJn!tk(-_H'-RNm{< xj='5?[g7.SkGp"2xqW5JHu5胉e^'d]UjJ[Uf:B:!UX oO6Iֺ輻7E{Ӥ3vNGwPq-}a P>MV#b TU˿sLsƎq.7UC5hMxNJX1S.jOd|e=rq)$>4Zʥ>^7V"go/l;QJn?ܪ^@{VyfX6_.b&axC Pzȥq9Ը>v}-U@z /k&vcpiig>4f1R.Me~ayi=E۰4/m H0/<}cٖ +\*icx+J+9NkPra^p}_dxJ)eșx*@XɁ^): Kʗݍ\cX @VD$ ` H+A"X @VD$ ` H+A"X @VD$ ` H+A"X @VD$ ` H+A"X @VD$ ` H+A"X @VD$ ` H+A"X @VD$ ` H+A"X @VD$ ` H+A"X @VD$ ` H+A"X2Ö-qȤ IB68l=r4 W;KmgխJ* WO$gԩ41AZqŀLroYé'~8Nwv7pԩt.:+@&C\c H+A"X @VD$ dwY©S:xΞ=MK6MQQ*Zbcb9 INұ'Tr%EGGgws^I"\I#ú\YB9^LLʕ-ÇgwSr ={P@4A X @VD$ dwkYQ-?,[ ;̜5G3g ;erk  k΍fEdwkb͚Rt>PEM=F #-8|tNMze(-XwTjTRZB\ B>O6Q:mo?OlkrG5Տ.^fǷӛҚw{FBPA9-\+4uͪ>b2Ϝ#x MnpRԨMLbb} CΡ]/hͯiX"[q''jΗuY%GfEdO٢ϐm_ ]v H{^6鐒jij_bW9逖ϟ_lqw^mFhr.X>QUZ6cEZs#TI3ڶMxm:x^y43uC9֏db+ICtKq5#k4w zwaDP㮣C5kKҊ U>tHgCKI4jkggܕ))E~|Ͽ>Mcz9M|^{~/!?i#tQ\;-Ϲi,T|0Z|g\жjoSjOawWo*I2h$)9%YYihILL#ݺkA]17lԔ+ W2CSRvUBM_Ϻ<ƖWjw˯hKSeu@8>Ȟsuˋ״$%k+#4ik yK}T:8G#OI)DUծu HҹK k~;ѵbkӇ}W|fuV| PJr(I_ꯧ7֤?hݷ/ֿ_PuAn\1A=gTKrpZbp>|~]G}gvEbz}&/R ?uޮMI%TTBSQ099'jӛcn=ӵmz$[!\'~}E /v ^Y+她3jתS&Ij$T OU.qc*}:^0 UV/QǟҲ"-4.ؒ0d=r5o[76[nٷIk٩6FHe1NMOWFQwjG{Zr{hf-ZVfY[{L5kW`1eS6ct@[լ^WMA nq\_ TvC1C+r#hTH4k˪zGXp[Y=oSՠݚAvæ:0Ʀô`p1}5VիXw}=}¶h`B*b2}}6.$NaMPkv+14NPOCim]C[ aAm$" Vխσjz:5WaT>tZ~U /^4p~%z4a_}r8JѷZ!r'lٳߴy9bKZ55-j^fǷ{kzR):ẋqY|U+ȥBTۚ'$fn+ [R{:+%=1O+(Єڹb:$֪W\bVg^KNȷgK)^Jڔ{%zq=ۮ!7ǂ:y{o6$>Ґ9RE=>ecrt[8Aأq7Qm KRު5U.-m\ {X*޽z("O̪ jt{_GF1%ײ)զQCiF}c~^JظHE5PN `*Uտ_Gzvנz[w߰17l#ݺ+111ǕX5mFj-tr>@ڧw<_4PLz"i.)Y_~Q݇ae!2*or-E5rb#$|=.rߧwGԥO8u]zU._WPIJ٩W/cOoSXM[^"jն4WT;̾zzC+MEݔNV25s65TP?)z޳jcԲeMzvUSiOk˯_R59VߍHm4o\.OGSx 9D;vd~__ ݦA=֗p 2HcMИOv߰>*V2+ȥr7m{ni{n[H\-ҝUGPZfح+(sP4CPP^L[?*zNF-<ڡJPٔG5P(SNR{TzŔ7"\a>rȸ8;Jjի#U.(&ԡ_EJK'b)_zyQsV o=_L+ι5Z0&D5CFED 2[~Q1 9k5d@$dZ!q*P&3nCjP\Tuhn4yvfˤTȑO; W4?liS5-px'!ޗե6T~}*G>9R%`C PAܪV4[B-Á|*^I]*:?gMMk*u*%YgmkPUP;jٜ r˭}ڼ\ڳy/${^\N$ ,䙤hs4w~PO2]NSU2 voUw|okRZ{]:VmiWM{NgI ۴x|Oo^OU7QQ+Tl=:F6[n~[1@MԀOTAj4nuo>-V7ihխr*jO,]MmE> iTVNݒjiuL:6VNx[(}wMSWݨ1lK9V&< r'` H+A"X Il6 wv+@&TBn$!ᴢ"[2IѢŴ珽*W9UBic-MuVL#Iھw={6[l6"Uh1?ӌ`D11Շ9VD$,djOt YZ)ew3r< %InIn KJFJ12?<p` ` H+A"XҵM/k}+ƛy\/~˯`媼Q\>{Hv7 \rixm;z^]ݜ\%2Ԯ*#Br}\.kN:,j!$$DbTR`=rOMjݠPGv7'WILv]rwZV(}[.կWWaaaY«CRRvܩ}Sesu? ʵk|qB :tSvcO:J+!,,L*VS')ߟ&%U!<Bt Ko~{N !H1R]9b%.\ \2Oc95XI\ySE9)XIW eUmA|.xn? ǹa-Sv둅n}C-cڵ[T |םҹlv[Iڙ9jV-yUv}+Ѱye$ȑ#2l'W^=UjU.mݺM _}M/RS'OT…iI#yn V-11*i WF,X]GJE*-[Dv#aF<njP͛Y&zql 6Rov}PJkww QL<\#NOKg+i8Ųm;\"׾}f{P6=+ C|C]HjϿo5_9]N}C?g/}7&khӏjԢ|X~zFg.+V%sWrF W35EQiM/V=tSzqT 4D/N]>nGjuw^:-<[|b.u| |fp//?in'(9o%u6A[CIZ9*1P7O7j@5IJK_z^s>_}*P!Mj_v |ڔ Kgٞ,+ia 69jSдLA[\#5vF[S͟|b_́qғZKRv6X/mo-ۋgzJ$ufŻPI{hu<:dvVU%I ׻+WVݻ<׹?jCt3uhc]M`uuSo.kVydڔ9 I?{C\o&SA mV=FR~\oS:zzό׭3O?|I5ዴǙޫ@i/vdec/dZ@vGZ_2_䶩NE]E*:_Μ:}n*%BUa7Za~^{P-Z1չ!U~Z?ԟ:ڪc2 K!~U9#r;[b:t)Ru]ƪ?T6QFU_z߯!sҾ.)e.;{PbrǩT W~?+DnϫwWWY>NϨ\5JNP@,X @+.ϯ3\G+:کN[Swtd򖍾ݮq*P3'OInrzv=:Y]:wЋ3gJ=tAz=ޣ"""+շS>~rf~]\PRIرY{O9u))UE봶|B%FmouG%"tSV:,R$/О-T_ɱ+>(-*VƛV+9:iĜh`&>𔎞"VP5*v;Ti qyT1Urx/cݦkӴ:tƩRz}luic4uD 6Rv}T=UUVnז-[y]N(O/4gF/:.#Tf?}:>8P-GOW;(_Djtnqli<1CçMҘo9x\>MkYd'x\y |˾R W__=ʕ@+fqʹnZ7n7{{9 eP6re;nԾ} *@~jT9]0 ^6 IZ7(fttzja/%Pn[,P?n:ut?TXԩg>4f!\RL/dINӲӰͼr^uOpu.~̨XI*Χ뻭֥3 |2&sml6ݥ9y >|, ?x\`!قyK)szXIbfosVm6οbgu*S,qa;jfw3X1WXg뼁~i+F(쫼8*VH?_}@8C)I*n˴lu}uZjYc{Ä24ꊕ*7j(e,pj%=o7h9m(PZ'n^Zi{ `rT_>+V|OY=ȈHعp%IIIڱs"#"qSc[ՉU?>aBrlgJd_e}2P ٮAh;tNK7٤nN BTXc )cGiݯQXX"TH`>h2<ȼr "_!y0@*WVd|oj9)ZIáyXl6 &sހ*}2m ,Z'>gUbx+2'ץwYf)66Vݔ9ۘ+R<.>}Tm*;X Ǽݼ$r V@&6&|oE16@FeZ0+~1TiggK&yi82ߔ }3s+&cfEJeYs*ug_["u_Cm4HW o|ycՊqY=C<7$ExfT+a<3Ȱ8se*?: t=!7aIk Qn'T12urm(yC Vqa櫊د0 1PjXy1d1?bټWcnx[/[eUzE^?gR*1jZ>1lq*uҿ|Sqx+Uw葹}2+Vd`2FZ*)|,oap~X>gLRL[(;ۭ~U ʸ/˫Tqi=mݼy7VC'Ů *,9m(d=x.ӻg1Hd8c-JRWxcSk~*q菧}aBJ%Il9UR[a+Vdg ;<ۭLUxZ<_[eT|LޮG 4Xjlfu୪U|)mV7<͸4<,JObi9P12'0*Ve+cϪhY$\1{cb11ϳbUR,s%V̿-Y:wFUXU!=i<|>6cyՐ 'WT[qqoi/P $L!D엖*0:_(a2+Pż<ϊY_X~lu sSyX,VA}89'ఛl#y+.41/[*VUCې 󲙿``WR-Pxdh6? OWb~ IDATnܞcdgb>h1-Ƌg5,Hmϛ[PXb ZTxͰ>B6Y@Β`ŪJülkX yRo4|۴m:,{ S8eT g<,J)u"O̕) \+Ɖg*8qw +TO& d@9G *\13WHj>gt}~WZdiȒU@Ū"[(`0zxIJV O6k1NTk-TT1߰oaպa d-@*3dͼ\-P5LP!)ubc|Ukյ1_ _g dX'ކy>k`ކHiYJ=t>cup981*J_9H1{{,c>\9b~yFOs`b}V-|J ]rS,+S}oCtcj(sx&y~O,[TJͼ#Թ8a M+VDGW~!+ ZAL)t(U~BܿC|rJ+D*P̹qئ+*VJU%q֖`}eBmsfwrGw4&|gjaJoi\=)V\ʟ̘e)-ZϛRC.0(e@R WCcL_w)_5Ϲ@+s I{z3^#/4&WUŽgp\VbGq%m}##wJso\ WBἐ͵Jz*YxhuEߪRI”s"%7&WSZ~z֞GÔזtlZ/~w{iPZ?JBr%K-X7Sko J~nF[[RItsZVX}8>δ۔IJzw9{Ca h,=aK78Vn9q9kF*eW|%! QH\Jm}_ JUjm!i[[ 2cj%ue_ U!K\nܳm`% V W2Ҿ8 9e@KȴmeD/w6E mlOF)”תP)]#wfÐe=#*qEU+VH[5ҳ蘑ߨNLxr%> BVݯ5ܘ[UB;XɍYk=SZwG`X>ZXz >s}{`efh7r͑ʙ+T#ʽWJmg5[Vrݕ+ Bn@{:}UxUTgNzn[rx:Xwv͊srcڇwjU TFuMJn(*SFސb&L9wNgC VF?l{#>չyo;ms[8;nt7+#,=㮨H}ƫ>+6v{zr쐻^¯X?l.+LpvYPܴod U. T+Ư XfUsղ ξY4m竮s~wk[-,xy>{wx*xu@`gqN|4'|d#h_|Gf:8if B{X>HZIENDB`qstardict/docs/en_GB/images/main-window-intro.png000066400000000000000000001014311453553600400223200ustar00rootroot00000000000000PNG  IHDRhЪ8 pHYs+ IDATx^wxչ̮Ulw1Jj(N%@ N&R 1 ɖdɪ;sF6iU,>ϳϜwt^DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDddT:""""9r̀t c(""""PqH樀K@ŇHOEp[Zq_`)zs[O|M"""""'mCwz^zތ EWzިzN;{~bϸͭY󊈈H:y3ns*L2Z35O&$""""[Xd5ejN9z'U]|#""""iFWL=_=ySёȾ"""""#LGMUGwZ$tuudDҝ7x25d0IwtSՑy;oikJuT ܎t'TRё:oF|G^GGK6OqH-ǓNHWKhI%7YNTud=Hhkh~~H4ٜ%+f:2h,U흣eDwyhxcx=2=H".Ho,^=gb=ݞ}ATcAbDc|\DDDD3$+DłD' K71cfc&3Cp +󉈈H"|Aq3f1d'vE~ϕ|3IL扈IH5cb$Cp,oZ<OgK6O{S{ dLfN}?s,~2Z̧ 3onښmO*yf?L祤3̙JlT9阹_:}/6Yle*L!""""E9:j'z\#J?h4fxRK%'e@Oe$+|""""SXO|k*W̼on㵃XPezhDc%(fTJu̢G c^='O&|ټ[fǂ#1MDc61_GX"r%ӋD%M mobl7+s׋ͭd}Sqx>.֌Ac+hq 'h,Qۿ㵃$O4L-͓YȤ2=}  0sxy}s._yyI4hLDDDDzDA1.Nb?,?bG ͸?3o<'|y+J߿5f+cß1f7/""""g f6񊨠1d94zڦDc|<ξc{xŋY ^ ^oj̋'c^,m$H7qO}L""""eW $+H>acqv^V^ܟkƽ7L$h<(jyb2bfNq[Y^v#(8'B-HrbWgYy;nҖ"_XyX>^?EZ62/"""""ҹ,۶;vUkU~%krȿOGP~{4}<A}A{,l_iS:니H:ɅŅӼ>kvs{x1l{TghAo/h,Y:^?nyxBYؖ5H7 BS~\17 '9:#7D<6މ+μɥ`X6X`eYm۸¥_PX^[bN+"""""ykuVB,k1o]oE7K6)@WŽh*k{me…ze&PA8"XCv 66;倾'nK&""""") \]9n+dA-m?m1?/(麪@?3nyxP fYؖMvv6. }B١pp-u\tMDG^cm7|rn-l6|4{6ӟ73n8֬YÒ%K[g}=أCnM7HSSK-㩧s/' mwa*D$c,X@SSn9Ɨ_~Ivv6ƍ3駟?_m޺IAn-W_u7|s"+ήꪤ/Yykz8nB'^1̾'^I'_paz1lƌUW^#OPr%2 ' qq#‹~k=ΛoI'̃=ZD]OU ~\{MMMPZ[o[o妛oNqɭEڧ~֦8kGѽuƏ8E/=[w^Q~SNwm&!C(XQc:MT֯"; .}#ΜObY<""kܹ0i$sݟ'MMMۮ<#<#{̏)..i;쳘7oGu$tPk|miPRRs=Ͻ?r+^t>O '75gYS3%dC8dtMD\&M~n;oCm?gN4 3>˻u^ýÕW8lOX,+fλCzU5K>H{y\~9sqtdggs%g'sבm,(͂3Mjm=f?$@BA/{1s 1/ќMYwhrYV>Y4BsMBDdַo GaC-kVgeY~|,X:yq]=j+PZ8Cee%ÆuyeLE]]ꫯOŜ?لw̲,,&@4 X6k{H b1466c~| W ϟoxuDDcݪ3xo0^4nѶ'h,¶mD"D"6(X6W˼-VXȲ]}MDt s ǛaWl^ݖ/f /x֙}Dm{1Zf ? ubRSSC}}=55E `;'m Xh&bBrG1! ]6~?x3!jۯue$^b̓oc/t,6.h??ZBQr4seeYlp8mۄ.04H4Jv$EDDDD$%5;lzs4c򃊮x.Z?la|2ضa67ݨwU^l,hz}g'Y^($ xûZrmEDDDDH~'޸ 㝢 ޸`' ay}^!h_{[s͟3ǻUG 4&c8aV#h3ߏ LkH[g( 3/Q? xmX'"""""ˢyu\b񿖌-SD3m+m-۞EDDDDD )f XѕJb??^ry)[CxϨlHl\QxsovPe~)e@$s^;hX!BPs\z0=9.<}6I8g2q]3j#+xkr  \x!UryY߳ x'f IDATYSdS%<=h'q ϗ嵯WQ.c.Ǔoz>}7>9k"Fu SbĻ{,~A}}UGr.+Y.5 dߖv>'aֵ9~w1+Qxn㍙WԼyBQ:BHI۵n|oc]ĥㇹQ*XFdz!>p#cL$ٱP 7O=9x˸Oùm8S1;` S\,.X_>7`_?˧泇ڇ`T{?7hsOr0X[0x"}`!;8w!Z8wݛu s+O7O[f3WzjߛW/rr]LDDD7 ZÛ16^dZqj^Fe<訠t~eqsŘ 9{t=B8?-#wpoe0{S|T;-7]̜~)]/̣_kv̏ئaMbmEGs>oV|e h೷g8dx.ː~![w̰ҕ{ƛ|pFm3{Ei޹;n:wWK凯ɠ8q2%;ΔҹYm)`r,a2RglJTb9bݦ3rS}O|=7|opMnaVy- ][OŇr«^=dbR+da?Ngݼx_˪pﱕa?aN'@]PXKZ7X}Wr[sʳOsLԾz۴%Q'y,YSCc,JOy;v }&r&\\͢,✕|] ..kSX܇%߲" eޓz n?5`48@N)[@8zE=f%7F~=Mr]exjVށ.%"""K%Z}O5~PߌyM-2JH &:v,5cngségتz'\~ᰌ_iq*}<.}gqۓ l}u\xY^*ʎ]•ʚNޚ[9;op<>~1),'јtDkd{H-'1]yΒ ܹfHDDDDDzxCy=ZO*:z@S) U,_ZHBeO"""dGyxw9K'h j[ի2f( 9""ImP˲eKTtL:kTs7=;hA2uyε|JFLDڥO Ɗ sHDDD2#} 25O͓ɓ 橫Uq&"RPP@]]OSkN 4LRDDDDD$L6 2{DDDDDwͭ@l'EDDDDmֵZ6 """""kR#"Un7qPDc"""ҭzڿ74h[Aof8}N^x:o@@Ms{н< T͸_ؙ;-޲r:*aCq? > f|rfzSN>P""[qXx U뫈F$)).aj7}zzk?n53.9GF_ۚg9ۚGO` 8=xS{eQ\<` wfg 7W^JiYy93gQG̙0m!*lj+ʗ/oeK\]?8<(ʂj]E!dG٥4Rгd\vmWSչ4kjjoa%j9Hj^jK,Rca=&pӿ>a5mp>oPzwVM6Pǧ}]k)2cCvd 3jrXM6^q/ȦM;dX{ 2\3eZWO53+v.aB~\HuemEZ.so G!I@l*p]3a:'o[ >Ϯ{%C՜?s)G2eS?fRL>e`tDqS{iy֝f(KN`ځߔiq?cqxOy/'ѝ`lNgCVÝ\K Mh3\}[s@"}~1~NSu0:V_INǸ߱{Co*]_pAżp͞d;l,hL\P8^kbIcU0DKs>Hg {ڗq_1?ÚwgqeG&fnCLNctLf~ Dc"""~-" 1c ֬Y_… ,bF{өV&PT?  oE}EmE&̢舻xod1l<46#[#g/$;bߖ^$I^bv>\>\bH3c ~mˉF455F&0Gu 4Cg@fU]]w,'!J#G#`ԩ1p@cÆ 䐕E$ܽg~AU/s^s]EH7b0MJmYʹƦ&"MM3㥗hhhb-""])++R˩p8L(qǡ#G'ZǨx!~4deS8_q}7KBDDzz/^̉'W_}ŧ`v`&N'Whll䜟i ""]z/_Nee%999ن (++#//ܭ w?s}W0 8tEDz:*V/Ceۭ'6[sꫯYb+W2rL^s bo߾YgH”n [AEl:H<f2y5kױbEK/qwӈHj,jafZ8tGx|^~imKQR[~(w^rB+ gp#_Gn_?6/H2IH~z[466+++Yz5+**X^QA,] jEDz}RPP@4Jfm9>ƅcԓ+E3y9!s7_(`N`]Sd'ڕZ?s/;}˱Y >9 @q8LV8$v+qňK(Wi4u]88ypӱ,[Y%]1 ""u]:Vx|*q/Wt+WګXymu"8šz_|۶YVK27etXk`_o (v}ı@ ߾‹3q\ߟyuUS8ED8migmJ8Ÿ=6Mug#t#YM~AΟdYlgQ\R (R'p DD',h,ƹJJJ(׏G?:|,s~v3&aYUŖh9ܧLf(YcqߙÏVsӝg2J"#8ڇ~)]AHo$nYP Hn7 mw*T3*wμ 6˗v=,L~*:9?`3`ϟgfKlkm"gmBa*DDz8_""'qhll$''6wDQ&""""APSSCuu5 ̟?h[yy9EEEP@*DDDDD2ȶm)..ffH\*ED$m'"""MDDDDDP&""BtLDdjE: 4nijj2Ýp8W2bEDz*#-RXz?EDS70qjjjo!?/QaWO)`bI9,"2£6pܨKah*_ F:Zl2X!%B!2 jeAYf-?ӯeggS_A͡MRџ?f~_'"CȲ[dsܨ0;KǮ%Zo/e#hl2e"KTWw߲Sb,"wC.XBP>}PTTdڥb,@WDdԕDmlXLd PTT譶>Ͳֿ#""=KWILZ;8NLřq̰l!K4juHMDDDDDP&"""""C@!T*DDDDDDzf_DX|9V""KB6 b2sHP&"V,_Ϊ5kf dlVXɂoHK>("*Vb*DDW)+ĸѣYr9$ @f8^i~ZT*DDDDDDzh""""""= 4BHMDDDDDP&"""""C@!Ta3 """'rJ D(22DDdK+h""[qFcfE11ÝY4C9Ÿnm͛G8&7ߘ""4^nڵ?Fnt%KRȂ߰מ{PZZjd!ǩǒU ]JSw<=ܽTWWl2ʀb+VP]]8\aÆQPP]DD0*DDz)u_ɓ'SUYEMeU?a"ǍecYa/gW(x8YEd^l{ yO2vFn5ܾ'},+ۜ.c6lE=z4+V //1cp]#FvZ4h .d̘1ǜJDD*DDz^{ snFc7ԓevljTIv`륗95;n},YR[EluȎp\K(.>>4DV1W&A]CqF1bPSSCCCXp8LAA466T&"wDDze<WڟƆFbZ,0p  /`Yy!5!s| X&444?Φl?샫^cߙvؐ!Cz*++D"B!B ]Fꇼ3 IDATfذa4""4^ql**V2b("F\7Feee 7^1ӧp}?(6".abKcCcmٌ9?òem]12#`[w+  c6B8Hl ?ښ)l?0ܒ#ۯ@m~Ԑ@ee%~߬X,Fmm-(""4|K$҄m0b%,^۶lÇk;i^5U״c(E;f,іv]ǡiWbʔ(**jݿ=Bӱk<3c"u¶m,ˢ0Fijl"쬖4ܾܗTs S#R\\L$!PWWGCCn-|GljkkmR,XL4ɘQDD*DD6s/ٳ))K8"!cNUXsaǸpqŢD1"&YS¶mlnyn*W9K(&'/^~'Z5r٫ϲYUٟu i]KK#;'p8e557V,Yf eeeK4h4ʀe˖Q[[Kii)mHyy 4- 4TS$oCE B?|-EZq\mIj cضmoܮN9sXx1Oٟodb!&gρ;=>\Kaa5j`>galj.b1V0)Pt c>UʼT[o1gNmn_[[_}s?{'e""Q&"|Hp(Lw*#`9R(h,#3%e6-ˆ0aq6ot\HSFjkkP* K,c#`4:vxɼ$b51FV# yjJƏ4h}&{{>IgV^ͻoͧ~ҥK?a,X˲c…,+_ƻCQa!{cƴ0͛ 4T,z}5pFml+m[|m8C8q,b~}}=K.e?..++VRPP@~A>9=70Ec446Dhlh$i&"Y;RKvf "~Wv[oK\|/÷u\bNh$†>z(SviNh4ʼ/SO2|p9r$ok׮cW_ӿva~#GdCm-Wo>v߸EDD6_?fk's>>}ЧٶmۄCͅ悬 ͷ߷m }1@(npisbG#eƚ_[vv6;pYwᖝuSujHUԩTF@B0 @7J{4xU W/mdJ"S2@2'Uy>þ筵pU'gYa}kڕ{O_/x8x}G/U+ v{"'ctt4N836đ=ߌ{X|o?hOctt4nq@k /2Z1淚ŧ?c#; /<5˜pZbEe9gݎkkh('p`` S_=?CCC148ؗzM'm ychpoowLƣ5 W^/z ⋟Xn4ܽ'.>Gٻء?۾>VΉGmݏ>1>>cqXx['ոo+b16>6o'_^rK:xc7nG{'"">ǾP wǎO~5 ѣqm>5r8+VgG^5<G=178{y1<<oolOxGk퉉x}/{ilذ!?='߾#hrgŦVȦqˮB>GVDZ<۷>~J=WK/}r  u]<`l۶-֯[{vk?q"+&8q"֭[###1zUZE/zQ ,g2aÆ׾&>uqmիdh0OLđÇܳώg?YZvD򕯈tΈB=k֮VSGxa<9ϙ{V+oU_F>|(8c[aGZkWņ5{cځ8x:VE۷/}}8Fl` bpp0?Ǐv1::{orszغyS:6c++7/2%,=/='6lدbl|,N_>6mT97CCC\vm<4w&Xݻ'{*7V+^-[h\t%qؽ{whc3wƪظqӌwm71<#6n(>_N;-.8zhl;c[;v,֬Y~z|_;VkVM#>h__/_ eJ@Xf>xOx|:~ضu[DDӗ7cc{X=<Xj^UՊ̫wuW=z,v?qq.(O}obӑqch18>;V#ouDž^ñ{8|h '>go_HG4ehժxpx뮏;Ό'pBk3=߾xӟW^yel]6y5/ݗ~cpp0Fcۺqdh+c,ZrE/w}GG~xIbk_w_kWsn3O_Gǣx+_U.̫~U1i$[Csiq3bqӞV͓!OM6OͱgϞyN8bj-ޓ%֬Y?8+6eWo'fO|]㋇m_|M\k,c@Պ͛7544###eyYkZ7)7ƽ+W۷*=Oă>qg` eN@yj.=yZfwB@h !4B@h !4B@h !4`AZD@Ch !4@Ch !4?xgxٚ׼Dy<[ 4Tqt;殃֯g^vnΈWG/Ğ㝟N|Gb@l޴!K/7Emmiw'ND"54#6K~^VD`<ϭXOqsGUeq^o`4X{_;e-qVhϿVćGngˍ<=n,>[b{{4}h;}e D]׍ Pg`M_?';~,]JaוluM;Jc{_qPk2.'~.U{ h& _qQ5#o9#~5q M7߾1~n#G:{c8'ƯpKъۿv{;bW\l=w>x4/n;v/E ]zw<<8Oy8gx "sED#־bƝ?/.`ou<b oteānH文m/2*"bhxU\ o~S]؋`{,u[?_?6[8o||`h]ԏ_=}~lNcjix'~hX\tNkΊVEDc=o=ه==~Ow[lɐ1~=)=E/~gƅ+&+)~~ocK.|G}UωG>^^7{$n=Ҏ5Nxo:VDsOE`M/3OyZ֚-qY{>lC__~=߈_=W߹-~xֈ?wC չqND?>)\#q$>/yK<c8{:dE ?xޚX;~pY/;WzeO_N.\Ͽ<~5؞-+WFDľ[o?^g{gZx{ ƛ6ϼw<{w Ɓ=c`Ӛ\{ozFD""b@7/">MqwLۇO>dzz:q$>~|E|cW>|OvOCGb3_׷tH|__}?׮߼9^wgfD7?#CW>6{O׽[+>ߌw|kk~?co<[?7?u _\/P~V,'01,X?֊| ā#b`KVǪVĪ# Mk @k(.{ڎGsS~1ZW_.=ڏ=<:1z3=\qͻo}e_)ϗi g3Vs@{8bƗ7?wź0Њ3^igťZCk篍ܕ1~xxp;bb7 {n\ŏu!6n7>emiEX5^3ǧsRk<])ū @b9ƛ/:Z&y5jǢ+gx;2뷮xOQV?غ~8wƁh1~Ʈ{˯Ozz GMiǞ{1Њ8w,V\57!u'bסVl\;}m&룱Dl;g᲋'b>0/""V6Zo;<۲/m\*ʼnxD=4u{{]13XcӚdpVL} JD b0nGxh|/))Ҟq$eñ){Ch%KX;ޡxUE,ǣɿԎ֚" '{""Z%p?+_ekbUk"/>zw?d}ᜡuZCqM+v8홿X0zel8q0vEnhnO" 6NDԓmņ5+}XjG,@k*\M;:3DD kWsW9j~ܤϥNk(]e{""66@M'oZ˷š~;>؉ñ.|B#Nnwcqpbsk2?t(n;Ԏhcbt4Dž;&Eľ_j#K7?bs.: NOnNك18P{,"Vⶇ'-|3eK`ݞcC_=x"bph<<=}FkZ3]|8#ƏXg?7s$F#"&ŧo=eˆ>ww|D#bؑ~eϥ\?mƳ߸+>XLD;swxe?ܸ̑3ơxg?7C#nXϺwFegm9~SbO 3'T;~xh Dž?!~kStl"&Vų{I{jO _5>xDĪS|q'쌟{lcY7oy>>j(n?xxLOZ+V#e*p kM\{pOG?/ǪǏ≮JkM؏<%|x~=Py+mW/f#:Ujy=+VLAdlX͇|C1o_g=E/,2~.y3Iv|_^ye膯~PM77nz1R }tOn8x߫{o`6>~Oǯ#bԟS 4Zz]5[^kmS TjcOfz]:į8"{ү,u+[{SoٻW)K@F@E:~!4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4 IDATB@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@h !4B@hc@kq2Q/Жd/l4ղj@+qDYT h)N6_qh>< n,4|~({.`=|u'huNj><m.ؽG2z{=uuuzjR@^/h>uք6ۋmM:ݣwmM7o2zLݺTK={]lsʼXʀ:]N=:wꝒNw :퓺zD^,E@t[_կ@#k@sU~[9[6?`ݹz@sTݧwRW}]ԩuݼZ֋Bki\ 4G{[wƙZV]vL?M׌Of{(=~/ǹ^#k^lZ7Uo^DO4Z,c;K"RwOn[Zq ,Cր_ڒ4e_֒rB#;/nUo"&gR!=;3?Xn]Ɲw;v([:Y\Oke?+Ue)Z;f|^R-[<ߒ1!b2׷gbb_cjph0vgyʯ_|X^?h7Nd/@>W#Wbvԇr^s_rm aYy晱32@߶q,;7Qt띶<%i\帗XI;N~Z1]y=I[Kr(G⁇Teepp >#gQ)qRT}h: Tݴ [OWjcXR;Ď^>=y['9/;XsPu\-R`zZjhy=~ ҚKUEWU#帼UfhOT+{=*M[y }z~jR~?l)sA3kU_24R~(CK_R;,=J~^+UykxVu1:ӸSܗOҸ""b͚5q4ۡCc͚eO~^u/”[y͛=KO^sB) UBÔaԎ58'y=?-Knpj<0wNVz:`y-G.WuzY3'em]U?'Xy=ӯ,kR} 륀Ʃ7SLRo0O58|_qNtl*XԅW`i_7>ZtQa]rkO-Zk['Sϫ hI;z ¦z9NvL~h)Д1:@ _u^:6-4I}VW.,ŹtO\7ELrekSTiW7Eźz/z]7/;*R-yOO}^d'Z{ctp63ϛOӹR/Y<^վUIy\)e y-2ǥƩ_-}%k@z 1iS=*jMR/Z=q;KVVC>qӺ2d,Wq~U UsU\/clyL硩 Q8iY^OL13ez-:}RӬk@&xyß>"uV@L~V&b;3CW,bf`KL^+;dUQseU5N}oRU89myP)TjU<&Z;-uI>N󲖔Ǖ96_qrH?l-bf5Oi>Y MYL'_xf\z9.ǔj:B@սq)Ӗ|^Uq8 vSv6NR=^d2c:4Ҫ"x§}:~bjY,l1.'iZST*T帜׍7.:޷q;ꟚU'_1UKS?[ڝr]4_P/N~lyS JZIY di}{1wRhK*혪H阘-i@YO嫼'u^U(&@K,iKZRWl h eR[189xqz*S?󠖴|iK/|\9/ulU5~{U[Z9㈙,Ӹu<Wm_>+qr`Hi\bj^^455z:_ M16i[:!žToR?y}^U SGyQ]KpR8rm$oPS\-h=,ɏ-?R~SJp15NNǥkO*TE6NN[SrKzufs ޶NT^:ߒ T"Ҿ쥰Wӹ`z蘭b1Z;f4y-z\S-0@V-41zimUJݚZ|w@kG7Uj'_VVKǤy PS<|Eפzd>g Jr]-ע˾Vig[N2XL^0oOsyR.J?kZ'hMvV+ުEL~pVPiZL[1殮5il|Mz}RW8VX{r1]+{eܧqRK/} Vi:yzk$kIެ-D@G;fyLq_|Mn<-VLVLvQK!=Ox:%Z9~ȷT+{8֏Wg-nm^ZSo)멖BT/'iyzwR/8WU%zufs o67U"KOz;~՚4/>tLRKslo{9_k9zq~w]5_`iW(S`qRrZO>;퓪zݸ|I$d613py>)~ݚuZޫZQ/FUk"{'K^]=b}UܧqYkUO ngsfMa\W>_k}9Nrޏ c.!< JU㤪_>_kN/)UkMFs&uU\qr|^tzu|1`M9RWW}.jbvpMXr}.LՍKuw~en{}^%~NS/W+k<b eGTג^CU˕~uXי~繲J՚Z[l4~UTw+{λY}[̛~_k>֗n*~uPp뺤\J[Ad~zX+,-,:Y&YpT;sh415=-0<~^Xe"$0VE85`s4lzp*kˈ7PIENDB`qstardict/docs/en_GB/images/notification-area.png000066400000000000000000000026451453553600400223410ustar00rootroot00000000000000PNG  IHDRy) pHYs+WIDAThC]lU;g?֘R4i M W^xazeDH &&&Fo b1Bå !Ѡ4*? 6۟ݝϋ-vyiLN'ϾΙ.IGD  bވ\G:8"upDCBDr}+*MFD"FKRT7خ7X|93W%[@>8}`?sȵdNDZZ\e"IX&[HDkv-B r O)8I78z3eBJcdVCx K6lٶm[[b ֖e133K\zerMK?aȿ=';b7>|嚈=bQY. c2 *E,U7< wJF9ڼvͺ]"Rqn,˵ Q%&$ўk܁ptl-RJ1k>-CuֺC[eoUs6߽_x{hh 5)2 w(C/=?j8טğ;wl媓ՕS9ffmWL 87 8݃}= ̵RRs`X EcL\'r";;d^޺dOd2VN皠fVATY{}2iPh]r "$ƿƝ0f}T'_շy@*d2uDJT6y,yׁONni޼_y;=ehhwr6\+kff&TP6yc35Tcjpϯ>R "zNwߗ|;?cO2җ._\)03]?ַL߲ 1m [ŕTw,k^qӽW#Dl]9GȻI%u0\+>ݵ55Μ=gBtMDDxZQ=u\՝䙺*um}1Ehعl͢d6m{JӍuf" pr-"J둑L`;)qeQh"L > p\`V,_=a{jEHusiP2b p\:Ro b?D#r\G:8"upD_FepIENDB`qstardict/docs/en_GB/images/qstardict.svg000066400000000000000000002715211453553600400207570ustar00rootroot00000000000000 qstardict/docs/en_GB/images/settings-dictionaries-add.png000066400000000000000000001267751453553600400240210ustar00rootroot00000000000000PNG  IHDRG pHYs+ IDATxw|]ҽ[VSF{pŁDA!8E"8Y*KPd=3~pd6iG۹K~߻B!B!B!B!B!B!B!B!B!B!B!B8z*B!D1z* 8}(B>= a9GB!逄%B!\-LU+Bߩ4!",|oMB!DE叁c-T(BT& y&\V TV"+!BB_5$v"BW܅Jk{~B!(Xney RV|MB!Dy[!Ȕ o߶G!DoRKn[Y7O^!(< ^e<]_K 5]ny !W>wŠIW:FB!x;WW`/帲 B!Del#`mw O?[!B\Ӏh7]IPS:y[KT+}]a$A^Ԏ/I5mI/)4B!DyQ8Am84;RʲIG!YN8!qG qLW¥J_T& {qNhlCBꔤJ,-ϝU6K'J_ʲ HG-pYҪeICBoFHqB6)KgՀv{mOW*9PSt4J5Re8Zs6'FBI)i4^PYeiIw;Axekl]^ҟR!DE~qغrִT/]j+A֝i{kAe$aYjUqo;ʢRYB!,ekf:GaT[lKmtβTz,KzjtT}76XZHRmm[iӎӮ4y2B;do:{D8UsV}4spfZi,2P4ϭ wz+T.]Nz#LjuH;JmͶZ7_I !ͱ**m;꤭jmpTŴ޴ômq%?އ0iZ;Yt5HښN[}tuUY<B!W¡i5\ެ3qiFj^VY֧J}OJ}8^LiV(KRtVs54ZUԆD5888{=P5?B!`0LOK_,+BnUp4m=ښV^ ;M :ʹ L{hºu]޿_[NWKO !BXFcϫq=;8Tj*7PIwJ (@iIGMж¤ 'OӰA8PUp'-B޸qFgRկ tM{2d_W]xnI[!S&UaDEF pŀ6-B~m#"Y^S1-6[Iz gTiJ{XwwikgkI^RZ.@o\-BNW50 Z6zs Vl=ww8OO.>tc5u[ٚށ4¤j5L`șt:B \ `R^MEnf BUoBdXk{B!6Kػ.nVK~ ޓ25t%iJԟWW3; ҹT%]h4i: &SAQQTPQ@E):~bEf97m !hzn((,44TzJH5{JkilСCi: =G gd.zUp]FLUΦߔ ¢T(EsY&ML^=YBbILLW_<9o1䕗É'c=Oȑ#;omv{TXbc.eֵ@c={dgnVu~k[[usRѧOo7޵ep={H&Mc }+2!!Y3gJK5sg6HjäӧƛR*/.z'NW8z(ڷo􇦡YOٳGЫWoNy }vM5kү_?V+VE/E^M>Lhh&Nb}lذ;箻W痝NAA}%(( zu~hw_~h4ѫWOnN:}{>l(>۷mW >nϪ?tѯ_?W&N%KØѣiժ%y;i"k֬elܸ  MQQѴkזm۷ӯ_ƥ;#;ng ((>}zw^>_̚5i2?4wy'uֹh}޽{yw9k6}1>{=|0i<8u .Y˖Si޼9۶m瑙3޽;11|ч;kq4( gɒi԰!i_B8bgar,pޒʹ?c%]6SX_m޶Ymi lg2o![jJ[-Q5HolPJ@N9ߏ&Rf $ꇢNUId329.6& wƼ'gݺ߹a8x-rrr.744m۠#E N>u~´St(⪐qM7QVc?0[Ռ=p2j~߰r֭+͛7}vDGp ֬Y cA`` Ǐh[kw9s QQ{-rY7XcovQtԺxe}lW3q oWH1u^jõÝ^mP E o#PZ(QDEEbs\TZlyu֭iݺ5Xbfy>gs_|AdPN:a5Ϗs%̙3DG]R^K  a7n,eh۶ ),|ytSd&0sC* c0HIMZ ccbUUyE| xZd=PjGTn^n2>oϞ=c'*t-hҾmU)~rOR[tW5]PkV. vG{I[Vt)P*^; UY0&ۆiѩשPʥmv[Jj*{}Q:z+wh4bBfxΝ:xK%kN~Urr2[nSǎLr\]Ncm׎;wEf䋥KbRZ}IrmzT411h<:2"o|DLt4O=KMG,nL1+Mс<\i׮-O<>|VA=~:`?{ko*Q&o[Bi,lDl-,Wy;IW(UTU)[ BQt(DTut:v8tE9ahYx1'N //3gctܙ-*7lĉƏ?@ӦM42s;d"/?Z$$( ؾc[u\6ndƌGhѢ9={dn]p'F#/FEErп@ѷgY;~8;vMzzڵ{"Iz+x/+###G-W^-JLLh4^.WՓ/.;$? {h4H ϗ[ h׮- }kW`7iĥcBBB WSi6_Xw^~~D3_4}Uvr{z P+N;_Tu f3P-Y)2EU1)9,9ө(5 QQTZ%)U17K^^BzFakێ9fиqcwA*Uxט0a3~Xj֬ŕW^;S_ɵ^^k_j8o6LhhOL3z4 ի/8'7'7zOb2Y&w~;;UAo?>)SETd$njA6ذq##Go߾=ʭcp-Wk+-&% ]/uȲb %~\|I(jJ*㦶VkMԮN% xwVuTՖm]T^nfz?ogd7^g5$''\G)Ό盬,\j1Uh Qegg3e4lؐMDg,slBx'tjc( ?f&G8Gqh乣G-gi03ngMƶEbRi:( b4Pm8Z= /4\XXO?5ݻvKԄ+rqL&F>uHlβ98*j|^> ܇RQTU%77B U G,}(?fTgϦ[oB@`6`Y,!* _mܭX ĭ4ƗZ3xYl/| ٌh$..LrssTդ\XٻxQPh0t._%*ҥ3]tfQYY4Xu깭\5s{:_˺Zt"mMol6c0hժ5w;lta4.4)ELQU}@aDjSh0Xl.B :cXW(O[Ds%\ZO%J?PU)5 nOAxUU q&4 BQ)X߸Q[ZZgo[MΪX7(^3+Kx[?n0*B)gyޏCRWy" {Y/^R!SGŕlckW< 2G;p{iU%MᶚB! هY9ݦk{u'pڛV!IIw2m,|Q*;}&Bmi= ;24%_J{INr4^3f\#B)9f4mqe;J+@UJfm B!N~Ԯm+:gَՎ҃%B!WH=ڛg*P:K׮lXgI)V!SbM[񎞻TBs/?prcs!Bxu<:TUx+R;YYݚ.1͜M>KZF:FY̰*#mdG|P bPdzL!^OtdUVAQIź5T{IYOgޒ~:jv]IJ.9|wf>*#Ѿތ 'Ӥ?_J!;pokjU}5q'si,S4mO)&og[{Ӹ\W¥2KiWz*4ٿBo ce w]Y%]nyB{*Gm5|/;vfTX[l|B 5 6-mU ]TRjnd+E{8B!6:io_JWw9($BQb0[uue*Κ5;P*BM2FIH:Sҝ򤏥6IR!^uze8z0{z eI9'hJ!Bx+˵ Jж^; 4 !BxQb IDATk[}g,#.adSxkO5͙Ǩ:d_̃oMU`Lct\18 .ϕ{R:&\Dljz;WAzs>} 䆻GѲNt?JV\Gbnڜs[,q]%i٩o7ezZ?T 28{ .~[4t11qwYw%AuڿN{|~kJu31 !/?}ތ`'m(!n[QzvvK( ·fu4k-(Ԍ7\۠9s9ͿGќrnްgbC"E)@ J{Ji[`NBmލNsIcNї,j8b ht?I>ȡ<s-㸼n0`&u2VfgID8zdCܜHzD񓸶y }6!Pjʭc{  ,<&gX~c@B;M`nD}A/G ;ޚOFR 6B*6 Dsn"?HZVy w,ƱLJP,]5IIØ8sxyռ<\c9*1Tdԕ59o:3ӵ6~/Ԕ'Ο W͹$OWl߳4'sE{T'ѯ$mV?IG)q0dߩ4ЋZYIV,ym-6f{/{̛؅hs*#3 $o. Po͠;EP 㙧`M ZþpGu~j* a&N߾{;1)40dvjte]LN9LY͘ώW+yq"Dl&Myf-0eyoX޷'s^Tb`ܼ[0}os/~yo/Z, tM#|+=s{f݋oqnǬU}^2U?r]LOXmæ=ˣ;/^̷1snsYRKϹo]{Ckڜqx*7}w>Ni$05v&D,wzi3Mz?f0^糠>j1Ɣ$,ğč4Kˇ!D`?ˎD#-+$?@f\0 ϲi]"ͮ@4g6%j=x8orp~iL@@ zm եǛx;rwsK:>^ݗ-dJl :s?_/$Gs6HLή,:.f^ZSrzgzVu3i=Eʋ= `< 3i(Mv+I;âgYJ\I~n4g@LLXͤ"NbҢj6'%ݮ=2qAJ( e+& jC!NKdS-{?6%)W%z]j)` i;J(5۷i۷_QowꇡѴ=-SH:kaZ@?} e@X1gH-DYUJuDDP _Yy '^N0ԯdʟ2s8D@ \fO}®LЕ(%}(}k# iƆ/&So׏޵Qv(`γ.%]cU3}ѷ<$lz0=gB(8Ȟjlcx;o_Q&>>l3WIPFwO~k E 'P>޸n iYw-Fi KmG6a(a6uY]x8DѰe#bЪU] i珓MжFA8;9>l#Ç2.]`kDH{u FQBhxyƎ~U*G^ 8~Kߗ}E~CW~{^àƑ肈Nb%e W ^t{ʌ/AgӻZ,ɺݣZȑ\D}u_oSF:1]4562I4C8@0V5HBr29 ߱|?SP'5L'jA<8#œ݇qݩs.#oNoIdܝK"{ѡS`$#;Z1XJXQO#S>af@Jr:!1VcRH NP7?JTR2bhh}ZU ٟ]t0bC.|Hu:T 9߿;oDr:H?󅃢YB7 3oaAd٤|r0NGaWޣYڅM:W͚Ϙ%sI04GLl$YIE HbU318_}x{%(DH }mĉ H׎+Ys(9k?gܜEfNşh-ʔIzſE8ҶCֳh~:\ʗU5ٛO˛"tr+ O(d#7bHjx:ot|~1fVhFUŔuC\+Rլb =;d68E&opCZfy&o(DE²t7}ݵ{2*N%,ΫrH0,onSy3$;@~!ġT쌷gthMkTP" 2@jT4yg1J$m"-GFF>fE\NZn ɢp1N xڥBt{0םeyPjϺ ׽7)tp/CTs`Mj,UqA2dr qU,m~**,:΍o³MQ ڙ\4bw7b =ŀPTt5+O +pPDLj#)DFGQ3?4RRM7 G-gf3, EE0AUԔsAfsji[ӒjI3 f#3n!۲ 5LRqiDEW{BB5ކپ5Z0~rvfKCf jk`wdNWyr"RӬ~U#eGޔ w%{E:N}of fLYfU0+9O5mՃ篪)dﯫ9iS6VȶØAnXMAH?ؙvԣ<;c4@׈Bw3fI>^;<M7ٌPOCvб+p, ly,,LȑTM@`4ujǢ7Rr:cMƥ̝,ۚ~Q|`t ҿv>|c͘ q81# 1904Aߒ!W{#LY.?1Sm3QzIkθ~C iw_[\`">69#rj5$N)LnHBN7~or1c$(vmPLHٶաC8R-3n(Ge:Hl&[A͹ЬKBS{VAZB{AW -)\֪w iZe_/2v`[>ĺFɎWr0ƎhrYF'v[Ӿжi2W _~3[ֲZw^GlllOufǚ:-L`b(trMX:{21im(}̓$<};{,Q0Y0L!UO+*m<˖OcY(Wiΰx/^GtATߒW?coCߔ&%ǻRkmX+xIc!_'G$)WGtL^4a,!I>Ŝcze3g]}j}-x_I+T ي1,jyIL$GDPD}zOU\r SG-%32݈>=ok)1:jwhL'3)1 CxzMAWG\vՍ~31aD7nIZ/ZI{?9A14wRO㖍I_OyZ߀MK7Va`7CpE_zů;Άo>YQE\4zg2"f06ܦt;'r6=D^RR{]wx2nO5kM(%K=kL:?~aFpգPh=lh*~~fv4 HEhvY8\1?̾&\&C!xYtQ!Z !*l?P "UQݡ.q!Bè]6NvwJ/*cB!+,, B!#(B!G$P !BHB!@)B!<"R!BxΝ;'!(RV-b}9Rp9N'azsBJ/++'H,] 8I:%L !~"<<ڵjqI_oJ$dggKB!LXXtE+%(B!G$P !BHB!@)B!<"R!BxD2t߽LiJۇ<Šs4?_B¿d@S)]᎛0T;Ԫըbs6~]kj|/n@(ߋ ^BP !|֭u|0{(<-}?ES誷c@Z9\3˒50Zաk6TBR 4!_S#~̘X>>TqF^vzspV<ɤ%[IZCc [?7Ǫ&sw޽-iŢooeءՇ˯{LDLwWLz/f2Oe?ÇotMɛysX?ϣ"x]a\޷cu_!ʂ4y !% Wt vS0#l&oC NfGQFW䴩,ӍtlՌxu쿒-MdfҔl݂^~ݑ_}{2/>K凉N%^ͻN #6w2_z+skA'H@ҡ 7gfOnD'dGxgw/Ź!jTMyn9ף0x, &ssjl/NK? IDAT!|F\0M '\rRc:@rlJ[T:3hRLg8H\ɩ[^EǹWxI8o^;RVJu1qĆb@ yt:B"MBfMƥ̝,ۚ~Q4]þ|3sNLƈBdL9Gr&MԷdձH3)ˏ~ t idE'^8*FRZņ3_56!k8kLdǁ0gqdA@ V)E9B?$J!2.(j[xLmMml[giy;*ƈq b._1;2xr@ruD7Eoeh[S=w]6sշg܂')|Uw)H) N*5GiՓԻdo~|y{d- Пn]{r9|sb|}<^NvlKS,8ƪw3w/ع^۔¦W'3W7:1s~਱4wWjh*[j3si}n0c+5;vc{nțj&}L3n{yec2R ~A JAP)qe٬- 1{7)-bt֏n;~mפ}w_Kg$|,i> \16$54o~EӋVj6mu7Οy76 >g֐qɧ]M]Z6~+O.W&3g|tX *.DT'fx<63ϥw|to\Ǧo'~8X?6nZ ]x$r۬_?X?7%R ?`3$tnIN|ɬG%~R6n/ê~%ld}7zA'aS7ICͤ>V^ɭB@>o'Wh*њ*ѣGS ϐi ۉ*:PBr~,hwߟm.ZE nHW1?z5 AQ=`<ÛHsgd4b 9CHz):k)@({U:rγݝTNłb9pwrvTTz^BH mmG $Nn|<摝~̾;ߙS"N:SAR@c(#gC|~$[qH z46-3xu[LZÉs=X{>iI$49RH>,dێ]|wݳE4qgP,hg&}7H'3]Meq}}_-M`S=2É 1)ˁӲY&w[}mwEsy9+aa$)c~2)*܉єͩ}fR2j|;q:,^ɑ@s3u+;/9&o&\"⪶VE'ߺ\dfr#[r(؁EG F3ӛt~}Q˃&|21 X{Lax1ɩIXE0!Q^^zwHPR$,PО662vZduH~t.X{Mr"όyF<_2sl`BLb{b ' >,l-&,"Ǹx~~v4Ϫ͋0͚=͚=) ?:D䨦@9k+hFO{s6˲3wA_gz{n=wB@`5CT hj4wOuW1[ejs>[DD$6dj +rAźڻv'J{TDD$"{/ɦq:F"H$pp!+hآ@)""""(P- """"bآä %1+"iq@&YY8+]1IEDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDD00 #% ap ʮ]%ppcQVVk׭U˖$$$FבRI aCM_3 w9"""$;;prLR ܜrsr]mC)""""R"]!+%DPJp?0oŰ~硇2DPJD ̘pq@ưp!""qC)""""(P- """"bPeYQQQAOlt:%>>7ԺLdu .EjJ -[8H}".9z)PAYY~ÆLӤ^1RZv!3D}x< Zg[mZrH}".9ziwTTTx***m]EŴo׮$}vvH}".9z)PA(:"{8ZԺ {x԰UQQ+ؼu `,,ڵkKLLLXlٺ 41wHar9hل#w04^ rz$kޝF`b RRߴu]| C:u[KCv#MdΝ|3y ];wEG 6R>mnHyfG.i|40M%K`fKHL›ߜ8̌ 6l?^w-6l #='GOHȤJχwJ4XɆ X]+Wd|LӤ?@|| *1M6r#V4Nl$>Ss'CK -f8``(;|>N.4 A@N"^{ ztNyy9aPQQ^^QQAiYàS|t؉x$&&ҤI9c)wѣgO|9 -'=# aйsgLiCbjt%9(P6˖-gݺux<̙ˊ+RGΝu66kFfF&Iv"**ǃ"--5x]4m҄KQ{KyyTx+Hg괩 ^תkҴiS9={Kvv6^8֭_u-\DzYr+WK.iC `B|8N4422ҏh-.!1uڷgdp8`(~?!G4q:2d\-Y0ضuñϥw,ƴBpNJ ʷn݊"**S0t02330p ~\ 6m*IIl/ul'11UI^<^/WYK2y^LJZZ:8]._py}DkJLL[,ZxBߦirک]۷xwB}.أgFFBbV^^qvCnn':ʃaT9v LaTt0-?P54b=hI0C) ҥCU>_%Jvuv)LA2BM13n.̘1zEᎯ)+/ǴԩcGwvDki˦͛W0 _e%o6rvy;մJ ω'';;2339qp&OT} NB P.'[ltV[[6o! ԔKDD/PFe˖aU&\Nݧne˗jժC ?q,8#^G=&55ԴTRIJJnONN"##̪).6s, ?GTɓ&1y$ Cruk PݫF{&yy-.i(#м (*.blٲ"*˫?}J?@49kvXt\2bF<y4pIIDGE>vm;":gС|3iRH`YշhYÆ%..KRlkڴ#N]p:|=K|>Iہ ⤓F~M`+V=q:k{Mv}$o_u~)Sb.XP}&Á0`Сˊ5ڷ@vv6 g5DyDZjMILL99|e;=Jw ²p"""uTVVN|rrr]QI$' N:6æZfI'yDDD0 b!Yg i $%9:XJ )3D [(EDDDJERDDDDlQ[(EDDDJEl oڬY Cu[Zҋ"""`ϥ] f7Uq)R/)P6rIh DRDDDDlQ[(EDDDJERDDDDlQc .8/JpP}NDӉE`d 1vf0pE%xξF~7,Nn1yb o IDATV."z(E1,f~ cG_Uci([bED#J9 swHֱf_{)<ȧ%0ϳ˪vb[ݗsa 9r|cr^\m~$ya9!,J> x 9C?ct;uH =Gr=%4b-"G!_yC$N(+coyKUgoUp(?̼Y3:oʇxvQƧODoٸ**"G_E(ME,o C{WuB^ 5#Ld1LzG~6N bʛ~¼x*u?o#H3tPE[DA.]~;gM2Hڏ7>ĕ?O,zݟq3TV%&>߿XO3<23t!9z(PH4;]ט5w{WЅKKny}15v7%3ά"Cs''~-@ED~tBl*b˼ntoͦC)"rMSx;X݇iI9n7>:k)" 4Aڐ򐿄FAnDDDDJERDDDDlQ[(EDDDJERDDDDlQ[(EDDDJERDDDDlѵ$??[ap"""9 w)$0ϧ[IIHHw9"""^II)k׭%&0.0ؼemZT' jْ[cefHaRDD%&&bf8&)P- """"bآ@)""""AdGKXP'T1NLpWDҢ@DDD<wH$i1Ŵ>^PB+.`O)[T,\t%%!6J}Q u QN!Q]v8κ,""r@b%Q^ihz}KgxaQFIQNi~xZn5\ 7!C0`K,a˖-B}9H s av+""ԥ|>o3f[+)M&7=RP_,S\ Tiq1NIQQo2v_9sн{wڵkGNظqcWZvMsx~Uz07]9(SFTZ3ZjI cE11gtۦ=͕ k~ Ŗm'/#G,e^?e~*~.%C(S#7YF~p-6iw#TZ\^æj߇lGǓO>SO= 忌a¦D$MhkVf:>VD'?'>MOUC|>;&ЇcX2[&n;-?y ?IjF6޽_LәQWMf1SpRCJX3Lқz~-0qD&L… n">| O̭$Gx– h߮+缴ޱ];-07E;Ѧ Xkߛk&)օ:+*ۆҶ}|j ޺W,"ItR7nsC왰(s[_C1iqڵ< 3ʏ`RӜTCU^?*1,-2XV"5.[lR@%EEtЁ.] /0o<^}UfϞ]݌~o}n;rOW H7\0%f#)'0*B̜Ӎ'$X#e(ws&Y*^{5L~w;WSWCD"Fkݚ=f\ڶ f&{4eY蘒ʼ~*|~Y}s(m ؋kp7j 0l^o &HNNfL:Yfqw0p@HKKg/`ٲe[yh5=E&1 ĹOEhw.fl>C:b` e7)5㮦kt_i,DDtܫqa`E_=C͚e`e^6b,۸sSSkæssmILyzn&OSO=W\3bcu_Ǹr3n㇟|n;kMLY+,mƊ>(PFn{ErT& (++/>g>^;r~9rڻv2Glہ"A bͼX%;ݣShƠA81CywXc%?y]98h6ڵl߳ mb:ks434# _ ?E^pCPstqf#_+'Tf&;uIx^/[n/op#!Nz-] I=r z.F$kw4MK? \h)~\ ? Ij:.$?@>k? 6gS|h_Ua߯a5{!5{Ç >)zޏ.,eYuzܮ]X~=ݺuDDDI3E}}^J\Q$;w_D`?гkwpg.1c;&`;Z =7־#mu]$κ^dlI$8Ί?W]#sv?z9 A m\yvǀ+KWWYIIi9cd,Y9v?pRSV璡y\24JJ?e^?>bxe wbSJyk7?;Lܦ ޛYA&&өU;ʽl/*dv}֏Mڞx*'\WL'>͸ìrp~p|g-Ag;.{]>z2:nPU/<3/Oc+"cP4TOIy ^L+="eqq1.  Hvv66lm ӧO˫6㙤fdSWO;J+tz>}R3Y.[lRP%EE}&7_MN^.:{wߑT⧤b'[Un 4#%! ÜU2WYy!Z^ >O< O1}]_+y.tϯ Ah#}O3b(=vsSYVbKоkTzt6M|Ns<oWiO>Ep[N&֨\%<A.||O.#T.ܑvbN/+'Iݸ8@ _1\;)#]yS0 qpڈؾ-zW_}5G|YY@?T;aSYZr+me^?*,ZS&Jx֫0 ? ))/mOXV[iHuLHrB2}:uc B>c+)(_ɃSvjs.yn:rzq鍧*=y]9F9i:hM :TOk7׺5{om6юZzx6mbcXx1W]uIIp .,"G΄AH>? 5vl+bfDce6_^mO`;L8қ4pfN0WL[N,\^⢢K`ˎm$rEdS]k!CZ9O38)STꥸ[fřs|RCn^$@- Ls<ɉ&={ @rr2_{YYYEɤ{9 ޑ6M=l5 أ.G"|yב7lQfAm{YMq hbxT04|6 ~*X7_xSLubL;O?C$BUqmu#i |9m8wMf/>^e|ŗRSSiެFh}7۟z],B:su_GVV 4$9}pn0V,A=.!%0 eYXIK znxeC$ĺ 0NaL+5y;/  Nk϶/dG Wiln|CJNh{yS&-b{=9;=FI3mmiktM+eo8ߝe|x#鱗c PʨbDr_T~mlقE\q(4MK? \h)~\ ? IjBjwvq5nOGyWygvwymwq>4?\7,~}ܬsܬs>l/IA/U~ta)ʨճ'Zޤ 995oJVfmZGRr2n:!""5Og 2p?i1Wc&H<"]t7~DžN:~}|^N˲3wA_gz{n=wB@`5CT hj4wOuW1[ejs>Wc@t6UP YLGFOԋ.«0 LdWQ[A(EDmޝlv*o~6L7{f0q6VTe2 瞡ɣeW"/(х6a#͘~Anݘ;}:NMF&ܙdq:pvƧknk_ߎ:y.ɶ& f]48GN5?#;0MVq8ҹs'\K./dlٲ,zň#ҥK)"""&?@p:zL(bÏճV)**bL6b:vȕW^ τ 6mC #wcWqisHߢ2`2vЧC.) aPeQTT0 t:iӺ&OEEE;7M6m7n͛7k׮= ͛رc;vByb;qiWZ5Z,-^Dާmj@ALӬStjg̜9saXEyyyu[~~>ǏoԹ: .3nxpODDS")-CDm, q|p+%> 1 IDATF j>(PC/^ܹskYr%K.o>O?4]tm۶L8ŋӧO_.hOf|N8mu)<軙޺fm\Iw@˺f9~ϖrXmtM/c&iT9*+{o_H˖ xp<n\枿P o|>^(PC|>FK.᫯b1VVVv9q|H߀6hxӖœԭqY(ged"L49v_biW{Y67_u+ϵ~ۺ$O3ԁ?<K ?IjF6޽ 4tzvp8d&53NŸkN9•J}i!q,^ӢE Yv-7ndݺulܸ͛s 'h"O>C rq':setRzu:יy=u>-Ȅ4i:E"yl{s[}2ߝMG9M-Lo~Mrx=W^:Qy-MZ:n=.ZmA0Фfn4si``Qj}YE P | c0`[4鹔Ec駟΄  y9S߿?TVV .,,dРAzꩼ{\tE|'9+vc@?7f@)s2dp32|+sޭ?c,vLw9͈2p>geUDs%^v vLeБxD$LoQ15KD 3 _Т믞!^fM2@02/ v1Vmܩ0ȩһwo:uDnر#n[onχO>t҅={ҡCC9zR~Zx1ay<3tܗ$dE|Ʌ_xI@iĒRc}T* (e:Gh爉%祲 bSx1n܌tr8{\ _po]t1dɒ%Y^zQ\\ԩS9묳h߾/:u*nh/_N `]w\tyUowdB2ɰ&4  4l .h\B%æryԇ%1׫ nB"a YI&™sj_se2m2|THߨv-UTQm>\>pnҾgT]7x[UmJկkanI4zz~PI_T{w;_VϚ+^U@, Rp-~MߦL0`fϞ뮻NӕW^9s8]y啚7o:͞=;' ]{iҘ4q.JI'PCUt/M]TOѤn_eeIZzi\jȒT^Guu{NAqA:t?%VοQ>:Nhyqcz NGRNV3uCO.dJR}u>M8Rd e?2n8瞺ꪫ6켱w߭sjʔ)7n\΋#5qu h Ӈ\{MNk+n}U5d}?_j V;O.Q۶KN8+?wsf+ڣUmt7/ТGƿW9P.ˏݧ{*:NX֛ 5'WUmR,;\LGo:!G(G+۟zߗ]ԩN-5'a,Z2G6҂טl;Te-xym󷶻t+]wݥW^yE3gԑG)I` >\'Oִio@bG8N}{]~}W5i[wiOPC9뮻'47osK몚uui]w>]]]:3ukΜ9z衇t%j#FД)Stkv\; V]Ctf@# >Gk?~|C]\ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TH@ TMP(}Ime-[ه@t2fhkG#F|^ۏ!C4phy˖-/S#GlK&f(-ze=c>Z^#GjԈ>~@$یmFjaJB@*JB@>7>u0xpVX+VjfFUu0j(-zy5JnXR^^Qa.u0|0I /.ʕT*hB;4j( lI:>l؆` З( ( (O@@G@_bJut jaC֢E/imp胂_fJK!P&й|EZGT(1H#C6pZ 2 @JJB@*1PVi|We/4Al鋁O~QsY>@gKއilhAJE^[V}8-cv|JzPRꭥoAG7iX0mT8klj28b;y ^ӫ c4pR^[_Kw*t&쵧t}CwwyY-|q=: 4Չm/ ^[ǎ$L`&%M;ROvط^d ۵{߫U.-W^:}Ѫd 7)Z*CL=YraZĵė,Hn3M^eINv.rd>?(Ӟฯ_$ȅF\<Z$@|@YIDi/BTHYj}hfĥ]YETƨ5MtAI>QR^ժnftl͟@4vM=09 H*a;Z}O @?ճv~fF,^Xq[t҉'ypnŋ}5)/N4}O4|"MղerJ3eғǵ֮7=C7ig>&az~pk[t֯޺OWGu?uYV:s#SO~?7L[noZtZ񧴺RN9ce}4y ?Y擬S(7qT(Y[sJmm:o?9QݸL8j]{~];>A> V>_s[:5.${7tt5W]8KoŢN=yʕn戽ѓלcF}vnozsc;Շ'òjG0 I>X-~aHgOӀuųTj oGyLahwi t͹fmb{ǯޯ-neN:M{.:3/~A72;t_ߦt>rɏtwփ7Q۠5vdUQ.߮>]G#w>p?[eIRw6}4y?HzZ^I=&i^G%i1"}ɚ0}iKk?YILQy\CZpIu5kVO͸;aRV= w`kjƟ4uGiyDuPh]v$=a/oe`sZ}zdd}jjdaF?\_޹/ Э~6tvNu}}Ԃ^[UFdc;_#ݮ_\|vlj/I?zM{nӷ>z=WN{vEіZ[@E}qv[t5WhzYZu~[R)ƞ*z{rih8J;ki@Y֢\ZkzZvJR} bTlhtmͼCǾڹk4@NK o_>cwW_u 'h҈* ޽j*}8`}G}R;cWw YK7Z&T;PfGP1Zf[l^$iպ9Kg^͘aR²7ܑE*Kh:5d :43ß.l\;v|^mPOj̘쩨!CTX]\5c>WG9[lfװRr*ח׈-*seJ/tM~?z{eǩR/j|c\^*Yeu}K#r=D?xI]ptumN* u޳^[zciC,s4t褙כלPזv"=q˅-!_7 Z=N֙;.Z:bzJŒ.P}W_>a БSWq)~DftO+֨{[zeR ng^*ĝs :Mv! Z=ZF7+4Si?֯XI5K/_CX&(I3o?Qv6RL+|)W봯_TS$6_.t^:jt]YW{l)kwYw-KP(Yң>}K;w/^^]sݥ2tַ-0DgTW}~+=i:d^7s zxITtaGϞGǍ#jijKW ]q(kGh4ҲJUs];V06󿜢h<K%m6lK.>}wz^1ifFKOkC<ɉmbp51?8w]?~|_~+3?LI=]b`l32mv,&8HR~˻g:MZw}Я uTufJrZH͚b7m?)=$ZnW;د{qo諂RaV'Je-Nf5լ4a2~V'[;b̂V*e{^~k)݄= V̑$g2LKX. +)nW1+/(ÒvZKT}&@ j+jZjڲEnkkSwwwoV[[;+oyWet8ayiQ2NNo}Sc;K+^[ ^_ԡg}PYn=ԑI6emǙN*upcܿ8J%4 >=>2M; kӞ#Dr-o"T&ޮV[&}UdũX7LeV¥TlOu?hRNӿOuvjB]P"e"RIn:XC٩B+̉Ndy4y5s*2<[]5BiE߶k}2`h  YKe@BAli~v&RdI@w|wT 8*nfn~Yä;k'N+-(>t~|>np$dSVV@ eZ+p{P3eeOFc^*frN1Tsk\/B. p\,_Q+n2wQLR ;iҮ1jCnRl.uԒaǙyI(kl6=I ϜUVd<*æ}qsZ~Qʕ/RWV*I0k(}$QE_Ho7k(@̙P:[?7׸_y3@aᲠט_^pCsw,靛W$/%gUͲF*dۧ2n.j`mUS4 ƿ]4ڂ $m>76c{j3emUu ȓYuKڶ+ֶTmozGטbU`fyL3. Q326rۮ4]a޿mUJs[ Ѻ<ڷ2OnP5+A<4;,V6_wGB$+ p*vx3IEv8;jpD+_y3P "]a2x,k] _C4?`F1Uc@钶$VJ_ [hWhV,PiFhT_uv}y]_U:ϮdU@tX2fBȞZ/ /?9_1Mym6y嫰maU;yv73Tc\a5mҾUp3ρyX_S5*PU+_gW%]e]{Lo>y2*z\_jy}G^A84+E3nRxy@Id)I,,\FJ_J3b5`z9\n5*ijm: tow ]\WV23Ǟ.fkd)jȓ+}mUvWEWä_Wt] +eަ%9`=z \gV c *U`Lܯ}99n_U29+HU|nV(e!/hwU}Ƞ [?DU ׾4q`\\ɰi{g^\T,Xo sIDATdXmv4T}a׼'`IhoD -W^ *١ v0ȱY .Q-R˔w.]4 E7A+Zm-ii+,ۮ0=ko޶EM%eXر P+i wG>ٞ vQڸiL书eSJ|A4+fT#m3~+]lo(y$Prv\8_UoWo!TڪhHW?Xn^m& veR"ޡѮD f4Rؿ/1?yL"fTL(ȋ82X [PiٕFwtU'eξ İhh}(}k$}c}O7/ CMW5ڕO%]k&㋚Ls! Q&N%N6߮JdtoJ\&V:N׹EL5k]7nOo:ZrmZɒ܇Ҿ)yANz,2+aA@ibBPxc6lݓҬ0JC] kʧ/<>KKzn2 kLߵm_]4+uA3JO{-Wr|U8A2iBd)Y_}J_u w񮊤>]W ?4ǨuQȳ`3Ǹ &`غHהoM\ Id6r/X|}v%2賯6Pi ^kIs:^k3uaqB4CS/X/ș OT&}a1ϥaI)_Ȩi_Iڻ*wl]m^S/`z(Pk<|8?;hCƛUIaO< A2UHR5Z/ a6{*Z!]S־}]Pc_mI fH/l*}a/ue+HFǰ}mQho$J_wU\KS&m|X57T(WP:B7{@ Q07ASq7U?-N_͚[ޮ nBe 9{=dj3Cd؇$ }'64 h$&*<Ƹ*y_TK ӌj>b8%YT#]Q+2)m|o\Jfحj?K9E&nu.x"VU}6{>gE oeUjm f&m?sIRM$OS"Yewk3Ǿ ܮNj76-ǘ~C!vج¥Ytc]-W(eȨPYp`;)kx¥msT}ܮqQ,% :acT|A,/,D1."ԐY)8 hm-N{ضp31<,`y?b~¶mQa3umvRڸJ)m\a]H>4fnLh ׇɪJ @e~BV<,șq*IecH&Bwe<҄zT*$}q*Qc$gI+fqTX T};֨oKcS _ICkIΣ⼯]~GI@+HfB/}a-n1I_& 1qa *]Iҟ&&9Fذ ,պ,Io| ?Mz8VK`NS[e-cjz'X>8a۾ւhBK{$!.j>q^՘XpQN-`o?1K1Iq\@2%5I*|iC`$ɖQU=pJgc1I/jlj$ ҄,*v՘:>V'|J׸8߮[8Y'Ad)*=NPsřw=z8{8ML3.itK$FW$ J_=N36>d=.zFW*}5zaMzd2I2iثw56@eqN)gQLz3k}`V,^7H&9\W&(]ck mq̪V+ㆳ4!2Sa2ؖ I&MZZj&D6:$F6jK:6V Iqգ354Z$e3l;C}g96FzLƧ tqϓ^$47Swk$IQanA2@e}6 j 9L'z+X#GC-0جim"?W}|R0N"\'sMEY$d"kHԨ724”a-ΗJH Z&_ RL#BeΤd?Je1 餁^Fz5Bh-q!lv9Yzއ3Y3ԜpVK1#NZeUM R>P3o&(Wm@}Yw՟EkԴxzYz2TxW3P`d_y yNpiTZ,d #/2~U9?hV%^O@J=/J/YރZ3.֩V5Z۹FOX]+V qhy ["HZ-e}$@ ,UTU z <(wZHjkYaC/<~<}U[)p'ã s7х0su`BXJs@#0@j,7CHDLIENDB`qstardict/docs/en_GB/images/settings-dictionaries-dict-kiwix.png000066400000000000000000001444371453553600400253400ustar00rootroot00000000000000PNG  IHDRG pHYs+ IDATx^w|un ޫ4 b;ֳީ " bCgy;<4 AG ofd7!~5<3;lB!B!B!B!B!B!B!B!B!B!B!B = o!hDNBq3 'H!p ͒!BDpњ?B!āi2)>xBCUSl}ءsnW!;PMށݨ;z u;B!h:kik/BWC7 ; _!BlFHEFk?BqhWSӠF&Z1Z Uc^0M!chj Qcߟh^ r}tPDrl+B{4^lHo#DSmj"_lH I#B̢HpC~#ٶA4f%ɶPjWƺ!"s;ֆZHɶQTHG$ZOT'm)45*> B!_+|\껏ng@;8WޟBq(vhN98΅>g8K}n>(NF+H8ۄS+BQk99^_ޟBDrڟ]\s;v5zL},p ) Qǂ5΃ >:!PjSjׇ;},jR½HÝ[pvjbVN껝Bј.o5έ\`>l|z;)z}s+kN 1}8ŅB̩Yc5YpZj]5tézʩilÝn=o!է w>ܹ@:u̓ >ڰ4tCsjjilT4w+DBQ_41u;ilT4r « KC6;:[犊;mk]޴xB!scǃkg)v@ݸݶN@B ., ٸ5yJj15kh!P85mz@VgWN]lHBw(5PΩY p3*>] 8'Bl5;N9] 7^g]zSLvs'ԅRhHBg}69}nVv1ŮNCQmB>͎Scׁ}gs>VBN]hHBg(5Pή!knN.Vъ#B!h4)N$n7sZ+~-nmePB YC4>55E5>Tn^ɶB!DCѷuj:ků-*feۉVMȢxpkB[vkշzV}YczS)sB!DSq9uok5Zѷ 6vABo&ͺ9ŴVkݾݼ!"P> `l՛8};?U aS1uHժ6P޾׊>?(zClINcBk$%оSIPmB'iƩWpNۇrERըvۭ\i>dn(/PNkbܺeMb9o[s*v[/B63z>1fN|Sy SPֵX j#næ޼cz3mU\٭uǂuB!ā`hk=r+ּ5Tz PI:UkSqU\_[JmtNq!`kaCk9+*n.\ i4-u]LQr~mM݃Ŭ5LָZ5f|||ܴ߮nWf-Bx7O,(++d3Qlͭ[k[q}baۏ]L?}ӛpIe^xӴ9;tLp4pb q}ˬZbZlqyvWܔ3O7)+-%y&N> sX'[b vӺu+u{11U6Kjje]7nkz e˗/:wM7֭[u菵 ?3lP222꫉jU 8@OEE1ۦOϕ+WqϬYuZ TOƪ'QVo3[{=VkkLX\c5`[;&`m,aKyy9nӄ$WsGߍ0-/9qӐ+g޽L<#a΃s ;;'|7rwkq&x|.iil߱2~ۺ7z+/sΦ~?+Vt 3#C߬,`С eAa!wq'1cP\R5kh"{74.cYشideeZ֮]Kll,=zSaYrSM`i#++ۦOYj5mφHD5 8X+N z uBmzzmWW1m.n˅; ̣\:e;o}Z'1< \\,o]:w뮫eeeqwqaU 8{Я_+xݺV5j[p3ٹs^x[Gf<> lBeA2q|'].ʫ/3bHnr}$&&2h@6./-b|'|G<@y͛7ЌI'nz/^U?/#wAA>581bDM_?1b1\}U}gzҋ/Qr FgE]~rsh׮k֬au$&&rs)〪O<$K.%66s:>g̠c|gYgYsU{J=ա348p@"ڿaĒӿ٭jPPZYjV*Kj*M\4MK9n 0<{*WX7|. NJo`1yhh|?Z駟 ++Vdu,<0.;1zhbccԹ&Nyx套jOOOgח24/\Ǐ`ɒxGQG݋j7iL~A!z >lwu'_}5<%%%%$$0`@\.IId;ɛ&x l(23_Pu?.YJvm8SEeuɜٳyaL6뮟+j|)Ə'9)xN=^e6l({`Р$'%cvrM@Jr2\|5ۙIm{nRShӦMM^pY7}XNqYzjlAT]b7:AYN&жzNiQ'46Ԧi,.Wg(M? ̪رpa |)G&ݗK߶}k~8~8;wbcsq<4Am'~m۴i/ ۽{7iiz}jJ$Y3.".|/yLn OnN.sz[j޼3cbxrrsij>#=ؘɣ=暉ү__&^}5[4"\Q~˸ڵkzw93*WAgq7J59쾘cS -gvW SݕL) z֥h}m7V͢asI0p\5&4 ^LpLFzu! 䫯^}eu 4HOѺU+.R֬YWVV2mu̝}Aڋ|՞={X|Gq"--{a \.?~ ޮmtޞ?oU!uk1M皌trrrk%%%ޚyJr2W\q9o*ii{59!K5wSMcimj;gΙ5*hW?֘cۍ֊>&u?KPFdwkŚ6*ᅱW(MLӨa1Hi-rwNR9ox;w.۷o 6pwpQGѷoo/fTTT={rHMIe_n.(+/>YY]Xjvˁۗ%K610ln?KAAASSS/@em6V<*++Yz ֭OV['x/r; _xjїٳ6 +xo0,c0 u'qfx.C)..f k׮LFFN4rN? 6BD믽ۦO.~gY,9ښh9uNq%X ]#SMx7*-c |R%&&r߽Xz5sz^o/l۾ χ^cL 8 cjQzS\n'STz⨞R2 4)--JJ&5W#ve~ ګzX4{sxgٳ'uŒU'B48ŭ0Z{X1,1kb&P*j;'NyxYuX}h;}Q=SozdffRXXHii))e`7jT-5cL Ot[B!CbȐqT걵'Tǭ&j&]n]k̆ҎSm[c]:~?~k&R\\+C|2> 0 iv1MwL $S[B!i~zRou֘S]o PIY>o]'.ͺ4{t#B!ꨯ}"k5Wc+=4vn'X]6T z[O[HIB!T~iqW17n(zփESsXB!]a=ZQ-:5@EP6V?vkL!"Rv=]LW b;(vqNak*;D=f5V\=!B0-_{n,܉DMC)'qڿXDum!!Bz15\T}Ƭ^[|Sqou&1Js:ֵb[O[/+z-/73jKB!D-Ts7zoƪNL=noy+aG?Pu>@̅B!"ֹ~ˮ:ר IDATkN|5dC)X?z^*B P5Z5Vv&@4փ4 ׷;1v9_B!I/ړ(*ӸQ4tCocw2zvq}kB!?n/NֵCah2NP?c} !BK-bWsZo4P4ilk=f@OB!Q=ޏ8!zLQjq(X :8P[E~[!"`}]ⴶaMc;8 5w^ zXP]Jhl]TLM#E,[BQ/XzuvW >wB YX U#j8'nvB!DCIj$2N?v1u"!Bh9uYZUtbw>w:Qz%B #P_bSae;`d vut}4}!Bԇ]#vc+=!>EEC4~'3P<T!Hzo7nl(C=@NuW1}@w:B!'Jn.Ժ5dCp` sNk]2󯏳\›Ӧš9قWO5 pߟdia'?Sw|~S "D7[p߁9i_xiRτƳ'&ˮ zD &C A::X=D9=U,}>~=)lFzK8L%07G_73|@KL.Asyw8f.T=!\ɐ'p_F5꩒vyТ%]ִdUǡEsI4L 9;-%m~x*;?(?q+-_@=/8!sk[rwsn5I7ss?r̞|h S~p~Cjhw \uxy.`luCI\6}VF+N}BY|~-iy~ſPnAS.i62^ OB+?o$3S{۾~`k#.NIc;36NgtJgdPNzo<76&xw.9OwG ϸ{>yUӾ'y\qj.t6'5*~ysx5쭌yڭxVG0.:mo[ 0[ dͷ20k<~K6ʧğAsr_$S$fuY/,`>Z-x`. Ӭ.Gp[,+ï;OSsѝQ3VR`K8B<9n?7?|9K01#7yU=?I.lRcL]ՓWpv I \~[_<7H|/pwOE]щG]bOx6?}=e} /'/?좲YKɷ ^o7W&Q~ӶgƤG1mEqX̹}֛e_q0x9Pu;^_|›|qĴ #ڸYs8_1cힳH/k;_o*qy,|:elj>,\N8璳8eȡ,gFK`CR߮uu_Jyeޜɜ&/*@4f t`tS.>!Ǐ]Gַ=ˊWqľywŇy$84.?-ХY)e cpK2|9tol?yeU+}NaR<68/n>)M{N>y~ۆYp\f*la.:9 ve׾1*Yɷ܌uo1ѷj͌m^ɆwQtǷѭp:@ >֎x ~̨7VFN-߯⌑_xy >5>:־(NSܴy7a-I<a &My71,ceNF91+fű󯡷$\p%5+_c_U+O]CB,1~x|.ti{>bP7yL!~9w6mӮ!~~=El:zG+oΝ{svJ}#nɼvn|~qZ;,//i|_bӷGm؅G[[V:=~`C -;txo< /g'x74G|,x3lzg.lƔY#ϞGvׅ+֤VndOioU^t7سa#=N䰨4/Kʦ ӹO{椖H;/݉I12dٻy~dU^[|k0%#7_ROK3IN.goty_ylnmgsxOhw86Ŀ[1䫕 _N948)Z:gqS8Jvalb`k1@9;F%vwGw'翏2I\u$&=\v,qYkͰ?G_@{h$`$1-XʭU_iӋ~qaߡ/ 13вx_-^ǮRVih/gdbĶeԨ^\ofA8s"&&=')]{}W0;~0ՐǶm^V;6VNiK GHKOxE|_s"6 ['"y'{OsLs.SO};+_L7=v̰)1Hw B Or\L J((򃿔f7?\?Rmf}Z:+~:5f> AthՐ(=ɧYzq@%ݗC^R+Z%TSNWPn^Ɇ⪳e&l /ޜ5|bK^WOf?3--)_- 8is}ye](lN2D_E AւXs$~5LlTqz]mYB~^c&"`ϲIΠL*?~@)z^P=WJӥ߱g4K&=Ώhi$Bn/7\R蟢^qW|JidPHN&R`M/Yl%%}9[,mJ Oۿt:qY jf iIB޼RSa:;\ی[۪?} rya\(c(Y͗9u͌iQ|ϜY,z! pU6WsIw)X07,7y1HI($7KIf$GqӸ/5qFB?F|׿-uܥp`zIyy" eֵsڦ9D*rQKSLгzG^?"r l-f#i3{ Z/?}~He.?:!gB>ځgbK޸|@ۿ oTw)}1ރ{SB#Y=}; ~+7YVZuel_A=]8V /a Y={ַ{ ݇3 b{0p΢}T~_-3L222Yƪ/ﯪs>A^_|%Թm|R?]9jp~|+ط}'89Eͅxe!;~IQ/o'^# ?#j}N7xQ]%M7u@~1`S;#b4?knKW' + &0=uZ5'\s5guOSJ3˔ˆaL٘[A\A7 zrxIH#(]`=>?%.;0\t?s2[~,NlES/gbT\FO1ddfgmi^\C侓[ $s洗^aw5kawUi^"_l-ˆ%yoNxL0GG \qIܗk_'͞Ap4 t7/LnAqqH {/{ >e|Mw7jN{UfOyod0mλzƵ\pu䖛$w:s?ëf={%9c/OٷtG%:/,Y3G\JZƤW,36G[y3K{Fu?=[H$>=Î<ˬzU9roIt;릎Kwx,)BK[!r43?c# ZƑs]1o*Uy7\|Nq]uVj@wخ)f=55nPZ2WkWu\:WXu=fM4)۰a [9=ﺕkYr8bQlr`êVƍ:Sp)1/r< /"^z顃¼y~qT} z,^-*=T5ָc~m:sJZvW'։FdF~S;6|S{pG1"r5iQy$J"=njh$'ؚWp~^}B@}FuNM7PFK8'(:` RmBn\8p E;BB)SM-hlhK!"\Ek ͓ۏB!D 9 5PZE@6"BV4hL %D$ !B4E]s5AqW!"Duos6!_? LIaaM%Ȳ!!+VFe iݚT=M ֫(bC ;]B.,,b萣HZ !EEEl۶ MރDia=IB!D$%%Ҿ}{~߹SO/ B!DJ#=aR!BDDJ!Bi(B!DDB!R!BDDJ!BCpc)!B4"0HLL]viP6}snvLbbB!D#+**fmT6y˻l۾K3)B4IIo׎w)P6bi&B&&11Q>@B(f IDAT!R!BDDJ!Bi(B!DDB!Rq󟩌j>\`7[p_O5}B !];K=xdȉ/`iG -Z*ȯgMKƍl mFpŔ,zi8з/ !KBn_,_?>/8k_姊 WT;joV*ׁc@B /iB&͌Màә:v"? 0-o%<}Eq4G8s,aҼNw:>r1S*~'s 1j,g^5NzVY{/pqc9rzǮEst{F9I|OO{',{&u4c^Z}{pܸTo_Mnt5cN [B-o!AH Cc5T1v /O罦Gڷũtj=V39>uerV=y#o8G?O<.bйuBg0O 8 3^\),_yuQ,Gn05z8wmcG{豝3k n صweDHvÉHkF|&8pCL15W]Lc~]X7=B&I^ 9{iFޱ!/r)Hk Kق+ِS\HfFͩ˅xl/60Rv2ڿܮiJݻe9{,U|!>Ϭw^[3'a_; mIT!<9!hZ9_R#fy2I-ȞR?43ع=4nv%ybui`bٓ\6.| 葄9gN{C +L2Gr= Ĵ S9܉lAz>N{BCB4i~^2`E8:N:1V3܏b %=_7>tS2X_!?-x9ڵ6Gٸ"~]>0i׫+F^!B4~| ~D}~}6am^=l DžcQOyar ڍ=ȥ'F 3yb놱d]9O?=OdW^cd'km] \¤/瓜܌VGqCe^'U$DŽ[fsX2~}fM+Ό2SZBx29T:E]%5mಬMmb,swbp}Ϭ'MԆ,_Cu|BB!De 9H=U4p5o޼g6}Uz/PͭcY[^_SUcâXzN 5V-B!"" B!4B!""P !BHC)B!"" B!4B!""P !BHC)B!"" B!4B!""P !BHC)B!"" B![ʦ RAW!}IQ~l(ҥH-h4{,P-jQFb!FĖ{AQ*(Ѯw;~v癹ݹ>̌|EѦ9Uo\fA !_}Yt]/)7~k߽Kˢ9Ʒh]/yvܽآGrDb'Oo̩O幅ڟ&2Mp|HҽZSe./x_]]ZWsm Wwٙ .u)r_pۿ7ba`r;Kch۾JNN[HRw0 -Ect0蛽 }hJfYG21NhoTIq 9$i1篗o蜫/N/i([3ٝ}8e|zp58}9?s?w5Vls7 u(f {$.qPet w|NsF-Lzu1bzve.~k0!9Px uqSc:$0DEᬗxt{53{Ljp.dqtu SX_yni>V$\ =?&<Ǭ cq#^4o`Iyb>c"}|P"m^U’_e ƘW0cm?qXXu3_Kf2GL|# ^~ƵѩW\kbұd1Y Œ׌fOIK,;n/((n܍c>w+~)N;~}8?>ʍ!ks[c*g2lKjzRJ, #L9tXf–ll͔jdd1+?~ ۷sS<'A'F;} :+rd_oV뉧'X LM9N7,\ ȫKW= @ٌwب@e\?nB"a&V_ GwmƷi!LڴKǘ}Q,}3*,]MC~u{V5yifd7?;fg=FwfCoS5v]P: ǎ>&*"")9$'/Ke$1#}μNrcEZJlw ?+ʁI}EDDDJqDRDDDDQG(EDDDLJ ZYٹ?WD~9'[>$e3mQEDD~>:=/hi*C""""8@)""""(P# """"8@)""""(P4v|)󈈈# -_DDDD;ʃAMiz|L67ՄChx"{I[/,Liŕ_}pLY[l<iռB8|R}#d6[<}_U,/u @De׾Ry{"C2L-UL^dU R|GrC:?VfX:vs\Mm:?be0x¦0B4\քkvf?E5 qDd(~f"-< ՛Cie|^(b^i)gR~^-/X<=@qB7y~ okÃRXy%3]r\[^߶'x?$ۺFbi<&Tqwa S|D*>-gƠwt.Ipǥ2<\8$wr_)9<\}t-QI'b1ll4RYi"(PPRzIONbb䄣9Ű0~D6 q'̷‹CLt/桭qV1GdpQŤ-^&kr+\6:p>z!P~^#QGdsFI"Ɋ1kY%Y 0S$a*`IP9!1P/i+y5%JnŶk8kDGo*at1W*wiجX ~(SVKGyrTS"!VQOŘ^\M %e!^Z ̕a;'7 X*y|[}#لn>z&aQ[qMz?MA3 ~"l惮gFi*V;k '`ikaVKQm,D0'aE톃S&16Ÿ~%g%3H/sgP",ɳΝkL^Z mǥR:;gseK'{3L` GI_V2+}h e ,)~v"<>Lf_>3%ޜF9$K:ðU/C*ms=ӹ>=¤ϊ8b!) jx8uW=.LFI.-p/vƠkXi䧚TW(mvU!͵9E,iyen\utK+ALL rkOgq \_{6PZT+[Lk/\[e5!Mke$ʜ6XJmJ; cP17NX;'_nko2sy5?Eyom6>l!|<ر_o"KF(<5;$%^do2}m|u>N;fޚjbs|>-~}UzEIJ)Q+-'xvQ?6PxFnR]?Yuߝ Y.'K? `1a\Z'q?&c$mp[_XEbd2,3[#g|aM. (~j܇3iP UlQmFDvN[ Wj&9.@>@?h3 m)gZ8dy#2ޱwFWxK?v0}8,Ғ`Ó,b6x Nn N HI2n^+ccFxoy+d :E3Lr|&fpJF4Hb](7в̚Ul;˯'1,čuc4LQ{eaX2֠AfS^'(b[! E߳=̟xzvlx= ã@M0aЭK:Gyhz5+꽟?tth-Ge12y7Tsm$~8^ۦf8JY۱&czNžavE9nR$2(!b}x(? Dd([(3%'78`XQ\#g3cv?<_2Cۘ yi:ÌEaYs{!ɶ)$0A^IYpxo$[Xub160K7?l R6,A#!?>ۦ$ヹ%>i"c.5xWf^ s3uv.TH"ˀ-5?N)aS^sG(M3w'Y1՛|%.^\VʘeL:P]})nZUGY_HKb\bv6Bg%7DY%njCUGܭ:aFh6AVi@,Œ"wBQ5; Nvآ89ni\STILul,X]>S L 3;_lϮ5&.U1'~,+<ۇQdAn#5G [ʣY9+'-:4>^0)cԝtb0Sz~ݓ ]6 B$Of\F1In=m|>UNtx dvr"2`6?L-~2MgU(fm^d9.=Ƣ>`3k"`z=Kmpq|*T3kwĶ:; IDAT)dr$Ҷ?EQ cf 9H4^eJ:)?&l}L uUEaH%oe%+m6Gi;T/\^}㶛VglO5:+w}C1jnCa1ܜ3,2lzYV5hXSO븯UDD io޴Ž7E_sgExӢR96qDRDDDDQG(EDDDJqDRDDDDeIS!@DDDdS8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# """"8@)""""(P# eėȾ2!(4XR/~,Viizgv̢*.L O|ť[WU(P6yye_"""i .n뢗_DDD|i """"(P# """"8@)""""(P# """". lS]]M,ާ\.III`-u,bՔF)MVf&:w4w}Kw%""/f dfd4eYT~RSShzjbVm[ja,]UҵK|uZ[/9x5mjFUWW 4MRSRAK]Rztң{wJJKvڻW'A,/i{tW4/ᨖݣCZ{^""rADDDDJ """"8@)""""ArP),*oɷg0Md~AvVV,El&y)*0 tKeW`浊e(xFl|ndd$!""#J9h|g<‹ ׏?R PPn =Q#Gڤo_;|$_ .a`[ѥK(> RnSڤ]$eS$'[]3[:)P ,~O>>)OW_1GvYnr3>0ZbȑpMxu{؀AURFͣ OT="S$/+×AeiX`$[ 1nTzs4@yftΝKiYF/{-_iD1(Uӳ pܸ.,"F>|}z[ҾURR‹/ 04 zoE^Ȩ}ںCQ<(66uӠt*roՋ~$Rcx ƕ}jÖ2^t1:u!6Da&Kس/ax^f͚ҥK}&11.]Ү}{rHKK')9ǃ/ϗrMϽnՊ[9~SU]Eu h"|m;%BR#%/$[H4!G,*lӖ_>%+-pݣ2;3Ό5Wewf/FDDz([[ 7>ɄB!L)}NVV69͛f|WbfDc1Q,29p~[paeLe nXVVe0 0INIf鲦i`xܤ&{iz$GUT:h0Ջ d 4w6)qf//$#/KQ,fq֔UVl)(nX ""ROOdgPU]&Ï>⬳$1!!nR}bߖeq҉'Z&H(Ŀ_yX,F4mpK'^k閛HMku_ /fj*i>7/>OR^T/^+.'#';P v͙MŶm6WJԕYա0Wm00 R,F)PPe1kՊP0!b&pO>iߝ:rEl(؄iuc&k :vѴ|^P]iPl è MÎF*Pr{mC4B41|M0 BQmc'kߔu2aa*T)LN)PPӦO'##˲욞?4x.>}Æ ?~qGPT)*," ({_Z7Qq#"L0MB ^|!))5MLڴ9ܔ\][ L`vϾ@ʀT/^6$Egg嗐Cs nf-ۈ2q&vK % {Jk`ZDD>u9@/ƲՅIˍxz<,^˗כ{;hbњ1P\ƌ߬I deeEvv5H'77GrR"z6ǀGe(J_ //zbzgpT98DqQRQ2@?PW ǀzԁOQl̝GIi k֬aӦMP]UE    D„#,bo_nN8x"IIvک]5ӈ#HO'n?zx><III1zKh ~+3 ML'-',_}ՋS7x}5c-?1~15g !q;}u&wڡr&ל1^DD$y@^|Qʉ'm8VqIKK㗧y 4 u\]08HNnsM7`?կIZ^6iaÆqH!MhuvO]9s>vIo.inL#SWEyoED@)nwOp\|DŽB!22m5wIvFcGgmRHs0{+P T0It<{+ro&[ m'긽N:<5~P][QF=i۶-eժ>l =-Ν0@Ҷ_|CՇ';kfV1߱'lxgˈ~x͙V 3NTϤJ9ٶM("=Z!#=RFGQQUUU$&&ۡǰ$~uN|Ujݗ"""{ARha@BB'""":[DDDDRG(EDDDfrwije]qWZz[;p{Ë^5tDD@ Kx,JJINfҥ%$a,]JJrr|^{^""rRB3HIISZVF,ާ\.III0-uڴm̞֭3C%556mW@w%""/f`vi땞a$%%G@zzKRZ<0HOO'===YiDDDjh 8@)""""(P6uh;n M 99 *XDDD_Er/W'{O'4|6l]~>ɺ>HP*(@fFk֮J="""0 'CWh M$3#.X4RDDDDQG(EDDDJqDRDDDDQG(EDDD]`.l.""_\׈n M[ҹSGzQDD"l;:6l&EDDZdSP1J&PUU0)""$''k(ZQG(EDDDJqDRDDDDQG(EgZ/.~ k~ {:~r*!]\Dvo_{w͈bn_:maܕq}\QEDPT̝3?-ĎoAf _%"3@)"!wJ>}"Yيߎm&2?-9mW-?\ȱ#fr?s/?/XB wo`/Wr1c:.]Vl*ѣ0ri{ǻ_%yA"TY%mv%ܿ? ϧiMdr,)6S^cƝ-NKF~3-`!7뼈DKHg ;Fd /:^&xz/o8.<#I&xZ`Bl3CIbgob to"rP>MD"n^O\7*2ιwFj6ޝ4rȪWrؖM #nxo?sqѐ<\ۛ~>WDgb`[2) n{nZNQq#:gaO+s O6O[{ŻZȁERD~|mᄃVL}-W`UcN"g) [`&ߣ3FNyϐ/qwLq*7쾃9r}\r\uSX)m?n(g4X~^]>|9NEFRDFqۘ/_ԛo1n//{jU3HL2O*L?aM{?g1Ș[׋\t[Dd6+泠_skh s_7sr_k6ED⩇RDႩ0ex6>k@FduC|4BnDDDDJqDRDDDDQG(EDDDJqDRDDDDQG(EDDDJqDRDDDDѽɆ ظi riӆvU(P6 6P2p@?RSSEDDd/UTTj*6(T6n7mkN """HZZ*;ubU(P6ˊ)Lciiiؖ_,8@)""""(P# """".Ԃ-[0=S2a@ۏH#;ADDDdSlA[Ai\F|uB1/7^͈i6^M0bs$ٳIqsȁJWޫ0 sjc]Zn| P}2tP\.W|39vi!iTkd +cPyh:9Pi j V?]{ҥ ǏkeԨQ 6 i&b}};Ho\QF2ã8WDD[_,9\2]Nr kb|43o}0~v9)P*KKy򮛩()ڥ^zk8k,Gݻ7ׯoPKU۫7}~2/>sb,|--GF>x %|thџS'/ >"rr~8>,Kő i0\15^#']YSy{zU|cOf-Ju8V;Srt,*(*”WGneQb@UM,-+7=4ܽ#F4eȑyٓ;'x9s /6hk1ֿn:-6F> ܽ3, 8o6sf#U0wrb̘{8Jo0986r^Ef}(|P%wU_#N^wub$wB^vryz4ml(2{aCa~1(_ ʧ2jXPP=h -al\n "Lzƍ/9s&z+Çcǎdgg裏Gx⸥DloJ,0SI7{8#Al给~&N`l,Ŵ%1ܽF0<7>d}3<5Or7(b.oB\S9}z1M}G  U7ee]p$F8`re ˁG^ ?C~ǮY/??^~0 ǟg&L_ϴi('to6xW/bd[;9+;#G $¼Y1ce~ IDATn%yrڠx3bAEol 52uit6C6ͯ{+M$&% G` DbJ.KSJI0kF[d}16n5cISeYϪ95q--@jf&7=4֍t&k}~=\}]4hrَ\mw]HwS3ni,R5+|M ؛sHd ~j=#Ft+cG^eFn7Oׯ!cЎVvW+`j94SlOա(aJ*pcPrsvۧ値@قՆʶжc}&RRRl޼>뮻@,=z{Zf^3&=1$=#(FvS=w& 웈K_KœPFh W ~CL-kA&={{?kS_n&bYw0N>Jw`i.מ9tWm#winkB\{кz90)Ppо 1qDN?t̫I'D֭袋g q8n?نû ҟy&x{ѯ12o#c0ck͝gRt$ :;mʔ"7;@m0οȖͥuv\=ӴtIo.dқ  0ݘ3WUu\H˳qYYmylo֛vכ}޴{ۣz7ӽi„ mscA}GULzH!"RwPW \] vUdŲkAQk"R#569ùS23$|ޯ}s;;|$YluK-YÇ2^ōd˯Gb۶m޽lekqKKp@i1Pq @\"2p3og|`^2B_bm_Qz)[FӧO;S61Ǫ߼e Ps6ƖͦsSU_lCz5L=<1PY챰pO1z62 ##abYqF϶b|f6/$;pA,LsL! 1x\<:/tgxL.[DDD5IV8d ɉe2QLQX((, DDDDJ"""" %@IDDDDaa$"""0PQX((, DDDDJ"""" %%N*U욹@ xw:$e˾CaQ.vlQ 8xVZ4lzAbB\FT(ccrr/=ӑrȶQ=x\<=(SbY,_7~C9~]{ir) ׋ߠA_q!t=feN^Vn E% 1΁zINRT[1PƐC r`hD<:O, W.[sga{p8p8(J=xi""ACII 3ЫWo uh%ޟ ~7 ;vFS;}nxx}(Q\ЬMmi.hbGv&n&>/[6yo38G ^6/vQ\Tܼ|LT\.,Y?] #vw;g qȍ"Wk+FNJ8VF16`#4T?lmѢu;\urI@+nAжhwRkO@B| 0cضg]/j㡇y#A#GnNg켝/u? ܞn=Vᝳp$/G_TZ;VтrPj@o>s='}z&p|+`y^KJ _̴L_bKJAxw׾'znV;|14O Hh6jÚ5@NzV.Rz^y=1ke'.]ߍh߭;7ӁzalЊXK7LĻR18QlţK'R{E۴hmz"F.4=}4ƒ͖;^lߺ[WKth7gĩS/1oݘd]_=222qۄ䲘`Yv*+CHz<((v[_ [/^712F9NٶOs#&> &ta&8g45wտGAQ!R!-97]q3.v=<@1\&'m6AR`krο x,Zc5C\?.N} _X8S}x0{&~%E(Rs.|¤-@ìѴ dn,q 9% yZxMS|vxꩧw81vXC.9=Hs!D : M:)(Ɵ8`*%XDp|1>2*NY ו™5gtӁL$:,܁Y(N-?CT8qr(ܺԿкmZ-[?D||:thѣFaarYLI( ť-pp^!rpas/*q 0 'i CBB2ӽջ'gdffۥc֛WDႅܯ3؁S{tF س4HŐ"Ιƍng)0&dK8X>]cL(Y1y{/&qm83qa >?koۄ3ZUy8ŧpYh債?/>O|#oQ*ڷ=er<"^^x߿x Ƥ$,^_|1 BNїQ11—o7Z޿x?}xDj@կOOE&L@֭aY,EHWtį6 i"@k;N }m6>KlptI/c .ס}ޛy0Iӣv|<?ow .m?J?7qY`;Q-w$^czeb߷hz{.i 0w2Q, {b|v7 ,5}r$==}{/aS`Df_o{a޽p8V?.Qi 3oq%OOq 3N F4ye7δήXMaNm|>V8qytڄ ݆ Otr.[e ??='VᛋɖQ~~>. -۶E&MиE jf]D||<7o.%"(ټeΝz0` ƍ˥¬↗(2bq @\"2p3ogEsd/D~iYXiWԺ^={ʖNypD{7/Eg\}F@ e)\`kԞ9j{1ybСcabl''''cW` 7pؿw/oތR3PUgh֬9A~kmgu=bNjٚ}ش,o=0a3Y0PƐzr꼠6wӁ1Wlr:ؽ;V,Z˅x4jvEff&ryLDDriob?crI$+ niAue iӃ2e9*=ZիW|, %@IDDDDaa$"""0PQX((, DDDDJ"""" %@IDDDDaa$"""՜b_> +FN еk$&&ʶb[ǪUw^@fлwo1ݺu DDDtbb!ziiѣ;\.ly<l޲޽{ɶÇ1c ,\999ܹ3:Y駟b…:t(nfdee3W?DBQHs^};DqV 1!Ip\hwJ[|2:|0N;w")) ڵôiЪU+iI&+WԩS1uTJ"" 7+7a/Eea$ 6A qVZj+zC [n3f%K*=ε^ , ]vaƌ{P^ҵx;7K<28^vo;du¹b%$Jgq1)/NG"SMص^ڴ9%n@rXk[Rz6oвqF GƕW^/ƈ#2@QQq9 >>rIG)sc Z9+g1n W6W7w%|hD0%g+޸Qz6;OwJ<{ԉB5i%jy0 }nmCyp:+~LVxӥv5}kN ))) vZ 4'|2vڅ[bΝ߰}vܹZf\xHNNqQhiX,.Yu7dM ,Y6&^?C. /:o#oYo θ|2>XP%ͳ+_n?\N;r?]RؙČ',łGۃcn+t" #y8ޱB7`͖4T wEN;+?QFaΜ9HHH@II p9?GN[oꫯƺuлwoyJ l.س-,^O̯e2(탉==$?=+' fOǘ{pE z+t_|܋-FDuwVjr NIU8p2r>یC޾hFG&:aVaYv*+xPPhVsI _矏O?ƍìY0rH 4yyy(**qcȑ裏pW`Μ9袋4S1}`ʔ)ҥ wΝ;#>>sOOp#!!}C=nݺW^ԩ8.=B X>Ϸu8[7Kvl+:/~^Ƹ3^o؅eґ'faQ>~쇈0gr Q`HIE*3G̫AB q.'NX%_q7K+i'Wv '[lA޽l\|ر\l#)) 7nDII "K=E1tXsp &5N4hXakUC a!'5b^&ZeDj'[@t(MۑѦ fP̹IX(-}ղҊ@YN~ ,SwHbb"fϞ7xx饗0|K/!;;ofϞO0:apME.? =i z0  -o6#[leaocuŚ7Cq֩;It"p8vor<^o;pG־5@  W>')}ﻨCYb6fPyj'ޡܹ)))x';p}!??. 'tn J  wr7L#&U*:m}{T?/ /PED' W3_dq p,;`-8Y17G϶K$g G1kvc! yV;mС`hԩS1c ,\{Ŕ)S0vXYyfԯ_C7̿MDD!{Vwѳ-هM˾ݾ„1d@Cv,osew5dek.e+++ 'NĈ#0)I IDAT|Z >ZvYf5jFnݺ$&YivL s(cHbb"z%Q>}O>EDDD#""""򃁒@IDDDDaa$"""0PQX((, DDDDJ"""" %@IDDDDaa$"""0PQX((, DDDDJ"""" %@IDDDDaa$"""0PQX((, DDDDJ"""" %@IDDDDaa$"""0PQX((, DDDDJ"""" %@IDDDDaa$"""0PQX((, DDDDJ"""" %@IDDDDaa$"""0PQX((, DDDDJ"""" %@IDDDDaaC([3(k@nn,Qͅ@YdYfVmiiiMDDD!myEՀlvƪ5kxdBsyhѬlQ5`!-[@-dg((, DDDDJ"""" ew`&GGeر|Y&""tX>RSSd"?-ZݻвE 6Uck.oX ( ض}y&9EȐm(Y,2~@IDDDDaa$"""0PQX((, !o'"":1=?4 !HI_!""GJJ,=!hִ)vډ-[/A/4kLd~o۶@t6s8HIIF͐.e222ʃ%3DDDD&J"""" %D ؈uB狺(}qF RgH] u""":e(l'"":{(-d""<^/7 QPm#%މ 1]#y^ؾGAiilqqqD[:GX6-P ͿNDT eo>}E\г]M~xddo>:4Jvl ^ M~nlؾ۴ReF0Eֺ`!o0YI. l?,9zO=a Sq V$sFu~2/ sQ J aHwQR0$$$D* E|Qw(#ujŋ@DDDuV$Hq(v?fPrJK2 #""" U9#uv=>b)PVU4uDDDD 6w.BE _(X2E<NU UpcNDDDDU(cե`骚""mP]L=""eY'if@0;R8"!;jC*ޮg ꅔu""JKJaZY>߿\{=frx|p1?kag]w‡.[eŮŔ^@M} kDDt()qߕyY0?ಡ}0q띏?kW[G=q*RÑxămDZ,=?^Æ qF>l(~5' Ǧy+C^=ѥ 5>Dz#6}U'RV݁2_ݹd]xvu"":_+.N}L+a 7aڬ\"!xm1e68#5]/]܋˖W;Nyxߕz+O3o_W=9-s47 Į^Ϙoб8޽ z ^7pCyӘD=ff-}3 emX3Pﯧ3]p}nQT\\G&݉7퉀a ֯1S$͐!hi%6';`ݘu>(LMѵKlCe.yJ5X6J7ߍtEK׷E џ1ɷOg"7EɾSd@1V=;ZՋ?ÛF y?[;}%{6%"uz5" dn>s""ޝ9vlT+..´{@jZ:{p\f^YH3K:3# +a*EťU x[v4\J9 oV#4]D^C9+$&g??]?vI N}&ߋ{@鏘E?%TZ7FtWp=. N"tuG 9d?_پbwLٝC ='"ZAƘU&ZQ\f!?_4|<9p_c@a-b`s֕5a„f "{bVdB֢ oh[Ydʕ>l,EڝrB ѧOY6>})NǷ^QWcj==}zM!lJed@j@Ev pಱcp1EQCwrs̵=H "[gzd)]Չ"M =Iz`ETM` _l9kM{5_ƐD쎵;Ỏt 559WLt-TnVcseDDDD:·W~wRީ^u.瀹&&hy0 !jg"E%s}(1rkQS݁2[^@{5K Ӧq0{YSFZ41]0 ȱC ֖}N2bJMJyq_h/{}$9Ή~|J@;jnEMCDDDTU*WYC}N$,curk~Tg(evH(ES?#{lJް]O2Ōhܡ4] ;rɽƖ#""" -LCYEՂџ[Ą(ǴTB7SO˃恲ރoj,(&ϣJ _o粯oDDDD2 RSVǩM$_3*r_b*P5/Υ퉈¡2;gԴٱ$P?*((Y0x^Z_UeTu2 :ۍ&,2 k^W{mwF՝ZOB5V=6V!YS=6z_W{9VA˚>c\嘈]L5=d͋?giTkKiGȻQ{:5ֿ>ZOUMXL5]~P,T8jMc1PvA멚÷)EQ{}=Px@YOtZT]5yv5""XSYj3ՁaLޓMaP?NIy~󁶷unu Ʈ5;P"=5AYTנz^([;P9Xꏩ6y7Reʹn(I}^ː&7 2TШϫǑ55oro@ M=K̽|Pj^@u7l*L5Tsr*¤÷NẂ箓!SM5IDDD5EJڛj=\QMMz:PyTMauz5sQ*S5}b.=dzP9yQqzT8T5o^}n76 '"" |oX`jz039=yia5=(u[+1:l>c$zDUWT,b:ªM0YV"D?PNTַ7W=q䷺զ{QF_?OX{&vu""`nqzՀ'7.^2^Wc8y^:XU=v/Z UC{UW{[uCxQqQΣB&]|^uRS~zת&{*~xUOZgl&sQc՗5}S=}k\W# 'b\߫: 5⪽zutnuR3i-TjLomFNB=Lu^ML}S{T}-U~k7C }^_B倩ːjz,?5}y$U@ԃˀ-mj\j8 Pe/c^ ocu^*Dyg09R1}YLuS(iTOWs^~MvX@f dT}Nj.kUuyр=oFoTTAR<Mɾy@i!`_XyUSuQމTR|5wⳔ*d?6|5q[_Mm^d]^(c""X#Ãyg[09 :NIr|{鏭ɹODD m쫹z5Wzϴ!Qɹ'@0jlz\5ǦMȞ+v@)Y8>ਚs55yQn7*JΧBek雫xޡUw\3ՈM?"Ôܫ^cV). pQc7E{9ktZD|Qk+_I*X7|cunu |:7VK?Ճ6VV鮤}_NU!""cz/1$M nmS{STչet.6"3PZ`\5hu\\}aQzXӃizj rsʽWL(NP=]Xj réX÷7=Zkح1LtZH17Հ/Cc\>Eh=}C9QqNqrM`oDDDD-)|cFu_աMsULuS͟P@s1/Ԯ*9W/ VwPZય1*|Z#jMc9V(k"%"\5vAN}6@,:]_t`_G\]y~s\;VßN}S5s#}{[s](삍]]Q}bi˺ *@ eϴ~o/R~TD*d tNZ5W5ٓhuM_5^}˹ODD ˹,Sؒu9`srST84Dk!r.Y{zM˽6hܡTO.X8& wj@ 4!NqJTJFmר+vu-@EMd]X߂)WAP'C}.{@5_ʢ(Car1cE(Kҁ@@YPDM=uw(;>W/:Fn!{>=Uck e-QޛȵjMkurgZg!`ic\1W: LJ1 TTB :C)?11ן\M5Sώo k:roY~j z_@Lu5SFTPvM?V篮^x*Bcw+5ן~j3c%P(ZnZc[5j*jzpSׂ?j@awb Hr%7uY3mu^+DDD]2*ZSȐfWjʹ)r=}/&v}zj?uh=5{:}8Oe`ju^YIDAT ODD }W ruFciߕ=9kuzO}̨@ir(_M]LxEuzӿݭC]X>@=<ƎZ""@{?=urc57}YStbZ T3ME%=d]2E˱^ onRM5{]/М.n.={S X.r.n7j%PEp V0cT_MP福Lh{5zOTGDDT'jls}i˞쫱^ Tkr,rȺ]D:x;`LaK{Bɾ˱"kR>QM d?8>&z>z_Lc}D:x;b Z{z.5rJO'y '"" rnsW'/z_MkzkB|C \v{5u}ٓuٗu^u٩1DDDvPcj9hɽ"6˾i}Wȹn?h/5<˽Ɗ^`י-ǦyUENCd/Թi ԷS㈈SUCNL}SMkBd/y ^ >V$Z\<`. 6 NC5怹OWIuP/Ys\95^U>Q,t;.krnbZ#krkzL% zS=ZyQDDDuUV}ST31  PׇLzPꦚkt#"":דLkM5 z J**(vFOU!"""{P*vD[cVZЪ1:EG^0r|UXCU}U=Nz@}"""~BW8}`UU=."b%<9V<@pkPQpB V &P?X'c#"BM8'c`: ᨮ!"" GuP'ص F8 ؈ XB=oD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDR96'IENDB`qstardict/docs/en_GB/images/settings-dictionaries-dict-stardict.png000066400000000000000000001447771453553600400260310ustar00rootroot00000000000000PNG  IHDR>C pHYs+ IDATx^wxn {)JT; ?;+ bU݋lW4A4Q@^ww~$73[M|gysl6'B!B!B!B!B!B!B!B!B!B!B!B!"l45 *o!PrHUqBQ!i}$BH`?} BoB!45髎ϭ:>&!BTdVTa5:^xݯB!jx МUsB!ѪJq6n+{B!T ieo?NfoemW!xv'RsSu|LB!( 1k;Dhõ`URBqT&O/\۩չc}Td]!B8* Vd`U>*~VEWE'Z$\B!Dx u;"ۭȺ5Py<YW춂j+G!iQ ~ .VE UqTd]@ jL !JLm@`Ud;Y7,CUPm_*B! aEr*6ʻ^XF<_us\y{{B!nm)`gdz*}gӺ: ! N(ϺYŽWCZorZ/]̉Z9`BQS x j}* ױcWg3AB!@͜].fǮ.8 uP+P/z_Gsu1pW'B{nΜgWc܎]S` $uB/lBpԫ@s;jM@N!+F-:Z܎Zh1*\q ~*ZJͅ:cWc wRB6_ֳTjMs+5<ʮYU5DOu&>Թ5YԘ:79ŅBqbqjԸ:ɚS\@* eBzs5gT4R ʷB!xZ:U >ڐTvCsjHjilT4wȺB!DMR*кNyɩt[98jbvjCROk,չɌ;k]^x).BɩYS&kg[)oցqu[l]H* v孳k<ձ[G+cRj:!B_0 XyjI֥uUvs' Ie6Il;([@uAU5Kiihv}.qB!Dkrvq7v1+κTɮN͝SLM*I v孳k"_ԹdԱ<YG!+O,u`߀ŬsuiչRSN]hf05PήITklN]/ f(E8!BTghQ_ii2X0s]NSN &hjMjui5nOQaWky(*BwTK]ש)T>.Mr3cVָ]]\]Z1p-P0 &un[/P..M궬1)9!B_s}sh ֹ.f-2WXK^pŭNjC6֥]L͙tKLͫ[kMj۶:W#B5RT}6zMf3c4٭1uҤO`^ysnPvKu 5j߶-ձSIPuBIyPqq(K9sk֘su4[ScvsUEA wo{r&.έ`&q 6QrkΌK5S灄Z/Bb6Xj:1d,c5gP3K8b I"󗃲M:VWjC S5jnƬcuMj,\(/B5Wj>?uԼ]z&ךWZur֥.4//p5Cj^mɛ7\ñ&V݆]vsu[,8Ŝ !,͕7xv1Z6ZgYv1r5n9sҤƝN*(\P;5vvun]cuq z֠[֘>VN@s!BTrq(3N]z3gs[k\Y&X/U+sZOmՆz3cP,SZ[3ḻ([N05? V!8, ySkԹ3֩7kܼ>W1Zc4K>35*?W '*8MN9V,1WmV 23n6֜)U !P\yst&ntS/?0[,9n}su֘:6YsjLq;ŃVgr_6jN  3kbf\o3.yuTNq!BS3͡u βZ̭ ]<k5e:]dޏ3| ڰ{Ra&N]7o&F|5ztttu78:)!LՎ !B8x<K_zEEkplQԌ[kո9R6B6eImFձSLmdCip][tttw5y汧 r+YW!Dz)_y;J]ksj޼%p4bXeĥ`b&![z34:O:ulVmڟ93u]#Bqt]k۶mC{[lz5Mw ]}yUiKuGͭ;͚7v5֛ #N?\! ?cXGo?2o:jWǦ@*UMݓyonuzpۖ\ Bqs\"#"Q_H(ufd9>f *`;ѺRwt:f׬)={8t.HjG`\"b|Z80 <"Z4hGBlusB!UAokk͹:[c.薜r3nƬ9Yk޺ }(jr+ysn6*3n6vͯ5Ve+pV\4 FKMGAG 4M t]vDVv:SݬB!DU1k¬ͬ26,97RKkܖ5[WnrJcslͱΌ90عs'_}EbS/!:g(~=t(ANA30<|9a4B!UEq3kwZ5Ŕ ]NsR AFլqSZmp Gjj*^,|ж.di[# GQA H@B!w]2sfiwF:7c*q?e>᪠v{zZcwsʛlv>M\..N^@pkŷ"KwwB!X M.oǩ.f74ǣ 9xc5H3g^G&"…˥W*nf]:JNGKí$شiV< Ȏ;ؼy>jرC cBWQ2GjߤU&s+ڰ8^Uw:7j:̃imv]%73|M.ir\kE(|v vEB`٧DFDұcG.|;vK-KkdUjr;Js+뎷bfkkO5H p t\uh$ q8V;RWҋ0]3BTk|M7Mkw˸s]W]5KGfīi͚;al߾oIJJaÆ]K/_<0r֭[@QQ/ njFq-o1} 8Ȅ s˭]t(%nݺѰaChӺ5;w>߲e Sn /kuٲ9mtLp9Ssx78pq,SO .﹗Դ~:οBu}YC?˜1cK[IOO?ǃyŢgԨx{'㓏>nݺrVCe}:tHMƛoqF;>oVZ1ed4oysVWc!,Y%KOK.>bĉ#,XptowaѢ| $%~#/YPgCRN) s3|>XJ6 SJͫcs~\&׎ݎqlflNDK;z].Z(bסti2 M(Lk'aj''c99Μٳо=okשҭ[ףX~'sR .E=Uw\׭[L%~-O@ƍyfjC|\6ntͅ43!%!!#iG0P|)$%$]W\q9ǏgʚzYB~Zǃ0J_ִip H9{y$= tޝݻsA}Yx L0dy]RRRyڽĄDqH:>,bJOaa!|gt},]%^xv_ sVv Pu 'Ǟ=zjϲeˎwMfFM4!!.}Gpիj׮ԥKrsbYbߣkCy̾&fK:W뎋>VvZjTJƶ4Mr=4 ԯՍTz\oN5LI&QAx*(m6<9ʫoߟ|^7n̵W_I}k1̙4_}7p=^t>W]5F:X笳GbI tޝgWLiI+\d i׮O?m۶e!\}5ԫ[^: 7擑I\\,zb?K/^iժ53g>@ttt:|ptyc<3NԮ͌3xW䓴lՒ\a׮]L>""9m0N>oQ J,0(4KC1grMzNN &Weֹ݁cձԱ%s8vBaN#+K#!tvN1ׅH\Ig!.f|@ !N<dl ]KIc ۍ֫tUqԸckdMoax֭;8\y}2ZMp:n]qGDK)E%<!BT1ke?pf=6:k̩ޮquWnrunηެ.Ͳ]׉mv-׀!BgYui:8R4J;lJdqvÎgmgpͥB!DMr9qʛ1Wnr{֝Zgs[G!yT@7kʚ?*OVv7_0֘B!DMdzò4YN5&]L>UFRv[Z96B!j ~Go}#@`N%l*gh'18(׊¬KKBB!5N͠t_z3w65WmTekqN;Ѻ4Y`Mj-SO3T\!5/𪍯/cΜ5jܚSǕ2.W0YwuGTֹyf.BQӨu` IDAT$:(_nVݓVuX5oՃ*BQS=XcX]y.V-&׺3Vv.qgB!5N'ԹU0qq&G]`K}՛B!DMdw7՛Yg.֥IúJQMn0#եAYvB! ~GTjN]U\;sunPz\uB!5}#9FjLjq0JQUM 9Pv[֛I[cP!BFt7멜V6y-/hG L pa33zxQ 4Vk蚎;&3S߂*ޘ x:FyqY,{V^\Q3ft+5Ig՟I8^fmDy_E}B9=*sԖKu{ۑ&\e<ͼs&]?qephdI ȗU#-|y!WD Ț,3%M. ڷA-7oy7/o ;}q\W_jЋ>}[3%7S +̘֐+}_gֽgҠCբijekbh6]D޵ Qh4n۹U'-b?4pB/0R{u)j_+/W[ ;/gew`Q#9\{7:9m~=LGӞ#w0Eޯw`gZ>zs9y4`n{-{r7h7r7V!"sSS-4!~_,ZФy\5nRg`axUDmDw3;M ;+wGs3[QK#o_gA<1 vPVGܵӹ}/ױ7˃UgObʈDLYQL{613xsxd->LJ?!ϣ]k9XVGp uVl㿚Y?X:/} " &9s&掙v{c~ڛ^cu'Feyq0\6=FOkd.KםŬV_1>ϯY})ϲhA<0`= A֦x#+ϣEסs]-Cv哗q \yYw>[Y^cw]~ֽf?c -9+ۯbm|!f]ڳWnYH1NΊgĮcdDactawϯg^]b>v.gY7/1|S75wLJxn[|Ajէx/^MzĖ'3j%ڸN gw֓ktvwB~&s&3Ҳr3\MMN>kyzZ2zJ?:K(p_o$3cP#7_0lνTg_=b8?r1I?;~?~..Z঻G֝ ykZ$W^LWq.[K:a-gu|_R;}_.t~_5س}b ܉of ݁_F5jpj\;Fo;c ?A4 v<8+I{#'# H_92OhXGh7Έkϡs}OF)omhFX9ݟ<rc6_>8~܈Ycsӄ=ܼ Og_Ɯp{JElr5y-k=f{}fD"}g ΧϦUd:ߟǼ0 wx2:aop~?{~Nzwi}d }3' 3s&|{ZV,` wh.=rٶp:Sn}: b@N>fNc*W~! oK')J`?hěLlYrb!Dqp类{MLJx$,a{xfʑsfƸSرϠIeN3[Y.=_S:vi[~%뜆$mgݯI4 {tnm;YΤ}X\8̪{x$Zv_*Ϊo@_-ɴ9u4}&+_y7~.~oIY_ ;pkH"\^K~,o)i^2tF>{xO%MIɜIϢx4<~5?mrKq|_5^s?dY*Chٓe1^ X9;VHUrv\y9mK;)>F$'ǖl rq S.#M9?װ}~ݠE5dQg4#4tb4bh}pfn`⏓E4H&Јn֕əuQ?gWn`Nl4?dsY"3thGׯrzM#2>k }ϝLs#!?=wBc׍*sOQvα+-K~OyFl̒/3rxz$@㥓8G3?c&ЧX:HdGÀ шm?>Z\wۙKEt<ۺ0sCD\<`7h<|̷[FףC 8\UWOGaSy1?Z[V'jy mZ ܞaw&5z cph4yϺ~㌓iD6y&mVrbԥ wF>SmcÎ"(=9xy{~c<5D{{w>g]r(j-tL=YE׳lzV]; {W<C{ĢvgpTkj'EKu6ԎLnd=N/S\@φDEFqf><։OIDRȖ??ӚEih})ط }U:Ԋ+~)ʲ :Ojc0m(5 ۉ8:";N G%.20GC#y$QD/υer|dE'ukLYDg9w@b\2 0س?,^+5t HK3SJyot(.x d;|cy0R~h'%Zr |YdӤDW s3||mpe8AeA$ཌྷuvciDVe+ٗsXMS?_ſbxu_gՁ {~iz*QKMNs1ٲD cVQޞ)P^QEgpM%;)gռy@xŸѹc_AS_=*(=־)EZqǗJ H0^>payԏ(sdJZhsKe@ӬЏӷyxIK$!)AVz&^J #4qKa .4/)adz.iG >XK ^c˚ʥm"iՕWx:^Bs~'Ӯb˼ƍ\rm $ez GX Ղ.<|'͵5! z9s1צ+3#!wܻ߭fx'gs^c٦;yWW>nIvd.{VYJt\8bHKR|PKh1$&Dt]ؿF|FzZQ4M[* ijD ݁4˅I$Ϲ.}S|Ŧ?3) I̷}2nx(8OpSycEl+vfyΥ_KBOz7w$/1BK٘7q(/SUhpʀZl=R7 e7qf /: 1r0.KR+ .S7/~g?'ҿ_.{H]6O:hDR~< P+ئ;#KEO1z49K=UgM3 늑tf_zGƜ<I3uTB=+3Z4{#ZDoُP \;r:E:11ٴo>%{uEߒNL^҈:F/wAwrN&.hxǸhڧ-y){ĵbФkQ gO`+ x/IN%mW5Y]^\l~2IӰxݵnvmKƲm4١<׃Gm 濘}xkէChyIMob7Vߢ/oM^V.8KNFөg[I[8vrU-ctFDM\ W5 nu |ͪCZ+9cΟ#En-Q{`u_J>`:ugZk̹z3slk-sen.]%qsis3 ~d֬)ScmۦDe[ͼ[CrOtN꣆EY4}[y̺EəPxw{N@y!ر4}_`UXXn^%f͸ϲPܨZ(%Lֹ3+%lÎ#vlR3 lk&t$"\BF!j`{`몵+WTt~uZ{ goz!&iOFpBQ.>91ׯgS.`DH={SBnz^=p4bOE:B*lJt¨+kg ǶB!jpGNU&΃ێB!ĉ&\}PJQݛ\pjPB!(OSN&{B!DpNDkrM'ir!B oM=B!HjWU ݥE5vV\5$v:5i1114jؐD5N?/5ɅT{VV6[2Y!FvvGEa鑪rB(FT!Bqq4mڔPS{c+BqB%W. 4B!Ƒ&W!B8 !BG\!BQH+B!jirB!DSS3ȑ#'999jJ!sC&MHNJR" ɭGCnՒX5-BQ? n%*ҼYSipB(..MjJ4 ''G\!B+6Virdj IDATB!D#MB!qB!54B!Ƒ&W!B8 ! R?O.W{_1T8/ՙgBH瓛F2s Mr;s,0ZhFIq[4g~M m5JB,[Bt#֮kW|?GҏsM W^~rJqי^f(z'=/՘5 !6Ŵggpڟod.㯒~;.gĠS8yٌ_<”k99O`￸i,+?XT.uܠq@ǟ%?DÀ шm?>pӭZ\wۙKEthko¸S s`݄GOyv~1nM]mY!D&qB!)JN" 06I%= bHLu=۪^uؖS|IKڵ5.`dyӵе<28 i=|Ԃ5̹dϔ|ErǠ{_cև{0'nOVY!jK!tIӺyԓINJ6,EM#8v%DRnlIclp 2w^~'š{~f΅QٸeWrj<1jhcq^$L{:?u('6\AKe 9 u4Cl=o #ޓxrB0|Jʹ7fC|Yu>ܾѥkmxȎoIqxIi)+0f-}y>G_[~F6Å>ciұ5uB߼BpԓBQx8"pEQeWoG#w@w&ΞN0.xڎyק֣ȉ\I:mbϘɇWXW5sғ<2LH8s20Xkˊ9J|(3ƌ#> ^~9:[2~#=׎NzNLng6ۧ0{r]QDŷd8 !D;]Š[ֹz3&6c pYe͛DXul݀Gf=<oJO"N~-YazHmщ^G\ENۦtw$jEDK!1s~Qt4>H.&Z4ov~=mv*w0i1`bɷw%mz}99>\Dܘ-p ѩ^`xb(|3x.:ik5<oOGrb)m:zSjd`$џN߮ b^w' k$&(ύ{u`p 0;yyzl'<[.DM^]Y^yz"y$YMxi(@N>rW1C|\qist;Of.:ЕC.C+^7cYC.[ΤK lw٭䏼KF?Ae NaE'5lf1'98W9 kpYx {7O%wYA-amSdϱbњmE=HOSS|>Y}EJSJ029Rw璇;B?K/GZ00y2z_!kV$AǺZWӹW,Cq<6y S2wXr9}0G՟W.%ns⟟䒾^b\vk"g:q's3a67>n~.f\ƆdԔb>+チ^\\?3z\>˸?p= m݅n'yv^b;^Noq,7Ϲ[Y="ܶ!Օ3:BQ~dV!Ak}oݝsƿ4\#I,`O) )q0[&tZgbإ7V'[`gѳqڳk̊r*TTXʧ]_W۶~cY+PAb_;o~%A(8` 9W~ڸ;tִt jkۦ̢h>0͈Ǥ<z>XTccҪ f3uuex.fOH,;i/Wqn1繛e~>N*k]!ȚU؆Ԥ1&99F}yKenbN ױn]r=$Q}o.{o>H9\tt=OfN 6u%7}]rGw&`j*kVRR4I`cUFƭDl${i/OYd <3l6H 0p{pS>I u9(z'G>#8A+pS,`<I@PR.wԁW,ݻޞF!7h;.<\bQ&QY__5pv{fr{f̦MA&5|'h9<&Qan:Lo{2}gEl#@Dh_AV >/uǶKs^{NpU-N9|bC8ch֖].r2} ߎg{/›t9.=iE|Z{%?vi]7 }h?/П;iQ)\y{<+_yt1\?z,7g>?SU_jG?kkO'jFo֛vכ޴{ӭz7e̘1;tB3grР[m; L.v ~K""[{wSRO᮷noS\`bYHwKxȴblf x`rU۱>komMKު74fNt޴O.[uv Wiss+ݙ&ŒAaW";M6"""̀G`|»TFMRr:?qC4ݩlBH3`5E{EvhQQQQ"mz"i|ذaCrCm> {-?{DDD~3:erV| """"8 """"8 """"8 """"8 """"8 """"8 """"8 ͍\~<^/W-].NT-""$r#`uH3fG<3+L~9c_ӫOn%"""Bc;wo`UEYYڝcRyLF Ŧˏ㆖`pP\lBˏelm.Nd&mKiJ&c)vHa9;͊H/KRV{ŕ\W8[ P3gvT>]?_lNcۤ s,_.w+9mVB%gpc^J~aAd3 ?C|_i]LFw%72<ٲ!d۔WFykf9r3"f9w ,-O7n(bxt.n&۰YYTIa@e[Y__f)3#V2%bo4꣋B1>dD zUgpF;.J\.(JN~Lp ?T0~ Huٯ +8er.9NM) 4q|c9i0eRƕռq_Hew<[W{9o45PQ驕|ņk6,Wp20\9,CVX[rv[9.k0+MIX|3ր1] 7cB$*:kۘZߞ0sN)1-ܴxb1>Sk-MB1Y TQ[L_]ml/c# դq\NFj Pq׀awɣiY7G&pk$jI笵/Qx9ŧ_mo c\C3[ax[`н{&eGuR9?'ܜ2(z$hѽd,ԥ .NX[e0mtlwL@ztnw%\[a/39/\sa2V >cJ wI j? 'urw%)bЭ[IϪXHۆu fBGْA)TY}.2VяT>^, 2↏03<:hν=Lm&v0AU8:_­/К+$~9%bp I&Eu`yw\ɮx2 1Cᔾt[lV?+L?pl~2U' Gl".m0<&Xlm\v&SU37 v"{+bAmSeJX,61!U:aҔJ>0KxU5UX@Yq579{U%a>A$$[? \VHEkhmcX  ِx}Ɏvӷ*s+TXPJ^OA~6XS,llf.k@7` -teIi$n2YWgˌ׫0̏>FjZwzC7mVUJ!M) 9ΖGvD"`1xwCeU[Zu%QElll֬"^e8AU&fzE!bs}s YY1˦2v%"{>drgwɣu?5={{cf͔9g-Jŋ*o,Ả l-QԶ4\laJAfԎMTR3\1~_4N6!;fĬy]$g2\ծa`ä6SfqOgÕ(opdz`?Q*b gPR:,2&c39q^qKvWK6u2(Beeg(7n:؁)obm.{ esL%>ϊьMC+)^Yh },^e?RE$8ͫ `dɔ*tX@N6[<>}Ve57kqzUU ,p- jQز l/^D9"NH`e{# ~`愀 `b̪Jcd΋"Q" 66`ymvsJuXQH64ibRY^Af9*-ʿ&P(MNG1\ƢjDȵBQ~0<ͫ5Ϸۦ4< ײKt(H瞁~,fmSKqa}L1)[V{=O#=!nXM`ScpԳXQ l>6IUD,.rat8 `'dy |٧(T׳ڐuܷn>(+Kk`h`{6SVEG"aO΄խ<!a5-̋~g]?w.]3e&W0' fz*όhxv1\QWc ȶR[WD5',DmuꀻUG\8o %7mc,6V8z"ׄYʵyul/VF{ ]m畳4=HN ^dǙ&BUi&W~5gWdv9kЊ n7u DcQ[ƃS6.Hbqa%۲m^D b3~nIn" >/ H" 0\^|gz{sʸ{IOc G&;?UJt8:;`UPVvW RA,) xs~q^כd"v@v[+-O>N+7Wzzӵ7ԛvoտ_[3 ;`̙4h`r|?u)zuߕ4IA7ɦi0\. szE9ꤖE5b?lf x`rU\ը'xbv bI[ԄDi{SYVnO'Ѳ2FeC r6 0=nFuAiMir^8)Ȗ F?; 0vHk`@7-6T:0~:43 l_DD,Lhݙ"MfrΟ\Y0S)pq\q\q\q\q\qBl-]EDDDdwSO8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B2KDDDĩ\>=c/%-V#NcU\3@,Or8 rzGor {ٝݼ$د %jqIZ{Brvg7gw/"""4JDDDDDG!WDDDDG!WDDDDG!WDDDDG!WDDDDG!WDDDDG!WDDDDG'jl& R]]M"Hޥ\.alu,beǓw)MNv6;u4} ڹٝr`0H4%;+ɃeYTAӓhl2VAmK#FQ/XܥsruZ[/ݩi4&iFuuurzѽ[&l^ݺQZV\έiFH$vKe ?hwK`zwk~W]/i%D!WDDDDG!WDDDDG!WDDDDGG)*.7iBIZ 9yIeH]K >;X\|)fVɳ筦: m OVZJ"""{\qO'M/пo_=(00aua!w뭜{ 64y&zuaι\. , Srɤ]w#)'JI}>c1ȥ*lի f.s9`zu"""{ܽeYO{ko1y8|䡸]nV\7=DV1lom\n!IZB?D@6SZ FͭO~T= ɋh dQYG 歪2>aUF ]onO!w/ͷ1c >lXrn1{,\4ql0rq]XE,#3d!+iIVii)/"KUUaP]]UW_]]Me0iѓ7~^={Uo)a=#ޱ }r A٢y. 3p-K^_Oѱcgb(nFܪr /= (hٴȮ.yYl^S`&E޽HIӹK ڵedddx}|~<^/.\w떼]>uVTU\&8 R|%P(DUU*Cմh_~yMc- \RJAڽ;m+?ͥ9&$ `iK&/f{ߓӢ-hݭ2;TFl˸w&/FDDYSOn3aC3g"D0].&N\ZKnޤn7Ç /"E LӬ:x"( 3eY\&Gu$nwob?0Xn=i2 .//òi,X oH<R{ ITT>p1d 2ciIզ-*"e PsD) 1j;r7Y_XҰ@DDk"X(/ 77*\n7~?N;?ia?V eq1ǐ^&X$^yD"A<op[pM7X<^t2|nV]t<={P=o.l P55g8h*mWzJ$Dj c<BX""Pm,bh٪pC"4M(|2O8#ۭgX]4:d` Ѵ>/hg4Oۆa,4);ên7D$m1kڃ0m*7ŭKBn40-1*W,)WBn3wߑeYXvMax<^n%|d9dpYw8O VUahMhճ'}Ժi+(paDa^yλ<5LlڴД\XLp' 6I>K.$3+LWɋ~7SvvM;Vs 0y~!x L4wi͛e n׃x7>-7sCIkF"ZhF&7krOjlrrs!3tXYYhG˖5@j ={4RFHv/\pW]rF_Ly>| χ?`9vqQSQ2DY0TW&z!EDD 3)-+e]RBD""0Xh,eYL}"v GE,!55O<yw:d(Y}M7/^! ^ϋ񐚚u <7}i h2hê+.z<*fc]yAdP;6N|;I+•'TW/""7pfsN.j229昣-Ǿ.r)Lxm L$µ)|M 0Wn.\To6o2Zb&-X}h ۑޚ{׳fBp|l8^K!WjmDBuV-ېSwZ3ǃ磸*RRRHIImѳT̬,RO?LڣZsGpgr^N!WjadPitvq\q\q=raYd,˪;O4ru (nkjzN {@jj*n eQ \^i,--2-hvnDDDv'uiiiAI$ջ"55_᫹Wmذig4ypzӦm-hvnDDDv'=0 epWff&a[wzz]4Bs%"";)Jgdff&WQZ/KcrEDDDqrEDDDqraE""""Rnh M H%J.i "4egM ??Յ)'󇊈H#*V&???Jv&+R4d@*dl8MB!dgeՅ]ٽ4&WDDDDG!WDDDDG!WDDDDG!WDDDDG!WDDDDG!WDDDDG!WDDDDGm"eee.\A_ Bo Mu7Щc]WDDDU{Y_|Tu4\ .\> pEDDdSX&Jv&PUU+"""4(䊈(䊈(䊈(䊈(䊈(䊈$kՋ;&> %a$~$DD DDLX0 ܾLt;Q][J>zt WtP.}H-fL䏟!t|Xj'7 {`HT*rEDϠߟH2+yajjbNy5y8bء ?>-pV䫻BDd 54*ΜΠACq5<XsyAt-|)$7lw$ׁTx|6ݺToH#oi~ހV%tjywk\3'z.mYؤ1x3x0ug]u5""zrED~%۪706F&).wp`l[?`zӊgoNgp_yd[mRU|-f(",}=fD7U{zq76m*1=Vo;EG-0wD%lADD~7w#nFJQ?TAWÅ<ֆ~3 0Rvf{w󷏖SK7q\mF)䊈$3WJ.lw./~So}fn.k.k99U33Ixz Tq#|wBmÚwƈMS#o~7ׯhH\< 5퍗20=o.XD'WDE ?GofQQP"zk,"diRï_ïK&DDDDqrEDDDqrEDDDqrEDDDqrEDDDqrEDDDqrEDDDqrEDDDqrEDDDqrEDDDqrEDDDq{^5kcY*qˤM6'Wn^P\-"""PQQeKY]Xhfztꨀ+""`tؑ5k%WnXVBWDD7 ##۲e7PQQQ)ĚŽ3*Y%c]&ru"""_qqgL'Ky}Dv+f]72I|&½3+xhpVrH,Ͽ\.\HqQ ޿نܲjM8fsMQ@vzjRmFfGw*\Ver6\O>H$B>}ȥ*\pk63fyv`zuHª ;2[XsΌ=Çs!?vZ]}a5o^}1HM~ͼ""ԊK)..cY ~K-eMPiXW2 OAP,Yx9ɳ^H!w/UYVwHEiir6Kq[٩Sҷo_uF^XjUmJ,Х)7_<ȮZ.Ā[$\Y'/£OArL>;=^7Cι& ;v,&L`֬YgŽcyhZg숇KǝAn}8e2"ఞsŻ`yEC`ӭFO(i0osn:t?=]G7k~ȏGDdpܟ'W l[%os IDAT?aZ3tDk^iY3Ừ{"x .=Hzv1%\ 4iSn: E sh+(* l1{Iqbd/|@SQZ_̃7<9?Hή7 :t-6lx =z`㩧b?AmK?rWz<~P$p!yᙓ>dQiH$V1yJ,88FnXxcAr}HiZDdWqzI XX@δuеS% տxS y뭷81WqgңGfpmfuI5X-Rn`>Hp²_͚V( ɚKx+.7L^^YYYY/)Sp73d:t@nn.=}KZV$֋PjN` ;(* &TgՌY)ʷ{eHl}D<ͅcߤӓ>""M:/Wğ#Trĸŋqc4i!G͚ 0m*CѺ[U4&.k%Cܰ1oUy 5C998;tpb|ɩSuhٲ%_3f \s ~-<>={,&L#jElYrwQUwfI!"ҤIko(Yֶ/bYVwE]UmUPEQ"H!IfIN^ΝLz)[nt=LBsFڐq~/&\"SQVRZ?JKʐ,=êV⡇;0j(L0bN$,e߰+7ƚ{a[[ي~،E-;@!(d6oۦ=T?W9sQTT .~!߮wn~5z\qy=մGNS̵5l~gq{* 5kP:Fu'6vZLFɷo ; %6`ۊ:w0N7[odt<cƌbiA(.@A KWT]e^q{psK 1L@NGD%@fPRR;vO> 7܀߲ս{qff -E˧mHV0A}9J߉6mcLwӗ6gL_1wg/G{T|@DD+^;%=Tv)6<9 ߤ56XA3px+pEam{?:y̹Dl]1߬؊brO}&bP8BGPؾ};^/;P\rɥx秐m׎e.rd<:G<:G \\6f\;mr#C'ܿquN5U\n*h c [ۻG I{>V}ϔ2iҤvò1t`Y>E[h17V1]Z_(xB|yF+ *??7nD߾}e֯ŬY,C1кuk4. \G6PQT~n' qPL<63r\ s6}Z}X  Vf/ `O@~m)4x=</]}'1{ xm{eVKOu1zPt?jF}>ز=e|Ž{qaqE\/o,Q03,9\\=-Tv՘ޟ@.k{x,5%RƃôkzROHnGni1c۵@.fvk.㍷ՇUG<}-(OjGM0-4{&{ ^VbɁ˕-~"kuDVI([q 'sfwt2= 5qn5m:;Y?6m،#@k:ڭp$xUۺu+&3+VW\\?z,&ض-{άzS>˼8T'^aYμ eY.l۸So M{pre6سm1/-}w?Dqi 2RR{w"3-ל>Dygv5Y|ڟq;K8FA/=zbeY(QXR+ȋ[_r>X.?KQPŞπrcPVn.n6* *%*; WFLcOv#ٓO9ǝ$[ڵŅG_cgƴ3nǫ]M[;KQQ^b5F9pwc.lW6Z&{o!S'+ i(+,%eHkmaO+1uTl߾F ѯ_?,4KK_!]^ lEYE9$ƜǨq۴ѡSF#@NQ\TA6w*^ӓ83rj,^ Ǐ$y;;A:JfzTe *cS/3;V<滘y84>e;Q?{ oXW0>J>O 99Hll yUlTcK΅úuBɆ ح>b@ 7[odt<cƌbiA(.@A KWTR/P0i;V).D@1DopG׋fFrr2rptx~w^~ϼ2ڵn'l|qy7ٯ'MƶsP $<,n ˿ ;k-`!9 (m)>)l 3S]S$%%#77rƏ? V]wxWOl?+ǝ{W<7Z.dp(MF,ys6y65::v۶a(-)Ab?;~ٸ7L/My9$'zXH>'HƎsϰw<' {8[3m*%cw`B{qAqQ[,|ڋÎS6vfG]+wwc€Mgؐ [?.,iQホYvȌLD]+[QlV ﱓsD ?g?SSr#Js_۷oaK.4Ś-0ڑpl\nGgGgxXƌkGMn< řpƙ9T]sd2-nmm6$m lX=2G+ėg-бsgl;t@ơmѮu;t99HJJBDDԄ[fBfX :cnjC֭Ҹ+p? @EPI<)F>f\33CnmXdc_Q/[FӧO~=P|\_ TC;`eO VC3 2saLnme* ?]y%,˂G}ص};6[ dee15qvB~Ю]{C6cbtΘ||NUpj\Lp*&ǣ<]!*!,odˑB}d >UkG_檌7.Gs_wl880y:EUʱ˩8w\^{܏?]rW:J(*Ņc;±P-CQE%^! o5/OCq!21dDOl[[Λ!{١R,]aT,Y!"J@ םeK0[1}W|;1pSЪ-Ƃg[VQXbւ`#n_(OCq Z kaQ FX"\w-fO坆t  nݫayxjnT1" Kէ!a֚.Qm6 ¥\ ͎<WXf@\JAF w`T.ƂſBWyċR뙋VTJ/.P߾&i(\ߕ(Ƣ9pبpX</b F ٸa]"Y8of혻$9- m7=ee5(7m6G UsÐnor0̓=bmز%U[Qe^1%e5ؚWBQŐ۔Ĉ!IX`%Km1f!h=r \%a%w8D\w!Hh1z >[Tĝ眇\+}.#?ͼDX%(MICjUBZZ*PRb&٘fY*oG8Z-[QE%mW>ہ՛bLgbMJ  kqŗ hzlˏwEpۨ(s!JG՟򑒋ؗz+-e%7())3%a/ېqvr.okV[cN!8z8!f~ZcxP 5\pEH9e_ Xէ4X1Z +ǍnjBmqĈbGP/ŮWcs͕bᛯ</..%WpZxq`;_ ǝI(ŊW&@q$W(1:+&1ⲙȸq<(Ku||b+ߟڶŒkGpO2##I`.\.364gvr"g>/7ǻFY> w|Q}yxP:ŝ>W9Q{RtzQ?B,R.f ۶λ3ڵ]vcℳaYPRcɍT s׋z!eUc+d۵k. 󟙸'ŧ?\}>#\rصk<,.~t3f=uwTbJcH/N5""FS^wߊzMߋULnz؋_`緎olN2; j]m~nF3-[@V0nѯ__vݰ0vp'cȀ8Ɯy5m^S )T_t}5tȍt.YW/SQ{]"5Ny<;RλA 3{7z;.Z\rp λ;XV͸<:\>f1V̟f#`:rS6y2F.30׈[))6{x 8sIKAja;~rOgu}X>sE?dQ{w{1l<שیA.Ż3߫Q;f/m3IkCƠ`cS1;x1g1Yvx> LMDJ1Cg9|b\| q Nb>\VC3Y3e)DN2+3]p}n5RC{N29-.b3r fތ{o8 v: 0t`Ǡ۫WO[FM*^>eówmLtx{e6޾4< VT^c^2??663aS7+7ǣ{oڿI/|3 *W"3?Luz"Bn di>s""zڌg巍5jeer.F̏B +ܮD B[z.CiY9]}k)Z.¼|s[R: ICF y-4{!.7\h~1|;~*~O qWcDTSNR,9ܧ\sej>眎|-#3Kj_(q@&N!kɞE]V1yUؼW@Yi)d3 Y Аy(D628k!sԽK37dڵ VFtW\.]&23a>?矇Ͻ~[hުsWpl6P{]kq7_]I3j,Fg?rpz"Ff)|:QQ!7\|.|\'DDDQug+=իp۲nӃpp+#a2b÷boQr]>Pd9{ ͘~ߟUm^| ~T g gFJ;=K6L=kxc9,_fanW&Z榡e/o`7s0tћq \ vY֯܈|$9W$\!N5);L<) Lz%O^ˏsμMI hp1_8|.?1,߯ŗ^]va=j\'1L}пİ;_sҿ'CNwy & =4uҤI@DDMңs7Fe+V1eKb1k}OQ&k}3eӧoɷ l偹_XZOEO1^u}n?a88<5.PPy]FDDD1Ȳ,3qΙ8A(<*3XV2}.{h½m^`L/8_NDDD #UN5)XOjy-riX"""D,Ȝ${N:'D;Ț+j6o˫kI"""x;^m]\yGW{9ɺΚE;bz&/ܫK!"""Jd?#!s\7 rC~WPQ"Ǵ)j^9oTrML5fr,DDDDFe`oI}N2bJc\yq_h/4 *-!:Nx<x^Y0y^x<W5sm 2;LsS 6wsBmDDԄuvc PZu5;oqKOKǚfЭ׋5?t Ef`5{ŴVÙ׋IPl 꺾:}q\d""]C;fbb~x+dH[eAZi{be JNNFFzZi-[ȼ#NJi${r/9L}\PǨWuӋ"~T``B"x37"n͚e ++K ˲Z /tD*s!?m z/Tr+r&6j^Xb\jv[FDYldggEsf5q:=oMPɭ /ˋnz1X{dR=U=}ƒ3xN{9Vs9eO너(Q NH}l/&V!W .>]uZW&!"""J$*GUSIM?urs5k~hˆu.|QԋLL&"""Jƞze/fǝ\p"q;jlk="""DSR7e~PpN5u cZc]D雩eA͉ՙȯC%XXQLuSMҟG%FKpbB˾%"SmO8UC'F_ ;]LEGy}1=QQGW۴9q$T^wUL0iMfb zݏ_j;0V ӧOXGDDD(]Z}/í5 di$5u"ãPL}uWokTݥTHUcskc:skc}'pڛȱz^18XM\/DDDt0S8s `zTsCI5CQ{;jm7i~ywׇJ|zO=Zǧ@멺ɽu կ;:5Cu8qr T^Pgz}zA*Py}^_T?Pٓw݁5ַ9}?OީFDDDS_f5dz@ՏW?|zrbNջ 6́˩5[|uY2ɨW@*ש+j]1&ʱN'""wlp55QnQHMeЕAV_W#kjXX$SMwY}HP.}nbGͻEPc@uTW)^?ǕPp:u^5N_7$fQ5u]ҳڛj*W(*Dcs?bS&^SQ5yןӦ)n5 6́K]Sy/N5~T=ZO?\zfZU GcjVA`^}46 '""w2/HzipjzX4L=yEaU5=X+î1:>c$zT5TUl:ªMBYV:pB(jm8m jSaZџi=:Ur \zЩ\4vSnz]UߍU5qz uzOz8] r f5;0U]=h;s.~WG[=QN~GW%VOUUML{9&""1;dOUTSezM34psQc՗5}S=}k\( '[_aFsWujU{TO');\;G`l8U|]=:TM{961M5""DL5ޗB2 .P3sQέZc9D]'.QSgTj.׫aS`Z]LWQ /)XeMs\D+FØ`U]^4f X+ *ܪ TG;rw˰6^cI#jDDDM)HrsY3R@XߜVcUC`nkcEM$S4fȵQE c=O_+/ګW/ [="NY=~T]˱;S)sbr,N9DI\m8߽5Xjj5}lt/j(:ڈ= Wkr#af 3cE(?BuHP^mQSA݅*ϡ qȞeO8ؚP"YKDDLy\zݴF_'ꛪzu6" zX߯\7ՂuNPs"""29e8louCX^1՝RRc*?diuC]?F4|nXWcTMM5'zDDDt`9!XWcSMLkU]d_Z^c9{E֝&a(g \;iO8Xͩ^Y 5BPLĆi/kgsyL=<46 ֋HP)gɹ7oZ#TMMzrz"""iMAOjɞҹHRuD>i@ㄻN#낅`='kr8Չ(87Ys\S H硄>uP*ǩH:ًtnbZcB8""+q&5u<^ D>V4Z\NfbZn p1 U>n"jN ӅbK!.غ`=ɴT"qƸ&hՃ1DDD_" rUV=96Yc\v6s{DDDtD;;Sϩ6昨VPtԽODDDu녫qQ+A.ϣ.B'ToZ"""_pֆZ.FE<+{pz""DP, wmQsب@TUcwQtE+EzHׇ.˱"T][]G].QK˱czA+Z1Z WC?^(|K~>zh^Ssy)^,h=h^[[_%"""j DQᮾw}(;|.\C} 8DDDD4Tlǩi%""X79ωN,X|NuBWSxt hMx (15@k€Ţ&bCa;^C""" uְx6W""""""""""""""""""""""""""""""""""""""""""""""""?"vݫIENDB`qstardict/docs/en_GB/images/settings-run-in-background.png000066400000000000000000001671541453553600400241370ustar00rootroot00000000000000PNG  IHDR>C pHYs+ IDATxwxSu9I.{% QAPe@B",%W7I6MܯoFOB!B!B!B!B!B!B!B!B!B!B!B!(uFo!{ ]'B! [Qܷ#{!BNA`Qɂ# n@ nVBUD6n@ n˓}ʩ΄BrwY_D@ Dn]mǝbB!:ԺZ&znv!hy;_6 zB!D+hhu6am5;y< ѼaO9B!w| xYoAן֛}}!B_aںd ^L q0B!/+hP.(gp(nAClAia !" !}r oUO6d;һ+BOEkN( lDݢ Jp lӛ% !]*"F Ƞ_PP D #zS9ՄBQaz$}z #@ (zܺ; B!Dn;Wsp\9fZu{KUHB!Dk׮uBko޼i3mY <õ|WFLtLzξB!Gͣbz[o{nu1En4Gރ﻽zkCX;EA!3 epH]Y y{:vqA*`\)X[a[\fa\8@Hx0aQAh-",y'jɒKruuB!}qtuAӬ:]\r;y_k Y\dG%}g}`?Ov̦?6d4IXd(ZAEEQAE%SU 8rriItlB!(4Uf65y+A@:: W{l;:筣k?}Ƒ#GXj%r  .E{=TFz«a1n(`!B"g /ګچ_JP CyBm]_\O'=mo[L{\X,$$$`6I&j42rAQ@@L+`7B6 hh(o1B!p5 Ç=٤QѓkOk;C~Wٺm+|)ǏCxx8իWg|:tc5jz=S1*"#h԰3q?Yr%7mw^VV66Iҥۧv7ЪUKw/BBC]nK;vТEsl/'')S_`ĉlsǎ2m/'5'Yϸ`mYiάocEۂOUuzj9y۰`o Lvv6FB4*|\.\@SThF jn^Ƕ"\! O>aͯhܰ!YYZ7JÆ IMKcyGѣۻ2eN{x:o_ l6sEV\3ώc)i۹Ή'YpÐW_qaoq>s,ƨfaYWBn:uږÇɡQFN۷oرc'Ə`> 5bĉ2mUAp'M١k= 'VN h" EݮM^Zןy!`h4b000&M"uxJI*1eBX `T TrFbRK&cDP\9=>}zBNNݺu#$$8:w`qp.C e ,\aFpנA >-[^!C9tO}rūe0(_<ڵxv8xbS 2K/o}yX7d(q'{+۱c'>0~Əgɒo6mzcK/wf<5z ^?B jڳcNL}:gΘ3xe4Dͯ;v^p3Oٶl;fI\"mYQzksVu5϶ i5WU+*6`䐔ytI6K٘j473BA*BxcDDDдikuܕ}C W.Ӧʉ'ZGv<|՗t F odb{;jW_al鷔.]uƩӧp5ؽ{7KK5+Ww~6b VXqd&MnRF _$99ڵk^{U{]KJp' ^ߔSr},n)| \Ye_=%Kc+_~#˶ j/pjw;-Z4&u//.9:LeQvg<ۯk5`_䪪JPAҗB9 AF(`P Ү WRS;/>.MӸ1s&e<5z ۶mw&M_ cڵܹsWͿ4o֜а0.])):d*V 88U8UxYn={s}DFF6m\rtk(S4۶;w߽ ;rĉm*UеkENtz+UlO4Mnݺ(pr;t[^=l+*GAvWIѝM>1wTY{]]c0 y% f X*T5?ʁgBx%::$PUhB¸w߽‹/K/Ӽykֵ,X-[b60Mh-a+Hϟ?@eRr2e˕uk;zM6iӦ;Yb򔩼\t9 вsHOj?Veшd 1!reKޝ(-Z̜9p߽зoE_ &NIݷo_IS :~AeK7;Lv9k^swq7e2wV _: [!WQÕS*ۼߌ;0`4 ፦Mήݻh갺nZ5kj`0pM=X~wyfTb/Y†xutbcc9y$ÇjwpŊTVn@LL4/\Vͫx˗+ǰafJS^]~6{v~RBURҮݶMڶiáCxn$*VHf9\N_2hќ^|`cZl`47~e>CWQ.}ޛ}J^Wmìu N\]UQU% Jb H '* Mޅ``ox&bk^1͛t.]KXr5ÇSܹdrssٳg/a@^<|(IIITTX4Mc+77'N29/z|vŋXf;7IJJb\ކ9}4999$''?Q^= ;vr*fsv%+ DXX8GbJv8~o6o ӧYvG#5%J*EvVZh~0_N:nUg5jUmΣk>QDv@-u;At o'!_Q ÕJjP4JS6 hV>UŢd|d2,g58?C±#FP\9>;Vv6k3ffd2y:uLŊyhHZ;7b<#qL*Æ :&r,YYYܧ/MӦMyw^̛7G{,ԩ[oIڵڥ+#|2K\ݻlRRSEL4 X^{U>;s`4ԨQ^Jhh5G1w}wV)ϔ)S;o3_5ӡ}+ Ge)̍ݻӶm!DQkjUb5h\{0F`}ہvwY3_,笯եN}O)jn+?/2m}CVb0o[;/^B7!L~Gu`c$w4E279{̄nZr%sW_^=9>32y l!D`՗g'O8k\\Zl^F7ם] Ů]mWm Nbk( bɔf&\N5 37]bs8t萿s]ؼi3Y V^Cf'hnr5ϯ 3z`_vI'UUU$77\\(U[% IOtp{׍+W[oCtTK3=ڪLמY:\z8_h- EYngzB:}z'iwDsRIZBtߝ[ rU&B(^xa (8kks%6/`l;;t{W?uwU]+hdI<㤧c5Z& J^נFTUDxpQL<!B1pf[Q}ѝkoEv^a\wӝjGa)^WQUPjשCm/O"BgƵ mJ\[鎮;bQ(3G-wx8R!BUrl{23P Ξ GnQuW!$y.9Q-{"UIPt 8Aꭾ^B!DInr'ڲ\:W-SdaNe~!Qw 9Ef|&BQ:s7'n;=\am(IKO{ҷKeT@ЙcQ+& ^ii}s ﱠ(LT4jדbhK%~/#GB-/6cyCf\Jy+L;pԻlRPcx뵧=ѪL}颛Ԋtx7Պ]2fLx>T5R7vyf!P oϝs:n.@{vBk;͓# DKo>8_iOҡv)  :re:+G}|'<7!-\Sfᅬ!*Qůtڃ_bJ`JZ/sR- uij;I[xo\ѸM¿ {r2ekBVlC>Ŵ{Q.@^Q¨ܼGQxvk85";2#(T` F|ؼ+r ~ 6:+2: "h!<C5gm|0jO.O֎+0olvLC 3cquF.o2ڍ'=Àစkg9|> -fCmuvMgu֫^q)U;'#m"PrNf q?DQL۟3_q +i.s]*+ZáLze^\>/ϥ_8a zoП,N[˷q2C%Zڔ ?mړv{6Yr֧}_r^~é |vNPBgzW'H|V^!(~Qx*/g*Bц\_:dnp~yݟZqYl_kOi ~~IF( `9φEh4̓U}/65>1<K{wxu}U}.-Ǫw_cw66AAq4VkoHy/iH˼ߩju7>c 2(^z^rk,>;܊ǧAT652,}z&W8**MKzZt*:vѢc & Z–+!*Y2>?cJ=ٜRqy|^J'l2.$ ;-n7 " Eel o%`ʔ߰sߎGtփ%˱Xq9CGL(aUT&Z_!s TPh4n%gɂCh(D@2I)PSO[8].U0ǟ/!4QQBkrv->zM!`5FE%e7ĞY Yt{nF\@ k+˜eݷy.ԭX:Uǔ"˙ml>SZR>@Px)* uB2c2hyKoD@ ztTֽѰԏ1FM(t/ iR) US?.dqO;Ddj[XOMzoL[scs[`V"(W>[ֲx*XV-v_^ya#g3#dB:[0 Ի['cL*DNJ(oޏfKnKѳu)~7ӠQ58Lfд/79ùs}Ҹa[!EOnJT4L=4Ͷ]&ZIp4+u% 6ɆC;_6Sٻf2Fz|r#[ЭYJDS4O`݆6z>7e)4{3u"UtV;8aj6E|84)%Ybi^> T\^8y^g-oGR(W>`rؿa j[J(FoکPE|h߹7l%Qv[ o7$ .r(1ctE~;NBPh",St6;jyw3j49OLG#}S?Ob؆kq͉ $GLؿCS˖DB1NlLȿ+Q*2T hS>qT%stלs1/Z}G25&p1!\,}@p6/6FBEK iqԴ9I*E# O|?|L>&ؑtR\3)DG ḏZP_J4R.GQ)毅KXf)RB EP-yZ&7 q!KA%DV6pt%%)OLXdc&LďLFn6aUg4mQ$%LlXO⣹|>-E!2:J4q*iXtoQD^ـJ\| LlA!a#*,=ZޕCZ"Tǥ Mn #T+wa-e;@!5sDFul )Mld IfUK T/܃ ,3JCLX n{QڄYOÞCix@No۳?'fSt)3d(INH‚5TILH%:6:h%b&?^h$$ZihBg_rFndR-P`!1! G-ۀQg4ZTiL/0js *2)een݆׆v}ax<0u9;%s4!}K!coQ&YNv lbk__GK`Gﳾ£Lܔ8Fڷ~/=/j$i$&{RˇBy")Mb7&cԿq.~uZt$]Ď%p*OHdGQ̹:O.+' {v w"Yf Kv 2Z7ѿ^ eyK9۾/f7 ٕlK*/bs|g1`JNrTuUDL–lj9N] WnpL`lB>9[/䠡aJ=ɾ# X5:#d͂Bt\Th?5NFwʞE߳W*4'Nr1yXS8{ %֑׼` ZҺ_l7r44Sg&cF%":3'` ]WXnf+8f-~]uUڜJfDEjCLʁ?ٝ~i]Ԗ*䇥;.DL;IJJeU$FT$p Q6DL_?Ӯڷ~иcM| ۗdZ5-B0FqaR,9ް>˅?Yyr4aC* Z5 '*YطO UؼLnZx|6-cMZ6Uٺ7NdUF0uVؔ \.Р}F4ReOَt[ҍ1o#% N C[́\449v*͒AeRժUϲyN] cMڶ a9b-HBhԩ5k4̀ƙq9~綘5K+D-@p,U*c4b"횒{~= Y 0sN*Zz`@W^ Dp }|k#dr6Jp$+צs\sB*_FYk"f{y{roJ[ iǰ4>}eVcf&>z￙vf.sDVi_=ooNcɡ"*aĄ鳏g&,Ԡ0*ԤixF 7j8_-''] M3yP,e;x{WخhmO0|:)UaA4 ~eFh[kg|4i !5F{Zޣ7:v.i aej'͙ ǗΒm"("- qE^x0c-&Ō1=5 0PUmQǓ1E֠P>C2o/_E\lӮbӊ*>bӤG3{Fj7MڃNh 5[/5\ ݏ/9;aeiԳ+O ^#]ABP4MҦT7oX{ꝇJŎ7Puq>yw<_O2q42,#<^2_oFTC-E( z{'G]OKf2v|d$dES՝<: 2EX:Zæs[?~;y%( * Jy*e_Ǣ\qG)w'BQSd;/ r\uCG+z6ܶ^[/ӂ˯L6jԨ <vuV,* "}%cn^L1wivmxHD`11,iyӼӫ=13Rw\=}~B1{쳓'MH^%'dcM3[l.MUͥ%:+y˸3*%]݊p+× iGvt^D}'i+=Bq2S xVzJw&pb6%:yrҫS!(*#YBIʭ^IiWB11B!#22ʕ+s9OW3rB!2 #rB!D#!W!B8rB!D#!W!B8rB!D#!W!B8% .))Sϐ!"(BDD8*U".6)$$Ν@ՉpB._NSt +SPJe B!p(22ʕ*qD[% !¥im,$rB!D#!W!B8rB!D#!W!B8rB!D#!W! L#u:XY X[$͇b+wp1pBQRIB\W.w 7¼BۇZ3# uR8/N.oByB\?,Nz^r k?!Uhߣe ųcw5*5F$: !BBa9 jq}\?=ݠ/vn~#Ũ9p|~N~NX?!~=жCwn1srg^~^n݋.]0hBe97˼qsgLd [t{?>¥+K Y#;sВB B넙~oS>&a5{j2K–O.`qs}4v/W|46R6=Gd/hudJD nCo=JӾUUr}RXߦ@_&6yK^>wRuB됴+!J<ˉ_Xvա|+Wr*j@3\+OidO~LUD*ͷ+1=o O>g[B.Xx$gSQEB9+eڬKlYICCC**wGdzKh)49Ѡow;BH%WQҙ8Ï8bNnDAͻQgTq$j+L,j~=|i<=M^ԃ*M֜xx&f<5QDTB> ZqM4NMσsߤV2f*o87OOE D;1cpUB냻˲i붷?֚jl.UFA6?׃loʴGUaor[ !E)n=λ TB]Bhl]6n-ײE ;{쳓'M @u|msmySfͥ%;5?WmC%D{B!D[OǸnΝ=Q̩ףh9'{(B!D@[D̝;K04}:|B !BGBB!(q$ !BGBB!(q3?IxsO̘-cPYB!1 ~,BUB vc L7i wB!Ř+ɮ$377pUTD7KB!) ~bQ Vd j$4,ǹ;S{2`A> 49>hQ.% _HYc. m0e=Bӱ }q9ǮD4nFy}]!HԤDޝEZrҕkx X]жLY4}u?~4n/,:v#3]ņ_?ばSkm5K'c+X^XUJצș,eUhh${sE۸oC*U> +ᢂ}PZԁ\}xcQGZCU+ߌ!DrRmdYv^@^w9/Hf|JnsPձYsk`g݌S`S/ #≯Q%%)CKp?_B5(f𤎮d¯_W^> 9vax?ŵtL>{uň-RFb|[xH eqMN Q2ŝ"^5biZ:I)fY⃟B!)ɽ{y3xLUR8> QJ%@ז0ei W)5ks֭LZ24<=!u#-$/~&N冷Jb/+xż[9`IW3HO/i.]RIp >*NRHJ)ZU 'Du@ezi7B!$# nي)[mjpbRL?/\6|A'i@DE,;^feQI6RV9ȉĺWsqdVʒ_S1y4g D"z,mMg'ƙFI\u9=KX}F_ir~9%K ;1j]>S9:Vï֎uaxC_gŬ:!crBJ+CܽdJtg>6c[CϽcX3}Ńյ JT֔TLy.4=Q&=8sQ6~v$3L= ][ϪB!},>idi0XZY,[,-ǽ3ne9 $$8v{M;Qtѣ >ᵜnWr4X6Zڊzy~fz{Ү*=Bܿt]g5# Xݙ3g1)fr[N,,&qbX[(fZ/VxhEYkpRR &rnps4qD]S1as&w']WnL=EӧKZhAXb^/v{{dxjg⺱tl׉Sktj[h~NMxῗ'rH .:Ka4鿘j5ߗw(B[l:_L)S%hms' =Iza2;þ'1uƕPN0O'[}sw[~|voGh?!=jFֽysioX!; 6`(+-fx Fyd/#Oq%Lk璿F%FKF{Wn>S,#a/ipY֣ Odq TmIz\ڱ;a4,o+Pv=lDz,?kB7CZLHҏH={dOwʗ}{f(?k7$tP(?*f6*q1uei GP)tLfl5!azM${>>c[Zޡ_!'syI LgmJMaG6be.t9Ty|}>MPdxTx@5 ~cڳh@٘Nn%s=ĭlg^h]Gŀ1+Q~ش?RUpHJjG##vQYSjs>4(B$ ŭm_Wk!E&,q_l/C%2[$H՝@-= އ"FO vxn9FÄ]*?Dx; VhB8DO1]Ֆx] ;qsw%45}8cBrǎP^:Ԣi;S{`|Bi։&[(R!w׮b- G-3Uy;yr{y崽b 85'ݴ={onil6nBzvڟӻQz.D{oW ޠ:{'8UiΜ97GL73[dr`f1oΟ77l\W˿Q̴^­,.lc}אRɩOc6[ fSVfrαfRR BB _<+%5jT~4feUӓ5lM^£Aƽ.I!wRHzuK gG߰upi!BM+!B#!W!B B!HB!6GBB!9rEk !: w ]B!qv6I{{.v9B!g{..&IȽ3ddHB!( .Y$ wWaB!wB!6GBB!9rB!͑+B!l\!Bas$ !B#!W!BND81!B\ w; )) /QJB!(VtpĞ#By B!(+8w.KIr B!)WWWxHB!6GBB!9rB!͑+B!l\!Bas$ !}LGK;+g.<5̷}lk>~)71!]~]bs|%~]7f78R^q$Bq+kԀItLf}p[8NwC=j$ZʼbA!=6'u+BFb|[Xk\HP-tMCǍ>#f,$]9h0}C>xxy\_ר?Xׂh$zSd~<+4ҜN;<"P/ٽ1OUTQ ?ϦT{]R9#; vaEsmKVc)w!1_γt묬4 b(Ҿc9֗wzRS˭&W[0l!s߮NJ[l쫛kWU~F}KTPZ_H>jǾ A= Nbh|c>EHILyAWKRÞ[WTuT#I\djXDe||]1ThL׷۸_BxCp|k;cj40J "0!2hF d #F DI?np!ĽKO')Yl9W`cZY#QHEGųCzɽ6Y$gVa IDATN mb݁+W{xN_At|>,r.dWǨ.7{Is4P] Q%bxm Ofa"~"BxſզC{#|ɡd3hi|7GС̞q9$z`֌vx!<_{OFr-`-RRGeժs^;zuב1cJݗ'2Ogع[_xF!8k?I*]I)L[BL+}2Wj1og1oXno1o^̸$8xࠛ۽gUB:{'8UiΜ97GL73[dr`f1oΟ77jl\WukN% b26w  B!l\!Bas$ !B#!W!B B!HB!6GBB!9rB!͑+B!l\!Bas$ !B#!W!B B!HB!6GBB!9rB!ͱ+upf:yxFG(Bq[JIU^ +s4qĔY4t !BdB)9dvV\=`ωVv !BKI-%f[ T0i/H]DfѬRڕ!⟒{HKNӘ7HMJIK'гM3[rNN_<;8B!({\ZrG;6dVk=6ƩzoNJOa{t:oB!J"_<zx ;*VWs>ߔD2h웼ø*YZ9 mTJ.8?@0!F|ɯq0Z2gyļ%OǓeۃZ.:^Ά By獎T<lN#0~:F&3ᝎTTuR~^a+8ף< h޸'Fzb"d־YWLgMѿ1/ϘLw(j./K{8b£F;3~P!H-eI|4r2d,ܽ3 ݺvGg}ښnFaX1ܷ0k >]9fŹ\M>>N/yZaTJ>`x8cRWc$:{:i[3X] x_ 361mbWH;iKu/]eNůW٬,KOS?*2Ls&5%m9C`ŻTp'c{ H)aΤƣVP!=lDz,?kB7Cpg_!wtOE_>r iI9(x{MTT Ξ)J~ٶG]Xʕ|y2!BUճ>Mj;p)jH eBiQb/s .-~MGءu? 0t%[Qʋ#匓C߆cU׈3*`,v5yWCaͫG B!+ғ[< 80Ԏ =@h`S5r40蓩b㟞V3  lG#R-P 8<_ F_SaS5!7e_`ԓLv !r"'L䗅vDǍd(HIH2ЏbNC5k`0nFӡBq/{pfęA7rky:cیhFv}(W$0l!s߮NJ[lkt*n\}zDN |;&>86x%s[dzzj*\MuS%b<:xs%B WGݲ+Sbpo(r+G؛r1 - Lrj@N&EwMﮞGOJ@(9j >p4 в|:-L&%bF#ix!¦HO=˛fN:>`d%kx|Ǧ)1GG\5'R+/Qq}ыCz tj0YYn3P?48^aѴSPi;S3:M''jv`Q/kR0Ԅݙ.ec@3͘@ !6?ŵ+>idi0XZY,[,-ǽ3ne9 $$8v{v֧3-YfUk[[Q!]ٻo?AjHVmw̙Ǽ9z `ʿ"5ys -z}?TtZ/VxhEYkpRR &rn׿r4qD]&J$3M:8;~NW!_JBn)1kR-ࠂINMGK;{r632N7En+Uh1o=wK};^ 曮^/}BvriI|IV6sq<^ٞ4jֆcXsVHd=e߷~8R^iSI^\=.-9#Y2{Mk7r5vO~۷Oxwkjdib?4ݣۻ_}+f-kӬ˽_B8I>Ԥb{i n_Sb|%/p\fUtp'ATv(haGyNDEס|7拻jO"[мegyg GSu[0p~(1fr`=sfa? ]Mrh \Ib0{2d~rjՍiG̠gp|xwYhgƖ8>a(-;̲1Oʰ5iizToZilxũX#kۓ_5}z2ۧbvMNTݘwDһcaT6|ht@-"6_D,%.n^]iӪ%[>[ n;E"/Ć"͗o">mfR0☩-OѠ' i랼/dV׿sJj_A;~hATwY[fȉeôAtiՒVy&f%zrvlۚncF'upZ_Su;8]FYf7:s�O'ZGڲ=Ǭ/@F!&!&%Lc iI '3<JJ;v[OrD[w-6,`1̀vc0of<5C[OC]BpY4||)CQ؅иeᬼ6?mNm2C%5[m#s rl0%21F27lbitMΔYO4i[ldW1E%,χE1<XNK7=lmÔkٺsqY QagF}-6cQoGVO%o*M5slڙ,S8H5s.9e7.e\C 5EI^ViWB9fvf4i8Yw^9*}AMEvtVywL e8t]`'ֳeT"fܟ;k kt6,槇GMl]2{2cc*׌0b;QY9:|̺-ز3 &@^jyPfȼw.5x~\^ry:w|E9x{@qZX.g&֞O9/v쮕lMrQp Dm?4Kl;Y?_2T ajBOÖcyOC.EM :WVkUWTy/dzf1 rޠwy_99A-w} ݅wm~Ѕl썕y-\zͮ& p y52cHToB = 1.sʞ6J yv(>( uk>7bzn\PU7j?ޞ꧶#κ&? y8;9޴~t遊#4-[=G7kHPk՝Z=$8q;[+/QVOOSSEqL. u+'6X?}UH eBiQb/[+3gʄypjl5ի5kf)62dP;~@/ n>ŭm_OۗR8v6oEHܤP]1-P ;@?~WG'8Jss8BPB]dcd:g#Xׂz IF*_}+~ WàOzZμ29"*X5^=MbÂXӟ*jn͵ۮle(.\4Ğ"ǩq) qۆNr4̰JvT,o:uU|/TMy7^q꼣7>ni$I.'sLGv9͵-`qnXO>bNA״k:%SOȩ{|g,dK0= o5 !({7', 0xR0Ŝg07PPJF\3vTy}˾5-Wj;Q9Ƿ0F~_`'&n69L!9Ӽlغߪd'ў.㟿n./$a)VTRO0CWRIͽTcm:BqlͨnTExseo0̚>^??駏d{yrf臱<=wWsC5fr׌8U7|NT1<_ʏ_[& t^{szȊz&IWб{#@|=_?[ȆEw7{,nS@&f˯3}eMPW8vC'T󑯴 !5d= 薭X+퀫džs> &s&-g!G(w[}jOws)+gar·j74u\ 5#Ĵ?^~Hb+*x4 o+p›*4Αs ʨZa~>Nfa"B%*fkDeӢc3r/~Tꏽ)ϯSdM;G5RRp IU/hi[LɉWVE7T$[^(ՙ;%ǒ0zNr5roƪzȚٷt1͠Wa9aՊCl/堣cJ=˱S ׍QcaR|~B_8Y3t8z TWjTG!Wx&V{7',;?exE~SrӫÕ'r4QYO>_:!u_~!zjW#ŏWT!yQ;)&Lb^1G2}L&Fwaf {:t/rbB7}DV৺Щwys4%k}ŝ}׈Z@k XF'ʞGz3x|<ӥGK퍅y.͞adOݝ)Ӹ+w_3sp<@ݗ'2Ogع[_Cca6qޗq♷&QW`{|O2 8W"tX4W!e+fqJO)frOZ̴BUy;yr{y崽b 85'ݴ={oڮtr_=c٬jzk+ !➣:{'8UiΜ97G!"5ysefſZbnf1_tek W(% `">~`u !B܈ W(%qb,>a}7[?ψ kFCxoufOTv^oW mƱeKUh13d;dMb-g/е][".+)r>6V2iFx{ӵMMB;8_gp|xwYhgƖ8 _izToZilb6893z<\9mfR05?|cq40՞hIhx:̦/yDD/dYLGI K5layPIq%ƩيV692#9l6.Z֪3ĬTAKdϼW*fZX-9p7]zYԌܾm U0qGhHNN.Mrr2{kc  hk0 w,?~?˳1[n3 IDATYmXb #N:e+,ɞqh՞  q3cx3G/cwX/ޟ:1glZ{O%J{V*F/d*O b|&6/XxnyDMm~dxw~2H&bښMl]9Iؙr}B0TJ̴yĹdT92!ƍsZwL_=O;f*ٶ[Ew~ UoZXqy՛yS9`K6eb ,y0a{ #ȶ-kY6m(ñO9ZgD䵹?Nº@O`2)6ޖ1ΟKP2SwVz5RG7'ܦECժqĉbnrr2Oj'!H=-4ob_x֬9)wާU%wb[5TՍڏ-ˋɏvC^yN7OW<#kY4) ekO?|F7ƥ+mN5r4 bykΕ_X྄2DĐu*&^^x)WAߗrU+ZXҍTJo^؟Eg^*U=x. ӑќږLS:I)f]=~>xsIqerh̘ΑT_@BAFparm_fey5C2oa>jtY*(V7M>fGp;rQγt묬4 bA f$_=/\F?\.^H烪dB| TRsF_ꆏщ*}?\KPQw坰$r+x7q!ZB< :˛҅(^Y+;I7گ{HL#Y>Ȉџ-cdâ]$yHxiY{L^rT(x 8p% Q GS{bCu|GފĥbI/x㽍p;[=$NBK zErgEWrņر_PzoҋZ(!fwGX !~'Ovv̜9sf3gf|z&³{|ֿ\5I'KqF w^UΌ?c[ {q*{b砞-EV4ldyOnCYi亇놛[͟ş039'y3b4aRb@:4stY˘69 C\rŪVv7o~䛞I<+ąGqW[1oܽ0j0}w o7N`Vcpg=1t4&My[_xG~3'0OiY[̧gVf9ɟ'Zus+-47/= uNk6[檙)Dωyjl0:?_>#QYvh+1 9?׎W5կ.:=pj}Z=ViR~w9=6_IpGR걂C}"+?&BHwFMrhELJK3YLoO-ҏ{h5B!IHf3]vilĜ$<(x{ ;B!K+!B&G\!BH+B! rQ]|T禪.T\ !ݝR thTUwG\Zv!yzzRZZJAa+[qwwӳ$ABE / g! B!ɑ W!B49 !B&G\!BH+B! rB!D#AB!hr=Bqr2-Ί2( K W!~Bs-? 8#GS$m]A!~i鴉j% ^Djɴ_B;J+eҍQH+B! rB!D#AB!hr$B!MB!ɑ W!B49䊿 HVb[0w} / y}hTU7^5#E#'!<:"MM+d}yfEQ0}㊻>r( W=p[37^!.Sf}&6.'ԗY5vB?lI Y%{'Z$m&[?)!h*$mT pbOTQSkfwk\}z_ JH$ad~ܚj|xab=鷍'~`"ï'mv/νiƍ5m׏'q3Fw|.G&F Ofl'XLA#pLِ5쏘rh&2Y<<7&RL̫7! 0`[sDŏ㖗WR[c y&1fpFq߲ͣpޞ^8u'>/!^Ϭ\?b_??KHg4<^}{l/64M72o,7בu*;Y& @F Sk hEl~ WBXz gq1Q=|#oZ\f ! r(>>=B_mO<|u9l7ǒ+Y/~Ǿ?q*R]`^q)/7[[jfOdl.]ɚbkv}L[˲^SOͿ}|lK?տxuݙ'S}tzw-[OiB b K'ZCd՚E|35I+kNye+XrNnk杙\V^s־fWrsXv!*ߒsWd7c->#lfmYll~ -~5 y{h>w{-Zɪ/n}|:W0|h)7=;Kk/{nc|GYs~/_MFCx9o-a q&S> J}ǎXaܩ<1'_fp[ٌ-3|s8œ>yŬߴjf˟~f*|}\A^Ҏ-hR$mvvu tw#z~c5{ͽ)e1ۛOC1+`j6ns630a@BM#<-e'(4]I]p&i! 's[Wsv x$GA=yt{A0xvsƹԙnqUb ON~as=yI^ĵֹ.gku n QahPMWjcbBNhL+.4-Aq);3[.R&\{#= x؏Y'Iwzt +Rs-=׃ޯ 7^ >Lx|6!Ț<)+Y|+Ls=&PZ6sGebnzysm-c\y5t`nۏ^02?dVDo厢x~`sҁ9r}[QY=g;zFO7ur#/txV%tx }I%י?0nup[ +ƀ(bOo]Q4<7Erw])*8w)vt^tot8i*':Q0Ӽ9 mSc$B49Y0M<,dEf@%? <5GH0y@@Sd7Asj* +gݷt4UEC%?%g#7<6fNkSeE[8;=:%;D7@X;:UNRgFaA1JpS;Oϧ0o邯 ͩb2v澏^>A|y~r:hXEr^Yu):tUvt>) L!D$AeI2V!RQEw=ΦT M{Σ덖M ΍^z=~UՇooc tM@JDuِA׿urY8Z^.*TJLXhp3&D̃Z\ܪY=OMu +();qŃr}{*?Io¯{[[9uR* ε:<NQOAr*40*Ή ) 3mkR555ʽk+x?MQ{[ f2 WOxxm;CT/+# o7)sn{ꢠo?Ŀ??OO?=z>iLNgtJ[i ˞8ee'Kщg#-pLwX4̢f\CGtI->N TR2*E clv>yo-'+T@,c?3ϝ.7}폇28Ot4׏m_hDMe#o<чfШ8o״lѢ*4tD[١?Rw&dKc߾,*TD6UZl|"Բs9P!N@S/0teDԒU|y~8Xb6֛:ZC{n{a ӟ`Vc5a,yG5_1<Γ3ͭ3a}e7y͋6>'3+Lv8Yz|cpW/邆syXGd&/kh7>^}o~z ?ݏnWdҹyS>m:[G>gwD_W !DpT]RgNΫ뜆 NzFaC͟gsӟ{u}b48ݦ[\NWTm|ѯxQ⏷i tQ4ggg7&܄4UkۧwlVѽK˝5kVƴ'FupUg ;: ;jT?p9W9tgS4|8i\ rbDUU55е-%9BWIw!.+7&Uރqx~x4vքB? rXu̾!τwIB?/ B! rB!D#ABNʅ/EC\!<==(.7" !"KG>]!O !B&G\!BH+B! rB!D#AB!hr$B!MB!ɑ W!B49 !B&G~XVPXT.Qt:|}|l6_ !ByIH@lz8I!9]v9B! 6Q]pz=mZSXTt s&B'An#TZz ynSoKX0z7KE+g^͠DOz]џI%Lku{X qC9i cc5`W< Rc`|w0Iנ|9Qɚ+X$~.-/G%gًL1øjlRT'؞33p$#N)( IDATspwx_6Cꪃ ,c5 sj.6B?ǚ-w=6õop:4!ߘR%{'ZԲT†`ѡ?U%d1ieR0L]7׆x+i]aqi3;6d "\Jrb&6MS(_yx fSxK>8G$!Wp˳߳X_xjf&$fe)^2'>SS+]zfu5Iw//MySS+Yzr o"}t%O3nxym5_Wa5}%O(/p Od5t;fh{!}ܗbD%gb_<2Ih!Ai3W.e0aP<3;XHzg^*$$FT$~v#q<l'XLA#pL6QwUOxx8&OUtHW U.?s?|#Q\3segt]ih8Xw]1FrϦJ. _g& zW'y8d~_H½2d!?InʾׯnYKM~wI;Ykd! r5~fގw7ﻖ?l|2:W^e S?ocL`%^ͽn [y/71w|JEzBKH&F*a-wӟ&۫j6k6hVZcbƷ$;5ϧNcM|lkն2}.u+bTT 64KVĎG9M@vGcd2f?2QO̕xy 1hⅳyvkg2|F6kcl|6(Y-;<ƷKW)o(FS3(>KVdyXŏScC7܂Uo^0f]΂G`盿M f sfrmsx5V/ˇ"Xj]d^Wri߫#b\F^=?⟶RqNº`m8,ٽ|\nEnx,XųS>ūW^s3Tj})fw]~ՕSMWޙǚ}KW&s^ތeޓl60cj"Wּy,Ĝ^B\Brij1uツnrj=4gutՃNۄ8"N5e%SqA4gԝWgx+6v98v#JI6Ŗ R)Od|K z)Y~8Ve,o60fn˂{mEg򘖸ΐ~2MM^1q&؅빶\ϝ 7S]*%\ߢa$dm\ G~N@;fe/p tՃ΋ocnXkRs 0ALb?]rѮLg0=Bi٬n47$U>&txCC.蠥gʀ~0YWq}stZ1kB5f akbmh6&>aRԲ'}[{c@]_z[|c}3IP:Xօk1c2XlM5A~N6Vw]\7$ b bꭔ4_ !!Anxe=/Ղ99Ģw/4u6?B`,]p3 {e6J b˖u{)߿]^kQio_oNw: <{ lH 0T)4UEÓkuÓ|)..W֜ux.:Ox.D'؏ hXE^^Yury;SY|/ȣ3{uֿMT Q Yd++"{w[We}I:r@-X% {8<ߪjA-$;O:3_VQDaY:#|"HNfS VEVfAN<1>M N}y Df*NKFvmA4?>df;!UI1Qo괚SpBψꟿlr*\Td|?\ ʱ?shoo쟻cE3]~×_/?}gb+3:Xzֻz9r*dgt+:Oگ" QS|2 +;9y;DDŽ5u2>f_gUU`чɈ@?m`KȉDW ξϗf-:Q{f*CN/19ABa&,ԝITյ2o>O=YECjxp<0倦;~(c2w|Χ2rdojs\ :cZبjIw.ש| |W3k>m< mf1Kv:@-Бn .JdH~=YŞ6O[bH|z2c9؂# :grִ|m q]ȝb0ߧu`rKU~pfİؽb俹u#\1u&_ !A>teDԒL>V&ya0~$|3#63KS'0+ώ13㞘?:hVәz3f?81A W;{rbM ۟ͧ#㟮-xL ӯNVߘ!zZCYi?},ՉӰ2ky+x3ۊ|E]a6[檙)DωyjlMWux;t"o|~SY~%G;g՞uu|VӰiX44lslt~n{。;t6oip5k1b 3eIxAƺF,; ߙ=~uB_#%T qY4-[ۧKݥΚ5+cړOL8?׎W5vlN5ju|;jNgsƕ F#)8u8>%̙hOj{!Z},?йG܂ugBO$&&II9Pt:|}|Ĺ2gxxj:%v %1k\B!$An#1tڥ!.C:AߎIͤǟ0!C+!B&G\!BH+B! rB!D#AB!hr$B!MB!ɑ W!B49 !B&G~L!%UV^NaaV"FAd6냻$ABKR0M!PVb ttWBq-K2PPXYK W!%c$i& K W!B49 !B&G\!BH+B! rB!D#AB!hr$+Qٽd;zY_l4YzUܰy?c}Sjj>,WVNNV-O?/bKf=B9 I^MrG~쏦rmGӯSk[c H\[h:/wWqQ~b/+#46/TK}h/]L˧ /Zv!}SؕG 7ir=}!AQtq`qiuVr͛^lۜadM(M#CGvSMZfJ"P\ i[ІHW\x^|5E|҃ Q۷]җ@Jei!EO.أ2'M(rN~ ~TjEl_;z`w"L (<`//-ljbhB<ͱt#~ fu 0x3'Y64ńGjbnv&ST`S{8Ve'vaOj!#z2P`Wխ'շmzhůT=k{Ng?i/DzKbīeO`t7' Tuݭ#- Z چPr-ڵw[FIX^lm9#ȯ@s Mdeω|[tOpJNCdWRPpg( `;t2er JՈWx{zuk@,}/;v'Z^uEjV2ncr*m,2}ݛ9(<Z5 ؕa,yI=YQk~fUds)zBv[[LTWFp ƽ&fєArZ16l݅BjZWl$ʞ٪P ڋ.as.Y)~t8w([%㰑j }ҿY߹98ޡmҥ5&JfN:'&WŠasZhCe;幑:ɯYӟz+<۱4Aj.$L-؃ۀ!tӪG'|r<΃lGu`:t :#2# 0hg#0;(JG_4RKh1 O莗RSmE^bķu ͕ϩ}MGP{, o$QAft4kZNt̡im6 ]H(_gB}b +sS<#h :K3 ʬ [w Fve'DѴ6-ѡ8tm凛=Q+9B?Ą`с=֡i"z2865u.gVNxE{5'9T5X<B5=!xY+p\ n<{׾t 6T"ZI:Y Dvh%85Ϥi]:iĠŦa}|zKۡzvl9 Q~F́a)+;'ѷ@3:7/OuƎ:o iY@6!\Pb,Z,K4zFh'8^JP#);^x&N+"؇1+Yz  S3(t3yt5x4E.x:LAv>ve"ˀ û$:n ۤtar0@E~=%;1q!G.OMfr[LTNDCe,<~:C bfShڹ)/ו{[ѱK4g6jV+V5IRi3mq7,n*UuEQ r ͩLnfNVP FLj'װeU8P*rZSf* V=f삪VEU-9(aNӳ@DaײNuQ܆mZ͡YāQLfN,nmJ:rv)%PPJU-{LKžc3Zps' V*mZgCF@qTWӟbvjMjp rI1`v{լ疭I0Tݠt?=AQM NVک2#7+Afg/8PtӃ)x|"hE{ui*FufF˯V9*iM7퀣̣)R)(R)WUd< Bˏ4ń*+0>Lk: mՑ]l+n#`v3n C{ƃr:O.}iٱ=زŀv8wMUfLUTq3[)PLUR^ͭ6s=/̖ƯtQI߲gaɍ&TVb]а۪\kRuTWOT[1;,f̆PڏSU~z`;$uU(BX^Q^fF{\W,ğ6aw |BZл4z@sP||I%=z]KwG)ތwX:}~,ICDOFt@DL(j|=*͈wTou¯}=%c* &p:D\)GgsrN=CiG齢ݳI˙Uo1UZzcHguMK[ТGtmzE[:DuǢR̞EY`ܜqQҤbԺ7=ZT!Ԭ:ئab;>N'ݝ@6Y a1(0YEP=383baDǙIJX B IssRuʫԭ[VgG&=SGWAI8MZ>-}f{}oJcϜ#5cZ|ڮQ?m>ӝ9$Kzn>ſZ1:廑FGZuPm]cԌ{sި./W cvdu;V6=[z⮇1PQӪ?ĽWq{gs}{h~S^Su5A{pu??x_jkWG$s6aƭ{Lw=5twI=Xf &7Z'G˷6ZhҞiʲgtݿӨNΜ)68n :u -&o3l+9uO6rIRfw(ccsyΟ??a|!5ywy@=GxvN|>;Z-폎o?hmؚX|mCZ:=r o^{z+s wazEHgPC?#r4^6wh1hWDzvVpϫoX9i @Bj&{i6Rߠ-Avģ]ZZE)=|20?v:<hXK }ծC8V'hQ335.hW@p!P7RWJ%I;hB.n:;;m[´m[:yg8W7z91rJCw݆ 8ه3"ru%IziSHRRNMЫf̈DUww׫a\ rBnp_H>uӭ> Pp}}wW3fh5s 4p@mWkƌ> r` gWTtpRI==ݚ1c&e@ȭ&vX 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!!fP*}`"dC͠[}}}`۬fFKhӦi4sL4p׷Y_Ӧ7PZ !7^I]-[4h@J4}t?هRvPL 8\ Đ[hDgPCab`3R!7 O` h`2U'@.e-YXl/7pZJ6{wfrYV҆400Р# CGG&N{󜳖[r]j°dŋ֒}ؾ3هRnoQKV;wU9GaOkUkzu-v[]!r~Xz  cFk艵$ݰq U6lP.>-^;h-՞c``[<<.:W׉kGYE r K .)z>?QPH!Z[d#*3!V{|IsZH@j_!r=qVB{ySS+EXVq'3;#IRэ7ݬnU˗$͚N?qi*~ FTN*BBZմ~zbؾ]O>hp֬Y|,x-׿~usO~s}cgi͚5>̪ g t[h—wjLvjFzr􋸶P۷닗] oיf딷M:*ї1T6K~zgpw}J[>VTt%C? fn2yr5C'wޯG{Y !.}y< ȐU3#=z>{5jL>\ ]5fž:/SKwn՟o׭mLy]q֡i4w-瞣G׿zοbg=cM~~wN]iZ(utYs鰩mReB'c֜w|\_?iPԯ%Ug]S}S4蹚= e֕o?w;J~o~Iڢgn]4OsyyWId4ci.ؓGHRॊ hm۶Ϝ1ݺt$\IڲlVL!}wLSo[Wh!7KmisVzvضm۶j%Vϸ/=ŞzMIwemz5j\ZҴ/ڒLYoTydڦ&RIchk/_?8^j7UGM|AX~~Io=3}L{Mmս?uܯGmmcu7*o\MոQ-iq B~P;zf\ɻ]mW{[E4Nk7N)V5ּE|;xs:ӲzescHjn19W/s&椓O:WW?[˟|\_h&>Y߫Ԟ::hY}r5үu^ojmS{hҺ\?Q{USOwO*z3N?}u2[CX1:b]~kA73:'hҸ֏m.?w.w.wG>e,.lmzzTpHmr=C49}uOƆ\U 򚥴yIJzfislo3֣vkcr5ֱc0F^uϟ;~: >ԥ^;[yFwQw}F.^rfϞjE^XpK4ekX'V1s=ZnnKv $I,iv 4qۤ(R38]gqzUg5^*x6R$؏OY^չ7r&9i/O S4WVir Tiⲗ;yiiK*ehwV*]MSݵqfĪ5[KMߴUff/M5,[vU+ZB Q%gprUBKO1m*VB.=qJ+fܸDzL|?m }#XWGnjm>8ѡQёί5JfUc]*M+C\kZjTMzþ׾k_dFkVo]A [/hVouwu멧&V_O=>5K24 YnCW "EG|sN.! I:j8-}an{?i)=oB>.qSڗ uvvGSNTWU6kږar7; x}%uM!`ϚkBoJ:p|)fޮc{4~Ĺ*J7FLTbWjGot|g=U3*f-'# W#\TRooz{{}(A<7ŠWPr^ϓMԴ- uW+$ʓ~}A|dmqP̶BgMzi}}#~|%1*.ܦMrn!ܤ7ð',۽(!2zџAcLƸe>_zRa٫wW1{thW >zA@]d*iSJn iIJǤ~052N\fҸ=rRknm4'1\cfBA FIyXkSmOk EBR3ot 2[nW~J* Jz= R,IAFHozr@bU\_?nڬ.X(7^ % /v"$-Z / yoS45^if?r-Z{5n,ac/iq˲㶙UR @oGE\ekZ6EW{5gShyvO]m q%ٮ`Wd] *=fVsexd@C'zo9fܨrlVJy<2 ix-[|? -B+E뫐*v4\b{;w$+߸knr]mq vl]7zP(~Ƣ;׏!~*ɮtUu@%:@"&Ba\߫]Yٵd}UdWu'xBoQ ¬f1kWK}XBy;1- j?X3к>( f;FX6_׮`oѮ@zJ-if+|W4n4p] 63ڷ B}|9Ǎ5UBn\UW1yvU 3ף\fYse;kEլig{}|2J!W,! ] c\M fuϳ5hz s} xI?c ޚu *rhLWۂ4<m @6pW L IDATB3k\cfJmT*q&Uo|4Mڐ:z)W7.\'cwEUv nf)[pk)4yZvףԿ @\&) zkZV`w1գ7~oiCT*}sE0ն`F5q]h߾ a^nH i-,^]t̀kor}~:zt<&EiW+Ǎּ, m6afKؕܲW`eWu*sk[mIᗐ k­/ZJe@:~{7F3C]vڡml1n}W5 %亪-.s]<_5nW`]o'VU˱l]A~q)zw9_+`+ v6 f6Cٛk^4fZ4׾||ʭ>IA7K~iBn\Q]A+`z}љpeռq6}e[zn}s}?}E`j_& ;Vvؼ~/v<_u I [i*rl/Ƶ2qݤt\ĭ'mU\ab} H~㙹, m7_`^tVKƸ n\C/hWW0K{~}o3׬JÃ^]ߖ s /кKzn!7Zk_sܵlo>DrkVz]}Q5EU]Wϰ[3_6Ml|g*8]][3}o7}'ixmdȵ`Km;Ds]_kO f%6Ksk/VnzpӆWB. tiUܯ}a׵-)t zk]w]>6W߰΃'wy,UZ|>b];U[;JÃe= v6١uƅ٤ۤPKx 03MrӸ>[Wއ}|u E(wW݈o̮Fc]q;蚽spkDU^˕v vMn]aX/C5+s˾ pi6!K qc. Jź,nܮ&b,TcqwG0/@5zw= 6%Uhyn*~c[qUbŬDžZp+d.&₡oFuWo_qd~Ҿg[B.CP h\t$nm|ے޳^v27Q=*j9msUvM%6i׋\v4ClfUr+Wx8[ףok̷ I̤6Dv1x]!k_{94cUkJ VnMgbm3m؇ %>^6Z,!YBURqUd gRvY-Yewf}Mvsq r̉u yvܼYuc]Pr hڤmqAga5/ }Icq%!B%|MSø`+Ǽʭon>\:N[Ҷz+,OWht-l[v}Yk=ƽ?{oԇziDž41_?o9)&'x|-nٖkͮJVs]+vۂRۇ\˱v<9DžTUDžKs{ p֐ܤ.0TKGEܞe,M%8CRK 4..[j*Kk{pͷEjE 40ku/kCXk^ψ @u X\L[i2YoNs\ȭfڠzNZrct͍۞wj槭k Iت Tqӌ[͜j[ qO:{nܲ 0$ &^/KLju״O{5'"\xVh7~k3GqWش_7Ku7͘5[5NO,Ziփ,ܖQ^=zR`L[MM7uNK[gClj ryTt449qt|9> JyiZ\cIac4yoς0 ])k645i^i[˼A5/>T]%P_<{u}\ӄ4s3IRgHjtE׷jCiU[G.M^YYhش FrkWm;@,qͭW2WMMzNp ]Ruͭ&HV3W61֐60l^jͨF}{<o@p |uV^ ̐+5'0VSmͣB ֨ݸy=)W*F@k歲j v20rǛ4GlTKCĊuyz~hMy1jt[Cv쫈h)Qy{KHQQQn-mT4G* AHT=/0K8(f\VwZ"Zs[Y}v(11pipU~["+bnCjqy#Sg˄Ha[s:+Ђ[Oh4WfK[Sᬈרּ!TF0h]}h]x8GFtMB!|0\z?LCfJIENDB`qstardict/docs/en_GB/images/settings-start-with-system.png000066400000000000000000001671561453553600400242440ustar00rootroot00000000000000PNG  IHDR>C pHYs+ IDATxwxSu9I.[ (8@DFT@Y*B"` ٫$ Cv6-z%9眀B!B!B!B!B!B!B!B!B!B!B!B!p[!iE=kP!Aq>H@sM#!B# NH@!%5w_!B[L-ɡ?I!C?)JZ*SG!B %&pVX$.B!6t -voq{B!)PZlnq w?gB!aWcvk#B i=k"s g !w #Hw~v5hcxtŵ-BUEm.[p<٧L!oxj.wKD@vُ?^!B-_ZWCm]Zގcw^xlBZEvEt:y< ѼaOs"B:y^ 2z~ݢ Tp= ^O !D;jz~uUaW fB!Ab ʅxE*@Z}B!oOpEt\>_[|pӼ َ !SaںJ=;)QA0RA\o­/7fy B!(s׺ v2wтTjB!ĵS  sy[pl=O{nS!dp9j'c([CnA:˓@Mug}ie:B!(ToCPM-ʪnr]UK= 'f~A+B$yXo^ZچyG 2D'ZWAғjoܽjB!- g3Uwݛ1槪[ )p ~7a޲2B!𞷧rT}`\mEнCna\O­`neݙ'B .g= ^wa(n EQ4繻mx2g\!``4oRGazUq8[Ϟ"U-nuv Vw B!J:_'O&P, ^w#^Ir¨;U[lj<7^B'`d~Ygv鞶/xt}-i($::Xվޙ鵕\!W?v{gL;U^Gg_ppuG 5}BMun!7U<^aTt b;B!Dq*H70hon9gӒ~u[::u{+]t;-\gӝp_;{z湔+Łc.Mvtw*Az\gUZGîmf;FL~~q5/? !ő'aPh9GUW<-Jqe薵]:Mmv n{h3/]nWVm`U|ޘqh=o ! _+Y%W?U%YWo?=@M_ŵWu6g^GM?Mw>0xϓi*n-Һ;&ghueBVg˺wՁv= WK}Ul+juꭽi*o)J7U\WULwuY{[}pUzсё=FCm3 !B8b2̇W|{333s/ڶ3ث:jpuFt][Vч|)IA(O?3*]߽[3B!b6/^zǩS'^myA^9o_-H5wy|rۇ}^U'Tz:={쩪jq !B#EUZjռp>DjC7mڸͶ,M*ꊥ<õ|WFTdTzξB!{n""zYo{nu1En4Gރ﻽zkCX+EA!3 q? E<{=f;8?Xw0-艰-cj3͈1Ο;` (4 h`Qroi܃5MdɡjDEH!B>8:\ٺriLe?gu9[鯵ͅ^Y\dG%}g}`?Ov?6`4NHx0ZAEEQAE%SU 8|b7YtB!(0Uf65y+A7_ ;: W{l;:筣k?}ÇYr  /E}=T FZ«a>f`!BBg 7ګچ_JP CyBm]_\O'=mo[L{\X,c6I±K&jTs@Q@@T)`6Bhh(o1B!p5 yB!ayGL;I?G8ZЪEB?#N"0 z1d`իwy-[ǟpؿRZ5y)ʕ+1Qcؿ?O<9 !"<< s]Ou7| n,>o 3#RKѧwoyڻ֭epcܖ}۷yf>^vv6< ;xi4^|yO6i9fukNq"`YA(r-O'aTE%00,F UpCiC8.&GSTH jNnǶ"\!?f/#iԠ陙;鯾B HIMeʔxG޽;iݳ^/Z+0\p+V3c2e2[].s /X0~Z2ɥS9ZPBoa+xSצ`-gg^pH50  0Id@]8rT#7JMAJHHLdqthߞȨ(ʕ-ˠ;һw/>#RRΦk׮CN0 6la![ 1tp8aFy˖Ms_O4orݾ}׋ ?m˦cm `?e(Ԗ<2Uo~y*6a;檪z3Q`YdLl3Γf9s(U&xfP0H%Woڵ04irռΝw>Pua˯p+{ᇨU>_~:ua,^~XW3t},] Kv8Ʈ]rIΟ?ռ})v❷f7_Sc^:#{e_[of/_˯ĉ0`.YaØ $%%]u_t̫o×_~A鸫˹|G,?X`M2o?u[WXx=7hVA|VCnyfWR_n^^6•>Gyl9nW$Gڻn 'A=hhP.PNC@Goan( T+Ԕbbc΋A4.*ϘA:u;nO֭ۜnqFX۶m8{o͚6#8$9K.@rrU~W L JNdա}{k׮㮻aIOO`M-W]qJu=MppA\סǏߦ?\2]tFQj׮E./Wb8?D4ԩq+g>.SA7c*m϶Rnrdm7|){I݄|GZ}7?CnO{~\rϬ` b@UBx&W"#HLH;/!1UU 8${=o/<ҬYӫֵ_[`60Mhڕ-a*Hϝ;@ebReʖqk;zM4I&=wd)k\x=@вIOKj?Veшd !>eKqRwFDD .bӧO"Ή&$ݻvl Z)2%|lvwkMr 3;+/Un]{׭( F)Tmrf TmʩT0TTrF&MHKKc箝4mreX]n M6A5\id0Y]vѬYӫ*/fDGGs q2~C˩Z6H.@Wɗ+[C21͔n:mP,+^qMִiݚ섉TXfM}se <0,00exm޼/<^^hn^}Շ^ۯ ]Zo7+v{z?9*ۆY4%J @JD@M܁``ox&bbc@^>Mҥ4.^ȢEYbÆ 䩓ر$rrrؽ{A@nQD_-v;At o'!_Q JjP4JS&1)iZUŢl$-gr58?C±ÇSlYOsOEZ5ymp.'Ob1SB1V-sO5;y7Yj>0~;/ C'2*~r,ػI&Mx睷^̝;}Lj׮͛oAZҹ #xҥXo׮zw))ѼYs&O@tt4 ̙ˬٳ1TWO!88ڽ{wF #+e̙;Fh߮v#G0ids nhӦG0Y*mu֚y4>mu}#^;U܂ݙ/sWu{ЇVK}cA埩/M[p!X,̝k΅ (__`6c/z]!g7mgR'gMW`Μ9ʫԭ+9? x~[_}řI' "7h6-6yugzpkWwUSeدe*-`2~96׭s`6"=B̍zqǀ;xgi6Vr9h~0f^~>[G oxiZͥJJFF ZvoY۫j6`Q1LG: !x)E=!DY4M\- y6cslۻhWSw*[QeiL&7nÏ>FZZ`q-Vr+Uh4*ƀBÈ0T"d"0A!3J>ꋍ^{/ :些Us/8 NSvmjyy!B"f{n\K}жkʵ#m6ӰYQk/I(.ȞTWegOmדhY!BY ӇIn7^zWoQ+Bk>Ne~~(BtAr6Q'c=L!$tnNB7w{RyVL$/ >!BDIOӱhJOX<{B'KZBQz(EBni몊 B!J"}6r¯K|gݹ] I 8~ BQ[m륫7Q7Ȳ?;W?Uy^n6[pO $j6x($!Q>!3DGFQ:4"o>flqm;j]޹o\g >QQi-IaE|'Bj1&-x4B!\1L'W&GSxLV-=YE-[AE= !n2LE=WLع^WuNק`8#Ta=嫚+BQLxSu4vNQ\wgyHB!ĵshBo\W =QΪtBQ='"u B'(?=cjB!%]omO9ھsUrt B!(Uiݙ^doToﶫNB!DIn끽0GqTr=©;U IDAT]wS`,'`HDZ,pcan޺S7xlMA0{,Ǿbsߜ:49gq-˙l6P/GX4q0m彇/*!$,gAՓꭧ/gx@=4C; BK=O}ʢ_pTنp6&0{ua'ӻ5qym }:WB1!55ʚ7Fn DUaڧs_*zrwT .>j)h }J5ߠT +ǡi| b RvZۗ.I@wS%lmW|{poM_5~&O}1cP- ~ @<9g1^whw+<9ү{NxqR.L{JaH$%y,&ؚ/_pOz\*Ӯ{""{Slcyqۇ`CXWHܲz./XF]poK)M1d&>L{'e%JZ( Nl z6~};Z=J0ʛsAn^˟Ex6;NJ\_?i ΊP[σ加kbg3&^x}(&v+\?;cn=C!w(:D#}ȓoĮUP¹5:wK&]`kCi~ '>Jp0쓬=~GT~EQnl_~gt:0d85DA#ab>n+'"}ZE#m;|Sl89q?ږ%tֿ5_~PQL;j!Oj*ia쎺 Ʋ-H%1&޿}+žx{j|y^eMyքqiL+o<^&"ck k;>|ep$Lcoʈ Q@K?>燝 )C0VG6*d3)7C%sa6{} `>\ׇ')[ֲi7n%yGr1p50g_x?J}zw'*X|~9xʵ`ѩ˹67ߡ ėBY\qs"eڅ|l+'U"ӺThݎ5=>"S.jmc]ޢs?lNg˶q"ՄK٫Z,⫟pb61(/ݍ Tq}?W 7' wK|u~t(ĚӘj;JKO0hLIi9o e0,{GͥQ4 TzL5"?.Kz}ʰjw Ӿ~RN%)*l~8i{7$zgTc{(E`&nHò ,'ͦ+hއ,N_o3|,Tf{ۙ`]dû}F{MQ`rXfy\[JXC622{L_9|feKա=vXV፷X>O=5'"7yUx? hP1cˋ$}InYȒw2rƃ 6bL8-gYT}g6&"qs^ͼSyi:~Gjy{$N.f"a֬ލ4v㭥{z:U $9s&Kc&3:@~N3x9DWHߊ6}oz^4sTB@-վԮvUԡjMK4U'\I!+7gyZi0m9^س=MƸ7P=0=KP pLU|ߤTl;J!qLZ $vOBƵǨc8Rlp7>Rg-].;ښѯVYV*3-ϴAfǁVXCΝʧ-r.U]댎 $`v{y%3PK2Y\L0cH߽$*4t'mֱ`dZҾF$F괧e\".:o0J-|fDVCHL{᧋to0MTv[K.Y!^S2#QQnѕg9q-I4V+R- kYɎY֠NשJxd(LYNoeZ߂rBKQT(JMa5jAu{ Ae%S6<^Ѹb+7^L I6͹T"0p-g6׈Kf;ƬQ\0'6a˱́TÕ['?CG<Ƙ;/OoGž ЗBP0U&nnĆ?0޼+`$Y_nzm..kKVq* ӷc 'oZ~êT̉I;C9}ШA[!ynJD4=4֝&ZAP4 u% 4΂W=77Uٳ$fz|bkӵiJX:7g6z>7a4s#U tZ9n(j4Il7)9Y[iV.T\^8y^Gg:-nKR#([.@ٷ~3jr0B믣mWE1&2t}Ux2O PB oJb-?|?lTdpn7c=Ad6P<ڇ:x.ħaR__#%7^]:fZȶh`I$>56 )(x4˃V3n k&9),9dRKKɒJ*P)mߔ?EJ0QQAHUŒ;O؆Yog*d揘Z,$'y=¼i)K,̄ <ۏ nH;O#],'NcP  SD׍m &6KR~_#DpvA FK4̨ɩ49͂ 8áu}09%R#xhϕ׆ҬCֳLB%񓴬 vqw+O!>zs LHQN2e}S? :~>b7'ƮOzw-&di`߭bۿ)U˥J5y\(Wqr{y1Ahk2ĤL.x'6w\LZz?Plщbt==:21GkrdzOlXjva]hU&31bK|sIWWq0ѧ1Tu(SRI5$2!jÓ ∹syMoXΝRNyIH@# wY\I(-IyQM;y dBD"" G-Sov7⎚jDzST1s9|zd 2InkPuM|o3?VMi[8Հ>}ː߷qt˻CSǬݟ-p||!:?*Y{+'5!ƨMlĭ GϋNdh* IfrTDEQ8^R{Jhc:7ϼ(J_]5&]=A/}?'J'"\!)!Qs򓳃ˊ ozy}(Cx|6@YÒ  ym|hyδCpv&®y ۉ. QUQ1yλ.ZΓ0ըS1SNӧw~ƖhhRNp<@&"0/AA?8 i ߾CXRؽ;XJeb߾sdX8j*C)g{q%+Vk_p h~ PKwq1[C3rLfT"C:}u5HvCfeanu]Wͩ)dUz$] Պm_Y`!1'A$hWQJB9k ;v" 3)ď;h!CyMo[i٤ .HdsjzL,dş4l)oYЫ*4ka?Ij؂ZF0TnJ#N~3:kٴ5hDe_9[A3^'P)]zSU42fޞD85:[zQںlP[ޡ}y6]=#;__fwBַӧ&.9gE`efQiL-^FN\2cB^1sP-??F}1`k %a={=yBi4M{Gz^vUX^&41QК>8`<-TPB)_&R^p0Ta|4-J7<Ĥєiߗn۾Ǘ^m<ΰo'IRښ$AMo掭ɄӠ+ACjyz|W_ʘ9(դ}S%&ϐe u1^hc.Y:ٌ1&>έ5 0Pe-{ǒ0WwPރ/[ILtѵѶ+bݒ?dSCn1:{Fj5Evj4oɊS75\ /1[!ehأ+ʯO nCN|ay`7EX7oyXsjJQq->w<_mO0{ag-ʹUi՞\ۈ@);O>_ZW^B1k֬3&N@n%;dcM3[l.MUͥ%:+y˸3 %]݊p+× Tn~-'i*=Bq2?xzJS9t! @LN!]\=}>I*q_`N&BQ|2mJCj> W\* {qB!_u{=S aWBB!P)+8%q!BerV!`U\C^}B!HTũ']%^CBၭ۶(R\9 tWPC.z|?y&9D~Y!DIqR'OES+) P(=&B!vQR%Μ=tCB!DFyDBB!(q$ !BGBB!(q$ !BGBB!(q$ !B~DKLLӤPBgE!,,+])$DΞ;O +!]S'$iW('OJJpBPxx*VԩE=IBnHKK+B¤HB!%\!BQHB!%\!BQHB!%\!7e0|g,`9#n~5#/]í !DI%!WqMdo;G,|'FD(%[1qןٕj A4IUM޸ ^)vh^ us=d~*Ӯ{SE3eW5*4J': !ĵBBa93Kn _?/=ݠfpnv=p|~N|cY7!8+z=:Ӧ}7nr'>r77I.8n{Ӂ]yxx4RW/`c,X+k_o/)SX!\!ĵ!k+.Ws[321;MBUdP ) U{3o~ߌ-|L{X2#Ӿ\0h*W#PЮe%TPѡQ0 뗳"A Ã˻Oj{S5BU(ۙ$ ! ƢB<߱1rK6XvtrURL)ɤj| ħP3Nvk!a|5e.L#N͍j!b"ĕRBX2; IDAT%œ`Ҁ[X^QAX$ ! r%"lިOygtށ[lAn7?$wkP!^@&2/(oELD"/d-^9> V}bof[ۦ@ r%/=GZlsJ!5H%,ߔ~}kSlʖ-Cٲv{wXMyO'42?$в[+Јׇǟ5>,Y\8r$bݰ d[3l֋&: ]vb;Ù%|$dy{ߧU]!+(LNwxW7scԣ|{Mf]y _?J"qo.WOu5߾P<:O|vLJla9ObUDa;ӯw!ĵe[4ukAs] 6mmƼ4mȑ#˻ lݶvm۸\nӟ_r;)U%|!iy m۴vk͛Yf4q$crtm[[lnn2l.-y?ع9|ln.δ+[BXi.3]B7$ !BGzrȾoG_o !7RB!%\!BQHB!%\!BQHB!%\!BQHB!%\!BQHB!%\!BQHB!%\!BQHB!%pJxcw&;͘-cPiB!1 Eݙ cf==ϚxcO&ZB!1iW(";\WvTc9#, !B\$U &yE#DZyx!=٬҃`,'`HF ׏v桯gY!($I|4YR\/%td6oEmhn9qާa2Bt3#e$B?"ϥ&%2sHE_ss-#M,e?ٴs`ѳSk͹ME\_AӓGD!? ~ %1npO{ Ukrcc=ܲB@xZ M @t{ؘ֞vVa/]:uG_ v}l4/%U^a繷oO؍|_8ePP/ngnt0Wi`9Szs ]qWq[ڵDcXpLl.M3Xo--?Mҩ?u _GC#ez-?m]ԍ`!iۗ2\X80:5ЯNcfX̐qLϹOt֏^\ ߗ܅Bk";e#IMJ<]pxu1oߒy TkT5i d2oY'3pe9Gg7+Y˧W>Lqh>jbĺl}i_ JZ1E?_ټ2 1j:VͻYYb'|'b̧XJ!~ff7_-`5{O`8 ?0% ~ʪO v/:{mx5FQ7y44Wʸ%g;旭&,B$EQ9Qf &vH۶iu< S?EPw͝iYJuʹvhmv| (ASmN"nBlRm3Ql8PЮe%TPѡQ0`Ok 4%Bj5\,^9&3T ͫ7)!T1 JHgӓ!$_*x)Xy| 澳9(.ԑDqѪRtSMQm5hUgiKK??T-uQT["ܗ3?rX-|+ᤂm`Zԁؘ+\Q{ZCB!D:s B޿߃kC!_yr\X6+xx\3^FkcC T]+Yϥꅷ{'t3NMU<(t;Ft4/gM|)ՠ:F| >E_ULx*dۄHH4u#`(O qw!)89) u zn 6 ki$&mdq>^2*W!'>ɐɳ)WJ2D΃xR[ƴ+(_Kb$RK YFrBkI\ptLXb\ Ú8 *⊼̖TOn7a u $%^[GO'- U>F|G'%ҍ>x* h:SK&1pUŜ7W,;멤\!%'!>tVLي@cWCY8h`(K2rLneCw1lFEUųvq8Etҏ_K:֑ ~ ?B'椌B!)pqdȤw[yz/f౏kqt:5Ip|֛7s~joZLZcߥ*~=s`:}j?dZdg>C>k~KC /:9>cxL3} ԵMJT}ִMHt'?wSlSyyep+H0vFsLݩ][ϪB!(%9X}JӖoj `W7X,ɻYNZOx/j Aʖ$ VF[DŽQky#߱}۽[S pqyBfo;j(ӀV~~NvO!ke\2WYXUp~hm1}0Ƴ{jw"ue4S8Y$}tet|)[/ҚaXG&?ߎǛ&0hA.mOv>97Io-ol܄{9wzs$NK`.6@Qs}xzw $_Ζ E!b<}0][ڊ0o }ߓXpIZ3NI)b}Ԣ7Ӊքw=qa(װ3DQݨsnHzOGP|S6wB6=ꁭ--1$ikz@c8a"H\;d'Y?xE-obj΁1S|VDcgMh:6ˋ_ĤD-@7sgHrw|'xZ6^C*~SMz")"j[ϻǑs^teFg/ ˿oƂR/E-W+<Ȉ 6i֔ \H/ !? VHqFہjݷ|?D̔E7M>}9fo'=ʹ nFjGq s j.jxmt3ZVŬSЍWt#-48imZMֹFN.pZ>cmN 31nwPB!` To?#w,Ʈy 򓖙3gx{g=aҚg*:@^ޤ6;=Q{(f|j"Z-y1 ߌdV p?MN7">7̢u բbľ, FB!'h\Hɜ+Ys؞5ʡ*x+u4k$'&c_R9>37+"&"&ղ >"Tj_<Ѕ q_:ɑ4̀9aaW.흉);DСPWp?!UL:ILt !# VFO9="AmN41* Eq%o_xD~Jhq~tóϏZy_~Y)Q:'N3gе]VJQU<ݩQ]Z ea8vIB!'${{{ի[eX9 CJ!Bk2\A!BXɽ;8̰cZf]Ba$C9G:^VXY3BqIȽ$!B}2&W!BX wȵXBQ2 wii]B!sii8;;vVI~~~ĜΥ]B!CiiĜϯKJrO,ң+B)~~~xv9VIB]QvB!Ľ%crB!Ց+B!\!Bau$ !B#!W!BX B!HB!VG{$&&s>V~ B!71!!.HLLT~B!ݻ@+1cP^B!Ly??Ο-Rܻ ==]B!nY6%rB!Ց+B!\!Bau$ !B#!W!BX BQ>Ҏ {rʙ| /8ߚnsO} !ăM~ Bqh翦_li,}{_͙8e#i#2@!cr <c K~LGX6[ir~H= NgׯT?/C0hv;V#;9x!՛6gLOtH9w$w'9I$QZ2cGԵo^{Wb:E?w)#Ő\!}Eq TpC <r\!U[]4(hѼ1I|*|t=v!Ywl1񪧸œ>'S!N_ūqHZ~y;}ɰɰ;ϮyjŬ}Yp.P ЎGl®qٙ ss[2K!Gqzv`u__;UCiC~қ_י^n6BO̤1vpP6-sm>]W1aE.kPAmvx6R2$@ά°Ix};' rx G Fxv+vxy;cИoٿ9_SXہJAؿG05w j ΋qXf$#ro/OLX"|UNQZdSFM|쀫~qL%ZY#1HAGŽ#ι>I$e~Ϳ IDATV dnazaN_ArtɅ|1L/bWǩ.z)5PQ/%"x0w +NT!Y٢_mjӡpTNw!ߛ lhfJ=;0TkFiHڹc/HLfXG0Mڵufӂ/8p9S9/Bu aCa`StZ(}s-1a? H>:2nP}lP4~!SDp.͌?ϿUzh+'IE+>i·WhiOU-m, m-mnӶދ0hР%9 "(0WvB!wu}иDkРD۝={qcnjLy73Shr:f1oΛ7;jl\Wuk O b26%:2\A!BX B!HB!VGBB!:rB!Ց+B!\!Bau$ !B#!W!BX B!HB!VGBB!:rB!Ց+B!\!Bau$ !BcS[%dL;ɑD3fdTi:핻[B!LBn)v4UaD-J؟΋&$-P!&JɑD3M)qSC6P®_!B) Ĭq[7 &M sK,WK!BSrI|&) hqe$ziFt\ə]`׺\Swz{B!Ő{KMJdAoV͝r*>G8T]aubPޞB!DqgZ7Ouؿ~\*<=0ol=;MTy1^$֏&ϏgYLl;s!<;IG=K~!וi?#'/s&LerIY]v5dn';ove,b{5 u]ʤ)47yItR> ^ηF oT@5=u(7p7)-~l]~_5p,6{Ƽ:k* 9r@NYr5 Ӽl ¨]/|qLϔ~1pttR7-姷f4W6N(fmazEnv3>!×l^+SAǑs^teF2*-jJwdKz{ @iaġVP!̽lܕǰ"?kBӱAͳ/B{Or35Ԥ;p+ᤂm`Zԁؘ+rꆿ7˖_0;P/6$l_Oe;R+A]9Ȗi%Iq Tp.Gcez5bgw CMM-`GHjdĒ*C,B27O#C')r{xLP6Z<lTlM: d:Xg/Vh$^΂śR&A!-&k!w* 6 :Bџ ~Nڅ'v*9lKFǹ\cz*(5RњYedxO?]qLW 3=>X'{]+<<> *mygz3>IIqdO|fM V!";,ljY\!jzQ튻O)br-7Y-bZ 66y7i[ EM4hPْpv{eQ,[g(B%jX%ٳ/;f`ʻB5ys޼ -z}?TxZ/VphY)}ב MdƯek󢉺Fy؄B!nF+80X&¤lҎ {r쭌 ł썀vn E_A'ep_ʅ;>V|n_Lvׅg+杯ey*w@jR"FIJbB Z{lO@5kCQ;'Eo& x*ރy{e(TW!(e:|KMJdAoV͝rz:&Zlݚe.^*L}ߎY}}KZ4t*VN} %1^XFr[ZE.,*vv8{S?4v-l89=Ӊ:%?|i7^Ixh s,X;yU %#LH76g.GakI*M{_AItV !qOY[1tNHN4 uKGX1Y‚.=8_MPB>KWe/29z"hCHh!m{2_PObL݉hוsHQs}xzw $_Ζ|I.h٢!_fKh7ٞţĥ3ԫ+mZy˧4y+8!SMpBZDՏSb[sg=W:mMoq|?MxhM[!]/y;稸!' ށaDye6LV- iՙVsȡ'7{,Jx[m 褬AQ_j+tjF~g gڈvӛ9oI= tEh-;sd$䖲>5o"5)wٸzxr{i]0/bn]fneu|!%,ΰ8rƭDS_3콍%~2C'XU@O?.,ƍ(diWNg׮4tmDPu [@osݑ,%?pj0e[39F1?3matMfWr^NƜ' m6ТvC({ԁG.c+y z^ƴal99ggP\(װ3?M[7=kwgŦ96mbpbeA)|.yW3a&3ZɎE)^sְiSLf~VE5̜sT\Kv%},Jz7i)?=:?naaT7YSndώ333މOc6l¶u1o ~-%&/EQf 7`[g`S,ЙvϿ{.qώ'{PBp)X3hgL}z-(}+ewf{3kׁ$fNEҴ/}$2f߯ IeH##Մmǫt\޵Kƹ#A u쮲8GתΨX_5cݺA/(NNs; ӃZ*zػ m;Q+~,lym\zͦ&O #y52bbIToB - v1p=mvxe7lPp~q$r)m&n<ݪ9.~=Oocglv|h7e`zK=wš2]4*`>TӾN*ؖ Ebrrd&՞i~ꢺ߲>T+|B s Byj8$sr\ފ|)_3!:c4Z6Pu-w6!$_|&T}GO$>QqHZ~y;}ɰɰ;ϮybM* EJvTm[vŵDC p҈O4XF[|xt61GZǿ dӌT4V}`[Lg:8*/N5mv<t3dŦE?IUԜxΘklz'.䳵9*WxL{ 師F |mdh^+mQ|W6Z@Q55&Ֆr^{ wkxR(5®qٙ4dhicO?yT7F] BėL?i";Bџ ~NC,p`,\99sfy^sa Ο\PMGeuc=;N/U~7/V)/rm% w^{sz cF(+47ʻ:##F_Q BnX87 .LW`5|5l#9~ "'t𒯴 !DIpD~-[2e+VW;MBUL .^ɚTQp+:8WrWÂ\jGsO lhfJ=;0TkFiHEWTpkHV 6AU\ j^K2Q;BVJGD¡,MDD͢ߍ&ʖ%9)}-fd_.qU}V[S7|_q][vj$'&c_R9>3LI VVET^(Ցa};e1zv"g~ryIJ힣ԔK9d-{ V蝕Mڵufӂ/8p9S9aM>!4s(]Oc@uƯFelrgBQbғ{qdȤrUwBhoCPnuuz՟L! *7ɇQ'.q+6^noM jͣyo#}?d4(7j{5Ҥi\+0f.̎7a[c>ZvPwڝh2l"&π\L:U.wqN,[EߒQq.טrᴯҷ/?:|}1DXAx{t_u"X?ϩs 2#ew]ݟ[ט9pS?hvFx1;oXnQ伦s4V5S: _ȑ8Ve/ROv}ec?)}"8f՟^M>}00Ͻ5?0cZᑴ^\!(bծ"- dEL+䎠W7X,ɻYNZOx/j Aʖ$Ҏ {rnc%u{?+1L̓[1j2* Nk@&;3~!/6}@߶a4iʫKdjztv|9JzxҮ偦q6vN( Rv-aµ5>Ъ˼ҩw<=_ʨilLa ѱ[e(+ 9Ȣi( DR8Y>gBh$4jVcq *qZֈbB\GZ͍ضӖy.g`g'Ⱥ{7i@?8bbMTW gEN{AV(*;zZ,1[=?F`ݙTq9bn)6^|\8g<4!|Z6ޑkm'Y:o &֓ሽ7UgV\Y 1cBFHHZtn4sD"F}o3W-[꤬NK3W2SD<1u +KǼDvm #ϻ3f,XʹWep]`IB6a4 soB닞Ή)fa>Yb|ѽiJHg7d^ɘ 8x?-ϬCLn߉减 N}7 iAW?bSLsKx,Ju?|cq42 kIph:ʖ/E.fETڇIS ڵ5|V{`KyފV6ys#1l1.ZҪ3EtAK`*fazXĹ .ĝLQ+s>')8c E0qWhƁIJJ*MRR{keK ps GltR2lAӿ%:GwGl =b~|+f3ͮjWfcd5kgu'V'm ͻBUlݼ u3a7{bcל5lEjۡm7Ya<_mLoYٍ|Ve%GO`-lY5cywerwshmYpY~s/bF-mY1c;O":VWld?Nɼ@O`2i6ߑ1U.OW2~S{Rz5`Tǚ7'ܡ#ժq"nRR'Nj'#HX=5TO"p"99?ӎ (kb Ԡٻz:vѡ?czQ:qPM!RR ~N;(l5S5qUB3DL*~؎c~tꌊ ^_8֭;)8[wfڧ\U&wd"[5'TՅOm͍ɇvC_v7OSфcŷ'Igt4#}=wF7師F |mYj9Q|IΕOX二2u("x(BߟrU|+\PTo^ؗ% A Uڽx&+)בќܖ Sf|\;>^xk1fpxż̘ΓX&_@BAFpcr[mY{uClc>kwY*(%w]|̢r0U?]`7X]i"5N'qPpJTW\x߼;st1K2q+$WSH}e ^Fo^rC/v@E-qs?/&=u[Ż7 ס\/^Aq(Z-~]3`R8/bᛑ\F<1a @k_O%%_G%[*7jL\O珃LjWR-?=v :kKO+1TW[p4:BlZD7L/дKf🣵HL)[&>v?X8wfԦZa~!+Na"b&"&6 merN`J_}ˡ۹$pG;<Oى/{  Gr:*Lv1|n#_o8G; fFnn5">(фZJU חΝ;ӹsg p/cҒ('n_riZuc؝*s1ZozN'Jŕw_ůoqjèahͶg)u,^:Yyv 7n}e!vb?ey'o3Y&hέtϷ<Ҭ,8O$9 n}fP@='N穱||Dgڡ|}$jMnuǴ{a@G^ɏ^#I-u`jN?m/x %͇ p0]phd,;3v/0$<1 Ł9I6N]XOcgA4a]Rgjuu|VӰiX44lslt~n{。;t6oip5k1b 3eIxA. [3y~VA\zbOqᵄ?t;B?HvNaaau4-[ۧyQ;]]ZY2=4^v\;^uv WiX?kZ5nKH|}|8|$:Ii }ܯz&PܞB!#ILL48⋣_bb/qd]3=kH?yf!2'J#1tڥs“,^dcgC=u6k|!/ B! rB!D#AB!hr$B?^GuS!ğPqqH+0wwwJJK%SURQqiIii)l!ğ^OO_BS///.􇟅BJ+!B&G\!BH+B! rB!D#AB!hr$B!MB!ɑ !EPXXɴtJKK;+Bˀ(xzzOcg/I\! ΥCLM@Hw!N&B3x{{ժ';+I !TZZ*N^^^I7F!AB!hr$B!MB!ɑ W!B49 !B&G\!BH+TRs#[/K#oTF'K0 ynSU߾Jx珬Ȟ#zB4g4晍vE`!4:+[UGz &l\- 3:>µoͨ{x3#B\F$jLmظSϗS_fQ Q%C3O8>g앟0ku*W(@?n\\ Q)<É~<ݪr$SEM[ykq :T w|3(!ѓVrkn_pg+w~CbuE܎IQB~~`07qB=g'}՛uP'`6t0mNbD`ܭ3Y{v߂2INZC?mA DFMbWQrUoϕ#?[^^ImV-ĘÉO5~rz{z {\#{=q| ," axzKA볽(s7q|wOྱt;;\G֩sg4|q+,N邠)\=jb5_YŐF~k r-hJ$mT*ւGvW }?wp;XDg#1KVd'w ĩKMw)yǥlY̋o ??߲c|t%kB-b?= 3n-˾zN=7Ɗf,xWugL}mŶd;n=[& 5-{C'\Xs/|j Uk$H9;H5~4`9|8*_Qwf+sYz˾݃[bkZ>]uoaڅ3g|KpgS]E܌al;QO̕xy zaPYAr[-yvᳩXw>Z_~Œ᎕>Kxe[?^L82Ժo;>s'by[e 59,|t}||h% Eo_ lðg<.,`hަ^ےw:?eiCe|5~[6ǙL6(Y;^bцMlv,sĜLT4J~]oe3flόn;x9OL/~Zw9/NY8%s{I;I Q5`Еޡ<:AyTA~N6flo> Ǭ~^αÄ 5bdLDw%}tÙ<%:033AC#obG^=c0Ғpr%wdq:5֮ZSg⺕c T5uk3>j:%m$YzZҺY~7aU6&txDㆡA5_!e݋K E;1pZeǥ̴boM0K=s 0ALb?g$5H _z.x}_<.(0gutՃNۄ8"k[򬦬dѮLg0=BižKIAEշ1Fy[rtҁZo?zc@ȀgQP['2;A=hfWKm]HzFeԞt>ɍӭ[ ЅW22&G0g_gn6kkZ%in!3 ? tFqKquE0[WlXdܥkyy庿JV`DLq"yL{BWȃg@7! & !x摯BK]Nޠ́6>bݶ?hT9JYQ~(!NR#ht>?BH> .6ؙ>z?n|$F΃BG B`, ru;N?Cy>-:O!:0 Y`yeeh7ާ"I=:4S'ڭt-xN+Խϗ+^dkAnzqYVn慱R͊:q }.?g&j^hyP)-r2aykaswsf<5)T(jw<'Q :ַm:?|oUZ^JV_0To8dZ8mG>ɩ8'&Чl; KlsLzr*.N?G{|2:7'Gso).ԋCHg"w/Ⱥ.\=uWߟ^jnyDP,_?Xh{̹ۧjZ?<=8R>1;Z^׷(mBE./{ 1R[z>j/G':"1b (3q %8e*8JRIɨ@5Q併Pxs*,}/vgO&-v!l#u-v@sdQ 5";Oj {L`-7OwSfBˊ Fԫż=|=W>5G > }+׼߇ǰg:OS4ΘY8QJ4/\ߛwd0dU_ݿB# ΝncՁ㮦o^hGغa+n7h շ7^7i<»r3oҗB5mmP !zӿa "L[:'_| ^jxV!5&w?]=IM dlA} ^u'SuMWwJ;; ws68  5ΟM{ץS;t6oqi:!\QF?GG}Ӌ?ަ[2xEFќ{ݟE@sOK4VYKl߲u[ϞG.-w֬YӞ|bMvT5v4Si_t;ٟzN㜧q3ȡSˊI;8VTU}(N滯@B!\%8^LVzZMYB!D$bם2·h\ >%iBcC!B!hr$B!MB;)B9F4 rwވ,(..Sn BN9BTVxyy5vvRYK W!~'_+B! rB!D#AB!hr$B!MB!ɑ W!B49 !B&G\!BH+B!ųFbZIN>@aQF!&&|s(B%An#IN>@@@}z]Jp88|$tP!K+4¢"Dv9jMaQ%̙B!ğDS pkz7þ'MU-obcødR/l7=x5<]v;G&2}׿Iԅ-cFBC&Aֆ1􏍥׀\q,He@'q^KXzD%k;|;`otf:Nx{Fe/2i㪩IQ:c{{XzQwBT8Zd IDAT̙ٜo^. /JΩTH!xrkb<| ׾uXG{EfT̓YxtI`2tA:b@k\#hcooܢoⵗu͆Q|֦ؼoL&xӋ6Na|I4WN-ԞYx>h0\-~Ϟb *ᩡTXړ9..zɜVLOvvty OL$a]4vMgNdUyz5Eӹwv<͸լ~>^\dž0r<2gm3 >a<۫өQUWƞ!c[\1y6V8 M؟>Gq um c[u0:?Jc+6|a\JTؓi~! ː&:*n^|e)/}4}'dy{oC0p֚z;޼ZJI<>ʴVF}0b0!=~-׼ڵr׸\{g$N1x5lᇿd8)Ɏ]J!.! r}xOʚso٬٠q{sXj-ߒ>:5ղUW۾fe䚺׭SQGZ6X,WZ;%:49nQ}Β˘d4ۧO˔v:F=3WF?Y-Ġ)sK7>=!ɔ֮]ʷEpHdl.]ɚbkM7>`,Y >c w;?O !x _?r V{Ø1w9 kh,[nΦ?ɗGj˧Ǝż4wn<2֭/&dcYMiw+9YwF+ zo#|6u+GOqc7ϙy ٧zZ/`)w1gp{_-˥}XsYlz`(J9 몃0f~osm`rNo3TTgc7K#^ł{P:QA߱vR~|AGVWN5'^nxgkut/]91{JV~z3yOQ\ÌG^[ࣿsFzWBq ᦩ1ppO!> FY)˩DW;m:IԔ,NMdҜQw^I膟YSAoIڍ(ofL&٠r[G'J?--( s#ۧf}EXEk+x@@u`. 쥶}N9cZcH<;C47͛sxVDt`ޯrK4Lu=lp5rGqML 7. <:,^ZL-7W:/b1ebIaϵ731hvw5m`G24c eo׻M߰VWqfv7 V4){hn|f!+_aiŬ KNGԘ1E?و0{6IS˞mv}T@VnVTMk{CoA$5Cz`[(*(W`'YS e$8ď¼S?HKoPT O>1.ǯe Oɦ_\}Xs"{fs|t~(>U>:GQ5b?Bf Y`yyeit[N\OkgmͿ BBY6Q+D &TwA}En\ٛz5ks4F>`wz,;hgfދODR#w̤o[c~M-9NANEU5ԱfAu!KSu56~%Mއ1r{Bm;QsrQPAfU~fe䯠M=l]%q Fqcٖ$∮|R_x<?t|-ZEgB\΋@#99NXY8UG\7~ˇ7;E5\r;O.ٵS3tԇT&=D@GM߾jN؋ )>#:_?|JɩpRQF#r5KJ/N*̡OG{BS,۶wa>_~_qFỳ`~>:rYk骬[ӭ<kBD&FMG(('kl4ֵ=|MdWVqE&#n4з%_/!'n]Mo;8:>_INꜳF} ;( E?Rw&Q}WJʼl?dGq⅟ÔF~59ȑ=rt!rm*<iMb&߹\)\]O^x*+0sgҍ_ !!ݣ839:LFtd@7JCQ9׽<3b'(œ&*&:u!wvC|2ׁ=,uWfIyca̓V:@GɏpŴי|7%QKj3E[>K<=Ü'p,#D#3c޺o/M<;Ό{bhZ%GOgc͘ZT5tc\X)ʉ71l.6|b3+Lv8Yz|cphj mg%y _+Gtp:W'[gL,n(%m}Obyd3b"~*g_e&}S,n2}|½+_k'e!D++[oaΫSl+fx w߆ n}fP@='N穱5}_??[ ЉN)gB\mꚮ:>;W{&YNuNaxӰy?wRw .Omڼ֬]LjaC/WK-'!~+!h.7Jg> qW|)?Po'eI4lFl.Mף{w;k֬iO>1;v\;^uv ۩u8ל5YԪ9 =yW;p~ppH >>0gqH?sz_Cr Bٟ]!>9W4hp$%̇C!&&NˀV®5t0ȯq !hl6ӵkΆht&> |R};&5;Z ^gø·B4 B! rB!D#AB!hr$B!MB!ɑ W!B49 !B&G\!BH+B!3!TYy9EXΊل_B!.rJK l65vvCYV $m]A!%SXX/l6CAaQcg/I\!jW&l6kcg/I\!BH+B! rB!D#AB!hr$B!MB!ɑ DgERgR~rS(޿6SgUsp24y_O^_s\Y9;Yp?M+/yYZc/F+$y6Xų?VBUMNůojۏ%."]{Xs9oy+hޱ3_Y_F쯌dPQ.壽vq0-*0XhمNr`W]3(܈0E͂ťuZQ6oGzosF96q7Y$K aM%7ikӛ?+rB \Cq)hT`oA"] r1ziTV`KK~D%ofvwH_*9]qW@+9;U\IC=83FfɔɁB*U#^խz}|ku[zYܻ]˩T8Hh!toSh0ТcW:Z%d)=GѯVE=V=iەnm1RQ^[PA'tXHGSip#uzti<_+{PfB5Ңk/YιPOf,c!t޵lݖLF%iKQxVfPLxK@+=ĚV;8t\]ui FF$&ga ctOԃl*_DJT3ٶ`nO;r:B{г%V3;Y?,<(ܵ}%#G)%~ 8JN}'hΗ6J]s)i*[)SkQZ/< ҩ kۅ<4kG UN`:ň;MIwïe'Ƒu9~5fU 3~1tjJE]JmiOˁ"*o£;vNa[R.]{WNB^{99k?@qTR\@Un6쭤݀{k_/[5ާ {Ы8.RU  (yw!lX|PΞB 'ǀj-~nVM[IAPܵ ʪLqo; "7&;G~܆t#D%~HtZMkhw#ngկȈM@%+% YOP 틮4vs0"n:7"b聾*ٛVf@zgH7/til_imnB+Ma z%?܂Z|-kSЂ.3:`_#UOa_1ǚ{M72~뒻oƎ ]Q+m"qLT.! 5$:&ܪ`x(9u[>,[{5JlbCD4BEٴ9^pV鯰nIR]OlJz@ocCر;L heH:܊FעC_5 4iٙ4g8v5Xl؎ Q:JFef͆ H[[.6쭤Mߡ c+DT rh 'A =qps!qHd#yrw%g巪,cG:2N+$0F!9m=.BV]dyw_@ڒDG:p(>ңJ)sX*$]{1ٽu{,#;Yis }$J:]#^^FӎV`EӻmAiGǀoߢ 2\}BEGpT `;,RIRNfIrx{׊H- ]0< :;^P HMݶzY14WNr<6AZgT@I/tDѡҬj9eә30,w} -|E!6jo!8)fz*+M] / ,󇲲J44*2(nEt;: -hjەZDۈvDVrDҵnD$ hE:pZjdUw,_NPXu:ATz@՜nP`R׬xe9se'غ]%Rh%Юf}0x١d=RQnfv<01Bi?OMW=ԒU98Vb<{EyMu!}[ؖʀ= 0+h%XyiuNc"ppO\0"I IDATUPTOr*0̬P`}o.FNtq;ԷT+ .۰:pbdVV8Ͽމ-dXU{s*E8Weq4HL@Z^he;Dz:;@SLfL ҬCDtw"T}h'vm lVԖFeE%X]z<[_9upsգ~&(7;M?/1^6N/!Ҙ+ğtWÙi"#8UJsr>ҍDW?Q_DCňfEE >R խA+%ծd4QRgy9((%4(^{rp&@R\REs3gn+LINa0_}k[-KdXB[t$\Lo e8ډdRP@\{璼72h )*W+YVRPm%͠˷a)PKOr8`/9Nq+AaA9_ҰZm=}6+UQA]ńgtacvuk}"hϡYTG)iNԿ^uۡz=̔Q8(>~\_j 8")a//Ps9|()Yu.Te1<2RLH72{~x6#̫C9;jyE1%U/O71H+xF9QFJ   ~'lӫ6JʨBfBINQFY#av3ёsry_JҒ"{߾Ik_bC3X iAA$`WM^vFs ,]iI[Wz3am~hZg$z! =#rғvRd{1ݢn%oO;rf4#Q9qؗĎ +|ԯ!FpCoX"h9i4b E%w '-gVnĴjFVk!y/;7-eo@q+^덶k/kmP0z=JyV2{QfuOpszǵG 'g;KFPhQSP`NmˊeޝUyVwNI ,B E|tFvqy@̓"B||Ft}1갍 $ @X%JB ! 鄤]ѹ9wUuzUs֭[|׿{iuvtj35}}$ьޤg&߾4V9R<ŷݯf3i}_.C!kcZө1MSiC5wcz7e[5Mo:MpXoǞ}Y=׷f1u<\[m/K]j\+ӏ끗vutO>족; mhܺtSCwWڃuk0jzӬz{|*m5n:x|&,{F;jTi2jFkҺoЫ#_7bR:öc\Dhs,$mzn2;v1G zSQsLw}C{g7ﳣ" z(a(݆~{?%c#/VH+{N{ﵧg>9GyvX]h |53n.Gec}pxx,kg^x֌u{̜f0` (_j2jSп) Iyk`@<Uʟn+C}c#8 =ߊPW:4cu>5p=S2v ruS*}TTῃf ꦳S۶>l L۶s _ \xz~˚8W#G4pmؠz}8#!P7]mP?]$%u jH\@]uwwvQ@p!!iꃐ[==׷Y==> qw:1cV?Z3gPOOOP_f~~f̘C !&N Izv*mLE W*ӭ3fhB/_Q:8a«aEO.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rB.C@p!! 8\ rBnRهF(rH6 ׷هFjaf@+>mV~N3gTOOO}}՚>mzr3$ٕڲeKT*KӧM}8-QooaDO.C@pH @Ft 5p,v. 6#r(J  &S}riAb\֒/ꉵhrtjw}'-nV.j*mظA :0ttthBjK89kj!7:ѥf KV?o-݇1ڛ}8-eAfdŋ:asW\ʚsl_O=V\ޫYra:-!牵hp0fTzXJ 7h׿[Nk "2ܼi|0زLQ<5̣#asUQ+y(|T؜UԐ[,' @2QBn'8 < rEH62SBn'14?@ Tk!Wkm%a I15"\[ew2(0T*xͺ[| IҬYSOR`D"+UMہn-(c60 g͚5ҍ7ߢO{~_W\8lg?G>v֬Yì{@%F-|yndfܬ''Mko;}{xEɏoH\~I߸P >v9oNy}I~Ce~}1䇫w& zקN#oJE]Y=úOyo)'-{:Ctg.Sf-~t~rz껗}@oի򏯺G0 YX5=#i?0-\ѣW]d*/L:qU:yޚ5Zc&CN.<_}VvJ tgJs7r>y9{} /vݳ>Qt˭*wīKuRG5g&U6/}=hy%IZr[uu?W=E󎞫?X(Ql]zt-闤-zօI4瘷g}Ezn{'+4(KJ38ꢈ=y$^ٶmݭKMb-˖jctF[#cdOsZB6-8oz[(J+tЁJs7xZw=zxUmO&nפ/{֯9B+qncY6=_hNmZ}/~sOC/~7X;igm۶m^iKS쩬W^$qz'j^֦WCVJںme_,Mn-)ʔiF'Mnީmq:`(4Z=f^F/%M<ծ6M|[uei෺헛s1Ǩ}DV_]gz6Vz3u˾[ 2A!7Ҟ䤟R9&)|zn$I۶nՕ t2JR{ǫ:mrڤ^ْ@+tc_oyV>fW?İmlw}bԦqTZ~sN{g%MqvU4XHvDMbU/k͋[׼1cO;-k߮W67</i~c]Q*y2>`.nN:4}sukuJfkw'Y#]wf 6O=Q\.WUN?}{ryx7oO?SOW!u;􋥛z/wFto=S?_9}&[?h6NOҬ}Os}}~OA\ƩgȭG7$| WS?KvSlZg}]s66RI^%=ȣG?ŋh͚5zqZ-^rӵ|)[J4 4H2$:Sާ3?|;tĴ[G] ]߃Zpq:dz*%3ߟ;Ms'|P^nlȵ] YJۋdmߜ66c=Zn;v,[c;;cl}UW_; chi߿I]:usxym~ot}gD~%wh٩.ZW\~I;l߱^hn3ףe6{-`gN|ϒƪhlnKzM:m})J:u7PZ+pVg#5]!> _KhZ},wnb0EMs5`E/ Bn qy).{)Cn7JzZv}`Ɖzg9Ȭ4][WmFZ+4M[mkKjfTskbj[+d,|^eAYr/ *W-$sݦne \jfȍKiN٦` 0uuiv.ѨHo_j^df _5֕Ҵ2eeFܤ7;9q Ef+f/tu]f&[wWzinO;S!3ZNӞ%6$ *r{Z|7礩rfG~>١&tN:E/}IKxQggz{4eꔬOuUe*mi*q!7zYsqWR 6&jNibn&;GǏO۫R1}c4ȉd ~pΒ݋"4dω]e'U{pwG\}q࣋챬 Ef[8fƝ4{={LA)P#3ĵmfi;Hj![;3Y-!7.fnOs5f,D!m|!X6ٱ[+$p=#i?I+ؿv姤QIaݓ[/u2J]d􁔌'-YZ|j[ /ixm/(KҢE^ZARߐ']1>ui+I\%kٮFm9mxn,ۢ([cƲnJ9rk,k9ny\\i*_j8zt]U_es[T}o10]s?ekYݍQgmwa[R(N ! vE՚Z{,cf5\֎Ǩ!@4t~Gcɍ*f8$#clز+l+Z jJsݾϿ/ϵ/}qwaIҹ릞!f=n>ipk/pA 'h,>|bǨzMWUYBKZ+iB/ڕQ;Ț];A֮ڡWEvp{q_y- j+v.ۍ(D 5Ïݮ`ce| 6 D⪛fƈwJ3Fs\պ`o3}0{<.tgzXS5*UugWo]o{ΰ ̌1s=eA e)fеY4<XmisZ>]W/m\MM WI cI1s+$w8u+z|}:^Yrw_؍m4f[=fAT{};\i׀mٴUv%!0_2 =lZZ*7Ұ*T JmR `BE1wwjZ|Wqףo jCXR֜覩w0fYW%Vz\8 ObRk,.mYwwј}L~]'{emQ 0$k(K ž諈NןH\6)]-=e,sգ뫶Jl6WeTrlv͵nK3VmOHQ%bq׊c[\u=| ^`TL xiCnsʎ nK3Vf~0kU0O/Ftͱk+63ؖ}p[rC1Yes^%|%T%ZW\&,a5MobrMQ0ko73v7Yɵ{i]tysG6טO /.kOڏq^Ժ渪9f[Sª=׮Jȸoي/U]*k?>\-mMzS-U[ЗTLSv7/m76a'm߳K9BN+m3Zz?%WeIܬ{im$K ioR7mȬv[\շk/q3N r&EjWے]Ƙq׉mw_qdm7׮ ǜqZ) ^go+[~}O:{ ! vMtKyVʚ:޸k.ǜ4fk9n^/ tYW4I_8 rK%mkjwBq_xRtFײ-e7Žfc@}z\Kl~mIJk5Wڵk-*}˵lW}cc{\H=?N^\_ K ~z\4g i!kMACzTtYT!=$Z\ZYLo\ͯ{1߱&|[-?PVkI]=$y]eT'k hɴ,cq%9jƫ d%(g9Fܸy(]1˘o~Joi_K7xj̩u!鹾 l-[ -C RiBˤV_xM{kK^sR)…gըhxh}~|sq=/zFWt}6V{XUz՟5V[M۞[ n!yնQ z-|ի4ݤ YH+\jd5=yUl#h iic-6S7ܖ Y_K("F>7˾sI-*Y/Fsg6Iv^ֹbRM3Zc,<+qi;Ϲ4*գu5!`(0Tۺ\{,KAchT[-5?[ԫ5 @u ^մ0zZz+Y#Qk[Y- W^zjWj|pjVOj GO @cʲ\GMf$M{^̋҆z4*V|cT/+5/T5"=쇠 @kʣ;d Cu֌Jnѷ#V{ WW[g`y_j Rsc5<* lݍ˫Jpbf*Zo'#G-}IyF4(A_WGh7֔wC8F5hAa7˾j*ѻ籷t5%ֲFU@s4bZ D9@1b)zxliu AU+E;E;hSݺkӪa7"^V WE("6Tzw02;|L5Ix -5v@s5+`t5ΊފxLq"xL5ik_Sօ9a1օshD$q@=bk@@k,7#JCDtIENDB`qstardict/docs/en_GB/index.html000066400000000000000000000171061453553600400167650ustar00rootroot00000000000000 QStarDict documentation

QStarDict documentation

QStarDict is a dictionary application. It allows the user to install Kiwix and StarDict dictionaries and look up words from these dictionaries.

This guide is aimed to assist you in using QStarDict.

Contents

Starting QStarDict

It is possible to start QStarDict either through the menu of the desktop environment in the "Education" section or using the command line by typing the command

qstardict

Running in background

When QStarDict is started, it can be either in normal mode, when the main window is shown as here: or it can be started in background mode.

When QStarDict runs in background mode, it is displayed in the notification area:

The purpose of the background mode is to make it possible for QStarDict to scan selection in other applications and to show the popup window with dictionary articles. See the section on popup window for more details.

In order to make QStarDict able to run in background, the corresponding setting should be set on: By default it is on.

QStarDict remembers whether it was in normal or background mode on exit, and on a subsequent start it restores the state of being in background.

If you want QStarDict to be started in background, use the --background command line option by starting QStarDict as

qstardict --background

Starting with system

It is possible to set up starting of QStarDict with system in common desktop environments. In order to enable starting of QStarDict with system, use the corresponding setting:

By default starting with system is off.

Installing Kiwix dictionaries

Kiwix is a project which goal is to create offline versions of websites. The most prominent of these websites for using with QStarDict is Wiktionary.

In order to download offline versions of Wiktionary for languages you are interested in, visit Kiwix ZIM download page and select the "nopic" version of Wiktionary for the language you are interested in.

Note that the language specified in the filename is the target language, not a source language. Each language contains articles for words in all source languages, in the target language. For instance, if you want to look up words in Russian translated to English, you need to use the file with "en_all" language code.

Examples of filenames:

  • "wiktionary_en_all_nopic_2023-07.zim" is a dictionary in English for all languages
  • "wiktionary_ru_all_nopic_2023-09.zim" is a dictionary in Russian for all languages

Let us suppose that you have downloaded a file "wiktionary_en_all_nopic_2023-07.zim" to "~/Downloads" directory.

It can be installed from the "Dictionaries" tab of the Settings Dialog, which can be opened using "Settings" → "Configure QStarDict" menu in the main window:

In order to install a dictionary, press the "Add Dictionary" button, which is marked on the screenshot.

Doing it would result in opening a file dialog:

In the file dialog, select "Kiwix ZIM files" filter (marked on the screenshot) and then pick the ZIM file you want to add.

When the file is selected, an add dictionary dialog would appear:

It would prompt you to move the dictionary file to a QStarDict's directory.

It is also possible to not move, but create a symbolink link to the dictionary file. In order to do it, select "Symlink" in the combobox in the add dialog.

After importing the dictionary, it would appear at the top of the list of dictionaries in the settings dialog:

After pressing OK the added dictionary will be enabled and it will be possible to look up words from it.

Installing StarDict dictionaries

QStarDict supports StarDict 2.x and StarDict 3.x dictionaries.

A StarDict dictionary consists of three files:

  • ".ifo", a file containing metadata about the dictionary
  • ".idx", an index file of the dictionary
  • ".dict.dz", a file containing dictionary articles

It is possible to install a StarDict dictionary to QStarDict by opening the "Dictionaries" tab in the Settings Dialog, which can be opened using "Settings" → "Configure QStarDict" menu in the main window: In order to install a dictionary file to QStarDict, press the "Add Dictionary" button, which is marked on the screenshot.

Doing it would result in opening a file dialog:

In the file dialog, select "StarDict IFO files" filter (marked on the screenshot) and then pick the ".ifo" file of the dictionary you want to add.

Note that the .idx and .dict.dz files must be in the same directory as the .ifo file in order to allow the dictionary to be successfully imported.

After importing the dictionary, it would appear at the top of the list of dictionaries in the settings dialog:

After pressing OK the added dictionary will be enabled and it will be possible to look up words from it.

Looking up words

It is possible to look up words in the main window of QStarDict. The words to be looked up can be typed into the text input. By default, the words are searched as soon as they are typed, but this behaviour can be turned off in the General tab of the settings dialog.

Popup window

A popup window is a window that can be shown near words selected by mouse. Its behaviour can be configured in the "Popup window" tab of the settings dialog.

qstardict/docs/en_GB/styles/000077500000000000000000000000001453553600400163065ustar00rootroot00000000000000qstardict/docs/en_GB/styles/style.css000066400000000000000000000025531453553600400201650ustar00rootroot00000000000000body { background-size: 120% auto; margin-top: 20px; margin-bottom: 20px; margin-left: 20px; margin-right: 20px; font-size: 12pt; font-color: #000000; font-family: "DejaVu Sans", "Sans"; text-align: center; } p, h1, h2, ul, dl { margin-left: 20px; margin-right: 20px; margin-top: 10px; margin-bottom: 10px; } #wrap { display: inline-block; max-width: 640px; height: 100%; text-align: left; } h1 { font-weight: normal; text-align: center; font-size: 16pt; } h2 { font-size: 1.2em; } a { text-decoration: none; color: #398500; } a:hover { text-decoration: underline; } p.thumbnail { text-align: center; } img.link_image { border-width: 0px; margin-left: 1px; margin-right: 1px; margin-top: 1px; margin-bottom: 1px; } img.link_image:hover { border-width: 1px; margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; } p.code { margin-top:5px; margin-bottom: 5px; margin-left: 20px; } code { font-family: "DejaVu Sans Mono", "Courier New", "Monospace"; font-size: 9pt; font-weight: bold; } dt { font-weight: bold; } ul > dd, ul > li { display: list-item; list-style: square; } form { margin-top: 30px; margin-left: 20px; margin-bottom: 0px; } a h2 { color: black; } qstardict/docs/ru_RU/000077500000000000000000000000001453553600400150455ustar00rootroot00000000000000qstardict/docs/ru_RU/images/000077500000000000000000000000001453553600400163125ustar00rootroot00000000000000qstardict/docs/ru_RU/images/add-dialog-kiwix.png000066400000000000000000001022161453553600400221400ustar00rootroot00000000000000PNG  IHDRzfH{N pHYs+ IDATx^wx_)((hK{OQQQK%(Ee%K-eC׽7?ڔ4'9qNܜw[H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"H$D"(CH$4!(RGD"H$)] ED"He__D"H$ɍI"H$&7 ܸM^wjz%D"SN7˹JNCNG"H${rJzUdvgwD"Hes W"H$ɝ#YvM'5Jr6I$DYr ʪmʪ~A`d6fU?sGnD"YrPɪeU?Bn3mm YGfJ$DrAud}[Ff+3m]m[UH$Ddo=%3fmDDf'3mE<<.73z$DroSbśxi'd̴Rr(vdwg9:J$Dr$]d̴r6dW}AD"HnNe&*)#;-F21⪽Uc!H$$'ja?\ߕ-ƌXYՍ~omwxk#H$NFćm|om+agUqv7zEvo4,JuU݈UU _]i+H${̈ wmV~+eU7bcU7bco3<.+soO }+q%:ߪY;jl+D"H$+":Fg*@zY[+z)(<;yfKffmEKcsEیʑH$$x"B2c%<0KWm\1fY)<ۓHg%RǬO팒UH$ D؏+*4H=&VuRG\3E20Ibba]ǕɮvW6;͗H$Ĉ"CmHRwr{Ns[yccrm~f=Ub6nVۋ~MSg =:)uDD}F%D"1Ý0>ц>=cLiUXfyEV wx'q}1bn' 9+'f>q=:fD"H$fV"Uh"L/<'z?]=G\7֍Vq+2wKV w[3dXm1f ;ʯuXxjK$DÕms~Ѷ0'qc9f1cc淪[v@2SųʷZtD#֍~1n$\DɕH$݋7U',G,]7f~#F9z_s^7"V~W[ÝxqSLExWOef1gsU7Ix+H$o\c**GK}24/aQ1Čs*󢸍zw>xqDnE;gVK1jA(E#ufy`H$$3X }Fwtբ:`33 ;3޿m3nWl2Y?f>#Q(B Nr|^~f}}}J^MRmM3֭Si%wɽg 3ruPŲY'$ɗkع-g}~cm#_fq3WdƬ3(ĺO_tybPg~}TRi|}|BPRED"H$ g~i[=rbܸiSĞQ-;Ğ+X1&:2QdtDQfVŚYݸ~OD Jի7jӶ]M̓F"H$݄bA+Wr…%K۾}qnۙhm;W@A3u,Ǹ"hSph-[mD"H$w=J.\pƵ3ź;;GE YܝO ^1O?:_u?_O"H$]o$-t`rѬK_"GF[yezƝz{4b<((tocK(yx'cDGGc#0/Zk8AM EA4ZJOBD"HrEQECԜn ;+u1&3cXz?d}^f0nb\u&yFg&S|Y86l܀n'88TEEQAUԔ@CUU4\Lmn%D">۸}W(f@WFޗ1&qrZ虊*@Bz\t<M8rK,fBT Ԓq3!ih8vBi)"P"H$B;yzL;_uԍ'ykB[Uco惴bMϱiuƘ^Z =Ill,89yNBp][I(8!/Tl E44x%D"(Ę.m'os.q)tQo:b٢Eg3%ffSK؛P4TP%> }bTM~+܅ܺu}#$nCEm`Fq3r|fvq'7;g5:UQ__6•da70YTp |l ؝D˯m߁)gpQ1M ?qs|%]iզ bH"}{ݩݻݮ0o-tD<ś,!zَ*z]m냤zJJ^RR6 T) $N'UUI'Y._L>>4>3N'`L>e˔"j.˴)5|H?n,ڷ#0 @hO@Hbԩ&D2FbBcK]2tS&MHw_u^PuW/>c3_SBjm8g\Ϩug( h* Qx,ūK 8-V"I&:yat}a֭[>͌iS 8y W\al6ZULq͛5ݒ"1!5k4ݻ? ;FvMW^>L'2B͚5y{ :,Ecs o3jOJ+!#D[ʟ0s qѭ$9rʗ+?_:߼4mւ63gWhZ5fǮ]ԨQ &Ӻm=K.Mm{ynہ-[3$%%CXp5iF&hٺ-o ­[xg}Mj_Nx$͚́ՠQ V' jЈ~1_Ñ{^Y!-Z5kSc=$6Qfԍ/LXa.[?ٳѬ]U*t" yH;z!!<ӳ'K/r~uqu֭aя 9v+VNd1zXʖ+ @jelڀ_-6Э[Wkbccyoڷm5Wi&W.19lXGj=L2Q`ú5 ؟o#M|lXukO0qRS5dgz ֍q&{f}:_Wj* ՞?7oĤ dqsٶ};{Iv{pv@@\}2d(~B"ExzQ~6F *bo2z̻@xx]VN:rQERl߱Nnzǟ=(TEEc0g޲w^;e҄,k813jn|:bz <#mY;;~Vm^n%6XZՍθ͢"OQ|lԟSQUR% ?J?*(RIrZDmӉ5B!\_t9ʕ+q/?ObEHLLW_#229_|Η_|Nm Ku 6_؋41c>)T(5W,_U+t"ʕ+>S),BM8poT, \Lv11+v[8V,g˦~u^ʼy_nz&ǗswzIۂ͛\z"cYb9V,駟bw҉EŊȻcưw_υ glظSA}6oʮݻ7i'OSǎ,]Ǐ) ]tyUjFER2i~cʤ g]L-4]i 1Y#YqY!1h}b).>ucUٻwTTUIF⏢U[Ef/1`w$9i/vE.]IHHH]44$ 4 &:Wp88{,ϧcvkۖݻw˵}:pfM͛7YZ???O-Y@:u`ÁөU~'N`ҥv^JtL lr5h 6},[B4v-[Ҷuڟ CRR"K-Shҥt_CTP2eˈi8NndGŊh|4nQٵ{7M:6Hq&CK/2Ka_p%MR%8aC?F׮]ذq#~4^%wY!rBonj94/K.*n4U]"uQg\l)m=NӦz*.\@J4>-J򂡮<> H$Yɓ'TOm$:l8+Wgz!I6ӾC'~{]7J$_|y#Y9SJnf]jOb*E:9~G mW1VYL04}7z1W7+BScf}Ԩy IDATo@zq/F:TU% *URJƾ.H$$W`EQ]3跪[]^1}t Wq[m\Ļ{9D"Hr_f 3x7x@1OhD"H$.fs+ V1OdF; 3+'H$Dro"4Ղ1V9:f~3 ^g7$湲QKETٱD"Hrfs;m2rq7n'H$8;goX!'18AWS6[rr%D"<D!._X!}9Bv w;aJbN<'%H$B4KJn0qUu33 .^U1׬D"H$fBڛEb)9F|;!aU7/7;0bL~mZD"H$fs;`mU=Gnjp\!1;zi\Ւ/H$";W Bi7: tvPH4buPbfyD"H=y8z*#RʟcwԕmU7b)1D"H]\iE>Q;uOl!H?ҸqHbD"H${q7~CFY\,}N =O1wmvĺ'H$l7[c/Wۄ8`A}Jn_̔H$Drb6^}:}GigO=AlfH"H$ɽ+ jh/jƛ>qw`\Ս#H$lw ĺFDhOēqP=b׍~\z.%n@)[Uz%D"pԍ:@Jѧtn\ŝzrurˉah\[&)Y]f'#A.'婡>4OAxb7u}Ŗ>[MVЊ+G OmnK1ahguFdFρubרEqk^9dۍȟ+=v3z{;?x#]M956 oo(Dl%!?3~F̴3V>DyYYb6f.VJb_q)2UTa]b(fOcUz8#sjWNu*QnݗM8Oϣ39z? -gCvPT DXoi)_Юsp,>~=#O j6>k\296DZ)R)ν_څL9iG&N ĢHxɧNLOۏrkNj{ѰP3s`6 (Ќ10 3m?s'2LW,PIְuZ?&l=h߱;Hc>tmۊ:ܻ8 ص5M[k(Dk6s҅^E9OvĦn7=iӸ>͙7!%đ_]iٸ> 7ev8=Z5"IWz[]CLcQ1:>ÀY;q*ddH˶qGXzt  ᷱ ŻM"d̎mqoKV? Oh?Ƭ'ٓϏ9Np"-ኆmr~C^j-_ Ef j4u @oyo٘Ȩy->~1$naDHZ?֍i=vs_h@Vx+yE#|ڣa2}9L>^bޟ[赮4j؛8I֩ 'Ӿ)" 3 nI`q|e+g kk$5 Ю_}»2u_X<mBddCvyi[ކQ㍩Ә̙<8É69@Zyarm?YƲvkӘ+f7iCQTqp\ӂg6A}ycl 'J\ÆA ^cȡLڑ\f\QJvdɌR%]PzI;xU$au K:s Y1iB]yyl;( mze)s0W r翫NYD[<"Jr^P|=#`߷C 㛥+~=_CC ȯ+΃{yoNTJ4{F\q>X_w<R;4lHhcNۜ,={9بڶ5UVj+Fn U޵N'ыFoRr?mmO-#,ҟAߝXpWDڽH76p<ڴWeSv]|Ofhm::/6*H̎  æȭ"5ᕬ?w{nnɘow_6ַ]&(ҌYpM=veq{RЗi=\QLϲ|&&0ቊBB*|f$xpus KIZqMc@!(̈́%>S㛘=#6h8и}^!xj5tCvkwrplZҦs|>`8QɟK'۝A\ndvboWrm>er;KĚyw..oDmS%J糘*%=xP ivrY(XxKJ*q |},bi(ޞcSp(Y7iϕGQ {aNyzo _Ѹz$|ѽS Jhc(E.v:͕9<|͟VϡFCV??gkpߣB hÅ>gmt~JӼhfq{*w/c؆3:ㄊ6ݙE>ùe 9ũN(GIU0|ىncoq3R7pm[Q qV~yӟ>qݥz9Yo7`4<7fӡ1tom9v4kҮnc٦Ki4a8o`ӯu[J` *J``*w+ }Ѹ#|G}zl/18_ =ߍseM4V.uoD! 0O?@E[CgkߓQCxflA _>QQc.8eK#xh<5zv-JCA8+D$7g61&sn5Ǜl#suĘ%(B)zlМ׹p1[ޠ2*$Q-÷29_[5?hؚ[XA ZFnN`64+Jh?KC)]Bl(Y<+Eq]E*uB}S#ҽ{rc7´˽Jre?WhoGq36[N%JJ,"4-͙Wkq I%N )>.W*Ytab g |;u|\oepR.#滝пFQIr1{| ,"(h7";%/K%؛+p"t97? q8 u6^f8(ēQ~.[`ٺ2N M%\6֍7bǞxLA-Lєm(M9ի=V֮rɡ)Ci8dمt3W΃HPG|cx@`P@dquϧ0t '3k\=;ǫ>~`Oɏ}QE * qM4 "P3X N^Ƿd~˳SX$f8]!G2k@-E*/peJ`|H7ֹ q?t&+ޯ'q YAqіRp+AS}O}ļ+\27a|[ 薓5&mz7#lKպaH ΝL8c50l~|_qhn+Ui` *) "/.þ|"ql44U>sM%PnϰYW{13:Qg+>7S+Eȹjd8j|cG?c-ģe7(i2fj:g[X{5)_!-P5.\BEG#U<(()Ѭf,50^d3n ѣiQKΜcB /vlGՅٜ<$AYT[UMmjr sP4ZR g;Ĝ)ȗs+@>UAp3qP9өb2V\³S&rXby?TƱcPʗˏmy}BN{SҤq?WKc z^3#g$ 8 O|%ACw }S!w3y3Jt`Tlex0"-]w#*-7`6:bFx`Ÿ$7@~VPM#fL"ХZlW8y*U˒/G;ub ]ly_Ne}1 -j4i vRMK*p~(5Bl^"7b "iškH򫘻c<~YjEz5;`q$7;i>TAo1|$׳Fkk'1da@> (Ayb҄ӹ?=S__;Vb>XqIY<5/KӶaڻGrb,w$jL6Ns<1bcXSKrz5ʄk7'_ej(n{ J-ey ڿZ0h\sr nXˮ@jy! 3S_|f8=7}U˿$6 =Ԋ;8br\_ W#jbf~s$SOSl`5|rԗyS4oԘFg̢C)r(Yӯ qRy1\+g~Y5h8~2+J6#135lXYf/gaD>Cb|A9T %pd,H:'vˏ,X})=kOi֩pB&#IwA+zܕZv9)dj3sՂᴨ~㸭-O-Z#ѻYUN?b *4{g_ώ9&V\篋P0_E.lUGޞ!C~tۦ[ŊjE[oqYhIIٿ&/Lj .#+ >eMW>僧+'?i $8П lwh<ѕ2e4L7]g Vg'cfx)<]YO;mORcfuհLzc(m)K_c9y{=|q=:WM;/l+:`BP÷omOcMIS-ϢRxO!;q;ƾS^o8*sXXܕn " >SNj0b_Tg}-/l[~ql ?_lBsj˿IzZpi"g83 c^cդ)7 /~UZc8>L7;#&..6;21D}C%H'd͢sԜW_G'wBm68Q]gS%XVAǕ(jImHW,C+Ӓeӆ)gG~^m:RM߾w{n1C.YV6}ݛ j[Sleޠa仸.@yf6私EY>h ?@21m!m x"O"lT ۶eٜQeٕu7vm%JݕDF6Vy|Д+@~\SNfxi;uOR(W|?ҾnEd #@Z IDATpil)ѕ>-Jx6wf ?;L2)E޴),I$D"ɨ{2pr\2BhӎDe\3[+u'.\(V.V9K'H$܈yVd}^V+طz{EHN?iͻ3DEDDRLJ\h9)=bPҠc7B֔NLX;~$> *2Z9n%!nݒ,:6 ,vvAHv,^oF4vQl2͡A\vޕ,ٮ _a'qۋ:Q<3 wܒhٰ-~N4 g&+CV[f`Xe ]?mHv'5Yj+{ ~DG$(%x=cz1B^֡liL^ h.yI?0m9Q؉GB)ŗR\(=yzɹ֓ixzH_fڃ/iH:mkܾo_Wnjym VrGi[-OE*eʖ%x~|=FP)A(U0 CגĘm|=KlslTPT8bffvMBx!T3g/bӁ\'?{ 4(j)[bJUU=Z8:/Η\)LVT ϲө|wN]pHyB=sLZޠLRvʃ g2**k&>_C5('蕟0i #!b<3(i<4>oYjYxmzc*T|bİ&cmlWWFa}\̴!d@ڤ=D+Fn%J ˧D8ϳj(>Tp<ϮMkhP! &z'NOE9v#:]YziLذy.C.[S~X}ȕOc ȊyX ǻ1a%OAh798^ښM[Ц|14?o@KJ A|*`(:Ob$ 5nKd=zSzwQT#Z<5oC(s'~ˈ^iEdvt{=Ox}$ڏ1zEcNx}K5I>4H}U%^JYpΥ׽%귤yN}'8 Nx+?BXܿ#ÃhǸvԩN J6qvnEPX^&wG툮Z)wx? #""J/ PAkAEP좈k/^]bAAAE&#{ədSys}sfvf& 5y+{1,ƌy9,vom&ڽ;=L'_ha8rCƨ)=Av}37ԁ}}9\ҏav+r9=Ag_6忭=F^YSbĉ8Ny @.;^]>ȥCгν]"o)D+wrӫ7}N8˟'mBrT=*?>IwOᒣpw/?sXD7ɤ%{g[Lƣ?C4WV:>:^ 6'7 n gE1v@A\L25\^Ϸ Vn˹wNګokocq^>:ww|p g:^Ni'wΩ},FŌϛ$$b2m'Q'Hr"紭J_fcVN >t/^{?~tg OcN[%kX<1K^#|E>FY[nEHk?;dSAx1ci._rX j 0Z A.=ңC(#v8pGmR>zvA{3/Yi,ZYt:+w u5^_ֆ8c 6Oxޅ3.L'qX>o{[y~һʙ:hZ7%:gjAP{q5̸},Sfq{o '=ڑYo[EISȲ~K}Cn=84yVEڑr-Og?= _Z%^!'e5ODr1L$WoLۃ3pl%\{՜yd]=es͵it:dď d3;x?-Ǟpv-Ӈavg5K.%OMxQY&7^fD#;2Ԯ;7~+1R,|'a߲@I55xbq!rw}ƿ[NcѽnΘ­bߺ1V0tXƍ|=S=;! ~槕y8U[Ѧy6+XOS-"DC[b rpHkՕߝZ2!aL*T d,_4wn"qCAU9.I[qH2P%SQ=Y/?~˹Fؼz A$+{Ǝ9> 8tw~.;;Ai7~Xi̦ӹ/eN-[;>kE#\/ddzI=iC[V#tz> =sm.ećg37f/FH>2y ag3:}-*Y|56~_t((CڝVEl귛oצu -CoӳErsFsC8kIpK(N ۿ_\@N y3hUŁV})3|x}B@<~h?gi3.&לP1T=r^Mf;3pq娔ݴ4ff j:d;{d4͗]7?“:Pv13Mg"O䣹;9aOcN/ Frb}zs>k3dnoCs;}.n8ySqK3U.l`"klĈ[gq|eGJޝx7q%P+wT%5PT:.v!ȆYL*+Zrâ Oe:Tmԃ7\J.~K\~.JU TܽڛΈs^.&Ӱc[`c(L9潇Ӝkϳx 7 iHmz>=vF=c{iukń{w+*3WىbYO;ԯ_B1qldߖ! mڨ=g_a_q",^۷=oJ45"D^)o<ʻ3㆙a cyYM_I<;[m{sڃK_74֓Uپlסvr2h$p6%ũ,߱q|svm.lfo!iSj/?Ȯ}"Czzwv.yN j5io,v{YdW0.xUv6߄[?;VJaymwdDSY]o?dƋ+sW1y-azIjHaX IM[, UpK$3f-#{o8DQݻm֍a'4bƫd4]|\o%ړ^]V\rs#gxx/wf68uѰ Czp"ش984jD0ޱ6¦-7Ecb鷍a,ڝ3)g&IZf#n^2]jiL^ކ/ |)Q 'wۗ[_%o[o' ^f&.Tw3ٛ邓J3fozXLa^i_P%InBF! Dj.5kz:5 /x/5*i_'FP'2N:)l\Q{᯿RnmREKJAt8V7w;?mUb+#v3w6dDؼq uj7yIݱ*{>H',t+Rr^xVœ7>YCaG8.׮6xݝ^q5*5[>o23j;um!-#~ǚ5ϗ.-qAt)b>8<<'„G8{/iё#귥S$V8Vک'GY?w,yr֦NZ/?G?WDGsat6>^[NDDu? ykW>B5I7O(!?) 2G3\ 354i՘Jk`Hrd7C9_BwCuЧﱜ8|FzI,oo1i٬Tq]Y+Xg'9G?vhΑ=z*,|wMmH"YdG8iŹ]A۟ꄋp-UbyL+ 7bDvv6))q܆ MRRS{NcVЂANrֹtj_Ǽa&ӮGj#]#hFJ<9g2-p7*t 7Wɴ>{guJ=SFyG&sy*ԪW;?nGZ0m [oMݩ{l-N!e_~Ȭ_' 5У߱Z ;IQ3$9lZ*kdZI 5wߖ<˯yUО-Kޅ\Gu.~u|CN9d;=i Bd\^yg2|§?nf#ȟ3꼩B~ s"/,ˡZT_.//pn ;Г0}WJ'but_R_ζW!/ }>! R<08NK8\خg켉f ͪ1D[pHIF*iTPθF8[y/Nujm<=wO~\}\MRuײÛV0AF;쁛㥕=rWYq\{toDzOgc&E!&L沁mHY_mjD!e1cY& *ݮџ\)GdxF+Ons=jF˙pvk«3c]*{ҹZɴԆdB4l׎Z{ Wږ>l&гr8F^=odo{E =n>&yxnTfouw܅\س)If;s}WQ>+9e& }KW3ŋPA\>7-" xx|QS9;S~1ph/҉@c-ϫƧ2hSc-< ,k=6Y)1Ngw#}L^{K6ygT'#܄ә:r=1>_ȡŝEf*id!w뒳>c>˶:,Z}3ߞ !!"_n-K7Ï>g*4o۔_fK/{ Zhʤ Nqs| |;?dq3OgZw,esOؿaF{=<=TV!zɑ?;w n]桩x`4|{1EN^:/4c=6z,ck}HXIѦU> H4$ ۶mc޳[^1HIIZZ5ԭC͚>RKRZ^_`!Pi[W3?I^ծȝw]}2'^c/x׍7 7gRX|Dq.UnTScף))jgjddd8UwU%//[I8zꤧ)Aʝ[~Y+g D\Ɵ|'sΧm[ZD6Q(Wy)Br4y<^B"d\ȃGe|$NOɸn㍱ɣc}DMӉ7ĔKZA2&;;I㯦J\?^I$rMwr9I v05SPfs:qcOsɷYowR޼F>/@Zxo^Bݘƌj.|xBza\q^ןԧzժd49n¨>cڋKAtʑGw]~TW<xe9#:|2u7{%G̕*u}ؗn ?z3\8W9>KF 1}T.~x>[Kly^zqHZ1)K|WΦ15Ad1TMK;i,^Z޶I޽l!Kwi/YcY,\ك l-[н[WO׾};/V\/t@ƃ7Y`!NaHøy|[CB^O᫝ѹx{1Uk%G_M6rC3;=&[{%ݢ7|%8N~L'[xjKDY=x-/ $|ի(eeerǵWQF:ML(.a^V(5}FeqEgS&9X&Pvʒfc;b\ :bo}[>w6Õyd{3 V##N`f-.nAI[X)b`^#`˕ 1eUXA(ԫM/ϕ+d+ɨYkn+c ;-> }+;ɠFueB2ȸ![yxgoݺ?f3{DV- &LFjܲvam^+tw>bm$ޚAcd6aFӷO?zGfq8;{7An/RswsY>8k &Uc+sJy ^u^kybt̜ẢCO /lO6n4cI|RL˭s4dW_δgP-:]6}7ĊUH8mO=o"NV7{sGӆ)Lt24yk2uLWn8ntao~ސO=4jPv*/x/gbY̙% ʨ6sҏ;ge6g&Na11&wm˲q{7׌sɅOpB!/G}:ubʽwv*m'ygj^Mh{(S;>ucG'B'!x2әn7*uh=`4kAuF12۹HA3k6++bSSx&A&ٶyi^ޡNu݌ZXqH45N2Z2h =_ιښYu}1B,\r@S]۪UK (Ν;'M>+#Xz5Z!J㎞hgK://VJk AA(a31 3% 0}mcf 5A⢘K ۃ;IzA PY1嵐m~)lkشr^ЃWg;NyAa^_N'h]B)/@'Gz߹AwWj5\D VcjfTAtyVA*7m[t6{scf v$HM`mbayS3 'B$XAA|'0cs]+5|I05^mLAA*kj75+ٰ0 g IjR̜RFJOfNI/IIIdgg$%ٮ/LlZ"09(zNPY/p@:#̼̜<-_G_(Ͽ"fdgg/f`^MO565[kfތˌbYbR XGmֺ>-B7nD K&5Xn|;sʹC$D5T7MY[1{ %%jiըߠ -\K(LMϙ8H\*å7a@(3To TTjfdqh<pիn8TU<9q:k9V(a)̜ٛxeFi=Mc fb/ݫ 8CFFfJH rTtWq3'.KAyu9j[Arc^U<L:01eBy~`̙OAʋ׵_Ss*ش AiXZϛϫ7*66y~9AA*/zoA$j76bMi=Xv`cHt*x)TReOJJJVRRR  W&gggWJsǭY֑>!i99S{DыKQEuj3mW)-B]Knx޼S\u\ E"뺡hv]׉D"ar!uCU-\uuj}ahth·VA32.Ztm_kѱ>_q>XtBP^TS}$ OkNx>DǪf>F+2!Ug iTtb-d)9WNpb7klwc}_Ulgjk6]4AA15xP,Xz.O˛qVfƦkX5ȍfNW뺉MӉ/;z.v+ly@`9[$Z1zyѷ gOߞUSMǦf(i^A-A^o^fH5eTٔn33m爎Uofbt^z)M*Ƕk8)]zLm*9:GkN^D+Lzfk  6:zf^;ǪqV7U)Mccj^/˕+ee\C[ Scz[GuԶ(l"+sͼhNfPMiNT~XMM^c B@fڰ]SͱX?M'tfƹi_$mM7~ڶE3Qc}P)\ N?J7Ǫ7TȯwXUl;OPA:!-4o٪64}_kXlx cA뫎~4(VU;Ӎ~O^Maͼ҃.!Bʜ(M7+n4{ljnwE(oF(# SfQrvT43gͱ  ċvc75krzl0fͬ1K=[v5iXz^f]v KUJǢL]Ǥ^.FMuv"F4n&X훪3͚j:3a4A_6MG?W9G]b?b޼g6)MG>+8kF/jquW땆uJ3< .p:54'Zj[j7unAi`֚|,}lz͜c3jh9V)yzA效DDRԐtAKIMDdA~ 'ڻZ^eiMæĜcbA]cMԵ뱭Լ̖m3]S7s5ͱBʙشr< &Pnjm5v:u >Mt?3GA]#c543~jfl6wZ3uӴ# tLOmB(KRXXu M1kƺiSyU߮u: Mf9^AAìc3fzi.Ff6hc}̼ fKD=̃ަAуhbe3M2{z҉jCx+TަҽbAAyc鮇r Vu4so]-t-VMi~[K^,\&Ħ+DzKmf^7{Tm蟣Sws7UM5bAjA ¬Qy5L4iţFN1m.X71tlxBY=0*Vǜ49ԩ4Q:zS;^7z{{A/+tcy]:LLg1>ut̛I|PpqLK6{+AکM+MLAQæM׍9[]q(}yvX̼fOźr:JSy/͛y /jf, A0f ^4/3rX4stMfk \) .M-&c~P/sDuTytͫFAzv$H p`fjfLݯW-VkAjqfF [NL)oRX2jΜQ:QM7Szo'Yka(̼{u/ z׍c7f{ըelwu 1~-W.s)0؆MC,w\wTswf뺩)LMb[Φ uӆ3 75Gf4ixԩ45/b?̹eN:^"^̹zMlu6MzիsLtAA( ^ftl6Sd:52dffk:E,+ޛc^y/=0uG|z]G˩4r6}u3g~slA!^N3c֘LVKʙ9Y甦6z.E+4u0 ̜뚞3uS26{u4/ XGx*uXm-g4/]ams:X-_fS.^bt':VyNSͦXo  v-U10WcS{/MoͱGqEi uWmjvXަ)bu͆_/' ^]+rPbަ93u-k،^a^r#цo=͎>6盺mz<93~WU/ `#1˛&)،M5|<9]zlγmrqhCෞ_Na3:6͌VfVczqN  ؈e0lySmc^u=Q9S7VcE A2Izի͜yS7^9{N8sAs:6\m쥛y[>V^~sflR|`}^5MsB|~¶n؋u:ř# 8c^9^j٫g_^c/UIQWjLTޫ܎9[ \sP>AA! oyn6ԋ-[_P Țũ2M&f+t=Q5zo^y֌$sAsilc-o ]OT?HTM`JY3H #ljz[k(= PIyZ$mlg^+-g֙A4.A,n45_go g  Kq̇9(uozS1c7NJ ufEQF!Ajha2nl̙N5ms4?' |xlMi:fr6Ma3Ƕ؋ uAj4Bе[e:͉Ut96U# %% )N2i:~uzךc[E4BеA☩X6ϖi&+Vx P2++V،M똺mWGڠuqQچ"Lk:^5^c^y/]+GI XsIDAT^\yuj:^5zf#hW}gxjh_lt:oxxsAAQ>Xeʼ&~uXSOm\)u >Xtl9S3c. #^"93s:f.8A2n:f.؆Ʀ{Qy 76Ĭ71sƱ()KSQojbfMq,A I Z0m5bk~v}(kS3ck&f]o$z=AA#k=njflVcjf v-Ή؄M נ[slzP9]AA(kb]Ma Gs/e,n y6 ZN:AA52~u~9[MX;/Sw14ř(ݏAxL< 9҃PřSbA PqyADr^:Př*I)>w~9(y^AbrA)ŝ*)~dNub!X"ZAA߉U+S OI]+hW[j; B夬I< Z.%Y$sJE5%ٯ#u"Q Bi(S:$dnPMDIPmd  odnPJ/}L:A)Ţ PT4cR%jRa'j_N"$ %"DS)U7QZ[Z P~+ujpJ{K{}AAOi^?TCSV# BltvJf^vA2S^&p*A"  5HU}*18  EΆ9 P9`L 19c$ BLLɑc(  &l- bAAAAAAAAAAAAAAAAAAAAAAYSIENDB`qstardict/docs/ru_RU/images/file-dialog-kiwix.png000066400000000000000000002245761453553600400223450ustar00rootroot00000000000000PNG  IHDRVP pHYs+ IDATxw|].(--eo! |d (8qTPP! lCWe,DĂ2TP:h-IGI^/%jz>}$'WߟDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD3XY)k瑈oe&d) CY8WDDDDDDDZy*(!Ki z^!H YJ[@DDDDDD 4 /g_>_ \'_|oŔ ڹu x?"`$sODDDDDDOIO%=O,zq-6DDDDDD[U\khݗ#mkmʾW.}!P-ŠW)*^X|>QҠ-EI[]p8+޾wں0gBDDDDDDA3;CgZ͋xO*&΄,U'"""""shUKWoSb޺v\*qDŽDDDDDDTbْ3 Y|NFVy"JI p|(% k\8zLW/O_{+TQ.s6L)~8 ⩹S!5H~Tɋsw**S٧3/򣥽]Od{xbӡJIw)Tx6DDDDDD>o•A;BOw+9T9BPGs{郧R6Î(*ZaB%݆<s8lX R XYⶀ4+B D<#vf%""""""Ǖbٻ8Ag9!vGR"jEDDDDDDT9;Gvfe$+^T30EޙF:ӆ|7JeH"ـJV<8 S)h[-눈pd"X[ 3-ZBGo+&XFrֶH?l VWLhLu Zbyn~NW*Wx*TzmkZCgXY3DDDDDDኋuG'uv Vb/Xh闵xrŗG*El?Z @T([dz?{mK00!"""""M%w)ʶ[ǶFmC WJ}P ‘@zJ{{R;WENFN?jmTXk֡BZG[pEy3@(@2"뇒'*Wܱ""""""Ż4~E;[V{:2QֲNmK;A\QyR+2Fkb+(@аg>K-DDDDDDgm̜)jCy˵T+ *z<8;PEkT-ue'""""""*(Q.7W|#!ѐEkmJ:ܧL+Ɣ4TQ&֩G-H2Z;:Xhp79ZIhu-,f+6j WoT+5T>Ԗگ*#CgBDDDDDJrh#U%*U$ʡBv\ `*٪D~lUXÐjVQ颵ZްCmZȢZQkg1=Y`wrvZC[(+y2-aZnl\<6֕-Y Z;k%uXkgEBkYeاjCPتjޔ˔h g8_+ U*j(ZdF~mc-ZB[m Q<ĐogF@C(kg9JEm=)+W^5׸břj{ZK[eX"F1044 8yd7qm{-\ۡ|Z%H$zG:qC82UNV |9իרе[fz> BUHh2&oݲse̱!D­\dH[]Iwp+ΫbkhZ"ǎHݺu߫WWQ+B"""""""UQ+֫W+W׮]#h߾}a=qzV3ޮ̰7A󪨅-PE-ChhHn{4S96u,$$5 #KTGȶ6 ּ^{;k;ZvRGg0u(%"""""""Ne0huZ\9~}:.sySIZK{C,Y Dejx{6gҥKtC`ҭẀH Ad6I`Q;!B*9p:JA(}mNA@aA"Nnk,-]3ȳ[o2R*k钭yVEy{"L&vш+"b#!DADA@ >?Q!1ȹM6J=yX PLlPK'Ά+%`Z%,Q['.^*X/U$᯿ #Adf(_/!+R"d6"Tt" ?9@zP0Tl_c+Er\ZkyW9k'Ҳ2G~e_DC`A~ H ,Pt"`Ud: 0&n޼ m$;FHK.9y9bu#Gp)Gv)A_[+p$lQa#*5Z*(,;)XTdP @' U+"`6[EQ^`}1eb'M m#"6C3zux[DD$sD%e豯/=59+˵ڵ ek NNk)`=???B @E]$D(d\$H=3?B'#u%""r={pAowik[CVR;EDT&Z,iӦxw;xc;}%prm Z,{T Nn\g}6$K/[RX4t :`ӑ4ԉKC?yct= Ly8pӰylڰ `0Xk@>"9%(?NT}}:tyر#ƌ+n?r X|RRRP^=jԨuCnn. ":thoOC>bwqGÆO?/E2ujԨ#G}|,Y [lChؠƽ*jԬQدk酿UI@Z`41up3'5W)oJ*80L00 ֣͛w1qNhesÂc-FlE;v&"00& ~~~Vy/%%} Ͻ?5moNBPPΝ?Y̙`4#!9 6nāRJغe+пCx晧 6l܈om 7b721GPZ5,x!93gʕ+u:l'/S0} d Vyv(b*c }?ber*AģSi PH?33__ԮU9#"*,@BP̛3DDzgP,)V-+%ܿ?(Xep4HbU͕l#_gR::6VDQ, ׋F2`4ͫ2ǁRMzL^`P "Rah=h"446l*|_pfvvۃ`W_Y7nDT oboioS͗+WbE~f4_Ʉož=ЪƼ مoty|*> 5 vnÇt2`OK!|b9v|wm/ܜΙ];cۖPj5,[ @ף{׮X+lݼ XS3o. 6}{va>U>^Çcҥع}+ޜ80vڹ}{[kv] glD'kU8~8~{v[nCƍXj~ߛJkժS`mش[deecժ5ŶKOO_?`٭ [RS'7aqM}ki];cn}wΈ"y4%POBEW ^ǫ^F^`mȏr)xݶ)[c=(X^ޙ[szP8 [7ߖ!gFU :QC|ގ?ߏc+/l6[߽[w۰TkhG 0r andffP?`0ٳ8wcHioO رխANW~#6cO#""zO>f_y3cb ktݸx-[1t`W?jԨQ+.m c~>b*T@-\M4)У{7jO^عsg_qx W,nA͛(={P%.ݺu-|}>5kfz"22II?/W{猈r(gYۏ;Q36Z孅' W][{SjTVJ%_o*E-}W Q, X@n- 0Ctm8y-OEii0s,̘pbj֬cG aԩ]  sgrTX*T(\[2f33 V@ŊZx1l˚o"?? 6YVuLt4SS v*bd. r4Ү.{0WRRRl @ha' &:C<[8s\r\x *Wxxߎ-|}qt`0вEK{U\3]0E=zǾtNhn]SyH\ض{[YYY ڵtѶrYTW=sFDTx(M#G܏rIUY3KCo@>ʜ@N<*vFjڧCVX+q[%?Gk*jZ)Xzʢ[)A ć7_(@/0X!"U?f̜{y6}~-o܈낀@lj@ffVjKIIEѷ/&_-| DߚŖԔ|x ޜ8pܕ"/\ȂㆇGu$r[}w:n=1ʔh4a }UsM4 L|sJaE\XX(t ԯWr`Nj#_D۶wņ]z /!*ԨQ[;|zM!<uXp7Ӯ&M`-طg0gbmٳΟdsPzU;z ޙ_z ~X࢕MrI4_r-猈/Ft'~7g$jysfxknj5GXyJNe2HU)V2$P,,wyVE??A`CDNKkn/tX!"Y?3_pmrf7߯CǩZ5M4G  77Xpu ??v+WFjj*L&/\:ZjvтE8?jժ~Ϟ8~$`Ͽg{}܏RSSa4_ 0jVl?:*fNmRSѰA#''۶msld` uܥKg,\r& upaqG;m|[7sr,4m RR~z5߮[ɄϞ Х0H ŏ gϟaWHI),$ zDSN `~ #:fϝ(NH@4WD[OT}~݋Wi9gDDABX`ӰAMU(M6uC֪bʑ#G٥:[^Kx#(_Đ _+hmHL9`#X @ $_Dt`c\LE!"B66lsR0!A(؜ʕ+d2k+O@? OAZ9tY3g`޳ѱC;KEtßԫ[3gNW@QOY]׳g̟?'NBtL4fx11s 2& =1&w^rL &#1{\f BCCشiZi7"22 ӦNQm∑x's 4c=7^/2ݳW[qGC yYT ȑ#UѧO"۵h'O‡G@`~r:۩pe($I0%Ӯx>,_T[wi]7n\(hܤq0,,] }'~0dpo QѮm[4k hmޭ/W\T;-猈pEIjd#-t˔mVYIk;p6к^)e䳖:ţrMܹzvbf3>x}l۶Ɉm( ? : @\@ CEktysmV.W{n IDATm;P U-֪\$ &w5 LFDd6l6C(Љ"z=D 1Tј_8_k'W(A% QԸ;Xњ(تZ64Zv{eeb|,BE~_߹W*売B^ŢcE)[{nbv/Gױ6Gzk!rڏcڏY`en`E0ևa|֪XyjOm]kW;&+Nֆ)ثRQRDDDDDDDDz%DSe )Q;G:d)_ \l=%]:p(+Xw(ho׶+6D[C G_~DDDDDDD򎼖G˵Zr[d`+V}"aY<6G^LyMux?wgbM8:~ ^%"""""""غv68JG>/WȘ-*DDDDDDD R`Q^F`Zd$ZnmcV9hY!@ 7JKIu9F8(qon {铽\|?,"""""""*9z)}zk<K:UIsyqQVՊr{:kmS{ެXzXDx$a0hrř*jv} C(+CgDDDDDDD<(2{)>ׂ[CXZR0k%HDDDDDDDG24<hI9A,DDDDDDDT28^;_:X+>-%GjC9jCMa0BB/,h6jV~|'V;G>*DDDDDDDekT-Sۯ{U+Vc탲Up5ԮfW*#Xq$zJ2OZ!@JJ@dסÇr?7"""RS#XVW{܇׎,gzWKlͣbk9"RL$\t 09^GTT ~~9V5奚;RK^ I ""RҥKHHGdTD3[&3UTѴMi'Q.صdc?Z|eG{-!""J! +@dC KK?d+qJtw7ηbkLnc-lq;tZQqEQthHOi'Q Q?{|m(e\7q @ $&65*|DDDDDDDn[ֆmX3|-XW`ՊUZBMǹC[m\w шN 'AC EIII8]\?P5>^!QZUJ:ŲgBQf9{k&CQUTݿ@|}!ͻwcNށZʭvգ?` 9WDPL#G4ta+v,fCuw2d6cϞtU|{EǎB9?7x|ԫ[-߅ AYYHJN3hѲc"Na$* `CzQfԃ`ōCefT˓ $`8n|cCw"5<~=UV-< 7У⒒cvtP5jTxL+v! ǏG|| /aϞ=:9tcFgTEo[EZ 2q7gWy)SaIDT89$:͚ U"#q]͐;8rM{k2o|R 8K"&O/fUغf5AmP-cLgwcՎt~`Bq# D*Q<{On4Dsؿn- qnvYe6 Ϟ(0M^QQPœGll,:wp喧TlYuPnO4+K/JNNqhؠ>F(_RRI/cx"+DD.1kײXNZ8q$_8_d8;YW!59tj[/~ksWf,,31eg#/ `Fٓ8s]BušA}?1wZ)ס Gs^c  q B$bBq.=XZbI[4o~(V?ˆ/byxc8owTx"EZx嗰h5eǎo %T5g.xq+DD.vԫ[؜*Zzuqj "A1`ds/~ {bV~9W +Z{m<in ߀pgY5؁}\܍m]0l߸3 Uػ~%.dJ ogJPW•Cc3}ʹy :DQ1iD< ksuZX񴓧/p}aGoԩ'0`@̚3?<(`i%'tk׮E>~ll,~1Q(.Jܼ<=wU}+kSL.6NJٻ.鵻mze_VJJr@4}x4Z;hXk<=2Z>4Ziq~Qh4܋Qwvƣwv.~ xdXs]RWB o+Peƻ@sw+|-^& )\?ucn[iʼnRkؠ>~}샵߮G%+%}ݻzDD.YÆd[*;BP󐟟_nA(\zա`eB7Ç1n]sh[O\9 jugRRZ>8*?|-TV"U,Aʌwq{x(oMeVpC?ѳA -)R2rH|`a$7G w""[|Z^^P&XB^vwJO][j/+Ā|VtcJ\x-7G #qGÆOǎmf32P)8Upe-a' oڝvAnETT9Uk>;_숈\=YYurlCӕe(PZ5Tsh[[Jsݧʑk2wNoLDb-TpwoD@?lbTd}0",^X0Ri_㧟~*|ps3&6n2@XX.;$%%p5%3Gibzj.vEB)%krRoFPLTEPJ\x AppEm;v?Ͻ0C?*.=Zrxbn4a@ެfXz ֮]~ ӦMLTPp4}nDD$ARx{+kt^V_~qh^ vR9$$={tJrrry9QY QVZ-{n *2R6))8r(jժ(;-}+Eɓa._yGC;IPrǎ%>;pNrGOO;sƻN#-7ﺬuA][`65o7lTZe @_I~]i{^Ԩ^U=7/ZήaСqIԫ[T0q~Vv630 U# ='w8rL( zQtۡ>^!\fJ"W&>"kPayx'㏡CɌ/ݻ<αR믽.-( W,J\9wʾKPQ[J*c8<Ν'N!77F JаPDEEΓ6m%=(>Kh?^cQf/ P4*%EDj,=r?~\*~~~xc8֯pe zWG-pϞ]V |rF],ʔ0e$*DTɃU5JWyy;n-3߇<j x{t}h SLKHy-^fjb-Tz4ҥǎUԭScGޜrWxʾ-.6KJ_̈RVxrE!aa ~Wwʕc0>y+V,Z>^4y06ұ~T'<ߋ(>{^thODDDDDDDŠ7*aaa#GxWDDe^l(zf z_DDDD8~r1PE.}Ǻ0+݄&5| vV_{|'R`hG^:?/Ă'p9'zi;!V8#CXnxas oFD)** Q1f32g **J6DDDD8+.d/Txg Dc!%8a̲LŖfx$2Z 74;Cs{Kb<|\ˌF7BͥPƈa4=rL^ckQZIDDDDcB U``'X1<0# -9Hܺ=ǃ+@~ ! zO?@{B̪PۢMͅHLM;6}AШoOfxqԌgBDGTRUTvWl*-$""""1Xqă2涶P9/ KX5%L#Ym Cƅ[  \uRH|)H7=7YhF9U.7p҉wYgn CDD,XB+""ɗ!2~>W\CXdx6m`D ڼ]~.Ы3[>Y0È߾g#еkC'd_'a 㟓gq+DDDDDDDXRj Es|E5Fq30|W+xx'rqJZ+_j-T_+,U3sN(^euksܹ=;xpX!wJIIFd-H| 6mȑx_?wvX|yҘ1'01/fkӭFIZ|璕 k:y-ˊ`Ŋ10!""""""*?8 9 9 9 9 @Y2CpSOְeG'Ux;} """"""*#")_iL@иHo ? 57؈v@fhcoF="""""s,= ǁań^=8 G}?tȼX=[!q&̞=kHX?=Zy57iLl  R@f0潉OgX5]ΏFa@n! gnlcN==uý]Ga+ŬسW`ðX[X8 7If@zSX,ܝ[_4]kg Cn`?P9ss<\1Oރ mвHh> OaDDDDDD^`ХG#8|foI_mo˥`+?Zw[s*,M‹~9Wbh8ah!ClX3b\7c]CYcw8B6wë[p]I+1h٦') '>֭;awigѦ3Xe%&:vD灣ϩV0'ѳS{;Z+!ȗݭ=xKڟianh׾?Ѯm{tN t RňԔ ߔ1/v{⁙aAYDTϩX:1.w }o[m-^/ЩlDt P,a+""ɗ!!|\r aᅩ4 qJ2 X3taLdI&N`tx:ļxo|>ڶ -qTcȯ]?}h!ު|(̝ ~Anߗ͵8)eXѾ /7…l4׷n/ Vy+l`n}௳8bF?{SpƃB jgÌĂ!z@qU_31LU{X-qf* ^_ s =UePr$H0޸gRaigߌ|HQ)U2!2DGDT~59wـf_Ɵo@I @B0nkOg #~@׮ S9Ӆ#Iyv>t -X9sރNgw.헍W"Mİ fA* ǢJ0!9w}d9Dd޼aס +AD 0C2){"!+5fnk AGjJ:$!We0Y#YBvF$ի#L j|Oצ=v14 ?܏dNCDDDDD^Š7H9S}` 2.] .! WfBBc9 ݿ s]_.1HDDDDD$+.LEJ1B(}3ġs3⫪Nۇ n1_o-|];} j=Xn_SLRrIbUk8s& S=DhA4#lƥAx Զ:Ŋ w7o8;ЇމŎ)A_ЧV|vp!FOwm;ѧ]0ȓ$@]^ڳ]ߴ-*}QSΠIl9{{k1enL0AGw0Xq!TBgjӦRŜ߷}S'Au5y>X{}ʸ+RoĊPmԄ?aM"E@uMk- hߛbݾ5XU[ /?!J=³1X<8AO6+v^n]C;Cn` ^.`*eolAр*x*S="""""Ukgm\Zc"U tGQZ/{7^oȟΝ7c5Rp}ӫ>+ DRtm(ukM6Q]wQ<ԯǵ$s˗'3z|kszk# 0KG3n+KV~,䯕m,+WwT*?{v?J*DDDDDDeK)1 """""""- V`I V`I V`IzowiЦزaC`!^ 7Heme"+P)~{nBvhmsr=Hc {9)JLGcI}Fi_Mxj-'q>¡7_h9eg%gmᘿFDU_p-=1!B!D, MshO#9s_{Ů5}t >qF>\ݏ W0Ꮙʡg:.cǙ}{*#珢S q3W՜1݉<<;ӷro/C*stbښZ,n3*zƦY8:C%h /j7bS,lj˩GJ닭9&ֵ \55Y.J` ܎0#I!K/V}g؏jA+w/[hO|D$qKlN6(E'bA;#ܮ>Y-Z83+S|V5+hp@ +*4G^+źd! TBoHOP#rMz'"IƜ2}Eig(6Z\Ok.lc[d+a\ut(j-A!B!EY{O#-VU> c0Afr 5dqJP$!0G e'WqtIIѠ`"hPFTwm qZF%V4ָX<_Yƨ&eR"n1n ل,T3]>+,c@*B!B:bkXQx.Ns WP`ͻ)Zb6@=z^(`TQU@a%(/!i섹W3 +f+rWjϕٕwf_/2#!B!˿ Cr/2FqJwOǪ(:s?8jc8^VC5ꕱ3jTd% c,Oo#Ĩ1Gv,nl D^+mR>>3c-170#? pMU5|"wţ>gar B!B+o)o\s~z |+h-lqSGE9(a LbW X:'t e;SeGipqh:.,q+Ҁ <;*}ݚ#p9>=Qg#k%i"B!Ó)/{J MOIf4)V_ɼd^knf2KL_O8ixe,+VxzL1s4o,Ch;=]2G!B5c?X[2ϟ7Q^='7}n47$I'`5&NZMeJb:[ U굖?傸g<8%FmOQtV=͟VzxIY|XŊw!1L>ox8{OhX~ӞQcПc|tjZr>v<.[Pͯ/Zgۄ_>е\:^!BÙ3g5fcF`̨33gfz{G<6rB8c㚇R})`ABA ~>qVj&L}Jz)Q\[3uWzNduo܁M8k85eӽ_ժPηMz.B{?fս h]jubCmC+B/j,cW!"c*//OFmjfXCWسs ;u[%F%:M{Ji9=cNs%LucbK f:r8@Z:?Lf}:ק3eKuUq:/žS<^!!#r6LD+R  r/$Ƥt |Z|,RB~uYtZ26<7R}[J9jP, Ⳳ<ݳp+BHTIt2z0s=&&j @ B G@[ZAd}ԶlO|DqbW esaci* I0)mD }!]j$Z—xgojԢEg'IjbĨ@=c:ML7aiH"B!Rä)S_ $I L27KK:Ů0 aP.oy8eMJq ?ǯVIa<.TYT4NyW=Oa%FN-gւmyF V_"w]2//~=D|9s]|1|6%Hyt*Ni'-[K/dt.3n4e!B|,-- xyyf*#Eǽ՘~.d- {c4Wg+ Ϫ515p@Ahv0沤Qn8vԤyE"]ޱO*qP k:ڍ>?rr5DWLXq/_gX.F!'-ùe72۴QWF m6s>ǞĢ !B||20LPp(ێ?$!ǧV% џ5N~t1I5 {:]A!ܼpg`Ct GrXtBb\(+d+;dϕaZۊX\' 4f-B_ШEu[ϋ}9i1;Z fi5Oyqr:p:XyfgչaDgo3;!Bz.?|7H9KP㻩ibPMOfL>_6g b1t lΔG-\(T ჸ}sfbC<&)hȒO`WɮC܌mvJNZݼ,m:FZN7R |tn? av$hn)ڙeU뽘7AnS퍏@!B%Zmʉ::_/V(Ԩ/}9|Cg|2a0}U_,Dַ2M0H`-9?5HI%z$֯1ަbfGcZp"Y븠؂ sgf8E;?7a"} Qט֦¾5i JEQ7fW侼CWAӶI1^iFrwT\az,ܽkӛO+dO0^fxXsVi2¹šP-*z5(O O5S{RYz !B!0[Vq fs'_IzKf(>-mƍ3ˍEYvËvwU|LbEJѹD@iNw#1]FΝ"/-⸸vvaª=_ p yDȣ4kmvv.ɽp-.aswJ/Zf?_&0d}_ʴ[S~nHugюo+ЧSs :GT!B!ćKZ߲"%4x+Jc(R;[bh>2"G ëWtЂƎ< ;P^gq*܈V4\iN`*%vRp̙?vHB!B ]JR7 ~#f`9jpvnH$JrȕQX9m/(s|\❝Q\M~MFkD&B\ ,TC WQptu"?0a۲8s3F1z DfIy{gk` 63PEWZ4.WB!B|$WT5x/N(|ҩ8ZMCCĐ! slPtPDI2q{X6)1s)Ah\(@͹>C6ci[Jr amMΖ| g}A: ֡a?.JH"0N#*kR!B!+RZ.^'ZhRxZyɼ$d^8638q:dYHt>4De^g3VĻMWW^Oϒ)={͚ehwǰK(B!>/]xb;~|%56e?oޣ^zO6o:)h2oHC&_cD T$L{/+oJDr; B!Q ?oy1#$";-[;OB!BHuB!B!$!B!BLB!B!D&+PQ P`΁B!BV:h\׫G~ϹB!B $G`ȾL[vdogLlR_*t?ybLwd는. 2n5k!ۋFO6;+B!V~C.`2@5=OYJHv?)Pdɾ)GI/apBq<<0~MruhF'nNnM-?_JPaG&yⳖ\ IDATe9xSҷߌ}~Pb|i*AѧhOmt5>JΓB gZD?)GqlWzՋ%[d⃛!myLM m]o/o͠71]ETu&p&B7eP~e)Q:``ʙM^V~rYSK}uć2}!9HkReSs1R+X#փ+-V)H#OfҮ+ƀ9'ʥ\MN/]lTIZƯNiܵ8MB!2Z2xeե\O T2KqӊcS~?cZMUF2T\6ׅeߐu Xo$KbU'{8@%r~jՋ\"eU-Ϲc@+%i-KԐSǯ-_tq8/~i߬_%WX8e nO˩{;RoRnAiRCXNbg_?T0jW4ԧzmĺ!|;O6 fZ4{][.ʗ+Rlywf⮇$Ʊg@\DŽ?O9JUlFH, 70}SUHUiRGABTQ\i^>ZtE_{&>[O Z |^o˖ E͊*]mƲ?"+"K{^+[-VZ#Ғy"|O݊.W:FzA2k?6Fo*}>W^'f+u݊(MZYz+Ւq|C+*5xc*asP5+%y@ == WwbU0C n<`тn_W +Tpcp%ٶ3ZSi:+ [iEEM4X~y;jk{գJ _xve}d ]|3q5ʔ)Oy(6o9*7| %:FkZ^EsxJsQ t5(qajU+Aݺ_*h5`/om28k5ưqY([Ribf*Hʡ$i-lj`[D1B|U/I'o^XXX׀jt뼹tnSs8oj|<\0ΞTv #X/_`-sTc343*ѓ@ vw\?Api?JC dNLnDOeT\4=;'YAlh~D[9q|?̸M8w_¾=7&cB!q-LqKS9(+JȎ L{X{HC>lzbbYHun:O1֕_/y3zNjy<"/XIGǥ;9ql+|o2ox TBǩTev?h38.F޺M'|mN 7pW }?N?ãTWZnm2.h@)%.P@:7ǂs3'ߔB[طg'vArk5Ւ__tt^F7ZO&9>rqd9B_nyf`sv^Xdv34Vywo K $#<ܸA *uPIuYcĒ`^ΘTBwz'i$M%iGMJǭ%kcjT%)Wf_5'1sJ b̒;tؑT4e;oC 4v>SG]{o>fhzw4d%cS9!?TpkPN_YRX[Q8=3|ʌI-)89q7VBhZ[> NZUq{hq*S_G{PZ(vE+ -hKSO>Qlѥ_=8Yaeåg Ěs񀁛pS긧U?ǺTЖRZlYvs%E2~B*-^䢥ܩ MrfvN%4Faзn [ŸxPӗM;2rÍ~d" (XYYBtQok5V& +Iz%TG.UYݥ"en1 C&ߡ7X/o<7ۢfdžd+M U~ӭ6/>8r1=q553i~n+K8W_\zbK;`1N^ ތY bEE5S1cVX{%ٴ%*=!@=~ؗ CFD%k\psyQ4`4$dž2 -f;*SFs4h1b4 rB_rynSU3l V\X)^cy8Qρ!2{~8' e_ k^Bbԑm:dK*YAؽg\}3T%7MIn0 4`rcG86!F:QOxc"Bcddg@A5y<}ϻ@r6͟#9]K%,3k|Ew9r*-Kܸz3bmYp΋s{9 $yh˞T],2ejKڟ !y/gOS-rTZds%3FxoVsJP;6۵e|u.Pui)X;7>FFp. MRd v\ϯ|y8q+oAF+05gM:ʆ71\ظj7WWLe7,޼W2W3J:'ݗ sfX7*%H!膻sYzkq^?&@EفțW+O-дf׵ :1ҰG5:ȁqDTGߘ guP6{c'6e댹}>fT U^8@-6nfҢ+ɧgBN?fP&>Iˑ$96{1ݪR 5+v.>À( K-bze QQDEGgPpؐw3{coOhPPMH=%6{,c"*:ɻC$-e핬xHa}'4Ȯq9ˆ! $k/>Ƈ ǖmlk3b~L;J<=AB˳?|^PCv1gU,- 2Fm+H~5qIgj|(׷f_`|@&GM;Ţ19jLwvj\mTX75>B:Tq$+Ӫ߷Y/4C3\ק_]Eʓ(=**qAX?yxQXrZ>rÆccZJj7,M ݌,'Yׅ3󢙟 yr`ؾu_~ɛd=T%9s] GmrռxZ<--v`O'(Fi{*.Ħ( v0YZb_~5_cr`uy3)T WX:a%yEF'q{]?͠-(#>0: Ƈ<OѶ/iQQvQ)oi:n)䤎ߍȟXm:A8Pn&v(|SKYx,]'#pAnXsg֟%)ĕB!,Ϣ;)C&gd%,1pc|5i=J[ܽ zsf|}N4V/E&kը<.Aj({|ƾPC>_JᙳirgǢq: ư[ 3h3g`gl_k GYug|VG@D ~uP`"VOquuK1ի,bٳhެYxw 4uOwǎ]rG>>.FVu r2OD p?Z!`.2ӟx6pV| EUumke37޼GzB#d󦯓ҍ&y=L$2%1OfLF{Xy^EKҸT&m:Kj6W~^QРefr]5?WgW}6@=$ C~ϻ_1=W}{bM 퓹`h?l!/mTKFÙmQ^ԛ vU!Ƨ8o֐>$"ćN+oa zUK a_g%Ds$slj2ז d;kTru{``$e\ mo >nmמ)N9]-ºt^?x͏oik&o=V!Bhb !DFH`IEJy__m2+VzYW|C,^MW\kѥI8:rM_lg#k%d[l4c #( 08vi }C=;B!BkI`-\(4ItX0M~>oEX|7waјxmhg: d>B!B!Vޢ̶HB!B!ĿV&}gA!Bdz; Bw@%B!B!$ !B!BdVB!B!2I+B!B!$ /yba?œ^B!Bi"GlLYϐߙƌ請].[+Zᦼ59PC hX˕<ɵ5S8P}D!B/X#N+F=;/E)TMwQŒ:Y/h^c]ᵲ}Y'7pc{#WT͋ [V[re[c7fO 'T ºFnlot/KkkkA2N,ƖFnY5hSˈNGco'nƶ.L*aAH>4Q2jѤlۻѷ uTL4838/bpTGʍi;|=g=؁5[2Uwg?O0v0 B ߶,j^cnmfhTy?iU12_I`E~ HflZތ+޷7V.fE}Sla~,qS@ceI<Ltc( \ܻʗ`w8WPPP`i 8;RoC mG5rP[S㼓 $̜mC˱4Ā{ZQ!m`<+Bg%[3#c.C{G<8z#kL챆ӧ^{rW|;GEal:Sk0}*WWѧMhaSUg2}Whh3-g] W΋K+ՕEtrxbL'pzDo@ &F@1knl2)3ڞWlf<5[FЦJ +>c-*S?q;ʉ ݃xXx+wiP00Pۅni#hlYᷝє &$+,-սD29=ᦱgJp~m u 嵥ka CtT<[/Gx{,2Nvbm4pZ8n hl-iM; :xS\'tQZp z6??m(n7 E%g= uC MB=㈋rhx:#lXT^o[8RBNsR}ѴM\8AlDN5<3wZmN.e ݍۢGVV eљp6bsAGEpKLZ5:OԵMh͂DeEsx呎FGlpl4Y~#&E,s#?`epnvQV MjS։IQ.šXԄsʍ8r巢5DQXz(T\m^΁61!Ky.ߒBhbf4_[= aUz^} 1ft@pfC[C$CwoPaA낖-46԰g*/x%r80lQC5o'z1g4y%Qԁ xBkKpNŌ9?KJu`l9\X}6;Fհh0CUl4ͥBAH!pAIP Z*Z<ӿҜVkï5Bb_d jeiDċ 7FG^ h F^PT#Oc  Fv枿R I}Ɓi9n wpKawgs&FoVi^ПTS,eܾC[H+)pkw yK<:_n3gQaWn 3/O\)ߺ(q{R8n Y#7 6<(W˯x;伾˗d%mӚ?oPCYߣÏP=Y ]h]M֊V|i!rѝsHO_xM;G8ᡋ樳1:FJGd Y(/@'n*eNgl S1!QĊt, I|85 ςb9gAk x='7ϱO+ JbDDZB c9P̎NQ VɓÒOؗNS%(iwIjxQ\y.=lLn2F Dq1@Hvw['$wNsz4'P>sLP:BYغ#8<^ïwgNsX /Wb '{CBv4Wx*qdV_"]gn斏Tkn.CH5RC>d($=b㹢I%oಉ01v%csg^>F 4K[fٮD\pBt_LMZ˅qݼi!fMN ZR>!ڬm%@G ll(ܧ@Tbܿ5Tyibن|(T-?glZ%<t#gzza!-해x{%mg9/6Zl{P.3a0oࢱk=n-B<\S_ DcI^v=<"&GOsq4|=~&y%WHAb8]7.[KT^~1E R( e^5 HB=U /aL{Gnold3Wq՘Z߫hZ/M͖ѹ>f~,ګN=_RPu?1ŷԯCo| &:τwףZأˆwˏcI ? apJ|>s̩FhIn-9_xaw~?G ?g7UQf̥B$ej~'HN5ٹ `Ka=#;Bb* X"|8СIt- *|s@L0 &Ӧ̞ǫ yt.4[8u}@(6b_pc9V@UifmodU9$ge3e.<ZMH2lbR vJZyNP7>L27O3'Ւd&N+GݣӇp#Gګ@Zy~4= &)Gr|l+h"c~YHP*Łhd"Tu%g:.+>p M;%@UwӃ'Rr2/OԪG_Ms~q.`A ׿zh,eM57'+η70M[8OtJ"saFM+7rb\ި neyaݎAvޜ⸼IiZFܔ 9"a&,!27ɑ,̎庆i&='r,xf.Udl~E|z8״N%-֧g3dF>ckϧ+I2_361'NeP„sxjzv18:PT.IaFM[ýf1\[46 È|Ռ|0:&m?g~6w^ς\xlqj%٘˄SŹc2)l#wu"`,Z[" !g\:ʗ!9$~x,#Ah9<^|w$IڳLӸ3n jJWH>X:]$93rƝO>uWk10Bz n3מ1},mݚ$70ZKL-|>ugFPa&67޷=wdHۍAR^ӧF"~`;-z>1;#xY5vOP맏y;L%RnyK՟R5mÜT%`y߮ Y/Xq,d=y"} (( (l] ,?Cww?{A&=ha_$λWdd×v󣄗B߳j}t-m#~n\~dK*)()eGog?I7pic@5oss'ʴ$lKùd'u7!2x񍏘ԘS/7g7N~rdUZֈԫWкoɽz5bRϲQ0- ؂_KsUr09eq;=NY$oc;ײ7ɾL+1?V{=3Ϭej,&3OB*4:[EB<^v;,¹<5nn$IgR4jOH#趋gJ-\er\Q`S1~37i1Z عյݼI$I V.'$I$IK+_HQ?eH$I~on_ξ>\$I$I[H$I$E`E$I$)J+$I$IQ2X$I$I$I$IR V$I$Id"I$I݀3?Z"I$IdWɾ/ /~/IRz^" zjK$I8M/^ }p]E;oBVfT9T$I$IJۛ)'x(:b(dNؐChԺ.iz\$I$I Vtoݑ: 1vɶd%Bƴ1LMlEc /}[[j~{Һu:~ CHLd%3]w}> l6DV,a#Wлs{Z¿,zbX? mڶm׳ߓs$I$Iv+E-R [ +Tgƍ[@>@d=S|Fy:71$|>e2% x+_ aS Alf=}=;:c_xlS2>ᩇ71| hY I$I?ʟQ$;6fq|EyڷEh]Mec8(P9$o^ِP*+85RUY!I$I|fL2tmg?Mz1`v;` Pe+J-}]__i]x|k}$73Y>ji K5K/pyOݝաY$I$ VҩE>w}4 7sH!%R(@ml" PJJ%7;hy_Z2_VA}a«X*2@v}tp{Z΢}$I$Ir(PQÏ[M\G?n OR8S(dD$I$IH+ކ':O6=&n/'g2N _1s FlENN"I v$I$I`I$IwI$I(H$I$E`E$I$)J+$I$IQ2X$I$I$I$IR V$I$Id"I$I%I$I(5hw噟O?H-$I$IJ1HaJFM\AKl;F6^3vH$IfRf~>ܶ}'Os?\[FAJR%?M$I$ơ@ujГio x :iC [7y9'Pj֧^jO)Sz˓Rըr~#q瘴xI܄kld iٞ/I$Ie"b>۸$s_I,e 6.auH~j9[ɉ'  &)AD"aSfb+01mœؼ.H!-E$I)ǜȱ_ /ksfR_u爸>#CdlH[Õ|26dT,y{$I$p(PQ UɉXlH;iKt|s#@rCaw$u '#3/@|JEГ%=׊ښޭ&2!|)PJԋ I}8#0c"$I$I`KީWQ@Ivp|s8kt5 [2ಂ*AóobIݎ3k+5=:m n%I$IR I$I%I$I(H$I$E`E$I$)J+$I$IQ2X$I$I$I$IR V$I$Id"I$I%I$I(H$I$E`E$I$)J1GH;ǂ ^:=u{nBI$IT Vؚ5ku JpEQZ5,\wᣏ>A(SAniQeoyvs$I$I: T"D.]i8J.Eҥh8vṱD{Esu)"*u29{ў?$I$Iw}))tw?1f-Ztԑ%K2wv@%&lee0`E$I`|=ztmNޝᄋhx^*O|>HJ >=i׮#ϸ&Ig#WpĵL vc>N-⡞Miul җ/գH@i :kG'7᥯'1P4Jmۏ &$@p$@V7232*,$I$`u֍ﶷhޜ)&ҢysF 64Z.LGl#iޙƋ䘅dpR2y " T8V7>qєySxyܯk|4q@֜tg̅%6M:4ewPKMd3m@Y>!&5Z$I$}@ m1y-|>c&k׮cu|>c&7g >nuODQ%c,ۑJ8mkZŀS6(NΦ8]nnT5 iТIecYLz$MIzڬL.hr7'u8M\W =J$IW`߮ Y/Xq Y_1ʡ1[>}Wwa/E"y]FoOV=uǞ*_V^EjjZuoAzu Yܫ^],&,u%I$@k9r%#[%>̊j urw(\V.PZc|#.ŲMuٛm=w7D$I$oΡ@$I$IQ2X$I$I$I$IR V$I$Id"I$I%I$I(H$I$E`E$I$)J+$I$IQ2X$I$I$I$IR V$I$Id"I$I%I$I(H$I$E`E$I$)J+$I$IQ9 7ß@`l%F9Z\29l @$I?"R 8q ,zoK ONhO gN+$I$G+E,_CMSX :f"_.@86 ѡQE'3yReI*ߐ^g4R(&0f.o?_0I^260$ڜIG[#I$IߎJf9 ǕBd-3FǼ]9gU2#tNOeq^$~C>Cp($W:OoBm}$>zY>YC$&Z-^ lҘ9B\z>(}$I$o`KީWQ@Ivp|s8Ҩ4vر"m8v)՘z@#=.6ήB0Km$I? ; {bU؞+taןCh߽7 2%{*NܚZmfwOD'qʥ3~ٖ$7^>=;Ѳe{z\(V!Gྉktޛo,ж%H0緼 ?gu@'Yuz9tЁmЫCL\mI$IҟCY+(fi)C^2AARVaЀȡ/1Y<}~ےXkiq6N^YjaoyCϦ ^o,G|d #n?76esWycR\>si=D bnVW.=?}x6 dǕė6 $I$y)u?ǟc$IMG1h֬9Ƿ3p( ‹3jќv~cb Bkz60el08|O !S'p.=k$ 螝9|$. $Ռ q?jqٲ=a(cδؙ]2ݼ|}uK $T{4VD13u!"IT80U$I$I&X‚E Yz5cF⎻f!\z%{82ڗ̰3+˛s|Rl46Jfçu{Gr I^~&k6P=m6ՙr GmK'+plf@RKmO.1A u` [@!Xײj m3s 'u$3$m -&Ͽ|5(G˳.ߧ!pE$I'a=W^zPL|g}^+"zGFt%RR;Z8*'wru,`qʔNYOR;uU /5uKT>eI*E2e~w]Ί*Eitu_ȓHr󳹥-n&6Km$I$I:PԠQ;.j?ɇs/y~ma2W|ϏAlmڴL`/\gjօhع%›s"9,n 'd DD1!^U9D3s!L \")qH-*'gw%$I$3XϺtw͘ѣ~ ԥS}/%^*0hײ-厷'c/gM)7pR4z8\p7‰-WMgtUt<^7[E$I籛{oW,l wPP嘭K؂|>}Vثv2md¨ѣ-Aˀ-lիWVh[#FP^Bf'W6>I=FFI$I:Z\V {<ꫯm]׷Շ 2D~Ha6zd6;gosOiۥ^sH$I I$I$E`E$I$)J+$I$IQ2X$I$I$I$IR V$I$Id"I$I%I$I(H$I$E)`7A&;m|.ƒI$Ice?{xv3$I$I~`ggiϧ~@$wB HL| h@q~s{w%|ӊ5bw=eYN$I`/WhM^άH_tTx>}c(/?Ƈ͚H$Idǂdw @83-Vc{vNRr\xg :@}ll=${ S;8|G;ѦIr_|K_ox;ӳ-[E2aE"L} A}}aҿ~}zҮM;v?ɚm yǀuyVu xFAhbWI$Icrxᬕzs4!/a[p ^ )0hxЗ,o{m]MRY5?OGbp0s]巼FաgS/{7ţR>7^O9{|y<1iI oS) o;ML3Y!i; VdŔk^FVr~[R9Hdzq3 B~g zSB`,65MO{ |N0+>~M0L忷<K3$I$Iڿ V.:q]w3f߆uiD~%~FF }m,׆v_żϧDnLk~`I$I{oW,l wPP嘭K؂|>}Vث2md¨ѣ-Aˀ-* W"55кF^},Nkm|z$ItzgyfW_5ۺ; o(o-e_[ Yb٦`yǺͶq"G-_z%{9$I$Ip($I$IR V$I$Id"I$I%I$I(H$I$E`E$I$)J+$I$IQ2X$I$I$I$IR V$I$Id"I$I%I$I(H$I$E`E$I$)J+$I$IQ2X$I$IʟYx9yH$IBmO0`,I)8hRe8m$I$OE"פ IDATDpn"}̘0sM>'F͢l$I$I*B+E,Jԡui;a3qnN |>6OjԶ.%Scqa;l}7r|StA]=6йj'3yReI*ߐ^g4R(&0f !&tI*FI$I7`$ƑUi9yur>\~ߛJ1k֫\-js8%U,#{R%v<~.EzP%))yM49u",< &ZaQi?QVlERZ$""""""R B>wRwo77b_+Zmy=У'On]3jtkq\{?IlWYʵiB>K"""""""%ݲǧ,$̾oc]{Z^ /hNPzɋ8?JT"""""""RI: R;PI{kbhFU2>yp yvbk38g`U"""""""dy?ZZ@B~HOr#UKJX2Ry v@qp1fN~uj6y4"EDDDDDD)XIU,`*հ1o緷xɪDDDDDDD$(X`IUDDDDDDDOCkoc9wV_=)եȿ&qzq/J2G1\ٿ 63T ^zl+^[e9j֏.%,wvgc(Ȑ=:3tטPO(}>] !vlD"Q2"""""""H#+vqgY1c.9q#dPLT>{%.N|-?Z v^+&2 WWlфD9RAιL]/FOcfgj2cq O 4~?Z53nHI`gÙW)] }hNOwoK~LWpĔSfӖlMAϷl@Ծ9{Mgҥz/ `i\qw'::&#XW<nbӷSqp_j{펑GNT;wla˚o')9r;5[6mE .6BIDDDDDD$(XyXŜҽ/6%%FAm4Kc2QAz^g1ǜn9yv#oN(_:?x `@`Re8Tv9É92ͧ mĴg'G\DDDDDD`%̛Cn<#G8WWLQDcyۏq%2Yoĕ ssH-`xbbo^HlPeCb~Fc]cg9\1uS{1N-fF? l@tv1B8~[)bZtX7"S4[_ \q bM}RKUsvjō\E*lX,ݚc%'Ūf'7El"|(۷p۹ݹDDDDDDD4Rj6S ד/Iwݿfu'u~gu33BTQ];ߵ =6>|uB|5R6ڵΝ'}?#+VHqG5.Fi_\`aÆ+lq~ݺ5q=0֭vFⶤA ,IדomwPLu?v Z0;T( V2XDI#og|U{(Xy -cQY]F*Mܗ2\ːsӷ8H=VBk{fu W GV!""""""rO"""""""" +""""""""R"""""""" +""""""""R"""""""" +""""""""R"""""""" +""""""""R"""""""" +""""""""R"""""""" +""""""""R"""""""" + ;է lX0Ogu%""""""<Lۗ+p%4Ck=WDDDDDD$Gd#.G2KWpԻ!/Āgcǣcj͢)0yP^&0{_kx8ѷ^E+U& LVuvK]תAA78R%?#yԙqsw8(rɔUʓ1N|gg-{­-<3:6[xb$&<-@5ȝ]wqʣ%}}D(#[s:,aV[ .\oaEpnV~ gգA)7޿#j`L9(˹?7ł/Eʲs]`NJUX'o;c7f 6fl $M=V2k 6Dbڍ|5g&(@JͿ1]m`͒ylb,HVS/ S!J[l3KHyԠ2gdW\\})W4ڝة(ul#΅᜻$M:եL`(XqZnYO? 8⚓[1G 2i S6<} P,#/V+Jw-ޔ 6vB6b8d}:˅ɄW lL brT.*X!O\OD<v' kᚆNtt4wl'4f.mۯ'_s M$MIldnl?v_>}={OUk׮;w;vgWgNpa?{Dh6u}ZEDDDDD) ^ai#4_`aÆ+lq~ݺ5q=v mF*Kۤe4H$bŋ&Ξ;GLL,11=w0QV'"""""" Ib6S~=9̙g(X eKb+""""""r899Q!<gu)""""""P )Xq)Xq)Xq)Xq9euVjJqJV\ @m/RҎ;ⲺLu)L})SSY])XDSSŸylInlg_Del< kg]pëFscGqNPLy$ni:̪(_, V&OzG/S'O1y,GDDDDDD5i},^Mvrf qԖ25+}9(i^h')X QI|&1 FS fOvBl:fP퉧 LjXWq!g̥VDDDDDD䟤[$MV`ńWX#i/O%ٵHo;uʍP[#S>쎏iZ66aq$W%5I9nl """"""\~ɑ;@WdA] 0c2w$Л: Gcs-܋s&KNL&v4 ~7Va4(aI*ɓ&=A$ ٷc rm7~gY9F.1󍙬h&c⊿b ޘ#iEDDDDDD!+(@Bgb聗0"ӜC<:9y,)}HӾ97 |%*b3;v 5,dbfnƏN~Zx$1ndݸ>e4o8gd[y;vdqAiɤ7ʸ/""""""~LJRfJz%׌9&bnnbn)ql>}=z̟F t V]Jy{j>M|39DDDDDD2RåWX5.Xpqذc %[fnM\'a ~_[B T$ٷI˶;J&Pp9t]EDDDDDa9VDDDDDDDD`E$X:NDDDDD!a1F&dg#7Ⲻ 49rt+"Eгs8gu9"""""":|#\D1AzRf#S9eeDY;Hq\ĉE-Y]#GH&zS$"""""o9VDDDDDDDD`EDDDDDDDA VDDDDDDDD`EDDDDDDDA VDDDDDDDD`EDDDDDDDA VDDDDDDDDp%"""L&<<ɗ/?^^Y]#GH& s*b IDATz ʕ)gV#"""""0N: p%4H$\tC˓\t)Ky(X$ UDDDDDi `EDDDDDDDA VDDDDDDDD`EDDDDDDDA VDDDDDDDD`EDDDDDDDANY]ـS~;fR%"""""f͞ì椩2qzgzV,G-NJ=Ox VFҲce]Azzsi2FV""""Q U`E^MGjcW/dfbG8K965biY+Y߫0sȓ4Yi]֜M \>=Z֥B}|#'4[0ԬZ5ZԸ%JKU>)'0g%UpѼo"yL]Ju[9xDDDDR2 7W7~QyYB/6L磝)GF(?y];Ҳy3tnj`Vtúqt;Gwpsmބ_`S{ĞgtiՂ&-;䕜q~@wzљjf1r,#m7OM:?H־ZR '=EYOyh6cFٰZ6UӴQ3MA\!.F8R6ug$%pzu f *>&ZO`lN4H i7K!J7z5; e*rkԒ<] ϐH~F>A< i^g4n]gvbD:GѪQCjTMc}}U{26UkԧŋYz,G~yIΡOFTZzFݑW♖PjXk?Ԥ [a3\nߋww|\)Һ7]rt[sxz7*ńsޚc0:yXFu){7Rxfm$zvK*|6V 6^كO |k6板',֊&,uQG0Mw|!}7Z4zv*kSV *va'SNDDDHj=Ub8?_O>:xqq^͋={gTٻ{"::nlc͈'>w^[u+"hŔU:0r"~e",e aO ǡ1`E~kN9b£P9T.ALǡx?^LԨS;vsvw_JfNxʙw\.UR9q<Ԏjfbڠ_Y1&w@H$̹N9?,[ `΁X~\`X?ߛ 7%ig+)86V_O)64fo5[Y?-%+8XϬa_yM{"S,m#L5MK^*t'׳sR^Ƥ u}3koʤ[*kteKRwW9˵33j`u״*7&gMZ=[iHZûT,6NlޱE (3kNFA̞V-ٺ/MvmI)V0";?o݁93R73XXWsx{\?Y:/?OxR{:~f$v,9s (/_kWx.Nn)Or;g1nu! n *2lnٸ=ƌ[6"(7܃W;M^8}_Hj1"7drsID5*cl\Ī3F4p[4^ 3dkRG eVק(e"4돥l;N_rqٞEDDDNʕ;f]JR2v(Thy4 ^l.ͣf:4?MawrvǺ3$l6c,l5f'&ݟⰹ$`WK]ۦKZ̾# Ф%fLۡbͅ w&'7^iqVcwL|y:811Fa69 ~fߥhLg#qy@Q !,ɠ X5 iH{NaƷ3冑p$V~%_'bvoKӱՖs5$]/}c9t-qH5nyʍd7P[×MQdp'ͧB+1a1v!۝?ßaO0E}*eCs|Fzgi=-!t*OrMTAқlDEmv' ^e0ּGNJ4F*_ g3t.US` ׭kjb6cV3ll!qwΣb/iϬscM peQ U2yd gd Z9%Y1=3P1ߟ G4Ғ\yh7{FTy Tb} mi?nEP\֯ʾܵx%j2{AmV8 ˥Ȗ/E.\pt1\y|nؚRF/o?~bY7!wLe2%Avb\y%1cd1M7`2 fpFH*$]ׇci|M}/M}{זo`.^Ri2/g#w g#k"1Mb'9sXz{u?6mN{sY>91SdQ䪭6̀jJ= +Nw 1M6?m•S'+T $3;wa!7Bq)\9,` Я9އSZx/}5s:q!;Ƥ圌yT:rJ݊[Ӥ\Ш9,5X*mL9:C>mH=9ryqgb/Ԃspls}mM۶Ml܈T /uϩck%~g_1ZvCB S0%̎b ſ6nRa4(P.@IV9@} *СA?e +8\VXѱfҋa_$s!MJ%ݩպaK?⫃!Xy8gBSKͬ\^?hC\ʕdP%NJ7wj4ĕlXLOnMwФ]/Z??ţD֌km3U ۃZ޵8\V[x {S̾{ oO^(ҘmodK'3ci^x}_SJLy0bN^֞u9+GQ =gFL:R'1orR$XhZ=Rz'(x 6u)r{J_ۋVi \o`Dq~66s%r>K8sY~>]]y*WR9vm3~=rkH"_ݺݺnݺSb~}{?MWA$vCF f:w^} l\Yܗ6K_s)m>͚!k""""1?ǏZ h&Tc.XpqذcI^גB\uImvx&07%.He֓omwP,$}63{QLa3_ c}Ů; ^5:=ZÍ;Nf!o}L:.R SfkG Vy4)X8؃9](m3LgyJ}|I9Yז2w)X/}SEFUV )XqLb2KDDDDDDI?+"Ýа.CDDDDD$MBCp29V$˗NROOϬ.GDDDDD$Ua00KqӖ-N6~.塧`E$ꗏ<zY]#As8H=VD2QhH.]""""KIdÝ|%.K끴~{]Q#_; ^& ~?SZ6bN/N云PŽ)_JM)uv,Hfo%|=*ζ3|7vA5_7lߎa$VDZg4׬❦RjEziepɼǶ&="mjґj\bBaeӤs L..p A^{5F,[7gn&Zs3A[j{sW`iv27V~oc?1c$3,9/s`kuuץ7SVM :?Alt+x'kP}ws)b/i'i=~v?;d 2B>&ٻ&2bPX Velٚ-[ӼMt"^ϪxŚqheUeF6g0oIh^ c~tlW0anE<; KO <+pw`l/4+KR^`rxtɱEB1g)(9PB6]lNm&_ He."oλbgo0} "0wXJ֦>ƺ?L\޸K6+EX:TJ>k}yy#yy{85XEDDDDeU*WbQw+I1RRV9Veᱧ1 7& n^O W{Oav6#.[`DnBwHˬ?uc\infLxc@?~CYb{׃'meP < -s̾Kј,&FilkR6 nӜWʯ$~,:֛0Fٳ}_wX7'0|Lq9'j$~A)Y slӎTl[w5)KɮP}6THuD8yT% 5{qq :8նia3 @J&Q",'0iNΰ ,9|Q?{ cMux`6.,ϔ# 94.U:yז&zcR>{3 a :i+g\)S/o?~bY7!wLea+7ļ~Aۻ09zoLB֙0!# B DAvx]dP@@&*\6TYd (Aٗt#9tWwW|?3OW9]]]9/s굙^YyOME-S=~mBm^m.}su;u;w=K_xa IDATYTߞOj7؋9«?w}so릫kFJ|Jn9Q •w$+&TSEҿskJŒ[/m2C-/J*j74vYLu\ϭͅݯL~K{FmЦ+Wjʕjk+D?ik|@=z$=!BO8JnxJs>{UP#􍱽TZ>Yfꙓ{LÙJoݣ>:XgC}=j=vq5y)׬nݜZFGW]w}SNhtKkqϵh/wߥW6Yc.-xJ.]\%?#yԚ*7㲞d4I|%Jk/C_G_+?P{}tu>:[\RZ^xE>/wv#5l=.ҌYto+׵]G>Mix[wq82r}FۯԄI_K҅Gz!o)tW]ޡmGiߍ,[9Fwv;V@i1hT g$O+tζwҘrpݵ՜imiWҔ>c^wkF3/f]~{§>\Ja܁PZ휤&5o7MF{7cyܿ͟ꪫ/>cź @&I*iŹŗ^^{%uP{i:o@~ӷ@:J?G}nc0M:3ߒzmsڋ~a~V?`?9K_ط>qu+i>e+hLL(+@5}iPP&2U}dV*ݻ-Z\X-Z޽{2U&?gR}עE?& 4JZ[Z$I{ZtirzM6pb+@ Xk e3fǤI ([jk/!)Zq1$TKU+=ޗV:XcL+e"X( @VDP?P.=cv:v\NC t1{s/ %6 Ţ=O_eҫ[^mSJMb9т ^+<կ>g)4F V!<1{>\#Gz_NCYgf'f^[ ;9*;RktG[[xMygrZ|Cm*Ph]k̐M UУ[ T_wfPB2u]  RnHJZ7~$k٪"Jztk5PBݻwtUg}*P!H04 #2=jJZ7!~:4g5XDd Y V*q)HVL@R,+8?@Tqwcr?&Tx_nn)2]Fz۾zIʱ'j[TҽӴЬY%IC CS.t5\ /YrRa7S~;`ߩHJ uuʷNaT,k'ݮ_?&_q PKmt]jlHJ9Sz|ai$ WV;;.=5k##'=}S*tW^ѭ?Ycvmqntӝ$rouc/jjjLN;Jmڭ_'k|cJXf^5Vޜ8s\| •0P:H :inZ'NO+V߬y}8T;𓵽)'N'y=KtX̣.У:'qzBj&^aA _^mr:/imУ6fqwjڟKjNSmo|q:MûZjտsxH, u]U'_Wg]KVϴ'1;ֵWO=ͣ5BT҂~s\-MfOCϟS6y\Vzi'ݰ5s;ic6Wܡ/^{\Viu#e}i{jң sЗG}G/_we^}_$__wMn|NTg6UΑL-$_Xq0]Om|u}[#\]%z*HVԠ3֝NglW&}_(Mn?S7Nq3:{.UNJZ2gzyڇ=w}W0Yw=YfkaG W Ngrv|ei^ך.Դs>>~~?g&k~Cu=W^~er-5coiD%-1Y'_?O^=/5it9wBo׆[ՑݣzbʾZxǵU3O2:" [1**dZ@:`k~6ǒ܋vP\ŋҿYR~ݴd][VNݴ.j߭sϾRLM#ohּr=҄wO=7Gﳅz4z{>+օ p%&h2ݰU믤WE (ZK#^_Yg;5wغ>qā‘[϶Y9v>_`gW2k^aRfE%cq@ߩ]_%4\U߾}aǁWi/X>[]s<>? Fy-YP|}Bx~ziM{M^iŚ1{j5>)RTؐ!kkqkʵWOΣw̙iφIzk JO>Y Z4]tѝLF.ш$HL=q=ElT^ڞ) mZۥ%z) zwiNMe;KU>4LR`%q UJ6W i Qedlߢ35kب?㵧9x|6ʷ;GU^&NJ6WүlY +̾@F|x }:MQ͞L? ߶;Q걶?\^4O!y̦5/֟nCצJj_fQXOS7WyQe?tθB X?ŧT*ii}CU:O<w1vۦN{=KRQRWJR.b_(wS.L5*V*]W%z*aڶolQٙ ^v`Nsr9qDqz_Jgcpl+xjG~d-XZ͗F);1+Icf[1}6߱+]lspWeJr Q?Q 4">v޸_3YX1YQ8(jU+T.lg6޷ϓ9i+qh2$k~)fk 9^m/wP!M+V* U7nJLJJqV*=oٲ6(a@}LY V\'_4!U׳9X\+VԳ9zܬ\Q֦沞qіY V875˗Sv mHk=p +VٷW^z7 W֦7|Sz*:WuǙ&m|_-aE•2t]{րy{ędmٯZ+a>Ʃ\!XPZ[5:Ӱ%*PHSS魖Ⱦr걤 V>$Rnu,NKv|AWp>WE+dSrZ=`@r9ޗҩqʮH ^V[=IJkz>nk~,{^#cP:|Q%T-TM Up~L;\C^[%!˄j+Q_:B59Yy|EQmv" TMie3XQsuIx!+m2ڏjx? O)`WQpݖtQ]БoZWq!nJTb%I%HMJ}|Q2 1v2ID- v+aIoc87ѕzgN @ XG}aS|.Yx*P({>V~S@rq=5f*cfjJI5 ^G!2Ary ƹYcʘ3Dj*qij+ 0  Yr54ίymSM:EǫkRx[*ܥIRb#=gmU"k'o猿&c;o jk2}|m6Ηx]c涬c=pqUPِt{6FZhmSjֶy,2 Fvէ`cfKip>ͼn{3qM [7* ^"ZN+O\~\aﳷu(vYbnkk0E(Aڵ͛TȘ0AŌy=2IRФhR0B*A|#va>;Tk?$I{z}Oݵ_5 V\SxŽ7S0B,h y5??`'kP1LW$ V\*mSiC`DcbWYb+vxbWAZjAK16}W]bW?`棗)7$5C׏*T sS6?7>fc*d>VakWa+AWd3Cv{Xc_y|amuU`%zE6}vaZqaKAÎ+G-iq$fJ^'ȱ$X!xt$ Y_ WõnLڭX\aw}WBTeռJT-'WrW3pM :,A&j R ϱ1z*aSLQSN ߶fa+{ꏫUW?aqԴ%kS$t _zAEF?ļR-y5UT,b &WV "Y" ;*_EJP [_Wb_gTJXu7Xq]lj0>Q9hf4 @AY(cvb)4Csۀ]Kz,QK'\}s*{ʎΊ;\֊܇j)iUKv0uN}`OqM = kT T1k>Ӟ SQ-?*puV|A9/s|aK}de*P63D1 u|Բ9]Gy슕:VۮPXe*)A-*p!Xڊ Vvpbũ*p7-ȮhBy<3'-vb<״ YǂH~ T1+S̠>gPlMh7~+d1j V [+* {>@/JnWH?zd+Y/Lq+ "O,v1L:'veJk Ϛ*vb.\k~׬P1LgڸBWbٕ'R0U"}µf"<žDMCZ+@U nͅdA5 4d+a̅jbZSżi?ŵo#lڊǩ̐nW|J4!T!cb1a+Q7ۏ:zMr(75<׾ai:Rp%gmKRigV>vpb*M}J@R|@P€`;lj׮f8c&fך+Ů(۪GVk-fk>vYZ%>~Ak {31WJ@%iґ_`W|*fP1CWH` t|o7{GyR`!$8& ?[ ^'$ASR*y}*r5U&+i,XTViA;͵'ui+IQ|}oaYb&Rp]d yg%+QuTȦ *( _$w nk*o>%j蒕ͮL vbT̩*DqUvaU QaG$:.q5U`TM9 F#K+V@EZmW Wy}W1WOJ@}$ۣTװ0HqqUE}8x/ )72xÛII+Ap,v}mq8A U,P{TG Qq*U[He%U]Zrq5}ԙ6j_&l#*dDU 6=VRNboa3LJD4(`V2dn];f~ Z%올yæ'ݧv@ÂoZ!Y:Q`o[;X1;H:63 Ӏ,r)F}ݮ~Q[ Ia}Ta0E~Q*ap}:mQT{*Pv_`Tcqm̰װgJ |BD]ﻅmۢBCzWHWHWS\)sە\mW `0iUj' *l xJJkHDO5~5*WITD]Cw P*V!XlJZA'H \_r*N|֨o$Ċ-K'N4\q/锢8~W d[A}X %춰"nEIMĹ.X)p$필3I7xa .??nŊP$\[9Q%*qcuRNrEWi'` {u}ö}-! VZ8Qӈ|Iǽ{]]K-GI`gGvWan*8mW9SU'IGaHi=I*UF5QbGqF⬃O[oCu dS%A+v $>au}>>5Vřj 0|kD/gG}~Ǔ t1XOZxgʐk?3|s2J%+~IΙr*#93Os18HI%~Ts`^ B]jh i%iQnIܩ?T ;X_SmҨxIWjChLZ?$uX7PIrMT 4R[NxQ(iU$FLqW)q Um`%+ b*Y(Mrrګ^@r ޛtA[W{jZ7K7F V|TWJc4M?͊Or qΝfDj5ƴ WJӊ.&@5;-(v[;IVJ@ւTz>՚C@V`A.xgZs'VAxױ4BzM!0ZU?9GÇ*RZc$NFv5A t.iIM#L{z1S5M C=pT#(AJcS*RWWi󒜇p&)B>Q'ipRueգb%PG { %T1i&lIE=>!E9U%iTZ֖V5LZK"e#c+ LduY6j5](UYWcO)Ai JS* bTemp%ɹd7tT0ky :JRykUIURS*,ګHmZXԶapߨYYzK5`Q8xMb%@ 賲~ :,5ըBQ Ta@gx1c3>>z :s kt>Y .xMj}N4pD Q\q]YNT{hd' -7K}8@IENDB`qstardict/docs/ru_RU/images/file-dialog-stardict.png000066400000000000000000002013371453553600400230150ustar00rootroot00000000000000PNG  IHDRVP pHYs+ IDATxwxU{fwS w"%  M"XAT""E@6T^})J ! I )[?f[w]vwY%;ws """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@Ow&""""""w0y/K琈20P6#""""""XЀ瀈4*tRB~<„-9h}"""""" oS }OvbTQnB=sEDDDDDD2հ.煈ȕ\oY;DDDDDDDUAH XRାz{>Y}VBY/[oQymS!o.mJs o>DDDDDDT&pGxQcxeXػ߲ZiCDDDDDDS8ׅ+v-}sL-ڶ{X"[Qso Zbpvb7̡.3nm Z6(hGIm-+Mc/O&DDDDDDݜ$82dqd{+wwbohHbﱝ""""""8\1wm4}p6橋xwaBWLKDDDDDD3&-m8㮐[dd'.68)My[χRtfRqB2GÔs5;EM]\+8wuH0ő}:ҞA Q!?jT_ww.&pEH'oCMDDDDDDF /"qg{y[-CEm=7p1Yxnk=}pWRWf؞ő@E2LxbG KA#'W\`VU;gߎwնDDDDDDd\;z{7(qh;{ŕۮcOUžPDihDZԾ*6GΨVܑ>zţÂR6Tq$P;(ut[Gsƶ8Z)"IL6q4`qFRw**A#sV:""""""*;r{ AހJ VG:ɭZEzZUXzoeJԄTquŊ# Um*jvj}Vu#֖5!҈(bH3d!NrFZ3O^L+ac\YHj ቹRe<,u6񐐐: xcDDDDDDDa&}~Ꮜキ|CNNF> UC*Y, Eu'!+=*-y`Ş!@ U4/X[o,Qf`=Zh5H%W!"""""""z>y\|9O, Wr^R!A. V4A!g+WPE N8zO(Va5DDDDDDD(V_AIIWԩp3 H{m-kkwOWfؚyUy"J!$$GZ( =zj%G$Xbm^R[X]f)pQ:yTJTHumVtP|4[~-Pds{I9=)$팭!@eJ,}2PEg4ʟ/h4 W&`L0 d2`GFj """"""*CkmKw  Q|r[uyIܮ92_4phOV(c).YgP\W.`00T*!(F D@D@E&]>;9iao̓% ynapTX 2Ԅ%JEkPE^bd2?m۠h- dFS_ YJ F=bFd2.DDDDDDDR4pV(1: ŭ{S{CٚFa*M\+ Uh4"55w`ߙzԍ@v> `u@L;S L07""""""r|뤷KWȋ+Ԇ&)N ^yW k{٪n-BQcÂNFF| 5 hD@ ~r)|VW0T|^cEUs._RK۹W9K'Ҽ'!Ͼ^N(-xd.wM^kkXvujKˉV> @E 77Z TDyLoT DJMr/bЈ3Opu!;v rXzFVZbTk۪UsEʥs#/7͛7ɓE Kuc?%1c˗-E|֥4oΝ7LŻsO El?kl]FɣRp"}4ud:Kmi@'Y}YǜdFV-xԙz1p}8`Eh;̓ CDh9Lwc¸q2mzfc]ر+DDD(c#Bb/}=X&??GX8~8ѹsgL*UT1/auHIIA1e$ԬY]\C@EtsߙqFO.]/G-1slԬYǎÙWǎAǎXf vڃ۷ѨaCL:j֪Yԯ߃kT)ov5/5j`̷PjUL| 9zF:AAsVMml~.yyyXcڽ hР>֬(bo1e4`0 VDhѹE0+W`"\|Ƿ̷Ca8r*Wݻv< Amvlj֮^im۾,ܹAO<իcqI̛III5nӦN)Թ1wkQƔiHqv')8>YٍڷØW^AnnN-ā{gרQ:֬jѳ{wl?޹XSq9]Ç`玭>E+>^'N`ؿw7ޚ6(JKKÃ]{ч}}/7_a=0 }Ylߺ6n3g7{۽{5mƲ?oɽTv:5k&݃۶ ++6|Ybt}U ~i|ڼ{c_AvvqUb֌{|,_1nHRHPؿF'[猈_^FiBi!!?^KY$ovvKc?`irg XE:-h76]>.M>A4 y}ůqh4X߳GO|m+L?xl޼=Mo/ǎ/1vKAdffBGҥK|鲪cL&~g. {qΝP^]vAzu_Þ{ajxv`c%qn6DG-С=|}hp_puEvcĈa ___ԬYh]$DFFF6Ά>?Q@i AAЬYb+66z(U})G C- Tݽw^bۃjl,z^lAÅuZ5Qv-@ĒR_͛T쿭sFDT^Y 9a,ናGHDI񼆳-)Hmd-T"O[+(h4s cĂ&MAN^KDDQ[i`ܽ͝{DZjH8~uƉqXPR Tш􌢡aaEPR%$] [Ó?۶[ZutTSS v&%. Jn*ZS!== Ǥ'RRRf:7dBzFy(B$[nJ}\tmZj|_hBzz:틶m9> III ڵXѾŠϨ(rT3gΠGN֭ZcO}bwo@o[w)8 h=?~-HKK ںYYY --FShk}|)9#"*Ϝ<ɓ'Gz%8*f7GpryN ]'e~mki;p#m.j+V,鸂 E)TQFSt{eQDaeJAb0qaq-ghD@+ VGyW^hٲն>lC8a*V-q=1("* 7gee!##QXW[Ӧ JJN.k(8nXX8n$3L–wߝ;;``e۳rr|: ^<2ڷ[O׭-1<͛^_v|NM4)|o__,94˗@Ӧ;X߬Y3ݳ @ll,-^RM8\t3 t2רӧNcxW'麵 *^d/gΞC J,WsΈ;sҘxiX%XO|Xh||}>YVf,_[zP-C:mk\|;K%Cż|W 'xŊQ #B4 EY h4ea"@Ê""GGlP/7nujмY3|lrssWG)j~F`0`[.רns-[ Dڵ:Μ=^%t~@~cTz(F)T4jŞ={:/`4a4 %wk?II7a0O@~4.m_ANn.мY3뉉HH(dl+ }nۆnݔ dqҕL?ĺ"NWT}"եK@trܾ}q /ATd$#5*va?T}};tTH9#"۴eKvǞF Bi޼wT# WNo,XwL\ w܆(hڬi0,)??_^W|g{0|(t˖~Qѡ}{hhjߧ/II71bh<6pbxUT\8X #;ĘPa:ejn,S8t]oZ鏼DHiYkQ>QF֦g%{aذF#>x}ٳɈi$ _ : @\@ _]% nMbzY;gDDDL>_fΚ*QxqmmXvʞT9˺k'L$ I(y4JI![ϭ= `l4rkÀl TFt'ʕ+* @EIOIRsP ""RGiooEųIDDdzۄz\Z"^.4u`V=IkKcc PP Aq]#?_DDYRx42(B`BDDDDDD#V P|8|yiŊ|;K,w wV(͛"_niK)-Bż& zݻwq玀9h9|8PQ5F zh4I`-.]ߊo>ۧaQxx8t72OGksp54t6}˗+=MQ IDATyz(ڪ[aR{KU.6L& z^?YYȁh &@DAFj!jDt:VBDDDDDDDDZ(9ibE~( 7,q[DZՊA+3c1( 4Dݾ0W*+@EJsK\>{9:=j[ Y~D],DDDDDDD[ݖ~R. Ԭw w+JԆ)> KTBDDDDDDDSΖj]51aa[&X'v,-4z'""""""* w5?ŕ*X䔖[;['V鏥%?9DDDDDDD8!?ekzÃl q+[o!=kOb-95 ؓ(%y({lɇ0T!""""""ry"] J6{%O+%K'rK}`DDDDDDD8ĵj![Dr 2suhe1TjU,(MCDDDDDDD4JĞE\(?}s鵿7TlJlX: (aq8Qc)Hڣ`VʤډU(OCDDDDDDD_֪VYjkkdŊ%_f-'M')G[+VQZ{o dEV4=#"""""""G*oo+LJXc+RY*A""""""""smϵA`EM 'd?'""""""ұvmp5DZ:Η&\)9RDDDDDDDDQdk[J85x`AMU+DDDDDDDHuu<=!0P!""""""r-kGhi~bVK+DDDDDDDΡt5P=T9X}b RR="8. Rts>g;= :{bmka& ׯ_Grr2z[jX_#eDDDDVfy`c$׶B5Ç ~:3 QtVt@ժUUmSVIDDD zMde?jݼe{[5!""/n +@hdC J?d-Jtw7ηbmLnc)lq9SQ|h3DD^Ѹ(5l(jYڟjt6NJJ2{f vx8RlA j] -:vAJ{"""""""futXb KCw\6+ڹjEж!0زyF@Hv* 7l!"""(11W^EZZrss E8xDŨV): U+ΚGZ譙F A6PHmkMA<nAײ;v¹ݙ+HP <U5yy[7$nzuB `Low2h(:u, F#F@j7oСйs'hC"0 8w<.\V[!=&*FT֮-MRkO~wfa],.NYLg ?5.YVmC?o||~4~ rKV<jqۀ ~l8vOFH'D<`υ08jl*?P-ZѲjqq|2/ԫWs#"""r֭4=z-m:ujC_#$8 ŋh۶-B=c"֯K3㶪Okdjo7.V11o%5@'GmU&:j>Ap'^s׫jU!4 qo ½Q>Tm~8y@hht"+YbyDd\5ʉ'~F{w[w^4i҄%._M x]|=DGmx<ҿ?'Y\p6;u[ڬY꧷|nDDdU~ȑfgcGѥKgDFDXm+֭`|At kEb'&_ܸgƩӿY{R%ڣ}qu#[ #{֭h mbcqp2sB>n6>L1Y9ݨɔ;yȸ6y&x  >>M:k{wVݾjժX燌;QI'N)S1oI&طo/vpoӦLA\\U׮СC1r4zt 3*v~"^)tjڸ3i_OLY1st"@ G eG-l*RHHH@Νb&gy'W͘9 O)3fʏ{KS][L(K6Ka_:>$`+B|q'DI:D} /SFy?|_~Q]c]~/h4@K=Qa4<У⤡J˖-vܘtڍJRbYzuQ^]uۡﻰ}'!f S/dE+ }xv w>`FLDUu m]&h5:5EXRy:T1pTw<\| v܅##"OzlL+voxWG_[6kl<;d0 'A̚5yD9sݺush4jyǏ_":*~~cEɄܼ<\|Ucc}mf(1NJٺ.m=zeoVJKr#4b<[:hh[<7 Z矧>hI4!ߋtSt-y*xrdc]2[B3O+Pe޻s̘2\ٴi X/*\gW[b.[YʼnRKj԰6oيG[A>h@C=""Wˆ#XQETvD`@󐟟_aAH$ݼiW: ǎ}u+ͮmݡJh,_ԣ}MJiOhPS4T1)ޝp%xޞ5k֬J1e{ /$j*Rjeرh2X4h/vU/DDHCOƌ}={V_fϞ^-CɈU_;KLL .\Dݺu?SOs q澜'5,}Re EB+'$wNҶ~s~D;K9b8n( xi(O)C̡SD=*޽zz99v-'"*!V[/ 9%E6))8yD#22e}+.-7n$a˯c.xiXܸc{P/kN [w|?޻eU˖?]^ݺѽ~{6FFժ9)) W6- p&?}5jZ3gԩ_Gz1c,OwU5~Y dMaAv;Aw0~<^yuƌ}o51UxK )Paz㗛>+kDDFXX(:uꄄ=wELL  &Fbb"p:kF8y 'O!B}U:+R!SJEU~/Yؘ*1#"I^9W@E`rȏ38]qT?p1TDDDDDDDD`V^UxDDDDDDDq(۬Z(z=rpNtDDDDDDmjbڸxjDnXqsbGxRh4ؔu b[/_/tw`DDDDDDD.Xqi ;v{EDThZF{N`4ժZVIDDDD-'S UqޗkS~#, H7?cC>(ǎF퓟a[GX,n~W1{|Ĉp}~w4m/M6nD"##5h4"v"##UoSVIDDDDcDB9s!:: #G /L}x &lu|'4 Zэ G<V|]58X*Zzk5Ս8CkGLW#b ~K|\ۈk^ëoVA-#"/ HNN^w1Z-"##FY'ُc-TnVCϤ9 hA}I_/^d ÆŨ: *8ordDD(߂Mмy3u'OckDDDDDDeƺk'L?ǀK_K% LkS2cM~̤m,++N+DDDDDDDDbBDDDDDDD +DDDDDDDDbBDDDDDDD +DDDDDDDDbBDDDDDDD +DDDDDDDDbBDDDDDDD +DDDDDDDDzIvvO8vE=!"""""""w`dj{C7V:􁈈`L:/f1@/Bb 1lp \t`=:iQzVα⵴h9|M탐c 0{w n;&o߁ ??]q9Hvh6?)Ùep_;y n?Y"""""+eSq-`{@⿰|w*Lw ?z z@מax`c1,v{F.l&d#ĪGշ9}MF߶zKD,?oo~FйǓxqS~(qvd;{,B0yi;Cwc X6as.ihhFFj}9b>֤ǂطk|z֞r=fj=wC ~VJt8q+m1GѳMҏo{/?.Aģx A?`DDDDDq.)S4,׻Rah,B["!aQ* Wۦ4r]9i -k!PQ% xN Dhv 퐂w)XTw zOLPpEװ^?]/=4lI+0L}ѫxg0ބޔ@ҳ8:u#` m-Ùx:}|4O}foŅ 3e9XO؋xH7'pk潉:nمswЩp9t >pGjPuz~K'2#"""""bR葚Pn!m(={c0 (",W=wK.`M͊8APpP1)iCTT(2n] !.j ""2 Nb9\11e괢ImG@`T S =Lvkx{qdAGȵ}X1qVC}3^C0. D*/8eBc8#Ln IDAT }/ ?CI`*l_ۓ #oזlY4Ãؾd&}7 "xM{WFo e!Y70fmgVt{6|?N[>2kʝGaܨ'@uG9"""""r)ޚ 1GVAHTm?w:>_퉓AFh>hx9oFZks X >H " #)) aE[ebFLJC y)Y0=1iTt0!v{ [C] <B_k8c'p!Ծ1tH4u1w06pe<$^#xv$6b[ 08kKh @ оp߱s\*FBf /)o~ɀK$F?95n<`U #u ȇ "*GG FobRxw6\3#~p&`2!OWw}`~!ݻ7*J W w/';֨`Ţ|,Z4y5_6 &1a!:R7AE/ ̔TƵEj"ΞNw4D^m46N 'S` lBUG8ʕ 0Jj4UP5 !Fbi?"n]By 6XԪV$jVGD&ϽI}A6,8}XDDDDDDXqcG=N4>Mp_9A4oKW2V6N:<SVy:~70C2q*~>3>o϶ē#}\ z>DDDDDD8#)%!wg.FC%WU7 Q=xeÖ]9@i{5{M1=P&)6:T?/豋H3E+#)H`Ubx 'v;16>w4{r;!NfG=P_WƁF k__̘TG;phG,GM-ТNAp4'rNJ45WUr: \`?}v~/N!5;`W1ނ=ۣu6}6"b7FhY$kC0˓[%Jar|oh#Q7Zy^=[bas=hhL~c.VO9xWyUʡ>81B@$j?ƌj _'Y""""""K^#)LPx.}-19 ɣ(yH$?:ŋ~aذUgdLu+G2THu_nڄ͛);y09Ulڵ&@_c@FkCk= 0H֛$(<7Y1Q^Q)"z(;/eƀȻ0X!"""""""r""""""""1X!"""""""r""""""""1X!"""""""r""""""""i=݁u|F#{7DDDDDDDJ V\ ؑa5pP VZXb)[_6#]{wFcڪ+{F={! """"""K8v(XT+Тp8WX7B->y{?.+DDDDDDTq(?{Uрq!=ދ;4!͂C" MP&"RI*]zo " $BsΞܙwvC}33n]Q X҈qM0%`ct/ Co(Ɵ`Lc',y?k7yi[si,, ϯ/͛^k͙ܡ/m~gܴU [% *]?2zl8sƒ4އNrN[SKѪ^/gbQDI.JeX<6'|ա |rX夕8H,&rżݕǎdiwɫueM?/0zJxp``zH>{&c{UN98Ξ.X+k闉 Ի+UY}m`]s=fvKw~ƢY4GQ4,c_:ϗ!x_N&/|}Lwv,3vhNSKw VҾܫЋfL)YDu;wC-Ruf+X, }'דv'<ƂZnng{`7'ʶke+W׉9?$Hı|sclFG NDDDDDDDlZcEDDDDDDD$DžƵhu'"rOoXA3w% s"""";wΝÞl[;nQT)עC,hҽkEJRxI Jvl)c.5V/_ĎԶypxm /[&W|bѸzTޣKDDDD9;v_>RJy__k}sq9wf32PFD^ !'$\Ԯ|;v/n:7:R/csJCJyY-"8Q鍷ɳ|6D%/ &Z2!9l+|2K4Km ė[SJ%hC~I8ɒѝiT}PWDDDɴcNň1|GbǎiޟY QnA|\\ Msu>bHjս\8mߟҶA ԦkcXr21=1s41~q]ȠZQV *Ts=cw /:`މ|޶!`im呡`Ea1flƠ9YD6E%^g.u++Nz,eR6I[|z@K_l_,ꗇM2 ]eȮ|j6.H3N4CWDDD$mBޣT*U޻pŒ mXq8ՒRArV<3Ѡm "׎˄4 ʈR[]ٶq 9 !op0\Ke;Tr?&UP"YmX‡m%fJ1gLJ0y/_=ޕ/e<ԨK&R>'R:pua(5:[~Z*ŕ+8y\$pŹ(oMAZ#2iϑx2G em_/qluƯ|!O xE]38MbT ɫ0f2T-JK$c#DI`nP·]rޞݳ 1vR\\czK$)\;S|nnn%e&B4 Mgߢ#cP[.U{.pz%N%_^n 6I3|k v ߭ȓ/5IZBۉM,g.bpn\lwH7^8l0z:TSٺD4v_ 9W+Po|Ėboӽ/^r\nY%\|s=ʣC#VEF8 hČ-֫ndRb5_idsŞH ˞)׶ue)QUuI\)uC&}/x'\T|m( {f D[]U:Jޘf=\"|ozu%Gk&Lb2DFo](Xm>)r9aeǘ&5av"sTk6/W"]Xϰ-X5i8I/w)ϫ]KސT(]v:GG_r@bb qFJ.ݿD&?ZN@˛6[rf7i̇بEғYC\f&LsvjwOnDDDD>g퓯tr<]R؋;݇%-'o6Txs맾R1cmѠ`%}1up7LJz~\ }Ԍ@lLL 'Oߣ3OM?3;7甝mb28ƈ8a5S)ڛg+g)~='%GMG.8n`=~&~)kv'Dx~@Okƚ;7*bOE28v ~;we$f9h\gQT+@{,TF[ɨ~8x^yvALu? Zzۿ Wd"_w5m6 $3sj:b%&b/cYځ?gsO?Qyt5.Q.F$*]piܻ ^XZiM>0{I'*nG"ʓVAؐF|ο;Ol0 .3jRIJoj\vFOL8]C瞫 [8~fd"l!l.cعu5rq,8a-wSUxm2 96! @^ҙB""""""xT1\Is KWp~+~d p -OhL*Pc!q3ʽ@̟` +`+6l;V%Í("­tX@?\l6q6{ *c`)03~toaGA3S;nV WDDDDDD`>q WtU[L a|/s) E" ɩO1odܸdJع>#i.,s&E 2] W|2^ݗu9{\ "{+Lxz{a\%€ǝѩb[A}es_4>J W5TDžq9|H-ЙU|09Q?;Xm\ p@ B|n*mג,~u6C`[x蛸Q~]l~X=ś U=Eu⎲kS0[:gX1?k\ VDوD xf+Dfom#""""""piJ:P wR Tk{#+i&.DPݏ`q!+i?y>,d_Cqu+j.5  |Vt*/߄{t kO8rQ4+Fމz㖡yWsBhҸ {\=YOh.ޟW+zu/EDDDDDDԮ^\yX4jƜs`qiv(;9-ekΎ1cةST} O>POYg ̘lOSddv-ZVıY@(""""O={LbI{?O:[5}^z~X=l@MeIvZ Wt7~گ=H湑#c:6vXIG Jf.\x]GP'\I{?O^3⩧`E>ʚ΃6m S?뗕ȓbML "5""""""""i`EDDDDDDD$XIևG""""""$P"+d,CDDDDDi`E18(fO>̼Wv/{2Q?"/ve* o×>xӧ'=!Tw${/]'XǔcQL?e~VxÎ["Bc.&hX/ ȣ"kӷm#˖x^3;Yq~x:6BRTiч;#1lal=MjPTz^3wrH0eٚ` IDAT^(ל WJ>mSTY~"p{գ!%BF-=hR܃_秷 `:+ė|9p E_>q-|y~/L+E䎩t}=>+9's0'JY9dr+x˾.ˡxKDgpHv|Lۑq+?f/Zdo{`~Y2gw$|78N)9yoD]Ro1}H0<8 BK7g\ٜn*c }AeĄ,tGۤ9qF\wle/ En+ @|08q<Y LxtZ-(k93;͘]q]m[0O.JQw q Lp_yz3) 9] 2~Yaa, w7i= GS3o,߮7vil:QΙd3 rOlVHyO)(܆7|K_wңdy\LLt lY&\7LQ͗(W_lK߁\ )OpO߾)pjMJwr׬BA9{ߍ+9|Xmu޷,͘>73/y~o{co}a2'Xr/<ͬ"~.7OMNe&'^M+#& YD$yI4~L vfq+6L)COx^-}NqfmDp/O3FX\q>#hд= 'q{I_7f0vh+nKM8tLۓh`>FV@؊H`"""ΰm-v9gGhXrP(RK{vG Ctb?~S3i C˓9oZwsJm8z,\ Pg2 mݍSwgIEwu#[Oś^. x& oLdU 峐BjɂC7Ed67 _{/`82 +FvDί6M,u .-~Cdv+/ђ!prCA P>pC1= drW"s6s `DC3K7ߢsٸ3= VOc1Wﱒ9+'™wɎ yupW-xaWsz+!2;Q';ޟ,CÌQl9Q+"""0IJ|cȗͳ`JlLgGf]=8}] ~lBQf,Ȝ4!{ѳi\qo ww7!&NXpsw"2GmbyojmT*Jt<ț'vZѲ+ϱ췃dx_R^"QzNڹH yQ'2.'mW1 t5\6_6&&kf~.jK>7\rC&3+7 0K]ndtW136E^G9 ;Lt3a]I_1.^aS;P&vbqq=lI<~]],G8Qo[t(W~F/=oLXj bcO7+qVHb2∍w#=7irMʩtO{%N7:6uݞI%wޢ9iEJYʿEfbNל`>JF9"6U׆ُ΢Kթ_| 5{^Tqs7yiG+$L v'o:tރ{=e3_E>#5Z쑕D89hᖅ[2eWV+V0ocK|zs`7͘RX6ų,ZE[,>)CZhQ#̺a',L&7-n2RByHvNNϕ:;.عGhD63`;NSdC|߃#[3Ξ(֠9?}.K>#Pʑɛ7g@~~:tEFa]I<+vB׎T<S\)Te~3%.3Ynu8e'wH.&B$fg\#QF97_.ٽp)oLaSjok;f.^ŠsW JA<;&]bZ6/4BGrq;xDЦ Y,`2eՕ\ر3uL'A"v7a-6c`xp@ f"16IpKЯn{ /v03޵ٿYk7j;33'„jaF@ځdt+Lf-\+"""̯Sh_c ZY90pQ֚=k"I^sxzP/u.KkO[EGfw{C'9xq`N xΓ虏Zo|»R!6݈{{n=;e` 0T oM3q@Jg5z.Nצ*O?ZOYȐ'PR>0=b_24pJ_w*iؒF cD˪v!gQ jh}q@ɵKi)ǰձKI?e'š١tٱ݊cJf*YoΫS<_z|֜LWvw_ Tj }Cf7qCW ̘lOSddv-ZVıy419Sx%>WI5\`A;`I>l^=?6 zCvl ͡l\ۖ4DF $ۤf 4b%͈TӔ"ͪ}Eq;--k L1֬0pU-̕?a~|my1{! ֻ;)BK!C ɓ^"GGs&W7_ Kj7߅ޝ]F|Rbcgm<>`=O3//YRٜN3WTz+Smyn^3W!nF26E43&}ut)"""""""xR"""""""-^+"""""""F VDDDDDDDDHH)XI#+""""""""i`EDDDDDDD$4rzxPoټ>DDDDDDDD+,a݆0K]41?S#"""""""FS9sҰq3̙ڣ+VB*Tِo -stֆ2>UY4BDDDDDDD@}ox_DwqZ,FʗYrT]\\5_>z!""""""")Sr-3fmao&2dB&J<ʑsv'C~,v~SqT݄mt >ųyӭ$&Ð6Ls=jV?fc"`̈́6o1ezktfi;$fnB-ymBD[Pn=j8!2""""""+A6iӦu:Nl)MsfYl9M,nz`qH\1k쟼g /1bOmF0Ǚ^Mw]Y8a፾aal8ŅrA6u""""""%#_j՚mӓɇ{|w*y~tK5a+ x%mDxWd nF/Qnj-/>[5k8hx+'WªR(Fu""""""5}2e4xdwDPYL{9m/[xយ(ñl@\׏iKlܜuk=c@%yӦ۴ Έ'`iL:P%)X WOA.|kbܘ`27lEiwnL7v~Odz|8t,$`'4mEDDDDDɧ@1Tyn Un.+Kʱ瑩lc0E챃Nn% 92kiX9S C~Zbos>M9e;'_]<1Kcq+7UaFVtVB{߉ɗfW,jsΗz%{M[wnnP_V&R3ݍ^NzDz@lT\K\tֆ2>*"""""""(XIgr6 )ޥ+8똬l᏿LhPT])}{&\DDDDDDD?+3Yj7e,=DnX:Z4,wtُWk,fͩ];F/f(ML*Pَ|n"k 'X:7OiXc8p$olL۴-O$DDDDDDDu V\ñMJ́5hX˖`\aM MjXy˖m^éL~9 be.|x l_A9_d;0QD7?jt?7غ@p]Bkca9{ѕOLuE78(B.uTvϷ[+~8X3'eYTjƭ0k'vG˼y눼89_]Sr:؉9D9m`ߟ[-swX;Hp&bCDDDDDDI+o9(ns[ jpebt֍KŜ\3ٗĉܼ8|_ֳO0Z7(iOq!Όot6<1F`rq#[YiE23DDDDDDDJ VԆ'e)B9krfsΗzٽ@S>ޔ5shPvC.c8gFԸ 2[/"""""""W)XIG#"""""""O MI#+""""""""i`EDDDDDDD$4R""""""""F VDDDDDDDDHH)XI#݁'Y o(oټ!DDDDDDDD+ )*T|n&?zϧ뇈cLJ:ڲy#*TL60qܖRlטqvksޛg .GG(o 70qxMN`2a6+TyT*>r4f, &LfղD4| Hb~~?ۄzuӤG,<=l3S{!!ԮۘoeUڑ36~zSL#VC>cJ; 7.8;Ը+5#s; G];:b8{f`0qca`w =)LV̘pp#!6 /"""""""4b>p+P*gjQ 4GͰ/_wFՄo6ʆ4'Zyk|U,y mXSa e:72.c͸mL"""""""r{N6=)CzP&왛JϾJd^]I7 8jҹ㾼)JOzT/ޘjofХKgJ*Ű?>pc8Jefl2ͧc"I$IR1X)D>N^8's^^iy~zg+a}Ct=6^z=p*SG&ldڿΧG~7 rҜ9<ѧgiXqHRÐ+bv@Ngr?>`xI_ھhq|W6}y['I$I$BdjTIHiՆ&L8&5f,]s)ۍ]}_<"3?ny2ӑy}2#֕qQ8_wulBӆ[vJB@IL+^s2k;·3VS)^[Ċbؿ6>9wv#z8O=5_@<[ba5(VV$IJ(Q`  @P_<2; iHۋ*L>t(; 3;%)Mj|l6sY3/}ƳgKv[<1KgILڔVrzS}3/C)MQe)W֦vmh/ eJK N8v}oH$IaRzTFV-[2yZlcزe>XJ•cxf5R @Rˮ4].ύ]`Y@ KXp @8 D@SrXߴ5 c!f L~Qzm^{>o5k!}9c cM.H<0ǔ-KZpUuLh"I$I2X)D@{﹇Fq砻 6nƍ FŽw}+Se:v='X3=amiվ/W=?e"7w7&Mai*[5ܱltRNKgٯuivR W?߭m{sx쎎-(um81UC$I$/(*c|v;|@T`rtrT<[T(](p8ǟ|°O~Oݳ!TQQY~e&[С4j0ߺٳpf߾z2ا\}$IíͰ ;#knA@-ޫwW}(O9wg9Yy g?mSc{> :t@޽zH$IT I$IH$I$E`E$I$)B+$I$I2X$I$I$I$IR V$I$I"d"I$I!I$IH$I$E`E$I$)B+$I$I2X$I$I$I$IR V$I$I"d"I$I!I$IEweĒ\ @0&Ҩe[N^%WY|ϒ`mꖋ:B=$I$`PDQ\4PfV RWI#џ N5 V$I$I*B+,X)?&Mf$ -c ZPL"N@&_~+ؔ${~ *EevxNYȺ ѦK+$F5y/0w֧ЀvRTx?n#!`0pXI$IJ xRkN]U N+M0դսܟ/ִCr蟒L`›vW`}H$ITӀ*Ьu-6M0:O^ԉIa6-!H18u˷B86Zd̞5rYf# ҇@luYEa%I$IssJق_eeZ&}zKzn89%VN}(W2mn3$TjΙ5Bk=G—GǓ\-iB'4kQ(vs%I$IC3X݊蜛iP{#*'Tyi4t. ;]CrvWݾהnʥy(Q?qǟιW~hE$I$I$I$E`E$I$)B+$I$I2X$I$I$I$IR V$I$I"d"I$I!I$IH$I$E`E$I$)B+$I$I2X$I$IPM&[7x凱7$I$(9b̘>m `KCҐ#ܻ/;\Nn C<>~}%I$I戕lWr+T>M͆@b%)_1=^eu25 ׌ٷ2owūV*]I$I#VZ 2)L*;ep/[ӌY|&4=j _5ȫU!X8mH6I$I?u\c*prN4]kw !]L׎ث?ޞǖ]Kr>{fږ[uWa]hױ;g] VJB+b@Gxߧ mtO1~M©LyFi:q߸"*j$emƧ9?k㞹t]3,y^ht^tԉwLXI$Ié@BkH$5QZλf|{x}T3׍垫ΓǿXfWۆ^yƥ3XkɱaҦ=-/'?!r#7^*@hp_O;cz]d"SV]^P!ŎM ZH凗йsW:vJnC>> ʲ~.T@ KXp @0N].7 f"L+~Bظd>?m&Lբr\P"I$I3"֭KAƎ{*P.]%[\΀Zx᥯yK qujӉ3oyIkrvXs6߉/%dUt߅thsmz J /{1zAƮD, xuut&@ѡ+{Mn㚖V$I$=0X 彷]N05>&O9zw?&oǟ t `Q)_M / f媫.ׯl|>:F[7{۷@s\$ItagW^~y-<ٹ{),c<- ©|rS JRfcz ˚#? >ejoe8OnðdL$I$I +Eh3kޢA 0䂊¼O;ЭL;{P[ӌII?X$I$OȁE@ @(*`Kb}: w?q]h bvD^flgGxfuY=øU;[=O>]hӦ#~kBNeʓ7ȄLՏƥԿu}˸lu X#\uvgZAO!oa櫷ӿ_o:w@>ėR;'I$IRQsJ!PZ|09I9r_^Ռuc窿o0(%/Wq CrliOsˋyz wC. Z5=Sr~%֜7quys!ݓЯa˳hW~F.qDKe)FߌGTKS3`J%z:0 (vj3T)bk:Ԕ%He_Y;HW>2ǐņ \~|7-;.t!$I$IEǩ@Y&غ\xu+VcօVoOxmdVm!,`ѯ9Svmڐ L-]ΦPumC'TrpV*~`S}%H,`%\"+kזMv.IF5xUd!ש܆4nߜ/-"ܚM[=5 ?IJ]K'S bO1І)9C$Iert҅xG ԭKCh!@3,^xkpރnk\ݫt[^`Қ8]07֜wEnK~ (&uU&w!ڜAl-`‹8vޡ7wޘؕ>{))8=WNȝ#h߁.fCx_e(/,ڤAk0#5Ͻ6_ƥWŘhUz琚u,>~N#LMKfՌ? K$I" IDATL8y;g?oymWg?Dy )G)G婏S޹ݏ[~'?`@݅hL3rh`GrU)U֯_Gٲ}8t(5̷n9ٷoޣ &)q%I$pk3l-Έ+[nys*USYayy^C;7g%oyﺼ\cQ]wmT$I$I+ $I$I!I$IH$I$E`E$I$)B+$I$I2X$I$I$I$IR V$I$I"d"I$I!I$IH$I$E`E$I$)B+$I$I2X$I$I$I$IR V$I$I"dr4 f/2fYΑ$I$IG~YF, XuO%YIkݖ$I$I:PDQ\4r3H]#ߌ5#\5O(̎J$IBdRQq>!œ5do9  7_˹bu:]7O#yXz_ف*;KF ݯhȲ>"Ut9/42{}oA,) Y$|=tiE(`X r!:<'uC*Ŏ썒$I$`Un ~ZMN꬝<1p~T7Ъ>mR=d%CXV|!cVբ-̥xm4;*NIzһ7Ƨs`?ƅش*$I$-2AǑInh5mF&T*tRe-bm8ԍaXK8~E6Z?drBT+C08C44w!z9\,@1*Ҁ$5Ld33{l W\:2)[b,,ִ,6/vwN7y%՗1%z-h׺>~Ϣ$I$ 0X):~d;V *41=7Ka%귧t=@ٚry•@1bHnzS 6W.zեEr~N*Õ*:\I$Iօ,uKg2OYqlKZ.ԯWBXnێ$ȉ˱r欩D:% H*Rv ?Nma뺍c֠6'1sM:!t֯v WVm$D%|bBH$I刕B˪q/q(T{sY㪔 DSe_:O=0Qqڼ+dT?5zQ+!j< syͨP=ZO,$jEcPlL=Vq 85I$I VFF;-*ZR~s-<H+LNҰǐ\oo6܁M;I$I.H$I$E`E$I$)B+$I$I2X$I$I$I$IR V$I$I"d"I$I!I$IH$I$E`E$I$)B+$I$I2X$I$IPM& tތӊ'$I$9b`̘>mm葤8虜Yo%I$IR V; )) f1kHJJbНwm_3|B):u"I$IB+E`W!\9|,LꤑL܅.3I$It4{~i6[CMgHhFΡ^v_I$I?ًO LЪO1[&P$I$Ir"+/3s֬[e5;ϫcYZ0V$I$heRD^<Rv9pSzW>ļ5[F }6~Ixk*˶,Q6̍=k7_b{$i߁L9s⬁o2`l!:?g M=ojc/G=*s[@( !qK9͉%o$I$f+E P ))AwA.x}x|'O8y7͐:psR%Wxn6᥿]k7u[#^'7|KM1¤M~;? r^a+SAU͇$@n;8=fׁM&uov= 66|+%li2/y/wRohV$ItTq"_R]%N撿 &;вF LŗҩnbHi_ג P Hju8>.^w㾢DZ9@L2_z6' |z EԮ-`[is(<#:{{Nk>dmfy",@ {ʱlX+B$I`\~뮺Cn/i߭Jú G3Y;}^"L'L̘)ϱ5]3jFCyE&UWfWM K`Cl?̸(^(vBQSiҪ! II$I 3+v+t}v`TFv.L@9N;V.=%8RΘ;Grݔ֧>AG +t4Lyl|Y[ÜΤAbHڐ\5OKYSS?!Kv(zCʙJ$I:V-~^x7Qʛ 5'+ $1L< C`1 ۿ{k[@?dذyui∏!##C 2H`I8m/<>F7^McQ4 o_Ofطy$~4)G-`IL:# %I$IURy o_ӃS!*Hp}4!LpZ_@Ϛ9U\q`2ժg7IJMQ!~-^u)? _z~7N\[$I$Ik/ )X^٩vzxLxUy/G](B/O؜ r~nHL~"Oޜ^??CiAދeH}R>s6͞@TqTiH;qnh+~jW\L 5c{>u 6m'iEӿffًUC$I$Eiw[{:~SSSs˻O  иI3fL1`9,r ogMos{X~e&[С4j0ߺٳpf߾z2ا\}$IíͰ ;_y5r g dUλ>s;횤~x?.y{= "+H)%a>;q)PE$IbRȎH ;8ҽ$I$`(tW[Y=Hw㈪J[T\Pڒ$I$)/ $I$I!Go^Hw($NH$It@X$I$I$I$IR V$I$I"d"I$I!I$IH$I$E`E$I$)B+$I$I2X$I$I$I$IR V$I$I"d"I$I!I$IB,7#! /Șe9G'$I?#݁}ۙX Q\UlKɓfi@0T{*)P6w4L^+,I$I:rUZ( .iH(s3}J+ϤA‘[(*qo u|3Ss*׌sb$<0;*I$I!3X)dQJq)4i2 !H8mSN`֊-bvZ:5H,<3[Qv_F(8NԊr˾d¼l.Fmա6x>GnS8@rY`RrGHĴ7^cQ˸ fY+6-32hݣ vSxyښETZtiVʂ/_F1:.s{ /!#}idvxNYȺ ѦK+TM^2G~ECk$I$IE=SbV&Tj 7Ͱ,,Նˮ.<7|q+rX6se:\ 7_C:ۘ,ފFn)>I;Jnzt,QCKI?_/dsxg_6,hP7@T *68s^M7}bRww| KVĒrxUyB*?}0e䡌Y}<^לE:i^$*uYjr̥x4N<*n zTZaKfe&K/!n}$đ$I$p0X)?(=o>8zߎ;VӫQ"QjsrMXp5; )4* BʔLS%.ѥSv6oi"b7bPk1oS@u?, jjX"%c,AMK#cgI'S!.8*6>jО5yQY*@LYN:2ix|Osל) (nK*Ѡn L@2_+I$I@"g璦<]^.Dcvme[r>{<;Cz;rI H0&A`0ؖɳJ%Jij}S:hPmG.ƽ?FDREehO|+|9pt<ɵZ2(Y>ǏdE^a27`ٲ24̅ͬZ9P1k4"Y%KCFF{ȠTo@$IQ=o-J17ek0O9:O9*O}Lr-~L?q*.cu-oݢEYb9Ts9ᄚz2ا$I$.meq>_^s-7rvn@^Cyʹ;9X!7O}8k~x?.y{= T i/kTX,23Xr%zjG{$ISDjՒT'֩KTkH$I~c"#::а~#I$IQ̩@$I$I2X$I$I$I$IR V$I$I"d"I$I!I$IH$I$E`E$I$)B+$I$I>jܤYgLv{6|zt~{"I$I3rQ<>~}{R-]Ï<Ï<ʲˎtw$I$IB+E(CNϠ[:i]Ћk͈/&##q{K$It8oK'߷/E]@Qh+|1G0XyGl2z#I$Iҟ.k yR"dONݧihҾ{M|hX]3Ϲ?y.Mp8)O#62_ӣW?F8?C| Ze,|K#9>bkH$It8 o1Yɨ{n2M)}(#PB2x.q(~!\ųw쬂|0,~O~_|S0H㢺q4 =j{̡ZWe\oE$It8(XB?T3#rSƽrb Kp9gt&.= 8L4ݦ9ǯ]^^ H$I'\DXm%[Wqx_xK[2laӖW}0ߖi F < ‡rr콮Zo垻n$I$IڋQ+@ǓX"=+=-l Ng G27>$J v=}.Or$0[RRs0=ȰD$ItTq*Pjܤ[d8qI, S7!X+߭" >H12ѻMͅӓRh]3K%H,`%# ; Y  6}WkP=_7|Y;yԿa>ԗT8+@ȧTV#Ĉ` F+1"X @Ғ=2+زEk֭ۓ=xUUWnNNS Re6lܤG5Uvvv _VIJ $ȚutxF*R^NN7ju%{( ۷o'TPadggA VbD#Ĉ` Fi?rr dLxp+W,Kh  *Zqs7:%,g*ԂNZ9}/%W|sSkx,-AzVO>v]?[n+ z.Z! MT f:AKC@<3H'68YtCFaknPs=FG]WvQ=$mNwNԂ/>֛7w$T@J#T5Q\Ԩes)jgָgG} gP_f;C6)Gμ[OY#_Q~@ھaj]^|E4ڠlj5 ))M^su;hج:'y|c4O%=44aNl`?n\N_顉f뵡u 5uq7mֺmi|GAmyixޜBKOةmNQim4ԯگz}x=﴾j5knAQ9L@8Ukab vf<}EKaa.xF6[YM4EϙMLBj }Az,}=oO5oO7z^o>9}WdY/7gksv4zǵp$kٜњܛzIfF?QAզ᪕j'=6&SJ=K-_~ikO 濧C:MS}hn&|!c}?اW &իȣtX5מ* IJױWlt!Ծ|M{6549x5-^RRu|ʓHQG'Gy҄P8+Cn/Z~nz,sYW\o}QuݡsI%Wmj'>ֿ~ԢW?P5ڇpIGխ"逃ԣ[m}UJ@k^ +,ӾJ(PAuuVV?[zimTmZ[o'\ *coٱK67^/g,%,U [?o*s{zX+Oe{OA~c> }  T51T|mVOl҈6}>vh?4$_nآnE d%X: Uy_&=uwHR =qdqY3'꘲<ߨ[j:U,㮣u,pw::*V\}?iA.pk Wz$$ * otUW>i{n[uעN>VSԥ&W]5k֩[Tܿx7v*K);>[uByHZ ծQW{C3vmi ͧy䱻:otqkq(GTZgdOS<@j۬pJZR^23ʶ>`(\uhI'$ *7JW}x@KI h˦T|R`~׉#ZIY զv֏ei\M~.uībw :5灏t.jݤUaEj۳:%NH;ZNkg>^vu/]GTuIuAjڵWk4C˳*֏ߦG˛8?ǿJ/5=oҐNpZKWSW>ck^/e`ACϊgiJ&N$nE{N 5ܺ^~IR>Zu[.>2]:6UukMB1~i\vv/UO.٤Z_L*(]=nu}xZ?C#f5mխ{OuKuZ y@,=gwU6աrIcР<~}ojV/}P6"ո~QO'zlmY.S]Te|MGݭ~uL>^x&um{h["TI w<6}oJ6^"Y}*=*ɓ|/ ݻf*P< D+%t,`P|6[~9s֎1|=~Iƾu;H Zcjn~=˾fX)Lؿ 2x TLL @VbD# AmgǨiș͔IP=T6=rz/ި}oRY5c[dK7+~y=AGiԸGG]ѵ^׵J/92=`DRyJS!h#+zԱOW҃MOS=F3F>VIJ~οC_EupN4WӬP%5ŇԶ.u~(lLIڵXL7`EV^]~TE|tw=5w:@;FE:V}4g^ލ`م*CmkJ+T_׻ndߩX_׀6VX٨mOPMSVݵD3ݬN3/8Q]OVȋէ{7k{}*96E̟K{S[cЭVճ5? *-/]/|ZkƯШsOԱZ莧hk?iA|-voR*U5t` nJ v_֠P R|got+UXX/jp=@uu1M7vͯw|m9 חV2Mб}jNjuKZg^3k3h;3t^)Z>BXF}xvyuA]{ka|*Z[m5/!ϪW_g.uELuU-&m{n@ ?Y5et 2X#nT 9\o,^=^Fb%NVPAсݻNW'<0*ueU;MRkdfU5STO{G?OƫWб:t˟]*Pj|/Oճ yl'/_-XW/֑_۫wס7jN*Me5vu7j]YK=z^=xvj9_kWVzTx=?oi=_o-tez%_]uT=o ߨ!0GN-My5rUm?suMzr hiJcoyp%fi*#\XcOG\0IϬ;S*goKw}瞬 R{jrJۡzTmWʓoSuh6nH5Xd6nP^G`6lV2ɭ雕9(U^G^Ro٩kAZ>WwXGC=Yumiۥt8H>ID[ zyX.ZM{Fw]HcV'U ٪^6K|=oPϫ~g t!nhafUQCv%!>XUT_J4P^}1]W.{1Mk-obgT _g=q翕{S:OKS"WM.O{5uwtw*RI揻H7>N݆ex \@  scnм&gnzP_J_+5O ^ZQ[[0zW=W> d+Op WU)5(3#L WF8Z4 * ~£H S}['f/IX~,u5zomO҅Cz)}aZ,4wTkջd[u[+DR0|GzZ[NXkzTie7?͖W~/zSZ7u/OStF^qGh"xxfHRppu vUy{nLG )=O52h *``6nA檓.i*rߙ?~Fc Ѱ^y$9MmHߴrNɓyoُڡ$HՌKóbz"MV4q&M$TI*VȈhPgTmz~:o*w6yՠκqk?u$yZ2 gX_o߭kK5tTM6ȣ'3s5[t_UQhҙG>j9 =H =8&j6x[_L?vRGRALTUg?_{54f9jXU:w2u=C흞w*PPb)IQlG4cS#*V8K[P&${P&i Sd#qT8z2&%=(NU8zLV8 @VbD#Ĉ` Fc4@X I{J{_^JCP T{d N*mbpz-ߩŁdBZūf2yoڼeJJJiGZZrtHCpW`=*WןpeT%{8Ja_F\oj߮iGQQ~XBmthy|ǯhS*ZSрP%U|:Z3b[6i&*1JOOW&MydW`%^H*B2Ȩs5P:*=է;0? T #R^>U+Vu*ď@%{򔽷O`,)PDs^S)X)vJCdu_RĊ@Ա_ݧBEtDS@,}wYcŗ/ IDAT'y FhrxxU9b z¼O+%IGqy_O#ҽv"BMjK?n9Z.f(1z%;לG$pŅK#o;5բys}2=6q75{UNdۯ+R˔Č04 W }W~J QۥuT/҅AiA5ZKFzXuhNڥxP#o',bJpr͛9SOV//@5tz:7诓jRRaדJ\,cN +V}뻺j}O3H{FaI /jW.=:a0b}Ev׫aC?/dE?hUWhtC/?ӂVj%BxgqWJ<+\rFz%{"ۥ>=[?4^&st@F5jKf _T/漬ןO\ЩЧ3SSNM_wJRPKn{JMRWUG#}U%*¼tW5m$ >6\K¼œ)ҜuǔkԫiUPAt-42vNiN9V͚mک15ٵ* husZΛPX }3tt~|i.U;P+&w ߞ9mo;N-,͟>EݺtVNtϵ)1wX VbrWi[tdn zwTK Tz1p^% H?=>B-kOg^Nkg边jwvԶjIӛ5z:Iz-I駕jѼ$CvJʹraT_.ڞ㲍BսZWZz/gtJ^]ןhyɩ_­{X7^ZiDAm]8IX>3g 붛~7ثvE>>H-OL$}x4n܎#!Rq˦x̱P:{3Kⶥj4T1Ϋm[Qxz6ʒGUTs|KjtiWc=7{އ*+ͥ?WOMX wxn*زC5rJ*^Uϓ 6 —tRߖ5 J|M/wS_P^}WGf뭦g~k܅#ڪS\ɣ&غ.?ay]Y#jT[6ܣݤY17לG6\f+;ۯ?7mSP5JxwhbUkWժ_5TW6oQq'kߞ@UOV{vOZʵ|U0L G_:ݺ=f WMiuÜɧܼ,mݸE2oڴiSg|KkNuސԻr[z_k:u}%K@m>-ݎS#mZl~+#g֮g0!Bn *L`%e<)T :٥_0m2CSo sƂURܴPVSGhwVPA|_PQvz:5e]ڬj$yXQ;KmݷzQzϞva}[UZoϚu:_Om}=tJ$wmK-..t ږH-&M-,w̑]G%DV㦟]ݾr:> =3[6o;RGI^K԰Z;]"_9u˜{tڡ^Ij2p}|Kk}Z^tFV#.<ǣI߫7E^+.T͛7ҥ롇Q֭5{D=(]ȣL)_AjtMzu^ǫƧgU[*c |p`}WWt߂UQe:uk.qˑ{ziMU^$??YW_}SA=‹zaK{s53tրCJn tǺ?wΜ#F )) H*7cv _g샞Xu$b몸]O%gm6ԙ $>J$${(M(АWm9#~QI`jvmNi]2eWl$cֶHٵ9Kd=nX.]er`?|*"#f%]?Xrj+VnVW^iU+]{m7x+n2hPqƶgM˾Zbl^m944]RPyV~h9(+k;zޘTh j}_?hw `R^>Ղ;'6VӄV$\fWŬBb2"ߺFTy)--gM'W`%\BrJSTlGhZ•hZطjfUbJÊY5[9w;Uǻ&.7H}y=n9ҏMon۝'o҇@Ar*m/*Ip*4#S6oЗ_}MteURubyokfzn~BWÅ)v}T(yjy6)ZSjYɉ777WG2BGmZ۰>Tb8概%r`%킓Hﳫh YJ)@J <rssTj\2+RB-ҽ{4+ь-Ɗnbc{s~>ҢTq-$L*?(RIP4Pvf"'7Vq;}HaD+jdq*-f&b :7V L fʳb%4*|vwi9 Z[di7^~Z~? $(G0cWjZlvQ]PBv NEnWRN"*V wp>Nw@a G4Sz"- n?8%X 4uszEKgtJh?=S"pS+S"͏2c!9Ez}9=R|)h)7JP5 F)!C?r^ܬ@XgXUWq{ow\mn"JD 0A.d"'ŷgۻUsYw ؼڭ>LqZ*$֥ImF~vc۬ zx-˟ϲ m"l[4<}mJu[vck`Ǯ H Ѯb-0)5cz,Tebn-}K,v}qZZ4t>ku-nPq#1LyN2+Om{-]bYV"AJ^3[/nBZ Gv$th09Rv! a 6`.:,N N#faݷ"^!1fHb;ӃkZ9'L")<ᎇk7/]bN 2P% $BKZ??ϴ^1Ch;emS7Sn O,fb'f8U؅>N]''N Z{Z'֪ s߮ͬl1BG}Ppa}9&4-a!ݏ U̩@֩N˶LLTqa Wa N 1J]b7-30)1ۅ(fbvîP!Rem+*d=n9~AvlM J,#v*XmBkڬcNX[٭njU)A'";8m;]Z`|9Ǯ Uڅ)v WPFVT ~:xj)v,VXT tEK<*z^@֩?Y YSEl.PWDXo+YÎq*PUKOU*SqFR 29]q 6Q7v*ݏbAYzPZ P0OrNkc]6 U^m;c9ҍۀ%&\1XX);:+fRbn7kuHMtNk_|c#T)A'ZWT ۩R:ȺgS"*nBHhĮP Wy\g)h1#}g;IL Y삘pmź8m(ǬZNבh1ų$Xz+?x(TVXж5Xڭ3cXh7@j&X0cϩJŮݬ4}r84/Na]b~pSRS8,fT:LJ'feJ(H/֠ź֊uYkX~oBd"7 ׺7J.\1tbW"}µPEy'9H+WU8faօdCB$BU(@#-}JBw1S[S:H~}a H7n*3dsl7Tpӄ IC3 WivƼ#dM PAciT:\RT|-^K38*>fJ@ R+@9D75kVp L}\q [JD~^ۄIF*ũXcѬPVح >B+vkkXkbW&P6L#SVݩzũZrP0v!SK@iw3w$gbcsLw [GV̅dC$&k9U[Sm`B>4hckc8~fPb]wnmpJuT")&"3pj Ec} n@Nk0g7^;NS4S62%f>n+ֵRB5TP5vuiP P*v/vm@u }.N߲nzP4IY*UBpmvʭZEJkõ)B;vO ʾoi T"Lq Zdnĩ`W7*Q*WT?Lkp0 .Hqkh("'b.p:fNQ}vU*v}En%5LJkY"{!$S[籞.d1̱ R-T@+KuHAC7*Ҿ:s[#7H,ucMjоԙHmIܾ7vnCx))dqDfqlz,\uK,mm=ÉR&*4(Z1&K݅0\Y?|jY $>ڝ_; N}XTHc0[JIvb  %ұpǦf HBǭӀ,9nF$m#p}Ta8…)Bũos}8M%5lIT 7NA4vAݶᶽ6^}?>bs0 n^ڜGqڎD:O8}pۦHKCdWHVHVS*Ranelm:8?xUOBHaCh?\a=%` U"O.7eODx4mn*^"!wZ`RSnpK0ũ,'Ni]SYB,R)X1 ! W픢Hmn>ivU E{S.\q %̶pۊh}n4S7װ+ؽ'3ьѮoCѴ9w[^P$g[,QYUܴVJ,}bN&np4omƂWnNMiS`n^vǕTX6A BN>Nqc~gɡsbqfeDSQ0$i=TTbHDՊu?RHj:(f|巡:RSYƒxTX!"ϮrVR;XfZ][i͔Hsّ>?ǣAhTwXص2d3|纱+emb/sFS9S*#P9rϵWw9#w?Wyc^ޕ+N5uXS bz+TDzZuv]ߔT IvR~NGK4뛨uhS:,6PfL)]Rʔh!EY7w;XChV`%%)BhK{ ^Yn#7mڣf)F:G8MDT;&=jϊpnܜ;}R^7ቘd׿,iE.&@":-({ͶhD3 UZ Xzp}5퇀R[7L*낷nu.7wMxy+v$k _U#sTPE*d1&G<-P;fx)nϓ5fW^d\!-%7b}jS[Yc9_ UȗG}e ^hC'She1IDATDhD+ωY2*VBQYba ^x&e 9ʣ%.H )b*G% P^kkW5LޟPEJP .K`%eY%R{<.Wr)>>O,O W_"1nJTX9W*)J+0 ks:P I՛T XrTnɪ ITxQ)TiO"`E2Mps_Q+?RڦxK Ǔ k$\Eٮ8&@KaTB* }RsrUQD^)сG TB*CcT|,tʩlaAOeCB XU@ [* Pbpc*F$C Q4p (&DC?ۯH ʎkNʀP|q偰@?I^DIENDB`qstardict/docs/ru_RU/images/main-window-intro.png000066400000000000000000001041771453553600400224140ustar00rootroot00000000000000PNG  IHDRhЪ8 pHYs+ IDATx^wxnzAPbrz"zŎ]Q,WVb( ` *-$ݙ ''3۲,yy3; @DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD%M PDxT,ڎǐhsm?#""""a""""hGp{Zq}^""""`):s-?X E{jV0t%""""&U4u]g(,3uFUDDZtD}GzDDDDDb*ݭ~(p*"߰۝ pp'=ў' pp'v \1\ T{?~(8V` k?͓nF[%""""2m6Pm}nZ$}e[_ovµ""""" |I 6?Pmo[he[U 4.-u(:Wh^ ڲlV2oh˶27#KDDDDނ)Zo`SuL}:CQnVq5X1X v`C֞`_+j_ߊlߟ@#""""hh۷1_":m/Sǂ[ʱ u;""""=Z8j*RsԱ`D:?h5u`2yL5&Scj_C}:&cj1:lߟ@ Y`L.:W_ٵej<ؾ?mCDDDDP`Q v][+_ߟ` J'?\'ubjq5W--Ł]AZ0Edr**ej̪o%\9 D>H[[7.Ҩ[ԵK218{:?_ݘ].l(V1}R_]Wׂpĩvj1=* S\AQ2}m~µ""""@{~,VsU(R3Xic"&.b\1f __kA=`EB[0Ss_V2`ж!""" v|9.䊙}um׶Z 1 | VUL@ڂZt:-򘈉 Ծ?-@WUq$cVL.|u my-.拯_cA d| nbHm۫ŕ:n+jj䶺VۂW'"""_aօVc՘|MW1m|`k[5k,(Oj!ȸXv`>+}.f׸1""""<|*&T(c*@mX" Mmp*_r Ncp%""""l<w}EyŲ'z7vg\XE_}b5n Zj?V1A-Զ]L-‚)Ry?33# w89MQd^\Pfi*J,ަmD?EVYYłP!#*&ŔZ,x ř@+o&躞,mCDDDDD麞ܿ~;J'o^ 9H*?}ELG_)RU_>h[ȋZR ii9~Qӎ8r𔴔9zǜ:Fq-뷫HhVZf5/[|Vg&Mq:7HDDDDDp @˻][䉘 1 `m֖aQ^ԃ-v'B<&3X7nĎEp8KEBJ ̦JM Zc4$c&< 5)]Sd/LîuiLRELS+&`mߦ-7nE}QlD\Γ5MzW_"@rr2jAw耦C0:L*WF5A-&Qr!ڦ4&jQ$ž15_o<"ڻ@+@ۢm1.r?$4a,p4rJ"Sj08W3acxpx4TQh,ĬɅ|̪CS[&Oέ`phV#VV1e%rd_"T3Rx^TjgUP4 -ٴCp&Lh_Zsu"MŘ(}SihlOR}9.|AͱZ ϯi@LL unK:kKHM}8ck>wODDDDDsuy.Y[˱Y##*`>݁cvF-rl麎88N8ph(k,R 1MUc8z/NQcʔQ_Rȏcjի~z5싘Nj죩-9Z*ܰ*ꃪU틶"N\9M ӄPQ!#pFt]h{a{KP1}_dz>]oBff&F<ӦMCVffs/F||i+XwtЁn㧟~1\ MCCnu+nV駟q]wnmCѽJ[œmrĭb-9Gf* Sj_&xy]e-j4 #66. N ]7tAIMK8t7L+hDD< >x.2=djrϵ31{0d|j^|es]0`JJJybj…8Tȑ;@CCl݊W_}_|1{Ɇ1cݺ,Ј(l֯_ :TjaՈŀԡϸvL}g*B1tPt㍸Zi8~> ja&8`W a%2`Bu[ї'ONîKrϯ;p:p8p8p.D1X *VG8y;#8u WЈhϵ x_7:ii蒗)MGOwk| 2111ǨQ#?$+<ē:u> k/9眇S'Oƹ瞏USNúuppǠy bccѯo_x ѣ'^?P};0 pxɧ0IW+sc姟bix]D\}Wϸe֭hhhP" f}gλ1bxsO?(B(]uQ^ԋ0"&2y`M:2A+eꁕ,N-]כtp8h (ہX'͖'qA/bXcWbyh:/$ 6La;,FCCF<󞙇SOAZZzsk֬ #89>t5q;0wxg6~9L4; ,T=<~ѳGloWTWƫPͬ &_ QzL:kVU :׷c"fuLm4#~̊+H@WڢiRۖ눉uК.#ƍ?w|A[hVUY 5 ȀiANN1TVT_看;&-HOo,F'p; >evV6***0`+0mTwGll,z衦zI*Bam; |@ԘWy"&qB"*޼8:t8Ӵƍz`9MBD{4,Sou驩.]g/#K>JTVZN׋_f˯wl +oߎ45 (+/Gn^&"X+zj_ד!fY𳚳-}5&ɯdv,P$ ˋPmuPڪ-('RlL48:5g^螹/ CNWЈh5l0~?u})wtG;Xqy⯿VW,\/κs>n8z+^.__xG5o"Pbڙ3q̙EU0bccqmψqm"66V ZPg|hC[ւ'>/J;zj_Ե"Ʌ8o4 Z4́-)19{*~fSLJў-##r2}[TWנ ,IJeq~W_ҥKa@}4J7 0 eeeޭ;a&>\5Q[[5kছnAyy9< 50fz_cZZ*6n 0nĈUTj}wmС!?!*]Ωu1g4uί.bL^ rW:D{_ CyVͪ-1qBIESےip8Wtl&R}&4]_nFQMi4DD{;yyxQ. EE+().Āpw"5)9sqēNw߃s9i8IHNN_w߭QGMӐGuCId{z)\tɥhpcx0~x|W8;v,ruS"6 Ga֞U:B0īs:Z3m7m1f C/n\>hvk_mʗZ1}Q]_$+pvpq]9uZ>a'gDqq16qLƉ<9]і.['|s/ j,Јd_~nM^LmHkCڇ2?m_k]\7n˪kL\1yӊzi4]<m\ hQ GMSO9]֭[ vvu^"P">]\вOD\>qhhfI4躎:n:@|L948tqjH@.-s|-hRLWqxE@SPVmNm/bh꫕7VLӄEVVPWW* nh^Tk\[p 'i-M~r-3[,ЬU.j\=r[ "fuM-Z1M3 ]r)jjj >^ó]i ]ጉAblRxt$D"_AS(9O[]vv-DSVP'j t]G||<!>nB"ky^/]֢/25n׶#^_^, _ɰ"ƭqLr&DDDDD=;v"f5.ЬTOբ>ZmCDDDDDj.Z[<<ޡR`}p\[-j-Wr՜*Zv9U*RC"Q<_}Ƭm#""""q.Vk@v6(ATcH}y͟hO$_HbNouEMeXhQO -\`WIDDDDDGsxq5j:."YVZm}qվUA(:suj&ն!dVVZ=r[=h';Z1/*XTM>vmՉӰA!DDDDD=t|@Hs|A۵E _u!kXE‰(zsuJ"..y-vP=ZfwRվsu-X1u*oזZY-@'""""E͢jL[@^:8@,EPVG"""""Z)VZCMGh:8 rNDDDDDCgGm9&TVmzԓ|E!m_cPb@6XkadϬƚe _.,Z5JN"v k5&Tf՘zյh[>ܹgO+`™7S/Mj Y7F]P~ۖt(uZ ,5b@rBs֢mxn¢3q}ס⌅'8^0_|Ʒsᡦ~ Gشި[> g.srNtw>G0 s. +^fOBvp?p2vg9?tzqkGĿn,>WxM@&9BL?dM?9z?N?C=vΙ}7W;C3yl sǘaNT;d̘q&4M"""p5gWvc5QH0 t+IkycAnXg_q'ẠL {>.aŒQty{| \G]o-»o?iyvxx{& _ ۰7f<:^8 f=j-[rWF״?F~x{n=oճoVasOHPŻ ?>Ns {%%o[|_MFGЇ%wzox+x R_&̿)NWl%=.}O eׁ1 7`軶_С{vbw0؉$ )i"-ٙ:*`Y^Yҏ# 9nl(䦠?b,L{pdڮ|Fgx˱guoh/x1bq:d${PX^ 5SҐ|tdfg̹WᑳqQ[Fp^(K[h|3^₦k)CqQzOuVswu~oՖih9eQĬ $7``$L_qig"N{=^|p!~V qmh(O8`sr$\}a=epjXuT}=O9M:hֻzo~"gB:233v-o~^.R^ /A8W\9?> >._ Հ p([#M+?6|'ʚ7P3pŋa7[gq㳿5ߊ}.R՟[x`\}\UKDDD6\]߭ErNS}Ը OQ7sAݟiW`^3$0jP^i"d߂O>_ZxQʃ? EaQ36QY^خ;Xklj*=G_KetW`"֚oja_Ż9#2obu0{`.pQ]l~uv%fPgg=+wx^8H'!q~s\P; ;Zlݶo .Dxuy9/~$ZL<cu4Kjq8/en}3+PJGAy/׺]9|jL Z$nq E0Z;j/-?~荣u,~{f.|/ }pRpv ߳Wbη=qͣ[?Т8bҋ^EJ|:z Ji?<Ǟ݉j3 pzmO\)Jѐ2fI=u:M_| x u;v>o~ncպ:k_;w<r.lv,nϽ9?1ypn)fM@s&φgkQ CCڀ#phG.]}3JoYϦs`ڔ[.ɉHz &>[wmADDDnVtyN@o &7b|} U]11mYE @wZqǝw>s|P;sx}G#W/K7tL^e1yFca%^45mSŴXDJLYZyݡvZE]VD=ń(juR|h+טr∈uu+Xh}p1cb0Ɇ#oǢ#8Qf5wWcVu+nu 1+I{_A:pۗ.NDDDDDjkNo.p˯.Ѐ?|qXLj(zYCWfQqu\P5NDDDDDnn7ﱨ;h:1"""""NvKYz0._MDDDDDߜ. 4OjY ~@_cDDDDD|r섺]شc#%`(:Eh*z@ݾUTTc[vDD>iDw邴4u/'w[mgGl.̟h*%ԜWQQRIIIr_5غu H#""j`6;hVu~k[vٝ$99 ݻwGaQ:DDDD>OEk&$>S[[⌈$)) jvp,\2O uDT=IDDDDDԹvV I"""""jwuhQuzhNqbȷ"j8dafƈCug;h@ zIDm-(E?>ݻuS2c^|i><tڵXmXc5Lzg0 l޴x<0)N'ѳWp?Tw}g-|On'@oԼ7ǿNGrnokqϿ!AM'ZPe>O,[!&NЦ"MuyEZmͱ0Ŗ01]>)Ѱ! 3&Vxm+y:Ku`Jo'oMa 66V&ECC6oڌ}zþ9_\-&*{XGn^ 4{#^M'ř\M8U,ݺvm/`W^U PüÓB\\pDuU%AuNkxjM5oV^Q,Dv&3kLs.Yp$p^5gwu??FO}8pԡ3i^h0P˸0v89,\*4"^Dž?^Eoz!+<:_^}nwr89y7DWaccqacq葧}­۪ޭ&NEEQaEDKKۥ8OJ4\3<dfx2>)= 6zpdgDԩ ΈC`[= v >;Vۿ{bC쯖Y8i"|` |#^:]VD0*/.xE\دo\zLT~6ӟyǡgp5qrk˸dxc(\4vCS F]3!#NV3"# NJ/9QGjnȬ(CL~pAkuXgo9,dL_,=O!NbacU*?3wf`tFiKg]z8z&9] DlDNuOp̹8t8q%Xd5ZċZ㲑(CrT^@ns߀q8oe(OC^b[)]-Wvl} 7/eͷkz~}OqcǸ!_` 6 Ǩxs} x8꨽,!&! N] Qw놓O<'xB31gM; ݺv@#"bXv-~7,YK.'|/?#~w_عs9ZϵI#[L 8TH~{u/OFV; ÃkOw\59h:Q{xԃ}0pX'4,t^$q{|`ƈlܸK,AII ֮] 6@4gϞ81eTVV"33SK[D\n}u3ݢpHk];Xt4>~GMN;.,āF(TiU#FC>#ťX@}}==,ek""(111BAA*++ 0`ѫW/8>f޼hO=nNDD(-- p\(++i.Ϊ7r}qb5_8gvQM;hDDQEw_G{ CQGM￯ŶBmߎ^={#s]Qҥ 222PRR:\.n`Mص8'>X6L;j u;r;ob7Y#Fb1/’:passŚQXJDDѠ%x'Xr< p8v455}].\kDDԱ郵kע^qqqa~(ʕǪpSK€xI\1J<;W\G&o4Q^\:6흈z@@p⾘9*"^A#"r{&ʲ2(.FaQ`6lٲ5DDQ(##IIIxIܥ4"@RR;rC8ޜwg8#"Ra4g ;;; Khˍ2dd5O_xᎅH:/=`DOFF y\>iCa(i׋K_ӑyϽ_v9]4 _x."us""^EHA'Lݧ`]5 xPóY6=vhms/~'wC?&bчjxeM0P[dx*<[m)|XE94QVVnqqQR/ {)E 4| e3G%{7L@Aaοq2zz: 7bixc߈sv^5$so3n[~ƒ7EV~暦x#E'4C{0'qiR ']']/ńX ~sbm0;r m9nq 'hDDQ0 \.šqqq0 ڨ%hDDDDDbPYYz[@/ jԌQ躎4G1bBKu"" QXE hDDdƒƈvWPH,Ј:Xf2#e 3-RX[VDDenO崘BDNuaոfx22";A(ss5NuHP[ۉ!Iu ̚jt?? p:[څG+D[nŶ0 :DDá#??ݻuS)ŅzPRV[dk8$'+Y9Tu:z;L.&&$b`A,ЀĄDu|`[c8RRRa"$*+akAADTUbbz BHMMU,ퟥaFDҒR444äERbrr!ZngqFHMMA>}MӴ濑CDD+-- !:>P 5b8#C4DD 5j6:Q`FDDDDD%XE hDDDDDDQQc@m(ڱhA IDATODDá#7/]C 4"VmvbASvK۱ "-ő؁8#"N%??;!Q3 uJ]t(J@#""""",Ј 4"""""((J@#""""",Ј 4"""""((J8Eyyyp8Jxh`<8 0pd%0~Q ׏0ݛ`jVYf N'N'upFDɕ⫯={)yֻ~}ЁRSt}O*[[QSa 5DVfR3‘8#W7Jlݺ唔@aa!*++aoߎݻ#))Iޜ0,Ј:)4˯b >|8QUi[}818h0Vǰ}ijjy>gX?>Y &6qqHL0XX}3R^AѫpgL3дXuwaS]]7o߾(,,DBB 4ѳgOyyyذaduWDD`FD  66{</FaxPARR 7m,G||&;U5b^&>HK;)Iw_?D>={aB}}=^/N'Ӊ2hDD{0~ZPEEfV6QWW:]z{h^. .W=\z";'[jzT*b㒱^ k\P_B|bWt/Ư N6ڵ+QUU:vppp\Eee%w FDIo[٫7nhw\0M/ʚn3u(99 NghKx<"&LDuu5 WyDt #n݊]o ]k3tuu&p8:jkp8_0 "ǩϿ{?}G|$ek,P*$&&`fzQSS+DDDDU*++bJ!#3nwtMT`Ӧشi t]0أG7s-w/ǎax=߯?ޖ4c mݺU1crm6hpߡm۷U^[7IV gbQi1=Vi1Ugg j,I1S.*XT1-=ނZZZڼyjjL\^']z딤ֻJ$NhҤ:x]O=f͜ŋA$ Q웪nt5gj;pݦ>?ޮ'?y矯9[I c B~su!ߠnw#\QI\֌pԫBoAKiK!IjPE) xc1-G]]]jooC>=q^x]5բu\-:iݯ9ܤ)w,ZeKpa=z|#z饝ZyCci{laڵjZO~k.yz衇e=;w~i%I=3ںmM4I:CэGB!ֶKz%{,TLjhȫXLT(;;;e-(ET;wT[[ZZ5yBJs+Y]ӣ]VWWߏB:n/to^Lm)jfΘ^RKKzI-YLRTbA==:~P?@=UՆ'6/-ZHZdnVٳW~fΜSN9Y},^Cڵk~uf̘1n_~8 M4IW].78q&N־r9r95 }pWO\.Q}ıPUWa-1ߐWXGž\撜-=&~Z 88֜V~yumwj zM׹JEiBSN\ZWU(ӣ.۷WsfRZ찇?UoOnM%9T===z:SKru)Q߿۫oY^xvKmڤ+WC97]%K[nQJނz }VCr9\{Р|ÑwЊi߾I.|q y5d^}r%Ң ?_'x‘p}e뜩[i{uzٻuЏqdMH}S{N z٩m{tś*C뮻҆mP{{2EϘ5VI6lС;m4utth /H/YrEVxϛqӑ,)8aC>Nm䑟apq Tooz{ҥܬbZƴ JrbQӦNozLrVZyZ[vjÆzv"M8Aײ9{3ф.lNY|q^}Z~*{ZZZtIkokݺuھE͞=['M{vk'ݭaww&My橹e$]wݥ .`<#80e]uuzrSjiiQ~!bQZx>U};%Rh0tM1%}=Vk[ƤYgGN8a=眺|:3OҪ}L4glM2_&ifL>)/-E+yPjj޷ooс=;5o4rkʢ:ܭ4Mgӣmx\Y3uꩧjڴi Ɖ\.^-]T/5s#1Lr9z5udM>9< cpPwz_oW/W]-^R7Ixf͜GZj:;;{nm}qii>UMhnִiP}kcCܳ_͹6wRq&NUVSÇڪSG-ϫcZ'tjdizr}k~`"8x"=oA;wY%I==1ZJK߃kPooAwVKs}՚0aW$^wt֙giwksϩ.\\}?x۰5cMklT- ߒJhҤZbj ݻwSͽ:njL&ޭ}~fCh0MЬwmz衇t纻4ut+Q?=}Ϭ[<^y:֦^]G-Mni͚=Q=٥R͗?(Iʗ{\SSiN5S]TӚqoӀ}[?iR{RICQ>p}iop6ڮբF-5E d-G\z٥OBҠ'j9ҤG&}!pl sӧO?ݻXΙge˖iܹJѻr7>򑏨U7*6NW+ԗ?!wY“Ӊ'Ԝ{j}}O. 'owUݻ?{Yu:= f_ܫ^3:C'hˠF]zqwX;>GMn3+Iۻt`2}tuRx`[53-ܥףdәՓT;xBxt>:uy~ QzucԴd(-iڄv]hxM?M8ܨK}E7߬nQ'oм?:Uou@ÂWH]xVK{>4]L`}z+tbʛ7뢕'h퀣Tgu*Nk }>ZrП}cYlUg9:['gQd]n=sW ϷxH߽i3jjHI.\3U_u6g͢>eStV[Q5kFާv_eF5;_4Y^M cҤiu5H.}[4SG"::%r:%:}nYjKthz"}xu&$RYȫ艇wj󑇚Z8Anڪ~I{RI]{t3䔩ӉkP趇hYQz {7n׺ խjNM_HOzY~W{-X4SrJӢkiGv|Т_;|q딇6]m _uwJH:}?zVSx*<ߴg-y5iim҄^תO7>ѫ ;NL+ШE35,E\A`MlmP[R~,־QS˜Jzާ}deEMU5G:Kgi~*sg.Y sw?>sM-:W,^=!Z>՜P{[4a>'7K{Ri$o*}+{DO^m/[S?&R)^fӥ;O_5v'ۦ6[[$)՞ڱIKǔ t*/)զ9i5A=ys᳇?M+tbKr;jG`܀^tٗQZ(wlM9I4Au譯ܴ } g/t;63ޮC_ |-T:ԥítmv٤l :h]8];7Vh>$mܭshm9|IGNҷ_;Ukګ= JS")> iҥUm7ޯt%Zvv:n';}gԢ'C/g[&MۓD'5I:R*8iGt)i՗-֯~v&%stۏm/k+Կ\.9MW?[Oٮ+k&ѷiռx~EC-?AHqݣ+hmkr;f7nՔ^˦$zu]G.R>أiM`W?s/]rmz=?{wu2{ɠ7ءݧ˖j}IO΃4g^r?0)~??6uh!U+.XCI&냗֚'ӟoWNQ>Hbs4KNnDD{ajI"J4xeR]1c|oCS.}Zu-9Y+Z)ҳ/gUңO׶+owTRڹEl޸fUgn&vlyIԞ v램3I *m~:|bvG՗gO_=m(?Eo<18TҢ^ա4QjKA"Xd[C4謋?O}F_~nu74iYzוg~6Sqr'ϮLk+ZfѧqNͫbQ4gҙjNѳqLU5W{:զu;ԛHyT-խt+z_>_ߣbSy޾r~]6;vr *o~XЭ.4{|}IZE!V;ISt9z][(O~~%ȿ?ըT7._&ѥ|λɺS6*gu|}3E JsNO5hz'SIg‡s:Mҗ*= O=s>iʔZr:-:S_?f%M_\_Ze=%/ IDATbzoVۚ7,}86 ˪?''6$5z~ዟ>6T5>]xkm8uooYgҖIT֞vmo HVW~a/ÿZOO o:-ӗ\}rך9k]4jO=G4-o׾>-t+H1sEo^({%޼R]4ss 0+)M tQK5HNKN{U_ +a%Vf[~`kcA$>| Q_?~]kG So aP/|"A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4 "A@H 4ıRsc|}4sw[ ).ԲvXF3Uܓ/^p=__Nuzc"V 9xu;l\oԍt@zBe={n9xUu1Z[s)\YSzJB[7va@H$`yƄŞחcR6bF;Ubb֍+j%:p-?$G@`qjjّzEϬ7$!U7o6=I˗-ӤIl8qAmz9͟?߶+tl?}}:+TXTÕ?=WscRߛ/W hmzGT,56`75|-7϶]</PL?Xy=y k*;ٹ\Z*oCp-\f<`qD3n~xsnZ;f>"F+j2o_n~mxT^d(gyھEƕ|>9siޜ9U=Wc'β=f{6PU*|ߺzMG>si~x˻:J ky5OMaTؗ/oϫW@\ x^9n_?4cЪz1֎z3؆;빚s7B(d@}vU=r,Snk!C6ͪC/?/?+dn.sj_l_g羬4ꏈH}7o{ޑcA^P߳zVm/#q-bdݸ\n27N$U)Сv2:wa칿VU;?4T+TׄjR۵n/5YA}ȯ8Λ;W[n… PCڵuV7gk~Oϟ]ꡚU͚%@ ])Jʗ.7IҔ)S$I=Y %I͛;O'OmPd a[7 x퀖*;IY/cWsWqU4y[I}!5c۫g=6'X~f#ܓaJտƎ]2Wwq׾K-wu`~͝ˬz8K5k,օ~]n>h׸z빀Ʈ.tuۆnZc1[[2r5[v`7w[?Єj~rc?0ZQy+J[mCk ?VPw<˭sc5zjv~*G /~=4.K}/h.KK=Wscֽ!{}_/ߟ׳W5OJ7Wws~mV ;Omߺ[. 7| CW~6}mVϮsB8k7-U8,d՝P߾hn}I~\ w=W-m)sn j}ZfǶfnc? 76؛Eʅ)657Wiv߬P͗ϪHZ'?R3/jU*&{.?pל\iڛΒ:w\7φ6 ,gI-WBy=pݯB?˅-WKJ7Js7qH>Ɔ=׵~؟jj~ #?@yonGj~+foii j7WwcejP`/۱ۦ{\5yR99iGc?n.yQ}5 U-+,>wN5ΪI Z~Ϳ j~ݍqcwjT.F;e 懌4W,m]ݭOK=y+Zc)Dž2?5 %]sf{`_Cǎ=g=< D.0 dدu_]=7v}[oo?D-`G*xl7@qֽ>}b_9KK[Ʃsī-Wِ3qH`sU_|g>5k&R ZR=Mejֱzұ h;'~=&nufx?@9{yb ]ʙ40cq}LgnyIϑܮw=_%B_/zuW 6L-j6]c75gW~RV/ d]ݾh^Rں5X5\0sI?TW츘1Aݲj~ݎ- sc˝ڱ?Pɍ[Z?|`j*So츺=+T3cR$,_k_xuK[p+e~`SiK}7/5*Caͯc;;9:c;:vAȞڹʾj+_*zkw]};v11-UAq} K5aJ dn}Z~NEsͅ*Up?oJ5ws`nj`Վy S Y~U~υ3v=dի1}lZphu;^r/O/7vW`TZAIK}w:أC sعΫUZħ `Ϗ܎5Y},jXh_ycweB5)>"F;9ws}-Q8.(4OeW?7W,s`;kgv J[ܯ۹>l'U_sl$Z-R J5/WPe?`% ^~I} w؛6lۺ_{fǡZrr=q}7.mدU5;sul=?f}"_xzRv8 ogn\vkǎU[* ۯ4lR/4vj{~s_hR_Wzȗ;^ .zn5v^K6tNgy%ѭp`ׇB]# e={lmyh]RnM^M}2_xk 0Y[7r}۳u۷u֎}ze>yC9/OIb8n5nn)cpU z5ǫuMhlav%k_嶾б84zc^!'`رnԫ٭_nY,ZS~$d(R nuk,Zcǯ)ܷkZ#eץ=i}`|)w˪K=MϳݺBBCYSmرZo۵v^ pB Z=>C굦j#q"_1Y# ^ 4v4ϟ~hM/UE=I1SCٞ:ٹٱB=γT5Uj9ucHCY[n_h>>YǮʇ"CعڱS:;RuUj]i𺬠cI9gJ #롚]p*zz&PjNhYYW͚ ~꺬 d9ThJǎCz05YǮPWn]h^kǡyzHW{jI%U [BPͲJs'SVȰJs'B5_V?Cf˩vmj2AW6.+,Jkƾ5Y㐬~Vݩ/g8` 'T7UwBQؗ&kZZTNmmMFײV|Y>[u^I륡PBΝ05ʭ4hW{?ծsZr\ٚ;Yu`4d[s)\s U糽ZTuC6ZZ>۫uZ* u?*j]Sg{+5͓Zm<Įu^I]T.]CJs)\+ghzؚKeعI0;Pd/T5; 5;µJjݧCQPkuO^mmySG~J*zZHh]5)^NԺ~X*zwe)\W: ֕YT{Zu4g(Ad(8Y֫^PFC-!N>Wc(eaˀ& - e_zYu|]HeR^5PPP;F4>p4b/׫P1"11}}S/UƩe-0j *լRZ9pBpp=Vh0Zvm1c gߺd~8k8Sqk]^ZSj wD|?61ξHNxξ} wq4z=zZ}xPh?z_3"z=zb|L8^uuz#u\5Rǭ5ױ @N  Bt*HQsXsD踵ϭɭ85waqO˺C}16"X2ic#d΍`6#>ֹ!q˽#_uFzIENDB`qstardict/docs/ru_RU/images/notification-area.png000066400000000000000000000026451453553600400224230ustar00rootroot00000000000000PNG  IHDRy) pHYs+WIDAThC]lU;g?֘R4i M W^xazeDH &&&Fo b1Bå !Ѡ4*? 6۟ݝϋ-vyiLN'ϾΙ.IGD  bވ\G:8"upDCBDr}+*MFD"FKRT7خ7X|93W%[@>8}`?sȵdNDZZ\e"IX&[HDkv-B r O)8I78z3eBJcdVCx K6lٶm[[b ֖e133K\zerMK?aȿ=';b7>|嚈=bQY. c2 *E,U7< wJF9ڼvͺ]"Rqn,˵ Q%&$ўk܁ptl-RJ1k>-CuֺC[eoUs6߽_x{hh 5)2 w(C/=?j8טğ;wl媓ՕS9ffmWL 87 8݃}= ̵RRs`X EcL\'r";;d^޺dOd2VN皠fVATY{}2iPh]r "$ƿƝ0f}T'_շy@*d2uDJT6y,yׁONni޼_y;=ehhwr6\+kff&TP6yc35Tcjpϯ>R "zNwߗ|;?cO2җ._\)03]?ַL߲ 1m [ŕTw,k^qӽW#Dl]9GȻI%u0\+>ݵ55Μ=gBtMDDxZQ=u\՝䙺*um}1Ehعl͢d6m{JӍuf" pr-"J둑L`;)qeQh"L > p\`V,_=a{jEHusiP2b p\:Ro b?D#r\G:8"upD_FepIENDB`qstardict/docs/ru_RU/images/qstardict.svg000066400000000000000000002715211453553600400210410ustar00rootroot00000000000000 qstardict/docs/ru_RU/images/settings-dictionaries-add.png000066400000000000000000001312721453553600400240670ustar00rootroot00000000000000PNG  IHDR=H pHYs+ IDATxwxSe9Im逖d(AA׉[D^7"B(2TENT^--t794+i?+9''ON{ju0:""""R uꄗT6rP?# w E>Cc """"5xEDDDD9bPM±M"""":±MV:z<58HU1&t֫1Ԅc%""""5KUjkG]]Hej[羲[ݎH*+TS:p|&*MJv؆[{DDDDAuګ=GD pyV<^DDDD*GyAUGXpxcvյB%"""" U$ np ;+""""G8N~¥a~p A"""">*:& y wYPmp8""""R7Z_ᣬi uǼ,_x[WpP?'""""R~/KTۇ,]Ձ'@S}WEDDD$Tƹ:ܦ }r UfB@SQ2&GT78UU  E*OyCMyJe'$""""GES U(˥;١ <tʳ#"""RUչ:~jTʎse:egYW ?9IE?a| 3˻}yIeTB9ȑo)kT*Zp ;n9;AaEDDD tZauO=9Us0,a'ۇзFDDDDsZ:PV}*-T㯚lXﲬۊT=5ez[8 cPz_m[FaFDDDuܷuu޶>TF 6$v|7lK `7ey.DDDHRuix@*;Nu]ފOCʻ>`Uz:-ha_2w,#""""+owN2_ &~ @MyoWy{~<@y}>|DDDD. D'st8l)ӺSBOek 4 @oq߇~ܷ f[ zDDDDʮ<`Tc|Uxo˽|n[8ʨ[竂k_U6*Oy=""""Rz-xZ)W{]qn^WʮS S=o" Io+z#QEUq_>\u*6y{l$Y&==@Îܫ8WzmEDDDb`|moxIz;'Æ{1\]Ww<-sL 2Y)K_#`S{1#馋6g DAAcs3f< '''7O ozOu-4KBO0**ܶ5#:::b]chִYlSwl)>GDDDDp:.t2V)VSx| 7xLyĈ!-juA"""""0M3u֭ٿEb xﳻW /+M: '{ xLe$' :mi=ܷHuf: _>Z(xYu׫Teo'滮v0`S[޺hHHbR"#"p>{?:Ou]_Vvޞ2OtYfK۲e {vfIXEC -`(f9 ',g>!>61#!""""R9ftÇ>Aqxwo]Yq e:'T Lܧ>VaGh(L aFg&֟9Fv*|=L(EfnqȢY@+,(p\+9BxAy 9U~*:f\?&1p <>t:ٿ?8rpЀ|0 08~,,(""""S?.^:{ǽ(h 6Th(| Y_U= DCL 6 ""͆f3~iDEEaۉa. 9k ΢_l6 fN,^̦Mo>ޚ??- Ӧ?˛o u3Dټy36l~Æ l޼9]vr !O|(T8MdoȚmp!nF㽑ADD6[a%'= )r Ǵ9`ALnyD5ﭷX~==agΚMFz:w5*D-nݺ̘9ÉtrV}ܱ9ºuk9t(zѿ?.R]99̘9+WM亜y 0>h̳tEs`_w_;-jY6HxZv]t1w・v:za&N.ߋ3)sw/6sV!*o;u{Zu ?^4L"##n0M%ө4HJa_,$5oؿ _xƗJ<=wG~?#8><1 ֭Ö-[xJܹs<;m*Il߱ܜٺ7+w}OM~`̙lo:6m zD͛ˣ}>۰a{v:F&UHi߾={/=a8w~a=OZbv_m* A2{x:=ظnibq)}f7L ݎfQX)0K*_ׁ#cK&hc l*="R>ޚOs( JBǾ}xYf gq)uyW,8kѥKgKǎiРZ͸ ٵk7W\q%))<=)oδ_@׮]}(v;,aÆ_8Q+t1UN@z;sMrJ2'?ArJ2C(D͘9?Zr-q#V}u?2g\tRHD#_Ubex& )ѥKÂO9>C[ J2\/lpҊO(qu u'qY2fr8HC:^FgfAM)ȻǴiyx`jтs_P!ԯ\ƍy`xVɾ~ۼ/cpM7u6F5FqJ߾q=?y֭[nݏ?W_~III :v@vv7r3˖-N૯ W^~$0zҹs'kv: 8uii}} ~FFFQQQ{2 {z}HV%)Vj߇-3~Dbu^י܇yW[mTp^۹>pZqyoL9=iin3J([D>YE1 6 o֬Yŗ\rχ~p6;v 11=g׮]l۾͛7s7P;.Xԯ>4hc&͛7AXb.ЦM àK:>R4nԘ]Z̞=~ڵK_v?YåCxmgzAԩq]::@^xpr^v93g&++~cbbܹ6X{,;w,Yo0;zH/믾q㆜=,HII!>>DrVIϷA,)3As Zp@ֹٞ_بy x;0nmHzo`iۊlszLp6i81 Yz4бc.6t8xs[|z5 XVcii}bɬ/h=lc}-?Ï5y{mY 4ceOsۈ8 3!6=KMKC%׏;8;8vgr<u&ϟ={0عsӨd}Æ0mO,gRdz}"R5*xxX 6܏N0BIx/JS^ KO] mYev=]zx ?O@0 6[զIQE09ФN'Xn#"EDDP')/XU+8M=].!1,W5<ٷc.-IÞ={[{nK9lٓONakJnnر|G|zam̡]vyvv܅/W,|j*6B׮]KkP>Ce8 $3{`g6u yꫯʢSN%&&g^ t"R1c=fL ;d>ӥKg&N_2,ܫI"{K\He%2S}Uz<׼\M|+=&ifDa6"jGp\lEHHѤq,%kִ)G8YfMnn.}ۻEp8غm+/}4hK?͛7cY7~i{K]38}4iԈ㏳y%˷m˾oK/-[0uToNNN+=O\۷ǁ8cl$'JZN'9deeqlݻYn߶s8޳wy'xRٓ[a%8222ص{7 liEjtҙ'MڴiP}e[55o㭏zmܯ'>:{mX'uЂg6c , dHơtJ4qY|d9w~hF`C$DD<#2t09眳w8ۄ 0m\4R =g0Æ Nub̞Qr%3uҙGyi4jԐGMKnk.&>0oŢ1p;LyIg+wC|BǞS>r$\s\x%ӏL6 bҹ ֭[\7|8)̘<Æ cرԭSFsÛVV4mڴaԨQػ׶O?^|SSFA x).]M7ޠ DXE}NU)&y We"QApH{8SNs߭HH,^O>)O=-33wI˖-}(L3\)T}m;cttst]~uץ;ox zLͣ!lg@SM}߽ݮ҅z V AުC~YEAA; 7Lff&Srp8 ZaVln4MDRք"ȉk?JO`Zq&ň@@=}U{ w~IKDDDDs+n}U{o۶tRr_̸CIEDDDHt_e!{ $WsM,}{q #GAA07Ɏ㠳:9^m1(v} "n'1>d CoR)\G>7Nqwp/aPo>&R-HdyfbQtKY B(((cK qk _L8!O(dzxmo H/CӤ&[&T[:v""!W8!l܏ey IDAToUt'Ɨ'{b|i[POC?޽[Q-^f5yO@*>T*RSV{Hk]="""""PY|]fWx?=*=e_|DDDDH૊j2COyyJy 0 9gN6n<U<~Si}pr`H'T:+{+__+0Ij؄g7Ur|j{ ~w$9l3w 'q"m|ہ]c/n g:$ND\otl[i*;f-<*CyO@:M9\xv-c;<+]I?LĺDmXؓ;qU1x3yoظ=DǍG3QMuZ,r$/0 3)xy 9- a$Kh9C]40 iե?^t -cǠvX6 4Hh;+coOHⴱ]|n+R 8s_ Mm;FeQc{3푷uk`U'bz mT{{l>bţ 7|7ggˆ߰7os'1u?h@糮͉6 X7{$ c'0a9<{S7"2ၳidq iilQ/O1E_c ]fe'$!8{}dP(YE⨉\†sW"oO'+Ϥnnl,VǾ<"q|e,iDbADa<}}]޹ lڗCTnwkVءu{ͲM5hy]ڟV݋x;e퀵S†:f~, Gs]w*exv}{zk,+ 9ҷٿ[_ gN(l8ḭ_禣m?EٗAr f?3Ἶ7('11\&r72oJjf.Oᦉc9Edm/y祽:]&e?{(.8:׸f_ _4".y+c@d%.7۟L&Ka_^swTs1^_h9Z_ʓ VL:##$77s&Lfߠ y3)g#s3/أlo,uis%\wAG 5 xؚIOSQo2wf2 #^~)Gc]Z|>y4Ę~ 8hf3aq}} ?ŞԆ~^y }?}S~ޙU]̕g#ELwM^Qy#y)=m3XEso1؉k܅;'b~ hEJmgzm>mJBAWpV>}{y`4Z}5qgr7.<{< 9+a=xzu7_Δ1r;)8(go  0weOr-Śtu3й fsm,2W>upa>X$rL! q$Oz?ZDmI\][YȽ$w)-ܺYM?+9l-^f7E\@zص)H"ο U;{[E+iZlv&^:_7nA /?='nlϮ3xWdRN[NcΟmTv߷N~o$4sn)Sy~?|š3e~:2Kٰ3=3g=5hw0{&3n:h}m{&3Itޜ.MŚ09fJ&Ĉl)ڵS;3bҡm=M0бe$iXksZa"a}!)*s@gcVfќqn{`D5y f|KKSjc_ΚcSq2\g˱w7Qql%r:%Mۋq-+?P~rc6ҾWGG`GGw/Ke$ǟ1l`K5qBJv Źo)O<3G^HJ)pq7$~ M(k~NsePDRl၉hؖcaݴm2H- 5]OC·'=Vn,8XO0lķ IzcV?~)DQ~sE1xĥW;/Ǘ::ͯ.=+ns:d{rwuXOo5}= ڰ6劳 U@Nv>fbn7ޙmߨAX٠'iD6}uF2gsJZH8,w>XϿ<~Y= 4èE~'| E\R8𵼬2mL܃kdoFn3Y:X@L #(fM||ٙh=ai>k+ZH'-#fΠ+7ޛ |V)8:˭˙+9~a{rfaYYg8Hj?hjv!Q $dq萅Ӟ$\>7!(I/V߿6;G`=dohUC^[PCSkt 3ILqB|~ݟY3Ɯy3#:fc٦T l&ց(hF .cI;ȁ '$-Rgko*dŅVvas;Ό)k=t( :Nv~2L " c!Ñǡ:^t+¡5烕ؓc`KjE:?ʍK rizˌf qdUI o[omTǥrmPNnAn/؈zX/` =; G(]Dk "/} >LهZ>46=V|sz|lD?xDο>n~eܟ8qtt װ37 /M1';`ui{nyeIuM6G}5-0sm oX.adl|ISg?Y? %d8!$uԮMCB\ >1h:gԌνlYc;s8E30&a] qᯪ?kjV2سΡ_6[J?Y<6:#M{DMi }">r'W'%5 #֊{w?fcZ>-=wy4mLVͦ3B8qd|϶dI{NB>|KBg6a6IדVV.~w:Ha4`t?6GKn㒸OyI-Tq]˕;O;'~w9J[֡O_  >+e8iK|ҽ2ECi,mGJ$| pÜ76dN)XxqzN_VA5|z/u6%(k$U)94'EZD9)8Avl#jP TOc Y#cK ydڐإv,arRx.ֿٓc~`$۷C?hѫaUH{þxSw3] ?Ӹsb_y:Z}['Yȳoץ3^_ݘK.Jp3UDDasWY%o3Oa{eɳ,rw֎#'Շ|5 >8ᄣz=y٧\}jϿ(N|AFI~s e3JKb;>a=/?jmJ^Wr9=JK NқpsNj%Cl%9o(ځ#LxƸ1ǀu=3>F0y>vve9øIBP=ym|SZ;sR,\K|-Mޘ>ĥwH}_߉aԡK'>:ոrm pӍ} Z44$(NE9in>> E,(fm=[c/9kL{C4kz whp`ķҶ%'hrK-`.ef7(=s}t_'F1/ bufcPأ:|hTAn.r}QC.S6Gbm9̛7Q H[Q/:#'n's˙8R8 <Kk>ۮJgg4Fy?3Jd<۝M7 nl6d-7P/H \'=*Ѵ"SxUkV_N{c}pcM-O2*gp֦M7f v0C:} o;'[9e 21~Iqh*A] U`SGy`ˏt[nP80tnw^|i+Z^|iw[,=r- 9k UæC O4Ev5KwDLh  dW@TT|RfVd8O^VgHY|>y ?.% .>|A9nׅSVe&}ZŚm۶n0ӧOy}KhyE.?eN rYt;n^w_M S]ʮո2k"ՇjQO\{AltKDʤQ!\FiMӯ^q/U3E3>,>SQyu\0;9ԭ('[+.4%ԭ{GFq[!efЪLJRD)5ۨEC / b }Bj#q#{VEDDDDj/m;\CO-a$T_m)UE?1"""""G#PB(ZWSZDDDDDjj]}DDDDDTc)+i39xPe^!MWQYYnHa͚P7A”aаA**sPCJ+w!Noݻw uDDDC2ٶm+@E~r츫)ۂaP$ȑ)..&Ms׮`ozD#""""Rmƒ!AQMGDDDDDj4zDDDDDFSMGDDDDDj!ƶ; uSDDDD$All 7&)11ͩz*AZZvQ- usDDDD$:ɶ|*UmwЬi H\\,M7fnJS 233xDDDD$(:5(􈈈H#"""""5Bh ="""""R)􈈈H#"""""5TDD89}f6=&qZq,^9K_NOeNe IDATpmct+[_.gt$5?|>O$i,Yrχ>_ȏ=dg}L|N&>jQGDD7JO#ݨKrQ]{MĻ ԕC i2 AnX~ySJ&rfLJ=EF1=Rؽ2FD`)Y=-a|n3DD_&""m/oDZw֧y#NRAJ=K>J3_IuB2P\:%̂ҳkɜ^~/~3 L#]M4fb"%2IWtcUy/^>zsTБ@ߙ%sF6&:Lԁ=SR8k7uR[㍼d /[WILV?S~Өg;eι~_pٵ#! d:b I>s_NDDlp Hm,w"//a[yld)ۻDR'9lz\ȱ o*fvgy4b @*j}8L~1>&αu)o,JeC^0ngXh:am""$Nj0md}n;vb;'Ư<+vA{2'iLfҐfhJbio'q |.ڵkQ?).xOHۅ1np=L;v&r h#""(HHΤK: >usA|0b5?{ ߝ~2Wrز.ƴM8;m>i笝NQ𖷻#>gYBGDDDDDj4 o0V84+CDDDSGDDDDDj4zDDDDDFSMGDDDDDj4zDDDDDFSMGDDDDDj4zDDDDDFGW7y8Bl6 V~z9?3}9:T Bc u3DFͧX4,^x<9"1vm uSH =!@GDDD.N u3H ="""""R)􈈈H#"""""5Bh ="""""R)􈈈H#"""""5Bh =aG 6q?WI=2g+N县yaHOnx7"E`dt1ǖ0t!""UO',}>Ν3~ ԍRsf\zꆉW =a&Uۈ}w8yKzl\~s/9[0sW:Eޓv*NC!x(|.'нg/M3'[ w`97=]#*|=NeW!S6O9B)w¹Vwqݓ,?66iw{^t>Wuix:w;0 2޽7OFe}j+8e+rQ 7[Wޗׅ8ٹFߒʱEKRIw!V}rz-^!)c0m^1Wo̊9.a\V}; K888;xå|j!}ͤNeE|W|MQf.m:o.w|un6H $(5'P8lxvvzg׳W^h*IQzHBBHBf0@†|<摙~ve;ߙxTzM-J2suϛ_Y?CcojYL/< n]?4EX{n֓ѐ*,kkޝsН}Bv}T͖󞛥_/~3gD5?"6F ݤ[61Ui][W=s'3 ⯧~pKI)p%t>W)W pdv=B Oa 2V< R]C%zZuS0dOQ~ݞҀ֢:'ʐʲ2Dx7Gnْ(&I65 !2UQtvk5_xm;{z>R6[,uZ3]3sh@|'*%,9м޺󊮪#`OLQSYGM&߬/u٢T-r7;IvLmx2yېVbw71hiaiJnt{CdvZGrzIzz|+=g9 Ԡ៓iUo_{VVOrgU;eo7Uf6L{m.{qv:ʉ5( .eJC 積]R&}`vٽZ뺻,P\7P_ռt=jȽuqF3LMxzoPZ4*'nRvL c@J?+w|Dfe<346$[SGgGG?BO#E뫧o_}աRR5οԲܡN%&F|5W;j^SZp)!1^kS=SC<%8B"╔;Scn֧ӫo Pg@_S5Mm/{Y?]&yw,[~^/ɦVW]IvcӺ;6Yux^([}=з{'u zc܇ j/5F+)!\.{U]Ӗ_q_`_Ga䅇50+^i{;Ќ'OJ8ѽfMG4lu&gE$)P8SS$j1 xC~;Xghe\LQFCj;)lrJJ^-R~L 8Nڠ/[Q}22m\Ry.c0ڽ*+ ]r*U7U\SuVxdjӵ17)v>^pt)*YH>Iw֯ؤ|PuhlxGV:Du{zCGm4K^ǚٻQ}t_~m(&v=5TJmiӷiP9mMg+7qTR:;'vTC|8zj#cN:T-둯6h_=Nߤ{o)<ݽMSw]:/-Tܨ!w=󆿨xu1TCDasuǓS? ]/s-vCFe^o}z&_>:B{V8u'g]6{lujM;jMkԚvTCjO{qGNϓhbا;o~;2M?+>wi t2Eܰ>8V |<5ζ@ O^]Ǯ232u&MʽwKU~I޽kj7kM}շ:[} 5mm{{K#4BK#4BK#4BK#4G 8V#&9)z.{ 8&z$555%#XzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzX'F+@0 6!6C.GЯ^9 G 8h~+#1.$,ꕕe[+gK9&z6ާ~*v9h`Ck;=ArQ.j44z4BK#4*A2~|K$ynj v 8A2~?(#`G9z(O{zh gؠ2~8'TQQ!ߠe(qTe6nب¢"|p(!>^ZͶXBO(>.և4MLGe]7lO^r: ZѪիqFif6竱,to EGE5$l6EGE⨭H;th#INS;tPaQmWc X=A.6^ݜk]>]Ng5竱,F`iH!CU( qAV`!X}'`\.l6"#էwo{JLHJ]Zjr:Tu^A(w[LӔYtl!æ&)MzN P=N+=4lPɐmc蒿_AѺ6nܤ˖)-:t$giX?Ln]eh]7oQT~JINqǵ8uns0MS˖-i.Qat{:JIN͛uku6oެ$e O>T?Ϟuڴi~mST^QJKn[꿕.jm޼յfm޲Ui\^WQQъUEyLԖYsyl-ZHE4p`Pj嗥Zvl6C>_>Ove;pe^|>燐]4h]z){0 UT״WTTL6PN񧟪K.kк\.._5iDiii3{⫻*#3Szm*%''5xWRrSz%I6]JO&}L딚 (r*mܸQNS/իRG׮]6m۪yJINQLL""#аP)Pbb:vu}Wjڤ+TVV5T*j].T^Q W4ckRӦM|mWFf7o4\.EFDjM ^ג_~QtL^OrfjYZ.k(-]h(ik%nS)!!QIGáAh,&&%/y<|2MSvM =UGÿĖ-_&0-O6MvMCOqq̀_afk>8n۶MvC1}VJJ/ǣ͛+??_3gPlL$i{+?bbbW LTzt\.IR\^u4BO#r4} %&&\vCaF#GPxX)&&Fݻw/K)**Jf~}n]~|>}loE4|m q($$DӦNC(%%|M:UQQx=z2lFT^Qݯ4թSI֮Y2Pyy ahtokLS)Iۜ!Uϡx<TZwV+-ۭ޽zyfGP h!!!  d`FMxlHvCf:|7I 4 C~_f}Z|y<>:R;Kvj[nvxQ==Ԭٳ_}=(ͦ$`GfϞ~z쩂߫\f٘ҹz~DkiѼsr.0dlrWVꝷޑ$PTTdU6M JMmuEGF G'_.`mA2yn+""BQQQGm]i߮ 5xq:VjZmWc X=A`RX늍a?"ic}k]BAgbccRp"ѲBƏj ~ٿPk!Q##yƎ j 84`FK8ְ08euPYYyQ\\!4kL[yf^pl+++j֬YK$BO$m}}3 Cj֬8[m 4 x8zXzXzXqRTT9\U\az@QQutEFF4reeښU> m `kvkќzTf͔R, <8(@=,=,=,Ҹ8)Ś|0;6[g+aBHr镋[dž߯@00{&ݾ`{:F'꯾ԯ__e{%Tg4s5!0dFwOtb:@y}zjz>rs/V/*k*(7eT@%ߤW\sS9VkY==z X!C, :kͦtѸWhW]>.O$Z}pmGwη|6i~^|TMN\jqIc䐡'gr n𑷥G${zە+Mvinc2U"e.m@}k'5zݞmBJ:=o Wed o#םr(`1@kX0^{#u[uӣd-ՄcUbyL#@mB5}vZ]|nqƿZs8FtRm*6/{R |Q>z)_{O.W\tui%ڱ[ʯO׶rxesy p(wc{zPɴt':IDj+::\Mza}@6kRvY'j>Cй-lO`={P8uQx齇]{lujM;jMkԚvTCjO{qGNϓhbا;o~v `U232I&}ػ%$^ӵw>IZZӁv{<՚޻jD*j73<6mhԨQ4h O˖-Snn~Aװr>N'QnPGR(,4L׊_Wh 3wNKç3˅9*5#R.'yRJ]f6}:cya@9JnUIaA-[oC?z:K.ڲeKWߠ]skknAMB[Rp\3 wΔgs7)]~Z?uGνU--U<++URZ'ݮ9sfkҥgsk^^Wym*syTVQǣuQV*=nUzTȭpښ_qv*-*҄G){:I5=^e_y?O'sW ;F!MogJ5W!`6lZ 7Wx$;PRR$)..N9991cΝ;CWzzOoʕ+r:}UhJFx"C1#,__0B ӖEK}fy' UT/>VvHgw@ UQZ{l ez֭[|N}ORԩS`Oa =~y<^<>\ڜSm-ō*kbtė,7ӽWнW8#I)))z5zhp 5k$'ԥ^~ZÆ ɓ%Iwu}܈T׿ߨ8'5n}m-\p3OO՜EJ쫳zwV.ԜYcWԬWA6*Pv!CarܵJ[QGy~mrsi9bz(*x](9)S?/f+et6l]_l(nVwQbzT4s4hPV˪3{OvU}*ԥG=~Vݡ3Oh~ aEiv6JKosX$EEEri۶mot;v]GtA?պֲGVH#FIšEs,I't M7HMjPǺ5qvbݦw^\[}4J-}sn}\2 }w6y͋0zRD fϙ7xC!!N%$$(3#SÇ+8:]]7bҮh}xךjX-æX[׍Jq8zx2E2I*))QJJn& >\}ѻᆱaÆiӦKu7=ݥ 3EŖ^Y)qLIQtwqLuϓsUKyZuR\ZFd {p){l4[H{;]yGWF|OqGG@gwQnn<Z}5߾n3=+x7$k՚vԚj5jԞCFZ'a:O7w7w| ;2bj?B?GjΝ;i&uǞujʔ)Ҫիt'*k`?éKuhb%[U_N5r=NiڌӻWm@@,gefd>'M{]c{Mn֚WOT_=PY=>Vkz==;q+#y_J۷X|e4,R}#I#t֚l}KWm7K1tFq{x,ӈKRr e$hlfLWeݺuכ{C/ֹG(ezK:dM5nP v!hpF$1̦}]DEEk/e '2`iF`iF`iF`iF`iF`iF`i`vTD <[n23Faa~\:+CZ86lE y vY8zJf7tGFBFq%7Oo ƔPE%ݵ&ci>cflߡvoB ~ۢrO@ހ$)a(*̦^+>:"p!4" <x$)nhPZ]Rz4s\9Cmݖ#0TXS>OmAz̞߯Kڧi j튌ITyeVK@a-ZzKҐ^V#iD*j735ܩ|Iy*ukGi~"#"x4sќQ,cgV>``G &ků+a͙۸)>\_.QmE*uy<)L͓TT7K˃].BQH/wJ 1I6Bn4MY]ڴWd=r{ʟ_]?evOμl3{LI i^A=T{jۡu:^]{Eg_^M]3٣ڪZ7Uum<1ĵs=Ns<˯O[>wzmiʣR%{}3g-]*x69o2GeUz<(+]eVYGe. ~X.QoEEp(-߯ UMԯ j\8@ 1qҺ]^X>|3};{F_2ujfs)-Lm)xC,]|:{_k $;g']N(?_-6}q.=U4MƔ7Ew1UoX ;z4zHCOiiiڼyJKJ^z/|:G i*uyj2g٤=Rs]6*),s/ήi79u/'ŖxTRQέ۪uj"]ѱr85%rW_צ]JrI7O=Ͻ/g|Z޿uKѳg]sknյ=ke$ձzy Mb2z\7rv.uػ3o׮R'{f>, H.jwV[o^x| <.}u ?LtI0!S 8]׽G1=YiAuuVS90vFMGކWP]x@ÆːOJ6[䜿&_^G;*5sKU\ZJ_M[ˣ^ eq"FP| æ['xI W\ui;6ғCI>]Ȟ:2Qj*(Mn7W~}6[T^؍^vv5VK.ՕW^8]7`U@ ;*d/Wۣ KޝUFx!df o88F0lٴ^n[&(Ix$f)IN޾^J"Cyп.FgeZ..Wܐg雭q uI]8- rg6m]~UON7ӗ.S3mSb]FRe?4O[M9ܨ@Mj^O=V_.H'ē ~䪨ThxhA6Uq=֭ػj9:3կo?u)ear*uEkBa3UQUIG.(&=PLBnRMȹJ%eKmZRa Y".#DK 7  N;G+֯_x$_6mw${:~dER~]/ $ 4^{=|yܬH=XQun?KTrl 'i{i(".NF@%[63, _9SpxԲ}\6h/n[7;߰^BBj߾s vYrfɮ O%TTiw{RpvwFd);iCL{0$G.\uK,єEs Rii*0T|s|sאY}g##F tztI\uvfn&MҬ"kԔTmNqq QZZAk2e"j*x4X))).OpR]9کX|?{:#TکuF9)M1S}z}ݢ@ }232u&MʽwKU~I޽kj7kM}׬Tx`CC5w[ysX~ Lrjf[B|f渕\ӎ /W]%0dv*?7W['ϧB=EݻQx$iZ>/~v)葠#`z1=c4~q]R*YY:l2C463cԱ{w-5Kv]%7i]*..Naaaۏ+֭[w7hb;|[C$!ZF }&iH&3ox^vt5nb8iW-x_ic{vS][uCi6mІ-m-ZC-F__iMXO>"i{Z; sZ0/e@ ;'i^{A]S'o/zUzta!-x/y7鶪~L* ~λ5˖i}mj&{>֐bY[ ZzZ:5kc[>5e>5eZںvh՚_?"$5}j/-X-葧ṽ>3fjzsB?McNٟ2:$}rBeAO:E{ LKs+\ H\F駾[ԯ__e6ljZ*R[g Y[wd٩-zuzz;z͵J6wgܲG}留7>];gNwI_+ASԘVꔃ~yue4~ÆM'Uau9IB@wWm-ƍ jiiKO-˨.V]:|e*_^ήu 0Qbai׫˵GFFj欑߿F?.:lLVӗߡ~g%Z+/-V=;욬]~KcL;U@rG|F3ZiһtR: V=۟WK >@V)y%Ǎ~1m BJ1Ӧ> #E)zzHM6h־}6K hRf4h}SUstɚ00zܫ9@g~&?w&Myl']rگw?O M|2ۤI~\5}ur_)ߢUC={jCֳf(K:)z뚹/蚹/Hu%tn=k2FXVC鴲٬2xl6⺌<~t{/].;Sj]})zL%ͣ/]fumץ۴ ֑?|DGڻSCuϞ)œxIou/:7R]o_N~i-}ѽzj!Cl ΑO6ղ+4tDu!tо;놻?47vxJG3DsfE'A=5dqZx#N5t?̣H Еg|BWV{ (;BO ӧ&NܯH4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BD#H4BORjU<:=UN~}S ZnRiBO5U{=ш#y 0@_ߤ#GV{(= FVW.pPfFQ#FT{(=JFѣFU{@qMD#H4BD#_@!G ܼ@7ܼA F"q25jVZѣF@knޠVjw- BO 4Hoh*>JPQFiPccH2ГT TIbwzXJ*i޲-ؑp^i9f2Srz7vZuvvVhQWWA?tȹ.n=n;ѩj$˼e֔wW합p֎/}K󖽯Cv>r:ez]&G{{^~iNF ?iy[Nl@AI)@^M;R/~wx Իwo}lݵvBQʹpSz|16v_$A55箥S(OCB)$Ft/ lN\켺jBO\C$ VjqDz|>GwϽWK.$fN}R)~H=jܝBO!,5CK_~Q{5C{O^5/IǍS.Ӓ%/n~uÇW{݉OKWcy[ܓe}k~Ѯ|;;Vk]W=L'͜=Tgw~jmyZ=tt][g>H]qrs+낋.3>;WfaÆjvY3ui}&‹|>|jozI|o4׾gQiCz~_r=QhP%h՗L].;z/ʻk9?=_31cxfqzu5]Ի,xw}tOoW/HO.xK{:yQ6]w|u˙뿗侀~r/G}NH7sO_uRb*z|BF:f骋>}ҫL]St1ԯQf_OϷޫw|%ko/iOՏZwsis 8R^kSu}Y}lˮ;<EuԔ)g$9n7EL:y :j5hI:ލ׽WsP~sS%):yW`֑e_NGO=!I9u:45yƧtƍ 3(s8s(mQQpj[)  <Zuo}.#I/Բӵ}3c.]iNrLSc IZtƏ'I3nܞZly:xC4m3t텋ssQvYyR=~JKJ ݧǛ66pbk󎼚Vg]>蛗ܡ(8!;{k-Gh?] eρY խ}q(J[o7^벯UW^t %ҙL#ԲI8Dt` z5m =yͺُ/jm#: >t؇j0QiKkAZ2L #~FsPyIe} ժ'xHOvkP:_{t#zhɚKRhJzΉ M)HQOrXj-dLEp]6 V}s8h.;$U8P1'έ[&5j@oBR!_Gѯ.Aj 4vZ.\g%u]Q5}N޲ 5kJG| вrzn>X%zFNN̷H7i(PjO62_}c}]_p/t{{>st3%92l;x67~vY|ji׊&iL>=XsCwVմ度:3r~r͚}qGӸJ vˮҼjIa6\?8wOGFOuaCii]Zglw{7_l[S.վޢ~{~{7u䰲LуqVCu;AzQ Zwnn~(OsN=l]thvo|;vGӟ/W}C/|CMYu4usÿxvfxur_ꪫԻ5gL:]3\g~Y')A~Q_[١w{~:=5^~Rju i:TMX^Fmk|kZaٹv+>XG=^/(h6;/;NͻӏKJۮ/Ե*氣ȏ|T{콏ҡפHs~w~/oQg9~r5FG|Z5]pn`zM JW^5}_}^T:ŋ'7ݬW~JB>@=tͷj 7/ޮs?hQq8V?tన' ]>FnMc.ƔRx%{_?A?z{r}j!s=wR#tkǟigiGk$ߴ_ؾ.s`EY3CunKۮgxyjҤIp o.))c󜵿xmڼy|mxnKW*HJYq틲T-h$@HR::JH!iyAAu#R[f?I2I#'<~MԛE}DD^&u=Q4ǩ9=Q>hW;?rֶ {%]{#uUc2/43ҕbOF'nn, D37{^q Vkި |]tqq~ᨦٵz\_6x7Bz r6|l_UhךDj.k~uivpoZ;W>S{{{F\35دZcGY4ܻR'n~} ۘѓ&#'о+| ޮ_yE4 D,g|*2'k$5~>Q*>hs+VziAuݻ4|q_ڄUx6YT~WLC]&u)sW+RTm~$-56jj*qK&Q 8p`hFR)m,':Msm+9ޣkmm>yԱU5*=fvO^~ޣv2_$R)566CI4sdu*H$uI%꒷廷ҧ_4S؁G:_剺$NjB9CO؇ra:C8~%6~=AP؉26jo+[hd' e쵋@ҙe6ke=Ul.^ woc^cn{^*y71`nZ* V}jN9*=q*(A'~T"{ [X_ PB7貏8.A z4Βы =A)7>sC6sHVvLik0IDATagP$em~fP-ܽ-l͟0av/6|@R(|: ϫBPTh"/$e7kkz*~?R*lu=Etsm=}1>o r-clv8^ʧVq۲U]SFޣ9k^&}^u};GWwxf9n 3L(!,$TmvƵ͵:{[Zűj͏޲7 Ԧ=ڷ6OWY2+H^vsɝ5}~p:sׄ{ @~0Nͼc;.o9 ;W~eSZ?>ic/w+xYm )^ڼ~*MtU}'$V t݌]9YlL@Y\u-ʏͮ/0cl{¼}[jgfq}^౗rƶ~~}6ƯRa ~sN0qR7{TA!yUUBOPG>mꎫsy;Qnh¹&A`=J63x]JW ]WѱV ~j`5vUy*6kޝڼʏY>9kv>9f 3ozho]t9mؤs%gf^f_cNG5>Q?[P.TWUo2c}yp}͵;;y=ۯc.3{O{]X؉t8 B0\v1߾/ٯ/>3(+J,o+$ǼQ>>v4DZ+=9uۮ5en-, zz&vۢTJŽ_p[fWr-yA5~g7׌jj#m[ Cy\Kd^o_#m½cVtdӫxfJ;OV_ne ־u|9W?PZ{_+at\=_RZ 7P>a~KϤ'emK]?,j g=vsccby@4~ZeR#u Nv1 Bv/>K{n˦'Bfk}veǬBϫ91Öt\՝(a'n C=IaݯW1c$W-۟a*|*z`c䞔!3]cT{fV`W5;9>Na'azY~7iA&=6uG~<\CO*_c' >v2:v;zpeCyZpvNX!.lr6Ã_X};]Zw} {|8Jjm~fWt6jf|ksa\UkzmnW Be_q!aNВ8 _ jsXGەd!ut5,e ArzU]j ~eg xZwc8%uCQWRUcB! {)żŴoZWrN>kO ŭJa1(σ*9>ꎫߒe_Und^vUGDx3u]1 1c6{lQCNDkXDHޘ_ԊPm?K9+RMz Grx-!E}mQN) @QPX(j(t_PUcoA3H S,cVvR~m2]'®3Ǿ] 'kyܠmr jSl;@OTDܯ=ho[dVw\{}mg)=f0CNؾrw. ssX=nvP0!ГęR AmAAG~aApk}U B^o2" ms_Ai31ѯz@v}m[X *:0U#m[푶\cŌܶBZ^TtU zX s Qe qOX0ROcR6nz e_B*5~7ְo+&`FVK% >]&};"/;(-(XDi z8ǯOsSH{88ct _%m$ГzC6Q+=~2BB]1U(U:ҧХnaD ?A7h﵅ lT(q~a&룎ﵮ.I-Ƞyu{>~cG>aoO6{ \!˯&NؠgZ OQ/G| V[\wO-满Pb&QBJ_\}T#vq. ;^{RpzRLVw&\mQg{(zL)_q*NZ*x)%DaJ/rN+];^!ЛZ)u<(R]7Zշf+ HHW뚖((8>ׄ +$=Jt4MRodQCJ9E/ ͯR%*H՛dW"Pb[w>juSާ`ըx*};RB@Y}RrNQ߯` =RuD!՘RTpsTڟRUJ6&ռ5s1a\@Uu@aZWR21/DzR)E_$C2w-8ǪŐSk)@wTz9)ػuVO1ǭT WJE"Ž'aAb8@0Q]wxw׊IZ@-IzS ]wwE- QGOwl:@wQTTw{#&x0Vj5'ij}GԎjntLIg1:j1T☊&=~p\$_ 8.LqPzt ÄxCL+ A,VIENDB`qstardict/docs/ru_RU/images/settings-dictionaries-dict-kiwix.png000066400000000000000000001465441453553600400254230ustar00rootroot00000000000000PNG  IHDR=H pHYs+ IDATx^wxU̦P HWQ*""EDPlX+E H' uw~$&73[M|g33枝 !B!B!B!B!B!B!B!B!B!B!B!B!B!B!JJB!0j@TWC!BQݤ@&H!BvRy!zB!;cm=_!B!3P].jsI!B訍$H=#uB!;Rȑߠ z5u?B!B jqNqWB!.]ThW㭮 !BqUWR] iSm|LB!"8jcqTaϗxB!j6i vEmWUu}T>B!8:U8ʺ}TujQ['Uy\UYכ@h`mG!BT`MNvnm.B!WPqoc6*^Pye2Xy[i)*#B!5/ؓ|oss1TfʬGr]:&u&uB!S @rMN+ʬ[uHM@MN9m&B!ۄi.n.fYj3m XuLfe 5cjniLvyjۮʬ#B!*2ruA.fKjOw,!!PWjc1(B!"˧LN~~F X2 "X1\5nԸMobQʲێ]̤'j)6<.KcckѢeu qDB!B] <?tÎ;rƍ8+]V-VٍRd-8Lv1Z-MŮmq Gyy6O4xǠ#B!GCu=Nl߾ZZzoֹt +jsh;®oiqocn߯_̾B!u֯N>%`j)uluԘ5M5:'me7+|~nǚLА!KL!B:!J mC+9:Ok11}TYU>_c֥݉ͥӁ0֘u,x<>֭޽ExTxCM0 F#>&Q٢B!5HJ滇gs̾s:/u-c̸[2[JEOUXuʌ[]1dUvYj%bbbb ^8KGt4tM 4M t] Y>eY!B!sk~-q[چe̜+5nn:[5]8vqsG{jlfۚg0 O-]"FK1J~\AxANAɱ30p{Ij4 0J "!B!(%ōk1d=cW$QڶNx8ǫE@gvv1(_9N}`R 񐚚& ۳i YPmnP| epB!0v9?6boTv1o|5A}kSMjiu :t'\”)S)K/USw/vZiؠ#45?LaWGd.BZHpf֣Y%<22VZqЋpDFDy3iZB?Y iݺ*#SXPQSӚ<<ܳ>^67Yj̼\Zc&k]TcVj\[Ywf3NժiFAA!!1d:6Hft ak그" @4B\5kft~ݻ\wÍ{N^9dnse9y^uIIرs'yyl߾W_}EypRvf3|>?jcΓ͂,MNEIS&xPgCjau]o=c=x4ʳ{}.e CFٞ2V,dvO@ B]:!ry^}}C/KP6v~Fy}Υws2u:xg͙Φy@ZCǎsfmٻ{SOqDDsBt87Gb= "nv+;v{e o?EEE,]'ox )Axrx^{mJY6n7D^9+2f "Z߲|!DgI ;?YˈQ),(Pb!3_gC{@֭kYcEPy9W9|y,0cfʺ^*N'XkJݱ־cA6#]˾ $ăh3(auNi<ۄU\0x0II;<$>|=FCVXhhdegѸQ#J~WFO?)[XsƏ#G;hڬ)=1)0}*mO<5k1r}e')fqO?M-M_|-[9 S:uqjڵ쒡jd:ҁ֬n]9yX%۲ӭkYv ,7޻f:IDD8};Ml?^ʀ˭#>$*-)cWx0 G`ҳ+]ukQNq;cmJ~Vǎ3Gcv6Yvd~GuBBqieA+s\El-훜KpmB/~i  ,w{wکIIكݻwώl޲##.67jd]VƍпsqX?Ѯm[4Mn]9^|ɧVyh޴O;]bƍLӧN!>.N5kԡ2KNVԫW zuS&O˯V0pL999EGGӭk\.1r)*ݧأOx褤p!5̪Y GРA}4!D Pϒ pڎٶΓ][bGLfNOw1Un6vqEe73=F\za]s!|8SGƍ}\l+s/vꫯ?..RTbbY@ׯφطo/'ئx ٷ؟{7k ˍL:!Ca<3bw:\&>!ԃ0Pr&ivܙΝ;{&<3#g5Y`Mc׮4QjҤ).F{IMMQÊ]qdX O?`[jƍ^c{6(g&=;)9ˢ. siM2vgr3ٝ29uoa>I뭺۶hui6 ֕5,x4M#*j]=4#K]#DG,4,zꕻEDD/X+ˤyy ͘YǬō3M~9VlZ8"T"64S_bJ # BTAjj-7'))0X㲱-[ҺU+MN^^l{em{?vhR;< ǟ|-[0 5kױz Py>&22.,j֬Mzǎe˖?/>gԈl{7\w[neĉع|~7F=ө\YmsRp\$$$pARSx<CSNA4vڵOn7{e;n<|3))4zɶXlddd{x. uZE k֯7;v79M> ul΃:VouiXjVv]ۚjTJ۶4Mr]F2#;JtMSr雦k]"!vrzQ^rq \v%ms2qs q%C;-[Kl޲g^ùJ^y1Rhڴ >3-[kn&Oz۟ģ?3wNɷm߶'Ǎ%!!Aɮ~^?fq[HO/UW]Qnz&>еkWPkmO<˯AX;d6k8oV7x3QQkۖ{{VJԯ30q1Q<0f45kaXnj1\@b&g슫JE)y1kmg֘6ǬYs7/(:WӸu9-gh*7+Vsi̲Vf&O~~7TlôS8pF4ن+]pоwHHZl~W漬z<6ڜК?;_%Ƽs9rJͰ=2f]Z>>ޖ*׸f2v}oc־zH֘fNYMt],xn MQPK0)lyc=) !D8ͅչ3o&o}ocGTu^&qEXc&3n=pUrIN^^EEESvV\:=B4),5,.;y:o6J&Ω͘N3=&s='NN*΢Ge݁־cնԶ}/_d`Ť$M^^YYq{w<.E.q\>B6d` B;4Jťm}([ ",m'vqzծ&;NՀWwm̘!0 bN|*G$''=|ܞb<hk:.]'$$ݥJTx (..*DN!B#:_``=ӣ&K݊Hx λy ʽwGcZjo?*NOXn~xRTB؀cO=c&=˭FB&?(xol^^њ7\wj OpcT߬HM}`QMWۊߡ&ocVvF=xq16ײY̞f=?BZօv١ 4Z?Z1 gq(v}4^wt!(Z3;5cChll͇:ˏwnxOJ1gͻ xmdEC^45<[y]3O.("a8.k³;^]) PɃyl_6o| MlI>S\G #[#o`߁}_~ o҅>K&M|]Vq=q*ZóS? DHeՔ'x巶R~_?3w0.͝RYkAټk{._Z5g.ᶁ 7Mi"8;X>9f}+BInۗ" ƢB?7=2m"`3MwS@Dc\2dLsEv?#>(ga>}^g/ ?tooXï6+Ϣ[Yw04pq6^4<`C}_&_ğaPPc2ZȾy"g4;!ᮒz9?< Aw:vokvĪF>z_IEܫO4dŤm"cģfoeU' /Xs6+ $ }NN(y?/eOFd}k#^ϾO_{n)L؁G iܻ=K5)y̸ "|l;bYfo*Ŵ"_h|G:koEz^o fV sFaGxl@}4Ϸx|C`5%4gYtkpSƜ[7tls/S~pZ'/$g N sd]h,7mсrn,(D.^ҵ"ϹuJ&ŢOzm5j.Lޓѳrv0>~W[t;suZtҭ~ !΁:ÿDuiqmǨp1Xpwٴ܉^S:-M!"}l=r:nowfVSr>!)< &Lqw_[?Z|3Nn2&J310ySiS̚=#Fy,~ۇgye̺4"Y Ĭݼ9(tI\|J].^sV Z%rbF4ɯ|O~)’BiRVz _B3aߧyiGMjQHY{'9̙6Tn{{01I~dh8'/O䇗^4@^~a%~c:E?r!?ċ_3|f|ׄ@K? `,? ~:/34 r6,bqD^5'ms ;_bʒC~ϳ4csg}"^9Ԙ}N URӯ`|bNRwKNظȊ‰ !7;(P7sCĸ\Ĵ>sNHg]TjRzxpo24?mbtƜ}v[3;*qgZT3Nn[6t8>L yZ 'Q rBiwyv+O ӍgZ~}.lObh ~Qm3O;C?*\%׳_os j&#=z^']8Xz(>ϤW1z,m/A,@I(M#p w:ķ40_GߕB~_iEr|3iz6tڠG׌8+#&ߣ5}ۍ<ML(fULT(4-p ͥ" %/'ϺV<_e14 =3MGќ z1"zP`ldl衰Ks|y 90rt61?Zʐxr6dHx=)D2(^Lּ.OafzYv_\{ T~.#NM_@;4Tw'DO0-9%>{X:f 5(8n(9Px,Q1Q(,8E$šLėƌ4zE?'ocjBJ>ӣd^3'1Uɟ9})J90IܳRC#,g^r C۫y޺GY.$;?MD <KW|  ' FqA.|ELt1[3˲!P&E,eEE.CLHLֈLJ""; xr;MCrY<õm8Zg[s#g M<ңaZ1gǻZ1!1|23 0) O'571zx[I7(QIK%8:i96.uȎ·4~>Mj,/ZЮKG9?hm4=>b'Цt{@K'zC&~ȣg;֑ͯy| |I0ey1aZr,r/+\+g3Dl\bt2?ؽ?sElߺ͛V<Nm8lƽ)>]Mb?ԗzAQ:O9]]"h,ed:橡8{ 30JJ dr(3x3^z9<5OKmq@'.!~M%̀Anj*q'>;7f,?:~RyTaѫɼ;W{ox#OIӭ .Rxym5=|J/|^t,7 h"ַbѼ`Y~q]&NMS# >^; rq]S˿Q8DR\R!6h-[^ܤfN._,{^',9z4$Yd^vNӁcwaJ"YnjܺTi8(N:u@I' ?-=C;"\4ыf|S͟8[J!^&g793l%_`ngGZ ۷"lN4vŢM 웪u¢q )4vg"?}{ՙҎ(-nݙ?>qqWӹgyũLyrם~N]] EY޶l/?BƎJ~WLq3NU?{>cCѾ5<|Aqm{q!2Dz,x (J7.$g>1'q<2ͻ֡{,{{s=D77qgNʂ)ST$ :ѫ)%۵ܛ&o[E#nAkӒ8d&7Uw]Dv "HtO'A+SF^ %'#U7ESN, ߪIX;͘IK/y,5h~57{>+a3EmX3Sܨ@jW}v%*ޗI[Gr_ìha)tZz`N#_x%ۊp͹0fud7jӅf]dHsn3р/ge1&$=o{]x%#.y7<;q4r1АuSBNqyV:53}Pb֝i1|i7ָ,Kͥ4n.Ͷo?uM75[lQCGTCuY_{)((kW_ӻD/Lt cJ/fk׮#<|Je1!D9F&+&ac) a9˲'dzc4R^KޯOf^X7mV Q%3r䈇)ytYl6˲7%K6J\}uoulWNB!ׄ>;77V o՘C]߼Z/sqhtzwKQY:{\Ε4f#H]P9žN IDATsh\# qw.osZDm*z%o^%G=ʸZq)jT !'jT54[u45,DhtʙT[yj҈yTB{K5jv-!B!`ΗE)!B!f{^-j{cYB!$s`mME !B!wɏtTFB!8Gkѣ:jB!TcկK'++[ cXK_EU!!8[^ iDEEѨaC`R(_T\VV6g.C`ڵB!9N`><9(sڨ\U!BM114mڔ={CscB!M\")zB!u=B!B:M!B!D&EB!NG!BQI#B!?'=wnrrr!!B!hFttM4!1!AA EO5HOOg\Ka!B!]HS j4oT !Bᗘh6i®]!RT)xB!D@D!B!D&EB!NG!BQI#B!ӤB!BiR!B!4B!Jy8G~]Vy:1[L"t!(!EB 4b鏞qnnV%jBqG!xxl ;iض; ˒Y;"n{?P0ⳞI} áoԷl覜~݌ɺA7'B"C5{y$+s_F/͓t#A+YoNUoI%y zimUAM x6Bc|G!kq[s egWʭҏ&g2y:# .~7GMmhZţٻ8)Ïߙ;*Ew`M4n$555.fw{{mǵ#c_ѝyf{<3_;Dedct*Nڿod[{{*@Ï;LE%%~C.XC4WII8+O_'}۰n(st?KjSP;`:O&enNM3TgA}}vCrWC/{AN.8'hnj"p5ڱکqs;5HW#p5BW#p5BW#p5BW#p5BW#p5BW: {<2~&=I}~6ʨ,uɁqVw+~]|n_l8{q=,' 0 CTG ~^?Uϭ8z@MBLl",n@jFjFjFjume-YIW){zƩI"僠]< e/nԒFCn{[Sh==; 펑WSڰ} 0ج[}; ӬiӂD޹`͚pn|%)n@AI=H]=|kR?8M.T2frNW?RuM*M2S7Pm|J/5zr~3W|^%Ͼg OQ7"YS4G"~w>,;0tIkO|js؊Dos'%|u[w7p]4uHZhVl>U45U c;,2G});5U^C45e }7J1*/)amUun(odHFB__\"di+R]tь>rWj/kއKuځC0ĮaUZ\)3Rv6Sc(gue}|jmN!FjڱG)0Vz .ׂ9[2uuT+0dvV`cSǐu15c>xz/:ql|F~x帰~W9~E:=tN]l17W3:(5s請 [=ZqoS:Ȱ9[4wUt!^:3W99iz:KfvtQ`WK"K[3o9w*d]z1H?}l=/̝_8k~sa~mÒqNzz6i#m6}YR8OW^ey>։Z#zͲs҈^i 3D#/gW?J}_e {}2|tt߫TݵO?џ߯KD2@KX> (Ox~6EnՅ{DIW>OX[w?$qbcɵ*EB~֘ԨqP"(+R^-%B ۶I2IUE5% Rji4SrZ3dX4k7c mn F[%KKO>񈾉1l-+U\U|>M}7H\\ݕIGS $IAu8V.^9zڙsoN wAxq|SOwZm>[Cmw~~˟d>7m:շ~'KSgIrѸ+%yЋ[~R:3t!m{.yL_If'U~ۤʚpΛQF;vkΥ~cCSo&{S3׽uKz$3:#/Y1G91;l7㭐,vV,U8`po5p1>S_)kҝŒ$۶`"5YD}aC:.kU{N0ɏ뭤9mc''k$,םuZZ=\=\=\=\,QZYZy{ ͛^,n@i#W-;k"`/Ao LojFjFjFjv 7p {LΙK:}$9E#3-UT$ӧemT%QmGd! -[`Pkgz3tt{R{veڔP4׹ctU߸[|TZ+>(nk 9CkΡZn+ã)#Ƞ [fږ~=3t״|~Ds:{䫫;<_ycszcFnSZfzPӇ#5{T;eO~Yz84*? ~:@K*knzqVnn>ejLF]1A4m#rz|=39Sf4<ȏ??x4l=:#_ghzfݿgt9WnWgITkC:-KGgU5h]HwjcB }\S,գ^ԁzblz4d[diؘP-Ū`NMzbjn4)2;g]\_-֩B l=y(Ka*\PISi'R:ãAVķy5EIR<uZZj|j*ڔUOSVҕw-5R4B0+U7 hg[Hi)D9ۯI25GEFw=;E[6UEo./%z4糐20ߴF%wZD>ۧA^ɟ=ֈN^ydjpW+6E\Җtqz]Xv ݯuaZa˒TV֓LMmucX/o-hITkQqBa[1-(zxTFjRj}кPգkP] (]kb*ۊg1mI>^9.oTNcz5+&*ɶruޱpѹ%kZd[reWaҳbʄZ2tI\QHRk(h)$j˛/CasLz}x̏oc1'VƔɯFI⨖:q=YX}t˨tuZ[ ܂kz!OFkC3$ՎGPT354P_囶>+/,۞7;UdV+la(7`$ԁRfZcpZ- C/Aɒj(J Z O>xLJCev35iDMN.78WY_R5>˔W WpT0jϏa*oiMMRжP`}5y"☡, C9~8j4iO-,uObMܖ4Wgٶl2_xN;vԔ+%N*#hiȠ Fdxl]L͝mֳũ%N' IDAT}n4gvLV9wױW=n<$+Eņ4y)hIq_p{\臘~^%On޶UIb;/ߌIU 2rݻٱZC;5*?ܦl5+IȔ(ãòt)y1%BR4Lu *^ ÇVytqkTMFZ"Cn <%Mw*H(Qn?^Rae4CCҍmnH s?+aijW< -Ӕ6k uUZSmWzQҽk%IB]S+[ג!Ͽ.y_%t oնS|&v bWN ˊkaq{ZA̍M20p]`ϷþV}v)oǞ<$[_osT"BR"yM痊Z\DTE2eڎteVJW?D鞪LI9yyGK4 ^SYKK hj66P^餁E5yH X mx583~e{7Cg(/mW%Ԯv9+Yo%JfDoo! RWoj~V }(i:*)^uD :g!^B/UN]KR-LKщMdKT՜-$SCdqݾJKRHi$P׎)Ҳo /5oy%ڲ>^͂~?"]7Upbl*RwtuiW1TYA'-Yhc\h`8% ~.׊**5?']#'{Va0ӳw ݢ82J}oK7Ɣݧos#*ݴԧg*Ia^HUB|45UmouѨ<4Ϸ_eqmY=¯jrV*7 ld[C\%c}bdG,G(f&;WVk=R8{Evq6Ul-_UOeSUGtUOhfău@catm0]yACUE=WG LQ4|]X_n[zm^n{u\ߪKO+WV4ewE!qeMLΞY)R<Вۨ*;A YJ tY:%: i^]ٺ9uCj?sm:hptzKz[vF{5n{e I';.cC'fҺ7i~1%ֽuKz$3:Z`%3zx?]v3jv!5;am)G/> YJDS, _ܬצ5k!۶`"5YD}aC:.k%떄c=q}[YHZ'E8Y%;굴 Fz[%?Zc7:WUh}˳O,]9=uTz*tUNؕǶ]=Qv2 O{cxulm~}EkWm٫Kt]wQȮ<]mW`Biv&L[v\O\{++{)v6ܘzzzn#|5{0=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=mc8K7t LCbb71y} ^=Jg H>g5\fYYL^~gvBO8WO|:a;2)^C? 9=m>^ԇhm*jFjFjFj|QLm[PHpXDYKy<*==]a8heYVZҲ2qg.z^{4w|Nڹh+6 FE˲T ) )##YD{=իV+a%4zH~g.F| ^Z}qV7qq٢YpX,$4Me+;^L_w%kSiYj@[i-H$vKgf㻥_hZUVv_zqjʖb=tBUWW4MiQ:#dHlؠfλCUiR'Svy2;ttn[hY1&fK^CiC#{B\GaCU^^&CrrUXT+Zx&M<ȹi~r&*%Gaȶ,W,W(˕2(禭jpe2TUc%J Z'WSFKze믿֠Avm?G?y=^]VrIҭ߮;jĉz0ncgv%֒r喖J!KEi|{dExï5rҲUYV#I=Sl]*%izͪIسz2W/VYy&M-> };xil*\~KQ*нohy :8wKn*#,S^}Jt䞒f/T2ZWhDn֡u/`ٲZz~,X+V8 TJJP}Uա23&ϧ@0@ (/ǫ<~r:u쨪pHP7WWW*pa?hA+ ?.TSR1c|ӟT7*+\~2FRƘ).ٹ?nv^T]TYmXJ*k5zyTFv^^ vn-ZgJKKS$Wnn [դY;.! )UŒ˲,y<>M^ožKM74MyLSpc)//e'dLTZzV|擏eHS۽+u%**1j˖׿TNNJwgW[r;HJH KFtRyeXUM\F@OME%M #Zs>@yy W*HxM)%tlպ233u_*={'7Nu,K͘M[-[D'R"P<W"Qۡ[oKRk+.SFf[b/3#C֝u?R $-ӺQv~ aɮZkm[%ay2b eV"p$S'2A`Ð6U˲,'{$BO;eY}}uQ$)4MEQ5p>xmi ?nu뚴E G# #O>I3|[? ;UUzH\PecmK2$4eZ7HVeݵ<z%d51U*VeI9='s*;;GeɲkGP Ӕ$ky?~\U\BUUlKhm'z2@Gս[7_S8Ma0MEjjOJN=TNo3MsdӧWI=҇ SxRɖR PsTVvd.jzXmyˋ7q:[Nu= nۡe˖ɲ@ x$iZreֻ)?Q"^{ O$QM:٬ :L)A(7/Wyyʪ$egg _:.i)пu('I)H*#qu g9giݹg+lR >>@@`g쮸< GGUZYPuC}$z<^ѭq`Ci-^ҲRYF6lPiiUUV$Q$RX,h,&˲4o]^WNX$͚5S^O(tЄ` P7Nq} |JMMaÓ:G+ON|>*έ\e( W.8OeTj N.w1c婑Itэs}-2Ley"1 {C|ЌʶvfwԱG_~A!Hq㑧.i־GSE ?>2;0M0!_+ףԂ|u֟F)/SbN{,+ -UdHW}m :ujc~̠AR$QvvrIL9d߯*p$ez<2g? :M':uU`&u)%Ist˫KxRJU;-ҥ|XV}? [RVfzaCG(3Z%0n|7YP֦$c'PCi ACz7-SHG `{4۶DT]]ݰtYY | *..VUURRR@ Kk1Umcnn8pBha( * * FKq6FjFiGe9[eY S#^Ѻ)hT^_qjqBOHMMUe([eY F{=4-_btѨX4g68;.6P(r% g.xtg6quY7oE[#]:;qqBO0 Ch__^+++Ka(55e})ǵsV=h PVVUm3pMW#p5BO+0 Y( R U9 _灝Ǎ ZA׮]UXTn]*/TXT]: zZANv$ikUUň0 k׮Jr5=\=\=\=\i%eee*,Zϗ`ylVPVV6wJKKsVMBU*,*T%ص k<h4uUEEU=ƥ=\=\=\/']u~IY#t?_#}$Ӛ}r)%7NnmZ)d1M"]#'hA5~8 g-IMޥ_t51 "սdJ2SjqUllz-^_Ҿ?ϑREݣY[KB})c+~z +Ҝ&:힤iqz7SΦ3Գ~Im{7Zj=_//U(HJO6dj[>AuNILӐ |Ϳ쵶@*޿Yޱ\c.M#&N/߿Y22Rq1:l|;:Y[T?M_g] 5LoJ:i1M}lk9g(lOsWV_8yݹԏ6<6$yo&{S/i[$?J~8:/Y1&oOP϶m-XHGtV5QnСΪf=4{K/ZI%!)XO~\_o%'DҺ]WV?|logҲ&=\=\=\=\=\=\=\,QXX6ɲ*csֵ  *\]Æ(##Y ԪիTXTDiLok7lR޽<{ K7ltVa7 Jx2-Y݀=\=\[V#%5n^\%Q%ZxǔuLɰmoѢŋǔaF(8yqCpV7+n^Re;v˲4oV[Jtm) kuڪْPzݔ{*BO;8SGCtgΪZv~mE" ""jD|j7p] B07[,n}>F ws⭇¢YAl"!`6QMp8E,`6lART+.gskPw֖m۶ama8\p:vQiغҊAQgi4C$0_\m9n|.B `l߸Ɩ>Qw܁ Ұ}v̞= ,w܁A!++ dz>WG]>HHFR Cy1oU~]+Jۏ}erl߳sx4ʪ@pߙe\~˧ WMb*Q2.*F\Bv5ȁ8 Qq_Ϻukq[?`8` :v(E 0PRf" =^L~}O2(pc\,]⍪^JmYVl۸ƌ:233裏M7݄s~i\zxg1b̘1pw>aHBތ:"1qNo[K@ۅe~1g^s7m D3P#C/9H{!.̊"xKLJbw %X\ݰꏕxcN <GF崈S/!ڎ_7M{f>l^yK5o[Xu? TY-))$c,M=[(> _|?3m4mh.w:'?/vY=RF8//G^4;ǖEc0xp+X |XoaXycFDDāް{?mX7ժqu G!&&ڵȳС䴈tFcP'JʐW|7r * .x}Ut^+T'`iMZWKՃΝ;_o:t'''k^.nc`E5bdǐ.-]̎5]q\.,Yh4C;XsŦyH:|9:b""": p@1hGxuNkd@ܱΘ7.z-"##={`s`u  Y ]*ٮ^-ÁTg n5"Ouq^øIS@^^233q-`ȑ۷/>17ƥ^cݪ =k`7O*  jgq1JFL ;n/ AW{>½O/@^boxYhJ{q+gg#u&Ӎm+PdF)Ӱkhs_IwᔴQ Hs~;vAKS0Ap8LNǧǧbĔkQF"OT\ca78֡]Xm1ʻ&O~jW\aXl#YpQy . Ç0wd iujxM<<j(SAbƍ֭LX~-fΜzI5ׯ L9N|"(+ ␊\LFP)͚=}a.hۼΖ)KS_}ر̿yWy6e(`7m6E˜n,@)ˏ=b mvS51g{ Z\ !55eM4Łӷ<0n /L/݅m3 =׏:WxrW<,/G/d p9 d7)2EDDDTmv톷y K-9#G!ER4HīNDâ'ԏw`4&"""uõN~E5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5 PW#Kl^Zs: bqWԏ?4M|gq氓e({`%(-+EѣG/iDG<; ܑ8!ӖJ&l/#0y@L4Mhޚ1GNat 2T""""[>?Ξ㯿=p\n[a[P1Q\j\;лcs''=bAT8M| 4MYo[wna؟2o<?QBDDDdk׮](--EJJ*zA)c֒X$GaqySDR~E pBvZ<U+825,Ͼ=F[DxwBи~C/|{xaqFL,\1`<x :^zN-_Q_ޏ E]Lv=w?Œse޾ ɯ#GNN\.(&9&qoO//<qh\ x࿏\sO]K{?"bÔѡ٘t)~)^Yt;'܍G{}c ::cS&zuF^w`ފ7~'!Ḿr||ux`V?%]:a,8 7\= L77[,n}>FxJKƱDZrzw Oi ')F^Q3]>^q%5zf5aW჏Ąf./^}+Jcq2/L]cR5PL)\ƌ{[Q8~.no1pwfAARO\|hYVCDDTƃG1Xgbæ [Ժ52տ-hʋ)Ƨ#޶m0 XbJo"iغă g>q<v"xa Ácث0nkp84h{oe?[XJdط a0 /%އn!g^[$ .G%MW 1x3>rƗ,?3HCt' )%f˭>y4:{ }3']xh9""b]T8j qp⾞ub0o|y8` :v(E 0PRf"S𡨸yEw#W7c%&M;vb=j4w.Ez 1Xvĺp9p90K+im() ,I0Kq_C6TGͲPTPcP)L {z6V_EAÃ<@YN)1g::v<Q5֣  LM)>?M_O߱xi~pԫW: icsl̘-V1rxrt8aW݂a/oVa7Qc{pミ"oĵ8Y?&6>V{K1ݏ-H; x'FHî>ņvhhl\6t%̥;eDDD>Ӎm+PdF)Ӱkhs_IwᔴQ Hs~;vAK!qLvppXp01ځh,CuLT\câopjCb˿}wpM˯" eЯo>Ȃ[pN>L1ݸ#;qNSkkuVCTXXz@VРQ#d6kcIfiiiAӦMDDDtZ~-fΜzI5ׯ L9N|"(+\qHE.\Of͞}oiXxm^Qzdg˔c[P߼JX﫼O{2OUo6eN 7G b1g{ 6 )񚘳 ڱvᅸ`χ{lZeeeHIIaCDDDvڍѤISA>}lO!٭´y]X|63py' wL#|B@vL"S:tst].HKKC||p8P?#]tF\\LXD+W^r2w)Ӗ^/֭߀+Wg2MDDDD6r-((.5q.ݱ9ғTW RNmZ~)""""1kZ,sR꣰)g")uO8w;-Gu >Jt:8\)[O QDljv3n7Gw{c$||'>ܝ =G 3_> ^{F –ɇ]\罎+&γ+ٽ'z1&L_b9B)͚UA@G]0U(u$AA.eSb  |[w:EHF߁}"l8fgUb xZe0X|oxƿsFj} v`D\wX[0|+E,- xX""۴[F$qUY-Fz= ~-. xpVf8O3Kťؖ>OSbs4q1X2%J:d+f\/,\=W}ffq) p~va/x;zEo6fɛ(zE(K@|E@BB<.B+fJ̀z9R/8PA:z^SG‚݀Y}0bw~MDD-۠Ů_eذvR[D"ۆX U=%/0 t^+T7quz12``<_:r`$냁- 4~6\KE3ەB`8, Tnbsq4E~ Paqagagh|}b>'n}N&^D{ n9 ?}zV(8GGpr^xt$]$nnl[1?{"T)r 8&p'\ abʵ(#Y~-8x^8URzpsno00> h ;8t_Z=Qs6=wL=w1b!F}\"\ T+F 0ȍM_g $"rMT 32ni*b 숈5n /L/݅/͵4pz \?t^",z"H.r*0ǰ p~Ft,SDDDDDdLL :,z"H\\z!DDDDDt½NbCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=DDDDDXQTcCDDDDDQEE5=0 """"ׁEO-p8 0E<=%T4i o@-,DDDDeahڴL4o [m_W4EˉMY&2EGZҼY34oL"""""j,z(!""""Ƣ׉PpY3XԀD0B$%%0U~{[ h֬nۊ͚!))Ib붭ho,zj@zZ`(,""""gѬY34U=5$=-!""""{z(!""""Ƣ"""""j,z(\""""\V *HLLDA՞B$&&0SM7֭[мys$%%4Q*((m[Ѥq XTA7qD4i)))2MA詢Ԋ⇈"!""""Ƣ"""""jGcc(kh-z7}s]3Gcouh)z*%""""%QƮG^#""":,^{(*4@ ֦!yf=2\.RplcqY^׵GhC&u{mi ԋkc=8]#yfoވi `͟bj%GJ+~hyxֹ7j{߶) CDM^L@thߞ!Eq L:uWzMXDDDEJ},xC|39LZzuFDꕞ:quM """"%չ^TH-zGUNv󈈈p׽UYKT wpEpγsWH*zU'4yDDDDD.ܵq"Z$=zyB #""""ֽ@xs~զ6C=qc7ODDDDD(:..;Owkj_Y]UNfE4ɴO1mgXvm6uHu. 0[Iu vrvլz#e֔b?n2uTٽ{7ƍb75ҹ3|VL}_~?LzQdff]ɞnŁ่Ro 5*o1"""ZWZ#w'SêO&➋NyC{a'⺛+׃؁탭sG͋0ibmw`0l4hP bxͩ޽ƍzigƧ]qeqKԣ;5tTH=%ͳժRV8].v#2,/^獯ᵯiAE1ui_wOsZ#VNL%Lye26,X( p8piY׮Ϯk_ǜ¹a=%jll.~(X!ɢ*/+v91"""Z ..w<w;3p=-6~zo|b-oW;’.ˎCb3mgѿ__<$|8i? 2qWq΄I,<(YާNK>s `J7vX;oDνpT}6:}Ӯo_In~_+OaRaONǰ!{YŅȩejm ǁ9+U{Xd`/>XNguU*))CoF|b"nxȂV.ƺ1Ndbr _ eNz[]歸H֮].;c[t ֭*ˁ'xf~|[X;܄/-¯'u\~a8)0m?[D/ps{psgp`?%(2G?ٯ7'U(a&ؼ`ZiEOdo/DDDD5)/cbL&$% [d bHMG2_QX9D4']c8B/r UTr -= ;A#eFt]]fSB f~?ypCDǿ~Ĝ.-{cPT` j;o5K2j,wąi9\v'Ȋ+WB6r"5- sqWsHIW u3vN/ga"lz < às_Jg)܅홍 Web dOsϻ> K\  7RcT.zU7J~rLDDDT#N=\kpWaUha<B뜹XDd,pbߑ8i&8VhG2d$eSϳ1٘OXC\ócm?YwO>~w/F4IU\Z'ۑsCS#g/h7Z7ˊ۽DDDD53W]ۮ 6EJx;m5/Tzk "bc9ZW=>yS.& ""s6vaC[p%K`2|4ɴO1mg֦Mk:g$F:7t~=zaKS_}رPJck>V}hc=&m+XHcbJduŀ1"""" aѣpQ2EN$*ccpOByVo8Tq""""\e[, w^'D'[\VDDDDD.:Xen_D.zyVsdLjuMT^S}WcEu <[ɸ1)9a''/crFVX#B0 ڪ1`1G ExdUPQk`MQpZSVEZcٝ\<&@e(oɼN'Y"Jm=c> 4W[=\vCU\E+r0UU`͟"1!QBk`^)/[j3U.k!)P[=MϩVI&""ׯy2(Wn@L)XڥлIL$Q&݇K9HJLBfL Ee_'ɜl%SEzH D>j*nȸ9}Q.-5} S Ş*q:W/ )))2uTxxy\ \ X}2J}MυZW۵P.z,h:'C/|c9N-fc4"""TU#ZE:X_oN_[[#uOϡ:}yҭLW9""""cS1Ǫ/Y"BM=^'Ϯ}5]\dJDDDD;vkeWOV,zP/cyV]S܇(ZVzf\kXgcVQ˄>v'H)MS_b sVE.'YEcu2yƪ,&[yEGM-GDDDDX],iن;?js8EzZ9ʘއ}XeZ-@U V1P}1MׯبeZk5ǫmq/ʩ9XjÓSqqUL*_Wzt&jǭ}:,r?b )CQ>|<<' 9s-o7WczLV]Zk>[YŁAU\C,x~ZkUnWE ]\˓ȓoMsje̋"EU*e|L|*jdk Sm˘UkpDDDDD_Y 7oS}YHMr }SqYFW#cj _oULg,zB@V9S}"Wo*TcTcr* ?OW箓jb5ΓjbjBMOljdqTLay[jՑ*zLX/I&TLCɠ !/ *ϕz\^N^>T>*`TǼZ_>U_oeLv}+DDDDD%=ojNL/ (*bz1{#7?W?Va7W#ūՑ*z-<ĪD Ɓ(?UN6J}(џU_sVDDDDt0ԩu].T"rxc㪯'`1OϩޗyGő.z/Z-UL_ުjUoU\79h+/s*~%HG:zDqՕUULZ'"""C ֜\ʜT9} U,rSmM<~깨˘*},Պp'[SkVcUqXZTN5Mmʏ~MTb !WQ͓^qVXbDDDDJtV1kLZ#}Ԛn"01qU=& 5_RVe!HLo9NtpPԃE7VŠ%9O~ 7Q@7E`!#E:zXzcj ɼKVqN_K*V1u*CmzU}Z\Ŭ Db Ry9Oj,cO/Ku=sbU\4 0g[ׯS*vT!TG/rWhdgӗŋbz\%d#""":Y-֛Z'ʾ>#cV]_/HT_,T 7b6 quR XO>Wxժ}Vϫ7\<j}Ŕz,9ǭ =z+rlWbDDDDG;}X-e_֥I9V}Ww 15_y:}5G1Qŷ~r} TE1E/lU?Tۣ !U L=zu}MU2z*}"""" ֢z*nºP =65G"G r<|S8}ّ*zLX/e\u*gu*ŇWWobC( ׋Ԧb[+2c)Thdɼ5NɼZG9M/d[d,xT^WզvdNx:REdE/\?'̇.>z\O">U} _b7Py,jb)r/[/+.rSR 1ZsMz+r*Vj1\O|$EGcTQ3}drj6=.[=/9}*b(Z)vŅU!S̩Jxz IDATձe d\惩jq$l5z Z\'? WsF/|B/~ $ӟSsd#M?\yjpEpr>9 p)[7X"D9rRT_ooZ_͵[cט.zLTm!m5*|R -QcUq8TŇOSy}BV1]ݘ'םvPq&&[}*DT 22y2_š*&YŭbTu~P]bzAn_]& Wo,菡橹GT^>@Rq5GU_or%""":ZTeq-לr,z+r]19nQc/:]^tV1>^#tѣy5V'G4>VcS<EbGη(cx֎].NDDDt4[|kSXƃd1֪[ c?qc)TFTBX?NcZ͕ɼɜ!Xm\E7"H_e\d\Py"""QE˱V˾ Cn*` s!r,5szLVTenH5qG=)Esb2/_a8eVcYhEz\u@Qs?o}xV䘈'וr TdNeNLѿV+jǂX<2c)r&0@~R9:/*׎ʢ@y1cz* P~ }p!s>9`sB\"""юzj>O7Y3QEA }X 5>jљ8`P1jhQ_QSWz8z^ocy9zkٱ[ňȚ\G1W}Z 1+n͑E>GYjEm=&*zߊ'MW,xcW}5֟~b2+J<`RDDDDu\#c7W[ͱʛ"92b0 ō=n\qյ;]\ZVŁW߂ejWXll.NDDDDnn跚kU }d!a?Ԙf5O }E[V[Wz1QWS}=鏣ۚ '׏2ȸ]扈Frm(U5ƲU#szjUL#srdNmĨD` bd+*ϓ9׋ mzN+c˘* 2`sv9jl5Oe.fWV(VtbV#,o ADz‰*BŻXƁsZ`?]_*.r,[*nחjJP"^ CyX}T^U!ޗWɾUN|l,U*yVsU\d^X}9"vZS݋` V>[y}ʾ"cR< HPcBª1cO9=Ϫo%X>XJ{qxrU1`cejW%bz\*'q(UODDDD[ηZ9@`ncjNe^[͑,W%ս@uRص/2'2/z^VuVq,gP!"""elU .dȸ2o5Ge*J}97^sαcȸlbẆVgulٷ:Q4?l e9}UL۵V1٪cYP C1egK:@UusWTF9gXd?{ȹWeyټ1 7_>M7Lw}tc89'3W]r&^շ_*sWVG8X1HΘWU_˿R-Z~ο{^uKO'펡̫3ǹ=٫rZ5WӺ4\E#s7=nYrsvO&guyȹBR6y/YDѮG ګU-TT˿{^UT\[zr=awͽg_͵.99T=gޞ\+23_ɴ.9QW\Z sh=73{bqvzӪ~=֛QZU^Wlon*׺Tوvʴ+V}sd[ gV}ӺhZ^+SZ71r :mz/*yo/{s=5hg6?{Jj{g-WAگjYΌaOȣZϵu%gFgz9;69?:;ӃFuOuD]r&#ZD~8zHoWs-+U&:_\x>hTڬw8Vrvhh~ʧ7zUk9xޡ(wU٪1^?37ӳ2_ٴzWՏ\GVϪz+Wz}q2pg憎תG7k{=_Y oڷwt^>dg^Wϸڷ[;;l?/FYl93Kmެ\XvSfO #z̜5ӻ[=2zhe9gՀ?zh̹3x@=m=f1 4s!5[{7:;x OϪ:i^YoU w}]u1~w}>/ SS^O]@z-m>u{a x4 T\b?ӗ3y K{q8=l_IENDB`qstardict/docs/ru_RU/images/settings-dictionaries-dict-stardict.png000066400000000000000000001441251453553600400260760ustar00rootroot00000000000000PNG  IHDR=H pHYs+ IDATx^wxU̦P HWQ*""EDPlX+E H' uw~$&73[M|g33枝 !B!B!B!B!B!B!B!B!B!B!B!B!B!B!JJB!0j@TWC!BQݤ@&H!BvRy!zB!;cm=_!B!3P].jsI!B訍$H=#uB!;Rȑߠ z5u?B!B jqNqWB!.]ThW㭮 !BqUWR] iSm|LB!"8jcqTaϗxB!j6i vEmWUu}T>B!8:U8ʺ}TujQ['Uy\UYכ@h`mG!BT`MNvnm.B!WPqoc6*^Pye2Xy[i)*#B!5/ؓ|oss1TfʬGr]:&u&uB!S @rMN+ʬ[uHM@MN9m&B!ۄi.n.fYj3m XuLfe 5cjniLvyjۮʬ#B!*2ruA.fKjOw,!!PWjc1(B!"˧LN~~F X2 "X1\5nԸMobQʲێ]̤'j)6<.KcckѢeu qDB!B] <?tÎ;rƍ8+]V-VٍRd-8Lv1Z-MŮmq Gyy6O4xǠ#B!GCu=Nl߾ZZzoֹt +jsh;®oiqocn߯_̾B!u֯N>%`j)uluԘ5M5:'me7+|~nǚLА!KL!B:!J mC+9:Ok11}TYU>_c֥݉ͥӁ0֘u,x<>֭޽ExTxCM0 F#>&Q٢B!5HJ滇gs̾s:/u-c̸[2[JEOUXuʌ[]1dUvYj%bbbb ^8KGt4tM 4M t] Y>eY!B!sk~-q[چe̜+5nn:[5]8vqsG{jlfۚg0 O-]"FK1J~\AxANAɱ30p{Ij4 0J "!B!(%ōk1d=cW$QڶNx8ǫE@gvv1(_9N}`R 񐚚& ۳i YPmnP| epB!0v9?6boTv1o|5A}kSMjiu :t'\”)S)K/USw/vZiؠ#45?LaWGd.BZHpf֣Y%<22VZqЋpDFDy3iZB?Y iݺ*#SXPQSӚ<<ܳ>^67Yj̼\Zc&k]TcVj\[Ywf3NժiFAA!!1d:6Hft ak그" @4B\5kft~ݻ\wÍ{N^9dnse9y^uIIرs'yyl߾W_}EypRvf3|>?jcΓ͂,MNEIS&xPgCjau]o=c=x4ʳ{}.e CFٞ2V,dvO@ B]:!ry^}}C/KP6v~Fy}Υws2u:xg͙Φy@ZCǎsfmٻ{SOqDDsBt87Gb= "nv+;v{e o?EEE,]'ox )Axrx^{mJY6n7D^9+2f "Z߲|!DgI ;?YˈQ),(Pb!3_gC{@֭kYcEPy9W9|y,0cfʺ^*N'XkJݱ־cA6#]˾ $ăh3(auNi<ۄU\0x0II;<$>|=FCVXhhdegѸQ#J~WFO?)[XsƏ#G;hڬ)=1)0}*mO<5k1r}e')fqO?M-M_|-[9 S:uqjڵ쒡jd:ҁ֬n]9yX%۲ӭkYv ,7޻f:IDD8};Ml?^ʀ˭#>$*-)cWx0 G`ҳ+]ukQNq;cmJ~Vǎ3Gcv6Yvd~GuBBqieA+s\El-훜KpmB/~i  ,w{wکIIكݻwώl޲##.67jd]VƍпsqX?Ѯm[4Mn]9^|ɧVyh޴O;]bƍLӧN!>.N5kԡ2KNVԫW zuS&O˯V0pL999EGGӭk\.1r)*ݧأOx褤p!5̪Y GРA}4!D Pϒ pڎٶΓ][bGLfNOw1Un6vqEe73=F\za]s!|8SGƍ}\l+s/vꫯ?..RTbbY@ׯφطo/'ئx ٷ؟{7k ˍL:!Ca<3bw:\&>!ԃ0Pr&ivܙΝ;{&<3#g5Y`Mc׮4QjҤ).F{IMMQÊ]qdX O?`[jƍ^c{6(g&=;)9ˢ. siM2vgr3ٝ29uoa>I뭺۶hui6 ֕5,x4M#*j]=4#K]#DG,4,zꕻEDD/X+ˤyy ͘YǬō3M~9VlZ8"T"64S_bJ # BTAjj-7'))0X㲱-[ҺU+MN^^l{em{?vhR;< ǟ|-[0 5kױz Py>&22.,j֬Mzǎe˖?/>gԈl{7\w[neĉع|~7F=ө\YmsRp\$$$pARSx<CSNA4vڵOn7{e;n<|3))4zɶXlddd{x. uZE k֯7;v79M> ul΃:VouiXjVv]ۚjTJ۶4Mr]F2#;JtMSr雦k]"!vrzQ^rq \v%ms2qs q%C;-[Kl޲g^ùJ^y1Rhڴ >3-[kn&Oz۟ģ?3wNɷm߶'Ǎ%!!Aɮ~^?fq[HO/UW]Qnz&>еkWPkmO<˯AX;d6k8oV7x3QQkۖ{{VJԯ30q1Q<0f45kaXnj1\@b&g슫JE)y1kmg֘6ǬYs7/(:WӸu9-gh*7+Vsi̲Vf&O~~7TlôS8pF4ن+]pоwHHZl~W漬z<6ڜК?;_%Ƽs9rJͰ=2f]Z>>ޖ*׸f2v}oc־zH֘fNYMt],xn MQPK0)lyc=) !D8ͅչ3o&o}ocGTu^&qEXc&3n=pUrIN^^EEESvV\:=B4),5,.;y:o6J&Ω͘N3=&s='NN*΢Ge݁־cնԶ}/_d`Ť$M^^YYq{w<.E.q\>B6d` B;4Jťm}([ ",m'vqzծ&;NՀWwm̘!0 bN|*G$''=|ܞb<hk:.]'$$ݥJTx (..*DN!B#:_``=ӣ&K݊Hx λy ʽwGcZjo?*NOXn~xRTB؀cO=c&=˭FB&?(xol^^њ7\wj OpcT߬HM}`QMWۊߡ&ocVvF=xq16ײY̞f=?BZօv١ 4Z?Z1 gq(v}4^wt!(Z3;5cChll͇:ˏwnxOJ1gͻ xmdEC^45<[y]3O.("a8.k³;^]) PɃyl_6o| MlI>S\G #[#o`߁}_~ o҅>K&M|]Vq=q*ZóS? DHeՔ'x巶R~_?3w0.͝RYkAټk{._Z5g.ᶁ 7Mi"8;X>9f}+BInۗ" ƢB?7=2m"`3MwS@Dc\2dLsEv?#>(ga>}^g/ ?tooXï6+Ϣ[Yw04pq6^4<`C}_&_ğaPPc2ZȾy"g4;!ᮒz9?< Aw:vokvĪF>z_IEܫO4dŤm"cģfoeU' /Xs6+ $ }NN(y?/eOFd}k#^ϾO_{n)L؁G iܻ=K5)y̸ "|l;bYfo*Ŵ"_h|G:koEz^o fV sFaGxl@}4Ϸx|C`5%4gYtkpSƜ[7tls/S~pZ'/$g N sd]h,7mсrn,(D.^ҵ"ϹuJ&ŢOzm5j.Lޓѳrv0>~W[t;suZtҭ~ !΁:ÿDuiqmǨp1Xpwٴ܉^S:-M!"}l=r:nowfVSr>!)< &Lqw_[?Z|3Nn2&J310ySiS̚=#Fy,~ۇgye̺4"Y Ĭݼ9(tI\|J].^sV Z%rbF4ɯ|O~)’BiRVz _B3aߧyiGMjQHY{'9̙6Tn{{01I~dh8'/O䇗^4@^~a%~c:E?r!?ċ_3|f|ׄ@K? `,? ~:/34 r6,bqD^5'ms ;_bʒC~ϳ4csg}"^9Ԙ}N URӯ`|bNRwKNظȊ‰ !7;(P7sCĸ\Ĵ>sNHg]TjRzxpo24?mbtƜ}v[3;*qgZT3Nn[6t8>L yZ 'Q rBiwyv+O ӍgZ~}.lObh ~Qm3O;C?*\%׳_os j&#=z^']8Xz(>ϤW1z,m/A,@I(M#p w:ķ40_GߕB~_iEr|3iz6tڠG׌8+#&ߣ5}ۍ<ML(fULT(4-p ͥ" %/'ϺV<_e14 =3MGќ z1"zP`ldl衰Ks|y 90rt61?Zʐxr6dHx=)D2(^Lּ.OafzYv_\{ T~.#NM_@;4Tw'DO0-9%>{X:f 5(8n(9Px,Q1Q(,8E$šLėƌ4zE?'ocjBJ>ӣd^3'1Uɟ9})J90IܳRC#,g^r C۫y޺GY.$;?MD <KW|  ' FqA.|ELt1[3˲!P&E,eEE.CLHLֈLJ""; xr;MCrY<õm8Zg[s#g M<ңaZ1gǻZ1!1|23 0) O'571zx[I7(QIK%8:i96.uȎ·4~>Mj,/ZЮKG9?hm4=>b'Цt{@K'zC&~ȣg;֑ͯy| |I0ey1aZr,r/+\+g3Dl\bt2?ؽ?sElߺ͛V<Nm8lƽ)>]Mb?ԗzAQ:O9]]"h,ed:橡8{ 30JJ dr(3x3^z9<5OKmq@'.!~M%̀Anj*q'>;7f,?:~RyTaѫɼ;W{ox#OIӭ .Rxym5=|J/|^t,7 h"ַbѼ`Y~q]&NMS# >^; rq]S˿Q8DR\R!6h-[^ܤfN._,{^',9z4$Yd^vNӁcwaJ"YnjܺTi8(N:u@I' ?-=C;"\4ыf|S͟8[J!^&g793l%_`ngGZ ۷"lN4vŢM 웪u¢q )4vg"?}{ՙҎ(-nݙ?>qqWӹgyũLyrם~N]] EY޶l/?BƎJ~WLq3NU?{>cCѾ5<|Aqm{q!2Dz,x (J7.$g>1'q<2ͻ֡{,{{s=D77qgNʂ)ST$ :ѫ)%۵ܛ&o[E#nAkӒ8d&7Uw]Dv "HtO'A+SF^ %'#U7ESN, ߪIX;͘IK/y,5h~57{>+a3EmX3Sܨ@jW}v%*ޗI[Gr_ìha)tZz`N#_x%ۊp͹0fud7jӅf]dHsn3р/ge1&$=o{]x%#.y7<;q4r1АuSBNqyV:53}Pb֝i1|i7ָ,Kͥ4n.Ͷo?uM75[lQCGTCuY_{)((kW_ӻD/Lt cJ/fk׮#<|Je1!D9F&+&ac) a9˲'dzc4R^KޯOf^X7mV Q%3r䈇)ytYl6˲7%K6J\}uoulWNB!ׄ>;77V o՘C]߼Z/sqhtzwKQY:{\Ε4f#H]P9žN IDATsh\# qw.osZDm*z%o^%G=ʸZq)jT !'jT54[u45,DhtʙT[yj҈yTB{K5jv-!B!`ΗE)!B!f{^-j{cYB!$s`mME !B!wɏtTFB!8Gkѣ:jB!TcկK'++[ cXK_EU!!8[^ iDEEѨaC`R(_T\VV6g.C`ڵB!9N`><9(sڨ\U!BM114mڔ={CscB!M\")zB!u=B!B:M!B!D&EB!NG!BQI#B!?'=wnrrr!!B!hFttM4!1!AA EO5HOOg\Ka!B!]HS j4oT !Bᗘh6i®]!RT)xB!D@D!B!D&EB!NG!BQI#B!ӤB!BiR!B!4B!Jy8G~]Vy:1[L"t!(!EB 4b鏞qnnV%jBqG!xxl ;iض; ˒Y;"n{?P0ⳞI} áoԷl覜~݌ɺA7'B"C5{y$+s_F/͓t#A+YoNUoI%y zimUAM x6Bc|G!kq[s egWʭҏ&g2y:# .~7GMmhZţٻoYdB ;eo?(-{-$-*@!,FAb;+[gƱǑ,lݝW:]댳6COѱ(auɫU< >2W,]:hP˯.C.s_п`kv{eB:2y;ҙ]g6hEcڌxj5O=m^ دqL %hj8v3=\=\=\=\=\=\lSDqgn1tZws "l]?MyeYGu ;E o,+%U*|ۚ?Etb~x )zmMY^@iqx3 [{zzzzـwe:_ ghܦsn}_{O֗C%i>ҵ]>^-:+,9CКW!0Ou| d?Z#9@٦$Ŵavax[KSY%ն\5H'uE%GG7RL}uۥetȡ$٥ ⣆ԣ&꺻7EqI6xN9TL_-KFчOskmڡdꕺ:exMwzYPTp'x^B]yx6n:|M~Uؒ\WoHW8VS:FWg-Ja9jN>p]q}heU­|}պ̣ta:u≺ZR۶cY+ qBKuسꚭ8CNGֹήy[{tq#tWꙏ*Rn12nׯn]F'OI ޗӦhIL"ZֽuuGkї5ﳱŏhz{}=}_ܥG׼mk$.zUwV?ia;N )ɮҲi7YAxƟu +./U-{'vS֌ 3&^Rtwz/Hg'TsA:u2}zƈWÓ3`_[2(H\{GFFTa˄5u; ]rp'Y7ԛ/=).G_(͋kz5Ogd\IO揞{oݯ?`=vAOlMo߮{#):.*x u2K&Kv~{]} D.ѩ]gʨr=%It+/AGՖBO @G%5R?*iJNj7$n(wi}rz*S7X=#m[SO׶*SYq kBq}C25}nr"s KUo ׉W^}}ܛҜf=îRIQlP :L§CGv/ O7hs\l;TGz2^ѺcHv=fnPCrqamN\b{ekt~)w+ϋ:smCl:mQ'pDO׫g ;N1~.^3S!QNG][i-IyR9 lbw1-\_[C5Cܰ2tDc72۪\:C?,TEUTplye[uÚ}x=43"TJSt&(͐JbZ/uSd~.e]Ho>f.Zj$%78]_0=y͸ᗷm/lsn=/IOCM*Rq%YzW涙ZV=*Taa\Ff{I5ߨ^[GI_YS{>.%nAxKhg=-mmVQ%umi77o|FyN 5%E%:kNx;tAsG?PlIimm)'ף-ݣ+?3dSm{FV2=#uU-Pj|+4Κ<:{Dk =fQB'OzJVk>K)7Rg/u:~zbk׽i'o}LWNEϾ[ݭ;َ/Z]ϧ<[t='-)o#Z=u53G٦s:ͬ`/K=Ա r#n^]2Wr'S]M++uжR٢?뇘OFٲ$y|^/ʟqx7Zb;namLvv$%u|WvQn=`Cia&MKs wAxfݺq틏Auto.ľ;;Dg=G's^ֻRQܫ/UaBL=H$yO+#[#oz\E3>yIJJn/ұFZǛa:³e˒$#%]f\}1wTtQmd4 `gvӾ~;jkO|8|ԍ31ynf(rݿf´7aafݴ2]|%5p":|y;s~?ɱfZGu ;E ov=*,Im[/aC 8YjԳӦmT1juL'>[ 5sRN'L۵muH8;xIvn[|OW#p5BW#p5BW#p5BW#p5{GIgkWwo_Vyfg38zɭ?M7srkg 7p5BW#p5BW#p5BW#p5BOKc;v3 4a7@q 1}VuS8ScҌ#sum3;eQ갋Ex3RrtUØ~@6;;p)3dЁzOg?>l iSq5g;-^^TOdx,m( *aٳidMչIU}^HYʋx-;˞W_o[lT%g%P+MtmPb1YΒÁ퓔Z?D@s"샬`VMk$IѲIIqh*oMuٳTn 7lU#;㡨>U`zRU?]g(ks2]cLU;P:i_U)t"TdlNbz˭z*\=-PTO_-Z]GiYYչfm6ؒЄ,j-wHEebI86C4IJL=CZu#Gu9aV}66Y*$Bu+tʚfzyngcm.vm[%Z蚶qqFT2#ۦ^]kmeJe9zggGrW~QkJt-ֆYʰԡkzH>bI2:_@TZ  B*-'K P']mկJtCTSv0ү*d-O^!@<0۴VO_++X#IbRM+Qziljmj+kL`j*dZRM3Zߥ4!{IjZ_*zi}\!["DjjFr@OBdtxS_.҂*[񸥂_-_FnaEUZ/ j~\ՒbCq}x_REeL 14_NyM,- Lɫ]`m6G"l˖MxP_B/U5}+BZdYZ2۽ H5*je"FZ BO IV(_.nZ-^-^SˎݶòuNc {Ն )=+jBSsׅU7 [*6-C.805o`#gJ$IlՙS]^Wz˲"VEnUœT\M闤n󷆡P<֖#ֶ^Ѹ2.GOÓեV~0 a(hG,8VH]9^OBiYʽl|m(^QxEkOfSZ]V1:)ao06VIuܹ#P$^F]8#kTYd*K\F3C'F*5q5ߴeunֳKu'Z{{[mmJ$&CMU[=-ĎuڽGni9%Y:GQSWPZc)'y3u ݮ{KG Q|m:ۦk׸V^rutUekH>\oiDd:K0v⒢uu+a:^;SNgtg.4iKe ?Wte mg.5.~ٕ́L9MQ\=\=\=\/im+ JxYޣ<RRR&0ZzY5רTXYޣ^rեkΏ ^?o AE"ege5eY ,7Rk5[q 6T~Yޣ".[5ר[nr[/Ҵ{hTUUҚDӦM бGR2|m:s4nM*+ >GUJ ÐmY-[3NQu7*6 Wjbf䪲JJM2hw-GPzeWo+әz jݺu%IO6mhرz7=rc M#ƫ i⃆ikqrJJ$ӐGyI|e%x"ČϿe fZԻS$irU$* q' o!#5[ .TiYƍ,|󭖯X)4d[5g<^,R4U,ѣtp߾%Y%%%TYY)0TUUY_RE0(0ԷwۧY7)8Aźtohe ߪIwͪE+ >g 'sQ{T2Mhth("I9;Kn6_1˨희~LCzwTMh*2,YTk֬׼yl2g*99IݺwWN:222*ϧ@R@@|~<rssիgObomFUA5PU}= 2ʪJUJ}ٶ4?'}GU(CҫA%.Vލ7)}0:BE2۵W՗|+WE(R([s9kU\nPi^O5Ϲ}gzZ͛h_+55UpXǣ?T99kޤ^ƍ>Z4͚vq)KfLe1uGmM0 mڸIiczJeq!0e˛>8VRϫT_1IxJ){Ï(^^aUds;$Wc9{[:YR\[:aH[UԜɨ;SkSAq}H 4ϔJUxJ $IN?4%'%9jZ߿;cqcۆYc'NTzzzMf-zK!tM7(=-'痙W/PyN)}H,/SVlYCU]sb۶IַY5$Y2m' CTeY\OIʲ,}ɧjݦaIS<iD"Ïu<,<m٢ 2M:FTǎhZIbp'נ _aԇ&ȎEeo^)SsZwʐLS;;ǥ&y5oy^S^Ӕ ֒4gi±g``_¡hɒ%,)Iz}|ZtVX0s\:/O$d+'7G9̬$eee*/Zy$O尿$% o2Z0M0ٺ$ףVJd̬F67COH|YW2ׯ^_\dHWד7Bmro 'z?k۶鯏ٕ>DG}ᰲ2u7J ftGWމ6qxdN{ZVjNdm-39YLR`Ĩtڄ~˟J[zUR^LmՓWzzVZzlIڵ m-s?|_em(I2۴U`m)a ?M#15jH :A͋JMIWs>p9t]|ْFБctȱ:9kɧkӪkcuh|GǗT^(%[o_Kj=O?& _qlUw ,nLe8JB 횮gY=]w$^8M/_K=\\mp<gM6o,Vf^yFt͐WR{Rm*LʃνJ[س8MaۢvC#56fg5흅*4d!m{w+\L=qƁaښMXuT}m[:Y|ot}u=[WdYr\Ȃu|cz4o5Lփӂ:Og@3=r *5 =\>SLKU_5MիcRτ>cr{=Tcn,VV`zg=0M*fmޝmgTrM:Y !^om@?_?T^7YC&)/Uޯ8[j3;|-_.ꭀꇷY1}m5[tJ'S8;[ ;Xյ'>Ov>6<7$y5 uS/a[H|^WJN.v -ҡܯV?mۚ7,5PoR6m_wX#.)N|^W1Ivt̀m͠p&uڅHW.]Ta ,+Ndddȶ,g3BW#p5BW#p5nY݂W[aEk<4_ Pn4-ZpZjР! n^EiA_X$[f(1F>/ E22Yk,>Unn/_-:-6VTiUU%I$SC{wTvzc=-Ȣ <>pvjݺuկ_?9R `mڴIhT4hFb|`ZE <5l&Z ;#}ZUb~PJ|ܽޫnݺiҤIqiԨQaq,#KZ#դW#j/HEEEJ $ɲzj͙;ٵYbPV6V"QVI*IHM[ZM_g<)gvOq~ O>F}ߕo̖u}սEXR\9N={ Ѥ 捕M>Ix5PON!y_~5 u'lP󻝡ǷHҁ^ӳfjJg}ZQ屿{ձG>zȐe] D4y7*9hkZQYE**UYCmUE`r@+/)_7LREii}30)gg'̹kcƌi0cjСݻ9=Z`OAkw覗)e5c'hjez-U`~PZekku5~DfyZoz[})xv:@dlVWjnj]]Z@{ RPPnQ8effWZgyzݢm/RE(Z" Gt:qXU QdY\Y/k9[!0 SkWi5gOI[ԪU+IRVV giܹ[4zhuYzGkɒ%@|^Ǘ*$#9]>gZ{hT>_꛹(4;c4:ϙ ev~{B[E?}M>/fe+TU@r lB!W\׳r ]wO4r9J{vvk1 P8f"TFzU}"Ѹ"ʂ!ۼU WnԒe-*e)OC*XR4#I[bUz饗գA:4nxgGUʫ"*4p$.%Ux:~Hm'zZӾs7mIJKKS(ƍ7BիWʮ%\=<ş?ЖF҈3BczUp{kHdy!)`zHA\?t*cMzቋۛWe ?e]`" )"M,`7gELblIlѨ1&X**+FevgÞ=;ew qsA<n?Mӵ\ T4x)~ת*?kc ی缥G}T嫤D#ФI(j.|"1ڱj];iȎ'V(H.|<&Vs׮jjzvI*--U=H&MҘ1cOSϞ=ugjԩa訃/AJOc!KHe=RTYSCA> }~z\e?>I{t~zFV?o=UhU*P鯎S4jxzo&M^G5YzǵfEQמ:(/ݺ+pHy}}R^S8iOLsw3WgakgΚ%6{lyfgsN/a;1NΛn:r7/uû}y2znn*[?СC@=˖/Ջ/N'Cф#&Gni+usUERMT=yR^{iM92Szul= Kr, nn=f+"&$U;s{lqkKkT?374xb {tc|0{fۧT<^]Ieu>lz-[7k1mᑤ)GgKu=B:~X.|/N5v.p@[Eӊ!Q#I#!ѻnMyf/?V~ZPHʶ&V_<;暛C]VҥH#Fƻ%ƫ j'UإW6<<vh{=5ʡj硐Uxmjp~xӏ?=֩b6mQuFF5{!H:~}ͯrlظA6lPǴ%Z ͙ۺz_//\x\v;"Z~f6*ۼYxJ7mrSiգwϖiMTVH$x_/Gfkeb41يbZ;.}84lƝrY\TivM鍊D"3mobCgɹr=T.жUFU{{2ZmQmJ?u[Ӡi=͛5}ZM\[V|2[ㆍ^CSIb Wk Gwzq Ʊֈ/uVXq|.|![Ňo8;:<)v~{A>mUyxj|O%DK7 TyIS/'׽׋s>Ʋz级ASM|☆gԧ߾:ݒJ*-ߢ}Ҿ{SEo**u竿tOQO쳏q?r_h=Y/h<}:wT;@;Tݳ4&žoH=A#!cY}T.I1x;âY~>L=+i7x~<9O"4wM}MW#ӫz_):|p~ zaWz'nSlݓ[5f#ECuC tOo[ .S 45=vM۰antTH!{q:%Oש<Smx@mז^Y#"zo4hcR;8Z@Mc ºzƃܵf<#xKKW)v~JSحުU4iZx=\K.uZrc"w|(^XLUQ}~'ZqPHZBxU5o MO+ >|]5Ijt#IpXw]Vַ#BOB;CagٸV;P'N8=M=֭Wx}_~?}ƞ3 w {ϕ:7iYU/_(D(6 =YС6pu(Ul[_bFʸ\?yv:ys}vVFTQ^[wб*Wz-[i7Loщ'qӠAܲV# SYE]V U^Y6Ul6RRg5㎇4z{7.gܯ/[+US]rIWQq _5bE^$=m߸AS _MH :jp⪬RǞI>6|M>]k|;LS&OѰaܲVSvjE +/W]|JU5[҃(7Gܵw{HR~UmwCrɓy:}ǜ%?['&ix_k}'Ejб|C,WB $ɓּ]_Μ蘩zg4'թ;D"ƵG5 3by*KmwO$$1dWX{ 짊+O&JK?Ӧ?ڶ|r=Sj._ФOGLpZFET^U6UhhL HNٷn6]!1Sϓ4<{:k/|wku稸X}SO?ãգ{S+?7nR ;@깳TB]c ſЋwR 4pʅ*VK )TBI%薟+7Tu՗]B;}ȣ4gKlQqtֵzD䭛{oc_A*O7iCU4x~~?H0X_=vZ缥_j._%%%s=4i) +gwCuϿxťX4dG}ZePXE*]:P hR3:ZX]ut4<Է_?y'/WeE-}ק/eGnUűv*hseR'Az,=?(4XGwL饰 4鸁Ϳ}|=MM_>]vӳ*="'?jxSO<^(K?֬Yh4Sgimzv/pؓyR8"KyBR8Oᰧ/K:Aq~uA1J73IX5ϳf Kjg=6Y.ݴ婰Eu䨁VmiExF D8\,L oUVY八U/כ+UVUԷ{UDkcBݯܬ*z1:3Z5軏=S\k8[>Ql/^֍v6s*ݢ:RVݢVնʨ*Q}oB?}oB?UF2mQUGZn{14=PgwVϛUfIE_ҬM׳] |އўit 9.BV?6g;s^u+Zͺ,uڭ'ˮd*6U99kcYU\IsӠ῾]FXKifO9x:{RƆyW1*"O[}LWM3^OT{k>HNe '1LSb+g+FTI$N}GS^\8^O=v+atʣڻ<QmVhKvm)ۮ5;r*Z^opO6v!~hl%nr͛H{vNx>x-mاfuå+zU?LsW(F?G[wO\;G=,9% }Sh"y?p/m^Lݯ؆5airUTضUDU^I}TVQU?_YU+*]Id?N ,Qu;zm~Oq1U5-jdGO_}^oCCu{c=o[/:u`=8K~—+^QaG$;H*iBjz_.Q)ZS-*庭Zk},2~d.{wjNq]¡5}zuJEРG('6I辶*!۷6=uZWڗ{ڴ5.)/;CU 2U߽GI9]L5ݸ4("IuĄO): +nݻŇ,Y'yڸB)$IX{7> wEW{}O+KtX[]_9azTSI5uMOU4&CRF鄑}w6:ńJFkܾK?K578Lg7;ָ#B>d[fL1IJ#}}>b[ޣݏБq} GyGcqm_{HG;TTkXh.|"R( UICv=q`m#$I"Ut;hhzv5{Hwmքw#'eA'^o3nceoӵw^;N @ woQ/oqgTwG:H^V-~[o,^{Zݺ+pHy}}R^S8iiV$+)NI,up r7|tM`HE[;]֋KP]O~  ]7tPW75CtCuGrPIyRM,KTzCvԢmiEhwi7>XL˖P`)GgKua%d!4=Ȑ!dzYpXJJ4d`7$v/鬛?Z7 V}:n@#Ehhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49@Nhz49B!7]AJK0r֭ izZB@իV|B[;wv1eZgݻB3i}UŊbnw IDAT9&Q޽էW/7f@B飾}aYwz49@Niu4ȦA mv7 ڶm 0飕Vo>*,,t@=۶mU+Շ$hz@bI_|۹`PHӧ4t-.h9|@Nhz49@N!d@۶{wrmۮnI{z2ЫgO\B7 4m۶k媕ճB4=(J>BNh:PHիg/uM# h~~|@Nhz] u8We\ wk\lzrIέsٮh!9nǽ(x\ׇ*T^wH]Xt H8q}ŗڲujjj4RSqQkOS\,k r1kz CF1YZבww|ŗטѣ撚B4ǟ|/R禛Kk~=ll]6& Л:hpCɖ[~4P~~o?mٺM+klɵ;=|S 8 O#thIc5554<fk]l:_hwzuělukMOcdrӭڲt׽ی4{|u@Iw-n]Uit/hu@Kwmn]^tހT5r@HMfҫ 㲦%^t 3<Rtl ]gEkՙJv1ЊxyV|NK.$ &2IS&PUHrmR[jz]\P7kH7bj5njn:]u͏UQYx |?<^z_G Z/Aq)yUiezqRP?⪫SSqS;oO߬|:툑tQ[׃z[t+V8rEM]+y^}y]]yp޽z춛&N8Ba 6TW]cy^꥝W%:6x}?n5t *ʴњ :7o^PEUWGuuW*oMm\.=x!?\=h+{G]s>p9eM?_oҳ?^ Lןu Za.=dt]qUϹg@|^>O[{=fn{S*;LL{?zw3:Wwb_Q#\sY-Iq}ڝ54jI:yܴ+V1dR(+ًO]p{hVUU+ԡ@|{ʆGʗ,вtȠN&_{nKm2j+W'UQ+nx$ie2x$1вeђJ΋o К zot_.zj[n/%tUfYj%е]"uo9o_{G?1-%J x}_]8V[xIBk`w=IV,"Z[ӓ7&s&/?W_]tMT8WEiԥD}Vq᢮Rhz$UUVꦩDWx[ $UPEM*YǷnVԹYTtzf=1n-)kK|X/,YwzuETT\M[,k-Ri#&eSQ7 p2TT֗k_/Mи&hhIZ;:K&1ۘ/] o>|׺ө}OXZ?ܵ@ |+9te"S]2s8w$9T߹Kҏ>ЍS/QItnQ$톧V!#4*'Պ7Ɓ#5hG#)U/.?ㆿ賺/JO?<]̙;Ow&2^M}yi L77M/-=Z/zREttԀo[o[o' u-W{ HEVO_=/?qxRs׾AT2m2MrE}Au~onY~xЛ d>qź3}uOnʸᑤPݓ"-? TYuLe+dMsty' {jwY֦]1e򩊄#w6>wθC]CuX)O/ٽ^ϧ>WmREM}?=uڣt(wmi34g):nwwؓRٳӓK6FWY˗|i4klԶ{kHN + 7 JnvFu܍AqWuKmdI# 7مp}{=5a NJP'tuC{]g_mVM=dN;E[4]eSw֩hW B_k~l{4x Z{1| RtQoP?Y=SuOqas‰{* XH]V];Suך튷G^;NV~|uQ2YǏ}[s׿n*ަNեO8㈓KތM1>^g7 #z#]{D7\… 5qnx'g33SwM>eL>5uÓ^5[#Gtþ~5S^yIVǝ\ʙZs35cn\>UÕnv͔s_Jj/r؉ B:md6eBÙ݀$[; {$Xi}FK"${ܘ;Iv5^/leUK5=p/}ݱ[7cX %[f7tlyZl7=P7 w=ݶ3ckGc{wy;>޻cw̕NMڲݘ;OF{36ss¾1க3%Xi'۽fjr 3Ng wޢZ[]\6w\f־>mv/֪d^{椝/o=u 6TeuLR/-F02FoT17w-66wlR&-Hh@QDsi.[E7Oh|(O>QA7N aưD-b/$ގ9wr@wHZ\/Bۣ5nIi`qFvcڸa,\D*,(T{T;6\nݻͦ&%O1s{o~opbv`W\T1w٦7{2DԩStvRTTP(:(ƅXֵvc(17;j]7y:rLF㩮 Lܽy17FX1/3{KP(")d׹Tlɉos^q7NOC] ºcflr^c317gkI{-(nEɚ7}L;*`MR` c݋nTNٛ[zfsrYaU{lpv;ť1|hS}.77" ׸or.=wsFSAܺds3Ns3,p>U,yeMc%W2go~9#nf亘qkjl5_/沟G4ɖd~qb/7žy{rTz=l&'+-/u%]L}#L,scY{ u{$(o7nz̋I\xbq~)HbNCIűncv̬x8H:56AR혹b|έ13M\Fԙ\s;oǛ_;6޻1{,g,f5s[b=hAn7fnv 37WwlLmY}OLy,Sg35r&nbތ/fKo;=6OfnɎsR DX},7oHjRI9R$Qc?YPb3q3W"oa^1{o6Ta0kDsna>mxcǷ}Pέ3~\S6=Aq/^4S^j$;gv܍TۤL&?T[gwR~Lwuܱil k8?fm$;sb{3qq>ǍcwقAFkʦ'E=yJ޻1ÞwAc{n~ᰛw^S{؎߽q7/Q6?~a077>Ϫjz O-:š;6{Ooiܘx\u H2a ≹ُ~l2j5vOP; ZkMYgbR]#nvm^}ǹcs&oݼ#ݺh'B셻{7{'&nDNV}~.qűFnx"^sǾc"grk5sss~{w ׄ~kN]9{ir4 1qɱv5ᱏ3ŌMލٛ{în]H{MTfnM\>1⚽ym&g5̝+1Tw{YcM۸ ۻc?~y@2?_f5{Y#ǘ5anDwu]O=oLH=ߦ$1{oljйmzR1.gMLV֙{= 5w^OC؜7{Gs1em79~ir67]~q^K~1iu&gSmvaMbV 91ϊ ɻu=6s7fǹKFVӓ-v^kEBwm≽3ivL#"՝nrwhq<`6/f qwrqvu~ kˬݱ=qc~ JnHނjmLLg 77򋵘lz<-E ź}Z›9>y󆛆Ǿc7AJԙ}<7c2e]UDܯc&nݱ;~1]4֖؝KMs'ݹ{ w(3&o}d[gs[Ds7=2_|>ֽ0x"f؍{G49KL>F4*c+3a~%bf37s;qיZ=7qvbfjLnrqQbֺ7wcFP< 9wfr~\l;R]aĵs3clK?ys>{ُm 7osTy]ܬ mv͛uFƎs;7<&o~ko3 nΝAjiE/ܞSb^u %RǎF$Z3'殐9C >d \&o<ޏ_/sאpތ;vk;.f>d%bvcטͳf,kͰ56XkS pSk_XMp4- ?؜gKr566qwo]rAr @[^L%1~ |w}joFPs׈ufL͹fɮIܸO&ڬhΦSEq;&+nskۍɛ߁1 șqdž>_1A tn=wsRu7c{ jBLֺw{%~'klj~jb~&Sf izE Y1s$ ]cba՝48fcJRŃH {1woo~)1vkFƍ1΍7qYc~d2O*MO*~qB]~͛6E 6wp0uțuiLԸs3~cwLjv,5;w5A͆g[M߱fsx}|P`W&71?^7w 1k(ۮ11O71wJw.ܜwflo (7͊۱dywn?n̰nNJ?f$5XS4=T7W"f 5~NHuMKH͌s0wissc~nΰnqT2Ufnj:L/W)rq_-ռYtcsRŤ/hHuMi\L}ǜqccM~nb#%ΛyIb~s7fT6Mv/,k-x[c?&o_4X[yCklv,ݸ'첵 :OP[Ļ{mc-Y܍m~uRݽ7 ~~Z=m$ m~uF;6윽w~Aԝd<.ގʙub?mΥkݘƃAkCWy3wwkܜ}wwܜ;cnp윉VOwa,f.}av3yɰ?fZ7&3c9c$˹2hua2j\P[չy7 ~qc :[_dkћo CIDATcq;gb/$Y>Y%[7&Ifv_97ov,U܎cw 7o1^';_k칽:.Ӝ7d=vpcTyKHw΍ލT9=wI7g=wIOHΗ,g5~1wnqL˹um~v~yrIywlM7<+؎7d{/4d/s~5ޭv~\)8.%I;?RK ť]A{7c7ސ  9Rnֹ{Îg޻c#(ֺL4X]]cn76ް٪ے=?ÝVMښbq9өvkiq$rAc[9ڊl,ј87 ωsssytҩI[S,z=gCFJ^7616:w7OGC@4d!4uRFíw~Ǹswtylץ);i纠ܽ-9~1)8.% -ăr~qTlnb_;I.59s7.pdM1=dّ΂!5A ['bdu~;v]FrќӭvmHc;/sTs#(/hS /f os~͓I6ݺ4:[WԀJ5Ac[PMOP>(n'ӘcrUc٩ ōF#hl ۂjb~ҭ2HS/39&nT4LdZ/5אxǸ΍%hJVjJ&f>Nu[ܖIܘ;7hnܝK1#F\TҭOk4>ӹe:WiqЅx~1[2krz7jǭtJ`Op3qkR%X2M] ͽ2qc\w.ǤxCe|H-ۋݘ;WܹK%c2oh.3ktԦx\Tdy_̏_]1)8LdZ(-q37$ 6YΖnZt\~~1)x*i}ĝ!cx2 9mW& LjcOGCm1֒M԰f!ؒ Ks5e{q|A<ߐc5,z-9WƠ1dt5 =.+Z¼1ϣ1R'U^JȤ!:jR՘4جhm <J\I6Fs=@.kz&nmuh̹slVrcWcM&fZ$[@?dZƜ16ּnskhc4XMisl=IwcΓ~TZh Z"O/[imi!皭dSk|NȎd9eFd&kܷ48~X5@kK75o.=~"8pDEeHr~bfv%-uJrɝ?Hdo)c u«NPDDDDjRD:"?ԡ1E[`{"""""4A>H|n& H ئ*op=vEDDD$r+ԛT:ñI@u#_EDDDDJ @us_SkADDDD$X5RLKjk$>HlTH զH|nԅv] ;vl#="""" :ݞ"DrGmVLjc/""""5*6EU#"Ov#1LߺZЅbD\u`cjjm#vl{?Ah?]*&ϿJPcVUR۝pe :Uُj\`BJegw f?*fǹOeNu2+䈈D@:PM >Uݾ*&BNe*K[DDD`WST6XTg@Uۇ,BO `۠""""R;|-0dh](mSCOMNJL 2qNKeCSΪOzUSB +yP]5u_&U%}ۅmHj#\CB o+ہH쐶`,P(v2mJ'CR 6T& :+m[*TNhVX<> ?|S'/r*s.PNDDDDW([J6B ?>u&j \J;7 ="""":&7LU'+]T!l;ϛT|zj+r`Pe?Y &9TGG: *;|,/ =`/^JvI0Uxh۪6 3""""WwM㹭wL&O!!oc@Mfz̹::GDDDvUy<ܷ6#m-oPR^];e <`ÒIhT؏H}cl*pmvkʖۖv .=NJO2lD ;eP/=r_*Z*:&"9G4Tv\|PUu}j3TvX['N dX=YVGDDDDʫj tN@_ %~B @MUhWUg~`s~|DDDD*/ D'st|l-xۺʞSBOMk 6 @o܇q=< e[0zDDDD**PTcUx|o}|"n[$Z篂oW5*OU=""""R~+x[-yV{mooY=5={[e;lWgq:- &Hyki=\ *ۊutWUs]ll Tű(tylM2cm< |-}5+=TTG /s*jk6{l*^DDD`TCUz<xxWs A2 +%'~sylg'6Vy>__񷭈T`m 30b 5r6ݶ+{<ꎷeɳ<U¦&+=rlʶV 2flllMzIJRJ֞ """""p8 {.9s%x܇y^h7<{'_JzBV]汭Q!{j6+\Ns|z-O>1qmXs}3Te[[Uw_uocmCnsX4̈́ti ڵk{W֭k߬w}Z}a9 bh:Y?x!c-#9)yiceƩ뚘86`R^GD*]j":1}}|!o آv+6QtTT{ʏ*{]}oy2ur~UhX[2oz!L/˼moӦMڹFLh)p.*²,mҞH u3)?AYlwm]eq :'\ L<.tˉHHH .!$+fab`bQgr8Hp2vr[/̀ (T6TIm_!# mu_߹k[E,?O/fĠE M=yJlE"dp9zeD"""""ae4x!JCuBN=C*e/I \.222p:bSvk@A .H|PDFI UY[)srڳY6Єr5my[*"!mۏff3W$ l&FOa Emm Q(L#ܓ㉈ӏ\m|ݯ֪蕇|x<_|!֕ es7Mv;QQ6l6}!'14Lp/Efnt)Eٽ Ea̛z!"̆ Xn֭cÆ }(ޏU%ySC"i"@Cּmxqs?6*ߍ4 ())fJ+9{61m.mpimQ~^?k?7k69{r=26lft\.={۶/z*iܸ1.n/}*,,bs3Yl90!gK/JC{WZ&0첬^o.ѭlH{s$ i&x@X3gSm[)*,͛U=S&?NFf&+V`sϱnڷo~#R 6l@qq1;vݺu눎ؗUV3bH8ZOǎ}< 6zXV'fncٰGVzf6EdҮEppTs  f#"U,xy$&$q˭7{agYr%QzC^z,ˢ XDsbb9笳fϙ޵ƍ3dȵp<ēnݚ/_~aw͕W\UW]Ɏ;ꪫY#L o/Xt遰 7@-y'*K""^d~8BHnݺ >Uܿ meAem_&Rp#㹍:@O[1MDv 09povvs 9n~&+iDTxQ1?))){L:W^~ 1c֭3U hڤ ^x!ׯgر,?~߰/QFrۭy3-s'zjf<;@vXz 3>&84VZzm%_h"&MDTT{9|>5W3h97LKcǣXjݺuSNf9׏hm}(vSM㕗^:pT_z);wb߾Bn6r v*_ G /ҁM׮]HJJd՜~iefeq}i'/ySOo$eX-񺟲Q|>4;fLeus(~e[/׽ݧDb |o{ǽ11Mh;vq[`*]آ6m"ʕK|ܹ)))wܱر-[anfHHi&iӦگir衇pƀ,]O?N1 nݺr|^|g3g\Z4o1{TX̞= &XaUYr% 쳝{srIKku]Zjy9p_}.fͦ~4h@׮]l$$ؾc ﺋ$ ==7hьs>5jDRR}HpoރJeڏǭ:SfB9ʽ}|Q]=`u`א69򀳷lCmN pa6LsD"GΝw9ΡɼÏ?t8p8XVcYY7 >>>, PeYf]wѦmr4n={-F>5Yxf1`!I<Cp:|399 22ԼӁG}4G}4;vd)<C~7,X]0ؾ}j~`}f1mO,k dz}M"R;yx֭j&3/*[|Y KO\ kYMu]x ?OP0 6ہ)MtA˴.l^n#"EEEZ}o;AN}{`]rJ 绪͞f4lXZQIKMc׮]ܹƍ~ȵiԨQ?c6K/ȑGq뷝]v㫥*,dݺ_޽{uM4aȐ!]ӉNRRRȑ8gOL)a0<&.]TXʮݻ/H* #Fdȑ2,::qnݺ2Vg5U$aoU uթR$RykJR{)[V6{߃TcbFlF a#h@bT#n|16?i",ZhIJJ ex'Ҫ>YfSoEEE?g.\d,ZO:ɧa,b5|vڿ,d1qq 8clޜgÆ?,߲u rsv^vlڴ)SuV _y1{tTٺu+dggGGf#9)Lq\QPPQ;b;vdURts.y=|I*+lwqDZy?,ZINN;v 99  p`lݺumfUرcgUMr> >{c_qO r_-'f;P1m1V::A+0LQ?=@k{駋a7DBDě/Gy!C')9A!!l=4Ӧs008w\~.lذٳ'&.^r`nݺrM7#Ehiwl1cV,:qwnjaO?wH>FL2_z; csx.Mޜֵ @v8i̙r3r(Ѽy 8wxs7Ybi߾=ÇN>/<ϔ)Si ;i& R|i>nfMh R˪sjKY5[dɤ@1iݯ{H9L3]l v}giD,~ybc?W^̳.Y%_{niм_b5O]7(mOS8i E3ݔ3쮻iӦ #iF aW?0}m<຿KOQ)zLW|*a8]pYzYvlyN0tND+,V]||<>2?̓O=a""/l_<кɞyO(sn_s| ~0 Ld߾}PRbRSvQ~01-#"R]6lȜ9""u򳳹m3ܖ{RoVox.uy Av,,N' 6$77}kTA=TiQbt80m6#"a7fHbl{=v}i}{.vj\`[ tm:pxeY8:w>o|lbt9ZaVln4MQQ4'֒CDDDDDȽ '0pxbD0muM`{= ?ަL嘦Ill,ڷ]% _>~YDp݇yQz_s_$""""R?_}v| f}ۂ :^ _۹WGDDDD<_:ǺZUJpw|-5s@aoކg 8-M 5AmaߥZaO""""",Ԕ`h@˂Gm:yW/M5?T=-Le@ ܿ'P_lm"F'16߿m[}'!""""Rwi T,em_A[ KHsZBk"_ۊgÞEJ?[kD$8D!m <""""r 9q#R8B [kHl2s`x,&T|]Mw+[Q72ؐ+يwF><_z>Nm~y$T:%@sT _, qEC|}}V -};<$-γlzW:_JOsY( /'{)]vSXև_NZ&.P=bΎ"i R$1 )bTNJR21 Hp<}⾝މhz g 0IJwA6EE\%)ֈH}t8QFanSCw 0-Mmo TM &y^QhW+% ""Rd w~e[0ve[i] U >^׽ y )H IDATc]@L!""w6-)! *9T|Uk(%*ߺ*U{DDDDDTy| ](/ŽQx~}Zi@C| B([?2ia?g'=`PUqo=""""rUq_>eW{?=*=|DDDD`ொ:&COUyKyn 0 ;W.\ ?m׬-""""Rmyr_ R  +T}O7t u='rũpm^g _?zwq"kg,\c+>Yo'"A\Bڇ"CuO8 l('S B5bߦOy~yд=ۮ;oȜ;72tiDTDJ=fzOfU17M&D_/%YoZ6iOQ\-]V.K?0LÌ&ѡt><@b3MXa؈MjBnShӠ.$6g׫x}0\pUR]|.۟F*zk.H(s|g6䶕i1/ e0܁w3if׷q'\!&/csx uM\.,r)0o7.j}nڰzy2;]2k ^o87u w$Eu)N ojޚ1a w*޴+ͨ%v~4;sF=JH'v,$ <"ۡ_ۅSw/fQCy{@<:MNo2(~nQ:73}}ދ:otYH(w]CK7Mu @ǭYz77ʇOYIlݛ/8l.ᢨz A}c.|;ɭeЕѻE 8d޽(+h]4jM|y|Nrմ;4wkX;ӯmO!1-zp޵WX\;2m;z+%88t<-bO>6-Yk =DɅwTs}0k]SNCqX={ g…;d޽ɻinVO;DQ1B^29l 01+.?w4]uO7'_l&plX s.槝ES9SJ?>.~xUX94EsryZxq1g}V\c::d\;2?0S?Mb4~2w,,v.ƴ;z`c'E7N8hK@mWZu3\bЖALQ@3w.,Oq\bxh(01.s6oRܵfs{6zQ&3b\~J.)o0ן4&`cӒ$a{\x%tOneY{S;1cn R+\`t\|l]+T7xv驮v%`Kp5ùWЩo=v"?qRm{q,SF3{mIk>C&e(fLXەo}—>MmӸ繟(v~,X/G?f0}q&_=3sCjbޚ:av+7_/ec+old;Ǐ /fܔiLoE3ɋ佗8Ooc}Lcb}ښ4;^,fNa|;oU1"go)'3FqvH9 _شLLb= KKߓWeһ9c"͜Wo/Lݿ4ߊEv6 }g=M~煙V3"-SGs.vԈVO,! |=Ю\IMc#(rspYEhsF:.qQ],]gU7 WXˇ5W%Ĉm`%lă ӫGKM0rBX2veb>sn⊣ӈǑ޺i;{%tN-^Ne,݉k|+Wp;7]@gIfnk'<9}+gC*$-,]Ҧbq.:+;Ԋ87t?km`68T ̖"ξLNmI6J·؛MCőFx9tYͪQnN5pǂfM }[RξL_YEt.([ ͚dy+IqA!TRKLTtn V萚Cfg߭އN:ᘨ,[_\QYO἞2l$uK_q}OgA#9ҁUY~?{|&}9FDօ 8~Ͽ"׷V1g9Jۮ!Cn\vlZP]`m?6C߮j>|/ކpZ{Wwʳ rP3%$;{.f 4o1yc6=ӏiDaxʯ+דo9Ni#,0`˲0{MVFmȡ[V'r"_8mO G 6'hPh\3D'[xS]Bb$L#qрr -o?ŃyCbq vgsXV;Kp2y~ qMJ2WɬW>姝6-D_jarШGрq54J%;Dž 4wf4ȲnV&==glǿ;0rt7*|aCAN.*R;wQҨ M(+yHuB+ݱrX6.V-J )xi[3c- 4M\y;p4$&űdRgA|Yraޛl;&n(Z}>X L̴qO E% ) 9XoKlVXνdӬ)5r9bO*HM#@ ҈^ vX e?o0ꖷ=;Qspns-u`Qw`4&o7{?Wʅ+&o&E 9FJzwS+o/ή|;** gz2-L1'Kdݟ pnyƵHH$?Դd%k{sFjZy;sq0-F Iط,cځW>YمY C{uNBoo":Е'uiie1|jv='2e9wЁszt(k8v؈ml];VO|22Hި;?x`FmJ#=1Q=8OLܧ+`|ƣ^6Ywf+bb=f&;`8[dd"/`';shlbmDjZvX}ڹ]FC L߅EUxɌuoӝ iOL=<vZ_nygObAvf6.RCf94;|v/ŸW*lik{;EI ^|t/6 dҼ] upn`șnL9 6gͬx5k/r吝c'9).T&IDޏ #INJ<$$ 2-h :f6 Ôi3k$h~KϽ> M6TG1ޝփyk"J;o2q,'٢I:#lr\"3# 7l';#̌R0Wv7S MI77ؖoZ9q綌J@Ui :VB ]sG2,]8L k:Ȑ^gC0]``}G>gъ}ѳ ~< El yv3/8 a-s]%`f{3/LZKG09Χ4a>e'Ğ00}-L?_젤 -laUzruItҸ-'?fCvÉGzi-X;VI1Wy mM(η?u |t~p1$w!e>xO^y>2q+ݤjEQ;e٦|(Z{=l>)2csR\‘þ4'{OtX*f7э uB nm1 ZZ͵7 ߡݏXU3'xG3Hڇ|{؂̟xg_>Mr14XTwurò%?QǛ-۫Ud. l̚f|D5'{slu'M`sS\+ٱgD)v}ǢvRlYm_r8Ǒ40ا'ί?pGߚdz: `k|8ӧ?äS{\б1,y6\sⱥӬ=ǝ1n8@C#9JNIB7!.=p^'+mPC>.h `-#0}S='>yN쉇pخahϯQn&1Oou63&Ԉ󘼫6QZo6^Nw9^@\S pǧpu#6/gH7JG$Mp۱ kf9qv1;ܭQ[ j͹C[SG3+ir@nr#/?!}pm+ou ;m/׽3"C{rɝpt o\9@҅}m<X{#n\|p~($EO(ק2l&\q!4C}Nv7ᨳ綖eFq\G>s>/iQ}oKp?yquLM[RzNϋ7hqzf3~3ѻ# Q[NVzq/,Ě7.f-BhI\S|+ؙC˛渠aC4-FtjNnh.?V_M}*6n `,)v7۟ڜ-[Z?QsC*GNLt]+F^'Զ_kLw.zf?XQIq iJBM?i ~*ah*O,8@Pc1֛ JƖ]nn.m]=/l0ooAXf 譼v/n˯H$'oSd?ZJ5sZdcJ~y:@*'F$VrÇYG$(:1Q:t&H=3mڴ~J?F+pqz,sz,w]:( .-KKx,)~s6,+v[1we:D$ Ք=^8Q3֋g#"Uc\Nziˑg\Iw#Ͼ(RVD$ T٬;g50/;3읏 岉 4=96͐z fGH#C`NvtٛH@vLM-""""R?Tg9bݑ^R/Ey5{ 4KݿlDzqW/LuEDDD$ՙBumDlLDDDD Qu-ѹ:"""""NjTg_Uou霞`ՋFp7ADD+W  àA4kڔ}y8SiNgUw!1wDDD ϖ-#xMeS} :>&QDDDDN lْ;vz׃|0:+>> Bk ="""""R)􈈈H#"""""Bk ="""""R/' ,lF~~~"""""0 ТE RSRݜzIdeec.֚p7GDDDD"\^^>[nPVl!Z*HPi٢[n wS%#""""!ש5DGDDDDD5zDDDDD^SzMGDDDDD5""ͻ=1ˋ+3sgTKDD$zDD;]|lo9߱+  oLV0VZ|0~#^ sVbn5\?y; IDAT#_c97oVts 'Cte?,zz(ޏ> ?.|1/WPgqX@ϳaw PA9wd>Rk\{);Np̤/晵ۃ?_{#?_{""R(>5=ghƽ V˧NǸ4p_INŗ,lǕ"Vcve7y-<3l2}ms">ncqv~;Mdѫ<6Vh``k94mRgUED$)C3s-7"gyc~mro;ٓژ$u|8.)60pe~1~Ìl>XFVfx1G"|g…` t,Km 18•30ոx:GD er`țIzX?%ׂKxk2't;'E-7ES$#'6bF4M/׌|,b14N^<7P,r;6W.cWwCcoA+?}qgy4ɖ<{|lzEGD CKokn2QĚYOQw0/]̯kmܱFzr;v9mbhcFDup/Cy AܕYwK@ôX^3y70,>猸eεS\L y\̤GcHzmsX_Ҍwiݪg: \~{|=c'0-4n'ϨyRDǝݏwe,U_foЅ|<ã=UEDP9HEu=?Srus(0C,v'7,xqϐd *9D'yZ?}N_4ca FL`w0ew'n'y=L| fmY22N}'1ZqΑl}CX :|-3\wSjzn6Km}mQ?}4ftNkIfS?&ˉ}l&tIqwXbmH=&O\HipWX`O-dBmH=ma&ɉMAhz7Sf޲~:DDDDD(Uz"S&&/OЂvmIÆ5.emcyҜ+l>6 fhL2XQ۳pfK2Ceqlj o(e:ɄT Ϻų :@6^QL|R}rKJUh@!! %I=\[:ݿFΏ;o'cZ.3amB!&_,)!EㇰxP/ XJf[svxteԸ?#Xǚ 6Ԩ8}eޗ1{QA͔1۰콂}Gs`@&1~Uzo1NCg>S'[i#haN a78{,ڒz귊cG9ql?e|]\&/ a};Urǹ|,#f11 \l,g,Z>vFr cW&d!B!"$=ON, oⷺ[:O[J )XU$*f%6!B?,֕sx:/X-Ƅ&!?O<fmD!% o+aJsFX4"Y%ܼIdIܶ >-| ;]WP=i75qegSoa@ rql^݋GSg󱄥dri Z @Kۏ78V-[ҢxmTG酻 ^ ϠN?L?mFkdql/ܽiC349c&n9c2tJ#n(<y2z_F{is6:Тe XyWIn#u'~]eB?ԘS Vlۗϓ!up̫_]qkKkcFRHCrޞ%Fv7^DVb:ʐ>jW;h酇 {酇WV^2Bu~0`Vī3wvK IƾٟIػ4tr7u} Okce, ?s7phڸ-Θ;B!d}{`JaRҟ}M9Ç|y`.4vEP@H`pc>\˯ 굃VN+19s?_(UJԾW @*5壙cK7 nFejŽhIXoKUtqONPIkA5vTМ}B'c /YdqaXfԊ.E+l=1`zX[ݮC$Z;~ys. _.OaE8mG]?ggIT(/!ϓ+G7i卛/FIJ4'6Gy4| i0ѧ>a D5 \297׋XY¹FUӠtvVd(<.*5𤎣%:Ҵ by\iPIKDqv~{vG{M@ݼ? }}`.ᅗrcaڕ7;<kPٮ{+ X{b[[#y ̫ay}M+ؠju5RN`yny͖TcU"5* ?{o,^zSNAgSĄ[nnjex]W7T@%@(?7& Oūo,uro U9z)^AK'C֍z!uw oza`Kƫl_rjV192ڏ+$i JvƺC't\;X쯵>r@M1fb<T5tY:x0kn }ڽ ?Ltl:7#F;oT2J4N5εf^cy/fQ^mٙhM0%U6@-,{?:/1!2)_\㈉KĔۜ1ն ifՀg_z dOhov'ʉi j2,m6+W~BB!($=%bSgR>ujõpZbv8 d3Z0v qcp5}u^yC&3J&6wDKL`^,[<z+лE3ˑd%E9:cOǦ`a=5z/f e =[[T.~?UFxW@9o[eprVlX@רJwbU G[o_agoF݊e53<]oQUKt ,H|8;qV7,P# @gA67Ky7ꈳ]Q+msfP|B=ey#'B!dHx&%+gxQ34 S[BBF:bN U=RhA4(EOwĖ_0ɵ1s:j3{v+.G; wOAMBXLn: K,z4)S C&F-!vL];p#p%e \HhY Dw4~%+ Uc5"o~ u5+";J Fq3|8񧜍5WIysň-q,kЪw2"Xԣm[o0$]yR53k;Q4xv[&s55$/cM4ȃB1ƞȧSom-jyH r~ǟjr(t˵hX:Ƴac;݋3 ctؾ8㪱gTv\ѨPZX+һ$V`rҧ5ݗF;u< >o+ڍ>Aa#Xt; O L{qm3:57+>|{,?nd *]^кY3uƟ)rR^sgAm[ټZAĭ=.۰y=Ӻͳ5};ʭB ɱxNRzj{W E?#͊grK7f}>IqIx d;pSČxt!HE/mn59yĺB!~[eazOWkS5Rk7[M[[N-MϘ9}СirNrh^_Ȑ0;p^_G%f^`TY!/iߜw&fk԰Y.]֔ɓd7}\57dh2得7k)L .3-c{Kbbog/Gb49>F^1FNі*r!ByA1SY.^H4ռg4{;;y1GW5OKV2&B!8ISL_|JMGC!BG$B!%$=B!BM!B!D&IB!DG!BQIt0g!B:1-MJJjq!B!ARRR-]aH==Aʕ~:U*WֶB!OT߸Nʕ;I+\%5Uz|B!Dt:\2vvN$Ic`o!B!#B!($B!Bh!B!J4IzB!%$=B!BM!B!D&IB!DyL~|9B!x /'y|<$y Mͧj`kk[!B'\JJ*o\1m7V$MsLn/n(<y2z_ƃ{/^%O<< ,M d]܅V-Z~0FNVǦeED~ԛfuh, ?sk4mܖYgsfn:;C:gI*=͍4ɛR޺hqvǟn!|x*8/W1[[Z4oIkcN*'-[Ѳm_&n<CNn/5ˇ>xwg貓.ObtO|Zժف,OƭE ;˳op}iMy쾜ޱ4rͼZҲ`쿎cT!D>Iz1I9Lgۡ^ۏR+yXODDgg9;-U?g3b-ٺd$UsNJ9{r"%wC-v}ްK)p>~38yn 7_Smz䋐j6 w~Y%Q|!zD?VY01tʇGOrIΜ>IX5A>];Mɮ۹q.-̂C lH*&LPa|v?q%Y8Iߴ//Ad)WGؽY1bbV֒|8G?f\l;_/:\שy+y*"ılP} 7]~v,!cTGJXtToÀ.;zd-o T- 85k^suEG,J\*܊6 ߳h<^XoVphѕJ`Iytѓ7Uzs=\\?Ymx*>&P؉AUqLYXֹѫ=?NF+ X{b[[#BHFrθաF&,}^wt?xr񹉋 ]DjVVe@$ZڋzPR)&-fzXBaG! gW'3wH6`3w;4,q-@T5gKc xu`jе{~>!?8j9ؑM8꬐l #׷ڬ^#]dŚOq.hg51V89涷eHvGOEt)lBBS!|F|;ƾ/QFg{? {װTT ğ[>hIKFTҢ"lrse]:Ž8|G~XyzYDa˯iټi,}*ByI,’8uQ;7HU@ K\O˫+3_lD#9vGOPYtPI F6Pe)[l, dd=G:?SDg~VmG[tw@yzu}{oA9v'AMkk%Ia]^zlʔIB!$==BX6tI.4~yoe`8h?i.\;gABĢL,+4gT6.T *㼰әZ=YPe}/dեiOeO)g^J#MJKi3H |!1\a]sYQ,fDaҘ ,^瑆)4>XBٱdbsA U<F l(Uc@ z͝A j;lҕc\? 0bK!L-N)G93IH 5d8gGv9n-X~YFv8pSVόNc_6ooCSl*tx:>OBfhצ3Rk9#,~*&&z&kK3fN:thEssx=ܩߘUNQRi$"p[Wu7,Mm嗲eȳ{MguM>l }7gaqc0#/|ޕ6v'ak1ܠA!Dɤiߜw&fk԰Y.]֔ɓd7}\57dh2得I\ZS\fZƜ$;BI~U?5n!p2M!_L~ u26T}zwR{ !G!(~!'w w֢TlD[ M,1r޿JE+!TG!dxB!DG!BQI#B!($B!Bh!B!J4IzB!%$=B!BM!B!D&IB!DG!BQI#B!($B!Bh!B!J4*>Sc ~H0bT[G@}=h{ !BQBHSLF1 Vfep<2ٸ P!BB4`av`@ ofאxlh.5?2w(B!!U)cACi'9.p^R#2P!%I?@rb/K!c(Z";eꉬ)t_M,O%! #"@.G尔LG!A'\rbx}l3ֲ|ܻs ~#sRO|ʧ)X>)gF!Ey$%ē OX+Uz=δgBKY @so_bћdű[ҿ_Lg7}Ƽ`<ܽh~ӧX2 bF YѝMg)ej$EcĪxl'"b??i!aqY=' C+3b-ٺd$UM'}3)&ׇ:68yI8gN铜3.o ژ?!85m2. b|t:}.[]h,Fnsxdݾ'l 0b`"ˊ fաog[$ ~wYzMp0>;pD8ǒgN!/ I@SG$$>7H盯)5:?mNW,{\eqa\Vথ?7׋XY¹FUy$]ƨ? O?Т+kF^V''oroSXbkeqlP qhZ&zjbc_^nͱc ۟DW{Q^JYt@;dn[nԳӃޞF#8Q$b]zXVlEo#g !BbV,Orf =PSK0٤W$^M0I(4.cN놵إ^U/9f5m?B9;s)Wg$4\cQWh$3"rZwogu\OŪt)^S]iIIJASKrɾ*.Tpb\jNo4w8R&$cZ4q2, 5;i@;!B Pށsǖ(eqv$&*$yvT.Nw6ކPA`w;d}NLfnݕLlg鬒r5[*vu+2Bۑ v2#7>4CK:Ї`M۪8: VW-L(:6@܌JfNζ9jiŧans;5VN8z3p,JB! ۞yO5XKxk[**ϭcqg̈́5,eͫT@)EOwĖ_0ɵ;PtXfV\9.h$cQkkmZ6σb|-e$HA; n۞gױd4=-%ȯ s |h5K_aї&y73erMhc( u5+"*~(&BW'HY{^Q[ʜ,3`Z2y˞w}لG,[Xe\2ʺel_ȂqѼ>n*.+fөnnYK,Yvu0u A1>%5ՃemM6G=3+{3HJ4]WU+ǔ3{i Ro#k[iՊ1sR  {rBbBJ1a.T?Q!B +W{B^GSZGȦɼɼdɼEdt~ӇZќF8{n-w7-t Qumzċ,^$Vv|P~)[<{"yvG8uB!h7gݭY5lhVK.5e)|k@vyyUycL&Z{y|1|eey2ws<@V!O_.J ǣ oCB!GlS /dbPͻPtBa_z#B!($=Z;eJ>+=WqW{; !B8)!B!Ŀ$=B!BM!B!D&IB!DG!BQI#B!($B!Bh!B!J4IzB!%$=B!BM!B!DfQ[gj? Fygt=u7@!B!JIz(:Fյ,GS3z !BQBbCf,Nxh^Bh.5?2w(B!0!==ĨH O+ $SOzbtTπgW*B<$HNLes6d \XKdǰL=u2ŕ+w2 TC$FEh]0Ua)Bđ Ce^4ی,?b3|wsE뤞OS:|R0T!xb==Ox{4Tk~^gҙ~rq,t/FMT,P"xnL= ՙ~jՕ!Qԛ|5siOAsL@>^0PБxu5^>4nI3vr5^ѓvnцn6s! >xxzR{EH)rۅ3FdeHZ{5ͫ $߾K4 1̉sط>-|iѶ/cל!Vn/5ˇ>xwg貓Цb8L? h$[Bώ!fx`< OO5r㥦^xx2xK3η%]$}v `7mltE@:׳ [/ =`sɽlXN+d|XWyav6nxͣ|ݍ/yg\Nò=L?_Z}_\$U3=}"1t$6sˌrэ4ɛRw~Ĥ'[Eo@]hբkg]kE N:sMϩ71Xhٶ/7'V_+nO3O/sM&t7?wn)r7+\Qm33|p{~nꉧ_W&ŠRԹQΊ>g{NҺ79MX^5j;x2@! $)fI ,?~gw1 \l,g{iiXs5S'[yR8.Ro&v0Tdh5RN~1C_2>iVPB3K^g~cՂiq1NE|Ȉyn-a@DcaN a78{, Xb|ݑwo4uFy\EL" j yo5W,B0Iz:­?"Y<>'y @:|Ni[,pjԏ׼bٳϝ2\gSo89j_}lI5[=Ve+RB霋05'rnP׈?j/3ȯ2:М]r4q)SSmjF̱Σ2^itO z=ZUZæzw3$K݇K(J^x(ogZ`@K"bToGsr Jh5T C2톖IF=2óFsXCzn|]`љ@6%GCtUK{ [Hj{cכv :7&&<{oAB/֥XeVtֈ8r>RIJ)fykβ$g֐^@NIx5΍MZZށī ~1u7!e j)\ܽwFENm#Zy-cTIZ5:O[L+ `(SM{2vL0 ƗWwp feѡZwogu\OŪ mc}f I~ߑ1!2)_K U ٨&+:l˻bG ΀ ^ XbNzY}A,.|N=)YŋDžbo ήNhg&=FlxmztX7vMf(vORƩﳾf[~}g|C<ߐSXy[Ju nΒe{{aG>.Άҥt(zOtqt&%)܌x@_jM0b+4{_x2/Հ 3-x.5 @ I Ih8b81=c6m:ʊ8gy/fQ^4ٙhM0Z gs͉{ڐnR2_΄u8q>RbM lǕJ|\: |sVl_rjV)ϡ=`:"G! $yw`<%<JY-A5lnG%g-Fg.bo3buzjA1Iw8o/1rL65`՜ɻX Ԥ,&y3`Oi?6iCWeǠXf\>dkVFmXn>ԉ!o ax-鈓5b]ʯĤk| z~ɬkUg0#"Z)QIulSnZ{M{PQȌ:¬#Ye;yH>Ί^F":⹏DžKr戎Agg;lGOK2z-ߦ x~o289PJ6 e^wmנ\{7׽ЬiV?Bƶi'Ns/|^Ijծ̍_~%YRĹK~q5W>><п#t+8:9`e}YJbl<I|XnEյCOѕӷ2qH{F'mk~Rc:sF)wИR2q%ޞ>=Π]%}uٗC&V&=>gUSW̭>f]בtt.0mR}Jg-&O~B%>פb/~ao?ǝ |n&>b>}i!15[ FDt?Ӭ\&FX)齢C?;< ogSIH't#tB K "HДQN $**(MjٝHa ip';;sܝg  bIvRҁ~vСXZ /G?za&khh^ rubٷ=^w7U-h`=ob}luXRȃd)9S 9."gFWECc8ty|&4Y=Ma]XX`<<5%%?Rmuf1c~|@εzV/ӹ-! {+U\#rRT:/Y:횗zx:@IWpmǵ**>ޟ5bH;BWJ4iTŢmZ۲w7 7aˑYG뷮B U8͊%!JRw/GHʵlޏVnX^b~}(:Y`0kIQܾŃVŹPHN`/8XW(ڨ9/_Ȓ)&W&p.zlW9L֌KS>_aHe3z um{BwHO3щfF3Q_ӨTaY9E`%̞* CQdSƔ%Q[:;/:etKyY^N'۷m|G^Rd8&&JԡQ:}Ey9{Xo4&kJy͘.%ޚ&tA2p{#gTTa *5ɍ}iq!Cu:LHr `˃0y׊ &,̨)GN)BImPD z~<ˀ! ^pnISMI&tSb~1Yѥٌ%4"w˷Xqճ{3 Ȋ =29]ƌZ}ꦔʔ]ZNhSc3YVIZU Y}ys? 'd5/t {Bz1{Ms̏n%:RGZU̦-̦f-ͦ--ͧ'M2iȐ!Vg ?rz!bPadKoؑכM)q>O~\#~E,n~>88-/dUg\uy] +4˼1gZ•9G'ubEʼfɿQB|$IO>q14"q}~4XP{8V|ϿZ*i /5_E!DA'㤄B!$=B!BM!B!D&IB!@G!BQI#B!($B!Bh!B! 4IzB!E~ i $&&b2;!Gz .:.yH#"_$$$`0prtDQd`SUp;-#"_$&&bog' ⹠( vv$&&w(%B/L&$ERZ1[ vDEfݿ˟MT+ċߠj,#=r$ EQ :tקN+ : vJMkIA~%+,{Ջ~x4ƣoFܶxY3ppB . P#CL8 ŽdD/ӬsqYJQc^hҌ&mɷv?M-qXw=5 -ro{4o?Liښ[tv>]x}韏=2Ƽmt,k)Ь; ..^ɤwzѶ?[uO\b倎 \sd@WP =$V~ѵ^^ԩӀz }jʠZ_v4k҄fց0?$90rjF;y㇗G $ 21'ۧ9m^|iu{WL[7WAF^ ȷ7.mz=}ϐ:|ucҥMk7UlnȲޤր:ݗAUoGM9AJz47;ȷ)-;<mh׈zV^7\Y՟u0d 73{m۾샑+mz0|1o5k>酪l~9=>"АS ϐ]hټ>ͺ1dIb4kOOOj>} r88ʜA]iָ11cMCm"JQóGKٳ׉3rٜ^PUSO2111:}UnIxfHHLXO7rpF5ÿKTBy|!?1wjj<»MgLW*G#P <@t3|ǰɁDdn7q+c^~̜hhĄb~!NZtqnYx &&+~huiLC։ԽE{ U#(fzh#=xYA:5㡃 Nk \̱#{1%v?nfoщCv@]8qn q8x#W<ܯXq^0S6(73E=lAu|P8s>ʃWp `Mc䶽cvkąfز(Z= 'dfic4k2lvL6~]Oɜ]4ix0맟ֶ%;d)2\]sXrÙY|?~ Ne=i;%`?k/(w*ޕ!9vp sc`ʌZC`^6,ñcY{%$ގù;%q͝dz]ijVuǪpi[EcMRʕ*qҥ,.^DJ"Gyal-Bk״-L 4y7¹ި_vq1S֣F2{m 2wT6ꅺ4,_ tVnH]h"rHNGSntPK}ޤ{իEOCK$7JZtnN.B<ZcOzSJ1BPs!W(hB}(euc^_ڈS~WzZ]{UplmWa$Ʈ(nf=/JbiDFk``"‰L>WZEz)h 1 DFqEC]%- %XJK8G5j =ƚeQX MampXRgԏ,޼=Uo#$!l%TG͡:ZլYR݉i{SW'/f{v4qk,VzGYI8*!V[Q$.h BbE\ħկ12S)Y?-W|inס 3Ta/ٷ89Q'*EׯDߺC|r gC^2aMt~@!EO*U$yIPqu&4Қ6j8wYj %mW=)zV M^}3" &~JE+лpD R[njX(:|M_N.82`T?6('Ȱ4fgkR!ۛ5NۄÀPL\Uǹ[r R0-nӆF?r +ڔ@,xʽ}3t6>,ד8Άe?ecYt{2ȊK>fQ͟@-G=Us1wdu<;\x:~Pi?#mߘHּ._"|.(Ǎʞz>d SYқVћߧ.@HGd125<'_:[yp,5;[qu^=:BXh4n.ɼ;wݢaB(¶1}ymϲ*Ai{\ G#ukR" E8&=VRVpj1ݢĘdbٝ|M}( Wq𷇁_ |Ns9nETĹd=BgCz۹sx%IxQxvm9r-gcLsi vҮ~!PgT)O`ia~asZOK Jtzo>Fx hI7صlw= B U8͊%!JRw/Gۿf8L$^f}ǝiԨt6Z#|Bz:* dg*U/A!g>5#ʌsQue;֬9QZ.ȎJlt,e^xp5y:`π@nnox2-lfx!;@V`&8?e-U_ HFއCвų/w֌gUo+Gw?b$jVrU@#jl4u]6'hDuMVW㕾8h&?]"EH& LOi +g@fSTE T/kȓ9>h_ `hҨx|I$&p J9P3KXsV8əYZa@|F^6!9::RF jԨ! 3LzzVT0q_br’8VmyC*OV1FmF5ocV4@_.voʆ"H-(/ٞV?ׯ#u!,cØBH#Ek~LVxv>C(Vxu[L-=nY7^̢WQt,[ŒioqR(zy %oM?gp;tLy:COe|^^ m<pYPIMnK aDzˇGKƣGöx n;湢H)*ʥAQ4u<+-YB9:8w"yZj^e|:#[U⹎i i|KisKIL2dHg ?r!i٢9z}v L&vOf).2 IDAT3tjSciҲXӟyR86#3gqh5So3ppB[>w_w޹snnbBݣDY4'OѠ~H_Ny*s…wǍ30=L@JiUiSڴu&_3?ײydltvy}2-8:8pUL6;&W!?@ !(dx[>Z /^իhyU:EU Qʶwt)ȢrGF MK !Ykkkj|9BQ\j,׋աm']%cvggȀY! oB!Bh!B! 4IzB!$=B!^G!DAtH#"_.\I|UUOHpsI~M!D#!!蘘'eB_)\0vvvsI!Baoo}~"mB!BM!B!D&IB!@G!BQI#B!($B!Bh!B! 4?=B񌉉;$$$w(B!N-%K!y.I#ϐ#VN!(@r*$>@ !3;TPN!(`Brܺ}'Cy.I#ϐIx ]!B! 4IzB!$=B!BM!B!D&IB!@G!BQI#1ŒV͘p<%#B!rdBsl>ym-O:;. >s)0Czყ? $6M"ruFNhG=O_}h@QۍJ̙|ү~ҸM?F8Ix4獗|iу!W ϐ]hټ>ͺ1dIbr`1s7>?gJ+ӰnL}.4:Ç?`u6h@]/?7ޛ븫=i LJ{SZiA1񸤳ң=͚4Żq\h#;n/D b]hㇷ^ΉFEk0b.i40aɈ^5Y'^l=ⴇct_f7ϣͦ @܎fMи:Z/R ^ůeh?WRbIwn|51׍/~0M\E.LY^=hҝB?6}J/_5hH} <4bzWÄ>4iAA26)K?~F/FlL^c90nΔY KxI/pB Ϣ7V NWFtnCy|U\JDK٦+|3zી\>([LL±ӆ6sAx9ɱ|щCv@匮N5t;Fm²v'pIE18C!A=I/dT֛ޓVc^fR0[k?08,5bBf1l]|?{qpKͷcJN?3'-:8,<}ia#/ Uh;Sp`?,{:fF)wz;ai%7v j6Ϧ  "xq7Js)HѬܡu)]eqʷ>n69j8_Ӈ}'tvۉOYךsW!dG$B?޵yttmrm%Q9UYbW%թӿnΚt퇺ţe޴ 4'p k^>N:r߿ь)C34? wsvf:QbJ_%gk8|,i7ʹ.xiޫmOjBgXt*ۚ7ۻq&$) G{SQ=UI[%m'33YjڤXj/j 1. Jd̹l~դ&ce_*#HB)FԡNyKbbԧorIv>uMV/ԥa"XörCEI }5cɝ!X/;cea q-YT'< R#A,puG_]j=K=VVcIH>y53jkfvl֢[YΦ B#[ Jzb4/ʁ'IH--iҤ,wBZ^TuD֧l=pD]JBrxdAXƱzR]k):ag]$=k7E-DKz48xMiM;9}7K T-kM_Ry=:i8yң-b=;R~nRuQ֔\TR6FYO񑗓$5KT]]R#ˆxp|!'^̦y51AMQ9!Kxx" T%_k|u*()\6xˎy_g^q+iB!I S##h7CH3ф/Qùs Wیbip0[::ICHѬvVq@Ltxt!c^NepH^R cʉU#n{-T=/ퟴPz+PTrݜ!<=Sh$q-'Ģ;|g9e.1%>S625G.bU] } t'{;""lQJ\,"pŝ1mΪ1`~~§`5m >v9ΞCEh%,c *٠9uAoS\ؚ4wRѻFXýs,rS l -gٹnĥU3hq_wkVzzW^0%7v}]įrA;<~L <ȱé'OpjnKlt~`d|4[|F{|v7 EEpuқ+9|8}z{.|.{_~Oֱ~n*|yξ񺻉o@Ca~{4c갴&RbHeP0yr7f$VD"YO⯉4~2ͳۿf8L$^f|n)Ѣ3qPtaF߸i@tz+ Yye:%droEGH$n&ٗ{1_p,VC)לUO-mg| -|f<+z|8Jlt,e^xp5$rzZn6G+[N49Ҩ}#t1ǿ[eЊNNLR]#$ܹPL@TeL7w$iI6(9ˉzLersfΧ|^Lêf{ZY^Ե95&.+pqF9C<*V a,tKګ)ɤ0n"62E3wGph$uؑ ̫/k"em!%kT-r=tօ-q8v36S/=g2; c wf.Tns>+G>sa)խ͝y<6+&sZ M/B븋5]ͧ3?қJub6ma67oi6m0ni>=iIC )p<=ܱ'\4}@-ť?t=?$vzz",={w$U_jNKWráb~q!G.E !B! 4IzB!$=B B燜$=B %..>B6S'?d ϐ%KrU*+}~#)굫*Y2Cy.I#G.'9!ONΖR%KPH~\G!1ɏB!rOB!@G!BQI#B!($B!Bh!B! 4IzB!$=B!BM!B!D&IB!@W\xX4U{tUVP!BA|r%\\\hP^L&._ŋY8B!B! ޖObbcX|^O 剉#B!`'hD O:^pB!OZl]<zWpCNB"IOAŰy5k{Q SOwBߡsSҫo?Z"%(~{BS-p8)D~֊u26{M{S>>żt5kgBQ==5cyZfv B';/|?UP6-ëEti/kŕ%#6p; ğwNLA9G_7yՊ2N9)U(yf+{#UB<ϤRz#wvf6EXt~ '⋘52^΄gH.l f$1aה7߂ƾ~uȔIԛkh4]Ԉ67喚\O<}m_[z^ٸtMImK|83_<|hP>u<|G$d[v1s&K4,WǑlirL G:LaGX2~Mi։?[Ϲ1ƼԮE}Gj{3Sus@? s3̶x7oC F뷚295<}ˣ F f݅>~xEx'4vǣ!؆mi:z5?NyMմC!<=\?EIgӥ'ݗ)Lr ͺB>4`ܡtnt4Ww}y{cdڅ#fՌS ӯ~~->"R5\3Dƚ4ӓu=i僧O_dX$_`ݘtiMio"[$ˑ}iMt}9K ЊA_neΠ4k&ՠYn],1uͨ6}5k>Q eͩ_Q\kQSۂXD% 1lr  Ņ. 9y'wx6^Q=15n;&e&b;rgiݾ)Z9gSP%LO+9='IƔԟĦ}ٿ5lep'<rJ"շd.tC odZ[|> P5b7Gl@{1nXQ>ְ̼y>& e.БZڃRŻ8 aPԅ?eQj{%v:Μ /1qs~B8s3z=~.0pbc0eF!0x/Fı~{l5G 洶iÒΔM 8 Gv};ӖPocwUzVa]G~ʸJ;: K7Ϙf_N}¦eئ:6&rv.>BCR'vcӦ?]*ڢ`Kn4bqJ{ꅺ4,_ tVnH]h"T@O*(^X@b\+.Y4ʘG77tή2uKaP ԇLf2F<5ԫ Zoyf :2~ ŏl%8*Z }5e۾@9,W# V$uXY[aL%!\VӳY u: m͛8tx-WdgA j~o쉣뽩ŞޤȶOQ8Z[Zٳ NTͬPa )/JCʤܻAԫ V~PV}q^(fVw9\ IDATX0 IW :r'S~yԈ@f/MP&ˏՓǐ8 ]:6WQLcM+2*I=Kd+RRGJ-V# ֵ;ЊtIB,rOHM 2ڈkW/bK;s#:q ߫ʇckc1ފJXuL^w׃zm&Kth2x,7("!S||Grs4[^KZĐ?iWl+֮fU(olVo9f~l/570_ydSЕ=3 ]pJ#,԰Pu.9籥S(¶1}y>Iz4Կع [56w.p!K=~ 9 CXܩޯz#EykmaH:oNMqcuxt!cC4fIj8wYã]=iulR#XOd{,l![-1kj]E_zXu_qt!!{IYYKczثFp7\!x^G\̻?;>{v]jK%[-N I9Ct @(!rBpCNsBz5Mq-[m~Hk3+Yx豳3ߙ{?ߙ]/|xr[We7+/7Fm9h{nSS_T-uЮyU>6<ܦoFo/>Oc\E(ehW+'щ_1D_?LGǗ>u8&EO9w+sSTW?e+CeAD%PZ0X:B> WTvЧbj(Ҹ0[ܝ0dȔ/=]nF#k>4'*aϴj:q~:̶}zgR0n{h߯HS'^}!xX2clۦ;?N:snjwOhsc{hӏaӓ7)"ƨkR?W) _v{fbb:Fu֌ 5TIԶGϾhb?zNe0e{3;[WuC:tŢcF7klOΡ &閛oOޢfͺ[?˃_7~DդtnO}ķoRU+ү]KTZSV}nެh1d(gz{\߹zxD%Su#Ư=a~ҹw+tL"{j6M#4_OKu 13fhO+yhOoԗЉ>BnG\[oTvٲhT%WrGs5'$o>fhN=[HR/?0I:wuΌyYpL_~Jcƭ|t4TzX_D>)èyu~:K@~Tzp_=߿GdkxqSW鮐 +ZCi_ ZV~:ngm*R: ω SߺyF#_JqiGTw{\}Czgֱ[rIiwt{_tͶc W֯~C\? K"~tr +~y;Y~Oˑ!9߯ėTq͚_h_CW_yTg+N'^џ^P]}ӶE(ծzn isQ,ӆ$gyfy,O~^Dmϭ1h:?#ZX׏Mӻfyn_f]'y .FڹkѤIFsnrE<0HBb0 5ĉ}{v-3(kSA~&NϭÅWy>qmiMpr&\4Oc|B >}@7+kr?lnv>[b([{`<- :u}6?.FiFiFiFi6 bڪƓ tSC 򕕕9͹(z -j:լBn~ѡ$3il<<p*,WCɁnExH =PcqQ"4BO#4BO#4BO#j_^ۭ6s[x٨-'b豴n'eϪz]Z~fv6vfL G+7jCjlHR^X͚;Z|Ă;I/ݡ9 v[ؠM/,UMK|Fپ6lݥמ?7\m{칍2]E3?0zm]P2-@En]VWI M>ex0ytt:mmPK(XZ*Ѵ2b'酕 ϸNJzUCZfe,JS R_Qk ] w(}evBV>_EWjJak;ksە*M)VJSU(\7?>Cf,"ln]P!_AmZY IU$}0C%gNݤdP`̪Vyp["940(! 5,;޴FcKռkF;\fOWU~vXocmU:nf+R@ٴOS G eL9cThWl˴՜EsG8DHXu?fjׯՖ'6 I,M*M ~Dui*g@jޡ˚4btT;9Sv8͜5NI qfm9SiYŪó3uґJzyiL G){ּ}LbLWVk֔2e1կyF2/5]U)Z˒7uj+zD2|bVruU/4y[ s2cIRZ* TY'~C{+gHEkVĖeZ^_isha|F^7Oz#HWN.#kTmmf̔n6Գ6{8][k]1TNQJWTMju5c2*5E3F)z`^?ZqGpB pDM9=@nWӰ,Nޢ'( S54Uql85Z;)K4ʿIfZ|Ҧ.#shQ?CZ%#CU@M5zWFu| o%\@DVkٛq K2CiҕWhR^H_NSikPShbaҍNn_khۧ5(8snȖzHʴuIQ }ٯן=h}:"2Z]6:S^'%)5u kY\ x:3|xҮey-v*wx喖xknԴqU1֨=i׫(=c[Բ۔{T 5k5:P0GWT`~^JsҜt@ӆd> Kk -6ި]X])$;FR#$_4\Ʊ znUBpXp )Vz>⩺t $e.Ԣ*mԎ˴bC[&~<:hږyyM:O9kvldk;nPͰR3[K_ߍ{1~(WIej7Sj$5!5]Eiސ*Nר"֮teҌZX9W}#t!{TJ?XE6pT]2cqmϾTS jS*Xs͔ORTRpѢL6ި͙hvEjvGf/ּ䮷fcrW)HSfa+)/ [5{5d?Tu( A'*#[`)gnќѪWSZf 6k! 0NAC2U0zFu=Չ5TF/rnHE ǔ!!uگ95<[~Ia4Pt妢b ev]Ҽ|K54Cm}}UzDoԺS#5vEgg4ed"Sk("Icڻߧs-PvqiW'߯v-嶙8uJ\[*M%U#?OG"6\y#G85dKrsIg">d<#9AUi2tUTzj1e%WPIn-Yb4YÓOCƨ(`HF@C&UI!՟4e6թPc'*'5Tէ| V!b +򫽭CZT[c$Sm d #Gq U9v2|^Kx,V9AUy2SƐP֮}EVm8:Dn?@~uUPT{$==ട9'PjG%j޿OMfR6E22.ӟpڣRCʮTa(r>t`ցS5z,ՈґÍ3lӑjhQn idSeie]TÑ((҈4F F W^m3%,OOYCP ^)sLM,N?&x|<3BhMr2O: utHY=١PPy efҬ@r]6qb^zz{g(JSv[ϮU]GHьrZTLl23-cܥLuÔ2ۍEd2$X[G6d&j]mV*I$ʬTZՇJ5XsFi^~jZ%ڤ55}I!2b:|.jvhr @4WؑS*(-o_a*3_ރ! +> ExyꨎX3r )l_آ,d_SYa^yjbi~]ú~"j_Z֐H3N&)ӄpn_6)v<H2 ZПB!Sf]ѣg*҈b2>Gjt-*Ð-Ɯ iS8]  jinWΡZ%a՚Ӱ^V(M~k([%P`AHX᎘2X/)33Ps>x*570u7}*0_3:I~Mycј Ky~S|TΩ%9rD@=)YWR!ԙuҳhթsSR_2[hv?saS6U ̎v'W/BfL搈L7K֖; 8FY]C:Ϡ`FP扰±;j;N8^Q#CEIڳ[5+l2̐|Kª{ " \0=9hU8ܼ =nJgQ1v-&wvљrB j]&uUװ3|R5^ݥrb _fxf5[7mQεӔ͔rnmS$X|:Ym=u9jNE.[2bǵ)}#5Qk֮վs52HxIe5tv5*Z\E)->(ɚUZsL.5덠F-<8jbF ٪-FFVh:^1*wET'Pl,;zZxzl4,?M5պq>2HW0#MyIy ;7١X3Y>JCOцV &>Ru;;S:t8|a6#=}tNr{jwjhRH IDATZHc15H No4wu٩e*7dUhd1mRHgE"ڨ1ѐBѠ:OZ!U+r2Nc$EXʜ6u{0E#FyXm1 7jgAeUKSɨrkɰLqmЈgݴK4eprXM'4|~akKS蜦u?sbdWhT1mZ{@NCE}ʟPtpݫz:9=WVźt|XvhxUr337rSmù 4rixnv8hk;vSvEMIrs2db?0[UQIі}0"ɯ᥊оc!5lQXBYy #joOteUTlSoJπ0զR]:mk04oAH7 LY5,ٶ}*@nV[P\S.Ҵy}kި,OCb_%5*[FNm_Cۢ)5jNFZ o:[R5OǞ$Ѻ]S>]ӕ)i͋/)==M%UQzXI¯4u^C,~m|R#{T7| 4d _E/P@Z@EU* HeT,ӷ\57ULoEcZ$_`6C56V^ڠaC^6uT4bسoidiʂg&U|&<0l.UVͭTɚ7+GSuڴN3ҕ]PQ f*`?Ke1mYo(-\L쪺j܂27nkϬVGPzv\!4/{QuJ)SB59_0^sirl J-WtzvnmTzaکZ|֧chx>-{vZ>eNЂi:RV:ULݢ+ז|Ū@,a,ܡSϮQ5۠ O)lJT)9:GF SzjG]cQEk}ֆQr i[.&s:'A UǣU%ڧFOע|Oݿ'rdoI/Uzk9֨dnߡUnT8&3 T9yrtf֜ I>Ҳ4fHt(&mE#ik҇Nq;mӛ *terJ67R?a*Ioth\Pڸ'_F)*A-'?~vg8L[N I~ˣo>tw'ڵZ0^V\zdԶzun]j4t|ZmֵӋSXW͙ uOc;Ttegԩz/UfZ-=0D䋮A4U5eUhIӹެ3Sz/?HOTX[cѮu~V,7-1>m5s2:fATv(Oc Ɯ1PfDMo `(ZS:7uD91cF( LVq32_:,Lgn1,*W&߈Yg娴2|Ez 9t{^>Kהt+`pa O#4B0p11 I& f8O::B d8}872`)+NG* <'UX?͹(z YY' QP PaA231%B(++tiFi~.7GBO?Rss@7egg t3~uowI^ܟhh߲LO.i|RӟcNIҸqcu;Sw՟|! SsK :pX;oդ)ȑ#_T[{>iJubfL[l/3zodz!qKKT:s0!}:ʱ?_w]>Gj}އ uAFpߥojO,OF}] ~+4u羠3~JK.LCdP]rЌ(L޵3ܭw\PSԌE7럿 ~0|fP>t_=}D\87}+f6cz4g.oȢV=sG[ν֦Ҟ%@ɹTGC?}N+V{V4d⍅gϮďo֝Y/}E%~$Uї9ogɎfa'PCiÏȟoTTFA5}C:d˛m5S/}`0ӟ}T gχ>~ON%STY뚉%P~ 䰗٪G7ϛhrtM5O3f_zJ6]Wп% <Ժyv^%U-ZkإgP=xB#I;vԔjI҂\Oudܹ+"ڼz4*-̵\W\9NДOViGus}w+e'+T西荦ެxTxnxZ_kvEScF-ҿ|z״g7~?*|.#.k}[KvRYO}{hCso|G>?-vI+RC/Η_\Rck?ѯ׍ԭZC[E/Dudr~2 S:7h-ҍO/))o˱%~Ji1Ճ,Mxh#_Gޮow ٯ}+#I>e8uBM}5)_9nnox\hܸڲekyNg-;vL-_'u- bjhh S|w\yVc!?vM')9ڪ[/^K/Ѣ;ZwhXPsw6^2/ӽ'ֻk}44R*՞Tm/ Wطe]|p;O|Gc}U4d>ՇO9tʜ2GciŶےv񆎏I9P3yL|A򯵧]]wCx◊ź:kYb~?]w#T=w%--}yϛzYߡkMOm\'_)ӝ>ӉjHQ} R-{}֬>9KkΟ|*V=O>C338_= 5hI?COTx;ܶ/#>> Z{F$n{nS)UN }O]l=<7Lޝ?zOpJך wu>~]}Wffyם deL/Z^}n,L-j5=Cvs"̎ڼW'SiF9JSFȧ|Fo JoN֏im;[BrDLIe:'[n#5i ^Ѵ/~7(^SG~qVznƣj^=}KM У|[PU]=Yϧ͚͛9S>mFNGs yGzÿҧɟ_E>-i-gO˕oXØ>/ݩԷ(,ָw'RN-g]!;ީL.K7/|SGSlY8;>3^yag+9Yǧi]~۲ieie=G$<^ݭt@7_˶NΚ5ktŒ˓n4MO黴;Fw;{e髚3gNJ>~JHvl#XO|Y|]Ӷ<>-s<|g7T4*=֊ӼT%'udö0Hw.w tS)?mޫ r> ԍ b\6=I/q#&~5L,?oۜrw S&z?rDD}qv=h*TM;A|įU{']*f^;ߕs _'Dֵߴm q~YOpT+vk\?YY^SCP(55K{?"٦S֓s^IMGR!nTju}^[-@7炒H4-MnIi;k"B PvVJJKzRM }lR$wSI:Sr+هlź =ം|7 U5+JG~rrt| E9=ysR:6JNiZ(究_ DhܦַxxO2i@d󕟟?M4󀉪{?ةH 9 Y^'<=: 滷%+%Kn_Hj=xe<SyBd;ʅQn q+%[Ɨb(ҏ~]YId?.).^g?,e5*ʩ? |_cdyt"'İl7j6b`d]ϓji\_wLpa 9DPXO^KIǯ3_l\hbn_RhDUYJ0Pd9-7lJ粎ϲܰ->˼t`cC[):'7n- /'V;ϝ+Bj/]-Pa}}Y|Zɏ6e~n;n Dk3:)`XO|4>췩/O牖 zU}:{uǩuBo\;ek3,I4*07B @u>twv'99)anN*=طtITHy m7zQ2kqɲbmKc{%(5<dݮmlYY[u':*n!VzdYf "NJN_'co-_#>nAiI`BReրcQA<|l󬷫Ae;JOL+4itkjkv܆٧풅!BْDr{/KRv܂P7{%z !oq~}42ث6ٕ {9zziD7 >e=r{F:զmi۾cDap@ ֻ_{Б{E'rXoB`&~=AɂOOBRJIS p >e=8Uyd{&#vw"{WO4uҸ}q*R/Ӳdi}_8]cm_lnAAl:ߩT40Ͼ^qq ; {PJTINcc?'ߧjxSq 5nݬ⯵0gRcئ-&1ۣaYn/k'Qرc6Ը}l}t^uݾZ'{t[WӾ$ۿ~3'Q5m]{.wϋD{eZ r'Jū>Nٯͱ-kqvzt!I_r nU*58Tٱ$VIo7~'sރ =` 4<ɹS$= wfV`TkvUwzv]Ój!IDC>hiq, OKtm]$douGn8Ds}zzRq[mb > d=l0{g1|In],fz/Yy,뵁f6Aq >QkЉ6t 6ϝŽ 9,m}ں>}. ptu*"牪'ɂHOK* Rx~^ t豊T -[LKg7c) 9NX9-sJzZ/OVݱ?& :*9N8UwqRl_S7Aj0-׵Wudo 6wW}o 1mǺ d_fo[!'DٹTu' *!TxoL^D?|>;Iv]_uz{O6,2*O{g/z&YJ%%:z;/QU7>m]h?IG8keǰ͗e,˝:6>٫<6ߺDNnu9Ũq:nUVwdmO;۠2С !'ټDpXϾ^󝾗Guڛ(YmNnD%CtJ-,$Z(adum}ilހޖr|O*"N!i:/}O}s?yʣ2qܦdI}K4m,s`JtvG:RcTqۆ}\fWmDUU=Y?O6S4҆dtcߓeT!>$ 7Z!^O+tDAmTj/2&%`l0:t\e[9"v`_(XZɲDۓw˙@@+2 4zf_@b6|`DBOSSs'8̱-m%jVz{Gz5ޠRU#DW"ZmmS3=Uv= ϯ#!%Wjsdjg=vnkWx{_?% NH(]l+}uȽӮ6ՌYSq]ZiYg9y$D֎y%]Ex!eUxȓuSHZ5lVxvwv2*E5}JmG{`QU\9-]=)ڶ37Y9<ѪO4@HZOMDž{BRKfoճȾ[r*ЌWcm[剡}M(nD%ge}f%h9Dl[eyVR*Wb[uYjaVvvYw6 OZ-[z_~~XW@|Je 3ULZx|ٶ δDIF:'Y Ae/k^vtqi?nÝ!eDRh}ѵRx bZ8'-7$Ej fCjS'Pq's;UȫqgU]Qagz Xa S+&=™឴~jXqNX1|"잶^<Ŋ~zb\`tyLٽaqU|Պ^wpJ,yFӡ}?фsy3yi IENDB`qstardict/docs/ru_RU/images/settings-start-with-system.png000066400000000000000000002077051453553600400243210ustar00rootroot00000000000000PNG  IHDR=H pHYs+ IDATxwxS9IݥlPd( ETn-PQD2Ep "O'.d)"tё(4L^I99yr6ϝsJFM7-""""%nB1Tc$""""Nuu DDDD;Cѡ?Ԟ/L! [8IDDDDjF8plSյNxM=vEDDD$|T3.t֫9ԅc%""""uKuZjkG][HUZj[羪[ێH*ԚS:p|&*Mʨ v؆[{DDDDAuګ=D pEVϭ"^DDDDFEAu>FXpxcuB%""""I8v':vW(EDDDjp :m+u"K9N8DDDD$|Tv M8S':mCe>*؊HRo}eFOMwU9u GDDDDD*; 3Us >5j)O +k""""^\`SY+҆ʾOTfB@SY*&GTT48UW |vu"A2BQYWHuwk*x.+oЩ~tHW]R;[0S:;Uxv*#g^!GDDD$Tw &"e /̬ &UrSYɩEDDDuUu~KyEeTչ}-KwP +""""uOB Cօ҆ ?>TT͡`.C*z)&i)or~jSe6@ՔPJu7}g}UWDDD)h 1U}@(vnWŐP9E(z3 v"""";-, J]/O+Rѡn)xv| G޶-FDDDD*GyMy+, p>t詎Jt 99(mY'""""+I-%h @>&D'@.m#vo(zDDDDOeLnPN0!W)BTv75RS]'ؐﶿ[)P(4ȡ2:ҡNNPc(P 6._}O8P*,sN݇ Ծ@VQ)t|m=m-u[yO=UxB Mz,om6[y=""""ի\羍ټmLn &lrݗj >Q5+O v8LBkT~DDDD@`Po5<8\\Wضdlgx\v8JuWzB]̐` L/ۇzy RRAHDDD%1Ay/9:ކy.Xk:ԭVB <v!:̲?""""RZENsb<:7}Z('j܇m*:N@ý*x<u-3v, #"""R~V B <Lc{o>֕7ZzzX['PB>-__8m(ނY#"""R~鈇Z+x\k_7v!TE':ۏjUy*Zl'P6K_2oȳm;x{Ty1u`*=Ï{mY0A[ۼM[:MuVDDD l'v2Jfc]*E~c[mJtoax\wk?U] l2gxqP_sUoUmW oX ̿38.,?kꫬY\6lH>+ۋߺ L.[NO3ˁvV~&9xGtt4-[dyҧOۜկ/Q`VjիХKJ_aa!è,ի}dL(,:=Kft+R\k6ao1̭RTW 4T-v-~|E)l޼3?8̙ld)$%%m6 wfCrGʕ+ln4moʼn=z(T7RXXHn~z"##;e5 1&TJi߾=|GǏ/|JϨ ;d\4:_VK 9>}[ocKJy3dlvl6J̤t4(it> O`LUzDbޜE."'7nփc޽LV4H+eYwظ+WW_~ITL4s.W\1,_|%|=аaC N<'|-[r饗믿2d\}U\sܵkE ?X-;&N_}ҥK\n&5oO=Yy1Mhy}e۷gܸ\{u^.]:{:vHƍhݪ8L~d ;wꫯ!A ۶mc?9ڵ ngŬ_+G<^^Na{J~J }< 2bH{ RyɧHmʠ;Q3ŦMW/;︓_7l`oYf-/ r z/xJR8a@R]t.|*J (+9p۾DZ+>5Ytn6Uxs?o4̓.l6pP܇UHD-38٬iaSGD*1pV$%%0u4^{Fy#ZdΜ10͡qF\|lذcư`cF+FƖ-[v06kiʚkLxlP6_j˶x/^{O |>ޮ*{5wcc&v6y=&0Q_ӾY lMDďUVs嗗Jmӱc8ٹs'[meƍvۭKF>fƍ9OL~Xt)}իװr*8g;eeR뺔r87f)W\yϚM^^֫WΝ;aو1ǰc玃M JBBJV־2˿;5kyCTT 4 !!DjWIJηA<|V)3! ^p`y>^بy0:0kHz_`myJ~lszLx6'i0 y h"c80ĜPPPdޛYO8NUXFz 1KTThݴjݺF gR6>?f|^fo{Yk/`ҳr8LL'==t:4p˱]2y =<9~ g0 v\ߤISL=K޵,i_TJvq>2RIcFhK&)𼄲/V@xV WBV|@o*;T1 vpj@E89]<2Wc3n3o$'ql[ol2ƌ~S\Dnnjx7tپc'WTRSؽ{wva=$nty9r$NJ~*fx99s.|tYi_+]v-qF 4ut:12&U? ۾.q2+6oWV^Ujs7%Jfo{JWzLL(͈0lDh /fw#Md "AfIJJ²,/ZG0kl易7>… q:lٺEq)Я_?>s6n܈eYY3E-&&:|M21L8<|붭|Wqۭy嗳yfL¶m~GsӡC'˖/g۶m'Gu6ĄD2r_P@^^ǴoaܵkVlK ɮݻyxꩧkHMM-݉'-hbN'YYYܵ 6iEztҙ&Tjm۶ zӾ}r 竚|}}`v>pA5, [hO3 vc , Tt$+'NWa&.#~~<׎O n7^t=8HBbG\yd4SMҁW``psӱظq#g@TL4/ b]t[nǞ #3M0Q֢ܱX;(2Gf3O[>L2_y{ a߾sx:.ZMƾ,bҹ @6m8Si̙q72bHꧤдi3:wxs7Ybbi۶-Æ NG< /)SW/qF rz>3nVMh R*sKI5[*gɤ@1iݯ{H9L3](o v}giD,~ybc?UW_ij.Y%_gmдآ5O\7(iŽS8/O?e3tSBːҪU+7 A ""9xhԃ)=?uۥm:x#u)\9 m 4WwxxUR1 4qz"'8` 3VLZqմ={~U`[ tm:pxeY8:v<[o\lt9ZaWln4Mԋ%֜"CDDDDDj{?N`^ &ň`ǯUz+x3z^b&Ѵiۖ6fPDDDD$gvm8[*?DuOdkZ0} ~}H]O|.U"fo 6{1|m__[\x`UEBO(Aא7mUwzMOo8gzuXϕbT2q(@{}.l2/Pwm OSz4DDDDDju?< |+y A5@ePo(׶"""""ug"ҏ*'2sHj;孨yllEDDDD:_#B A/='ԶUi<*a[*/ȡ"ءjB]ھTW -};<$-γlzW:_*Q`PN_N*"""" Sr2Pŧ<#w89i`@;dB63l-Jo:CL""R lv;I 6H0"U}w_u v޾{'[7-P &*e,Er]v&pNbf FDDAZz 6HJ8~wI CQmJ` v A63Mjn1Yj R2-w-ʮ@/ކ4 IDAT'qu .RJ !""u&HmX[SBUrSJQ8LYK0U_/uBZh?aBOv( ;"""""GD2o ]Uz }5 ڣ#""""o=o9;TE %P{*rΏ{TC*zo=v(|V)/[#""""U`jUz*:[v;P fH\s5""""".ءjޖ/@o.P`L'T9+w#L/)g_ϰg?[j ז%:GvWygGk,2Up8v/Xv"%N}(2Txr2 T%oaኍ́m9qs`#&s75όS"W1Sa2CIOn?.<|)ױyO.N{ Zv]C԰nyY^Ņaf$ )0;u';>~om2 FtB#Zw%Fz ~,_#2Hl׏kjs 쟽~09c\tUwaD@'u ;{ -pl}Y(3GTEd oL̿g,^rU^͹^ȑ*61ls\Vs_Nyp 1u {{>`87~voXȬi3xDn]Ӎ0F 9zkxg,ЂWVӍ+{\w_nF5v<دo?3UE'>{`W'l5ڮ=l3w>|T^?OVѮ=D_i/e7 .1M`zNΛt­|>c?t9 :61O .AΈxGD>k2q6\?a9|i/6ѣҾ`Sx/Y=ݹm҅~,̱pEiSfᣍyq]q[n՛G[fM{+wߖHSdؐK`:>L\#ĥOpfdci}ø[c{`rV,VۛZqѫ$7樮jWL2pQPЀ<Ň٠h'߿5DfĖ3K, 1XI NlN t-[DBf>{i_ED4%^MVߎ~ߛOTn\pU>,׮{t;OvJcɤ1w=WCнbV"% xcO䣹n.bo7x-V+x3o;kf͔aҝc_̻29W?]6;_{Kd}ڞr97]ܑ$"}[Jo%k傣7%Fr ^kN zyLc5OrC;XY|p~>1p6oɫĆEΟ1gb~U=- :$sfۯɢͺǠ+{<[d9?bҾe\s$ڵIwqbT!~2k;r׽id^Ҟ 5XZ88iw :+N\.9;pКeu|=gT:k&Ŷᑭ~{7"3f{>-,3OҰ\b||olc7q6'dγCN`eaSULq:?3qfLITD[=pz\sod;ߖ^_E]S[i,zA֝4C{?FLk1m=9+lf>}-y& ȥ_Lص9(*OeV:o_ W5iuz")'ӧS+W|vl˞/?Cxmg|X2* y,7*iD!ggΌy3n}LA9ơ&`bp,XXd~$)ygыы@>}%OI=ogĒ%xf.\xmC,i6}7O7[OŮOܿ)4cgI Z旿q N6cNMni J-d;Sx#i8wgnb$pS59fxμ֒L랗1I̘(W6\Lml xIfΘlg޴̯EoxVV!/㧽ӵ}924:<0+8ޅ[{_z_ۗqͥ9+M|c]GxhyN2~de( "!%o$ҪCkR" %ӱa8e{PFpig:x:/ְzK_+澳CfDn&t sw(VI EbF$|rsR#2Ѥb E%gev0C|񿦸v8.b%6y,V/Ӹ{C"  {#7~ڐg6Ĉli#sjuϾ߳Qo.<Dt⢳?_n&Sȹ`f/q 71hM<|6+O ꟿk ӊ:l{ql?+:pY".mEwy}C;>-0IBmMQa37f8DO伞jV1H<ok ,_ J!.[\z0bhdߺ5e? -/o{MM`C}%V5Hw-# 7Uk?EķJ4c`lHI"'+ :\8.?,NcOZ:e%Wl\Pf`+ɧ[߄Wmf9?Ǵl%r ˕CZvz$%NA\6Y.yid5A{46AZ%wwc0%fiLjQ]('qܪIllyY8({YdMQ7ޮl,fwb[AӸg:~irvwcQ$#'ǂؒebl?n>b;S*geX0I&dؗ$]r9:e~3.v|$62Liɗ\׻<4# g!9x]lY!-&[t;Wb'sg"Z\YXe?ž,qw/E6>2ry0֖X'Q`OVf$tQ1))Dc\X$Ϸyۻ(1}7 9sz(ܷsf0vCz㷍ڗ }n\_cAB7EaA}.E.o$qƻs~+k..  ȋhŹJ3m̉碿XW}ڝA^yq0;$9%~!Ͼ,'IG%@ήl\aO`ᅮuRWoeg6oŕKFf>{<]d.HX>ty AmxZs} }ڊAr{p(8 6"hݶ6AժSf+R6('j&Ʈx.2`RHMiad S1S8XY_װ {nAQף3#9$m^,t+XDbWv-Ml HYǮ<]vۨOrd}=鿟;Q2{[0IgRV%llUY]9KElkk^d&MZZxSue73Ę_h#w8oOOhIl=MncCǒlZ Cs|`a/~-3Hˋi܁v]ߠDna'Y7t7sdg"9n IJη)bY}m!;̖13oX'r Tm&Mqg F掘6̤qS8pn+,; 1!2O'>-TCbB2 m-$!)֥nA䥥p11}o:Sf2p6DeBw2L<^v)~f|"1]8^RT383];կ=~z7Xfl|.Z=0N6̈́)H?S!߳E/Yp#s}d EzZk#1NfZ'iY$$%`M狮f7y`kD&Fjn*ޱ-J>9 Q4?{co֕07:&+ie1,(N&u Þ]̯p8/:YvA=m>+_c添)`C{=9y:ujXw֚ON`ǟ1 V|:䣽IL+${|b]į_..޷3>^̯zXIW_H8IގU|RZ ֈebs.N\m+=Ξ lآb9),tblSh}~touvuk"lDz b~ptģCP KO:l_̂WsB2|wV 2pb}h{qޯZP3-'vA79n?^ƇjcLYgF0x7>|w ,E^U,2/sTYۿ`O͸6SId(lB K~=;9Sh=X. -pYGw;zF${u|e?N~[HG`l O'2}Lzt(םo%=#oɻ|)'`eht5o^5Y)l/=}^:{z儳MgPry@x,qO_i;kڕ >Ouyŷ<\k,ẛ: 5:^t4e&`"co}Q'g%lj=005-7|DŽY|,-Na@c3FL$~wѸ'C>N FK7ǚyĴ>&LHxOµ}$8ZI#(?ښp{LM#*ђﻏwbVfDz&^}c{ vZ77FMzIݹ86yK. [sM_#`<KtlsN~<r۽B.>~|լ;WymI)C䘘jK8[ysQ@Bk{<ޘ6Ew⊡ϯ>8 HhͩWE+^~6E ͺ] cq˥+_aW/cN,X:_sSx35̹S=>4QPrP*̧I<`cOyͩ {-B"I>'Wy #hs`}&sy.챍8ybj|7ޝܹOr+pL[s<\nisw_cg<6>Ar}2֏&ل~wފ㍷y|d4h͙a)G`Y"zgrh,ֺؓUw\9Ǯ,r/'UsiaE6rj}v{fcwql gQִ{47W nvņٌ,9-pr2P@^Mؓ[s]\*[t%C/y7f?[iX 4v jL\U?i ~5@EXqc7=-4nn\,/{,w_ =:~w$vZ;.[y)~N݊W߸aIOަȮ%~i%QQRO[<75tFŗO`mI 9ɭǏs&s{pQ_>t8|TSz\ʨh\'TIӓr%MħYRh>j6{U>LuDZ%O&)TP^Z&]9;yaޑ!}Rӭ[k0[!fغ;t3ɱ'Sňᰮ'D|0y/vkuٛp@vLM-""""R7Tf9l^R/BE9U{ i*6Cټ 2_* ? H5| ے!k[)suDDDDDO־"""""ak9=/yy5cVZUM0eգI$&&VCUkB] =P:VZ)tVtRw\nbrrrٺu @e~rx+BaP$ȡ)..͛cPzH#""""Rkƒ!!Q:MGDDDDD4zDDDDDNS:MGDDDDD괺5.##۶[M0fh֬II5ݜ:I dddsnZђؚn\n S4 lݶZ4WҼY3m^Mz@nn$66VFTzDDDDDNS:MGDDDDD4zDDDDDNӗ%V&u6]g6@oH RstM^|*&^VM6KDDhxH]dlR?Q"!s>room IDAT%qu`NG8W/uȌ?+ e3>:p\xxIBه[N~ŵ <6~87˩&"\[^皞tOٹn wE&]x)Ϯ; l[Qt`Hݢ#"r]vǻ_|ɗ/_GGn\ZY,:bS}qF:Y .dW_S X3cO֙1o}/S|k{.(?~qqzf.9eCL%y뉹pO-il%_DDž9DII$fڰ>֊}d[p`r)s\dlJa4 =tҲi-l@"~K"H/㍁3y~bgYͰٽw?ۿJߏY`6[o4|Bǜ'[} m_DDC+m/i4-{0H(Fkg=S0vw!G&sf 퀶{"7^ E770 1mɠpf҉ Nڀ\YR)%7?C}u ' z٬6g}=K)#?y'c{y/ShʒWpZS8A<spa<ttj ݿFM|nkmϟWu]nnmn#n_p=&Vn?HͰh(g}Ѓwf]N}%",?q݃ڮk.Awڴi;C(~dm`vݶ,+Ss}`:CzDDDDDNm""&y5Ji ="""""R)􈈈H#"""""uBi ="""""R)􈈈H#"""""uBi ="""""R)􈈈H#"""""uBin*_Y >6:%۸c4)QF6PDDDDP!OOi0}4A ]l3[L6PDDDD6ɍAHz6sz ܺ+bU=)""""RT!N!&8\U@q/oܸfpumM F8X;rcsOODDDDZ!;3'rc+:190 {T"MS,2Nwr}miXO@ԣ sٙLy'}łOy/;.+̃=ә3| T\쥴Qn}Tm8ܡcw#%+gŶ"R:ЇoW#p &?{w_pwf#Rժ*b ZU^U;ګڕR]*]TKJ%˾; WjH3ܹs3'6 bhL2XQ;hHfK:e1-B RVNf{g]|zH VJSh&h\ܱ?9ƥD*4`TtgۚTTTmxuJq-̛WӱrO6!Bwb CY2qɉ LxF]FY{]%3w"m]#^]*5̤wp~6fMh5Onfg~:KgʜĨFaXYcG8v*J7vۼ?#W6EW 2qI 5fb<TrDS釵 I0`3wZ$^M /W3-VѲ1xēyioaϥQjY!B$=,?~\d"Ӿbi4ף^>}.4ciDC%څ88©(UhD"ձ!NEF{z4үd‹|% e !cRqb7 ΪU]bj:ēжLYF>Plpþl-ֳ3ϙI'@̒"IV5.q=M !BӤ1RށsYҨ0ZWŮ=ZSb]N FP\>, +7Hf yvodPkWLӑ,Xgҵ&cp]+ +R-.LEtK&6<H{P.B!6)\Q ym:_pʻ*U y&?y yrKyf 69p9<XoX.` `}mY*,Ií( ͩYx|-Bhi7gݭY5lhV˖-9u䩀!w2M_-WM捹r>6,L~֊wd22wVL;9e !`(/:ʯM!Bsb2 ~`хL yyX(:^tT~B!$=ZǬƥ;9K<&cGq!B!)'%B!($B!Bh!B!J4IzB!%$=B!BM!B!D&IB!DYΞ]!QbdOT!! !I?rl,1zyw(B<tFB!^^r&rltVa! !!B!J4)&\x۷Tլutu<#P!BAbr%pwk^7k/Gr%G(B!D ۊI<] ^Z5I}F&B!D"IO1T87 4l쁛^}YuY9pZEμ:k7MiQ4iIٝ4" Ѭ_8 ?_|4d>{.,3gQP7>ɘ˟F}Ɯ߹B!Ľ$3pݬؓKWԺkg>dì(-ڇJE}\~eP"ztS\OR$]E`Tdާ/ulPqg&YGk[p~^ \p@T@K9:7'>yN>T#y lB&ʢMj9ƀRΞc!2z]?ccoF2~Kwʅ3lfjG=L J EumS:zMrt>;PȂyǻ,ըv.IE&߭ì[2w{9dp#*W+FKE|[ |:n*LfMh *Hz 4cy 1V|m1/Z_a![Fޒv&u.JN󸊽.?W3b|ҸTZ4-isfDB!:(qT&-qs]Xvθ֮9lʼnMQF+M=!;&~G$S6yiə}Xw_tʢ52 FwP'u-aEMC̣zNMZj&6 ߳X<^˞Xoid͞еvi /ܞg{7Erj7 vؖAeR"b]zXVlEWo1UR3nOH4`ڞ] cH9yg^"պjBO7[RVUيԨP"7Ğ}xC};MMo3um/_*QCqkl@$ZڛzPR@+ Wb&3rB!_'==%B ~/OoD6ḼSlXc1ī*z=0l !gZׁhZ q \~lʎgڮ]C./Bdi8xBƷeZ;?KV*Fl|z)X=πA< ]t킸k?9 &΍;LS%sh2emXW[v&Z4 e~Iռ%9P˥?e-,+杤OizfL#Lyʗ68b816gFmKZnY5fC,=H>2wriBl.ƥ 3r}9zB! #IOIXT9zĦYǹ4Op]3\r}enVع=CC9EBܭX4\]M_Wɡ)̫Ia'˗L'sьr{a d}x.\M)XXO>Ksv9CL(դKgO3Akj289P*6UkT%rhĪPٌG7vϦuagoF݊e53<]o1UKt ,H|8;i6&4,P# @gA7Kx7ꈳ]Q͍+msfݭ~B%=egN*BɘE#)NMJVgi,4>Du HC ?F{jGid P&$$aD%-*kctXbΜV\5.*nc]9׃̅p"&ܺuX>hcSL2&o[֥c윶wGJKʎlвnk [b䗬 T׈^t#Y֮ zz(/UpͬZǟr6.Lb._%!ϙ#Gı@^C߱rJ F`Qvmm9SBCÐt J:T:YqH-\;n#'AMkg%I^ƚʱyU !'IO c=ú ?໧d~8ZԢЮ6^;r(P\TkKѶñt8vL3w/C$a yMG^hR^ޏ>&Bk|&wxokZDz(|'GǹZʏcNPc(:U4ݎSt+fA^}یrǰJM{4 ~!YJWfHơi֌fƲt-Ԡ[v-lފNo$ٞyum|[نfnk zs$~NXĺswǤEn'*1;Gr͢{B!JM̷51\ ͪwٲe7N<0NF ɼ1wh&Fy-A _kELf2_pis޻\{;;{9D0r$vv0wUGvTG!B<AŤNgx##TѬSSG]!H>/YQT浲7P!B$IO1~; )5z?;!B! PB!BhR""=≧@m޼B!BHI4 K!@m\&BI4!B!yrOB!DaB!u!I#`k[C!BSNwE+ΰBQ(&tI!m޷%$j^T.n4ůhA6&w ?<ܽha4[6зsϐɝg#Oϸm ww7䉇8EĴ͂!]iբށkke1͏+.b@%>4p~콖H0gQP7>ɘO^iv>NpS ܅W>8KRQnn4vIčEܯ#>>~wSU|ѢyKζ_skي1irbt{^>4˯Ö$6wiuczVyݭtdqd7n--v]u G狗Og"ݛf^>4jIC{:sQ!$BG$v~h2퇏pd]JLahT43ru< w~-`Vh$7~sO`QW9e+>‰ 7 36yS/\pS'|sضIN%@|F8v/qj6^VdsfDz8Y aƔ[+f;ə'9s&{`> tWh([F:iomP  !,ls"Y8Cԫl8ꦉ,Hﹳ?ma8~Ck:y_^6qS c̃歬%o;9~̽؀w8Hđ/:Zשy+yj#q"eM| !0$=B(٪:62 玝!YK盯(5h>'y?:ZtS(XRk Dr x/n>h\_O7Ldvd[{۟I#>,+vf_uz=r#ߦ&.VuN=;=ij/<!B.֥XeVt?z2F3.euGl@q]jO*MX|nbo*QU.z 6ABɼg˨٤f89BEBGD>B m)%pn̝ K\;x5UY؅:<,^= 7qk~tᅟr@}@rv_S+:+$%$[.'+{T聻qX6]yԯOuV3-x.5-'ѕ*6θI&1IŘM\ jDkί( n (`GbW\Jiiŵ.Zq 80^>9>k(lvB"IB<"j\,qTʙ#:*=eqv$&*$VT.N(Jnhj% V55P~]b/IQIZu;-AߏFbe֦eF*V|D|q{ƪ2 [OfQZ̩ <Nށ%_Ej1]zZ^]b3?$u9Om=J-?kepJ_5:,Kbca #ӈt>:Et6hWjvnzAz}7wzܳ/ޑu>j2X>/M cSL2,BQ$BGIJLHp3y;(t$K/c tG\7ر-b,IJBsF-CerOO> ;5/[K]]:NNTF~t0ޛs浬4i80nuօo0zffP&Ȓ%}jR-.LEtK&6<H{P Pad|3RZ1v [Ԡd/XvSIV(]=' 9=0#jTrr;yK?Py/Mmsv8oySzނE헕al`9N3uϭt=uZ1b(C+ux">kjg8<'e.z_u ~x|!! oK !J&M̷51\ ͪwٲe7N<0NF ɼ1wh&Fy-O ֊wd22wߑBLړUOjB!DdxBݘF*;1,u\n]D2B$=BQ"Nv(8^E؈vf XcԎ}v4i_HCXU3?B6!B!D&IB!DG!BQI#B!($B!Bh!B!J4IzB!%$=B!BM!B!D&IB!DG!BQI#B!($B!BhU|Ƃ`Ĩ^zԳZhB!,8ct]oRx?e0qGB!% o+&?$iVJ,1̮!Ȩ\k~i(PB!HOO11as\R6>^EGdB!K'@rb/Gc)xZ";cډ{)XIM,M%!#" -O尔LG! Ic.91%q>ykYP>SE95'>Ӕά3W#BD{zI $%iSz-z9J^פ3R}6;Yzd1͟wPKAØ9䇇-:f6Gh:@&ֿA\(<:Ӱ'Ms'7w筛EĴ͂!]iբށkdccƩ;e`Z,%ze3E6xhK[`ﰬcб/-ڽʔ/.Ef]eӆ!s9ζʂ/W3{;Z4oI~kZ~(j)V¯e+ZǤMI U!o!IO1KJg,8Ą &<#.ߴU\O`˄g9;=?2,.ŤRǦ0', 铜9}[๻Fe͗aTa"OaBpOO4~cW8{:Xb|Q]=c d`^l;_$ȗiqF-뼬p \BXEp܇|WY%16$>j,7UWd#bGn}i9it9֣^vUeqlJ[V`Cڕ_IjbT2qn䂢pK *s3*51V89Ī%:@Kŭr԰S[9h͠ݳi]/5B!K|*VI5] [cطmb zw& LX#z2ؼʄJR4$yGl% #*iQ\KλEU iťYBFb1f֦e/ƇRF"Ԯ[ d8"@Ov}v=NF3K][WAxDFPZ} lw3S&gF0svfN;{S[RˏZgY2*z~mB!yw`ĜeedeIJ80yZY7~WݓMpl=qX033МQKPYw틃X8>Oe:W}͂-su~_~%ˮ.MSy/Ƈ׾潷zr-Uy[^'sg'1cA|&)SK `EA}fV:hPad|3RZ1v [Ԡd/XvSIV(]=' '*B2wQazOWkShB^ٔS10כ,4ȝL_[Ϙ9kưa*gϝN0 Vy¢ >܊O,":;< Ym<)M !Biߜw&fk԰Y.[)Q0M_-WM捹@37k"^VĔk&1罻bRA(Y<}(Y*2&mB!;SLԳaO,A5BB }B!0Gk)z ^v+(B!M㤄B!B!B!J4IzB!%$=B!BM!B!D&IB!DG!BQI#B!($B!Bh!B!J4IzB!%Eqo|?$1正W1lp=B!(!$)& g`]+3۲T8e`Oj\(B!D !ۊ FU0;Ry ~7kHRSxPܡ!„C%as\R6>^EGdBx }X98޿v"e+=VbRG6H6|*pykYP>SE9 I=)tf Bؒ{zI $%iSz-z9J^פ3ZK Oso_fdE4?PyL;ʭ% ݅6[ժ>9n'k}xݢ-oB}w&4rӋR g:ɪྴjW[?I*}/^ypx ӵ4jKMe(9;n=f oK<}1lI{{bϴٹoۮ9 Ot~c1g\+N_z({ ?8ȝFVq;q9.<¹=h1z le%[F酻 ^ y+DOe{ο?}iU|qT(qĐQxM3nG7{$ojKkq3u|x*5j7 tUxw{guC 'u+Z̫vz|skي1iyLoOv4âɹ+A1ldBFz3yB/gK~wSHυ9ܶ:gܽ'ML咽xƔT:=Y笻ə\Zs1#gYӉȫFb[i> "B'$=,)!d0/V53ru< w~-`V|4-km.[:Pg|C] K Jy<w',;߮ùyYy΁c?j^蜟ylvOW@ r0r;!9q*U0uv,d#\;Lz-v8雗e#ܯM͔L|;gNSUƣ{m#8ul.ma0N<ªI1H9`#YןR!S;H9#W`'GɌgDZC?G62&4{U N>x-a@DsN !az&'#8gw Xb|Q]=cTXW8"mìc'9s$gNdr> tWh([F:i,2jc7p0_W)lY\X3Y?5m9g!71sU6O a| uDD$磻VLXg5#SG5jSbOHD87MQ{.2W,?{b{}cs[_-`UG*Ko &Ic@SG$K&$>6H盯(5BВ5[5Qo@z 3}جyefiL,z=_DDD>៦;3د :=]p9ˑoSr~t8FZQ@׉س/}oIPPcbV"b]zXVlEWos)ˑT{J)\Q7Ldvd[{۟Ոln,,-_vU9+Ig3ze&RjA/v\8> IDAT^\1!`M1+[s'9rzM)%pnl$^Md<뵬) )WPK➵|,PtD25/ O%U%4ȻB:@r<մQ`|y0z; Wq,iV*V^GTzh26jFQt}H,S D07SR?pq9@myWlW0_+kQ N/KaP^ypޏŅϖqé[s?xp<5 x1P{X@ ܤȕo]/xp7N2ѱT*8}lGo y]ek~0okVΑVAY|/ $1zYt'EPE鑮4֤$]RIWF}vsOu1]cϥa(sCPqY!)! GL\'vxoFmKZ^GYǷL4q26,΋&;iRK7yΣw791xos@2yޭSJU#دC]B3Gj!VMs~W-RK@Z={\y[~KϠ]C*9p9\D!ē@@Y{F]v Yђ4\sVT.NpbLbOB^i+v#]χyv|gܿΉN #/}ΤXW}YV͙g@M:!oA7s K3lIUveΨW]UltYҖIvPF,>N8\S(إJLFp7~ZVEs)88©(UuTdž86E7ؼ'̨4YUvNx4q/b3/{y\qiP)gtvv賔Cײm݈~&) bZu7+ѶC >ϵp{(ʞfCalv :V˯$k5Z*qq87r/37'#1o'xzG'֕]q:: PI9hv8;i6&4.BI}|Ϭ℣7vϦu!cԘ#Q ]=0f=O_Ӿ@==^hEnfE|齚gnυZvLzg`3i_I_fvbU/~"sYyTwzr(x bR;Yu$[K>L\ҙ?D !G:yO5XKxck ֲTT ğ[ϺgCROJԭ^#qgs":i֟\FX)齢Cb?;< ogSIH't#tB K "HДQN $**(MjٝHa ip';;sܝg  bIvRҁ~vСXZ /G?za&khh^ rubٷ=^w7U-h`=ob}luXRȃd)9S 9."gFWECc8ty|&4Y=Ma]XX`<<5%%?Rmuf1c~|@εzV/ӹ-! {+U\#rRT:/Y:횗zx:@IWpmǵ**>ޟ5bH;BWJ4iTŢmZ۲w7 7aˑYG뷮B U8͊%!JRw/GHʵlޏVnX^b~}(:Y`0kIQܾŃVŹPHN`/8XW(ڨ9/_Ȓ)&W&p.zlW9L֌KS>_aHe3z um{BwHO3щfF3Q_ӨTaY9E`%̞* CQdSƔ%Q[:;/:etKyY^N'۷m|G^Rd8&&JԡQ:}Ey9{Xo4&kJy͘.%ޚ&tA2p{#gTTa *5ɍ}iq!Cu:LHr `˃0y׊ &,̨)GN)BImPD z~<ˀ! ^pnISMI&tSb~1Yѥٌ%4"w˷Xqճ{3 Ȋ =29]ƌZ}ꦔʔ]ZNhSc3YVIZU Y}ys? 'd5/t {Bz1{Ms̏n%:RGZU̦-̦f-ͦ--ͧ'M2iȐ!Vg ?rz!bPadKoؑכM)q>O~\#~E,n~>88-/dUg\uy] +4˼1gZ•9G'ubEʼfɿQB|$IO>q14"q}~4XP{8V|ϿZ*i /5_E!DA'㤄B!$=B!BM!B!D&IB!@G!BQI#B!($B!Bh!B! 4IzB!E~ i $&&b2;!Gz .:.yH#"_$$$`0prtDQd`SUp;-#"_$&&bog' ⹠( vv$&&w(%B/L&$ERZ1[ vDEfݿ˟MT+ċߠj,#=r$ EQ :tקN+ : vJMkIA~%+,{Ջ~x4ƣoFܶxY3ppB . P#CL8 ŽdD/ӬsqYJQc^hҌ&mɷv?M-qXw=5 -ro{4o?Liښ[tv>]x}韏=2Ƽmt,k)Ь; ..^ɤwzѶ?[uO\b倎 \sd@WP =$V~ѵ^^ԩӀz }jʠZ_v4k҄fց0?$90rjF;y㇗G $ 21'ۧ9m^|iu{WL[7WAF^ ȷ7.mz=}ϐ:|ucҥMk7UlnȲޤր:ݗAUoGM9AJz47;ȷ)-;<mh׈zV^7\Y՟u0d 73{m۾샑+mz0|1o5k>酪l~9=>"АS ϐ]hټ>ͺ1dIb4kOOOj>} r88ʜA]iָ11cMCm"JQóGKٳ׉3rٜ^PUSO2111:}UnIxfHHLXO7rpF5ÿKTBy|!?1wjj<»MgLW*G#P <@t3|ǰɁDdn7q+c^~̜hhĄb~!NZtqnYx &&+~huiLC։ԽE{ U#(fzh#=xYA:5㡃 Nk \̱#{1%v?nfoщCv@]8qn q8x#W<ܯXq^0S6(73E=lAu|P8s>ʃWp `Mc䶽cvkąfز(Z= 'dfic4k2lvL6~]Oɜ]4ix0맟ֶ%;d)2\]sXrÙY|?~ Ne=i;%`?k/(w*ޕ!9vp sc`ʌZC`^6,ñcY{%$ގù;%q͝dz]ijVuǪpi[EcMRʕ*qҥ,.^DJ"Gyal-Bk״-L 4y7¹ި_vq1S֣F2{m 2wT6ꅺ4,_ tVnH]h"rHNGSntPK}ޤ{իEOCK$7JZtnN.B<ZcOzSJ1BPs!W(hB}(euc^_ڈS~WzZ]{UplmWa$Ʈ(nf=/JbiDFk``"‰L>WZEz)h 1 DFqEC]%- %XJK8G5j =ƚeQX MampXRgԏ,޼=Uo#$!l%TG͡:ZլYR݉i{SW'/f{v4qk,VzGYI8*!V[Q$.h BbE\ħկ12S)Y?-W|inס 3Ta/ٷ89Q'*EׯDߺC|r gC^2aMt~@!EO*U$yIPqu&4Қ6j8wYj %mW=)zV M^}3" &~JE+лpD R[njX(:|M_N.82`T?6('Ȱ4fgkR!ۛ5NۄÀPL\Uǹ[r R0-nӆF?r +ڔ@,xʽ}3t6>,ד8Άe?ecYt{2ȊK>fQ͟@-G=Us1wdu<;\x:~Pi?#mߘHּ._"|.(Ǎʞz>d SYқVћߧ.@HGd125<'_:[yp,5;[qu^=:BXh4n.ɼ;wݢaB(¶1}ymϲ*Ai{\ G#ukR" E8&=VRVpj1ݢĘdbٝ|M}( Wq𷇁_ |Ns9nETĹd=BgCz۹sx%IxQxvm9r-gcLsi vҮ~!PgT)O`ia~asZOK Jtzo>Fx hI7صlw= B U8͊%!JRw/Gۿf8L$^f}ǝiԨt6Z#|Bz:* dg*U/A!g>5#ʌsQue;֬9QZ.ȎJlt,e^xp5y:`π@nnox2-lfx!;@V`&8?e-U_ HFއCвų/w֌gUo+Gw?b$jVrU@#jl4u]6'hDuMVW㕾8h&?]"EH& LOi +g@fSTE T/kȓ9>h_ `hҨx|I$&p J9P3KXsV8əYZa@|F^6!9::RF jԨ! 3LzzVT0q_br’8VmyC*OV1FmF5ocV4@_.voʆ"H-(/ٞV?ׯ#u!,cØBH#Ek~LVxv>C(Vxu[L-=nY7^̢WQt,[ŒioqR(zy %oM?gp;tLy:COe|^^ m<pYPIMnK aDzˇGKƣGöx n;湢H)*ʥAQ4u<+-YB9:8w"yZj^e|:#[U⹎i i|KisKIL2dHg ?r!i٢9z}v L&vH{ IDATO3tjSciҲXӟyR86#3gqh5So3ppB[>w_w޹snnbBݣDY4'OѠ~H_Ny*s…wǍ30=L@JiUiSڴu&_3?ײydltvy}2-8:8pUL6;&W!?@ !(dx[>Z /^իhyU:EU Qʶwt)ȢrGF MK !Ykkkj|9BQ\j,׋աm']%cvggȀY! oB!Bh!B! 4IzB!$=B!^G!DAtH#"_.\I|UUOHpsI~M!D#!!蘘'eB_)\0vvvsI!Baoo}~"mB!BM!B!D&IB!@G!BQI#B!($B!Bh!B! 4?=B񌉉;$$$w(B!N-%K!y.I#ϐ#VN!(@r*$>@ !3;TPN!(`Brܺ}'Cy.I#ϐIx ]!B! 4IzB!$=B!BM!B!D&IB!@G!BQI#1ŒV͘p<%#B!rdBsl>ym-O:;. >s)0Czყ? $6M"ruFNhG=O_}h@QۍJ̙|ү~ҸM?F8Ix4獗|iу!W ϐ]hټ>ͺ1dIbr`1s7>?gJ+ӰnL}.4:Ç?`u6h@]/?7ޛ븫=i LJ{SZiA1񸤳ң=͚4Żq\h#;n/D b]hㇷ^ΉFEk0b.i40aɈ^5Y'^l=ⴇct_f7ϣͦ @܎fMи:Z/R ^ůeh?WRbIwn|51׍/~0M\E.LY^=hҝB?6}J/_5hH} <4bzWÄ>4iAA26)K?~F/FlL^c90nΔY KxI/pB Ϣ7V NWFtnCy|U\JDK٦+|3zી\>([LL±ӆ6sAx9ɱ|щCv@匮N5t;Fm²v'pIE18C!A=I/dT֛ޓVc^fR0[k?08,5bBf1l]|?{qpKͷcJN?3'-:8,<}ia#/ Uh;Sp`?,{:fF)wz;ai%7v j6Ϧ  "xq7Js)HѬܡu)]eqʷ>n69j8_Ӈ}'tvۉOYךsW!dG$B?޵yttmrm%Q9UYbW%թӿnΚt퇺ţe޴ 4'p k^>N:r߿ь)C34? wsvf:QbJ_%gk8|,i7ʹ.xiޫmOjBgXt*ۚ7ۻq&$) G{SQ=UI[%m'33YjڤXj/j 1. Jd̹l~դ&ce_*#HB)FԡNyKbbԧorIv>uMV/ԥa"XörCEI }5cɝ!X/;cea q-YT'< R#A,puG_]j=K=VVcIH>y53jkfvl֢[YΦ B#[ Jzb4/ʁ'IH--iҤ,wBZ^TuD֧l=pD]JBrxdAXƱzR]k):ag]$=k7E-DKz48xMiM;9}7K T-kM_Ry=:i8yң-b=;R~nRuQ֔\TR6FYO񑗓$5KT]]R#ˆxp|!'^̦y51AMQ9!Kxx" T%_k|u*()\6xˎy_g^q+iB!I S##h7CH3ф/Qùs Wیbip0[::ICHѬvVq@Ltxt!c^NepH^R cʉU#n{-T=/ퟴPz+PTrݜ!<=Sh$q-'Ģ;|g9e.1%>S625G.bU] } t'{;""lQJ\,"pŝ1mΪ1`~~§`5m >v9ΞCEh%,c *٠9uAoS\ؚ4wRѻFXýs,rS l -gٹnĥU3hq_wkVzzW^0%7v}]įrA;<~L <ȱé'OpjnKlt~`d|4[|F{|v7 EEpuқ+9|8}z{.|.{_~Oֱ~n*|yξ񺻉o@Ca~{4c갴&RbHeP0yr7f$VD"YO⯉4~2ͳۿf8L$^f|n)Ѣ3qPtaF߸i@tz+ Yye:%droEGH$n&ٗ{1_p,VC)לUO-mg| -|f<+z|8Jlt,e^xp5$rzZn6G+[N49Ҩ}#t1ǿ[eЊNNLR]#$ܹPL@TeL7w$iI6(9ˉzLersfΧ|^Lêf{ZY^Ե95&.+pqF9C<*V a,tKګ)ɤ0n"62E3wGph$uؑ ̫/k"em!%kT-r=tօ-q8v36S/=g2; c wf.Tns>+G>sa)խ͝y<6+&sZ M/B븋5]ͧ3?қJub6ma67oi6m0ni>=iIC )p<=ܱ'\4}@-ť?t=?$vzz",={w$U_jNKWráb~q!G.E !B! 4IzB!$=B B燜$=B %..>B6S'?d ϐ%KrU*+}~#)굫*Y2Cy.I#G.'9!ONΖR%KPH~\G!1ɏB!rOB!@G!BQI#B!($B!Bh!B! 4IzB!$=B!BM!B!D&IB!@W\xX4U{tUVP!BA|r%\\\hP^L&._ŋY8B!B! ޖObbcX|^O 剉#B!`'hD O:^pB!OZl]<zWpCNB"IOAŰy5k{Q SOwBߡsSҫo?Z"%(~{BS-p8)D~֊u26{M{S>>żt5kgBQ==5cyZfv B';/|?UP6-ëEti/kŕ%#6p; ğwNLA9G_7yՊ2N9)U(yf+{#UB<ϤRz#wvf6EXt~ '⋘52^΄gH.l f$1aה7߂ƾ~uȔIԛkh4]Ԉ67喚\O<}m_[z^ٸtMImK|83_<|hP>u<|G$d[v1s&K4,WǑlirL G:LaGX2~Mi։?[Ϲ1ƼԮE}Gj{3Sus@? s3̶x7oC F뷚295<}ˣ F f݅>~xEx'4vǣ!؆mi:z5?NyMմC!<=\?EIgӥ'ݗ)Lr ͺB>4`ܡtnt4Ww}y{cdڅ#fՌS ӯ~~->"R5\3Dƚ4ӓu=i僧O_dX$_`ݘtiMio"[$ˑ}iMt}9K ЊA_neΠ4k&ՠYn],1uͨ6}5k>Q eͩ_Q\kQSۂXD% 1lr  Ņ. 9y'wx6^Q=15n;&e&b;rgiݾ)Z9gSP%LO+9='IƔԟĦ}ٿ5lep'<rJ"շd.tC odZ[|> P5b7Gl@{1nXQ>ְ̼y>& e.БZڃRŻ8 aPԅ?eQj{%v:Μ /1qs~B8s3z=~.0pbc0eF!0x/Fı~{l5G 洶iÒΔM 8 Gv};ӖPocwUzVa]G~ʸJ;: K7Ϙf_N}¦eئ:6&rv.>BCR'vcӦ?]*ڢ`Kn4bqJ{ꅺ4,_ tVnH]h"T@O*(^X@b\+.Y4ʘG77tή2uKaP ԇLf2F<5ԫ Zoyf :2~ ŏl%8*Z }5e۾@9,W# V$uXY[aL%!\VӳY u: m͛8tx-WdgA j~o쉣뽩ŞޤȶOQ8Z[Zٳ NTͬPa )/JCʤܻAԫ V~PV}q^(fVw | IDAT9X0 IW :r'S~yԈ@f/MP&ˏՓǐ8 ]:6WQLcM+2*I=Kd+RRGJ-V# ֵ;ЊtIB,rOHM 2ڈkW/bK;s#:q ߫ʇckc1ފJXuL^w׃zm&Kth2x,7("!S||Grs4[^KZĐ?iWl+֮fU(olVo9f~l/570_ydSЕ=3 ]pJ#,԰Pu.9籥S(¶1}y>Iz4Կع [56w.p!K=~ 9 CXܩޯz#EykmaH:oNMqcuxt!cC4fIj8wYã]=iulR#XOd{,l![-1kj]E_zXu_qt!!{IYYKczثFp7\!x^G\̻?;>{v]jK%[-N$Ρ\:@ ZB9!!ph'p9\j!=qʖ-wV6?Gݕ,Y|<ٙH .֣6htY`ͺ>E=Kzr9Z۔#35:~UK*'k{tsO O-[w=rSzWxz.JՊ =E1Etbo O:k{~OEIjiYJm|P-QI2 *-֬f'C>'2=X{;4z2 )te=V*w'1 2KO[Ț~M~}ɽJpc3mZNܬ_b%mٟTF-)L-Z__lԉ~?Fߡ]<ϾshCftgީQv_{nMSm{ ;rrT~Myq6;lC{zf6E7T?ZbMGJ<7 }Ko=cVSLR]GwԨ5՚QTߝsf54*8ICC G_Ft;L{̅u~8]$>.}"QZrG4sh߯ q妡zӪ*aYO{:׍ѯv5/ݨ[>m9=TkՊnגvUߪ[7/.Z o(Yxw?QzT#Hu@vek>{X~o+'ftq !o鞚MSF/SR,CLES5`ke(Z,S{*8t>O/&6]l313rtTtއV}yL7ckPr4z?^-_Y,)vTu`FP{yR@:gFCj|8/M{^?^V{.Cw&' VKqƭ|t4TzX_D>)èyu~:K@~Tzp_=߿GdkxqSW鮐 +ZCi_ ZV~:ngm*R: ω SߺyF#_JqiGTw{\}Czgֱ[rIiwt{_tͶc W֯~C\? K"tr +~y;Y~Oˑ!9߯ėTq͚_h_CW_yTg+N'^џ^P]}ӶE(ծzn isQ,ӆ$gyfy,O~^Dmϭ1h:?#ZX׏Mӻfyn_f]'y .FڹkѤIFsnrE<0HBb0 5ĉ}{v-3(kSA~&NϭÅWy>qmiMpr&\4Oc|B >}@7+kr?lnv>[b([{`<- :u}6?.FiFiFiFi6 bڪƓ tSC 򕕕9͹(z -j:լBn~ѡ$3il<<p*,WCɁnExH =PcqQ"4BO#4BO#4BO#j_^ۭ6s[x٨-'b豴n'eϪz-L?3;r\_~];3%i \ q!5Edg)df>bߤPG]H-lЦTsnDl_ck*(Gf^-{nihLO8 .A!c[ש6n {C]K 5ɧl#;Oud%c{uSl[ma5t(5u֜B 5Qc(&L5Us^̽\5AT=@Vݟɓ @|c;qn7+K4UUoOMFݲ@#$EmנO0Zy]f-}~ZF-ҍJSHGŠrM)#vB^X4W;5OoV4:-5zҥpG_k'h5]|vc?]Ҕ"{િk4|QŚyS똎^ 3d"2Ԧ5UС$QEGi 3TrV`MZN  Fhʬjg )3L ?PòM;M/n9TͻXkDi5itUwnm}f>֦?[kƸ"$Mn>ծpPV͞3FV_L[͉ZeYTlֆj0U<YGKtcECڸlV]KH)+Dv荗6kwE& jPq^[Y{F\/m㻆iu5/:ٛ+T㟬%S*x%A;k >'}j ,te UsU4ռk^޸Cæ8Ŗ eWWh zKeYjkRP%.tTizكwP#!ӯե:|Rb:ZQ%e0ʨc;Ç7-:]ga2jr/ro-6n 6g0-zul˛Zbr!f\F ʛJl߯KWicUS.##_hڐlGarm_~E Oc$;BMe۠Vu^(ߪ 'KUnHzViOuyLW߷$-u_?WhvXrt2ְ&.VqF+/׶+{H6oѴ}6^g ïXtjjPZNnDÍD1J*TqU'(֨ Z/zLT1wFev+xfL=gBѽKFޣTTz-ݰQC^6h{"M-8Ox+jVK4S>IQIuj>G3ڴz6g^DrҚʙ_#MԲoհhSm8) lYyS4cdd NGsF2_Oi$T\A4|8 HWiԩhW'6֦PP0+Q!)Q(SzFqh֤l%iҸB5PY#3uY/wJIJ/U5RNTL=$Ei~ϵCť]|KKѮf)ErsmU4T>H2tpq<|&֤-Yq6;&eddFB GoU0UT5R'uŔ3Z\1C%gҊm:d O> ! 0V%TҔTBXL*2SNtVU24[id5ȯ[l([k}SΫRۿnL+qچ/_,p]+TءIFzN.:㱈WZUːOCkBY:[M_xdVTAeR{{'~VBu=dy>5VjKET˸Lv2mjJRH{)Ryʑʪ߫PwЁrXNk! /T#JG7*TvMG׫=*_ Gg=LKgityP GN(8$J#rdi*1\yMGt͔d(p>I>e )VvCi0zm\W̉358` ޢu 44:?d*!effCAeZ62SC{X_fKZIwĉ-z #*M>sM^o=Vu!E35kq2uC̴qҳ2ѮSʰn7U() 4"ːVcmUKؐaDfjx*ve{X T$=^d(RkU*հcyukhh&dȈT١˟~5hƟ^!cGNHϿ}|M{47rn橣:b5}a[mOfi zuet : jo~Qk#[C"9e8LM:}־ڤ4" HS0hC2C LvuDj OxƢ2K#Tm C Ds&whScLt'("$m|Dc.UTӾ:9l^r?uZg&(R*6Tc.aNA> 3U1MGvƍiʙ_y \CESm2ӕKW0WN\]2&7lim:V90`l٣-P>MX-Zi LQ) S ooԑ6ܩ#a(\Evk&EL 7Tk$}Eԡ:aJfXkYʡ~lUݾ(.Lg E>Of[7:ÈaI",԰=^עX!mqB#OnLK߈)b 0']L^ mmZ86onґP KT:LoQMSʬe2S!s 4$3DtfZ*kciPf( =Gj[5rfKej"?NSaQټGߎhI: ٪D;t%* IDATI!j=^#-jdF;ԸV#*8Ѩu;tff,ߐWyǴ}KZ"HkNdFC E/>k9c`2CT=w̷Wk˱8I9Oc%*s^*ڨUp{wa$3ܨ5e W/M%eۮ'2SDZUs(C#Fiw.mӔima5hT[7b .NQs2Tω]QǴieV: )B-u7X?^]Xh< ff*'o( kۧچs i qTѮvJMkɓ튚AdȈNaRm}-`HEEJ_Kۡ}'CBj>٢LBa0$3G2ʪVu m\s aMZ4mk04oAH7 LYK4,ٶ}*@nV[P\S.Ҵy}kި,OCb_%5*[FNm_Cۢ)5jNFZ o:[R5OǞ$Ѻ]S>]ӕ)i͋/)==M%UQzXI¯4u^C,~m|R#{T7| 4d _E/P@Z@EU* HeT,ӷ\57ULoEcZ$_`6C56V^ڠaC^6uT4bسoidiʂg&U|&<0lM٪ _ֈ*od͛ة:m~XŠ.(ըUet}ҘEWi &vU]r5n\gV#j(=Hcf.P MpX뗽t甩rD/ǴtF b?Ox+:=C;6t =0tjzh-91J4~kèb]̌4-9*QȒCSR@Ekg9Wupͷ¤rFoh`dki2ЪW7*?xټCx\n<.ZԪrDn3|`sGE cRUԪk4$\o̙)?^xPR'Hϭ1h:?+Zǘ|ll6]~N}uTu3g*tmm;1UHce(lE70SQ) Z:1Ojah &IJ+ָ/cE^P BRMcoʬrTZs "M{Atqq=qH/k00Rzxb^ $@`utt t3'!2b0@ p H#xat*,\= LI e( _Yݘy:4BO#4BO?{#dgge HssAyyԩ\ r-;Pn'zAaA$io>P;0rO Nkzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzxzz0n@==斁n.b-f\PaTW_"ܢu*V6Mzz ??_goZ[[5L +S^^@7B5=<=== Y}*iΣzM@7炒!|P}?SbWO'DS #--MY9R$Ǻ] -1 ޲tQn7ṯHts.(ᨖ8; WOb?oyjwB!mѾ}U5jq ix[_ $XN酌tڒxQ'L R  x˾ӧ앞(̉Wk8F9F"9 }14 =X+=}u. /~` ='{P>` =zS}'O$gT}zzEՇ 1l )H'>~uowI^ܟhh߲LO.i|RӟcNIҸqcu;Sw՟|! SsK :pX;oդ)ȑ#_T[{>iJubfL[l/3zodz!qKKT:s0!}:ʱ?_w]6Gj}އ uAFp"}7ugz''z.i?Εis_u{?/TCdP]qe_=3Qkg6mӓ߹[rNo?z`<֗͠}zrSMR-! p8o~3s_VfmNi=?Ϟ]?ŭzꉷ{Mk?=c'|RO9Xrϧ{[XT㓉7ڮ}C?&?~JW/׫}Xwf=w4ޒ?VqF_9';֛104B=| f ?"Z%k|XϯRAfP~; =?됭/omӓ_LėO'>Q-\0_?ޣ3u >?9L5>Sg>k&('#C3t^g:6jk*}SYj;`e]_LѮWYYC4HRYH &mKZX;h[ӱK|3z3zāGvة)ՒڹsW-Ey:iUZkirWѡ)W Vh[)OWKM]?Y]3L5>Q?;3+o튦>Zkin_@/U({\FB]P Ӄ祲>@CuvѮ>)e|~ [TW\^/P:ӡ~_[?|y| _V+e>Hu*Io[՟^>!SRtc) ծ}A>wϖϗiU~EL-j|PK4>q* &~_Trڛ6%zhIRG{q=/(g$' 59c'Ԥ|;Ayqmn]qj˖9͛h1 W~ANٷ,Q+LqvYO5-bthn]r-Zr#muCK 5g~jU Y[=ҝg럾GSIC/RIeJ`}u}[uNoSwD;m[EC3_}XO)s4aVl- io9c 5/Z{5u;'~X{+Vu;l)MsgJ_r{؋җwh9*O75ez2y3h_ejk/ղחjimr}srYUeעЪGwh~?K=Q_'u;g Oq=uޡ~Gާ!CKuq$c-zm~=zj>5 7i󟾡I÷kgiӻGiNZλ{1|߿;3 \a}}' F۟ӏ_{;Y))&]˫Ѝ]'nnPDѠ]d =Hq5Viʨձ9A=헻m'~_H_N)ɰL;Pp\s>b&M!_kR\9vOa?oAE 5|ᑟ9r^W}@߼oѠazoQCx'y?~Y3gG-HIO~!H}WԱ6+Tv=ߧ%CR=>V U=p k3w;łwQIK?{_x;woh-~SuǓzK6ϰ<7l>>YFW\~Ym?IO>}c;ޡwugq,}UsIi/?YIIѮpm~/kږYǧeyng/,p _ZqPD΃s 0wޥwn8{DΧA_sf'ɞ?%N܏&՛`{T.a=Фr]T֖/nΠס'Mʝbi6]7R~cRK_ks.'Z.@*՞s電=v{m o =Z_{v G=BDmmC=X8 gs/[_$ =`*iL[Bk7@i>ܷQe%Z) yW(RZZyzͻOVqc2-Q~+$ahۺ0 $5.߯; >jz']7+3Kkj> FYY=}iO@$t*z|K|0|9:趾uT*>͂\ow%\Pi_eI-)-cǵz[^VIiIO_TIV/m^*Dϛ=t 5^g8+=v8ٸ ǥ3%=Ee,&Q?zٞ'`{5>s871/  M nŁT>NTzzRAItY'Co>z2L-%('jg%$JN2:?HYş^UNy[(D槚%) %gcꉰv/mrGE9$~utޜkzLuў,ORNdF-\ UyR{;͗˲T=I.!>(~Cɋ)=uMc` MKJJ6:K {Jґl=m^]?\Yeg9m2m}n]n}LlpY>Sv9ͳN6h8q^QH]OO0?: f٦tԲnNͳV׼Ƿg]fm krF BRP44mP6DOKg8ejuZ]aoQ?oqm=ʒ4Y#r;{FC8wNǩt @n=`Xۿw-_k=۝.ocX-wzo38 KK4?rAs ;nxQux/Ϗt=Z?jJ{:U}'ɹ.szBBf{V~l{r292}q_myj2{E^Mq@e:*#Xkq:cfL[mx}zǭRaasY|9 kxY6B}c<ѲuBO\_g8taeyDb:s'5ڵxVx|:3>Y֕9ỌIDAT{ujnYL5t8 sxIħ_ v'>ameu;Y%FH]ۇnn$/5<:ߩVvS s:> 86Mrf]ϰ=_f 9N YֳV^mWxLuŷc'۵߽:->7qprCSg?Q-$XJ,ˬA$>ߩ:VɉW$ǭcogNv<Lǩչv$ :yN'>Һz׵k'nͳ:16zӃ8{wzO;Iv9iuS ?s!g}{8tO*-_z8UeiZmZ׵o/>.w_sf&].YI%pRӓ fO~x k}-9>;IvRy9,SHJp7*mv!hl^鉩{>xnMt͎07]0D8[ГCn5eTJŽ[pqf]4-7Np@{F:dAփ4MyۯΜxVt!ȾxU'>m Se};9 <ٖ9='\OBSu>mf粬VqZnHg߾ڴ3mۗ||( z6k#u:R`cC5YCM{Vv'(YI@jR =>tw NǾ^*lxdێrPdo_]㶮[/T .^T@EbZֵW7-kxK6-9=#-Y;ٗ۫;n?na'7oRcJ*>tl"d@ os 7Nmu^6L| ۴e:==/ f{4,˭e$ ;zԓN4˾wX+5Rd3uq B [qڗdco"$渭kBNyhX+ANCux#9ְe :N՝TNON2!p1aXn!ܭV*;ր`*?–[fd{9p'9w݂5$~Sl L< J|͎}>NoNkxR 3p1Ihh= ?Niqmsch;}COO8nm~PU{{ ufW!zӵ8Mv @%'Ã2:N>Or+qv}9׉[0> Dmn'm_fu=X͉vU Bz=ܤv*FN˒!òi†;t yI9 [IyHF+9iNwq3\Z%эrBz)OVVIbC[;&")D!m9a':=>$~iY6>L ; OsVd߮v=F8[O;B[ p$ N?qvDwoslNznRQqX;UjsXon4ƴ̳&xǴfLyӣzNܞ uddTC=D։9mx[_ڧ{:/e6PŒSqf=(n'3ߵc :0cYaنS1!eͷO[ۧ%֓Nv㶎SEmݾ @v^ i}T:X=$(ٗYK|ȶS{ 봽ɖ4hdBbғxuS^D9nm8S; RY֙IE)D8M[2?Ѵ3cw{Vݰ?ORyt[v=t@l;osL]ήHgWjܜ*9n۰OK۬ r(>' †u~*T,w}9>xT|{,JQ6$ڇd\<i!N~0(踭ߛJ%[dാݹ̔ c_'㴽K,ukz==GswT+1=Y}{xۻLU V?ܕU\D=g3/ 1i0gr5\ N5s,=<{K|IqkG=ޑ*OzҦuUߣ M$g_m!_: W4h<ڗd YE-n.s}JlK}k?k{peUOM7lU<ƈQUV["njmFU]>HHjsvZٶCO]d[U8:s5^Wp|IB<&J"J_3rF|& >v5cTfWvyZg}>+} 'c^n2r/[,־ܠt 4jVyb9j_SQG_/-mY ::ڿf3V@խԾ'tDվX6jv-i5sxj'}Vͨl@օx˖ޗD5Vdf.gg-l zFU3F1xmB3-`~B|ًd8wiϬpahH("TA=ZvtT3ޫ϶ݷȞ|Ռ#<_ƶ7ՆQ瘲Jn3Po@3e߯ٝg -՘ 1ٵ*RV[϶`=af+s@W3BǬ-pVYض=Nh ;do{ IQZmBkŐf-Gɜn*gY(wWEeTxE٭‚,+3ֵz=aԊjv`Epg'-~"V9V ;-W9O⹟=>FvvoX{4_⫵]?۞#+p<:?ۊs+kpD x ktbA3`4\7;Aŋ{mIENDB`qstardict/docs/ru_RU/index.html000066400000000000000000000271041453553600400170460ustar00rootroot00000000000000 Документация QStarDict qstardict/docs/ru_RU/styles/000077500000000000000000000000001453553600400163705ustar00rootroot00000000000000qstardict/docs/ru_RU/styles/style.css000066400000000000000000000025531453553600400202470ustar00rootroot00000000000000body { background-size: 120% auto; margin-top: 20px; margin-bottom: 20px; margin-left: 20px; margin-right: 20px; font-size: 12pt; font-color: #000000; font-family: "DejaVu Sans", "Sans"; text-align: center; } p, h1, h2, ul, dl { margin-left: 20px; margin-right: 20px; margin-top: 10px; margin-bottom: 10px; } #wrap { display: inline-block; max-width: 640px; height: 100%; text-align: left; } h1 { font-weight: normal; text-align: center; font-size: 16pt; } h2 { font-size: 1.2em; } a { text-decoration: none; color: #398500; } a:hover { text-decoration: underline; } p.thumbnail { text-align: center; } img.link_image { border-width: 0px; margin-left: 1px; margin-right: 1px; margin-top: 1px; margin-bottom: 1px; } img.link_image:hover { border-width: 1px; margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; } p.code { margin-top:5px; margin-bottom: 5px; margin-left: 20px; } code { font-family: "DejaVu Sans Mono", "Courier New", "Monospace"; font-size: 9pt; font-weight: bold; } dt { font-weight: bold; } ul > dd, ul > li { display: list-item; list-style: square; } form { margin-top: 30px; margin-left: 20px; margin-bottom: 0px; } a h2 { color: black; } qstardict/plugins/000077500000000000000000000000001453553600400145425ustar00rootroot00000000000000qstardict/plugins/baseplugin.h000066400000000000000000000047671453553600400170620ustar00rootroot00000000000000/***************************************************************************** * baseplugin.h - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2008-2019 Alexander Rodin * * Copyright (C) 2016 Sergey Ili'nykh * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef BASEPLUGIN_H #define BASEPLUGIN_H #include #include #include #include #include #include #include "metadata.h" #include "pluginserver.h" namespace QStarDict { /** * This is a base class for all dictionary plugins classes. */ class BasePlugin { public: /** * Accessor to QStarDict internals */ PluginServer *qsd; // QStarDict API accessor /** * Destructor. */ virtual ~BasePlugin() { } virtual QIcon pluginIcon() const = 0; }; class ConfigurablePlugin { public: virtual ~ConfigurablePlugin() {} /** * Run a settings dialog and return QDialog::DialogCode. */ virtual int execSettingsDialog(QWidget *parent = 0) = 0; }; } // namespace QStarDict Q_DECLARE_INTERFACE(QStarDict::BasePlugin, "org.qstardict.BasePlugin/1.0") Q_DECLARE_INTERFACE(QStarDict::ConfigurablePlugin, "org.qstardict.ConfigurablePlugin/1.0") #endif // BASEPLUGIN_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/dictplugin.h000066400000000000000000000221241453553600400170560ustar00rootroot00000000000000/***************************************************************************** * dictplugin.h - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef DICTPLUGIN_H #define DICTPLUGIN_H #include #include #include #include #include #include #include "baseplugin.h" namespace QStarDict { /** * This is a base class for all dictionary plugins classes. */ class DictPlugin { public: /** * This enum describes a features of dictionary plugin. */ enum class Feature { /** * No features. */ None = 0x00, /** * Dictionary plugin can search for similar words using * fuzzy algorithms. */ SearchSimilar = 0x01, }; Q_DECLARE_FLAGS(Features, Feature) /** * This class represents information about dictionary. */ class DictInfo { public: /** * Construct empty DictInfo object. */ DictInfo() : m_wordsCount(-1L) { } /** * Construct DictInfo object from data. * @param plugin A plugin name * @param name A dictionary name * @param author A dictionary author * @param desription A dictionary description * @param wordsCount A count of words that available in dictionary * @param fileName A dictionary filename */ DictInfo(const QString &plugin, const QString &name, const QString &author = QString(), const QString &description = QString(), long wordsCount = -1L, const QString &filename = QString()) : m_plugin(plugin), m_name(name), m_author(author), m_description(description), m_wordsCount(wordsCount), m_filename(filename) { } const QString &plugin() const { return m_plugin; } const QString &name() const { return m_name; } const QString &author() const { return m_author; } const QString &description() const { return m_description; } long wordsCount() const { return m_wordsCount; } const QString &filename() const { return m_filename; } void setPlugin(const QString &plugin) { m_plugin = plugin; } void setName(const QString &name) { m_name = name; } void setAuthor(const QString &author) { m_author = author; } void setDescription(const QString &description) { m_description = description; } void setWordsCount(long wordsCount) { m_wordsCount = wordsCount; } void setFilename(const QString &filename) { m_filename = filename; } private: QString m_plugin; QString m_name; QString m_author; QString m_description; long m_wordsCount; QString m_filename; }; /** * This class represent a translation. */ class Translation { public: /** * Construct an empty translation. */ Translation() { } /** * Construct a translation from data. * @param title A translation title * @param dictName A full dictionary name * @param translation A translation * @param hideTitle Whether to not add title at top of the translation * (if it is already contained in the translation) */ Translation(const QString &title, const QString &dictName, const QString &translation, bool hideTitle = false) : m_title(title), m_dictName(dictName), m_translation(translation), m_hideTitle(hideTitle) { } /** * Return the translation title. */ const QString &title() const { return m_title; } /** * Return the dictionary name. */ const QString &dictName() const { return m_dictName; } /** * Return the translation. */ const QString &translation() const { return m_translation; } /* * Return the status of "hide title" */ bool hideTitle() const { return m_hideTitle; } /** * Set a translation title. */ void setTitle(const QString &title) { m_title = title; } /** * Set a dictionary name. */ void setDictName(const QString &dictName) { m_dictName = dictName; } /** * Set a translation. */ void setTranslation(const QString &translation) { m_translation = translation; } /* * Set the status of the "hide title" */ void setHideTitle(bool hideTitle) { m_hideTitle = hideTitle; } private: QString m_title; QString m_dictName; QString m_translation; bool m_hideTitle; }; /** * Destructor. */ virtual ~DictPlugin() { } /** * Return a features supported by dictionary plugin. */ virtual Features features() const { return Features(Feature::None); } /** * Return a list of available dictionaries. */ virtual QStringList availableDicts() const = 0; /** * Return a list of loaded dictionaries. */ virtual QStringList loadedDicts() const = 0; /** * Set a list of loaded dictionaries. */ virtual void setLoadedDicts(const QStringList &loadedDicts) = 0; /** * Return true if translation exists in dictionary, * otherwise returns false. */ virtual bool isTranslatable(const QString &dict, const QString &word) = 0; /** * Return translation for word from dictionary. If word not found * returns empty string. */ virtual Translation translate(const QString &dict, const QString &word) = 0; /** * Return a list of similar to "word" words from all loaded dictionaries. * Works only if SearchSimilar feature is enabled. */ virtual QStringList findSimilarWords(const QString &dict, const QString &word) { Q_UNUSED(dict); return QStringList(word); } /** * Return a required resource. Scheme of URLs: * plugin://plugin_name/... */ virtual QVariant resource(int type, const QUrl &name) { Q_UNUSED(type) Q_UNUSED(name) return QVariant(); } /** * Return an information about dictionary. The dictionary may be not loaded * but available. */ virtual DictInfo dictInfo(const QString &dict) = 0; /** * Return the supported dictionary files filter acceptable by QFileDialog. */ virtual std::optional dictionaryFileFilter() const { return std::nullopt; } /** * Add a dictionary file from the given location. * Return the name of the added dictionary of std::nullopt if the dictionary * is not added. */ virtual std::optional addDictionary(QWidget *parent, const QString &fileName) { Q_UNUSED(parent) Q_UNUSED(fileName) return std::nullopt; } /** * Return true if the dictionary with the given name can be removed * and false otherwise. */ virtual bool isDictionaryRemovable(const QString &dict) { Q_UNUSED(dict) return false; } /* * Attempt to remove the dictionary with the given name. * Return true if the dictionary has been removed and false otherwise. */ virtual bool removeDictionary(const QString &dict) { Q_UNUSED(dict) return false; } }; Q_DECLARE_OPERATORS_FOR_FLAGS(DictPlugin::Features) } Q_DECLARE_INTERFACE(QStarDict::DictPlugin, "org.qstardict.DictPlugin/1.0") #endif // DICTPLUGIN_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/kiwix/000077500000000000000000000000001453553600400156755ustar00rootroot00000000000000qstardict/plugins/kiwix/adddialog.cpp000066400000000000000000000077351453553600400203250ustar00rootroot00000000000000/***************************************************************************** * adddialog.cpp - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "adddialog.h" #include #include #include #include "kiwix.h" namespace { enum class Operation { Move, Symlink }; QString prettifyFileName(QString fileName) { QString homePath = QDir::homePath(); if (fileName.startsWith(homePath)) fileName.replace(0, homePath.size(), "~"); return fileName; } } AddDialog::AddDialog(QWidget *parent, const QString &fileName): QDialog(parent) { setupUi(this); srcFileName = fileName; targetFileName = Kiwix::dataDirPath() + "/" + QFileInfo(srcFileName).fileName(); operationComboBox->addItem(tr("Move"), static_cast(Operation::Move)); operationComboBox->addItem(tr("Symlink"), static_cast(Operation::Symlink)); fileLabel->setText(tr("the file %1
to %2").arg( prettifyFileName(srcFileName), prettifyFileName(targetFileName))); } AddDialog::~AddDialog() { } void AddDialog::accept() { switch (static_cast(operationComboBox->currentData().toInt())) { case Operation::Move: if (moveFile()) QDialog::accept(); else QMessageBox::warning(parentWidget(), tr("Cannot add a dictionary"), tr("The file %1 cannot be moved to %2").arg( prettifyFileName(srcFileName), prettifyFileName(targetFileName))); break; case Operation::Symlink: if (symlinkFile()) QDialog::accept(); else QMessageBox::warning(parentWidget(), tr("Cannot add a dictionary"), tr("The symlink to file %1 cannot be createdat %2").arg( prettifyFileName(srcFileName), prettifyFileName(targetFileName))); break; } } bool AddDialog::moveFile() { if (QFile::exists(targetFileName)) QFile::rename(targetFileName, targetFileName + ".old"); bool result = QFile::rename(srcFileName, targetFileName); if (result) QFile::remove(targetFileName + ".old"); else QFile::rename(targetFileName + ".old", targetFileName); return result; } bool AddDialog::symlinkFile() { if (QFile::exists(targetFileName)) QFile::rename(targetFileName, targetFileName + ".old"); bool result = QFile::link(srcFileName, targetFileName); if (result) QFile::remove(targetFileName + ".old"); else QFile::rename(targetFileName + ".old", targetFileName); return result; } qstardict/plugins/kiwix/adddialog.h000066400000000000000000000035151453553600400177620ustar00rootroot00000000000000/***************************************************************************** * adddialog.h - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef ADDDIALOG_H #define ADDDIALOG_H #include #include "ui_adddialog.h" class AddDialog: public QDialog, private Ui::AddDialog { public: AddDialog(QWidget *parent, const QString &fileName); virtual ~AddDialog(); public slots: void accept(); private: QString srcFileName; QString targetFileName; bool moveFile(); bool symlinkFile(); }; #endif // ADDDIALOG_H qstardict/plugins/kiwix/adddialog.ui000066400000000000000000000032451453553600400201500ustar00rootroot00000000000000 AddDialog 0 0 279 84 Add a Kiwix dictionary Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() AddDialog accept() 248 254 157 274 buttonBox rejected() AddDialog reject() 316 260 286 274 qstardict/plugins/kiwix/grayscale.cpp000066400000000000000000000116111453553600400203530ustar00rootroot00000000000000/***************************************************************************** * grayscale.cpp - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "grayscale.h" #include #include #include #include #include #include "htmlparser/html.hpp" namespace { std::string trim(const std::string &string) { return QString(string.c_str()).trimmed().toUtf8().data(); } std::string lowercase(std::string string) { for (char &c: string) c = tolower(c); return string; } std::string toGrayscale(const std::string &colorName) { QColor color(trim(colorName).c_str()); return "#" + QString::number(qGray(color.rgb()), 16).repeated(3).toStdString(); } std::string toGrayscaleComplex(const std::string &complexStyle) { // complex style is a style in the form "1px solid #ff0000" int index = static_cast(complexStyle.length()) - 1; while (index >= 0 && ! isspace(complexStyle[index])) index--; std::string prefix = complexStyle.substr(0, index + 1); // "1px solid " part std::string color = complexStyle.substr(index + 1, complexStyle.length()); // "#ff0000" part return prefix + toGrayscale(color); } void transformCSSValue(std::string property, std::string &value) { property = lowercase(trim(property)); const static std::set colorProperties = { "color", "background-color", "border-color", "border-top-color", "border-bottom-color", "border-left-color", "border-right-color" }; if (colorProperties.contains(property)) value = toGrayscale(value); const static std::set complexProperties = { "border-top", "border-bottom", "border-left", "border-right" }; if (complexProperties.contains(property)) value = toGrayscaleComplex(value); } } QString htmlToGrayscale(const QString &inputHtml) { html::parser parser; html::node_ptr root = parser.parse(inputHtml.toUtf8().data()); root->walk([](html::node &node) -> bool { // replace colors in the attributes of HTML tags const static std::vector colorAttrs = { "color", "bgcolor" }; for (const auto &attr: colorAttrs) { std::string color = node.get_attr(attr); if (! color.empty()) { color = toGrayscale(color); node.set_attr(attr, color); } } // replace colors in CSS attributes std::string srcStyle = node.get_attr("style"); std::string style; std::string property; std::string value; bool insideProperty = true; for (char c: node.get_attr("style")) { switch (c) { case ':': insideProperty = false; break; case ';': transformCSSValue(property, value); style += property + ":" + value + ";"; insideProperty = true; property.clear(); value.clear(); break; default: if (insideProperty) property += c; else value += c; } } if (! insideProperty) { transformCSSValue(property, value); style += property + ":" + value; } if (! style.empty()) node.set_attr("style", style); return true; }); return QString::fromUtf8(root->to_html().c_str()); } qstardict/plugins/kiwix/grayscale.h000066400000000000000000000030271453553600400200220ustar00rootroot00000000000000/***************************************************************************** * grayscale.h - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef GRAYSCALE_H #define GRAYSCALE_H #include QString htmlToGrayscale(const QString &inputHtml); #endif // GRAYSCALE_H qstardict/plugins/kiwix/htmlparser/000077500000000000000000000000001453553600400200565ustar00rootroot00000000000000qstardict/plugins/kiwix/htmlparser/html.cpp000066400000000000000000000652301453553600400215340ustar00rootroot00000000000000/* Copyright (c) 2021 Andrey Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "html.hpp" namespace html { std::vector inline_tags = {"b", "big", "i", "small", "tt", "abbr", "acronym", "cite", "code", "dfn", "em", "kbd", "strong", "samp", "time", "var", "a", "bdo", "br", "img", "map", "object", "q", "span", "sub", "sup", "button", "input", "label", "select", "textarea"}; std::vector void_tags = {"area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param", "source", "track", "wbr"}; std::vector rawtext_tags = {"title", "textarea", "style", "script", "noscript", "plaintext", "iframe", "xmp", "noembed", "noframes"}; selector::selector(std::string s) { selector_matcher matcher; condition match_condition; char c; bool reconsume = false; int state = SEL_STATE_TAG; if(s == "*") { matcher.all_match = true; matchers.push_back(std::move(matcher)); return; } auto it = s.begin(); auto getc = [&]() -> char { if(it != s.end()) { return *it++; } return 0; }; auto save_matcher = [&]() { if(!matcher.conditions.empty()) { matchers.push_back(std::move(matcher)); } }; auto save_cond = [&](const std::string& str) { if(!str.empty()) { if(matcher.conditions.empty()) { matcher.conditions.emplace_back(); } matcher.conditions.back().push_back(std::move(match_condition)); } }; do { if(!reconsume) { c = getc(); } reconsume = false; switch(state) { case SEL_STATE_ROUTE: if(c == 0 || c == ' ') { save_matcher(); state = SEL_STATE_TAG; } else if(c == '>') { if(!matcher.dc_second) { matcher.dc_first = true; } save_matcher(); matcher.dc_second = true; state = SEL_STATE_TAG; } else if(c == '[') { state = SEL_STATE_ATTR; } else if(c == ':') { state = SEL_STATE_OPERATOR; } else if(c == '.') { state = SEL_STATE_CLASS; } else if(c == '#') { state = SEL_STATE_ID; } else if(c == ',') { matcher.conditions.emplace_back(); state = SEL_STATE_TAG; } break; case SEL_STATE_TAG: if(IS_STATE_ROUTE(c)) { save_cond(match_condition.tag_name); reconsume = true; state = SEL_STATE_ROUTE; } else if(IS_UPPERCASE_ALPHA(c)) { match_condition.tag_name += std::tolower(c); } else { match_condition.tag_name += c; } break; case SEL_STATE_CLASS: if(IS_STATE_ROUTE(c)) { save_cond(match_condition.class_name); reconsume = true; state = SEL_STATE_ROUTE; } else { match_condition.class_name += c; } break; case SEL_STATE_ID: if(IS_STATE_ROUTE(c)) { save_cond(match_condition.id); reconsume = true; state = SEL_STATE_ROUTE; } else { match_condition.id += c; } break; case SEL_STATE_OPERATOR: if(IS_STATE_ROUTE(c)) { save_cond(match_condition.attr_operator); reconsume = true; state = SEL_STATE_ROUTE; } else if(c == '(') { state = SEL_STATE_INDEX; } else if(IS_UPPERCASE_ALPHA(c)) { match_condition.attr_operator += std::tolower(c); } else { match_condition.attr_operator += c; } break; case SEL_STATE_INDEX: if(c == ')') { save_cond(match_condition.index); state = SEL_STATE_ROUTE; } else if(IS_DIGIT(c)) { match_condition.index += c; } break; case SEL_STATE_ATTR: if(c == ']') { save_cond(match_condition.attr); state = SEL_STATE_ROUTE; } else if(c == '=' || c == '*' || c == '^' || c == '$' || c == '!') { reconsume = true; state = SEL_STATE_ATTR_OPERATOR; } else if(IS_UPPERCASE_ALPHA(c)) { match_condition.attr += std::tolower(c); } else { match_condition.attr += c; } break; case SEL_STATE_ATTR_OPERATOR: if(c == '\'') { state = SEL_STATE_ATTR_VAL; } else { match_condition.attr_operator += c; } break; case SEL_STATE_ATTR_VAL: if(c == '\'') { save_cond(match_condition.attr_operator); state = SEL_STATE_ATTR; } else { match_condition.attr_value += c; } break; } } while(c || reconsume); } selector::condition::condition(condition&& c) : tag_name(std::move(c.tag_name)) , id(std::move(c.id)) , class_name(std::move(c.class_name)) , index(std::move(c.index)) , attr(std::move(c.attr)) , attr_value(std::move(c.attr_value)) , attr_operator(std::move(c.attr_operator)) { c.tag_name.clear(); c.id.clear(); c.class_name.clear(); c.index.clear(); c.attr.clear(); c.attr_value.clear(); c.attr_operator.clear(); } selector::selector_matcher::selector_matcher(selector_matcher&& m) : all_match(m.all_match) , dc_first(m.dc_first) , dc_second(m.dc_second) , conditions(std::move(m.conditions)) { m.all_match = false; m.dc_first = false; m.dc_second = false; m.conditions.clear(); } bool selector::condition::operator()(const node& d) const { if(!tag_name.empty()) { return d.tag_name == tag_name; } if(!id.empty()) { auto it = d.attributes.find("id"); if(it != d.attributes.end()) { return it->second == id; } } if(!class_name.empty()) { auto it = d.attributes.find("class"); if(it != d.attributes.end()) { return it->second == class_name; } } if(attr_operator == "first") { return d.index == 0; } if(attr_operator == "last") { return d.index == d.parent->node_count - 1; } if(attr_operator == "eq") { return d.index == std::stoi(index); } if(attr_operator == "gt") { return d.index > std::stoi(index); } if(attr_operator == "lt") { return d.index < std::stoi(index); } if(!attr.empty()) { auto it = d.attributes.find(attr); if(it == d.attributes.end()) { return attr_operator == "!="; } if(attr_operator == "=") { return it->second == attr_value; } else if(attr_operator == "^=") { return it->second.find(attr_value) == 0; } else if(attr_operator == "$=") { return attr_value.size() <= it->second.size() && it->second.find(attr_value) == it->second.size() - attr_value.size(); } else if(attr_operator == "!=") { return it->second != attr_value; } else if(attr_operator == "*=") { return it->second.find(attr_value) != std::string::npos; } return true; } return false; } bool selector::selector_matcher::operator()(const node& d) const { if(d.type_node != node_t::tag) { return false; } if(this->all_match) { return true; } for(auto& c : conditions) { size_t i = 0; for(; i < c.size(); i++) { if(!c[i](d)) { break; } } if(i == c.size()) { return true; } } return false; } node::node(const node& d) : type_node(d.type_node) , type_tag(d.type_tag) , self_closing(d.self_closing) , tag_name(d.tag_name) , content(d.content) , attributes(d.attributes) , bogus_comment(d.bogus_comment) { for(auto& n : d.children) { copy(n.get(), this); } } void node::walk(std::function handler) { walk(*this, handler); } void node::walk(node& d, std::function handler) { for(auto& c : d.children) { if(handler(*c)) { walk(*c, handler); } } } std::vector node::select(const selector s, bool nested) { std::vector matched_dom; size_t msize = s.matchers.size(); if(msize) { matched_dom.push_back(this); } size_t i = 0; for(auto& matcher : s) { auto selectee_dom = std::move(matched_dom); for(auto p : selectee_dom) { walk(*p, [&](node& n) { if(matcher(n)) { matched_dom.push_back(&n); if(matcher.dc_second) { // div>[div]>div, div>div>[div] - not scan child, we need only direct child return false; } else if(matcher.dc_first) { // [div]>div>div - scan all child, since elements can be at any level return true; } else if(i < msize - 1) { // [div] div div, div [div] div - not scan child, the topmost parent will suffice return false; } else { // div div [div] - last matcher, scan based on attribute `nested` return nested; } } else if(matcher.dc_second) { return false; } // if not match and not direct child, scan all child return true; }); } i++; } return matched_dom; } void node::to_html(std::ostream& out, bool child, bool text, int level, int& deep, char ind, bool& last_is_block, bool& sibling_is_block) const { std::streamoff pos = out.tellp(); if(type_node == node_t::none) { for(auto& c : children) { c->to_html(out, child, text, 0, deep, ind, last_is_block, sibling_is_block); } } else if(type_node == node_t::text) { if(text && std::any_of(content.begin(), content.end(), [](char c) { return !IS_SPACE(c); })) { auto str = content; if(parent && std::find(rawtext_tags.begin(), rawtext_tags.end(), parent->tag_name) == rawtext_tags.end()) { str = std::regex_replace(str, std::regex("[\\s]+"), " "); } if(last_is_block) { out << '\n' << std::string(deep, ind); } out << str; last_is_block = false; } } else if(type_node == node_t::tag) { bool old_is_block = last_is_block; last_is_block = std::find(inline_tags.begin(), inline_tags.end(), tag_name) == inline_tags.end(); if(pos && (old_is_block || last_is_block)) { out << '\n' << std::string(deep, ind); if(level && last_is_block && !sibling_is_block) { sibling_is_block = true; deep++; out << ind; } } out << "<" << tag_name; if(!attributes.empty()) { for(auto& a : attributes) { out << ' ' << a.first << "=\"" << a.second << "\""; } } if(self_closing) { out << " />"; } else { out << ">"; if(child) { bool last_is_block_n = false; bool sibling_is_block_n = false; for(auto& c : children) { c->to_html(out, child, text, level + 1, deep, ind, last_is_block_n, sibling_is_block_n); } if(sibling_is_block_n) { if(deep > 0) { deep--; } out << '\n' << std::string(deep, ind); } } out << ""; } } else if(type_node == node_t::comment) { if(last_is_block) { out << '\n' << std::string(deep, ind); } out << ""; last_is_block = false; } else if(type_node == node_t::doctype) { out << ""; last_is_block = true; sibling_is_block = true; } } void node::to_raw_html(std::ostream& out, bool child, bool text) const { if(type_node == node_t::none) { for(auto& c : children) { c->to_raw_html(out, child, text); } } else if(type_node == node_t::text) { if(text && std::any_of(content.begin(), content.end(), [](char c) { return !IS_SPACE(c); })) { auto str = content; if(parent && std::find(rawtext_tags.begin(), rawtext_tags.end(), parent->tag_name) == rawtext_tags.end()) { str = std::regex_replace(str, std::regex("[\\s]+"), " "); } out << str; } } else if(type_node == node_t::tag) { out << "<" << tag_name; if(!attributes.empty()) { for(auto& a : attributes) { out << ' ' << a.first << "=\"" << a.second << "\""; } } if(self_closing) { out << " />"; } else { out << ">"; if(child) { for(auto& c : children) { c->to_raw_html(out, child, text); } } out << ""; } } else if(type_node == node_t::comment) { out << ""; } else if(type_node == node_t::doctype) { out << ""; } } std::string node::to_html(char ind, bool child, bool text) const { std::stringstream ret; bool last_is_block_n = false; bool sibling_is_block_n = false; int deep = 0; to_html(ret, child, text, 0, deep, ind, last_is_block_n, sibling_is_block_n); return ret.str(); } std::string node::to_raw_html(bool child, bool text) const { std::stringstream ret; to_raw_html(ret, child, text); return ret.str(); } void node::to_text(std::ostream& out, bool& is_block) const { std::streamoff pos = out.tellp(); if(type_node == node_t::none) { for(auto& c : children) { c->to_text(out, is_block); } } else if(type_node == node_t::text) { if(is_block) { if(pos) { out << '\n'; } is_block = false; } out << content; } else if(type_node == node_t::tag) { if(tag_name == "br") { out << '\n'; } bool is_block_n = std::find(inline_tags.begin(), inline_tags.end(), tag_name) == inline_tags.end(); if(is_block_n) { is_block = true; } for(auto& c : children) { c->to_text(out, is_block); } if(is_block_n) { is_block = true; } } } std::string node::to_text(bool raw) const { std::stringstream ret; bool is_block = false; to_text(ret, is_block); auto str = ret.str(); if(raw) { str = std::regex_replace(str, std::regex("[\\s]+"), " "); } return str; } std::string node::get_attr(const std::string& attr) const { auto it = attributes.find(attr); if(it == attributes.end()) { return std::string(); } return it->second; } void node::set_attr(const std::string& key, const std::string& val) { attributes[key] = val; } void node::copy(const node* n, node* p) { auto new_node = utils::make_unique(); new_node->parent = p; new_node->type_node = n->type_node; new_node->type_tag = n->type_tag; new_node->self_closing = n->self_closing; new_node->tag_name = n->tag_name; new_node->content = n->content; new_node->attributes = n->attributes; new_node->bogus_comment = n->bogus_comment; if(new_node->type_node == node_t::tag) { new_node->index = p->node_count++; } for(auto& c : n->children) { copy(c.get(), new_node.get()); } p->children.push_back(std::move(new_node)); } node& node::append(const node& n) { copy(&n, this); return *this; } void parser::operator()(node& nodeptr) { for(auto& c : callback_node) { if(!c.first) { c.second(nodeptr); continue; } auto it = c.first.begin(); if((*it)(nodeptr)) { it++; } if(it == c.first.end()) { c.second(nodeptr); } } } parser& parser::set_callback(std::function cb) { callback_node.push_back(std::make_pair(selector(), cb)); return *this; } parser& parser::set_callback(const selector selector, std::function cb) { callback_node.push_back(std::make_pair(selector, cb)); return *this; } parser& parser::set_callback(std::function cb) { callback_err.push_back(cb); return *this; } void parser::clear_callbacks() { callback_node.clear(); callback_err.clear(); } void parser::handle_node() { node* new_node_ptr = new_node.get(); if(new_node_ptr->type_node == node_t::tag) { if(new_node_ptr->type_tag == tag_t::open) { new_node_ptr->index = current_ptr->node_count++; current_ptr->children.push_back(std::move(new_node)); if(!new_node_ptr->self_closing) { if(std::find(void_tags.begin(), void_tags.end(), new_node_ptr->tag_name) != void_tags.end()) { new_node_ptr->self_closing = true; } else if(std::find(rawtext_tags.begin(), rawtext_tags.end(), new_node_ptr->tag_name) != rawtext_tags.end()) { current_ptr = new_node_ptr; state = STATE_RAWTEXT; } else { current_ptr = new_node_ptr; } } (*this)(*new_node_ptr); } else if(new_node_ptr->type_tag == tag_t::close) { auto _current_ptr = current_ptr; std::vector not_closed; while(_current_ptr->parent && _current_ptr->tag_name != new_node_ptr->tag_name) { not_closed.push_back(_current_ptr); _current_ptr = _current_ptr->parent; } if(_current_ptr->parent && _current_ptr->tag_name == new_node_ptr->tag_name) { for(auto& c : callback_err) { for(auto n : not_closed) { c(err_t::tag_not_closed, *n); } } if(!new_node_ptr->content.empty()) { auto text_node = utils::make_unique(current_ptr); text_node->type_node = node_t::text; text_node->content = std::move(new_node_ptr->content); new_node_ptr->content.clear(); current_ptr->children.push_back(std::move(text_node)); } current_ptr = _current_ptr->parent; (*this)(*new_node_ptr); } } } else if(new_node_ptr->type_node == node_t::text) { if(!new_node_ptr->content.empty()) { current_ptr->children.push_back(std::move(new_node)); (*this)(*new_node_ptr); } } else { current_ptr->children.push_back(std::move(new_node)); (*this)(*new_node_ptr); } new_node = utils::make_unique(current_ptr); new_node->type_node = node_t::text; } node_ptr html::parser::parse(const std::string& html) { bool eof = false; char c; bool reconsume = false; auto it = html.begin(); auto getc = [&]() -> char { if(it != html.end()) { return *it++; } eof = true; return 0; }; auto get_string = [&](std::string str) { for(std::string::size_type i = 0; i < str.size(); i++) { if(i) { c = getc(); } if(eof || str[i] != c) { it -= i; return false; } } return true; }; state = STATE_DATA; auto _parent = utils::make_unique(); current_ptr = _parent.get(); new_node = utils::make_unique(current_ptr); new_node->type_node = node_t::text; std::string k; do { if(!reconsume) { c = getc(); } reconsume = false; if(eof) { break; } switch(state) { case STATE_DATA: // 0 if(c == '<') { state = STATE_TAG_OPEN; } else { new_node->content += c; } break; case STATE_RAWTEXT: // 3 if(c == '<') { state = STATE_RAWTEXT_LESS_THAN_SIGN; } else if(c == 0x00) { new_node->content += '_'; } else { new_node->content += c; } break; case STATE_TAG_OPEN: // 6 if(c == '!') { state = STATE_MARKUP_DEC_OPEN_STATE; } else if(c == '/') { state = STATE_END_TAG_OPEN; } else if(IS_ALPHA(c)) { state = STATE_TAG_NAME; handle_node(); new_node->type_node = node_t::tag; new_node->type_tag = tag_t::open; reconsume = true; } else if(c == '?') { state = STATE_BOGUS_COMMENT; handle_node(); new_node->type_node = node_t::comment; reconsume = true; } else { new_node->content += '<'; reconsume = true; state = STATE_DATA; } break; case STATE_END_TAG_OPEN: // 7 if(IS_ALPHA(c)) { state = STATE_TAG_NAME; handle_node(); new_node->type_node = node_t::tag; new_node->type_tag = tag_t::close; reconsume = true; } else if(c == '>') { state = STATE_DATA; } else { state = STATE_BOGUS_COMMENT; handle_node(); new_node->type_node = node_t::comment; reconsume = true; } break; case STATE_TAG_NAME: // 8 if(IS_SPACE(c)) { state = STATE_BEFORE_ATTRIBUTE_NAME; } else if(c == '/') { state = STATE_SELF_CLOSING; } else if(c == '>') { state = STATE_DATA; handle_node(); } else if(IS_UPPERCASE_ALPHA(c)) { new_node->tag_name += std::tolower(c); } else if(c == 0x00) { new_node->tag_name += '_'; } else { new_node->tag_name += c; } break; case STATE_RAWTEXT_LESS_THAN_SIGN: // 12 if(c == '/') { state = STATE_RAWTEXT_END_TAG_OPEN; } else { new_node->content += '<'; reconsume = true; state = STATE_RAWTEXT; } break; case STATE_RAWTEXT_END_TAG_OPEN: // 13 if(IS_ALPHA(c)) { new_node->type_node = node_t::tag; new_node->type_tag = tag_t::close; reconsume = true; state = STATE_RAWTEXT_END_TAG_NAME; } else { new_node->content += '<'; new_node->content += '/'; reconsume = true; state = STATE_RAWTEXT; } break; case STATE_RAWTEXT_END_TAG_NAME: { // 14 bool anything_else = true; if(IS_SPACE(c)) { if(new_node->tag_name == current_ptr->tag_name) { state = STATE_BEFORE_ATTRIBUTE_NAME; anything_else = false; } } else if(c == '/') { if(new_node->tag_name == current_ptr->tag_name) { state = STATE_SELF_CLOSING; anything_else = false; } } else if(c == '>') { if(new_node->tag_name == current_ptr->tag_name) { state = STATE_DATA; handle_node(); anything_else = false; } } else if(IS_UPPERCASE_ALPHA(c)) { new_node->tag_name += std::tolower(c); anything_else = false; } else if(IS_LOWERCASE_ALPHA(c)) { new_node->tag_name += c; anything_else = false; } if(anything_else) { new_node->content += '<'; new_node->content += '/'; new_node->content += new_node->tag_name; new_node->tag_name.clear(); reconsume = true; state = STATE_RAWTEXT; } } break; case STATE_BEFORE_ATTRIBUTE_NAME: // 32 if(IS_SPACE(c)) { // skip } else if(c == '/' || c == '>') { reconsume = true; state = STATE_AFTER_ATTRIBUTE_NAME; } else if(c == '=') { k = c; state = STATE_ATTRIBUTE_NAME; } else { k.clear(); reconsume = true; state = STATE_ATTRIBUTE_NAME; } break; case STATE_ATTRIBUTE_NAME: // 33 if(IS_SPACE(c) || c == '/' || c == '>') { new_node->attributes[k]; reconsume = true; state = STATE_AFTER_ATTRIBUTE_NAME; } else if(c == '=') { new_node->attributes[k]; state = STATE_BEFORE_ATTRIBUTE_VALUE; } else if(c == 0x00) { k += '_'; } else if(c == '\'' || c == '"' || c == '<') { k += c; } else { k += std::tolower(c); } break; case STATE_AFTER_ATTRIBUTE_NAME: // 34 if(IS_SPACE(c)) { // skip } else if(c == '/') { state = STATE_SELF_CLOSING; } else if(c == '=') { state = STATE_BEFORE_ATTRIBUTE_VALUE; } else if(c == '>') { state = STATE_DATA; handle_node(); } else { k.clear(); reconsume = true; state = STATE_ATTRIBUTE_NAME; } break; case STATE_BEFORE_ATTRIBUTE_VALUE: // 35 if(IS_SPACE(c)) { // skip } else if(c == '"') { state = STATE_ATTRIBUTE_VALUE_DOUBLE; } else if(c == '\'') { state = STATE_ATTRIBUTE_VALUE_SINGLE; } else if(c == '>') { state = STATE_DATA; handle_node(); } else { reconsume = true; state = STATE_ATTRIBUTE_VALUE_UNQUOTED; } break; case STATE_ATTRIBUTE_VALUE_DOUBLE: // 36 if(c == '"') { state = STATE_AFTER_ATTRIBUTE_VALUE_QUOTED; } else if(c == 0x00) { new_node->attributes[k] += '_'; } else { new_node->attributes[k] += c; } break; case STATE_ATTRIBUTE_VALUE_SINGLE: // 37 if(c == '\'') { state = STATE_AFTER_ATTRIBUTE_VALUE_QUOTED; } else if(c == 0x00) { new_node->attributes[k] += '_'; } else { new_node->attributes[k] += c; } break; case STATE_ATTRIBUTE_VALUE_UNQUOTED: // 38 if(IS_SPACE(c)) { state = STATE_BEFORE_ATTRIBUTE_NAME; } else if(c == '>') { state = STATE_DATA; handle_node(); } else if(c == 0x00) { new_node->attributes[k] += '_'; } else if(c == '"' || c == '\'' || c == '<' || c == '=' || c == '`') { new_node->attributes[k] += c; } else { new_node->attributes[k] += c; } break; case STATE_AFTER_ATTRIBUTE_VALUE_QUOTED: // 39 if(IS_SPACE(c)) { state = STATE_BEFORE_ATTRIBUTE_NAME; } else if(c == '/') { state = STATE_SELF_CLOSING; } else if(c == '>') { state = STATE_DATA; handle_node(); } else { reconsume = true; state = STATE_BEFORE_ATTRIBUTE_NAME; } break; case STATE_SELF_CLOSING: // 40 if(c == '>') { new_node->self_closing = true; state = STATE_DATA; handle_node(); } else { reconsume = true; state = STATE_BEFORE_ATTRIBUTE_NAME; } break; case STATE_BOGUS_COMMENT: // 41 if(c == '>') { state = STATE_DATA; handle_node(); } else if(c == 0x00) { new_node->content += '_'; } else { new_node->content += c; } break; case STATE_MARKUP_DEC_OPEN_STATE: // 42 if(get_string("--")) { state = STATE_COMMENT_START; handle_node(); new_node->type_node = node_t::comment; } else if(get_string("DOCTYPE")) { state = STATE_BEFORE_DOCTYPE_NAME; handle_node(); new_node->type_node = node_t::doctype; } else { state = STATE_BOGUS_COMMENT; handle_node(); new_node->type_node = node_t::comment; new_node->bogus_comment = true; new_node->content += c; } break; case STATE_COMMENT_START: // 43 if(c == '-') { state = STATE_COMMENT_START_DASH; } else if(c == '>') { state = STATE_DATA; handle_node(); } else { reconsume = true; state = STATE_COMMENT; } break; case STATE_COMMENT_START_DASH: // 44 if(c == '-') { state = STATE_COMMENT_END; } else if(c == '>') { state = STATE_DATA; handle_node(); } else { new_node->content += '-'; state = STATE_COMMENT; } break; case STATE_COMMENT: // 45 if(c == '-') { state = STATE_COMMENT_END_DASH; } else if(c == 0x00) { new_node->content += '_'; } else { new_node->content += c; } break; case STATE_COMMENT_END_DASH: // 50 if(c == '-') { state = STATE_COMMENT_END; } else { new_node->content += '-'; state = STATE_COMMENT; } break; case STATE_COMMENT_END: // 51 if(c == '>') { state = STATE_DATA; handle_node(); } else if(c == '-') { new_node->content += c; } else { new_node->content += '-'; new_node->content += '-'; reconsume = true; state = STATE_COMMENT; } break; case STATE_BEFORE_DOCTYPE_NAME: // 54 if(IS_SPACE(c)) { // skip } else if(c == '>') { state = STATE_DATA; handle_node(); } else if(c == 0x00) { new_node->content += '_'; state = STATE_DOCTYPE_NAME; } else { new_node->content += c; state = STATE_DOCTYPE_NAME; } break; case STATE_DOCTYPE_NAME: // 55 if(c == '>') { state = STATE_DATA; handle_node(); } else if(c == 0x00) { new_node->content += '_'; } else { new_node->content += c; } break; } } while(c || reconsume); new_node->type_node = node_t::text; handle_node(); return _parent; } node utils::make_node(node_t type, const std::string& str, const std::map& attributes) { html::node node; node.type_node = type; if(type == node_t::tag) { node.tag_name = str; if(std::find(void_tags.begin(), void_tags.end(), str) != void_tags.end()) { node.self_closing = true; } if(!attributes.empty()) { node.attributes = attributes; } } else { node.content = str; } return node; } } qstardict/plugins/kiwix/htmlparser/html.hpp000066400000000000000000000164221453553600400215400ustar00rootroot00000000000000/* Copyright (c) 2021 Andrey Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef HTML_H #define HTML_H #include #include #include #include #include #include #include #include #include #include #define STATE_DATA 0 #define STATE_RAWTEXT 3 #define STATE_TAG_OPEN 6 #define STATE_END_TAG_OPEN 7 #define STATE_TAG_NAME 8 #define STATE_RAWTEXT_LESS_THAN_SIGN 12 #define STATE_RAWTEXT_END_TAG_OPEN 13 #define STATE_RAWTEXT_END_TAG_NAME 14 #define STATE_BEFORE_ATTRIBUTE_NAME 32 #define STATE_ATTRIBUTE_NAME 33 #define STATE_AFTER_ATTRIBUTE_NAME 34 #define STATE_BEFORE_ATTRIBUTE_VALUE 35 #define STATE_ATTRIBUTE_VALUE_DOUBLE 36 #define STATE_ATTRIBUTE_VALUE_SINGLE 37 #define STATE_ATTRIBUTE_VALUE_UNQUOTED 38 #define STATE_AFTER_ATTRIBUTE_VALUE_QUOTED 39 #define STATE_SELF_CLOSING 40 #define STATE_BOGUS_COMMENT 41 #define STATE_MARKUP_DEC_OPEN_STATE 42 #define STATE_COMMENT_START 43 #define STATE_COMMENT_START_DASH 44 #define STATE_COMMENT 45 #define STATE_COMMENT_END_DASH 50 #define STATE_COMMENT_END 51 #define STATE_BEFORE_DOCTYPE_NAME 54 #define STATE_DOCTYPE_NAME 55 #define SEL_STATE_ROUTE 0 #define SEL_STATE_TAG 1 #define SEL_STATE_CLASS 2 #define SEL_STATE_ID 3 #define SEL_STATE_OPERATOR 4 #define SEL_STATE_INDEX 5 #define SEL_STATE_ATTR 6 #define SEL_STATE_ATTR_OPERATOR 7 #define SEL_STATE_ATTR_VAL 8 #define IS_UPPERCASE_ALPHA(c) ('A' <= c && c <= 'Z') #define IS_LOWERCASE_ALPHA(c) ('a' <= c && c <= 'z') #define IS_ALPHA(c) (IS_UPPERCASE_ALPHA(c) || IS_LOWERCASE_ALPHA(c)) #define IS_DIGIT(c) ('0' <= c && c <= '9') #define IS_SPACE(c) (c == 0x09 || c == 0x0A || c == 0x0C || c == 0x20 || c == 0x0D) #define IS_STATE_ROUTE(c) (c == 0 || c == ' ' || c == '[' || c == ':' || c == '.' || c == '#' || c == ',' || c == '>') namespace html { class selector; class parser; class node; using node_ptr = std::unique_ptr; enum class node_t { none, text, tag, comment, doctype }; enum class tag_t { none, open, close, }; enum class err_t { tag_not_closed }; class node { public: node(node* parent = nullptr) : parent(parent) {} node(const node&); node(node&& d) : type_node(std::move(d.type_node)) , type_tag(std::move(d.type_tag)) , self_closing(std::move(d.self_closing)) , tag_name(std::move(d.tag_name)) , content(std::move(d.content)) , attributes(std::move(d.attributes)) , parent(nullptr) , bogus_comment(std::move(d.bogus_comment)) , children(std::move(d.children)) , index(0) , node_count(std::move(d.node_count)) {} node* at(size_t i) const { if(i < children.size()) { return children[i].get(); } return nullptr; } size_t size() const { return children.size(); } bool empty() const { return children.empty(); } std::vector::iterator begin() { return children.begin(); } std::vector::iterator end() { return children.end(); } std::vector select(const selector, bool nested = true); std::string to_html(char indent = ' ', bool child = true, bool text = true) const; std::string to_raw_html(bool child = true, bool text = true) const; std::string to_text(bool raw = false) const; node* get_parent() const { return parent; } std::string get_attr(const std::string&) const; void set_attr(const std::string&, const std::string&); node& append(const node&); void walk(std::function); node_t type_node = node_t::none; tag_t type_tag = tag_t::none; bool self_closing = false; std::string tag_name; std::string content; std::map attributes; private: node* parent = nullptr; bool bogus_comment = false; std::vector children; int index = 0; int node_count = 0; void copy(const node*, node*); void walk(node&, std::function); void to_html(std::ostream&, bool, bool, int, int&, char, bool&, bool&) const; void to_raw_html(std::ostream&, bool, bool) const; void to_text(std::ostream&, bool&) const; friend class selector; friend class parser; }; class selector { public: selector() = default; selector(const std::string); selector(const char* s) : selector(std::string(s)) {} operator bool() const { return !matchers.empty(); } private: struct condition { condition() = default; condition(const condition& d) = default; condition(condition&&); std::string tag_name; std::string id; std::string class_name; std::string index = "0"; std::string attr; std::string attr_value; std::string attr_operator; bool operator()(const node&) const; }; struct selector_matcher { selector_matcher() = default; selector_matcher(const selector_matcher&) = default; selector_matcher(selector_matcher&&); bool operator()(const node&) const; bool dc_first = false; bool dc_second = false; private: bool all_match = false; std::vector> conditions; friend class selector; }; std::vector::const_iterator begin() const { return matchers.begin(); } std::vector::const_iterator end() const { return matchers.end(); } std::vector matchers; friend class node; friend class parser; }; class parser { public: parser& set_callback(std::function cb); parser& set_callback(const selector, std::function cb); parser& set_callback(std::function cb); void clear_callbacks(); node_ptr parse(const std::string& html); private: void operator()(node&); void handle_node(); int state = STATE_DATA; node* current_ptr = nullptr; node_ptr new_node; std::vector>> callback_node; std::vector> callback_err; }; namespace utils { node make_node(node_t, const std::string&, const std::map& attributes = {}); template typename std::enable_if::value, std::unique_ptr>::type make_unique(Args &&...args) { return std::unique_ptr(new T(std::forward(args)...)); } template typename std::enable_if::value, std::unique_ptr>::type make_unique(std::size_t n) { typedef typename std::remove_extent::type RT; return std::unique_ptr(new RT[n]); } } } #endif qstardict/plugins/kiwix/kiwix.cpp000066400000000000000000000165741453553600400175510ustar00rootroot00000000000000/***************************************************************************** * kiwix.cpp - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "kiwix.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "htmlparser/html.hpp" #include "../pluginserver.h" #include "adddialog.h" #include "grayscale.h" #include "settingsdialog.h" Kiwix::Kiwix(QObject *parent) : QObject(parent) { QDir dataDir(dataDirPath()); if (! dataDir.exists()) dataDir.mkpath("."); QSettings settings("qstardict", "qstardict"); setRemoveColors(settings.value("Kiwix/removeColors", true).toBool()); } void Kiwix::saveSettings() { QSettings settings("qstardict", "qstardict"); settings.setValue("Kiwix/removeColors", removeColors()); } Kiwix::~Kiwix() { for (auto archive: m_archives) delete archive; m_archives.clear(); saveSettings(); } QIcon Kiwix::pluginIcon() const { return QIcon(":/pics/logo.svg"); } void Kiwix::setLoadedDicts(const QStringList &loadedDicts) { for (zim::Archive *archive: m_archives) delete archive; m_archives.clear(); for (const QString &dict: loadedDicts) { try { m_archives[dict] = new zim::Archive((dataDirPath() + "/" + dict + ".zim").toStdString()); } catch (std::exception &e) { // do nothing } } } QStringList Kiwix::loadedDicts() const { return m_archives.keys(); } QStringList Kiwix::availableDicts() const { QDir dataDir(dataDirPath()); QStringList zimFiles = dataDir.entryList({ "*.zim" }); QStringList dicts; for (const QString &zimFile: zimFiles) dicts.push_back(QFileInfo(zimFile).completeBaseName()); return dicts; } Kiwix::DictInfo Kiwix::dictInfo(const QString &dict) { QString pluginId = qsd->idForPlugin(this); DictInfo result(pluginId, dict); if (m_archives.contains(dict)) { zim::Archive *archive = m_archives[dict]; try { result.setAuthor(archive->getMetadata("Creator").c_str()); } catch (const zim::EntryNotFound &) { } try { result.setDescription(archive->getMetadata("Description").c_str()); } catch (const zim::EntryNotFound &) { } result.setWordsCount(archive->getEntryCount()); result.setFilename(dataDirPath() + "/" + dict + ".zim"); } return result; } bool Kiwix::isTranslatable(const QString &dict, const QString &word) { if (! m_archives.contains(dict)) return false; if (word.isEmpty()) return false; zim::Archive *archive = m_archives[dict]; try { zim::Entry entry = archive->getEntryByTitle(word.toStdString()); } catch (const zim::EntryNotFound &e) { return false; } return true; } Kiwix::Translation Kiwix::translate(const QString &dict, const QString &word) { if (! m_archives.contains(dict)) return Translation(); if (word.isEmpty()) return Translation(); zim::Archive *archive = m_archives[dict]; zim::Entry entry = archive->getEntryByTitle(word.toStdString()); std::string data; if (entry.isRedirect()) { zim::Item item = entry.getRedirect(); zim::Blob blob = item.getData(); data = blob.data(); } else { zim::Item item = entry.getItem(); zim::Blob blob = item.getData(); data = blob.data(); } html::parser parser; html::node_ptr root = parser.parse(data); QString translation = root->to_html().c_str(); // remove hyperlinks static const QRegularExpression aOpenRegExp("]*>", QRegularExpression::CaseInsensitiveOption | QRegularExpression::MultilineOption); translation.replace(aOpenRegExp, " "); static const QRegularExpression aCloseRegExp("", QRegularExpression::CaseInsensitiveOption); translation.replace(aCloseRegExp, " "); translation.replace(" ,", ","); translation.replace(" .", "."); translation.replace(" ;", ";"); // remove colors if (m_removeColors) translation = htmlToGrayscale(translation); #if 0 for (auto languageNode: root->select("details[data-level='2']")) { auto h2Node = languageNode->select("h2").at(0)->at(0); std::string language = h2Node->to_text(); if (language != "English" && language != "Russian" && language != "Английский" && language != "Русский") // FIXME continue; translation = languageNode->to_html().c_str(); translation = translation.replace(QRegularExpression("].*"), ""); break; } #endif return Translation(word, dict, translation, true); } QStringList Kiwix::findSimilarWords(const QString &dict, const QString &word) { QStringList result; if (! m_archives.contains(dict)) return result; if (word.isEmpty()) return result; zim::Archive *archive = m_archives[dict]; int count = 0; for (auto entry: archive->findByTitle(word.toStdString())) { result << QString(entry.getTitle().c_str()).replace(QRegularExpression("^A/"), ""); if (++count >= 100) break; } return result; } std::optional Kiwix::addDictionary(QWidget *parent, const QString &fileName) { AddDialog addDialog(parent, fileName); int result = addDialog.exec(); if (result == QDialog::Accepted) return QFileInfo(fileName).completeBaseName(); else return std::nullopt; } bool Kiwix::removeDictionary(const QString &dict) { return QFile::remove(dataDirPath() + "/" + dict + ".zim"); } int Kiwix::execSettingsDialog(QWidget *parent) { SettingsDialog dialog(this, parent); return dialog.exec(); } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/kiwix/kiwix.h000066400000000000000000000067331453553600400172120ustar00rootroot00000000000000/***************************************************************************** * kiwix.h - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef KIWIX_H #define KIWIX_H #include "../dictplugin.h" #include "../metadata.h" #include #include #include #include #include class Kiwix: public QObject, public QStarDict::BasePlugin, public QStarDict::DictPlugin, public QStarDict::ConfigurablePlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qstardict.KiwixPlugin/1.0" FILE "kiwix.json") Q_INTERFACES(QStarDict::BasePlugin QStarDict::DictPlugin QStarDict::ConfigurablePlugin) public: Kiwix(QObject *parent = 0); ~Kiwix(); QIcon pluginIcon() const; Features features() const { return Features(Feature::SearchSimilar); } QStringList availableDicts() const; QStringList loadedDicts() const; void setLoadedDicts(const QStringList &loadedDicts); DictInfo dictInfo(const QString &dict); bool isTranslatable(const QString &dict, const QString &word); Translation translate(const QString &dict, const QString &word); QStringList findSimilarWords(const QString &dict, const QString &word); std::optional dictionaryFileFilter() const { return tr("Kiwix ZIM files (*.zim)"); } std::optional addDictionary(QWidget *parent, const QString &fileName); bool isDictionaryRemovable(const QString &dict) { return true; /* all of the dictionaries are stored in dataDirPath(), so all of them can be removed */ } bool removeDictionary(const QString &dict); static QString dataDirPath() { return QDir::homePath() + "/.qstardict/dic/kiwix"; } int execSettingsDialog(QWidget *parent = nullptr) override; /** * Whether "remove colors" option is enabled */ bool removeColors() const { return m_removeColors; } /** * Set "remove colors" option */ void setRemoveColors(bool removeColors) { m_removeColors = removeColors; } private: QHash m_archives; bool m_removeColors; void saveSettings(); }; #endif // KIWIX_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/kiwix/kiwix.pro000066400000000000000000000036771453553600400175670ustar00rootroot00000000000000############################################################################# # kiwix.pro - QStarDict, a dictionary for learning foreign languages # # Copyright (C) 2023 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TARGET = kiwix META_VERSION = 1.0 META_NAME = Kiwix META_DESC = A Kiwix plugin META_AUTHORS = Alexander Rodin META_FEATURES = dict;defenable include(../plugin.pri) win32:CONFIG += plugin CONFIG += link_pkgconfig PKGCONFIG += libzim HEADERS += \ kiwix.h \ adddialog.h \ grayscale.h \ htmlparser/html.hpp \ settingsdialog.h SOURCES += \ kiwix.cpp \ adddialog.cpp \ grayscale.cpp \ htmlparser/html.cpp \ settingsdialog.cpp FORMS += \ adddialog.ui \ settingsdialog.ui RESOURCES += \ pixmaps/pixmaps.qrc qstardict/plugins/kiwix/pixmaps/000077500000000000000000000000001453553600400173565ustar00rootroot00000000000000qstardict/plugins/kiwix/pixmaps/logo.svg000066400000000000000000000033321453553600400210400ustar00rootroot00000000000000 qstardict/plugins/kiwix/pixmaps/pixmaps.qrc000066400000000000000000000001331453553600400215430ustar00rootroot00000000000000 logo.svg qstardict/plugins/kiwix/settingsdialog.cpp000066400000000000000000000036471453553600400214330ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.cpp - QStarDict, a dictionary for learning foreign * languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "settingsdialog.h" #include "kiwix.h" SettingsDialog::SettingsDialog(Kiwix *plugin, QWidget *parent) : QDialog(parent), m_plugin(plugin) { setupUi(this); removeColorsBox->setChecked(m_plugin->removeColors()); } void SettingsDialog::accept() { m_plugin->setRemoveColors(removeColorsBox->isChecked()); QDialog::accept(); } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/kiwix/settingsdialog.h000066400000000000000000000035351453553600400210740ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.h - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SETTINGSDIALOG_H #define SETTINGSDIALOG_H #include #include "ui_settingsdialog.h" class Kiwix; class SettingsDialog: public QDialog, private Ui::SettingsDialog { Q_OBJECT public: SettingsDialog(Kiwix *plugin, QWidget *parent = nullptr); public slots: void accept() override; private: Kiwix *m_plugin; }; #endif // SETTINGSDIALOG_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/kiwix/settingsdialog.ui000066400000000000000000000041331453553600400212550ustar00rootroot00000000000000 SettingsDialog 0 0 239 116 Kiwix plugin settings Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale buttonBox accepted() SettingsDialog accept() 227 311 157 274 buttonBox rejected() SettingsDialog reject() 295 317 286 274 qstardict/plugins/metadata.h000066400000000000000000000047611453553600400165030ustar00rootroot00000000000000/***************************************************************************** * dictplugin.h - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2016 Ilinykh Sergey * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef QSD_METADATA_H #define QSD_METADATA_H #include #include #include #include namespace QStarDict { // IMPORTANT: If you change this structure, // don't forget to change BasePlugin interface version struct PluginMetadata { QString id; // not-human name. to identify QString name; // human name. to display it QString version; // plugin's version QString description; // short discription to show in plugins list or tooltip QStringList authors; // list of authors preferably in format "Name " QStringList features; // comma-separated list of supported features qstardict knows about // "dict" - dictionay plugin, // "defenable" - enable this plugin by default if not cached // "de" - desktop environment plugin // "toolbar" - toolbar plugin QIcon icon; // plugin's icon. it's cached as soon as we enable plugin once QVariantMap extra; // for any not described here use }; } // namespace QStarDict #endif // QSD_METADATA_H qstardict/plugins/multitran/000077500000000000000000000000001453553600400165615ustar00rootroot00000000000000qstardict/plugins/multitran/multitran.cpp000066400000000000000000000170361453553600400213130ustar00rootroot00000000000000/***************************************************************************** * This file is a part of QStarDict, a StarDict clone written using Qt * * multitran.cpp - Plugin for multitran-data (multitran.sf.net) * * Copyright (C) 2008 Nick Shaforostoff * * Copyright (C) 2004 Stanislav Ievlev * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "multitran.h" //#include "settingsdialog.h" #include // #include #include /* /usr/include/mt/query /usr/include/btree /usr/include/mt/support /usr/include/facet */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef mt::singleton_array txtdb_type; struct compare_names { compare_names(const std::string& from,const std::string& to): from_(from), to_(to) {} bool operator()(const mt::lang_pair& lng1,const mt::lang_pair& lng2) { return distance(lng1) < distance(lng2); } int distance(const mt::lang_pair& lng) { std::string from_name=mt::lang_name(lng.first); std::string to_name=mt::lang_name(lng.second); return (!from_.empty() && !from_name.compare(0,from_.size(),from_)) + (!to_.empty() && !to_name.compare(0,to_.size(),to_)); } std::string from_,to_; }; int compare_articles(const mt::article& a1,const mt::article& a2) { if (a1.lgk() != a2.lgk()) return a2.lgk() > a1.lgk(); else return a2.subject() > a1.subject(); } struct show { show(std::string& r_, bool& found_): r(r_),found(found_) {} void operator()(mt::article_set as) { mt::file_map& subj = txtdb_type::instance(mt::datapath+mt::path_separator()+"subjects.txt"); mt::file_map& spart = txtdb_type::instance(mt::datapath+mt::path_separator()+"speechparts.txt"); if (!as.articles_.empty()) { found=true; std::sort(as.articles_.begin(),as.articles_.end(),compare_articles); int prev_lgk = -1; std::string prev_subject = "x"; for(size_t i=0;i(mt::speech_part(a.lgk())))+"

Документация QStarDict

QStarDict — это словарное приложение. Оно позволяет пользователю устанавливать словари Kiwix и StarDict и искать слова в этих словарях.

Эта инструкция должна помочь Вам в использовании QStarDict.

Содержание

Starting QStarDict

QStarDict можно запустить либо через меню среды среды рабочего стола в разделе «Образование», либо с использованием командной строки путем набора команды

qstardict

Работа в фоне

Когда QStarDict запущен, он может быть либо в нормальном режиме, когда главное окно показано, как здесь: или он может быть запущен в фоновом режиме.

Когда QStarDict запущен в фоновом режиме, он может быть показать в области уведомлений:

Предназначение фонового режима — сделать возможным для QStarDict сканирование cвыделения в других приложениях и показ всплывающего окна со словарными статьями. Смотрите раздел о всплывающем окне для деталей.

Для того, чтобы сделать возможным для QStarDict быть запущенным в фоне, соответствующая настройка должна быть включена: По умолчанию она включена.

QStarDict запоминает, был ли он в нормальном или фоновом режиме, при выходе, и при последующем запуске восстанавливает состояние нахождения в фоновом режиме.

Если Вы хотите, чтобы QStarDict запускался в фоновом режиме, используйте опцию командной строки --background, запуская QStarDict как

qstardict --background

Запуск с системой

Возможно настроить запуск QStarDict вместе с системой в распространенных средах рабочего стола. Для того, чтобы включить запуск QStarDict с системой, используйте соответствующую настройку:

По умолчанию запуск с системой отключен.

Установка словарей Kiwix

Kiwix — это проект, целью которого является создание оффлайн-версий веб-сайтов. Наиболее выдающимся среди этих веб-сайтов для использования с QStarDict является Викисловарь.

Для того, чтобы загрузить оффлайн-версии Викисловаря для языков, которые Вам требуются, посетите Страницу загрузки ZIM-файлов и выберите версию "nopic" Викисловаря для языка, который Вам требуется.

Обратите внимание, что язык, указанный в имени файла является целевым языком, а не исходным языком. Каждый язык содержит статьи для слов на всех исходных языках на целевом языке. К примеру, если Вы хотите смотреть слова на английском, переведенные на русский, Вам нужно выбрать файл с языковым кодом «ru_all».

Примеры названий файлов:

  • «wiktionary_ru_all_nopic_2023-09.zim» — словарь на русском для всех языков;
  • «wiktionary_en_all_nopic_2023-07.zim» — словарь на английском для всех языков.

Предположим, что Вы загрузили файл «wiktionary_en_all_nopic_2023-07.zim» в директорию «~/Загрузки».

Он может быть установлен из вкладки «Словари» диалога настроек, который может быть открыт с использованием меню «Настройки» → «Конфигурация» в главном окне:

Для того, чтобы установить словарь, нажмите кнопку «Добавить словарь», которая отмечена на скриншоте.

Выполнение этого приведет к открытию файлового диалога:

В файловом диалоге выберите фильтр «ZIM файлы Kiwix» (отмеченный на скриншоте) и затем выберите ZIM файл, который Вы хотите добавить.

Когда файл выбран, появится диалог добавления словаря:

Он предложит Вам переместить словарь в директорию QStarDict.

Также возможно не перемещать словарный файл, а создать символическую ссылку на словарный файл. Для того, чтобы сделать это, выберите пункт меню "Symlink" в комбинированном списке в диалоге добавления.

После импорта словарю он появится наверху в списке словарей в диалоге настроек:

После нажатия кнопки OK добавленные словари будут включены и станет возможным искать слова из него.

Установка словарей StarDict

QStarDict поддерживает словари в формате StarDict 2.x и StarDict 3.x.

Словарь StarDict состоит из трех файлов:

  • «.ifo» — файл, содержащий метаданные о словаре;
  • «.idx» — индексный файл словаря;
  • «.dict.dz» — файл, содержащий словарные статьи.

Словарь StarDict может быть установлен в QStarDict путем открытия вкладки «Словари» в диалоге настроек, который может быть открыт с использованием меню «Настройки» → «Конфигурация» в главном окне: Для того, чтобы установить словарный файл в QStarDict, нажмите кнопку «Добавить словарь», которая отмечена на скриншоте.

Это приведет к открытию файлового диалога:

В файловом диалоге выберите фильтр «IFO файлы StarDict» (отмеченный на скриншоте) и затем выберите ".ifo" файл, который Вы хотите добавить.

Обратите внимание, что «.idx» и «.dict.dz» файлы должны быть в той же директории, что и «.ifo» файл для того, чтобы словарь мог быть успешно импортирован.

После импортирования словаря он появится наверху списка словарей в диалоге настроек:

После нажатия OK добавленные словари будут включены и станет возможным искать слова в нем.

Поиск слов

Является возможным искать слова в главном окне QStarDict. Слова, которые требуется найти, могут быть введены в текстовое поле ввода. По умолчанию слова ищутся по мере того, как они введены, но это поведение может быть отключено в разделе «Общие настройки» диалога конфигурации.

Всплывающее окно

Всплывающее окно — это окно, которое может быть показано рядом со словами, выделенными мышью. Его поведение может быть настроено во вкладке «Всплывающее окно» диалога конфигурации.

"; prev_lgk = a.lgk(); prev_subject = "x";//reset subject } if (prev_subject != a.subject()) { r+=""; r+=subj.any_name(a.subject()); r+=""; r+=a.translated(); prev_subject = a.subject(); } else r+=", "+a.translated(); } r+=""; } } std::string &r; bool& found; }; std::string do_translate(const std::string& text,mt::lang_code from,mt::lang_code to) { bool found=false; std::string r=""; mt::phrase ph; mt::fill_phrase(ph,text,from); mt::translation tr(ph,from,to); std::for_each(tr.asets().begin(), tr.asets().end(), show(r,found)); r+="
"; if (found) return r; return ""; } Multitran::Multitran(QObject *parent) : QObject(parent) { // QSettings settings("qstardict","qstardict"); // m_dictDirs = settings.value("Multitran/dictDirs", m_dictDirs).toStringList(); // m_reformatLists = settings.value("Multitran/reformatLists", true).toBool(); } Multitran::~Multitran() { // QSettings settings("qstardict","qstardict"); // settings.setValue("Multitran/dictDirs", m_dictDirs); // settings.setValue("Multitran/reformatLists", m_reformatLists); } QStringList Multitran::availableDicts() const { return QStringList("Multitran"); } void Multitran::setLoadedDicts(const QStringList &loadedDicts) { } Multitran::DictInfo Multitran::dictInfo(const QString &dict) { // ::DictInfo nativeInfo; // nativeInfo.wordcount = 0; DictInfo result(name(), dict); result.setAuthor("Multitran.ru"); result.setDescription(tr("1 mln words excerpt of multitran.ru")); result.setWordsCount(-1); return result; } bool Multitran::isTranslatable(const QString &dict, const QString &word) { return true; } Multitran::Translation Multitran::translate(const QString &dict, const QString &word) { QTextCodec* c=QTextCodec::codecForMib(2251); std::string text=c->fromUnicode(word).data(); std::string from_lang,to_lang; int i=word.size(); while(--i>=0) if (word.at(i).unicode()>127) break; if (i!=-1) from_lang="russian"; else from_lang="english"; mt::linguas avail_langs; mt::linguas::iterator lang = std::max_element(avail_langs.begin(), avail_langs.end(), compare_names(from_lang,to_lang)); if (lang == avail_langs.end() || (!from_lang.empty() && !to_lang.empty() && (compare_names(from_lang,to_lang).distance(*lang)!=2))) { //std::cerr<<"illegal language names"<
multitran

"; QString queryResult=c->toUnicode(do_translate(lower_str(lang->first,text), lang->first,lang->second).c_str()); if (queryResult.isEmpty()) return Translation(); return Translation(word,"Multitran",queryResult); } QStringList Multitran::findSimilarWords(const QString &dict, const QString &word) { return QStringList(); } int Multitran::execSettingsDialog(QWidget *parent) { //::SettingsDialog dialog(this, parent); //return dialog.exec(); return 0; } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/multitran/multitran.h000066400000000000000000000061211453553600400207510ustar00rootroot00000000000000/***************************************************************************** * This file is a part of QStarDict, a StarDict clone written using Qt * * multitran.cpp - Plugin for multitran-data (multitran.sf.net) * * Copyright (C) 2008 Nick Shaforostoff * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef MULTITRAN_H #define MULTITRAN_H #include "../dictplugin.h" #include #include #include class Multitran: public QObject, public QStarDict::DictPlugin { Q_OBJECT Q_INTERFACES(QStarDict::DictPlugin) Q_PLUGIN_METADATA(IID "org.qstardict.DictPlugin/1.0" FILE "multitran.json") public: Multitran(QObject *parent = 0); ~Multitran(); QString name() const { return "multitran"; } QString version() const { return "0.1"; } QString description() const { return "The Multitran plugin"; } QStringList authors() const { return QStringList() << tr("Stanislav Ievlev ") << tr("Nick Shaforostoff "); } Features features() const { return Features(/*SearchSimilar | SettingsDialog*/); } QStringList availableDicts() const; QStringList loadedDicts() const {return QStringList("Multitran");}//{ return m_loadedDicts.keys(); } void setLoadedDicts(const QStringList &loadedDicts); DictInfo dictInfo(const QString &dict); bool isTranslatable(const QString &dict, const QString &word); Translation translate(const QString &dict, const QString &word); virtual QStringList findSimilarWords(const QString &dict, const QString &word); int execSettingsDialog(QWidget *parent); //friend class SettingsDialog; private: QStringList m_dictDirs; QHash m_loadedDicts; }; #endif // MULTITRAN_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/multitran/multitran.pro000066400000000000000000000032061453553600400213230ustar00rootroot00000000000000############################################################################# # multitran.pro - QStarDict, a StarDict clone written using Qt # # Copyright (C) 2008 Nick Shaforostoff # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TARGET = multitran include(../plugin.pri) win32:CONFIG += plugin HEADERS += multitran.h SOURCES += multitran.cpp # FORMS += settingsdialog.ui # RESOURCES += pixmaps/pixmaps.qrc LIBS += -lmtquery -lmtsupport -lbtree -lfacet OTHER_FILES += \ multitran.json qstardict/plugins/plugin.pri000066400000000000000000000041721453553600400165600ustar00rootroot00000000000000############################################################################# # plugin.pri - QStarDict, a StarDict clone written using Qt # # Copyright (C) 2008 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# isEmpty(TARGET):error(You must set TARGET before including $$_FILE_) isEmpty(META_DESC):error(You must set META_DESC before including $$_FILE_) TEMPLATE = lib QMAKE_TARGET_PRODUCT = QStarDict QMAKE_TARGET_DESCRIPTION = $$META_DESC include(../qstardict.pri) VERSION = $$META_VERSION CONFIG += plugin INCLUDEPATH += $$dirname(PWD) target.path = $$PLUGINS_DIR INSTALLS += target TARGET_JSON = "\ { \ \"id\": \"$$TARGET\", \ \"name\": \"$$META_NAME\", \ \"version\" : \"$$VERSION\", \ \"description\": \"$$META_DESC\", \ \"authors\": \"$$META_AUTHORS\", \ \"features\": \"$$META_FEATURES\" \ }" write_file($${TARGET}/$${TARGET}.json, TARGET_JSON) OTHER_FILES += $${TARGET}.json # the same as in json DEFINES += PLUGIN_ID=\\\"$$TARGET\\\" qstardict/plugins/plugins.pri000066400000000000000000000001251453553600400167350ustar00rootroot00000000000000isEmpty(ENABLED_PLUGINS) { ENABLED_PLUGINS=kiwix print savetofile stardict web } qstardict/plugins/plugins.pro000066400000000000000000000027031453553600400167470ustar00rootroot00000000000000############################################################################# # plugins.pro - QStarDict, a StarDict clone written using Qt # # Copyright (C) 2008 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# include(plugins.pri) TEMPLATE = subdirs SUBDIRS = $$ENABLED_PLUGINS qstardict/plugins/pluginserver.h000066400000000000000000000044261453553600400174460ustar00rootroot00000000000000/***************************************************************************** * dictplugin.h - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2016 Sergey Il'inykh * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ /* * This interface is intended to be used from plugin * to access QStarDict internals */ #ifndef PLUGINSERVER_H #define PLUGINSERVER_H #include "metadata.h" namespace QStarDict { class PluginServer { public: virtual ~PluginServer() {} /** * Returns plugin's metadata. name/descriptions/authors/etc. */ virtual const PluginMetadata &metadata(const QString &pluginId) const = 0; /** * Return a directory that contains plugin's cofiguration data. */ virtual QString configDir(const QString &pluginId) const = 0; /** * Returns plugin's id. where instance is instance of plugin */ virtual QString idForPlugin(QObject *instance) const = 0; }; } // namepace QStarDict Q_DECLARE_INTERFACE(QStarDict::PluginServer, "org.qstardict.PluginServer/1.0") #endif // PLUGINSERVER_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/print/000077500000000000000000000000001453553600400156765ustar00rootroot00000000000000qstardict/plugins/print/pixmaps/000077500000000000000000000000001453553600400173575ustar00rootroot00000000000000qstardict/plugins/print/pixmaps/document-print.png000066400000000000000000000150711453553600400230410ustar00rootroot00000000000000PNG  IHDR>asBIT|dIDATx]Ky{^;;\-C. I&!rAd%B {A! G6 [ (rrC V@ Gc, %d̥V}̣+ݝw]]W_U#0#pAqy=ð`:>X83 }v?q8F38AI'o3 ^{00p <<{i04 \GpS7~Ç8Nؠa`w`w  CACCa(~ay(S xO΃ A!B`˂AuQrG #fA?V]|?}],a'3PZ,sAyhMNaM7"|&I I#z ua!A}@vT/llMB `/Ac@)|n6 \\ L |njA!,UcRa|V-&#:'`̂,tȊWBAcH d(0FB>Vy޽0µŋymkk "@ >B$-!@MuDx<3p^.{ϲxƮx+2Wt=TUd2v-`R rʵF`mYBx!,x r??d? ع\(_ZZZ*7R;A_ @)KXZZ@1rTl @B$R~_*o"A x.X!He!J!Nc~~ұ.wG`Y  l˹ЅBL= }"~}q@ӠvZ"@M?WXqBQl>  j0MIA,Xt@{z^M}P%; lۆ8D`j3.b񾀸FmQ5c B؁G¤H'$"Mly^ f'GD5_w'o'6 ]Nڵ=p4@>.Ak (1c  k^Q=lEJ 6`5:}Ba `,ˊDVV{R^`pB<z_5~/ c ԛ<c4RUP%\M_N| evl2 '8 ;I@&1a~*|5+oags`>뺒Wb$T %? :#旻Uy\=8>]L /LSP@ dP  7e)@ DürK h9蜿n8qΠCf  QAʉa'*ATo9erM?,xWgq,jy(xqE-k0?a-C5&gPF柩Pʿ, W^oCYCFSϋTї_~yނ\BM*!j!fh$>h' G-IAVKt։'(cW,!gZVqr9f~ }^)A9BmIf/o}~,hUز}q wMQ;;r}W\ښ/@:-@QD{5曰m;4z9O ,8{ 7n`{{;b/Ƞ >@R0uMWN~XaB󰽽[nP(Ě3/_6GEe_wuW&aa.lSo`<7׋rqh.C=z wDfyRj넿 #(eh kU@ Bt]&vyv< ڎ@)=AiQR)>}2^{WA,`ppo֋s:BcO@ABhQFwRcgSBt: BA8xu/X>I-B&wFP( ɠP(ve ^;%[(8zD݀cWM PzMd@)E*K&ڣvjt9N/l]/0Ad-B6}Aֶ3\tiR:щwBL&uA) Ar92ƐfwDCWK.ͽKm꽪d2h4?`l٬:!dU2ɛmgtFB] N/k#!(R$@v8/@0}(,2Yq5^hCZԢwŢM)e[o#PJ5F1PJY.C&(O&/|k<ضXZ< !'kk/~j ^7X8pcӺs?lF^s^Vu Z z\M_nK>!@`}Ba;Nu@f q3Z6ap.zyvҢ>zhʕ+} >ld28tPݱx B ʲt6&ml6qMlok{&<"/vEQ2rN͠*1zB\} \E@H)rN 6)Fzb@` %-1ʃ~f݄hPZch )tQ@#!  G{qWT*;wg?ֺrOsrmO!Ho|l6{Ft:SN᭷bW===㷿mz4{%#hJ qo{t>W1Gyfڵk({nW- .V tjbjj'm^^ZvrH$ L0XvM@ZE^ y?yx{rfY2 j70^,xhW{QjX__zPL~w_w!F,~O?O: 9J8C ¿W#}?G(ſǰG|?2+Bؔ0(p?B2( G}D(,+ p0X^^͛7a6Μ9B!eۑNt`i+++ glO~{cc᥇Zr(Y0ы #t||Y|x׈HD 0"ò,x67QV1>>WT/Mw- ЋG.q8~8G'*^XeGh4\f1>w¶mLMMavv6q!۶OƍrמkM^)y1| `o QVqiEqWSS^/7 :;u#tyħ~|>)pZezy|>@ցN<sssX\\ķm;4^ߍ<r-IO>dz>_|'Nܾ}B=XDk.& h6 ӷ~:{o_o6}Qllגwݻ3xS?SO=w]5ЄEȉ^olYc{3xQVG .7ވ]Pݻx/crr R ' qt> r֭[~H{g7n'0tmayy ++kjHR!?&E>;`R`sswލ|7A2;M꫘D>/)UK^d!`>]߳i69LPk'@`B21jěUx3 «3xkw rJI g \iOg": E'Йh#@t! 3IT~ȘPj57U Ri~l cgO^@/| V Tf=:`cc#[8gd tukՈj.QǏIaשK),0--Hpqb➛&^{#ZnlTIV\׍}rQlG9{Kp+ QÑ#GffVu } ַ^8?SOby!Jxվ&J^@jRSP G81;w>A*B:KT pʿ'竇L2 >k>?MK RA">E.C6EVk[0ٮC!1ϟlksDM@螃-@Ps "au&<066&^lnsN"Ʊcǰ fggaۖI .E+T5Kgafj<* fggN0>>l6E0>vE LMMamm ^R9˲W’Ϳd/`2恬a_0 (*f8&&&P.)^uVT*R`bbh8T- `j?F:k-0>' J "cbbsNzիb9R)4 TUELNկ>`rC5DRc(xN`lgb5 r:fQ*T!_]w'H"JTxww 'N@VC>8Vؘ4_f}}tJ-VWko|,1?Xks* >䓶#8==bN9JvOR8zXdOK:ϡa"=z oR XY{9DON>n 2H(hZpf){YrR, "N:)^x'd8N{4a^Dl"aB`YA&3gNճ~ byy7U[PJA}]\~(}ƞ@SP*ͽ.a(Jfsq~%/wy*~C#wTf ʥ+Hk 8Re[[*fffB6rCqff:"(4x:eMdͩ%o 9?3֛ ܵ|;>p:xZly;2&Q qysyi-$ B0;;[0p0 VM$NҝF LdヂֻB&ⅮK}yD:VF!AFm.w:UTmjK"IwM5ۭt# Ψ3Ƞ5P ^P9o|%mu'6tNLrwjKV*_/3@u':rU7,j)?N3b' q}URl&OQ~4 :q5]>6@Wy_/faOm7S0OF ^&]9:urN $8@}zhNKIENDB`qstardict/plugins/print/pixmaps/pixmaps.qrc000066400000000000000000000001451453553600400215470ustar00rootroot00000000000000 document-print.png qstardict/plugins/print/print.cpp000066400000000000000000000037751453553600400175520ustar00rootroot00000000000000/***************************************************************************** * print.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2019 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "print.h" #include #include QIcon Print::pluginIcon() const { return QIcon(":/pics/document-print.png"); } Print::Print(QObject *parent) : QObject(parent) { } QIcon Print::toolbarIcon() const { return QIcon(":/pics/document-print.png"); } QString Print::toolbarText() const { return tr("Prin&t translation"); } void Print::execute(QStarDict::DictWidget *dictWidget) { QPrinter printer(QPrinter::HighResolution); QPrintDialog dialog(&printer, dictWidget); if (dialog.exec() == QDialog::Accepted) dictWidget->translationView()->print(&printer); } qstardict/plugins/print/print.h000066400000000000000000000041231453553600400172030ustar00rootroot00000000000000/***************************************************************************** * print.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2018 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef PRINT_H #define PRINT_H #include "../baseplugin.h" #include "../toolbarplugin.h" #include class QNetworkAccessManager; class QNetworkReply; class Print: public QObject, public QStarDict::BasePlugin, public QStarDict::ToolbarPlugin { Q_OBJECT Q_INTERFACES(QStarDict::BasePlugin QStarDict::ToolbarPlugin) Q_PLUGIN_METADATA(IID "org.qstardict.PrintPlugin/1.0" FILE "print.json") public: Print(QObject *parent = 0); QIcon pluginIcon() const; QIcon toolbarIcon() const; QString toolbarText() const; void execute(QStarDict::DictWidget *dictWidget); }; #endif // PRINT_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/print/print.pro000066400000000000000000000032601453553600400175550ustar00rootroot00000000000000############################################################################# # print.pro - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2018-2019 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TARGET = print META_VERSION = 1.0 META_NAME = Print Translations META_DESC = A plugin for printing translations META_AUTHORS = Alexander Rodin META_FEATURES = toolbar include(../plugin.pri) HEADERS += \ print.h SOURCES += \ print.cpp RESOURCES += \ pixmaps/pixmaps.qrc qstardict/plugins/savetofile/000077500000000000000000000000001453553600400167035ustar00rootroot00000000000000qstardict/plugins/savetofile/pixmaps/000077500000000000000000000000001453553600400203645ustar00rootroot00000000000000qstardict/plugins/savetofile/pixmaps/document-save-as.png000066400000000000000000000304371453553600400242540ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATx}yEٜ"* O}/ʡ `@A OAC ("AI$$"{Gkzfgw'!7cUߪvNI;i'vNI;i' FrQG_yYqae2FSϧ9j"ˁR 0"WSu<!lF}r* ϋܪX(B7$ |@ip`vgB5ㄒ;:niFs̹{yPB@T\y7mے@C<~XTo$ cKۯ|8u@_ ޶s|ػ&~~C47GXT,|v!3@)!sJE7S )T6 RvNc;o C܉W^w]vCۧNZH`mJRʫסfd" 4 By @X@z}إ@:^BjoG)` m!-{i`M!a$t3}Dc lMM,1![/ @2R"+u%~NZYjE{&R]t(Zާ²e`MMM? x(-@B̥ oCI[8}[~矏6 / CNEh=0+c1/V~W{. =$㛖f)-l*ԜycCOpx'_Y+眃>6wn֬Aq W@ߏ'_q91Tvܦ$B@ ɁBp);}}OS[@r>GuO]f^pL  /)SзXyQ ,^sAkP><Ф#A/m@Q[Ab[BxT*!pt6ZHY3lX|=ޑVBaKs}Buݴ ]tQ콼^*оX^QɶQ]$Qu= 84/Tk/*];ieaL{|y?8=t={b9{!KbWY6TET#  )n$CiZht?OᓘѺ2hie%SB_)nȣ{".v]81A_~9 L!^~+/("X.;H{!J 1(:f6?+W[vS8E~ߺaST.c@ ZᩧnׂX?n s@# ;|ǒy>¥.q|-sy^,R @n06N X_pu?)hB@#`ǐ^R E>M+=q޲?Ä+a x>=Ey0gy.(qB :s)śEwމ=~{ 7O5]IKDh{"_-k^=2o Ӓƞeg`Y!B=G^[mp]7`y.ĪD†O6\DÜ9qm oTHoАFyb Y)sӚg03hn2?߲ -:xqî6" Df bGD |GՌ ޮY{Y,8%5cwq YUXTJB dt喏Ōa0LiübA8 <0*Ide֡„|IY2G)C<)§cQӾt7^r=zxyYX̕V| 3@i01Fi  FD;F-b#DgsWM; fX+6pxǍQ_{o]Es&Q >3=jQ+oflbÌ c'ajnr$)}}ٻ6߼1$Qf,&iei 1bk,C!0x4#l%CHh(HUFZB \j>K粬l"_>>!gg\kÛW7A2"+mFv(#GXk\H߾ߚvf|ף/7 [/Eh$^,"Tmv 6#(]1;g.^sk ߾N> 2Rg:$@.i!} 񏤓b6D m~Q9{s8N S1x흎ݘZPC"3o() nHCP̠~bu4՟F 3(M5Wadh,@ЭKǠuN=j: }gWcRoO>` j ޷滊Cc#A;jGDf)˕c!4Mcg^~:y&7]h68_6J[ ErlH^DCu*qaH`q+b˓crvmO LXӾsZYz9 Zr&(ى!h&Chpo3|z@}l1-8t LӒ=|Ҋƕ?YZN2]L9L_Xf\ 4TBB'W3=DbڡB[y]_؏ Pf__u2҂=z!, R!,SSӥGX 0 |0Ó^惙>5)UњhoTxH 3w#0\u lOFr;֔PVŞ+ nERH 47-žͪ8ǝO#&[|T7JAi־DJ\$2LSj"!1m=h#9;Է7++d-G2kL>|8~*X0 _&s.=x;-Y !:3 0fL `0 ̔=#i^>K;Ch0X-01ف7wEš%|3еe VVl,[ ||0T`SATϠLhRJ,OT;or#/NY\pJ|4WKUNq</*C]ځgfTHXW~A1j>HhHiL3Rc_|KRp8N9-݆k9py6fM &5,_&<!X@%P"[2cT 8cXXݻ2$i7C~_޻o_]j| ?G@ O~}|TMn, fhU*R"*n 0+@׷orL5ruJAFOݷᙧ7/[P{p1 |3پ/`7xc"PJAee!"VžD$fj0&·b~~w%otsZ|- 3GD\ʖ s~0F ;tޗ!_PS53)Z v,^@4mr.`kftυmZ8t:%pSϩYՂ=/L4J?=8&֨ >ʘt #4iUH ihH$9(gp=&n88gA?Npq`OX}Dݫ06[?'[3-@~f`)E?@ԛ|Vg5]*4鵓2u|3pa݆eVYncLW~o  A-PF 4 MIhI֡ByUo@6@#]y)(8{@}\shEV&qy``T>c@wnckm*NDztG~m؆Gt؇FZ'}hkߘ񣫾b2W㝻Η?RQ~}$ ^Q:;;/W ݄{} n뉚U~o_gLyMCĉ |M$4@X|`Eleee~q[?_eUGM Fp'ᩗe֖*Sw^>'R=|D9iNִ#-m~y XeUp WOoV)d eRkZ3) fAc2} ܽ_æ^'yEŐ$T?<|? ߗ*'RBtW÷ߎ$ʩb3Fii6*p( '@v bvB\\@sf\qDc C%vh{Zۊ`Pg4&ZmG g|bv~sō_V Ip=ݝȘ="#zOT`%q*@>=Vݐ|2zOle@(@K:iL\pd `4"*Ou@J޾?Q : k6s_DT<)U^oW/xsx}Ӵ%x>Afy޷lҌG8`Q|sj[?~A7-_v5w}Ȗ6)ž5<ȳ-Y^ޟs3 aP\{X< Qc/6+rL`ݷї8e3ïp9l,]|dg;I UN_{Ge>6,ʤOT孠2[x= >Y;> p`&!ɇN$W~öp&ɗpկ3H?U-_!kppQ : ObSǙS_3$oϻ~GSeW_^c⟏dO cߏ&t;6ʨ/,&w5n|3h Yf|pq.:!|V 8%Fc1( c@Z3jN`mG݋u[s3<\}=#n1 f l{#ےEXCܠ Ԑ3mCsٖl.l6˴zbr@(}iܹM?֜}|8ckˇ~AsJ(3<}BP|V Tomc*> NJLI.m3:\S]q{ 3toP7|6^Rnyp8 ƆnZyd2mg!Dp;N@)0cnYm\kݤ2z2 [}7.KXTWQ__p`)\s_,#) Vr9y455_5jv?9*d-|jY=/aӸo] KVU"~Ko46! ?AlkZ~-ol m9m_@2d:H.QN\IDATx̝2޼(ڭ3rk&5Y7~@~a{OMn(_ŋCD4hB@f5(d>mFpj޶=:\M<\/?QE;fq]F|Ow@`*eG>zk'C=iH#F~sb=F7{఍RDog[fw<W>dwbXFB~лGfHl8 DN#Lހd/T_#р=&?>NUӏ1A |n`3߮D1j;ycеo ptep/[c_4n}o%X݂?>g`L ^IIO0\~0ApQ1]JP* %sC2ѧM嚰.Elwg[;Q5s 1|=/݃Y\!({03?L"]V^zE3N4ՀVNYh넙2 }_ a|@}=\z ەcz>~c= <ߕє.5xR9k'ʊJ\9 ;/2L 珄 2n-[?౸O+}?|]"WfpA0o-+_֍ZȬ%YMF:}"/ʊH^ gٖO2; -K^ W<|3K6U3IO?|bg__762SJ˖OՔr^mH ?-s5UGȾq '~~VHF2ۺ汻wZ{%!(@9GLBǺbyUƵs066|r  G\=crj[Wx-`^B- |@Q0>srm"}K8fL`KNǬNKIZҧpQsiі++5?DuHt I` "卄B<0?s^~ H &s=5zp;EeLޥS)0 ތV\Bl$}9D.>o dy`$4 p ';?nmOSaY|v gLs`5&݂ٶ ˲`&,B.C&m۰-+H:t[W<C "}ؾ.2" x@HX(Q1`_9[,+3,fd[ 4O\SƏl6l6 ˲5ShPc 'JY׍5k9W]q@Kt=Z7&0k25Z2@_ˀ2`FZ=8tuq?`LavGGfΜ ˲`v ZІT:"O?j h#DتL$b B8g$x W)._AK~w"kB-PfI0l%[ן{F MYxYI֖tttG+sRLD.ܖ x|"qOFFDL7` Q81|^G]p߅B &(Ԑ @HI6jz=%~bgD=\BpiP@3[1@euKk(盱dE'L#}e*V+=? =<pl+У7TN=/ `&x}LŤxBBJe&(բ_-FOkxO,zKW#4߮Zԝ2"qF>2BY4`!2{ ܼ`)>?g:&cS P3@@PXF9Wh%iǴ2E#lT~CX$T@NP̑RUx(=t2~L 2Z d>Z(e e&X( l=[ԅo:BpGGX_ tp7/ _19@ &=)t(z| 4p~tIw_,zp֧`d5GYIOMn<›x|qZkO9guV^L랞lٲe^m?XsP{*@Rtm-]8nlBշ/w1Fsg/=mT,i]]]mz{(CD*>nۮw#^8(7u qg_`2cUakO|G놻hc&!i@e{ UV.8ӟzij y%< >rM~z ˯eoض,B&GI~khI(zN $򻯽/Yq@@*u]|Κ>l&3yO[egF:c[h 'ߴj oO`LajV>9sڴr\hTIHwC>sضr2'9%oNҠM[&^ۿ>㥯xt`@+W^2sڴr\Oy8NpM& n5ծi4e3DF j(zR,}XrTxcUZ_[?,0!%f @Wo1u!?Ċ+**M1:>mVv(:pɲ,!8@Z?߳r3'6/e{h!$%x  @31:cFɝY9M Jɘ1cXS@} "U"Q-1AJiY"橏I* J_D#A+` n6>Tp}y RJI)S`ww^/Ur |y$hfȨcV$Ț3ƸmdҤIԩSL29Zi1Rj*b1J1FB(B)%4e#Te ->!|ι pB9O='# Bxs_=]֭[֬Yꫯv/]/ $OŦi"~ ڵ0Y ێPG[~$EfBݸ8$>BBmF1V0L8201ƈf uFBf@„*cBoxyjP9TB<.|>'0>W]r3\nڛf{85~(exjvZ @ k. z ?ay3NT=xYB2L* ,&#a0!A Ie:0& 1 CDµd p$\o+頏B91s.8u]p=˔ҢLjQ^pri]:.$M iUQ%''D֍8w8秵h"U-mVN$_,%zj-⇻=xj]ەF]2j-HN޻sT6zi'ͷZDKIENDB`qstardict/plugins/savetofile/pixmaps/pixmaps.qrc000066400000000000000000000001471453553600400225560ustar00rootroot00000000000000 document-save-as.png qstardict/plugins/savetofile/savetofile.cpp000066400000000000000000000067761453553600400215700ustar00rootroot00000000000000/***************************************************************************** * print.cpp - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2008-2019 Alexander Rodin * * Copyright (C) 2009 Frank Ren * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "savetofile.h" #include #include #include #include QIcon SaveToFile::pluginIcon() const { return QIcon(":/pics/document-save-as.png"); } SaveToFile::SaveToFile(QObject *parent) : QObject(parent) { } QIcon SaveToFile::toolbarIcon() const { return QIcon(":/pics/document-save-as.png"); } QString SaveToFile::toolbarText() const { return tr("&Save translation"); } void SaveToFile::execute(QStarDict::DictWidget *dictWidget) { static QDir dir(QDir::homePath()); static QString filter(tr("Text files (*.txt)")); QFileDialog dialog(dictWidget, tr("Save translation"), dir.path(), filter); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.selectFile(dictWidget->translatedWord()); dialog.setNameFilters(QStringList() << tr("HTML files (*.html *.htm)") << tr("Text files (*.txt)")); dialog.selectNameFilter(filter); if (dialog.exec() && dialog.selectedFiles().size()) { QString fileName = dialog.selectedFiles().first(); /*QString*/ filter = dialog.selectedNameFilter(); dir = dialog.directory(); if (filter == tr("HTML files (*.html, *.htm)") && ! (fileName.endsWith(".html", Qt::CaseInsensitive) || fileName.endsWith(".htm", Qt::CaseInsensitive))) fileName += ".html"; else if (filter == tr("Text files (*.txt)") && ! fileName.endsWith(".txt", Qt::CaseInsensitive)) fileName += ".txt"; QFile outputFile(fileName); if (! outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(dictWidget, tr("Error"), tr("Cannot save translation as %1").arg(fileName)); return; } QTextStream outputStream(&outputFile); if (filter == tr("HTML files (*.html, *.htm)")) outputStream << dictWidget->translationView()->document()->toHtml("UTF-8"); else outputStream << dictWidget->translationView()->toPlainText(); } } qstardict/plugins/savetofile/savetofile.h000066400000000000000000000040611453553600400212160ustar00rootroot00000000000000/***************************************************************************** * savetofile.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2019 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SAVETOFILE_H #define SAVETOFILE_H #include "../baseplugin.h" #include "../toolbarplugin.h" class SaveToFile: public QObject, public QStarDict::BasePlugin, public QStarDict::ToolbarPlugin { Q_OBJECT Q_INTERFACES(QStarDict::BasePlugin QStarDict::ToolbarPlugin) Q_PLUGIN_METADATA(IID "org.qstardict.SaveToFilePlugin/1.0" FILE "savetofile.json") public: SaveToFile(QObject *parent = 0); QIcon pluginIcon() const; QIcon toolbarIcon() const; QString toolbarText() const; void execute(QStarDict::DictWidget *dictWidget); }; #endif // SAVETOFILE_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/savetofile/savetofile.pro000066400000000000000000000033071453553600400215710ustar00rootroot00000000000000############################################################################# # savetofile.pro - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2019 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TARGET = savetofile META_VERSION = 1.0 META_NAME = Save Translations META_DESC = A plugin for saving translations META_AUTHORS = Alexander Rodin , Frank Ren META_FEATURES = toolbar include(../plugin.pri) HEADERS += \ savetofile.h SOURCES += \ savetofile.cpp RESOURCES += \ pixmaps/pixmaps.qrc qstardict/plugins/stardict/000077500000000000000000000000001453553600400163575ustar00rootroot00000000000000qstardict/plugins/stardict/dictziplib.cpp000066400000000000000000000376331453553600400212340ustar00rootroot00000000000000/* dictziplib.c -- * http://stardict.sourceforge.net * Copyright (C) 2003-2003 Hu Zheng * This file is a modify version of dictd-1.9.7's data.c * * data.c -- * Created: Tue Jul 16 12:45:41 1996 by faith@dict.org * Revised: Sat Mar 30 10:46:06 2002 by faith@dict.org * Copyright 1996, 1997, 1998, 2000, 2002 Rickard E. Faith (faith@dict.org) * * * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ //#define HAVE_MMAP //it will defined in config.h. this can be done by configure.in with a AC_FUNC_MMAP. #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include #include "dictziplib.hpp" #define USE_CACHE 1 #define BUFFERSIZE 10240 /* * Output buffer must be greater than or * equal to 110% of input buffer size, plus * 12 bytes. */ #define OUT_BUFFER_SIZE 0xffffL #define IN_BUFFER_SIZE ((unsigned long)((double)(OUT_BUFFER_SIZE - 12) * 0.89)) /* For gzip-compatible header, as defined in RFC 1952 */ /* Magic for GZIP (rfc1952) */ #define GZ_MAGIC1 0x1f /* First magic byte */ #define GZ_MAGIC2 0x8b /* Second magic byte */ /* FLaGs (bitmapped), from rfc1952 */ #define GZ_FTEXT 0x01 /* Set for ASCII text */ #define GZ_FHCRC 0x02 /* Header CRC16 */ #define GZ_FEXTRA 0x04 /* Optional field (random access index) */ #define GZ_FNAME 0x08 /* Original name */ #define GZ_COMMENT 0x10 /* Zero-terminated, human-readable comment */ #define GZ_MAX 2 /* Maximum compression */ #define GZ_FAST 4 /* Fasted compression */ /* These are from rfc1952 */ #define GZ_OS_FAT 0 /* FAT filesystem (MS-DOS, OS/2, NT/Win32) */ #define GZ_OS_AMIGA 1 /* Amiga */ #define GZ_OS_VMS 2 /* VMS (or OpenVMS) */ #define GZ_OS_UNIX 3 /* Unix */ #define GZ_OS_VMCMS 4 /* VM/CMS */ #define GZ_OS_ATARI 5 /* Atari TOS */ #define GZ_OS_HPFS 6 /* HPFS filesystem (OS/2, NT) */ #define GZ_OS_MAC 7 /* Macintosh */ #define GZ_OS_Z 8 /* Z-System */ #define GZ_OS_CPM 9 /* CP/M */ #define GZ_OS_TOPS20 10 /* TOPS-20 */ #define GZ_OS_NTFS 11 /* NTFS filesystem (NT) */ #define GZ_OS_QDOS 12 /* QDOS */ #define GZ_OS_ACORN 13 /* Acorn RISCOS */ #define GZ_OS_UNKNOWN 255 /* unknown */ #define GZ_RND_S1 'R' /* First magic for random access format */ #define GZ_RND_S2 'A' /* Second magic for random access format */ #define GZ_ID1 0 /* GZ_MAGIC1 */ #define GZ_ID2 1 /* GZ_MAGIC2 */ #define GZ_CM 2 /* Compression Method (Z_DEFALTED) */ #define GZ_FLG 3 /* FLaGs (see above) */ #define GZ_MTIME 4 /* Modification TIME */ #define GZ_XFL 8 /* eXtra FLags (GZ_MAX or GZ_FAST) */ #define GZ_OS 9 /* Operating System */ #define GZ_XLEN 10 /* eXtra LENgth (16bit) */ #define GZ_FEXTRA_START 12 /* Start of extra fields */ #define GZ_SI1 12 /* Subfield ID1 */ #define GZ_SI2 13 /* Subfield ID2 */ #define GZ_SUBLEN 14 /* Subfield length (16bit) */ #define GZ_VERSION 16 /* Version for subfield format */ #define GZ_CHUNKLEN 18 /* Chunk length (16bit) */ #define GZ_CHUNKCNT 20 /* Number of chunks (16bit) */ #define GZ_RNDDATA 22 /* Random access data (16bit) */ #define DICT_UNKNOWN 0 #define DICT_TEXT 1 #define DICT_GZIP 2 #define DICT_DZIP 3 int DictData::read_header(const std::string &fname, int computeCRC) { FILE *str; int id1, id2, si1, si2; char buffer[BUFFERSIZE]; int extraLength, subLength; int i; char *pt; int c; struct stat sb; unsigned long crc = crc32(0L, Z_NULL, 0); int count; unsigned long offset; if (!(str = fopen(fname.c_str(), "rb"))) { //err_fatal_errno( __FUNCTION__, // "Cannot open data file \"%s\" for read\n", filename ); return -1; } this->headerLength = GZ_XLEN - 1; this->type = DICT_UNKNOWN; id1 = getc(str); id2 = getc(str); if (id1 != GZ_MAGIC1 || id2 != GZ_MAGIC2) { this->type = DICT_TEXT; fstat(fileno(str), &sb); this->compressedLength = this->length = sb.st_size; this->origFilename = fname; this->mtime = sb.st_mtime; if (computeCRC) { rewind(str); while (!feof(str)) { if ((count = fread(buffer, 1, BUFFERSIZE, str))) { crc = crc32(crc, (Bytef *)buffer, count); } } } this->crc = crc; fclose(str); return 0; } this->type = DICT_GZIP; this->method = getc(str); this->flags = getc(str); this->mtime = getc(str) << 0; this->mtime |= getc(str) << 8; this->mtime |= getc(str) << 16; this->mtime |= getc(str) << 24; this->extraFlags = getc(str); this->os = getc(str); if (this->flags & GZ_FEXTRA) { extraLength = getc(str) << 0; extraLength |= getc(str) << 8; this->headerLength += extraLength + 2; si1 = getc(str); si2 = getc(str); if (si1 == GZ_RND_S1 || si2 == GZ_RND_S2) { subLength = getc(str) << 0; subLength |= getc(str) << 8; this->version = getc(str) << 0; this->version |= getc(str) << 8; if (this->version != 1) { //err_internal( __FUNCTION__, // "dzip header version %d not supported\n", // this->version ); } this->chunkLength = getc(str) << 0; this->chunkLength |= getc(str) << 8; this->chunkCount = getc(str) << 0; this->chunkCount |= getc(str) << 8; if (this->chunkCount <= 0) { fclose(str); return 5; } this->chunks = (int *)malloc(sizeof(this->chunks[0]) * this->chunkCount); for (i = 0; i < this->chunkCount; i++) { this->chunks[i] = getc(str) << 0; this->chunks[i] |= getc(str) << 8; } this->type = DICT_DZIP; } else { fseek(str, this->headerLength, SEEK_SET); } } if (this->flags & GZ_FNAME) { /* FIXME! Add checking against header len */ pt = buffer; while ((c = getc(str)) && c != EOF) *pt++ = c; *pt = '\0'; this->origFilename = buffer; this->headerLength += this->origFilename.length() + 1; } else { this->origFilename = ""; } if (this->flags & GZ_COMMENT) { /* FIXME! Add checking for header len */ pt = buffer; while ((c = getc(str)) && c != EOF) *pt++ = c; *pt = '\0'; comment = buffer; headerLength += comment.length() + 1; } else { comment = ""; } if (this->flags & GZ_FHCRC) { getc(str); getc(str); this->headerLength += 2; } if (ftell(str) != this->headerLength + 1) { //err_internal( __FUNCTION__, // "File position (%lu) != header length + 1 (%d)\n", // ftell( str ), this->headerLength + 1 ); } fseek(str, -8, SEEK_END); this->crc = getc(str) << 0; this->crc |= getc(str) << 8; this->crc |= getc(str) << 16; this->crc |= getc(str) << 24; this->length = getc(str) << 0; this->length |= getc(str) << 8; this->length |= getc(str) << 16; this->length |= getc(str) << 24; this->compressedLength = ftell(str); /* Compute offsets */ this->offsets = (unsigned long *)malloc(sizeof(this->offsets[0]) * this->chunkCount); for (offset = this->headerLength + 1, i = 0; i < this->chunkCount; i++) { this->offsets[i] = offset; offset += this->chunks[i]; } fclose(str); return 0; } bool DictData::open(const std::string &fname, int computeCRC) { struct stat sb; int fd; this->initialized = 0; if (stat(fname.c_str(), &sb) || !S_ISREG(sb.st_mode)) { //err_warning( __FUNCTION__, // "%s is not a regular file -- ignoring\n", fname ); return false; } if (read_header(fname, computeCRC)) { //err_fatal( __FUNCTION__, // "\"%s\" not in text or dzip format\n", fname ); return false; } if ((fd = ::open(fname.c_str(), O_RDONLY)) < 0) { //err_fatal_errno( __FUNCTION__, // "Cannot open data file \"%s\"\n", fname ); return false; } if (fstat(fd, &sb)) { //err_fatal_errno( __FUNCTION__, // "Cannot stat data file \"%s\"\n", fname ); return false; } this->size = sb.st_size; ::close(fd); if (!mapfile.open(fname.c_str(), size)) return false; this->start = mapfile.begin(); this->end = this->start + this->size; for (size_t j = 0; j < DICT_CACHE_SIZE; j++) { cache[j].chunk = -1; cache[j].stamp = -1; cache[j].inBuffer = nullptr; cache[j].count = 0; } return true; } void DictData::close() { if (this->chunks) free(this->chunks); if (this->offsets) free(this->offsets); if (this->initialized) { if (inflateEnd(&this->zStream)) { //err_internal( __FUNCTION__, // "Cannot shut down inflation engine: %s\n", // this->zStream.msg ); } } for (size_t i = 0; i < DICT_CACHE_SIZE; ++i) { if (this->cache[i].inBuffer) free(this->cache[i].inBuffer); } } void DictData::read(char *buffer, unsigned long start, unsigned long size) { char *pt; unsigned long end; int count; char *inBuffer; char outBuffer[OUT_BUFFER_SIZE]; int firstChunk, lastChunk; int firstOffset, lastOffset; int i; int found, target, lastStamp; static int stamp = 0; end = start + size; //buffer = malloc( size + 1 ); //PRINTF(DBG_UNZIP, // ("dict_data_read( %p, %lu, %lu )\n", //h, start, size )); switch (this->type) { case DICT_GZIP: //err_fatal( __FUNCTION__, // "Cannot seek on pure gzip format files.\n" // "Use plain text (for performance)" // " or dzip format (for space savings).\n" ); break; case DICT_TEXT: memcpy(buffer, this->start + start, size); //buffer[size] = '\0'; break; case DICT_DZIP: if (!this->initialized) { ++this->initialized; this->zStream.zalloc = nullptr; this->zStream.zfree = nullptr; this->zStream.opaque = nullptr; this->zStream.next_in = 0; this->zStream.avail_in = 0; this->zStream.next_out = nullptr; this->zStream.avail_out = 0; if (inflateInit2(&this->zStream, -15) != Z_OK) { //err_internal( __FUNCTION__, // "Cannot initialize inflation engine: %s\n", //this->zStream.msg ); } } firstChunk = start / this->chunkLength; firstOffset = start - firstChunk * this->chunkLength; lastChunk = end / this->chunkLength; lastOffset = end - lastChunk * this->chunkLength; //PRINTF(DBG_UNZIP, // (" start = %lu, end = %lu\n" //"firstChunk = %d, firstOffset = %d," //" lastChunk = %d, lastOffset = %d\n", //start, end, firstChunk, firstOffset, lastChunk, lastOffset )); for (pt = buffer, i = firstChunk; i <= lastChunk; i++) { /* Access cache */ found = 0; target = 0; lastStamp = INT_MAX; for (size_t j = 0; j < DICT_CACHE_SIZE; j++) { #if USE_CACHE if (this->cache[j].chunk == i) { found = 1; target = j; break; } #endif if (this->cache[j].stamp < lastStamp) { lastStamp = this->cache[j].stamp; target = j; } } this->cache[target].stamp = ++stamp; if (found) { count = this->cache[target].count; inBuffer = this->cache[target].inBuffer; } else { this->cache[target].chunk = i; if (!this->cache[target].inBuffer) this->cache[target].inBuffer = (char *)malloc(IN_BUFFER_SIZE); inBuffer = this->cache[target].inBuffer; if (this->chunks[i] >= OUT_BUFFER_SIZE) { //err_internal( __FUNCTION__, // "this->chunks[%d] = %d >= %ld (OUT_BUFFER_SIZE)\n", // i, this->chunks[i], OUT_BUFFER_SIZE ); } memcpy(outBuffer, this->start + this->offsets[i], this->chunks[i]); this->zStream.next_in = (Bytef *)outBuffer; this->zStream.avail_in = this->chunks[i]; this->zStream.next_out = (Bytef *)inBuffer; this->zStream.avail_out = IN_BUFFER_SIZE; if (inflate(&this->zStream, Z_PARTIAL_FLUSH) != Z_OK) { //err_fatal( __FUNCTION__, "inflate: %s\n", this->zStream.msg ); } if (this->zStream.avail_in) { //err_internal( __FUNCTION__, // "inflate did not flush (%d pending, %d avail)\n", // this->zStream.avail_in, this->zStream.avail_out ); } count = IN_BUFFER_SIZE - this->zStream.avail_out; this->cache[target].count = count; } if (i == firstChunk) { if (i == lastChunk) { memcpy(pt, inBuffer + firstOffset, lastOffset - firstOffset); pt += lastOffset - firstOffset; } else { if (count != this->chunkLength) { //err_internal( __FUNCTION__, // "Length = %d instead of %d\n", //count, this->chunkLength ); } memcpy(pt, inBuffer + firstOffset, this->chunkLength - firstOffset); pt += this->chunkLength - firstOffset; } } else if (i == lastChunk) { memcpy(pt, inBuffer, lastOffset); pt += lastOffset; } else { assert(count == this->chunkLength); memcpy(pt, inBuffer, this->chunkLength); pt += this->chunkLength; } } //*pt = '\0'; break; case DICT_UNKNOWN: //err_fatal( __FUNCTION__, "Cannot read unknown file type\n" ); break; } } qstardict/plugins/stardict/dictziplib.hpp000066400000000000000000000022031453553600400212220ustar00rootroot00000000000000#pragma once #include #include #include #include "mapfile.hpp" struct DictCache { int chunk; char *inBuffer; int stamp; int count; }; class DictData { public: static const size_t DICT_CACHE_SIZE = 5; DictData() {} ~DictData() { close(); } bool open(const std::string &filename, int computeCRC); void close(); void read(char *buffer, unsigned long start, unsigned long size); private: const char *start; /* start of mmap'd area */ const char *end; /* end of mmap'd area */ unsigned long size; /* size of mmap */ int type; z_stream zStream; int initialized; int headerLength; int method; int flags; time_t mtime; int extraFlags; int os; int version; int chunkLength; int chunkCount; int *chunks; unsigned long *offsets; /* Sum-scan of chunks. */ std::string origFilename; std::string comment; unsigned long crc; unsigned long length; unsigned long compressedLength; DictCache cache[DICT_CACHE_SIZE]; MapFile mapfile; int read_header(const std::string &filename, int computeCRC); }; qstardict/plugins/stardict/distance.cpp000066400000000000000000000103651453553600400206620ustar00rootroot00000000000000/* writer : Opera Wang E-Mail : wangvisual AT sohu DOT com License: GPL */ /* filename: distance.cc */ /* http://www.merriampark.com/ld.htm What is Levenshtein Distance? Levenshtein distance (LD) is a measure of the similarity between two strings, which we will refer to as the source string (s) and the target string (t). The distance is the number of deletions, insertions, or substitutions required to transform s into t. For example, * If s is "test" and t is "test", then LD(s,t) = 0, because no transformations are needed. The strings are already identical. * If s is "test" and t is "tent", then LD(s,t) = 1, because one substitution (change "s" to "n") is sufficient to transform s into t. The greater the Levenshtein distance, the more different the strings are. Levenshtein distance is named after the Russian scientist Vladimir Levenshtein, who devised the algorithm in 1965. If you can't spell or pronounce Levenshtein, the metric is also sometimes called edit distance. The Levenshtein distance algorithm has been used in: * Spell checking * Speech recognition * DNA analysis * Plagiarism detection */ #include #include #include "distance.hpp" /* Cover transposition, in addition to deletion, insertion and substitution. This step is taken from: Berghel, Hal ; Roach, David : "An Extension of Ukkonen's Enhanced Dynamic Programming ASM Algorithm" (http://www.acm.org/~hlb/publications/asm/asm.html) */ #define COVER_TRANSPOSITION /****************************************/ /*Implementation of Levenshtein distance*/ /****************************************/ /*Gets the minimum of three values */ static inline int minimum(const int a, const int b, const int c) { int min = a; if (b < min) min = b; if (c < min) min = c; return min; } int EditDistance::CalEditDistance(const gunichar *s, const gunichar *t, const int limit) /*Compute levenshtein distance between s and t, this is using QUICK algorithm*/ { int n = 0, m = 0, iLenDif, k, i, j, cost; // Remove leftmost matching portion of strings while (*s && (*s == *t)) { s++; t++; } while (s[n]) { n++; } while (t[m]) { m++; } // Remove rightmost matching portion of strings by decrement n and m. while (n && m && (*(s + n - 1) == *(t + m - 1))) { n--; m--; } if (m == 0 || n == 0 || d == nullptr) return (m + n); if (m < n) { const gunichar *temp = s; int itemp = n; s = t; t = temp; n = m; m = itemp; } iLenDif = m - n; if (iLenDif >= limit) return iLenDif; // step 1 n++; m++; // d=(int*)malloc(sizeof(int)*m*n); if (m * n > currentelements) { currentelements = m * n * 2; // double the request d = static_cast(realloc(d, sizeof(int) * currentelements)); if (nullptr == d) return (m + n); } // step 2, init matrix for (k = 0; k < n; k++) d[k] = k; for (k = 1; k < m; k++) d[k * n] = k; // step 3 for (i = 1; i < n; i++) { // first calculate column, d(i,j) for (j = 1; j < iLenDif + i; j++) { cost = s[i - 1] == t[j - 1] ? 0 : 1; d[j * n + i] = minimum(d[(j - 1) * n + i] + 1, d[j * n + i - 1] + 1, d[(j - 1) * n + i - 1] + cost); #ifdef COVER_TRANSPOSITION if (i >= 2 && j >= 2 && (d[j * n + i] - d[(j - 2) * n + i - 2] == 2) && (s[i - 2] == t[j - 1]) && (s[i - 1] == t[j - 2])) d[j * n + i]--; #endif } // second calculate row, d(k,j) // now j==iLenDif+i; for (k = 1; k <= i; k++) { cost = s[k - 1] == t[j - 1] ? 0 : 1; d[j * n + k] = minimum(d[(j - 1) * n + k] + 1, d[j * n + k - 1] + 1, d[(j - 1) * n + k - 1] + cost); #ifdef COVER_TRANSPOSITION if (k >= 2 && j >= 2 && (d[j * n + k] - d[(j - 2) * n + k - 2] == 2) && (s[k - 2] == t[j - 1]) && (s[k - 1] == t[j - 2])) d[j * n + k]--; #endif } // test if d(i,j) limit gets equal or exceed if (d[j * n + i] >= limit) { return d[j * n + i]; } } // d(n-1,m-1) return d[n * m - 1]; } qstardict/plugins/stardict/distance.h000066400000000000000000000013051453553600400203210ustar00rootroot00000000000000/* writer : Opera Wang E-Mail : wangvisual AT sohu DOT com License: GPLv2 or later */ /* filename: distance.h */ #ifndef DISTANCE_H #define DISTANCE_H #include class EditDistance { private: int *d; int currentelements; /*Gets the minimum of three values */ inline int minimum( const int a, const int b, const int c ) { int min = a; if ( b < min ) min = b; if ( c < min ) min = c; return min; }; public: EditDistance( ); ~EditDistance( ); int CalEditDistance( const gunichar *s, const gunichar *t, const int limit ); }; #endif qstardict/plugins/stardict/distance.hpp000066400000000000000000000010741453553600400206640ustar00rootroot00000000000000#pragma once #include #include class EditDistance { public: EditDistance() { currentelements = 2500; // It's enough for most conditions :-) d = static_cast(malloc(sizeof(int) * currentelements)); } ~EditDistance() { if (d != nullptr) free(d); } EditDistance(const EditDistance &) = delete; EditDistance &operator=(const EditDistance &) = delete; int CalEditDistance(const gunichar *s, const gunichar *t, const int limit); private: int *d; int currentelements; }; qstardict/plugins/stardict/file.hpp000066400000000000000000000051731453553600400200150ustar00rootroot00000000000000/* file.hpp -- * Copyright (C) 2003-2006 Hu Zheng * * 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 Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _FILE_HPP_ #define _FILE_HPP_ #include #include #include #include typedef std::list List; template void __for_each_file(const std::string& dirname, const std::string& suff, const List& order_list, const List& disable_list, Function f) { GDir *dir = g_dir_open(dirname.c_str(), 0, NULL); if (dir) { const gchar *filename; while ((filename = g_dir_read_name(dir)) != NULL) { std::string fullfilename(dirname + G_DIR_SEPARATOR_S + filename); if (g_file_test(fullfilename.c_str(), G_FILE_TEST_IS_DIR)) __for_each_file(fullfilename, suff, order_list, disable_list, f); else if (g_str_has_suffix(filename, suff.c_str()) && std::find(order_list.begin(), order_list.end(), fullfilename) == order_list.end()) { bool disable = std::find(disable_list.begin(), disable_list.end(), fullfilename) != disable_list.end(); f(fullfilename, disable); } } g_dir_close(dir); } } template void for_each_file(const List& dirs_list, const std::string& suff, const List& order_list, const List& disable_list, Function f) { List::const_iterator it; for (it = order_list.begin(); it != order_list.end(); ++it) { bool disable = std::find(disable_list.begin(), disable_list.end(), *it) != disable_list.end(); f(*it, disable); } for (it = dirs_list.begin(); it != dirs_list.end(); ++it) __for_each_file(*it, suff, order_list, disable_list, f); } #endif//!_FILE_HPP_ qstardict/plugins/stardict/libwrapper.cpp000066400000000000000000000350541453553600400212410ustar00rootroot00000000000000/* * This file part of sdcv - console version of Stardict program * http://sdcv.sourceforge.net * Copyright (C) 2005-2006 Evgeniy * * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "utils.hpp" #include "libwrapper.hpp" static const char ESC_BLUE[] = "\033[0;34m"; static const char ESC_END[] = "\033[0m"; static const char ESC_BOLD[] = "\033[1m"; static const char ESC_ITALIC[] = "\033[3m"; static const char ESC_LIGHT_GRAY[] = "\033[0;37m"; static const char ESC_GREEN[] = "\033[0;32m"; static const char *SEARCH_TERM_VISFMT = ESC_BOLD; static const char *NAME_OF_DICT_VISFMT = ESC_BLUE; static const char *TRANSCRIPTION_VISFMT = ESC_BOLD; static const char *EXAMPLE_VISFMT = ESC_LIGHT_GRAY; static const char *KREF_VISFMT = ESC_BOLD; static const char *ABR_VISFMT = ESC_GREEN; static std::string xdxf2text(const char *p, bool colorize_output) { std::string res; for (; *p; ++p) { if (*p != '<') { if (g_str_has_prefix(p, ">")) { res += ">"; p += 3; } else if (g_str_has_prefix(p, "<")) { res += "<"; p += 3; } else if (g_str_has_prefix(p, "&")) { res += "&"; p += 4; } else if (g_str_has_prefix(p, """)) { res += "\""; p += 5; } else if (g_str_has_prefix(p, "'")) { res += "\'"; p += 5; } else res += *p; continue; } const char *next = strchr(p, '>'); if (!next) continue; const std::string name(p + 1, next - p - 1); if (name == "abr") res += colorize_output ? ABR_VISFMT : ""; else if (name == "/abr") res += colorize_output ? ESC_END : ""; else if (name == "k") { const char *begin = next; if ((next = strstr(begin, "")) != nullptr) next += sizeof("") - 1 - 1; else next = begin; } else if (name == "kref") { res += colorize_output ? KREF_VISFMT : ""; } else if (name == "/kref") { res += colorize_output ? ESC_END : ""; } else if (name == "b") res += colorize_output ? ESC_BOLD : ""; else if (name == "/b") res += colorize_output ? ESC_END : ""; else if (name == "i") res += colorize_output ? ESC_ITALIC : ""; else if (name == "/i") res += colorize_output ? ESC_END : ""; else if (name == "tr") { if (colorize_output) res += TRANSCRIPTION_VISFMT; res += "["; } else if (name == "/tr") { res += "]"; if (colorize_output) res += ESC_END; } else if (name == "ex") res += colorize_output ? EXAMPLE_VISFMT : ""; else if (name == "/ex") res += colorize_output ? ESC_END : ""; else if (!name.empty() && name[0] == 'c' && name != "co") { std::string::size_type pos = name.find("code"); if (pos != std::string::npos) { pos += sizeof("code=\"") - 1; std::string::size_type end_pos = name.find("\""); const std::string color(name, pos, end_pos - pos); res += ""; } else { res += ""; } } else if (name == "/c") res += ""; p = next; } return res; } static std::string parse_data(const gchar *data, bool colorize_output) { if (!data) return ""; std::string res; guint32 data_size, sec_size = 0; gchar *m_str; const gchar *p = data; data_size = get_uint32(p); p += sizeof(guint32); while (guint32(p - data) < data_size) { switch (*p++) { case 'h': // HTML data case 'w': // WikiMedia markup data case 'm': // plain text, utf-8 case 'l': // not utf-8, some other locale encoding, discouraged, need more work... sec_size = strlen(p); if (sec_size) { res += "\n"; m_str = g_strndup(p, sec_size); res += m_str; g_free(m_str); } sec_size++; break; case 'g': // pango markup data case 'x': // xdxf sec_size = strlen(p); if (sec_size) { res += "\n"; m_str = g_strndup(p, sec_size); res += xdxf2text(m_str, colorize_output); g_free(m_str); } sec_size++; break; case 't': // english phonetic string sec_size = strlen(p); if (sec_size) { res += "\n"; if (colorize_output) res += TRANSCRIPTION_VISFMT; res += "[" + std::string(p, sec_size) + "]"; if (colorize_output) res += ESC_END; } sec_size++; break; case 'k': // KingSoft PowerWord data case 'y': // chinese YinBiao or japanese kana, utf-8 sec_size = strlen(p); if (sec_size) res += std::string(p, sec_size); sec_size++; break; case 'W': // wav file case 'P': // picture data sec_size = get_uint32(p); sec_size += sizeof(guint32); break; } p += sec_size; } return res; } void Library::SimpleLookup(const std::string &str, TSearchResultList &res_list) { glong ind; res_list.reserve(ndicts()); for (gint idict = 0; idict < ndicts(); ++idict) if (SimpleLookupWord(str.c_str(), ind, idict)) res_list.push_back( TSearchResult(dict_name(idict), poGetWord(ind, idict), parse_data(poGetWordData(ind, idict), colorize_output_))); } void Library::LookupWithFuzzy(const std::string &str, TSearchResultList &res_list) { static const int MAXFUZZY = 10; gchar *fuzzy_res[MAXFUZZY]; if (!Libs::LookupWithFuzzy(str.c_str(), fuzzy_res, MAXFUZZY)) return; for (gchar **p = fuzzy_res, **end = (fuzzy_res + MAXFUZZY); p != end && *p; ++p) { SimpleLookup(*p, res_list); g_free(*p); } } void Library::LookupWithRule(const std::string &str, TSearchResultList &res_list) { std::vector match_res((MAX_MATCH_ITEM_PER_LIB)*ndicts()); const gint nfound = Libs::LookupWithRule(str.c_str(), &match_res[0]); if (nfound == 0) return; for (gint i = 0; i < nfound; ++i) { SimpleLookup(match_res[i], res_list); g_free(match_res[i]); } } void Library::LookupData(const std::string &str, TSearchResultList &res_list) { std::vector> drl(ndicts()); if (!Libs::LookupData(str.c_str(), &drl[0])) return; for (int idict = 0; idict < ndicts(); ++idict) for (gchar *res : drl[idict]) { SimpleLookup(res, res_list); g_free(res); } } void Library::print_search_result(FILE *out, const TSearchResult &res, bool &first_result) { std::string loc_bookname, loc_def, loc_exp; if (!utf8_output_) { loc_bookname = utf8_to_locale_ign_err(res.bookname); loc_def = utf8_to_locale_ign_err(res.def); loc_exp = utf8_to_locale_ign_err(res.exp); } if (json_) { if (!first_result) { fputs(",", out); } else { first_result = false; } fprintf(out, "{\"dict\": \"%s\",\"word\":\"%s\",\"definition\":\"%s\"}", json_escape_string(res.bookname).c_str(), json_escape_string(res.def).c_str(), json_escape_string(res.exp).c_str()); } else { fprintf(out, "-->%s%s%s\n" "-->%s%s%s\n" "%s\n\n", colorize_output_ ? NAME_OF_DICT_VISFMT : "", utf8_output_ ? res.bookname.c_str() : loc_bookname.c_str(), colorize_output_ ? ESC_END : "", colorize_output_ ? SEARCH_TERM_VISFMT : "", utf8_output_ ? res.def.c_str() : loc_def.c_str(), colorize_output_ ? ESC_END : "", utf8_output_ ? res.exp.c_str() : loc_exp.c_str()); } } namespace { class sdcv_pager final { public: explicit sdcv_pager(bool ignore_env = false) { output = stdout; if (ignore_env) { return; } const gchar *pager = g_getenv("SDCV_PAGER"); if (pager && (output = popen(pager, "w")) == nullptr) { perror(_("popen failed")); output = stdout; } } sdcv_pager(const sdcv_pager &) = delete; sdcv_pager &operator=(const sdcv_pager &) = delete; ~sdcv_pager() { if (output != stdout) { pclose(output); } } FILE *get_stream() { return output; } private: FILE *output; }; } bool Library::process_phrase(const char *loc_str, IReadLine &io, bool force) { if (nullptr == loc_str) return true; std::string query; analyze_query(loc_str, query); if (!query.empty()) io.add_to_history(query.c_str()); gsize bytes_read; gsize bytes_written; glib::Error err; glib::CharStr str; if (!utf8_input_) str.reset(g_locale_to_utf8(loc_str, -1, &bytes_read, &bytes_written, get_addr(err))); else str.reset(g_strdup(loc_str)); if (nullptr == get_impl(str)) { fprintf(stderr, _("Can not convert %s to utf8.\n"), loc_str); fprintf(stderr, "%s\n", err->message); return false; } if (str[0] == '\0') return true; TSearchResultList res_list; switch (analyze_query(get_impl(str), query)) { case qtFUZZY: LookupWithFuzzy(query, res_list); break; case qtREGEXP: LookupWithRule(query, res_list); break; case qtSIMPLE: SimpleLookup(get_impl(str), res_list); if (res_list.empty() && fuzzy_) LookupWithFuzzy(get_impl(str), res_list); break; case qtDATA: LookupData(query, res_list); break; default: /*nothing*/; } bool first_result = true; if (json_) { fputc('[', stdout); } if (!res_list.empty()) { /* try to be more clever, if there are one or zero results per dictionary show all */ bool show_all_results = true; typedef std::map> DictResMap; if (!force) { DictResMap res_per_dict; for (const TSearchResult &search_res : res_list) { auto r = res_per_dict.equal_range(search_res.bookname); DictResMap tmp(r.first, r.second); if (tmp.empty()) //there are no yet such bookname in map res_per_dict.insert(DictResMap::value_type(search_res.bookname, 1)); else { ++((tmp.begin())->second); if (tmp.begin()->second > 1) { show_all_results = false; break; } } } } //if (!force) if (!show_all_results && !force) { if (!json_) { printf(_("Found %zu items, similar to %s.\n"), res_list.size(), utf8_output_ ? get_impl(str) : utf8_to_locale_ign_err(get_impl(str)).c_str()); } for (size_t i = 0; i < res_list.size(); ++i) { const std::string loc_bookname = utf8_to_locale_ign_err(res_list[i].bookname); const std::string loc_def = utf8_to_locale_ign_err(res_list[i].def); printf("%zu)%s%s%s-->%s%s%s\n", i, colorize_output_ ? NAME_OF_DICT_VISFMT : "", utf8_output_ ? res_list[i].bookname.c_str() : loc_bookname.c_str(), colorize_output_ ? ESC_END : "", colorize_output_ ? SEARCH_TERM_VISFMT : "", utf8_output_ ? res_list[i].def.c_str() : loc_def.c_str(), colorize_output_ ? ESC_END : ""); } int choise; std::unique_ptr choice_readline(create_readline_object()); for (;;) { std::string str_choise; choice_readline->read(_("Your choice[-1 to abort]: "), str_choise); sscanf(str_choise.c_str(), "%d", &choise); if (choise >= 0 && choise < int(res_list.size())) { sdcv_pager pager; io.add_to_history(res_list[choise].def.c_str()); print_search_result(pager.get_stream(), res_list[choise], first_result); break; } else if (choise == -1) { break; } else printf(_("Invalid choice.\nIt must be from 0 to %zu or -1.\n"), res_list.size() - 1); } } else { sdcv_pager pager(force || json_); if (!json_) { fprintf(pager.get_stream(), _("Found %zu items, similar to %s.\n"), res_list.size(), utf8_output_ ? get_impl(str) : utf8_to_locale_ign_err(get_impl(str)).c_str()); } for (const TSearchResult &search_res : res_list) { print_search_result(pager.get_stream(), search_res, first_result); } } } else { std::string loc_str; if (!utf8_output_) loc_str = utf8_to_locale_ign_err(get_impl(str)); if (!json_) printf(_("Nothing similar to %s, sorry :(\n"), utf8_output_ ? get_impl(str) : loc_str.c_str()); } if (json_) { fputs("]\n", stdout); } return true; } qstardict/plugins/stardict/libwrapper.hpp000066400000000000000000000027471453553600400212510ustar00rootroot00000000000000#pragma once #include #include #include "readline.hpp" #include "stardict_lib.hpp" //this structure is wrapper and it need for unification //results of search whith return Dicts class struct TSearchResult { std::string bookname; std::string def; std::string exp; TSearchResult(const std::string &bookname_, const std::string &def_, const std::string &exp_) : bookname(bookname_) , def(def_) , exp(exp_) { } }; typedef std::vector TSearchResultList; //this class is wrapper around Dicts class for easy use //of it class Library : public Libs { public: Library(bool uinput, bool uoutput, bool colorize_output, bool use_json, bool no_fuzzy) : utf8_input_(uinput) , utf8_output_(uoutput) , colorize_output_(colorize_output) , json_(use_json) { setVerbose(!use_json); setFuzzy(!no_fuzzy); } bool process_phrase(const char *loc_str, IReadLine &io, bool force = false); void SimpleLookup(const std::string &str, TSearchResultList &res_list); void LookupWithFuzzy(const std::string &str, TSearchResultList &res_list); void LookupWithRule(const std::string &str, TSearchResultList &res_lsit); void LookupData(const std::string &str, TSearchResultList &res_list); void print_search_result(FILE *out, const TSearchResult &res, bool &first_result); private: bool utf8_input_; bool utf8_output_; bool colorize_output_; bool json_; }; qstardict/plugins/stardict/mapfile.hpp000066400000000000000000000036101453553600400205050ustar00rootroot00000000000000#pragma once #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_MMAP #include #include #include #endif #ifdef _WIN32 #include #endif #include class MapFile { public: MapFile() {} ~MapFile(); MapFile(const MapFile &) = delete; MapFile &operator=(const MapFile &) = delete; bool open(const char *file_name, unsigned long file_size); gchar *begin() { return data; } private: char *data = nullptr; unsigned long size = 0ul; #ifdef HAVE_MMAP int mmap_fd = -1; #elif defined(_WIN32) HANDLE hFile = 0; HANDLE hFileMap = 0; #endif }; inline bool MapFile::open(const char *file_name, unsigned long file_size) { size = file_size; #ifdef HAVE_MMAP if ((mmap_fd = ::open(file_name, O_RDONLY)) < 0) { //g_print("Open file %s failed!\n",fullfilename); return false; } data = (gchar *)mmap(nullptr, file_size, PROT_READ, MAP_SHARED, mmap_fd, 0); if ((void *)data == (void *)(-1)) { //g_print("mmap file %s failed!\n",idxfilename); data = nullptr; return false; } #elif defined(_WIN32) hFile = CreateFile(file_name, GENERIC_READ, 0, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); hFileMap = CreateFileMapping(hFile, nullptr, PAGE_READONLY, 0, file_size, nullptr); data = (gchar *)MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, file_size); #else gsize read_len; if (!g_file_get_contents(file_name, &data, &read_len, nullptr)) return false; if (read_len != file_size) return false; #endif return true; } inline MapFile::~MapFile() { if (!data) return; #ifdef HAVE_MMAP munmap(data, size); close(mmap_fd); #else #ifdef _WIN32 UnmapViewOfFile(data); CloseHandle(hFileMap); CloseHandle(hFile); #else g_free(data); #endif #endif } qstardict/plugins/stardict/pixmaps/000077500000000000000000000000001453553600400200405ustar00rootroot00000000000000qstardict/plugins/stardict/pixmaps/arrow-down.png000066400000000000000000000231071453553600400226500ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME $ ^6[ IDATx}yxULs20@LHU~Q2O[^[Z>QT$sCFtN_{ 1KH{AX2¾2N&/\Nt1>?7 ஻W_FG=4i"n{J\P|DoW  hO?QZf=@I=;SLQPTME"ĉ(,.c[aӃ;wttɻu\\=*27-\ؘZa|l0b5Y_<`b&^=bcwr{{w:l F9s_aK_R݆[nFDxks}ǘ^Lj7KI3v\5+w;PTT5Ր3ڵkױAӦek Q;{ݔpה%Z{J \\bAPX\:/S/wiTFi^'%"Da񘓛}7ߨLlIeyxR|gzvLt5`ȑhii1 =g"8NbϠA 񌛸~ba4%øT܁QRD6(faߣc@zڝW͛grp\9&{`UC9 ^ q13et5U}5|1`<'YT@U o>Iѣ곃X G:@z7LCiyoVh&Ib"X_`-Jq zB@ 74jAx~|`7BZ4EevMNIVo)IA4BߙH6iiiÇ%PE+?="JsS@0:!cLj$X}}<1?tϘ wͽU];.n`~[s$?BU͆ήN I&YYYɮ h- 4[,zǏ3ͮ11a#{Rơ`aZ 1 {nLIo3wg%E 7zq%K)u&G@Ƽp휞t:NH@*)? ؚ7MHOuLP?Nf^W^Fʑ(`X(1c> e[?P``Lh%vIKbUo7?D. $%ʰN"\VµǻPAt<$evQ8C1=`!ŋc z3g8u2ueoͳmU!VUǃ"$?"(CEe=esqf wn "/]DzmT 7g^uWYʒU ļPw8QWW'fa"Z!n&nK$ p&}rS!n]JaV됰<Ƃ) $0#Ȱb1hhh˥m爖UnK"Ǝ.q11ǯ یѣBxx8SRɽU~xȾpme@[[UE{{;"""3ҊԂbje [o] *ѭ$ǣ!8vő#p@@s }-p.5Z*o3 2AUb[☇c8s4*T#m`(+TyRTd%j$pupK9rdDoIǾN?g dk0TVV%44#&6:yJ*aɈ r5$uYQTX=Ė?r |HgN˗b n!e%ouWNp{vݿ~Oy?w'qx1g̙3SLAaQP]uw{$G+I^BDjzתA|foߎgHLLĄ gϗhlh`@,g3',=D})Di--- LۉI 6 zAB&555xpM7;?8{,Ξ;Ztww#&6Gz}fC4\`5福$$p`y9V) 77;x'O|7GXX"#e=GhIp ҒAaIS Y8ða^0⼸Kp`9cX;o11(..Fss3jkk ԗ/+UOkFo~>D9b4'D܌S O}?BCC!*2 ^Q}Ou|CpTIqޠ0)S687AXH#",eep ݿ +WT221m4,?BmM /^٬IJϦxHZ)AzǏGlHJJŽ;;{b!996 qq |28جV8Ѫ"XKJ L:z#Bdd$hGiI N'N_N5fw~ 6DSSa| ԰^RK3wTDQa/^{gCll&333#MMͨDMu5T^[G#\\TJ p%yd`2$c ى `sρ8v6󘕝 0rH A' MaBqq :0rꗿq$ˍٳq)>} ;YeaYE)ɘ~IaIҽT̈́ U< mmA``sE 趸^twD|~ŋp(/-fc]uo xsgc Ն?[{{;._pш?=`2u"nZ.x"_#%9Gk F#nZcQXX <"P C̽ue$ E ŭ!o466-SO>|PJQQ6lÉ & &6C{ mAJ`iw(t_p8mAtWGTT6;Z{nΜdҤI[ph%.VUfW\)/cLuIcPqioR>ISt:\ӻ2͚}K"&'{,u#<" e8uTP$%MFWWq8A9 Opi 'OlӧOcŪhnjF9IS&B Ϫ<ǹ]~d;&'MF9XzR^&L}K"™3gPVR.ψ PR\3O@ޥxw1~=ٳg|r455!&6)3RX)H=5%qP+s2Tq<)IFcSΟ?A6 XxcĈhmkCqajk`EQA!Z0bXvm߷Q_8GsV8$0_PS8SMEtt4.5`}BdeevaEp88C\+kz!jè<ʵ_h>2,UUUX|93gI>iuU!gƀ3&1RF`-qx_&ٳ . 8&OXh1PTT֖#<<8x ._pl۶ y$8T@]]bb̘6L +w$Dn4ช}{;@#ֵuxZ,뭙A.wqvڅZ(/;Z,9s&>#qAomm-X uuu0͘A|1+Zݓ1XC6E_\O҃2ܫ0-y:"##Q]]uA'F¨?akS[E\CىI&o-CxpV\'NDDD822\ʕUWo}#JJL0iQ +x qv&^̕z3umF8`XQZZ KiiiL&U!bC=2 {VBCB$`*b( 淟/B ٬)Ą4L&ᡇb*_(/CɄY Նjf ˎSu9(yz Ǖ:DD Ezf:L!&GL`XPZZSBq3{l+43O-yYuW}+%%ڬ={6x퍠K͆>|LFv%羅y)$7A*l6=C]&~ͪ)+&,< 0 ߿kXۗ7?ncݺu(χh@vN65yGZdoavF{E|9X!W=jiOJY0aaʄhľ}~aݎM6`00+'8ٺC w|O/((ɞH _?:ϗ,ш8̙8s,,Xd//Ė-޽0\ď'm1(&jtum09`jړY0DȈHdfe@cϞ=زe- `[端70+'QQQfa]K"r3)EEurf#) >3zF9zZ Jn~}2&1!d9'D4|Y5=ìFhhHbbcP[[ǏR}=naf$`a'@!;'11/'^͙߿iW*++Yn^)"3 ٬d1AM;ƦFɛp/tqq16OR.G_~չ+}ٹ3hRгYȂq"lFm]VV ^/ v} GvN||ig=90?:"r;էRƉCVVxLJlw^{5|Cѯ7߲&롌v&HDVicq=!a$ڧ$Bd9rI[:mOz+ޜ T ʋRRk}\DK7^ O>|bSF -ܰa7(vg͟[K}fau6l ay暈<5wMt /nް),HAВޙ0vw}f޲_hkmJ(>FDV xp+[^x0llܸu -]nu{A5Dw@ڲn˱+}&~;v0vY_|\{mժUW}_~9L2<`LR=w﹐{['" g`YM;}~A|U ~'ϜĖu[*3 _Y0aGp7o |[^z[ kT7]= e_^zi{㱒 d? ^߼ns5NNyէcl=V:%a`>Zk~/$JD?X~'?ēUר}ry#ߜD9"3g7CrxO8.QAV :Rrԉ>{LdϹ@L8wh?:dʼnc7-*2z^8ybX$cB):ZYoYk,]5O|Ero}Mw]9Bs*  wPBdHH/~AoAAă)U i8AdQBƘSn5k!MخF|$^k"l c>/σt|vR0ҫ4NjT5D`2dAz?ɨ@xj>=4vvt?Jª󑘜W)|鯜A$+g pbp'+Ps 2d _Cb"_*A-IENDB`qstardict/plugins/stardict/pixmaps/arrow-up.png000066400000000000000000000227371453553600400223350ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME #0{ IDATx}y|Twd YLքl$Aqik}}DZlmVP}hEDdIH l a dg{ds;K h~O̹9s\`@d@d@d@d@d@d@d@*B_vedX.d pm:D:@@N3_|`X4 =DGlve+@^a4FjqxÈtbxZ8ԛPwZצ ߊ"p1TWWCdLz8tǶm%_Iu)xoYXXr#7w<"""ӺCt_ǎUT-a z@֭[_ȟ4ic7y³P 'L@~n.t:|y3W*#GiQ AtmRWIfrwDgyy(χ^j۽jտ&/~vTTEѣmu`l[wi`1DQKdd.IN՚xԐ=wt Պ Om×l @i&ig؏Q Q(VZ'{1^p&PֻCƈ4KJ*Q;lz} %rKq8!"<4ƺȜ~|ǘnH\7S3za^ʳΥ06t(n@gg[# >1M5@/*Mbt:#Zk㪮zLj=x/9{P[[+[y?+iw3?%@'#IPi^]܃: /@M%DQ*@ь)cH!C0up>|\mog=p\Z Pq̜Νq.^āa`pEDEF"2*S9/su(խֻܜd8III0]LdBN8(3h 3za>m*t:gz9]z ti1z%oK[Z 1<"7'|S "#{uכr+ lRH8X*EDHHkp8<#Фc:u[3f02(]S :ӦLAhhP p(\zFVMM JKJ "ͅfѣGqtM7wI5|q< Z8;qq-U!G,H !..΍FtT{<0ZwWdn>{챞tq\t wE'dW` OڗIR!΃=BCCQWW"s` ,񪭷L͜MD%6AWP}T3Y!Rp^[?aa!QUU˗.aРAQ,ITaZhkkaq6UUUHKOKod2 /ǩqh\ `,@]]J 5ksU8qK |Y!tIfbcp:ApgYǥU;w'R'rsrq{]4e*%)%wC|'T]EEhǩSp%#44Lp摇Q=2=G 2R@fVcǪo 7"JAr:D]w˗{tYUk4ܸ=p|‚UwUɓ'z]N>˗d vp/F6 nQ@ 92GvIvS{:-\b}"BHHW2wo!mI7447h.s1;F)Sڵk8r2d |+q/3&3>tzzBE"(A+U;}S`xF?JѰC:&kfWaF3Jnǽ܃wUSҕ/pe$ NhxEe:$cq-- "*}m*%=uF#GfTKTfٜ6(-)n3y/]xz1.^gHHHhmky!@x ?Gef>K@Tӆ CxXs/Ǖ+5HLL`PLF)HA.5$K{aZ1iDXq]wSx 1)z}'mKgʱg#,}а0E@k/~!nJg (/+CgG'rssn*J?99ىҒR1MEQ`2"$$' =TpQ:Qxn~11ѽI^7/ͣ+ X,+/CGGg˫^vhot:̜9+V{ II/@ ,z~,VR >|#( `Z%t~S]KKE:%zN++GG{ƍWBXh(nbK/a1hhGYi),Nxr \0bIp_{hxx&]J狂g8n`0d ^|Wm:;-_^6= k֬陫W^~GB[[JKJi]6wV߁ Lp7Nr.Q^ops( Qbj21:%d vKtzAwmjކ#3 222چҽ]J^QG}* &}95?1 ^ 3J6L,tjhkmCƈ }u-_%22kVFFb_Y9,N {;`4zhXU5k8G- 7V vsv 8I%fChimEzz:֭[hwƚk0|p`_~جVG\2,.uM!$]l؟?̀'^J1MMMhjnf@垣ul8| ZZZ6l^[111]$&&k_]Æ`<kaVHpbăp ysyL%!!6vYM0mv4Ͱڬ ;Kh%z<%8Q8dzurTVTIذ~=իW׬ ׬~c\z5KHH됔&s8!@d %6449V]CA ({PC N4aZ=:oΑp8PYQ&3ƍHJJ :lތFEe F'`B>*+*0{l޼9MLLkk!!! 8{u}='͆fX,LivĹyUYcPfq\{: Gl6#!!ol|)))AK~6fCBBrrɄdttvl6㳝;Q}:b|3ܸqMf$&&v$Kz!NJ@ Ǿ}bhTTv-hkoCNDA@ձhl4cp`acʁض<1c"+;'_NCl7:'۶aCqKJJ ֭]874DkFN!8.@3EDd$M 錈3c8\Lʘǫ؀Ac͆+Wbٳڊh"etMBDd܂zlh :::iSO-HJL jjz,tgI(/+>@^r(\׫|!@E>u _Gzzz?w/O 1cF+.c$qhl4he%ك"1el߾ hinAl\,l6{Rf-߫MFNHx$] UU~"#"a1"(?|!>} &yy6'_N mx ` 5̙3.۲Kt]Z{rKU2I( ЏG#ganh@tT70j䨠th}}=Ν$degh2 u5 `0 dجVfD AaҤIv466 UQ̹O kYiY` :h]]=gЀH=jtP߹s'()-.$caQ.v}M1,:ycbk׮n:zNTT~ ̍fX, "N֕MGޒ*ѺP{>w7n@XX֯{ AzAw@D>YхY}*z99οfD ƍիګ8u,{fbn,qfaƩlgϡzLF֯_:JlذGcc#Ð5> qq|P^gttԌ:|8{=0Ɛzƌ|NO%/^g4k("f3؏FHRRrrr07a1x`}/3#>+S5  ]%՚ɈWWAaaa@o޲wpa ddcD<3HmTpY792yy0 8ٳg{QhAAV&/]Fjmܼ;9^yV´iV,Y}6 qBxxJgx/P$ߑNfl.\EOHIIAFF>x::ڑ6D.9ya4zĩ.陥WP0rԁzQQQwUU'`0i$ת{ l!-mF }^ݎֵY3^ٌ E^^W^y<&"::J.%8ڷ{瞿E 3@Ta4 8r0‘|~kjj2!{|6UG'<4plРACcC#jkk(=F z-U\ǩG4P0ߵs(@aA@GU<|g9,4F (+/Cjj*Fft;CC>5o&3?> PY5m& ))ٜ %8u$ jrO裏s"vJʚ6 ]>7GO'Gx;"<!!z444bΝ5jw#>ӧO#$$cƍŰaCŎkMI{ǯ4搓y$$& 2" 8>CaС~س-c cǍСC* g7,~^?$9mcb@ˋ zΠ|<.^h]ΦMc1OHZvorw :oN Ƚ*\/=zfzӧOǼy`X1#GgOOz{~%K҂fx䗏\_g@2kk6Z'h^ph^i]v}eӥXqZ1i"ޅpmvW;~h_mF>Һ2O to: ҫ5^n3Zf.)wCo4}Q? uD~JZWuobx )2_MA㪴?}{0 _W;j2~CgroȡƯՌϭbwv&z_.CZiK\Aʰdi7MD=NAܗ,-w]z¦M'=d̞Ua^fd1[N`IDAT!0OT#$b ^'[f=³F\0o] <_Ҭ'1<+_r._xwT9ei3!ki]sʴޗSr߫j. `ؗ=zi]vڗzKfՀ ~TiJfi~"[mO|KE J[6@>UGϟ?~d钻_4k{޼EyR>wgמ3*%Uݎyk7+<]0o>/7{מ3=/''.x$vAkvG!\ڬW-Wkj|uJ˕uwMTvu4r @s^RwSRZdȌr_6чEEo "NT-J42VQd gNmt{X :Qc7ՎS)||Q#y0Cr/N*Ntu֑Ar>֑̂@x cԫ}W@> abKGD pHYs B(xtIME # fpIDATx]{ř}y?5#AQ4Y%p=Q1l6FyqbA$&ٳwr4nr5FTD bQ 30v}}uWW;3SVw}Q@JTD%*QJTD%:kΜiDt:CdM A\c:pa"@@f̌_[QJM&6<0;s ^}.b3v3/ђq-a2"`1Ԣ>e6R ;詘)|o>aƵ ,96Q OԟeDo2a14K/QI"3g 7X QFb9g~O wl߾$8kNDa9~ @e@;v>ܓ%Ag~ 7zMM5ЀƆF!H XD0883Dqtvv 8T@;/>̳%Ymm3%}\x&Nf477eR3<:J#bŁwBww0$󭔌_ߍ={@2{@ /~,5.c; /<¬>Y>9fHcؽ ߡ|[ 2U۶m@k{ fO³ =lΚX,™wVSh_4ص{7^}5{c~Nx޾XPa٘ڊj:DGx ~uzu  % l +s#B+ 3ui8yK `>&Ǟ^ع{q=R_$ X'r {zUkjjp…8yʔw&];^x=xeU[Ǐpt}ヒ;wرcVBy'cb_`Fu}㿑<}4|ҥf3ҟSzp/~crh3RbH;,̨ŌiۋN ?u1|睧͟X5kra``_L9P[ƳGtuuzꩂ:KiJֳ֧j[X -Xi:2W?*_zR柷׹jkqх1RJx\U'8Ւd0TyȬp1c/hwb2{ e$ 7)XK y'553.EC}X2XJ0RJHcl]Ē!%Cr\?wH)쬳KfcE)Ri]{X,>E-XuU;9ZZZK.A"Qfa”Gt2>}Hi0=dm'H`cĉ1XsW\w\@&R9z*.XZ2˸HLEkYzkKK=g/S/a)Sl2N\vjh[B>JD1JϒY=)'c޼6)j+ygM@Waz0-YGHe˖pQ"qh~IhfX;chE& #:1mҷ̘ڊ 'MA|Ĩ#vN:i,iY.ѦV]^x18nN}27Hg"9R֤Up Wr*vZJ;3քK:jPG1qa9zP:sP1K"ΞJXQ!-*'Pl7>ox;Z꣏.. \ЃY:{6b&{ UW]U; )btu6f$jjjɶD9}K%&OAGQA-Pmd$2Q2 4Vuu58t~ Sl# /> պL?As wj>>j 쨷hWk"̊,NI'iCjҕW^9c@m(cqj" V3gV&Hv* i<%k+k{d7AJq! aGKg0<4(3ҖvdQ2s+vܡ.Zd0fL}r KꋆHޠƪ"7648`&3&uL H3A@% wB-#u0~|zsQ@ /_n ?ŠsTc8S1)ӥL ՓvX'L9bf[aͺE,6gn8;Jɓ'ÿR3|fYUe~6,@BܙQ;' %(3:]v/;S9̈vSp1@f]w"MaMcX ͓&|#M\2,'N.<5ͪ-pUmwęPu{~3~ðǏCYYYEGT$prKs .`Ʋ:\5XEXh]c ĞB%HwlDZ8a"ρ&_(,YQyD"1cxjt.kOjy^K]2F$6 * s1`)Ѐx<@A+WN(Hø@7D[4(ѲjU; dzV! a5:q)?`:ZRPcСC0̡kl* f U!dcc7' aCfxA EHp 0+%ЈÇgCL ZF/l764 /l_͚DPz!w&-f{%-]n(q (-)ls qa, n19S0UdA p:AN@t8o^ͣ;Q^iW5!dT;5 vnCY\=T8V`+W6E&e(N֦Wttv[Z&zrW .#ڈj:yo"!3uXϥt;C!lc)MՕp>r n "i'^ փqrCRT }lv^U5ftoW"Q%x2 Ov"-q-7Vi °}zVC.r+9̋ `+*+-$tqkLM g&Ҫ "!`xadYy9l!@s4tٲSPLXth|@XðA,AK6b1@ ðX, 8~7pM z'|<`BhA2!db+ j׾<| $,sҙ+wuuufxo߾T2)94tx8vӞӉ1m4-R;֓!_{g(L0ָG-۵>Rd=};9+ޜ0$iԎC"@==i3uF,%zzz"c 6gV>Q#ؾ"[ea^nE4mQɡ$; i9ӱc)D3KHDgg'*+*PUU DQF!&Av;c)BIA]eŋ' ,< Q]d8z֩v?L(X46 wfu) Y rs( z\8[$O;(D)^$Jt2E">aߛ)/2#2ǔos y}3a`` [ ;R><|aYhry ӝʊɡ|Ëav(uWD'rr!_]k +?aT }BfWvv^x~{ah"@VϗZ "zC;;64H= 8~* f\a^!z-2{ ¯b?u֝b a`2޻*": AVvopr?DE`݃Jxgd/A&(HxXXG5  KX/&ýODCXB '=  4ސ9v"YvBUwFu2WEk{$:J,Faǽ#XQ+eºBlɠ] , J</ÕݎX/}衇 :8ueY<u>3!Ǿ)'ni- ߯[V-㦓`( h`=P[(#IN~ D0v<:X &=GEGB7œe˖DUփ2r rin "z;>*Ef 1][(ZZ@~ Io /% B9Krќy"WMZW֬}G~ayQxiֈbqkY-/ؿo4Oi~3[լӬZ ]s.sͭ3[5VuºfUc\*58B.|`=ؽIܞo~~M=Гz& /n&U؎Sv<z? {s[iIxfϊ 4dn*vp"{= fZ\#oX/&1cӪUw@ez"S>v|xREA큾 6RttX߽㻩 憺߸FF|7mڸ@`lj 3@D5/#=<=F "{*2%ϭ073w2X|"rOBܲuo{tw-f;8`<~'!V]Qxo|R0 8/@or {0 $!Fi7 ѧ 11<;xsQٟ}AyYEag !$B]JeJjr(J@+{+[Cإo+Pge)Ie|~%-Orz]mix|l0a5H4Act 2ӔCɃɤ}8m۞d7jT~ڑ U r5 LF22O@AL "naFD.Μv18e:ޏ^wh8om?lVS!_dFOsnpQ|"0NN^k00!pO{\BP !|"|l{>6=z(c'B2SDA"LB/-g #(50y!Bl ??~r/, *pa.0D h=nboG$JIENDB`qstardict/plugins/stardict/pixmaps/list-remove.png000066400000000000000000000203031453553600400230120ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME #E< IDATx}yx}$@RD|R_qj׶Vnnw[{u44i64&Ol8%Qmqb[-ڭ[)IM@̷ `%{*CiG:`:5k@$v[pPY(3>Bg>v#&[l`[`xM8f7S*$v; @`EqAHBN/#Y'b7 2򲹒Rt ?s 8=K3 !t䄙iO@.>0ˉ@?v|C%&<T^5/ϡ@&Sޓ)0'7f:L@089t9"Ț̫&K o [o&m*/JÂA>c`s; o](1=GLɒ)5P~4;'28bK2g/="z~`髊 WIJYw?L+;%e.zϓ\Y"!fSnUAK 'Kk~6B UG#]`?' 07b׉G )Gk@$8  Hlgc(Εhj|6f^sBY @bfNx y?ʕV@JP@юfb!ee:X'Eƀk1 Y̾tȈ']w+6DҊ&mpu.)&7khʠ_֙ `1L|%w|d0h#e} Ÿ֝'fQk`n4xW_ 5*7n@uG 5ÿy>2u@yaM!=G,, dԶ{7EoNC :1{ٕ>kB(vf8>g0R]=ug1^ov:a@d*^JZca:ƦfS.DUSѧg?\^4mUtXtPtϽ A~|c<׏?0( {b(qMߟ>dL@e-`-Y)D4JJ`ٲdhL>&*byy~؊O]ukӈu;&0>Q5;hۉZq؁d*nj@]wCi47_ `w4xfWr#TyF#˵oR~-]nmT_ukJ}&0y޾fVǝ2p<~x>K)?e5OJND[T P[)Ɍ~(Cwjuu(ٰCB=8X*Ӑh1#Gs |0l&>Tlg.!81Skܐ k@m la#J+M\Uu.R~Pxgކ-E*UJ([:Rd%F< "DM\ D%H pY,4_7;\:>8qT-̀O`;~l `:АV@ɍ7b/8vӘCbLwc~-qKԤ |0UV}^Xd]._=!Ѽvk@EEPY|(`ʗPS ?Z;_=VנluTq>Sf_cw&Qx?1O]̸><ڢ*#|3БpUU``2Oc,[[3?\qqLcn0^~|U7&y|.H/`n |0U+A+'1Q@`-CEMMQJ8==3.#jtT5*R{g +{4c<>/Ĕb{1rA: V*ޏ/j0ajY.IsT[;7e`lnI8aF?嬁/#sCI݇twyo5(wNtd |) |1M7Cc#bf>tͪksN InyT ja2`^ԩl/FdCT $EIЛ#'NOѱ@Vwb/<ܣT#"a` Y8d)\ema! յI*{k\ߏvAL ><uU(9"Ѓ}x@Y{[R2TV*L0껾6 P0< U2;:V^vL9 O9mWjnnFǁ(u|0WVI3z!Pp@g*h֑1O +dлkgnI0gQo**aknPl6g#ۖbk= bJ ^vl/.z>EfRQW9/ePc*WlRQAR]xye5C v*AәC;|c%l-j_`-|hKV>n[ 8L1Cu5g$JzLZ>]gJ6l:NwNAl|!+f~Jږ+R^wyq(jy Q&._4͞VlM(["ܙC%P9Բ.|xhNR+4 B!6dH<d;"r;g[$j v@r::رޮ\`HO`v:s.l)>& "|f3H@ 7fz*.C٥0idk{htb67iAM11VƑ.lmIZR獛ZL}i <e"(٘}/ ~zwiokq&^g( SߩHLaJ_"2i-AOi aoi}~؞%XT𛛢v\c|F BHt37X qJj'' :Uax ;`onT\ [[`u6 aTOFW$x LMBky8ÚT}6&s89  PQ/Z{qS}2߇Ѿ7G`!wuzct_OM_P-y*E5; =67I@CkAYS>zo[RJNX'4V$Ԅ[ Px/q5Z"X?6 azi,\Y*ID~,xгk">/X' rT.R13EEMe RoV? atB Ie('ugTMU(kSޮ.!&y( ֆ:'%MZ\81^ g:`L}&W3Le ^H^ݷTÔ+^|ٶ/O_;aTv߳PŒacDq1k`E1o&J:(vOB8_~o` |^fGSȼ9[kvu/x0A2&HZx_r kuϐT |;3%H~YS=Zܩr$D OXqVl`v|>~e9ddWVe@ {KXƛ RwM$c َD^tJo>ŠIJ/_!DpDq&c0av,8R*Ap#ގ={s~ƍh߷_̠[#+yQCA,X(J2:X:@oRC8$:>/D9!}!q+^~2Lw-& \CqDNqPt泂M5"YrgybP/" a F!䟕 kCǡ_TQ(QH}0Ax\Ct?@p8 8K|߉3Vw" aݲ Lq3>ȅg2dFt6ۢJ6~ZTbBM13<<ɠgAxd! dv\{K"Y,D" !<Υ܊/PZzY2%?js0=4$Tqb+h0>Ppypc}Cq۝w\Q.gKLa 2)ǝ̆ley0F\Ò{"݄gk@r_" jǵyWFYD 'gpcnʼn+> CsG$&oVGIK$8C2Y5=8O$v\pJp\£C]v\/8~D6Ԋ;ӟ.9S.7fJ=Mk udyRܟf@Y)X!rsvxV':I#}Ki0]++ Dj`dlc}.5>g:ޮv\% `5$izJ;}i=}7D]SDY. w_u=۶gܒ`Yl2L {X P6 ΂z  "|~]P-=$?s 'ѳ}x,z妲dFwjD ɖq'F)PHmx+~ _櫹۷5" IpRf…Y#&l.Ui/&\bAd94=ms6z "4;u>=`*;.\ Hnx+>}XT/ z]ִA/UD,F`j@62?@#,:ؔƳ~l1 ɓE KivFL7rݷl8H;NY>;>aF#Ǩضmo˸q`z`PqCq1;夼,VZ؛`mKȣ8S5YW1).JL,c/(@ۿlqo66lu7֫F{;>~deOKZ(,@ҽ}~xsf3V9mޜ[%jikVf;`oZ$ЏL ! az6g<0ӍA$.J/l`=uW$VX[ 4D4\Hnf`0moĤNm/~z8;RPQW~v=9z4dF,egd_J8?NiћK6Ȏs}[|CM SY u7K~a^ r@\O}KI6DunU9'@z&YeS{}Y#.HZq%, <6?sϋkpЅͤ%}N5kIU֜ ) Ӭd @i#%vv ,g྘n5kE[ , كֆYwe/(GUi1L5V 6%fP baxfdZVĪ+" onNNSRh%➹B,b(.Fi%_nu7j#S >_Jʕms}f_r~{s~UzҬ֦ؗ7 0qB \C~n5+qjoE#A ~Le: `P]6@g*ҭf%Pվ"IvgGO?Ao XobBJ;n#4)@`a9<ӲsZV>ABɓT=Do9W`q9v;PRe e q:VRf}8?_L kc}VR?X(K9~ ,||{d, r[@!9#~UTWG89Mj5 ħf8_} ''Ã?況[VKmݛj'Pd?QxM-N,zMh01 f Z| OlcA`ғ|Ūb &߫@K?' 3)? >|c͡6g# EzZ3 OB~?Lf Vv(=U䢿9!Ȗ{FUc\ƌŏ G!4O&r> /l~_ 'q{F01uvW4b>OYW>TsEߑ<?ٻ. or{T@֚/Eu21uDԕ?6 MhbYCK-U֊\&]޵@+?a =U+Jͱ{߱Yu=@|u%6uL؞7`/vvv/>-I/ld׶ρ pUǞzot/l@10Uk׿.,d鷱[n9zm@B-b{=|+ rk2'< j uxo4+q` A\v61^n/A8Pi$?V p-D4ITēJ%R]xD@ )ΙTY'νȅӗd*Έ&S^!u-r7v:I?;N'Mn⭊R@ S 7DQx7> ;Z!?p}TI&˄=tDD=E)#W};&4^_yR@rǐgdAs\yقO7܉qbI|E.<;f&PDS/4JhOvJI(ECH)e:'}yD ϻWַ^xt+'\ ![*(X@HR-SNPPq{*Y΄VM=ǃ '2q_yGD 9|^~" -ȇE ] y"T߆d**"Z %rJ#IF!K6hN_s')Dbw"Y&֗aycDO~wq㉶w~/>[Vr1zTMQJ$xţvbPdJct6 yЉpI$yYv0oW;$v @ ~hKȢ+;8rPnj9)(W31,("/sDd9=nW1AeL$UN=D ')19$QUHx;s=. @ ~(tv]}=מ v(rEE}̈I!!G&FpOψMIoHHjbINvDw:ωJ; ? %(DB/ޯrHsO@ o}G919tRDNZ$RId37drzxTd4"|OW|GI9*OFt?j7?׫C{2jҗw^ٝh[MɲɥNj$JzaMv#טr&'e#ߗ=&%QG#"&D5^{諏v˻)kgVw?Tn]\4"L.L[^f&}< QI$Fr"" 7%vjPyEt]/%TwQ;҄sHi%%T+"<}dZYg k#:Gx ৌÇ{suM?rC|\2ИMe!&)LJ]NBޥywP旱7 `'2YH$xZ٤ 4nO:GǦR O&q0=AOh{.&>P} =zG=<[FAhH6q&Hh׊U/=beہ@ [KjBhR<9o3xO#HFGF$eՔ~:zӌ1tt5|Pzy}u ?}xr cgN_7o?_xl0FwIj&JPNGq%ybICRZw?mP|\!ˣz"I&%;0!|XMpP>iDU"$ѯ4$-P\To]sZ> Ox _ׯ.l_ ?~C%gRΧi7&wc.PWYڈ$I)qXn-K~<'3)L^Wj<"D8$rRLb8)DCCD84HL=u6NXV;UT?]Ȏ@ B…=[~ܩzƇWN DޥnrJ=צIDR^' cp{<`B{ Nٛa#wz_Q|ovЮu"Dj.g=f ڡTS|B!@ q9U>fFlx*"J)'߭EB<@bll >w%*zwORI9d Em!W: ECDOLJSIa x&=Nī**UsZ>u|Q_QoAO\@ GYY[SU=oѼ7 ~O9d2t>t.1DYt[Y{5H"j:NHH[Gq.'ZcN l4ҤGDM&q;Řt1>qOc((DZ*g1CyV&) 1 /׹Xc;?{S@:vt97q"}B%9<ֽ.M*1EٓR8I$iqQ%Ӹ̃#|{Y{V\:N1՗b'7&):Adڎhe4eY$$z-xR= ?'o~'LIT55Q<˨#nZ$,N7 C"sH<)(R'^Ǜx"&}:3S?k\K2 ׈X%@{5$-SzfįBQL\gk\V#ꪯs>K'Ԩ|!@Gcc#,z{{19>plxdocg[Ov58lwyT>34FGwKv ҪD$\d;m.kHDMHZq/}TaBɱŴgȨmD=#WyrE 'YxF ̵Нt}'QTY=O@𓃌UU(OlpΑՑ&I]IkҾ1huPZZYP-nR.&qFY^]E2L.I,K}앒q(<ϔ1Y&m2yKxn/ A`^VVꛝ4?GA.u|!@FxGϝ}gڒr5CMzlMm><<һ2'NFv*b!GN|XPϙIpy/LXt8K$6s'Jp<F3DP=kj7#RfzGx?0Vi9_B<,d.Q>7[qWΝ'˔TV!Bʥl$&zb vq"$"hDR%u~[ۂ]\NBg C`6$kn}?) Z.u-lϐ kTLi>wu[ Hd2wxpzblbשuuyoi~ GDL4ѳQDP 9GVAvEȥ^(cgcbWg4D>4*m놢2"Q{2ݟv6]YҮz{,:CDvqq+ri*79Q麑q{d܃(,\OvfT ?~)ʧ38i3^~s'om諵*bE) svS$B,,MҨZ16 $6i4&s u °ԻnhefJ0i5xn:=4d[3D%r׊gZ٢6 H8GarD3DM<W~e u?PO}yQ=3D1կ:GOg|灓GLʒ)d yEF]ČƠ̻H1.sZ, t24øcI]RnBmLҝ֒?u,QV8 Օ~~?gYibOsNW[=TO@ S ~+4rӳx^:}ѡA%GL!H{FtMxz)иܘgh3qf`5qfX`3 Iy4XEuF~6u:ήML9DRaLބL32뤶$"ڎSUY3V|(%CPy 3 EפǺ`ěc<\'dn*7}M}9O@がীёQ4\hN=?8uM݃h:vINHx&l]2I?NcCm "tEٽKR-R6cf@ē[Ha$K E,]R@P5!9i2ơD"?ɤU@QOۀdG북q,uufl.VW)=tY ?Ȩ] ~8yÅVUwWδ61:TQi-4N8;nLʓHmώ-b:E'AHL=Ll)ej"'YII\G\:L4#Fl,(g& gaZ'Pfۭ9j9X4aѐq/^-MNȨ &A θn\,\g]5ԍm@#BF@@1 wr_G;qP^]L& %Ð%<7ZMG{lM:%Dʘ!$9T%\;;LܴufUgc s} /7ǖe(x&h"f;k^~)NJt>pj1;ϙFdqz1_T>d B<5O|mw~˧O:<9VJ&3v9s,UJ=NK,KNmk!S&^ȨyΏ3{ & djH>m%=7kgzV_zn.e" Wa 76WL;0G4WfnG@ՔW#(q<ﷆڼĦ!s;L8~Qrum+SUF1nzJVuI՜ΦYMc6&Ntw5KzO@AF@#yx%]h}Od*`*;ͤHc5Ajn 2Ha xl۵{P,2~<:&w"MjmaR=UꥩV 1G NC Gk-m^{g_>5d}%77Y4 -hܲ*LN 0=1ñ3Hy&QYm%F:F)䳴٢RŦ857U_gz\<HITZ{! t£ӹɷ=vC>b.":ڝ%g/4~w\=OWgYN`91 l&?I>$&Px/ aDIHրWsfF@4gȚX19|!@Sɺ3{w{^;~ ="d!bC V:5aI5Nt⫈*GA+ibKCVۉ{ԙt9ܸƃ04xǨpRt댷,4[\5 y&Չ+aUr<{0&sv!;0 chxCL/݈Qoc2N" 6*4cۑ.w9(2&t #Ӵd_?LwK@-zv[v=!@_| nkⷾ+Y"?YV8$٩_79Sb\/iM;SG*ӐAqDn)mJXZ6īmݎ)USQ mW߉v^ -Ȍ"xf {Z0)E[`ehljFGq9iG{wZ/s'n IDATp,Fd>w`lXIe2/կe10rCTd"4v䒹SxFMkN?ewe#S=ʻ^FߙiI!s@ 'hlltdžG*FwԷ4ml +B L姑QD&bAE2 '2U_$rF<&D KLJW8%蛸"FF1ݒ Jcr6 V@iQiԯ}xj: aܕ[pUWR}8"ۊd'RM㱗m۱^ۍCUQ` Ck$D>}\bYeוP%Gk!HjwN']A"^^')DbC3~ת(bJ LH}h(䏫~x) m_K?Kgn[ƻL8IT$ 0Dq'2vgBEjL'`x=&#nMF}EϰoX}8Zxnt)6._ Ngx7> W{ފO":cJxu-v|=4QJ>J% -%ʨo޵aI]YN5w]Z=nu9o@@ Hseٿ?SWNgHM$u`]3J10iH$u[&g:g>=Q w_6D+t5̄6{YO.rd0Y5UePaB_q׭cEWcߴtNnOu)^%hPDv l޴glKz^s?n{%SYIWĝ'ǎ`Cv2L5a7d1,3'C]%󖢰&U_z_ A>oR^-}=,̮z NϪ]z|;/c!@C?<7l.>|ʪalptԻj2bf~88CnBdW_: 9s1iw]qɁܹ8z1ۃB!GΆ61z;257ދp2_Ntuwahx/7FH?۶mŊ%ޅ~|^cH):iZPrF2dD>n;0/Uѱ18ug{[x@]ou)'2D\Yd8bƝI~.Uleh#lÓSԱSZ/T4$s!@Cc;[?|GOw^;5ZCn|8u~ ;#ѷvMI_WVqgcFӎm=1BWI0wȘi,1 v7vϥr&yņ=>0\Q|QԈ> e&1Fvl † Pyt"U7N`{z &i:Oq *fag/G]O`:k!"LtZ_jgZ!j_?f7&.ʚJ_+9ڵI&#K֧bwLIc@zVF{Dx -.Yugķ'nY rKӢc ( cF2&MJVw-"ju_kؘPRj45F߸iDL;E()~9 #^|}=o-\EW^<AN>Gʝ{pbxy~ DCX;go݆jٹ tf"ACo'աkdB22`ƥĵC{y, CEt[~trbGVS}ߌBWa㪘P:Ʈ7I )[8{׮]\M?>va?"y""w67z1`g qyNs(xu?%|2I* z\",Cq(2ujNX"Ŗ|;WKoU}cX;w)Z݁5V(Zp<}KիF@/,_ #GUý7܉~>|<Љʲ v);3CF"2!7Y侀H]x:egH>H)Al.&O&)D=fȴJs5 yHCx PWW>Xuw^::5mOe$>Kc:?!n\ܡ-q")5d*4Q;CSi3jV1v=<5J74ʪvǹ=UN='EqDmރx}oǦUk׋cMgQk:u*uVXX]z N6;ÓHi:Z gcH̅o|.Y>؀#]}+0f(RKi "}4;wUs\BrcmLaANL\i4K55y\S` Y9bas rx _9=ɣoLXv\V 6bZEb37%*i V炒Rj!&?98ݚ쮦vqGC X5{V_|:r,[5ex d#\ޞ>lZ6l P܈z K "d4Z_5-qI?:.bǿv<4uӧLȉ (l6c,auKC]]1o=#&{,gqHΨTZBK&+crJ9ftNiϫ3(#48RTӊOe0OlEWSfw@ S {p-og-7|e.ͧ++DئaMa:;̈́hL8uw/KBfCCm0q9R+%gLx;}=lfz>IdwAg`·I3ɜͮPx%MrIܱj>t;w =y<ӓ~g'12>95ؽ}Vՠ u}HtЮ˱iԔUٓLO3Jé.=ЎcgO'2fḱ]90uR }u]& S& wC>eÄʨ.8 4+ ݩWZSUE]+f/6,f"ӣ|~.[/}Wݎs#ʇ״4]xn;O@ ??F/P/3 >p͆A 1 _`v=6=dK2qr%K 䖐FFtؔdǶ3͸4Z-MUxU;Ӆ4 r.߸ Vb%Xd1z)?x*R(K!Scxb_VS p9UO;66buD]SI;V%ekmPyQߒW3t=;&;CM4gg_i3TIyk?5JRyuͮ]4ӹIsӘU1;ƲoN!4 X/掎6vH@@ |瞯}Oॺ׏NM.P$ǣΉ4 \w bd*g!V7LƁi,LfDfǒo39Z9#c۾cI'(@/&:hFHOMʠ^ p9iL٩rx*YMqzg/Zz;r"^V* X4&(=$P&ekƋ/í׽tͭp3E)2 rȫsiAEXf j׮H Z0 S/{&Ɩ%rq+0]דV$އaX`htcrA:\tդwZLUVvUʦ{}d\%]ObAיncjMa{v#&bk$'9 n݇{_n(q:K2_ tY55桾k~8p(s;{k07^GPJ!.ݸOHcTIk ˹qz^m؁TcSy~ Nc8ׂl1mmn \cHV;XGf7ff+[[Jd`wSWksJ׌ }ZMgkFbHD%Q[oq%ز?s/6hfc9%mTyX9s# E+?Gă+uՁG?=qE1 Vtx:GqV(7q7Ȉ`HM)#:9l<(j2muetwC5!9HF8&&b|J=v.3u4_Y=ݬ۳Ogr;Ϸښ%رg7gs>{Zkh+,\֮i8T28fWƽWތ ,^hht mLR)5]Rx e)^79ZSK!@`ڀJU3`ucxn{a(ZIw;]R]\ss,Iǘn\ n V;w8s-|u ?ck:N8tM B<z-rlWUU$(  fȐ*Ʉ!L%`'S.ȉm\ѱuQdw=01=HDTZƌW}ER8չQhZ&R߈㮜 >>FeB8@+ \0QuKU al7Y (K ^ x~ stO6=4yZE#SP6,Ym+6`Q\,[ Ŀ1Q"589VlYWV«?Ȥ܍1|vyhijsCW9 :=kV{Q(oƜjV CLΫ\ݗ i_UӲiTh7p"F|BY2rٽZ6&qQQo.,Ѻt;wF֣+ir&.پ Or}[lQFa q*A^nx[w:;&.w@O@Z;hžo>gCodNdIEXq2&nzǚo@ S s5]Ϸtv\VHUqq(1cUDhH$M);QHVOjC;B$ɌCXg%&<%jY2KMhBPN_][nɆ:m=Cg1<2U~u=x?َw7a𡷽O<NUضq -Y xA.]z6䇧1:2ޮ.| 9yqFA=}2jj2d:4vo֚~8 dI3L,GiCzze$hGD.l&f 1"LthFD3;Cs\c J#5дɑ q.9}f0 =Mصr GEIxw#ӇmNc^xmU_o}.\ -]'~ }㣘.!>_Nhd.4VK1NE1@ONq&%%Jco)[gPϜc=Ev_W+Zt; q-شp38x]COkNU2?EjuӫH,R2gXA:[}6?^9 IDATYZO@ MMMrXp!8n?x;8rG`:3D&[H\"3dpV/MDD|ט\<*IcedG΅qjӌɠ-ߌL.ȘF*!=jw :N.Tn8ϚU3),JEhrHc t`A,pV],j*0:=;淯؈۶P)uOq1:9.DoWGxH$ w*­)7aY^=KM9L_`M-%mwkVGNX9laj xGe9*kg8K3Wd~qؿi.^X*;[qS5Yuشp@"yFy^?x&ahPL}9S67:YÓ+(x O O<o<7p}Ml WMFZL"Ǹ֔C#uVJe%ug\ƚ! "-_V"%\DJ;sť10Q2v;'Yelj\= aqlQ$ 5125 ݸsO}I4F4ʓ 454+=s@ͫT*z=qexq|@:=KU腓GyyNz'7cl!orCҗfqf?\IX! yV4ٲy ѵv 6h 3ʶF&JYk3nR\qѥغz#äpnkT_dg#qK<% I("+4a+褝 )({=:11A )?&<wgәw|vqY*c݁QAäКGf}CrCs~&=!s#sg` =H  a"Ғ03V.XM K*( &@H߇{&ؿq&\e;=cHaO9k6aˮmM Ecpv*H=N=.4c,:(B`<|GcX7w H7v2;:T&v3A{Qh9\EC81rrGv.']k6qҋGRa)(usH~ҨA){C3QTԔaZp,q}Ϊ+=Q_;[NVS#Nz?k:[pU*\rԮX`g{G_DZFz;>G#Fզ+DŽSPgxT6Uu;0uS=ot5^˩ȚBZzR'2^KmM.dže+56F=HhhMslIptާ-՝k5fÖ*(ЄڜQVq>0V VGZ^G& ƛz(@Kģ[&W0 iL2,鱤#ÊݵM {i{Q *0:G? FfSڸLGi121MDHӸcX|5qi%ȞB9a,>"**ބQ|1ҏq\q~TEv^us4F0W֠U~&<,3vĆuwvpO}kRħGϢ}| 6=F+:"ŻN`FaΑɚ;R Uj8KDA?ivok-4P5.dvUskVeZԙѥ1_UIs^ fCwpf)\K]O%݆աz%CGOk 6qg_RzF B<࿄r#ÿcL٨SGz3c10ٌF5j3%CI$mr mrx< 9֔?:!:<1+.ڇY轀vM|VK%gxU2esV`M:%:z >V[˖ q|"Y=)9ց6ECUD=GdIT|Se5X\3#cL瞮FuƊwגv']Qs;Ztm$(ʾ|tכ5Mv]j̙k15<(ڂv_-j{O>;5DavlykqΡC+cpp]C+29_U]VC^PD3jI c$FҨ\E{J5:cՉ?N,(hsgFߎ c]JRz_Hݱv'ߊճ08>'O #=Hs#OO%R|>bߊ7o7j.Ǣٸҫ1Ӌmp\}\*Kq3/ %nj#=c(G喢H+y6؎ M|d~>+{=ɫ5Ab2M4!qS,ΨmMq٦X`1ZשW h!0f#ǨE%+5K&z"\9&^HSSL~-EJyFºe_9/ywu=yZ!?|3Izeeϩz79=Y>j6W2P7D@5g&J݀Cuf?fDyl=gFI6ES80*Rt.ܾj\~̝;}E|ǰv"Z;n/p*Nvc{>˗avU5+w#_yhDjl"< xAE16=-LOa߆سa;C'Qhq=xî̤-3h2 {:&ZEeHKQpp~֤DHyhJjtawmjm 9A+Vю̘]Q"_%5_}ŨTZm٨C(АRh>+n5HZ8 ׫0AY2 *>S`H|{6 Me&IOqX~jwWwEA{/@@ o#}o@퓝k**P9+B0tmsR3LQS3tr{V9]&B(VGmSN4#WѦ&4ƤL*ҹf>n.[4N8" 7m {;+/bwex14u5C߇|:<8nlܰ]hA`7zzԯ~,_xAWP(q0ei\2g%TWi|'r*a ; ]hD:wd5Q3.6vR+m >ɤiR+&m ^Q)_]/jl(^ROǒN"xn\1Jd|a4RTQ-\}k/ƚyIdzgDOq{>e1QVDXu2` 6*%]7vraøy^?89H,+΅]H@ BٳZ>;qd!SCFt2t*R5qJcKtFcr'@ùuKniRMrJ$r'5"drq&bV%gtѓXPV7~7yMMx{p)}\!oisuG1N ϋ,1 =Gh0zهo*CUD״L9_'O}stuf`~hj&= A-m>3  ˌxъZܽFܶ*V_l ŜBƝVaB+V,I%K\mZE-@[hlMd9#Rq(:ǖ4Yr9*EFP{E;[eW\swO='wb<+/=A6ņXny9<|&ӣd56mތfhE06/[7n-۰j1'1'Yt6}KOkTXFU4$NI`@`}K(mv߸C484*C ,fWTcٜpt RB=Tv )Ǯ=cv OM39u"2A!&U[F ~p0zRw9̀BT` rM*%>tm0kY4MXnm>!x %8w^w C_Ás˪+VVc" $ģȸߎ2eL$nHɀy%閺-.v/{8DH jo=߂Y55ÊUPQ^zU,"4ZQ>!urcݗ 3]9 >f38my&S94t|{[.ڂ\[m7b8tsCcX 7#VY~iI)bޏ՟i!uMi`H-+&40삒QDF]tgwrk*;=Kf/ƍ5[d x8^l<2u]p82b٨ nȨ653'}~k(?p|*-dvϨ$ 75MNu`zg>2_J5}}vڥS5?F!9UλNNjGzFϪ.oÙI LcJO="/)BV@m~"bˉǜ6*bJzd6kU5[Kh+c;J37I&V;,YHBq@HK7+z߫{s28KtwUw߫?`ys+: 6<DgЄ7 n*cX޶ Cx29:;ese/2SADt .Bˑ73Lbzs {X0͡ZU '8fw /uEXfȼhiGsڽcN߸9ij|T}ǜ: zbɀm-ȋpQ)?i)kmԻDY5~0lүl,S;ʦ'eaS~3eqQ^(Cw}<}7;ğ_8C7ޢhR46C-ZTDZ;Eͳw)M!9s,D)BeC| <=}|r+o]מڀK|V;|=ubvifnL(g1Q|346Xw9Gރ w/E?oRyQ[+os2r@J:[T=ӹ`1iP7<򒽲6fy~cj-XRnBB^Mƫ_Zj_w^g*g1 Ybb,q|DQPmfY >0TH)ZPdx:T ѩKʶ嘞ҩ k *[#X.G _9m$JzbnlŁýXf Vwt.ŃOa2eaCΌy)ġCsvLDH3vĖf{uŊVtĭB1SK|."Ȋ=cAa-݀(vH=3:a_?_ImGxC* ״(&3t7*6Tғܴjy'~7[SVrL\u*sRdji D [ E/A~/稱5Đ*v3 @.w Ɔ6-E(g1Qqwy_\Xbuk9wladD^A l}Q 1XIgʑ S'Ǜx+Ek) )8)߱0:^*C@s**E.U=adw܏ֲ{׵.dzQfjuE};vBev]:Mɶ[ٍn|՗ -,^T8Dʶ6ծ(>=Q*Ո~IP_z6k$/FR%BT-|L0>?Mꁜfq:<!t4-+Wo>e\#6!B=4 S=ISzbۤA²ܚa&';|=?o ^fYY.j:.)ҸOьa= K@AJB?/l@N*!7dw8r&1{q `P:f/-%mX܃A ?M-(Mz~#9喎R M`z?%n즸#|:P&QO1!A(CeRK4ebGnyyO'*$h1K ^Rد=4OMwg,>Q0(F1Ɖ߁w=/>=үD^_XbEDAhLfKQ/@84n0* i՛ 3ܯG|i\g K- cTRujP|*hljKhc* n >T#*x~I19iN6*sJصnsCkOOLem-Hnk c@"oX?OR?N9aF7cy[~6p9XX$Ѫ$*RFXGg63j8ѽiul]7@@]MD_hVckmڴ5v=Dž+ʨ?4(? w~wO}J!qK0zksjr ?%*)`'/-sn:y |+ٺzeѐYX$sF:C-U2-|џ ,Im(`X(kGs`ְ$8v;s(%nIPac{~ T%ݝ/WY'׈3}d>QI,$,r{kY)Xx/6144 ׃`ȭ'F~[V\u2dufb%VF "~An4wf{2a2먋0B/_ N UiCK^,oU?+S]ęyRz [jZM3XM2\j@z@3e%g/xl_$o^Zip tS: ) T$)a7s@'i}r]R@ c{ >6-B|y^2a?đK"-kvVia"V6-Cw`YK 7^AoT@*,9zTSG5Z" s]UiCX%Ef>6eݐqk$"NubSl}UMB덱9=cm3ִ+2g>ƽOB1ʧcnR/В?GzL3on)VSҫa{ݏ37W]| abdq'&UTTu1%ڶz˨&.QgM Pj~T~ٶcWlv݄A>(bYƿ_ukhN~wԶc5J-+pubS3Hd,"d ,$e\b h ] 2a{Ȝ T("ބK _y>bǎ'> I{O{v~n˦εM3Kr@hjqTkŇz(!%oFnˀ!-jM˕M&,b4gl| -Gk{qfrԟ38؃AbH/>GLMTSze8ݷ=k֣r_< \5:5D@&`f`΅nWj_%nXX<לY0Pɏw}rV^E9ј(yE%ue Z/Sz&-kF)HcNyrM"=*{^FYֺ}&< Mr:+u]Kn]sY(F1 Yb?ySSSl304xwx~cSSEA`Zᔞ }h%0F "X [.Z@XX&e'TQ-RO}j95bH71e4kI ҹ-V{#L`}%K5ޱϼ2G_eHlfvݿŜ]&2u-\]6u = D^>KmLO4h:p9O_k++F1 Yb?zbrrŗ^X) wOa܁_({][S<* ì%u)D UJ0R( 2fhEi´|89HsOd6Rb#41 6u˪޶I׺/PMMm +B)\n#~UQ~²y2Ej/VLV^.<5 H6fh|:]{rˁ TƺI4(4!X䭻=`5(E?D}V Smu=cU3XP)ťd?q?xŧf1 Yb?j\|ٹ{fg?yj)]l%g蛾BHT͑DAYq2i$* J^D<2-ez&Jfbnsy{Un'ʙUr?$Iflڋwq ܅gq*f*M%\}kcL/UnlqWUb=t\8-Te@Lwni?$lm6H3{~Bqly3k@<?O{>KBo*%*Y(R=0()i/gswV}S+ ɤ',f}\ݦR?Z " FMrьH΀22v5 Y kElCc3D"^嬞ؘP/XWCXiTz,U"]sͦI M'26>I}yvؽS$~sj^ϽTW Zx;:X{⹟|'Gov$ZԂ1 cB|-|YrKMҷ=Gb*LsfEk`靛\`~n`5-% iؘҴ,g1TSԄM(^p9e^Ecnp?ߊ5+10%GLzKf@ά2yd”fn6/OI5H& 0<`_FfBmsPՒF0(v0+kb$N HRyeeA6?dCϻk<۸ S<G8Xrcv͖)LpTXFSmز+t6 T_O^ I# Yonh$2Rw@8+mkUKYX#yLD=$>P HR?8*{oTqR:Sewq 0 Euy{?巊Ob(TܢcbS~~Թm_,8@/GJi S й=&dͰVk%Z,2. fK#?1l(В}/ Өc#<ǯP7J7~MfZR嘝,\꺎w2NߡE4iɗKA*PpXazs3oibџߨ"&%{u-xƂ֫5_6ͬ=4f'Qb:ļuu{n9^Xj)I;넪FȌ {5 5)XnPc Ӏ&#KI-KW5d}}.=̨ʞ% c䤍T͹X@T֪:{mJXQ{1S*hOz kplgo\ś1:7 IS-3V%I(%$8$Tؙ@G:{D⑷K"~N# IDAT\fkͿ@(-IίQ:tܫ)Q)b @/ U<$bZ*[M&tѡK4YM6Ylۺckܬ%\IfF - ¡ܛ/T3,P#{C0 JDB J 2_e{LyOgrsaSS0AA`+RRWaŮiC\IYK\޾G X3xU6~'SB tzE-z\&7(fNυ5(b PGE3\VqO1{4h)2dPFJ.[$IYQ<1S+F`L@XKD(Эy^g[!+\&H`TU^8Ca|٣3cJ34S#sxST3yH;p1Qbܱo9׮<=65e9/LTcV<6^ԩ70%F{#$B ˡDs{VE@gTaz\żsRžƒ5 70-.vO>!$%e,onEX|߿Όaʵ,T*XYjŦUk1>;X$"(TPjbGx$lzg Rd>U(LYEK K@erC3mNo&_z51 ok^. JtL¬iG^I^ߝ,rw_ظ ǶEi݃7qf ثu%{eR!]OQZڞ̐X)% k`+w - ̫kqY DƛE.gZ6 j-"Њ<*vf7z8Ru}uB6{YV^R_}݋B)%*'VErz/H[ET-={֫ iS(JEdf1a|skw<ԇ>?WsWo;״m[,(rla M PT 5HJ/*Pd娤 = 6TDԔ)wK[Dq槤sO>۶F/s_D0:[Z}8JDŽ[p[lBo?cL3ؿiz@oI*% RmHS,0R0`9bQyYI>/ C&FX,Ͱ?Դ#ql_c,Qlk)?@Tf067ΌOC_65 H' ֹ.\.r܋Qb㿵/?~=O=+cӓkUUp80vm|#tV,yߓMN\.מBKi4&֓JfY#92Aby':ey2>z=aUu\Ryy{hjWm±݇py'~s}=x-\HUl_±wp雗.`>]cw݇K/wn\,Y9%*܄Եnaտ93gS%IBRc/05oJ4[! x)#p`e- 8358mp""8d*.yfA޷hKhbUuR|{٫oZo󀴍DZɚMF~|ﯹD {O?ڽ>\"/2 )ȆFP7uDoȸfFQ8.ڷ|ך;}}x.(J(_hmiՋ? M?>QeȊYM%Ug{i-3)JߥDF0UkHM-zSڐ[8]+V]nx'%lԢ+ϓmB?v>Mԧ1~,:`m T$`o&/zƱƢ1 B-b侩֗/xﱿm4ݾ->Q0(8CՒn sNLRM|!W{Ġ6A2_3%(8ܿB(8̽6sӀ$"LF6VqbW7 z$[Te53ձl%~?cǎaeG݀//GѢ{^6)w@n=ǥ7u]b8V^+}7Ve.C4s/F33bI?D 4ZI,yPYKiQKTm"Ul784Mi7fJ^$]Gy8Yx |"nOp" A+%eIߣXRX\jcَ5\Jf"*5q \{z`e L!ͅ8"[oP6Ҷz(.D6Ykay܏ @*@.\Q 03+vo4;%kyX&y k`?Tkw1Ko>\|@`Qx?A$7n834 3,o޶zC@f(q/[ H" VM6Z 0aɗLhd`MtmKKc-(M/@`cI/rK܅ (MlS@ڈ;-[phnؽ kwճo+g04s7@V9‰IJV?dСŒ6h1=o[ cv)+;P͏"LgL; 7b73L]` sSdR5pmW^HsaX |-MQeߩldrLJ)S]7*~n?gNbpf_Ese垨;G*YTKSj9[xFFPءa>k ΐ>HFt5sXA>͋R}*{j3HIYs9Tz6xf@,;t>n܊m6~*nche#S{#زu FFGq9hY9kPzY)Vzzlf\ً1(X0@آFf'%;)/Vte+!Lf=:gJxABA X6l(.V19?,u;]@k]z%磒@FwIjgYh𒌼(@ꓤ-o}J6BsؽFjM7iZ'jY;3?XSFM9c}I]JBMnizR}6J1[%k\좐0{_ki5Rˬa6izf8Uo,A=`)X"&{J]x?HWW[/;?ڗQoִhhnc70;mbX3K(if#@I z5YJ!h=j̼7dtY M6&{ra ;lŧ.w]o/Ů{mǃGg_B[s 846]wm{ [#FK-C;y &p% MH%B-Zcm9_LJ3 P@ueK[Tfg\,= |oFQ{>k*04Cw߅Gi|iܘhmj3inÔX[>@ڢTSUЛXr~Bׂ"6!gyiW{{W(TRs4垍_W6pddty+0ǼP!?=EXTvJΩP9װ~\iΚ4\WP@Md*E!NdzCjv[nIuoeoLu>VwotөZ:7}}/(J( E\0?_WoG7޽Pٺr5/d36SBqh]oVjckxvKd:|l^"UA Rf"v/5]#u+qYt38/cyI|12=& L~9=CQLJ¯Nݸ:`g_{=j`λVMW N4FLʳT`&S4[x$`O=Գ,PӞL[< NZrp]%m(K]ɛЬI 8-"ڊ4>EJNf)sm5L+#߷J DdSTJwHI5+k%aXhY\TZ;Z|`hohC`K=E}>f{jYu@MxǾÜta^뽄Q4ut=>gެ˹H  2%}fV+y!mep=+}Yk!*$9Pϲ܌^BdCK*Me~H՚ɄCbJ75M2]~]TT)soǶolɲW(g1}:Nu_7^8EggR_4F4E !$Z+ZdX$.™.jlj6ETY217U5|/bΪZJͶaC90V;lڏ[4".bcĖ 0;>s7`xz?qI6ǡѹ7o@7:ZW q0338{?oߎen7aSZwuFDCŖcǙˬfK˵֏)u7otL͍i2au.OZ]<@гMtW޳ky<d eE)nݡox}-M],>Qba|_{瑇sSj] $&+slo9^P HL.ʼ&-* Mc/,KJƘR|2VV,2 Tҹ9Cb#3&raiKG>O'phvNbxl?0T[XgqbQ|wO_}4q{E8}?5zFU8ً}vڝ_$͈??@cCࡇO'Ӏ-^QBR-gi`9>ŞMS 1iS+)1[KU$X O~[ܙkBؐ ʜP%{Q̘Ŕ޿HyI|D?3Su;GCrz5\sS6g ❊<J{Z':.f#8^% >y͢(c3e֯Z|"^+ HomC{Y'j:E%M-DAWɆ<5Mgj`D,RbM2j pO/uO,sڵkAe~~zo|||i]PZZ0 <2*b l(.*s) fɫmm"زZ86{k=lT|j$[g}&秱s#fw?eO?5?<::ff|~ o^Cij/~۶mʼn#N_<'عa3JM8s#n! xn7G085Un:|棿}a54y X IDAT@4gJK O0V;aXG|QSe{iM=)y%C xi[4;T7lTbe['q'ٶ];=Πٺ9WeC!ȱ%14Yh^ 82~(9j+(H,t$[+#Ɍ)nx<% u`Le=smm!j^h[|iUiMQL*u~_$הr\{$z έ`,0%ddBz덕c=ƃT(6eh" = m{]xٹ-$jonðcc>[چ}y%r3G5҇<}Z3#K})EȔThTfRWE( VVR"bL\&>[ND 3/Y䞱L ff?(ūe<ؾn>{aԁz/ER6Yn~}իpK0kyr|+عi~‡^D;nka82.\ b} ޵e76[7zor*P_XKԘ$ bLeFik-]i@bH.0C0ԴcB+̄X m%{7w /uL[J"T3#>]aY,Z3eK':1dͧjcCjoq(n¼_8 TzX1,K$ _ }YV/!B]b lCB aAU`OtB@}izT@Q6zm:&o9^RL$ߣK7} Gz{126/ѹIeы 3^iV:P37Q*gf/" cѥu I_KޙL3az$mQ0Soo]JXcJ$R \b[wk)8G%u5m50j6= U{vaքe#@ 3[TS(=+Yy< s") @.ĄGVBԳs[jA M{, RD,alBX#JYW|<-LCb o0 ?MAy ?}g޼Z(g18~K `||(.\8e8f4x;9֋zZZo|6oF[ ·pi'7U27lC8b?/~ov_tuNr\7{4#] Y6 qI3 2-[ `cxZX^G:hmf܂-{cR˶f\W_˺<7mQŸ~X!RR|Oi2+arHz 5i~9!|?cZ VxoL O`W]4 ;]PC8D{"j FRV_7fϬ RhsY b2ej-t &cly–޿7%eӆ)h1+eUuĠҽ>{~7 {1B\Tqܹ7mb&hn~. Ow|渴l[pebc Ӽe{یI3fY̡(l%}KyM<FGvFٙB,I=Z/x k=fq,+GgGY@帾>Q9`7c׆-4ރEr5u+ږ9TkW*НرuǦpq Zpܻu6]{1|7w&.t0Z4{g-!I# 1!GVx3wb+aOY͹ wRIY<)-, 95 -KКV%&FIS黤:97ν{dAGq}k=qqՊf )"#aoeg*NuJj%,:함\ݝhO`ʠJ t#)'VȠ"/7cjeהmД̟ElJp7% cvJ1 Eh,7n1+&m_IC&T+CS4Z!Ru|WkH([`jl 6, E|&3Rs oICYxQf;>G_ow_}%W_,Egg8[J:ūh , 1}2 àOKI˙ Be گ4*}N롃G{V L{Mt\&Tyq}#C8q܁V^9wR. asZ>p;:q*d&w>c~lG׍x7=½f&QA)54F#ײۑe0@w `a VYO?T~8(KE_K_^PbfZg1=?M-xt߽]w|Ͻ]ĭ6`@٫3 ,Bo.y8 |{A k q<"*@+JOYR0h=ŤVgWx0v9!JϓgDAAؠ΁)sNI a^]ΫpCmtU/NS='s 0sA ={zQ"0m:uݯVh>6& }= 4z )C,:f}tfu4u+-Vb9~˟3WXpF@7T#.K wz7 [OvAt~t]f{6yjk*42lŅFdLO4uT 25Yur6D2SY7{2{`{Ile:F͔e['W*\'fCdoPMIψF(cay(͵g߅Ej1gcv˜|i.F@.v$u4 압{6tO_F1 Ybկ~?3/?1<1{F~b~XeehY&^'vKw$Qw~l`"sg#Q,u1K#]"os#O -Pd;o>lX^F@~i8s ϝ|/ۼ~<:[AA L vUسw[}*nL cer.3Xa>NnCy1=P齧_+Wbi:MlbT`ca[?qO_C1éy%{ rOϯ^,#eLzMΌKqi IvׂCၝy컌)%i,nҌٌ]b_T) e9)σHț猻'Kq|I\/Vb?0˾⋏ .8ʂ`M(v`21$Pn$pYW=[BϘuFNU"9Oٻ@KÜT6LJjlS xq/`U C)&Ѷ 6-ߏE0_gomX=#x=G6'u6]7Ͽ x ʋ |Qq簩s+}WӋ7.-HT|/ǥ5zR Ml5#SZ#bMx@bla]K^xUq3cefW83LL1pʬEܻv'n܃ kpcb߹xS|Xҏǁv 3jyN.@,X sL_UT)j*n[XTx)J骤n;{"17//~A S\Prۖ5_zJ 5>GR|7#e{qf& o8'bP1yâ H0(c#z5o5qgIz[ HhjէUըL7&$&jOCS֓%B::'pν(۹3868?)Xnm>?Xc&eyosKؿl(crr2X;7;w^~仂({.N \ LWf`I%f0E /yI6S,} 'GA=O$6BN,Jyx Am%%QԘ;7tmpkjX4O%C[wbMxyώcyK\ٺ ?G؏~wK/=ϠS/ᾃsqfڎΖ88} OzPc<3B+7\c?03"U C-,@c8&wDQ)׼V5:j0^b-]y7Wo_`Ϛ,kg=9޴ٰ$4P)V{,-A%cIL\((W*5iJykE&v#m~OƁ{JI:6b29SXΥz^9AGbBQ5n@1u)@^X+O@J43e偳%ޓzA j^4X{Zڑa=83n蜀n4ȁH@#3iR V%JΙ}|>3g;;s؞=lˢ$*1"F7Ѝo{+ƪw$ڷ<R@{|3oy-!S"Ryg놑>s=O`{/@v_KW.ц@7%xN M+zç>QtXbd=>^ӥڵx^y!pLlcˆ7*OmB~ac73Uv}Q{G}ӯxKK廏_8Kg]Bٜ1q ~WPUTQ3ĽQ1,F#jPuY/8h1n+÷\3: _|0pơPGoE] tG4"K?+,<{) ?,8_߯].h72,_=U<{#W]m=G/%vW 0??~]{ϞyܩV˕m+L,X# 0|`/eZ85ȗv]D۷Jifs IsGL[10$ S#(:E]{œbp![N ̧ O?7nkW ԼTpqzr l w?}8lYwcn+`@ANana޼xf S ;2Zސcy.]6S@I(y9JA<ߓ8L82#'rp>.)#'x$G,֗p l$XZ ^ 32HhR xӞ\vƦeb O|qw-YH轗ܹЬ^Ӫu8` q,9H"E%%#Ś}N }Gbُ}᏿5xyqZ$K22|6DNg({}޽7>x֎ IDATǧ?i <_U.{[k7mw44\ &(̕e$bDAet\LO L%hY!  RLHAlHlq$p:J9~FhC/ P_op?ɭJ2 E}#J%x仰@N8io~̌k`MGɨO@#JL{ՠd2+$ɰT#5ЈFikZ;!XSqקuܳk>h*֓psJS1m6LFBv4UQ,)c}_=O3#1Nq}cL5{6ӜD'm&ɆK mY9k32ZՉ#p|-HK96} q u }bA Aߤig(,22l;=;=k nt1X,&%fcrsv)t_-67>K9g^Ϫnzy8^u#)hgG^7T+SwtFIlYĽvԀggr\~җZV*Vb|23'adDG HMP_(ZC*c,dpWg$鸏:E٢ոi'`H(-*A ztG m?q.ӈqtf\< ;V]#O+C{P{v֮8/8ݹ`#~ҵ+G{85GHK 9 O:AjА2~U ծ ,cn%=ȂH:4|f4R!qY@&Hkw'/|/bg}R qRv%,D&*hR-)^AFѤĤ j6QفF>$Ck^u4I %r&;B '_Tח0zu]kG|^L(އA՘O% ~ry}W"t8 WsAu aZ8s O#O>hSݗ^2~>ֺm쥑"Վ6jNJ0pmyg=Hyk- 06uCJe`jkKubС+f#4ڭCXD~jh67[xÌƺZtzbupZL~Xmyvoڲexܵ~h;1D`ݰeV8t;GG^<x^{-xG~rU폠wvf:p um%Pr {呑:1&B=b@P%TǬduJ'W10 b5% Vʬ}gmc`,ᦆ(a4KNظk#ܴi'l_d o?/blxA&tOɹHjA9#3{T[mLPtaɅĂPkԥy|jF 5׎{M- (mu ;)]"j6kmBШ&B=9*7ж$}zo[ThTqh2h 򓴛JӔX\ 98H/)B~O7M5Nn=x;ZZ<5x"7+e}?yƽkGHx֎RǷ-Ї>wq<MW[}W(447A=(/rwk}WS" X}hyQ" `Ɯ|Wkz-.gfn{:|"ʜ ~3/*!lf» &!ip 2ot!i,4'"a[k+}/ՋA-äIu;W;Õ1@vxd:k.سu'rȃ+z> cc҂hO=)S@Hd$\`afSǰ2i2IjHx2J72.TvdL(!5p\:@968i<6 ?w8/ 5[rJ5 JZ(&El=ݪ?v}sܫ ͓ 2u#ܐo_~שmOXi]?|˰nlh)w<5O˽ǥ/VQ/|w ߪ8^\\_{onih`\ӣ0j:eŇŔWQpA'>FqH"9K0;AcrܒcF2VT  M][ Mpub1 qN+` Pt?L (G`Loa~z]>Cq5WƇ`~lқ6l{ovH;oeD B j18sH%J[_:.dz/Mg@:xQ?J b?JFO}RιMȜ֭-pǶæn4~ ^x]YRP] LikLjk XX Qu{kM#a !y3Փ?*S+x¬x^]mQ>cs\iK[:ft#,V6B5'IbET-A4q^TN:5XJDʠm#ʙg|3ƇFe̬, W-:iш}n&ˀigk˖\=kG x֎~aw//<;13uWGsk.s0@ΪdI $I@5 M?ezDO"mlOdr<5H@EǪe gc=ZFy?J, $DC&2nQ_/Ot7|pMS= MFʎ|\{U0:<{OA}N, :aнN^<赏LM@>:GkCn1*p;paUy;W;,⨱ hO1w5=o 4RYK dlqD i|Dn"=o-䁻u/9^67 !0Lu'”%bHaCRu\_AΜ@B5 jMZs[1G>/:voyx+GRزF5B_Km6er dӦf$F"4{42@j>f1eh7-\qF=jd2} N{"E"7-k5 @mDL`N4 rRxi5jfW׵/S$qF믾@gZٹF-ʵUmf.Wj+Vx?ƳvljӧO'>si/;TiL,tλ- hpUr:EDQ.Q ZYGXO1j4sAL4y ˌM6Vo/йZ޳<.n¶\G?sam*hjo}7Udz[_C@c}ows ޷kj1e]7l\ X1` x}WjV1wu}ݏq]Wܿٻ'F槠o:\YEJRMhtaHMe"z :X*cY^;#xdQf?Ԙ å UHG@͖a˪XWkpfΈXepF:W_|p}֩c}@Uױ"QsalmcpiZhkύi*6AAwSL/Q\e@e3bIشt'w5Ze߻bu`Ko}a{te}3|ßM[oK#P*d3sYԒo5nks ۚ7w=;:Q[jGsgyRez}ry<\q^:QC(BBzL]\Xfi:!9!ς_L}1NLE_nc4!c leosxlJT } ;=MxQXp`Xyk7A3aIB9 {8;'D-3סJs/} ynu#سZ #o"B.oYДԱeB& #9*1IZlJGuRy@8; u&8=sL1eܽ}?زXa/åt{]ǼȻ*#Iȼ>=hkf+*&:%PsV*2&NSRy|3C3)(1ka^ t]#3dY)2*JJ(cX1LE437&`qaT`~ZBv짯D,0q{^[+r/ $!6!K zE Dye撵86/MXhpωFwFJPGf>;q%GՆfؼm9svb"TA DtC#rwvɞGƵokZ#o˽ͭ^nQ/ρ)\qإL %w)>da|y/o9\ ddHHNF;8(l4.~^SCd6͕L|*3LΒ{S U^<[NۂYuE8|4vfjk ̺^;Ν;C%ѹ/? p#T^}p\!H7bp)+̱jTlck>oqC8 EP Fy`N0uӂ_1(e ^ue![ zͅF}nmhil8r<\P(XD\i)FQ2ʤ9TF8(s  O?^x5زi3<B[zOpwܕpqK H ?->:Uژ3>i(<]ŴQx`]MA)jL"5I^TBpw?͸ [vUk\©Ҙ{CZ>YCT"¤gUɓ,<96Foys-#< K)*_ҼM|TDf <@s} HM:m5JT^bT ̉  TV̕1CnJ0ʪ*5Z1WpysG߭J 86U| u̱a:cQy\X幡 ,Wdӕ368B-PafrTѝOlz='? r=G/L$R wC{z6:'&oL F+SXTN8wT+k!rܟ*W;jv_k,ٶzv>xԩeͰΡIHXLdihaF`с;`#W+Ppsn *|d_m^^MϱFnQ_w<mͭrCl^87=.AioVS;NK+@[@Wu@}k xK3P,f[46µ1+Ow7>p?|㟅.W~^r +#!4pd̈}b[S.!yUYO5WCoBx&P//Z.^k1\?z*1sݹܻ~ܹc?[ a8;K r!@{յ;]v&RB"nu(Ƚ76't+>xfOX@6:Q秒Y,n܀.LG5<0uHĥAi6L0 tdL ,U6Cxiz\~Y<_cN4G79zMyIps-D|ͫV|#-}U;T-@'Sa.,Β9g`#o{2ͨ*^J?cZC>_tP|T 6.kU?%cJ[V^6 }011dÀ8/dyC9GxWY g(Y7N̊1OGpO&]P^~ΛMΠ : ]Fs FaLd?rϣc㎃7ހ|_Al4=ܟuuC+cqqϿ {6=PvS7ds峂olRMq_귎X5W{k?O}8Tz&(ͯFQˊۅ.M $aeYm=Y1>t_ף !T\JyV@1{0K#ѩ00셟ypM7CckxN8Ο!ݳ֯[ 7  pg+ 7l݆&| yܲnL ›`U[%"=Xw.9or;;64 'OOfMT0`#)(-7ʀugHNs'-:SYq-F]\d ie&4%q܍[_,H}r p֭ݢmwniUFa,7Мfpzsj'wRvyN9R-z}+_SG߾fcyd+hy g}F!mi<87䂗M~T @6z; Eoذ  !WbOC/|Y<߇bLr kW/>ST|3;7|9@xt~djI(1l{ (P>s3gUA-53%h {M՘h}a}P~ =$V=23Opg ͭ-]v=ųt?"JN:7?|LMN׾uxI(&>̷(; *`}{uy`Aϑsᛯ@e2'eCƩJ6i ̹8fnۤ/_;5Q?p{F>wT`\ 2u3 S ͋JFjdhLg-&T3 12'v *>m}[U  fariʋ6^"P/ p@/\~ >?޻cU'|>x_;}^{M2=vo_y6-o_/÷ Dlش oy:x%<}Z2y).sىZL1\`^JjR$삶@DԂ!uZ]u37\t57n޲6vYޱ̵^&T6508W,lNqUdb4ާs^} ,+=tUadM5mJDhK+l&XϛO7L8J ֖a$MB N9@Y!-GiϏg t$Rn`tfXbEQި\W/X1i5Z y-~qzޮeG{1^3lr;%N/[TWv]][np}^p .U*{#23awL2(ТQ?Y<4c_F)yX狡481z.^./}/xL>,R戵׀]46)ӑV~jD~OٖW*S_洒@o̭p*VIR|Ěkخ QYnN`@r6=yO185s ,\x(-Ql05e&]-h4 g#gdΔLY>cww]g. OVQ=?t*^,Q˙ :I `Tr1~F6(Cc3Լ=1!\δlDn};Sשodu[sJXi] N f1`aa6vt͛ 7/sPv1ؾ~3U^a \ +/$p)8y >s?ѱ&?{HVӴۚ Ȣ`LzQdܺ+p2W#0PYu+Ӫʦ*H l<l/й{xmw+Kpj}Df `{ /Phb=(%]+G\s'z.QdW}1{,HW NH= T&68~8ṮBUA1:tuSvb+nPڦx812AeA @ .z (R@dzHM$ZI 5e l [6 ,*qk^F7?G,.jg\E:Pz֭׍ϽΉ7(75rn#BJ3i&^}=Es"%lV߳:a'TND1P< Q whγxŒOtF^?{* hC 9/W"IZMMq ʵ]2aӟk,˴ƣvASK6%jm!8qvk'~<[z2gTAVlJ4KEL(5-ɡBc!{a^5 w"Wsyqȹ*Y;jvgw_uvwE7か@=U d QG(m*(!Ąpӎ0DXRӨyZA] L()##f(+@Q=ua6ؽc-Wڱ#Eñ> %" ۾ VthWE1$taa}wln삎bL.̑QFIa/}kuS=y ly"O:HE =u?D5I)HKtױjEŘFܔ8 xܼFx!رa ۗO+$+켧Zמp|%ar[\FtףK[ǻiopݜZ ZPv l[ S=a}:@"k4p1[lFV)H|R(1A'f֗5 Mgg71ri+cp1=)K u@j;Q<3hX~2HX'6z^EHU7yx}PH-iI*}9JB :~f}C47c`m?_';AuzxuNC$;j$_"pOS'W3)c]ϕmVjY;jv'GGݿRJlӨ&&@YH8b&`ѿ{璘]=г''aj~z> MJ皀b` f$ jy~ 3^b~f,lq!̲jz CGf l( lT^&'{{an cz,?10p[,e #4MZ ^h ,x]mt).V d pJH4MF:z'VMtqЮlZ NSD M5 i^-SURVg6R&,G%2Zd !ۅX'K#lWD#3Fg{>OB./MM*px{>$@,bӊj IDATU!p>mŪш IO4v&MPUx"k ՗ڿl4 6w2;Z׎Y;~c{hP/$#<tú vh.6n */%653:G|*eWLlqbf*o?<]cQhYT5OwD@AAFadqPͭ4^_lquÓ>?sFY#GT?$Φ@s"4TĴ hpICbTI]lR5'X m"%w2Dt&EwX|Nb37+7fYdB"uj6zr?g"[gM[q+SyDH;<,p辂V?~+l֎Y;~eKN&\Go6ϴ^9mPb[@*pX3Zlv +sF4gyxs=@A9`Y/+k!{WB#@fUc s PvKx<23 l~? ׯ^y޾r=d)H=(0dT  @b¼T?҈ӝ$O{2Ӿ13TX+u 3.* C){N@6CbRFwK3-wp306 8f[T%JQނ@5Jyhkoϟ[mHW^ _r_3×XԼ Pi JM/F9+iо2q&]@c@yRf]nxnH-^vԀgb?y, -'NqŔB`bLDEƆƟ$}?xܷ(m$Y>ҊVhT_d20 5D 3qy퉖oԛH^B Mݱ^qػiO~uuk'°4O "pҌh(Ȃ*VQM=R Tou ,0:%N GXVd1M~uN-Bmxb]sfcW/z`̅-d)Tdr*cYcq̸d#(ұ0I;'݌jc5Y7LqF,H1k=s>1uRIF65Z$^ gm;woQ| ،^g|~~o+|g6/2?s/0x\V#u(36d:h=DͩZ_n0e#Q~On[}zp֎?\!@ yheC F'EG{UT-~ XN*H W6ضu+[(6G<_'X_|^=u fFMTAlIa2 yo[h<;U˜偰]:6W&I#vRCi,1T&n$6F;u`Cp=כ(̘Q*!,)$f]'v&pЅP9SsN.HAwL.dH[!z/DSGqQXH$&>ρ3S8P| $& PYX1+.YΘNky SȘfeڒLkqGqlS 3GɆDA ̪TuI]c۔/­wmo2o#~>ާ-3ie~}ϩK#Wk+hw:z݋Ǐ<[ yӊLa?ok]yk(6kQ[Jb %^GkXĒGezxS"HZXLLaqYpmdbJ sPYX$7v.XѱJj ?SpM`bz ^~Mx#R Y?UHU,"x^U'BXjI%%9UZ'h%U;"1k.xNQ9_;l p#/.sG_||8R/8VDV%cQtfw r>R祭 G_ƹ^Kv|%ԥg3Gl[R,uƉAs MC"1€L|ClH:Z[ϟ]w9|݈C ؀ DT@sTl0U_2cw64xdg= J[_3N\ 81f78+f <1xG!/{^ ֫o@԰ QyPRbYcm^ F"?%zrllbZ(sNƒ`-]_4VQvJyځ $l(h`="ƙMPYȋǦӀTeYl3n+ݶ8AvCc<t*$`F4-sVrIK侷v*yպb}O4U4=~7?;ײqm5Qs_h! .,2"*-\JuQrx>8Edfp ioG"|U 3GM$ئjs qg5l B]UtXs@C>D0$h`+02-)R'|cc#hr'#W4]1 RzYdTr@ib~upg#ec3jԒIA?L㦣$hR㐲x`jB7 %6"fP Za 10E:L W)4/ /\;D6A]BsWivf FrUNLH_*fhߤ1تj-,ɦ+E` ,+} x&T:Ʈy޿';o̫\SjCwz(8M39cZ!i$Ғ^#Ji0<G=G߁=xQظ ao&x{ 68OQ [Ñs'ɚ2H $5^OD/)jD ąeuj E{rn7ҪR_!,,#hq_yx֎Ѽ=H>F[uyhp4PV\͜[#8B';.8h@-77"oIڔQ@-4hpE QJ(ijE͜Gw%:hBO{|ljy7kNA(=L9H|LOТ3=˪ 1\j*F%=4=۞heȋ 4ύHֹ>p!x|ݴ= ?}zGQW5x_y4K#31'))bF$uXQUKX^IujB)G2٨$iF~iкJD7Dr)i&61Gj+,[ zM5$AvrJ[t3$VYUK;ØKhݥ[ek-(hlEiY'sn] u?$T9r \SfZ%i;o/svz|_/wU26ύk0侦=֭_<_+%xŗm+J'Ø+NhH72ΕY$ KPVZDM9dIA|F~e_e*uly7Ͻ|b=}jQǻw*jSihY pK!p6:$zl~G/ NB}m ?0YkpǏ]olvhpRT%_?cLI]f"zfO!9ef,X2Dk1t a8 ^KFl_x֎hڅOO&ӾgYp(#R-K]5ElPh a΁2|! cBkBV!J-h¹O"bNhUL=:fʨ7G XHdV]FZ3Rq)a>e  6d, nC0 Mܼy7<~]f*{OAK4K-N b;K{u)˴lq/?)QJCHT, 0Nutq2^_qiWz8>4'6ZmUL㒘/03:^tFѬ `&b9(2VQ2Z0 tcf%.3]g#m 7YCJXR6jX_ Xn9t Ke [B:6fG;,O7Qê.XY ]s?¹>*J*B`Z= f#lYk6Qo:>JĈyٔmH.r Yvq :_oYm*-S = <+&ڤpJr/e*WvEG9xE*Ǖlp@8DgS3Gu#* (s\cDbeQ|hzys$)TRU;D,d $! ,Q^s"zBkI*%)mzTaHql˨mUN#+1@۝[InT*62*Lh'*Iݖ*sJi閴;nS0|v/h+tZ mPh ͼ(,@6DjznJp|dT(=H֊>=>Zfָ#{)`WiggS.DӖn˔Udk UX9"1kȔ7ќp H92ɳ{*]/ߓA:u9/7x[ _농^9Cu6a*J*,fm.Aڑd JvEݵ#z3loc+;4HyZT/xD^;+ 2Hʄ'WVW3R"h14w?m}رw`@!lDԒfʏ-u4XRHjP\I*N֊ՖqȭkM@dܷE8fUL,Ѩt ^}ڋ,b7z?^.\y\xu meZ76Ic7 6^Gi\kQ*DU/^yAwU_SP"lWK-j[&yeZ8& hi(맛쥾_䏌P?G+Uy9_,鄏r˹QBͲ*kh!Xx-(3߳xfoI66=ﺉ=8-5i.2MT6Y:v9s^Ӿ'hP5q>% *%T p6;w,sDtKUPtURDuTq[:8|nxX/wYm w-kO|{IDOEabxqӴ.QTt01Z쯒./Ndizr(1ix[fX;iCy*i9_?+*,)U&mB6R[  -%0 JU4fU@[xObU,\@rqGF%ܷM>D0 ^^G_}t|hJ;"AbU+w%aDQd`!`IDLzf}>=BzIڹ};۸ẇ!ÏӴ!Y[\;i*FwMv =}x?={51WUSP"'ȖHydwZbT%TJKV-M)D4JQ Dr5/(Tm<U{AN[f뤪N5M٪`gnG$rق*qQ>Zp~3?C.hsʀeX&T'glaaeԶ=x#K~#Ct]Uc4<2" +sk6ki-tӞ-.^o%Qpr(!-c*u/Wj*ciڲ}[nԕ)zH9[P AU~Y1 wtBYL-fb+Ϻ/xx@zz}[, U\@xB1Gcן=h̾fzkeo$/HY%&l$V bt\}=qի2`Mj2y^nm| 1hgdQAL vV!*`핅H,"=^wPCN}l(ۗmQ_˳W$n_>p{I\x~zītfnTT{cpiJZШ TPg +%<Υ @"cJtvPTny8c';*ש V?U.BWյ}$?"3Y̿-~]]%Ώ"\YE}> &\\ eop 5xh!?sZ#}IF@iqO9'ſN~tmw͛hխGibp.LM,, 𸌭 Ȳ(>IxT _c.xm!cmhժU-4觉Qw:/-J~$rMܥQdohkn[U/Gr!Wޟd-R>Dg WgXC+T|z<{x^ؤ+jKk'-̼݊ vbа4# 4iH&/V]e$yGdǀiUT\Q'ߙۀbVo9PƶVQBV^|«Y|D<Qr}9oS)bBjQwfyNy~Ǧ]w=Jt뻄^, G_kQVxo5Mx{ms3iWnom` j&󑫃$;%XTlI.}}ΖVj8F{w}ߗkWhXѱ[vXiiê8'fai'1M;Ft%`CUZ\p&ϲ[[}ކwa/CzrQb NӐt$R)i@s/͹y$Џ"z`Ecb-&qDG JN'Ǭ)DR1yP:T2.`3C8Z+Xb^ `0I8MU[l- {;Dy}th?=yEg$Ew4TeeD X82`#[l?,+c3TR3$GsX N QANU!>mq. ̖w=@ɜcv;-ܴ*ZFh%ta1&Dj*@e|ҁ[0 z I=э(n~!gR{,; =~}O~1w:F߰hq.@gg˭{P"J`~|m R+3Q{iFnc}sӾcʹUHT9-],Ih*qW<6qE/J-xY`u'+4, [ViSOV:q<{ͷck﯇{d 8hs ޼8dYWXYFu`P`,bx^*وH(Q] !I |B_}}2<$9X%5"WnKrvMlwC{' C+/+gE1-NQ3+(, o\2|F-3ZŊ'pʎ4El2cёƂvӘ$Vg_yMpo&n,d4H(PȈ|#2Lpq,+&YRD %Z9H%B)e1o,r"2 bY :k;_=O!-Uׯ]'|i~!TOf $p렄.*Wa߄v~}Vh<졁ȸijO9+Džr7 Uz \;4TI.vJF*cqB]%Z݌,J4cz<{|[MFtHw!DL&mzՋ >ǜVQ,h\PJc4>zgVVVRei޵UUؗy|)nYi[bT/iu]Č $rL0-stgg^y{go{yX](LdjGrOE ;G͎ 3ŖL|#KK1TNK#S&2t$~ԢIxL 69jG5THj}07ܪP "m1scD׍Go>·hrt^9{wdt(ͷ]qEM1mڄP SyKZ,!Ok#ׄVCp8M:-B!I|('zʹZ#^pؖӃlQ8B1fU{L-ȯM C4HjRRhnD;%Nyt'OY:c/ίC q)$4iemBs+j|H}c0ؽZFە+W?g^x;I񍿠3'OѡGi 3}s/I{ɿzZi@m]3DާFp\oGqJaUa&具Kağ|NZrwniFmjzMѣKGWӏB_yI:vO:$M]S8DEsE$\\ǑcV AT +nqRN0 =w u!{57oM)T]iAXTkXY_{Ta մ27 W|Z-4UCA4 JvAʁqa h.^g|H;6dY"JzX'T҅ 41 I?o?M]uSғO=I|{瞔?}/3Wg_x9Ai( 8~m^.:GG/+6T#As >q;e'F'!,fRϖ.(^Su{n^϶zbfnjYB\hQZiE\Ź%Q@F F5U vd3A%OeH|5ݽ~'26ކvIHYj`Narж݈Hv@J>V[(IAѦFfdn'aҐ$(z6R:مtCLZ/83v|;ܪdib] ~5ܥ?H=q쫗w$_W^<{^9V3I-o^\F'3/Fjjx亽/*X7:AGϝcOJfٝMNfOn4q)I3Bo'΋ q-RM[hu?!88LGϞ5h^AU$jTlfagh}RrǴtP8 qDL#7S_b蜑Y ʤK&l}G/&movlj`;ql1VVAJ_mXW㩀Q#DZi$m5 [n ,u'WƀL7JjZQ Ѫ\YU]UaX3)8E[E(jBB4/r ݾa|t\kߧM_,+,B.'W[Tj‚ųzQt ˴m{lW틯BeEf샰)#OP%$`Af兪q)i<n/ij?֜ˠyn*></,WZ;U^t{~%*dMhT -/\xNf"1.7xfmovbtE!2A2kӁ$)Xe ײ2kYAcu -ϒLsˋ69ӆ Uhyx' A&PB˜HEu&B>5hD3/H7ަq#1q'w~(WNܼO|_N՘02*r#zr-APTx-q|RhbvO|6>tp^hâ]˨KyA_Ebwo$vHRIy*f`ѭSA^zXNaPXeңrN}*h?G7M^8qPT Y4ƕ ۱ p%~ڶmT>W 6@WO/в^$՛מ )Nn1 9KQ[ x12dž/[iڵם\ح7Ջ[`yV ^.>_G)EIR(y\QT#df'~!!-)+{PCͷԿs~t}G.{3px6srz>)}J2T6@ʢV lb, ybeB#*3#K^Jfim#ED!f$9lqS&Eȳυ*(ڤP7>6L&X,z$UIΣof}tƽR9.]'×NtESGDhA͕M E`-l VMJS#yIrK{τtJ҉ж_ofb[&28'YdbpM3 Pa O98 kLQ7W&}ᑏ~9?B_OWQ[)hT^ա&۠a,mI£}ar.L%?c'P# Ty,P9lrR:018JK7U///OWy: d-W rB)r94ֲݹښ±e 6u _ZT!BCU&NS_TK5Z&hj~to)pҠ׎N{64Tt:mYYr LE$X%(5sTR,bEr4>s"x?5NcZ[C -&]vmBJA6]8lnaNn-۶jUtezA#^k[9N0K"t^BE㙏%B/C@+/\G+9[c{6go{OmU"۵ژ7ۓh&VfQϦ2n 96RϪ OȬ/<<4M`MosU8DdC&36@M70M34?Lヘtֽteaiz~:?{ʢI[< )$0H MZ$! ^9/1G&U4Ĉw_ }5OI5wR'cxQ.W3W1Mn@MUWSk4:o6 YP֥[%-fZ-MLsF 5-ɨ\qeܸ6C>-z**tZeW% U&w2^k7[9r&UY/.t>N]yɭ-Z~ECOzFHLa\ʄ$H.QеY6C{mk'{_56FK^ΒpUpn9|1{^ UFO| vn-w{|E&i0mjv=˴R*dozQYD+iHd'f޶uwUREZCk=Y43Gz<{x-,k{ˍǧsj,DǦSG^Ǔ53ʪQzrlLD1s*bЦ !)H+dAe լP[T"<_V)u^cX弊̰3zC l@O׮u7,b5+?~6/7׿]Z^YTOG1ZZf\k# 9ŔDGs0 RAkx'Ϝ>M'4Zr ѥ|fb@XפּMSТ-:m\]2H*o"Y,lYY_wLߗTcܻeMN^?ЉIzŗߗ(q;|=$GU=ǞLH(WǹKBl@ 0 hO:l_g}lӳY6O\-GwZPj}sNu|Deֺ"O 2J -D2vfh\]iGH%*`/˂$rEզrW }4iUhK[Utjzo@:U**"& xj k-Sj5ɞN",KCWĪ z=[%c7-> (GEHyRx> ;o u=}mY62ZtiZ3 "Ԕ 1w 9hl l;XM Pﺏitd8}^.b@K^+ld[(J(.Xnbwfmv],!$K;Sǁuw2fZϺ=wCxgo{{U=zz f <lTh33P 4J}q rM4 (Ymzf$y} GT[-;O)V:O]~& (EaY ֢ ;V-0;.]3hMmK"Lg z>1͎%$iH6:/MլE j$RzȎJeBƵy),5s`qQKa2EJ;, hNL"@H, A L)2ί=!IM 4u΋լ5\86z&֌K/KXF).Hjg-!mkQC}B Q3 "MI 7޷]З~twg鿦W.4+|@R,K&~vvQE xD-Ѷq4v҅u:y춈/7ymjibI] y]vj|M(MЈ-ժ]6c;R .ҋRse ~ͪ kNLmW鱿.z{&Ѣ ݒǪh^/Dmfxz'6چvRڝ tXJ6Z$J],y1ەTuDKbWxжɚ1LU^XTsѪD5'A q_& *}yߝ]vw}nAzazA0wU&v1J`[le۬܏r  ަ T*\4)>|ElYs@j~0LJ_h H#mY`@^M͓28 (@[뙥>A*0Q*LA3(r P(b̲j},z' tדiv~NUiHMR͋4'Uv wkСBiOF j]vゥu?U4sU ' $=ǖ?W!>qN$h).rڽkX]r IDAT(g~FyWDo }mn.vLº,OxPj'c1A]ħfhoPPY;<2=9).TnǕitXhz/-n2h!k㳃U[h, C~vxm-O'xRO ҉PE"&H+ީgUWtkY|[TȤQPߐHlu*p2`4{CK$(8QU`N-ijaZ*['÷^}ӓghm4.VyF<ڠkUc(o|>QU_3kWdlx\C6{pLCZ >&yIa7bTrqTaUeK%:9ˀo*mubn 2Fk^xŕa`P7'uH4@k֯]G}=Z }yXBS֙Vw*RYdwN;wR-p[Ot]wT@wyb23T-dfUō`Vq.ԛ4܋_g/j@BFi׶ojS+v-]#ǏRIp-T~-6, &!wrq?,2TlynH6nt=Qgϝç?Q0NSBą{|{{/BG)T+۪EAU 3?*U&~ N1ߨGu1g^z{^詋zkz idh "=Dէ"vS^gw <,1 {r9  U :4vǫcvL҆Z,-@s&zwһI?3tjꢉv'&rr$ $R\Λ qy?T$FQTݲpZVA?Sd~H"1s5Z1%s-cPp3UDq]@@w*Y7 `U~ˀp~s@\԰b+UnBf;(C6Ih:o.~Ki߁$+X >b]>B 1>9 ]%:UOӺu?ݶ۟~/ifyV_2i[7grjPT X;[ݶs/5#c˯Љ%H tki%*1wmn1H0+mAA(Iv(;v>oV +/D݈`(LW#l13AJP FvM>5{Cm l_ch5g10?mkt)u0G8kA06Ni`@a*yTD5,B׽U_ Whfڱc[:4{*v8kdF -ʨDM{iFRmẎc 7WQ;H}m?3O^QoK},_z\momt:Q&[ YZҴgajiHi(uNWd oEb}T{YR4uO ;ڪZ-c9xM wчym]]9GONzqsVwl1EmL*.fcs`AS|.u?SEam> ])mCjRPcE$ZRHB^KIѺ :u]]3_UF!Jw枩 `F 4B┪9q%1IAB@LӋs;^ޛl[MGNgp}P~ *o4E1,@T Y3>(╜;c'}gz+-:u4}c SS Q,ѱj!D|ʭ mm.ES&۫]bQ857M+ KqdmlxN9KϞ\ g=_Wf3~YcS{5ͨa䢴.uf^kii4v[u ]X8*)(BqMr*FD4M(?7HXDj&d]%ONqB7<{e?jj؛{ |LeCِL ɮB[Q]xLj!uB"4lT]~j'pnMkwp4Ls,#Vk mu _ݴvdpʳt)ZS=GQΫ_8|;umEB!p ΙiH72.\6-0) *wZa0/!'?IWѪq|":sJKOr>P2qAiU.2?fx˂L`>PqQ`Uxg"f2zg`z_Zwy7solQOLU?=6|U4-Ul$)d㼃[[s\b~ԇ>F$:lxn$}ߕ{HKpBlv*=QnxD7ɮ.=5_{Zn[8= D^9t S;|P$iD> $':6M6Gi {ߒp>1NJKƘeF7: Eyq+ e KE"tC n8\d[?jof$"U?Ki㣻gٛ{G-`Xg-~23ZϣnWcJ{]H>eޅ<W%Ա6:uqMnUf;HI-ܞnmovAWSS^#ODRE[JժȌGōLH퇼eUC1YPޒHP4sTZ0lPCh*]D+˴k|ǔ608 TC'i7A$42 S;E.~H13ypȯ}ve6Nmiy"L h&ie!U[m7}6qz~:|'BUds-][h’ildU6"Lڥ ڴz-}Ck !4Ӑ3m`C2M\"`w_~_|-4'E5Ѫ%JbϑF_Ndk9lJ@ۭ2G *= ctkE6nu_Y>+8xN_>"Y؄7~4&C|,^Ĺ.*o qQD ܦ{%ֿտϳY<{R _җn:s ˋ^5qʲmU)r_L Z05L4jX K_*Uc#G¹ʓX>Knpyls[Ks jswIIH,A[!Uz!gnXb&ErqRUtULn)נr(*q5ʮOЭ-$ḰYd(hܵ9i.ڲyxizk*g4Dp'-͈}\qZjN&(P@Z&Od#xʋﳰnoDim/Ȣ'Q"l>䴅*_fSa_?8'-;og?-{->@[a$\vMn*g@nM"sܫMOvIAܯ~WB4qcǎ +cZU` )әHQ\tr^S bvh`h-S..N=>2aN|l ԅSDSϘWt+?ԻZQ+\/Or@ͩ-U|Zc 4f_3=[;oJBK&ן>}zsm;n.; +<\+M1#>%`ż&Ң N'K7,h,qnqw^hof5 Y1ZXYr;ښ!~ݿf}M2IxzI8;%@)hZiuQ"ݳFC>Or(UN&s9 }1?v7~KYxQ!"0h(d"8y$W<=~w~Nz:ES.{;̲ bbL> Vڝ(+uwa Ys)tXzYzw^շ;ロz]tW|A`HPWN||RSB3 hߕ JPbN/֎?\s/ jo6??ߘ^5;;~jjjիW[ keQ$Aq꯿Zƍ2;K׮3kb HR2@tDjb#c Id,TvTKbׯ+R\3j95z"dhO3kVK4%靛:q=u^ AU_Oƕ͒4 N(}>9Ctdr `4TSeBh>fRD6_-[?_8mdlAz!z^6[Z W T?;y(@EV# մ*TYp9[ (B lebl.?*B%TjG> K+-h*p\Nex(  5ECwӋ_oV,&{nK~QKO`Vessqa~/jrlkF鑻|WfӇ0eH&seʻ ZjQv=ۚ k  ?- 4HE_V-V&Xd_1mu~FP٤z|ێ;wO/>@KUˁ4(3egY*/] 1C[^;F6mIR?i^|ӿ?WOYAIo wl2(mX.ZNsJPI )<X7 QHM$Ml\zPYx1-k0p SWQomq<=>pMnc//pgiz@w\:v쎅Wcf`n mܘYCW&\^;sfΞKGShe9f߯-UC9*]l _L#۲BԋjED ȸZE\x0DuHG 6e b @55?EC{;{k WssWe5o*blQe6Oy6uEݭ,<ԿcDS,`M*Fg 2k`^-"O[z" )Fou)ſ{m~V<"o{U=k1$?z%<БCvHTfUX2v^JR1JSj9lKkxv]c0kBqޟ)AݖO?A XDNh}R}w?ڶyw NNKG HǢI*Ԕyjut=Lom\{yyE y|u-Eմ.R!/CfjjMNN^w&s!0Хr6u="d7j3!yeITј AQ9Yp7lA&&xu&t]<%bq)A[e\W{ڸ6n.AM:xvSc`jhLGez  fk@<~V4ju482"'W/JMϝX_F+=ű 5jiꯜ0HeibxR,6X3b "R?-- h,*qb"nsZMcaV拏7}g5|fkɓu3#`,-mR%f͔+L`P 4>]L_i4wO+wd^#VEx:9Fۿ &z@l|5x<臂"^L%"(Zisl |׮ St/l8huC2xxc">ɏW9#'= PT0NnSyt%8_F?}=Ѷ?$A C4/U~`|A^4-Q_ԯӝwcUo9 IDATs zKS 'Ѧ̊vE@w]Wi=xgDBЪZQuI҄*AB}.>˿\26C3}V Юۯ@~pŴӱ3ive)FQ=s;;]j]* &؛ R}L8ٱ}}=O zs4r -ˑQ[$Xm%6I9Uԅd$R(,+2~1*I9.C' 'lU՛X_[|,ˤR/~D8\ }O=Sc'ju%:|T{Ȉ\z_8E `B@ѓcL=lFUY9 %nCD Hz{MV|ftwk^'?/FoT~vwEF vĉ(xN3謴ޛn-6]7`G_L<RU]Kjukd-؀ /`;@aOLd$wfs33O$3 w2$! f1o,ZlZ]굺ro=˛ $Ї(N}"\"BT$bXT\2z6o.Ly߹f|\CНa…vk+Wܹzi&W)[AY)5Gk0e*[tm,ޫ4p)K9n9χza^H jltO@ .`)pW/쇁#gv.SjP)W=a<@,ɂ̆r10dUxD sx̛Yןe yb*HB Acl.~ȧӛ;رL1*o`wy:n'nSTP4FV)@mqE%3UX`A&uJ]n,2 8F& r+8066#bOcXEd 4H 2Yz>nG{Ԅz$FPNNrq,I;(S*?S֪d%`THCꃙK^xS 9q#ϨÁHp_Q Kfeg .=p{.p#̚=똲XTl}VtU}؜m{4MIc„:jIgd(90M̝zfip`ܻz gσߺS> ,{͎X |Q }^xeNZ"h?x,s KN3<$Fu-TdcR/tnFU@ng_:IJu| nq?1o|ڍL1vHu‚!jۃ9r2TDJ ^%J%̶C>ɍeUiӧ[h{a |蒫-`ӆp?_z5[}9jE^JB7v#nW>zqKA`p oNlA+4;Ҕ)T/\q֙ͯ+G@KlE)k3t}NW]| YVW0x R-#ADJMu l@#|HCK]{{̹w~S|Yꕰy68ͻv*Κ*t&[t2\Ktkn7֗T;ͅXjOTcLLUmf I&@k rݚ~;¤}xNp" ᤢvv3_q9٬X81s5%bzA)◄jIZEJQ?ߔϣ4EeTÓd?VH΋f^ rvsAOX;Z̜ }tbhkhMTL{mxM-UɧVדE`wsKfj!Y[ı@б'z2;t:yQ!Iı>oB+܎@g0{clݺyAxʁíPcl%FQ=q묱;h!v';O_v]g׽:Ă݋6!K;cާvv5׵V=]áD0 kaŒ3NHdb8R`>rם4tLVJ5( 챩)cX6^]zMN&…gA=wYsоk>ryxd`V< Vj hۉ\ΔN{j&526`B{ < WB !HCp0(KL:(y}ΝwҜӜΞ$\㏲#:gŒ2.Ǯ' >V>F8cFcw0#cW⊀ 5FgK"hAIv=r 6FZREL\0b̉;hGq> . ɻ3Zv\pS nna(iV(,hTF]D>FMœƸ9tp3"_Y:jޔ$#: vh'/) * Sɏx>qN`)7z:}S 9y 3z vs}lk.cJ@'ɬ(Pz[Iaiaa'N HHHc߰ oB[NuܠSOYٷg/<ԓpڝ;&ci;?Sf2LL %1^J? Y|:|ٯa+a6D 4S,Bz^EYN4 !8g~GuŊ }a)8=uip}/vo^Xy.BjF>MJ͎cYt& Qx(d~@^ ax9:7;׳gcY vǷɵ#,?3(E-dP F4>V 26,\7SԄiHd.W\gx$sLr<͙כƴ uq`"HhaȈS|LEf[ED-VEhg|u$~ nWdGԭ8.?kp`l #JXEUCX{썒 tJB #=ͪNDG|x³+?᏾EX}zg?PZSWԍ$<;Pg1IӺ[}"X9%BQ^ӂ9=r͌}mwdIL'8vt[w*Bׅ"I"в"lHG$jW@FTig{Vq-w٭(I$D RRz;TZ[:iѭ5$-3w ǍcIE&ȈWnLopa4R@T à©PQϲPJ Y .jD3q#.==vT)h)~p0F^ 2a_;{vk3^ }py 'N\~vA wlUEdX/ҍ¡P}!ЄWDU3) HH]7:_uwn!ږP~&^Ŵ#68%S"$zU]|.b؊>|H`^,w̯ ܿ;ib,w864HkstaI,6rRɗ HJ~xHi ܙwAOlٲ '{6LN-+rrwmEKu Уq76:,2̜9~n޷˷ JګmP9A+k*0xmHΚ4QK%,1'6":yŎ,dT?eY beMn-R6b#W￈#44dsRJ?OL"bAMb}63.-"Bz/K߫rɢj@Hm~ ptŵSN]Dx;-n\V<xQ72 Qz{+BؓPLŦ(wƱC҂_o'ݵroޝMRؽ}|[/@ QKϘ燌_w73+W7OW~qhm0 cLߺ矁sBj]]$۳s'Px_&I.;u+r Qca4'b6rhpevxgQ=;/LNz:_l0j0:syh痛' &X& VqڠN,lYh)qXBS'?zMfv*uq;#IvvBe`66<>NIkmx]8K1Mݦ4e݌a 4<86n!)܈cRd<5[@Nab*,)YT$sC$bYĦv=N*\,,g!Ǟ-AFc#yZOHсNftMN[7^s=vʩ/=kª[ܫO*?b&: Գ6asKjQ-uLmUX`y{gV]J-sF\^'wyĩ3**GW",RE7krZعmGWt2 +}{`Ֆtן+E,ez.QviuE3O><³Ԁ4>J}VѬOy0xsg˶_( }p-E]fq+\v[GX:[z Z]eS94 1,>gs~&+S뤀꥚ @%7*U":0m IDAT5 Ͻ];v}o'U6!R8J7 p aazdYsǽLUv5';t Wn 7( ڻּ_ ÝloF♔m.b7}.\1',wlܰk_wJ(1J5@Sr (@5adUݽ}.زw00O@)hb#,dEMak٤E1c_>`]cw;y߶kݻg߅[][ \#udvw"H&|njwx#I"ͯY'3tѥ{tM;>^#3Qk7Я򃻯羶 4.n#w\o)`5*:^]^(<a^d9v"1{dj['r`=?zqX3jqf@K(vMj*@UB,@JY5rYfO[~ w!v_CX$i ^ܾ y9k+&h"wBmz*ÕR4V(^Nt: I%+Is3_Kϻ zlv7||;`TTuu:J:YƛYb5l$f@Oy[DjxRE|<5-;*01ݯP#T Ϻ2 -&GGԍ̊P7^Ռ CrE 4ѺzxZ4I,bSQIDJz6Le|00ݝ} vP4h zqC|14R/IN7ظń5pѸUfFIZr D|T'uS "D KQn  ̬JBg*DF8"I`O!26u9UP6u2fN>r/j$̀`~"g⟐+H`?_[ҕO3x?(5k6|aWHi"\j-DI܅)kybP\1pr9V? nJy ҙ^D񡪹Cc8e^ev|a3C}7mh{GC~cn3X _o=FYa@Nn!7d?H(bw(bCT;JD9ZPl-7H,v9QzH8,q}!eJuyZwO0xL~ǜLK}k]5QѕEVIna>v"ULKrBI7NITX >χAĉNIQ\[aZt9{`Vw<mSaz48@M,骄3}SeA>( O6Bd>,q4T򻎕Tь: (H1JQaXQ:mQ@^vUSY /5._P1(h>iʫ~HUk}QaKawb6{< 66N@k}l9?r? 6OmDE ~Vv8J -0`rZBC0!O.3~;x9:!raߑ~yCaśrsazUgvVgx.3&[)aU#"놥! cc[i61QCA"@ ;F&g9u#Q9zz?[pe vN|Y=r(QWGFGbS#zBPTʵi@$QɊ"6ܑS DIyA0^B%0;>Wu8pIT$׬kaBQ?w]+OI9 <;:9ޡ`sZ4Qc璨њ$NM7x0Cױ T#vHTTѺ sRE=G_w<[paes:@ nI(*Ee6w5ƪZiJ;t,΀UTA[2 @O~N{K.EX=bOk?*;w>)8c{k{|aþ1׼r4M` =cBH_793RyWa3X0}&2_wwrfJPò_=E_"hdvUܿEXT4:: =0m߀Ǟ|fϜ+x"8g>ص{uӲ4mETCݦ=$:&.K$ 08%r#HqѰ8 GH>z?O1`ڭS#ky|ק/^سs:Jס,"Y2QK&j,7jB-mC`V4X`!я6e L 붽{8eV!0sl{w#&a pzOA$ _c-:|a>2W1x%0U%$%uh1w&\y7 6$^2za0QESX>\?AKyߛ8Lp;Q;7;6[7:&/|L\Ө4kg.(n>U mčR,9(7 Q5@]ju?dr ff⌼lڻ 6NvI=]}1 M .xuƑxc2~Gٜp5Jq6B>bJ]1QHRarUeX$xpygs?e<> W]u1 ~!nU7-n1&KG8DL農v,3xQrt$^_KbEcoضS”)  *%(kCbȣ%YzEl}>:Z.9W>_fwW7þde>&cftL #hI201{Dƒ>0*ҧ8fz:$e@GxWzs+A%r<:6X21:*/~ Xw-X}S,`"5=yht@Lb\oML X#%zQ嫕LR0NY]x C CdNi');&C}Ç1茺{_VX+uPͪHi٘T|}tK4IId2׳dJ +o~hZ;w4W켶OCo_Į'6}|]8|Ɩx8|NfΜ>Lh VlzAW׉@?(@'G p)Ȣ(mZgX"Vc1L2KD)*[Q1z LM5×\}o7o+wLcaÁ'XQZۧQ n/ܽ% l;\r,^8;I"YNQ |ʏ<.l|;]N .υ׾::=G {v[=Ճx}"X>kGn{G;atx>׼'}z޸sI e-)LF5cϞ=8kV2" y >7즹;^޺ 6-K@,<6 H̙- ß ;pl jBGgWR2<ZNZ ,~2|}kzzOW= w=0!zoI+]P$4,1GO,E I>ʾNT`tF Y|EJIi!\;XT'O54QLsgE ]q%]<Kn"Q4 v=N'ui#Txz`fff=gF1]HV{k2n"})o".y]yMrR8w%QSN(DJVAwpsC?.\##݃7o gq&tttLx_gqqlrೞ7S gZ ȹͬ]iǎNvx?l߲ fϝa3+·/OM U:mz˰U0oI'rsާ9P0fB]ɳ4iM%Hm+v+Ts.KGSGVHjR TC ]-Y -L۷nlnghXLăgh {F*ijT[K7'NLzܟ/8n;OGFi͇O^פ~#/ZgO\_F+׬x'gZLXRq6zi^lCQy}s&S ZXhVs|M愢,T 4*bFDi6HBx]+fJTqߨڞ?5fh(;D"r|řʋU犤^s]?ZNBɎ/ձ|Ll wL <odc'G7*zǔ)P!>v`>OC~߁A jLxs7&<~T#A 4Sv& iv <¹CZmNqϐ9I,"":c4MIvHXYa'ttU!jZL*aZeu4[~}Sk#먉}'7,fdk>rLkkCP-UG '#*2%13ٌ oQ|:ndOJYj%vtC5]E "S:_#%o 7-fP- l$JԸ Cp<ܿ%*("78?t>46e*{ì}Һphh` v3BRG'9gBOͭsr :Nc׆"8B)( -$)Y)v筢0`cs]Xd$O>X4c̞=x]Jz c5w셙g©'\ W_}Z U^*EPwԞi7o[-'Xm=߉^KzTI:* %nwIXv [ʭ%CPX*L}Ju !dyb덪͹;džlS-lbϤPZ#iWIClG'sa+C[hdx2Oq!cb!Tv8o?FŀxH, E ^@QpKœ go|bFߋ*!y((w֬6a^K9@Q>9h>oP'f‡+ ,_z*{Ŧ(#Ls1En"j!4 +@*mF*wtV譎|oxaJV y'⠒H-|> MieQ;%Ԃ^ reצZ)NLt988;SN<#cy.rD:>QXt=(`<M(޶FÔ TRW1MX[ 2sLi3,9!yC1|/I˧3 # r.GxQZRq/f;.\Oߔʍ UjY_AWFQa/E< t2@9z}'$9vt\1E -wS߁ =66Jc߹ X>|D^x8=^1f7h ci+a.cH2ZbKj0VrOT2Gѽ3-,l/A>B$ |qa 8 c첂P3WPQ)Upzd^[jQPBɰ&+M2^gdHR?S<;)jn[W<@QH cٜp9?ۼj"IlT잚¯RK&kIHdc9!cȜAKYQw0 ȭS8Ы`'_˻FWnL9n0AAѢBǤSdTT;bjS.; 7路4[u> Q?+x& Ք/,>y^dyBCxqUtۻ 'u{7 _iFܺ5o: ډ˩:j74 K"J3jM O0r1B1Pi$.QQ =Npi&MyT $L rεyhفk`b~ρ8 d&d@8#-t_`L_pv3* O\pTp$xP@+~D@wPRG<ǟeQwA,=ERܵ43{L? ݰgz *QEe$:R68^x#Ģd \{k= R,INsGVsZ~qjS%tL*8ϸI'w"b^xS5G ٻxMQFQ$MMQCu!A?T3?*NGP֍牠O%& A^ln+w/nxMwõ 'l9rPAI/Uu8m!Bx<&ԍˌ^[р2s /kN ø9g|^oZ o`G-1C^`S$rSe>4vN9*l81̖;RPtLo֭RRPKG1F PK~g|n'%rSszn-mFMw)rl Pij®#'ޔ`Xts?Ph1<nl/#`%P"M; GuEz{(:աllQ<~V(fs1"Vs5{~ ykhMQ2+&E, < 48,[+n!9GVO$Nn6.t2Dh_SKşݾsmV{]ej kyl$=OJq(>0F5O` XX(4R~erx}TMk场i{F~ G~5g \q).'S)2 "єACsnZ^lS"ͼmDqIavo1%HDg~RM-F H…E7L߃Y\f{w yګ^\z)sB|@+,tn^TЏߗCt),MX=4W H  QX8AMΥO8 !υ@eV-G¨$*w`I-OI&%I:,Mu`5nzU&$E?湛i) 1up#Alr< ;Q"wYZI'N5;DDՁOT8q @{q}W+7\;6L-mDzW.$꣩%R۔ #y(G F#wU Nad|uNPX$yu=dDLa :!ύ:0ZE7 :feFWcWOj/Pi TM^x2EZ6iOJEI٫#[$%8;? E2Aut1V*rpǏQ~fR*Yڧ&< r/ ~̬;IIy'vH<ڬ/<=;~A_x"*g]"!T'LhTb ƣ>'Wbn4LQ!S)Sc{CO=ܵ! 3T"]ͮ 10@Umm Jl7=o;NW_~Ϯ>{{h!RTDS\: ħBD Zixm`ϼYD)^CW4Y|xB| =`S֚}ANpP;FE3m*!5QNJbQI/rNdVe|?^2 K~ǤX.}U{W\puj֑;KXv)!2"ЈsQscDU˖v1N'f Px] *A{.?x*\==06;CklPOJ&1&H7L*i9^k{J`Ǩpmj*5IJM`wI<31IrBl$Z-sԁ sݼcI׵07yr>7^& }u]HZM릆N;){{vHzRE ",R`ԚUpkFMI#>਴  Vܺ>#VyN(d I@W<_  /g+JrM ]3DEz{bXCgEUTK׽$t8sÕ\H{ywt+{s!(ס?)M~bϠ0emXSF{-YbI"a`4D۞=_(_FBF!_TLD=h1?vј^D0YG8,Yk wkCב9PQeR ֥v3SIt2 <awv$=B EG/8^;:18D偒 Fhr[֭uUM^dS@|ªw)rA.# IDATu}#!&Ѽ I-~CZ( o醠Gci \cU%涩% 9Qt^inbX{ľR;/ 9<6_8)ݽy}=^#[i87j)46BO݅_"`T3UHP "N򉱬Qw( m4xs \j*MLbIJuc+:h4j}gO'SjB[%*W7K*z ̳A)xg&*'&t<{)? jvW/\w5V.m+Z7%pMR)B j!R D[Ή&ZK lD@[)Ձ@ua5NtB V̪Yydr,Ɇ/(\OƆi~TE.oԬk E|6A)@n$ )g&OeDqz[',5>:ҵSa_.QY"|Fa"I)HYl"9#-ro ' )7Ti:h͍<=hrlCt 0T.c$'==Y)(kCSršu%+`vK.:*AZCVb.Y yϓ|0ACfJ>8rO ~Y|R.H]*Rܪ"D}繓cTxߡWte>Wn8㬳^:0f}[aW>߃#GpE~x7ܿY誶ۈ\rJAÝ[i fS |xN{:Ybuf26T챚,b&^bNh' MBlu= 9OItzT.y^^ӵ59iXy鞏iϻK'$E;0 }5q ;} ^J!bOlK,iD}&F`S8WvE\pH 2%&?[Y4O;wk׋D 7 F)R :۸Ǎɜ9E#&i ;MG:<P&v Uh5y&MKJ 7yWP&5q"x}uL^vP/x5& )b;6g|# 5O"؛4iuRq*#ʝ[uT}1UګarB"kZ˸PǷ-ƒˤƶY8_$o: xzbB=w_{7|T~mAc@ pdlQAmvN~;_9G=Ip3AT H bĠPIuSQt'bB_P>_jo"aTj٤ N(-XufM0X.igK77*UQ{i~*M XZQUi$.)5.hg&a$E;fMCt$Y) Lm65 vntS(uG˦IEh] _G^u7u3iZZ[M@k 4g7<v`+j"g6/b!£آϩK:hϜ*:% n-\ͣDY ijiN|ĄԅKxW` )1A,"ujCq{Q]Ey&/_Y\p"͋Z&9 \7qIyB*n3Y TL9u&dN 2n KGY3ң?G-f2VEM9G%oYeY쩽P-ևZ>\x3؁fԀG L@K*}=nJc5l\V RGZ _`Ǒ61`sXU.`(4Ȯ<{s]zF7&6+I)Q-ѦdɖmylɮIbgj~*J?+y/eY%kK\}XX9nHQ{U۷rwy%l`so~M^j6:˙ƹp#|P;˻4U?};g&1PAQNt(2CNsdV˨ D#״4n6#Kh8ƍV$]-wgx=UƷ:v /L,g1D!R&He=7G)RL&Z?4D@q}u.@ CycyH"{x&txUX,+Ww iѴ1{m,0 K040cSv1`&s,iv h[`Y@@K._jYGKZNol`z 62wd‹z;_V <Olꠗǣ8h;]i.(dPZWtVf/x<ř,@gTYXH:@ze7QNe\U#&#XSQ>/9]J\}0(wIL4dtXk5auin: )9yGaaqfqD5z}~eؔ )y䵢sm`gn9J}mbz_k?6sc'G#ZeSVf{o?M'|yJ;T:#@3gx97|3}&1@0OJ ^J eObLe&Vxӡ ZiTܠ4ODƒL(Ä"S'L82:mds:cYH?Od<|is\׹8&/S eFkSAߩWCI +GAy>Ϭ_衖ϟP',)ӱzSධ'R)LV JxYHb,w IJUm%Ze T]϶ᢀ 3QXFu BEdg` ԯi FkvOC' p|hЊ؝D4o]5Eg8-$`;~7zѣGl=qB@\ZhlZϯ#U+ϩ-1]8V_6hMQ'X[zߛ]vMRHE8u4,nP{a.B-l"Ǡ"dz tjF$i`] p]8)O12eHHʣz>K kRBZuD!c日+I[^0 X)Δuv!v(ܙ* 9Rc4Ez}z6͞{ |:vve T [馨( 3깯3Fhٻnv^ NGvo+s9iϣŮt*Do]JrB.` 7 W+u(;wM^~> xjʃlU}gɣ`uc 6Wal| =\x 3.ZjT:I G%W,`'BC((T@na=%z{V6 =V`!B #$:\wt!lҠ#-pur{)N4Si,^pe D"Wͧ09zkt5^?MSY,Q"b\d^QfwH,LJ.hÚQ=9+>QI,&2=UdtŸBf/F}}Cm23l(8_H /WJ^JJz+7Df 5rSJ4GI:,:bNT @Bz)|PSFU jjw7[!JXW=f4HߣˋW23{=pyvʢ.7 p+wej 朘\$ :b GcPs}pj&vKc4ST` }%''x#ϓ^URX+1rEnB]rBGSA]r1=DF%ǻ$ʐ6-0kU1ӃW8e ~kG'zH)8P6F뎯34m :fADbSګٳ>/=i%2Qd3N΢K RX!xy7ǿE:vp)Y dc>I$N^Jxm4Jf_ \D-ܡ~C285i6i<1F3} X~c j=Kif\;D'cJeYU%!j3>-[ޛ{^1tefgg'Cե\px$#r\q\, 8+I_uW^۝브FR=-z[YX ;F;"#]H6+l *= %]`"XiXH:4exM5m1xvS%j_mxt>ɈR5ȠUen8PFHwMRk* ߘ-(3>oemvo wՊ#^ ֭pݮk c>e C|@lRܓwïӜo=C0g m-y2f9AዧF ZJ ;,Zx.1R6W)LLG񪵴tqQ).@k&iYJp*뤲NTrRgzSmIj%oxbY|&IӊMF NVS! b3ƍd+$I7a#Y;lƝKxP޼mB䓱vKJ`\4UZmLQ<Hb4" g {$BԑD&(jԔX$dMSn1RnԑV ZS<i8K "q6 HvbT{44%NI 47Ƚˍv'auӖF]5i+2c ƛlpyw_`ueĮj f R06f9~<3c@ bBG.*LWJf*# qC' uOhzBeE]f@BA,Ke\ft ljt# LR*Y[YGε$rj&^Zt=f`'8m\W1wfIMg4jPsA5IF%n*3s;?z`w͕=$?T]CCc[w дwhٵ DiNquyvxȶhR"Ԁ0ԅ @y^:ָ$2IRe 2O1[o _\,.C۝<S'o\0wdn:x=t pϡ7ީpύwxd[[wx;;~}{%㏶m}m /> Ϟ o$ȸW7&gi%25JkftLCg)16ͰmyZ8εԠ7ei[Q jN$ h$6_9<豭0N?X`f'۶.86cݿF4&Tc/ 4s.6Uv5qC}f҄_{H<ρ]6;XRf?ɍU>?w"SOM!ߠ1Vl0`v"F)3@flQ-\"{p}Y+HAFl*eZԯ߾^8IS `M Lɖ>E#n:[>64aP!Ia?dV\ Ä]މ Quc>[oFa7n8r}:1Dz9e_Kݸ 56qVCc+8fJ,uɦ/=q$rm8~Fk m5e ;p-\|wnxw=3h%ͭrsw!_V>KZ (B+Q/u:XeqϠbͫ0>f s+gf&cOP)R> IMxUZ8/B8Ykzk9%Z"mn LA\Hn!kf4WCK%e!.j5-7#NJK= MV N45}8#'X>6C3=CsB!߯e0S!E+0Ai.z+D E|]C፵YV=%vN,i2DkR(^%**9X1Cp4-]erKeZ Yr.C`.T&,iyihC]f̈el*`ɝEw(hB{xsauM[n_a4ss0{2Cp[Ρ̋"&.64 *_/ՠ!k5$DEEQ,%N8ӑ:Ng =4YH/~vo= _5 Ҁf<t{hԪ<iu±f&񛆝SSW6:y,rIs6ta P@l QPnR$P2@g__Y[]c[a)֪ɺx~|c%aRuڹd.hJ1`ZG]:HIB.SFqDBuK;pKBDW^H]UrMs˄[_GG\njJ@cHb$Ba_y`LBLb鬨FC6:,iV IF[kFˢA$AK*@uN"fÝάOLx07>Գd*`ؔ0FAC:2Vq=,OğI̒:Ћ(nhF2N(>NXQuH=2F@)`j*R߉FkI g"f&A /,Eg߶kgR-B1 ;4AI'7fjm6^(a4\/;]MEFv뽔.\TSNm L;&pk#Gw>]1+!v2c`zn.rIUIkݰAS)aIu,Nk26$xX4As߉qmC*m]*6J i ,cU:·m[[M )"H;dlf|PJd3`i߆#'?Zmj`M YVxqJ1.F#lJ/{&?w:q0שqE5u/%.%zP:͂pXFGXY\-pIطZeAzHF*=vS2 fYOd0jn f;znt$+KCkm%>wv; c 욆m>|iACFhQ+s m) |aÑ<8"eW,`ŠXg:z3a> 6'I0[@&g;vBhn\Ub͠"1&RGzqQR.MP.wS-YpC[՝W?M;vbE|۶euxqy?w90PF21h7C왣ڹ e(e]lfb4)&9dbxi2' GuلA7Mf^9:I3FT7j 8fZaFG܈Fe#z̪&^´lc3 46? .[l ?z@uz0eqK "Zl)q4) JdbLY7r~hG=ToAub2%VNRCc5Z˃ņ Xe7/#{sDkGmnӿAr&w:8tDVVbjAB3")Gߋ#n"$A_5 [#T#~ { k\KD$\OT,;I h)`b>}^&p,,rklDӵZČ?Ȟ ; LԆX̨4.̻FiJQ%ۃ٨4Evіcހ[dK}Q3Fڨe)C)EGqwu;/lWajۖjaQttzӎhKX^[Z 3`dtU)9 s/Sd40`5Cu$CK0N H-+5qmPcW}`r7z? Zi&H.COGO(PiN<699quhX8T~It6/ FeRRJNt* ά[L#\P#PQ6idҕXX't O\ FmYIYR4t=c8 ,\W_;Ɍl9`׬ \_8%*ToQlsJt$VU=pVXj^@"mE5qOA9T_n{v?3\^+KKj#)9>gdI& قV1"TqQ\UNT<g0 qPh ;eRpYyn'5`aXRV\#׷xI+ԋ`Zb⊾4 jZR2:`0 Nuehx2u?;V1S+F4ͺ.ܱƷℏ㩖h6ᎃ7A~ieH\ص5 < Bj"v/dUV-"P]Zp)SP?[9f:SbV$S17I((:aԄv"qemjXa}/9-ԇ S| »͡΢tճFX5x]^,08ېsU+eg*Y+&E7}p= ~4vmɄh o[NuNk"s#WVNLJh sR?:&q<2$?XGE`6"DȂ#6]q X/6"8k3CaA W H dafz4e L$#/3)+T9^ ՇX@**&(#Ss5c[j;S1)|?kF 'aA$~!ٺ8(Ri!*1n@ m %LvQ 32Y0%WNwT40dÙFHE (Uv#0=0sUc#x=xqp09 +kP*0䪰O뫔@0-%]z.Lŕw'1 6Bsa `Նjܶ$e`'KӇ&Qe:93*sыK dUyι4bYDV/,6F_ƹy$Z+ 0<0_z|y d3O=Efih;wB@#aT&%P l?I ;P[k8L}uEBC%m*[}_zzs3B]j@ -VRaoR d^s8X4A"WMڣL(Z|'_ Dv"E$@cre5t0HI\7DRF*1lB*.fWջ͔!TKl&-oZ>Xۆm7m$M?/+`2ǛTF1֨۔ Hoqe>N֗vdN;] 9ug{ߒwb4qพA*ND,Hf;v ׁNUitlQ@X"th`V-$91.;bcQCKz!cN$V|=Y𰻙\+mh$J!I (C;\Y]Ǻ3C7ߎ!ffzǝ[n;O-3amNB҄j%FMl&>f NZMu\.-%؝K&,]ωafAjolZ.{BY*c~o6/e@`tLRqK,|Me]~raU Hx k1deo .~7^qEM0eK-PʳmΟ>N $4 ⬻GiNǮ-#z VeWz^m%?'͵:J9N⤠ @wRyA"_pmk#~+[[v26;|ޅ1wX׵m]C]Vu ѶM"o]aOsHq6ud@P:EAXD5'dVyd QQtxԯMk-<س xC]gS-m D;rWYgR؝NCWFL>|l7r7B%j0wetFIt1Gq\Eͤݽ 6դWTpIFݶ?DTR|RA%`+.Ϡq8/sw`{RU*:U Mk"lTsmp{`:& 8Aʣ9UCFv 4r8ݢF5[H2P=C_y[jڥexo">{f7tp}w&x]o ^w#ܽF ¡]{`:[pem͈Nwlyؿcj-0.kw@pu&FG`6j}v50YPjFOuayu>=8h? lա;XD@̺\ZBQX mjvs*@wM.BKdOHhPƖZ֮1=hVPs=7T8.ZTa>uNd[:q.#H=f"U7F7MmpY:m2߇ 0}ua>gϝ~cGƀͅX W'~Eqgś²95dPdX ̒\+=eq E `R?ӆ8ѸNw@P(h»(9CWفTc.c:p%@Ir]t\yS-6 IDATM@QfToZZTnW8Xؘů{jVThj;.OA͂?St=y巬fӮo~Q ai٘nV,F'R ˀPߥ}bs\:~b^G_o7bKZI=51:uxM }aj-e%(Bx1'fЕFڝ2lETM3Δܡ-D5HGW<>ӎdzgЃ|;^K6MIU0C EHAy̠ѹ~ ~>[ﱱ1;Έ}`~0wn^~U5.;Ї_gquƷNyZ!8yy욆+K-[ ;vMZ[kN8{ le$]joPCYUZU8}pSbZx)KaB% Y~I Z %~˒Pg aipZzgDT!ɫ¼'~/|?'m,AoF*-iS-+ckY n?G]XGݳ~Oo4eynzct12ԙ@T[y3$k~V@8iR ,TjYC3ӎLL\d\rʰl:[M}|YYe~MI JfTâV}&+LE*(HdUJͧKHmoQ=0˹i;:Q2rbE!=4M6~N )BLPy:/"d6zh - 1 [t OtzyOaxC+k=BaS,3'28֎pG0=15K/Rg>ޠ(OL2DP3hU}Rf"8:q!I%& F#kzߛq:ai s# kӜپ3y̢`x|l]x(. z d2jF-ڢ\dR07B:E]`T-%EWmhJ<:s?LV*cϋ,n *-eVZmml4 ]p\& #mܱw{?~߲zH../o7M\MfP,]S,XJfD>2)v oǽ5t߼\M= 5XCO?0F42᱓hj뚢jffa$&,3>ٴEVr&5OM䄵%1*"*`&X`.fe4ӫIY 2kcR lh*p⤧ϱ(≀k3ك>Q oU_vMA)łb c'{< _00$ÔuܮmD^NH:ǟѺ݅A%3jpD Ht-XB1.fq1]oV6$,ؘ$ B,N!Ek>@ ZkML;5 -]t ;]L}Y͜6 صmL74v/ǀ2$lk 6Mt9382L;xo\ op>59+lJ[f/4e5$HXW}TGجTF")h B{x_hO]$^cz 8A2m\SN[.3Ufv/6g÷xlT_O: ''pnz^ׂg?wۿ;o}|yG4|j!Wrb#л..tjO\0&S]bk9k=% 1R _g #LfO`: ^TiWgx7=(t" vsPb&'1:YQѕm4UPLژTPJXO#LαRދ9?[<v.}%E -0RnOܨ|]9>?߃?=b~S ]vC]߱3i;ejVgp#QK{oK`pqgDJC(:$\92NMTfi 5\ %E)bDmFwEݖb"Z't_&҆߇!zKd8wpn'(e'`Lǐt1BCjmF g\Цw_Ϣ6kdoѫc='a,7y6VsErc>w;qǃccAϒެŠ}1O|oZgw{Mm3va2QH^ѨsPΎsY;]dZc`xWÒ%ZFsCpI.,^Hxp^A\W}tcO=]"j Y<=Е h*D 惱'4 m``9–gis҄쵮TE$vZXawG?{x!'y(LŽPG7ŭO]b(bSh+ Ei՛h_GTXϬH$3>B"jP/j4EcC@pZϼE_;0o4хYXZOY郴AG$Qxqa.`QSQ+"Az6/ˌxAteƳiԝs4J˫kP]l84Hp7u3 ,zпJ9Y3?jˏ 8PS0 MFFm~R`rw3 ,GY W.qs2  8=б>/ ~x<" W3oQMsxే(NY5Dr]X]Sg:yN;5Aap`,^K.#ࡇ~ > O£/9Is1X]Zr4xױ'y$+:] 'tZ;5S5~kNna`,K "T'ZFT3j]CT/kZg= 0>4k_Ʀee"VpR:q(*WUՑ.hh5idI,A.4JNU/:Jц>g>z6:6 3ӻ=o{'o\̀6Td̀SH#2U߱mfE;YffQ*[p5}ǎXLng.S?; Vb3Ssˌh(*p~nFoyv:L埑1aS7<={N9 _x?wG/>MO}> }'/>m8r$wTEA>iU\ F\I b-4lcE5S,yiX<1HQ@z;uotT:ՖK4/ES[⺉9'剌fҡH"G$:sJN2 ,Z[ʎ\DK$x)+eI(-31zƅ U j5)EDmia>?<痏5zkx A'N?'ωaP&톻N#G|$ ,}GkynieBQ44;:N;UY[ω'8Vh&0 NKyεgSA׊ (UH{ɣ_A:6(gQ,SjoO2-].,f W!@nR~rqLO(!1>)tBbj߻X5xMA_n◥dCp^pem_,dIJNme21i< \Y"Wq*rBH=U|nzAJ: ٵEt8$@y28P;>7n~$x?=X*ũDL<\>'+u~hYmmsExQxh5pnhgZ1FJٷąYGKgӦĘMM'椧Rk`ʅ'cJ,Rct)dBS}0M.V\,Nho#R?O0P蒨SsLMP Ͷ- >L"c nl4gHuj, Skzm\w E8}aNgNxpT[K7Yqw¶0%B-g 3`*C1#(x X`2ɥ/`wz#)!'=5s'ks iE*$H5x=WhV%n A:wdm5҄ V]=~ Z bcba*-*`]f|Au p Ww5am0 )%P+ ~QkMK+-P=bWcHA4Xw/E) 1 MsKd\8UXH t ë>:M Rl )ibcš+,j\kZHsT rTTg?ŋbӺ""ұފ7L!10`݊nV 4 O|d K1f# ^_E0 "<㝡9!.-F듟y)M@Pz[]4uƧv®o ;=vNC3߀VӀd) -`N\z,]\:$"RDN['dRPu@j" pT ƜȂcF\E/^d \h-2-,ȩʺ;bkCy߁068VGGơ4k`Ư=1A#6&A&1,^/,_> 4sՙ2 0ǹZ `媟veiT { 4 C!z@WM/Պ]c0ІĘ# N M ȧ ݗֆU1poj˰N$k67m^w*3 aaͲjFi44Lʶjgwe_Awk?q]I @ Q=M)3YL '2} zm=ҍZ5Ei =Ox}o5otj6uN6),1IJJabY֝bgeV.4t;7>U7*s|]nx̿o[C=<\Z_B19&L2TR84Z[J0^h瞂G}9=x[˫|M$H bƑ3f܏|EefLxL$FL8 iWư]:#j ;E-hn112EU.jQ8LZ'hH vK eⰴ '.>5aCV0:M4ZB! h3R "7SqBл],2b|9,ywU\s}u YK55b #) h4%3ѱ^XXsǏCsm .xE ¾mw؟2>djd2/ p * o_}u gN@{  hP ᫺z_Ơ*9{ˍU탱ARݠ9 g-g=V1FWpY l,>'?n&F?+W_4÷˝&B6; pߨ J_PL^%M5rzQ$+Ie ptx͇̞k^8? Yxa+UZ"`Yˌ~Ư| aZq٢;oX K(QFaq2ZehIӖJeL ¼_jc{#{X[|(݃s؈:$McZ ! ۑPoNcJ--=~S6q~?jT F+?ހnB_ 597Z9UrK,h 7֣*%Gc^_mӟ-\5'S{絓 TϪ b$2~U.57P xc"^G |"!:%X o?[M{f;ݦ;8bs{%xGL"8K "Ō<0*+RH[b,Q{\!Ȥ%^~`b/&' \"ĪčU~...3g~+/};ȠK?Tr F5\B\h6V`SHKL`~qXXf/d>n "5QH4#]}%Yd%) |^XOSc[{?T IDATl=u $nv ēHcHx.51ybJx=*_1} W?ӿ xQ\O)F7>S?mS^X 0c'T"w{cfff~ȕ' 59a*ʖױNȷSEdI\O"x+uX&|_~\皮Ws{ӭ ׾|0I~418A?wvغc%78瞂Q:ɝQܔL@]AYZi&\4uɉ^TJ M])fܴJgйG2T6sOZwJW #10-l9 qNTMOT(H\g]g@l "W.UҁȺŚuW&]I8ˮz\!S9|*I#l p`<=$P:f-oA ̺w7hOuHɅ׮C.@L"I4>"LWvwg㽕<_ }L' VF;?=|9#̤ #(Z.,dأj 1"sNՕc[V#SJU)JJSρ#gNۮ5}޽{jv8wx=7{guGqjpŊIv&ϝu#ўf`FM-FL'p_]-^Q5։_]& #[Ikv8I#. -!@ &j!&,jvt&ZHӒaG Y˛5ItHUn̯j^US q4`ٯ% :Ѽ:W/\Cr'N YIES%=+*bZ.fM.0ҎNS.BhNkqhF?%.B4Ovۯ=zu.`A|OkcL3W*f2]eIЖ'ߔ#yE.h<l6tiL5F$5[HRA&}r#j"[mbM\c C+W`#NiuJ7-OlouI烍Fxa=euz—)Յu P}V7aՃR`: MA(`/x% Ĵ7jņk,Y@H^Qr| wabKa!%{QfE(dCuEMzI"nD6 ӝsy zY1 6v=7U1zG~O"AD`SSߪ^As^(U}&(:]RKv&ĵ՛e6&O+,v4'>[A7m{oLl2jm*VKޥmjF׮xrsfz~SO#˸f`fdl +?z.8+.=Bu\SH˘ihRr!ڀcT.㟜w z'<~ m[co)8{eVv!Z9ĭ3(['.˝cS8TmO|.8*W O@8 ic[?MR{?: byix)oڻ;ta6&n֎>c]ǾLU)z=VFUHW۰o>{u-AcZyY?O>1zΙzf5h20XPÚtwb'ekZhxH7b{k״a&Ǟ'cdJ (064qns|[VZFo^a ǎS1f*MQ-K=lwTY޸oU~a疭>;kW$]C89Be is\4Z+ՠ%?Yv^80=CuG-+gj;5iDkNc-q<Ə0|5?ȁ.[E{ I9!Hk1L 0BNtyi@rQ%Zk\䚏3[q@ep,P[J\'^J6ׅaWH7Qif 5Z'gq4^Mk aJ rTt`3^[kfz: ob'8 OqX&ߓkVCĔ[O;ecf0nV,*m8(¥vrLɆc\1_3]@=9FI޷gf@'pef}[_GY6Ծ~rmgR5PFlf OR z쩄kL_Gf$`B3bSlتânC-ןml4Fʸj(1f|ͦZɉ׋&~^$ pF޹Vb?t,.it9t q!MO:"ͬƑ]JpέLL,6եM)ʞE't"2^F4t>b+"7#I'r_WBLìZmK2foW"4Jӿ-=Q 2k:Dt$%m'dOwaft~][vxG3[w|ULd~ xLA8tA c.:EHCu̍QELd$uit ڑurWإ V(#aVMTӃ2BW1F$P]Uq|~'Ɣ&]k%qi=t$}ӮDhvuyک?G<'ct,>HUk%q=▧~UuYi3@OZ,ę&A(&t*wuM:%7HgOv֩)߱IQA؝x8W\kT=-.3RA$__ޢ K2J+7aM\BQghPrCߨ&]?zz`$qm{r)>ڏ۪mwO\}eev}~їh#ʂE{2 >EKfUt2T6`H**u>Y^Ha1FH0B%w iፁҮbF6$77W\aA{X€'}my{!GP3y3gPRf (^U01-J6ZYZ 'Ip%+K90`riۯ17~|RS/b{i׋2{XNy$$!y3([]J3f,u k(^l-`*"o\SmKh[+Qո)i|p\@UF8bQyeSh Km &D~~s|/*;1eډ;AIJ}KF׻eI{z*u۲8pp1~AbM]v^Ofh,%d]7Ph-t~ݺnP=[7L}wˋ4P9aMOӖQ+P.Ѷm[襳th\xhaz6Qs0[Bx 7Ѣ !~Z?0Lv7wnݺ棥">!K9rc_SLV:6O zxqz~K_Mvs~'ϟ~Xj[[`ˡ@+2ryR@Lܵ:ZUEeIiUк!U$}Q;, y:L̊fߧY@ָ{-pMQfe8A"!MŢ2]Dub*ڐ">ҪJ'[IyC\242]n)$B]w-NH7npclGU:4EcLO/iZnpmg}Փ ,O*jWAu. 3Z΄F&j9񱪼ԮVK}Ϛ" ! ݘarx1P Y2[|mj%O׈?]k}JgfnLA}CusN7Vn@>SʦZ*w댕wLDgriqь_yJ U[}S"E.*F^R'0_Վ/{U 1jJS ?Wfk&lTt7tmmyA:i΁-D~hM_ 4I+#{~zI^YZY D$猢 : IDAT VM2ہŋPȕTg!&QII} e<ʨp{%\]%`Oe:0ι wIKe2O^_Z99IvYxgfЕ)OkM]PY'ճ'u[/KS x:u&f'S'iC~ zf~Y<Οgo~!JW(2y$*ł6,⍩ fƋLeM4~x`tmqFEAqmAO7y+8)gC@Ce,` 5z' *(E@O3 Tڄĝ|U$ܷ,BoB} VCA^=RXĭz5GrmS1哢`Ek$:ϵP@1ݼe/<}擟ۇЀ[7~?G[6tӛo{xmοJO {vѵgk{ ( _@>4g\M7Zt7(n!e׋ۉHL,rIܓ q=Hv,)CK]ۇȨJB!S|K3焟'*! tEenWWD^ G֡NR"mU nuϹ׼6{uёmԌ1#vE՘&w2ƇƤH4a$7v\LK 1قc 8,pita p (i{*Ig˕zOJu(EUp~_y D^e!:>~ дn#5*y(M(ÓBLZ鸉ZgN 15z't3vnU3iY6-_m̔",j[ȓPon ѝoS3Ei-pSa.]0¬CsgrR[M!samf2kJWjN[>KSJ&Q!pA1)bq -\zeQncVqSz_U԰jAJLI1W HfXHbj*w54GyE:6v{v줱) =q(i[Q4 1B-|&t(jU)|]ŀW#dK#"$nýrΝo|zJ FIQFG ޲TTYD"[AUR6PU! c$QmQS 38!!*QJZUR&Z}=Kj)A"?T q a߲fZ/W L{{n~79Mo玼L̷Mnt:;wmC=у-/цufZrOzsusZj@9Te#:ӕH >}EPISa-O8 pqypn(\PĎE($IN%4V8y5ݸ,ΟXk_Op5̼.ąPe^^<|iU;] o{=Сg^8@DO?O<(@) nU!SQPOȀ`ZnsU-&6nT3GOҨ ѻb נY/"Z_`kG'DMhJg.@6|g'Σv>,DS1yՏO"]rN^8Kݲ+s`{w>L|+/%zt)tnj^vfvi[p$݋OA7yi귾NOAl݌n`u5ಁR<=> R6o߬э+-^TtByRobnD"6m՘JR,2ȏc79E_Yk_o՞~6;j؇)kyoKh@_͝E񿱉|,@`˪E5CBZ 拶!Q:b1mdr6$92Iq 4]|{Iop.d־ Um驋kutevB+^.Vfʎx^溇J= j[/;5E,R-)%%]_^L-5Ǯ9աqo]z yᱲ?Uځo/c-bQBAp XQk>'B}!T@x0̴ڡ/KpԠǁA/ m)zڔ-HSMSr%R@ǩ 6ZY ; Λ#8<}r}oӉC鑗@?=A?5<2=vy:HŽJu"xuQ$R[$^IhE72۔05Ziq*'^[p}E_ꃶl &*SⓦISTnI5M, "T"jiTocAٍ4Q3t=9Lg!ַSwf;w_?MnAn8K<@ .,{nwdSkd+qm4qW]Zuȱt'fb(;<5AkxtTP!G.2Tt&)7YkWj&ѨCwks덊3Ͳ:7[̛wt=Љ瞓ĸleâj&o `rE[ hD <[J3WaZP#}GH@{~N+l<T*leFBBu.I|S38ݽy7 ӫ;hfi&j [JgXx9jPl\/TS׉y ܖ{]UevGv'(#11?ϟ -BfV$ ';UւBiiZ5≟[{I A-PB+(,ƿZ ΟY)kUH0s;i?*[/>"={-7 $8ږŸEV)]Q,\$p75 yeU/ЙsW=R'g1Pu{g4Ʀf2_EW.5MfA9,ި ֵ^ "N4-gPD2Vơ K'%T*oM<D*R{~,-"ר=ll mV?Ja:q..ȼŎ3_xvlFGٙKuK9,mX=4/NzE'UPYm+eM̝Rϵ.w~RXu"WgN[yPa!- l8kc/[|20.U$FW2[q[xqeodE1u* U~dUQi5` N}ܓ (%U*jCQ\FQY $ {[% 4Z} c_EX&BlgE$2:uD''?+ EW&[=E'/ҫWNglwc%X.r*8!&Zb -u$b,p%5 eB\y4L,@BTR0|=q+Gd`t VQ!_{9Ҫk6Hk'l{+'\k_$x;cR6/\&">y>}dYycG~o (|8/e|50DU J(RQ%6"5VHP`H j&xpЃ)wPMUB e 2 möFô-uhhp\&.GYܜ* vؽKvәEabK"2yu>}5m*KQkXhՆ |"%)}HRc#N,ybva?W_.tb^ kQ њ0wҸ? tJUi̓e-JF¸Z(x\"@T;xXgo|ƭݴm}޴'6} xjχCCodRDC}t^{ٻ4?;ktxrM h_<1/u]X" >@?,nT@kҊwܪ?Z \Yd-3ms;j[[,I{\x(rܺR.S7-(m{VLxEn[JJA+jj^LP0qDUQL)u)4cS j@Ӧڢ0cTe\j{~w4Н=[:A.IDA@IYm7HC?Ki򼙞"b}WXXn x*Q}o^)4KRjE !^sdUk%@'k,Ƚ.T7IBbW1\>64Iw yVEaiw]T&-N ^D0=cuvi,͚ , LoB-MPcJ5yI_tey}[W/%_ُNzoz[o{hthz.\sؗ~4%:5?A.YG|TgTqvr*{۞^88XMNcI@jibR79ٯmOƆ7G$aBU]WQD uswI=LckH2+rq/5x~Yk_ xfSdnk0M/.YhWӡo{=C`lxB^pgX'Gg։TaŔ+-T9֚d821 xYp$ p6PSv_z{GHv-{k=89HRp]Snh6n<bь[ ꨦX*THR9L}5'k]g?T@qܠUel3 (+J˨ꧪxPUs?HM⽇D׊@.u<&o[:zRi 㳼!4%EXjr&nU yexR8{ }OY>n6F83(4_ /=jeZ UԬ]#,_XOhATcoLn[#ܠmӹ(0 _Ēx*ш/P U(Ѷmo5I{{RF\@A+A*i#EP=ٲ)_TZ7P~Z whb# ;qo۵nܾ}ċ'w\Gztͷʼn+2vO=r=<-ФN,RY|17(iX mRnVQw vRRE^7UDEd.]2 4VV"U$4M΃_^fb;ϱ=^̣Tσ/v߹'R ׀<_/=]Uovu:-`ԮkLr,PXi]r XKE=qe)T2e3<Y:.ɤBiqz\ FKmB}ǁLi1c Lj(a ZVB +Ù)^i ^W9rKU4v$,#"Yeu/ H2Dog;RqZ!ך5S?ѐ_3\ʨf NόA(I fg U3Z8p=8Q[_8nF%Y*/{*$~(o|'eYsU;{s&a(݈_gbz÷ʁ!J kE|QO Q4Ymc ܕz$͍J*W & EIPSm"MfEV7PB%0 K,q4Bi}! (f"醤R1I$SEشqʈ(:SAFj\*g K\hfVrZ( ǷпX)3 >A68dLF7PLܺ vs͓x:MNs'ѓ3'Oӛ{ﺇqȉ41?EO~^:}Wmg ttt#mͨVYkA1lrU#|%'gƋ/Z'DF-p]-% 8%RۺJ >/tېi QQhFI[V9VdŖ_7z;EO*װ$4z#zu=UuH& qEQǖJaw Zȏhɱ Y P 'rfn(rٓ2pKmo@{zWchݽdnwZՓ %=&>^jMU\߶HEL6Yiiͯ,׭KT3] 3LUfH*|O\XXਤxp MJr}%)h=wc:,#r~x%W%R@"zm|_E ҎJR]FJBڮ2qA˽e9HќTq|jmyʦ I4i&QTZzJfD,D$W$|/@KÁVq &҂Iׂ^Yj Pc"Ƞfv-huċ8Ȩ#Mb +4^Wu#R f2435kd2.\j5=~SZVbȚZd`yk*`cE = ߶L4pPg8"VǽmEI{435C}zr<]bߦ/[ti~Z[H|=D u_ⅇX"g^}3Ktyzfr+#+vv jz%QW> _G"zz.w4+ H@W_݃۾@r}[w5#SaeTjc>+ˢk_HP*wewiD=i}i4s+@/cy5}Akݺ^ps-"W7AV NX=RfER i;ͲF55{$3\YZ%s;}LF˵*Zggˎ%T?W=[VAkX|KNKTonˤ|nA6/H8ꐈK8_=HFW mA3ZjmTG'9ϥ߼lZ\BJkX(%iҷjƒA9dzu%IEU@G:t(%%ge@2HpbޯBq6- 9yMMMҶ;~Uӥk42<,ວ dj VVZZud`UO\k~:pIC KFi{PmQq6eX@@[/9qؘYh򟏡RD$MU" N2QOVŠC5WB3ϯyshK5`5s׶Kq?cIu.Ӫ\CL^86|/LqѦwбg5l ӿ5]jrڳzhכn_9oa\Z}pU# 0zL@+;Ug7>86 Dgbmz\uVʍF2>bQѡ~3|kJCZO%7ݏZ}+}"|wpnMcm&''iΝBM x#8Bޛ\d'@*J9b/ODdreؕEYhZ^)'}QQfO"eosb'RI]\o~ܞga)QugZ(gX:40*´Dk6< CPi%O/\>Ӥ*w'ʁܛts{cǷ;y* >-dq")+֞THk֊a0MI) ˢ<`T2w SPy%"IFPgUW4,[)Vgjczn"!Gl?UƲIj SSs3wut 7 ~=уbU$@8J2[ qZgA[Bifi.:F UkÛ&D3k ը/6b])[P"EU?y:DZ0,)μ)5?T€jJ`eu[=Kap>c][G4񐕏oz;_Kl'*qu~\z;9M-йKqtݼzgc~h|e 18UTuWԷ@Ǜnu =oCj׃?JGΝ4mUז*,A,ڎaKYJIEh$Ʀ2}m5L $(B71he [kBdxT rNQlxsX*2pyuσf!@@Ai a$ ?\My(btL]紐~ c-ct~yvoC7[<^=yq1JM7D_~\{Y칃w߻Yӓd8+.Gí|WQ$)īRC/iSISf n) ,NQ7SF5R=`"*Ղ ."0OMGo *ڐ|êL(Hk {O`ѷxU1$MFuzsksgF۪4}n!?i.8@0;+ng?At= @Amn )R3 Ez?UR%bq5\P|ǰZu4j{( 5xϚFǣ.]|j[Jՠ$qj#ͧMp߻::7}Ž^OK1`!W wv+ElΰrѶlF$?S+Hѕ+6CMSZsaԏ,)QݡQ7`,ᦪQUY$ xJ[YPQU 6s>)&iڰ@.l>Ƃ򽾺]GEϟ~UjV)r#<:WsĒ9Өp%?2D0ib.cP2ƙoq1WD=PbU<4)v;T QEsK2Pw TxīkM`!2UOyTf4RczlHO?B_;m ߦ'짢ۣ ]KEwG߰>r{왳t!ZX^JFHG?D'!={oS/ѩl@[E@lD"M7Uٯ0HO: YK[^PWZel:JUtlQGޱ} U2Eu_UM~:z(,B7X*g٘bjM{Ze:796t ߰ijԵ5<_7gg(Moe;8Qlo4;9I] o>ڴu+]xj"ElJ$?~ؘP,v\r0֑8Je)}5tU} Ѷ,IhSD$w}lh\d1 @[utx=mBSWi]gv:|.MGƒ`a;o]CF{n԰PBy-"#^oHn T-eKNu -dPkFWV^,`a#mFZWM-NcL4giUkKӐNFh41Sʺ4E4U^(LAr,c"+p0^M475/ͭ,j'CU3,g&,0CIh#Z:R[{Y[vbKSR";m/RUEէy4Cx OP M*³D/2TvRLJ@2-Mcs^ky|^x$ 6ff*؋r@dSsq7nE wu}ntN];'|]sG'sGGhB+\DQ|XTE~(MQ #JWi5lwsY9ڹq'ز?N yzGtZۼ-X3qAAZ4`F<2WfgOH |h"W$f\ZDqh#\Mlr(a.U_'ˈP(*D5ϏLBC9h[J"ka lΓ-a=@ԁqw_,Sks xQ eNnʃ- (MsebB2nF{N=<-^ڎKVOk\R\r7x%\dY/QSgXipglHA#L\P3xjB)u+z:`77lP޺6yx6Y}Jf6UUnY%xHU+~E?"gSZe1ET*J&$$Xr{JsNNA kC5\Q& y,>*H}U>2ombnM$ ڻu vޠh?yƆTSʱW⪕,r:y[r;Ϥjc:QgːNn6i)'.d 6whb*UuԦEnLoIC.ֵ"LX%~Q84ӾVVL70)y?Xw-F_1t)tݴ3FãLiCno8 )`}oA_lM|v6RT4#O_r/ʴz_shJu_=%QD;HȲR% !P^W-eV-,QllLxTke@[I;0&l +~ ]2m*{'F<|, ~YH b-[舛xxعS  hƕ<o &c DH!ټydz2~*q)TU6 Nt*yRykU#;|HN3[Xʁ$m$*ًZY[,k"? ώWhK+OyWLP][504x!W Y VY ʠ7/u%k#r[sk?˴cl=tz2p^ӆB9!7(Y*LBE W@d&,9p2؄U+ g"!; 3b97B>)Ҽ% X\`n3&h ]) j4CH?!< "KK4Ag!5@fymCYNmY'G?zZExnF9Ќ9,(ETЎg'WsXӒݮ=;"NYqe&DX$ n Ъoć*^n(˝==T,E6i&!Q:QtF jSUxEfRJA>c1sJBrDax,ՙzR_EQpJ4nzPjzQ:Ww4H q'(ðLц+ Q :yw^GϥQzpTeԦܯ=ZJM 5mZx葇h;6r.7Ѽwn;o-.KzWSĕ FG.Lwo |DZIWʋ9)ݧ.EbtψnL &Q@}~-djK3(9=<׾uwm+8)j AGKҲbEV5 8=HMvY^9 78׶1S8ýCK+Tno~d̵ S8YI;` <Ut;[K%y(=`CHQ3MU#m~CcAK[Ʊa.UzZAÀ՘ojC,h{,QA_/k7]|In4KQ,>T̵듎jk3 Ʀ7s-qE 8y[0V:i?=7O󟧣Nˇ^kml>INkw(k[Ͼ74<#DzyE4.:8gP{H{0X0UE0Vc#k h?W#6sװIj˵ԁ@O/hIԎHU$'ڹQ<ھ.DԄ!;Du|qeWfZUl[@w*⑊WR9/^˳ks:_>ey-I7#m{/LOӵ YF˴ʂ`;H}V?=?[ڰWgKLʳDvX(~iV* >07bߤmy>]cʉ4v~"@c=WOFuT) ӠxK|L9 Ss0-^Ow4`+eP%#CJ[a|FrUETE*}"%25_涧;( hN*gYAhQ4*3뺡3$rQKm5]CtϾE'gHU( P~#'jWEI */0̯LQUͩfʯp@B>ީdNC\I^Wz{6UqO7:^!݋T?P8Wޒ=|0W0Hdfғ p-ܖCqJ&hzY^}{nVI_=_*STs'izjm:˴ ~tuSG>DM+"ʙnPJCQ*鄀*voS]oJ>:yby Mel|7DOtC^9?ܟ(t`S$Mz(8R"7P0 n id\K8 ^FТ!pD56=_W&So /]>T?T_z{Fg_n00pUcTQ'W9gggegyVbz3TuG)FVꏲF>lx*D9ˋƏYf{oG&p?C|TiӀް#pZV0)2G'ME C'D1o<=ᖴt4~u~9ayk{RDu!9Sx^"Q:v$<ۯp+r,|xX? (2sä9|քEXFfۨpthbjM弾t  F*V8)4vZRTUۑKm,R`?azcu¹LJSV X%L"1IP½! ;t}C p<}Lf'4UsU:1[eF(‹V4@+U<+䉃3Ms @{eߺyZ}6+m&c|' -jT -Nm4 N߷d#=n⍼aS8-!9sV!|ew yֽt > {RE~qz)?HϜgN4f|ter^I -mrcoW{κUw͒ȮH@PS4xEfY0 Mk'O)nNM$p֠^sRSs+e?_ᑑ9\:?}1:$tB@:Woy3]W1.g?IG7SW'm۶oypi=)%3+g2 "~*[l~F|B9l ɪ)լ=PZvynlF *H+Z U˗&^ﭕDPJvTQFQ OAy2(b? Y+GjVyTP~7e: He(X(Cȟ ٫ȭ"$1pj'Hq<p^g EszuD;9=-NWNFqlfT [bgl&?Pmʁ!>Bo,j۞A%KdK]Q#/ʿӨ:⼢JHة2Ъv+OFyJo zם ν7ݻiJoE,tX? ty6@o ++M6l"/^soW)/IcRj[U`o6s+ \uh)jSgŔ{@*QZzuNh 9# IDATDQlKg7īvk6(um+Wqp,6(|d) ƃbqL4ȺHbI$ ,uyA !Ex<D#BH4Hh=X4f?~};NpF=J, XkJ/(jطT?NJكAzWeuE"Rtq~fXY\Xi}Iw5躛JNv&>ZaQm4%*ZKaesT^:ce6~\a<`ү!.b4>IQjõ Ҭ˧1ΎXGxZIK"m2ҿ3PTh#)[ZxBNTLaVz ތQygfYlOHCF'EŠ9sx \Vlf|ǿ㮏|Xa\3g8}bq r,{pq.Kuµb \L> 㤢H:LE\X zvu 5ΆE2ZZ-5/1(vAb(L$u`m .Z[kCMXzY +ӟ86;*;nI.+edw4h#u3v`m.g}ݼ%O zٻoci^ 86*;(ծ9) `r M Q}fdj;1?:8 uc˜$ Q$ndwЪU*5^Q#mA`,c[zc&\ +2%sZkPA.I<_(^۠GP%;Ϡ#;޷f wu B3oaߩ]Ͽ cø`Ux)9#\[;*a ֢5js[lj=DFI|>6P[*orӴ]OR4C4gCyf5ifFns $Gkq\jAz9kyMFt۞Ϡ6Cdz.Wu`&ja-Ν?>11 ^s3]Pho[L >p]{V_>u x^xGv󽰞bOLqOc ޖx: uw3292I?b׀d71a.i<`Tm{h+5} jDmQ\mmXlfΛi3gO5 /at3?@Iq3סV1m4l\v v9Db|̠00 RQSCʸ;mm6X7 bTsK)[(kA(=RbTOpFt e,5hchyl ׶akXSP{{64(TVEurZ긎yp884*:ss4 %^b>kǦ~}CGw{.vW1 {N5EYHܼ4 QmKyp|x9lcyUa*Ջ~x2P3ئ#"@tfޒnF4FJҾl* q)N\UuҦ)6FpHh*FjDJêl+ hq}ة=G#4ZqLe%Liw_|fkGѿǁSpn -Xx7,!>t\?sf=ա0?gcCyh>ckBRP҅jF 1NK\ ZYXY}H @uK.iY8q\?wv'?=0#; 56ћwqn„Ef,LJGʁ,Nݿ՘0ʤy<{%zM2j ,7,pOF 2s}/nJΨc> a&֍֚՘QCt1I9'+2͹LwX"oN'׈5J=VTu,jJO5Z f˱z霊#HhH~gυ_yS/R x^_.h'B̘R_gu Q~'o؀Ӈׄ y=.:j>KZzl(G#e7`_kR:]4pGĄ fIEycEq}O} _ .q=`ͦMp!Ϟ/k %cҚ?C[nW>{PJVi\LKs}3g (&Q>qPtu>1M ѦM 𖳍w49ꐥϺb2-krJ"'Ǣۊ4#M:rr=FGa5ߚ 6ۀs̅^ bP0vwg S4j8h/9\N[sR44aU㋂|d5 !ؘ>u}'?wxI1]ӂbqRcR<'b1Gƪ{bW,;ӳ+פ|͡-rX FYRoUҷN'$_׎mcV*2_ $2r`_ ]8r{T_JWH6-\kGލA|;P@Sq 3ƧދcǏ=?F(x==NjEsמCh?z,ҍx#>Y.I؊\'rye/B7B dif8V:jKmMs `%fE.|P":c8ƐY՜ίk/F^GkI ņP#s k\ڼVcTxR .oupzMt#OB9YOF OsyU_:ɯ#*MBL-C5Q+,*kjh@T&Z% ,nā# 7H]%V+Cu4c\2|*1Ri 6 VPBCr$D/mX0ZMv]~gAI=(+^DNz=^3L7L%#^zOu6cIvױ&&-JJs=]1K_I{)6#?ў9qmS<}mFw}LPVcl%F4WPtGuCYSk% UGPS$exAr \/n/vǹXjf9:FUB%}n47>MUQf Ź: H7BԢ6b׉6Df9z=V7ZB4B"bGqò_-,X 0A3}18ƕ\Hf 21F[YV@LH@*ȸ."-}+MtPnIO&"] m`&P"1<9};OLgu”I< b %RMpitP z.!reZȚ9\a`~ո}F\z=-_tÍxawPGO?qw*wٍ[܄ W͝{o܊챽y~ nÅ.:wg/HTZ]ObZ8=7-3 瓧9'@ӈZ]ea Wq:X$YlZH,-Y>S(5ȥ,@,(v*5 Y_+TF)r S=Y2'|pND&?!tilhkqX1{ TЧNm&f#]_{+s\Z~N_zx^xϣwuQtmPhN+$Y;Sefl`=.9s}qzM͗., Eߔ\e [ T54Բ#ڌdPk1rѷo=_={dպX&5uzjW}J&@o6Ju,E[s73>DV&&"pύƑؖ14%Œ!ZX%5asgP M0i4:-a" ~ZL6mk{G;֓mp=}Pbqk0MXeTf?\^xz6.R e4w܃?[tN>ރ?'0a[X)iJ7Uú%9iB($Pgl" WmάYe^G L-qMf(qeuE+#c܌U'ͻT~%ИJfѧ^\z `ue9,ZSxҢTMwsWYHe>H{MUZ|Qj Eܱ1gW[Y#3G::vV'mcmfIsaבAݱٯߢ}޴ [n? -[${ǾxϜq+ q^)[Z*%TFƐ WXԳSWBg8Hd#{E뗘?B-eĐF^՟UXBLV3[Z9F3#x)eH2B䍥 \@_(D8w>Qv2m=-awƱo(N֤4$E%!̒|'bh4o] v ĞO!uįd3n':?x'GNkJ/!Ǚs D#9d1]\lj}Mӥf@Qn l~€j1~{3ڧ/73jČN LT/`tt N̞krj9Fp̙Sw|h9\f5Qyo ]@KH-j(6IWb;K l-o^;[ N (% Fk]USW-\ MH6QBKSQ#U(_\57 Rri{h5զ1_{n€^7g_<.1m L \|!}u>'u%#zgS_?0W>~'1Ylm u,`,JсV dRk4q2@5EQA?Υ@#1IV̓jil~~+Pm_XE&گW^}w;ǟ3u2?bopN)?n 64 mj%[Tυt(T/Z棵X D1c8r6$'9RtFw䘩Ff>IY*Im&ls.J.OpR֠P+ƷZP}@?fMUW]u.\MD`/Ʋ6eLd"~Li;]eQ;|.FǖA=&yf9*R߂k\O7' IDATu?>py0]<|74ͪ]6* ȹl`y %"ȟq=zJ xSLs*BX0MAdD{f8"u,!׊{nNFǂ3 /\4@"E().u'p97=Z"ґpt%Dq!CUzpFq0N<-[p9<ڳYgm09DY|{=8}#>׎Ap/~ZQ7<#tO`^jP1j:W݀Rw8f2JYskt]c%A˚wS1/8~Q]:rG}5<[ԥ[Ʋ|`Te R Zx(< 5 HN{L{4_t:^2M387hY]Cv Y>c n^z ,LZ먐WZkLj&Ivj=SGwã=@^s <Hb1fuoJGT2ſ'dh`JoPABLC1yT5Vb-f/ǩnQ;ӌ/H-.v@j?%ׇK*<.f=!nR*ő͉xD$$δ 5d8jTNcXh;jl &?u4,_4[c^4}O>/>0NuҸTǞxNTVڔ9aګ,nө'0DZđXARjDږd:yh,OE+3˧aFa$_CAALr8b.uL8զ6Qj7׳Mf@]w+,\'j➛oGZIgî#9wpUj!^8FA-,j b \n'LYsTkB$9f5yf)5%q&'gqD.)R-i$:@rdkbHT.61Cuk2CU@-ڵ$a xuw[BjruE)z[c<7 sY~xa&!ɌN*Jg=O-X>*ܶts8Wݑ)8 dҾd^τDR7Rhزlݚs:+ |wTb38LU @ :;c{l7l$rvFnLLLɗ#ftEʄ^xmIB P|VS#d6R^d䏗z t]iynHR:'>=foH0CaΙ4[4: c8wS(׫<1 7VK qQghbg@m y Jr:fOĂQxy W}Jǻ/--Xt6f_K^aOK;[rlks5ALJvv44،}-\dq/u7}OznI aSb5ϰX i{ +bc)(J'vx:wYD]c?'Qۉ(XVyjs'0MCfg`ʹ?4@\ΧI/RgnqR8q;[0viDn"cSs}>}p yᇘȮ{pQl?Ο qi#|EԚу??y]Q~ Xx1ـ=p  1ꐴ0ȵ|UnM2H`lb<{^J٦?K%1k^@l3B /}MQWpnaWrR%SqBxQS'(P 54vU{uv; D(M*-Adi 6V4_WiFuCrԪ=lW$$#46%ğ8,2L?NwKcl%vpǬJSW$YC|ǰnj˽/əֲj|NiÎ߆$*33_5aY캣OwHt6]@H\a]UoNBR 0~jH{ JW-)Y*ly.ժԬgC s|(쐫9C\6J2no"?_)!׬XP_T7F +5jE̦t@%f XRZ'cl&400-sBvYWaɴ|ew$PI`"<@#wyW6^7wZ綃f^F,{ gRvOے[c\@g/X ;417בSTW//ٍCQw'@7EUI7ݮwgy,MH1Muu1~D @d4&y.psطsٽZ#؋H@7OCkj[%A tد[zXܑ-!~ Z5}ȸ[d.SJ%qkJS{qX$U&At_T7EaZH@-Cav]bp?}`K-fݵVcJ[;Š0UtJ赡qbJ)T(k5Qq|Kg4GX`>sσpM7 xnT{_"k_‰SnsȀ=w(k5OBCwE^FύR.O8 5(-pL1# ^hUt\ wS,sƟ`ԘQeh]WǦqc O-;XAEaLk }=ߤćTXHM72x4ދBݯaelb${O6ƆF'("p)z T)/g8$ݱTxqe͊2-q7Ψ.u"ϧU7;^׼q޹ִ&jm_G#HWf,͔nFND|݁ۮ䀂@qqpR^}.N(T |` %Z5snZ,ـӝ&Je>F tQufAi:}W^ϟ8Rt~AY+tk{eE-Rilbn9夃]OoShoggXM3)łWntR7iEU9RS*v|r'a>҉ŨfxFMܮ ;gp N tYlmxd^3:?ІӨ'Fx&F*"|MeC2%b$kd| }nik(Kb@z-e 0*>2*Ug..SdUG/.niniƲ+l2}x,u#Q|-D18]DtaJ{ 0 Οl\  ff̟-7D(8|Q|GOЅ"dWj ۘ#.FXԱ@3lgI8F^k$FFUqϱh<`BU¯KN)-B:BTp &Puwq@0vbahӶδj&EYI&tNB$4u`K2t…KxW`vl{>;0d}|o}g_~3?~d9.F<*Ѱ|+y(Pvr(>HD"?S5{f6ʑ+TVHabcC{]aI wm%ZECMUMKP-"9cJ@hcE߇2r%7y7l :}Odz}A\'@-+j1`vtMWa9hk` ;-TA WW)f!e2$ݛ=uȆp$ՠN<~ 4}bWw@֬^%Vad޼^3Ilv~?gUz$wmoԹrחJ2-p\&1m co䀋s!ݹ1pw%Ir/}QV4z?bM-<3maMN?zlHcbXJb)h]l6 I&f' #f]UQS7܇jwmzq9kDfr@/?G[5-*uӝ9N&(kJ aC 2er9;r)nULJki(ADt=5vh2 !*F%cڝ $qf9LW{RQKg& \H&vu62+f.1m⤉zAu\^vcx)FC .=y ( lB+]j9/Mf\\I/ʹ桱oP.]7f/H}ʅF,i9i$#yӝS(|M$l3mKH铫†8s?3褏ssRM*$mF \e +gޓ?D0<ĘE3Q801:>̡d_O,h)_Xk,2CŘXT\mx654:'$wAEBMܹѻ6!_S0:,فox~މ 潯FJk֯kMLw׷{f HlDyv·=<& ZyCX@TV%B2ײ<S&>뙦ͼR@VL9(`1VhԔ1UkP jSkrD<E@:vgLo"yD@2DE˚$ZNa5֍06 ]֬Y']05r Ο1v7C8~zz_/}?9Ύ\BS} WXB[s3v{gϝclR<6=}[A*}&n/Zb%T+ϟT~3Xw҆Xh[|9GFp1[Paİ1lVr"W]= 8 EwШ( D>p7HNu62Nwuyٿ1{6lHSs /HGh4})b۴]LO!6jt5IЩ\FKC Zqi× 8zJ{1JT@(-Ži.E!%aAO Xeԋ`l6HgډL7@L^nܔ }o2hz0W\Sr`P+it()aǾ}q{\Bi)x9FqWoAiUP#V$|d40Skm7(r㉍aqJIטp~rUʮ%^zP3so2lTC|fɍ$G8SMqU j4Ůq(ݢ'tpy }[ [V5kǾ|cRo|c8}^?u8xBTyxY- HXu qg WL3.\F8-iAN}\d"wE7=%HIеLNu͸jl +Ԧ.b!HyDg!56IMCHs'޾R}>{2x>2Zٻo >+.`t:1bvs[ȋ^E=x0C57faw*I@2;^%<&n)/MG6fcYRѩߓ7{'Gy,E=(2ScivJeHbe% ,n2u+>ags؀N ?' 8unpKl Xd ()A`ԢA 4 56ɽ/ &T^M7?ze} zr}4iOǟ<#< xOc# HN(pze}tSeU3F ^OSFZIDu4zdaj9a1_MtR .d݁:P 1EiIYU>0|bZO;ơ)v?WuN+og?moV]Waу8}RM7ݓNCX~gA0Ve~#Қ2{9;_{_F5ª4l\w +W-p xz-jTǶ'ъSk5eEP? y-$>1;9I켗ȵF ^]1vFw8״DJ"r;1YpzwS8W^_sCRڃw]/UU 88]>lU|oRk/=̡}i:)B  <HHg}'E*͓EђkGwਣ /BIܵnF$Vjnogi#t1CX0zYT۩8BKF5:Lo~3?U:O;7w FJlUCEw8C2N2mfձH xΝ2'zΠ<>$Q,cr5T&ܢ0  HVe*l1%&މb bkW5xY"'EIET?:2bwlP[֪ؒD5E]sLR,G|-d~>ϝǫ>6GoX8)(#"kH5;%St)ɠ,#ASoZ*Щ$6ut̀42LGJ: 0Đ$,7"@5lPFsXKRΝ=yމ_㕽o`#Tu-5 LZ7ÕX[T]Jޜ#㰦ԁ$&US (X'u%^$G向ZW>NFj`1\yLL1^(Zufh] RR%RX{)`y3Z%k]!ؿڏxoWUa{9z20ZSv0FGk+h<ma"Iԉ ZΪW+}1&IUR+$y>z"hA-j6m"5AOۑ8(sMkI暊E6qNL* oB` "5cbAĤj J]d6敝a {omOi~wҶp}к؀ySyz"ln^E!iO_uTCTǩ o&GNrA?|(jҿjotϷ\ b.Ϧ0\0LBM8)SIN|S)(l%wSv#-'RՙfתM5dt7Zky X>rTYμz&xGl= zѫq> ŐE#9Ѣ\L9ߓ2rI:ZO1)QG*l t!9uɨ 6'vN]z7M@yL*H-fRSI/]KYߏyӰdҟME(_S'֩c~Cl}td/^:NK݊tu~e1:SqTvXHss:"p}ik*ơ:[XQ߹D@.Ҫ,DѮP:񒱭1tp92CFlb{ksi!8G7$$ӯEs9+Ȕ5uS͸[q~.vueM>r8<&'Ɓ ~O#8u=#}8݃OM>\񋧱! aD@ig {g=F5˸fzN6%af%63u~rĉiOGB4]pXw3\ VRHx= *MP𴈒zWju4bK 0wJQH5| 7c(C8:ϪG ,fk׊z J,mfѱv Kb9}6&vҺaɒ`Z1[tW5pjlrMpRf':12X" 1X\w?d%GfOI+9W?XJxs=ߍ}r,iG搜C104 =~x/zp.aJPc8{6qH13\S j3XZ>,CUeB=ЈP6V`^oeS]&n =N9+Q< %I9x*)s`~_I `AIc \J늓&:CCj30^.k6{G!~g0>/>w[ Tp+߽8zc}y<}ԎG>N^Xrec\Z2}#]턫 {9sK` e\X|ŧ|:?c.n84"w];a-?LĎ=C&'xHN\;Ha&F575}a~Tiu#~]m-'z'I O)e,UW2ǬuIj*żFX߂3t|,hb+FhgM$ MTu-\$>T67^A ޹m_Џ+WSE*`Nk]wk<̢Upa $]>tW%eyv% l:*5fbߢ#Ybť,DαuaM2fa pSNdɌCr?U]2 /]_Tr$c/ *@5`FsnYt;qq<%\dn|=~{;2N]UJ8ͭFy kc֔PC; +48ڇO] >øНc};đ78Zo: NT,j0up\@kQ,םi1)ӭq\ȩ\б\_hzk|(ڈۙ*5e Dj~Ø<DL)KAc`=6dzj,kf.얎l-@c]&:ӑ{qٜeo{drNޟkAi]ƕW`wW3ϟ~H/:75y<֩`hlmɷ289)XLAɋ!f:>nV݈TNRQdpMG@B꘾ {ZY_oܻc>t ,Sr7zW1<$ȍ vjr[v꘍}'5=:p2!lD62xOБi\DI| }EMwG?y^5 +ڜpcsck8^*c|jBr}c=;ұ=8:p=afKVOH%qSY"Vfb 8ZXhX Gw[&b*_* |Nwz| \[gE)e -OH49cH4~5w6 t.27@}R$+iu5i.IHsm{]|r89M"̛1{p4- vPeÃظx%nV;CPNPl:k~O %g~5n: sB/4M7X=o%6^a5΋O؉cظjV_]^.fqmSc` Zgˏul|bմܘc{N ֥5s~ iN};hOxa^{ӯKE2>(@b$Fέ4\T$-M\&gef~VLpnKDKiopG $iNS=0r2/S.4/"3y|}FBYãؾ}}k_O.3s e4H%2Noh) m qa Ӫ(Tj<I fvfP3ơRvcƢdM;dhƢ@-}-hI{\P<w~}Q{oljC"PI--0-Ш:tJ<[hF: :ţ޳?<{[tQ4 =THQ,nDL >h(T/\cRi;E1hrx$n.s /7NuE{XW7|ᅧn\DJMD&ڸd9~"CgP2F"c^T^sы* 8#9y\5iF.&VFj:gS(.5gG#f\ܡĔTɻ瘊ֱ#$n*_ObUFy?8[={`ש7q<[׬ZƠGDVC;76`ck.ox.pb_ ,d>/XW!ozܴzuS>}‹o{"_0WH@.Us, ^:_\.xz0U>R+YL55a MX^޷icB΄Fny;hmL`N.@9X7o 6_3P_( A賽'{o}$F^'{‹;9pۣkY%H͝bFϣmRSG}[]w܁nڊtL;n׮]{7݂;o.]“_1 NxF7W_wzγ|!yYZM!Ե.71yLȖe`7kj5Hod$Wo 1o-24d.v\k!B 5ONAa}&jnkcR' ߔ .7"iES1L^Uf5 bHg/Xu[7#7u XjLM ciEXmN̹IϗN'M9W`Wg*8ݬ҄9|tUy,IEL^Pj"-pw hj"P)xځ ]IU>Xcq1s#Rѓxv6ΥMF2V6}NGu4UVH@f}>ޑvgBA1Ձu5Ke\кHqڪ# B/17%f|{fL @ei,z{ cw?O/= xw;4o 4z̎%SG`hb}c'rd$7C'8կ-&XA{JnSpnr؝o3YYѿx =E=Ѱ}YϹpMې!$n.-++DiGŰ,)$UQYքk s2-ӖŜKx9Дh&0V3ٳ_pIw!K 2?#>\ F X].ot:!PwSs' If'\vΗXpZ9+Dgg_̌v| ,eY=Cc64)">ɛ0wX)= W~˔('F1ȿ̕,$EI:[p>Ҥ1Z.Brݢ0<=#S]Sn&ؗԏE F!neio4 AYyy[Z-. ծN?NG-j(XfXߑMd #ҁ" C]ĥFuk4nNZ~|\S1FU%Yf 4G Ʉb˸1IԄ7E:S)qB,y5g@1`ڝlL;w _ڴ;~R}~z;w+/} =qh۴q6ˢ3٤ظ{eF)@CG?lXnX /ueevw@tSָiH4ҩ."KHNPe=?RϏ8x>Ꮮ~b{yxz~HB)Vwt3? Vtc6's4◑-oHa.&S>lh9RSw['f/A"_'k|RxypqbA#_tڀ/C~c o09> _OC}d =30p8/sU r/\Ÿ 53)tr> S^ #S-|OpjlY=\s#,gMƟo!8m@ ) 3=h=J}%mf9&u3V4c" .`Κdo 3Lq 8\:X?_ʼnqT^cd(9J^" s.!a_`m[}f{fxn[4R)/:-}i; *)lύ}*"SZ܁!j'ܼ$UZ$TWP.iäւn*%I|~ұzPz6n{ÁGaf;> ^:8ĵׯo ॳp)}Vؾfa0%sSPF`'9Bʈ!8kRǐsO !)ͯ.wM6$g}Z) :'GLFsϒaJwB.!B`keX.]"rSv(`n'9=6SԱݵ\'0r; ?6cz4^u~8>I3T7!րCe4ͥ L3A{BQK2)|i0KjE%pM^\ ŜjhʩV-J6~}NjbOIɆ`03131uFJ 8?v {m,pű)°U%2|rdIb@%ĵ#N /]C, c@M^ ;} K|2q :64E;>U"B~~MN%VS6K^[ryʡ r50٧!#Bx䑇掣cXZ >^W,Zwlo&=ãpYx831!=_<܀4|,BW,c-< iD`Q Þǝ_ѿ/+X997 scౣp7BxW o§x֯Z {w# v^ h$u%hiFHr6mt&ךJW?@\`c: 0bzl2P۳$TRR :VMx+raq50Ama xDiuդYQD/8% ^JFʺ~s9";,]-SiG](\y.~gΟ;_jsllҫU5R ҝ /YX}0x>9y'H~PK9 ?V6kxr\|f32 "( ѣ⅁N%6n#9g/s'$. RI"~^)Yn)D:.XYkTK](M9I⶘N3{Qf.|#/9!&@]H:| ex#Ѡd @R"nk:s>L Ϟ&L)Fb,=X0>ұ)*rƍ؀ZY cr&(v)y{2A~HN &J#Ƴܓr bNՔ">{ӓvyVĚX^X?nPաg}B@Q~6 g/\۷wMɳ}vM-oGØ$޾XO<95})/AA'x3kٲV"Y~#DI$ \3u/|3Pw/dK<5[ò9'N#L4k<g30QkAqp N] =25J9ډfS%ږd\MbkmigjLKXjFhiY1XM2QʀN!;?e"Qg_7lכungj<3*l~Tosw̧~o~>=3b↯ϟPy914X^.YN5 |TQsN&=1D̵')^.'ަ'?E)SS{os!'^(ݿ~܎$f דww|ðd//|[ Rx4N84^Te @WґyvA7qT}4pn ,$v?3 i&:>*pqPeܖXGkcfu#Yܽ!D0<>w  ;GH .3[ewꝗ ԗLC\v Jퟄdkrqs L 2,6Hm\Y}g񓦠 ;$x?!4a:@H.zfYc3vSMcIcj(' hd v3Ш5ࡻ#7_x]+B87rMǟu A%_NmBf%['cBպqXڶF&fk/nz,*Iы˟<|⑏jMN\:Gӆ{?zPk47_r_o?/f>eFXΞ#'o #Ywt]31iQ輩,L@ZsSSIT& l dChVod6hk/~ F;d|N}Fs sp| yD(+範Wnm+6Šdʴ DP[tڨ=jRۉqHMWe~mCZ|g`}BXz\EŹ@*ooM_KUxtl/tM(ZU7'c_<1XZN$ebr U*Ba<\\(g`F̌0s].dg{݁ϖL3u\n+fᙿvs`]*_V8\p(ǯ/1T~*AP**g&-^bzX8@֘qXR>/ey-}"f|}r?H ؐΐdzB"ڍ`Ve^ B {ٽ%T΀YXoU4T*öwS@TeSD?l-2rYo'<6?`/ 5U:cQv' B9cRtb52biYaOySH+C_ڷSw}F.^((ǃ iO;nNCg´`㚵pwކٿ}$;HذYa3]Ot-՞}ub[n;O]x@  7òeK3atvwn wz;{N Úy+W>0>5 Kk68w;>8~ Lؐ $ZHYD^ՙAVBb "%4ۘ6iUO4QtY~ёT%Yq}̆!_TR.W@ :{܆;ٙ. B8Rǯwa5ű.QJB%ӎS>1] qcGssկn3y6ն"偯{>=3S9=tȑrUqU'`wT,Ϩzuۏ 3aǮ0Q#QF& -[nwxt򅧠Rui:g;.[)Y=K@g.غj O%սoW^;FfNj> ^ l8]8s:7pSXr#|ws3<} ~癿_/$;:E-Yhh&p°5pU[&$3foJ@kQYL꺁'p, @$iXˉ|sT ONϭחY nkBW>uҧ.9s[q)cxa7ySmד߷v,chcLH?HZ~wOo2E-j緞vXtNlrxH X9&q ..%w07O\׿N,lM02B@!j,Dnߛ ꐲ5B"6T+(,DbZ e-qxG%FE+! x7:=4%u=e̚szRU8A9.3EKb9{fD\YTGsV9eO$#skצ .[bYиSFtHlq@XDFM#z' Xk6vi``m?#?]89sd,ɬܰ|=,Μ</řaG`FGadvifYoQ*i=ڀ>sXY7no4T~;<1 `I8~qNǎ}lw ΞQg8=0^#gN p|Ώ Ptk?փ9tr\"TLo m:R g#KN a$333eӦP%D u0fuFҝ>&?ɩ[гnXnXۿ zz/" ? @Q$I/^/[Km.01}Ns.:h>V>fPඳZ 8z=;q(tUyx_ϢyʝE"8f18pO sr~9Y/1˳[3%F s>E9Wm2I|.AnHWحjY?+rԎ~κ4FڠÝ(R'2%󡒵@jq$].b_AY4nQ>`W7 IAn" y\+uXq/1^aխ3-d`* 8c%Wo_d&A-4Zk5iQ 8QL3G| H7ϙeP|f_bfFhBxfF0q@'%CKիj YPBe_Y4_*4q|PP JEfha9T@'9Iu?cS~-'x6\ Waѷa]O{yxi.|FQ!k)[|ݻ:21 e([Ù s (1i.(I!p|'G;߅X޴z& >6\ ,Xg.%f)G>NS;qº̙!xx-%̡+O󕻾AXc=VjVy,,* ԐN;iKp@6Bx<D)꜎tL/IJX,Z鄳B9]3^{eMt[U=BPW7Z)y„")ZI[o)`Ot:-/VY5r#u8壑8c?0{|f/({{ϫ'P a<Wg/?NU=ēnCw1 r%k;.v!WK` C)*I"m{,!Vc.tˀZP55xR=x(ϝVfI#p g>gz||^nKym Ж!Ly"rs\;% 3 /~Le% >$B/>V%htn֓Yl0T͠sf;,`$jAJ}<;ɽi4ZnLc21xdgWfmD=7?wc}8z47xl.^! p)pݚ/L W]ÁGa>7%AHzs잝n7=Jc/gZ*S t͖9'D3(X8 /y22C6pn񞂱a샞j/iZiG?aH,.HC#b#q6]"@#wIfg|^wd ؐ;K^bܰoR>%^9J Bv#S>0c-cmSb4 矊s)QTʸѶD 6tb l@o?ԴJc&A [jAbмLO> ?0>nv3lz+.+,#w?@YGOpoX>q3Û *Ӱׁ; QOLEr9eds5Ph71(}M0{9aJJǵg8v R]@q S0 idFaUPr @O [{pLƚGR^}}ơ9] VK#pt:DS.,}@@l R)`i*FlmɼÛ;IjEi)d̚ݳCpi|nx+ܳ6ҳ^f;wƋd~;75BQR8 6!g'9hD_0 11[<>&Q@kT0MͳhJ=@i+|olU"r^{V2RF>׸&)qt·5K7+UˠJƣt+Ĥwvy]&DF 2d"8%Is2vy#\j8/7; һsNu{mE)Ʃ 9#\H!ܘ:=x6u7_{ALϟQ5RI]a\(,'2@ƛo&saXj\k{pKY~o {" ӈ&h`uT:P.XA0ޣ!eUB^wlH%/YG)la`2iR,5qۃT!;糱{1JY橂Nu{܅{ΌIv0jEFKFcY} LY'1u@`l}nBf%\&i [ :UDÉl3C_,2QmҶ`=65eգ*`=/O/ ;*/`X [ӈGy>V2L8SajS_Hl0J]@>kEt?n>;8ܳvXص5LV+3r A_<\y0L>٨ #l7DxCiC:))k@ 6*mm׬\ [7ΞW&!tm6_ !y8qq+5czJfeyXag\ kUi ̊a6-F%=JiED+HA0bJtn}79Gׄd0$pX,)Kr|QޘdqVV1m2+nXZشd=_*1]*NrҿeTN\O4$̦8m*:ʩ`j6e.iO3-@J?V7H]ŒGj7J1p~Ӄ_ҳx}glx6lg?@R5Ts\oGote㌷ad]I.i20ɉCeʣ6\d $ \+>l䒆=C}Hغ;m~d&ﵶ!dbr#R1r#sn.ƑԚhԡTw75,@}Q{`б.TФF% #+U 1d 1E@gPE#3cPw6Ȃ 7քsY?y 9;䟧fjR[ƪ"gHuE"Ls4Y=e.c%2jZ?\؀VP?>'ppM`fjvx.;R>8r9}\4 _gaI u^}XNSf5{/.Fa^PTt(E/'e*=oCgB٨@J,H$~VR]tlQlYȻ7fǺ01U8qMjjpMlv7[k-+6^2u;E'b.KA0vRo)lh8fq㲎YhQvQͯ_6f.\g7WdyF֎q=E6/};v|x?hR`T(}ꍢ$%%8vGPhBB. |Cl)yx긌LO@gGw/,$S8/QMO4Հb5G3Mhr(.Ra>E4P)KJ]d0;)æbv4SXA7d&vڲ[2Gsj:Vts.̰?QNc MTfq#a|%?h"CX0ۨM_}!$ovxm۰}fk ؽadv&?6~ða*x~qTaϡpqqI60(T|gG`E!όUR1ChSڮ6Hx$q֊h( < _wܲ)LHᑛG@=ҳʑ=Q-&KU;-n!k2Mt,vNu0kQ d {,MG)Y[iieSt땚@'iXY@-s!y uT{`-a*fRz;\iđ9mZX/u1 %2m)FiOl P^i@YsN{@恰,e8_C40р67μȚ"-{k\{ˎԒx_9rW]*TȏڋAxag)bk5Ot9eWf|X(ķ7% H`TH%xJs8D^*7TW\ xQ"I`gzs8sD;PfNRIcvGA8n:ڱ8.Hܪ4ԁrh0=/P$ў#Pfqh*7d h#1q1`T/Ems m&ĸ̺"QJǗHX@jw@<#r㘜WwK>3#nnY}ZPG͌O PWF2jbW`$|2X3EvCLMsMص0?LbB)tR^Uwæn ,+Qxػ08vz*]pݲp!,GV'o}&jtHd`{cvp_7d2kهya_ bwC\4^,W<.ǧ(;m[oN= /${y2. ww՗_<5xPes{~텫:ˮh^ؿIߍ4q'}.SN$j0r PKRԔC2;vtaz vGNߖ!51n2Z^ɈAĵ.nxJH^p+tް^zie*s=Eސ #6D $/E5/…_=TQIx U\SoFҀղ>f ̳Oa1Dz?/d ,z *it#;.B,1e-L6= FL%-)9fI1bǃ~_5$ATMv^cId1,]-CkrSƉIGhYP H^\kIMYQgZb.vse%~xoï濁ִ;RJm߂cXsÛo}Kn[{`6h،[}SxA4apq(l%X4[Y>M2|X(Qmc'S6$^_ltȂ cS]px`0٘v`u2wƜ\G,Qӛ0M>&!~1"؛m{:' n'[<ڗj1Y̙)ed*J L0L̃^Ҥc;^_ǡO&_ԉ.] ^+מrܨ~#ʕ2I0Rߌ`pv<`Gw'n.?ua]󌦽<Ù75@pZyA(kF+Ҹ%LUt?rTg3MtWڛ\ZT$#bDMe&sY ##mZjD (D$9t⺓c4IvsrË  P'F2Y F8'a0'NA R [%pټbYڔRF4#4):\{65N[1-Mr{]ʮkf'*-N`VZȓI$+"h/m !xvgnqidl_dx]ܡZ1+F x-,Ƭk7.$15>`q{4O@oWpF&'`סw`7%Ka6{.e];_/>I~ [_ށ'~S89q5n)-:!w{-|+"K6=f~îLgj ȴ u8>'!UH4rgw-o9871L`Ք>64W Vω5ee (4BXVĉ !- F&fC  ,Y`xaycebf\Ġ171Pg)gum{$sY:%\;w-NOm;1@CxM֞Op%UY 'S'nZ9<+L@R`I;\DRI>,D}MOWڳ?Tղ`*tjA:j-L@k{D;FtglG$',kwa\'w;+;@tr wpxB|t:/ZßŊ>*̣Wbg+.aT뵚E]vbvRfGa%N"LBXCY!aRhə1Pnmt[^dbG#qfX Cp`~Xj% ? o:LѳpxP9;ħ^WHS $P P4d e!1p42IDL"M8ot/BB9<:Kq:%6 D@jVPP#OK"$K{_~.xS'?D˕k9eqBYT XR!6MV k!%RY!&C]$7L&. |Xٿ!,ӵZ,R{gjk"C2s lI:6-A~9ޭNh>_o7  T+;!Ky/d_KP - y9o{1 `zUh<,R (Q./{~t c#uO-߂`stcqNMig1SFV-Y|ubiF*l'5k`]w]&'XGdX(dAv a6~ R3B͡ĴtL-dM- C#Wi33H$,);D;)Ux$Z/[O, \$4eQ&]bx Cc:Dy!sĒ\%_oD9Rݼt:daU3bx 3>/ךD²?a6nay#jJ}p/N%8a:>Êa`ï9tu#"1"_iD[79!{+r\eIJW*ջ&YWxヲIpoJ4V$%15~LgP!,InR !3IDVAKR5ᱟU1Ik;X螯su(d n*v礂qB悗KZ(]x+9wm&0.;oWW.8y`ۊ$@0`jI\fu╱V*9gyXݿ #dN kj,ShFr=юKoG[? ~ '3OR +X[#"ڶh g JL9rQ0+8`cQ{ά)ǚ+yL@=>kVӂVZ^YP=>dp}/<|4O!H&Av6*0wx7ᕗ_.W8R>MCkgHC & 2g7dz氕Ʀaߊc=Xr|?PlrZl yi~`8gĢ( ٽ:Ra@X6r ,4FdG*ٝAQJTNLgbc?y] `/-X$"uvAOFuY@%\#$IƂ8Rr;6dתU%Vd,.\:mNM +,k޹iUd;+н37_x913yM~Q^fnw+xkq<!@ZܚB.Avv62HN؋=]F|Wtwdze熣q<$7 5HO@`c#IYcqm;w+@ 䐆q"`0l*HxAŎta O? x1^j:%fP  #3`p OSj$e@<',怀?{^ sGn"}j^NQY7?5$0(o+ X^|n]c '͸i_muH]ܥlasAs]&7xԲ6 {Ā~b;k,#G>2,T5L3m8+w3Ocu9l  "${cO@A%!LYA֭f+\DP#=w|XΘS,Lm:’ewtPOwn>RzŔ gv&k`3l24].}.f^^΁nʷ0c ඁ4yvs.',LMN@8i2qLF!~lWtx 6EbX,eLNj|kDN,9a F+4cco No4v7)̩y ZOpM3\:0k[Dem^=/¼j[ g %Ȕ$M$[bvuBj<^#q_:!3B數 sew MXj%rNק^5kja" Ďߣ"G7v8)L&8yohM>ȱLVK;Ë7$ʂ I!kI|'!3\<' N@xĬ奚٢( CW,Qkkt\'O'.=n Gy^yum_g/v;̛v{ Ug@ۜ;Ir\P*C٬8ɁOj1C_oܥH@H^b{qw#hH#z<#=ʅEsQB4&=+&)/&^%AQQ7-aC4KōXTi7/Gfra5*/`7k>ʒ,sS2p3ShHy`弥ԥ^v?.>;,i'帖F![eiO3lLY,×OMCpAXR/Yjіu˕;9 O~.ְdYϹe߭ąQgg&y1i%s.ߏk/{]Xwv~hxb/Z`ђ%o`bPj9hG4`QF]Uct(tS~gk1o< |q(;?fuI#j7*|LJ?WA=u f{<$I׆÷gYp8@oa38kPwnrnnMC䁦m)|_rɍ,L&(1;:?: BM-2M5|##Er}lL0P텯\Ah## +Ūk#HSR+i /8"`Z>\4ɍ0Q8B Â^{e,,8:l4@Gi]Ig`LS*pinz(;2@No_MjFnyO9C|`n_{g' OMB5,+ wfTj*Q~d6:Y_|9qb$jBcN%dJ4B'?ą pxxLqGEFq{lvόzğ5[pC٘FF'001E_AYH>{T= 5 P}M9fjI5P&i|Qk-6+hCTrzHﮭUL?s^8m{>. :T<0 gVJfcZ`jnrsAq{ k]c-9ט߂,=2K{w n4E z*`gpe0\| Ţ,W`0t<^wɺupipH4ȘM vh9"hDpVq;[t뻕8ļPwb!3*񔵚!w '5`O2Byn<E"]ɟiw|m0Wf21_NpR1~EOzEGVPbXfdn\ fqqv;@>fǙF !Uf1DJ lSHt,Y8Li%3fPF\eް)(?8fGD@n#a3C٩TWc/p&;0l0ihYO|G-rM{ NyI@CЪ-æuaWt;|ex~"&648b!ygo.,dGƮU\zJJduyhی$oE恪}\ M> $h^^eupFFޕgx̀33g?;äsd8ϫg<(4`Ӛh8XEDDgᥡ!ذu+t9귿McMv]Z{Y*_th%wj ''E˙7s=1.C'j;t!+TBo|C:E(s;<PE{Kgh1 ߠUu#l\zIHs0Mpf1X/^N"VDl zÌI5F)ךhA#BH8Bo6|=3TdP@ 1I*q힘!TJDuN}]-UyT [n cj)1i#Ny (Pq c (d$:Aynp2*ǩ=}q*|>6{O@vqbW7-@mue)gsnrRPȡe  Ʃi{g.p_Pr]($D) Nq֎k܏oזb@]qhAe/60t+3 m >T}"ٚC&`2 -KgG_ٽv.?ϫc\ϹڌfkhgRtR= £0u"xl%eo$p`tO| ^?}|;dž$;0ӏ~~8zv ?c} ->%;C*-FͶQ,t^W_'.7℀Y:N|{7aU 7bC37TVк$!FY3ƨ,HTAD˛5G(N8 uS"(tA˿K'6"OHB{ezFxQ!c_l*z_Z9&paX9o,^o]uiD즍6+JU2TPQdR5c5^oG/Li6#OIsݳV-ERG.-5z_T=@MbߢL.hОHƘ\/ӱ'v49# ?  ?:/ |Ow^E859; !ظj,g[O Ҕ<Д}:ט"XwO&( :=H|Ff=W(#r D^N Lf"/u2RWФϲpj0[~*&<痤s+S+@B\i\znI9k&RtEbrz?ФUp׍N0wEsF)Hls݆Mr)*y ug0{8$#Γ4uݹU<귂a1.`Akʎ]xAr;dGj:.CD&E^F)H~}KMx25<| ] FKpREDId1$ c4@/RqFZI(]p[f`j`yQ?kQW@ڱ}}0/ 0ICiFn1 ;SZĐ$R50c@_zg? (3' A31gu8ȓj 's?3HHn QrSRV3J^I!x]P-` >?ԬL~ =L–7ҳ<<k׈1 R} u"8I5^6iY~sT},zG>0F0zUq 4mܱߵ-]}#8ؖV퀎JDz$cjE)#P-$YFϝY%vdzqE8[/QwR +l,pQ`灣5AYw\79t=KZ)KO8Ɂ]rg&< jRN \r[c62 1]C0lOE5JT.e}`i"!eܫ]8 _H]LpJf,w *eG!YŖ]3z9˵jk;f%,Ûװ^`2u[\"ԋ_=u<ޢ 8l?Ҝϫ?z#M`RK@#/Nr2uyǞd,PA4NG40*eNzIp\`=و1#4b~tv6R/(Āl)T>\s-ʡ_P{2`hA ~A9/rLJN@gAXt^KPh}yj> E ffƲ: b*14_BPJ,˚)9SF¸ Dž]Tc69"7=XS+%Sv 8 K;nU\k~\(I'cVPG00HgQ}A@㎂ "JՀ&32:T.r=&X ipƜl# wB aY?j8B3Vq׆NtPg\qhH]DW h75䣁HyL`Εiok5na5v;l͙ϻyMi86S[,Xx}vq3R[Gt=^0'}e9t~x>owuE({&ˮJ;Ts(Q6)iۦZ [O_mw8P,R$DAH ra]7 QBV=g׷[K'F,HzbD0KE& D\\}t1.`4dn Bkqx;9/|Kk=].N7 @ ;Q +:L0ڰҨx:ތ"j(rLOΐG59hCgTVyu^ l5KiOkg 7kUO9k,:C»̚tzϮ=~2 lQGҾT-I)i//5D5¶#*-vjf5&']1Iki6;lI0HmC@w{hik.҃.xg)X޷MMcRCp mg ݤto 8u!TzQk2|c:ukk~;^;4`t[ &ichxÂX?%qð(Ox*Ƙ訖Yrayd+ڎγ~w֘GqfN+ "$ƷhwL#c}QD:qAs7^y?lmowY Fochů=_hDEGY )fƱیh>_P;QE4[P&pv@e|[frGM \AQAwbvk K HrmH̴~0'5.8NjX! ck61E0g'I8S]C]#[けz(QsÈ3CW237}i8'zE@,&CDW =SKj#{=xnR-Fp&9ΩLFyH!ݨ A??[i9]޻JOΛ:f9':ovlc.%ٓ>iS@0K*˛Q&7%>3ݛazI9TzsiqEOR݃n|&f28j5tzzJ7yW ;2;E8;3篑}SbVUwp'OQLjO#8/o4hr7BjEm#NmVZ K,L6o :W idls؛ooehRM/Ey^M4GSU#g?z~MHcql9YeEdgvuk7h1>!szL tȠTcOϲs?NDrsyůs9a1u4Ʋ'MH߯Χo2 %>֛XMnjGzg q]ܩ]_ޟ:H@_a&ƳNBۅȝ|^t\˥LF޽]i;c'!5.-#zξvѺ Q\o؍o+# ~t'O8eNJNW*;N% ]؁gYpZW?snR+O"ꚡDMՒn{tuD]s-J[ӐcѬ$0eS hcq2Kanmytqn{aLJOi!cHܑa MJwv@Y.GR@d[['5F RF)#,9v.,D+t4]f?Ppl6.oA&Ft JkfB[˃.{ QUVkhT!#dCka:֝Z[U%@ԙvU٧b{܈ YƜܜlYQB7 -l?K@UfqR1. |k׷:ˡc<2,7mIX'jQt<ܥۗ%Nh1#&N)f]bV'{aS6fڜ㵆ѻ=PKٻzK{3kSX=L?> 㦱z\g7!y_0R,W_Lٯ)I#:[;?7waJ*A&/mxγIY/nmCJw١?Wɸw`)hi ڂ3'mLZ+do}k4;mv0z3e?OONh˺~sWr2k'\6W[6![1HZ ݰA=f]rmUՑe!w:? 7QB)WЛ7 !S b}Bbbv.1,*vk!',.X#`Ň@UiSI锞KeO+}XPxlLV=LXo%ӈ~ii.OGwqmQjaِڄR 67ưYkK_z0ڣ =12ᤥ6GM%Ϭ0F_YPcU1?mYZ5!67$lBRk=ZoAi EZvRfLWVG{+N륌aj<4.k|^[AFӖDbX@FVco;I2W 5=v66Wm~|NJky*A#f5qBmTљUlFB2M.?i4?VԢ ef% Ul|k l$FAmj3-&bWv/.MCAp&= ߣN0 q?))$>LCozIG)&WxO ]:)0/6=oSfߴgb^փoy *7/kr/sDxzHOv฼um$nIi1n <%RI~eh\5ϟڵkZaDtx XTPߺr2҄!iv+b]=QiOtLq7Ze94:#][Q3la:̚ـeC;˒U `вy2mѥ tG{gGNV8Twm۹hh1͠˼~>cfiMv'aIaǽXt>lqƉ8vdnYHrvT+ךo"t_AF[HtXL@vw~l<h ~BWV1eJ6f`E[ROyuݘGdU -U'hI]ϙYct(w~eᴣ,J[zƠM"] _-։3S##| JdT/{T o] Y!:Vid(rlD MȒEU:IF=3z64V!8v8yu ]7mmF[pn4ũΠixMh9hi$374sSqԓmXɗr֙DWy:9)3}9էzsSR STsUM/2}Oo&X n9ju jEG7?c EBQ(h#x';$]N;jYL6[c,;'~˙2CK^|Y |V fH7,,Zc0G2'2R̢icA.L,&F1g1K ѷ F/GQNJ&iխ=ښj"F }I1qk`C1Y׾-(bt$F =ڵiPA1^̐$>r%':fZdscVaTib'M;id-F 3e<1l-=_3%F@b&"df2GVۖVѪtn̼׌Y[kx=1ɶpgo?+QG @ L5IJ۬a˹M~?|1V1iר~D%uw4wv3ܓDRoE pwT/eIS;Dbɳ4MD;35${WΌQIp㹼RGϺ;HB7i0}#slGma9kz/?Mt<{6){qÏS&Ni8=no6Mi]TxGPW՝ # wst/8 "E&]䝶1~!e&\}fL"̭ck]v#~볟hQkt&aX`@ǹdvo/+3mH &YN'G1'+/6S: pg֨GpC~r2֛zQt?g#cLT_o MAt <݋ ^-.a~ -EөHo͜,m `Ptb#9O,ASɸ;1 ?ZkG7nL#II.^#2R6,dD.=7€8JlQA-~HϤL:LM4ݤ|6yLQ)R޵M7>rev1ZAJ1cH$Mdbllk]l%NMF%]LѸ,,A] Tvś܀ }@Y!6 ߢ3&ȘƬkD'v'ymC Sߒ>i8}ېLzKHD#ym@,pzFۛm|,o {Ã1ˏ75&W{|5~~>^f_C|iKHSc6Ą#f(7юmM%< ᳢^,o񒴁|l_m~J0U 6s#UyQ~w^OcQIߑE^N՜/p{A*ߍhBX(~m*6\ۈ Luq|{Ǧt47^ircw!=8jk`U ĶNڬ;瞤Wn̴z=%2 @m,)QE 0 ɂe#S3>I;;ux@ރ)Қiݍ:ʹ^ƌ\fX"2T[SMfˆF0"zxXM ƧVFb#̫%ʚPhQ1>cLI殒cM7:dfxi^R{Y*Xx_+yLEq[ zh.a31C됬vj{Tu(`t,\O۬O𼳰R #*q6Re;ڣ{O:GA7to< s,Y "1RșH|S{7:u#McMA>=eQ#S&Ԡ曍p\O&մI)N{Jq1TVzV[wn3>CAoǃй]oc,O~d#ucsѯ|?{mMs.ځx{t' ^E?ݾn!-hxLr5M7N؎8^踛|bܘbwX8uEz׎pܨl('upFw;3U5f]!FY▣FYQe "S({ƃD ~޽pG [,W;n˅,{fXiGu `\ăiA}t~Bh`vSZozcLj3kՉu F4Fb hF(GEbPr7ݼLdC4{1kj3h3cH3XFcyAjA7, acƚzzn>zߺ~cp؅TtݭFDw~UO JֈVd}m$reg[sזEܰT#Ω| k&K,X QVJf'aҤs{*26KmbPu^"vñݭ mNXpLIob`12~{ݽ_=Ç1|O ;^& A.c@< -zfn'7j k3 \d3nݷiݍfIdqwLʌAn&f=>]Niи?p"\ܧS fUۥ|GH}e-<ql|sg/B"4p]ԍ5v=h.9ʨJ:[fJn*qZ%D,q>gfir+܂'kU}u`Cٸpcib 'SqBʲS[i6idh3n2XuhoNe%I χCc`oz_]Bk>Ki A]\O(#1`:>ldYt+g,sۣ}U [c6f{ TNuO>@Qh2ӑymkJ@)ԚəypءDG="y#uoL׼n-_3}'VXb}_;_D셻[{ty6T MlUkmlOu|7eNt{mSz;Ț$[s2HB='s1p\W`5;pof Ӷe`C8IsEU7ܸI6<w55v1-(7l;9b.YirOԊSÆ!䳮dCo"q`)Yt$<>7Od3pFr^S`AO}laM=TA٦!ok8Smg^Z6I| &[|\޿:Iے-r(:Q2 Y c l/OٌJrk3d:矠M4>B 7x"ٜL6"5x@>@$RKfx> {乍/\Ϊ*-YTkcB~#j;%X%34S,*_ ZKXyp;G75țsG(+xt~q$~j*s5(̑lB**Ac,V36 }hM3s}efYյVY!z`)rkLSEgch; &ĊYفݳ~vC*IcLsuNb)5ϝU7̪ih?涡`$7N6톿nm7 $};"\i;7uǛ7<fʠzֳ|)[oSgB`7??fx<6RbƳkGu)}C^K{o{W5ٱL2ɉTyXOL>mVoĠsF]]YFͯD*11A84S1zt9Itp." V%Ni DȊт֙Ai7fzދ$I.hNocÍڷZ$Pi'euNgUIQjN6e`qKGܽ~EVǫk`! 7oժ\b{|,9h{NLJN)QL]DJP :3gBͬFf [R~q[ ϻ}Ӵ\խ`,k*Y5<:coi ?΍4$f'k8ƝMҬ 4{CNoHI1vܦSH?j)O|߻q~J9t7tX%>dHRtzxxr IDAT˓;~n[,h=<#Q8 gT4ډ7ڏ݈D2 ;WkK^7QXҋ/55"@̭ɨ`]\`\܂&3=R3sGAL?~YF:1rG5yIl>\)ʂzg?X1H;3Sc ;Yc{m$l 'f:[p`Fnylw 琘Q#(,LoR|f#>#:VS߂­Z*$Ƨ-fDz,F@yD$6qNq>:ħb^@F&\Cᙹ\MsTG efh"BU{ݴK"tn,'1PQt;gy#,}?;5n Ǥ@ւ׍=D{a =(n_=O[3 tl DGId}9c 1M4[-=^03>&MFv!QZ~0r)FZ& BFtq]9};NSߒ,N^s8XiFxz wjQCy3ƻt^׼hu^MJܕn3{x܂uYi5f4>զQUy ޺C/ _|~|p i;oKә ѽӃΏc :p؈}v}$gW|OjYw{;H=+t8/>$\D/oY{J;e-N±w6T3D X||?pvůqa`D΀q1 cQS☎)Chx1+a"h4.k֑jH ʶU'*b*]滃- TrA ͘Yj˕̢3Eŕj%\} (9[MC`s@.AWKnpkX@[˫lY{)b0yY#u.xnrpzTS 5ӛBe9U&U=.621m,~OU):HZ٥%o1L013*U Bm'٩+cc8@U' mbtRعڣ@$k7WR&35uhb(|"<˺;PYpd:xd4֠%UNPm"Av.?l}{msk$4wv{3&Яin&gt,aij&& 'X`>Fxkdgx#׳)0?EF&o:J\v*c-w^|'=EϿ#q|Gݭ} ]17_p6̸0dQfOܽ:\pyqa}l9di#ڰC&uڊ_|5lpwփo| 89TYcd2ߕ 16Zuƨ]ASrGXnACVfr6ӟAO7T^Gl:[?@炚cx:7*j|;IxYV؍,Rui[sU0 ɢZO# 7s1>G9QYX2 Lt[u&E~W)_tTsQ?BCf"9~9mґMOC@1ݤ[]MP+TK ;:?4=!JI~<)Ǜo~oyddH.4g] 5T(g`+`ZۄHg \le0R(]󔗕Z=?c֧{yPa\P3i}&L+y!dV]!@8Pl 5^kJ2:<ȡ38ю0# mhF}l-mS;~Du.3͢ڝ2tgӑ>?#k?,&P(d316Zؔ= tFt~V޸{1ZǥpH_}7/=CxBۗ8dea `e֧vIwbr74<5Agge7g_[øL}g#@kL /\vqD~v+<[*8N7&%fMh͏ei+̄ E2%yczs㵀tӈzJp YƮܘRexʼn{}p5 6#tG il`?n.UT^*_2t)@ Rn ~x.;r3q}"2ۤL"l&tarxO׳?xFaX:X.w8}Mq:&3k'e5;5֢(Lর(r$0Em zOJ6Uzpe\{Sݧ~:sOӷ^..h+O^C`R/S߫^o{ͼ% gbvnb>G_AMgеHe,\Ѳ ?/ u7͛@6p Flz8N/|ƻkhcF3 ck3"1#bĒ?,d/|,ШiM\[X=˛{eub[.yXXÌE foj8|&4]8]w1Ğg:DYBϥ3tt4?-&4] J̲_ zP{ObWQa,x$;̋f!@ ;d/u:fxnoU"I ]|4 5Ne Rqȳ } JFa*W0R[kkc ΑCh#|V;Vؘ)SW\Ǿ;7*3G0jڇBM Ka;Ix]5gfRl<QCmljⶪ$QaXb/7uv[={9(snsP6n2YK6sŃ8l(h9T9y֘`?n6cUjcjOG)́LsS0bKU=Ne>rK%Wk~·oK_lճ4"ɦ&]jn?'"8Y.H5uOvv"M/ XBb&cT$Z8g&)cT\ k*5|Ke>k3̘G6O蔳ck| 7'mSK9i`R(N&5,cw$}n (3h~*Zz: -W~`1ل$D#GaL%L{ofrـR$LC,2II `JE1p OeXEZM,0`b0(@/i\J<׎UK6kE!џυy#*1+I#:j$3K] >>mQ`ڇ}kxZ-VwfVE,Q#sKZWzԧstq[r_?qhh#u 8Ol^ӛб5л7[nFJ'jS+`ycLZoL=]SyWOZ :ڽ6)2&0 >5=3QMx[1/=o̓>~S2kŜ%us,{6wn\fD>LN 6.@j=3tD||~rQwE9/%G.ʧ>E7_~f,Nx$FsC߇G8o_sЙ,- ڶGq<1=1E` #nhކsGAg>C/}qx-7TlKIE6e`X<:׶)d Z={՘}HbNG: _g`NgG pFL[#Hr6kx<f,8#}_io'>g{Øc ,h HL@^4qg+8;31PX]ȢZ92Z0I@ǚ(sƙ=4mcJm_4&f^++&e(%,A k&7=fK9 Sn5 3oMHz<1:. a ,۴zz^WF4`{P#Ǘw>_Y8笡(.jLܙʢ.ڨ6&k@̚Yf+9il9M5H%>;;{!lEqnIiF8880=qYA7X#:7[#M,f2_;2~4\>4 `uޤͬ8YK/)HugE5y-/RP,W5ݺqWݷxibJu[<9?-ѽﵳ涘XÙG ̀ePnb?Hja"l]l]y ٟ"ʁw;%=~rF`wx{ 97P30xtG'B0'vo(ǃaXϺ!f9=oBenM:<`s496]7q}j.XJmM(yv{ʦ!ux3?~x$BOLS]o~6!ZŻoןۧw^ؽ4\W65>[Mtڱc-V'Oݽ^Ϛ; ʇ6aZn3e97 [<ͿSҼinEF.т<ϝj>Ua -hmG`S:G}6\&F$b&ƐF i䓶&bxM`ܷ.5 ņ,#Y=Lj-Q]B x|2M ɻLV96D@-=Ga0,P"0u6efx]KZ+BsϴȢj*$7\o2pnVt4f=-BbGs6ԗ}&;4,W~ɨmd,)oQ*c \n =\!;S EkQI:"j #("] &rGSI\.+bzFՍѮ YW ӓE35kZ4!̝Z-jk%eӥ#Pxɬ3PYٷ%즵  NxL=Y PKfvc{e4XQXD֨^UU|NTM i/s6[`iPj`7Q]"(7M3)5>dD2}&߾H&ig4Q4<>3 ߣhg@` &!G~m-v!iEe*yBZYfMy1Sfܦ:M 'dQS1Odfz!K <qN-ՂVay}??)zkqyds'c:?.=}P6GŻűH3C9۠߬ T6S0S'r=k<5hm}(08eY82ۿM qgåhȏݨݡ|QcN2٥6p󿛎@~A#>0.?>kWpO(\;c? _#gٝžSh8~`v~f{_ IDAT&G#:QϔǾ )ޣ҂+T{"=gtm 3(bqh=@5'1٪.gr}ʎs͗sa/3vs"skZ1YFW =E/D0wlV$c^o{ZoTMc8R)YGtBL۴O[-*N5n*:u#pf nqD},dMRef``-ϲ iJ@-n!;㙻Z8oX:U,QUf{z{/#+n?1ƫU}ڙ0G5p:MpḠO"a~(ط. s2Fv=㐛{ci<4 7Q,NF]ZiuqcU'˝9̄DfẸ̑xfvqa@Eq|nUE-6l~bx!Cb!fF`IE3NT=sFb۬́O\cU۔UG;&4^gĄhBO;\yd5M&luן 7{Cj\e͓TM^MVkeI V>>.m,NJ6+E٧qo$ 坋;Шw6oM܀'vs:NdXpF)= hbrH+qRo4=5ؤ{^(zvbGwoawoR%;8Mo)ߋ?&cS6IHލ>O_7?\v'v/ӰڱhD>#u^ÚS%ojOXhg6\:Pa4&Wzhlp8f'QOs:ap&M#|իt|6jwxKX0`*,}07u, 3|qz[Ϯ%Cl^^ʹ҃6Q?ǦQLnWǮ6`@o0`VѰ;3 G`ֳ_R)}16I%3.23@6%ai-(#Yd^Acg4X8>ܲm|anXml:kfE $RCAla5pQPM;ļԠRdz7uT"&;OH5ٔ>3u~{`gRз]d#tt;=?v!oԻkTcG^ۚWSs7) S)#u~{K? >E?ď'4$l`xzk狹 N ~ZGwZ<8>{2Xu ꌟȤڍcsc󑠓\=>ט_p|!b'ʣ̋$aY'mxb| dr%ɨMfkQ3s[G "d^$o84>w_:b$`1UbNaO{6񱮛ljxlYؔA>~NwF D(  kx22*~h#meu4vAuw>]#=Wc0'J 06Nb 6VaN#_F GDX[o|Hj%4_i#: H-hفio!\4ؼ"++Kp}|xEdd=d@Br}Nfp\[*ԵZA"Y*8(,aCX)ԅf"τV-MEMwlciADù{v%;:lVfb,Gc<%'L0iw>NuH=e")RaO+;Ś A~hz{}SUX2³a.̤g(=X mUO{gT\e*9k5=9sG;y΀tyJMa>LLܺ:\^@2OJLBfh}KY1|?Z5BG&{XDޖ{޼t 5 0$ -~HiR2@amm?='bcУ}oC>jgt}hil/6WLy|Ne1% fARY[㐚4v F]N֑`n9ǹf{2?GmS 9-3s{cUd[uSC`u4[s2˙Qq̤NsyqTHU"QB)Cz:fx*+Ѧ5@:GZL`jMGq8F͙4 jYY9I@dk96`RtSוu0e3Ț<8}'Z>Gwg"~c$LNJMtH8 re =,~>fΚ]qe2@WfS4aOWvhBRFEvcd IJDb\I7K43mNٞFy|S"H:n2H\)&x`I}g=qRqc7x?%6 `nշ yc מ}҃p>Хs)NnW locʈi[7כEH:R: j0=ˡ~MD`~l/gD)#>y/<ܿpi)ƐXv^wL;]Ϻrh״XtC-F¨œuF`e:mLO# IDB4p*Z>m(g9 JPslЈYWeOm5Lf}l!=aBӜMF t>lɢU :vlD]i v:-=qTW1u$XUob#an= ?&n[ gWcJ㕁.ZJt* v[UhCɎw y[B/"zv1BH ? 썕Uc1:^c}slkZ^Gt&P5zIs >RfRI"^I7g%:?9'ơHAmCh,,'NN8F@)7/1Z[\g&IMNl4|PNs=Lrc}E;w{`D4$>3O0_o &Dzq#uAs@ٳߤoi4o^$8T=[%C7:\^_۳5s!uMzNR pns~0M经~Av޶wlu8AUX(Ν;'gSQ`Ow~aww%iv4<Ĝ"h9vQ. ~4ǭ ?S)\:, lʎOkд|@̠O͗o5;3 rlw/?Wɺ*|Ef U@\ܝ2vvfD\ZsjK}40Abak@pK+ NJoi {ʭs+NaڪbK=. jo ?bFHP@i@997EsA٥:Na8ÆcMt}ӃM8ѠG>7xP*jςz=}=3ۉ>!-nq/r7l0\Ё~u~STg>{.<9~.)?;}}#]fbalv,>.\2\/< ]rŹXHI¢e^9dzϢsc f5֞!iZcbI|f;Ot"tQ8ֲq7ֶ>w͙*!P4kzjI?(+kj{_??~oe,nPZxr6clf\ö3M,87̢ӜgR#wEVGrqiʜ4gS0ίcVH~R[P1:վ, xL:f&o4q,IV+zZ99rL)cftђUn~2/41NՍE)D@q[r֘L΁$D4,T% 8j=H BY~31PNj Ҧc T2LkV' i,UFlIXco,47 `(,'cs.Mzе ?/Hm*ks3%g"ULR7Vռ>~p{0t4(fuHݳU23 DH}>6=f9߇ w.p…_"ݽvMFQSR ) מmrgqÂuIqb`ܠ!6G$XFT51 M%Roڇ08si}kuK\F:&kq#2|aqPuՔi R#Me?5Ğֿ ?cq[SKߥW}'/2Zj' @.3ؚT$'ig8^y,,+PHc#6M&%L*=5Vp4z:W_~uFOpOe2H]lz]JJKX疋Y}|iɜ@?é~j9=~f4yqhS$RzqA?~}ӀtQ#+4&StcwߕV eCQma؅}׮[<.VXlqM6 V.NW|a$?ǡIE?gѱ q@|}Q0|$}b{>.6㬹(Ay P;N~Nqhf2{ԷeQ>OWy?A H6VO]7٧i㡑nܚb8;0u9_+Xg͠7 rr^m,<5֔beLr(c^(sVʆZyi9msGI^($il,,uq*_F[93[.h k4\EJ2N"2\ՙ *h(sÅ2"T+Jڝ" @E!isk>ӎMa٢l> 'O0ڧ;Wy Fq0XM7z^X,O<vJ7욆ffZ3LB+ZBJޜ< Y`c5Z *+w~:>=\EF`B )&-lyx1EE= OݶM]Hd/-c֍PH>Xїڤe=4֊Dig hm,.,~;m)[RT<<7^4pAklY]ɳMؿB-KNX 'bΙO4^mejA 'zB\̐;2aQX:pxNtɣ9caTr8ƉG17icn٠26Vƭ _ :l331⇪@03#Zg 4V=!i &2W˝QmrFc ,4k]&l4Ktq4 8}$}:'#u6 i'N B<>u0qNj?h޳u^GiScϚ\ȵ Max>\ިԤsFl0$mnއg)Z1b籉٦#l >^8G~5go7w&k|8.qo8S˚"q39dq,0!4 TMNꌿ7ȻӺr>?IsbU 'a8  hs>e5mA!*󏙎ۤd7ޤ/޼f+ X4|s G#"6yZ{'^_^oO pBù7vD<ݩ&Q%jSݏf?K?/W嵤EQ  0 |sc}r[jKȈ_|No:MUHm~ez8=[7oTJ&iz Qd~ ׮ѸJC5Azd#nT_4\BߗH;nfG墟q樀6z)d"X Z 0hY\M8}^?)"GϞ ~!bj/d_y+<+yl.$;CT=ZS+-`3 v;]Q@/ZŅ1@EhB)XJ9Ij/|hҾ̲9靱lrFǔ1{DU< )/1@:ŰMJV;h3 kg܀dWf'ci0ɖe.4F3`pN"CYⴖ`%R{ϙqTR-غA<2N2UCRl Z膈͹mOʒg f}6j[87kM cbZVAHRѵ x ˨x c -}nvsF-fɏlpvjo ~}\;ҥmH%ʴW V \z;5sLu%Jm9<^{ŧԜu ::՛0z'dfԇE:x6 yovDlF4VD miՖ 3,;Wi84Z(m<ˎh\4H6$qh<&Y܄[=~ :&=ڡfw.qF4RNZ2gJȯf!"2.`/isNBKp=^)\"sPg6 69 d6q eH>v`k"wI-,\6sWϋBZߡi()k:s 0v0Ͳ|>6`H<2t`\ڢ 9Sc,0K,. !A_ř!: h,&=߻z2/`_;-/{-Ϊ T&i_ DpϦ(id!G˅zX0qSrڗ~w/-,O\, (85็w=#z,q=4uwD8F $KL:ІkgGa$#H+ 1>`l\=dNdbL؏TiHbZT1( W5mЂUZT ܄C8s8[OBCa;!sց,Sb84"(Isҩ,LQNZS~} ڇXIi2 H= ۥ>%3] =*̗͍ؠ殅b\:̍4Rđu ]!#k( 0YӠP;}ݲVfv?Hk8f#y_Kl ߇ZK PyH̓nצ) E{'"l7nOx+q؆fբ- ΤKFΨ`%5Qo?99aP84bSr8gpkѝ}UPr뾙`SNεsu,gs=sw%ӝ Vz#?bwR1Qo~Na̢x XunRwc.*hd@{16q/44G/Yn Լsn˄f{X1bbeu/W!r02:34rL2is^lᛏ|޺r -P Ǣ^ثXo6¿|OkEdySbpr,Hf+ Dfl ҄7M/JػNOBCZb"<':YO02U)=XƎwcFntM y&ЂO{enR1tgV@R5kENR'Ҏ9fLbW\,ycahJ+uV jl5vLl6䁂Y#e@gp 3Jя*yh $/k]^+5$@؏ZJdTi 8R! P^?HeR B^k8WE#ڇ'֛o]|^L1l7H5iXА:#[t08G+A82!2}5R§BH=XUfOiFc5uW1Rimsa %-x6,C8>>?w}&\~8)q;TUh#CsQ `R|{hQڡnIQ:+Tz?^yed@ g5#(aqclA`?S\XEN̟.QF6<7߇7 ^db\qAv";%} ~SPn8]9Ttv$Lq / ufnE,'?xb֎9Кo͖eqwkO&)6k͑p9:h~煿Nd~8ճH} <=1a$_I+h_I9:(gi1:d$: hmtn^lCYb#§RR)yy%ovf?btg,o?E]EWEQ.҄36 'H}knA/`S/K҈='AB:/>#_5ن: Vrޔ.r=UEFg/;ܡ= vdI9&'% 0x:aieHj嚍842Ymr֧%(3 R4h(f͑N8c6( g9GFR8MMR홥S71~vdpՠ.t!gy6֥h r0CPRO VSI*QxԂT~K=طy3Ҏb:싅2N2B])7`y27MqFmhR=.SLWaj}P9}]>z\GrퟫZ<ߜ'0&/̣cz;}Pa+Af'u4h&"!2|鲐FRx7h[C!#ڹ({oR<ӁeYqQl6Ov'nCgpG "DXex'X D#.fIz_\^z7xlDwmPd~׿] X#X KКM[1b"l(-+&9fbEN#:x}Ĭ;j]d!.lEpqv[3*mZ>:%bLLa8Ž~t4S]w#G#'YG,Zwu{}@ES~^^&ٜZ߈kPߧ6]i`H#9n|s'~׮\}G 1C sCS(ԋ =8\ɬIwo:(3ݐ}pN΂Oy?Vo d)#5lWE* >gYv(fV=!۩Bn0]Yݲ\PX2/3U؀[qf}cۖuaʂ(w2Ϳ/H )d3Ѽh+D/] x7}~ĤPI嚔?5nT!1g`?5tG3#Vg7?yྜྷ/A5j0 fÕ5i[H5ř1uFNIAczLEdۥ7[&DY=$π&N"#0}qEdǨsF$%AZ҂^IJ(<h#0vJ6^LT6 A4%6#Oɋ,b\b'✧$],#Vju vg`E8N#rtKېka8[?Obd>*6)SYuͲj볫QN1QItj,i]ͫӗ9̓N Z"\ \=Ͼ}><֔ͦoZtQ2wSJ~c"Ɠl?8t̹3hF#XEZgӑ4ibVi9W]k}6RiSEzLčԀ`V &-qtrG:e ' ,4N]g~JlRmc {{^48E"7#R\.&gr/@u<3t^yx߇~ 9f6̄VG UB\) SYKphP6|m _!k. 鐃mTnj^`AvF VPؼsm3mۙYvGrL6sl5 G %)l<7,)X0JLh`MTH$K:H3ڴ~Lh6c4PA!=[0+-z.K{a9M&@&UZ(A ˬ? 2rVhb٤4 Bdec;cgW5qZN4 5uu$:N vZߩ:O B vi9>eh}naż" 4sHtмsM?Կ>h (,* qoc/< O48ޅYvZ94Y.ޚϲA`xr|3OiuL C}᜝߼=ꫂSLtP:>Os/,YNta6qg;d#+@mPhk2tQrg^flUNL4$mBpCMB%.H_K#P*!ȹH|ߔ/oO ?1~F@R+]hZiF iߙ?}_ޞvb߽w7y7m#lۆROءe Ô\tfvw팗?kOq7={?l6Ui׉8RLj3a .yoé ɩc>۹o>o8ĩx~6Ba(F* {לTf[;) D]ɮ%Y<1=Y b.%HpѪ[<1,Yɽ.WjH7'i`~]hϟ_uywҋ/ۯJ5 ͦ}.^!ZΥL#b̖CkVcg|2z7| ?}L{nw<U?$hPR P/p%hty:ggLN l;C2 Cj+-S%dA F"y^JTYLJDHfK:gw[sopoAIcli b&#<.ky$ }&)*SEoDlĕBvo2lePx!@`blAy&!W̹Yr6ͥw|Yv:#Wkۆ>u?]6 Ѹf585`ouNH/r{8SJvHQMJS;s>47~ OS|xwa'v`43qÎm0Fpx~@>G.i4S\ٜ)ӏHJsU37k <ۍփSwsDyR,^H8S CbgvxcY\txK|iBї8h;gR>Th܏^[.>>$C4dz?_X@ ~* Bk`F#_jݡ&$sqUvbi#zf5LF0oX%#x27_>-;?z *"M8 iI{P,Fp v,crgHH/$ p (ƧlRXM1+b_2WTQe t$v#ȑDpLUdCjnxkas#SW #qY ԩ0(X֓\wrp"'KNuy:?fsFWGXg3 IDATLi hjVv`q *74T5@ 3V(6MߑFD=NlUS>éA>3/S41iF/~0OdJYR5$Oq%I;aHZ9_:Ju6SjW_1<'hӀͻQm*x] y2#u\@S7 sZE/?_o웻_Û7`wEFi& :[{nA|j֔Xp$ zmߘpXW/Ϳ}g=?{s7ӆC 6o`uՍܳu|܃,#Jgq4eFrKP C,3ȨZ /<>qԾUߤc+G;c@zm2"sNbG̴oDZЙRu[/JrܧX\tԋ;uCTHzWj[< "'/&!<(<^ETZ[ \a:5Q)i3! E#,"dOK["@u2ŁfRzzev6籅aX`~5hڨ5FmCUĿ:z̮uϚ "ϥ׍US0QԭEs]vhiD}[>h5S*ۤ~߀Vv5N=z4_JW 5#=߇^pm(pOT3h! 48x#>u^FFK} EZ3 3^nLCy jMyx<OiPwf9>7?H ̾^.y-k8PJg|9ă0Ѷm I.C _bIfXӼXPF3% :Wp‚>qkdc1VbT<gg HhP,RɼVMhլhD-}0)1Hrwq:kধy}yZO;W2?5Rw˶_cRcmꚑZOk]?MAgk5tE"j| '_99<\ڽ Oǹe@'4gNG',޼7i(Nysǧh< L1I-}s!`5or5lWE*:N #)Եˆg׃{3l)|jw`9tZ T"IehE!SEȉN.ZP@Ek&tb>?>2T~"%`2 c52ed+|G ~l$Dz߳x[ Oh܎9d>2]_|F{|viaf` ''}Rf Xg `! )*dW8F;{C֣T(mh,2 *>L̢XYWӘ`}iBP9ǤLEt;-jpy1bq:1j$p vs>~#5{qZWԊ S)r,M13ގ="W}"qHRlvQmC]~&T+UéCz+z?aD)GG(#=_Δ:XY}5کGysL1 ֮t=֍KS^;4X`W'Z2%o6%z.y 6;%j{1SKoݺvT`,8Aoء!3o=s;wDZ6 屜H=ϥՖ Co8} <}tw>@^`pqGks? /]/~paL/p"7^ьEDR*$e /zS,>3j?\J{~W}02 ׎qrj~r],,䑞P"T=o]i9Q2&=ad64l5M0+kF!LHv1ϿOmxYLfm}qpF,wiri|fb\T"YFXeÅ3GlgDPgLO3 !X[f7ԝ sv%je2@7f,R#JɌzӹsSrQCkpf,}&4M7uhUTodŪ<^mȯ &}gq걺^|>lO^Ü}ދ^TE/G+ZWu~"J7vw'{ tMߦ܆ ܨma ~#s~;l[Ma4Gqw#{NfW9U~}\deq aX1 w-i4u Q]"EG/j;R:NUfUxb.h}+p{]wQ~t'W/_&FYZBvo4ucI(t/0K|XD?YkljcX峰#܀h`3-\@~f)&*_8 j9aT¨0tڵ ϿuWn^Mxƒåd/2WnnTldb1Ré81V2xfѲ՝3Xp{UݠԖ W_&ԕ.23vrv&2jm<&(Ύq/#E?1S3ccm]JȌ7Jl6#}5X83UM8: P/GE GYRŲ$>? r|gZo +qiR4<~2Rnu>u@߿V@Pt 8O#ۣGjv Y&RZ#d/ ]|.e7 sc)q;$p2t<1OAhomHٱ9 f1:>&9͹vHңt=R!?NGkE*Y +Uy}zժסIߓ gBtO_/pjJ7a%E)G0oZR64ͶX1 6ۊ.n \d0+P_<=@FP!;E +NlA`lKWZHѸfeDؤfOyL?2bP I@\U4 1CΑ٩j4tc|NJg;=e9RF YLgd815-5hYH@6étA·p4,}-K(^Y?]W)ΜH<'xN^KZܼ} TS&%p2CzxtOu '7l@w}Ѐms4hJ17aP* $~po܌GS@CbK]r8ey~Z6_m+*Nw\55d>'}6IsA­r=܂h}|@^e!) \@5MF,*ǨGEW? 2 A$xPgKZ;w+3ľ#S.T H/ 6+>j6XX FxF.LroX"l*]=Ŭ`^O›=Bd=Y : S~n!g`2x7!%/?; xE- ٞ9Qv*Jt`3t1Ȅ6LmMd8V/-dF2 u jر1yƟ W\=#1!^"6q7\-Y@<|C_L(tF)2}<2ęl}EZg`)1Gj\u$#ua8u N?_RBQR|')ׂ#t ,?Z$#u!ZP}}z/~~Z)7>+_m?KHk=D0N]zg"G'P.aulP4Ku:'fMi[mv*zYsNz^m'0'pS}G5 %9)x UZ4R߮n@G(jĊKpV*e.mH4NyQlzK|0\oL]ڀGK9f_?u comj1orK/5Z5&瞀gz>:4jۤ >27-u:G1pp>Gy4uo`g;5yH$-KO^wV&3#uB Fc1 q< n]mTk҄ x۟}S8*+/j ҨJf𱾓Cr2eZg3AUg&v4ME (qŬۤ1qG0>M>V,XRar`9f &"nňu$|nl717#07eԑj ,WNFΟ2wJiͦh!Fh֠f>/OЀJp z͵?ZJ?@GvX^֏VX~®^afExa8u6Np ^{~76r{qGcc6/э|>ǝɍ?aDp4T#U*/O`3̫rzU34ZȀΚ0KDV'\pfJSRYpC[TnuP#Gkg&- 7g RunDV*9:z7"VHZL4:>sWQ] N[6Ѭ)ZB+ Y؋&p\kg/L-\sifEMf0̉lG 3*|~oqP*>V z2S*CsM~i6vLk@ـԻn^wq#()pZéM)+Нޚ=MTY P弞t=fk_St+qbېfN4ymA^S?4%ϣR5%(w/:vy O<41>rcI V+ IDATTOp%'Ja 8$Q> };f9騑PZN_י7VOW;2l0xr`.l$$ak3./ozOngHE u 8F)8B1Cֳ Q׀r=Gd;Өwr~Og?Ͼ3>6ƐH5NfqZ~d%L" ;|[2V}><SȀeuקH=q1@.v- 2⛖0pf E>*%{6dcԀf!Y1:Nm/y\غr8q^+WkEH^1zEԵ>PL1~4RA7xiPHz9}S7o=YTnCy2Q~9ũAHg]ӟ4J3J9v ?-r*z#aEVeqf9:xƏփ 4hms1[_tlMxw}<9P/l:bGSAXS%KzNpY I9-=7+bAgRў*[sb L#T\ %^ʘtIZ$KHљ0~d太Xbjэρ0*dHhei)mѝ-d4 Y %ˆ3(C#h&"E;>޽wffP(U9*ײ=&c2t҈ȶRoxjPƳQEh؀ĂzԆ"sJS9ZBsU4u|9OFD653s4h{yd\iOE#{q?S}O8d:@mCrδv`CmC4Yl{E,R6$k08Gўgqw8֒UHZs¾>SV1Ny@~>bסj4̧-yBK4)#Z\@ Sk̫/}Iwżm^>u0 ؼ`:Xo9:<M ;Ex#U~w\N5BcuuYyg#x6zY(~G!Sa87 TcE9s6A4.):K\0Sn| OF'/ڴ(P @4Fbg;8p\?'_bEc)q6m拕%u =OU&V%4պd7m{%7 ؑZݧ4 \i 'Ѿ k:Lt:޸ /8 E'cG?b,#f:^6\0oiF~„SH}3Tb[6,i#&8kz^9w>uZ1mwW./=_󑹡l@ӀMcVX9/ua01mc*ެ73P$RRxcu_簟yi8WnwM]k[8oB5Ir)sP\T:8''0 $x>/D:Nw0Rr9$| ͷci1ܢ2SApP ܖTx<+fL~]vXN޳rkF4S%()%1 Z>8M:Nnsj,F{ĵXQ>[BXDTliah>$S`ڧ(**VK1^g"H -)t`CP)ĝV':'5}?LT! I%ܑ|S6@ sK'/vgu7Y^Ǧ|RvLij& `7=E~h.)nߴ@*#]l̀si'25KjSRNuE0 U o5{zQORt4Q^%ͩy *vK]})l+ 9A~4o-鯚bzY{ٺh6OnHo:83stc%m圫}mgj$l+Zùmhtwv4= XN E*j'=s 8#LgPL] pt@MMT+wbrDv ә(  +`D uc8vZ+/֚ѣBwW[ZQ\&-:6_ K G}nr}QFpH4f@ۉ!ьbڰ}0A\lӎnNu")r!H`(v.ojqܡc?6-!P< x֊5B+@ }.R IJl&tbf;ɝE1QpR_8g aU;%i-BE%@_Zn`ڢ$S{L,'kS2Kv;kρ4oҴFn p|ӠMJyA뢅S@|_ W Omk? ym̟(UM7>Ͻ:^2\ BSUjvچ x7Bqoo;OIOH!8~ ݦ0yg뗫\N4s& _f @=P <ͥqG5JG"oD*Bm{~դ<728t-_Qc(kuMH! Nxeu:S.՗9 -"r;ƪT53X25.6Gg?14=I]7G@a@ql[X#nmGk{)tr$CEG#Hsf6q"d*LbrC >E'JU23[)AS Z*5~H%L+^~N<ɉsG$ @ ('.v }꣏Z`ºB'"ϋ]&y4-Sʼn,X>P"P# (1 0zSܞd5NKIn[b3ey0f}4d\g3'#'-Q5 hmBtI{LG0 :׏>4`p,JaBY4Zg-42@7w$B)p 2,V&Ch4vF5p lc:AȾ?åӎ$;Lp 2&bc;훱.2%eV;&jU~nERn8< i81bBUPHu#2R׌h8C=NS}j?ri6}RKXNK膄Ek&X]6`ѾH 7:^]DDv|SϛsMhNpЁ}H>8qJjwNp]sNx>q,}X 7 iWH} <_ HY6`^Y *:E~ Z_pۗZA۴R\ڴ#=w'aZZ>8R"B%Ѻu_ ,wQG9@^] +]\"ĸsQMz9qlg:vM"`nWAE^K_p#M0ϯ15Eє| i" _KC \7w 鴇#&9^eϝcĮ6a4(-.FӲ".#1T̼sgRBik,"7,&oxBPQ|'Jn~J됟`3~C 4%D+R֊M 8ؤ1:,^ul4mi@,Ե ]bi]IjuȚ>l}v3Ϲ7SNZ/ͤttغ3g|֚k)lw:I߼kl4Wc?y|a̽Ъm4)g~N׵Sl0O'OдMC=>0~PգMBc8A\W.I&'LL(2: 9{HnC)o 13;ȝ:؂MsEMFtljg k7g֝X`Hۑ ng]Us̭X8n'|J#R8m͇p`ej7u?Ω#f7)N6醜vH,ioyu!?_|/݉VİiFq牄JL/$vBi8S ~z4pw>YW{U'_y yX7ˎ9'q~m-ۙ `wHY'\Xiꊇ=8'7f ?i3b j:-vL窑ߧc""pss01fفD#E(YtwwabFLB2p#PϋMq#=k5j*JLYX_x]tBwl2wENy.ʢj&)a,&%fy/^T(_]YYEѝQSee{ */Un 1a;5ĘXdb>r&1k9m:aՒZc8\g0ȶ ɍCDe'#ȕsO' ipvz.-p]Uq{ͣ]OӺ'# -}L\ 26Sv̀#sg6g4 :Y0:_[ȒL)Z@Ѽ 9u/jAcÙ3k@~%qh\MCrFk8X$=֑G>Cxٱ>yK֬z>?b8^Q=`ҿYT}i}L e PXʼnvH< /rk}}ک.(1JTxso<3𳽫06cE72g[gYJ?O.x5q:&ӓ^xF<6! S}6 ֫~ahUimCw6k;b98˲v$pd< /t:6GŀnY(e.84^䋞XMZl9GfmZ1(YrAJd̅|6 8#ǜe1,Z+ BL$R?O3(ymah Pv/+ IDATr .22dE"ױ."a$ ]$@v2y1(ivd&K,LFӑsEpY+5 *h6@\{NMMNsp42Hc1,B\,3 >/C|RbMLV +~tbE1א{1G?gɔ)=֙L 2h62s@fTeP"m(je tAf8uT3y~pN8pu}ݗ^2/Ǝd}hA})ЮT#4 3P H w{Hk(5!Pgq~S*1ؗ cՅJr:f$+ ֺffE$/T褙iն"#zh`kA _B-K56ɲ5;TPY#IH=s obuT}[LtoYys@SrPD6dsJvuӑ3p'DF4yi("ve'7 pD8 8D,2ߧ1U]{):;l޵yZԩq<_`^H$:K SԵ(Y\}S2& s23fu 4/'T^_i)y橼! su. h3|1t/= #xw;BG߳q6+ucoOQi8ԇh:]F7m(sͼz289"%_rHNچ֦5\J*"}Pbi‰=Awd^! deuЀr2_1G*1 %c/eHj3X]13|~뾯WALڳjbuNSgRkXT1[E*^%j;S(+zOkJs3~ R)k112 VP^Uo"DZN<59"d3( #Ns+nyF t'lVjϚ#W9L$Rfo mZ'{zP 5sBزL(yknnY|LDujTԬ85Zt ͟85kʩK sZQ}n,t4sG}Yst\OyPc~*Iޏ G#韣 doKux^L ` D'7a8抷x^L1&d:~\p!ɸ|~=?^ 3UՖKrY5\Ox4=ŭZwd`{6y Np:D_xEG,N5FM]ld2]ȤG-ra˿qk]kRM@%"fUlt"еgN@3*0 Yɋ}i3eM%AR&j-Q0 x P*i3j$SodkW1QdZҶ Vۉs$AcCډ)Rۘ$:*vNGԆ$:N+djV08=cIx^b>ߎT?;<:t:n5… qvMۯ Dyr3]N+: d{>o47%8c01:\6:D=o|屇yo=I,jqk7e4TK |-Ir7P^KJ,uW77/_?\9FdC\g۰fa{qך8;٤ DY6 `ߜ =OsXN߁!ә@~xYc5\fpzheg*"En"yC7)|^pHY@v k3?%/S_Gd/΄+!݅!jt ZW (y6tJ%7ԌO"M*b&PLL(^Xij|KQOh>EO8D =JE6ds!Hbz ,+ @94?Ih*1.0-HXm?C]Wv ?uaa_"F$Re.\2 Mi4Y0BV4 h>"w:v Hvwyݺ2#|^rHn5B* a;LS9(YG3ϯ A,/3GTj~*d;յ]KmP#lG#Ht>+쳜8%3/^F~|$@9 POwބ8C gچp^1ێ2 X]C.0S=o7?-i2U>۩*U?6 sJtPIy 7 RE8fs^?CxwD VX<ѱngH 7{XĶ I7:!$pc(VVS*D40gRlnF12ff3yɐ(f#k.!ل2z 31"Y0ev2u6}w=K&xwֽOQBP:16G>,M)'[sPm/լ WngӁM|.a-jڠL̶pr~H%ELrjg,ÎO`حVn?p mlCA5(#\0s_iDlv9:VN|8S<}̃Vb~-@,xѻN2ۃv ǎշLSx&1G&?\J,1i$E-Newf Hq&詓JZ#uEujHzb%5؝2V9$KD&O:Zu練< Tc*L#)Q2 >\'eQ)!25`& 0eț\ L c1M;ʲu7ޣ'+h;CPuq`4NmdU2Q5N@ 0:@hL[N}bʊE  NڳѴZSd-b46֏Ч3ӆ: J6ցDtE4Ĕ?@8P;hV }Xs@-1{,&{j@'2І("ƷwPx.rFl*W A0_zP)C#Jفr&)}+5R1{GAec&% |O'l= w/ *4G7XNG[$dI쑴Ϧxr?u}>8[^,hUQH@Wq1}+pl}~>Vg)@N! -;6rΫbFo-tM${^yMӯ> /LkZ$F;]u߅wV/1 nuq:鍡6*ऱ:󌻴$g*C|&C2y%6`;+_:tc%! UYh ݥǏS^eYbK@kҝL mL2a|YH$T&>a4UJr%S{D*VF%JIٮ%fO+K5083F~ G/Iy7]\UlPeS!>(4)qr}" [/>'' IG&X}>|%;[z>eY9\>xK)Ik'3S(亮TM"`"+7A 5C찀b=4́uy^ LD"{;Kғ6x (=K`_m L{&݇N",I>[ļi>Gl8yA!)~=Σ1[vr K]:z: w1Kq=l{^FmѬ-Y[Ev36vD崋' 5HCg+< ׿jhBr_gkrFp2<}Y3O;z\_r Xl/#Ъ)gX]N1E`g{FuPL5So'BFՋ8u13I/ƕE64M?J#7Q8~pzMO1}ړϪإd*{{S@I?=Y F"&(݄y$Rz,S,cҗJsړ^2:s^[ңLj ,,civwS #Stkzx`X<7VKQ*gWe Wd@|6 +}g _#q-|_䱊H,LM٤r>8L4)k( ?~U]oz:y,fREM?utfE{*/uo_9_9}MbZԘn{l^}WܢgJXREv6ok|k>@ǥ~K6q,iĭ(#ePSR3l!_0d3,x+߶V4sqPԖ<{=WÒճgɓޥK31̝ RWM*&|7ٔY#e+9(NDjPKY _h"%nݗrfKȚHyZֈ&K67s淋4iL|haTO"n7ŊY֏+'C'^XLǾf&)VZ>k F)$",cY7}ХPW=8"Cs?gc*{]E 2f݂lmAoGH9?s>}t yz.Sz8Mє¦ IDATy={ ,{yZ $@̥f3ue޵4:]3|u[eWJ_@y*_mԉDE>lmzsn3řh6faցΣ3aަϵU{][l,pkm7|/~]p'{4Iho5FAߏ BF *ip73>a6T_IV?;M20{x{& ~ zBϢʔIɲzxP׽XvSe;Qsf9;3vƑ!EvŽT]@؟$\,,a#$kt’U [` !i4$WA}xl#u=H>F-`V}`YlDYX,D`#8=plU[2cX":7.UwF8ՊDQ%;Jj~G–z=7`B]-}p꒺tz-ER-ˋo׊}Ƚw}پN@ C„Zܼ^4} 8xdam48NMѢkkwyyک[_mxol0r dk;kpe:loy6 ђ=ov4p5=FEx b< Ii>N.F <8wΕ4zqN<,[s}T<偹%iȿ˯'P{E+~ډ jeV 4pPd3u,L{:52f@%!5WL|zqjV6]G"_uxi'ϐ ԏ.K3Ԝ{ݭuBCcv ;%|EPf"bM/#4<&vf3]a<mROkJSOT Q׭n<EӋ"~8rwFBX+ klw?=TPꍒb*dFwȰ~<1<8>@liMhZ!G]kPS׾yHe-jk1YfZM b]- lYvͦjߏ4>ʉ۽W6~6B"=e~j^ȏ)C؄Ϟ1rB1 GZ`F+zB5|IBeAw z0@ҋh_K;ɥvt\e|8e6 FZ~ܜ:tK;ܙ``:nJ:NXO`FYL%2~aj^lp2RrP2qrZu*@rFV#sI\z~kQ\׌DRIͦFL.neuUX|_} 2u_k#m_%t$+ջ!ʜy0~\6ᓈF *3_b4`OJm/q/xLj(? ^͞A~P^/' Yl Jo `ܸÝUtb% +( yDh;MX6"UCLφGT(jP:|j\ 6JрCř,wUZ?3[NcӝD)&LlR(4k9h h~giC,x+3UN@x7,jH[X$In hRF/OL\HI 840㤆_8'=ZUo&9Vi!->'FX%̩l]ee| Z)=I*l`qR*Є*і4AF J8&Mxv}3 '^ DuTT@O?C@%`LhTV4ᮅPGpֹsLu]V ]Xpy;t|z!0+m=@5hi}.z-[ڶN*nUF.@*|6ywjJ Uژ/5zmן61'BUE8@'*:p~*VFB9t\o{;Pf.["qI]牜/B"=\EzKKn ʤ?߷d(4N8yI7],xg9ݐ=wI(=}b(؏,-g{g.o%&:t^I\'`"+T&EvE(4/ &e#ŔK~ E@Hf.3) lbbw|.r>\| Lg@A4A7nd0Eа]q]@{Tqq@Qr:'.)"xbOZ%ocyiGSEYj*M9r_C 4I' &[攐H:5HԽ.P_?Uy"ѨA5 T/mI^ktI]NҬ/+z}L\^O]=Ӯ#8f)$}Hh[TG;t#4=Mݾkprt:)R"0:I<;8F~OpgEglWHx`#.FͅxW8PuaZ0*y8R@Yma2T!F.:L#4[=ן> Jޤg3Q~aNM@ R.$&T!*LJ_P |<̛5(3}zn3>_rS: {~*s6QfVJ7M0є''ϩ^m"O"b[r%}jN^oOf8{v@L I 5)fy̝![ӭ(VmWd>%ukhPz @Խe)5o,۪߷<xb*p'<+[ס>cwC-\s䮓)EP#tAgs[pu lrfG_ylMcƋ+؅Q>1B%g3r};ʽN/?~@YKVl :ပj^Z*LY$)gvnέڷaӁ]˹!9r3Q-4lfjdbz)+֐2ܑrAv1S=!'ϛRbM{t6/ČQeBweT`thrV G&3a%<2Ow_8#XPKbs`eOimO\5nSpȖuVieO5XǙ{&N9VmcsI]JZdb'˙ p <³K_V/][3hga89iC3$L{okNwEenA 6!餔6W&K4uXS66E?70)z! &$ [-@qpFi()?]:-/b)Xb+gݑJ7b[y=&ݝ $X1eFgm+Dj5LPRRi!% r.K<^&bad.UV徫zls ~hA4QZ{U2䞘K_%h L<Ĵ fVHBM˓A߁^caX#˗C=6|+__ 5u tdG9!6@.erLS'ec_T%uzkpdf5DpuWARqXTvcLV i)Lo6NpRߛM)3쬌SBA}o_<ғڥ5-QXYtsNw~1Rw!~gރ0iDb.U^.>l7&P:"*xq*)?9F֋" |%,^({l[<ە-MYhpg &&e#+ĶWL2H0ٜbnqǢ!yhF.o 0)fG~Vϋ %q5 HhfL4)*-%}c-̭q?sZp7|_ꗋ)L} ax(>Yw/9p,8?1۰݇>Ax_~nܸqɟIxgagoڃltw [Š爏C P<$6K EeTgi4eg> c$HrU,Ju :-h#/L~PDJֲ̖-xg|j&,Hڐ,$Kc:0aѮms"<7૧rW[0㮇#Es062NYE&Y#e;].?~Xa؉x(f+%]Tӣ8Z{51'\@j@pz([<;K. Qm F~RN:2 ,i"=wNiQF(MN`q)y뉎ŏ3SH fE2JH&FU?:Sޣ~> ?7&\|+^S3@Jka s zS-? W ^wڿ_wa]? /e֧忄c t^z fsFfvKhNq[bx⎯)f5z&򯹍c4"*B;\ϖEў^eBR.- .0.mӃ-m %"%h<ɼcIA:ɂM}>HczU-é*Mx̋'W q[mVZ0ZsGps{pu:lu '8wV\@eMT{d ,DM҄"JIs Gm(H{. Me8(%9,3&/ ,gؾ~3M1nvRHQ$=y6^2+O@PUlH^̟(uJ]2<.4!r*n< zLgK|rdy`4;`SY6VkIY&Fr{231jeQ¿u/| px #e@8`%Ȼz\[kkW 瞃-x?'pɽ7 ~_߁ݟ Yu\wοVz?+l@pZi [נ>pEPd@H:TR =%R wG2.S +31 {ĜRMڇ`҄zM <Oϳ< 0%%qy>נׂ9Ayv"O˃ub%Z?+k4-}|u"ZCiU)!xol/> ~Μ6^[x,H{k5lxub-xDsJ}0 ",d tNO%/XE!+TR ǾN>1}H'">;%J^p, Yl,;-G(xxYwSOTRnc÷ɤ&u3ٸ`D:r敬=WЛ ^7Y}-֪I^ y%u|׮ӯ|a8dmCLc戡\lenǍK=.6Va'2,ARF1-wnp-2ETN:٦{,EN1[<>SacT쥷:No/枋 8 cҍQeUypTJ "Y0Vb{V^aF2U²vW|6k++>10v/L,<AgY)Ʌ]EYXi-tJBϘ-UΩ>;7e>0E1)226y2k 27 ~R_!ۈG? Wث2 =nρ3h^1/g?Yix?xu/Z33jܸt :n?Axf83gH~{ի8b/cG%`fԀn$31d >;>.^l$mA}F٘Jt ߇j[.&_&k$Qü{$k ${ inW vi YlwZz?RV^Y?MoLt Ν#{`G˓.啣EX2C,pJ Bշ&`R힋P˔g0f0j+V-H ]TKZ RҾ?=%_/|KS[yoht MŅWU_%W|]ЇBѪX8 ۛn<{^N>-إr ~ _ߦСCpU~/t`ksjIfcotv!rdPJưË"VOf* (Ǫ6Z^kĔ1`5@牫tn/])ewm=_z x`ko&b{7Wx^z8ǣ>JFF~;P'KHڏ/Ke\F;I$ H4Kv:1e (NJ?3}f곔1x:n8 јq?( sM~R~睔ܵ'rERѓz^>z05Mx'` oXTLOa0t1|ZU9\@58&OBNyx'w2k0) 'CO ^ifAX^SbM=K,4vW>/+.e^wp{ٽ#Jo< dZZ{ܗ"`}_ew[O\_7n@{vqq84*>(\r6 ^u%x@O{jY j$ZLH&Z'Nf$JBβ|ǁ lϓfamg dL8bV~r&r4I*o,-}hSbS4Rd$D! u{doITU [k4&)CT|8SiurϖXI^=#8X^{CA^$QO⋁gNH`{n94"׳`fa=2cN8: P%r̳A;JI@_ -fE"%Yk"yfeb8Fl晭[iLmOj^y_SAiw=pk= Ͻ+0;NAwogE޻d$b1 @D@uZ8S"K`sraoԃLD%Px1-bE8\?@x 8-éA+sG9pZpnIljٲexopc=y SBO$?#d_z5xSO¥>Kc=Ԙ<,aֆΰ/_dGv` ~Coۅ֚XgM>/ݳdGO#$@ID^o/G" 7DdgSJ)bM+OsX[dIVd<~J뷲Tʍt_\n6'jruiƁAծҌ4X &eEOJ#emT>D鴒LN8HNnfbS$ 29J3~m!SzEŖW Mt4ܹs}}po@@?|~k{~ǁG|: zUxn/~%XymZY o=}yO1m{B)=,]rgȱd*' tfշf󘽃-a[0?CiwRWny'%׶Qr':7T3z݃k]?yi'ay**e8x}oQaH밲{N~e: Jwݵ2Uy !ubhؐ-DvLTܛ(L"Fd W' ũITFLO@ԍCspyG`1C՝5qv̸3@0r^ Z 褈G,( B"D'd1;:,,'z%7axj_l\R]_ڄߊdlnɓW4Zl,p{he+b$Tc|"Ե&YE0^N;lw3YK9ͦ!);p e"m;Kf>UA,#o< ѥSKRץѩ ۰cҿ+!L 8eC ZTyĽ#._d |30\"sȫ7}< Xtr`,2נg`.w'W4` LrFA?H?RC̙D%hsQq|fJޞ_I!{q)eb[ c2V?hL$d i}&-}J ϖmX{"i>yLANSXO+wS[jy5yx& =g{f:s-FZEtF2 ɰYGB;=CՑv̢IZ |uG#}_WI8fFyJrCl5;[%VYcճ΀4JX "J_/P4}}G#w Yl~Tnݠ AGeb);t~75$ *_P͒D\jd&dWTbJ$,G$ Hq(]2@S %fR*']o&]: *)E嚱_L29!HngD v@OA_Cz]hE$by~ Ñe/S\ը {us^&1Zpod3!ʪ;z#dWŖnu wG&E\T[#JўyIIm2{IvH?Fl=w]z4| _G%vcPcuJ#dݢT-ml@WIP fޟ3VGQ(zb02MI/!wKK*@6 /f-3&V8)bnE]!ѽyfz뾷CVbNNPY[|gÄ& %VCkXmKc"iʰ^T*}lT``%l!n і8y(TƚeImb/g`"aJeH~m<hָ ?=J;ˡRuZ8n}9&?,="cTJ FbRt/J=z>_&*MDvL .u Msv\'RA%i+%l<&T=Rci & oWRmcь7Ywk_p]R:&>"tuuY Cp|v  @meX[6 ,yK~g7vGPTRKf5lR\(治JbC['(}EGqBzVv1wyBpnӹ&"\?y쵌#kc|67kATDi Ylw ><&QvY.S4/z=~F_e(R%(1)(ģכmH.Tf^L1wȉS& Rf4%i<G)vTSZ X xm_ {JG#ff)&K%x &*}n-A=܍D:mY]>т$˦y-[j PA k_;|KzkSւ[(amۺxb_/8Coc=(={ְX(FԢ#Gar8UF+dJ$JEŶgHZWqyxK-mU.K˅1VPX9qnMb:-xa8#83 {hV.?Snq8oӠ\1eb更K=+'0 )a"wӉ)@}*{/3 7"DN1[NF#iUz󀭣)ؤs 3,9I[O)Ӫ>XJ40bm/, BYT_LZ{_/@At",=8c1τ'ݙajAz}"0ÄEKb}g C@RGIME9N ym,jJ[ZBHL5hpK҃{u DJ l"kk/WN?/op?|430ߘ3 ۃ[+nk`IGV|s8{n(XE[ YED9oψRY$sr$JfmR:[/M?b5?NPȿ?3H8US5ϝ<9+;T[l,ke]R*q@Wס3~0A}ysxWXk"_f-!mk$f*d}hˀU ܉b]j`%Lmϓr~)V IJgt =UFc-VPso}s,csxگyɆټf 8,QVܕakwBi*/&zPD%E=*m@ﳱW8;,W&":8il @3[PGoVn2,T_+ԡ$kO(QԃgϾ_}1xBpcf4sZ {]q vס7"*w ; fJgȳ@>ih ;`iG7]) LH DJʞuO`M<pҟ(sPw͵&ڒ֎:N5+6ӯ5t_ogؾSph8Lӕ[kӁ4xISFLeTFצ8#Dp12 ~NdV0(=ePV6E{`ŞP2HI2}:!6SUߊaM+ģhX_Y`Hx1!V: gyDL01-~ ,b2e%ʻ%=&,Ѐ2qfk:hןf2cʪeHƷ>\9P3,x4xe7FJi"mg$c 9#.56ZB 'erID:{Z@XlV-| CF/)V'Iol@Ba"WEJ}W z>X#-+P,i'IG(KXKhSz;Q CJN ̙>E 4X*~ڌK:%e DIAI*^LG^F:L)2J66>AAB|Mhc^ 'VBSgY>k"Z\ֳӲvkFOZˣQ )evXwc^omT'^s૧ lw֡]oTRR}t=qv`Y\z-H#R?o@礜Q.KRQPWhЂTEP,H%_E:)"6,2, כbuH*JҺm791Bռ5OG1[`z@hu* 6qV%p2E"2/l\bQNwE1 Z#M3"a9YhzQVTR P%/V-J4Eo kc{^1ߡ£ơTlC-lO}+WZl,>*Āl0F;#E // S&QT쒞ѺA9y M^ qߑI<1w:MHq(ff1;sW/󬌦>XnNW K4C]ͲDF>dʰaK6 CʊTg5R֦鞥 $"=**l99V+,J)f@DAaAMb5X͞lG%2OK. DQ0Ah4f#I? 8,V3U" c5'YeјÀ2(}>bj-x۝;TbDrs J)D,&©VHIsلݽiw &8 镽<.7q!,.k66Q^vZ)~5R{ف¶*M!@(wkc=F\~U)h`620r@0}an7SiiaׂHFmJfɱ( qFЩ5.▄̫w#[Bq u|.6ܑH "J3%%*0svBk2yyfyez dkm]oY۱<;'-'hߣ}2 |ͳ|.xg[Pa1[Ш5~~*Boإd&l g&KAD}DJdN8SJY`4cVsŬ@XǣpDQF-׆$%H-f?b]GeLnoSlp@B!:kx[7vڕk+/? ׶.H\_j39R/6f3A:N/.m^D;CHҘI)"էE#6mw3辇7$2CMT@J+ pa7Tdc=yj`!ߏza ^[bK5I{C؇@rU/-b+g_pz'G*bؤ̮'|x啀v.2,n '_JĤleҽ-g"#swN̞^&OLd.I):Φ+fC zr8 CO NJE玙a t\fS"HKHyP7-XE¯juQ"*C|Ni.ׇiư@\/^|SL [g` ԓe-]ު}!|X?[ϳ PKGiq׶nVg~Ƥ! ـ[2ˆr)$tN9=?Kq썀/VҎ: !cu2xHoR׬Zm=}ld54 :-L/侲-F >gw `r{b -xw >:}WE`˂ǏթAao^iď(ꫡ̞RehV'J=meNA2hkQR 0Q'`ZV5訰TP+1Ip3=@ ɻe992jbIe-x$>oC G#Z=V}S>UJ})F'f bn%},m\ݱb+}GWgJeS@6+Ud֐2k/@L[mڲ敾oURנ/a<Ȗ)t|;~l vS7/YSI,Lc-v́3W~}g o/Cס'zRmgDCn*,N|-TX%qg#}z΄{Sf;TY}ŴǦf̭9ɺWY&^@N-H %.^rFv`0URR2(>q2a\;x2/%+)x q4Mv.¸=*ҠSfp1PS@T`NIyKTGo 0""֡}s)BIZd Mwf/E`:?A鯞Ur\P@%&ydĎ>+nu(sFvߧcHG٤Y0N[8eܞe c|s\f'FsHLi#0"U= @$ MiqI"O5mleAu mz+\*u=< Yl,ftzKOӵO:ݽ=8~J`_~0;7@ 't$2IiIu_Nݿ`VI;e eīSJKV3х@{0^5.IbjiٿMd3ґIIVҀC'~*guZVj~;aQ<Լ>{tYaBxiReb?И*t;}7I5J|'D?/6(Taہ ٞ5SŋeLou<tڞ>8ѬEZFH1[;pSnYFcZ82s;7 lRn\7ƈ. Y#%1+!ߑ2KLςd,q/ydTJpjPW qL<8P͟8%.,P9~e1>JDM&n7I1I c)x Cb(U@hF3Ro qK*%u|ٿP}N$2~Imo&InyWxE3Ɣ:S/b9JdOm!)O"ښf|\z; \$.( #5zR9Ș{44(n7.?$S"|FCuaDj501y QY5Xc:-zR^_hfi6^Q8q1QT @>u|¹awh\Nd8 o[Z Cߍ!](7.g9Ad@۷1-GfA1WN߈;UYc 2j,FOLd%u Dtoϴ 2ѕݿ-m })2ìOYy o,[ƣiWrYl,;Iyw`<ޮK%^ۃ.h0 V9%N13~'axJ"l-UI@I1RASTjF6S,L^f"{ј2f֓#ƔgC}N"Y3U´sXbC1l׾f dE%rdC.P( i,Tl`4ewTZl~Nljg]KtݵۃNMM2A?f1־*a<@^ڸ˼Tk?O}{tuy^xUӏKo}.4kM8~W[0ۜ~0ڃR-2ߟMkW*/X.(b8bY4qoy{#xАVdԩhL T,4"HI3ҭ 6qH!x*&[@H’` (%9RciKԫZde"%P!|Oa`GU<ٌj4qa4xO3F U녒e(-P2hkσd#Yq^N2|cUj0ӜvcfԔBEM"X_ǖHZk ?PLVbNAQ/MWpЩ Ƀ{,>|VVVh|U8{;;u gg4exR[X*(L[s&Z)Q[&Փs(lJRZ`$"TExZk%e-dKOcrP 6/45e+)-X5jWާŞ)M,oL %V7fT^hK@;a{5}GzUf'lf#}}2z`cm3l|^R} m^z# mkW^xӰF ΟtVf3Y%Hܿ05ltVaDs>?Ymf2L3Q`4x~H=GJQ{2+r1K*#X}ż8%/{o+u] 9o$R)2%Z咪 UCp0`4@jw tmmF 6nv[fY#)$R$ZE)N|;߼7Lj>'W#ߓR7_qY{J; qDV}uVp=تa JҚExV}evg4Q+pzJr+w,2km'5+DV}]E'exvo EYLvD@ed-5'FGXCLTfӖIJ(ƌ*b3;AQi?ً-ª ɱ?۞8YHd۫ ~36KH,R{'){i ĨUЋY4!KNFx 0"c%DG ʧR` UÊXX"]t)i%2jKXeO-YͶiZv0)(E .es$"#N TENǧwr;xO IDAT4[NPߧ}ŒvOco o'1aA!>;ScYLkm:Mli~Fr2yW/~Qzq2qWbg/QD_NtrL`ڧ3ڱ,ˍOåMmuȢU4d -K{y[+xcE dF0|JX%~9Ll)|uge,'ZXd?D_\jCUYq£& o~yAz"R=tmVbkHqm-؋Sb+K'kV9o'+)0S*?k͛Y,\f?n咍߭lBz*y7A67ipbKW^j]*]4{˥3+7VʭeO`i΂4HnKRiY@QdNQI-|y]g4mN -&7>%JZj 3Zy`֥ :1U=^|%_|aſ*]ؼHm\Ch;=et4l.NOgfݏstw(ޜ'S"T9 "(U$fR۫"Cϵ%hji TЩ¡BrbG6P8(Ohl^*GdQ|f'"zΡD),#;XaO%?ZH}+{n4׃TY Vp߾tϼ/_ 6flx6-贏(qv/YiSƒ&'z] =ow{>z!<Dm`NX%Ё?5 YtQM/ˈw,E+'Ǿ*}mZWl*SĮCl%Z"āK .eQ| ;d]}FԒӮ HK(!fDng>Hl%IT$AH6D<vѢ1QdEcy2_l>)Y\Pi%:.",J||=QHt ZПoix1KxAŋ73穽zG!*ε/T[s eȌb{G„ٙl4( 0Ĭ{ZFَbTGp^KĺOL{cvЧ$mn L#? K?<K^7sFeTSVٷeFf1uQ?tѥV|O| =kKwDە~Z,{񂞳WTپB<3`k'?];މ`s0 `rtit!~qگّ˶䘦;TЦnэl$+cg HHRE*Ϸ"R`f Bqlk),kٜAk [C:1La1в N$b*Ǹu3k܎6r-iylUS?'Ll0fc?LG,GgX4Gu^?ޥcw6c=d#Ղ: ځ{@ׯcpYҖF6#2)9Kb *PW@OkƠ_K$ۃvdb*05=\|sy)ɓ(9_c&*֓Ő[[~@e.`c# :UՔã5Y,o Se{4dHt)eñ}}<@8^l?,[uiX2VAR4qjWV3,gc -sLfg,Hl#žd4=Ke98>^JIBRrbBH %Fk,kg8s;'Yx ^zbtLq D96]Y{P',3,.}{~ gmmp^ }̧3ޡI=딪1MiqpLY+2, e+>䋩 BdcJlu JL("tu񜥫P&=O&kDW6ҴTm*) \"ԭAmpˋke'XaHli)B[73Ma{4@ŋ4 7f-GWP7< Ӈ1 SP_ /|?o4Ce4Y Dg%$ppqғ>JWŒ1zw?!VCr Xp)cK2G[HRJ̑ҞDeو#AڑA2 :10T4WY;ƘOYO~lqQ j%Z2f^n7- =jToc^EY\e`9}q`j 庶g՛0"pH ;ed?YuIxѲˬV zyf_{>tut Xoؚm V& 7|{>%S2|z%[4oх At>k0Ӛcm¬-ctt RT?RUf՚@u ѓ"S|$Gw2 bB_@@01#[,K)s jo7@$h;=Tb,}뇻;ߝ #|d)z8on/>ӆ֗ר(mə꽰] 2oKrf-}F~6~ލ q( '/,g`J0?3aEdK$a ޜJKTZ>6YE2׆*[Tv%%O'3 v{&~O}fyۘOoFI_,ε]OOGyd鎖5K^zSVz.1sg-=#gd<-ܭ>Yd7x{r1*j"@fmW{ YA2X~_˗r5LLb$m}=hLЌk")ﴲR훉=n[^N2fQQ7|lpNiɪvz+l^=AdsHY-\H1^?:<G~Nnа7;.+6%}ch' pDhY(bٔN|:E+ztv8mJd/c\JA-UjkiR%N2S]l\-(3+a4TpoH\U~mQ2XGna}X=%]r%]2{f؎nŞɂ?d˕`]AG+%zR?_fhlx6[:=3KyQ1WP"w=./D^~x4r.L^9:s}ۨurR#%T .h.yLqT~/T-q(F몌o!#b+"Uזe1F4ǁI Rk\%y-MiLq?~hXm^W1X'0Ȥe+fkkCOiG/b@[iޕ,hr!]JTtжMf p㙅^eN*}K_/oH1mH1Op|@o5;S:;FcL[oَi\.:e")񖥷f(MĢR@eINZʿVOL>_KK֒zgwYXfY0 TP`&289*qz LӤT;+8\>fpf/9oɛmҖaߥW%Vc<@YSm}P3d6K<u hIH J%oJ LՈ,ZCTԪH ru3"LΡ_ls59T납=gQXND؅"dǔITp~;o.B 4% -ГoSۦN&VV=qmh@`<פ(rU~{y@x7# W:R/ɳ½*\z*[9= } uP96,d/.O~/@6 瞧~~^b.m MnР7`|-iy[=4ߧ,^ގ +Yؘ,louBTVՍb1LS7UVe0p cRP*d#{Umɽ|@%ƹgnXpBIPT)ru%oYKeu<jA1xu//, l7|ԻӖa?twZs㼲t$wd,U MUR4蠡$z 2[H }QIY 2K,*0#*A6LEjiJ[m'aT Sƅ.z (@: h+э Ya6\3+-."*?l(&Zt/}YCGqQ}q2Kwҵ=z]cZ^e(X̯@W%<9mp~/ҷ>C,!6ľ}㳓8t:2qd ]Y'-RBd6j,vJFv;%X]@؋ʙ%yi_ş5 Or1lVN8r]rуsL.T7}IQ2>hIĥq}V}d]+% UX#;jufD mC IDAT`ډ'$cTlQX33Ӓ,f3EEfˢ o+ET Kdgo`.ԋg=1)9K1(d0i8"2rKYʒeJJYeK ElL~XnW٤ bU6%G*9Lh\Fp*MyУ}@P7r0*ɥNgY|E1/KSNSԟp0h4~JJndSza5λoK6Jڏˀj=F} $*GË~F]P?>+"q:ْG4 3Eؾ8%b'2nS&Q)e]m,|转f#PdFjG DEX΋vj?C4ڨhJiؔP_}*=O}3N紽M[S7aX E#ͦ> 1v8PoAvͿE0THeA\b6OvUg\SAu V`*ډfтh)}|ܭAm0q$Ւ.>> {i} @Mԭ+kN*ӦOa22ǘz#v6B}Y;/m?g?dr԰fyw#x.fy~-/V Ұ~wTD!T(qz$%RbTBNìmwDTSEA~ )3RK UI 4i`ߑE- ='(u?sM20~ӸXJuOזӾ^X)"[+i0p{CMl3*E'sǴmw E$Sܮ^_a̿ݩG=/N!G'~K_xfu18e M؏g\es:%qU*HTe{!껙Z(Pᩯ/[VqRvikXКrrQV}{+W(Ϩo_߿u/5(Nf9cP^YmAK$Uc?>WO} g5ܤ.M0fz8 =8i*y{i b:zD&(Jioek)mZJ|a)X5FDl{dZ0Q^O6 G4ڌ~\r%Xkx(LeRwn8q<״EuR` #`Cϭr߇uQIh-=mcYϦ, l7|ՁOTڟ,,rsϗ"3|`4H2֠N@z}_T.܁^K-G!`Jپuj+ L~U%5y ^t `W{ZPA|d/RqߤӠB%TCS/E}Atߠxݟt_DP qn}R h](* rggQ}uSc7sJ;0ea֣xF o VGwi:;^.ݱIC7Brfig_x>зkb WHQ?AgBpvODZK:EF#ypߵ0]g3dEQ!1yLSdjPRb5$ޗ 8k|a1sٖm`(K= @c >d; 0(Z9Xy@6Fkj^.# DS\~~׾׿flx6[>o[E6ihj4fn"5E&0뷑nK,j5-`,]b!]mͅQUwj @ b7JU !]ǤI[LpHi?%&U?~.. Qi@4`Ղre&6֖3 (E*H8i".l'̠x;29m]Ҹէ ǓC7w.:V_qRs{_~y|מ1HFp[i%YFս-*'RwDeLafuz+/烉RK詹b-š 1/%J6=dr@`fLc?CdB+&"GSRwu],'fCZK"v(XCIޞȂZոe0jg.t')D^i@*"|gY.Ϛ2{4Y ӳTy(pW/W_{-]5 %v?GV;gb"FOZ ce3 iD ( a"I@)n|dXUAXLAS_ {VDAk=Tes383@ۤU Vpug p)0NG k^H01 NGAe`@vY>2"²҆X幷GoPgg}:=—'&GG2 dL|O信{|/߸Jw.sLO= }υYmQ(Ĺ n|wGԚ̩j$pR" PZt܏)goܿ{W$bm02pc8~*!Ìr<<^,$oKS]~gYAV;K 2 L4&\uꞰƲuIu%nK~L(W6:sdA;hx.[[ 4揜>t<ͻh{ԣ49mu#َ9h'R$ՋB1E> hNQ4Yɢ,RDoX/~ wɥpT&pۋFLˬu-i-3csnoUt8'^\zqd4b^ -5{^L[[xep/hYvyԾξCZrΘfigebf;TK- QϾ}22`~؏yw\a|#g[fNZeta2 a ѨJ,aּ7UÇ$zf*8̴N/j[L=v&H}ɑ}ؑp@ z-T 2)JˌvD%ew`7e8E ]~"<@Y[=13YT]wQ;dtzX(fZĄ +弄q?{gv$[c<=.s23Ғi eI}vp@lۅd-Zd@evn,O"f.g~2G^{ܕ'qsi3'pɟJYLŔb0qryxY-#[a RG[l*j +^yu`ҾZ$Yk'{ v[e<#< 8 [,J)Y^dI!}+U cp{E40%lkKTU>= z# *" PՍ_HJ2X0zxKzq RU|W;Fն)ϊ`Ci$Fa~+'Y;9 pG-8rV3ڦ!im{gbX[@(3H8H.GU@siQ'bf:{4?8"gEF&K;#Ko8qeArpk!+b ?loTNj CwP#`dAJ%a >Q5׾Ma7U!AKXѕmpa?\W=9-sB@(ZB=_\"<>&,'fix6˛6JD}ie.Xzj}\^mmE03<R֯FŖh!Zy)xrpgZAHKaoTױk -dpPhAv**mh91\UЏ̳(m 2Yv ~Sd@ 2WG @9>ڱ,^*K5OcS@~Ed3+ʟџ-lvfF埤# z\z(YЩɒݜieO$[%w|dFݢ4^F<25j+UK2핂HHε<=:x.dݗ*̦sLO- a/7KkV\,+Kn<QenzCmub@ $@viZ{Rעz4Y*Itsxhvg A*8\"dpm#RQ0Qrs4Cb֓pd"b_ Of; K77 ~qqmϖm >^~ܤZ 닃V. R5'cG 8M++ +&I!ن2lz^9-D;FWl!6Bi}yz/J4'~|R^L2w]/fb]ZoVsf2ŏiI|)~;m0 rs+;%ꖀB,ϳɍC$@uK8J?UēT&3 c>uΫ-8ҮLؼM <#ZK6Z@uY kpc!u%sɞ;VZM̭]7uǂfix6Bo%6So'< NDs` BaBwennFq|xH'''I ӭ 38Y bUz!EG]c/ce@ϋ=g̝M)(A0*’Stɷz!ջ4pPɀ΁pKoPP-RnW,uw @ ].: ԤYYa, |\r}al.S4sQv[)NhF'h4ӌXDF=MJ+gNK:|N!G4Xdt7%kwŗ^*8cp7 N쥌U\ΨXc&?}Dj`/PdAcC1{6:V}edzq 1 S[%u؆d'޺{KlH~Ӓ>}衇={͐, l7 \ުR)+@6ehlf2R[[}R| L/ҹH ,3+g4vQ_Spb#!0Bw4Xʫ Jtck-VL 0XON^<TozFY^xU߫(Uzfpπ*+J,2Ɋ*YW6)[=z[5"?h0)`vQ6rr9`szrDɘu%ٕz,c,KySo~A :cA <QVU_`%z (hGb#@Ծ:/`iD=ԡϳޛke0-j'ع9α  v,`vlT=O|ųgyK~gSzox6|Z5SΘi.\O}پx18&^0-U?g1R2 L=qR^5B.&ezW6xFo`Л3n0&6 %&´@/:i%*܁ 㠊jrC|.zg!KP^>M9a[gŽ΁%U0e,끭ޗeR;^Poҝ ghݧ 4],7 ~^{ɱTϨ?c>8u{(w*Tž{)pW0>Kl&2kbrO֪K'WK|w@iJ-+G Jj),.F`E?4*$`4t]"@GG'9xl%q~z,g(uņZw\o~Zg6+] :`&?CqcZ% 3NF0H ֵ4- O.Kk~b;=1Y+?L*v 3WR?MrBaD=oZ\̥x/ӴL=mb~x^ɤ"Tbx@|o^.ۿc , lhf:+EQܘrޛ IDAT3FɍFqEL.^P'qFYbE#1 -EEɠO1q a0bӃ5jE,$L 0NrZF>C\@1~} *[)KU^mz3X"_4Q/],fQLfzݨl/@M/(@KQEϧܜ8 Fy˴1܈ @|5Si\3Uԃ6EI. /!+T# R/$ԑL{73|WF`͖}zFxoHlOl߽Ğ:FSuL(זyL/>^॰ p)]dA=Ӣ?Ld-, l3~? W. zb77i+OT_gA*<# `m)KPv$j~u#Ќ`ž4`j()C!.{0^OD,,8t@\|=(QB0i˂8t c!WF%[$z<&4[K۲' =4w2^u6(gOfŸMaC..ʉt1|(F Bg Lݒ H{e(&x]w0x)(tV Q{@z)cW '/DNf->8DzX5^/<~X0Gd{}L&_gй?fyS&D?Bn{LA ž%{˷UoHI(FGc漮^A{y^g&BkvU]?K0MMYY Z+1Ĥ$`ɂN\6r_\ۘ˞zS!#=yhUS!,13ʜ*ѩ\. bi77b75_Hj:0o0S{~Fe;O o6b"f0)屌ue)Җn2`ҹ@ؼbƐ.H%th%XMLOYb殬z(%ue8le+TJ^q]2}eeKζeج@uF; .=cu-Ӽ .mgbm=#z/UѶ߬KZgtq哟߾ 㢘4`Y,o'ivefy.ZjzL$JLĬ舎WQ%'|-A ՔU|xJF=1Ρ9IdW`Rosk=ke9帎*X"~T)^U[F) W* #04yWjTa\08ҡx}vZKhq [ū*Ht yrБ-U,{>s?Ɔ T$sBrzO[Jƭ5)6_MdO~/S'MHK*0~KigS, nQjg1do~l9{<^úxд@62 s<lx u XN&\ˀכ1cK{X fy3evߊ|\^G{;X,Lb=6"+s^ȃ&Nj HE dE2-XR>LRT HnTߧ UdF[ LVeՄ?tUXÁo ȝ&N{fRGK=)G`3^Sd7{}V:t5BR?ʠ!yWxY2޳LIQYWA^+a'6SP ֥TA}btdE+JE?4TmH a[yM@ uu,7iYKu+- J0cEȂs4vqu@.n=@7w[S1_lx6;|Vz;(i9+ksN2Y)<:8,}xS5I`"`{u R1)&hV H}0 TTr&AFOgJ{mc&COs`VMe9޶]"ࠢet"і̥ڱ==LX2dp`3M)#(co= *.[ .'2Nާ #/$sj\=0S>'21sT&`#4*cR_ORho;ͿRh7Y,&6X +5b='9f¶ %zbU3f@L6Zi `fY>, VspR-v@ނ>Ǥd)'abQ)y Õ HJg[4[TO^f!fI)]Fq "hel\b,Ag+aM7I<$!O%(P M{2D=S{2eQ,M6Xj}IJVm@x *-pf%Jc/oƌgdKض%QiAϨXuV'(ಎ ,k7{υ6,fy[}*.pX;h>8TaVZf& X/((Id/kzzͺ8w!4%?6kI;~)2 (̴IP&Ҥ)p+QS.KN9_" RUc쒲&w?`˴le*gM˲y`27QҐK82 sy U[@YE)񑙶lgkf'>>'=9, l|ցNriyW ygbTM8vt/'_co!mr>FEvJ^1`UUM2>@H|R=?zpbf,=GJ-J[a-eV1P7;#`O.DρH̎bL.K-=3$Ƴ.>PQ6%gTT!߫ERVB)2ʎg2`"gP 2mSܷǩsM ,e``-@`~=yic^%uvez"0öhۖ x-XǘVc8uɠPYɖ3dUT, Zњ< Ѩ.ԕDA2ZWa]r sHDmoKg'X^0P `6G6ғ7GOKI/QXO~-3E{PF@\0جZl4$u&9Et>=zbl^e.=@d2ض ,=-^klS'u y}ZJvmnn_5fig=Ŵ(j#>.Ϟtxt>DKuO=)À b*i$P}-\ I=a;5bRbKsepQKگLU SLe7u^C%dH*Bcsc&le@MlVX JT%4˫x|-=F+[fͲm=vY<u,a"6b(H^]W;&sGo'_?,_, lw p=z.b7yXv#`ȠAS1zBEvd'=3XT|ke Gg NN()@%&8Iy^5T{p誘G0cTKIi=yZ}bM$Dwe&-si=AϪ̱& eĠzߛE5 iTy]Z 6V]m~X'!zߥU+uq)-kz+ f5[ԩ\go-1SceQQhYfT/(6hl_/X'6]^6g4Y)y33ddjﻃ[9g/r `>M٩ b Jd +q\{2C. 073~?3+Px@;)wWч/7-RA&F@*.=miA|ޠb۫@DQMk1ixc * v*˓޹[}<-x `~7K7`ne1^r G1ZﱬT!&^3T&A8I e+ *7yòھ"fۃ}HY, x >'ˢ t6Y:~|tDInA4&e A U{: vr%2.qrg}D{\\& :Rz^*TK z['-`˝eY([}r(,MͲwoϊ+ly҂eY:HBvEvM<;^ZfddSK'ˆMuj  ~[K:}8Ib&uu8Ou{݄cFNj-#1E+*ϔQY*./uYӛOJ3Mde;136o\r%+vDLXƎF wK.9 'ltF,RZ݂$f.y\(1eW.!R33l 2XK̥)ש=qZ!3)mw鱋"s9  xL(yt[k-iCw|+G{! >ط;.(E&uV?>X*F2^:/=mٯu.sicMscZcj8}]ze{ |[4^O?| 4fix6; >hs^;yQBh$B%:O@TйE4X@3Pmn4"fO;K\Fb@&#<ՠ~M}̔ M$2q)uy:XD<=Ѳp,j?ȼ:_uL.XV Rcl/e+8gT}&U|jd˟ViﱰVeES,^ƫZ!WFE@$@::N:a;wxc^lݏ?q^WSoݼ$/jőoƿX\s wfy歖ۣ(\…m.r[*fc@8+@=-=B,'NV2$lnpyO]^qE9{h*˩*r'Vc:K|=d=qmm%~N=֚Gh{7Nub:+,?rL)ҷ5wfݭ~7/&vKqxG/YR =[; mk9`zRݱȖ5F/wc:d'VYK콍 7~{{b.Wr6K<M@t@;x>BۮPPՁJd ;W':`}ǂv{l혆heKb-r9jmoS7ɩs.DZ7;vD0A=6Y(op8m2 ɿ˟ٟ}_|\a; tkhl6;GbɳpadׯӔMky7u9dVbzKzF(f"S{Ae/ cX `< "k{ 6 P\ZV +i{Zn^ڞKyv5w/fiC.v:]=q`cڼ:pw TM06 zl=e%_oniϏ[~C&2Dv`k;SƤ~w~p> 6fig@33m_'y~~ɤR TЦAY;h8JϜyB"L}{x1r22{L:2?^9\ZN :rc>o;3Ic, ̼o Ŧz:pX x $uҳAP1@z]z :V^*3^Rj*߽C_~ySUc-hX]9^ik.4b n9bi ۋ믿/^pB=88Zr{s̚皒{4Yvynr. 8fIrYJJfLc:aY/#ΆG>BCf9m3-mn2;۩eX+d|.R7|aߣcձoHݞ6N޼ 6(9kTenwZ]8Wy'/~qVu7 lx6[n{ de\2G42xHog؛0Q6}zrKS wAee `NbM6>c9=TW> ٺҦ'$D: [WJe]:$-걈(Sb 4^}p{e#XV\ 牷Z^݂$yL2 0<,kPq€#N~Wߛhչ<V ޤɲuޤK)RwzZ+BO￟SY,[ZOOV$\T#P٬*(HDe@~sr!kْ^XM-=@Qu%G 5J~Ӂ<d=t] =oPޗ JO.ru? e>z꼎]~u^^O.~mqJ<-G"&궠Nd'^wi3wŞgs~3=o5hu:AϺf8(RǪץ/is4z tNr(|6KknW^x:`bYD˂[w[ 1ԋ^dA{ݱ.;0VcR~dhs&x&4ձQ}MFubgM--?rkb;x6 nϳfyK'9e? pt>mtҤ8`ISM&%eitR*+é&\Wu"!!-ױlf8 <u@}lpn`'>POō @k]-0D~n8Ag-H=F<ո&z&`[W{NmOnYҶ[6=]c^qFsmZwӭLڛ\s`fZݺ fig{;,ϯM㣈zL̋Tqt?D*R:(޻{{fޠo^e< Pg^ǒY,)=vyMb36 :,t3Do? kjSqˍ^aY\'Q:Og`ˇ!.e` ;G<@&N<0Ǎ[m[˶xMcQ )f;\}q]<'?C tPs{cA::ڤ}d(|6Kke/*Jc-y[rߡ5 krj 9j12۷7ܿem Ç?s؋Ϟ/}#^62lĿ[M6Chi `4LĢtГ0Ue¦T"t݋v0ʩж.Uh(udRc(1Wl,͂n8F)2~v'pM5[U%К"O2Kcpa7\nGv K,%JLRۖh5epm:Y&XpY ~k?ρ߁ Nib%J[xmSj Jsڍ.`,X!<~waѣprtE.G% ]T٠%48|z8xz.זs4Uu= ̜ WuVw શIz'V7=>ѣêF .,8-yu4iRy+\Yy;IbKGBub+I)A]3e՛.ҶChvZJ ƟaWm /<7aPyשUMR:7, \2)) .ܿ}Rp5>xc}7x,(L&7zttOO |nQ]^ں婉(kOُp NzB?MhOMDU!+3\)U$lG[jꊷN&.P@RxBSig .=~-[ªSh(~cYp9>W~RQ%;!V[y;Z%"\& x-붋1CV.QJ%7q o,K5HJ#8yWRI|0#\>ó2FXMY tMclߔ}Ms-(\0>#~a _KOsI4z:=8ׯ'sB &潟lζN>KTB˛_HQ-*5DpAɒOV9Bvi\a۬tTx8;2ؖRF-B0  ,EdL[V籵O%sk[5Ymv_m^|t[RsAʣBn-0_n Kp)iqQ.r aT7YSK+-7'YN 6YAw1~t|8q@s~>әM$GzQNx}Û IvBT=YBO]y.Etu:9Vͫ|1Xd .-L.є:~ *q?J7~f^sV@ی-uu,}[x^ncJVُSk-ESg[SJK쥑V ^HZ$Rk.QȀ))Y)PlTӋ߅5k{A?C<( >E,}wNE؄< O:dV]8]Aɘ4yT?iY $RUNe8˒V+nTqJTy{b0kw[uVC8sr&FRe-Kj/lK[e 3:uV D[8p X KFz{-heu[U IZ\gi۟}AIE|u$eoFk(;jp~P4.L'>rw2>~x|O&NO%#Rgh2y:;烣o2L:S'{>) dICw+ԆǎdMvxk,kKI,]Պ5Ěh f Lq-R}db[6:z,rW<+j}FOVAZʺ1ҊiqwJ7ZPVYERW=eѿ=sQ/YZmmC ]Gk=گ؊HRo ;wv~8W St+<3'ϓ֍6SZ\ו.Yx`wKx8Ao8<qh8ǃnqӦaoqtR2.!7fW`V)z;n޾Ɏm8afKdc=4m5?K.FNКn7H05N)^Z g[0ǰ`)XTQ侀Kۏ x\9aǪU܎|1`&~ʶe_R.gG.E IDATG<>9Yo/ZwĐ ikE]bk#Q`uj8/{U!tE08Mh+ <<<=Dld4>x' 9VͮqwcWgUknh *ljulϵ҂\wYɳJfgU֪Y *` wvaBiv NJV-]l}LNy|ܚvm$N{*YQVJt?גZs\Ga\2mrxBޮ~6[2Q- Kyjx\A̪rAaGq@{wjNMIڔE{ً$P)"c0,YSJhF|oiE \`u,"X ad8oz! K-mDrgMp-Q6/A/6թ *ֶJ,++e0C@S ;|~]|~|.\+O8H]EnL5C(m~Jhn)>.p9F~~] .T25c-.CQUAçǹgLp^U=A 8sCAoN/j-UK+W[װi'.sc04[P꣕mg2 gqkXM! 5VҁR\i}V9Z˶Ѩ!p Xɟ'xMh`JqnLTچ#0]jt#ډpg߆OS| cV.gRKݺvm G~;/^vi\;YbKY .M#pٯRa!x߭PF5,%p8lKɪJx}2'|RԓA\N`zk'\,lQIc,A*RԥjnnYrde۔+[:(QiYgU`)%l˲[ my#ˬ&b2]W{ gS{ԩ5^Rx-mTQ.H]zvz\`0> ,!nT.7[%6rLӔ689l99Y ,s@-u.q2~i^V/TGˊ"e6Ú~RFGaA>TJ'SFgFlmnWٻs6 `sswSj]Jo̚{pQXVgZȒhCPMКF?XDmjbV?3B YbՏkleRhd0ڧY],]T+y[W%-ww_$RF@F)=ky=߳¥n+Q-2uـԄ$ƅw0M/^ţW3p؏G5A4/ەwfSXxqcdRZ7YBt(p8SXdx ǃIs\P]ue_ONO (z i妊E…JinkƠ$5 ]jy$֭m}KCܜ¯)]nbhjA} (%JzD;*LuKxUP-\q/x֡|d7y8xz\P :ud^4lh/C'AC;Pߖel-@)uY[ l&=}X,HulM]YU+6Tw5MђJ۲Mρuj,Tc -axɎٳu)\pjoߞ RnEL`z))*7^qV,k1Rť?mꑎqQ/2J/Zw*˨]YOU@ޗz8xz9hϓPn,j ųN&{v3Ov\Z&a%ɒrtf# 54rܜJRJiQrm"j52·˶>\ ODdMű&3;n8J/.P5 ˒%*^v,B^ iZm qL:'jeM5*@&\Ďp4PESQ/W:%])u`LdO U6u&)Xjld$J,y̋6`SKW2a.hB g4G,zQO숤rsbR*z&eޣ+^R>@@=<=. |NЙgp\'7Z $2'іѼJqʍGaIi:K3-H+)w{YQHZ_ NU^y2Ms%岤>z`7Zc ,r+ns%0zkY.gSzvw''0uEVLL7s\ijp/'BrCrL5UiSyN-S2e#=I& p٥\ 0}Ϧ eJhl:z8xz+VdTG-N6Pۖj@ RFfyʛBEi$*s-ZEҨDKehcPf@;Y=Ϻl`m6XYS`JGԗѲb#v+k/}h-5GIB$L>q⋰Wa?¦rvD`ސLm»P@SNN. .%Q\Ay'LZM5LbG.߫*KO>4-5\J=/BW<6 m`qf]F=OjM *exgRr& 9)"F o"؟C^b]&Tdv^O50[ӂzqhʱ=-Zr*6ZhOQ6g@qcMb;"Q.edE$ſ:=~Fꪆ"-.q\b}sx_JKuo&i?8>N0.lM#!ya.Sj7ciz{RiC[zyV !2r"mAkU>K)wN#M,Z~MN0MdjpQdnKUl ]"r론jiiRɄ?o)-lVޒJJ"oG0_mn=׹{j}5yf+)ZQ{i^0E(GGGɎh{{;~]Ӈ~Oj.%-^i-a:$ZoS{S̜_ϙ1.j9|/seR0sc?mwd sj|05RѤRx[ZUΫr*iXbqisє{R9Ɠ(o4dCu-m6ƴ'y#NtZ'l<6մ4VUK5[̄ƾ})=n5۔ktqەFZ|_L.'ųѓ~fG$pYgr=7suIZKY2׵f9ގ#Tzٓ3OgSugLhkRw9 u=ŤnyQ^ELy}u{>˥,AF#Yϳ|EygƞW';%oWULGK˔2c<¥5œjk,.~Vw-'-tf[d˓^sp%+oG:ӌqQ/e~]z1bROU˪\֡\_xvDQI_E\*.4Ϯǚ,0qrU)'a]qwlrA3h6:Y+ z[] 0Yٜҷan;ĐlyZ6xGR5,}R^&ץvϚz>l1RfM=yV+"Q0%- N r\b׸.e (Q/']FզWPG4妞^3>~<ﶦkRYE rQtO@tED.jQ/eVYyV]_r\4hnۀ1t29tz8xz\峭]oSg{<>:(nTIC t,aɚnt {<^.# (Ku~؜iw6Q@665g8m.j]{[&7)\jSO?FLp icV.u|zf u]S#?gd㽽u= YG!S?tWu=#3Ɠr9uo즞Ej.ӎ,:OkGB{}e˰M<{x8xz\H,)|K*Mgg8\ܼ "ֲI1Ί)6G,uZ[Pky"aZU۠Mu2SPkvzrղ*b״4HZ\.w.]=z}'c<1.0ɓr][zrCP/Ry},>w2^iSO7#^Li,5tuڎhk`K\FR(Of#RL)p)CT#z[Ӯ"Ⱦ1.ʥv86'~NhE&*Uצji#*];NvD]0. Z\y>Cж5MS'zOj.eFBISj%+  m3-6ekĢ~E;fgD*-S(g!T$5.p)M== O>|uR*MퟔK M=80@\KdK"qyoGU%5ƖEJaIAƎ?+f4!=d)hB@,X}VT.~WDR.RR@ \޿}2>\=hqcԃq5~'$̦j>j>XϠp9Mr?zJeGtV >U^8(m0Y*AсBfﴝ8>'i㪺1Ӌ8[РP)ҨRH J-Ϫfؗ$ʹo,JKqj9H;w2-"huRq<#ʝjG|/3_-zHa|OmIz`j%n{LVxj)z\fEM'h8#Z6} yU5 \:hz8xz\9(]Sx߻yGFP`?낪]IHlHjߎp"Œ:*ظb= KݥtqI .{E.Uĺ빛]s-OeWRr=wDI lε@Qvd;"ɤl_QS^;.O_.O ( -)!|v/UNkĵLM0rTFgːSV (lr8nTwsoqf0.;-#vYH]RL# .?<ԎH'z/'vD8k\AH|v>4<} e_j HXty"DmKD'Hz\Ᲊ!c k\Kz\n*r"vRw 岤^JɎ(Mz"~LO3P?'I|7n2|XWt2x*i2T g[ci#"gԎqQ..gg߆񺔎~01~3OђRp&R RT~Zb%oKULYx4#1(Ȧ.jiKjm2jXuA*!3.å̮YD5v{Jcn @jY$iu9틿*&*^~VM&O6=˔IF1~(vzzV+SSfqԣq3,D!_MQ-QR/s86'5UmgRzD;~NFI'L^1nGtvD!t}vDDkDzl0`#)؈N= IDAT>?6G8k 3NrgR 34x2Rp's3ƥL'`ǸʘGSgjp9R[)HqFYԴ8b˰z"VD2c\;{1uaG:-_rUvD]vDW0OSY9zaUD;":|_WVOYP#--zqAX&#bj|捫jk. * F# p =85VbkKĥdG$ʥeK,o˒rY4WU#jULK k Wzo-,F^6"x-/r#/n|<*S;_z)qla&TaC/%5LdĸIxo8 ZzRx1>ilGthWp8йF๑s Snon\;wU6I=W9,*?_7ܺ};ASs-Ü4pjk/5M=jp9Ssjyns'rYNpٟvc@JZÎh#z݀w;"O3h5ύ ‹t睸o~EL[wR{鈻סG__ sxmƆT*^rZ;FCQ.yJtf0p9yَȚ1rj;سFU%irQt]߿sak*Q;UOw9;J[oJM<+-]yZB&-vDq.bE$Yr.J79yE|Bd܎4pywpPYzJ6JU^\<8xv8]OZ6ZWLۤRG'vs*8{_OWr x<fx4RpJϢvDu*'4KB2nGpqS-^j2tzw?(JU1U|]Ϡa,&h5>֌721x]yzU~< p.qW<іnf"md8}D t{VA3^S6 inG lm%lJ#rp83e8Y+g^Fઍ;0~-ZۺWi?t^te#Z~KOKõ ka^DE a)IӐhp"_'ʰH|p]zxxx8xz\A\3NkPi> 0_3ijvD!,1vDJaӪ $\oy~v-YtN;8.cHi~vp8ՉMd\ / ж^7|CR˧ݎ.=<<<<= r"4;{~ڹVeg_;@0fKM?zm@gx.|WhYtp0*ص ']Aeț(\.]ɏ.UJYOR|2tڹxrpq`4yKNY.RݎZ}n@ZBhW.KvD>:˽n/)qsw;"KOK t"tZй{.m/w{xxxxx ?Ğ+YL%IENDB`qstardict/plugins/stardict/pixmaps/pixmaps.qrc000066400000000000000000000003501453553600400222260ustar00rootroot00000000000000 arrow-down.png arrow-up.png list-add.png list-remove.png logo.png qstardict/plugins/stardict/readline.cpp000066400000000000000000000054671453553600400206620ustar00rootroot00000000000000/* * This file part of sdcv - console version of Stardict program * http://sdcv.sourceforge.net * Copyright (C) 2005 Evgeniy * * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #ifdef WITH_READLINE #include #include #endif #include #include "utils.hpp" #include "readline.hpp" bool stdio_getline(FILE *in, std::string &str) { assert(in != nullptr); str.clear(); int ch; while ((ch = fgetc(in)) != EOF && ch != '\n') str += ch; return EOF != ch; } #ifndef WITH_READLINE namespace { class dummy_readline : public IReadLine { public: bool read(const std::string &banner, std::string &line) override { printf("%s", banner.c_str()); return stdio_getline(stdin, line); } }; } #else namespace { class real_readline : public IReadLine { public: real_readline() { rl_readline_name = "sdcv"; using_history(); const std::string histname = std::string(g_get_home_dir()) + G_DIR_SEPARATOR + ".sdcv_history"; read_history(histname.c_str()); } ~real_readline() { const std::string histname = std::string(g_get_home_dir()) + G_DIR_SEPARATOR + ".sdcv_history"; write_history(histname.c_str()); const gchar *hist_size_str = g_getenv("SDCV_HISTSIZE"); int hist_size; if (!hist_size_str || sscanf(hist_size_str, "%d", &hist_size) < 1) hist_size = 2000; history_truncate_file(histname.c_str(), hist_size); } bool read(const std::string &banner, std::string &line) override { char *phrase = nullptr; phrase = readline(banner.c_str()); if (phrase) { line = phrase; free(phrase); return true; } return false; } void add_to_history(const std::string &phrase) override { add_history(phrase.c_str()); } }; } #endif //WITH_READLINE IReadLine *create_readline_object() { #ifdef WITH_READLINE return new real_readline; #else return new dummy_readline; #endif } qstardict/plugins/stardict/readline.hpp000066400000000000000000000005411453553600400206530ustar00rootroot00000000000000#pragma once #include class IReadLine { public: virtual ~IReadLine() {} virtual bool read(const std::string &banner, std::string &line) = 0; virtual void add_to_history(const std::string &) {} }; extern std::string sdcv_readline; extern IReadLine *create_readline_object(); extern bool stdio_getline(FILE *in, std::string &str); qstardict/plugins/stardict/settingsdialog.cpp000066400000000000000000000062551453553600400221130ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "settingsdialog.h" #include #include "stardict.h" SettingsDialog::SettingsDialog(StarDict *plugin, QWidget *parent) : QDialog(parent), m_plugin(plugin) { setupUi(this); reformatListsBox->setChecked(m_plugin->m_reformatLists); expandAbbreviationsBox->setChecked(m_plugin->m_expandAbbreviations); dictDirsList->addItems(m_plugin->m_dictDirs); connect(this, SIGNAL(accepted()), SLOT(apply())); } void SettingsDialog::on_addDictDirButton_clicked() { QString dirName = QFileDialog::getExistingDirectory(this, tr("Select dictionaries directory")); if (! dirName.isEmpty()) { dictDirsList->addItem(dirName); } } void SettingsDialog::on_removeDictDirButton_clicked() { delete dictDirsList->takeItem(dictDirsList->currentRow()); } void SettingsDialog::on_moveUpDictDirButton_clicked() { if (dictDirsList->currentRow() > 0) { dictDirsList->insertItem(dictDirsList->currentRow(), dictDirsList->takeItem(dictDirsList->currentRow())); dictDirsList->setCurrentRow(dictDirsList->currentRow() - 1); } } void SettingsDialog::on_moveDownDictDirButton_clicked() { if (dictDirsList->currentRow() < dictDirsList->count() - 1) dictDirsList->insertItem(dictDirsList->currentRow(), dictDirsList->takeItem(dictDirsList->currentRow() + 1)); } void SettingsDialog::apply() { m_plugin->m_reformatLists = reformatListsBox->isChecked(); m_plugin->m_expandAbbreviations = expandAbbreviationsBox->isChecked(); m_plugin->m_dictDirs.clear(); for (int i = 0; i < dictDirsList->count(); ++i) m_plugin->m_dictDirs << dictDirsList->item(i)->text(); } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/stardict/settingsdialog.h000066400000000000000000000040231453553600400215470ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SETTINGSDIALOG_H #define SETTINGSDIALOG_H #include #include "ui_settingsdialog.h" class StarDict; class SettingsDialog: public QDialog, private Ui::SettingsDialog { Q_OBJECT public: SettingsDialog(StarDict *plugin, QWidget *parent = 0); private slots: void on_addDictDirButton_clicked(); void on_removeDictDirButton_clicked(); void on_moveUpDictDirButton_clicked(); void on_moveDownDictDirButton_clicked(); void apply(); private: StarDict *m_plugin; }; #endif // SETTINGSDIALOG_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/stardict/settingsdialog.ui000066400000000000000000000202571453553600400217440ustar00rootroot00000000000000 SettingsDialog 0 0 466 332 StarDict plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations false <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories 9 9 9 9 6 6 6 0 0 0 0 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add :/pics/list-add.png <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove :/pics/list-remove.png <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> Up :/pics/arrow-up.png <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Down :/pics/arrow-down.png Qt::Horizontal 342 26 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() SettingsDialog accept() 227 311 157 274 buttonBox rejected() SettingsDialog reject() 295 317 286 274 reformatListsBox toggled(bool) reformatTranslationsWarningLabel setVisible(bool) 55 43 48 86 qstardict/plugins/stardict/stardict.cpp000066400000000000000000000361151453553600400207060ustar00rootroot00000000000000/***************************************************************************** * stardict.cpp - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "stardict.h" #include #include #include #include #include #include #include #include #include #include #include #include "libwrapper.hpp" #include "file.hpp" #include "settingsdialog.h" #include "../pluginserver.h" namespace { void xdxf2html(QString &str); QString whereDict(const QString &name, const QStringList &dictDirs); const int MaxFuzzy = 24; class StdList: public std::list { public: StdList() : std::list() { } StdList(const QList &list) : std::list() { for (QList::const_iterator i = list.begin(); i != list.end(); ++i) push_back(i->toUtf8().data()); } StdList(const std::list &list) : std::list(list) { } QStringList toStringList() const { QStringList list; for (const_iterator i = begin(); i != end(); ++i) list << QString::fromUtf8(i->c_str()); return list; } }; class IfoListSetter { public: IfoListSetter(QStringList *list) : m_list(list) { } void operator ()(const std::string &filename, bool) { DictInfo info; if (info.load_from_ifo_file(filename, false)) m_list->push_back(QString::fromUtf8(info.bookname.c_str())); } private: QStringList *m_list; }; class IfoFileFinder { public: IfoFileFinder(const QString &name, QString *filename) : m_name(name.toUtf8().data()), m_filename(filename) { } void operator()(const std::string &filename, bool) { DictInfo info; if (info.load_from_ifo_file(filename, false) && info.bookname == m_name) { *m_filename = QString::fromUtf8(filename.c_str()); } } private: std::string m_name; QString *m_filename; }; } StarDict::StarDict(QObject *parent) : QObject(parent) { m_sdLibs = new Libs; QSettings settings("qstardict","qstardict"); m_dictDirs = settings.value("StarDict/dictDirs", m_dictDirs).toStringList(); QString primaryDictDir = QDir::homePath() + "/.qstardict/dic/stardict"; if (m_dictDirs.isEmpty()) { m_dictDirs << primaryDictDir; m_dictDirs << QDir::homePath() + "/.stardict/dic"; #ifdef Q_OS_UNIX m_dictDirs << "/usr/share/stardict/dic"; #else m_dictDirs << QCoreApplication::applicationDirPath() + "/dic"; #endif // Q_OS_UNIX } if (! m_dictDirs.contains(primaryDictDir)) m_dictDirs.insert(0, primaryDictDir); m_reformatLists = settings.value("StarDict/reformatLists", true).toBool(); m_expandAbbreviations = settings.value("StarDict/expandAbbreviations", true).toBool(); } StarDict::~StarDict() { QSettings settings("qstardict","qstardict"); settings.setValue("StarDict/dictDirs", m_dictDirs); settings.setValue("StarDict/reformatLists", m_reformatLists); settings.setValue("StarDict/expandAbbreviations", m_expandAbbreviations); delete m_sdLibs; } QIcon StarDict::pluginIcon() const { return QIcon(":/pics/logo.png"); } QStringList StarDict::availableDicts() const { QStringList result; IfoListSetter setter(&result); for_each_file(StdList(m_dictDirs), ".ifo", StdList(), StdList(), setter); return result; } void StarDict::setLoadedDicts(const QStringList &loadedDicts) { QStringList available = availableDicts(); StdList disabled; for (QStringList::const_iterator i = available.begin(); i != available.end(); ++i) { if (! loadedDicts.contains(*i)) disabled.push_back(i->toUtf8().data()); } m_sdLibs->load(StdList(m_dictDirs), StdList(loadedDicts), disabled); m_loadedDicts.clear(); for (int i = 0; i < m_sdLibs->ndicts(); ++i) m_loadedDicts[QString::fromUtf8(m_sdLibs->dict_name(i).c_str())] = i; } StarDict::DictInfo StarDict::dictInfo(const QString &dict) { ::DictInfo nativeInfo; nativeInfo.wordcount = 0; QString ifoFileLocation = whereDict(dict, m_dictDirs); if (! nativeInfo.load_from_ifo_file(ifoFileLocation.toUtf8().data(), false)) { return DictInfo(); } QString pluginId = qsd->idForPlugin(this); DictInfo result(pluginId, dict); result.setFilename(ifoFileLocation); result.setAuthor(QString::fromUtf8(nativeInfo.author.c_str())); result.setDescription(QString::fromUtf8(nativeInfo.description.c_str())); result.setWordsCount(nativeInfo.wordcount ? static_cast(nativeInfo.wordcount) : -1); return result; } bool StarDict::isTranslatable(const QString &dict, const QString &word) { if (! m_loadedDicts.contains(dict)) return false; long ind; return m_sdLibs->SimpleLookupWord(word.toUtf8().data(), ind, m_loadedDicts[dict]); } StarDict::Translation StarDict::translate(const QString &dict, const QString &word) { if (! m_loadedDicts.contains(dict)) return Translation(); if (word.isEmpty()) return Translation(); int dictIndex = m_loadedDicts[dict]; long ind; if (! m_sdLibs->SimpleLookupWord(word.toUtf8().data(), ind, m_loadedDicts[dict])) return Translation(); return Translation(QString::fromUtf8(m_sdLibs->poGetWord(ind, dictIndex)), QString::fromUtf8(m_sdLibs->dict_name(dictIndex).c_str()), parseData(m_sdLibs->poGetWordData(ind, dictIndex), dictIndex, true, m_reformatLists, m_expandAbbreviations)); } QStringList StarDict::findSimilarWords(const QString &dict, const QString &word) { if (! m_loadedDicts.contains(dict)) return QStringList(); gchar *fuzzy_res[MaxFuzzy]; if (! m_sdLibs->LookupWithFuzzy(word.toUtf8().data(), fuzzy_res, MaxFuzzy)) return QStringList(); QStringList result; for (gchar **p = fuzzy_res, **end = fuzzy_res + MaxFuzzy; p != end && *p; ++p) { result << QString::fromUtf8(*p); g_free(*p); } return result; } int StarDict::execSettingsDialog(QWidget *parent) { ::SettingsDialog dialog(this, parent); return dialog.exec(); } QString StarDict::parseData(const char *data, int dictIndex, bool htmlSpaces, bool reformatLists, bool expandAbbreviations) { QString result; quint32 dataSize = *reinterpret_cast(data); const char *dataEnd = data + dataSize; const char *ptr = data + sizeof(quint32); while (ptr < dataEnd) { switch (*ptr++) { case 'm': case 'l': case 'g': case 'h': { QString str = QString::fromUtf8(ptr); ptr += str.toUtf8().length() + 1; result += str; break; } case 'x': { QString str = QString::fromUtf8(ptr); ptr += str.toUtf8().length() + 1; xdxf2html(str); result += str; break; } case 't': { QString str = QString::fromUtf8(ptr); ptr += str.toUtf8().length() + 1; result += ""; result += str; result += ""; break; } case 'y': { ptr += strlen(ptr) + 1; break; } case 'W': case 'P': { ptr += *reinterpret_cast(ptr) + sizeof(quint32); break; } default: ; // nothing } } if (expandAbbreviations) { QRegExp regExp("_\\S+[\\.:]"); int pos = 0; while ((pos = regExp.indexIn(result, pos)) != -1) { long ind; if (m_sdLibs->SimpleLookupWord(result.mid(pos, regExp.matchedLength()).toUtf8().data(), ind, dictIndex)) { QString expanded = ""; expanded += parseData(m_sdLibs->poGetWordData(ind, dictIndex)); if (result[pos + regExp.matchedLength() - 1] == ':') expanded += ':'; expanded += ""; result.replace(pos, regExp.matchedLength(), expanded); pos += expanded.length(); } else pos += regExp.matchedLength(); } } if (reformatLists) { int pos = 0; QStack openedLists; while (pos < result.length()) { if (result[pos].isDigit()) { int n = 0; while (result[pos + n].isDigit()) ++n; pos += n; if (result[pos] == '&' && result.mid(pos + 1, 3) == "gt;") result.replace(pos, 4, ">"); QChar marker = result[pos]; QString replacement; if (marker == '>' || marker == '.' || marker == ')') { if (n == 1 && result[pos - 1] == '1') // open new list { if (openedLists.contains(marker)) { replacement = ""; while (openedLists.size() && openedLists.top() != marker) { replacement += ""; openedLists.pop(); } } openedLists.push(marker); replacement += "
    "; } else { while (openedLists.size() && openedLists.top() != marker) { replacement += "
"; openedLists.pop(); } replacement += ""; } replacement += "
  • "; pos -= n; n += pos; while (result[pos - 1].isSpace()) --pos; while (result[n + 1].isSpace()) ++n; result.replace(pos, n - pos + 1, replacement); pos += replacement.length(); } else ++pos; } else ++pos; } while (openedLists.size()) { result += "
  • "; openedLists.pop(); } } if (htmlSpaces && result.length()) { int n = 0; while (result[n].isSpace()) ++n; result.remove(0, n); n = 0; while (result[result.length() - 1 - n].isSpace()) ++n; result.remove(result.length() - n, n); for (int pos = 0; pos < result.length();) { switch (result[pos].toLatin1()) { case '[': result.insert(pos, ""); pos += 28 + 1; // sizeof "" + 1 break; case ']': result.insert(pos + 1, ""); pos += 7 + 1; // sizeof "" + 1 break; case '\t': result.insert(pos, "    "); pos += 24 + 1; // sizeof "    " + 1 break; case '\n': { int count = 1; n = 1; while (result[pos + n].isSpace()) { if (result[pos + n] == '\n') ++count; ++n; } if (count > 1) result.replace(pos, n, "

    "); else result.replace(pos, n, "
    "); break; } default: ++pos; } } } return result; } std::optional StarDict::addDictionary(QWidget *parent, const QString &ifoFileLocation) { QString dictDirPath = QDir::homePath() + "/.qstardict/dic/stardict"; QDir dictDir(dictDirPath); if (! dictDir.exists()) dictDir.mkpath("."); QFileInfo ifoFileInfo(ifoFileLocation); // copy the .idx file QString idxFileLocation = ifoFileInfo.path() + "/" + ifoFileInfo.completeBaseName() + ".idx"; QString targetIdxFileLocation = dictDirPath + "/" + ifoFileInfo.completeBaseName() + ".idx"; if (! QFileInfo::exists(idxFileLocation)) { QMessageBox::warning(parent, tr("Cannot import the dictionary"), tr("The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored")); return std::nullopt; } if (QFileInfo::exists(targetIdxFileLocation)) QFile::remove(targetIdxFileLocation); if (! QFile::copy(idxFileLocation, targetIdxFileLocation)) { QMessageBox::warning(parent, tr("Cannot import the dictionary"), tr("The dictionary cannot be imported because .idx file cannot be copied")); return std::nullopt; } // copy the .dict.dz file QString dictDzFileLocation = ifoFileInfo.path() + "/" + ifoFileInfo.completeBaseName() + ".dict.dz"; QString targetDictDzFileLocation = dictDirPath + "/" + ifoFileInfo.completeBaseName() + ".dict.dz"; if (! QFileInfo::exists(dictDzFileLocation)) { QMessageBox::warning(parent, tr("Cannot import the dictionary"), tr("The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored")); return std::nullopt; } if (QFileInfo::exists(targetDictDzFileLocation)) QFile::remove(targetDictDzFileLocation); if (! QFile::copy(dictDzFileLocation, targetDictDzFileLocation)) { QMessageBox::warning(parent, tr("Cannot import the dictionary"), tr("The dictionary cannot be imported because .dict.dz file cannot be copied")); return std::nullopt; } // copy the .ifo file QString targetIfoFileLocation = dictDirPath + "/" + ifoFileInfo.fileName(); if (QFileInfo::exists(targetIfoFileLocation)) QFile::remove(targetIfoFileLocation); if (! QFile::copy(ifoFileLocation, targetIfoFileLocation)) { QMessageBox::warning(parent, tr("Cannot import the dictionary"), tr("The dictionary cannot be imported because .ifo file cannot be copied")); return std::nullopt; } return ifoFileInfo.completeBaseName(); } bool StarDict::isDictionaryRemovable(const QString &dict) { QString dictLocation = whereDict(dict, m_dictDirs); return QFile::permissions(dictLocation) & QFileDevice::WriteUser; } bool StarDict::removeDictionary(const QString &dict) { if (!isDictionaryRemovable(dict)) return false; QString ifoFileLocation = whereDict(dict, m_dictDirs); QFileInfo ifoFileInfo(ifoFileLocation); QString idxFileLocation = ifoFileInfo.path() + ifoFileInfo.baseName() + ".idx"; QString idxOftFileLocation = ifoFileInfo.path() + ifoFileInfo.baseName() + ".idx.oft"; QString dictDzFileLocation = ifoFileInfo.path() + ifoFileInfo.baseName() + ".dict.dz"; QFile::remove(ifoFileLocation); QFile::remove(idxFileLocation); QFile::remove(idxOftFileLocation); QFile::remove(dictDzFileLocation); return true; } namespace { QString whereDict(const QString &name, const QStringList &dictDirs) { QString filename; IfoFileFinder finder(name, &filename); for_each_file(StdList(dictDirs), ".ifo", StdList(), StdList(), finder); return filename; } void xdxf2html(QString &str) { str.replace("", ""); str.replace("", "["); str.replace("", "]"); str.replace("", ""); str.replace(QRegExp(".*<\\/k>"), ""); str.replace(QRegExp("(<\\/abr>)|(<\\ex>)"), " #include #include class StarDict: public QObject, public QStarDict::BasePlugin, public QStarDict::DictPlugin, public QStarDict::ConfigurablePlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qstardict.StarDictPlugin/1.0" FILE "stardict.json") Q_INTERFACES(QStarDict::BasePlugin QStarDict::DictPlugin QStarDict::ConfigurablePlugin) public: StarDict(QObject *parent = 0); ~StarDict(); QIcon pluginIcon() const; Features features() const { return Features(Feature::SearchSimilar); } QStringList availableDicts() const; QStringList loadedDicts() const { return m_loadedDicts.keys(); } void setLoadedDicts(const QStringList &loadedDicts); DictInfo dictInfo(const QString &dict); bool isTranslatable(const QString &dict, const QString &word); Translation translate(const QString &dict, const QString &word); virtual QStringList findSimilarWords(const QString &dict, const QString &word); std::optional dictionaryFileFilter() const { return tr("StarDict IFO files (*.ifo)"); } std::optional addDictionary(QWidget *parent, const QString &fileName); bool isDictionaryRemovable(const QString &dict); bool removeDictionary(const QString &dict); int execSettingsDialog(QWidget *parent); friend class SettingsDialog; private: QString parseData(const char *data, int dictIndex = -1, bool htmlSpaces = false, bool reformatLists = false, bool expandAbbreviations = false); Libs *m_sdLibs; QStringList m_dictDirs; QHash m_loadedDicts; bool m_reformatLists; bool m_expandAbbreviations; }; #endif // STARDICT_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/stardict/stardict.pro000066400000000000000000000041761453553600400207260ustar00rootroot00000000000000############################################################################# # stardict.pro - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2008 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TARGET = stardict META_VERSION = 1.0 META_NAME = StarDict META_DESC = The StarDict plugin META_AUTHORS = Hu Zheng ;Opera Wang ;Evgeniy Dushistov ;Alexander Rodin META_FEATURES = dict;defenable include(../plugin.pri) win32:CONFIG += plugin HEADERS += \ stardict.h \ stardict_lib.hpp \ dictziplib.hpp \ distance.h \ file.hpp \ libwrapper.h \ mapfile.hpp \ readline.hpp \ settingsdialog.h \ utils.h SOURCES += \ stardict.cpp \ stardict_lib.cpp \ dictziplib.cpp \ distance.cpp \ libwrapper.cpp \ readline.cpp \ settingsdialog.cpp \ utils.cpp FORMS += \ settingsdialog.ui RESOURCES += \ pixmaps/pixmaps.qrc qstardict/plugins/stardict/stardict_lib.cpp000066400000000000000000001531711453553600400215360ustar00rootroot00000000000000#ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include "distance.hpp" #include "mapfile.hpp" #include "utils.hpp" #include "stardict_lib.hpp" #define TO_STR2(xstr) #xstr #define TO_STR1(xstr) TO_STR2(xstr) #define THROW_IF_ERROR(expr) \ do { \ assert((expr)); \ if (!(expr)) \ throw std::runtime_error(#expr " not true at " __FILE__ ": " TO_STR1(__LINE__)); \ } while (false) // Notice: read src/tools/DICTFILE_FORMAT for the dictionary // file's format information! namespace { struct Fuzzystruct { char *pMatchWord; int iMatchWordDistance; }; static inline bool bIsVowel(gchar inputchar) { gchar ch = g_ascii_toupper(inputchar); return (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U'); } static bool bIsPureEnglish(const gchar *str) { // i think this should work even when it is UTF8 string :). for (int i = 0; str[i] != 0; i++) //if(str[i]<0) //if(str[i]<32 || str[i]>126) // tab equal 9,so this is not OK. // Better use isascii() but not str[i]<0 while char is default unsigned in arm if (!isascii(str[i])) return false; return true; } static inline gint stardict_strcmp(const gchar *s1, const gchar *s2) { const gint a = g_ascii_strcasecmp(s1, s2); if (a == 0) return strcmp(s1, s2); else return a; } static void unicode_strdown(gunichar *str) { while (*str) { *str = g_unichar_tolower(*str); ++str; } } } bool DictInfo::load_from_ifo_file(const std::string &ifofilename, bool istreedict) { ifo_file_name = ifofilename; glib::CharStr buffer; if (!g_file_get_contents(ifofilename.c_str(), get_addr(buffer), nullptr, nullptr)) return false; static const char TREEDICT_MAGIC_DATA[] = "StarDict's treedict ifo file"; static const char DICT_MAGIC_DATA[] = "StarDict's dict ifo file"; const gchar *magic_data = istreedict ? TREEDICT_MAGIC_DATA : DICT_MAGIC_DATA; static const unsigned char utf8_bom[] = { 0xEF, 0xBB, 0xBF, '\0' }; if (!g_str_has_prefix( g_str_has_prefix(get_impl(buffer), (const gchar *)(utf8_bom)) ? get_impl(buffer) + 3 : get_impl(buffer), magic_data)) { return false; } gchar *p1 = get_impl(buffer) + strlen(magic_data) - 1; gchar *p2 = strstr(p1, "\nwordcount="); if (p2 == nullptr) return false; gchar *p3 = strchr(p2 + sizeof("\nwordcount=") - 1, '\n'); wordcount = atol(std::string(p2 + sizeof("\nwordcount=") - 1, p3 - (p2 + sizeof("\nwordcount=") - 1)).c_str()); if (istreedict) { p2 = strstr(p1, "\ntdxfilesize="); if (p2 == nullptr) return false; p3 = strchr(p2 + sizeof("\ntdxfilesize=") - 1, '\n'); index_file_size = atol(std::string(p2 + sizeof("\ntdxfilesize=") - 1, p3 - (p2 + sizeof("\ntdxfilesize=") - 1)).c_str()); } else { p2 = strstr(p1, "\nidxfilesize="); if (p2 == nullptr) return false; p3 = strchr(p2 + sizeof("\nidxfilesize=") - 1, '\n'); index_file_size = atol(std::string(p2 + sizeof("\nidxfilesize=") - 1, p3 - (p2 + sizeof("\nidxfilesize=") - 1)).c_str()); } p2 = strstr(p1, "\nbookname="); if (p2 == nullptr) return false; p2 = p2 + sizeof("\nbookname=") - 1; p3 = strchr(p2, '\n'); bookname.assign(p2, p3 - p2); p2 = strstr(p1, "\nauthor="); if (p2) { p2 = p2 + sizeof("\nauthor=") - 1; p3 = strchr(p2, '\n'); author.assign(p2, p3 - p2); } p2 = strstr(p1, "\nemail="); if (p2) { p2 = p2 + sizeof("\nemail=") - 1; p3 = strchr(p2, '\n'); email.assign(p2, p3 - p2); } p2 = strstr(p1, "\nwebsite="); if (p2) { p2 = p2 + sizeof("\nwebsite=") - 1; p3 = strchr(p2, '\n'); website.assign(p2, p3 - p2); } p2 = strstr(p1, "\ndate="); if (p2) { p2 = p2 + sizeof("\ndate=") - 1; p3 = strchr(p2, '\n'); date.assign(p2, p3 - p2); } p2 = strstr(p1, "\ndescription="); if (p2) { p2 = p2 + sizeof("\ndescription=") - 1; p3 = strchr(p2, '\n'); description.assign(p2, p3 - p2); } p2 = strstr(p1, "\nsametypesequence="); if (p2) { p2 += sizeof("\nsametypesequence=") - 1; p3 = strchr(p2, '\n'); sametypesequence.assign(p2, p3 - p2); } p2 = strstr(p1, "\nsynwordcount="); syn_wordcount = 0; if (p2) { p2 += sizeof("\nsynwordcount=") - 1; p3 = strchr(p2, '\n'); syn_wordcount = atol(std::string(p2, p3 - p2).c_str()); } return true; } gchar *DictBase::GetWordData(guint32 idxitem_offset, guint32 idxitem_size) { for (int i = 0; i < WORDDATA_CACHE_NUM; i++) if (cache[i].data && cache[i].offset == idxitem_offset) return cache[i].data; if (dictfile) fseek(dictfile, idxitem_offset, SEEK_SET); gchar *data; if (!sametypesequence.empty()) { glib::CharStr origin_data((gchar *)g_malloc(idxitem_size)); if (dictfile) { const size_t nitems = fread(get_impl(origin_data), idxitem_size, 1, dictfile); THROW_IF_ERROR(nitems == 1); } else dictdzfile->read(get_impl(origin_data), idxitem_offset, idxitem_size); guint32 data_size; gint sametypesequence_len = sametypesequence.length(); //there have sametypesequence_len char being omitted. data_size = idxitem_size + sizeof(guint32) + sametypesequence_len; //if the last item's size is determined by the end up '\0',then +=sizeof(gchar); //if the last item's size is determined by the head guint32 type data,then +=sizeof(guint32); switch (sametypesequence[sametypesequence_len - 1]) { case 'm': case 't': case 'y': case 'l': case 'g': case 'x': case 'k': data_size += sizeof(gchar); break; case 'W': case 'P': data_size += sizeof(guint32); break; default: if (g_ascii_isupper(sametypesequence[sametypesequence_len - 1])) data_size += sizeof(guint32); else data_size += sizeof(gchar); break; } data = (gchar *)g_malloc(data_size); gchar *p1, *p2; p1 = data + sizeof(guint32); p2 = get_impl(origin_data); guint32 sec_size; //copy the head items. for (int i = 0; i < sametypesequence_len - 1; i++) { *p1 = sametypesequence[i]; p1 += sizeof(gchar); switch (sametypesequence[i]) { case 'm': case 't': case 'y': case 'l': case 'g': case 'x': case 'k': sec_size = strlen(p2) + 1; memcpy(p1, p2, sec_size); p1 += sec_size; p2 += sec_size; break; case 'W': case 'P': sec_size = get_uint32(p2); sec_size += sizeof(guint32); memcpy(p1, p2, sec_size); p1 += sec_size; p2 += sec_size; break; default: if (g_ascii_isupper(sametypesequence[i])) { sec_size = get_uint32(p2); sec_size += sizeof(guint32); } else { sec_size = strlen(p2) + 1; } memcpy(p1, p2, sec_size); p1 += sec_size; p2 += sec_size; break; } } //calculate the last item 's size. sec_size = idxitem_size - (p2 - get_impl(origin_data)); *p1 = sametypesequence[sametypesequence_len - 1]; p1 += sizeof(gchar); switch (sametypesequence[sametypesequence_len - 1]) { case 'm': case 't': case 'y': case 'l': case 'g': case 'x': case 'k': memcpy(p1, p2, sec_size); p1 += sec_size; *p1 = '\0'; //add the end up '\0'; break; case 'W': case 'P': set_uint32(p1, sec_size); p1 += sizeof(guint32); memcpy(p1, p2, sec_size); break; default: if (g_ascii_isupper(sametypesequence[sametypesequence_len - 1])) { set_uint32(p1, sec_size); p1 += sizeof(guint32); memcpy(p1, p2, sec_size); } else { memcpy(p1, p2, sec_size); p1 += sec_size; *p1 = '\0'; } break; } set_uint32(data, data_size); } else { data = (gchar *)g_malloc(idxitem_size + sizeof(guint32)); if (dictfile) { const size_t nitems = fread(data + sizeof(guint32), idxitem_size, 1, dictfile); THROW_IF_ERROR(nitems == 1); } else dictdzfile->read(data + sizeof(guint32), idxitem_offset, idxitem_size); set_uint32(data, idxitem_size + sizeof(guint32)); } g_free(cache[cache_cur].data); cache[cache_cur].data = data; cache[cache_cur].offset = idxitem_offset; cache_cur++; if (cache_cur == WORDDATA_CACHE_NUM) cache_cur = 0; return data; } bool DictBase::SearchData(std::vector &SearchWords, guint32 idxitem_offset, guint32 idxitem_size, gchar *origin_data) { int nWord = SearchWords.size(); std::vector WordFind(nWord, false); int nfound = 0; if (dictfile) fseek(dictfile, idxitem_offset, SEEK_SET); if (dictfile) { const size_t nitems = fread(origin_data, idxitem_size, 1, dictfile); THROW_IF_ERROR(nitems == 1); } else dictdzfile->read(origin_data, idxitem_offset, idxitem_size); gchar *p = origin_data; guint32 sec_size; int j; if (!sametypesequence.empty()) { gint sametypesequence_len = sametypesequence.length(); for (int i = 0; i < sametypesequence_len - 1; i++) { switch (sametypesequence[i]) { case 'm': case 't': case 'y': case 'l': case 'g': case 'x': case 'k': for (j = 0; j < nWord; j++) if (!WordFind[j] && strstr(p, SearchWords[j].c_str())) { WordFind[j] = true; ++nfound; } if (nfound == nWord) return true; sec_size = strlen(p) + 1; p += sec_size; break; default: if (g_ascii_isupper(sametypesequence[i])) { sec_size = get_uint32(p); sec_size += sizeof(guint32); } else { sec_size = strlen(p) + 1; } p += sec_size; } } switch (sametypesequence[sametypesequence_len - 1]) { case 'm': case 't': case 'y': case 'l': case 'g': case 'x': case 'k': sec_size = idxitem_size - (p - origin_data); for (j = 0; j < nWord; j++) if (!WordFind[j] && g_strstr_len(p, sec_size, SearchWords[j].c_str())) { WordFind[j] = true; ++nfound; } if (nfound == nWord) return true; break; } } else { while (guint32(p - origin_data) < idxitem_size) { switch (*p) { case 'm': case 't': case 'y': case 'l': case 'g': case 'x': case 'k': for (j = 0; j < nWord; j++) if (!WordFind[j] && strstr(p, SearchWords[j].c_str())) { WordFind[j] = true; ++nfound; } if (nfound == nWord) return true; sec_size = strlen(p) + 1; p += sec_size; break; default: if (g_ascii_isupper(*p)) { sec_size = get_uint32(p); sec_size += sizeof(guint32); } else { sec_size = strlen(p) + 1; } p += sec_size; } } } return false; } namespace { class OffsetIndex : public IIndexFile { public: OffsetIndex() : idxfile(nullptr) { } ~OffsetIndex() { if (idxfile) fclose(idxfile); } bool load(const std::string &url, gulong wc, gulong fsize, bool verbose) override; const gchar *get_key(glong idx) override; void get_data(glong idx) override { get_key(idx); } const gchar *get_key_and_data(glong idx) override { return get_key(idx); } bool lookup(const char *str, glong &idx) override; private: static const gint ENTR_PER_PAGE = 32; static const char *CACHE_MAGIC; std::vector wordoffset; FILE *idxfile; gulong wordcount; gchar wordentry_buf[256 + sizeof(guint32) * 2]; // The length of "word_str" should be less than 256. See src/tools/DICTFILE_FORMAT. struct index_entry { glong idx; std::string keystr; void assign(glong i, const std::string &str) { idx = i; keystr.assign(str); } }; index_entry first, last, middle, real_last; struct page_entry { gchar *keystr; guint32 off, size; }; std::vector page_data; struct page_t { glong idx = -1; page_entry entries[ENTR_PER_PAGE]; page_t() {} void fill(gchar *data, gint nent, glong idx_); } page; gulong load_page(glong page_idx); const gchar *read_first_on_page_key(glong page_idx); const gchar *get_first_on_page_key(glong page_idx); bool load_cache(const std::string &url); bool save_cache(const std::string &url, bool verbose); static std::list get_cache_variant(const std::string &url); }; const char *OffsetIndex::CACHE_MAGIC = "StarDict's Cache, Version: 0.2"; #define CACHE_MAGIC_BYTES 0x51a4d1c1 class WordListIndex : public IIndexFile { public: WordListIndex() : idxdatabuf(nullptr) { } ~WordListIndex() { g_free(idxdatabuf); } bool load(const std::string &url, gulong wc, gulong fsize, bool verbose) override; const gchar *get_key(glong idx) override { return wordlist[idx]; } void get_data(glong idx) override; const gchar *get_key_and_data(glong idx) override { get_data(idx); return get_key(idx); } bool lookup(const char *str, glong &idx) override; private: gchar *idxdatabuf; std::vector wordlist; }; void OffsetIndex::page_t::fill(gchar *data, gint nent, glong idx_) { idx = idx_; gchar *p = data; glong len; for (gint i = 0; i < nent; ++i) { entries[i].keystr = p; len = strlen(p); p += len + 1; entries[i].off = g_ntohl(get_uint32(p)); p += sizeof(guint32); entries[i].size = g_ntohl(get_uint32(p)); p += sizeof(guint32); } } inline const gchar *OffsetIndex::read_first_on_page_key(glong page_idx) { fseek(idxfile, wordoffset[page_idx], SEEK_SET); guint32 page_size = wordoffset[page_idx + 1] - wordoffset[page_idx]; const size_t nitems = fread(wordentry_buf, std::min(sizeof(wordentry_buf), static_cast(page_size)), 1, idxfile); THROW_IF_ERROR(nitems == 1); //TODO: check returned values, deal with word entry that strlen>255. return wordentry_buf; } inline const gchar *OffsetIndex::get_first_on_page_key(glong page_idx) { if (page_idx < middle.idx) { if (page_idx == first.idx) return first.keystr.c_str(); return read_first_on_page_key(page_idx); } else if (page_idx > middle.idx) { if (page_idx == last.idx) return last.keystr.c_str(); return read_first_on_page_key(page_idx); } else return middle.keystr.c_str(); } bool OffsetIndex::load_cache(const std::string &url) { const std::list vars = get_cache_variant(url); for (const std::string &item : vars) { struct ::stat idxstat, cachestat; if (g_stat(url.c_str(), &idxstat) != 0 || g_stat(item.c_str(), &cachestat) != 0) continue; if (cachestat.st_mtime < idxstat.st_mtime) continue; MapFile mf; if (!mf.open(item.c_str(), cachestat.st_size)) continue; if (strncmp(mf.begin(), CACHE_MAGIC, strlen(CACHE_MAGIC)) != 0) continue; guint32 tmp; memcpy(&tmp, mf.begin() + strlen(CACHE_MAGIC), sizeof(tmp)); if (tmp != CACHE_MAGIC_BYTES) continue; memcpy(&wordoffset[0], mf.begin() + strlen(CACHE_MAGIC) + sizeof(guint32), wordoffset.size() * sizeof(wordoffset[0])); return true; } return false; } std::list OffsetIndex::get_cache_variant(const std::string &url) { std::list res = { url + ".oft" }; if (!g_file_test(g_get_user_cache_dir(), G_FILE_TEST_EXISTS) && g_mkdir(g_get_user_cache_dir(), 0700) == -1) return res; const std::string cache_dir = std::string(g_get_user_cache_dir()) + G_DIR_SEPARATOR_S + "sdcv"; if (!g_file_test(cache_dir.c_str(), G_FILE_TEST_EXISTS)) { if (g_mkdir(cache_dir.c_str(), 0700) == -1) return res; } else if (!g_file_test(cache_dir.c_str(), G_FILE_TEST_IS_DIR)) return res; gchar *base = g_path_get_basename(url.c_str()); res.push_back(cache_dir + G_DIR_SEPARATOR_S + base + ".oft"); g_free(base); return res; } bool OffsetIndex::save_cache(const std::string &url, bool verbose) { const std::list vars = get_cache_variant(url); for (const std::string &item : vars) { FILE *out = fopen(item.c_str(), "wb"); guint32 magic = CACHE_MAGIC_BYTES; if (!out) continue; if (fwrite(CACHE_MAGIC, 1, strlen(CACHE_MAGIC), out) != strlen(CACHE_MAGIC)) continue; if (fwrite(&magic, 1, sizeof(magic), out) != sizeof(magic)) continue; if (fwrite(&wordoffset[0], sizeof(wordoffset[0]), wordoffset.size(), out) != wordoffset.size()) continue; fclose(out); if (verbose) { printf("save to cache %s\n", url.c_str()); } return true; } return false; } bool OffsetIndex::load(const std::string &url, gulong wc, gulong fsize, bool verbose) { wordcount = wc; gulong npages = (wc - 1) / ENTR_PER_PAGE + 2; wordoffset.resize(npages); if (!load_cache(url)) { //map file will close after finish of block MapFile map_file; if (!map_file.open(url.c_str(), fsize)) return false; const gchar *idxdatabuffer = map_file.begin(); const gchar *p1 = idxdatabuffer; gulong index_size; guint32 j = 0; for (guint32 i = 0; i < wc; i++) { index_size = strlen(p1) + 1 + 2 * sizeof(guint32); if (i % ENTR_PER_PAGE == 0) { wordoffset[j] = p1 - idxdatabuffer; ++j; } p1 += index_size; } wordoffset[j] = p1 - idxdatabuffer; if (!save_cache(url, verbose)) fprintf(stderr, "cache update failed\n"); } if (!(idxfile = fopen(url.c_str(), "rb"))) { wordoffset.resize(0); return false; } first.assign(0, read_first_on_page_key(0)); last.assign(wordoffset.size() - 2, read_first_on_page_key(wordoffset.size() - 2)); middle.assign((wordoffset.size() - 2) / 2, read_first_on_page_key((wordoffset.size() - 2) / 2)); real_last.assign(wc - 1, get_key(wc - 1)); return true; } inline gulong OffsetIndex::load_page(glong page_idx) { gulong nentr = ENTR_PER_PAGE; if (page_idx == glong(wordoffset.size() - 2)) if ((nentr = (wordcount % ENTR_PER_PAGE)) == 0) nentr = ENTR_PER_PAGE; if (page_idx != page.idx) { page_data.resize(wordoffset[page_idx + 1] - wordoffset[page_idx]); fseek(idxfile, wordoffset[page_idx], SEEK_SET); const size_t nitems = fread(&page_data[0], 1, page_data.size(), idxfile); THROW_IF_ERROR(nitems == page_data.size()); page.fill(&page_data[0], nentr, page_idx); } return nentr; } const gchar *OffsetIndex::get_key(glong idx) { load_page(idx / ENTR_PER_PAGE); glong idx_in_page = idx % ENTR_PER_PAGE; wordentry_offset = page.entries[idx_in_page].off; wordentry_size = page.entries[idx_in_page].size; return page.entries[idx_in_page].keystr; } bool OffsetIndex::lookup(const char *str, glong &idx) { bool bFound = false; glong iFrom; glong iTo = wordoffset.size() - 2; gint cmpint; glong iThisIndex; if (stardict_strcmp(str, first.keystr.c_str()) < 0) { idx = 0; return false; } else if (stardict_strcmp(str, real_last.keystr.c_str()) > 0) { idx = INVALID_INDEX; return false; } else { iFrom = 0; iThisIndex = 0; while (iFrom <= iTo) { iThisIndex = (iFrom + iTo) / 2; cmpint = stardict_strcmp(str, get_first_on_page_key(iThisIndex)); if (cmpint > 0) iFrom = iThisIndex + 1; else if (cmpint < 0) iTo = iThisIndex - 1; else { bFound = true; break; } } if (!bFound) idx = iTo; //prev else idx = iThisIndex; } if (!bFound) { gulong netr = load_page(idx); iFrom = 1; // Needn't search the first word anymore. iTo = netr - 1; iThisIndex = 0; while (iFrom <= iTo) { iThisIndex = (iFrom + iTo) / 2; cmpint = stardict_strcmp(str, page.entries[iThisIndex].keystr); if (cmpint > 0) iFrom = iThisIndex + 1; else if (cmpint < 0) iTo = iThisIndex - 1; else { bFound = true; break; } } idx *= ENTR_PER_PAGE; if (!bFound) idx += iFrom; //next else idx += iThisIndex; } else { idx *= ENTR_PER_PAGE; } return bFound; } bool WordListIndex::load(const std::string &url, gulong wc, gulong fsize, bool verbose) { gzFile in = gzopen(url.c_str(), "rb"); if (in == nullptr) return false; idxdatabuf = (gchar *)g_malloc(fsize); const int len = gzread(in, idxdatabuf, fsize); gzclose(in); if (len < 0) return false; if (gulong(len) != fsize) return false; wordlist.resize(wc + 1); gchar *p1 = idxdatabuf; guint32 i; for (i = 0; i < wc; i++) { wordlist[i] = p1; p1 += strlen(p1) + 1 + 2 * sizeof(guint32); } wordlist[wc] = p1; return true; } void WordListIndex::get_data(glong idx) { gchar *p1 = wordlist[idx] + strlen(wordlist[idx]) + sizeof(gchar); wordentry_offset = g_ntohl(get_uint32(p1)); p1 += sizeof(guint32); wordentry_size = g_ntohl(get_uint32(p1)); } bool WordListIndex::lookup(const char *str, glong &idx) { bool bFound = false; glong iTo = wordlist.size() - 2; if (stardict_strcmp(str, get_key(0)) < 0) { idx = 0; } else if (stardict_strcmp(str, get_key(iTo)) > 0) { idx = INVALID_INDEX; } else { glong iThisIndex = 0; glong iFrom = 0; gint cmpint; while (iFrom <= iTo) { iThisIndex = (iFrom + iTo) / 2; cmpint = stardict_strcmp(str, get_key(iThisIndex)); if (cmpint > 0) iFrom = iThisIndex + 1; else if (cmpint < 0) iTo = iThisIndex - 1; else { bFound = true; break; } } if (!bFound) idx = iFrom; //next else idx = iThisIndex; } return bFound; } } bool SynFile::load(const std::string &url, gulong wc) { struct stat stat_buf; if (!stat(url.c_str(), &stat_buf)) { MapFile syn; if (!syn.open(url.c_str(), stat_buf.st_size)) return false; const gchar *current = syn.begin(); for (unsigned long i = 0; i < wc; i++) { // each entry in a syn-file is: // - 0-terminated string // 4-byte index into .dict file in network byte order glib::CharStr lower_string{ g_utf8_casefold(current, -1) }; std::string synonym{ get_impl(lower_string) }; current += synonym.length() + 1; const guint32 idx = g_ntohl(get_uint32(current)); current += sizeof(idx); synonyms[synonym] = idx; } return true; } else { return false; } } bool SynFile::lookup(const char *str, glong &idx) { glib::CharStr lower_string{ g_utf8_casefold(str, -1) }; auto it = synonyms.find(get_impl(lower_string)); if (it != synonyms.end()) { idx = it->second; return true; } return false; } bool Dict::Lookup(const char *str, glong &idx) { return syn_file->lookup(str, idx) || idx_file->lookup(str, idx); } bool Dict::load(const std::string &ifofilename, bool verbose) { gulong idxfilesize; if (!load_ifofile(ifofilename, idxfilesize)) return false; std::string fullfilename(ifofilename); fullfilename.replace(fullfilename.length() - sizeof("ifo") + 1, sizeof("ifo") - 1, "dict.dz"); if (g_file_test(fullfilename.c_str(), G_FILE_TEST_EXISTS)) { dictdzfile.reset(new DictData); if (!dictdzfile->open(fullfilename, 0)) { //g_print("open file %s failed!\n",fullfilename); return false; } } else { fullfilename.erase(fullfilename.length() - sizeof(".dz") + 1, sizeof(".dz") - 1); dictfile = fopen(fullfilename.c_str(), "rb"); if (!dictfile) { //g_print("open file %s failed!\n",fullfilename); return false; } } fullfilename = ifofilename; fullfilename.replace(fullfilename.length() - sizeof("ifo") + 1, sizeof("ifo") - 1, "idx.gz"); if (g_file_test(fullfilename.c_str(), G_FILE_TEST_EXISTS)) { idx_file.reset(new WordListIndex); } else { fullfilename.erase(fullfilename.length() - sizeof(".gz") + 1, sizeof(".gz") - 1); idx_file.reset(new OffsetIndex); } if (!idx_file->load(fullfilename, wordcount, idxfilesize, verbose)) return false; fullfilename = ifofilename; fullfilename.replace(fullfilename.length() - sizeof("ifo") + 1, sizeof("ifo") - 1, "syn"); syn_file.reset(new SynFile); syn_file->load(fullfilename, syn_wordcount); //g_print("bookname: %s , wordcount %lu\n", bookname.c_str(), narticles()); return true; } bool Dict::load_ifofile(const std::string &ifofilename, gulong &idxfilesize) { DictInfo dict_info; if (!dict_info.load_from_ifo_file(ifofilename, false)) return false; if (dict_info.wordcount == 0) return false; ifo_file_name = dict_info.ifo_file_name; wordcount = dict_info.wordcount; syn_wordcount = dict_info.syn_wordcount; bookname = dict_info.bookname; idxfilesize = dict_info.index_file_size; sametypesequence = dict_info.sametypesequence; return true; } bool Dict::LookupWithRule(GPatternSpec *pspec, glong *aIndex, int iBuffLen) { int iIndexCount = 0; for (guint32 i = 0; i < narticles() && iIndexCount < (iBuffLen - 1); i++) if (g_pattern_match_string(pspec, get_key(i))) aIndex[iIndexCount++] = i; aIndex[iIndexCount] = -1; // -1 is the end. return iIndexCount > 0; } Libs::~Libs() { for (Dict *p : oLib) delete p; } void Libs::load_dict(const std::string &url) { Dict *lib = new Dict; if (lib->load(url, verbose_)) oLib.push_back(lib); else delete lib; } void Libs::load(const std::list &dicts_dirs, const std::list &order_list, const std::list &disable_list) { for_each_file(dicts_dirs, ".ifo", order_list, disable_list, [this](const std::string &url, bool disable) -> void { if (!disable) load_dict(url); }); } const gchar *Libs::poGetCurrentWord(glong *iCurrent) { const gchar *poCurrentWord = nullptr; const gchar *word; for (std::vector::size_type iLib = 0; iLib < oLib.size(); iLib++) { if (iCurrent[iLib] == INVALID_INDEX) continue; if (iCurrent[iLib] >= narticles(iLib) || iCurrent[iLib] < 0) continue; if (poCurrentWord == nullptr) { poCurrentWord = poGetWord(iCurrent[iLib], iLib); } else { word = poGetWord(iCurrent[iLib], iLib); if (stardict_strcmp(poCurrentWord, word) > 0) poCurrentWord = word; } } return poCurrentWord; } const gchar *Libs::poGetNextWord(const gchar *sWord, glong *iCurrent) { // the input can be: // (word,iCurrent),read word,write iNext to iCurrent,and return next word. used by TopWin::NextCallback(); // (nullptr,iCurrent),read iCurrent,write iNext to iCurrent,and return next word. used by AppCore::ListWords(); const gchar *poCurrentWord = nullptr; size_t iCurrentLib = 0; const gchar *word; for (size_t iLib = 0; iLib < oLib.size(); ++iLib) { if (sWord) oLib[iLib]->Lookup(sWord, iCurrent[iLib]); if (iCurrent[iLib] == INVALID_INDEX) continue; if (iCurrent[iLib] >= narticles(iLib) || iCurrent[iLib] < 0) continue; if (poCurrentWord == nullptr) { poCurrentWord = poGetWord(iCurrent[iLib], iLib); iCurrentLib = iLib; } else { word = poGetWord(iCurrent[iLib], iLib); if (stardict_strcmp(poCurrentWord, word) > 0) { poCurrentWord = word; iCurrentLib = iLib; } } } if (poCurrentWord) { iCurrent[iCurrentLib]++; for (std::vector::size_type iLib = 0; iLib < oLib.size(); iLib++) { if (iLib == iCurrentLib) continue; if (iCurrent[iLib] == INVALID_INDEX) continue; if (iCurrent[iLib] >= narticles(iLib) || iCurrent[iLib] < 0) continue; if (strcmp(poCurrentWord, poGetWord(iCurrent[iLib], iLib)) == 0) iCurrent[iLib]++; } poCurrentWord = poGetCurrentWord(iCurrent); } return poCurrentWord; } const gchar * Libs::poGetPreWord(glong *iCurrent) { // used by TopWin::PreviousCallback(); the iCurrent is cached by AppCore::TopWinWordChange(); const gchar *poCurrentWord = nullptr; std::vector::size_type iCurrentLib = 0; const gchar *word; for (std::vector::size_type iLib = 0; iLib < oLib.size(); iLib++) { if (iCurrent[iLib] == INVALID_INDEX) iCurrent[iLib] = narticles(iLib); else { if (iCurrent[iLib] > narticles(iLib) || iCurrent[iLib] <= 0) continue; } if (poCurrentWord == nullptr) { poCurrentWord = poGetWord(iCurrent[iLib] - 1, iLib); iCurrentLib = iLib; } else { word = poGetWord(iCurrent[iLib] - 1, iLib); if (stardict_strcmp(poCurrentWord, word) < 0) { poCurrentWord = word; iCurrentLib = iLib; } } } if (poCurrentWord) { iCurrent[iCurrentLib]--; for (std::vector::size_type iLib = 0; iLib < oLib.size(); iLib++) { if (iLib == iCurrentLib) continue; if (iCurrent[iLib] > narticles(iLib) || iCurrent[iLib] <= 0) continue; if (strcmp(poCurrentWord, poGetWord(iCurrent[iLib] - 1, iLib)) == 0) { iCurrent[iLib]--; } else { if (iCurrent[iLib] == narticles(iLib)) iCurrent[iLib] = INVALID_INDEX; } } } return poCurrentWord; } bool Libs::LookupSimilarWord(const gchar *sWord, glong &iWordIndex, int iLib) { glong iIndex; bool bFound = false; gchar *casestr; if (!bFound) { // to lower case. casestr = g_utf8_strdown(sWord, -1); if (strcmp(casestr, sWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); // to upper case. if (!bFound) { casestr = g_utf8_strup(sWord, -1); if (strcmp(casestr, sWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } // Upper the first character and lower others. if (!bFound) { gchar *nextchar = g_utf8_next_char(sWord); gchar *firstchar = g_utf8_strup(sWord, nextchar - sWord); nextchar = g_utf8_strdown(nextchar, -1); casestr = g_strdup_printf("%s%s", firstchar, nextchar); g_free(firstchar); g_free(nextchar); if (strcmp(casestr, sWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } if (bIsPureEnglish(sWord)) { // If not Found , try other status of sWord. int iWordLen = strlen(sWord); bool isupcase; gchar *sNewWord = (gchar *)g_malloc(iWordLen + 1); //cut one char "s" or "d" if (!bFound && iWordLen > 1) { isupcase = sWord[iWordLen - 1] == 'S' || !strncmp(&sWord[iWordLen - 2], "ED", 2); if (isupcase || sWord[iWordLen - 1] == 's' || !strncmp(&sWord[iWordLen - 2], "ed", 2)) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 1] = '\0'; // cut "s" or "d" if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } //cut "ly" if (!bFound && iWordLen > 2) { isupcase = !strncmp(&sWord[iWordLen - 2], "LY", 2); if (isupcase || (!strncmp(&sWord[iWordLen - 2], "ly", 2))) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 2] = '\0'; // cut "ly" if (iWordLen > 5 && sNewWord[iWordLen - 3] == sNewWord[iWordLen - 4] && !bIsVowel(sNewWord[iWordLen - 4]) && bIsVowel(sNewWord[iWordLen - 5])) { //doubled sNewWord[iWordLen - 3] = '\0'; if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else { if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } if (!bFound) sNewWord[iWordLen - 3] = sNewWord[iWordLen - 4]; //restore } } if (!bFound) { if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } } //cut "ing" if (!bFound && iWordLen > 3) { isupcase = !strncmp(&sWord[iWordLen - 3], "ING", 3); if (isupcase || !strncmp(&sWord[iWordLen - 3], "ing", 3)) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 3] = '\0'; if (iWordLen > 6 && (sNewWord[iWordLen - 4] == sNewWord[iWordLen - 5]) && !bIsVowel(sNewWord[iWordLen - 5]) && bIsVowel(sNewWord[iWordLen - 6])) { //doubled sNewWord[iWordLen - 4] = '\0'; if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else { if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } if (!bFound) sNewWord[iWordLen - 4] = sNewWord[iWordLen - 5]; //restore } } if (!bFound) { if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } if (!bFound) { if (isupcase) strcat(sNewWord, "E"); // add a char "E" else strcat(sNewWord, "e"); // add a char "e" if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } } //cut two char "es" if (!bFound && iWordLen > 3) { isupcase = (!strncmp(&sWord[iWordLen - 2], "ES", 2) && (sWord[iWordLen - 3] == 'S' || sWord[iWordLen - 3] == 'X' || sWord[iWordLen - 3] == 'O' || (iWordLen > 4 && sWord[iWordLen - 3] == 'H' && (sWord[iWordLen - 4] == 'C' || sWord[iWordLen - 4] == 'S')))); if (isupcase || (!strncmp(&sWord[iWordLen - 2], "es", 2) && (sWord[iWordLen - 3] == 's' || sWord[iWordLen - 3] == 'x' || sWord[iWordLen - 3] == 'o' || (iWordLen > 4 && sWord[iWordLen - 3] == 'h' && (sWord[iWordLen - 4] == 'c' || sWord[iWordLen - 4] == 's'))))) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 2] = '\0'; if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } //cut "ed" if (!bFound && iWordLen > 3) { isupcase = !strncmp(&sWord[iWordLen - 2], "ED", 2); if (isupcase || !strncmp(&sWord[iWordLen - 2], "ed", 2)) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 2] = '\0'; if (iWordLen > 5 && (sNewWord[iWordLen - 3] == sNewWord[iWordLen - 4]) && !bIsVowel(sNewWord[iWordLen - 4]) && bIsVowel(sNewWord[iWordLen - 5])) { //doubled sNewWord[iWordLen - 3] = '\0'; if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else { if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } if (!bFound) sNewWord[iWordLen - 3] = sNewWord[iWordLen - 4]; //restore } } if (!bFound) { if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } } // cut "ied" , add "y". if (!bFound && iWordLen > 3) { isupcase = !strncmp(&sWord[iWordLen - 3], "IED", 3); if (isupcase || (!strncmp(&sWord[iWordLen - 3], "ied", 3))) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 3] = '\0'; if (isupcase) strcat(sNewWord, "Y"); // add a char "Y" else strcat(sNewWord, "y"); // add a char "y" if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } // cut "ies" , add "y". if (!bFound && iWordLen > 3) { isupcase = !strncmp(&sWord[iWordLen - 3], "IES", 3); if (isupcase || (!strncmp(&sWord[iWordLen - 3], "ies", 3))) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 3] = '\0'; if (isupcase) strcat(sNewWord, "Y"); // add a char "Y" else strcat(sNewWord, "y"); // add a char "y" if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } // cut "er". if (!bFound && iWordLen > 2) { isupcase = !strncmp(&sWord[iWordLen - 2], "ER", 2); if (isupcase || (!strncmp(&sWord[iWordLen - 2], "er", 2))) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 2] = '\0'; if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } // cut "est". if (!bFound && iWordLen > 3) { isupcase = !strncmp(&sWord[iWordLen - 3], "EST", 3); if (isupcase || (!strncmp(&sWord[iWordLen - 3], "est", 3))) { strcpy(sNewWord, sWord); sNewWord[iWordLen - 3] = '\0'; if (oLib[iLib]->Lookup(sNewWord, iIndex)) bFound = true; else if (isupcase || g_ascii_isupper(sWord[0])) { casestr = g_ascii_strdown(sNewWord, -1); if (strcmp(casestr, sNewWord)) { if (oLib[iLib]->Lookup(casestr, iIndex)) bFound = true; } g_free(casestr); } } } g_free(sNewWord); } if (bFound) iWordIndex = iIndex; #if 0 else { //don't change iWordIndex here. //when LookupSimilarWord all failed too, we want to use the old LookupWord index to list words. //iWordIndex = INVALID_INDEX; } #endif return bFound; } bool Libs::SimpleLookupWord(const gchar *sWord, glong &iWordIndex, int iLib) { bool bFound = oLib[iLib]->Lookup(sWord, iWordIndex); if (!bFound && fuzzy_) bFound = LookupSimilarWord(sWord, iWordIndex, iLib); return bFound; } bool Libs::LookupWithFuzzy(const gchar *sWord, gchar *reslist[], gint reslist_size) { if (sWord[0] == '\0') return false; Fuzzystruct oFuzzystruct[reslist_size]; for (int i = 0; i < reslist_size; i++) { oFuzzystruct[i].pMatchWord = nullptr; oFuzzystruct[i].iMatchWordDistance = iMaxFuzzyDistance; } int iMaxDistance = iMaxFuzzyDistance; int iDistance; bool Found = false; EditDistance oEditDistance; glong iCheckWordLen; const char *sCheck; gunichar *ucs4_str1, *ucs4_str2; glong ucs4_str2_len; ucs4_str2 = g_utf8_to_ucs4_fast(sWord, -1, &ucs4_str2_len); unicode_strdown(ucs4_str2); for (size_t iLib = 0; iLib < oLib.size(); ++iLib) { if (progress_func) progress_func(); //if (stardict_strcmp(sWord, poGetWord(0,iLib))>=0 && stardict_strcmp(sWord, poGetWord(narticles(iLib)-1,iLib))<=0) { //there are Chinese dicts and English dicts... const int iwords = narticles(iLib); for (int index = 0; index < iwords; index++) { sCheck = poGetWord(index, iLib); // tolower and skip too long or too short words iCheckWordLen = g_utf8_strlen(sCheck, -1); if (iCheckWordLen - ucs4_str2_len >= iMaxDistance || ucs4_str2_len - iCheckWordLen >= iMaxDistance) continue; ucs4_str1 = g_utf8_to_ucs4_fast(sCheck, -1, nullptr); if (iCheckWordLen > ucs4_str2_len) ucs4_str1[ucs4_str2_len] = 0; unicode_strdown(ucs4_str1); iDistance = oEditDistance.CalEditDistance(ucs4_str1, ucs4_str2, iMaxDistance); g_free(ucs4_str1); if (iDistance < iMaxDistance && iDistance < ucs4_str2_len) { // when ucs4_str2_len=1,2 we need less fuzzy. Found = true; bool bAlreadyInList = false; int iMaxDistanceAt = 0; for (int j = 0; j < reslist_size; j++) { if (oFuzzystruct[j].pMatchWord && strcmp(oFuzzystruct[j].pMatchWord, sCheck) == 0) { //already in list bAlreadyInList = true; break; } //find the position,it will certainly be found (include the first time) as iMaxDistance is set by last time. if (oFuzzystruct[j].iMatchWordDistance == iMaxDistance) { iMaxDistanceAt = j; } } if (!bAlreadyInList) { if (oFuzzystruct[iMaxDistanceAt].pMatchWord) g_free(oFuzzystruct[iMaxDistanceAt].pMatchWord); oFuzzystruct[iMaxDistanceAt].pMatchWord = g_strdup(sCheck); oFuzzystruct[iMaxDistanceAt].iMatchWordDistance = iDistance; // calc new iMaxDistance iMaxDistance = iDistance; for (int j = 0; j < reslist_size; j++) { if (oFuzzystruct[j].iMatchWordDistance > iMaxDistance) iMaxDistance = oFuzzystruct[j].iMatchWordDistance; } // calc new iMaxDistance } // add to list } // find one } // each word } // each lib g_free(ucs4_str2); if (Found) // sort with distance std::sort(oFuzzystruct, oFuzzystruct + reslist_size, [](const Fuzzystruct &lh, const Fuzzystruct &rh) -> bool { if (lh.iMatchWordDistance != rh.iMatchWordDistance) return lh.iMatchWordDistance < rh.iMatchWordDistance; if (lh.pMatchWord && rh.pMatchWord) return stardict_strcmp(lh.pMatchWord, rh.pMatchWord) < 0; return false; }); for (gint i = 0; i < reslist_size; ++i) reslist[i] = oFuzzystruct[i].pMatchWord; return Found; } gint Libs::LookupWithRule(const gchar *word, gchar **ppMatchWord) { glong aiIndex[MAX_MATCH_ITEM_PER_LIB + 1]; gint iMatchCount = 0; GPatternSpec *pspec = g_pattern_spec_new(word); for (std::vector::size_type iLib = 0; iLib < oLib.size(); iLib++) { //if(oLibs.LookdupWordsWithRule(pspec,aiIndex,MAX_MATCH_ITEM_PER_LIB+1-iMatchCount,iLib)) // -iMatchCount,so save time,but may got less result and the word may repeat. if (oLib[iLib]->LookupWithRule(pspec, aiIndex, MAX_MATCH_ITEM_PER_LIB + 1)) { if (progress_func) progress_func(); for (int i = 0; aiIndex[i] != -1; i++) { const gchar *sMatchWord = poGetWord(aiIndex[i], iLib); bool bAlreadyInList = false; for (int j = 0; j < iMatchCount; j++) { if (strcmp(ppMatchWord[j], sMatchWord) == 0) { //already in list bAlreadyInList = true; break; } } if (!bAlreadyInList) ppMatchWord[iMatchCount++] = g_strdup(sMatchWord); } } } g_pattern_spec_free(pspec); if (iMatchCount) // sort it. std::sort(ppMatchWord, ppMatchWord + iMatchCount, [](const char *lh, const char *rh) -> bool { return stardict_strcmp(lh, rh) < 0; }); return iMatchCount; } bool Libs::LookupData(const gchar *sWord, std::vector *reslist) { std::vector SearchWords; std::string SearchWord; const char *p = sWord; while (*p) { if (*p == '\\') { p++; switch (*p) { case ' ': SearchWord += ' '; break; case '\\': SearchWord += '\\'; break; case 't': SearchWord += '\t'; break; case 'n': SearchWord += '\n'; break; default: SearchWord += *p; } } else if (*p == ' ') { if (!SearchWord.empty()) { SearchWords.push_back(SearchWord); SearchWord.clear(); } } else { SearchWord += *p; } p++; } if (!SearchWord.empty()) { SearchWords.push_back(SearchWord); SearchWord.clear(); } if (SearchWords.empty()) return false; guint32 max_size = 0; gchar *origin_data = nullptr; for (std::vector::size_type i = 0; i < oLib.size(); ++i) { if (!oLib[i]->containSearchData()) continue; if (progress_func) progress_func(); const gulong iwords = narticles(i); const gchar *key; guint32 offset, size; for (gulong j = 0; j < iwords; ++j) { oLib[i]->get_key_and_data(j, &key, &offset, &size); if (size > max_size) { origin_data = (gchar *)g_realloc(origin_data, size); max_size = size; } if (oLib[i]->SearchData(SearchWords, offset, size, origin_data)) reslist[i].push_back(g_strdup(key)); } } g_free(origin_data); std::vector::size_type i; for (i = 0; i < oLib.size(); ++i) if (!reslist[i].empty()) break; return i != oLib.size(); } /**************************************************/ query_t analyze_query(const char *s, std::string &res) { if (!s || !*s) { res = ""; return qtSIMPLE; } if (*s == '/') { res = s + 1; return qtFUZZY; } if (*s == '|') { res = s + 1; return qtDATA; } bool regexp = false; const char *p = s; res = ""; for (; *p; res += *p, ++p) { if (*p == '\\') { ++p; if (!*p) break; continue; } if (*p == '*' || *p == '?') regexp = true; } if (regexp) return qtREGEXP; return qtSIMPLE; } qstardict/plugins/stardict/stardict_lib.hpp000066400000000000000000000136121453553600400215360ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include "dictziplib.hpp" const int MAX_MATCH_ITEM_PER_LIB = 100; const int MAX_FUZZY_DISTANCE = 3; // at most MAX_FUZZY_DISTANCE-1 differences allowed when find similar words inline guint32 get_uint32(const gchar *addr) { guint32 result; memcpy(&result, addr, sizeof(guint32)); return result; } inline void set_uint32(gchar *addr, guint32 val) { memcpy(addr, &val, sizeof(guint32)); } struct cacheItem { guint32 offset; gchar *data; //write code here to make it inline cacheItem() { data = nullptr; } ~cacheItem() { g_free(data); } }; const int WORDDATA_CACHE_NUM = 10; const int INVALID_INDEX = -100; class DictBase { public: DictBase() {} ~DictBase() { if (dictfile) fclose(dictfile); } DictBase(const DictBase &) = delete; DictBase &operator=(const DictBase &) = delete; gchar *GetWordData(guint32 idxitem_offset, guint32 idxitem_size); bool containSearchData() const { if (sametypesequence.empty()) return true; return sametypesequence.find_first_of("mlgxty") != std::string::npos; } bool SearchData(std::vector &SearchWords, guint32 idxitem_offset, guint32 idxitem_size, gchar *origin_data); protected: std::string sametypesequence; FILE *dictfile = nullptr; std::unique_ptr dictdzfile; private: cacheItem cache[WORDDATA_CACHE_NUM]; gint cache_cur = 0; }; //this structure contain all information about dictionary struct DictInfo { std::string ifo_file_name; guint32 wordcount; guint32 syn_wordcount; std::string bookname; std::string author; std::string email; std::string website; std::string date; std::string description; guint32 index_file_size; guint32 syn_file_size; std::string sametypesequence; bool load_from_ifo_file(const std::string &ifofilename, bool istreedict); }; class IIndexFile { public: guint32 wordentry_offset; guint32 wordentry_size; virtual ~IIndexFile() {} virtual bool load(const std::string &url, gulong wc, gulong fsize, bool verbose) = 0; virtual const gchar *get_key(glong idx) = 0; virtual void get_data(glong idx) = 0; virtual const gchar *get_key_and_data(glong idx) = 0; virtual bool lookup(const char *str, glong &idx) = 0; }; class SynFile { public: bool load(const std::string &url, gulong wc); bool lookup(const char *str, glong &idx); private: std::map synonyms; }; class Dict : public DictBase { public: Dict() {} Dict(const Dict &) = delete; Dict &operator=(const Dict &) = delete; bool load(const std::string &ifofilename, bool verbose); gulong narticles() const { return wordcount; } const std::string &dict_name() const { return bookname; } const std::string &ifofilename() const { return ifo_file_name; } const gchar *get_key(glong index) { return idx_file->get_key(index); } gchar *get_data(glong index) { idx_file->get_data(index); return DictBase::GetWordData(idx_file->wordentry_offset, idx_file->wordentry_size); } void get_key_and_data(glong index, const gchar **key, guint32 *offset, guint32 *size) { *key = idx_file->get_key_and_data(index); *offset = idx_file->wordentry_offset; *size = idx_file->wordentry_size; } bool Lookup(const char *str, glong &idx); bool LookupWithRule(GPatternSpec *pspec, glong *aIndex, int iBuffLen); private: std::string ifo_file_name; gulong wordcount; gulong syn_wordcount; std::string bookname; std::unique_ptr idx_file; std::unique_ptr syn_file; bool load_ifofile(const std::string &ifofilename, gulong &idxfilesize); }; class Libs { public: Libs(std::function f = std::function()) { progress_func = f; iMaxFuzzyDistance = MAX_FUZZY_DISTANCE; //need to read from cfg. } void setVerbose(bool verbose) { verbose_ = verbose; } void setFuzzy(bool fuzzy) { fuzzy_ = fuzzy; } ~Libs(); Libs(const Libs &) = delete; Libs &operator=(const Libs &) = delete; void load_dict(const std::string &url); void load(const std::list &dicts_dirs, const std::list &order_list, const std::list &disable_list); glong narticles(int idict) const { return oLib[idict]->narticles(); } const std::string &dict_name(int idict) const { return oLib[idict]->dict_name(); } gint ndicts() const { return oLib.size(); } const gchar *poGetWord(glong iIndex, int iLib) { return oLib[iLib]->get_key(iIndex); } gchar *poGetWordData(glong iIndex, int iLib) { if (iIndex == INVALID_INDEX) return nullptr; return oLib[iLib]->get_data(iIndex); } const gchar *poGetCurrentWord(glong *iCurrent); const gchar *poGetNextWord(const gchar *word, glong *iCurrent); const gchar *poGetPreWord(glong *iCurrent); bool LookupWord(const gchar *sWord, glong &iWordIndex, int iLib) { return oLib[iLib]->Lookup(sWord, iWordIndex); } bool LookupSimilarWord(const gchar *sWord, glong &iWordIndex, int iLib); bool SimpleLookupWord(const gchar *sWord, glong &iWordIndex, int iLib); bool LookupWithFuzzy(const gchar *sWord, gchar *reslist[], gint reslist_size); gint LookupWithRule(const gchar *sWord, gchar *reslist[]); bool LookupData(const gchar *sWord, std::vector *reslist); protected: bool fuzzy_; private: std::vector oLib; // word Libs. int iMaxFuzzyDistance; std::function progress_func; bool verbose_; }; enum query_t { qtSIMPLE, qtREGEXP, qtFUZZY, qtDATA }; extern query_t analyze_query(const char *s, std::string &res); qstardict/plugins/stardict/utils.cpp000066400000000000000000000107071453553600400202300ustar00rootroot00000000000000/* * This file part of sdcv - console version of Stardict program * http://sdcv.sourceforge.net * Copyright (C) 2005-2006 Evgeniy * * 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 Library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include "utils.hpp" std::string utf8_to_locale_ign_err(const std::string &utf8_str) { std::string res; const char *charset; if (g_get_charset(&charset)) res = utf8_str; else { gsize bytes_read, bytes_written; glib::Error err; glib::CharStr tmp(g_convert_with_fallback(utf8_str.c_str(), -1, charset, "UTF-8", nullptr, &bytes_read, &bytes_written, get_addr(err))); if (nullptr == get_impl(tmp)) { fprintf(stderr, _("Can not convert %s to current locale.\n"), utf8_str.c_str()); fprintf(stderr, "%s\n", err->message); exit(EXIT_FAILURE); } res = get_impl(tmp); } return res; } static void __for_each_file(const std::string &dirname, const std::string &suff, const std::list &order_list, const std::list &disable_list, const std::function &f) { GDir *dir = g_dir_open(dirname.c_str(), 0, nullptr); if (dir) { const gchar *filename; while ((filename = g_dir_read_name(dir)) != nullptr) { const std::string fullfilename(dirname + G_DIR_SEPARATOR_S + filename); if (g_file_test(fullfilename.c_str(), G_FILE_TEST_IS_DIR)) __for_each_file(fullfilename, suff, order_list, disable_list, f); else if (g_str_has_suffix(filename, suff.c_str()) && std::find(order_list.begin(), order_list.end(), fullfilename) == order_list.end()) { const bool disable = std::find(disable_list.begin(), disable_list.end(), fullfilename) != disable_list.end(); f(fullfilename, disable); } } g_dir_close(dir); } } void for_each_file(const std::list &dirs_list, const std::string &suff, const std::list &order_list, const std::list &disable_list, const std::function &f) { for (const std::string &item : order_list) { const bool disable = std::find(disable_list.begin(), disable_list.end(), item) != disable_list.end(); f(item, disable); } for (const std::string &item : dirs_list) __for_each_file(item, suff, order_list, disable_list, f); } // based on https://stackoverflow.com/questions/7724448/simple-json-string-escape-for-c/33799784#33799784 std::string json_escape_string(const std::string &s) { std::ostringstream o; for (auto c = s.cbegin(); c != s.cend(); c++) { switch (*c) { case '"': o << "\\\""; break; case '\\': o << "\\\\"; break; case '\b': o << "\\b"; break; case '\f': o << "\\f"; break; case '\n': o << "\\n"; break; case '\r': o << "\\r"; break; case '\t': o << "\\t"; break; default: if ('\x00' <= *c && *c <= '\x1f') { o << "\\u" << std::hex << std::setw(4) << std::setfill('0') << (int)*c; } else { o << *c; } } } return o.str(); } qstardict/plugins/stardict/utils.hpp000066400000000000000000000035401453553600400202320ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include template class ResourceWrapper { public: ResourceWrapper(T *p = nullptr) : p_(p) { } ~ResourceWrapper() { free_resource(); } ResourceWrapper(const ResourceWrapper &) = delete; ResourceWrapper &operator=(const ResourceWrapper &) = delete; T *operator->() const { return p_; } bool operator!() const { return p_ == nullptr; } const T &operator[](size_t idx) const { assert(p_ != nullptr); return p_[idx]; } void reset(T *newp) { if (p_ != newp) { free_resource(); p_ = newp; } } friend inline bool operator==(const ResourceWrapper &lhs, std::nullptr_t) noexcept { return !lhs.p_; } friend inline bool operator!=(const ResourceWrapper &lhs, std::nullptr_t) noexcept { return !!lhs.p_; } friend inline T *get_impl(const ResourceWrapper &rw) { return rw.p_; } friend inline T **get_addr(ResourceWrapper &rw) { return &rw.p_; } private: T *p_; void free_resource() { if (p_) unref_res(p_); } }; namespace glib { typedef ResourceWrapper CharStr; typedef ResourceWrapper Error; } extern std::string utf8_to_locale_ign_err(const std::string &utf8_str); extern void for_each_file(const std::list &dirs_list, const std::string &suff, const std::list &order_list, const std::list &disable_list, const std::function &f); extern std::string json_escape_string(const std::string &str); qstardict/plugins/swac/000077500000000000000000000000001453553600400154775ustar00rootroot00000000000000qstardict/plugins/swac/pixmaps/000077500000000000000000000000001453553600400171605ustar00rootroot00000000000000qstardict/plugins/swac/pixmaps/pixmaps.qrc000066400000000000000000000001361453553600400213500ustar00rootroot00000000000000 sound.png qstardict/plugins/swac/pixmaps/sound.png000077500000000000000000000014571453553600400210300ustar00rootroot00000000000000PNG  IHDRabKGDC pHYsHHFk>IDAT8ˍ_Hw?iiVt.,ZaTmP]lm`jk?@"ZJ/S9y<} <|в d gȚ,=d%͛fK/ç jY2S+7gcF/1)G*6}{6Hi="0v]fϿ?HEǖCM u;J9֮/AjL_ FF {C lXs~iN̹T;Ţ22ۃ! v)%{XGmgTx~P 燉Dh0 |q[F♉]bR*+\.|P 8Vs$1i4hE.r~DLaY̰ C65,3~V lX~z> * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "swac.h" #include #include #include #include #include #include Swac::Swac(QObject *parent) : QObject(parent) { db = new QSqlDatabase(); *db = QSqlDatabase::addDatabase("QSQLITE", QLatin1String("swac")); db->setDatabaseName(QDir::homePath() + "/.swac/swac.db"); db->open(); } Swac::~Swac() { db->close(); delete db; QSqlDatabase::removeDatabase("swac"); } QIcon Swac::pluginIcon() const { return QIcon(); } QStringList Swac::availableDicts() const { QStringList result; QSqlQuery query = db->exec("SELECT packid FROM packages;"); while (query.next()) { result << query.value(0).toString(); } return result; } void Swac::setLoadedDicts(const QStringList &dicts) { QStringList available = Swac::availableDicts(); m_loadedDicts.clear(); for (QStringList::const_iterator i = dicts.begin(); i != dicts.end(); ++i) { if (available.contains(*i)) m_loadedDicts << *i; } } Swac::DictInfo Swac::dictInfo(const QString &dict) { QSqlQuery query = db->exec("SELECT name, format, version, organization, readme FROM packages WHERE packid = \'" + dict + "\' LIMIT 1;"); if (query.first()) return DictInfo(query.value(0).toString(), dict, query.value(3).toString(), "

    " + query.value(4).toString() + "
    "); else return DictInfo("", dict, "", ""); } QSqlQuery Swac::search(const QString &dict, const QString &word, const QString &fields, const int limit) { QSqlQuery query(*db); query.prepare( "SELECT " + fields + " " + "FROM alphaidx" + " " + "INNER JOIN sounds ON alphaidx.sounds_idx = sounds.idx " + "INNER JOIN packages ON sounds.packages_idx = packages.idx " + "WHERE packages.packid = ?1 AND alphaidx.str = ?2 " + "LIMIT " + QString::number(limit) +";" ); query.addBindValue(dict); query.addBindValue(word); query.exec(); return query; } bool Swac::isTranslatable(const QString &dict, const QString &word) { QSqlQuery query = search(dict, word, "SWAC_TEXT", 1); return query.first(); } Swac::Translation Swac::translate(const QString &dict, const QString &word) { QSqlQuery query = search(dict, word, "SWAC_TEXT, packages.path, filename, SWAC_SPEAK_NAME", 128); QString article(""); int i = 0; while (query.next()) { if (i > 0) article += "
    \n"; article += "  
    " + query.value(0).toString() + ""; i++; } return Translation(word, dict, article); } QStringList Swac::findSimilarWords(const QString &dict, const QString &word) { Q_UNUSED(dict) Q_UNUSED(word) return QStringList(); } int Swac::execSettingsDialog(QWidget *parent) { return QMessageBox::information(parent, "SWAC Plugin for QStarDict", "To install new packages, please, use the swac-get command line program.\n" "More information about swac-get is available on Shtooka Project Homepage." ); } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/swac/swac.h000066400000000000000000000054621453553600400166140ustar00rootroot00000000000000/***************************************************************************** * This file is a part of QStarDict, a StarDict clone written using Qt * * swac.cpp - Plugin for words audio collections SWAC * * Copyright (C) 2008 Nicolas Vion * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SWAC_H #define SWAC_H #include "../dictplugin.h" #include "../metadata.h" #include #include class Swac: public QObject, public QStarDict::BasePlugin, public QStarDict::DictPlugin, public QStarDict::ConfigurablePlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qstardict.DictPlugin/1.0" FILE "swac.json") Q_INTERFACES(QStarDict::BasePlugin QStarDict::DictPlugin QStarDict::ConfigurablePlugin) public: Swac(QObject *parent = 0); ~Swac(); QIcon pluginIcon() const; Features features() const { return Features(SearchSimilar); } QStringList availableDicts() const; QStringList loadedDicts() const { return m_loadedDicts; } void setLoadedDicts(const QStringList &dicts); DictInfo dictInfo(const QString &dict); bool isTranslatable(const QString &dict, const QString &word); Translation translate(const QString &dict, const QString &word); QStringList findSimilarWords(const QString &dict, const QString &word); int execSettingsDialog(QWidget *parent); // friend class SettingsDialog; private: QSqlQuery search(const QString &dict, const QString &word, const QString &fields, const int limit); QSqlDatabase *db; QStringList m_loadedDicts; }; #endif // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/swac/swac.pro000066400000000000000000000037641453553600400171700ustar00rootroot00000000000000############################################################################# # swac.pro # # This file is a part of QStarDict, a StarDict clone written with using Qt # # swac.cpp - Plugin for words audio collections SWAC # # Copyright (C) 2008 Nicolas Vion # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TARGET = swac META_VERSION = 0.2 META_NAME = swac META_DESC = "An experimental plugin for words audio collections (SWAC).
    For more information about SWAC, please, visit the Shtooka Project Homepage." META_AUTHORS = Nicolas Vion META_FEATURES = dict;defenable include(../plugin.pri) QT += sql HEADERS += \ swac.h SOURCES += \ swac.cpp RESOURCES += \ pixmaps/pixmaps.qrc OTHER_FILES += \ swac.json qstardict/plugins/toolbarplugin.h000066400000000000000000000035741453553600400176050ustar00rootroot00000000000000/***************************************************************************** * dictplugin.h - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2018 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef TOOLBARPLUGIN_H #define TOOLBARPLUGIN_H #include #include "../qstardict/dictwidget.h" namespace QStarDict { class ToolbarPlugin { public: virtual ~ToolbarPlugin() {} virtual QIcon toolbarIcon() const = 0; virtual QString toolbarText() const = 0; virtual void execute(DictWidget *dictWidget) = 0; }; } // namespace QStarDict Q_DECLARE_INTERFACE(QStarDict::ToolbarPlugin, "org.qstardict.ToolbarPlugin/1.0") #endif // TOOLBARPLUGIN_H qstardict/plugins/web/000077500000000000000000000000001453553600400153175ustar00rootroot00000000000000qstardict/plugins/web/adddictionarydialog.ui000066400000000000000000000066241453553600400216640ustar00rootroot00000000000000 AddDictionaryDialog 0 0 377 238 Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() AddDictionaryDialog accept() 227 217 157 237 buttonBox rejected() AddDictionaryDialog reject() 295 223 286 237 qstardict/plugins/web/pixmaps/000077500000000000000000000000001453553600400170005ustar00rootroot00000000000000qstardict/plugins/web/pixmaps/edit.png000066400000000000000000000172161453553600400204420ustar00rootroot00000000000000PNG  IHDR>asRGBbKGD pHYs B(xtIME ,3$[IDATxy|SeYrN{ @Ȱ::aTd2. :#E@:#˕]qapŅBWIv9! i'iK~>/I7)F}oA"\OI}|]>dnm*Ѽz@6}Vel\ QVKhM$}b;㎩ϯw/}cFL,@0fT2KBt?BHs8?V.LH93,&Bi t/x~f(=R}[m\(trsL>ja'A-n R$|- \i}4# nK]@@@"t dA8Gkz ajz&?L=. jwQ7D>'V tG.H-B,\vGZ!}?1 x jj bhGÂkD@hU"e.3n R'Qj{$~D1 5nD =ǿN[|. C`\o@Duse?. JQB&l ցр4t#B #QA|~?Z=C: ?b G[#N '$2#!;pִ J_Xh,bXP`$YOAV`7C$|h=h7 x={v㾻oGTv?CX Go:%xxlXbDIȠiz 0aZxSn ?RLկbضҰ@Cy$kh ^x?c|͌׬o;p t4Slc}0܀/<6[DZZZ~`*~[֡ (;|λ׍=gn O͂$IP4K"~~d *$P<+~wOQvFO e4F[X c n+ޚkĂ* d9R\0rHHa42^)H5܂ 1P`D)Xq2qȲNQo^Hc[1HK6 WLـ$)r0i4MaY4&=&A`pXw_l݂i0Y Up)0YYҰR3 À5`2hC ~0cL~kk+dp`ͩ,>;k&5<8g "}Iv(܀iƮ0)r*P 9%]8pIQ,f3x~= #A`԰Ä,w$Unp p ,d1b, ,~/*^:j |8}=@z26^:rllڲ fVg6"p4ݠ/ =Au~C7W c.Nw`dYjz#_H`c|5 J3X[wkA:^}|҄ Ȳݸ+`ZaXq\!h{jz03Vķ e||9)qH@U,<3`X`>=A`~?RUQ%MAZGa H›  &MxNsH["Xp@z LҭHn^1҃Տ"1%V5@iz{z*hxߏ4T|O~i6WOIck!yXEi'=ޚF=m_jC:*  6O"HaQR7s G4TY|R4 ք x?|#:yhM}{>y[ md830㵖fYŌԦg Y nC_ٷU %+ N p7!o]P) Rb4[ n2X'ѯeXxյX{6ll6v$$$nj{K x О{Z  im([C4$*oʵ Ok?!! W:,iO@)$&X YV<@Yq+ gQ[SNm!AP{g_S힇D/ }YjAg2Ip3 A ;U(8|]l6[; P쳀("G&*wWP(<7RX類̗AX`}v/ 0Jӯ*n _"aE"i 9)Κs*@SY|8Ƭ16E$ >;m xՁ;~jX_*_E `f;_/:@9E_=g}1xlIq0;?Cad7|?!^(YK ؑ@$ f\gni s)m5fȣ ͿfY_BmVd$@8<~}xRp5A$)8pTOb>/ݳl. =S >/~0Me(~22/]c+6~k.nWd&ʰxo;W/=x7r;h , WE׳܌DS*`gKl=\+PM?-'k _(݋B bsBH;_wSԜ،"9%%֌^xA9(*85Y Q]ahCv\ Gb‚g 3 @[p>8`9Gz7y +z&Ptsʷ炫~ 0{@|Ht/ `o xh>G6 B ۑW3X&==k?f!Xa8J`ޟR/O_:,j݆"x" gGi8<02#))WK0ن|/)ǵx]tM@S8DX* ʴZT4tl6sB]xL|ݽH6xbȡjy?.`]58q"X  mO({lU"ѵ\B*MML JcDo`G]!ĐPL,iđOn,!<bʌjY A1cDPp&/w ~p^魛,9dƨbLy,[νQޒyȶ~ ^BsշXiXE-]v30zo6TEıM0 lFu}< `GKxgC\`Ʒ+(F:ߞ%m?Tt@Ue=8[$ y"NUK{lN>K7\ ayAfuk~[@p?Q!( jO|0;%l>5^r Ik>/0 8k'N^#~&>ضGPu|5 aq E<7yhYVJm(LM0Er}La{[EQڄ7(|{')jJ/˜V{&fr~gߟ"a"h/.'wusPߞtNh(+]w>F`ud๵uލ.ǟf{vlӓ@1ltή0('E2D]֘{o7G eascѿb͝+ǏwWCqx?d¤{Vtut-,ɲb72 br Dq;zZ\5j(=w6;z(/,qUxlʼtZP ,AS[jkC \I@( Ҁ$CTUߊn_B#WW>4 o(xi?TEAIP O~;|)I6 v7)la ҢMP@J̑HŊ- ו8d HDz7Up2?4 ao ~$CÅxQ d) (2E 8O#k EY`vVw=nmm % .#;RnkutԔDywlnB,w9 eCQ`a|-,CEIYI4 8@2]>@4xRC kZ^}8qDeg-Q`'b[eTÆ˞C B[u&Aeee^-oTcߖݫ2DI +jD* i*)p8hmCm}v?|#%^PEg2'S9_4/A&T?`2 H~w _#Q:'hdgTUE04̬̂,hjj@m]S/^( /`Q9A@ItjAMD(lhUEQy HLL yZ?pmx}[Y 2$Qx?OKMŠA Vu8x<3߮|Ri8 fO҉[ْ|ߞ=`Y u#C( (k2b69樎iW5;7--p\"Y|*d EQa4x fel6?hm G>2\nkWd Qɥ?,*\/QAcTԝ%TКf|>?!.(_z]=hiiFsSZ].HZ K(-Vdfd`/{9'?XR֮7\5gi'$dAfU^pSX>sW)xVD}F|{(`_G۷pDS8~JxxDZ[]p\p67CаZ$$8#9)I{Moa(Ғ][~Oaa'Mszq8q3lʿL ˲[|߿/xwϨ8bpm_i7S? #BQ͔=eeGb۷oo|}tZٕ %p88iȐ!Cp!n,  HrތXu8la*hZ,Zv.{]Qo}+2$\eWէG,{@Gb]G̛xj}\-]s]y\Bii)fϞ#G -- )))iUz LT@;zt*,˂Ak/I",K MM8EEjJr$Ţ;Ι%^:u{7&\D{_k*rع#4MC=OVMV!,{jH:Y G۷&}#^Wd 333,rqQٳN-_Y+p:֐?e\(5 ^^jMmKR8|AeLŎ6W7{d$z7zfW 5k~Tzz;C=hllD}]~梦z| t:޳)k .!>?#t 5zxM *|͙=׻QgΜi0a999u/ɓAAT,g~w.kS֛;4/XLwW +^ve,k[@j~QqY3o~6ԩSܼ|PE45BQTj6lj$`,D(.. PU5@kTHN)k(pp\p]p].n_'L 2+z据VUVm-,,;mڴz'--6MN޶#Y|mJ0m(B!;{p{¢{R[;@1c9xwpomJEQ`Uɣ7vz" *Tdgg]Pt9OWw*[9x6DM$]˶E ` NTOUT(]"ϯh/țabKGD pHYs B(xtIME # fpIDATx]{ř}y?5#AQ4Y%p=Q1l6FyqbA$&ٳwr4nr5FTD bQ 30v}}uWW;3SVw}Q@JTD%*QJTD%:kΜiDt:CdM A\c:pa"@@f̌_[QJM&6<0;s ^}.b3v3/ђq-a2"`1Ԣ>e6R ;詘)|o>aƵ ,96Q OԟeDo2a14K/QI"3g 7X QFb9g~O wl߾$8kNDa9~ @e@;v>ܓ%Ag~ 7zMM5ЀƆF!H XD0883Dqtvv 8T@;/>̳%Ymm3%}\x&Nf477eR3<:J#bŁwBww0$󭔌_ߍ={@2{@ /~,5.c; /<¬>Y>9fHcؽ ߡ|[ 2U۶m@k{ fO³ =lΚX,™wVSh_4ص{7^}5{c~Nx޾XPa٘ڊj:DGx ~uzu  % l +s#B+ 3ui8yK `>&Ǟ^ع{q=R_$ X'r {zUkjjp…8yʔw&];^x=xeU[Ǐpt}ヒ;wرcVBy'cb_`Fu}㿑<}4|ҥf3ҟSzp/~crh3RbH;,̨ŌiۋN ?u1|睧͟X5kra``_L9P[ƳGtuuzꩂ:KiJֳ֧j[X -Xi:2W?*_zR柷׹jkqх1RJx\U'8Ւd0TyȬp1c/hwb2{ e$ 7)XK y'553.EC}X2XJ0RJHcl]Ē!%Cr\?wH)쬳KfcE)Ri]{X,>E-XuU;9ZZZK.A"Qfa”Gt2>}Hi0=dm'H`cĉ1XsW\w\@&R9z*.XZ2˸HLEkYzkKK=g/S/a)Sl2N\vjh[B>JD1JϒY=)'c޼6)j+ygM@Waz0-YGHe˖pQ"qh~IhfX;chE& #:1mҷ̘ڊ 'MA|Ĩ#vN:i,iY.ѦV]^x18nN}27Hg"9R֤Up Wr*vZJ;3քK:jPG1qa9zP:sP1K"ΞJXQ!-*'Pl7>ox;Z꣏.. \ЃY:{6b&{ UW]U; )btu6f$jjjɶD9}K%&OAGQA-Pmd$2Q2 4Vuu58t~ Sl# /> պL?As wj>>j 쨷hWk"̊,NI'iCjҕW^9c@m(cqj" V3gV&Hv* i<%k+k{d7AJq! aGKg0<4(3ҖvdQ2s+vܡ.Zd0fL}r KꋆHޠƪ"7648`&3&uL H3A@% wB-#u0~|zsQ@ /_n ?ŠsTc8S1)ӥL ՓvX'L9bf[aͺE,6gn8;Jɓ'ÿR3|fYUe~6,@BܙQ;' %(3:]v/;S9̈vSp1@f]w"MaMcX ͓&|#M\2,'N.<5ͪ-pUmwęPu{~3~ðǏCYYYEGT$prKs .`Ʋ:\5XEXh]c ĞB%HwlDZ8a"ρ&_(,YQyD"1cxjt.kOjy^K]2F$6 * s1`)Ѐx<@A+WN(Hø@7D[4(ѲjU; dzV! a5:q)?`:ZRPcСC0̡kl* f U!dcc7' aCfxA EHp 0+%ЈÇgCL ZF/l764 /l_͚DPz!w&-f{%-]n(q (-)ls qa, n19S0UdA p:AN@t8o^ͣ;Q^iW5!dT;5 vnCY\=T8V`+W6E&e(N֦Wttv[Z&zrW .#ڈj:yo"!3uXϥt;C!lc)MՕp>r n "i'^ փqrCRT }lv^U5ftoW"Q%x2 Ov"-q-7Vi °}zVC.r+9̋ `+*+-$tqkLM g&Ҫ "!`xadYy9l!@s4tٲSPLXth|@XðA,AK6b1@ ðX, 8~7pM z'|<`BhA2!db+ j׾<| $,sҙ+wuuufxo߾T2)94tx8vӞӉ1m4-R;֓!_{g(L0ָG-۵>Rd=};9+ޜ0$iԎC"@==i3uF,%zzz"c 6gV>Q#ؾ"[ea^nE4mQɡ$; i9ӱc)D3KHDgg'*+*PUU DQF!&Av;c)BIA]eŋ' ,< Q]d8z֩v?L(X46 wfu) Y rs( z\8[$O;(D)^$Jt2E">aߛ)/2#2ǔos y}3a`` [ ;R><|aYhry ӝʊɡ|Ëav(uWD'rr!_]k +?aT }BfWvv^x~{ah"@VϗZ "zC;;64H= 8~* f\a^!z-2{ ¯b?u֝b a`2޻*": AVvopr?DE`݃Jxgd/A&(HxXXG5  KX/&ýODCXB '=  4ސ9v"YvBUwFu2WEk{$:J,Faǽ#XQ+eºBlɠ] , J</ÕݎX/}衇 :8ueY<u>3!Ǿ)'ni- ߯[V-㦓`( h`=P[(#IN~ D0v<:X &=GEGB7œe˖DUփ2r rin "z;>*Ef 1][(ZZ@~ Io /% B9Krќy"WMZW֬}G~ayQxiֈbqkY-/ؿo4Oi~3[լӬZ ]s.sͭ3[5VuºfUc\*58B.|`=ؽIܞo~~M=Гz& /n&U؎Sv<z? {s[iIxfϊ 4dn*vp"{= fZ\#oX/&1cӪUw@ez"S>v|xREA큾 6RttX߽㻩 憺߸FF|7mڸ@`lj 3@D5/#=<=F "{*2%ϭ073w2X|"rOBܲuo{tw-f;8`<~'!V]Qxo|R0 8/@or {0 $!Fi7 ѧ 11<;xsQٟ}AyYEag !$B]JeJjr(J@+{+[Cإo+Pge)Ie|~%-Orz]mix|l0a5H4Act 2ӔCɃɤ}8m۞d7jT~ڑ U r5 LF22O@AL "naFD.Μv18e:ޏ^wh8om?lVS!_dFOsnpQ|"0NN^k00!pO{\BP !|"|l{>6=z(c'B2SDA"LB/-g #(50y!Bl ??~r/, *pa.0D h=nboG$JIENDB`qstardict/plugins/web/pixmaps/list-remove.png000066400000000000000000000203031453553600400217520ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME #E< IDATx}yx}$@RD|R_qj׶Vnnw[{u44i64&Ol8%Qmqb[-ڭ[)IM@̷ `%{*CiG:`:5k@$v[pPY(3>Bg>v#&[l`[`xM8f7S*$v; @`EqAHBN/#Y'b7 2򲹒Rt ?s 8=K3 !t䄙iO@.>0ˉ@?v|C%&<T^5/ϡ@&Sޓ)0'7f:L@089t9"Ț̫&K o [o&m*/JÂA>c`s; o](1=GLɒ)5P~4;'28bK2g/="z~`髊 WIJYw?L+;%e.zϓ\Y"!fSnUAK 'Kk~6B UG#]`?' 07b׉G )Gk@$8  Hlgc(Εhj|6f^sBY @bfNx y?ʕV@JP@юfb!ee:X'Eƀk1 Y̾tȈ']w+6DҊ&mpu.)&7khʠ_֙ `1L|%w|d0h#e} Ÿ֝'fQk`n4xW_ 5*7n@uG 5ÿy>2u@yaM!=G,, dԶ{7EoNC :1{ٕ>kB(vf8>g0R]=ug1^ov:a@d*^JZca:ƦfS.DUSѧg?\^4mUtXtPtϽ A~|c<׏?0( {b(qMߟ>dL@e-`-Y)D4JJ`ٲdhL>&*byy~؊O]ukӈu;&0>Q5;hۉZq؁d*nj@]wCi47_ `w4xfWr#TyF#˵oR~-]nmT_ukJ}&0y޾fVǝ2p<~x>K)?e5OJND[T P[)Ɍ~(Cwjuu(ٰCB=8X*Ӑh1#Gs |0l&>Tlg.!81Skܐ k@m la#J+M\Uu.R~Pxgކ-E*UJ([:Rd%F< "DM\ D%H pY,4_7;\:>8qT-̀O`;~l `:АV@ɍ7b/8vӘCbLwc~-qKԤ |0UV}^Xd]._=!Ѽvk@EEPY|(`ʗPS ?Z;_=VנluTq>Sf_cw&Qx?1O]̸><ڢ*#|3БpUU``2Oc,[[3?\qqLcn0^~|U7&y|.H/`n |0U+A+'1Q@`-CEMMQJ8==3.#jtT5*R{g +{4c<>/Ĕb{1rA: V*ޏ/j0ajY.IsT[;7e`lnI8aF?嬁/#sCI݇twyo5(wNtd |) |1M7Cc#bf>tͪksN InyT ja2`^ԩl/FdCT $EIЛ#'NOѱ@Vwb/<ܣT#"a` Y8d)\ema! յI*{k\ߏvAL ><uU(9"Ѓ}x@Y{[R2TV*L0껾6 P0< U2;:V^vL9 O9mWjnnFǁ(u|0WVI3z!Pp@g*h֑1O +dлkgnI0gQo**aknPl6g#ۖbk= bJ ^vl/.z>EfRQW9/ePc*WlRQAR]xye5C v*AәC;|c%l-j_`-|hKV>n[ 8L1Cu5g$JzLZ>]gJ6l:NwNAl|!+f~Jږ+R^wyq(jy Q&._4͞VlM(["ܙC%P9Բ.|xhNR+4 B!6dH<d;"r;g[$j v@r::رޮ\`HO`v:s.l)>& "|f3H@ 7fz*.C٥0idk{htb67iAM11VƑ.lmIZR獛ZL}i <e"(٘}/ ~zwiokq&^g( SߩHLaJ_"2i-AOi aoi}~؞%XT𛛢v\c|F BHt37X qJj'' :Uax ;`onT\ [[`u6 aTOFW$x LMBky8ÚT}6&s89  PQ/Z{qS}2߇Ѿ7G`!wuzct_OM_P-y*E5; =67I@CkAYS>zo[RJNX'4V$Ԅ[ Px/q5Z"X?6 azi,\Y*ID~,xгk">/X' rT.R13EEMe RoV? atB Ie('ugTMU(kSޮ.!&y( ֆ:'%MZ\81^ g:`L}&W3Le ^H^ݷTÔ+^|ٶ/O_;aTv߳PŒacDq1k`E1o&J:(vOB8_~o` |^fGSȼ9[kvu/x0A2&HZx_r kuϐT |;3%H~YS=Zܩr$D OXqVl`v|>~e9ddWVe@ {KXƛ RwM$c َD^tJo>ŠIJ/_!DpDq&c0av,8R*Ap#ގ={s~ƍh߷_̠[#+yQCA,X(J2:X:@oRC8$:>/D9!}!q+^~2Lw-& \CqDNqPt泂M5"YrgybP/" a F!䟕 kCǡ_TQ(QH}0Ax\Ct?@p8 8K|߉3Vw" aݲ Lq3>ȅg2dFt6ۢJ6~ZTbBM13<<ɠgAxd! dv\{K"Y,D" !<Υ܊/PZzY2%?js0=4$Tqb+h0>Ppypc}Cq۝w\Q.gKLa 2)ǝ̆ley0F\Ò{"݄gk@r_" jǵyWFYD 'gpcnʼn+> CsG$&oVGIK$8C2Y5=8O$v\pJp\£C]v\/8~D6Ԋ;ӟ.9S.7fJ=Mk udyRܟf@Y)X!rsvxV':I#}Ki0]++ Dj`dlc}.5>g:ޮv\% `5$izJ;}i=}7D]SDY. w_u=۶gܒ`Yl2L {X P6 ΂z  "|~]P-=$?s 'ѳ}x,z妲dFwjD ɖq'F)PHmx+~ _櫹۷5" IpRf…Y#&l.Ui/&\bAd94=ms6z "4;u>=`*;.\ Hnx+>}XT/ z]ִA/UD,F`j@62?@#,:ؔƳ~l1 ɓE KivFL7rݷl8H;NY>;>aF#Ǩضmo˸q`z`PqCq1;夼,VZ؛`mKȣ8S5YW1).JL,c/(@ۿlqo66lu7֫F{;>~deOKZ(,@ҽ}~xsf3V9mޜ[%jikVf;`oZ$ЏL ! az6g<0ӍA$.J/l`=uW$VX[ 4D4\Hnf`0moĤNm/~z8;RPQW~v=9z4dF,egd_J8?NiћK6Ȏs}[|CM SY u7K~a^ r@\O}KI6DunU9'@z&YeS{}Y#.HZq%, <6?sϋkpЅͤ%}N5kIU֜ ) Ӭd @i#%vv ,g྘n5kE[ , كֆYwe/(GUi1L5V 6%fP baxfdZVĪ+" onNNSRh%➹B,b(.Fi%_nu7j#S >_Jʕms}f_r~{s~UzҬ֦ؗ7 0qB \C~n5+qjoE#A ~Le: `P]6@g*ҭf%Pվ"IvgGO?Ao XobBJ;n#4)@`a9<ӲsZV>ABɓT=Do9W`q9v;PRe e q:VRf}8?_L kc}VR?X(K9~ ,||{d, r[@!9#~UTWG89Mj5 ħf8_} ''Ã?況[VKmݛj'Pd?QxM-N,zMh01 f Z| OlcA`ғ|Ūb &߫@K?' 3)? >|c͡6g# EzZ3 OB~?Lf Vv(=U䢿9!Ȗ{FUc\ƌŏ G!4O&r> /l~_ 'q{F01uvW4b>OYW>TsEߑ<?ٻ. or{T@֚/Eu21uDԕ?6 MhbYCK-U֊\&]޵@+?a =U+Jͱ{߱Yu=@|u%6uL؞7`/vvv/>-I/ld׶ρ pUǞzot/l@10Uk׿.,d鷱[n9zm@B-b{=|+ rk2'< j uxo4+q` A\v61^n/A8Pi$ edit.png list-add.png list-remove.png web.png qstardict/plugins/web/pixmaps/web.png000066400000000000000000000032171453553600400202660ustar00rootroot00000000000000PNG  IHDRJLtEXtSoftwareAdobe ImageReadyqe<$iTXtXML:com.adobe.xmp @ `IDATxĖMHTQje2}P-eQMHMEQD0$ZD( ʤM-2Z1I%1jfC;1=О=sϹs{/O8.Y a&L{hz '0@BP{,A DLӰ3Pj(L(!`W2Vr>>18)`vط)A`+k8 bt%kN|;Byfo*w ,sYJ[S[H~kNɾ&La?:g̩ 9@? d@Q+ȱ W&] Xsʔ(+GƠ*b,rr+rڪBЉ3}Eoa|D߭26?vtVwdny`9

    j윷v۵^-$ullGU-5쵄h`*AdFl['܆Мش`csf`ղKOIuD/MG`rخj,lud$1J:ʘCpvAndNZ<6Ȱib);\8 vA*vIM3LO?TԖ٪`?vS,S^sO9߭%EXFyIENDB`qstardict/plugins/web/settingsdialog.cpp000066400000000000000000000120271453553600400210450ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.cpp - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "settingsdialog.h" #include #include #include #include #include #include "ui_adddictionarydialog.h" #include "../pluginserver.h" namespace { QStringList supportedCharsets() { QList list = QTextCodec::availableCodecs(); QStringList newList; for (QList::const_iterator i = list.begin(); i != list.end(); ++i) newList << *i; return newList; } } SettingsDialog::SettingsDialog(Web *plugin, QWidget *parent) : QDialog(parent), m_plugin(plugin) { setupUi(this); QStringList filenames = QDir(plugin->qsd->configDir(PLUGIN_ID)).entryList(QStringList("*.webdict"), QDir::Files, QDir::Name); for (QStringList::iterator i = filenames.begin(); i != filenames.end(); ++i) { QSettings dict(plugin->qsd->configDir(PLUGIN_ID) + "/" + *i, QSettings::IniFormat); m_oldDicts[i->remove(".webdict")] = Dict(dict.value("author").toString(), dict.value("description").toString(), dict.value("query").toString(), dict.value("charset").toByteArray()); } m_dicts = m_oldDicts; refresh(); } void SettingsDialog::on_editDictButton_clicked() { if (dictsList->currentRow() == -1) return; QString dict = dictsList->currentItem()->text(); Ui::AddDictionaryDialog ui; QDialog dialog(this); ui.setupUi(&dialog); dialog.setWindowTitle(tr("Edit dictionary")); ui.nameEdit->setText(dict); ui.authorEdit->setText(m_dicts[dict].author); ui.descEdit->setText(m_dicts[dict].description); ui.queryEdit->setText(m_dicts[dict].query); ui.charsetEdit->addItems(supportedCharsets()); ui.charsetEdit->setCurrentIndex(ui.charsetEdit->findText(m_dicts[dict].charset)); if (dialog.exec() != QDialog::Accepted) return; if (ui.nameEdit->text() != dict) { m_dicts.remove(dict); dict = ui.nameEdit->text(); } m_dicts[dict].author = ui.authorEdit->text(); m_dicts[dict].description = ui.descEdit->toPlainText(); m_dicts[dict].query = ui.queryEdit->text(); m_dicts[dict].charset = ui.charsetEdit->currentText().toLatin1(); refresh(); } void SettingsDialog::on_addDictButton_clicked() { Ui::AddDictionaryDialog ui; QDialog dialog(this); ui.setupUi(&dialog); ui.charsetEdit->addItems(supportedCharsets()); ui.charsetEdit->setCurrentIndex(ui.charsetEdit->findText("UTF-8")); if (dialog.exec() != QDialog::Accepted) return; m_dicts[ui.nameEdit->text()] = Dict(ui.authorEdit->text(), ui.descEdit->toPlainText(), ui.queryEdit->text()); refresh(); } void SettingsDialog::on_removeDictButton_clicked() { QListWidgetItem *item = dictsList->takeItem(dictsList->currentRow()); m_dicts.remove(item->text()); delete item; } void SettingsDialog::refresh() { dictsList->clear(); dictsList->insertItems(0, m_dicts.keys()); } void SettingsDialog::accept() { for (QHash::const_iterator i = m_dicts.begin(); i != m_dicts.end(); ++i) { QSettings dict(m_plugin->qsd->configDir(PLUGIN_ID) + "/" + i.key() + ".webdict", QSettings::IniFormat); dict.setValue("author", i->author); dict.setValue("description", i->description); dict.setValue("query", i->query); dict.setValue("charset", i->charset); m_oldDicts.remove(i.key()); } for (QHash::const_iterator i = m_oldDicts.begin(); i != m_oldDicts.end(); ++i) QFile::remove(m_plugin->qsd->configDir(PLUGIN_ID) + "/" + i.key() + ".webdict"); QDialog::accept(); } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/web/settingsdialog.h000066400000000000000000000050351453553600400205130ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SETTINGSDIALOG_H #define SETTINGSDIALOG_H #include #include "ui_settingsdialog.h" #include "web.h" class SettingsDialog: public QDialog, public Ui::SettingsDialog { Q_OBJECT public: SettingsDialog(Web *plugin, QWidget *parent = 0); void accept(); private slots: void on_editDictButton_clicked(); void on_addDictButton_clicked(); void on_removeDictButton_clicked(); private: void refresh(); struct Dict { Dict(const QString &a = QString(), const QString &d = QString(), const QString &q = QString(), const QByteArray &c = QByteArray()) : author(a), description(d), query(q), charset(c) { } QString author; QString description; QString query; QByteArray charset; }; QHash m_oldDicts; QHash m_dicts; Web *m_plugin; }; #endif // SETTINGSDIALOG_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/web/settingsdialog.ui000066400000000000000000000106501453553600400207000ustar00rootroot00000000000000 SettingsDialog 0 0 354 295 Web plugin settings Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok Dictionaries 9 9 9 9 6 6 6 0 0 0 0 Edit dictionary Edit :/pics/edit.png Add dictionary Add :/pics/list-add.png Remove dictionary Remove :/pics/list-remove.png Qt::Horizontal 342 26 buttonBox accepted() SettingsDialog accept() 227 311 157 274 buttonBox rejected() SettingsDialog reject() 295 317 286 274 qstardict/plugins/web/web.cpp000066400000000000000000000077551453553600400166160ustar00rootroot00000000000000/***************************************************************************** * web.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "web.h" #include #include #include #include #include #include #include #include #include #include "settingsdialog.h" Web::Web(QObject *parent) : QObject(parent) { } QIcon Web::pluginIcon() const { return QIcon(":/pics/web.png"); } QStringList Web::availableDicts() const { QStringList result = QDir(qsd->configDir(PLUGIN_ID)).entryList(QStringList("*.webdict"), QDir::Files, QDir::Name); result.replaceInStrings(".webdict", ""); return result; } void Web::setLoadedDicts(const QStringList &dicts) { for (QStringList::const_iterator i = dicts.begin(); i != dicts.end(); ++i) { QString filename = qsd->configDir(PLUGIN_ID) + "/" + *i + ".webdict"; if (! QFile::exists(filename)) continue; QSettings dict(filename, QSettings::IniFormat); QString query = dict.value("query").toString(); if (! query.isEmpty()) { m_loadedDicts[*i].query = query; m_loadedDicts[*i].codec = dict.value("charset").toByteArray(); } } } Web::DictInfo Web::dictInfo(const QString &dict) { QString filename = qsd->configDir(PLUGIN_ID) + "/" + dict + ".webdict"; if (! QFile::exists(filename)) return DictInfo(); QSettings dictFile(filename, QSettings::IniFormat); DictInfo info(PLUGIN_ID, dict, dictFile.value("author").toString(), dictFile.value("description").toString()); return info; } bool Web::isTranslatable(const QString &dict, const QString &word) { if (! m_loadedDicts.contains(dict)) return false; // TODO Q_UNUSED(word); return true; } Web::Translation Web::translate(const QString &dict, const QString &word) { if (! m_loadedDicts.contains(dict)) return Translation(); QUrl url(m_loadedDicts[dict].query.replace("%s", word)); QEventLoop loop; QNetworkAccessManager qnam; QNetworkReply *reply = qnam.get(QNetworkRequest(url)); connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); QTextCodec *codec = QTextCodec::codecForName(m_loadedDicts[dict].codec); QString translation; if (codec) translation = codec->toUnicode(reply->readAll()); else translation = QString::fromUtf8(reply->readAll()); return Translation(dict, word, translation); } int Web::execSettingsDialog(QWidget *parent) { ::SettingsDialog dialog(this, parent); return dialog.exec(); } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/plugins/web/web.h000066400000000000000000000051411453553600400162460ustar00rootroot00000000000000/***************************************************************************** * web.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef WEB_H #define WEB_H #include "../dictplugin.h" #include class Web: public QObject, public QStarDict::BasePlugin, public QStarDict::DictPlugin, public QStarDict::ConfigurablePlugin { Q_OBJECT Q_INTERFACES(QStarDict::BasePlugin QStarDict::DictPlugin QStarDict::ConfigurablePlugin) Q_PLUGIN_METADATA(IID "org.qstardict.WebPlugin/1.0" FILE "web.json") public: Web(QObject *parent = 0); QIcon pluginIcon() const; Features features() const { return 0; } QStringList availableDicts() const; QStringList loadedDicts() const { return m_loadedDicts.keys(); } void setLoadedDicts(const QStringList &dicts); DictInfo dictInfo(const QString &dict); bool isTranslatable(const QString &dict, const QString &word); Translation translate(const QString &dict, const QString &word); int execSettingsDialog(QWidget *parent); friend class SettingsDialog; private: struct QueryStruct { QString query; QByteArray codec; }; QHash m_loadedDicts; }; #endif // WEB_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/plugins/web/web.pro000066400000000000000000000035261453553600400166240ustar00rootroot00000000000000############################################################################# # web.pro - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2008 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TARGET = web META_VERSION = 0.1 META_NAME = Web META_DESC = An experimental plugin for WEB dictionaries.
    Warning: now this plugin is unstable META_AUTHORS = Alexander Rodin META_FEATURES = dict include(../plugin.pri) HEADERS += \ settingsdialog.h \ web.h SOURCES += \ settingsdialog.cpp \ web.cpp FORMS += \ adddictionarydialog.ui \ settingsdialog.ui RESOURCES += \ pixmaps/pixmaps.qrc qstardict/qstardict.pri000066400000000000000000000143651453553600400156040ustar00rootroot00000000000000############################################################################# # qstardict.pri - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2008 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# # It's common for all subprjects file. Keep it in mind changing it VERSION = 1.4.1 QT = \ core \ gui \ network \ xml QT += widgets printsupport CONFIG += \ qt \ warn_on CONFIG += c++2a unix { CONFIG += link_pkgconfig PKGCONFIG += glib-2.0 macx { LIBS += /System/Library/Frameworks/Carbon.framework/Carbon } else { LIBS += -lX11 } LIBS += -lz } win32 { CONFIG += console LIBS += -lzdll -lglib-2.0 -luser32 INCLUDEPATH += $$GLIB2PATH/include/glib-2.0 \ $$GLIB2PATH/lib/glib-2.0/include \ $$ZLIBPATH/include QMAKE_LIBDIR += $$GLIB2PATH/lib \ $$ZLIBPATH/lib } !isEmpty(DEV):DEFINES += DEV unix:DEFINES += HAVE_MMAP unix:isEmpty(NO_DBUS):!contains(QT_CONFIG, dbus): NO_DBUS = 1 unix:isEmpty(NO_DBUS):QT += dbus unix:isEmpty(NO_DBUS):DEFINES += QSTARDICT_WITH_DBUS isEmpty(NO_TRANSLATIONS):DEFINES += QSTARDICT_WITH_TRANSLATIONS macx:isEmpty(TRAY_ICON):NO_TRAY_ICON = 1 isEmpty(NO_TRAY_ICON):DEFINES += QSTARDICT_WITH_TRAY_ICON include(plugins/plugins.pri) unix { macx { isEmpty(INSTALL_PREFIX) { INSTALL_PREFIX=/Applications } # helper var to save text duplicity. # NOTE: it cannot use $$TARGET because the target is # different in every directory. Obviously. MAC_BUNDLE_PATH=$$INSTALL_PREFIX/QStarDict.app/Contents # bin dir is used for qstardict dir/main application # qmake created bundle for it itself. So it *has* to be # the same as install location BIN_DIR=$$INSTALL_PREFIX DATA_DIR=$$MAC_BUNDLE_PATH/share TRANSLATIONS_DIR=$$MAC_BUNDLE_PATH/i18n PLUGINS_DIR=$$MAC_BUNDLE_PATH/lib DOCS_DIR=$$MAC_BUNDLE_PATH/share/doc MAN_DIR=$$MAC_BUNDLE_PATH/share/man/man1 bundle.target = bundle bundle.depends = install bundle.commands = "mkdir -p bundle && cp -R $$INSTALL_PREFIX/QStarDict.app bundle/QStarDict.app && ln -s /Applications bundle/Applications" dmg.target = "QStarDict.dmg" dmg.depends = bundle dmg.commands = "rm -f QStarDict.dmg QStarDict_tmp.dmg && hdiutil create QStarDict_tmp.dmg -ov -volname QStarDict -fs HFS+ -srcfolder bundle && hdiutil convert QStarDict_tmp.dmg -format UDZO -o QStarDict.dmg" QMAKE_EXTRA_TARGETS += bundle dmg } else { isEmpty(INSTALL_PREFIX):INSTALL_PREFIX=/usr isEmpty(BIN_DIR):BIN_DIR=$$INSTALL_PREFIX/bin isEmpty(DATA_DIR):DATA_DIR=$$INSTALL_PREFIX/share/qstardict isEmpty(NO_TRANSLATIONS):isEmpty(TRANSLATIONS_DIR):TRANSLATIONS_DIR=$$DATA_DIR/translations isEmpty(LIB_DIR):LIB_DIR=$$INSTALL_PREFIX/lib/qstardict isEmpty(PLUGINS_DIR):PLUGINS_DIR=$$LIB_DIR/plugins isEmpty(DOCS_DIR):DOCS_DIR=$$INSTALL_PREFIX/share/doc/qstardict isEmpty(MAN_DIR):MAN_DIR=$$INSTALL_PREFIX/share/man/man1 } DEFINES += QSTARDICT_VERSION=\\\"$$VERSION\\\" DEFINES += QSTARDICT_INSTALL_PREFIX=\\\"$$INSTALL_PREFIX\\\" DEFINES += QSTARDICT_BIN_DIR=\\\"$$BIN_DIR\\\" DEFINES += QSTARDICT_DATA_DIR=\\\"$$DATA_DIR\\\" isEmpty(NO_TRANSLATIONS):DEFINES += QSTARDICT_TRANSLATIONS_DIR=\\\"$$TRANSLATIONS_DIR\\\" DEFINES += QSTARDICT_PLUGINS_DIR=\\\"$$PLUGINS_DIR\\\" DEFINES += QSTARDICT_DOCS_DIR=\\\"$$DOCS_DIR\\\" } else:win32 { isEmpty(INSTALL_PREFIX) { INSTALL_PREFIX= } else { # handle path backslashes in defines correctly INSTALL_PREFIX = $$re_escape($$INSTALL_PREFIX) } isEmpty(BIN_DIR):BIN_DIR=$$INSTALL_PREFIX/ isEmpty(DATA_DIR):DATA_DIR=$$INSTALL_PREFIX/data isEmpty(NO_TRANSLATIONS):isEmpty(TRANSLATIONS_DIR):TRANSLATIONS_DIR=$$INSTALL_PREFIX/translations isEmpty(PLUGINS_DIR):PLUGINS_DIR=$$INSTALL_PREFIX/plugins isEmpty(DOCS_DIR):DOCS_DIR=$$INSTALL_PREFIX/docs isEmpty(MAN_DIR):MAN_DIR=$$INSTALL_PREFIX/man DEFINES += QSTARDICT_VERSION=\\\"$$VERSION\\\" # DEFINES += QSTARDICT_INSTALL_PREFIX=\(QApplication::applicationDirPath\(\)+\\\"$$INSTALL_PREFIX\\\"\) # DEFINES += QSTARDICT_BIN_DIR=\(QApplication::applicationDirPath\(\)+\\\"$$BIN_DIR\\\"\) # DEFINES += QSTARDICT_DATA_DIR=\(QApplication::applicationDirPath\(\)+\\\"$$DATA_DIR\\\"\) # isEmpty(NO_TRANSLATIONS):DEFINES += QSTARDICT_TRANSLATIONS_DIR=\(QApplication::applicationDirPath\(\)+\\\"$$TRANSLATIONS_DIR\\\"\) # DEFINES += QSTARDICT_PLUGINS_DIR=\(QApplication::applicationDirPath\(\)+\\\"$$PLUGINS_DIR\\\"\) DEFINES += QSTARDICT_INSTALL_PREFIX=\\\"$$INSTALL_PREFIX\\\" DEFINES += QSTARDICT_BIN_DIR=\\\"$$BIN_DIR\\\" DEFINES += QSTARDICT_DATA_DIR=\\\"$$DATA_DIR\\\" isEmpty(NO_TRANSLATIONS):DEFINES += QSTARDICT_TRANSLATIONS_DIR=\\\"$$TRANSLATIONS_DIR\\\" DEFINES += QSTARDICT_PLUGINS_DIR=\\\"$$PLUGINS_DIR\\\" } qstardict/qstardict.pro000066400000000000000000000054271453553600400156110ustar00rootroot00000000000000############################################################################# # qstardict.pro - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2008 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TEMPLATE = subdirs include(qstardict.pri) SUBDIRS = qstardict plugins translations DOCS += \ AUTHORS \ COPYING \ ChangeLog \ THANKS \ docs/en_GB \ docs/ru_RU MAN += qstardict.1 DISTFILES += $$DOCS \ INSTALL \ README message("Enabled plugins: "$$ENABLED_PLUGINS) unix { isEmpty(NO_DBUS) { message("D-Bus support: enabled") } else { message("D-Bus support: disabled") } } isEmpty(NO_TRANSLATIONS) { message("Translations: enabled") } else { message("Translations: disabled") } isEmpty(NO_TRAY_ICON): { message("Tray icon: enabled") } else { message("Tray icon: disabled") } message("Install prefix: "$$INSTALL_PREFIX) message("Binary directory: "$$BIN_DIR) message("Data directory: "$$DATA_DIR) isEmpty(NO_TRANSLATIONS):message("Translations directory: "$$TRANSLATIONS_DIR) message("Plugins directory: "$$PLUGINS_DIR) message("Documentation directory: "$$DOCS_DIR) win32 { isEmpty(GLIB2PATH) { error("No Glib2 library path (GLIB2PATH) is set.") } else { message("Glib2 location is set to $$GLIB2PATH") } isEmpty(ZLIBPATH) { error("No zlib library path (ZLIBPATH) is set.") } else { message("Zlib location is set to $$ZLIBPATH") } } docs.files = $$DOCS docs.path = $$DOCS_DIR man.files = $$MAN man.path = $$MAN_DIR INSTALLS += docs man isEmpty(NO_TRANSLATIONS):include(translations/translations.pri) qstardict/qstardict/000077500000000000000000000000001453553600400150575ustar00rootroot00000000000000qstardict/qstardict/appinfo.cpp000066400000000000000000000103631453553600400172220ustar00rootroot00000000000000#include "appinfo.h" #include #include #include # include #ifdef DEV # include #endif namespace QStarDict { const QString AppInfo::genericDataDir() { #ifdef Q_OS_WIN // Force Roaming wchar_t path[MAX_PATH]; typedef HRESULT (WINAPI*SHGetFolderPathWFunc)(HWND, int, HANDLE, DWORD, LPTSTR); SHGetFolderPathWFunc SHGetFolderPathW = (SHGetFolderPathWFunc) QLibrary::resolve(QLatin1String("Shell32"), "SHGetFolderPathW"); if (SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, path) == S_OK) { return QDir::fromNativeSeparators(QString::fromWCharArray(path)); } else { return QString(); } #else return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); #endif } QString AppInfo::localAppDataDir() { static QString dataDir; if (dataDir.isEmpty()) { QSettings s; dataDir = genericDataDir() + QLatin1Char('/') + s.applicationName(); QDir d(dataDir); if (!d.exists()) { d.mkpath("."); } } return dataDir; } QString AppInfo::systemAppDataDir() { static QString dataDir; if (dataDir.isEmpty()) { #ifdef Q_OS_WIN dataDir = qApp->applicationDirPath(); #else dataDir = QString::fromLocal8Bit(QSTARDICT_DATA_DIR); #endif } return dataDir; } QString AppInfo::systemAppPluginsDir() { static QString libDir; if (libDir.isEmpty()) { #ifdef Q_OS_WIN libDir = qApp->applicationDirPath() + QLatin1String("/plugins"); #elif defined(Q_OS_MAC) QString binPath = QCoreApplication::applicationDirPath(); // navigate through mac's bundle tree structore QDir d(binPath + "/../lib/"); // TODO why not plugins? libDir = d.canonicalPath(); #else libDir = QString::fromLocal8Bit(QSTARDICT_PLUGINS_DIR); #endif } return libDir; } QStringList AppInfo::appPluginsDirs() { #ifdef DEV QDir pluginsDir = QDir(qApp->applicationDirPath()); # if defined(Q_OS_WIN) QString dbgSubdir = pluginsDir.dirName(); if (!(dbgSubdir.toLower() == "debug" || dbgSubdir.toLower() == "release")) { dbgSubdir.clear(); } # else QString dbgSubdir; # endif # if defined(Q_OS_WIN) if (!dbgSubdir.isEmpty()) // if last part of app dir is debug or release pluginsDir.cdUp(); # elif defined(Q_OS_MAC) if (pluginsDir.dirName() == "MacOS") { pluginsDir.cdUp(); pluginsDir.cdUp(); pluginsDir.cdUp(); } # endif if (!(pluginsDir.cd("../plugins") || pluginsDir.cd("plugins"))) { qDebug() << "Can't find plugins dir directory, probably won't find plugins as well"; } QStringList pluginsDirs; foreach (const QString &dirName, pluginsDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { QDir d(pluginsDir); d.cd(dirName); if (!dbgSubdir.isEmpty()) { d.cd(dbgSubdir); } pluginsDirs << d.path(); } qDebug() << "Plugins dirs: " << pluginsDirs; return pluginsDirs; #else static QString localPluginsDir; if (localPluginsDir.isEmpty()) { localPluginsDir = localAppDataDir() + QLatin1String("/plugins"); } QDir local(localPluginsDir); QDir system(systemAppPluginsDir()); if (local == system) { return QStringList() << localPluginsDir; } return QStringList() << localPluginsDir << systemAppPluginsDir(); #endif } QString AppInfo::configDir() { static QString confDir; if (confDir.isEmpty()) { #if QT_VERSION < QT_VERSION_CHECK(5,5,0) # ifdef Q_OS_LINUX confDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1Char('/') + qApp->applicationName(); # else confDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); # endif #else confDir = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); #endif QDir c(confDir); if (!c.exists()) { c.mkpath("."); } } return confDir; } QString AppInfo::cacheDir() { static QString cd; if (cd.isEmpty()) { cd = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); QDir c(cd); if (!c.exists()) { c.mkpath("."); } } return cd; } } // namespace QStarDict qstardict/qstardict/appinfo.h000066400000000000000000000007141453553600400166660ustar00rootroot00000000000000#ifndef QSTARDICT_APPINFO_H #define QSTARDICT_APPINFO_H #include namespace QStarDict { class AppInfo { public: static QString localAppDataDir(); static QString systemAppDataDir(); static QString systemAppPluginsDir(); static QStringList appPluginsDirs(); static QString configDir(); static QString cacheDir(); private: static const QString genericDataDir(); }; } // namespace QStarDict #endif // QSTARDICT_APPINFO_H qstardict/qstardict/application.cpp000066400000000000000000000155331453553600400200750ustar00rootroot00000000000000/***************************************************************************** * application.cpp - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2008-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "application.h" #include #include #ifdef QSTARDICT_WITH_TRANSLATIONS #include #include #include #include #endif // QSTARDICT_WITH_TRANSLATIONS #include #include "qxt/qxtglobalshortcut.h" #include "dictcore.h" #include "mainwindow.h" #include "popupwindow.h" #include "speaker.h" #include "pluginmanager.h" #ifdef QSTARDICT_WITH_TRAY_ICON #include "trayicon.h" #endif #ifdef QSTARDICT_WITH_DBUS #include "dbusadaptor.h" #endif // QSTARDICT_WITH_DBUS #ifdef Q_OS_MAC #include #include #include void setupDockClickHandler(); bool dockClickHandler(id self,SEL _cmd,...); #endif #ifdef Q_OS_MAC void setupDockClickHandler() { Class cls = objc_getClass("NSApplication"); typedef objc_object* (*SendType)(void*, SEL); SendType casted_objc_msgSend = (SendType)(objc_msgSend); objc_object *appInst = casted_objc_msgSend(cls, sel_registerName("sharedApplication")); if(appInst != NULL) { objc_object* delegate = casted_objc_msgSend(appInst, sel_registerName("delegate")); Class delClass = (Class)casted_objc_msgSend(delegate, sel_registerName("class")); SEL shouldHandle = sel_registerName("applicationShouldHandleReopen:hasVisibleWindows:"); if (class_getInstanceMethod(delClass, shouldHandle)) { if (class_replaceMethod(delClass, shouldHandle, (IMP)dockClickHandler, "B@:")) qDebug() << "Registered dock click handler (replaced original method)"; else qWarning() << "Failed to replace method for dock click handler"; } else { if (class_addMethod(delClass, shouldHandle, (IMP)dockClickHandler,"B@:")) qDebug() << "Registered dock click handler"; else qWarning() << "Failed to register dock click handler"; } } } bool dockClickHandler(id self,SEL _cmd,...) { Q_UNUSED(self) Q_UNUSED(_cmd) // Do something fun here! ((QStarDict::Application*)qApp)->mainWindow()->show(); // Return NO (false) to suppress the default OS X actions return false; } #endif namespace QStarDict { Application::Application(int &argc, char **argv) : QApplication(argc, argv) { setOrganizationName("qstardict"); setApplicationName("qstardict"); QSettings settings; setApplicationVersion(QSTARDICT_VERSION); setQuitOnLastWindowClosed(false); #ifdef QSTARDICT_WITH_TRANSLATIONS m_translator = new QTranslator; #ifdef Q_WS_MAC QString binPath = QCoreApplication::applicationDirPath(); // navigate through mac's bundle tree structore m_translator->load("qstardict-" + QLocale::system().name(), binPath + "/../i18n/"); #else m_translator->load("qstardict-" + QLocale::system().name(), QSTARDICT_TRANSLATIONS_DIR); #endif installTranslator(m_translator); m_qtTranslator = new QTranslator; m_qtTranslator->load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); installTranslator(m_qtTranslator); #endif // QSTARDICT_WITH_TRANSLATIONS QCommandLineParser parser; parser.setApplicationDescription(tr("A dictionary application for learning foreign languages")); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption backgroundOption({"b", "background"}, tr("Start in background mode.")); parser.addOption(backgroundOption); parser.process(*this); m_pluginManager = new PluginManager; m_pluginManager->loadPlugins(); m_dictCore = new DictCore; m_popupWindow = new PopupWindow; m_popupWindow->setDict(m_dictCore); m_speaker = new Speaker; m_speaker->setSpeechCmd(settings.value("Speaker/speechCmd", "espeak").toString()); m_espeakSpeaker = new Speaker; m_espeakSpeaker->setSpeechCmd(settings.value("Speaker/espeakCmd", "espeak").toString()); #ifdef QSTARDICT_WITH_TRAY_ICON m_trayIcon = new TrayIcon; #endif m_popupShortcut = new QxtGlobalShortcut; m_switchScanningShortcut = new QxtGlobalShortcut; m_mainWindow = new MainWindow(nullptr, parser.isSet(backgroundOption)); m_mainWindow->setDict(m_dictCore); #ifdef QSTARDICT_WITH_DBUS m_dbusAdaptor = new DBusAdaptor(m_mainWindow); #endif // QSTARDICT_WITH_DBUS #ifdef Q_OS_MAC setupDockClickHandler(); #endif } Application::~Application() { QSettings settings; #ifdef QSTARDICT_WITH_TRAY_ICON delete m_trayIcon; #endif delete m_mainWindow; delete m_popupWindow; settings.setValue("Speaker/speechCmd", m_speaker->speechCmd()); delete m_speaker; settings.setValue("Speaker/espeakCmd", m_espeakSpeaker->speechCmd()); delete m_espeakSpeaker; delete m_dictCore; delete m_popupShortcut; delete m_switchScanningShortcut; #ifdef QSTARDICT_WITH_TRANSLATIONS removeTranslator(m_translator); delete m_translator; removeTranslator(m_qtTranslator); delete m_qtTranslator; delete m_pluginManager; #endif // QSTARDICT_WITH_TRANSLATIONS } int Application::exec() { QString text = commandLineText(); if (text != QString::null) m_mainWindow->showTranslation(text); return QApplication::exec(); } QString Application::commandLineText() { QStringList args(arguments()); for(int i = 1; i < args.count(); ++i) { if(! args.at(i).startsWith('-')) return args.at(i); } return QString::null; } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/application.h000066400000000000000000000114071453553600400175360ustar00rootroot00000000000000/***************************************************************************** * application.h - QStarDict, a quasi-star dictionary * * Copyright (C) 2008-2019 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef APPLICATION_H #define APPLICATION_H #include #ifdef QSTARDICT_WITH_TRANSLATIONS class QTranslator; #endif // QSTARDICT_WITH_TRANSLATIONS class QxtGlobalShortcut; namespace QStarDict { class DictCore; class PluginManager; class MainWindow; class PopupWindow; class Speaker; #ifdef QSTARDICT_WITH_TRAY_ICON class TrayIcon; #endif #ifdef QSTARDICT_WITH_DBUS class DBusAdaptor; #endif // QSTARDICT_WITH_DBUS /** * Main application class. */ class Application: public QApplication { Q_OBJECT public: /** * Construct new QStarDict application. */ Application(int &argc, char **argv); /** * Destructor. */ ~Application(); /** * Enter the main event loop and wait until exit(). */ int exec(); /** * Returns a pointer to the application's QStarDict::Application instance. */ static Application *instance() { return qobject_cast(QCoreApplication::instance()); } /** * Returns a pointer to the DictCore instance. */ DictCore *dictCore() { return m_dictCore; } /** * Returns pointer to PluginManager instance */ PluginManager *pluginManager() { return m_pluginManager; } /** * Returns a pointer to the application's main window. */ MainWindow *mainWindow() { return m_mainWindow; } /** * Returns a pointer to the application's popup window. */ PopupWindow *popupWindow() { return m_popupWindow; } /** * Returns a pointer to the application's word speaker. */ Speaker *speaker() { return m_speaker; } /** * Returns a pointer to the application's eSpeak speaker. */ Speaker *espeakSpeaker() { return m_espeakSpeaker; } #ifdef QSTARDICT_WITH_TRAY_ICON /** * Returns a pointer to the tray icon. */ TrayIcon *trayIcon() { return m_trayIcon; } #endif /** * Returns a pointer to the popupShortcut instance. */ QxtGlobalShortcut *popupShortcut() { return m_popupShortcut; } /** * Returns a pointer to the switchScanningShortcut instance. */ QxtGlobalShortcut *switchScanningShortcut() { return m_switchScanningShortcut; } #ifdef QSTARDICT_WITH_DBUS /** * Returns a pointer to the DBusAdaptor instance. */ DBusAdaptor *dbusAdaptor() { return m_dbusAdaptor; } #endif // QSTARDICT_WITH_DBUS private: #ifdef QSTARDICT_WITH_TRANSLATIONS QTranslator *m_translator; QTranslator *m_qtTranslator; #endif // QSTARDICT_WITH_TRANSLATIONS DictCore *m_dictCore; PluginManager *m_pluginManager; MainWindow *m_mainWindow; PopupWindow *m_popupWindow; Speaker *m_speaker; Speaker *m_espeakSpeaker; #ifdef QSTARDICT_WITH_TRAY_ICON TrayIcon *m_trayIcon; #endif QxtGlobalShortcut *m_popupShortcut; QxtGlobalShortcut *m_switchScanningShortcut; #ifdef QSTARDICT_WITH_DBUS DBusAdaptor *m_dbusAdaptor; #endif // QSTARDICT_WITH_DBUS QString commandLineText(); }; } #endif // APPLICATION_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/qstardict/cssedit.cpp000066400000000000000000000325771453553600400172370ustar00rootroot00000000000000/***************************************************************************** * cssedit.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2008-2019 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "cssedit.h" #include #include namespace QStarDict { CSSEdit::CSSEdit(QWidget *parent) : QWidget(parent) { setupUi(this); connect(m_elementCombo, SIGNAL(currentIndexChanged(int)), SLOT(setCurrentElement(int))); connect(m_fontCombo, SIGNAL(currentFontChanged(const QFont&)), SLOT(propertyChanged())); connect(m_sizeSpin, SIGNAL(valueChanged(int)), SLOT(propertyChanged())); connect(m_boldButton, SIGNAL(toggled(bool)), SLOT(propertyChanged())); connect(m_italicButton, SIGNAL(toggled(bool)), SLOT(propertyChanged())); connect(m_underlineButton, SIGNAL(toggled(bool)), SLOT(propertyChanged())); connect(m_colorButton, SIGNAL(clicked()), SLOT(colorSelectClicked())); connect(m_backgroundButton, SIGNAL(clicked()), SLOT(colorSelectClicked())); } void CSSEdit::setCSS(const QString &css) { m_elements.clear(); for (auto &elementName: m_elementsNames) m_elements[elementName] = Element(); bool inBlock = false; QString element; QString currentProperty; QString currentValue; for (int i = 0; i < css.length(); ++i) { if (! inBlock) { element.clear(); for (; i < css.length() && css[i] != '{'; ++i) if (! css[i].isSpace()) element += css[i]; if (i < css.length() && css[i] == '{') { inBlock = true; ++i; } } else { currentProperty.clear(); for (; i < css.length() && css[i] != ':'; ++i) { if (css[i] == '}') { inBlock = false; break; } if (! css[i].isSpace()) currentProperty += css[i]; } if (! inBlock) continue; currentValue.clear(); char quote = '\0'; for (++i; i < css.length() && css[i] != ';'; ++i) { if (quote) { if (css[i] == quote) { while (i < css.length() && css[i] != ';') ++i; break; } else currentValue += css[i]; } else if (! css[i].isSpace()) { if (css[i] == '\'' || css[i] == '\"') quote = css[i].toLatin1(); else currentValue += css[i]; } } m_elements[element][currentProperty] = currentValue; while (css[i + 1].isSpace()) ++i; if (css[i + 1] == '}') { ++i; inBlock = false; } } } updateElementCombo(); updatePreview(); setCurrentElement(m_elementCombo->currentIndex()); } void CSSEdit::setElementsNames(const QVector> &aliases) { m_elementsNames.clear(); m_elementsAliases.clear(); for (auto &i: aliases) { m_elementsNames.append(i.first); m_elementsAliases[i.first] = i.second; } updateElementCombo(); updatePreview(); } QString CSSEdit::css() const { QString result; for (auto &elementName: m_elementsNames) { auto &element = m_elements[elementName]; result += elementName + "\n{\n"; for (Element::const_iterator j = element.begin(); j != element.end(); ++j) { result += j.key() + ": "; if (j->contains(' ')) result += "\"" + *j + "\";\n"; else result += *j + ";\n"; } result += "}\n"; } return result; } void CSSEdit::setCurrentElement(int index) { if (! m_elements.contains(m_elementCombo->itemData(index).toString())) return; m_currentElement = m_elementCombo->itemData(index).toString(); Element *element = &m_elements[m_currentElement]; Element parentElement = getParentElement(m_currentElement); QColor color(element->contains("color") ? element->value("color") : parentElement["color"]); m_colorButton->setText(color.name()); QPalette palette = m_colorButton->palette(); palette.setColor(QPalette::Normal, QPalette::ButtonText, color); m_colorButton->setPalette(palette); color = QColor(element->contains("background-color") ? element->value("background-color") : parentElement["background-color"]); m_backgroundButton->setText(color.name()); palette = m_backgroundButton->palette(); palette.setColor(QPalette::Normal, QPalette::ButtonText, color); m_backgroundButton->setPalette(palette); m_fontCombo->setCurrentFont(element->contains("font-family") ? element->value("font-family") : parentElement["font-family"]); QString value = element->contains("font-size") ? element->value("font-size") : parentElement["font-size"]; if (! value.endsWith("pt")) value = parentElement["font-size"]; m_sizeSpin->setValue(value.left(value.length() - 2).toInt()); value = element->contains("font-weight") ? element->value("font-weight") : parentElement["font-weight"]; m_boldButton->setChecked(value == "bold"); value = element->contains("font-style") ? element->value("font-style") : parentElement["font-style"]; m_italicButton->setChecked(value == "italic"); value = element->contains("text-decoration") ? element->value("text-decoration") : parentElement["text-decoration"]; m_underlineButton->setChecked(value == "underline"); updatePreview(); } void CSSEdit::propertyChanged() { if (! sender()) return; if (! m_elements.contains(m_currentElement)) return; Element *element = &m_elements[m_currentElement]; Element parentElement = getParentElement(m_currentElement); if (sender() == m_fontCombo) { QString font = m_fontCombo->currentText(); if (parentElement["font-family"] == font) element->remove("font-family"); else element->insert("font-family", font); } else if (sender() == m_sizeSpin) { QString size = QString::number(m_sizeSpin->value()) + "pt"; if (parentElement["font-size"] == size) element->remove("font-size"); else element->insert("font-size", size); } else if (sender() == m_boldButton) { QString weight = (m_boldButton->isChecked() ? "bold" : "normal"); if (parentElement["font-weight"] == weight) element->remove("font-weight"); else element->insert("font-weight", weight); } else if(sender() == m_italicButton) { QString style = (m_italicButton->isChecked() ? "italic" : "normal"); if (parentElement["font-style"] == style) element->remove("font-style"); else element->insert("font-style", style); } else if(sender() == m_underlineButton) { QString decoration = (m_underlineButton->isChecked() ? "underline" : "none"); if (parentElement["text-decoration"] == decoration) element->remove("text-decoration"); else element->insert("text-decoration", decoration); } updatePreview(); } void CSSEdit::colorSelectClicked() { QToolButton *colorButton; QString propertyName; if (sender() == m_colorButton) { colorButton = m_colorButton; propertyName = "color"; } else if (sender() == m_backgroundButton) { colorButton = m_backgroundButton; propertyName = "background-color"; } else return; if (! m_elements.contains(m_currentElement)) return; Element *element = &m_elements[m_currentElement]; Element parentElement = getParentElement(m_currentElement); QColor color = QColorDialog::getColor(QColor(colorButton->text()), this); if (color.isValid()) { colorButton->setText(color.name()); QPalette palette = colorButton->palette(); palette.setColor(QPalette::Normal, QPalette::ButtonText, color); colorButton->setPalette(palette); if (parentElement[propertyName] == color.name()) element->remove(propertyName); else element->insert(propertyName, color.name()); updatePreview(); } } void CSSEdit::updatePreview() { QString html = ""; html += ""; for (auto &elementName: m_elementsNames) { QString alias; if (m_elementsAliases.contains(elementName)) alias = m_elementsAliases.value(elementName); else alias = elementName; int pos = elementName.indexOf('.'); if (pos == -1) html += "<" + elementName + ">" + alias + "
    "; else { QString parent = elementName.left(pos); QString class_ = elementName.mid(pos + 1); html += "<" + parent + " class=\'" + class_ + "\'>" + alias + "
    "; } } html += ""; m_preview->setHtml(html); } void CSSEdit::updateElementCombo() { m_elementCombo->clear(); for (auto &elementName: m_elementsNames) { QString alias; if (m_elementsAliases.contains(elementName)) alias = m_elementsAliases.value(elementName); else alias = elementName; m_elementCombo->addItem(alias, elementName); } if (m_elements.begin() != m_elements.end()) m_currentElement = m_elements.begin().key(); else m_currentElement.clear(); } CSSEdit::Element CSSEdit::getParentElement(const QString &elementName) { Element body = m_elements.value("body"); if (elementName == "body") { body["color"] = QApplication::palette().color(QPalette::Normal, QPalette::Text).name(); body["background-color"] = QApplication::palette().color(QPalette::Normal, QPalette::Base).name(); body["font-family"] = QApplication::font().family(); body["font-size"] = QString::number(QApplication::font().pointSize()) + "pt"; body["font-weight"] = (QApplication::font().weight() == QFont::Bold) ? "bold" : "normal"; body["font-style"] = (QApplication::font().style() == QFont::StyleItalic) ? "italic" : "normal"; body["text-decoration"] = QApplication::font().underline() ? "underline" : "none"; return body; } else { if (! body.contains("color")) body["color"] = QApplication::palette().color(QPalette::Normal, QPalette::Text).name(); if (! body.contains("background-color")) body["background-color"] = QApplication::palette().color(QPalette::Normal, QPalette::Base).name(); if (! body.contains("font-family")) body["font-family"] = QApplication::font().family(); if (! body.contains("font-size")) body["font-size"] = QString::number(QApplication::font().pointSize()) + "pt"; if (! body.contains("font-weight")) body["font-weight"] = (QApplication::font().weight() == QFont::Bold) ? "bold" : "normal"; if (! body.contains("font-style")) body["font-style"] = (QApplication::font().style() == QFont::StyleItalic) ? "italic" : "normal"; if (! body.contains("text-decoration")) body["text-decoration"] = QApplication::font().underline() ? "underline" : "none"; } QString parentName; int pos = elementName.indexOf('.'); if (pos != -1) { parentName = elementName.left(pos); if (m_elements.contains(parentName)) { Element parent = m_elements[parentName]; for (Element::const_iterator i = body.begin(); i != body.end(); ++i) if (! parent.contains(i.key())) parent[i.key()] = *i; return parent; } else return body; } return body; } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/cssedit.h000066400000000000000000000051551453553600400166740ustar00rootroot00000000000000/***************************************************************************** * cssedit.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef CSSEDIT_H #define CSSEDIT_H #include "ui_cssedit.h" #include #include namespace QStarDict { /** * CSS styles editor. */ class CSSEdit: public QWidget, private Ui::CSSEdit { Q_OBJECT public: /** * Constructor. */ CSSEdit(QWidget *parent = 0); /** * Set CSS style for editing. */ void setCSS(const QString &css); /** * Returns edited CSS style. */ QString css() const; /** * Set names and aliases for elements. */ void setElementsNames(const QVector> &aliases); private slots: void colorSelectClicked(); void setCurrentElement(int index); void propertyChanged(); private: typedef QHash Element; void updateElementCombo(); void updatePreview(); Element getParentElement(const QString &elementName); QHash m_elements; QVector m_elementsNames; QHash m_elementsAliases; QString m_currentElement; }; } #endif // CSSEDIT_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/qstardict/cssedit.ui000066400000000000000000000113661453553600400170630ustar00rootroot00000000000000 QStarDict::CSSEdit 0 0 100 30 Preview true Element Foreground Background Select element Click to select color #000000 Click to select color #000000 Font Size Select font Select font size pt 4 150 2 10 75 true Bold B true 50 true false Italic I true 50 false true Underline U true m_elementCombo m_colorButton m_fontCombo m_sizeSpin m_boldButton m_italicButton m_underlineButton qstardict/qstardict/dbusadaptor.cpp000066400000000000000000000050751453553600400201020ustar00rootroot00000000000000/***************************************************************************** * dbusadaptor.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "dbusadaptor.h" #include #include "application.h" #include "mainwindow.h" #include "popupwindow.h" namespace QStarDict { DBusAdaptor::DBusAdaptor(MainWindow *mainWindow) : QDBusAbstractAdaptor(mainWindow), m_mainWindow(mainWindow) { QDBusConnection connection = QDBusConnection::sessionBus(); connection.registerService("org.qstardict.dbus"); connection.registerObject("/qstardict", mainWindow); } bool DBusAdaptor::mainWindowVisible() const { return m_mainWindow->isVisible(); } void DBusAdaptor::setMainWindowVisible(bool visible) { m_mainWindow->setVisible(visible); } void DBusAdaptor::showTranslation(const QString &text) { m_mainWindow->showTranslation(text); } void DBusAdaptor::showPopup(const QString &text) { Application::instance()->popupWindow()->showTranslation(text); } QString DBusAdaptor::translate(const QString &text) { return Application::instance()->dictCore()->translate(text); } QString DBusAdaptor::translateHtml(const QString &text) { return Application::instance()->dictCore()->translate(text); } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/dbusadaptor.h000066400000000000000000000056461453553600400175530ustar00rootroot00000000000000/***************************************************************************** * dbusadaptor.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef DBUSADAPTOR_H #define DBUSADAPTOR_H #include namespace QStarDict { class MainWindow; /** * The DBusAdaptor class represents and QStarDict D-Bus interface. */ class DBusAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.qstardict.dbus") /** * The main window visible property. */ Q_PROPERTY(int mainWindowVisible READ mainWindowVisible WRITE setMainWindowVisible) public: /** * Construct a DBusAdaptor. */ DBusAdaptor(MainWindow *mainWindow); /** * Return true if main window is visible, otherwise return * false. */ bool mainWindowVisible() const; /** * Set visible state of main window. */ void setMainWindowVisible(bool visible); public slots: /** * Show main window with translation of text. */ void showTranslation(const QString &text); /** * Show popup window with translation of text. */ void showPopup(const QString &text); /** * Return a translation of text in plain text format. */ QString translate(const QString &text); /** * Return a translation of text in HTML format. */ QString translateHtml(const QString &text); private: MainWindow *m_mainWindow; }; } #endif // DBUSADAPTOR_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/dictbrowser.cpp000066400000000000000000000244471453553600400201250ustar00rootroot00000000000000/***************************************************************************** * dictbrowser.cpp - QStarDict, a dictionary application for learning * * foreign languages * * Copyright (C) 2007-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "dictbrowser.h" #include #include #include #include #include #include #include #include "../plugins/dictplugin.h" #include "application.h" #include "help.h" #include "ipa.h" #include "keyboard.h" #include "pluginmanager.h" #include "speaker.h" namespace { const QString translationCSS = "body {\n" #ifdef Q_OS_MAC "font-size: 13pt; font-family: Avenir; }\n" #else "font-size: 10pt; }\n" #endif "font.dict_name {\n" "color: blue;\n" "font-style: italic; }\n" "font.title {\n" "font-size: 16pt;\n" "font-weight: bold; }\n" "font.explanation {\n" "color: #7f7f7f;\n" "font-style: italic; }\n" "font.abbreviature {\n" "font-style: italic; }\n" "font.example {\n" "font-style: italic; }\n" "font.transcription {\n" "font-weight: bold; }\n"; } namespace QStarDict { DictBrowser::DictBrowser(QWidget *parent) : QTextBrowser(parent), m_dict(0), m_highlighted(false), m_highlightTimerId(0), m_showLinks(true), m_showLinksModifierKey(0), m_showIpaPronouncers(false), m_highlightInCurrentTranslation(false) { document()->setDefaultStyleSheet(translationCSS); setOpenLinks(false); setOpenExternalLinks(false); connect(this, SIGNAL(anchorClicked(const QUrl &)), SLOT(on_anchorClicked(const QUrl &))); connect(this, &QTextBrowser::sourceChanged, this, &DictBrowser::on_sourceChanged); Application::instance()->installEventFilter(this); } QVariant DictBrowser::loadResource(int type, const QUrl &name) { m_highlightInCurrentTranslation = false; if (type == QTextDocument::HtmlResource && name.scheme() == "qstardict") { QString str = QUrl::fromPercentEncoding(name.toString(QUrl::RemoveScheme).toUtf8()); QString result = m_dict->translate(str); if (result.isEmpty()) result = "
    " + tr("The word %1 is not found.").arg(str) + "
    "; return "Translation for \"" + str + "\"\n" + "" + result + ""; } else if (name.scheme() == "plugin") { DictPlugin *plugin = Application::instance()->pluginManager()->plugin(name.host()); if (! plugin) return QVariant(); return plugin->resource(type, name); } return QTextBrowser::loadResource(type, name); } void DictBrowser::search(const QString & exp, QTextDocument::FindFlags options) { bool found = false; QList extraSelections; moveCursor(QTextCursor::Start); QColor color = QColor(Qt::gray).lighter(130); while (find(exp, options)) { found = true; QTextEdit::ExtraSelection extra; extra.format.setBackground(color); extra.cursor = textCursor(); extraSelections.append(extra); } setExtraSelections(extraSelections); emit searchResult(found); } void DictBrowser::searchActive(bool active) { if (!active) { moveCursor(QTextCursor::Start); setExtraSelections({}); } } void DictBrowser::invalidateHighlight() { auto overrideCursor = false; if (m_highlighted) // clear highlight if any { m_oldCursor.setCharFormat(m_oldFormat); m_highlighted = false; killTimer(m_highlightTimerId); m_highlightTimerId = 0; m_highlightedWord.clear(); } if (!m_highlightInCurrentTranslation) { QApplication::restoreOverrideCursor(); return; } QPoint mousePosition = mapFromGlobal(QCursor::pos()); if (areLinksActive() && contentsRect().contains(mousePosition) && wordRect(mousePosition).contains(mousePosition)) { // highlight word if found auto cursor = cursorForPosition(mousePosition); cursor.select(QTextCursor::WordUnderCursor); QString selection = cursor.selection().toPlainText().simplified(); if (selection == m_highlightedWord || m_dict->isTranslatable(selection)) { m_oldCursor = cursor; m_oldFormat = cursor.charFormat(); QTextCharFormat format = m_oldFormat; format.setForeground(Qt::blue); format.setFontUnderline(true); cursor.setCharFormat(format); m_highlighted = true; m_highlightedWord = selection; m_highlightTimerId = startTimer(100); overrideCursor = true; } } if (overrideCursor) { if (!QApplication::overrideCursor()) QApplication::setOverrideCursor(Qt::PointingHandCursor); } else QApplication::restoreOverrideCursor(); } QRect DictBrowser::wordRect(const QPoint &mousePosition) { auto cursor = cursorForPosition(mousePosition); cursor.select(QTextCursor::WordUnderCursor); auto selectionStart = cursor.selectionStart(); auto selectionEnd = cursor.selectionEnd(); cursor.setPosition(selectionStart); auto topLeft = cursorRect(cursor).topLeft(); cursor.setPosition(selectionEnd); auto bottomRight = cursorRect(cursor).bottomRight(); return QRect(topLeft, bottomRight); } void DictBrowser::mouseMoveEvent(QMouseEvent *event) { if (areLinksActive()) { m_highlightInCurrentTranslation = true; invalidateHighlight(); } QTextBrowser::mouseMoveEvent(event); } bool DictBrowser::areLinksActive() { if (!m_showLinks) return false; if (m_showLinksModifierKey == 0) return true; return Keyboard::activeModifiers().testFlag(static_cast(m_showLinksModifierKey)); } void DictBrowser::mouseReleaseEvent(QMouseEvent *event) { if (m_showIpaPronouncers) { // check whether the click was on a pronounce button QTextCursor cursor = cursorForPosition(event->pos()); cursor.select(QTextCursor::WordUnderCursor); QUrl url = cursor.charFormat().anchorHref(); if (url.scheme() == "pronounce") { QString ipa = QUrl::fromPercentEncoding(url.toString(QUrl::RemoveScheme).toUtf8()); QString kirshenbaum = Ipa::ipaToKirshenbaum(ipa); Application::instance()->espeakSpeaker()->speak("[[" + kirshenbaum + "]]"); return; } } if (areLinksActive()) { QTextCursor cursor = cursorForPosition(event->pos()); cursor.select(QTextCursor::WordUnderCursor); QString selection = cursor.selection().toPlainText().simplified(); if (m_dict->isTranslatable(selection) && selection != source().toString(QUrl::RemoveScheme) && !textCursor().hasSelection()) setSource(selection); } QTextBrowser::mousePressEvent(event); } void DictBrowser::on_anchorClicked(const QUrl &link) { QString scheme = link.scheme(); if (scheme == "plugin" || scheme == "qrc") setSource(link); else QDesktopServices::openUrl(link); } void DictBrowser::on_sourceChanged(const QUrl &) { if (m_showIpaPronouncers) addIpaPronouncers(); } void DictBrowser::timerEvent(QTimerEvent*) { invalidateHighlight(); } bool DictBrowser::eventFilter(QObject *, QEvent *event) { if (event->type() == QEvent::KeyPress) { if (m_showLinksModifierKey) m_highlightInCurrentTranslation = true; invalidateHighlight(); } else if (event->type() == QEvent::KeyRelease) { invalidateHighlight(); } return false; } void DictBrowser::showIntro() { QString helpPath = Help::helpFilePath(); QString introHtml = tr("

    Open QStarDict documentation

    ").arg(helpPath); setHtml(introHtml); } void DictBrowser::addIpaPronouncers() { const static QVector transcriptionRegExps = { Ipa::broadTranscriptionRegExp(), Ipa::narrowTranscriptionRegExp() }; for (const QRegularExpression &transcriptionRegExp: transcriptionRegExps) { QTextDocument *doc = document(); QTextCursor cursor; int position = 0; while (! (cursor = doc->find(transcriptionRegExp, position)).isNull()) { QString transcription = cursor.selectedText(); QString ipa = transcriptionRegExp.match(transcription).captured(2); cursor.insertHtml("" + transcription + "" "" "" ""); position = cursor.position(); } } } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/dictbrowser.h000066400000000000000000000105201453553600400175550ustar00rootroot00000000000000/***************************************************************************** * dictbrowser.h - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2007-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef DICTBROWSER_H #define DICTBROWSER_H #include #include #include #include "dictcore.h" namespace QStarDict { /** * The DictBrowser widget provides view of translations from given dictionary. */ class DictBrowser: public QTextBrowser { Q_OBJECT public: /** * Construct empty DictWidget. */ DictBrowser(QWidget *parent = 0); /** * Set source dictionary. * Warning: DictBrowser will copy only a pointer to dict. So set dictionaries * allocated from heap and don't destroy it befor DictWidget. */ void setDict(DictCore *dict) { m_dict = dict; } /** * Return pointer to dictionary. */ const DictCore* dict() const { return m_dict; } void setShowLinks(bool showLinks) { m_showLinks = showLinks; } bool showLinks() const { return m_showLinks; } void setShowLinksModifierKey(int key) { m_showLinksModifierKey = key; } int showLinksModifierKey() const { return m_showLinksModifierKey; } /** * Set whether to show buttons near IPA transcriptions which allow * the user to listen the pronunciation of these transcriptions. */ void setShowIpaPronouncers(bool showIpaPronouncers) { m_showIpaPronouncers = showIpaPronouncers; } /** * Return true the IPA pronouncer is enabled. */ bool showIpaPronouncers() const { return m_showIpaPronouncers; } QVariant loadResource(int type, const QUrl &name); bool eventFilter(QObject *object, QEvent *event); /** * Show an introductory text about QStarDict. */ void showIntro(); signals: void searchResult(bool success); public slots: void search(const QString & exp, QTextDocument::FindFlags options); void searchActive(bool active); protected: void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void timerEvent(QTimerEvent *event); private slots: void on_anchorClicked(const QUrl &link); void on_sourceChanged(const QUrl &link); bool areLinksActive(); QRect wordRect(const QPoint &mousePosition); private: DictCore *m_dict; QTextCursor m_oldCursor; QTextCharFormat m_oldFormat; bool m_highlighted; int m_highlightTimerId; QString m_highlightedWord; bool m_showLinks; int m_showLinksModifierKey; bool m_highlightInCurrentTranslation; bool m_showIpaPronouncers; void invalidateHighlight(); void addIpaPronouncers(); }; } #endif // DICTBROWSER_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/dictbrowsersearch.cpp000066400000000000000000000056031453553600400213040ustar00rootroot00000000000000/***************************************************************************** * dictbrowsersearch.cpp - QStarDict, a dictionary for learning foreign * languages * * Copyright (C) 2007 Petr Vanek * * Copyright (C) 2012 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "dictbrowsersearch.h" namespace QStarDict { DictBrowserSearch::DictBrowserSearch(QWidget *parent) : QWidget(parent) { setupUi(this); connect(searchEdit, SIGNAL(textEdited(QString)), this, SLOT(searchAll())); connect(caseSensitiveCheckBox, SIGNAL(clicked()), this, SLOT(searchAll())); connect(wholeWordsCheckBox, SIGNAL(clicked()), this, SLOT(searchAll())); } void DictBrowserSearch::searchAll() { QTextDocument::FindFlags f = 0; if (caseSensitiveCheckBox->isChecked()) f |= QTextDocument::FindCaseSensitively; if (wholeWordsCheckBox->isChecked()) f |= QTextDocument::FindWholeWords; emit search(searchEdit->text(), f); } void DictBrowserSearch::searchResult(bool success) { QPalette p; if (!success) { p.setColor(QPalette::Base, QColor(229, 152, 169)); } searchEdit->setPalette(p); } void DictBrowserSearch::showEvent(QShowEvent * event) { emit searchActive(true); QWidget::showEvent(event); searchEdit->setFocus(Qt::OtherFocusReason); if (searchEdit->text().length()) searchAll(); } void DictBrowserSearch::hideEvent(QHideEvent * event) { emit searchActive(false); QWidget::hideEvent(event); } void DictBrowserSearch::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) { hide(); } } } // namespace qstardict/qstardict/dictbrowsersearch.h000066400000000000000000000042251453553600400207500ustar00rootroot00000000000000/***************************************************************************** * dictbrowsersearch.h - QStarDict, a dictionary for learning foreign * * languages * * Copyright (C) 2011 Petr Vanek * * Copyright (C) 2019 Alexander Rodin * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef DICTBROWSERSEARCH_H #define DICTBROWSERSEARCH_H #include #include #include "ui_dictbrowsersearch.h" namespace QStarDict { class DictBrowserSearch : public QWidget, private Ui::DictBrowserSearch { Q_OBJECT public: explicit DictBrowserSearch(QWidget *parent = 0); signals: void search(const QString & exp, QTextDocument::FindFlags options); void searchActive(bool); public slots: void searchResult(bool success); private slots: void searchAll(); private: void showEvent(QShowEvent * event); void hideEvent(QHideEvent * event); void keyPressEvent(QKeyEvent *event); }; } // namespace #endif // DICTBROWSERSEARCH_H qstardict/qstardict/dictbrowsersearch.ui000066400000000000000000000020151453553600400211310ustar00rootroot00000000000000 DictBrowserSearch 0 0 413 50 Search: Case sensitive Whole words qstardict/qstardict/dictcore.cpp000066400000000000000000000154031453553600400173620ustar00rootroot00000000000000/***************************************************************************** * dictcore.cpp - QStarDict, a StarDict clone written using Qt * * Copyright (C) 2008 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "dictcore.h" #include #include #include #include #include #include #include #include "../plugins/dictplugin.h" #include "application.h" #include "pluginmanager.h" namespace QStarDict { DictCore::DictCore(QObject *parent) : QObject(parent) { loadSettings(); } DictCore::~DictCore() { saveSettings(); } bool DictCore::isTranslatable(const QString &word) { for (QList::const_iterator i = m_loadedDicts.begin(); i != m_loadedDicts.end(); ++i) { auto plugin = Application::instance()->pluginManager()->plugin(i->plugin()); if (!plugin) continue; if (plugin->isTranslatable(i->name(), word)) return true; } return false; } QString DictCore::translate(const QString &word) { QString simplifiedWord = word.simplified(); QString result; for (QList::const_iterator i = m_loadedDicts.begin(); i != m_loadedDicts.end(); ++i) { auto plugin = Application::instance()->pluginManager()->plugin(i->plugin()); if (!plugin) continue; if (! plugin->isTranslatable(i->name(), simplifiedWord)) continue; DictPlugin::Translation translation = plugin->translate(i->name(), simplifiedWord); result += "

    \n"; result += "" + translation.dictName() + "
    \n"; if (! translation.hideTitle()) result += "" + translation.title() + "
    \n"; result += translation.translation(); result += "

    \n"; } return result; } QStringList DictCore::findSimilarWords(const QString &word) { QString simplifiedWord = word.simplified(); QStringList result; for (QList::const_iterator i = m_loadedDicts.begin(); i != m_loadedDicts.end(); ++i) { auto plugin = Application::instance()->pluginManager()->plugin(i->plugin()); if (!plugin) continue; if (! plugin->features().testFlag(DictPlugin::Feature::SearchSimilar)) continue; QStringList similar = plugin->findSimilarWords(i->name(), simplifiedWord); for (QStringList::const_iterator j = similar.begin(); j != similar.end(); ++j) if (! result.contains(*j, Qt::CaseSensitive)) result << *j; } return result; } QList DictCore::availableDicts() const { QList result; auto pm = Application::instance()->pluginManager(); foreach (const QString &pluginId, pm->availablePlugins()) { auto plugin = pm->plugin(pluginId); if (plugin) { QStringList dicts = plugin->availableDicts(); for (QStringList::const_iterator j = dicts.begin(); j != dicts.end(); ++j) result << Dictionary(pluginId, *j); } } return result; } void DictCore::setLoadedDicts(const QList &loadedDicts) { auto pm = Application::instance()->pluginManager(); QHash dicts; for (QList::const_iterator i = loadedDicts.begin(); i != loadedDicts.end(); ++i) dicts[i->plugin()] << i->name(); for (QHash::const_iterator i = dicts.begin(); i != dicts.end(); ++i) { auto plugin = pm->plugin(i.key()); if (!plugin) continue; plugin->setLoadedDicts(*i); dicts[i.key()] = plugin->loadedDicts(); } m_loadedDicts.clear(); for (QList::const_iterator i = loadedDicts.begin(); i != loadedDicts.end(); ++i) if (dicts.contains(i->plugin()) && dicts[i->plugin()].contains(i->name())) m_loadedDicts << *i; } void DictCore::saveSettings() { QSettings config; QStringList rawDictsList; for (QList::const_iterator i = m_loadedDicts.begin(); i != m_loadedDicts.end(); ++i) rawDictsList << i->plugin() << i->name(); config.setValue("DictCore/loadedDicts", rawDictsList); } void DictCore::loadSettings() { QSettings config; QStringList rawDictsList = config.value("DictCore/loadedDicts").toStringList(); if (rawDictsList.isEmpty()) setLoadedDicts(availableDicts()); else { QList dicts; for (QStringList::const_iterator i = rawDictsList.begin(); i != rawDictsList.end(); i += 2) dicts << Dictionary(*i, *(i + 1)); setLoadedDicts(dicts); } } void DictCore::reloadDicts() { QList loaded; foreach (const QString &pluginId, Application::instance()->pluginManager()->availablePlugins()) { DictPlugin *plugin = Application::instance()->pluginManager()->plugin(pluginId); if (!plugin) { continue; } plugin->setLoadedDicts(plugin->loadedDicts()); QStringList loadedNames = plugin->loadedDicts(); for (QStringList::const_iterator j = loadedNames.begin(); j != loadedNames.end(); ++j) loaded << Dictionary(pluginId, *j); } QList oldLoaded = m_loadedDicts; m_loadedDicts.clear(); for (QList::iterator i = oldLoaded.begin(); i != oldLoaded.end(); ++i) if (loaded.contains(*i)) m_loadedDicts << *i; } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/dictcore.h000066400000000000000000000107241453553600400170300ustar00rootroot00000000000000/***************************************************************************** * dictcore.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef DICTCORE_H #define DICTCORE_H #include #include #include #include #include "../plugins/dictplugin.h" namespace QStarDict { /** * The DictCore is a base dictionary class. */ class DictCore: public QObject { Q_OBJECT public: /** * This class represents a dictionary. */ class Dictionary { public: Dictionary(const QString &plugin, const QString &name) : m_plugin(plugin), m_name(name) { } Dictionary() { } const QString &plugin() const { return m_plugin; } const QString &name() const { return m_name; } void setPlugin(const QString &plugin) { m_plugin = plugin; } void setName(const QString &name) { m_name = name; } bool operator == (const Dictionary &dict) { return m_name == dict.m_name && m_plugin == dict.m_plugin; } private: QString m_plugin; QString m_name; }; /** * Construct dictionary. */ DictCore(QObject *parent = 0); /** * Destructor. */ ~DictCore(); /** * Returns true if word is exists in dictionaries, * otherwise false. */ bool isTranslatable(const QString &word); /** * Returns translation for word. If word not found, returns * "Not found!" */ QString translate(const QString &word); /** * Returns a list of similar words contained in dictionaries. */ QStringList findSimilarWords(const QString &word); /** * Returns a list of available dictionaries. * The first item in pair is a plugin name, the second item * in pair is a dictionary name. */ QList availableDicts() const; /** * Returns a list of loaded dictionaries. * The first item in pair is a plugin name, the second item * in pair is a dictionary name. */ const QList &loadedDicts() const { return m_loadedDicts; } /** * Sets a loaded dictionaries. * The first item in pair is a plugin name, the second item * in pair is a dictionary name. * If dictionary cannot be loaded it will not be added to * availableDicts list. */ void setLoadedDicts(const QList &loadedDicts); /** * Reload loaded dicts. */ void reloadDicts(); /** * Save settings. */ void saveSettings(); private: /** * Load settings. */ void loadSettings(); QList m_loadedDicts; }; } #endif // DICTCORE_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/dictwidget.cpp000066400000000000000000000156241453553600400177220ustar00rootroot00000000000000/***************************************************************************** * dictwidget.cpp - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2007-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "dictwidget.h" #include #include #include #include #include #include #include #include #include "application.h" #include "dictbrowser.h" #include "dictbrowsersearch.h" #include "mainwindow.h" #include "speaker.h" #include "pluginmanager.h" #include "../plugins/toolbarplugin.h" namespace { class DictWidgetToolbar: public QToolBar { public: DictWidgetToolbar(QWidget *parent = 0) : QToolBar(parent) { } protected: virtual void mouseDoubleClickEvent(QMouseEvent *event) { if (! actionAt(event->pos())) QToolBar::mouseDoubleClickEvent(event); } }; } namespace QStarDict { DictWidget::DictWidget(QWidget *parent, Qt::WindowFlags f, bool hasOpenMainWindowAction) : QFrame(parent, f) { m_translationView = new DictBrowser(this); setFrameStyle(m_translationView->frameStyle()); m_translationView->setFrameStyle(QFrame::NoFrame); m_translationView->verticalScrollBar()->setCursor(Qt::ArrowCursor); m_translationView->horizontalScrollBar()->setCursor(Qt::ArrowCursor); m_translationView->setOpenExternalLinks(true); connect(m_translationView, SIGNAL(sourceChanged(const QUrl&)), SLOT(on_translationView_sourceChanged(const QUrl&))); m_search = new DictBrowserSearch(this); connect(m_search, SIGNAL(search(const QString &,QTextDocument::FindFlags)), m_translationView, SLOT(search(const QString &,QTextDocument::FindFlags))); connect(m_search, SIGNAL(searchActive(bool)), m_translationView, SLOT(searchActive(bool))); connect(m_translationView, SIGNAL(sourceChanged(const QUrl&)), m_search, SLOT(hide())); connect(m_translationView, SIGNAL(searchResult(bool)), m_search, SLOT(searchResult(bool))); m_search->hide(); // Primary toolbar m_toolBar = new DictWidgetToolbar(this); m_toolBar->setMouseTracking(true); QAction *actionBackward = m_toolBar->addAction(QIcon(":pics/go-previous.png"), tr("Go &back"), m_translationView, SLOT(backward())); actionBackward->setDisabled(true); connect(m_translationView, SIGNAL(backwardAvailable(bool)), actionBackward, SLOT(setEnabled(bool))); QAction *actionForward = m_toolBar->addAction(QIcon(":pics/go-next.png"), tr("Go &forward"), m_translationView, SLOT(forward())); actionForward->setDisabled(true); connect(m_translationView, SIGNAL(forwardAvailable(bool)), actionForward, SLOT(setEnabled(bool))); m_toolBar->addAction(QIcon(":pics/speaker.png"), tr("&Pronounce the word"), this, SLOT(speak())); QAction *actionSearch = m_toolBar->addAction(QIcon(":pics/system-search.png"), tr("Search"), this, SLOT(handleSearch())); actionSearch->setCheckable(true); actionSearch->setShortcut(QKeySequence::Find); connect(m_search, SIGNAL(searchActive(bool)), actionSearch, SLOT(setChecked(bool))); // Right toolbar DictWidgetToolbar *rightToolBar = new DictWidgetToolbar(this); rightToolBar->setMouseTracking(true); if (hasOpenMainWindowAction) { QAction *actionOpenMainWindow = rightToolBar->addAction(QIcon(":pics/view-fullscreen.png"), tr("Open in the main window"), this, SLOT(openMainWindow())); } m_toolBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QGridLayout *layout = new QGridLayout(this); layout->setMargin(0); layout->setSpacing(0); layout->addWidget(m_toolBar, 0, 0); layout->addWidget(rightToolBar, 0, 1); layout->addWidget(m_translationView, 1, 0, 1, 2); layout->addWidget(m_search, 2, 0, 1, 2); setLayout(layout); connect(m_toolBar, SIGNAL(actionTriggered(QAction*)), this, SLOT(pluginAction(QAction*))); reloadToolbar(); } void DictWidget::reloadToolbar() { for (auto i = m_toolbarPlugins.constBegin(); i != m_toolbarPlugins.constEnd(); i++) { m_toolBar->removeAction(i.key()); delete i.key(); } m_toolbarPlugins.clear(); auto pm = Application::instance()->pluginManager(); foreach (const QString &pluginId, pm->availablePlugins()) { auto plugin = pm->plugin(pluginId); if (plugin) { QAction *action = m_toolBar->addAction(plugin->toolbarIcon(), plugin->toolbarText()); m_toolbarPlugins[action] = plugin; } } } void DictWidget::pluginAction(QAction *action) { if (m_toolbarPlugins.find(action) != m_toolbarPlugins.end()) { m_toolbarPlugins[action]->execute(this); } } void DictWidget::translate(const QString &str) { m_translationView->setSource(QUrl("qstardict:" + str)); } void DictWidget::on_translationView_sourceChanged(const QUrl &name) { emit wordTranslated(name.toString(QUrl::RemoveScheme)); } void DictWidget::speak() { Application::instance()->speaker()->speak(translatedWord()); } void DictWidget::handleSearch() { m_search->setVisible(!m_search->isVisible()); } void DictWidget::setDefaultStyleSheet(const QString &css) { m_translationView->document()->setDefaultStyleSheet(css); m_translationView->reload(); } void DictWidget::openMainWindow() { MainWindow *mainWindow = Application::instance()->mainWindow(); mainWindow->showTranslation(translatedWord()); mainWindow->setVisible(false); mainWindow->setVisible(true); } void DictWidget::focusInEvent(QFocusEvent *event) { m_translationView->setFocus(); } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/dictwidget.h000066400000000000000000000114111453553600400173550ustar00rootroot00000000000000/***************************************************************************** * dictwidget.h - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2007-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef DICTWIDGET_H #define DICTWIDGET_H #include #include "dictcore.h" #include "dictbrowser.h" class QToolBar; class QAction; namespace QStarDict { class DictBrowserSearch; class ToolbarPlugin; /** * The DictBrowser widget provides view of translations from given dictionary. */ class DictWidget: public QFrame { Q_OBJECT public: /** * Construct empty DictWidget. */ DictWidget(QWidget *parent = 0, Qt::WindowFlags f = 0, bool hasOpenMainWindowAction = false); /** * Set source dictionary. * Warning: DictWidget will copy only a pointer to dict. So set dictionaries * allocated from heap and don't destroy it befor DictWidget. */ void setDict(DictCore *dict) { m_translationView->setDict(dict); } /** * Return pointer to dictionary. */ const DictCore* dict() const { return m_translationView->dict(); } /** * Clear translation text. */ void clear() { m_translationView->clear(); } /** * Clear history. */ void clearHistory() { m_translationView->clearHistory(); } /** * Show translation of str. */ void translate(const QString &str); /** * Return last translated word. */ QString translatedWord() const { return m_translationView->source().toString(QUrl::RemoveScheme); } /** * Return toolbar. */ QToolBar *toolBar() { return m_toolBar; } void setDefaultStyleSheet(const QString &css); QString defaultStyleSheet() const { return m_translationView->document()->defaultStyleSheet(); } void setShowLinks(bool showLinks) { m_translationView->setShowLinks(showLinks); } bool showLinks() const { return m_translationView->showLinks(); } void setShowLinksModifierKey(int key) { m_translationView->setShowLinksModifierKey(key); } int showLinksModifierKey() const { return m_translationView->showLinksModifierKey(); } void setShowIpaPronouncers(bool showIpaPronouncers) { m_translationView->setShowIpaPronouncers(showIpaPronouncers); } bool showIpaPronouncers() const { return m_translationView->showIpaPronouncers(); } void reload() { m_translationView->reload(); } DictBrowser *translationView() const { return m_translationView; } void reloadToolbar(); void showIntro() { m_translationView->showIntro(); } signals: /** * Emits when translated word is shown. */ void wordTranslated(const QString &word); private slots: void on_translationView_sourceChanged(const QUrl &name); void speak(); void handleSearch(); void openMainWindow(); void pluginAction(QAction *action); protected: void focusInEvent(QFocusEvent *event); private: DictBrowser *m_translationView; QToolBar *m_toolBar; QHash m_toolbarPlugins; DictBrowserSearch *m_search; }; } #endif // DICTWIDGET_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/help.cpp000066400000000000000000000036751453553600400165260ustar00rootroot00000000000000/***************************************************************************** * help.cpp - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2008-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "help.h" #include #include #include namespace { QString helpFilePathForLocale(const QString &locale) { return QString(QSTARDICT_DOCS_DIR) + "/" + locale + "/index.html"; } } namespace QStarDict { QString Help::helpFilePath() { QString locale = QLocale::system().name(); QString path = helpFilePathForLocale(locale); if (!QFileInfo(path).exists()) path = helpFilePathForLocale("en_GB"); return path; } } qstardict/qstardict/help.h000066400000000000000000000032011453553600400161540ustar00rootroot00000000000000/***************************************************************************** * help.h - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2008-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef HELP_H #define HELP_H #include namespace QStarDict { class Help { public: static QString helpFilePath(); }; } #endif // HELP_H qstardict/qstardict/ipa.cpp000066400000000000000000000171201453553600400163350ustar00rootroot00000000000000/***************************************************************************** * ipa.cpp - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2017 itinerarium * * Copyright (C) 2023 Alexander Rodin * * * * 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 by version 3 of the License. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * *****************************************************************************/ #include "ipa.h" #include #include const QVector> IPA_TO_KIRSHENBAUM_MAPPING = { { QRegularExpression("^\\s*"), "" }, { QRegularExpression("\\s*$"), "" }, { QRegularExpression("(\\.)"), "%" }, { QRegularExpression("(\u02c8)"), "'" }, { QRegularExpression("(\u02cc)"), "," }, { QRegularExpression("(\u0251)"), "A:" }, { QRegularExpression("(\u02d0)"), ":" }, { QRegularExpression("(\u0251\u02d0)"), "A" }, { QRegularExpression("(\u0251\u0279)"), "A" }, { QRegularExpression("(a\u02d0)"), "A" }, // feedback from formantzero via r/linguistics { QRegularExpression("(\u0329)"), "r" }, // feedback from scharfes_s via r/linguistics { QRegularExpression("(\u027e)"), "t" }, { QRegularExpression("(\u00e6)"), "a" }, { QRegularExpression("(a)"), "a" }, { QRegularExpression("(\u028c)"), "V" }, { QRegularExpression("(\u0252)"), "0" }, { QRegularExpression("(\u0254)"), "0" }, { QRegularExpression("(a\u028a)"), "aU" }, { QRegularExpression("(\u00e6\u0254)"), "aU" }, { QRegularExpression("(\u0259)"), "@" }, { QRegularExpression("(\u025a)"), "3" }, { QRegularExpression("(\u0259\u02d0)"), "3:" }, { QRegularExpression("(a\u026a)"), "aI" }, { QRegularExpression("(\u028c\u026a)"), "aI" }, { QRegularExpression("(\u0251e)"), "aI" }, { QRegularExpression("(b)"), "b" }, { QRegularExpression("(t\u0283)"), "tS" }, { QRegularExpression("(\u02a7)"), "tS" }, { QRegularExpression("(d)"), "d" }, { QRegularExpression("(\u00f0)"), "D" }, { QRegularExpression("(\u025b)"), "E" }, { QRegularExpression("(e)"), "E" }, { QRegularExpression("(\u025d)"), "3:" }, { QRegularExpression("(\u025c\u02d0)"), "3:" }, { QRegularExpression("(\u025b\u0259)"), "e@" }, { QRegularExpression("(e)"), "E" }, { QRegularExpression("(\u025d)"), "3:" }, { QRegularExpression("(\u025c\u02d0)"), "3:" }, { QRegularExpression("(e\u026a)"), "eI" }, { QRegularExpression("(\u00e6\u026a)"), "eI" }, { QRegularExpression("(f)"), "f" }, { QRegularExpression("(\u0261)"), "g" }, { QRegularExpression("(g)"), "g" }, { QRegularExpression("(h)"), "h" }, { QRegularExpression("(\u026a)"), "I" }, { QRegularExpression("(\u0268)"), "I" }, { QRegularExpression("(\u026a\u0259)"), "i@" }, { QRegularExpression("(\u026a\u0279)"), "i@" }, { QRegularExpression("(\u026a\u0279\u0259)"), "i@3" }, { QRegularExpression("(i)"), "i:" }, { QRegularExpression("(i\u02d0)"), "i:" }, { QRegularExpression("(d\u0292)"), "dZ" }, { QRegularExpression("(\u02a4)"), "dZ" }, { QRegularExpression("(k)"), "k" }, { QRegularExpression("(x)"), "x" }, { QRegularExpression("(l)"), "l" }, { QRegularExpression("(d\u026b)"), "l" }, { QRegularExpression("(m)"), "m" }, { QRegularExpression("(n)"), "n" }, { QRegularExpression("(\u014b)"), "N" }, { QRegularExpression("(\u0259\u028a)"), "oU" }, { QRegularExpression("(o)"), "oU" }, { QRegularExpression("(o\u028a)"), "oU" }, { QRegularExpression("(\u0259\u0289)"), "V" }, { QRegularExpression("(\u0254\u026a)"), "OI" }, { QRegularExpression("(o\u026a)"), "OI" }, { QRegularExpression("(p)"), "p" }, { QRegularExpression("(\u0279)"), "r" }, { QRegularExpression("(s)"), "s" }, { QRegularExpression("(\u0283)"), "S" }, { QRegularExpression("(t)"), "t" }, { QRegularExpression("(\u027e)"), "t" }, { QRegularExpression("(\u03b8)"), "T" }, { QRegularExpression("(\u028a\u0259)"), "U@" }, { QRegularExpression("(\u028a\u0279)"), "U@" }, { QRegularExpression("(\u028a)"), "U" }, { QRegularExpression("(\u0289\u02d0)"), "u:" }, { QRegularExpression("(u\u02d0)"), "u:" }, { QRegularExpression("(u)"), "u:" }, { QRegularExpression("(\u0254\u02d0)"), "O:" }, { QRegularExpression("(o\u02d0)"), "O:" }, { QRegularExpression("(v)"), "v" }, { QRegularExpression("(w)"), "w" }, { QRegularExpression("(\u028d)"), "w" }, { QRegularExpression("(j)"), "j" }, { QRegularExpression("(z)"), "z" }, { QRegularExpression("(\u0292)"), "Z" }, { QRegularExpression("(\u0294)"), "?" }, // special edits { QRegularExpression("(k\'a2n)"), "k\'@n" }, { QRegularExpression("(ka2n)"), "k@n" }, { QRegularExpression("(gg)"), "g" }, { QRegularExpression("(@U)"), "oU" }, { QRegularExpression("rr$"), "r" }, { QRegularExpression("3r$"), "3:" }, { QRegularExpression("([iU]|([AO]:))@r$"), "\\1@" }, { QRegularExpression("([^e])@r"), "\\1:3" }, { QRegularExpression("e@r$"), "e@" }, { QRegularExpression("e@r([bdDfghklmnNprsStTvwjzZ])"), "e@\\1" }, // edits arising from testing { QRegularExpression("('k)+"), "k'" }, { QRegularExpression("(ː)+"), ":" }, { QRegularExpression("(:)+"), ":" }, { QRegularExpression("(ᵻ)"), "I" }, { QRegularExpression("(ɜ)"), "3" }, { QRegularExpression("(ɔ)"), "O" }, // feedback from formantzero via r/linguistics { QRegularExpression("\u0361(.)"), "\\1\'" }, { QRegularExpression("3$"), "R" } }; const QString IPA_REGEXP = "[" "'" "\\." "\\(" "\\)" "a" "b" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "r" "s" "t" "u" "v" "w" "x" "z" "\u00e6" "\u00f0" "\u014b" "\u0251" "\u0251" "\u0252" "\u0254" "\u0259" "\u025a" "\u025b" "\u025c" "\u025d" "\u0261" "\u0268" "\u026a" "\u026b" "\u0279" "\u027e" "\u0283" "\u0289" "\u028a" "\u028c" "\u028d" "\u0292" "\u0294" "\u02a4" "\u02a7" "\u02c8" "\u02cc" "\u02d0" "\u0329" "\u0361" "\u03b8" "\u1d7b" "]+" ; QString Ipa::ipaToKirshenbaum(QString ipa) { for (const QPair &mapping: IPA_TO_KIRSHENBAUM_MAPPING) ipa.replace(mapping.first, mapping.second); return ipa; } QRegularExpression Ipa::narrowTranscriptionRegExp() { return QRegularExpression("(\\/(" + IPA_REGEXP + ")\\/)"); } QRegularExpression Ipa::broadTranscriptionRegExp() { return QRegularExpression("[^a-zA-Z0-9](\\[(" + IPA_REGEXP + ")\\])"); } qstardict/qstardict/ipa.h000066400000000000000000000044111453553600400160010ustar00rootroot00000000000000/***************************************************************************** * ipa.h - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef IPA_H #define IPA_H #include #include class Ipa { public: /** * Convert a transcription in International Phonetic Alphabet into Kirshenbaum * notation acceptable by espeak. */ static QString ipaToKirshenbaum(QString ipa); /** * Return a regular expression which detects transcriptions in form /.../. * The second capture is the expression inside the brackets. */ static QRegularExpression narrowTranscriptionRegExp(); /** * Return a regular expression which detects transcriptions in form [...]. * The second capture is the expression inside the brackets. */ static QRegularExpression broadTranscriptionRegExp(); }; #endif // IPA_H qstardict/qstardict/keyboard.cpp000066400000000000000000000044141453553600400173660ustar00rootroot00000000000000/***************************************************************************** * keyboard.cpp - QStarDict, a quasi-star dictionary * * Copyright (C) 2007-2019 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include #include "keyboard.h" #ifdef Q_OS_WIN #include #include namespace QStarDict { Qt::KeyboardModifiers Keyboard::activeModifiers() { Qt::KeyboardModifiers result; if (GetAsyncKeyState(VK_MENU) & 0x8000) result |= Qt::AltModifier; if (GetAsyncKeyState(VK_CONTROL) & 0x8000) result |= Qt::ControlModifier; if (GetAsyncKeyState(VK_SHIFT) & 0x8000) result |= Qt::ShiftModifier; if ((GetAsyncKeyState(VK_LWIN) & 0x8000) || (GetAsyncKeyState(VK_RWIN) & 0x8000)) result |= Qt::MetaModifier; return result; } } // namespace #else namespace QStarDict { Qt::KeyboardModifiers Keyboard::activeModifiers() { return QApplication::queryKeyboardModifiers(); } } // namespace #endif // Q_OS_WIN // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/keyboard.h000066400000000000000000000034461453553600400170370ustar00rootroot00000000000000/***************************************************************************** * keyboard.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef KEYBOARD_H #define KEYBOARD_H #include namespace QStarDict { /** * The Keyboard class is a representation. */ class Keyboard { public: /** * Return active keyboard modifiers. */ static Qt::KeyboardModifiers activeModifiers(); }; } #endif // KEYBOARD_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/main.cpp000066400000000000000000000061341453553600400165130ustar00rootroot00000000000000/***************************************************************************** * main.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "application.h" #ifdef Q_OS_UNIX #include #include #include #include #include #elif defined(Q_OS_WIN) // Q_OS_UNIX #include #include #endif // Q_OS_WIN #ifdef QSTARDICT_WITH_TRANSLATIONS #include #include #endif // QSTARDICT_WITH_TRANSLATIONS int main(int argc, char *argv[]) { #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QStarDict::Application app(argc, argv); #ifdef Q_OS_UNIX QSettings lockFile(QDir::homePath() + "/.qstardict/qstardict.pid", QSettings::IniFormat); QString lastPid = lockFile.value("LastStart/pid").toString(); if (lastPid.length() && QDir("/proc/" + lastPid).exists() && lockFile.value("LastStart/time").toDateTime() == QFileInfo("/proc/" + lastPid).created()) { qDebug("qstardict: already running"); return 0; } lockFile.setValue("LastStart/pid", getpid()); lockFile.setValue("LastStart/time", QFileInfo("/proc/" + QString::number(getpid())).created()); lockFile.sync(); #elif defined(Q_OS_WIN) // Q_OS_UNIX HANDLE hMutex = CreateMutex(NULL, true, (LPCTSTR)"qstardict"); if (GetLastError() == ERROR_ALREADY_EXISTS) { QMessageBox::information(0, "Warning", "QStarDict is already running"); // Strange encoding issue... // MessageBox(0, (LPCWSTR)"Warning", (LPCWSTR)"QStarDict is already running", MB_ICONWARNING); return 0; } #endif // Q_OS_WIN return app.exec(); } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/mainwindow.cpp000066400000000000000000000245571453553600400177540ustar00rootroot00000000000000/***************************************************************************** * mainwindow.cpp - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2007-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "dictcore.h" #include "application.h" #include "help.h" #include "popupwindow.h" #include "settingsdialog.h" #include "qxt/qxtglobalshortcut.h" #include namespace QStarDict { MainWindow::MainWindow(QWidget *parent, bool background) : QMainWindow(parent), m_instantSearch(false), m_queryTimer(0), m_background(background) { setupUi(this); m_dict = 0; translationView->setDict(m_dict); menu_File->insertActions(actionQuit, translationView->toolBar()->actions()); menu_Options->insertAction(menu_Options->actions().first(), wordsListDock->toggleViewAction()); createConnections(); loadSettings(); showIntro(); } MainWindow::~MainWindow() { saveSettings(); } void MainWindow::showTranslation(const QString &text) { searchBox->setText(text); on_queryButton_clicked(); translationView->setFocus(); } void MainWindow::createConnections() { Application * const app = Application::instance(); connect(actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt())); connect(actionQuit, SIGNAL(triggered()), qApp, SLOT(quit())); actionScan->setChecked(app->popupWindow()->isScan()); connect(actionScan, SIGNAL(toggled(bool)), app->popupWindow(), SLOT(setScan(bool))); connect(app->popupWindow(), SIGNAL(scanChanged(bool)), actionScan, SLOT(setChecked(bool))); connect(wordsList, SIGNAL(itemActivated(QListWidgetItem*)), SLOT(wordsListItemActivated(QListWidgetItem*))); connect(wordsList, SIGNAL(itemClicked(QListWidgetItem*)), SLOT(wordsListItemActivated(QListWidgetItem*))); connect(translationView, SIGNAL(wordTranslated(const QString&)), SLOT(wordTranslated(const QString&))); connect(app->popupShortcut(), SIGNAL(activated()), app->popupWindow(), SLOT(showClipboardTranslation())); connect(app->switchScanningShortcut(), &QxtGlobalShortcut::activated, [=]() { app->popupWindow()->setScan(! app->popupWindow()->isScan()); }); #ifndef Q_WS_WINDOWS new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this, SLOT(close())); #endif } void MainWindow::loadSettings() { Application * const app = Application::instance(); QSettings config; restoreGeometry(config.value("MainWindow/geometry", QByteArray()).toByteArray()); restoreState(config.value("MainWindow/state", QByteArray()).toByteArray()); setVisible(! m_background && config.value("MainWindow/visible", true).toBool()); setQuitOnClose(config.value("MainWindow/quitOnClose", false).toBool()); if (isHidden() && quitOnClose()) show(); wordsListDock->setFloating(config.value("MainWindow/wordsListDock/floating", wordsListDock->isFloating()).toBool()); wordsListDock->setGeometry(config.value("MainWindow/wordsListDock/geometry", wordsListDock->geometry()).toRect()); setInstantSearch(config.value("MainWindow/instantSearch", true).toBool()); setDefaultStyleSheet(config.value("MainWindow/defaultStyleSheet", defaultStyleSheet()).toString()); setShowLinks(config.value("MainWindow/showLinks", showLinks()).toBool()); setShowLinksModifierKey(config.value("MainWindow/showLinksModifierKey", showLinksModifierKey()).toInt()); setShowIpaPronouncers(config.value("MainWindow/showIpaPronouncers", showIpaPronouncers()).toBool()); app->popupShortcut()->setShortcut(QKeySequence( config.value("MainWindow/popupShortcutString", tr("Shift+Ctrl+F")).toString())); app->popupShortcut()->setEnabled( config.value("MainWindow/popupShortcutEnabled", false).toBool()); app->switchScanningShortcut()->setShortcut(QKeySequence( config.value("MainWindow/switchScanningShortcutString", tr("Shift+Ctrl+S")).toString())); app->switchScanningShortcut()->setEnabled( config.value("MainWindow/switchScanningShortcutEnabled", true).toBool()); } void MainWindow::showIntro() { setWindowTitle(tr("QStarDict")); translationView->showIntro(); wordsList->clear(); } void MainWindow::saveSettings() { QSettings config; config.setValue("MainWindow/geometry", saveGeometry()); config.setValue("MainWindow/state", saveState()); // if "background" option was explicitly set, we don't want to save the state for the next run if (!m_background) config.setValue("MainWindow/visible", isVisible()); config.setValue("MainWindow/quitOnClose", quitOnClose()); config.setValue("MainWindow/wordsListDock/floating", wordsListDock->isFloating()); config.setValue("MainWindow/wordsListDock/geometry", wordsListDock->geometry()); config.setValue("MainWindow/instantSearch", m_instantSearch); config.setValue("MainWindow/defaultStyleSheet", defaultStyleSheet()); config.setValue("MainWindow/showLinks", showLinks()); config.setValue("MainWindow/showLinksModifierKey", showLinksModifierKey()); config.setValue("MainWindow/showIpaPronouncers", showIpaPronouncers()); Application * const app = Application::instance(); config.setValue("MainWindow/popupShortcutString", app->popupShortcut()->shortcut().toString()); config.setValue("MainWindow/popupShortcutEnabled", app->popupShortcut()->isEnabled()); config.setValue("MainWindow/switchScanningShortcutString", app->switchScanningShortcut()->shortcut().toString()); config.setValue("MainWindow/switchScanningShortcutEnabled", app->switchScanningShortcut()->isEnabled()); } void MainWindow::on_actionAbout_triggered() { QMessageBox::about(this, tr("About QStarDict"), tr("QStarDict %1 - Qt version of StarDict
    ").arg(QSTARDICT_VERSION) + tr("Copyright (C) 2007-2023 Alexander Rodin " "http://qstardict.ylsoftware.com")); } void MainWindow::on_actionSettings_triggered() { SettingsDialog dialog(this); dialog.exec(); } void MainWindow::on_actionHelp_triggered() { QDesktopServices::openUrl(Help::helpFilePath()); } void MainWindow::on_queryButton_clicked() { if (searchBox->text().simplified().isEmpty()) { showIntro(); return; } wordsList->clear(); wordsList->addItems(m_dict->findSimilarWords(searchBox->text())); translationView->translate(searchBox->text()); } void MainWindow::reload() { wordsList->clear(); wordsList->addItems(m_dict->findSimilarWords(translationView->translatedWord())); translationView->reload(); } void MainWindow::queryEdited(const QString &) { if (m_queryTimer) killTimer(m_queryTimer); m_queryTimer = startTimer(200); } void MainWindow::timerEvent(QTimerEvent *event) { if (event->timerId() == m_queryTimer) { killTimer(m_queryTimer); m_queryTimer = 0; on_queryButton_clicked(); } else QMainWindow::timerEvent(event); } void MainWindow::wordTranslated(const QString &word) { if (word.simplified().isEmpty()) setWindowTitle(tr("QStarDict")); else setWindowTitle(tr("%1 - QStarDict").arg(word)); if (m_queryTimer) { killTimer(m_queryTimer); m_queryTimer = 0; } } void MainWindow::wordsListItemActivated(QListWidgetItem *item) { searchBox->setText(item->text()); translationView->translate(item->text()); setWindowTitle(tr("%1 - QStarDict").arg(translationView->translatedWord())); } void MainWindow::setInstantSearch(bool instantSearch) { if (instantSearch == m_instantSearch) return; m_instantSearch = instantSearch; if (m_instantSearch) connect(searchBox, SIGNAL(textEdited(const QString&)), SLOT(queryEdited(const QString&))); else disconnect(searchBox, SIGNAL(textEdited(const QString&)), this, SLOT(queryEdited(const QString&))); } void MainWindow::setDict(DictCore *dict) { m_dict = dict; translationView->setDict(dict); } void MainWindow::keyPressEvent(QKeyEvent *event) { if (event->text().size() || event->key() == Qt::Key_Escape) { if (! searchBox->hasFocus()) { searchBox->setText(event->text()); searchBox->setFocus(Qt::OtherFocusReason); } if (event->key() == Qt::Key_Escape) { if (searchBox->text().isEmpty()) close(); else searchBox->clear(); } } QMainWindow::keyPressEvent(event); } void MainWindow::closeEvent(QCloseEvent *event) { if (quitOnClose()) Application::instance()->quit(); QMainWindow::closeEvent(event); } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/mainwindow.h000066400000000000000000000112421453553600400174040ustar00rootroot00000000000000/***************************************************************************** * mainwindow.h - QStarDict, a quasi-star dictionary * * Copyright (C) 2007-2019 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include "ui_mainwindow.h" class QMenu; class QCloseEvent; namespace QStarDict { class DictCore; class SettingsDialog; /** * The main window of QStarDict. */ class MainWindow: public QMainWindow, private Ui::MainWindow { Q_OBJECT public: /** * Create new MainWindow. */ MainWindow(QWidget *parent = 0, bool background = false); /** * Destructor. */ ~MainWindow(); /** * Return true if instant search is on, otherwise false. */ bool isInstantSearch() const { return m_instantSearch; } /** * Set instant search mode. If instantSearch is true * translation will be shown when typing, otherwise only when * "Search" button clicked. */ void setInstantSearch(bool instantSearch); /** * Set the dictionary. */ void setDict(DictCore *dict); /** * Return the dictionary. */ DictCore *dict() const { return m_dict; } /** * Set default style sheet for translations. */ void setDefaultStyleSheet(const QString &css) { translationView->setDefaultStyleSheet(css); } /** * Return default style sheet. */ QString defaultStyleSheet() const { return translationView->defaultStyleSheet(); } void setShowLinks(bool showLinks) { translationView->setShowLinks(showLinks); } bool showLinks() const { return translationView->showLinks(); } void setShowLinksModifierKey(int key) { translationView->setShowLinksModifierKey(key); } int showLinksModifierKey() const { return translationView->showLinksModifierKey(); } void setShowIpaPronouncers(bool showIpaPronouncers) { translationView->setShowIpaPronouncers(showIpaPronouncers); } bool showIpaPronouncers() const { return translationView->showIpaPronouncers(); } void setQuitOnClose(bool quitOnClose) { m_quitOnClose = quitOnClose; } bool quitOnClose() const { return m_quitOnClose; } void reload(); void reloadToolbar() { translationView->reloadToolbar(); } void saveSettings(); public slots: /** * Show translation of word. */ void showTranslation(const QString &word); protected: void timerEvent(QTimerEvent *event); void keyPressEvent(QKeyEvent *event); void closeEvent(QCloseEvent *event); private slots: void on_actionAbout_triggered(); void on_actionSettings_triggered(); void on_actionHelp_triggered(); void on_queryButton_clicked(); void wordsListItemActivated(QListWidgetItem *item); void wordTranslated(const QString &word); void queryEdited(const QString &); private: void createConnections(); void loadSettings(); void showIntro(); DictCore *m_dict; bool m_instantSearch; int m_queryTimer; bool m_quitOnClose; bool m_background; }; } #endif // MAINWINDOW_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/mainwindow.ui000066400000000000000000000167141453553600400176030ustar00rootroot00000000000000 QStarDict::MainWindow 0 0 742 511 QStarDict :pics/qstardict.png:pics/qstardict.png 9 9 9 9 6 6 0 0 0 0 Clear the search box Clear :pics/clear-right.png:pics/clear-right.png Qt::ToolButtonIconOnly Fuzzy query Search :pics/search-filter.png:pics/search-filter.png Qt::ToolButtonTextBesideIcon QDockWidget::AllDockWidgetFeatures Qt::NoDockWidgetArea Words list 1 9 9 9 9 6 0 0 742 30 &File &Help &Settings :pics/application-exit.png:pics/application-exit.png &Quit Ctrl+Q &About About &Qt :pics/configure.png:pics/configure.png &Configure QStarDict true :/pics/edit-select.png:/pics/edit-select.png &Scan selection :pics/help-contents.png:pics/help-contents.png QStarDict &documentation F1 DictWidget QWidget
    dictwidget.h
    searchBox queryButton wordsList searchClearButton searchClearButton clicked() searchBox clear() 315 59 647 61 searchClearButton clicked() searchBox setFocus() 315 59 647 61 searchBox returnPressed() queryButton click() 438 50 661 51
    qstardict/qstardict/pixmaps/000077500000000000000000000000001453553600400165405ustar00rootroot00000000000000qstardict/qstardict/pixmaps/application-exit.png000066400000000000000000000261721453553600400225300ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATxyŝ?UU}Uٺ9dn30 7002=x?k d;ݝ70 82f0nuS-YGGEfe]-̌wDdd6ȌȌȌȌw"&{^떱e HrH N)ll5@k=Ddj0#eK/P2fB&`2P2Q !"jhE3V8JX9R1A2 !HוA i$47HݕH.eQDr/o[fP&D~X~澾h0OA%FTUC_cVE#3<̱]jPPLErISR8tJ >:}~JnRH=!G/pSSaA&`yҥr>_" m22S^PdNUU,T]{]?)wd"EB$U×]ӹ7޸L& {.d 62/|4Kp j^U^Y^YizA[:_( %/$6U@Ue#D!TUaNL Q,!bF 2x{cSSuzx#Q¦IdBȞ=3B2w/U1Sbh##D̩=\_SMW?X^, `= fSJ1N# ]7dpFʱ4à~jR""iH\ћ`lR p/ E(2:2B*&?c]]: m *.{1q(ad,$ l6[@lsF7v_ J;Xo#6ƍt#bnKKe!^3H6D8DL32%I Ѱv-٤;;I%SFpXגI<% xΙ0G ҝH`dxKXZ@H4DOzD<#~qҔjb|0П纼-@&v 8VYӤ C+':{i،䊔 Xʚ1MR\W s\+0C?J־ALk T๎ݿ##,nnϖ/g^P113|@ۡCVUnR>3gNDZeT\X@{: ~{v8nog_g'_YLӝ>Yhl_y? 7ߤcB>r%!QtYFqsO7ATXk<NRRGqnSO=͛_[>E4퓓=<_j*Z-Zvb˖-w͒%KJ)%RJ ogʕ< tVY7ߌnK˗sw;2‹6x|.`~c$da(8~;/.3\fw|ͬX8;CK]]^n ^Timm[ootQ_QLu0r-_Muneo/'~w(ī}}Z믿W,[o2"p݀: (t@'.rfjf.9|? c۶m?gԏu77G| *4MWgtQҥKJ^ yP.*$p5\%Kab]{Qv +~m />K  GC/L("$A4J/Y› VU}lbLdR.L9$bB!_~zA¨.`JAPnogΝhLPi\r%,ZwM#*~,^/؍Ko)$bgatA.E=@1_fs,:]t ZZ09nàeB.P/ζPqK/]?N3@$9sْHJtb .x|'ya$‚>A93eYJB睪JTiY$⋉F曌Uu;W_}=,|K!˓c쭪bܹ_>'/%+tMees34_di-"ʊ =%;wiKbCR5P_^{6`ho錄\%q3 ȗo쳴9ɚB v\ZT жs',R*++ʟsqgӡ̗XoԶ64Y8S' ~RJBݹRi? Ȁ(rvuv0.sd嗗DRρ5:8x뭷8d=difevc#֭+ ~HPSSC0Ӵ=tIu+$n q]*駑R+bxx8ogNf`ݺu;B rZg͡wf74vڒ/;_]]킿J"hZ ./&@A.iiPHp1w&B֮]Oa %݅I06{} XWϪUr[C!<m]1hmY{/e9SH)iJ9zh$(:V>`P7>X9 .nVR#5Z ;h۱K>VuK07fKtȲ2HP9MXbwfXMB$HΙP* .]dz)گi 'vAQJ,,T pn6HӤꫩahhC MXlꓨvpl $q-ZS# |m^z#8Xh^`f幬` "(f ômkȑ#@@@E8p'|*L$N!^S r t}d[mj޹ ڤcgQeJ a)Rh`z͵q,B0|jTH8 lHB0w\>Yf |. =-DHi 4$N{EP(` M4t7:oC Yzu$ jysyzwb}}=޶Y rH< JduYDPAS"`5 sb :| ~D"oEi ޺ lL۲muT7[V5oJ٧i p<{2S![Uw;?RrH0.!8E&ZW-Ն=!DN䓉/^Lo~)^x Ka/FC;iJ< ܱ!$K>{#uuuOy(8(Z[W-W Q*֮[#Gؿs'/6erbBE%rGb5BhXvJNLzr BJ_{Mj~YF}܂$Ot,@9sHRbKI ۿ; tqVCaZ̀ I-1=t![O:9c3 Y|@oo'#[[<&^9y=ihj.~b=pΗ_7O]~ xPhW@@EV˕$` GB&Fzz݀i̞=X,ƾ?PM *,rLO Iu°%QGXa(\?8wu45g %&zzz<úɀ_dܹsbm}s08DmMc#}H/ O&Al̠ @`LH^vxdb#{`h*•F,Fa?FIth>K o#)Yxm455qᒵx@4͛G,c{[>ۨAVbTN4iE(^GftNF:x-Оݤ1mM:o;A%3"e%Lf2Iz|H 3 Yh(u hPJHl ={as|d]BhF(OaO7$a0{?d`#~jJ[)lp5?|}) h,N](_0 QYid&&LLd3 A(&`D„*"$!N"f膆khfhhn C"mMC؍q݃|@64 !Aб#T9Cbw#)\hӴ̸+xe 53 &G]hw8ſ% R 2Ð@PMaDz$QQ$@a+Z6tAV+t<^馛 FS%WLҼMk#ِ$َfMw,K%|)@gA&<A.QYi&G:=9jsNS)B24 =l 4^(XHKs_I<͛|M?V5ZvÉ{$@( B:l%&rkhxN\^y&/$Q _555e?٩BOU<\f+$Pc @a d/ q|]0@WWc$h噼PD"Q)W\O>aN }wH0ivhȢ7?%U"gJJۨ*%K$퇕+Wi;?ɟ^F7p| ŁY#Ő2@x|}ۗA kг,~ٴ:n ܺn2U"XMxjv>x;!nVɗ[e .$\9Wg%Hx jf5#!+B)_\ i@Ms4 4c; PklKq'sO.|^yQSJ3 ,!WPsw9.y]?}Z@Ii[$XhQ-[i\7X +I%B> @ +8 ) \uUTVVեAAcc#h6y>SFddWl6} R 7^/Xktб-}^HX,|<9h>#+D#+yL o. :::ܺJ,4߼?+z܅~\ZD.:|:Sq.rZt)ϲ8g|h#G6f(;O"MN{M ̭ߢ_@6ɶ8ECg7/ })>ִ< ~a>P¤8gq.2/ !sO>5.Hv:қmKM477s:,%KBC ^{1GKg,|/4=zsKs%PدiDH$>&J=]؟GN-+&̝;nZuߑŋ#ą1_?akc硁v]n1939x/X,bؾx +Sg+\tE#Me %IDATO7,`jn{'&️&6d…痚FѣLfmx@3|=W2 $ wOC*ږ炀{x=@HIJI/$---pyM[(1*EJt-gǹ[|GT(_[[K8's'X/?DϏA$]׭dwӮlIyU)I έ&R]CM1);\o`>5_ 2/fݹD"Аۆ|֠T1 Fwv$P_i`)7Si󫮮& 99T4Zf ׵afZ7Gm s,dF V=1'#~&ye;jUsxwsC(>pPK#rJߎ r>RXJ`j~65|N?X28& ϽTQ޴Lx}O3Oʽ>~aP]]ZɂVG=}*z rþB3'G^(6o'jOzwIPJm6bXlR'왭$_‚edl<`?ϟU> }6yl'}g\<Zn d?wģ|9~7 ~Yp~~"A4-JlwA$P"DY5._)s֭^i$P~ ~~niM 2qd |]`si vZ('F|0 T~N+M#DPNE|ǞJ ¹ bH pn6q;_zϱ8GUSsA2SaHX,Frh_ciǪ-?C.  Oz* $Ljk3/D$aw Uھ|zJ':8l-tϵ;γ]q+F %۩/~>C4[?A:iXș 82 .'5!:9 F_$)WµJgڨ`?/7^#@J@;iWk>Ir-Z?9Ġ:)u CJI&9A9K\89>WdNKNWYK GxgirClWZa[vj.Z<7Ji? _5CD[\B@eQɦ{_L(@&ޗ~w_ISMJ"[5:9&?N!:95p뫷,v?/OB@D"w@S+&tA>tLC > `wX^(pVE-Gz~ɮ(ne aU4tLk]ڲ7r*W縅k1^g74ART ̮ c*-ƵTzLDZw Ӽ*TBT9~MV5=c<2}g@X6|m/?U:+"kHFgd2%`d/##!dG:DÌ*5 &X<}^@!' ^(X,GQrަ+gED:  6EAC@l\08dT9kZ( 6Κk3xe7ύ<˪mE6`w_3Av:4)ɚX:=-UHnB#ޭ#?KblH$Vy ɯ4L@|CE!ɻB1Bat@4'9kx_CHԫa՝c ΢ς%{}KIxWL{%UA|AjZ‰G/}}T]%o¡a2!4xƝ=;u6z8B&$3OoѸHT5VI+-hDR *HSrmmC.,%&?8rH> Mah}k9ϙsɘ dL*E&FI hV ;7<-kQKɋ'es&*R8N2`LtAnH~J[@m=[OԤ:v|d!ڌȌȌȌȌ|\I\G=LjIENDB`qstardict/qstardict/pixmaps/arrow-down.png000066400000000000000000000110061453553600400213430ustar00rootroot00000000000000PNG  IHDR>asBIT|dIDATx$y?3;;{o܁S̋Aq(M,L$Ug"BAc21b!b^bHa0/۹ٙ'?LLuu.YzS3x<x<x<x<x<x<x<x<gf\cC$KV90j+ T{6Wm2Qg]TR.KRbIQ6bLv1.7詂w,dxNz_]{{2F}v".Zumf5 m+ve;\ |.zǻ7Oۘ^]fe1`;ֶA^_6*'yp,)fЛkwk{E7lyXqYN,?ԳNe1֚8t5u-N^X6XLjJC#"5>d"tJFGFyp߃]Q^t^" N`nYҶ$$lLe>ɓw=I]i ("Qezu$Q,11uvYeED61rTGnu_kQ-JA`oBv{C@[i1C57z Rblio +:/2iN{c/+EccauOQ{Z/1$;OxЛ|k/ ,1s 2ez08Ǝ:Y.錁26sm 4.NZ7Xȥ^vn\NXߩzW{/m8+^ =Gwf'u!il7}E%s^O/Ɣy;P@OaL@!ET׭O]K\о(4h(4d /z6F*SPdn%uM!z9]['{'lLR 1KL؆% p8z`ӝ^HإlËOA)66o0q3ؽy<:D%X-6)_~[=6휻\>uݻ݅c0t8KzEd.W7*kX9#w(hr2;h~ln\$A ?Sju@e@ԫ['$ɞK@p[u("csF/_@̽Hq»3QBhXOٵ##w@.~]ݿݶ@zFKjgc@ DMwĺ:8PE*)8:?{טmBBi%9L5}n賙OpHGw7sv "_Xo*ȾWj!|amvH'էSCr\E:8Eϙkpgz}ݛz{Rh8o}uW̏q} νz,Y/y׳}*SuD ,vv坮KU:t=UV`57 ! Ldld,sen)ַjt!w=iܢ}t Pɑ 0 p}Yu{Pxow1`;DǹDъ[=]#~Dbn*8YʞYqJ}6 p?ng.o[z {T`'xc)fA8o=*nw"[s5g0|X) rߣyl; h it+o 2ΐ[ ZpnNJ+D:n}6 #mos:FfϞf6sCcۺ:jtV[{$}8?sYxy/U/}TT%!MQ4H"L'u7ggڥ9K7n'5~ ?Ž8cX) L]a$z 2(mh; qT7ٓ;[Xg;T$v?'OI>fٕ񳝢!n7\ρY*Gx//"q4I.2Q덵S4hiz3 \}wJ>~ UMsg@kGֲ̭4f7~kfَCL5k8HH^[#L]sS~}>n,S+Q 7ȓܣHŞYjrthvP$:_3A{0?Xfq5@({T\>bf2Sú]-ӼoYANU[;[LgP( }^ )an̔pŔ(e Y?Wk` zv&\M+l.8Da}NH\q(HZÁX:4LNOv5ǪWQgJ9NQx!*gtm8Jz2t&dMAU(k7IF YZusey8ErNTv<ŹQKI])(EG~Q8t(1~r=J,Ȓɍ|Q U{g}C1e)Ne:z@S(SgtqތVEGkÁ΄d(9H$lE ID֚ǟy4ރΌ Debk{ w+JDvBIDcx~U9bpU"Е/=@9N$ BE~q)Xp-TW$%6oiVjqq( H:3||[o_1 xKP]QxN_:cձ΋C{@^sbD}\Ov`m -WgC@alɝOҜibe€ꃜEF?uOiy>((ܱs*Vٌ,E`RФ\ɭ\؛0,x=`BD~2Wr4F7Bbq?xX`Dy P~no]^V\%ɓlx!QF={l)UkRZ)f兀.(סeV>yzg(s10?kT5>@o$g- #c8}8J$= lNK4pe| #+O٬lx|SL7y፝n38E=1ީ4ӧǙ+WfIz¦MDP$af~U{ȗqGy p<Pplq&F'ܟ dmGkTR_>D|J}6+?tJr-ۨaweS, Ve4oSY٢f59@" ectuh7Qe @4on3C\wygѯkY]F 53ûc}% /_--,G\FM0f膌8x`')6uY+YpV_# +89yiz˦^NN?n[?rj}6aNlD&ӿ5^'Rѷ5$bX_߬.g r) [t|lK{_3^TVy׸PC( UDU5J= wwۗT޿P|N=L._Xqd.B]>+-&wmQXO[Omw0y( e˥>=x<x<x<x<x<x<x<^?Řt ;!IENDB`qstardict/qstardict/pixmaps/arrow-left.png000066400000000000000000000133001453553600400213250ustar00rootroot00000000000000PNG  IHDR>asBIT|dwIDATxy}?{fv++Błd!1p,aYӎmBUlC(GU&!qlⲝĊ.'Q26NjB ]X첗v%5;g?==+,4RzuS{"D!B"D!B"DpCTg 6,砈0S.*݁h.^tǯ^}%Kv >5Ňc+=_~c#}MV/Ymoodr˺-JvѨ䗟L'#֦V,6QK*"M'P&TN6bomK[sL8#(UF8XGK<,s-iPŋ9:~c8>q]BdO6|@B?u5Gdht3( w}Cu#~swe(!؊AwaD!Ǿȕkdnhl34:Tކ""ۅ_^E?U_SϷ6 g7olJ)2 I#ɮû*pDx;( :xGbt|x>R.'tӱҍlPt9!O!+U8H;1J k7 L>"-J>8P'֯ CHTi\l#ރ7%r-UT_o+*.W)U1a&`+;0tah8eD@ܬ !|Wi,|GW߯[ٍO뺖P>Sj]T'LQV$9H;qF-7;TkS+W^x%KF [&vDq]_d5SBQw13NLA'qQEȁRx[ҵn L4b0zM;I1q(.圶- -hv5\)uj/5(45! 0,Pيz ^!Ľ%b'M4nŤ'tRh lG-#lJ!=*ISר74ښڸN$l>3TuRhfLe !m4^'[L~NĹ ݬV/''s.#P@p'{qSn upɣg'%y!Q=pVl%RaYYHg5)(赏RK$G(NnZ cXIa{Q5 AP-XGyfGﵛS_[%:I 2hH;:)T[42 ŁR{ٺ^ -hF繷TE@ v:5z~ g"˓S9$pPpZ$|N*^PDl( <N1. s˻f-%3z MC7@.)–mu=6]R'Rh'=yWXPXB"1 \T*UqӵF/]#_%>8>@Ֆ@)%g~fTM0 ,ILdU"RTk3q;UGC [#_n68 yM:yk!2P)%7>{F6PiN :VhXH/ '9|0 GXsX|08Sf"E]VI8eeK~e1TVKYd2RfΣn&&'7Di2LuTK2Fs‘!yB dos8K3Eˑd:!B oCH_D $+€369ƞ\U4n,|:#ܵa fXJGiK@TE]T"1u3i;[4g],\ N=)#H ݞ|r\4%\T\l^O/𞡽q.XJ> ds~tªǿ /Uw1A8Any%$b|Nӑr 0 U!: /8Wn3rk0a]bg5OOI{,"c˛ɰCiY+o{^dqR,X~3Kcp1y2UT7\lʟ9);{_gyTR#|@9?`RL cfl_𦺋#(Ƽvo d7Wkya=#Q| 4"3`/8lO^ǒmϋ]>Ξ_/^tS$G~z g8wQgw0wW0 oĈ|{`#/"&uo~eRe|`l_=Ckv0B4IUNpfl_X~X-'y \*͚W3NS]['Az0f> ްnbRJl ͊WN*\3 bUN2~yǭQx+ƕˮ*ƅTЃ/EsaN|_qzl_p@ARxO^^;Qs|AXGX%^G~+PDv,uY x7|p|}_v-mƒJHtFy0>TD$ؾyfRr,\'^~ ZVm_j]bnJ@%mtGndz_̞_ 21>t JR}2oK9%3NO" @x ci==̗_J;pb ν)~.'yzi, R#= G2)Ƴ(^c'm4IL@aO^Xtfџz0hc GFFFԓa|!P~ &c|dFR. G)*zfeQ=AMboa׿{+S%8$:+qbµQ d|=;Ǐ_|†3@}W߆37xūd5sK0|7K5މƭԴV>KC >'Umt3FSl1nZQ#>/d`?@$(8iN%䖕7ou@Ey5``89evٛ vᇿwn5, <2RAD ϢNΒb\)ܹ㥞vzϡgxCqkm+"i2*|WbG~cit_ ?&- g@yӠ', <_ x$w=G_I¶6DHH 0$x5@9:n?a鬥%+({o5V$综 xL_W]UWKn#@D6qh@J~H?Ɛ? ᗉ #"Sú*š_܁F¨ !.dC]7O,FXuf*QY29Z泼piM5 di=:@rvv[Q0㱍.~s_䟻bܶEx955U94"Su G1_᥾ܾVcqjb1jL"LJv~Ze(1 bkL&9 ͑=?Ju9'[_J`r9&9P9zof$$3NUFn6P6+L >uŽ)*!g6E; A~B!B"D!B"D!B?XIENDB`qstardict/qstardict/pixmaps/arrow-right.png000066400000000000000000000130511453553600400215130ustar00rootroot00000000000000PNG  IHDR>asBIT|dIDATx{t\}?zXeK~K~H66~I i )$&mBhӜsNsҞ& Ą4&PH)->%PL'~acYl KsW{gܽsgʲkt{ܹsw~ bĈ#F1bĈ#F1bĈ#ic.8/i.EG;>8.ΕM+gz? $NN͞73g+&"4[6k/q5Gcn <ѮLs fuGr#-M2g-YDk/'NeyFRR]DG3%@Aot;9{k/Sܫυ4xtr;5zz?*dV}d3H)ݽ!UUvX&֚'9s)%RJzj=~`X&& $RI{gOÂ7FI2T~9tR6݆X'VycϗsMxFk/!<G`oxo ׼2.( *2vXaa~>'ល)X MZax Oyxb2|}Xp e**JEfɒo7;s).= $H䦁 `6ϚUkOu.0>\(Q$ioᦵ7q w8 $*YdZOeyVG$$rm؏FiOzt5/4h?y\`kJt$a xgd8OsOw=@q 0ۇHcTʕ;:h{?z/vOƅ.p 4@Eup{dz5ΟqU1 #@ M atm A{Q*geD7\tE! kV{)_ҹwKesJcr͋c݅OFaZwü߶ǣ.J|)5Oai,v 4B)MݫB%5: RK<]"<BQKi3ʹTG=X@DVG?*I4r\{ ˚$('-F.p/Ԅ5˯0\u\aɪ,sT10F4a@`  -Au!@ -^:\7hvh^7gzt f }412m_^0\H_@%/ 3Rz%/Crn6fg,Q}T>]9xy{xEW؏ K/ %-BdY:5.ZN9P1t{67 "e/-r ߎ|ߘ2x NjɼQ]QMKGK.hjWA.Sy-]hP;]BhKhCz_x~#j&2)2u{!*[N7|O p` 5 XO rʪJnx ̘2#A|e]7w1e!눸/.Zo yZN ʩf&𘫺`D~ }S7*F].r h) ….NV,XA]T^ZTHcuok)';J8}0: ,uTMqjmGgj9dyf0š!BFk{h {Ure=#AAoT[^'&[Kwt{!X!Hd޽o^B .r8RfXQ,APB K{toҔ3ALFn/Z I8!SOvT{I&s0(?O) 4 pQuZA*n'AT*XQ'`_SF#7OK].[ 3GțXFKE "m`6lH؞j700F&7LfKK'|Pg@5RHa젝iD[cxRT]0!  ,R@z .#[ RcŬA~M.$ QlX3ƨ'LHmPJ(QzV#"vvX1SLa[Vjp! Itx"cCȽ>a,";lÚv]9 XTuS*jӱ\ UIFOp䭺 վ8+g\IY 5 S"IiB^LA9H f]+`kU 5Z<ᒉdai~9(K)Vi3$Y1m9;N,oKV7x#@@:݃݅FU\2PB+ViE9 !r _D_Fy 4L/k =d' xY-5rPFe~_D9L G`AH~45.} ҤzTOeiۨ:sk<YӨjfo>A64@b>#@`0e&בD? nvܹYx3ܾH6_PϡB6ix5GSH[mۆW H`]qjc3$`HR)/n7tѥ1n]4I2G[`m wt:N\=~6_d5h0G~˷aiQE1Dy3nݾHh/ҡ?φᛟ$l~')Qox(vÉQeNAfz׹/LhҭS? $D=6ܹ=rj4e2.\ttI::yp$GF詟!,Lg&uXe5jhZdqѮ27R B#M$ Tm)ܩ! OGNq6iܟ  `N$},"!Xp)ݩ^v kTԹQp5 horQɝѯQW*mKWs]''97pLH{0E~HE)m1Ai#G 傅xu `!Ld!/G;_ qԳ#?drg(AiVΚ˔ub>KUcla݅sp]0GBr*d7[Z_ s> n SރFu(@EY,Gwr-T97pDw%G]p6[̴l_B{(gB‚ͨ e(C Ђw7F?ƣS=B4JluHc~e^/5== }> F:0X)2; 'sشY)ޠn值ED#vףKݮ;pv~>{q3' LLNPg䧘V0WyY=4V7Y >8OKo_Ev^>G3f (N!W7j._C( jSE{ .ȭ= Hw,NãG>fO <ڃo`R$^ $|=|nBqX>8^b&>oѓ 'T;;3)Åu|4O}UV}: zj@}.l>.d5waM ϰY62{p+Њ)&4Hs&{O.%8FʓtbĈ#F1bĈ#F1bĈ#FQW)%ÂկIENDB`qstardict/qstardict/pixmaps/arrow-up.png000066400000000000000000000104111453553600400210170ustar00rootroot00000000000000PNG  IHDR>asBIT|dIDATx[uܥVKR()Ki.EEQdD#;v zDH*M:a% E;`?`(q [H)^;3ݕLuuuŠkzuN̂bMq#F'xKfx !;L"{y_MGXc="Մ)*-|5EF7x^^B%#i*K-xO8buՏpS|\|//{،/Ʀ*X"zq]=>ciV"H28tE?!4IҐ^.XJu`CjT3\T@y*=.$ >'!Wwk2>< %"'}.(@#P@_4DGd qG Uμ&%ȊB%nf8K_.~u7Tb%(_(dE6CAND{o>>k{~d 2Ohz4ԏzLx^kaM  H~S&d8 6m`UYן<'"! !”!-,S~ .BkFpڍ*  L7^ @HV2[%>zw ).g-/P0C <\0q9zboqԿw,l`O Wk]M%,ih$$@3F0FnBE/ 2&=HF7_TRRW|g#IfP]p`_,4>:r"&`kf HbVד>|}X.kM0D"| V3ĕ 87u)l^X$O--/۽α<>6"b#WsNja-#ts6%SHO6 mZ#u7;EƢ/؊_a'RLJ}!uoV_d\[&BC*߱ =5,$yJ? a%4I*`ZR?(fHyH' E' r`媕!P!Umn6Ad#PDK5Ly?8M6eA=1g m_b+$HkB#@"4ܿ~FV0!Me=4R\P( O1KV$Oö1e"ZYbRF!H_Dz(l>B@a:hlBr<༡5ks./V= }-#'={ѧ,VѫCA\'rFnti'-tc:tt+y_ ,k,csO?3-4JEi^8wv^ +bOm6&듑抛s+ڀm*Œ肶v3q qOzj߷Lef7afZ~oĢ)cLڗǢPj5 N4_^N=m ct'umm`B JZX+6x;(hH4f`/w՝;&ncbeħPd\Y dAN&Ў'Hyܗ~N_cow'E]xS?k(6[zB0Az[(4Q,r[eow%@;ţ>i}Kh5L0MaVi!bjMC…ooxz* Vw8'5?od"0:SJ(jAM`E)"Z鋤-: 1ƥg|av?XDߗ}W`1q9T*,0A%l+D8-s(7G}+1!CNs1ѷ{nv}|gZGG/U` ̢>m۲0P1&r!lNԉ> >״2^C.cro#9\ _ٴ~ r(S1^kw[Fv>abKGD pHYs B(xtIME # IDATxyp}ǿo7E@<%Ee[$DEG;8wi'm:dĶN.;]g<:cG1xI")<,H cH$$ ̎hX~vp8p8p8p8p8p8x3#o0 Û̻HWW3_7!I!#{(سgOM]B]iop֓Rc'>aR/Hhڽo_ ^L&CMuDQ@$fxPT7W^}Dٌ=囦D~R**҃?ݻ囹 }~2}x7hي ~cKMy|@|/7hm ?[SoCE員5 vՂ14<4.8Nh)-+R+;& AAT%Bnuv;gmJ9ZVQm57j5jkw2t\,,f3N'~!Y$J.c K.FGGQf4BT&<ر};fۛ_2TT LM2jHu] 6۔?K0:2Z~S,8 JemV,:1<ࡲʪ1t5/+ߞD__/d2x <ݵ /^fâs1+[[0:SOА?c(3P(^>l:7TVLMmyVT(׺1׿,Om0/ v N ކ1®]FFG`CiYYR!` D119$9i6Wnu5?'×Aŋp-.,3?e0C4}i!(/!Xgb3WIOyJ;vks7W A]m-.65anǢkeieyf!&Rȓ PL:(Eի0Lđ`l6A/\.OjJzU*X{XQ4'TcC~? đ;CSSfrAקuub6A:䇆0&ftzE-x!k/gKχk0a@V3$-?o~FwM2|{㌨b_۷Os`KMM2b6ann͗.h4IW:4651; KJb0eF#GP[[z뭷pgöm_DN: PJ}/c zo&''9B*0֜DQ33lhnnơ4@(**oȐϥ@_Vh4;z4-O< l+*~d&JNX!Qv[Ή PUUN1 CP_w1pYb0OMK~[XkJzVkV5fj|ܵ@ʊ Vz46ۍEEba٠hpر_x-8c͖  8"(Y$atxlohhX_j0B#W$ }p:cl`B$oۙё=sfCBЀcǏR (n܈Y&ݭJ;Rb<> ϒ ACCז$wo琉bhx f[`=v1P.QI8"HރmRLY\TWܹ̆ /jQXT|1/72[ԤQ !8?~Y~Q6oFäՊ![]-( TU!RLOYzPSSѣglx@"=i@јtSi/jjjs ϟǑ#~6AiMXW`5fNP J/EfjM98}4(_Wy|ֳWƛ%PJa!4 jd,-_jq~NJx ZԩS pL۱h=/|p\p\Z~ɴBP@RBT$acp9>}Ӻz{{q177\B!v{8U&!?jk9,/r( (u1>gNݻ31Ç133Q&zӦ$ƺ*hw[K9 LL251\^h4=9Ac߃f(Alx%Bz}h=loy%c'Q!"dB%0&ccx{(BTY  >k(0J8'ZB^HF!?sg&?b>2*#!^ FF +]mmOanD*(hpspNMỏ>B( 0 [N2g;z!˓}ݎG{ 7nĸ Tl$Gct]ns>ok_;Xc?3&:/"v޺` @mr tg{SdBOz xM)x R막Ԓ|=Bg#:cc{3<"JZ|JHF<9ݻ Z%Er畖g,Y$}!PT8sR%%١--iuϦ1J>{wuWP %+WIA~&B q1}"f_=C'o;¾_I\onh?-)sga(3&?!x@OOOdpd(- ʲOO;y$*?!_ d_(֟H'0K~:B*_"B J.C.d&tO%YOm5_~Y$' A' έ[ke}rV.tZ-^zEl۶-Ea-5xPVV \g{!g4`= U FZV ށѮGV7|3><`:(`a7o‚(qY7 QiD01m. [bȟ4QW{ %0^D2"Lpd"'r \ۅ9Q xE!ue pw{ ]0%dETH HoB@Ж"8'X"OTBivz>W" joOdZ\&[-D_2_{Z= LbTD6,$lVV-2 J~cvWG˫1 ,"Y-[ ²PAލz"+YX5|$7 N\<"]#In a҃skAD%Z.$,8}^UAXN#^'üc>ޭ.$Q> D.]E!\v.%? ]X!JXie|Eph(]ڿ!l8l7|w$|$A! ůBP!Côf!Uf#p+e[4a?( uj*^w\W8IU!Շl$Ɇ{zQ~oձb^7iF}W/w H<@?f%CLRJv+_VXƝ tϵ7L`;K`c/Am0W>~gxW"ygGuttp8p8p8p8p8p83< mDIENDB`qstardict/qstardict/pixmaps/computer.png000066400000000000000000000020171453553600400211040ustar00rootroot00000000000000PNG  IHDRĴl;sRGB pHYs cytIME,$MybKGDIDATxڽkeǿ3HI4uך 9((B@@S %CA%9Wq-&milݝٙw|i6<<|DbLת"u]xq`]ƦaY2 DŽ( a๳g0=pѹ,)K}}YlNܬV}.Qƃ=(x}? eH({_  ^:$lG´?8~Qk-EQ>1a;}ac%7M ؇Cr}*j|/1vgtðeN=*^2}N )U͞vlX~]3.=vʡR^D\__5 ?$!#-M ׏@*P72OmAbp%o6Vn>K@6\ c۶aZCI{tp) +.]C]RDϗp[o714|p%ۼ%y IJRn-ã+pL46ȤӘÿT:_кqBŅ }^x}R=(V}B #|?<82^z5Bqא=vLBf/i:gLLP \ivrw.b4m˶ە?fff 0yviZSSS)q =>;;zƛV*9>>:A`n4aOݍ/>hv:G.H'5ښPZP|rtt$M>r4XYZZB~`wCHNFM2IENDB`qstardict/qstardict/pixmaps/configure.png000066400000000000000000000270001453553600400212260ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATxw\yܙ3viZ^@C Ɖ)S7&ۀmlD zAZIWu=̝HBrgv.wi/pB2^" )޿S__&O=W\qaYfvՑpLG:z=oy}^χo+i۾f$\޾??-'q &8eڤ[:{J@0HiI1%khM4C9q8qģ-lڸ?p=JcF  B9̾GZ&OII1hpB) hTy4U]]oY_}5"0[1i_X GZ[J}^/ΘghRvP 㠵Q gZ98Zk~CX~4<@/\yGgg9njK^!CD 'SֱNɏ!Z@@08yʴɗ8qۻ08*M&?_sAK/s=ɗI?A@]h[&`Yޒ-pT6hN㰰kﵵx3****Z(h)PHP$q)LH]HR pLׯ^lU+W@'=_'F1LܛJ<Bi;<@ys Z )0FqS / J*(a>g8pYaX ,N>YuƬN /}ǒbIB7O ͓R -@jP@"hK8J1y_|i4ҿڻ1Bbz7A&A6EIiR !$B-`$$@j@phhH$֋Q0hŬv7ԁB `  b89/D tJ] hK8 /}{ McѣGhܷ_Ɵa6ÃFhB) KH( cnOIa~o߆t/]H%%RZBJ)%<+ 4"MᖔyⱘQB - KHZ$&zn |&%A,|!MxGNn6}}alݒX)B˲4Ҳ DD1Q#_ pB%@/병R~}=qj^&.{ ))(+/c̘ѹ>SH^ wܸSUV~.7/9twwCQa_2@B3hHA4[aЃ>Q51hPaNjAXY ЯD&Lh!’BJƎ+++9### CO\>i\0_?&xx>xV\eԽI^EJ@N8***e]<Sq۴|ӧO/ھrs_Lٶ Cضgc|x^<^/u6j&rn(R/WP4(T6QcF7wttttc쁏R/5J2h{7@6&ؤ&AcG9JYB|>> z{{Y|9Æ 3>)b@)7ƣZRR1ed+/ˢ;lܰxp ;s*gM%WAR ljӰqA@>I4~4}^/]vsNE"◠5ZZD5Bk> ChFt_}Ν )nʨSϸ`0RJּ۽@!)"Jȑ BœK, ض볱m>N-]JM͐d)80 4ib)QJ%=I'/2hPnؾk M oF{wyY`0( %R!I[{^:fۤ~i9$ƀά)..AZ(g{}<^6m̞ݻ<2H H) !heBXGQq1hhǪڙgN}m2i]R"-At0awFcfu82H?~|ҟ%%Xmχ륷Kt{gÆ oG `Iil܇嵰, K_'fȘ`0(<^ۛHޤ[!1:1YƤAG>bx<^olcz<_m۶h xm1 iZĶX&3+x^`"lb ǐDHh(U!hhh;w;0E=5!.--$Dpǒ@ Ƕ؀~c-mDXaƍ444$W{"7؀&ظ׋xd~A&IV 4wiJN ;'' #YUZZey,</m/mttimmeW#qPH`,ˢ,Kz$aLIq(47m˖-b*aKJ!M#g5cF0Yyeyx, m;vAFf6p85]LSȪիٱ}GHR@Jacqcٽs>cIH.rQJ1@$m|4 /,/K)Moo/mmlݾw*.<"mtuw~=W"F6m̛7[npTԎ!¸B(TM6 !LWZ݅zQ` fG`24 ؁@ drYYi⧵V+yWyEyY9cF&/'zXI45SGi,^={m@Ǝ;<|>ZRg1$Z.LCNL_AEhX@K.پAJ@ wؼmAJI,a~QZ& ]Q|v^7H@`Y ,qrՁQbKZ9Dx d ASpyy 6ښ|~5=}}lߵ{iش&RW;rssIF<^,xMO0-%"QV斖d̘Ql߾L4ljb1sw<ē^ہ7!HW}8<@樱M8'LJ^)-^hfL;,*+=z M6*[)lۦÄ cZC+!m۶GiIIsbe?8~-@CZ|@ٳf};TX$BPϐFFF8P!奥ƍY7OW_ >|`QXR3ljEb1.^Yb`l f, Ȝ:uI'=sE04ƚ%Z#4g^TUUQ\T V Gi~6lcbf+T0)e^ww#r޹<DG"Npw!رcG^xO\|vqQ1Rk2flccqvۇEH8XR R]M$"him5'P9x&O6ƝNl)[N<Ů]y駟юbVj` 3?CG AH;v쐋.p\3td &m2i ٻή.x^2Aʨ6,]}Zkt _ҵ'8\k]?5vޭ]65~C 0UWWW~s-8s FqS^|>RtyV:Z<^lۦ;wjZX4g&Lh :'1K+Hl*Uڤ5V\tttt߄182t$kjj*꯮xcY'$fh\İGG8 a]p_O[G'Z尿iok&//G9 RH okװq?x\wDV_a&tqb0][[[u1YSLM__&*_>] #tYf 6˖/H!Ɋ4o޼m1*=G^ĉk=gΘU0ee 7HWg (MO.fϞgqpkkogɒڽ"B8ʡfZZhooN{zLJJ ~O0#Ȇ w3sƌdzx}^*& 8HX4F,%ʼn;qډTWWW|ҤIᮮE۱hѢmmm0Ɣ،0 ڴicg>ӧg77_ 4wEňEc#a‘oxh(' tCkK+Minj~56FV^ݵcWmwcnw%Ľ#0Ϟ={ڴiS>}FƨѣO<7>?SkWyD>` 3;׽6w{MX,Uة#hug9Whxw^ЀcH =ܙ&O|3Fc=NIq)L 1k 5&cQk ]ͩKWؽ , Æ>03U(˖.#??w4hΝN⠇}]w}g7a}D`:1uOTt!\}Ō32y\6nHnny2Xk'>Z!1r/RYUeڰxⵘ,v ?1uL~0Nx|ڛ8cLY D;ٳgYYYBj˓p$ˆù袋7pcŋW0n.w'|8 HrWqQwϚ9SD7o&222iCS/[oE9o~…n2ۄqB =*Gp? @oRbe˖/|0]c2d"˲XYU+**2k Xr}x%¡s5_(v=_^zLrSHpo^o<hyYt)[@B8!K.f믿?y!Fnr';Nx7}zKX?rJ1綾yuЅ~PJay̘1 .<G)WvlRj&гC9Up" νoZ}fhFiͼyBf,ZpS)ヌFpUWm۶=?]bSqRtwωEU[7Ldff|s 8ms՜+1NL?;/^~_tUTT^k=nx^駟ÒĞC|G6gY\xB)/+;0ۧw8=|𒿾4zta(Gy|.`98XWЙ>m*CT']Ï.|Y@ꊿ~ZE!b=n}su/?@姈%4Gg̸p}?Ŏ6Y@YgU}. f <ԳB H5psubWq)(eNܳ{w޷<Ew8|V.qE習C,<%$sP#I~0pwCn~34hW]tNywp,`k3a&+S&d %t+U?;8ԣollt}֭;>mXk_Y3fDAaa +; '?TW2uc`Ne&5B @pg,Da_аm8%SǂOh IDATS=XTTB8M-:d(XZ餥 Ǚ>}~vǧgy~ҥKݼzl;>-xn Ouqqmܻ{G '333YMSW*h,ƔILǦY[|}2{:>t§Acm_5r=EVvv ص{'{?G2wWLhdO-鞴e^wGz1b8yV,]3-Z];)k? |Hsk7j ~(`m`رddd$b)ZR%9R?s4tP]YAiI(YiGy|Y<_GrrOtw{?VTT* 6l?0хR DO|̖ D E8!TT@ î.N#Oܻa D0`ҹk׭ǟdlB?ЍiQB*_ġJJFTØ6qmg{i=8Ho>C֬]><ƍ#$W-MՀ<4EHaCͩBGԣ< {iǓ\_ ҊUV3f m')Sug;8u|S3|q!2jdFǞܑݽ#"@2? W#Gm2_[={0`*q1 WN/JUݢ6w8H?WW<>}ض5Va{9r̐'@$XBkmn7Z'>.?~|錙g>>~X]->۔[:/]ȑ#,k@t/!'mxUnο!C,ku{~ފpv|4iR3<1nXn YaÒ3v{h+T%8a5lh a׮ݑG*qI{DŽc%|SN_۶o>O{GCϮlHdf֮`O1XJ`3HNB$$RZˍׯ!;.8RH΅TZ-RYz-*H^O,@Nn8%\L$5b{͛;7 $?ƕ?_*..J ˖@YY)J)/NER,I+WҐDjAR8|͜9WF%-6{}[ٽㄏ#?vPeų!7w(DQ( Bt5KBKo~s}yyynQ]+qku+|U/R P]:f2y}P`s@>B``AΆ?3#@ԇawq(d5øe˨?_4*x y,y@B [P{ZJKڕ+n2L&du/(=gΣ2f@qzv:>A95G+/A P%18pQ~=.P^/~U8(ؖŹݻ唼8x$gk`ŀ)+VP1`i,3kfqű ,! dPiȊ,+ qJ| VYIŜ;`ݤ.SvחHuMw F0#d2N|&.]J)[&<'k(G,ZV;d׾#X5|>T7_51izzЦNgS?_ZJŜ;xqxK1 0\$ 4(|p4Uk)֘fڻ"l8NT䗨A H&}}DǎexlApdBK)PRW_ AEdB5j+yÏ?B2mT sp Ny PAl lV6H`!Rrq;+"&M%Z3D75t {ZX3E%f[;F" X8FY8C3h9o"VR{\M2XՆpQC"tAyjAV"̙#~c9NbC E.ІMIx)@))WPTpaSYsg=;8k;ז5TLr9\BUd- Pl0Y8^fЖe,\[`'-!,%,#⦡W$0DȤC|6* ~9r ` i~8656{Aq6A_ :L7AKr${+A \ކʕ. zzݜ Ft }X?hIj%wCH|{_I115n 5IENDB`qstardict/qstardict/pixmaps/dialog-information.png000066400000000000000000000225511453553600400230350ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATxy]Guun%^dI$cK``l!1"d@HȄu8d`0I !d`|0`]%[ZuUGᄃVk&" L,̰W> B׶@kUJi Uh|~Z"Hhl"4$#hKj9ڑ\bIEGR9FShh"4"}|TP\+d'r,v9?!&`bU?skTiF#AƸmw#,l!}^:V*p %,%TR>P4Lk`I:ybͪ[^u,wsh!"xZ C @I R,jcFrv4m 2q,21 iaLC+PJTRP* 2K7[oz?ՂϕyIQ&9HPJE-_W^<|z쾽wp)ek[1ױ 2ql Ǯ߶L,'i CW_ B 5) $_ ( ~3 Җ[o-A ?J<!j@*!\},jbCԗ_9wR\996c6]"@Dma[8, E=G r\e|ŀ|'_ Bqmg9&¢B[z /{ޝ+sm➣_"[:B`8nTܥ9Ҕp;&e`:Y@)B^JBHBSHR( ] @6_$I{_i7eA K5]Dth]‚ "/ c@};y} ژ1&-߲L7Ҷ&St1 !$W ) ZRQC6 e , 0.!/~'_b1v?~b-#.K^zisuou'@T:4My>\<{66[;\`AFsAPhNl^BK;3/ Erb}o13ӕJl|yy `Ke /= >pqw6]=LJbd4zUWyP/*Cl-ڱ-nZgw<R\kg2 o|mfEԛƶmG&G3>qwFODKZoDzx|/Bc-R,|~B`՜B2ݛ.7eݚ̭^ZRb۶mћM{XOmxZtXfЛ-<ۉ9}|A4flru烞#q[onŻ^ܛ~sl;j_.F|=4M?]XiNX|Lo?,cM\ݹaц#]w=ʕnzG:V<_Ҕ3vϿ2޼Tb&.[$d}0#8 1I&o387(XG*k.f=.[M3Քqb`iۖe$1>)]\J) ܹi9zCWlbYGs¡9ᰬc]gֵ9&G{F  8aPteYٞ׮:d-TX㡳@qìkoH$$ZN>/,4plOv\a~BPK: ︒6N0 AkVyB,XgX-._$%l:~$#*`\Ӛs{|2MLSwy hp|P)|?4嵬lKLJIv8 iRql/\Bf4_ Cs?S5GgКk1[*|4e"oo޼q# "aWqKf\H%1MsAHwv'}fP O*I\15ˉEG"O#|#P MWm`6v{0Ļ !0>{τtf/b!X زvVYA(0."Û_wy0HPJ-0z1x3`笜*4vX9K܀纼|:-0dMgz+cMga >pt} 7͏b+YCl7KluV<(A ;oX#e.J049>T<kiom@`[uXuVV'ׂrRoQrԢP;0ɠTIŭSp#=|oGE%U,:YiY`C,S'uѵ| fEMJ P102wgY_&O*"IJqڸyj:@l :لkR-=>,BJɋGzg\Zt)%e-zP`a-Յ܂06bv5ϴ~3$ViǶ=B9Zd;&< 9&T۵^˧GH'=nj9Z}2:pyKǻ w|GzFR5DBؖH=ʌw8hr*j%&l*MfRǙ wgƵW8.D-˜|)v'gTM'mtŮO4ueI%bxՑ S#># V5XƧx6zGO @)E_tlZ5=ȟvrX<繋^4i*~s xUg``Vw`ږM髃=plP)9mO"+/i4'V|bw?MD|a =M gܰK6_zC!aٱ\ǚRLug4kg(l.A"4,r Mut MQ]qe%KL"USuF)0^H%UK0tXBƆN s6T 4|K^}f ֭4JYi%ir"̈4Q4- C49~v.4$KCS? l ĸ1zCf(J* %P鳅WeiWii(@&bn3/\T"ظӸn100HX06%cm&P?pSO'-vɟ0tjd ӕL%zapc5hV{[~rP|[z=^)E5J*aO>{a`}b^M!<=6PE0?T``F]o( ͨ^RQ"@cdq*ᄓz{''g(VZ n/OI=RP j:O֤˚K҄ó'e$i;jXX*~YTܜpXshO>}Nx}p)Ώ >z٠1`27g9)ú]khJ8\"ʶ$'G# TMw/0uAy2ύR$]{@YkcbAD]kb6ɘEsܡ%$X&=CYN^ swt~ulaiS:tSV\ 9=8F_&GP3C9҂v #yJ괩 UI $!$[})pۻֱaz'Q4teپ\xx!B`iRd@ e-Y8Τ z, ]6a$>u h;T֝yu|A*3X>`B2_k^4 # ~!OD4{l ɌMu8>v(z! 3Nz;pvoU" jYj`5ATuG9)4'U93&UKmt 3?<4 ?&T}k9돈2qX.c,ʇsk> (!z/.m\$a6j5C>ӧG瑼X7 K&p4zqal㵿ȉ.JOIU)-|gz/-I l)]ő1Ӭoz!%4cmT v: a?m>|7R8Gw"^p%_v&8cB̤ *g9H8dD; &g|yë2IXL/7sȚ7L=OD/C ֚y昽lHݪS0 &mU@$daTbz4"+OTFml&!9Ӿ;hzb[_jNV߬Gal* sY7aBƄD+vAn?V/MWF?+f'7-wNu '{WhK}Is>#nz(T #:niX'nNr0-g:Y7%N}aw; S{Y^H:ߜo4#ZhBĉV=& ;]GD~zLCwbe>nd*ejR:Ű9VzH k:0 ]2H谮S/P >͎4Ń5lSX+)2|R`c,FW#,Gt/酓/|iIDAT52/~3w<`䪟ҙQZ`1՞פիG>6tP 8~Q($J;Nާi6ث8qȝB;{8&tPk-Z'ZA=twXˎW,`Zpގ7jG0!Kxn-}ag7l:b#0fszD,☞#gp1l,k4@'ao+?((Xai-Kix$J})dCAzd`{oTc)M쐞 WR5uP<} KSۻYu7QjWU!ۯC()rpl'MVnXvt[t?2g7t[_aǗ_^,~C|ŹDq@Zksڏ05݄Q<259.eC\A=S5GGlO [װJ7uW|n]A*-j5+D ymLJ69ΰ%ws'J!t-}vPR >؀nc ygf^a C.}ĻN$dRU A)j+J,BŵvD٩SvY>ZЦ]I hVپspP !g;8o4C4xWB9L)2,-DifKWcEڠma)(M*>Ek4ڡ9[?6HE) 6gX`ɦcYCq)C[,-j8L\=FNtqƉ!R.'7 °CBkqPGyv H2عw3鈥m=&af衬L*-/qJ P&CPPΓv5h`0ڳ&LEnibY-0( BCmgbH6J}4˸01oE &>rD ?"#sBB"@[M^ALރ7 [qPa3'J*:?求 oGF%V]N؃2sNχWjp~r5@&IIJ(MJ,Jd!8 P18ğ"Fū>0XǠ!Ft=س^E\E\E\E\E\E\E\D z EIENDB`qstardict/qstardict/pixmaps/dialog-warning.png000066400000000000000000000223351453553600400221550ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATxYu> fٰ $HXR%[9NUJJU*C'CU<%~̃+r\h)"[,%j(R$v`uwsg`f9S_ݞvݷ9|::::::::::zIv7"|B»s(C8~'5>N{#zi<Q hI&䇄r˗XU/qD *—1HQXɮu=DKm8do0jK5W Bh( B&N~hڎ' > Sً2* ZnP  |Oďy,1FS O)0};NobhPBC9тASmAnUP%!.ؗ8"ѠěOz@A"G$1W7)(48 v䓄s-}56%ɻ)2G?5OD K5~c91cF,߃pl /c`E `a*%DaahT42 0ZUba/ T,p<,'(_2@!`ᒙeԿ"(t!7B22pO <$2a1QտH$6fs3"f&LO[*_ U%01 (4ɫ>(DT!ɩpA_,?R(֠0=xՋq"y8d8^*EXPFus)ρ?fxO`| 9p,׫i<E! f-`!bK1]kF̿8MT 0C8e>}}-z)FK<}G; );a6[jybDNaxNQeˌrFf?y _ ww5̠6`s4j4XkC;(4"Ew>0,ͳ4D%$@!4F PM= OκNG_Ecm9 (D0ΡQ[Шk FM5ѨxQh_A0///QLQRK3xB&Kþ8\HQ. (鏷~-6NjH! POc{^TI_:o g;ښ3Q]H%O@06$P]phF!bG> /sfĵAd~(^BiaIU!+c#XZZrC6h>.kR$ne0?ϯ9Y`X|a;{3((a\l]U1#c;H(bgԣW~lk#\udBzowѦ !i ұ=+zCc6l251ytZ_;(l\Dq3!+ )1򱶿HY#_:g/x(g44)Jq SM$N6$Ę N_XE/H:vږG5H qCv؞VGa8f4J^_xc+350Ў5=G Bģ;5N˥c{򢸀G80E9PSm݌ʄX/lQA?I>eSȭ~oW@ D r\"Gy9PgJ`&Rk[i3{G _;#u];+HE$ymS 59 wKe|T79/ΤYp7ӳ`$Ah%ztKv $(h a/ұ=%&Cbf\pIesX#}N|KOD `$S:AYH5DKOu>WX9Y ұ=s1beѸ#l Q$%MVe9Lar vHmH ?5}dJ-5=P2n^Leh{xì:f% Jgl2ԚNg&5+!$Ą0H]D!˳G2=W:'^IƠa,fxw69ƨYoho U,!ḏ*OǓ-f,ztmO uqM}תHC1!v]`Y:w0n; AMN9L;E#.G#5.ELn"YuG. sqI'1 UMF=C4jݺòcuw"@z'9}ֹq$F){w@Ԑxz,vi1]AVkz4rQ]r+`F/ cgɺ~+)JɠL"H]DGڷKӾ,*H7*$a M˱|2*%90 rtP`w4qtؔ -Oa,СZD @Ԏt%kDIR _j33E޿UNKwoG XT70ܡh (@bȷV3sz-f'. '/I N>W̆~]蒵Dl= 2GW:`|a:٨p =) #r?y= ҵO.Τ[&(5)D`"|} ڪI44M }jc8)xmVFc`#:ɗ~6 $֬`{?m~1L8GEȹX< X 2đǏ.OtXsAD<)/@ $~DDJ!ik=$ߵG#yd:^~DB8Z€`Y/Ens<hcU N!)DL㡞mؔF/bNdon햳eUBPۂ~E!y(/'9f.t01힕4E&11fY@!;IW8`Y/he8G.a5ikez2%_{"%9Z-%`=5:. aF7v q$j@=X ב H" JnA4xL(X@r"I9ڜwi'\o}L?0}g$fqE_Om&]bF CA!XDȏ6)͔Z!<%v ~bf@\x30C4V_*Xwe}q zSq"f z}37uxrL ?kgiA%Lk7 |'2yDbcҩTı.& iA$O}Gs.$X\1 } E#b( =k.gF CHyϿa>@»cۂ){y(-z2.h .h.K A3cA5[]߷COIk>qXbp,&(IG~rL L7ek]cĸL^F,./K4Qc=xsFnjZ^m̾$D1rkZa0>ұGsq2BTsAOsxSogZO!]Rnȶo'!8xEB08J"K^f0ȽB4f'^J th0Jڜb >37V?$wB+"l>12zt:7Z7{x6@t܀"]!ݸFoFWjX];P(FѢ#KJ qGCwY#LC9<=^ܪ)ÌAyh ӻ_GJ["q0L㘠A?TŏQ025t!Ӛߘ?o"B>7V5ga#>zި""xP}tc;"9"8w9]1xSo-ύngەglA.9Cd;>wzїr;Chm.^rR-`%jD;·h$z%}9Db<^+7]vJiX`cD@6 ]}[DŽ}/PWZ 7܀GS:&+)ы-?}!#&`6zۿ^^N`ʇ:~G/0Aiƥ^Cy1\`4-7+  6m([-gt?E 7G)RUvLZp !f|`x3/jk߬s6i'|Ͳ X[a| o38oELR@ ɢC 8*񊞍r>Zd03<~-<}+ іBK[a|)FE;@T~K`c]ulG@0y|qLbԗZf,#2v׍ v6VƟ';Pv[qh{V8--k%:w /~f?SX:TЦt-O99tHߥ]ߦ+ba5_@o"^cնd} lxohvFWE.=]-}u:uIK (Sv87qEBտm+gVվ`KP|hdT7Ow=UǶ$Rfaz=^ՠG/#_ WĭloRX{nZѫQH#ݮ) @l%`ހ}ya [%LF oQ|@.ǂEs$yV_XZ^KF4]<++`҇)kjphQ<*Rkh,}aqQ`Ru,E(dhNﴋ=a ߋ_jDo$"7dV|1]W>Ӊj7gf@0ݫDOPkWIhq Yqg/\u5;f]tl/)/bJCO뤫oq!5<۫z5 {N/8w1?l#?~}🩷hߑ;MXW{"ltQ, Ɍ \om8#,n|]PE'dbҋ\ҫ@s,ԯ_k0y#BaX&qrOw/Tσ>{d}:Ka8\gEʩRY`swev/hF0싐/1 F˔  Qw}SǙسxc^٘_O°QYvDb 18}2H?" kӚN.%8F%2t35ffHYQ\o;^}^oJw}DWkUÈ1Pd6(aQ**h)o*eLIDATv`+q BkCOcRa*%ԫ3]X; <k|rb9L`e,ƥ 6ڽob~`C߭FWN"k1EAY|",wesE ,TLAkwсSHco^fk3&`}7l?*an!x)D5 tVfô "q T6laѝo@ !{}9r`~'+n,evLd~wbS  Bez P "AB~z䛘boÑ㏇۵1r``pk|Sh\@ _`jM zAD<Ĺ#(4:6OtZ>n\GpƘ ҫ.s"U029T-V@݈n2=׵i!xiѽD!2C,h0GQfVtu,K)Gapm܌Oo{NG@PDE|Hon~a-GrţaXF&o7kng95o>J>QnLq#o VvFS d??6Ah}]::::::_PpOIENDB`qstardict/qstardict/pixmaps/download.png000066400000000000000000000257771453553600400210770ustar00rootroot00000000000000PNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<+|IDATx} ]Uw;[J2Q  cn~m+B { mӶvZnD& $1 *{ߩުZ>=g.- >}'n*+_HDcah({iMW~vn?0Gdg|?V6A3th\<ֱc]&qxڣ"Yq 0`Ƣi<9K'9Oyկj6ig8x+7ԠD4 h$ҁ=}8]k0pC0#tMaZJ$n43ŰE4S4sK^7Ԃ x4ze@/'tvwZDCN m0h9QN uӗHנ۵?W?&9zιvl;GA#04>kƝ:zl_ tKsS¤4=1jM@g0: ``ќ33U˲l Wc #ȇRk:c!6M]$OYSGΰ@ )4hy)!gĦC| ۡ 4Lp5+%zfSZA(@>-`[ QNa0aq*r%SDڡNuAƨ6OKR-QVH"D9S^! = !:U$@@GBw; A:L݀j0%FK,zA_ɳ7o숤MI1 Khx_~!Q b RDtw%69 }/*©" <_T%@D{UāSؑ?a ȥ >"pƒ?<B0mN(PD6er`0+6G M^J,_J`Y]3Cy^D g)JߜMy)} 83BYS}IvX`[paGKlbMwF,5pIDT 4<``жxB@?`l),1}I$P2bJ Q4 @~Q"Ii K|A] ;%?" j$I^Wݏ;vSOgwh^ Hb*J3/T6^s5bFvg_}UٳF|KK =\$ Y%-d<Æ͈XWRf /_&}.@@*HHR$x{ŦMpATVVbXp!(]ɫTޮҧ F`xy__n:\r upX.H%HDcg7 ::8wjxJ?,7NG#φP\EaΜ9ؿ?I)ՙ$e<6@SJ@J]]])wqvލcժU$|ߋ:z(UnZzjꚓ#e]tM=Ff"OD SfϞ{߂ lF8v옌 pTB!/A[wttp$'$@UUϕBe{mԌ6 \X!8NA&S(^{5U~Pb9rDC!Y!SQhjՕaC s" KhȶԳZY9H kNi'(0=X 4d޳mK B k  6; @{(USOSD4;68tK{"J%PUQyԅ#OK19~l˥ؠg {uj_O%bhuK/]:yUK5W 3fH*0e\ ЂD tJډ -3cU9:\|L`\#ߓTe*QNME/wE2r* jbFFa7tI)/XD ~|~aVO u(ǎs,=tW,X(3K~Ձp%. ѐXUzP?l#kMr-QYVl߾ʕNzK $toC/V OހGbh #0 ,d (_kYEqx$p @F$I&`gמ!b ];>?Fu&puHmT_PT Nj.]U^^y8z5D;"Y %ݹE&zŀE6V%Zu߯ǚtsA`Jϣ2s1lڿ rlъ!g4JӇcYQ(&tFԅ$j>71LU ⑧(_֮92@8R2U?E)GqMuZ:86nًBzRs)k]wǝȍÿ'߉FĒQ"ʪጊe Jx*$)/-K8b6:o9*]ZO Lw1x<"D9aC 8ݏf+M@8.k8LCZlXF}9ֳʛq_Gu:{ZqpGEs ,ZN kށz9.a{pR(e)eh AN4 n{[v겉ׯF5mnGt{JH`?aTC"|Ds7 t^By,HgHSV6-tuo`} R(zq^9-"G"*RS]}I%z$5D}:Ǻp׏֣hK,ίj@4ѡtn*Ǿaq>Rx~Ex}l-]gpz,[Hx7GYL:o8i%ƌ(n^2|2Q5HU"h?{̅J p<*lBWEs~_"1HG^UvA$*uӸqr$vJ%D3gcgtSp߿ݭmiY9sұdP@{ 7 B0hynG[ [ouͭpϼXIL p6LA tu.`E5"s@W0Z[4Obvu *Sɑ7y8qODNDJl9aӖQ|yqiWо L,Fl`X_|[nǂ wwwSMFPzv~x xiaA&/  B,rMVͫGaB_.Ͽ[ƭ|מG\#HiBB(tzCL'߲e UpTZH8tg(_y^u {؃gVeEJ£OlAg{)R[d4Ǩ'g0E} ^Eہm[Wa2H#\D8Y &x愌T#Nǜ%~a"^6a8X\1K@oiucY~{QmO־a]5ekFJ!zwm",yyI0p0^@Y)8]Ǟ6E,a^+hI)p, =.'CwLVO7𷏬?~̚Qf}q^b \6D{1mpH/.,yZT?q<8"-nVl۶ ]t-x襞s/r\xD}R,bXQN(kJ]~o=hw=lF{Np6,L"nSON}=N|obI|"9\NowAa/^W_}5% >xvxRƧw9 HZ`{[}quAh,&"p*DYjd= ត݂L9}cm! 9oh71dHCDZ#0ˠ!,P\xV7TiV/`Û"ӈPҶ+2n^xѤ(GK@ džq ŝ5jbDB>F_kkk xa`m͓ Nl8w΁~")G@[9 |[ɠpC 7idv _3%VO+_r6"0?B@OU:Dl{Bo13ވXr%M4tQk|j@ j? Bb$ bS +beOG7'9~!)@/zZ?aY^/@#9˘¼D>9s [?^ <-B&x"kh(i X[;qbA='QyPAmsƟ, p_DHd RJbtJw1H`i§Z.įֽ{4t )窵H+hћL?[vd~eɹX^LE$U0K@C2W 4i_M- * DHAg2eBYh44[2/-CnH1 Ca,49xC8zȻY|v~zTA6lc2VjHDˠc;uH 2-F7X5ep܋E_ .ncI<}~u˱j.CN{)Qk]=/a"Vr쿨_-L)@м8|r(2Jr?ϚYƲZ\ 7}Xuxm𑦕8a1 eK!r$ T PdT{}U(\whZS /ĜDwN#D%b a[({)E"b& 4\vr*eĺ7| qQK_4["93g_n{[e^-mqMk@/R{ kK丐 TJm޼٘JB9`^Q&$8$@!C]N!.e#B^ 8w2%)QNNq1/2pS\sp['@d &kOwT+DK 1!|K~KnAjmy XD.N"G|M Z 2,rmZ.--QGJ!*Ļ̈RpT@Ρڤ),"9`Dfdr `1iC)Ps`IǙ4-Hq#qxζ>y>/~B`6*vo @ɘ  G @1 REŵ jfb#U]D|ێ0@L V P=)f)Vˆ/n_HP3$ lA7D WhSHFO g#Cv/#KYBq䋈I1g@gsR+NKAIg-K߼{XJ8x$S>WdԹ$Kp$poR3 ޗ@ mJ"Ip?$S%>0EE 9RG 2KH8I>YBB X 񢶄cwbDa`FSl;$:Qj)6@%A2¢rO-( X8[or'%;䍥ZN+|q\9~;'u0 G1]t<TanSGI@k+n.ZbX/5Ht(0/vh&p$!HPGm&AxB׊ "(t]lz ASBsu$@028V{'P0aȳ%rAcĈ$ /b#1*gऩ,Q #ҩꀫs&‘=6?+\Ow|GWEMI0m[LޭmGCsT[nFRb]s5OI4"%hL0 8;N.?>Ed2G䇻gő_4~k.LZJ%[X+ٿlh' 3b\r$lEk)b橦+c$=Tl/Ʈß ;"Phu@26i aȺIBK[0 F3!ѷ/] 'ڟJ #5Z'F.tץ~b@ohj`,H')0∔gJ%0O{*Rya\(KW܆_N$`.Sɯ}kKɒr ek LÄ0N C=~\\Bn(bӞ|I%l4?0?QS?vZٔInCOS2͗`,1ʠ-s dƯ ,СNG1K _hL(4h)K$Rtq債= Vߔd:`fȕA#yxrK>onۆ 1{l,7?C A<܄Iֽk()9}K w"8!RFr >C7[a-)}W8/u^1M c& Pz5b@X@# , 23ARA +kH%3ša,N?9I(f5.C0A`V,&ؓW! a_ AMi(,kй;;pS'^}͸23q<3K C2_G_̵4D7O].u[֢R>H$ )^8L&7u*dyq ,KF3yEK7fI( Z_ H|k q[C\x轓HdRoTyg.!bϲrr;w=ↅ$ S,:"VbxB< *< %}b.|E`Apd5Y_9lK:i 4Jrߴ#r-"1b~xFΏ:8 !iݫF#_&MmؿkSK2>U1Ve1iAޜYY z21$Z8:)))AC&\g~}!h$$S#/|Ǯܑb8D<0LA;@"V|n(~X[Bm *f9c #ju!…'IC`}v2"ɗ(MEtn/Ls;ʙ?IENDB`qstardict/qstardict/pixmaps/edit-select.png000066400000000000000000000023051453553600400214500ustar00rootroot00000000000000PNG  IHDR00WsRGBbKGD pHYspMBtIME /EIDATxKHcg#Jn(RwfQJ).ڍPT|\t1Vf.Je|TPZ5Z9plp ́?߽W=|@)JQatwwޅGFOO\& }.,,,@QEKK^__pC2QTܬ)m(.9֖d۳Y!`ssS ĄXw"1sDPJcP!`wwYgg+t{{ ;;;066 _|>OA,";PSS ! @ R4Dc؈/`+ CH$2?L0K8==%{֗fDsPSSS"5rHFVaBgfEN)3)Vc 4̀ (jttTԛ@O|MjBKrK9UVV!f ^f&55TWWSn7 DS,3SED^Ej_${ [ ,..y yr/ߡ=B__/3 Y7,򌮩aii +++7<IІY>akkKollVWWd}\2+f=O$k6\@)= i)k;h,Ɋ|{{vnb~)5022Bm9!2 WPGer )+ cA,9x:88h֤7nnn(;,*cZɄ!>Qdmm<'ƕ޸Ϟ4g O@no%4SEX X#ȟ n;PQDɋpCgC[H^s [^(61`%8:yؘWARI 2{w Cgͫ]x4Xθv =ؐr&306kV)JQ,gIENDB`qstardict/qstardict/pixmaps/go-next.png000066400000000000000000000233021453553600400206270ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATx}y]UosȐ%|b7 Ptsc  @wVU[(I}RXQ 6J 2"$ $$/op^Ϲw#I^9L{5 4A jPԠ5A jPԠ5A jP̉&/w-Yx̧;cxӎ>ްc`lчM;ް'_epO&G3nҩ5-Iho͗0O/&hk9BK(/jvTw0?|鸑"Fɣh M-1cxJ e鿷S'.5N"?l?<<1 "1s@SL7%LD>d٭ t{nҜ׼ :rhk#n욆3:0{fbg6E)If 0L],}KU{G'/G՝ɣg`C7|,F JMm8m!T l8IޭTfur4Pݙck~c"+ ^?PL$X|ՃL^&hMNM9D" .c%%,Z4Yk, +vLܸx5YTXI0DBeP{ o 8)V?8} ;Kӵo$PRAV)Åqo_cv@ %X*U^sI $P̐JAuAQ)^c$j_.>Tsv Pb8cy@) @ QX<6/s^לXTr|"KW% N$(VLHUW,J$ظomL}o}%J21qgidwpR P%(%(6P,`ˁ<>w⫟x7b(3'ExdpQ $J)SuAPX|`AhR|,(@qh1]w%,M4 HR^jT//{>~|o2QVZZ&{ %՝%` ,TUJ%('X=ի^93ڡ4!z S'se= NPNu Kl?aXyX_I$Zc/sR @ҹ`*%0e y0GXs |3f+'drNAq#(J) aA\y೗ĸ,e W/ =~ʅ=>K'&k-&R.J%ίZD D>w\yyX`Bzs3ϻ}=FC)6oAV[em%hw`1r᥶lޟǵ.y Pow֊Z@͚./6 T*mQS1 E~oz"\qLG0_>y/D;&24s B6+ fCJ` Qw_`SR ORJ>x;'چUaw|{~-XGtݥ͑4cNtg@ tok6&+&6f`Tr8zwZ<`qT;km WSu!\Y$r,9RYWpqCH!uUSq2O|,ׅ7<fB` 1ϭ|X&8O8 `  M3Dzp81T'a&V$W Ako޷0/tZ0np.:vGtC%V1  W]^0IN)b=mZI@1 + Lׂ X!`D"y~pb[b!g_{$ ~ h ‘{A\|s{gl:|4!2a;Lބ 5vCe`(&A= 3/u,s@mS_.= ScؠHݶW.5фP2wj[s馸:sJ}0eglR'46᣷-v)%S2 ҵ/6e,N(P>/^~j X/fzy~\&OǯQJ4}sX"U9F(I}R i4&1uR]:t/8f{͟@Ӆ!!+ ܿ<Uһ'D!\z$2K`|vI[=;4 AD 泼noHѝgZE`(~Jvr_;\x`'Sۚ1+~//߿s _'&vkU*T՚0CTmZY9 Ϭ\LDPJH4%5Pnɷn4ՅK1Eh)#*7 `?Y5yX{(2adfhw)ّC f2^|K ybɭ*\sThhd;ͰmjTEa0#]2zMR<}xd5P31?ƢՓ'Z ( JӥWX_CI/`bΩh怡~:U #؂`͵C>xbx/{e͹+`-I:($ֿ= {EŖ0%箼屺2ՀY󬄫`@n)/.2T 9?@9^>k`=*Pf =O lT^RnĄ;oxX~N>#m :w;?ih<` JҺ6Zm*p2~sYSriEpa^ _{_;cDz0x '8-B_?x+!i3r!jM 0e)1_St׆`O6 Jj0CVP쾫+B4u^pLk,Kp/| Q* $bmH+ hJ3 0qS3 uA w+s=>|zc-ʸ(NLY~@6r~ʍk(U*wŌiK:S[SHVFAf ױ?$zlTcZTΰ 0wV\vaQ^u Ł v gR:B.Ny Uzc>\8mI:E?e!jm`-%)3] V!>4)of=h C~ #*bKHg}&QV#}/D!)hc,Y8 gw4g1U#m-M/#@1$` P^b3'`"}b 3Gf!X=cͳ]s^M2 `- L!5?X-wAa̓8Sh#; ;108־܄bA3?jAX\~C<輛>GW4Xaҝ/c0FADla?Pv@ ?N_c03+lv=n۲c+LMXe]R(N»He9S[14D Uf6j*31{6 2)jfI_?a-o%|D Q' v7IJNB@mN t8n Pʮ&v 8l0pb 'Xz^ |50 /0`$t9T~F5b̙>mMFJ}?xl=zz[xK;nJZrFջe\K~U"1$:^BR@2ӺB(BS3@gwծ :0'w_ xpx+,🡦[tMA  EoK{.6!kۂ)v&3e%cڹ3C֥pl;I6@% zVXbH6A*#0ȎuD3%d&[h0@sAA~ZBh9`9UyMx f07 RBQERQE: gP^OtXJJP4(!cDq(1Ԅk!#QZq !Gzѽ1Y{P p0;i'f`^#%#I #M43X=&4iQF@mTzVƪy!8:8B~Hf>Y< nǨ%D !"YB (($ (!"(B$B!@NUƂ6\&#k.s P z2#y۽ K|3~{+5=nniW.Gkbƌym:$a`ǩ[Iw$"4Cݶ00?< ~lx4R1`gp NmTPq J[v> :m5>_89-@{V/v'u5 0M (javʭ@FK,x~T9OOWUeG ;pn4+tRܿSޅTj^Xp6tGRdq_K~y`xV"+~sDK$1=diA(:dY&wQMk"}> d|><' T]:1wg~]hL|ZzQ&+^+$F #`[A€ ǓJ_H_)W}4Tc? p,HmgLH~߶w!dnLv8,'dO(:_ܫw s6o6Y l`S3(g ,09$g0 .kʓTJB[,$5K5w6:wŭ{000j>R%ݿC5.1/kÕe`μT*Y1P %x(S2ҳjZZAxd9GKdA_XJUZZ0gnV5~}5ݨ`4fPdZ* Be~ bsʅ@?6QL/|FًE*-@$=wB2lV]1[¾Zy Zz1 mޜ":aҼtq;`8ͺqVvZ?1+3fA}~쁴,3v1g  ( "|ᄐR. t LV(iq&* DYB(|f `3NT yצ!,O`(e#-EYFVf0GYܽs/c A@`W@{J cNسO=I1|^DY*-?4t@ XFᲪ`Dq RǂiP*5病 D`'c\Ze":fc{b-vm֏v?b:0Pw0ւŧ\. Br9Q8#Lsq!1جb)(ZaYZFdIW>V.KU)Vq[n!>:rXΈ#t͛~<#?j.z ??jɡZ`7ct`O^DM1O@n*}FTkAt ^tEk`"biXO]emI_,Gك.ʀ0kںZ9=[׿4P<(@T &|>RX}Zh)UON}?Yd0{)@:uOS4u;w};0&miRd*Xs~J2K 3DzVT#@ *;~$1`p)Da_8^  B=Տj  ^QI9I$~\zC"?p܋ocڂ:lxb^hZMM>/A3`e` ֞ow/\tCQ $!yln<ҡfoxNL?LE$0e^+ZgO~u4UBQa)&@ 80&jCfh iɚnk%Bd.Z"+Z ۹Qa6toڂ`H;h|1 8(oGig̩Bp?vmIDAT|ZMW)'7j-3suFxgM۝E#"/YrǡGu(6O{4@U#!i,cv{(jhׄxDa$o HD9_#-R} -  Ӏ 6G9ʓ=7fܷOZb-@/(…CA'34"=WdE~vij$ad6 C\1Qqe=n:?T?RsuXA)c}o]+]՟@%Y;}N% |IW9ZQ,3Jn 't^ڻ_<4=T^Z-~ Hbse 3۟Xw;d"a"6ԫF7՟^Lbgͧ5kx"Bi77cڍ:I".N?pTb(/Tx,S̈́Vټ ] @ ~䒾 TQO'.a4u4'A` []`Vly8n<,]U`{EF">whۃh&N>V! L?*E[4 O^5l{ne@~t?cos I 潦?ߪX#l{E+zW`t^a"]<Zqx*g?Ze~sG*+g}'³+?+Pr(^4I$R ^|tHRJ"×\_YFO|CuQ |2Bhn^so;a.lX{ ( u(wGjF?G?psX0}~?=8JhZ`_6u̥K? T t䇆vzQ @7sgv=n{+ VYgT᷃." q`2.e5_Ntfp !$J@Fa<ɿh?ߟ?ҔZ*Aiy Qѽݏ݆ݻjdPaCԲMIXMa4,mԠ5A jPԠ5A jPԠ5Op2IENDB`qstardict/qstardict/pixmaps/go-previous.png000066400000000000000000000241701453553600400215310ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATx}yUw{l ! OApaX| ˠ>y83oy EAv! ٺӝz{q֪{; pܪS˭:[Ωj.uK]Rԥ.uK]Rԥ.uK] rnl:m?ym ΛB-ʦ]Onҧ޳Ɨ+D_.K{˻Jnܴ,[rҒyS2!"@wk֞}*b/PkomXzMW1i И Д ј1RP0P+@ YzV4Pq\0P("2! G0T,cTFT^[._>~RW0-YK(r+8t "r 0 E J("edC\4wpR,Z{tƵgA2X}77Kp G)hz0T(aPm}*ux5oeH9 Yӗ󗜆e= ڶ{O>B}]+n—8K # 8ßcJؾmA POu mx3x Tt o|)g{ NCffB|w>sԢO;r, D(VcY,c0!++Xz-`RV ` 3[u磡^:-DȮP]Y|'͐r!s C8w%.sOqsp _Aē^ ^}YWeX2oi}'-zY"0G H"ԃCL?١&Tg1XJv¥g<54IXqIČXW{*sN\"-!>VexaO#Xfϩ}HA!,`љwdö8$ct~gxjg8GDG`Iz8Ѳhue- >s14PPcqI 8.aYlP~>Kiy\wgbaxjgbY >ܼSqB2X`D!pX~y,%#MCel56O*gbUADu8dpt<)o߂c#gd?~GcIXu8H`~N9Yx+O?^r:xv^4jjBưK3/ ׮7pXQAW-C(# ӫz`*ի%f,wq,@G1fO>V^ԔOVBOm$u5JH@:T/*203zp4 ;n|u>1VTՏeiHv,`?CNyXz+$[ y9Nc~ĖM5{ح›GXBf$^AaZ|MJ_p2XZ 6ث0z .<6ZtF9$D2z ȢM'q㵐|`^㏝(G:+5t ԩ*_3+Vd?> Ȓx:3x3r6lk{PjWm;|P5gs@lY}ՙ/2`agq3H$?zx?a o1}g p,^0zI A,`_\N5i {|ڽqF*,=ʒa c T6Bu A`?V ~\mB`7ϑY~.|bT>st`Gڧ3R;Wקi5û:_;MU(zױ푀 SY2 ̲JfHUO VS ~xXu:fpo[='*J݈{L6VOY޽e )鱂cN:گ}thtZ [D? wyCz y=[&g,@cS[z5 ƅEൿ7|3ܹ|mo`0xئuc!TFlmҞdH}')?-=( 7UzO3cբ~.aO_Y+9662+.iJ.V f 2!*`z'&@@IgX[|"='2&9)a̰V `D<os!m>{La>[70CuAAvK֮?YM̘gx![:Je/UP=;H&e dȮo^df߹dS@ Rp-)@ecҷxYU2 *KSE< `QP')s`L/,oBG{}EDIB)`I8@ܲ$kњ]Җfb) vҿ[˅c8vnrd@͂*+µA&8Y=0#emC% / ]<;"^ܐ ~/ɧ.L#ktG;6p 8ͫ :#/X`nf6~9{JX(4feLA@ W[O^,z·kXr>1VpfJ#'`[?['4A uQ;S3.@ *^`p~d+ h`/^6ٰ}ЁV;>fS } &PaՖ |W.KȆ7*1snllo\C6+P(x]E6WћTNBh_IPz\ _hqA (r , %8* 9?.θi@8+HERjW~}N LU.jl9 X /A1N`FH\14K=|f&H aP4ծѻ0h;;i $ΜԤ rt~rz;(>_lFR22#L.Rr@Lg dQTjIBbB MD !)Bmf-\IoHޯq RDb]SW`0#[.5A3 =Og0bgݘf ͯ7h^}/jaM8rN đ~8"q$R IDBa>K\!$³f`Qyb`LG;EHԎ:Qf&=6q;n1Rxҝ=w26 nA" `~X?0,^{[%B8bJS33g=WABÿ6=^Jt T`™f]/tFIV3; d+݉d4h>uJ$Fm&PJ|S!YͤI/V_ru7'FZe? Ȅ*6G El Z!qR n Bݼi+[BMdbYZ(C0A]T&QIaB7ҹLD\Zm CeTLd֥Qz_JeCJ/RknP\XĴǵOf~`KbC:I1k%Y~J[_bH$<@ 3>姻Ƥz}D3(/Ѽakʗ.lr@@Y29œ5=P>`U1>,ܠ0L^{]&hb!d ƭ2\h_6PZkظ?؄y ɂF fMkSU9.{xu6ASPB>Dc}rT-ҔRzԏKHa^!$,4F9C!9(Ej E=XБ23{ƀk4{zAOpHNظ(&3n/]2A0vpqO> >- j^FuX \7>2tYT$5X 7(lkEu>8*`Ĩ SiR/iG5= b̘ڂ흽xO;q=2Ƒ fic3@ (76" -ӴAz 4+aN AʺGHԥߕZo·J3?#1 bH޺wMXBTbp VIvf34bfh@n/0d#c*3@ƓjI|={ yLoAdXJ:Q#4fs ]&`6Rpuu['יfTo0E^P>q!f֍HN=OYW}6 3! ёÔ5`jkå2^܆7wt=nBb)& k^l//*^N!%Gh߹QTF[kZZܔRS8B!=ע4DQ|'1 ld"}ųX|ɀN[zA"k~.7 6\_TXK4A+QC.Ds>,ڛh! B!tܦnlՋ[N҅)n%>BF _~}C+P #%Œ9KP–͛Q" 464m-hikBsS0T/,)Uع72|ޖ PEg0Gt? e>Pq+vlps| МҐAKCe^BOH@zHFNdɔf??}32Z@U;>oX݁-z}.X,{@rESc-͍hin@cSs90SzZP1 0.@d./`>$@B@BdBB BA!l ЙHHcVbFct04\på2Xz@KTڊ گK7cJ)-3̷0!(6obӆ(J@U!gTb F0\9 @d3h7 O\\@& Ȇ/Bՙ $H xJ_ùiX2D$2FIV$JrPZOj$! w‚A|cʍV豖W|ve?u݉QW@K%vuEss<];s[&/ѵ=AcFirB"\@XKv P,a,mS#H L\.!j:M0-S6s?Lf-=ՏڠmC޷nd=>X,swyL{hnj4:1@m5hVfk:~ l݉޲ "8B@)R8@NsPkk߯j߭ɮf=T_ "vܻ(݀DNt.ހ9G̲ )g`n 7Nnha;_/{ %X p>ڵXf1'r-%HP Uq^ u%>2aHSOmAi8eUlxeU,`;YRXuAZy|v+4\ݯϒm޹\;_WtK_r|,Q-'7aw Y}=mߚ[Ho_`,Rvp.! wMh7@},GM*2RJSK}v;v'siW3b3vmߍgMDzcD&zk17쭚%_9`9Xo j@.Ax@WVu_ `*O(<שw@3l=b@Af_΄n*};1R*=A"x Sǰnw!Is{\?EV`'>yl )QUvJAS =kWʹ:QO`5Wc$7z#=pHiGpÐ ꂃȞG~X gn7a1np4>}7f3#1OQjjOЖm߹[x*)_̾؀CCIIry=)1N| ("GϘoBys9١!Gwc٪Xw cfkWG\3}i T@T(]`צM|ac &Q5G%j7\~W(ēVaԩ2g0|Y4y/B0fH b<Ӹ;1Y.ip}d4a]3Xo3د.}+'޺ [_CާBfF\AC6W,>gÆ ^q2Dܮ,1c\,p)@KhJӂu>k~o=|NMR"XІǰ=!էɄ_ e;i&{Rݹ_r]qc>"`YK%wGmYZu(q/{Ӷ\=sqTGQ9PN>y4&l5Zg|ݘzLxuqy5Vo@1 6#K{({r "wp_?~k=?GhvIjg[\IF2e1Cƚ bIgFܿ =s년࿁1X2_hZ֗K?-& Tqr]J t"5 &ͮ(0}p.3܏5ڜbg}%ٷX)e`]-`R*Qx-VD+8ȿ?k/zR$s5(]7J |+Aur`O?# ` /?>Yl4kB4i_bOt'~?NOA O hv1UUWGw \ؑU-ߥ~z^V %Vo/^P0%]I.v!f.xJT0.`jV#5"O>쳟q3p\9s~'c+ߝlP|/ta\ T7p?2ʹLP [7BQ?M4.@?8^C xx? !:Ig۶]~Kȓku?Ʃ0?;䵥Z_/¸ PS\vALV$#6cf`fL> xM* g !>@Ѵ<,~|y3rJcuo㥇F.~"׬) (x+/+棲l6$@Pը_uh0tŸ :Ԥ6 ;:пi ;==cuCS&U243:srӎ/}]xmj.uK]Rԥ.uK]Rԥ.uK]jD͉?WBjIENDB`qstardict/qstardict/pixmaps/help-contents.png000066400000000000000000000237111453553600400220350ustar00rootroot00000000000000PNG  IHDR>asRGBbKGD pHYs B(xtIME & IDATx}[%yW̜޹K.]iѲHʢVQYH AHބ<$O $p @ "$҃e9V;bI)JdRDr^׹9?}9U՗33ssNwuwuxo{o{o{o{o{o{oqg kPMnq{!"f~(9AဥH~3X1QBX1PLJaVP ë3)2x.i]3XP< @k]=2m$R fV>AJ4%k2IbNtVoW_ OĄ6dXo%cB4j1KrJB9s${mbi= 9BRZcJ1TH>  ګW};'pj3 Dab8B);?!(i <FlGDTء*~Udy['/ao'6 !?SNND)tu]ӾN/}o!BcOn}oQ{3;OB1b:<|?!w Gx]2B(vɽ6uO5IL̰q) .tHP0 p(ޯ}k8zsv'ҤP]tUkK~h&lG쁨"GjOw`fggꫯ_">Ohj2Iun tukV$eۚ"O ,̵92bb"LN<_|O=Jա=ha8R;8?/2R է8?R*4~{ F0PJݟp炀Z} *Y``0, -p# ]! uTJ$#X1|`HU*ڱ~}מ3-dhUf3/?7\_{g{< fast'+#hLw [^qaE#5웍TC~MF2+\xt2N3a x:C8FU9ϖ34K/zŻ'awbl{8V (nFI)jDK)}ajn0T^c(N6jD]gbIyxLJF"y$B?]|ܵˈg鏸/ڝ b$nvh]PEj~cWxt5bK{P|gU:27#?8+v;ylIU~. N8oqi%ć7w&+=#pm,'' VBHwn 3Q{4VRF;̹V{ N41]'(^88qS \ݐf=4. 8wVq?qCLgP* |U+;TSoC! 4# /be nzy 0>;LSCǣ|F{'=tŌwעhd,n:~ ] eJe{KGjX(u='nW'x} wS ncnGo"㷆xH /aܹCNCە(؊PB6L[*8@[7$^:5L ] !wȿ!Y?R T v!sf`-HmgIW/x:wfcK>n_A-pd԰aOGFhd2V;!:V\X pu=H|7S{NVM =MRdP'|Y=]Nx +{x:^p":ۧ+Ǧq(Tmk:ӗx|/j",M \1 nT]1p_/۶k (p(7|D fV{|"9{`w&5wk5>p|8>ސ78nR]쬜 'MHbmd\W b8(U/#'g *{ojknC4j 5ܱ??'[xB'VVn]͉W)6L57x:b.( ZxX~n(| ƯCOJf<fZA(y,馢 K A<[ܔ\@հCS?ӆno)K 2Mp%Z yŖ_wz n*i* !RǧK;HQ#@pRND89~yTcYEbηBƹ+f*ɉ|Svy TVFٻ*t/=O[\ZC\( P&ya`S7>?-J s^aB*6G<0=1 UY!,XU*G9`hgB2Mw0%ݝm w9:*Pl%ae5UC_J#`f| ± ηO=ww!̝Uo*fo,F;Ć1Bf _U8q{'U:9; 'կ4':;PK+!ί0\\eܳ_&Ur.8"Xȱ7vƚPJQAW6Kfշzt틄νba*{'Zp,۹(fNJ`eöQr#6BLLˌi\pi 88?>uU8y^؇^E읶o \>]N!dx~(ΐt$*0>Xe4mCЉ)x^!s}JC1ɠ")s Ppѯ8/N (|6mw:˜1F)n(=Fp*ML9 $4΅MPq趗ђ<.qqq`$с qtZWJЍ $pMmXF9%סyJTT\={m !& T%5On 1mȨ!DNY&^" A8wuhXl @w\]gܱHxs1q>>z_{ z*Yܨp.d$yA1MھRUvqdABM\nx w\ܟyb(SdĤ,\#NeW:QXxk#cw =,. Qo+CkC 4|[bם@v9EAn&$8mF 4:0fnǧ ;t>>"owK͐@M@5ckwHY/o/^ jE[ǧ+^[qTTt8AgY@=9e Zf@V _D6|ϴ?:5`O;ė` ( Ґ@ &NSg痪`HNXlS!f C|E\qӈxדAҕ* ^`TuI-=C7@? SsmO~ó=|ѫ{(`Hv0˖6~}y}3d>9{5̡}'O6*dJ䙔L*>v 4l8XV c(#liSW6n[`l `996J0$n{y)*b: s{0duݏ>W7~ٴE Ѣu\YV]AJ^BWy]Tkr.$tos H {Z~ ]JWqȀGPr81  :畮[CrYw!{x!˛:D-'SFgp.h:p0@F H wg0PEL*Vhր&cuuyWEQ\l\hK]e#|C n# (#?q7 6K-`K;ghAS>1 0̟ȔxJB͑ǀOOK^0-ScܾT UEsti1CWj._ Ruc>4ar}nw 5y>B:^mЛ<'oe<&Iz3N%7|G#^b,M+x(739EW-hz;3H--yJ~!2Y{y= o @ 4|6Gk}BZa,w97wiPN"įIHC$XFp (nt0;~n _鳣.@+/yDޔ0yp [u`ݱTC6:7dt>HUz( bK!ъƳ1kF߇!U?Uyn=m5ouF[?}㺊|@ǘi2)]i@P!2_Q[\188oBҿ8t^=$|`iqCFf A3N ;e +<ڪ.+30dd#bf"l ut_dβ[ yܶɛǩ}s^J8mLXE/k a<; &ǵBg. J1.F YI&l PUL F(:ms$0t%< "K NZ sߕuYC&  0ی1Gsr! m{柇`{m=/$#Ch'MO0#%oC(5mi0TmK)kAW K$ tiWQGJO)D&S lɟPUț(jㇷ9Yu?&x0٬ q)nުǑ QFfģh?!+ל}5?f#x4Ll-զIP"y/s׺ OB)3E[-e>(ݯXM (}\Rd&0tm3"MI.a#Jʚ̧rvmCD+#q4ۤ 1L/(p v& klojY7K86`a4f|ߋ|aC c1zOݵ6:?HR鶡e&KfG }y=s!e=Գ5zq=IDATmlFRƳg;.(iK7G!FK8_;4RH=q P]Aj_g~FbAD1boӄHr#KpaN@({ M /HB5`jbL8~ yVټ&.O[TiғhA [QT>8:9@1Mx FYO#ִam294ݎ2I^#`Mrr@#FD,ٷr1ϸ5keLg')<tE3)+5 #Ipeh\^`T0c1ӓo`AȢ(ai$l>a(veh* Z3?rCw< xMF:ڔJ'#QO Ȱ^oWz[ҋ5-y@T'JV^?OvEvZe뿕 ڄ2Mh"tU?w/W 1D&Qc~CJaNndDJ{Ѿ*3%j-ڧl&K&qSeD(cqsT6#/2YIENDB`qstardict/qstardict/pixmaps/list-add.png000066400000000000000000000153721453553600400207570ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME # fpIDATx]{ř}y?5#AQ4Y%p=Q1l6FyqbA$&ٳwr4nr5FTD bQ 30v}}uWW;3SVw}Q@JTD%*QJTD%:kΜiDt:CdM A\c:pa"@@f̌_[QJM&6<0;s ^}.b3v3/ђq-a2"`1Ԣ>e6R ;詘)|o>aƵ ,96Q OԟeDo2a14K/QI"3g 7X QFb9g~O wl߾$8kNDa9~ @e@;v>ܓ%Ag~ 7zMM5ЀƆF!H XD0883Dqtvv 8T@;/>̳%Ymm3%}\x&Nf477eR3<:J#bŁwBww0$󭔌_ߍ={@2{@ /~,5.c; /<¬>Y>9fHcؽ ߡ|[ 2U۶m@k{ fO³ =lΚX,™wVSh_4ص{7^}5{c~Nx޾XPa٘ڊj:DGx ~uzu  % l +s#B+ 3ui8yK `>&Ǟ^ع{q=R_$ X'r {zUkjjp…8yʔw&];^x=xeU[Ǐpt}ヒ;wرcVBy'cb_`Fu}㿑<}4|ҥf3ҟSzp/~crh3RbH;,̨ŌiۋN ?u1|睧͟X5kra``_L9P[ƳGtuuzꩂ:KiJֳ֧j[X -Xi:2W?*_zR柷׹jkqх1RJx\U'8Ւd0TyȬp1c/hwb2{ e$ 7)XK y'553.EC}X2XJ0RJHcl]Ē!%Cr\?wH)쬳KfcE)Ri]{X,>E-XuU;9ZZZK.A"Qfa”Gt2>}Hi0=dm'H`cĉ1XsW\w\@&R9z*.XZ2˸HLEkYzkKK=g/S/a)Sl2N\vjh[B>JD1JϒY=)'c޼6)j+ygM@Waz0-YGHe˖pQ"qh~IhfX;chE& #:1mҷ̘ڊ 'MA|Ĩ#vN:i,iY.ѦV]^x18nN}27Hg"9R֤Up Wr*vZJ;3քK:jPG1qa9zP:sP1K"ΞJXQ!-*'Pl7>ox;Z꣏.. \ЃY:{6b&{ UW]U; )btu6f$jjjɶD9}K%&OAGQA-Pmd$2Q2 4Vuu58t~ Sl# /> պL?As wj>>j 쨷hWk"̊,NI'iCjҕW^9c@m(cqj" V3gV&Hv* i<%k+k{d7AJq! aGKg0<4(3ҖvdQ2s+vܡ.Zd0fL}r KꋆHޠƪ"7648`&3&uL H3A@% wB-#u0~|zsQ@ /_n ?ŠsTc8S1)ӥL ՓvX'L9bf[aͺE,6gn8;Jɓ'ÿR3|fYUe~6,@BܙQ;' %(3:]v/;S9̈vSp1@f]w"MaMcX ͓&|#M\2,'N.<5ͪ-pUmwęPu{~3~ðǏCYYYEGT$prKs .`Ʋ:\5XEXh]c ĞB%HwlDZ8a"ρ&_(,YQyD"1cxjt.kOjy^K]2F$6 * s1`)Ѐx<@A+WN(Hø@7D[4(ѲjU; dzV! a5:q)?`:ZRPcСC0̡kl* f U!dcc7' aCfxA EHp 0+%ЈÇgCL ZF/l764 /l_͚DPz!w&-f{%-]n(q (-)ls qa, n19S0UdA p:AN@t8o^ͣ;Q^iW5!dT;5 vnCY\=T8V`+W6E&e(N֦Wttv[Z&zrW .#ڈj:yo"!3uXϥt;C!lc)MՕp>r n "i'^ փqrCRT }lv^U5ftoW"Q%x2 Ov"-q-7Vi °}zVC.r+9̋ `+*+-$tqkLM g&Ҫ "!`xadYy9l!@s4tٲSPLXth|@XðA,AK6b1@ ðX, 8~7pM z'|<`BhA2!db+ j׾<| $,sҙ+wuuufxo߾T2)94tx8vӞӉ1m4-R;֓!_{g(L0ָG-۵>Rd=};9+ޜ0$iԎC"@==i3uF,%zzz"c 6gV>Q#ؾ"[ea^nE4mQɡ$; i9ӱc)D3KHDgg'*+*PUU DQF!&Av;c)BIA]eŋ' ,< Q]d8z֩v?L(X46 wfu) Y rs( z\8[$O;(D)^$Jt2E">aߛ)/2#2ǔos y}3a`` [ ;R><|aYhry ӝʊɡ|Ëav(uWD'rr!_]k +?aT }BfWvv^x~{ah"@VϗZ "zC;;64H= 8~* f\a^!z-2{ ¯b?u֝b a`2޻*": AVvopr?DE`݃Jxgd/A&(HxXXG5  KX/&ýODCXB '=  4ސ9v"YvBUwFu2WEk{$:J,Faǽ#XQ+eºBlɠ] , J</ÕݎX/}衇 :8ueY<u>3!Ǿ)'ni- ߯[V-㦓`( h`=P[(#IN~ D0v<:X &=GEGB7œe˖DUփ2r rin "z;>*Ef 1][(ZZ@~ Io /% B9Krќy"WMZW֬}G~ayQxiֈbqkY-/ؿo4Oi~3[լӬZ ]s.sͭ3[5VuºfUc\*58B.|`=ؽIܞo~~M=Гz& /n&U؎Sv<z? {s[iIxfϊ 4dn*vp"{= fZ\#oX/&1cӪUw@ez"S>v|xREA큾 6RttX߽㻩 憺߸FF|7mڸ@`lj 3@D5/#=<=F "{*2%ϭ073w2X|"rOBܲuo{tw-f;8`<~'!V]Qxo|R0 8/@or {0 $!Fi7 ѧ 11<;xsQٟ}AyYEag !$B]JeJjr(J@+{+[Cإo+Pge)Ie|~%-Orz]mix|l0a5H4Act 2ӔCɃɤ}8m۞d7jT~ڑ U r5 LF22O@AL "naFD.Μv18e:ޏ^wh8om?lVS!_dFOsnpQ|"0NN^k00!pO{\BP !|"|l{>6=z(c'B2SDA"LB/-g #(50y!Bl ??~r/, *pa.0D h=nboG$JIENDB`qstardict/qstardict/pixmaps/list-remove.png000066400000000000000000000203031453553600400215120ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME #E< IDATx}yx}$@RD|R_qj׶Vnnw[{u44i64&Ol8%Qmqb[-ڭ[)IM@̷ `%{*CiG:`:5k@$v[pPY(3>Bg>v#&[l`[`xM8f7S*$v; @`EqAHBN/#Y'b7 2򲹒Rt ?s 8=K3 !t䄙iO@.>0ˉ@?v|C%&<T^5/ϡ@&Sޓ)0'7f:L@089t9"Ț̫&K o [o&m*/JÂA>c`s; o](1=GLɒ)5P~4;'28bK2g/="z~`髊 WIJYw?L+;%e.zϓ\Y"!fSnUAK 'Kk~6B UG#]`?' 07b׉G )Gk@$8  Hlgc(Εhj|6f^sBY @bfNx y?ʕV@JP@юfb!ee:X'Eƀk1 Y̾tȈ']w+6DҊ&mpu.)&7khʠ_֙ `1L|%w|d0h#e} Ÿ֝'fQk`n4xW_ 5*7n@uG 5ÿy>2u@yaM!=G,, dԶ{7EoNC :1{ٕ>kB(vf8>g0R]=ug1^ov:a@d*^JZca:ƦfS.DUSѧg?\^4mUtXtPtϽ A~|c<׏?0( {b(qMߟ>dL@e-`-Y)D4JJ`ٲdhL>&*byy~؊O]ukӈu;&0>Q5;hۉZq؁d*nj@]wCi47_ `w4xfWr#TyF#˵oR~-]nmT_ukJ}&0y޾fVǝ2p<~x>K)?e5OJND[T P[)Ɍ~(Cwjuu(ٰCB=8X*Ӑh1#Gs |0l&>Tlg.!81Skܐ k@m la#J+M\Uu.R~Pxgކ-E*UJ([:Rd%F< "DM\ D%H pY,4_7;\:>8qT-̀O`;~l `:АV@ɍ7b/8vӘCbLwc~-qKԤ |0UV}^Xd]._=!Ѽvk@EEPY|(`ʗPS ?Z;_=VנluTq>Sf_cw&Qx?1O]̸><ڢ*#|3БpUU``2Oc,[[3?\qqLcn0^~|U7&y|.H/`n |0U+A+'1Q@`-CEMMQJ8==3.#jtT5*R{g +{4c<>/Ĕb{1rA: V*ޏ/j0ajY.IsT[;7e`lnI8aF?嬁/#sCI݇twyo5(wNtd |) |1M7Cc#bf>tͪksN InyT ja2`^ԩl/FdCT $EIЛ#'NOѱ@Vwb/<ܣT#"a` Y8d)\ema! յI*{k\ߏvAL ><uU(9"Ѓ}x@Y{[R2TV*L0껾6 P0< U2;:V^vL9 O9mWjnnFǁ(u|0WVI3z!Pp@g*h֑1O +dлkgnI0gQo**aknPl6g#ۖbk= bJ ^vl/.z>EfRQW9/ePc*WlRQAR]xye5C v*AәC;|c%l-j_`-|hKV>n[ 8L1Cu5g$JzLZ>]gJ6l:NwNAl|!+f~Jږ+R^wyq(jy Q&._4͞VlM(["ܙC%P9Բ.|xhNR+4 B!6dH<d;"r;g[$j v@r::رޮ\`HO`v:s.l)>& "|f3H@ 7fz*.C٥0idk{htb67iAM11VƑ.lmIZR獛ZL}i <e"(٘}/ ~zwiokq&^g( SߩHLaJ_"2i-AOi aoi}~؞%XT𛛢v\c|F BHt37X qJj'' :Uax ;`onT\ [[`u6 aTOFW$x LMBky8ÚT}6&s89  PQ/Z{qS}2߇Ѿ7G`!wuzct_OM_P-y*E5; =67I@CkAYS>zo[RJNX'4V$Ԅ[ Px/q5Z"X?6 azi,\Y*ID~,xгk">/X' rT.R13EEMe RoV? atB Ie('ugTMU(kSޮ.!&y( ֆ:'%MZ\81^ g:`L}&W3Le ^H^ݷTÔ+^|ٶ/O_;aTv߳PŒacDq1k`E1o&J:(vOB8_~o` |^fGSȼ9[kvu/x0A2&HZx_r kuϐT |;3%H~YS=Zܩr$D OXqVl`v|>~e9ddWVe@ {KXƛ RwM$c َD^tJo>ŠIJ/_!DpDq&c0av,8R*Ap#ގ={s~ƍh߷_̠[#+yQCA,X(J2:X:@oRC8$:>/D9!}!q+^~2Lw-& \CqDNqPt泂M5"YrgybP/" a F!䟕 kCǡ_TQ(QH}0Ax\Ct?@p8 8K|߉3Vw" aݲ Lq3>ȅg2dFt6ۢJ6~ZTbBM13<<ɠgAxd! dv\{K"Y,D" !<Υ܊/PZzY2%?js0=4$Tqb+h0>Ppypc}Cq۝w\Q.gKLa 2)ǝ̆ley0F\Ò{"݄gk@r_" jǵyWFYD 'gpcnʼn+> CsG$&oVGIK$8C2Y5=8O$v\pJp\£C]v\/8~D6Ԋ;ӟ.9S.7fJ=Mk udyRܟf@Y)X!rsvxV':I#}Ki0]++ Dj`dlc}.5>g:ޮv\% `5$izJ;}i=}7D]SDY. w_u=۶gܒ`Yl2L {X P6 ΂z  "|~]P-=$?s 'ѳ}x,z妲dFwjD ɖq'F)PHmx+~ _櫹۷5" IpRf…Y#&l.Ui/&\bAd94=ms6z "4;u>=`*;.\ Hnx+>}XT/ z]ִA/UD,F`j@62?@#,:ؔƳ~l1 ɓE KivFL7rݷl8H;NY>;>aF#Ǩضmo˸q`z`PqCq1;夼,VZ؛`mKȣ8S5YW1).JL,c/(@ۿlqo66lu7֫F{;>~deOKZ(,@ҽ}~xsf3V9mޜ[%jikVf;`oZ$ЏL ! az6g<0ӍA$.J/l`=uW$VX[ 4D4\Hnf`0moĤNm/~z8;RPQW~v=9z4dF,egd_J8?NiћK6Ȏs}[|CM SY u7K~a^ r@\O}KI6DunU9'@z&YeS{}Y#.HZq%, <6?sϋkpЅͤ%}N5kIU֜ ) Ӭd @i#%vv ,g྘n5kE[ , كֆYwe/(GUi1L5V 6%fP baxfdZVĪ+" onNNSRh%➹B,b(.Fi%_nu7j#S >_Jʕms}f_r~{s~UzҬ֦ؗ7 0qB \C~n5+qjoE#A ~Le: `P]6@g*ҭf%Pվ"IvgGO?Ao XobBJ;n#4)@`a9<ӲsZV>ABɓT=Do9W`q9v;PRe e q:VRf}8?_L kc}VR?X(K9~ ,||{d, r[@!9#~UTWG89Mj5 ħf8_} ''Ã?況[VKmݛj'Pd?QxM-N,zMh01 f Z| OlcA`ғ|Ūb &߫@K?' 3)? >|c͡6g# EzZ3 OB~?Lf Vv(=U䢿9!Ȗ{FUc\ƌŏ G!4O&r> /l~_ 'q{F01uvW4b>OYW>TsEߑ<?ٻ. or{T@֚/Eu21uDԕ?6 MhbYCK-U֊\&]޵@+?a =U+Jͱ{߱Yu=@|u%6uL؞7`/vvv/>-I/ld׶ρ pUǞzot/l@10Uk׿.,d鷱[n9zm@B-b{=|+ rk2'< j uxo4+q` A\v61^n/A8Pi$ help-contents.png application-exit.png arrow-down.png arrow-left.png arrow-right.png arrow-up.png clear-right.png computer.png configure.png dialog-close.png dialog-information.png dialog-warning.png download.png edit-select.png go-next.png go-previous.png list-add.png list-remove.png plugin.png pronounce.png qstardict.png qstardict-disabled.png search-filter.png speaker.png system-search.png view-fullscreen.png view-refresh.png qstardict/qstardict/pixmaps/plugin.png000066400000000000000000000021551453553600400205470ustar00rootroot00000000000000PNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDATxڥKh\U߹wfBlӢ5DGغ)]TntBQW"(Qҕ+|ED)RTcSd&3ws>8383˟s.\bfOAz:Ą&rl**so-J&<`v_uEqFo47_TMi76:\])Hi1kF8^6#h_(ϼ|J 5×'<JXbw߉k}o7{cNEax-P67Lv{H! #'Tw6"^d"&v0H;[‘ sCۑ8X(_\wJ2n7>'#IENDB`qstardict/qstardict/pixmaps/pronounce.png000066400000000000000000000036251453553600400212640ustar00rootroot00000000000000PNG  IHDRw=niCCPicc(uKQjː(",*\DA,[+j+PfABMEAmAPڄL窠|`FZ-3p-GV7:/ZTP(ȿcx.<f^X!7 h\Xgʀ7JUUqʟ8UO-fV+<3\ iKR]>6\\׵>\5%ۙL9tG:WY9{-Eppr߳ 7h#" pHYs  ~IDATHoǿwޝY{mIJl(mB# R"Db 8bhCRUjB R HںEN߻>ݝ}̽wW6 q;i5s~Y~H푛 P/w c L-|>; 9h־[$^DuE)E{k69I}F[.|A__ m8چ׉4;Q “R|>۷yB#2o Շ~qe+hKaeC!hZ~(3yxѤOm;äaz'.7K$̭cPfDZguXr*PeF|04FQܡ{jck&?TOȤ9Wjyz|EZ >QJ>[0u-e0sZuP*]nrAjA~n?bsuWu+kSHEA6oXO{S!:%UryA_(Ds~Apl R %=z'΅=Ğ|ڞ9ң(Gho^XlWDn9cRZU؎ ˬ\ d[٥I y/:߫K !eޒO(% y4)r9"i r h]ry;dF^mv?c|zkGt~m[t,QJ,3ô,%{l6x|QWP*7H"%ggy{q%V[)m&y*&SsAQ{z6CB`|rh^ERzYYKSF>˧>BcK7| GvVYre΃L΋ͽ}hhXͮ"g01y mvx^ض- mU0 H$󛾳)y =':tP'?y>ٴgqQ=]rw@Y=YÄa Xt]har n 9/bMqO' ¢!{>Fhk#{;-~K_hEb E3$4uwq|Q-*,?ڢe?!< ¯4-4f(iiZ؞A\lэ#ȳ$T%bH+vKV~m7G^eO pZl):AfǓ :Lg&@eΪYUt+<²ςt' `vg8 wNB@S술wE4MYbkƴC$J6c< zkPB 8c}iꮹ"ͷnvOR2 Px+\)G)o0P\i}eZ0i0Z8^2;iĀpD( <"U:'@05rS&/ ŃQjgiSpvN?:k|he 1Vte4(222M?9-z`Mo *:ZĜǾ4Y}ISh)ȍdH^Qրk(DQgkn9Mͭ!>2jV@8]8&pC AG5*j9q!KVܜWroyy3<toF:" gz99W}W^,kiYWa hqy.ůS8X4 A(/q£tQE+pM F1 ]u0kH[Ҙ -_iָĪ/,6',ggf56 y:K3;+n*0XMX/YPqp-2.W?Cd,f i3=^~:98PA(VFrL\O5_Gm&6{X_ИMج5`-H6G)\Gc26jW\ U #"b7]60 2ja p1?PnsSblzBgрՀ j@ 1`…$6~ 2j% Ȓp@[pjɂTZ^ S602k U|r@[U5j B8fRD`XڧaC]D<11Au!moshd<BD @sX] )K[-CzHZܻ%6G HPmi1dnΎ8󢦰/c}Lp=nqVZ,3[u畤MmI#K# e[lqDAAFە>c&[c&h%ǃFPX`RHÛ\-ii~7Ag*qs̠}oa?}k7x6gTSQ*AbWaa|{STcO:7iq!bL':d_]<@x ۼ`zlQl1f 1IU~[Dhв.D3PVҝ?2KiN'6O6Ø_Yy_.%9nzM9jی/^r)PG}f S{VMI[ Vd:(/pKpů熌صr3VʟdkGA#+Za`G<iS-`" ^ fs*@; ٦Sѵ%q>12~&Bb#CSGzD4;y=68-KBdC H (('3|+z17JmT8 >aBW*-K}$ފm6fsNo燞W}EJg3 W\k<9g 8JW>bQ=h`;Jꃙzdyn3<%mk.sucKNWy ؋N Ɍ#@D)GsJxxނEEJPns7DGB#qPfcb}2CCz'鶉k[It! 7$^?0z]=E"f[/D0F"ͦ^4fB#"UܲjHDWm)̎ӳ]` Lowfd졐+GB)KZW)z7B8E:B$ I=":Na}5z'qRn_訌$#GzJVU\,S/W ( YV)~KءlJYW%w<RVݴ3=5j$[Fj?{UV"S uw*]S!pb"-4 -L_!MH[E().Q11bu\=[ 7]@Us ;*bN5L;7װ)QX]p >}I'oD<7m\f\+7l])QT`> SX,*$>oC㪂U~@prnazK22P}s\6}-׊GJ3(-&ŕzx<-A&ԐgJ[|u7k ӏU(-Y_+)toBOL*qUe(>˩ƌ21) KZmmGZ' (U+\͓lNKќc}?ͺSQog% 5VJ";bKZBD>i ,Gg!6t)@(UzqY ]T&D-mv7ȂOYdwM}jպ*Q1ꥂ_++OB 3#PSE"?Eo} ",4Oh#uw*wL'J\SU =;"v{]_?]4\IENDB`qstardict/qstardict/pixmaps/qstardict.icns000066400000000000000000017706421453553600400214350ustar00rootroot00000000000000icnsic12PNG  IHDR@@iqsRGB^IDATx{UϽw]!u$9 %  T!TQR TQTP*T"J*RūJK ģm4 (ƥ1uH&~w>~o^GsΜyo?@:h~Syr[yF9RGK㓭#~o~ף^הlۙw 'hT:N5kԭߩzNW$zk Z!yڵ~ۯ#ZBjn߭Bgnr\-b>cnQdk6>mV8/a:[u!|zˠv-DГuUd0L(wCq}Cbh4{k;z}b^948Cwڳg5MwmHcccF'0,n=#N4AەEݻpw_ݸ [:SmΝL(e(L/)%z? G/ Dž;^>Se0ҏ?ڵZw299E'~l `XU5nuaIt Ik7r]/Cf~-dolL,nD4x" fDT~'A^ʉkV6<r DDH6}R$~v^( Y2Owb16{Pɺk@4}o4y'sWآnak'o$2EV态Xn 9 nms /k lߜh3|a0i-Vu/~tp5tZ1%`S NZ t(7r2&p[&mMu-WNYɜܣ()Pr*3:z2 EuU8HxaA<*)!vlΫSɲg^0:F# U$\[P(آmT`) P B9Uߊ00*#O%JPD(2nI{;pa :eNi.r%2[(@ &eV)pevF ^[ٝZr+8 \eW['TU\Ϩ)/=%NE8s;*鲳Ṋ1+R2kM x)I##\S ,qQ $25:̶΄heW\_%gC; ,K2B%낧^TWɷl[}z2FTbA+o=m.$:77g/_CGno{^BapǘZpY(V쀪cYk@ixYGPm(ƾߵ iћ>qYMNܬz|mx㞇w~ξ؁K_ں+>zՄ_R!'85຦@i|LԇGBM'5>ֺ;`aaKOE 7ԋfoicvݟx=ޏX{ !f%tUGUk?G->XQz 7\UҮe*o ֦vbk(r:#?^mޖC=C)[M;l0$b ,3#9qEmko7=w7o>ZV8/ Nj V$ou"WbJ+Q  ` p_̟d?uַ[:|7d9r 5RGÇ#"°Gr.z©e'^|³Mh~Cp3gV;Wmof ~jX'T]`l%.#bQ/N'+ha6Uynsz9me/uL "X<:wpHT5T9EE/Ϥ4vh ,\| Ψȗŏ#(G LGQa(.+yoTgkWHZ7^>2c : \[>p/tU1 J`"@OS2f5MS:}5>NzHGQP|8!:)apY`(TGiϩ|VoɒL]c[ F:`d4.@=5m(P&o.BO![0?o{ߺ;?tY8#+vtq>W9h\%m7~ضngNّXBC/PaYGE@60 P)JFtmQX$*@aZ{4O'/| !/S)bG0 (190F=F1J%%-eJJ=pw>o5]y~-֙!W6RF>1V*jX4z3$r*2`*fm_3;q>?ghQ,W/GE@pΨƻ6^XB!J)er|övC$ta%.Yu&aM ~ }c0 N쩌 ^6r.aVȁQzL#qJ S7>%(Q7LŢ#f8t&rimʘuIrB!-9Re9m6zJ| 7 \UuR=9T:,q#F0q$y%E|@ЗFR a',ZT|I}AG?7iMjQGҫ9څu㓃rԨ:a7J'=J9>oD~PVʨ$\!}(vAG *U2P0>Fsf'/IN&P14IHa;T&ڀ…+@m܂gL; AFM2Fy3DSVF70r NၫI{%T?8 TP5,*h *#N(GX81("PR~{r4*dLyy?Ɩ. :C׸RG'wRi8G9_r:8Z$GT:ݔkqoi_  e* 2\=QH;,X` h7X%יS74;Mvm;.2_7I0asRGB3IDATx} ^Wu޾/]]dI,ɶ@~(l2f Nܴf&6$4vIhiSx0$v0mll%!Kޏ}[{_g;[:g^{gn/=^x/{GӠ;m6䧦6;=3?3afjwjfLNO`d>[E/gT+J- ]Dgbrh{=3L}PG{.JDzOOM~cn @^l).EzKmˎd#dLnY>g2;`"o,Zfئcbd3?-Z2===Ƚ0=9΍ڕ>WԌuvX`f{ Wس,X>dxLLBdg|r Njl C^?ǵV;K NFqé0> MILwH87z#9842uw=#_Z3h6| ܹ3(%y\<p=KZ` R'MtA*y,o4oG2U}|E,qo4WtD襝kùSX3*Rl `ӧO[n%Lme]:z&tu_I(YXvbnnKmԻCe` f,\ErӋ}? }09VsT(~EgM<2xTr#&k9y𡏽n{ӶvtZB?Z7P,7qO=ۛw#L4˛?v}ai|r` a>Ø"l7k?ң FóO8;2rsnhw Ish%dpJ䳾tev9zd]8pjU^{Ѱ~EQ87&jAdx| z=]OHĒektl<]a5NM'%KejWدn 4`v:%#yBm@DqwZ%*U8'ǎ6K(%9R >&u!Va20'`NGN#Kuw՘Xje#+^&tq,LUi#ԡ69`[ `PrQNz^8$E,Ac"t~Sؽj+I^+I0SkAӸ]!U0)]v gdWɯ+^_){5Ē:W{p*{\( t6}dN^*Vvsf>EC V-զSY\3;`Pri9)\Jlf4pz2OY#]v|e%q0 "ܶeà v M+uD4 JuA@92M/A0T&vroO2m'_DYV$SQ œ utY$Ok8K9kNENGerk|lUU tP;WȂr|=NWT3w 'eFdɁ{O@ J';f"z L`_1Wp1TVcb. 0Anefy x:9oMl n>022*bZU&h/굱Nl-5@y̺pe^Cjڇ+{\Veȷnp|[MAl#Al[k `Kme)Oj!W$ZonU5$܍u~|*`"ZT+*Ĺ`?Fg>6U݂]+W*_^B/5QbC'__xogvg@ qB0كL7yKp/X O:Ȕh &r:2ȕJPriȟYřr$S v7{8/Oϝ;:^<'LRV:(O98_ hL`8<<moQ/^ڷx2Vo—=Rխ܃ Kqa]XC8 ;A 5;3Y FMÇO<"&l˖-a<p… a׮]B~_9w׬YqX} w=(_dXaik&E +2w \Au׉_Sw?w# }abK| Cf09"M ׮nn>d "¾x>~ ~ᡧ> Ka) oJs3d zȞ.<(5@l"z +?ɽk(caٶ#Ɯ@nIWyp k OH17?|[ú[;etٴiSjxSwyXn "&p*}/u#E`:k/ R[:5oEr^Ig-Q1Wm\&GŇٙkG ȁ/_ݘPɵ_O$#&qp ,|3,bd=c*yG3ˑɑĹCy~j]DRARlEHpˁce~?z8{uo|conh(los(O |h Y< &|,#jp\GWd1y63.'Ǔ[OoD7`~~0?7~%8bZ AVu QR#kDUDN/"|>—KYlU ?ӯ^"2/W«pX}oxkftf7Pyrq$`v9%@66;fRUF-5u^`%iL<9- eHXvM6g wр+XݕnֺWU{֣[vS5J! ek c_ =6\0zpukLN8/w Au\<_'N:nExrs:2ڝ9pvO` ūqo*[rg~mwakTv3HPVY5͑) 77,_0'A$JMtaq"'&XY?\lLr }!|rLs;СCe8(wpXxzCo !t|h-it.c,/sHY DGJc=_ <ʫ\|><|æ7sjA&}]NW(w`}P^w@|"NH⪝|GKo Ogq!^El=?=S8v4<#-_wua̳1nژj' %5)e `^ʖu'&9%xc<k*$sfţ`泜pJ N|t-niO}?v1:"qh+`*"9:/)׫EC</;>1 X4Vli5~ܷ#|lr)'~+v_(g 5s"JT3ůK qg^.׊jBRY4/ IwfIc6\PSe;.?I;ULR>Ho*mB61'62 FfR,Y\{\R@UwUȉx,FK^9n?I&Of-Ar42`c4:THVW]̕?_+=St90rHw}ֺ "wYAMu- P? fe(j`Ǫ߲'&ܓƆ4êU|?^5/9&Kh Dn8—vf^dGڴǿ|YFKgw`l2td"(gEa UeY*Ukd;ƙυ+c~hw?[ab0 MI)/ꭠ,# r P'+ALD J=l)Rss4n TDиp W~Cqτ'^X~픝?oj=v*C 25$ `[S"PॣŜHF,q9hFը#vOR(I+>+"?c8eSEx^U TP8"ۢX>S&R58#f9byTXA:/Ȗ WP,MvTve4؏8W=}}~}U1 vQg4} ~d¶&#@^Nַ2ع%ZLM_-x5 D&GɄd+2◯ .yetp`:kw{?(ˋ/>{68N,x tIUs5 `fQ$_,:*tj}N y/y/b! .i88F_H)F 4;f׆%SMki>'̦[M29q-$ ff `.uQ$@e:Ws'SZ .y' z8N39L߾7 $l܈Ek}?pblIPZ,,_& ER,қ%O'Zv:ItUaz&g ri\nC<.PUBH >7F JG:t7z2YxϪ8jHzݎ;Ν;]}K 6H8q"ٻ'qA۬ $̒tt咮8:QJ ``@өuI"}BMNɑ@ffOױER9+ ӣw`&ۑ0: C"x t>~8 <^n*ںϔAq8]yIQz "^N5;~+8yfŎ 뉧(TWL8,=?RkP3Uԭ-řgO\}RÔc/iW4£\.u29`Vt`eMV"Jɼp$+IǪSR1 لl*1d [>yIl"hHÚwF4:m]6r _ *|@E.M 199[^$!hz*L)8ͲbD$Lv+>9fF\֓Ι-'f ʑ*H J&pD4`;O{;"osՓ#%SW"QIY)YDV7qEImƀNH6f%"x2buQ$f.*:ay`g4JsAImLЁ%Β=bIG1%֭TI+IxFC:M^"0Вy:/i W=]:` ɪ8d5#;1 >e{( r%1Ȑ,)Xڐ %DlQUh3Tix&a &u'me)Qr1,P1)L #Nѹ\3GBL<䠜HOMX-@vJ%YhUS1;e[_fr91H/dU>G}6.( :z]APAg8]LJ2R(<$L`ɕ욾=S/ y ' f%5־ifSۄF Ջ#bXPJToH.Q (Á5u䈣FS0$Gd+Dhל/](O}e[t AmKhjj\-"eW2J+w{ @fw7(,`EKu7Ȍ#$4?G46AF AĬdY#1@LV\gԆ%%lic&%f/-A8ڟ@i Z@ A( 2"3le~rJ{t^af6%+GmA|J<ҔK62,^7rZ{׆V:M9ڕ`+ѧηct .N y:d^pt*GKHg$h'@l&xWlNe^갮QQVeK&ּnOw8 2OJIG2z C09BGNh;1مĐ ErdM吵݌TM t(.zj)TDLwh,drt^|F6ɰ`p64mJ& TlǚP X';u)j 2bL()Ws. ڠ/aAB{C$[#n"].Oe Y zA3 zȀ n QI@q4yGNDtz[KYWN6L lqI"ĕT+vf6(7))oHdezcm_2њpC4Z->7wbbbˠ*%ވ&YMz9qsT8afg31dl(؆5\nEcf$"9A uma<p¡j=LM z if nx]Tdp~?|W?n+<}YBGxL ,alPb'lt 12"Te[Z $մ*N;+h,ʹ*|bpL8 9VVYVM1LK2 ~ܻ/]t= YW CCC',gW3a: [ 33ӯk|l,>U 0^R-ZV4 YFۏ^㖉Νa?|? OB}Dw v!SDQ <4_+N9 P.qO: <=,:i,t/.\r =^ǫ{Zi\ u0"fB3RPߚ` i,҉y~+8^T&eS%uy:ֈ#Ҟ6L#u8랆#f5;,W]G4+6A[_ ؊{\<&z })@PFD#\4T3q_SIENDB`ic13PNG  IHDR\rfsRGB@IDATxiu6; AHQ&-J%j-rٖqO$|N*IO~JW*$Teٖmٲh(qnyz9}g{6޳=tOOwOLόs4a k`X50a k`X50a k`X50a k`Xcr翖V~w^~Sc(Ww]c:R)n|dl65.eIۻ_F$/t(sk]ɖ^Z0y>^e&wu4gb7t+Ssi/ -O?{TPPOMNJ"@NNNQ?uÍOq 7~,CPcllMc^ܘ SSoI &MR20VY;EIa똉n6"+l7s7C⟑LnH6R?Wp@y2؋yx(Tv1nܘT]X|[91F;EoW 荲#WM;F'62R)\eÖu?]\4Eܤd!V7بOh8E )}JL)Rc?A;!NA:vȩ /֓􅉼8*-GyŲ N}M hϑuͩ=)DM`zew#N''4w΅~O:Kg[܂E5’.94Oel9W靖_̓Ûѧ6F\,H9ll~(Ǩ}cŶq)#ꗉ(ee65:{C&%) vߍ7}|};~+CO^?Xֹ@˚|K\.۷UVULW\ Ŋ)*.^wJT*S .(MqVܙ h qkFƏ^x4l߭K裏|+se@N(9Vv箜 u9\lk.];L7>T2*87JⱣ$eg^蘬֜1Yȓ \HhL˲ц2iee8uXqlh=j7lma gME<([f&N (,Y`F>ڈ6 ˗p۷nwGtSrYYںQ7L⫯/_w,w)wdM=[[ ,!6lNw>q0uʎ[FӉ}}݈)%ni8r8'pЇ"LS5fW\)@Ao;rqr B@NF1ОˇMˌu)q{rMȣhX\9p`VwnՉcwNl)2(mGԃj,:W zK/N9r3λNg-ӧuiqK}N 7˚\:2<KYʾWwz-O;}GY48 v>ӷaY2iue^w|>rh}]ٙ|YV21]sҡ\}^0o[bpl1` ܍,-bm:{۳g{W^y}_t[ll;Qϴ/bt̮RV澀h,mz0Ϻ̅|8x{|lI]T_58qa!7|='׮]rQ{0N86u]=*Wsvw<4Gx iJ42(.Lc5KB̅3+OtDV1AU3 u|F0!;lEk`uHKylROŎf [Xmiёp{X!n-\PscErJ+o3)T)B1grqU-iyfk_n8!s`6(0oʭ޴~Jh>&u(~s|Rҿx专Md9ߜb%<@X޷}KYlRdwceb?MC9|";Ԏ90pQ[Zs ROǡ?Њ}=nي(Q\tc}5]2_ ^g7xܔ%&.| b9#uz, < F#ay'dqep G)>H1㛀o\VpbBXkq噔w oeCY^2.D= 1bG&oD#Bh,;_b[&K#&]@Uw9y=ڔ;r{տr-:g. |ۻw;~_{Dy:SX8ꠇqA9S2|\9殌Uew4t/_1F3%֋hD.qe/J݈ZLf*IwIy7p QϯPAzqQF-tt׫Sb .Se q<G\ ? bE,?|'leɗGi]@_x9~s?ϸ;]ƾ[mCte%\u2<h.qZݒE<]͉ ̈t6./%..wNt)C:0Iu6cy:=[t6^Fkk.81S0y5BwryBb`P4%_ʄc,쓎/Eۮ[Y`;>N<6#sQN8kyJYk}׹׏u؃t.{Yxz%.K>.Ed=wTuXyrAtê;ܝv&y<~бX34ϣ) * X< `:~M`@~Š@=0OE|`p>l lANvIQ m2+O'6_UoWL,䘼YJ90ҿ Ī4&%,g /rJS2n1yxoY0nf ug/u?y>0uɿ*A3?,$"OƓG׳ QJ,:ή$prɮ- v2Dg{8xVR0x&w(!66*2jpb8+gY+WgC e @%uw9Lg`Z,5kE{af*73L|{9Es0ELTL⛨#}G:ˇ(klw>NW/8% _i8b01"oa0 e`TW֣9Lg`7t[qMjbl[Mi_bi}G`|sO{`[)k߫xM=dN*kߣ}ܛu6Vj&?o ;%]k1 %-3l 3QPf;~a}sSnȔsʃaP)5m3 QM;L3e]$R7 9i iw30-Rc`37_(3{*b&:C-e?6Ñ;oF9RSr69*w ?%ݽA>@"l#)3Fy@.I恻$gp qeq qjNi-0k@6OF:QKQP(4ouA%ԡ7 OE8U%+31J*bP3q Mr@aL#Hb&B\^RNe2R=رcGwL8}bM<\p3 n/xEPt5,(*u|_䊢?g!|: @0.xPe\U&?#$1G"/IXA[lQQèƁo&DڰB lᙘd$,kRYD5J!$ z0+@,1 "[UGcQgJ)@j+=Es@ { `5,N3pϦ_TsjG3'#`,uhʙ)n4Ia 2yz2&c`b\a 1f_*U(5Oo|<{U#ݿ+|(;v3w:e BNHvXN%vTIuGGILnY6$xx aEu׵:d O7NO%HP "g#\;MJ!*@&kxy_VHfS\=Ch!/Wx♁O΀P6&\+Hn bimy5|Cb@<- N>~XI9hJHA#j#@Z Og~ꇝ6vP)ަc KgGA-ӣ/&^'dHh0mrnQ#!oJlkX4kh*|tƓ1aM2.)&])L)0T ,[p!pc6ɴ"8b-;1,Mv͇|9=OB_ǵ=A6(kZ1b}GxN?$ĸ$po)೩le9ɳcRONml+xQWơ&;=J?\ ăC8t{c/Vۂ8 W" G1kRm9P#vC E{LKwb\aYwxn,'pN/fO,'![ouh&ņ)z[kq{o BzXo)D*7!{#PCʛ FLHx2Etr[&k'0@LrB& ̂JeOxHn."KIzRihSO i?2<&wV;*?dL}Lh vg$f9Mbp\wBآOlwV=\{'m~x0W#%OFQ&8AiTv:ߕap{JNpZP bwA Tkxf.ٸ9L٪;cLď8oP3B, &%0)5[4J^)*5NC2u%G婜kX BV~Tf_yW>:΀ cVژ{'DdTZS[:PG| wLbLQϦNҳ't$ Ql4'$η6+몴xm> жc9 裣c=<^C,$L~FH=3qm6\/KCM1cւJϞґ\&@FEtgza烕RzRO>Mxhj,J\:@\2HszeOae]ǚN$1ER0&[L@g ڒ4- 5hLO®Pݥ쨈:Pu(}xT;(ap{/>+䬰{䖡~/#jĸa0xԺ0~ uW6M ]%eTaпss򧝨cꭝ8Rk2m8v@hMP=srv"/qjL}<%'{=\D ,`3nM^jBL:|()85lj0wx6|E QUQ'S?*;uL z4Pz@^mH~Zog/'?CfG#!Ǹei$1iPN#Ř6T'PQ< 忡 7V[2eT5&ӺW4ӱBSG )[XRؑpu9tcP<%/(mkIu^ dK\Jb&BMg@& ̂Je cFTzUȨ bLa6mVNFEzP1DB~2ptĖ#Nh<-.}Sb4@wiN)AnH=1Vũqxz},0#>-ğu:NoZ}nΎs>Ĥ4YS`[MުZ"T̨_?|r3K6Lύ *S~ _uOIRee(l.JOSm2B1N-%kg>@DϿI8@yHbf|Ak.N@H Bז5 Tz2:{Y:?BȲAcbJh\srH ;?g|܁цHNbƉ37 K@_ F,Z.@W4 T:􄗎22*CPHZ*Im.)9cɇJv< vZy- B{&~\E Z r3pSr6Y`T*{KGrYyzHHcLanVE>fFmeYMszΩ)m](c.圯΃xudD0/|t5|p5%X¥WbJ-9!Bx$ۏw&Q ux!6F g1َ;cMcʹlZFsq 4 & |a_"F[[xd8hGc!hБTd5mjRwv9"i&]lV@ .Z[aiӴt:#^QĝN?* A ; d,$#eCb,hDGRA%;2"),ޖuA9 6Ϸ*ݷ@)퐐mk|5q˅%ἘBkQe|\QP1A1 `ЋJ%iقO55j}?`M|h<ʤC=kI܋PIpIRIii)9Wɐ&X/DGRѓ%%t:r)ƕ8:fm4[48רK(뢙ӝY=ԑZjj̱nG?ڥiF[}YS[qV@~LBKC,rdu<VomP.2Qϖ^-f&T5_NwqWSftxK>hJㆊ@28)U;kң14:-kx_η)/*BQ O|PWhry7K1L:.5|%Y@zY2 G?zdC~V]@c'QdwSB(ڏҟ2qԧhq-N50X$i]T^ dBu-TXK6P4/#JjT<*oG. jmǔ?9P^hN1m蘭|ءi7Lf(wbLAƉl9,C~G-Ņr?* 4H̶'6'؇@s-N+ Zߕ?k~Ei7L*7(W)dpqt3 TƷpȽR;NOxw//Ɏk6=v@R Wx| wҭ0Ȩz10hx>Ʉ#ΏA+ĒƘM@gOxH.*,/R|\3 ҞU$,:h;&eRxbIs_4m5D1O8Mp,H xW\1Ʉ2h`a٘Ķ^mIx;Ob]O<`eYՙ눾7B&:[QƮ 9eUQʟ>ޓϏcxpwvʅASmF(G{̪KɯF])/ 40|Ddf)XhƲ W|Poeڵy46rGfT6rg;s@DX#ʬ`\mk1cтp)8רK qSL>}ǖr, ep %LзT`e;,O.mI ih1^k)C DcLa圔iuIn~X=Ku{G(i"҉48S$3W QaL,i% @P`֚-#uu<c3Y=h@mo r;݁XZ;y rEip Ig6XKL53 :X Xi.ԃ?> f9Nmqo:6|pႻxr6~Is篜p;N^9.]?.rKvra,uA UBao]+HǬ.k:|tALy+~X+tŽ3ƀL {LI]g?d3+W\q.]rgϞu'NpǎSe0|ܝ{{;r[j-k +~FjSeY"|3:fܬYnp̙2,ns3v8MuGja`Ṁza$Win'=K:6lXV0ݻ/d08;U7z[1ąVѻ4VYQ.Jw[۟ 0 3H-n(TFPNyfb>>V.ѿ ~oO~իn7t;t wK_w+7Ouju8.urBaY#5` &7:<4dvtSg0F|HLHa*KHMve,Y>_o'7^tn\\W9>iMg9र\N"ÜWzv.·+u8Z8װF~Ŋ7~714+>Nxb_-ryZ*֭[p<駟vϽ{[[[n7:+ f Qh xfX\ˢ^:@e;$;!< j;;jzw!]+^'f+t_A6,X~]q|˽y9*.a7&⅋/[)[.Z%w6nv[lq[nuvrkiWW'> O@a'ާ6íUd$0 źaĤo4-wmx \G!À=e`5:dq Уu#ˇ1֙W ƿ/Gܺ% 1l.tc!8^,qJEroOs'/`1~yT:Vvi]n;{ enm/o^+pϽ w)>d@'c2,KtuJSJPNȎe; i ` [5YY'΋WU!u1LmT[KHkB!eQVvIwQwQ,+~Ј[{ܶuw~}v=NJAhNTQܾÀ8ᮜ{=\'}ݏ^}{챏G}@#_tϼp{?q(*.g,gJc: l[\bh`Ya?Б+FaC_kȷoǴ !(V9NGq/,_ >z!ԆI 6'=^9ΑCO_9+Wtv~s[?>(42U, {'gUOO6 d'M8ݹ5_g#F뚟<{5LK̨tqm2C3x}*XLSˠ[.ʭKj]>u=vݡcoG^}/_@TX"zjW'_w;ڧQ>.~n_s CqIl)K jԱcC&ZX)1UeĤ}8}LS[~":U#ι]_ zGDb.YλEcc\,]ɀqh[{ѣߎ;e;/;w𹟸6`pN K7j۞ 㬯@*)xL]x`-NˌՕ:d_:X#>jU $WxpT2# |ep!Hň>6޽Ͽq&vbHܟOX4: |eT 菆A|]X'@= v)`*) |Tooݟ}'` +'s_we]&H` lf6U-1pJ,,&xL(ybz֔tԃ7|=IX1wba@,v 1[a6iGyn9|uͯφ)Wdxt/ns(%iW E]\لhE:>g?5l SDTwL(l&%cktH6};(In [-8lb=/`˝ra˥^U/^p-_;6n(.\>閮m* B 2#MuQPTM2@UÕVtu֜[E.SWG!ҙ8£!׵m8#b\Dfxcǚu2P=cߕrWa#i<:܇w~~q*> 4|r-'.UR!IsҝuE?m#T1V⇽ؒ?3|\ Dz+cpAP2ʹ5 Ȃ΃t]}??v'OdVG}3nm#/7u (?N{0B:jR9|0UgZ|3.}Ǩˠ!Y@Ǹ83mQЁp6ZߴNXst_}~.ca_.Re&[N=UF& ۘ`qN\zSmTOj4mYKbLSqB4fSCrNeG< +e;`u mwt}:[> ]y^ =e˖~sv;\Ra0ESUG9Ubq:0#EƢL}1TVZ#t5 (3gn A* eE!/ƌA[0<0<5 xv{>6-}*\ n}Ucjy5UD=> @UO&/ Zm_KZGr ;+|Vt[;h@UJav( @_:\ ( ioX5xʡZ/|=ܹ D,GAh) HFQM3_hWIR#6sFymicC%w6?TRB 'mw23i', 6tb'U*q*)jeCy0TpK O>+N0vjRcN#6 cN~);'mj&m;`iц\\ n"w\LX0޵ώ_h˿pxXexےvc1ySO={1wqgsM^/ $PIbWYǹYyN bS#Y.@;cZ}"KM) Pi=zv-".G04T<xBsg@o7$/}Wf/;w%l]MgPf0Įe;FÆ^Hێ[IY c^iД-TjxBIk`y5HNXp!<,:M O@F@no/Za<{]?N[1 C`1vKPճ*p-v

    SηNAVi0e@(L@IDATWk'W7NMqT43\ `ƢsAcpR)dvz <5.^wl-Xe<3@ _$ǻ J ֣CH;:4CJ<\P4Dt UT*l8gB!$L`mM@_Q!7/=bYN7ܻk"={ֵsGSGZ .09`:anx kuGԝP^[=iYv<iPQEL3¢D{y-K5>Xx` 6)0x`舼@_kwd1o V ֫Ûwx `ċl쀤M8uzƴv-kG7 J@"U9Ų|(.#הW؏Ӈur`"7e ar;m۰[^.34b|:Kcb'&_^-2[4iSԴ%Ҭu')'sTO`* 0 XSЖYcG{GOi~ܽ{۰rtvf¦r2 hSAjCe gv:"So)ZK.hHZ4Du(@SmYlN.M>l+bS2ɕv$2yٺr7a۷ot8eU5ʎO> @Ѻ&` |c' F_-N>ٽZTm.z9'ZmՓw|qd uˊ׌;rH&Zj۶mnݕ#:wXd<IqTAf@$I+Pi0gL^lT& *RCƉ3夒c~rZWL7Q6)G{PfuQ$$_=kY0׭FƗ ~wZS]9k7BsYO8mIwD8h Lk"0U:ER J M+'8:^opX+b W/mOǚcCY1mؾ1 gR' v:֙CP4^wzbe<|'́Jg9X;ڵu,H-k:gȰFb1;{De]x.5wMSq(5vךϣNWw&l79vv38g"c0&)@6`?%1+W-ӄθgyB_1BKsca sjM37c(@t|lOפbUxFw:˳c%}OǶ2hBj $kҠo-N0iA.ϻ6ie,LL]Ón̤kՆɂ 918GIT ɮUr1%/dpB?:%]*i4k d;!䜮ē*S1 l&ZlR7 YHt\ qa3q #ͤџ T`LFG&=)@ك/N2( XԱ3jNHjYa5v̋z2Tۄn;`: \~NXHRm-sV,ƙ7/syVu*ǖRyh$ Sf@s@'k6ffԕN:G&} j;M6iԁca f$Iǭ=\~L$J ##}f 7S eTY`QPm bbm@]y;iGL]66'd*@/yTc%FJX>M="(gN ΌZYJɩn.?^B3&i[7o!-uί)yHÃ٤6`RD51OKtZJg4Z b_*,:\ b]tє7oD1^ĞV m^ Ƈ$,(w8Ԭ$Q᏶Y{u,{r>Y:P٠gO-g!_V?BobGy<24S ms@[[#!7[ɦg 6P\FؚI#U*buTkZx^/X*x6'|snR6H@F{)^o&80$uΖ(E[\5iuﳅQEL>pbI}x Wge̯wA9˝ W+ =>+veӄ@ݔ7񻿛~=#.=@?o N:Vga<KPn ҏ I㜑rư`_i& 5%"\]X ,XV;Ǻ'?\?bbUhH#)Αl=Tj)hLk x-)8TpV=5(6N=rRA@颩2Y B|pOa?1 : ` 0˘ӡEcQ f0'nXsfNwH=3hb.E% I᳥bA{$ٵ ˲,t X'oYp[J2#apu[Xkd" pU;gO,hH/\VWb_O;I[,t-8ՙ,GB` . 4)3ɫ ݪeܺu봩?s 2gܢ@Yek"@܇3X5p4Fk#6< @s/tvh?s5 Զ[Ẕ*0>\aAʥƍ+0a>,/9얮ږr^Y#gq3BE%dv:Vg$eMy'6BD${vN~- ۈ|lbq[}C SpQ\xk~WeXd۴ihg1?ud˙UAuIVx) &>70S:&_2V"1L )ӆhw𭩃CHk6 j?@d/^p!w!BtY}Zg^1g_Pݳ2vz+'e@v$ jcrQf@ג_B@;` Oʻvt;wr61Wls#@٬[&*UvBRKTxڴtd1ZW\6_kLegZ̙-* " n3:0"D#./Y6y\;#/$y0 qPB0gN Lw:+[k^v'u붋1UbaE/XAwګHub1X9G@wJ9uI~v3[C&m^۳A0ɪ;xy~Wp}$!3 Qd b#T2^Е;5a029mMUs :BRkO)SL=l9CfXr)@SR?ӭs S-gV5Ip?W|=pO;v4ۅ sO7ܕ6ʙRTRAt}Bݖ$mPIq@d$FuZ7WŢ)[}lPSSPtH @JOY%Ժ_?/v{6}ӟnַ뇟pK7\rKH_RVZ8;\ x} Jk_cug'F۩6ok"8PQOY%]:oϺO|3n۶mb߾}vN}mh||_Y~tgB,O][90 |sv÷:bn1u(Rg:[֬5Tq? `r{`'g?|twnڜh+TX5.?\(4Х ű[ R8Rk hvR:Cne}B~x56ie`tVw>/K~[~j篺_/9|гk'ھkr͹CT&d6U8JY1b.]f]3auP; X+Sn!QY0 & `3SeIDPlo<#;}^x 'ֽ~qn_Slao]#2($Ĭ(ҬB91GUG4B#:e8RdDmχ`3hv0&̈{p/? kڂĆ}?vVVe/;&c@@P(hK;f{Rt&m':Kc 0S6cEm*l`Q S*+tw9;8h{0ݷcE/~^~񾯻ykU;sxLYЏs*P.%qmN &vR#O@3(<(ٱztk"`1 lS"up\<ܻ?um#~~gWU̫p'?<*U'|EK >`.)[NQbawfqwL¬yCZlk?`=^9qߓ! {ȑN,D**`lX]`ߑ{o/w?}Ǘy/sǧ=_c9|vtxU-S6UYQ8vCj RK&:PeIId9A+& a6 ԡo3mRyG#TLyC#H={[~o(s(/R,h(!פ8> 0&2tN-y85]W׃섐ioSJv|$hl/4>("١g<;HA"_eQn-Rʜ@0)cxe7~ӟ/:-n{ܖ ܽyޯ~3oW{p@_QuHDc38"Ӂ$N3X`o!/7a.l>^ !J lq^"WJ-ا1Xo?SC; e2)glFSUns]lukov7oqvr{c`~WSO=%q?9nsN^ Fc.C}r"papzLG">[2փObuG ;.;0єm[(V+/,CH{ۇg\Mx?'.kQyF~,u˖'۰af_vBO>{ܛGp>I uE$=ax JӄOǨ`Dٍ4-6+ؒ@Y;^}TcШx<1 U;;S4(>>J‡Vvh@+{''qŋ .^^z% /~>;;$v{Qp>*'O "fxaAY:' }!?] ^p@YuKD;oiCW$]\l%bE<i͛v >frU|{7_yɝ;+`BCn6@5 2~"s|l>pF" %Pl>̵NNBF$hSPaeMYVp;h361ZRq.^ "iCWQoy뭷;{vuN^x-mܭG/Q!:ʦ80,goihGua#E {7Vአ bEg7;z;. N]NŽnknVy\WΪ"SP@. r::NpA O"uP<D#FY` H׮ PmN;HN]Wu SZDRLZ; &$@|#0X= 66"tIE\K.97?ޝtBwL~uλ #tT:=L>|]@8.P*2b _d\ g;011V,(oJss@w@V0AscY?Œ;=hЍ::×K.qDy[&Oʍ)/(>qYn]t.T+cݼc~[mNٮKV7Dmc2plʵ\B gA?ʵ yLw H# Z{ˬvNPkYƀoFjcpNAR6lP# mwܹg[j`6!*UO9jKkAYq?iT] k¯N@~'讶+nd OKpPd`L|{bbѝ$8߽b 3 qXAe?\l4/&SwBȶ 6#68p-w}7B#dM^fܦXNQN$?dP9#3a\ @,(DQX#p`eꎗs:44cAG=. [Th]Q`[|T38N@O1f+ "&{p |쌔CHcgV:6xcXmbh"irxڢ`b9!K  yBHC;ukX.7gVbs < ?"^@L.X4KJ< w2B)WB 7A͏V!y+zt|2cz. 1PĘDSMp|ۈ<>Eh@|%DWy*3(XvX4@2Hf;)@8$׼7؁>u|]>@!X 9JDfG_cA`c`-*UH0 1!T "v[ kh(bhb`@:dmB {Odߡ0xB)3mB]H[N5i-F]x~'WG[-$Ef h tm6qАG$*@Q 3͔<#q I' *,|p! d$ +b)YOؼ2xe,~ƥl(N  cG$/9AA1aG|AE4^@| N9l P2`Q37{k!cǀ%ubp#b9hDXW,Cȓ NqA9XyEu))jfL]x>YxJ#10qxebO#B3U,rx6`0b)+qb9߸ +`v#Eʹr0&TQ;KbABCKŚXAKa3ֈ7J+kMGFX Bs8@ѠFeUʭAAIPO34i-i0JH!cm,a=y8O6c*◔;;茼$B mR+TAf0歷 E@֐h*.B;pLRy4i*Vad1u|l@ G,|עPA<ࣉLr4N@(|/a D3gO=ȈB{lSrEl(#`^6^0*$.t,yDWȫHNScg{9(]b\"!t[}íŰӡN /;.C'\|42 $+yb|2xCSE nS2}6QX4 R(C &U\Qw`mغ[׺* Z@9=x MuŠ?)ײ]t6,;;)3L)[Xl>~"`_vW< {t 6O r%np`Ȗb)JMJX,M!7@Gg+M0WAa "mxSL|E4 תNx.ѹmm҃q/ "Xm&v'oSPـ]ZT/>Sj b2#XN {lSՠc9 Aޒ(rBrcP"'p*/D;x |AX-c6*)5lmA}'FޛǼNwڡle x 1 `l^ğ=6`#Vt\Pž+gb|SQ}io>*rCCXQF?W $JT輘?'сg,? XVUqF`Qed\ٱʉ6߮TtHexUʕ 6N:('w.;\Yv܈`B\f2g#0g ` 1dY\%ZeUf}c#̬.we3}Yk9S~cswI~hv6nƑ{Dɂڝ7ij|dQ <o+L}- a)7Eǧ>\j(ոAk؊{1ۢM6u"Q@fkQ*ʵV {2S7 ^ Q٬1Xs:2/fèc[Ku Zm=EPݳr5? |1m;n:O N_k=$l=\mzqɰr) *Zkŕy`YjPɨ+Nig88{QPcRjt .D$ᦞJ7X( H7 ?V$JEQK}Bc`ēqbpXV;5frUUCzD窰ӽ_D+=g$bl^bm3>OMĨ/;/R"Py3n9e ]@6B3lC`9(Ӵ`QHB|Ɇ(Emƺ Joޡ%d]_j$ sUWi}A(1B JҗqZ26ׅyi_sE +=n6m59GZd], [CVxi $§w 5}eIJk7mz`:?N01(wr%J7qE~ '.ɳ e/k<~84mߋX{q"fE &m!.5T^vDh]':&qXsx-oi5Nc3*4 %iºHa MoNyv8Wh0MK =mZ0\8(i$+j4mQ.⺶)K_hCVEuvnafÕ/XrlA84dpE!z8.~ "qo9va*®_;qq*CL|:.A"A [X2B'x桍Q`KEY^SZqw(J o)iJgQRNc-p]շIR6khkimu lW'RxuQbAL.?{% %ۏ&Dt3|yOnm'`_Y'ǰak&}hf_ǹ뱕Ko!YJ}6Eh}o"QpqNO&88>vz3vZ=rFB 7o!0|pY|Q=ϻ: Z 6Ef|cW [-C-a&A[qw/2]E cYqS smv`'4ln"p{S,i{"s֮'-|Λ@N6/|ɓu40M z! N " ._|nĠڋ~'qY;0[9 8Mdns>v픎XZjz1]5]G-m6NBҢi 龚-CQ0XmB>uِ}3*bX$U rhZqPMoEmă/,tUΏSkfiPMKk`*ǃaVF +G7  Ǧ*Ϧ90p8Ō:|S˞|}z= a֋m)Vh[KozDܴ;ǓfV7PC6^ؘbg`\'״~߀ j5!(J7baZOKMܜڈOy3bm+iгz<e-N..n%Y_I]Wb {(nƦ]GC~ştOkI`]KC:.?qɰY> /m$Xb?KX6Gaw/$U哛?M`g6)<9M#y;}a_9z i!QGӴ7R 0 _tU7qC,x7ib?ծ1I=D?Y A\+aӑ`{f NŊ9+\|%"/=~дp*ᛐͧ<R}݂bC ;X, l |D.]Q yՀWFZpRO\6'(;@mގ,Z}O[qZjyVJPg~k0{͏pJ/Y} Fd*fÑՁ͠.uqG,QmqXCvT榠AjS{^ 2c \~b|ІJX!J5v2$u0t:+U80:Wx3WWSAxGXdɲsWe8I<x,|t^EbeӹqꕈP]r1[ځߦ>llisz`q0v O^W$vx픔jS=P ·w5_2xkTŋؐXae,j˺V:}WNSjU@nQD.kM5B<"ɰ"Uo j'-@؋qy GnJO-xU.MU鞁EH.:sL/oMlL6#MbSN+|xn1cZ\TsY$hT ?C*ǂvɖS$gEb*Z*ze¤ .SJ_$MXKzV + | ~IW%_>] VYbYmH~ӗN9pwGR HUZ06bP+aZʂ$c O^"m`j$NL18vDSf/*]j`8 h{V> SP$ܼۄ|$.9rMX=)-?y`Һ~l#*͉%d/ 熾a #].W5J>u5~[\ t{iL[LWPEmu^LvT7(BJŃ"ƝZaM)YsT×#!.rT-1Wz!7#?F{+d:ؔxlr|!ezMhWIA Y$ѰZ*)ĉsDzb]]{θ+yig ˡͼ.P&6.k5rb)X/L38j1]l5wmŊT~裇:ə1~in| 6O>udN `XhZXa|K©zy P /qZ)&_yN ttrʌ^HpU;뛖HYpUuU/3^SWݡ RX]@mkn&w8㬛t_=٦S(K:F<|y zZ/m]b>2K向q%_FQgj]hZX.v"\ެ=۴bk}R5ҥ.+='Ѓ=q?S:p:*o?hyu9*G嗀’#=|`QA/$y$ IDATeŰX@^ҩXѥYjeH}&"buqUyԗ>X$s~jp7{V1㞉iTpkEW56Ry< MPV\yp=0ٱSO|"S_ȹ0i_0 ȁwN g؂uJ\2RT}H ꛗ6]I%}SFJ-r3Q@!J^J;K4.-)=GsNJ;g~f_yN"nnNmymugV ]fMPuvqMH<8g/jb*PfbԠ"xL:V;%C^v=F%īFj!Sװ>g># d][nlD>R80~#fX ɫ`o8՝ ?rȃ7¯$}cēF^SH}:vO<-;Y.r,׃DK 7ʥncS;4dmY"n=E-\ܾG:t~0G؆H^"g)9ؔ5T`-U v}I4ʰ G ]WOuuxrC}_WsuzjS_șصL"_逃=/eE#S(xÕO^$!#ȱ 'x`X7m"Mݻҧjʰ5Ъ)X'sY{(rkS{UxNI=/M?*"<{z?|K U,~`Yݲλp4ѿ `ɲq9>3>;OS%hwʣŖ0, CVPL]z(L:z\B 6C`aI}T{,nQ6~W}! k] q%2KjbUގSZg Eϐڅ3/O8}cUE[x1_j7*;gnMxMfꎥ󍭜p,\q4K%$j bJ-MXDžgVceC w/mMZŲW17M\| mK6}0O h9 H$,qr,On(Tlͪ2aG#~ Ҽ5r ?Grף~/kC *V\G]ݻ,#msWf$T051:v_ZpRP&(LEZ]JpXXJ]h#o$ɭ1TɩK<<+./n(w U Cvk|7VGg_zfT'cUZaS90}!GS{ę#.9,5'||ofVC_+z% x??ˇ/sԺupVi62k U]>IcUV}X]Ù z[3^*GkS./s_P8޵t8ʓM4XpKBXrgyi>0>wk*>;^vM=z棧|kylJ?5 s6==̍:~}pcqcUHW}Ms&\aemƼi1];pϻZ s<>yj(sGx}l8Y.yȟG;uAgycgk%7ݦuku7}-Ȼ׸Or'ƞ<'Ub׺Z]p˩}Յ٨X9㙛'uaM})1#pr;cOm(9ό=71d3qW͹}Ɲ9bW>n[d\oF VsVLCy܌ {4wI}-w^MleeN4GcSվҽ㾋7PsX3p='_c+j1>V<#{C_%O?ԪF7x~W={yh<8ػ`Y9NK9??U<ƟŞ^9'ˆvc._Cܿ[Gk}sSWG9)sn_iSe׵@~&o}̟)n|dl65.eIۻ_F$/t(sk]ɖ^Z0y>^e&wu4gb7t+Ssi/ -O?{TPPOMNJ"@NNNQ?uÍOq 7~,CPcllMc^ܘ SSoI &MR20VY;EIa똉n6"+l7s7C⟑LnH6R?Wp@y2؋yx(Tv1nܘT]X|[91F;EoW 荲#WM;F'62R)\eÖu?]\4Eܤd!V7بOh8E )}JL)Rc?A;!NA:vȩ /֓􅉼8*-GyŲ N}M hϑuͩ=)DM`zew#N''4w΅~O:Kg[܂E5’.94Oel9W靖_̓Ûѧ6F\,H9ll~(Ǩ}cŶq)#ꗉ(ee65:{C&%) vߍ7}|};~+CO^?Xֹ@˚|K\.۷UVULW\ Ŋ)*.^wJT*S .(MqVܙ h qkFƏ^x4l߭K裏|+se@N(9Vv箜 u9\lk.];L7>T2*87JⱣ$eg^蘬֜1Yȓ \HhL˲ц2iee8uXqlh=j7lma gME<([f&N (,Y`F>ڈ6 ˗p۷nwGtSrYYںQ7L⫯/_w,w)wdM=[[ ,!6lNw>q0uʎ[FӉ}}݈)%ni8r8'pЇ"LS5fW\)@Ao;rqr B@NF1ОˇMˌu)q{rMȣhX\9p`VwnՉcwNl)2(mGԃj,:W zK/N9r3λNg-ӧuiqK}N 7˚\:2<KYʾWwz-O;}GY48 v>ӷaY2iue^w|>rh}]ٙ|YV21]sҡ\}^0o[bpl1` ܍,-bm:{۳g{W^y}_t[ll;Qϴ/bt̮RV澀h,mz0Ϻ̅|8x{|lI]T_58qa!7|='׮]rQ{0N86u]=*Wsvw<4Gx iJ42(.Lc5KB̅3+OtDV1AU3 u|F0!;lEk`uHKylROŎf [Xmiёp{X!n-\PscErJ+o3)T)B1grqU-iyfk_n8!s`6(0oʭ޴~Jh>&u(~s|Rҿx专Md9ߜb%<@X޷}KYlRdwceb?MC9|";Ԏ90pQ[Zs ROǡ?Њ}=nي(Q\tc}5]2_ ^g7xܔ%&.| b9#uz, < F#ay'dqep G)>H1㛀o\VpbBXkq噔w oeCY^2.D= 1bG&oD#Bh,;_b[&K#&]@Uw9y=ڔ;r{տr-:g. |ۻw;~_{Dy:SX8ꠇqA9S2|\9殌Uew4t/_1F3%֋hD.qe/J݈ZLf*IwIy7p QϯPAzqQF-tt׫Sb .Se q<G\ ? bE,?|'leɗGi]@_x9~s?ϸ;]ƾ[mCte%\u2<h.qZݒE<]͉ ̈t6./%..wNt)C:0Iu6cy:=[t6^Fkk.81S0y5BwryBb`P4%_ʄc,쓎/Eۮ[Y`;>N<6#sQN8kyJYk}׹׏u؃t.{Yxz%.K>.Ed=wTuXyrAtê;ܝv&y<~бX34ϣ) * X< `:~M`@~Š@=0OE|`p>l lANvIQ m2+O'6_UoWL,䘼YJ90ҿ Ī4&%,g /rJS2n1yxoY0nf ug/u?y>0uɿ*A3?,$"OƓG׳ QJ,:ή$prɮ- v2Dg{8xVR0x&w(!66*2jpb8+gY+WgC e @%uw9Lg`Z,5kE{af*73L|{9Es0ELTL⛨#}G:ˇ(klw>NW/8% _i8b01"oa0 e`TW֣9Lg`7t[qMjbl[Mi_bi}G`|sO{`[)k߫xM=dN*kߣ}ܛu6Vj&?o ;%]k1 %-3l 3QPf;~a}sSnȔsʃaP)5m3 QM;L3e]$R7 9i iw30-Rc`37_(3{*b&:C-e?6Ñ;oF9RSr69*w ?%ݽA>@"l#)3Fy@.I恻$gp qeq qjNi-0k@6OF:QKQP(4ouA%ԡ7 OE8U%+31J*bP3q Mr@aL#Hb&B\^RNe2R=رcGwL8}bM<\p3 n/xEPt5,(*u|_䊢?g!|: @0.xPe\U&?#$1G"/IXA[lQQèƁo&DڰB lᙘd$,kRYD5J!$ z0+@,1 "[UGcQgJ)@j+=Es@ { `5,N3pϦ_TsjG3'#`,uhʙ)n4Ia 2yz2&c`b\a 1f_*U(5Oo|<{U#ݿ+|(;v3w:e BNHvXN%vTIuGGILnY6$xx aEu׵:d O7NO%HP "g#\;MJ!*@&kxy_VHfS\=Ch!/Wx♁O΀P6&\+Hn bimy5|Cb@<- N>~XI9hJHA#j#@Z Og~ꇝ6vP)ަc KgGA-ӣ/&^'dHh0mrnQ#!oJlkX4kh*|tƓ1aM2.)&])L)0T ,[p!pc6ɴ"8b-;1,Mv͇|9=OB_ǵ=A6(kZ1b}GxN?$ĸ$po)೩le9ɳcRONml+xQWơ&;=J?\ ăC8t{c/Vۂ8 W" G1kRm9P#vC E{LKwb\aYwxn,'pN/fO,'![ouh&ņ)z[kq{o BzXo)D*7!{#PCʛ FLHx2Etr[&k'0@LrB& ̂JeOxHn."KIzRihSO i?2<&wV;*?dL}Lh vg$f9Mbp\wBآOlwV=\{'m~x0W#%OFQ&8AiTv:ߕap{JNpZP bwA Tkxf.ٸ9L٪;cLď8oP3B, &%0)5[4J^)*5NC2u%G婜kX BV~Tf_yW>:΀ cVژ{'DdTZS[:PG| wLbLQϦNҳ't$ Ql4'$η6+몴xm> жc9 裣c=<^C,$L~FH=3qm6\/KCM1cւJϞґ\&@FEtgza烕RzRO>Mxhj,J\:@\2HszeOae]ǚN$1ER0&[L@g ڒ4- 5hLO®Pݥ쨈:Pu(}xT;(ap{/>+䬰{䖡~/#jĸa0xԺ0~ uW6M ]%eTaпss򧝨cꭝ8Rk2m8v@hMP=srv"/qjL}<%'{=\D ,`3nM^jBL:|()85lj0wx6|E QUQ'S?*;uL z4Pz@^mH~Zog/'?CfG#!Ǹei$1iPN#Ř6T'PQ< 忡 7V[2eT5&ӺW4ӱBSG )[XRؑpu9tcP<%/(mkIu^ dK\Jb&BMg@& ̂Je cFTzUȨ bLa6mVNFEzP1DB~2ptĖ#Nh<-.}Sb4@wiN)AnH=1Vũqxz},0#>-ğu:NoZ}nΎs>Ĥ4YS`[MުZ"T̨_?|r3K6Lύ *S~ _uOIRee(l.JOSm2B1N-%kg>@DϿI8@yHbf|Ak.N@H Bז5 Tz2:{Y:?BȲAcbJh\srH ;?g|܁цHNbƉ37 K@_ F,Z.@W4 T:􄗎22*CPHZ*Im.)9cɇJv< vZy- B{&~\E Z r3pSr6Y`T*{KGrYyzHHcLanVE>fFmeYMszΩ)m](c.圯΃xudD0/|t5|p5%X¥WbJ-9!Bx$ۏw&Q ux!6F g1َ;cMcʹlZFsq 4 & |a_"F[[xd8hGc!hБTd5mjRwv9"i&]lV@ .Z[aiӴt:#^QĝN?* A ; d,$#eCb,hDGRA%;2"),ޖuA9 6Ϸ*ݷ@)퐐mk|5q˅%ἘBkQe|\QP1A1 `ЋJ%iقO55j}?`M|h<ʤC=kI܋PIpIRIii)9Wɐ&X/DGRѓ%%t:r)ƕ8:fm4[48רK(뢙ӝY=ԑZjj̱nG?ڥiF[}YS[qV@~LBKC,rdu<VomP.2Qϖ^-f&T5_NwqWSftxK>hJㆊ@28)U;kң14:-kx_η)/*BQ O|PWhry7K1L:.5|%Y@zY2 G?zdC~V]@c'QdwSB(ڏҟ2qԧhq-N50X$i]T^ dBu-TXK6P4/#JjT<*oG. jmǔ?9P^hN1m蘭|ءi7Lf(wbLAƉl9,C~G-Ņr?* 4H̶'6'؇@s-N+ Zߕ?k~Ei7L*7(W)dpqt3 TƷpȽR;NOxw//Ɏk6=v@R Wx| wҭ0Ȩz10hx>Ʉ#ΏA+ĒƘM@gOxH.*,/R|\3 ҞU$,:h;&eRxbIs_4m5D1O8Mp,H xW\1Ʉ2h`a٘Ķ^mIx;Ob]O<`eYՙ눾7B&:[QƮ 9eUQʟ>ޓϏcxpwvʅASmF(G{̪KɯF])/ 40|Ddf)XhƲ W|Poeڵy46rGfT6rg;s@DX#ʬ`\mk1cтp)8רK qSL>}ǖr, ep %LзT`e;,O.mI ih1^k)C DcLa圔iuIn~X=Ku{G(i"҉48S$3W QaL,i% @P`֚-#uu<c3Y=h@mo r;݁XZ;y rEip Ig6XKL53 :X Xi.ԃ?> f9Nmqo:6|pႻxr6~Is篜p;N^9.]?.rKvra,uA UBao]+HǬ.k:|tALy+~X+tŽ3ƀL {LI]g?d3+W\q.]rgϞu'NpǎSe0|ܝ{{;r[j-k +~FjSeY"|3:fܬYnp̙2,ns3v8MuGja`Ṁza$Win'=K:6lXV0ݻ/d08;U7z[1ąVѻ4VYQ.Jw[۟ 0 3H-n(TFPNyfb>>V.ѿ ~oO~իn7t;t wK_w+7Ouju8.urBaY#5` &7:<4dvtSg0F|HLHa*KHMve,Y>_o'7^tn\\W9>iMg9र\N"ÜWzv.·+u8Z8װF~Ŋ7~714+>Nxb_-ryZ*֭[p<駟vϽ{[[[n7:+ f Qh xfX\ˢ^:@e;$;!< j;;jzw!]+^'f+t_A6,X~]q|˽y9*.a7&⅋/[)[.Z%w6nv[lq[nuvrkiWW'> O@a'ާ6íUd$0 źaĤo4-wmx \G!À=e`5:dq Уu#ˇ1֙W ƿ/Gܺ% 1l.tc!8^,qJEroOs'/`1~yT:Vvi]n;{ enm/o^+pϽ w)>d@'c2,KtuJSJPNȎe; i ` [5YY'΋WU!u1LmT[KHkB!eQVvIwQwQ,+~Ј[{ܶuw~}v=NJAhNTQܾÀ8ᮜ{=\'}ݏ^}{챏G}@#_tϼp{?q(*.g,gJc: l[\bh`Ya?Б+FaC_kȷoǴ !(V9NGq/,_ >z!ԆI 6'=^9ΑCO_9+Wtv~s[?>(42U, {'gUOO6 d'M8ݹ5_g#F뚟<{5LK̨tqm2C3x}*XLSˠ[.ʭKj]>u=vݡcoG^}/_@TX"zjW'_w;ڧQ>.~n_s CqIl)K jԱcC&ZX)1UeĤ}8}LS[~":U#ι]_ zGDb.YλEcc\,]ɀqh[{ѣߎ;e;/;w𹟸6`pN K7j۞ 㬯@*)xL]x`-NˌՕ:d_:X#>jU $WxpT2# |ep!Hň>6޽Ͽq&vbHܟOX4: |eT 菆A|]X'@= v)`*) |Tooݟ}'` +'s_we]&H` lf6U-1pJ,,&xL(ybz֔tԃ7|=IX1wba@,v 1[a6iGyn9|uͯφ)Wdxt/ns(%iW E]\لhE:>g?5l SDTwL(l&%cktH6};(In [-8lb=/`˝ra˥^U/^p-_;6n(.\>閮m* B 2#MuQPTM2@UÕVtu֜[E.SWG!ҙ8£!׵m8#b\Dfxcǚu2P=cߕrWa#i<:܇w~~q*> 4|r-'.UR!IsҝuE?m#T1V⇽ؒ?3|\ Dz+cpAP2ʹ5 Ȃ΃t]}??v'OdVG}3nm#/7u (?N{0B:jR9|0UgZ|3.}Ǩˠ!Y@Ǹ83mQЁp6ZߴNXst_}~.ca_.Re&[N=UF& ۘ`qN\zSmTOj4mYKbLSqB4fSCrNeG< +e;`u mwt}:[> ]y^ =e˖~sv;\Ra0ESUG9Ubq:0#EƢL}1TVZ#t5 (3gn A* eE!/ƌA[0<0<5 xv{>6-}*\ n}Ucjy5UD=> @UO&/ Zm_KZGr ;+|Vt[;h@UJav( @_:\ ( ioX5xʡZ/|=ܹ D,GAh) HFQM3_hWIR#6sFymicC%w6?TRB 'mw23i', 6tb'U*q*)jeCy0TpK O>+N0vjRcN#6 cN~);'mj&m;`iц\\ n"w\LX0޵ώ_h˿pxXexےvc1ySO={1wqgsM^/ $PIbWYǹYyN bS#Y.@;cZ}"KM) Pi=zv-".G04T<xBsg@o7$/}Wf/;w%l]MgPf0Įe;FÆ^Hێ[IY c^iД-TjxBIk`y5HNXp!<,:M O@F@no/Za<{]?N[1 C`1vKPճ*p-v

    SηNAVi0e@(L@IDATWk'W7NMqT43\ `ƢsAcpR)dvz <5.^wl-Xe<3@ _$ǻ J ֣CH;:4CJ<\P4Dt UT*l8gB!$L`mM@_Q!7/=bYN7ܻk"={ֵsGSGZ .09`:anx kuGԝP^[=iYv<iPQEL3¢D{y-K5>Xx` 6)0x`舼@_kwd1o V ֫Ûwx `ċl쀤M8uzƴv-kG7 J@"U9Ų|(.#הW؏Ӈur`"7e ar;m۰[^.34b|:Kcb'&_^-2[4iSԴ%Ҭu')'sTO`* 0 XSЖYcG{GOi~ܽ{۰rtvf¦r2 hSAjCe gv:"So)ZK.hHZ4Du(@SmYlN.M>l+bS2ɕv$2yٺr7a۷ot8eU5ʎO> @Ѻ&` |c' F_-N>ٽZTm.z9'ZmՓw|qd uˊ׌;rH&Zj۶mnݕ#:wXd<IqTAf@$I+Pi0gL^lT& *RCƉ3夒c~rZWL7Q6)G{PfuQ$$_=kY0׭FƗ ~wZS]9k7BsYO8mIwD8h Lk"0U:ER J M+'8:^opX+b W/mOǚcCY1mؾ1 gR' v:֙CP4^wzbe<|'́Jg9X;ڵu,H-k:gȰFb1;{De]x.5wMSq(5vךϣNWw&l79vv38g"c0&)@6`?%1+W-ӄθgyB_1BKsca sjM37c(@t|lOפbUxFw:˳c%}OǶ2hBj $kҠo-N0iA.ϻ6ie,LL]Ón̤kՆɂ 918GIT ɮUr1%/dpB?:%]*i4k d;!䜮ē*S1 l&ZlR7 YHt\ qa3q #ͤџ T`LFG&=)@ك/N2( XԱ3jNHjYa5v̋z2Tۄn;`: \~NXHRm-sV,ƙ7/syVu*ǖRyh$ Sf@s@'k6ffԕN:G&} j;M6iԁca f$Iǭ=\~L$J ##}f 7S eTY`QPm bbm@]y;iGL]66'd*@/yTc%FJX>M="(gN ΌZYJɩn.?^B3&i[7o!-uί)yHÃ٤6`RD51OKtZJg4Z b_*,:\ b]tє7oD1^ĞV m^ Ƈ$,(w8Ԭ$Q᏶Y{u,{r>Y:P٠gO-g!_V?BobGy<24S ms@[[#!7[ɦg 6P\FؚI#U*buTkZx^/X*x6'|snR6H@F{)^o&80$uΖ(E[\5iuﳅQEL>pbI}x Wge̯wA9˝ W+ =>+veӄ@ݔ7񻿛~=#.=@?o N:Vga<KPn ҏ I㜑rư`_i& 5%"\]X ,XV;Ǻ'?\?bbUhH#)Αl=Tj)hLk x-)8TpV=5(6N=rRA@颩2Y B|pOa?1 : ` 0˘ӡEcQ f0'nXsfNwH=3hb.E% I᳥bA{$ٵ ˲,t X'oYp[J2#apu[Xkd" pU;gO,hH/\VWb_O;I[,t-8ՙ,GB` . 4)3ɫ ݪeܺu봩?s 2gܢ@Yek"@܇3X5p4Fk#6< @s/tvh?s5 Զ[Ẕ*0>\aAʥƍ+0a>,/9얮ږr^Y#gq3BE%dv:Vg$eMy'6BD${vN~- ۈ|lbq[}C SpQ\xk~WeXd۴ihg1?ud˙UAuIVx) &>70S:&_2V"1L )ӆhw𭩃CHk6 j?@d/^p!w!BtY}Zg^1g_Pݳ2vz+'e@v$ jcrQf@ג_B@;` Oʻvt;wr61Wls#@٬[&*UvBRKTxڴtd1ZW\6_kLegZ̙-* " n3:0"D#./Y6y\;#/$y0 qPB0gN Lw:+[k^v'u붋1UbaE/XAwګHub1X9G@wJ9uI~v3[C&m^۳A0ɪ;xy~Wp}$!3 Qd b#T2^Е;5a029mMUs :BRkO)SL=l9CfXr)@SR?ӭs S-gV5Ip?W|=pO;v4ۅ sO7ܕ6ʙRTRAt}Bݖ$mPIq@d$FuZ7WŢ)[}lPSSPtH @JOY%Ժ_?/v{6}ӟnַ뇟pK7\rKH_RVZ8;\ x} Jk_cug'F۩6ok"8PQOY%]:oϺO|3n۶mb߾}vN}mh||_Y~tgB,O][90 |sv÷:bn1u(Rg:[֬5Tq? `r{`'g?|twnڜh+TX5.?\(4Х ű[ R8Rk hvR:Cne}B~x56ie`tVw>/K~[~j篺_/9|гk'ھkr͹CT&d6U8JY1b.]f]3auP; X+Sn!QY0 & `3SeIDPlo<#;}^x 'ֽ~qn_Slao]#2($Ĭ(ҬB91GUG4B#:e8RdDmχ`3hv0&̈{p/? kڂĆ}?vVVe/;&c@@P(hK;f{Rt&m':Kc 0S6cEm*l`Q S*+tw9;8h{0ݷcE/~^~񾯻ykU;sxLYЏs*P.%qmN &vR#O@3(<(ٱztk"`1 lS"up\<ܻ?um#~~gWU̫p'?<*U'|EK >`.)[NQbawfqwL¬yCZlk?`=^9qߓ! {ȑN,D**`lX]`ߑ{o/w?}Ǘy/sǧ=_c9|vtxU-S6UYQ8vCj RK&:PeIId9A+& a6 ԡo3mRyG#TLyC#H={[~o(s(/R,h(!פ8> 0&2tN-y85]W׃섐ioSJv|$hl/4>("١g<;HA"_eQn-Rʜ@0)cxe7~ӟ/:-n{ܖ ܽyޯ~3oW{p@_QuHDc38"Ӂ$N3X`o!/7a.l>^ !J lq^"WJ-ا1Xo?SC; e2)glFSUns]lukov7oqvr{c`~WSO=%q?9nsN^ Fc.C}r"papzLG">[2փObuG ;.;0єm[(V+/,CH{ۇg\Mx?'.kQyF~,u˖'۰af_vBO>{ܛGp>I uE$=ax JӄOǨ`Dٍ4-6+ؒ@Y;^}TcШx<1 U;;S4(>>J‡Vvh@+{''qŋ .^^z% /~>;;$v{Qp>*'O "fxaAY:' }!?] ^p@YuKD;oiCW$]\l%bE<i͛v >frU|{7_yɝ;+`BCn6@5 2~"s|l>pF" %Pl>̵NNBF$hSPaeMYVp;h361ZRq.^ "iCWQoy뭷;{vuN^x-mܭG/Q!:ʦ80,goihGua#E {7Vአ bEg7;z;. N]NŽnknVy\WΪ"SP@. r::NpA O"uP<D#FY` H׮ PmN;HN]Wu SZDRLZ; &$@|#0X= 66"tIE\K.97?ޝtBwL~uλ #tT:=L>|]@8.P*2b _d\ g;011V,(oJss@w@V0AscY?Œ;=hЍ::×K.qDy[&Oʍ)/(>qYn]t.T+cݼc~[mNٮKV7Dmc2plʵ\B gA?ʵ yLw H# Z{ˬvNPkYƀoFjcpNAR6lP# mwܹg[j`6!*UO9jKkAYq?iT] k¯N@~'讶+nd OKpPd`L|{bbѝ$8߽b 3 qXAe?\l4/&SwBȶ 6#68p-w}7B#dM^fܦXNQN$?dP9#3a\ @,(DQX#p`eꎗs:44cAG=. [Th]Q`[|T38N@O1f+ "&{p |쌔CHcgV:6xcXmbh"irxڢ`b9!K  yBHC;ukX.7gVbs < ?"^@L.X4KJ< w2B)WB 7A͏V!y+zt|2cz. 1PĘDSMp|ۈ<>Eh@|%DWy*3(XvX4@2Hf;)@8$׼7؁>u|]>@!X 9JDfG_cA`c`-*UH0 1!T "v[ kh(bhb`@:dmB {Odߡ0xB)3mB]H[N5i-F]x~'WG[-$Ef h tm6qАG$*@Q 3͔<#q I' *,|p! d$ +b)YOؼ2xe,~ƥl(N  cG$/9AA1aG|AE4^@| N9l P2`Q37{k!cǀ%ubp#b9hDXW,Cȓ NqA9XyEu))jfL]x>YxJ#10qxebO#B3U,rx6`0b)+qb9߸ +`v#Eʹr0&TQ;KbABCKŚXAKa3ֈ7J+kMGFX Bs8@ѠFeUʭAAIPO34i-i0JH!cm,a=y8O6c*◔;;茼$B mR+TAf0歷 E@֐h*.B;pLRy4i*Vad1u|l@ G,|עPA<ࣉLr4N@(|/a D3gO=ȈB{lSrEl(#`^6^0*$.t,yDWȫHNScg{9(]b\"!t[}íŰӡN /;.C'\|42 $+yb|2xCSE nS2}6QX4 R(C &U\Qw`mغ[׺* Z@9=x MuŠ?)ײ]t6,;;)3L)[Xl>~"`_vW< {t 6O r%np`Ȗb)JMJX,M!7@Gg+M0WAa "mxSL|E4 תNx.ѹmm҃q/ "Xm&v'oSPـ]ZT/>Sj b2#XN {lSՠc9 Aޒ(rBrcP"'p*/D;x |AX-c6*)5lmA}'FޛǼNwڡle x 1 `l^ğ=6`#Vt\Pž+gb|SQ}io>*rCCXQF?W $JT輘?'сg,? XVUqF`Qed\ٱʉ6߮TtHexUʕ 6N:('w.;\Yv܈`B\f2g#0g ` 1dY\%ZeUf}c#̬.we3}Yk9S~cswI~hv6nƑ{Dɂڝ7ij|dQ <o+L}- a)7Eǧ>\j(ոAk؊{1ۢM6u"Q@fkQ*ʵV {2S7 ^ Q٬1Xs:2/fèc[Ku Zm=EPݳr5? |1m;n:O N_k=$l=\mzqɰr) *Zkŕy`YjPɨ+Nig88{QPcRjt .D$ᦞJ7X( H7 ?V$JEQK}Bc`ēqbpXV;5frUUCzD窰ӽ_D+=g$bl^bm3>OMĨ/;/R"Py3n9e ]@6B3lC`9(Ӵ`QHB|Ɇ(Emƺ Joޡ%d]_j$ sUWi}A(1B JҗqZ26ׅyi_sE +=n6m59GZd], [CVxi $§w 5}eIJk7mz`:?N01(wr%J7qE~ '.ɳ e/k<~84mߋX{q"fE &m!.5T^vDh]':&qXsx-oi5Nc3*4 %iºHa MoNyv8Wh0MK =mZ0\8(i$+j4mQ.⺶)K_hCVEuvnafÕ/XrlA84dpE!z8.~ "qo9va*®_;qq*CL|:.A"A [X2B'x桍Q`KEY^SZqw(J o)iJgQRNc-p]շIR6khkimu lW'RxuQbAL.?{% %ۏ&Dt3|yOnm'`_Y'ǰak&}hf_ǹ뱕Ko!YJ}6Eh}o"QpqNO&88>vz3vZ=rFB 7o!0|pY|Q=ϻ: Z 6Ef|cW [-C-a&A[qw/2]E cYqS smv`'4ln"p{S,i{"s֮'-|Λ@N6/|ɓu40M z! N " ._|nĠڋ~'qY;0[9 8Mdns>v픎XZjz1]5]G-m6NBҢi 龚-CQ0XmB>uِ}3*bX$U rhZqPMoEmă/,tUΏSkfiPMKk`*ǃaVF +G7  Ǧ*Ϧ90p8Ō:|S˞|}z= a֋m)Vh[KozDܴ;ǓfV7PC6^ؘbg`\'״~߀ j5!(J7baZOKMܜڈOy3bm+iгz<e-N..n%Y_I]Wb {(nƦ]GC~ştOkI`]KC:.?qɰY> /m$Xb?KX6Gaw/$U哛?M`g6)<9M#y;}a_9z i!QGӴ7R 0 _tU7qC,x7ib?ծ1I=D?Y A\+aӑ`{f NŊ9+\|%"/=~дp*ᛐͧ<R}݂bC ;X, l |D.]Q yՀWFZpRO\6'(;@mގ,Z}O[qZjyVJPg~k0{͏pJ/Y} Fd*fÑՁ͠.uqG,QmqXCvT榠AjS{^ 2c \~b|ІJX!J5v2$u0t:+U80:Wx3WWSAxGXdɲsWe8I<x,|t^EbeӹqꕈP]r1[ځߦ>llisz`q0v O^W$vx픔jS=P ·w5_2xkTŋؐXae,j˺V:}WNSjU@nQD.kM5B<"ɰ"Uo j'-@؋qy GnJO-xU.MU鞁EH.:sL/oMlL6#MbSN+|xn1cZ\TsY$hT ?C*ǂvɖS$gEb*Z*ze¤ .SJ_$MXKzV + | ~IW%_>] VYbYmH~ӗN9pwGR HUZ06bP+aZʂ$c O^"m`j$NL18vDSf/*]j`8 h{V> SP$ܼۄ|$.9rMX=)-?y`Һ~l#*͉%d/ 熾a #].W5J>u5~[\ t{iL[LWPEmu^LvT7(BJŃ"ƝZaM)YsT×#!.rT-1Wz!7#?F{+d:ؔxlr|!ezMhWIA Y$ѰZ*)ĉsDzb]]{θ+yig ˡͼ.P&6.k5rb)X/L38j1]l5wmŊT~裇:ə1~in| 6O>udN `XhZXa|K©zy P /qZ)&_yN ttrʌ^HpU;뛖HYpUuU/3^SWݡ RX]@mkn&w8㬛t_=٦S(K:F<|y zZ/m]b>2K向q%_FQgj]hZX.v"\ެ=۴bk}R5ҥ.+='Ѓ=q?S:p:*o?hyu9*G嗀’#=|`QA/$y$ IDATeŰX@^ҩXѥYjeH}&"buqUyԗ>X$s~jp7{V1㞉iTpkEW56Ry< MPV\yp=0ٱSO|"S_ȹ0i_0 ȁwN g؂uJ\2RT}H ꛗ6]I%}SFJ-r3Q@!J^J;K4.-)=GsNJ;g~f_yN"nnNmymugV ]fMPuvqMH<8g/jb*PfbԠ"xL:V;%C^v=F%īFj!Sװ>g># d][nlD>R80~#fX ɫ`o8՝ ?rȃ7¯$}cēF^SH}:vO<-;Y.r,׃DK 7ʥncS;4dmY"n=E-\ܾG:t~0G؆H^"g)9ؔ5T`-U v}I4ʰ G ]WOuuxrC}_WsuzjS_șصL"_逃=/eE#S(xÕO^$!#ȱ 'x`X7m"Mݻҧjʰ5Ъ)X'sY{(rkS{UxNI=/M?*"<{z?|K U,~`Yݲλp4ѿ `ɲq9>3>;OS%hwʣŖ0, CVPL]z(L:z\B 6C`aI}T{,nQ6~W}! k] q%2KjbUގSZg Eϐڅ3/O8}cUE[x1_j7*;gnMxMfꎥ󍭜p,\q4K%$j bJ-MXDžgVceC w/mMZŲW17M\| mK6}0O h9 H$,qr,On(Tlͪ2aG#~ Ҽ5r ?Grף~/kC *V\G]ݻ,#msWf$T051:v_ZpRP&(LEZ]JpXXJ]h#o$ɭ1TɩK<<+./n(w U Cvk|7VGg_zfT'cUZaS90}!GS{ę#.9,5'||ofVC_+z% x??ˇ/sԺupVi62k U]>IcUV}X]Ù z[3^*GkS./s_P8޵t8ʓM4XpKBXrgyi>0>wk*>;^vM=z棧|kylJ?5 s6==̍:~}pcqcUHW}Ms&\aemƼi1];pϻZ s<>yj(sGx}l8Y.yȟG;uAgycgk%7ݦuku7}-Ȼ׸Or'ƞ<'Ub׺Z]p˩}Յ٨X9㙛'uaM})1#pr;cOm(9ό=71d3qW͹}Ɲ9bW>n[d\oF VsVLCy܌ {4wI}-w^MleeN4GcSվҽ㾋7PsX3p='_c+j1>V<#{C_%O?ԪF7x~W={yh<8ػ`Y9NK9??U<ƟŞ^9'ˆvc._Cܿ[Gk}sSWG9)sn_iSe׵@~&o}̟=<@HD$ Cso[_][UWWV(  Ganp &!qb .%. 3'6 :#BAC[n?HP1 ic14mPNG  IHDRxsRGB@IDATxY%u&RKWWRUdɑh-,ك11#bփ2c0 2`^a@bHc-X.i")n-޵RݵoEy3U7OYs"rq##C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C X<G |Ϫ||K B!Ӧd.ӏLr1]: B?Ldž.Q(t[>U RCEp:.qkIiu m[(ޕplnsk4(sl-wufi:w? zC~h[ rW\0ίJ}G>w.XUٻWzQߵ-=Mߒ[z2miKzmؔan^Pbeܒ^|ssrOHu(E_YUU6}C}}}HmjG)&o76b10)6=RH_cF k Y"䖴 2 '9pHW}Fj7GHxr[(D|Blzݴ+ml=YvnJRl} `2*RވȌf|*UUܟT-Kr=l q*N$HwTwLC#H[K L̶]V[76_ 7Cx􃘷C +捋l1˺剹^WB}EՃLЊ5m<|b@2=ͭ "b+eɮVP.-6̩Ϸ]<ꜝ Ke;sL:vircJ>Dv6.Alg(%&rVMiwxxvQ_YZmp[[7ò;PCɴ0PnHK5b-ӿW׮/h% !<{3&LfStDgz4+! O!fHJALSe|)6*@330x%>A[mpBmmiI1Kͼyr?Ee1ڌվm~s]r}G [?Xٵ_i;XykTgxݵKڼi ?do:4w&*4fUfC7m܄n[1Zݗ`BuܺHeǤ{/ T;ra>i7tL lNcC ?*`Iv*)EdZ0"r۷q @GLQ+Kd.{us۽}wwcwݽgzCna}B~ 5Hm ?۹oKWWVݲ5t-a\;V̜` | ȏeUnHZ[] ݼDzpJeVNml; `gIq)̜e8~(/`C=0ڄxw}8z" C<>`~fU!¥D!:lIaiswmooqopڝ?֗ 0@ o9wA|۷XL`AM] u8fX !S#6K <>A1NM!{f?TΊԃgSsNC9+2^/k˶<(}Cn^sȽ};֫wwٓޤ@[l׿9?)Xiix| -0 mn^ۻt}p{O̕_O>}6ڎ;ܳ>>|(a G!9d/W?U׮齅ƑnܸJ+cz/^ iΎCnhf W>;vsdq7o<[?zd4<=@ , &'iݻw__s/۵kfENΟ|mB2YY`bہdS D/C2`Z>#վ2>[ >?]]-.y ߣrM aiF2ڐBztN:6Cz1{چleҾa:Z~g}i مܐAXHF? F0hcB~Xj ɮ;s[/ole,]\ݪtqȐ0@I(hCc!o`,L&a '9;7v蕿-Jz/*?T]41~D1cv1>LcʦJM1Ń](C3;8qbۈА !c086z ew 2p0A>lj}lVw4 =~# GҽC K/zn'ΝiޫM3<5pq~_,K!y6Ƈ^LWTUW,b|d1~M ^yqR:]ߵMxm⮊XFfm8qm8VS?񿐗|[݅g]w0oE<7}s,kc3:nӠO T3-![\UBuIC! C<]eGM,.C7"˷6吼i<ăM>:ȧ Cuxi=@8rae(IL΁qy=8_Q#a}}9'q/x?}lvhi/h4A[Sk᷺xw- ,!?&u4Fu^E>U8Zҫd)E)zA/tC`F#nO߾AoSWNu=St],rZa(y nE$sι .Tx ͛8dZN4C]PI5/gTۇ6֐S׋|k=|ӱ|1m]jZzIZ}`v )O?1(2 eK;l " Roz1=|n!ʷSz㛴c"eKQ'~s2= 'OqYNB ZW( O]~E,qo=$[ 98֠ua  2+':,61Bi15S`۵^߶~}?ijneU.ɞ }dw@^Nb{Ulp,w'K^9=;ԋF離vB߱N1gH70)uOZLŻ}c;P}::Y =0ڒX&&uiu<4P:$uPP8B>^vah}ƦhO=꠬(CօzVP ;#so~e4 ٹ]%}W 3y`"X~7ܱcǂk=5f*^e}8+1-C#,<ʩ'U7uF=!G'To?ͷ^(?`6yA =D]Oc3 ƚ>ϔ:aȦ Uk>|Z7Z:e9>/?.[ yǓ_DwZ0"~8yvm088b 4cy`ȴ\cH#Giz3 =`%#߇^*fݹ)'c`L!JݐLc}?Nj)_|59פ (. /77 YY> ,ƭQbB!]RR;.w.cĬҁ,U/cGƦ5uc[E=P[ct9`K P|ZT\bodeL={l!=bZ[LŃMn^L4t::u8-ri4t>OSd]ouh1tK2w>8U  gs?}W@F_ƍI?ڞU7UTT7je^ms9俎%d!MZI[?{|6= %<؊.@5CuԩS_{J /\kM~ Fϩx'U^>uHm\'zЯdqk=)'%ʞ.670S obSdZ]nox.ep A}Pb_hTkN<ڧ&h=B'&dOlM)6Cd>;P$~ ˶7(h=Ұ `Xl2wKW\q;w[EkG}/@p$.$cOhBg ] Q;Vg1h?{k<0ңtg2lEY'A'C]YĬҁ,Un*f-PR2URuS+{܁=ݥ]8"y~-{',#ﺧz}tzz\t} _(hZ@dRw0`VhΛ*"!ɁEX~ljA@<ü8>rZ=]'fq.1('^LFPe65fS6P93U>RuS ~ݏN~[*JsrL8 ?ٴ3gs={ݯ;.)tRiz0Sc>o}mg#Ёd1\m aҿ09 %ƳZ}bP}IƵLGX>q-?C#V[iL)u-aRO3]Oe)Je'0`"wpR駟{WϹ~@'kGT=X9X.xZ[ŷ_ 4T2Y(m[20Bz12A GɈ m}"8uϼ,0:[4<ȖPtwyw}oË!,EϽ_tF &^(Ǔ֫ >PW%Ug/pg/V]ѭ9tNs ʰlme\[]̑v)NvxeYhs3vILҪl3ُ$rFK sᴲVWFX{dO@v;uW+6^)A;U7Uwv\ѤzG8q=vq|Aa hHKɽA<,3˄ t1G.8鿗#}\T|Ҷ*i;f˽{i8; se%eAObM."As8Q╝‘c1eת v6t;dbh>0NMˮ([#`K~gYޅ/ETvUcۭ%i`<8@ #HPa&4hkLcAݾ}.;(,{ys;v/ҺxԔ]|[`h4]8]ǘ$>^\p3.R3 čGڤQ/ 4FmkxD_s^9sD%X=$ @X@ҝ[}=zޏO>._nJJVS]LSm6l e|bn[{uw%co_e]66ݖb覤>:ݭM)㑺oF}bu~ﴳG[wBjm&-/=mmš;9m1m,`P*3|Ve0A(5d^jϐÈP-E;cǎ#G-v c;av :L&ꠌ<˖j}< }67e>!xӏ?$;>0֖٩ȁ} Lۢo.9S!m{=E ܏unI착Ġ-6]dDFL[dK~oQ ھ: DBm6(0:v_?S6ߛo#<:h~~Y4P um*""Nw!(b]IFܳ<~>w=#3-JH4b2Liħ#We#=%PS7bKy@!dd^57 ]yT8|g}pE[l(ՅkܨD?eHrQK, P [ _[y3@YFT\ x2&-Si˂W NF? BKlA?YFNJ(/a|3G `DX {/; C5|{me"F2Vd0}y $,,䞓CGGFY)m%%⏺Kp}2i!u ?hy⾶qUwq$0!꘴n&>+QSrʹ}Hv#*? ނe7Q5ԦT6 2ff?S2߲TSeST񴬗ǣu'O~a-xXچ<Wv?wv7 ڠ|g(txi//]wG8ȗ66s׾ Ӥ_Ä|i%ɇV ^0 TW&y4S4'3Uϻ B߹rqޫ,ɀOecS_Xµ)+qAwsSE)9n(c|U=[՘BW>cxtcG!{Ԡ^w,!eyyEHq vw;dCK.'ڽs#ww#w 6hm^c KB1~L3on0xq9;ت_rbZƛܻ^qMG/V2;_/+7;EtL Mcz?uJL poSfEΫO>p'?ܔC [jYi|Ҋ;ъ,* ,_@zT ChJ私:UCP ЖeC6ڵc/sy޹a+o% ON}=S*6l۪m/9I48sw" 7r|܍c'NLGiZh 2cy⧉Ps] ٌc|>NF!mY$쎉coX{VdL"˲O8t:$ kM%NX|БI/R:؁:zd_v1Мf gB M' 7 rtMxmƥͣθځ[Ϳ 1b@9S`TZNNH Pq¦*_'-10>eCٷÏ8wxm엞qqWS9b[u:_o3AsJWٔ܄j89/!x>-TۿN()/±<7X) Z<5~xt?Ny/N;kc1xOek< +"s8QfTt^׉N>0 5 >BC#G珟0@'3 vU_}O>mcw;9$/KtM0ttUMX:a_#v;dHP!DF3!A9`Jw*P)dӣ9`]bǏ?Sw/NSq~-" uATM=)J3XXFԃ&X@˽$9W|W 0AcHuMӆɂN I_~g+: RڡQM;FsT']N ұ<_ίZh`/^O;3q5c$4M {=юC^CS[3Ȫk88LTlmܦq>9 hy } _uwy{dbE[Do;?g)=yRF{-c:,P1Nt ]'?pbڊs?1yTr"/{(Ko/J%v)i\UB *Us2|+[ uEX4U֡RdbQ ̹~sɮVq2 vU)nS^U IJ:UeM@9[2]oot@ |^fpFQc_o.uӱGK~(i$~kߴo13}L"ҀJgX#I(xy; `ܚcZH&c1;\GL9yGn~cT);%/rmO56eN}u,{ebm;h_LD?HZ#MuIjOP"Xaԇ`@rbG^RY+29`=6o@/Rs[bv0vN9˖젧e:o1&-'cEo" о"?gc ;{T~N1_qDV\qV;l'҅Xu8"3>{wf)j+XN`C餭-hGU yt5X[]y8lN ;ΠGݦ2edڗCHߐg.Ѿ;[f>v/(_ăj3``2*6pUQ^M^?+G⃘ 4ς0Nb i'sl٤Fl4-~)ht # Sʼk#ڧk&:g8-ڰSd ^9f?_~/)4*3ثs 'Ut0aC)_Jg>نBֽIo놲IVňNJD׏1ۊFi#\1:Yȟe!-:gDa-8zIhg(Zg'>-`'}G/d)m 59/a`H<Ӕцo}21-ߖ4^t)Ѝf3͉W|o/m2){G7֜r60)" 5qkZ3Oȣd`2'OLAl1"?q0'M$AaШnesh^+v|W+iUx!Nţ|D>m xWHI8V6Ew:5wC+e7wnPB(;C^*JVk)"%3:<\B&+F4tޤ Xt̃2ߤabvM#66H/^kinw,=bBfX.Uh9Шn-gjj[1U֡RXU=lRF`@6 _Aɂ60R eXVH89)wX0i y2d!el$e+%_\0LrR%{ߒH.łïW̠Bp'{LLׁ#H *bU֡RX_wPN-{d߉LhFZ,%5#OLZ,Ұ`>{4$v |]|bj~yWu1<^縘wF.?+.8tSֱ/ˋd>6L-%Om(Z+@8lqN sEo\կ'Km͝to1 oQ iwPXL[6ѽ/FA=d\n{ҹ*6 b;cALm)& RDPkִX3)ᧀ⩀@x'@: ۼIPika`Mz+ncO& PG'?K;M-mInycr0I”V~F6 j)xF*٭85wC+Z8C RXpFf}/|߾RY Zl*b(kұ 0o\XLYIx8byϫF )/sx_llf{&S2=\o*F ۏ,V֡R8ll|t6 jSO :c 5ԈfJ,-[wxږuE y]m1Y&erzµUj+&IzV=zOox2;'e`!C]})& RDP{c'-L&iI8C jb );H# 5(dcq EeImXWӐ兂 x!.xڗؼH A9/UwB^W=ɀCO0 /x1aAxQ(RB *ܼfugl8PNˌ_ĬoxQ-u1| ҄ X =f3 0, Mh5-Å cl9d^{dot{MfZn~/[B xy2`y2 y?jnmoTM+qچsI P,agzg@hh+3VB *S I0 )o Zj (k^]VV 1_V*ò6ZyR.F|b-akP'O|^ = }76Pˋ3cN*["ckJe88wc, #?; C,@e ܎b(k8v5^ԮnuoVRGWcjuʀӁN&,/&$K_"H3xV udpěCJah3L6NQ2{'L9PURU YM 5f2Xn\fiAi+E6֖fyj.B~B<m|U[uY K2aVvfzPAQx1)f$-;UDaFl?0`ƱwLur׍.xjy:8"5 2Xa0֞Wv(`'[-ӑ7-'F-^L/ob  ӺcI'bvn=X`~,~"`q +f=pq#r` 8y +ꗠ2p 2Pz? zn>鱦yǨlZF˪)_kgޱU0Yi\R)e1֥giؑ/JaIs*0k, (?x".~Vc ͞icU_t!lwraSh;F,i9^d}j*zAN":dO?Qs/# @|?Y`¾R#W‘4r6'Ntb {C|@!tB(Ҝ}6k9X!-68"<Dȏf]ڣbcuB8u<H fB:QH!uOc|=g^S䑈ż-{.A[9#Hq37T^l&iFU,6{;y)gkUtDLR01 ҉C!ĀH;*^@^_ )4Ӛ:麨GV:$: 'O ҉3‘vY OP rqq T9 >VH tBZ&j-Ptem9:Gukb>4_oZWyP#^_p>}?N1X 3 LlcNb!i'YIHЙ%oʀ\@?Ĺ3ӸU,ȚjdpEV, \5aqSmIk`ôP<*;j=kRbVQ0yVMA=bo;<Mߗǒqx`N@N :m żF;kd~;dw-pV8X Up/CTe5$f:h[tg'N2^o-?JpGשBlk%N̊@IDAT&J?3%C(^!;@Af1T88:0 'L$]X @ uCq}}2r0dk)"e7a04i 3 iYUJ/fӷ|ړZ.x}iuc}?diDq#ܣ;Pgs% 1P?otѨ0H Di#i nLA%[SR?ŀ:xs&OtdR8iHG^a0T ]ۍ+N1c:u*+\K7_S'tkνo~ㅇ2y.ɀ:99,@)NqɂN <@jĵ,9 ,@0 6^: Sr-4ʡ$a @a^u ļJG6[I%X!wӃ /pS_yŹK=;zmDZ8KA7(:!|UelR#n\hS~1pl: 4>4#0rg!Yg40Р՚@ȏU4,x}j{xv*oInH{+cX´_K8Of׀N6-k:VQO#JĪ4wRolwU<@ZAc0 >5: 3p8 M|s5ܨc^n::oвe:֌UP"6C!M4 4ՊKHM[1ljM>o_P^O/ZZSMC䅰4yRڍQ\͒ >Wό!g$<xbMOf : hYg`|"lRM 5, l蟋 0|Vd@`'`:e<ɡC:ݘխ;#*wcBF<~l?X[[2( dTJ ڛ7hdL ,f$`a_LfRI[5PؐatL] 35|j OeeMvVɨTW_oYo^g|ru>.  / *k;%\,%2`A,7*̂5OhM6$[' (l3|ة&ՆnʫvzT灪˓a #$'kćS\aHdX8Xoy۞x_@ל{] -V?~]bqC&+Fy^d݋9_ c 9$o 4%Sq=Ï;j[c9rJDP)y(u!9yMhS>|ɯ%!2ًa<ٻO,]x2HC<&>Ӛ@jӏc0 DHn;b`t$YS2Fy Im϶V5N -p\k i>tA&颯ǷzlUw8S7]%Wp iX@a(H#jA67s͇/z`zy>$͑, %*\e9NRGq>,} 1Nkc:&`PLQ 6c8.|yT̖*udZPN7$_Hx >7JGo3?#򱄞A=qט$aDy=3 W%kkgYqg \0)kU%ļRDZQ6 zo9uCdgWgH=Kagy\1[A9Ic|ʛ5><U1˲MY <{ ؔ m;q gi=LYX۠xl%? d,@bV yMXK9a0gGdѝc(6ku4MXe&ġ\MpIPiN~'}z,ž6 2t6$[' (l3wG@C gŠ1KDN#N`J waB/:qqXZT\|Sl9UvMiWus+tȘBZ1}&>x!_<}|,c'a~&ܝ"z[͠!AgD; S~aH?f|ʏf<8}| 8> VeHƟzhHFXwUy@u\W)KFFxCEKLjMjS)no)E0P$8I?2:'J#ZO+A`YWnȋՙ2#-.-CsnHtgkAYvռ&yطŠ$>+0^"5Fd̊x/Ri&]K4US|VD (*݃Vd'I,TH}@+cݬ\-. "᪶*%sT@ g<3`ؽ;kS rwpcs<ٛf,cTeT; rcbq&8޺dǨ(ڦ._EYFSy |~4&1-dHcf VEgeb70;J6ΉԂut&Pv^ ,tD}yoK(uZ500G vC+G#16mbrՍ쫠$V%^ ̷r`]ݏ#!kNC~ܡ$1 h4#xO@96߇Ӗ6V0@@F=xMMC u!^ '䞺c7^lR#"c$@Z( Y~Vb{I FaCB0yNA;G>"@y}cq1!N]Ihl/8OT eR$|ĸ,N7IW{1k =%NXhi9Dl\eG Hd6f>Rkx`9ě#Weg HkgRNBDd kTs u~!>;.StSʰN_ 75[=+W!Ȝ,B0o$E0cOPP(^s۰QaBA%`:n" "aǂ8=RvZ' 1, @qU""RbHFRQ(!~U4`_g;+ydv!֛큁`_eZGA8 _mbjj1P OiQ,Z*Pf$N@])Z#LU6m-D rfkj/" s:e19)'G,]@;Zsztbj:и,/ Ǻ&@~R'uR(5.@u5ؤƺSd>GrCDTI;}LLQ ,S2g{x``9#'VRVX? ԓ "@Zĺ_61msecOBWT&.䧶a @qpLtTPLkJFMR0oy1^WeF_L/ ͆ڐN}=Єxq,Җ#tzHA$Iqbul d@Z}icBi, ?|P-P'u'T);~\=%^욎u=oR-c,~G6 W:?σHu`Oj4bM#3gLznET 1+!YXZHAu!Y:>0N(O;b1Zh>yZ`_i`FyNۺ2t0{w:ų2VԈ&u_ʥXK41G?Y,<_F䶦-B 8LvZd(L#d 0mHlUvZ}mSZXΫ JURiD t"!0tyB~ϊ+'(KbөF)&͜ Zd$4[$~|U09PAh`m!4izb8\|J u3 uICzt,/y|7+b !3d4D?Oև@8 ԓ "@ZzzRĀrGOx XS望:oޢ# ea B`3D~4"?h!^y9Fff| Yn3 Ih08]z?8\:aLC<[.qhҡ)%|0o`;/Ȧ',΀F5:so}>Y glk#Տm1Փc7Mx+4tLa00~69Y6,Kh.;ʲFV2׺Mv<(x0IwdP4m A8d`5Le>Uh 4B1iDm.،RaaZ/ݓN N~ %@^Lky<F)&͜ Zd$4(1 "*fV鶔%L;3:%AiT}X<ן<Ә:ӷ|·tx*1HI{ab' AH'+RӲFyqoX p\ΑDcq1KXhݐ);}ɧH1Ba\ălܪDwx 0f-Tw:o(_rU t+s4Gxд5ظEiڐq.lu0F^\lAXJ Kq TErU}zujmeϪOB$;M:D Z]\ "yP\Hl|K]ky_Uv7Og^UCy^S)Ra"44D@쑟{DWiX[qCfa v'׶-@rXֲxHc|H.x啫yjh:A8 ݒ3ճ'3͸L#qJ $4~=ӝ$#1Pf`I'|wQF}AkUɭ~r菃∪O9Zvzw 6rs^tAwoCܵO 0fgӟ;[|TY#9XZN6j輡zrI 0H:QjAoaC+g9UN<͌:#?Q82|Z)B6-qc(~3@Ț\= {Z` KDQfӘZKc'w=mLhRN)iShZ޻H {ou0vՖ~29Ӯ^J A_uXCl>I_Oy#)XseG 4^!]9 @ǠUgU+UTa fT$N@;`i'-`KZiW8 ilD[뀱ȐZ LuB0_I.:RO!Ή7*+K.ΡiqE~)1́B@?,q~dlʕұMOU_NB$e>\!®5_CMca#Vkg/Zwtl! IN{]K+TyeV鶐d&tLAT]I˷/şA)?=-=G'uR3]ܔ>/zkx ]&:'iČҠty 3 efu:YLjSm:e0yչi~C9aIONǤDI#j Ďş:fݔB7]tZ' 5rq t.*thCue9ldJ C޺=0m2ZvuȢӆ.8.^o[pj3Ik Vc>ŤE0"dF\Lx2`{C 0 Ԉӊ4&MjEhF(ib8vI0%HҙRɘFp "ZbSkvTlHpC\TaYnELX,4b҈g/9"^"Y ~L~Ķ$mI[TZc)Ugx%3;.n;;"N'H;0ija *8 vGtu)t%k&׻v^@ZWG|](p=*O?e+C'hicz Ԓup7Du?7V0XEڳYYw:Q&B;O Z^i]XӈSRȷsE^z'yyHw{jBkzSr3HCŢXUw'$h tʃǏ^v]toCk3q4p5$L+Z*rM(}rߔVs{'GZ-B3 Ժ@yj:qD]? =2`]kqd/2Z#cȰ4 xZMy8',ݩ%IiY(y1[AC1x7}%#Ijm_]'d_? `ً千V剀dU%knT H "@C K~YA^,@dJh)8%0rtu`;Иm-dNur5ELai4nFԙѱ8݄"X rqnKClp: FSpv nVI%/l} U6f <_iRfi\#QѹF +yYPUTT{lƑ\2X(W@uAY0a4Դ}G~j:qn_?ӣqʿR0%;Qƍr^98yΎ|K >ej~PbWvkΧ"CBP%JU*῁-sDA$z;>0Mͨqk踡:LL/Y"N,ho|)Ύꚏ|]v(-6TǢ|^čΓ r&Ql4R)RaF  >5;+dg]0fx kڋl[qJȠQF(4iEsiyFA@vVOc(R:ACm `}d7+i_A%,@~? 5)@("ߣ'X#4i.tJ֨OM}7#0HsQiUHkHTܢCm6Hgcg M}i-\diztU3FR ́ T /Sx$e<% Lӟ.kzYZ}* 6ĢN<5X w*f!#Jm/8s)cyVYYU~ҝDcJБtNRq[i (Ijjs 1y"`, 20{?LRuԚ:UZ-X|Uc "14F1Јq3ey0 Mb)eylޖi_ECʶNftM `2[<-fTu]߹ S LJ*"_ƓjS ,Aj"T_%\MP)8:hQ{`=@ߩU!(MdȓMZhE4;zXm*S"k֕KW[uBN[@wZ,+=2wG@O==x@f  kqJ~k犚.qzc Fi"Ff|.VN-鼶?&zw1m}<$~I,দ67T:=T@9ilHrG:w@n0ckRCEZ,N@Kfm*aшq3e =5lӾ}<VuZph0>$` /&!^p } =tZKsd7{2>͂>/ ?!A*X%Eo뉙EJd-@gX`Tźkj/ 5FϜqS[ l"+4٠^ bNB$kl&6 '='r]<킻~2;u GVǓXoWxͳCJڝ uhzY4q̺j8$Na  oߨnUM U.K~Pe5}Y'u2ƋcBԱs~x^yl':x^ssxOqJCtYM~w@y[ȸ0WshM3HvR.γLM86n> HBZ?$N@1$D 1H-ӀL/]z%4OT P/=:eV ,VC[[ϪAJ1WQ7 x$пǗI~1({JOѝPgH5haP ;}J'>m‘Us'Ff񳇩Y37.5xQ:`L ۴Gm} kʷZh8l~WeNa LE4ew=W!~17b芵 r<::G [^5:Yu¨P9(-<6\]*1h={CwOgP~ϓ_8= imz7E2yígcs]fn͍k,N*o/"]&2xz vˋvg7 ?'쒗h,lL)ǿ$Y.5D ΰ P`Q\k2 Mv`b ;@ \DJiZi--cavߘq8<=vfWm-#ZIQHHľ7F7z2ɪYUYun_VF>'3ϖY9$:MP;kvajY 2S'jܗ/ەKZDy\ry#MxC \sVBFvɲǻ^Zsj,.HP_xUdlL&dR GEp]g@CƑwi9rgf9oe1!SOXO̴ B6Ne&*B*ۓEپ=N묞j}ίJP4лtkYY³xC%._Bh\Zɯ˪ZqB-` ¯EQկ~85Im]y痎5Ww^cτ1CĄ{y<}|{>k{9m/H 9 7f@:rfYy[(P007 mlҚ)^վ;@3:(' P>倇Xr5^$:'=Ow*jtTڿ# %󟚚27o?m6@H+aƍ?q;_c1cd97{Ĝ~UF1fFCu*h lO=MFl"O"GRE/%hb#wDAȖ,Ho*I\oq:f_~cѾ&MԩSg'8{ڀ1bO=g1ivm쐍:_5W,ڏmOڿ_ 8Hjo5 98 dEoZ ;9|]Ni(u.׸VUizšI,q;*4YxS*v>`fI$_xHIݮMlZQw\5n):[y2#}<)|}%C> |UߙiIk׌붋f^],`Co~fÆ 6N s0aW~W9|k!ѧͱ36G?Qcnq9G)Fn(R"9\aWJBr6i^=t%( =]|m_>V]g'F5t'iH,{P@IDATG:wqet7qbk,É%*݂$[cټtK}0SHٟ"HͲKoi^~ -'uJc֙g-zm>#20$>8g[e{1}?~ܼ3?=of~yJ@U~Ӈ丂pT)@yDh0]焯 h\MgZqu9ef: !ȫIL4MI%Ӻu'a%#L669!D9lza)%qc2B0b 5э`#Ys'P2B 62wmvt41}ymWܹ_~foĻ;_nN"g6Rھ'ˎ^k"qo\+$0OQu;|Ǟv 6pNЬvwYs.mh2딧^].ǝ\X>_RqI{qLB ַƆ1C-6˫2٭r 8= "wX/6ٙXс 2D-A٪w{˻̾m!c_|;߱#_: {2_WVO{<`?Uyގ} KSxMq66 UNOV`=/+,2ܤqB0pQOʲetǓU3Oeuۭkq)暒Kll'!q&$lP(`8_ʓ1ؤȐoļtYt_wWΚO|G&}tܳqw_4]ηgϞbc{GdG~i;/`zj_aYIJYzC: e ˎI:*ǪN#oer }2@9Z`eN]24ȻIiܥC^6>)6'膯Ԋ{ɓ_NKYC]/8ί) CMX|ռ&];LΈ6m2nX-a k:q^ńIFX@V;=Kz8l_K^nAdC~P$^䮗 &-I Vx,,,o|̌L(h0ar__E[˜>fVg%Z=Et]8&a$QotJ0:z.)}I<6Zb 1@BrH%WGȺ`cjKz .  /  )>spN$0,5Ĝ9Vy;I ^OviѣGeuٺu˿KKh.br ?>&p,j&9;tMԋl#au(9wh0uzn^ ʫt5}ye!uPԸֹy+#8+d+VMtŬ(V)ı,6O1(Cd_*PU^9l,U=SRe ;9am8$ŗ/[TµOڮXzl!gF'wxi:$>@ed@Ьd=ؔ0&eIz`rR]qV>Ynذ 21$y·U%7S `Y޲)X3}jXYbȕL,PYe6Kw_?~jERX!O w*Kl~~( #FB&O6xSIب" /k$B3K@Omv$TttQ5NL,z״<ja E%j/,Sf:W혤">8n `c 'xV@l:}04 KqFdπa]u߰׿^z cݥpL,E@s0T$190 Nl);"ED=ܑs'`ڎ%$ 2S>``@<]qxͧW)cic-)< y- Td&|ʀ RWG)b"vn9y7_syg͗Zf|5O<$lexy =xYke!;lDy6`a00K̘-V9{akpF΍L,'dK2ML.Ϣ*'? rjFoꪕ"`'"g|'"lCi*c.`W&ߍUNTFH9pcG13rgh^z%JvGUԧ̻.Y1f>xȒȍnSХ%8C95@||Y!%@\Xd "EIJ*W#;q+il$g>s=^S}}'j? TzA1Cq@ľ$,d z#*qz@܍Ith x!c Qk=wE:—2L2Oh1:hc_r3EA*0tOwDlɓo2M 2' IIE>Yb c#"o \z, 0o~SGWKegĝk7^>xTP ɀn:vL) 3оtct"CuxpzB4[4N*W9E8f^t8Z@C2X:CtӅ>hT2eucJ!:OPK@Y]8@>}sa' ] 婎ޥP8i)h'aReI`\=5eE٢8 `/N2(ϐETcu+ͳɀxBDTٲe}T?eoy%q@OA3Rav)䰒tt,zNC]4ϒ}x<7а2p56xO씾 `$ äanj(#sWe!!nN#8J +cy q߲9V;w)v\wO[a̞WGSO)Fj4 t$wIe3NSFl>Վg."gHQt ɣɫz;6`4% V. SQ$EXІF^`[K lCV #QQ?V\6 $:%~qyb|ԏ;_?oaSvdT֭1vV()>/m}gd~ZP~I#m?{ksy|1VˮJx6oo{ p%Qy6Gih-<{<,^VvM2rc@I stB:Hu/#=!<+jy뭷 v l*_|IY?j._Bf108P۹V"lʬm@r09@,kZH'tY8i A,E4{PdCS=3:[Ҕ+%" d;)\F2^h=r\WjBjy$y:yBIpі20-/٥`|bsqg31ܿVt,2 42m<kssd!eqG s{]I aPa5_?r<<ʲ\t9/xRDX6 fM&9a?AP<n6voF(/; b':zBw?"ך4氼 0{Κ}{u'?iA,#|:_=i:7E"o/xRDX1URjXFjyC,p&ե=p8l\KʀHUXF}\!,q49$9ZZһnY uWwrU6}{FQ֘ E*,\Ts^lelwe!gM+du@2 ..ϟ6G/hnܸa6|o;0,K'zWc++0R:i%K! a i;0I' ]N.fbEz p˫aAۺuɭWhM;aid$,- *9KIЎg0qI!#6 Iw+$Q&~$q(gtO ҦMc=fv}j9fdQcN‹@H {'*!̧%aA7}mEtC4<4Yj<LdqϢ)ܴ&^섥IR‰ +Co;1s+$Dy'2/rϊ|cB/76fBkW?Ai?|>K׏o5KhǜҘ!k\u5PF K#I_ sI:5n}|< <0O<}P珴n= tT& xs)M$(,ǽrԥFSqٽ#P[fUveU_w0N8v41x3yWͅ 4k QXN6:ݞ&,%"̦,2顒bt~YWUr(>ɮbK+;C 3d"SRJB!dwKѧI]&Ί9 c5WcN%ch`ayV>E^K9F𽀻e.(ȜE֡܎P79D6FhVٯmP0qḋP,RƧxm2!?Msn|#`nNA4𝀇zH?XmrpC!1q?cOvVX^g}ʊ9yCd졂:~wYZ#BhAY_n y:=r{ ޤrx c.mҐqؽX=h3eA+_?×x }4]e$P64KgKo?|{O>w`2\9+#&Itvr'b;Ba]".L0I'!>2]N-ϓ[GvU!OCygXMeZ Ɠ/JoU@;zE( sΐ>'+:!CEEtYɕA!\+1KXrW]Y*(%KyeHnb4uVm~_"0jd'dA ^LJFܻKtIȜ,P^#_|%5GGG^2E"TUE(Y]zl d|Q *ʋqsT`oQ>r/ =Re;eC雖j++P7&B,h!)aˊn0tE]vWWO y$yQꭈtCV؍k}˦FG/fiIȈy2{,lYX8wǽ+:Rh.qve;a2.o,#Z =!2َM;7&P訌0@I XV$u#cg:WUep=0N!>+ve@6lZSfe@E4YlW KWd;2[>@Ԏ>V[-p|J̝yR% s.( k KE˫梲@lc&e4Yx/IZw(KG},ײ5^TipO$qVzAF +5҄](:ЯHU@=KDB}04"豁.0 iu$Nμ&nÇ7@ڽ)8٨V6 6}m; apK(LS+},0o` (Xai}UTF(䄁l-YF * R|'* }ؽ$Џ[ s0uc"wTFDvO~ՍC"ǿ+5Ig622.Zo 8{BJ5c}A&S;P]L,rׁ\:%W|u,Ѱ :W7]MPaj֒Kn9 1&/RX2/ps>x)2@̆KH7S)&6g'd5ui&5e7@?᧹V.wu s D,A<>H~_ :Vrҳ%iJ+)*}j_`UCB2V *0cAw5۰=]8x0ڏxN دt]cecJ\?9`x!*5% Ix:W[?yH;S4}VR3XҤ*$A|+ K6N Lbhc:"dS+ gSȳի+op5LEMDq1I<<6hVM=w / j,`_Q+ pIoJng'}-> t$^ + NYP֛P!9a>pV1r1NNGҰȑ#6V֩%Ym_, G:}aBNvgT&A yv ~ hJ:\whv@sۤ[N p!d]S.=e17vEUWpԊlY+ON)A۟%1I6y `N4Ef2*qc_M_lRF`jjlٲŬn,X).TD Џp8iSᬋ`롘ymu]'֥q I<(ÍT*yCRVe)z$F_cw4XQen gn*ङzU g%C&iJTAHʹ+-r.u߿ߊܶ>WC_H斵 D 0m: TgE]G~_Y\һPdw,.?^9ṚL*$FR7ӢqJ_>̨gp%0It(sKE]]g%Hen&GncbL1B \-^ KNH["8 @su=B,@Amc}Jk&4L3axP:7B ܥʇP,\iG_T 0]HRtR7R1AMK ;Iacu9l$?/d#u cy -CQ]B<A>ti->y2HiؒR[J &I w$9} Ʉ<Qq ϓ'-C>KKK4n^գl eȓ0lŋ vH C*ψ;e$бNgYMB+aAM87vVK>JA%e!;v?xh9D 3طˤ@Pk&6E.z$:;w7D@k&K6ӧ  <KK3tX36P3OP#jenYO:7g],COZBlrᨧ+^è+nPnyUU!_ԻŲP7UU&. rgLb>yO^B@r-ڕFߵ+rX dQ&_!Ci6P]ܪUMut2 !8,s!h\:e' u,'$jjYSL;{wdbl>{Q j>eMɬ}N}pDMCIі{LSxS/_臁Gdc? OVvbzذ5lC@@>h'WLn @22{A=.Mgq\\g:>w7qH'CSЇ| ٘seUhMޅ kjmfh#EiKSO}9n 24eGnV at?$8 4rgA-4Zq]GNet8(uo}ɍT7Fl-r<#ѡǰ2x.O1P2Ǜ ^;g9ϝ`I159Yj$Xidk XUJ,[%k_Nkyh*ϓU|:YH.d=[qqq4ЫM*7%eH?G%y??*i6C]UBUln $h"`yV8sѶ|33URkך7]c Yl.OI1^e@M,[s9\Ǽ3OzZ5=p7м./֩}xmRtI.W=AM jP]}2@cۋ<$6LC ~L4s~)>/40 45 `Y!y41p'!~)PT J@0ę9UYYY76QCD8u :zԽz*,!ai v^J&07 l{mKR9HKt) fHQ |)69q>%F x!H X| UmU׾Hw\TNLG_ӵYХwS'i ܋n"AMuޠlc_t<~.;Kx&E?*}^~@y*|&_ Éh0nlM5eHUg509BNM2 99);(ǥ-ҎNݔ%>>[4]q]+UɍTAvJ7JL5o4>V, |E_Xל 2/&F*OE - IWDf`< z&۰'>FX߆T[QP=SVYY]Ҥ|Ub{\޸ ^МXd]JypEuw.bΨAU\KRPA#rmOrMb]"L/D[*a2Fe<kޱ@G!Y[7q&U`B"ɢ\?ӵ#EOľr@Nwө8.#'*؞ZK~ O!."ThUo4Ɲ8|^1bsmAqs݌ފ[5@Wa, nHyK(А_H0_!N2s&벲!CۯqW|l\J~%neJV@en/ڸ3rcС:_vR^(L|?V@8wֈ'޻bսk(!pM^HuS6THu0Fy_YU(7J.cSoD+7;&|8sz` ep>x7?/s/}Ɩ\vDDe¾MztKkuW_\Q*{x TgE(dI(˳ }Z{ůirq2SIUH͐B%dm+9KCwx8~؄|0OBB) (RX*r8G.B]Y ]T0KTa2O=@5~uBuǿĻa(_E:Ѱb6x1CuҀ9g>'?@͏L5 ~IHrƑfE/.lf%cSI%=Oo# MB;I(;ᇤuwFUcXcuuU\Ct+kUWw[. G vq>ZZŹtݨk=F=*skfafZĹ|nrrJ<|Dا7%FA!j~w[O kְYN':]v@wiވq:4d5!mH@@k,'u]:j\ׁǥr|8˲ _=ux2\ٞ/ WŢZ;tfC|&wi7 ՇKS#cc2ph W:Q18{oi{򜧗a YS4;}=(끕Mm4dvF-_j$@luN9xOٮ,ulr>p@;\w9jOVCwPԸ!5UYt3e]#PpF=6Ҕ;Ah>uSj8/`F#2\>kz*slcn]j2$@Lqs`?I\N}u{a\>@C.sx>MG8xBpִ,s+߭w^f,N}TJ!-\j8`zhS"D󱵲Pdm%$I @>' L^;j}@³oVb!O^Ɗ֗rÄu@mۧٔqMiBeU/=d{H"~ JPR GFDHW}ӽO~Y2xƦ]hguPs`阵NGVitqne WnXD_io#J%!a!C=TaW%A+xMsE%VF3v`6h`g sTt(@݊FLCH}wh/y:8T'dλBt5.8i|eAh՝z\ѝ&U5_pf*8mSEhal2C@uH\Iح+xڿt@IDATP6*<3>2%*;_*+p 'vq%_kCBu]u9jmwꦵ}Aj*/W^#bd쁋5>\;Ia.C}Z%ƒGawe%NmR!M}ƍYbj+O%cFFޮ?s:ejG.9c;kE3X/$W2h:℠#NH^B`xI +_}#7QM6DVR%acia\uCl{vR`^KKtHҺoQi3gffKk ))k¤>L.fz*nҎ=iyysihzfЄRNZ&.0da >vV6 |TIXAD1 p`R,fb>@/r`X?޶rncS^j)a $ $,+@uHUGS ]iC>Pg9y k\ظ{ 1'^XVPrU$  NW$^d)^fOp߸xB@A,0|6pm;"Y:3&ܥWk˳pʳu9a,Y+Zw:|vnҌ!VP@VB%pF|9p!o֏onꊬ5 Lj\4@~0x rY8:찼G'u''z=iIBֹyM Z;K=$*6mwm HG_c6i%\|1bތ0fjӧO|팅M }y@ 3%T᪗|;0NWgOr|Vpu,.ee,\fV"W|ņ2e%ߤθkm6֧5(AD&>ss#/t&Y^6gd?0ԩSaapZkWV K |ԬSμl9y4Ѐ@Z[Io)ooP}룊 fe3L CȈr6 jS/4v]vȜenk={2;XQ3sG̈<ڭr KyI9(qNV;,C;VG +yVe}eWGLH )mgiAjm-5V$Q)+l^!S: ,-7[2UW7+KsGwʨ(5.C24>@A;}pW}Tɬ4zrNpnPCmtM:"Ĵe]&Cf(8X52ΞE!J$EB`Q$o4uL;cn̛Ic&dˁ ~޸y"G[N $Xk':4KE;,?Q\5qe@r#u,ղ_/{h2Vئ`szih{W 9+XstExV;pYN]KkOK%̤u{5%&6! "Ğ*rMp?M1 Kȝu27k -oywt#FRSr&DtaxvuJSpYTxCٙZ˯4 z>uѣE E[=;`?Y +hF6W$cYSQnCYsΙ գFv3cӝw$T:YADNWA>unmvaHg{#n3`[$@pD |E+kۯvw0]ƻ=yN:O8UP>9zyMuky\/MJ;=fWPuDU$'jXS_\3箼e7ټ;G1!оho~3 `Pa!C>銎몐 fѰyGNZב Oeh}PċPyqz)JF4* eR+>b3/bnntZgٸ]&"9 AߒJ[0m0GV^A<u#b8=̯%tK"45*sY 2ʾ훢;(TjBCW.`t3]̀bx4Q͹ʛfn-OؤPqel#X"Q}LORNNdj@Cq^s4]e*Eʱ}QRKwTV`; >˨~ ;o׮]L=ޔ==>+i=yG F{<H@(Grng#y:;et/j5qtADBrїjc jQR0.6pT*eg)b"w3'v|JiW^1ϟ7s3_6O\ 6U#@2_yD_Q?>8kϵE55JĈu-e_)z#/=;~LmO?pf }+OdO2tCɎ#n8wFed#yK9CDNڭ״ZKN.:-Kj>.Z䢄 _+k45dܧy&|eXׯuf$.--|;V'%f.L_K^2A>'ly`9ٺ2~ aT!fN?h6b=y*m‡K:5(AD-di0a3SF7d8|Θ ;́mOVO~Kh^jf掛3Nc]@ cx <)" x]$!|% hڝr d9ivٌ"Ky;ʉp 6?M'<%?&#O +}Jr}<̯pnw% .& uYH׸VY<7Y:se4u\5_ٛ2ӯ,u3O]>wIIX ')SO5ښ~v׿_2玚axGə_/ ^c/JnGlG jǨ:i /m&5(42H cp6׎&L8!d6[?OtË/hz-7xG`}o_OU䏝Wp"z$'50go`F (mvW$tu /Mqm˳ͺ ȨA#ƬcըvQ ERӸzQp1q}MrFc=f:ԋ鹼=rz,^jo5v_.cJOzTP6 1e+k`.*s hi) s7(8C-qVZuOi-CC SU/ zU)} 5W(X*CGmu{̦Moo6X*\9}E3*_5tLEL@12Ll*)*|D@o s~8Ȕœρgv|eY (ADq Ap"m &l(!~VzGǬ34Xc?eޮQVbʆAd6}aT'"ʴyҳ^"7tO'7\ڔ):oWN#qN}: jԄ}sn{?+̣>j쯩l/Y/>oN]zɬ}9nZc*@}zhrfc^&r vؽr ʩl)$6Ux#rЎM7dPW5ew\'Z5[cM ppW_21 i'ٳgF.3?? Hy̘ɴu^D䴂98|;/@ (@{jX^% K#99dm*ir-+7^8]{̼:7-ySzaǕaaj4ϩQEz՘3Uk@&6泟<7̄kß%.c6٭AQ {-p0vw%_AM$@oGs\gB혵\ݭ˻u񫫜u‡׿:>ZqǪRbG:)/V7}}fݺuOO,믛~wdG&d]2r6ۜ\GOH*'iq3:+O5 U$@_6ݦeQ?69) Mh}zp]#F9翧2upSwy]$hTHo=x֤PGnwpzZgl~0gfGzl'N/}Kz[7̈-tP;4xgjE$uԳ,[S5Y} ;`3 *Flp uLOs: *e%ALur|[):6 !$*Aնʩ&%!z!Ma=tqS(Uˈ[:1΍?Fx>gc^0o/?L>\8cA2]9Af~\Tg YFŌYX܄h?*t1@NdνpFt,!%sb$,HCo#. &5I: eߗfǎv8} "RBsP!z̒U6K-)Je|`Q͂7{s,_iaUVtoP "J)-v%bk#摽-Cfjj>{・d%>|?o;z'E'*+10+Rᘉ<|2&V_ޢb(ܾa<1Ept: u:]8z 4E)uHv0C1nPQ:ƛsR%e{H) ; F^x İ,{PeuUʀNIg|O-?e7Awwm|S^07do_}_R}-hD}]a붰fMٚMV`6rĝGӧN;adj*GC2w 83t~]1 ,Q͘GBF֌jj;]'^ϠmIhF܁AhVPUypIc7 G#f94#v'> c~ 췿m~Iol1{?E$6K`Gbԍ]s^)j,ZYqeb;OI90iT7]Kۻkʗ@kթӉNvu Q| :$[5EJvFVyd4(i_2R*URhCdzҺDǕ䳽 ex̡Osf?CSteKyU~[li^:5y}(i,ە3ۿ}>"turGG%`@Acje h s\f7}>}n?O?m_O?#8j߯ʯ</'ˏWއ?/=_{٫?ms sp9t$& zw퀥a ik6x7t¦qB7\o>r9>%pqWM࢐7 &R\U d=FKaQmueλ#m=w{|%/^>?j?9|XǾß >O<} _x___|'nߧ{ӯ?o߄7m_ wgu(ω? x߳pp= =071H.L7<+Q͏z#S?Ə7c1A݆<j"pi'GrdNB:epee'd,˛{.GKqձtp?)f9DM,߷ҳC*C'g>c~?z|ƿ ?Ox9$OS8M:GHЄ$~01_39p!b z=] (tw@Nkl soxLi=>1Ex%Zp! O]btd-`!W] bD?9}J @L/[d9"]ȼ~EXK\_6m}kpLoI5?⿏ӟ?|ǖbԧ~~zg~t.1Ok{o 9?>ۭקo~?o}kOxO <=?t.WCaU%Ύ3jp3[,o&^" 6l/~H:63`B|@f%͗|? O>C)7hW?8ټCL|W&$8^h"?I9h?)//{r{뭷;G}s;=}؟gc3^ݧ|+o+?a7O?{z/oG#7y ǞjCő>iPk1#7na=i\m'qV٨'rv<#& |+Pm /YX?΍|5qs6x}ǟw_S:_^?EC\W3<9F}o/>!wV{iſ GwQcQy'O#냀|B($j x%]d*7}_|·a~O'oR8S?_/r͠p.NrC6놿:L0e@ g@WO+?$GW48^ڥDJ8)b Cma:‡=qgU S<`O[X<뺀8/=h`3H;on'^-JM=ƿ3A|K_z'~yv _}Z厗ߴ_xz^*̱yܤaqn#IL[yQp7)g#P$c A`i>u<^pi"oj3gqpN}Z 6>6ֽoH]}sdѦՉ3 LGZ* __>/=}ov~ɟ:6XAbqӳnPbsR /v1"B]R7te`|?k1[6y~&]aqPm:+DPԖOhSK(49ظ?sotfAO>rjxZ0K: lTq.xOgk_ӟ>}}mذ_=?~;/肫Na1́~0ӊfvI51<ؖmuΛpsPxeۏW8e|7e"Åq;}FzQW[!Ze4e)R"ֈ{+<>0M.EQxS\)+|A_+ ݏ+r`9j8'0~ Wa@LkLb_Y#5 >_׾}_o٧X?k ~kpނ8o5p2iH[Sа^v)l_<. c ~^9a_pQ}Pƍ4N"{Ή%P]ԖXL.ܯ[uä19Bq瞕 E| k_`n446/p1x'o}[Ot>>6o?>~ƿx/!O_峗̾[8aTMb: RX5X=Er$is':/@COSrXCp^I|t}P[ȫRE!_xl}^ @υewRy49;\Xvq^%OnTMvDظt}q7'Fs=Eh>Ƌ*y睧w}׿>ޛw/AjÛJookxi_ŋww?Ӯh)G|CrL?es/jqWHdF:dG=HS fJ"f""<H9oN_B?_JPFI4NW io?>ȴd<X9sm.e]?GCyϵ+On z&tt>cI2T !j<7I]{wm>| }?D?g 6~|O_6/#3crl*)k!1 '5tDKu}+S]ifS| ,9I>z %im4.J>%~C5x71yvqߣ.Wo{e3 Gv湚 1&ZD֤f)tkCMǯ[#=;Hk_?]۹A}uV3>x_ăg>kk$ʍX-82,C96]r ի \@11ƜͨmI;3 <h[η0ڥ^=܄~s|.M=.<`վVnk\qO+,srS1ogIs4gكրAiy m vN?f R5AWsVCCxt|8^'?mKw;Oߒ]ϸZzǀn@'K?w J ;S\{<PZSl#m,577 mY Su,[sޯC$}KX;]`ߏ5g d]hjŕO 6T+)N[,5D!Å>2r1Ute n'ilQJ$$]sOUq,>â{ %ww_ `C-Drxd>2ޜágiyJt9f`Nj;u@bt=oove=cw.T%ԙt!٠s!)]Q kE㞋AEFc^>5!i_@uqUۭ퉗sNǓ2'E/ 7oJb7.p.⭱SJSM?tJ;%J 90 NʒaLZN$Nmt)V>oPxS_I".b t J_"=j,SEזdȄz(S!y{> -}@_TI nHh2q9&5e|79>FCA[%Zʅ &OrA k$h*MCkȇNKrsF)BR$K,?Uu@sRE[k1#fp0A90c#@IDATT )ngճ]*'Q)ElV`bKL r+[y%*x^4{L!8<=Ș?W:r>E);[-wϟ"5W9}6CX#ܖW[(j^sy2+zlB"7o|#` 7KZ^$5\(q3/@] w:yE| 81nt X&B /΍vx+1+91Mac0TZ |lVcP[)KljuJ-Nn)Rejb5Ag;RH/?F_94y9ξO>T3b<5=dIvJ 91S\ 8t|| 窏/].xjEހs#iS=zrξpg4#G^<Fr3,WHb[57yr0/;~a"bWv] 5^s?UN{NJ(6z.Yi"Xt;y$Ct pJr>G>Omoƽz%-뙁_lXgJb1~ y-[71]q"CN87갾dثbGȳ<3GCZ.>Zҙ7CJSB68t4#YPYz]`nsG{y?#bE^@nqzEO r~.}^b򉐲sdhظU`佁x 8t50pw vIk?ZwcMo>IN#widh[mBN%awNHtqٝQeA;F{GڰuRuO܎`Z!X8 Ⱥ/#.S 'FI>/(z]BD< {M1\֒Q{ΰ6&6QhYjjTjo=POGjo_Y&nG RKFV펧v [˄|SLOw's4FbGpϋ9|ߖV*~q&6RSLGyz "{C;ӝŸ%qn\}〛Y'{BuN"8%BMD~B׼N݅Ԁ8$R>fvH-m! ÀM[S /`: xHx'm|7rY1wZӸoPFN}VS얆^e|og"~R }R u :eO)WFc YÌ:0 wAz^VqW&< f@6oj2hSÒk\<5@3:ѓ%~)/܄aHɓ! O# Daa~b4NP_ @ ].n.f:u,8yII7]I#AQ;Gf&EIP`@v;p!00iA+&փ9H̥q:ɥva^;>c}Δ`j N7IvBPS75$L-rwBJ>,!Sht\ =w7d@Mi3==66!ՅugwNSd/S/8~SzjP.Nx _wx\}ʹD u5 ! #h͂f`'$Ƃ1)ɃV --u'N::N<)Ty2e1gS~+}V9Yk'жnsj;MMbEΜLqT2: H_ @J\콎cbzܤC|סO}י'#'8^͓'91Nj._.2!`61ZSP Q0|HMMfEZ&]{{u\vVA!U)} j_ wK/4)U{IVVzy=z q l4|TkU7zFh|6-RSt5!vC&@_ Li"\Tmqo)l%ԽX\~Z %pVHȧO7vmjt'1qcN u{^$Sb2E< 6S()##?2dejw'aӁD2ٟ=<{Ikû&QS$^"PmgPM7}FϾ.֯"9{ݞS_m.UB5n +DsKrq&c'8&3c8jvx w!J]~^y<:NBzr #!76o$RFP[$uo)4-}u%smN,yŽsi 8k]{Ʈy1?GvqBg:* SP{;bF<9BLO 5tؗh6+=[*uS^SAN ͚^+,< @Ή9[2+|7u&6Bx s @ bs zvm/"O~N'?H id5K*G Ǧw]d76p8<[ 9Aɼ+ \OdF>sg8I-B\o=|WhGSe?iJt O~xv.0i8Wjyz5 jxO}E_mȳ8joTwqG5O߳_}!^sjT'O`9iyB; 䄗^&dNGxm%Ek>LI:bq[π&A&u4M}o!ތ4ͧZY&{> 2%@R"n:~CkKe~f)-bM+HA>ķ5z"4zC+ʾ)KQ&NmpO 7r"1n]s]:NX^C^ғ{|8q㌄5\١s8سNۼRAK~Zggd_ᖁF]Kv9*.EwJʒpםΥ@>SQJƳv y̵TwrBc"L3ai{_A bI]^ :-sTkuS Г{5g,6!4_y>kحR xPْ&NKJJ CHSce7xɗ^j]Xrj"_*nچb`:|#F_MϹfC_Ku9L?FjgxBT> Oq4 \UR>8nI J>)Z|Pef, VkEWw8Ū ,} #N6q^,(Gnt|x8e"Hh'nq?˾M7.[ :9͞$'t M2L$GP6y(ڢz }#^QjP.,h}GG85zִ&W golT%ԙxE `_sq%.\Zi^y2}Ƨvyy2Ny}206cR TぺX\^x=qMnԖI_ץƍz.rH'i A ӒEҋ7#*lVzз`j wۗWܐZG( cNQbR4}2}5N{ /1u8G/ 8@{t~7aSs. |@_PNA[P[Evqܲxysc{M:/ Uh;%5iI0J\S[/p{Vl@XLsd,6N1 [v\IH&<70 tD\*U9E{L=o҇j`DRtNW-\ k3ݩLs" ϓ2Cy%)хlg+:Ԟn (y?{gFo<{F?I\Z8<%~^RKĦYfϡ5IrADj\@!W1i>}_Avq&%w>gjɎ9y(kxXJqPb@g*I$V(YU `1j}~"LTs350*J(a?nr.3">Bc͜]\5ϚMyS'y /Rb <7n#w. AbdG6yɀb}HDDռ뭗J9>pf^ @9N8-\㭅Ls{~O'tfX˅$vzʪAT X{c;y:x=i[ۜPtv֖xsd vH4NNôCLBI|ہzV4 ǘO2wu{*psXpGUl>v([cJ9 oE&#q M~!v<6Dkk $A/IMc܄P=nt>~7c։|ng ͣ7gLs{ۏ)Hl#ty1p\ ZQ+p$KP$4)6 df[xZK_/4H@:ckgF۸#7Dc ijjFm/ 0(ڝPt.N„:c #]"S1IO? pc^ G>}d NX|~Hnc]g";a/bR!"ċB%bViܙSBp VK'b\h=:ɞ&G O",jr3pHk܁~j׊L֊sٔ v1nr\|G%ݏ;>rHVHkQ@ք-.S`gt%c6,u4rSV8Ei}Nf_! !쩉|s \K@9[ 4$r4qw[,Z΋oD&L#Dɏf#نmnHe.7S#/ɁsMc2׊1"$ӰQ4uY~d4 :6n)s}2,vS{Rx\O/ez {v: u$,ړ'2*G~GT~>xs ͈.zjɺǟ{xĨva {*Im'ykPwoL5qld < 8 |65& 9jͮ9"1vtW?@O9駸Wu#7A0'S< &N=bq'}7lPEba m8, Li^@I|;r~taͅ~@FV^J-Njӿ_[&VOJ@#_,Rd-9SODbnj:]y(S#و,twv!cXv$i%*lwOHs…q#2L"@8 uWĕ3z6I?)tH:,E#`riDNx_O3o|kZչx7]`D{IUhu\ej]f ryzjW.xZ{APcnܘK.B0%fKXjH])DO#:{p qr5vFL{m5ltn YIs}hxzĒ;[y}*Ak52=K$i, p`ɃXdUtx[P= >hSǺ>c5F}8i\d5)Յ)|^x4\LE4 Y,@c"ҖGz &֞x4G4N/t~`UWZ>`1jG]RAYpGܫf?>XAr]MGmo"UR)8WԎsOi|7zM沱j ! OJ^HMD@!0ի'P7u:oNOtS置}5VSXw_k!O~I7# (iuRNj9)3҆`}B; u^\i OEN>&N#y84=K0Coz>KurZ x?3MERr!$M2 4-ov:4v/ѹKk.ڭc]<^8j^ @N.jjc~SoGHywG.=5ONmN~Ats;KhP fg[>~64>+LKWu^w vTW𧏧͹S0y}KM#]];r}>1pjM7!P[:9 A#K3u'^q<ڗ3&\m-a7u6(Q]wve|toYPIh_c`-r~.`sN䕮K^l2I%% #z*NRdz=ScP?GcS<w,n\H޷cG<6{H.ૌÂO-pwY6"+\r82 <ΠuvNO%@'/7mj~.Wp%fu ωu,|;^ebH=: Iȍ Fr< e Ⱥ{^ >R&#\puA(M4(z{O[.*i2Q؆.L3KSO]n729 NlI{Qm+DSl[qw%{ƾ14I<͋gj^7Zc|L.t ! 0?-S ZȚW*HBN<3~v'/M??Ecc*Lp$YOBDXR)`-N0r肸+!.%^ʼw-8CqĢƞ{L8z <ń!uM'zpz$nG-d;T5wxr*31 2?gL1KDs& :<FuB^C);q>}^r(rD yT]Qjz7ufoDp"4R#򻍸+ Qgw wQ/&jS]t s 0ŅY;L}@0NWGY_zM#1]u.+Ws W-˟*'VѬ j˽CE Ɋo֞H6}"@L2h͉sBaNƄ i9,.M!sd+~䒒#^v66ɹD/na!6>(9zvF#3D$j7i|7zpDqyƈ|HؽMMް 66?|Q1b|7p:2f'%06噁,(&Md`ڞ40@9i4]s n-N%~fZ.^%-v>/vQaBmFϭ3^"Im $΋r!RDLp<$nv y* ф_|SY 1K鋼N;O#0S1nS9CMH&8; p챣w.9R@B yhSCTױ ҁ~oi_=栋&mmcI>0ș aCb:q=Ld*v>>eGTxp=bc[~ X2 @8 !뼩ă;R"wi'K>Hnd"aoQ%,T_|uqǘۍOZ;bWt,kiXt$NcjkvTD#/r5Dv tHACЉHM9q8YWx#@8j'\M[uCdk{%.}җH7ˋxf|Gw!i fqrL9 i)7SCA0i@/zGFÐ9AF7$Fi=>be2ƍMqƦzk(aSGFr;FrIZE9H_1Qsfbbŕ*!( EڭsU/*0ZWL9e]jم{ĵѵG٘p4yrꆿ;5ҐjnfP7cD`'.Sy .%1.O" Mn/r>yj.)f6!-(Ĩb,pq N>2.bpuS %0GjN =v {GS>|/{.)WÑ8hI4sL$G&ld )E|^$o%2nx־gbjPE?9pY׸#=Q#i0sWu \7t-Y* ˨Mhu{p8h.R2`Lݸ>QdPx srzyƗ|;v .ƺ} *Fo'vP)ujCE!=G;߬8C i^.SR -.) Ҧ՞I7)cJ4|?3bD^?OQ}Oho!!0u񛩜0R;J6|KZ*3%iK d@¤x5:5_?n]|E.9>7~ŹCo}Mm_mԀ5gNTɓH=Z.7/ nݛU!QC{Mv}D^rlpu>K>bj[R_kkxev;֚4!N'%v+c5R-ȶ+IS+mH4F#h+ԕ׺ [||&{CpZdcjR-sVqsENG,r2Ǒ9ikqjøb'1b89 @𙧶y9l t]$$Mp7HoyH.64Vm0ƶ66[]-9u.jgJ-IkgϱOg6XũRFKԗ^ݴ\Ӱ2ӐG_"%"q><=`(ln?l@rbs1)V:ʡ#q<69jn'-Oh[:OJC9ZV2+/I6ȥ_GG=s2d#/B>wܭGo`Q sQ77>% @8gZ<9֬yhXаqtGGۓCxa{\}غ=}aQkMavyH C J萬,MιUϐfK0n-GH\;X\wæ褙ŏڙJUtvp))pyt}$NN\mu-G( VѰT }ɛrZaEp:O>not2`slK#?G#5S1b'1QsM,FxxX.%)@1 yM4Oz4RD@ X9vOHa '3uS;* kSL$q}f%qimݩ6X~[M+mn -AZ,}&lcz1%C{?J;*q֮.AqRw;ݵS|{:/ e.dd=^bt~6}Ѧ}3>c7{8Oh̺ Y)AיN L$8-3GyXO:&Iטx0- ϵ_qIz1=j>h}:}V\4DDz0]}") e4:AO+pn巉Sf [>e@͋/@aq#q16SlҢuT5(#MG|&Y 1[='B H,ڂ[r:[})Yӡ#-E]6|, 5 O2Q[1tvV%l%sÅ#S>bק Q:쁣j0$],\`p*P'HG2/g@ju.ek. p hU:lͥ|שH&= -Cs 8㐧RMCtj#UU< EjC 1.& Oc*r]r񦿰P;I7I+%\[HOOݎ} s*OG7m. i|0mu fx_\;\(yb8a4@9*T퓚?u1#\wpd y%}M6jU<@֕y>Z] ^|!ZNzn)wt֚1P 1@W9I} i j;NMrM0T Ky^-L<춗| E_G諍-Ӹj=PK1٨Xfr'*"NZłNݝb{Zi¸ŵ|EV2_+ūIIbkcg1zq2IIo˸zI2@juY[i!smG-.q HGǹn7snL'SYc 0qz /0eZ'#8*9ʅMq\9.ڊS mbH>rb-"KˁNjDո:;UY j rn/4^Y~l.E,Ցgǃ< 48Av#Mpׂ%b.1i՝̗\q-75uHLI4ǯ;/dg??u*q#0)A{Pm͑_S ai ;GGh3vֱy/NZ\L O]F.BbX碑|_S? k .ßʖ]"2Z n$&@@J>^E I:ߟ'&O1HX }NQI_%wmڄfN O+YIW44,]+0v~-̇f`]ھ}R FgWjwO7ԏ92NkapxN<=?I fŪ-MmV.wp6mXPQf/#ƾpF0{EC.&^!F.lۖ>߀wwjǝ"V~-7ϾW.frBr%r @9ЙX:fS0ė:!S{{C̲&4짻>u[޹~Rc0B{4#x%]v9wemZ{Q7o)cS~xɂb$)b_.FWⰜ΂d>#0ne-| iiH -.Cx5 Rp#K sWI` Ť̳.S'23gH 0{30S Ǵȋb.|&?bd3{pT 0bW)Crl lz>6O##VJl&1\S@.Xӓ4zmxbv8J7iZzI&mAxB/[|ny- n9{tsƝ CC=KS[n}/jO)O]/5mf> @2#Ǥ?ٷb #1_q):Ml7*/鄏ұIIqpO|ԈZ"D PIKna/rS"I >-7ebu ΅62s?u7wƨ!cGJ߂9=pԛi@qlwQbK%[u]α'0|MiohW[P63o~[b ql'ޑ<8kpbH[W MA 1eӮ<wc-˧D~P;1pJEAiqxtf^j]wi׳. .}VҎ}-x7߶9?>O 猋cCx}d^ǎӷ cS=]W 1jOpF‚CO/΢&Bx7?Ti{wjQj$l pK%jn0}Ql^vyY46Bd-SA.>!U U",xIDAT@N6v@m3N芙i#-y.0Rp$QQl}z<^8gd^ fNAZٍ`c5=Nԡx|9`4 "zGBnSH1A Gkr sQ F r.$JsH/+u\g p:mqc ^}ppvR8pbcd%aIDm :1٣6y{2y<=ჀOΘ3.7^9Lkd-a.i?~x"1z:=I"`{5.f[h` =!ɑtN"ǩ)rύO'u\T7RǠa?Cq.IӴPA2 Ic> ;.U>1#ǖ7m:b‹#ׇiٸ#Ɲ J@֙z*$x&|5̔#ΜxTG6Gs1Wi3Ǟ'cs%y&or7/bQ.4g@Hl17m \:A!`Խحj"}-ji*xBa.+OGcáCw m~Z,^bd#Ps%^u mH@۹*N1T{m` rIk,b=x{Y]vBB6Jٜf9#dIG~Jt/VUzٖeWf$l(=kLn#9-xE]gR;.`~l^qOa{R wI3pQRMhJ@.Bu!t>aX=fqp>Oqqud\G;rA<ܔͅdנG>~vbRwqo_ `qixR2.=%e!vWq d}2H?tαk7[l˵BO'@r)͹rNr'Fes skzi@\8ͥ6&XrI{X$ Qq7cf}΍ =#X\i_66POuHf >xs@ƻrK<2FC98*-u LM'0E M$/px掜.KBԥҭ3E mbHԇյ'U #s۹lk+wY$6pˀ^v!]E`!L&/P/u)д M,6>^hs 1#x੿' >;nx8G 5cb}.w#xC92QC(8K\ؙ8D3'vN@Y ɩ&m&ahlvMrּ)]_(T[@S̉%Zn( .%n=I'29fi:*%v9iNq،2XǶ"5w]`oNy ۍx6cjp`kهo&୷(7bwk:&+Kե naq}-ӦSv 8.6BB0irgxdK)I];Kƣ+I6yZ󄜠MmrR=ٖ@"x:Km f'%sOnk@J-6StpF7}%p#!un%c fF΃߸4U{6p1C6F!yw8t>7ԏEcLo4G<F58ܥǡp0tY}>lvE+#Aѥ#0Ҏ2ٵl[oԬ-ڎ%1);U ]OOAdmF " GΗP%x ?n);~ _GLjwΔC ֥}dGuG\.<M9.2 q3g.ahjpE`T^z NjZ7i])=>&IGoksӀqm+.9MGљQ " Drs?} YE<~ %ܛLj6P϶4wVm剝7 Vx-1=풡kx gA@]`c.F F.Ȋe146w~r0l@\vqg*Dc 9 LprubPi.J.+ oYV]]â6uGE[&ǓzQ;S,16em%tJg 3C#<ňq'ȹV<_ n(}5|}VJ6Ơ:lbLCಮp'mj3ڗו7LM, i\g~1k669q.gx#g1Xss^3:%xg9\,@ڠy-@8c1a >q6}󿝉zf;CM2#CC :X"BMpL}F|hu;Mh纐‘3M1wu ) JvlR-mX 6HN& j]:f2͵Kd"6ӝS,y c*kkE7蘭 >Hqq$,0?.C6zCGmF@m]ɫŠsyl98>-Z0!} 1${ۣ7bfj_䐿MG%kNEpw/7Z֥>W!S"!J6>> 6:-9MGS #6ՠ?O.ںa;Wql,gzX.(lHo/DR{fH\L6ɫII͜kW޴7>'C %KQ1U]"|Ȯo1WFl kG$Cp}=I Kh ȾKt?#a;RxbK -Nn|ԙ"\~PS+B1F~bayh#rF%du`uBiBCPBbH*w)ɞc[?P). =q[(>p{~qlGG_{kIvkz0ca$,"#! D@@9$"DD #Fr`l<4oW{׹>nܵk׮s}W*ӄY>m?KO>n߾ ~ccZW u zDyVcM7}}8#DR?#_nYe&K5|%]Mffl.X2͛y ط,+Yމޤj(Gȭc7=m 5Z\<]:^G{KLzkϛ,LKɲX a, E":Vo!gڤwި6([\mgJZ<4[Z0hq/Zwm128mi {ѐ,ȷ_Y5%XYw5lf#n7oL W0Pg^Ը7|N *{}9oxZcθϏ&ӱxMs10_\)+Lq*ϖd&*zd\l2Jxc7nQʼr +Z,:^#[*ZrY֘o-[Q}\c%AѼS=zYwJnHJ-@\*:ʆ9:j]i՗2\Ђ=hQ#xoo_qts?GC_srZuŔu=c53v=gs4z S9&(* opQuțe/|kY=8k7Yoڟ>st `_]f7`M$+Z ARY~M cկd&C\ZF~Ζ5 wmվ'׆`ؓEx/, |sy$j 2IM33|cyozꣾBԠ-į}_Sd'wL_14*z-bz S.yQ>ݘeY^oU7] T W(ƨF Q| nQ5zB z}~*|;͂# ȯػHix, MYvE1-jv{vzUgIJ|yIġ^{:;pt蝀uY ~0X\QߦC}4Y-fSfDk}vy_44҃VkB^Fߨ(T@j odY@M3>__{Cě|V޼7=W3WB'X3pʑ F{3|aåfo,˯!y ^qf9F}t c{|ao=ݼy,ox#ª‚0 \܇nio6G~Iϲy6:]sOCk u=aks"mWlZsei`n#{`?ݷƱ,[rji/uFkְ 49pyq{k'5=77߿?ݻwo{n͏y/B\ E1ԛ7㪆{6=]};|鎺P;ͽZ5oJشYllgAs]Ry .,7^:pݯM/_x4MpA}vz~0$hϋyt3?Yr[Z9>sF9jKO&GM7|@@G1xsUxq䃃1׊9yj|N[sپF.+u_3yga9kbi°!y%Yҳ㍬gQG}Gε{B{r3{xɝ_+ӟ*1ך5(sey%< ̵su)W9Gּ߶E=%q 妈̆~ޘӹĩUo1O_ aEu;+ɑB#% jś"LRi1-=:+7cq"[¤o9=|r6S`us+prv&_6oOSyoӈr{>kzܟ7`rc |;ztxk{=p=0oI؟ǯk!Af"z:}g^L7ޘمa=>tӇ5]ӣO>dž+"5nIۿ!}`.$w.r_3~󹌐3c8~gWhHHnĉjگ{[>{?xY}T?gsGF9֊ZT⵰SxѺT%OS=s?эp[[.SAsF_/R5~㊸=4Nע(5¡~q=#-O`gkup\gիWo ;M:F.B:>rӨ겺r|skG8ⳗFq-}S3#,eެiԳiS=Fx#SdY p/eu]cQ{==z2^cN=f|ϻL=zS^8%g xwOG9+_Y~V95遨Z!u?WlףCVQ[z'] p᷇qljli`{5e>Q5gɱ.#y_}΃g}'Q/2 D?>tZ:V9/#1Z}4#rPǹjZ|x9rh쭉Qgg Y05cQ~'ó"}TtQ-R.sD͡iZGcC9Gn?s֋w'im[3}G5G3zpcG5t1F=xL#z^^bv oae^Yk{=Qs5x=}yG5 yďjПjϣA&JCo_s1N꣞#^kgxV*y˫yWgyA=|յ-Gx'?µ|O$W׎#X4ksjN^O>K{/ZX1˱85cE5#E\r1~ّiEŐcu?oZhQz/5<{t-n Ӟ-b̳q.{p]ZgNucĉjŔyqp츪c7 cҨ9=/q;¡/~yE/Qs5֐c(v,[fQ޶C\9_Vy< GFy~]-tΜQު >~k#vH/|$[5xUy> <ՉFyY'QD rZiԜҌ 9 7V\5Z_eY|ςGڑ<=-bGV83*OSaz"4w \⒮[qxNaG4'/i]si}4o`bz4?k5-n?1|c&'G^]QgO)9rͳzKCq"j?1?&xC]_qz5k? _ӹpT-xY.0ק{v$Eq,7xg^N~'q󩻎;p;/;kgqpq k=F#u~?:@+IENDB`ic09mPNG  IHDRxsRGB@IDATxY%u&RKWWRUdɑh-,ك11#bփ2c0 2`^a@bHc-X.i")n-޵RݵoEy3U7OYs"rq##C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C -0C X<G |Ϫ||K B!Ӧd.ӏLr1]: B?Ldž.Q(t[>U RCEp:.qkIiu m[(ޕplnsk4(sl-wufi:w? zC~h[ rW\0ίJ}G>w.XUٻWzQߵ-=Mߒ[z2miKzmؔan^Pbeܒ^|ssrOHu(E_YUU6}C}}}HmjG)&o76b10)6=RH_cF k Y"䖴 2 '9pHW}Fj7GHxr[(D|Blzݴ+ml=YvnJRl} `2*RވȌf|*UUܟT-Kr=l q*N$HwTwLC#H[K L̶]V[76_ 7Cx􃘷C +捋l1˺剹^WB}EՃLЊ5m<|b@2=ͭ "b+eɮVP.-6̩Ϸ]<ꜝ Ke;sL:vircJ>Dv6.Alg(%&rVMiwxxvQ_YZmp[[7ò;PCɴ0PnHK5b-ӿW׮/h% !<{3&LfStDgz4+! O!fHJALSe|)6*@330x%>A[mpBmmiI1Kͼyr?Ee1ڌվm~s]r}G [?Xٵ_i;XykTgxݵKڼi ?do:4w&*4fUfC7m܄n[1Zݗ`BuܺHeǤ{/ T;ra>i7tL lNcC ?*`Iv*)EdZ0"r۷q @GLQ+Kd.{us۽}wwcwݽgzCna}B~ 5Hm ?۹oKWWVݲ5t-a\;V̜` | ȏeUnHZ[] ݼDzpJeVNml; `gIq)̜e8~(/`C=0ڄxw}8z" C<>`~fU!¥D!:lIaiswmooqopڝ?֗ 0@ o9wA|۷XL`AM] u8fX !S#6K <>A1NM!{f?TΊԃgSsNC9+2^/k˶<(}Cn^sȽ};֫wwٓޤ@[l׿9?)Xiix| -0 mn^ۻt}p{O̕_O>}6ڎ;ܳ>>|(a G!9d/W?U׮齅ƑnܸJ+cz/^ iΎCnhf W>;vsdq7o<[?zd4<=@ , &'iݻw__s/۵kfENΟ|mB2YY`bہdS D/C2`Z>#վ2>[ >?]]-.y ߣrM aiF2ڐBztN:6Cz1{چleҾa:Z~g}i مܐAXHF? F0hcB~Xj ɮ;s[/ole,]\ݪtqȐ0@I(hCc!o`,L&a '9;7v蕿-Jz/*?T]41~D1cv1>LcʦJM1Ń](C3;8qbۈА !c086z ew 2p0A>lj}lVw4 =~# GҽC K/zn'ΝiޫM3<5pq~_,K!y6Ƈ^LWTUW,b|d1~M ^yqR:]ߵMxm⮊XFfm8qm8VS?񿐗|[݅g]w0oE<7}s,kc3:nӠO T3-![\UBuIC! C<]eGM,.C7"˷6吼i<ăM>:ȧ Cuxi=@8rae(IL΁qy=8_Q#a}}9'q/x?}lvhi/h4A[Sk᷺xw- ,!?&u4Fu^E>U8Zҫd)E)zA/tC`F#nO߾AoSWNu=St],rZa(y nE$sι .Tx ͛8dZN4C]PI5/gTۇ6֐S׋|k=|ӱ|1m]jZzIZ}`v )O?1(2 eK;l " Roz1=|n!ʷSz㛴c"eKQ'~s2= 'OqYNB ZW( O]~E,qo=$[ 98֠ua  2+':,61Bi15S`۵^߶~}?ijneU.ɞ }dw@^Nb{Ulp,w'K^9=;ԋF離vB߱N1gH70)uOZLŻ}c;P}::Y =0ڒX&&uiu<4P:$uPP8B>^vah}ƦhO=꠬(CօzVP ;#so~e4 ٹ]%}W 3y`"X~7ܱcǂk=5f*^e}8+1-C#,<ʩ'U7uF=!G'To?ͷ^(?`6yA =D]Oc3 ƚ>ϔ:aȦ Uk>|Z7Z:e9>/?.[ yǓ_DwZ0"~8yvm088b 4cy`ȴ\cH#Giz3 =`%#߇^*fݹ)'c`L!JݐLc}?Nj)_|59פ (. /77 YY> ,ƭQbB!]RR;.w.cĬҁ,U/cGƦ5uc[E=P[ct9`K P|ZT\bodeL={l!=bZ[LŃMn^L4t::u8-ri4t>OSd]ouh1tK2w>8U  gs?}W@F_ƍI?ڞU7UTT7je^ms9俎%d!MZI[?{|6= %<؊.@5CuԩS_{J /\kM~ Fϩx'U^>uHm\'zЯdqk=)'%ʞ.670S obSdZ]nox.ep A}Pb_hTkN<ڧ&h=B'&dOlM)6Cd>;P$~ ˶7(h=Ұ `Xl2wKW\q;w[EkG}/@p$.$cOhBg ] Q;Vg1h?{k<0ңtg2lEY'A'C]YĬҁ,Un*f-PR2URuS+{܁=ݥ]8"y~-{',#ﺧz}tzz\t} _(hZ@dRw0`VhΛ*"!ɁEX~ljA@<ü8>rZ=]'fq.1('^LFPe65fS6P93U>RuS ~ݏN~[*JsrL8 ?ٴ3gs={ݯ;.)tRiz0Sc>o}mg#Ёd1\m aҿ09 %ƳZ}bP}IƵLGX>q-?C#V[iL)u-aRO3]Oe)Je'0`"wpR駟{WϹ~@'kGT=X9X.xZ[ŷ_ 4T2Y(m[20Bz12A GɈ m}"8uϼ,0:[4<ȖPtwyw}oË!,EϽ_tF &^(Ǔ֫ >PW%Ug/pg/V]ѭ9tNs ʰlme\[]̑v)NvxeYhs3vILҪl3ُ$rFK sᴲVWFX{dO@v;uW+6^)A;U7Uwv\ѤzG8q=vq|Aa hHKɽA<,3˄ t1G.8鿗#}\T|Ҷ*i;f˽{i8; se%eAObM."As8Q╝‘c1eת v6t;dbh>0NMˮ([#`K~gYޅ/ETvUcۭ%i`<8@ #HPa&4hkLcAݾ}.;(,{ys;v/ҺxԔ]|[`h4]8]ǘ$>^\p3.R3 čGڤQ/ 4FmkxD_s^9sD%X=$ @X@ҝ[}=zޏO>._nJJVS]LSm6l e|bn[{uw%co_e]66ݖb覤>:ݭM)㑺oF}bu~ﴳG[wBjm&-/=mmš;9m1m,`P*3|Ve0A(5d^jϐÈP-E;cǎ#G-v c;av :L&ꠌ<˖j}< }67e>!xӏ?$;>0֖٩ȁ} Lۢo.9S!m{=E ܏unI착Ġ-6]dDFL[dK~oQ ھ: DBm6(0:v_?S6ߛo#<:h~~Y4P um*""Nw!(b]IFܳ<~>w=#3-JH4b2Liħ#We#=%PS7bKy@!dd^57 ]yT8|g}pE[l(ՅkܨD?eHrQK, P [ _[y3@YFT\ x2&-Si˂W NF? BKlA?YFNJ(/a|3G `DX {/; C5|{me"F2Vd0}y $,,䞓CGGFY)m%%⏺Kp}2i!u ?hy⾶qUwq$0!꘴n&>+QSrʹ}Hv#*? ނe7Q5ԦT6 2ff?S2߲TSeST񴬗ǣu'O~a-xXچ<Wv?wv7 ڠ|g(txi//]wG8ȗ66s׾ Ӥ_Ä|i%ɇV ^0 TW&y4S4'3Uϻ B߹rqޫ,ɀOecS_Xµ)+qAwsSE)9n(c|U=[՘BW>cxtcG!{Ԡ^w,!eyyEHq vw;dCK.'ڽs#ww#w 6hm^c KB1~L3on0xq9;ت_rbZƛܻ^qMG/V2;_/+7;EtL Mcz?uJL poSfEΫO>p'?ܔC [jYi|Ҋ;ъ,* ,_@zT ChJ私:UCP ЖeC6ڵc/sy޹a+o% ON}=S*6l۪m/9I48sw" 7r|܍c'NLGiZh 2cy⧉Ps] ٌc|>NF!mY$쎉coX{VdL"˲O8t:$ kM%NX|БI/R:؁:zd_v1Мf gB M' 7 rtMxmƥͣθځ[Ϳ 1b@9S`TZNNH Pq¦*_'-10>eCٷÏ8wxm엞qqWS9b[u:_o3AsJWٔ܄j89/!x>-TۿN()/±<7X) Z<5~xt?Ny/N;kc1xOek< +"s8QfTt^׉N>0 5 >BC#G珟0@'3 vU_}O>mcw;9$/KtM0ttUMX:a_#v;dHP!DF3!A9`Jw*P)dӣ9`]bǏ?Sw/NSq~-" uATM=)J3XXFԃ&X@˽$9W|W 0AcHuMӆɂN I_~g+: RڡQM;FsT']N ұ<_ίZh`/^O;3q5c$4M {=юC^CS[3Ȫk88LTlmܦq>9 hy } _uwy{dbE[Do;?g)=yRF{-c:,P1Nt ]'?pbڊs?1yTr"/{(Ko/J%v)i\UB *Us2|+[ uEX4U֡RdbQ ̹~sɮVq2 vU)nS^U IJ:UeM@9[2]oot@ |^fpFQc_o.uӱGK~(i$~kߴo13}L"ҀJgX#I(xy; `ܚcZH&c1;\GL9yGn~cT);%/rmO56eN}u,{ebm;h_LD?HZ#MuIjOP"Xaԇ`@rbG^RY+29`=6o@/Rs[bv0vN9˖젧e:o1&-'cEo" о"?gc ;{T~N1_qDV\qV;l'҅Xu8"3>{wf)j+XN`C餭-hGU yt5X[]y8lN ;ΠGݦ2edڗCHߐg.Ѿ;[f>v/(_ăj3``2*6pUQ^M^?+G⃘ 4ς0Nb i'sl٤Fl4-~)ht # Sʼk#ڧk&:g8-ڰSd ^9f?_~/)4*3ثs 'Ut0aC)_Jg>نBֽIo놲IVňNJD׏1ۊFi#\1:Yȟe!-:gDa-8zIhg(Zg'>-`'}G/d)m 59/a`H<Ӕцo}21-ߖ4^t)Ѝf3͉W|o/m2){G7֜r60)" 5qkZ3Oȣd`2'OLAl1"?q0'M$AaШnesh^+v|W+iUx!Nţ|D>m xWHI8V6Ew:5wC+e7wnPB(;C^*JVk)"%3:<\B&+F4tޤ Xt̃2ߤabvM#66H/^kinw,=bBfX.Uh9Шn-gjj[1U֡RXU=lRF`@6 _Aɂ60R eXVH89)wX0i y2d!el$e+%_\0LrR%{ߒH.łïW̠Bp'{LLׁ#H *bU֡RX_wPN-{d߉LhFZ,%5#OLZ,Ұ`>{4$v |]|bj~yWu1<^縘wF.?+.8tSֱ/ˋd>6L-%Om(Z+@8lqN sEo\կ'Km͝to1 oQ iwPXL[6ѽ/FA=d\n{ҹ*6 b;cALm)& RDPkִX3)ᧀ⩀@x'@: ۼIPika`Mz+ncO& PG'?K;M-mInycr0I”V~F6 j)xF*٭85wC+Z8C RXpFf}/|߾RY Zl*b(kұ 0o\XLYIx8byϫF )/sx_llf{&S2=\o*F ۏ,V֡R8ll|t6 jSO :c 5ԈfJ,-[wxږuE y]m1Y&erzµUj+&IzV=zOox2;'e`!C]})& RDP{c'-L&iI8C jb );H# 5(dcq EeImXWӐ兂 x!.xڗؼH A9/UwB^W=ɀCO0 /x1aAxQ(RB *ܼfugl8PNˌ_ĬoxQ-u1| ҄ X =f3 0, Mh5-Å cl9d^{dot{MfZn~/[B xy2`y2 y?jnmoTM+qچsI P,agzg@hh+3VB *S I0 )o Zj (k^]VV 1_V*ò6ZyR.F|b-akP'O|^ = }76Pˋ3cN*["ckJe88wc, #?; C,@e ܎b(k8v5^ԮnuoVRGWcjuʀӁN&,/&$K_"H3xV udpěCJah3L6NQ2{'L9PURU YM 5f2Xn\fiAi+E6֖fyj.B~B<m|U[uY K2aVvfzPAQx1)f$-;UDaFl?0`ƱwLur׍.xjy:8"5 2Xa0֞Wv(`'[-ӑ7-'F-^L/ob  ӺcI'bvn=X`~,~"`q +f=pq#r` 8y +ꗠ2p 2Pz? zn>鱦yǨlZF˪)_kgޱU0Yi\R)e1֥giؑ/JaIs*0k, (?x".~Vc ͞icU_t!lwraSh;F,i9^d}j*zAN":dO?Qs/# @|?Y`¾R#W‘4r6'Ntb {C|@!tB(Ҝ}6k9X!-68"<Dȏf]ڣbcuB8u<H fB:QH!uOc|=g^S䑈ż-{.A[9#Hq37T^l&iFU,6{;y)gkUtDLR01 ҉C!ĀH;*^@^_ )4Ӛ:麨GV:$: 'O ҉3‘vY OP rqq T9 >VH tBZ&j-Ptem9:Gukb>4_oZWyP#^_p>}?N1X 3 LlcNb!i'YIHЙ%oʀ\@?Ĺ3ӸU,ȚjdpEV, \5aqSmIk`ôP<*;j=kRbVQ0yVMA=bo;<Mߗǒqx`N@N :m żF;kd~;dw-pV8X Up/CTe5$f:h[tg'N2^o-?JpGשBlk%N̊@IDAT&J?3%C(^!;@Af1T88:0 'L$]X @ uCq}}2r0dk)"e7a04i 3 iYUJ/fӷ|ړZ.x}iuc}?diDq#ܣ;Pgs% 1P?otѨ0H Di#i nLA%[SR?ŀ:xs&OtdR8iHG^a0T ]ۍ+N1c:u*+\K7_S'tkνo~ㅇ2y.ɀ:99,@)NqɂN <@jĵ,9 ,@0 6^: Sr-4ʡ$a @a^u ļJG6[I%X!wӃ /pS_yŹK=;zmDZ8KA7(:!|UelR#n\hS~1pl: 4>4#0rg!Yg40Р՚@ȏU4,x}j{xv*oInH{+cX´_K8Of׀N6-k:VQO#JĪ4wRolwU<@ZAc0 >5: 3p8 M|s5ܨc^n::oвe:֌UP"6C!M4 4ՊKHM[1ljM>o_P^O/ZZSMC䅰4yRڍQ\͒ >Wό!g$<xbMOf : hYg`|"lRM 5, l蟋 0|Vd@`'`:e<ɡC:ݘխ;#*wcBF<~l?X[[2( dTJ ڛ7hdL ,f$`a_LfRI[5PؐatL] 35|j OeeMvVɨTW_oYo^g|ru>.  / *k;%\,%2`A,7*̂5OhM6$[' (l3|ة&ՆnʫvzT灪˓a #$'kćS\aHdX8Xoy۞x_@ל{] -V?~]bqC&+Fy^d݋9_ c 9$o 4%Sq=Ï;j[c9rJDP)y(u!9yMhS>|ɯ%!2ًa<ٻO,]x2HC<&>Ӛ@jӏc0 DHn;b`t$YS2Fy Im϶V5N -p\k i>tA&颯ǷzlUw8S7]%Wp iX@a(H#jA67s͇/z`zy>$͑, %*\e9NRGq>,} 1Nkc:&`PLQ 6c8.|yT̖*udZPN7$_Hx >7JGo3?#򱄞A=qט$aDy=3 W%kkgYqg \0)kU%ļRDZQ6 zo9uCdgWgH=Kagy\1[A9Ic|ʛ5><U1˲MY <{ ؔ m;q gi=LYX۠xl%? d,@bV yMXK9a0gGdѝc(6ku4MXe&ġ\MpIPiN~'}z,ž6 2t6$[' (l3wG@C gŠ1KDN#N`J waB/:qqXZT\|Sl9UvMiWus+tȘBZ1}&>x!_<}|,c'a~&ܝ"z[͠!AgD; S~aH?f|ʏf<8}| 8> VeHƟzhHFXwUy@u\W)KFFxCEKLjMjS)no)E0P$8I?2:'J#ZO+A`YWnȋՙ2#-.-CsnHtgkAYvռ&yطŠ$>+0^"5Fd̊x/Ri&]K4US|VD (*݃Vd'I,TH}@+cݬ\-. "᪶*%sT@ g<3`ؽ;kS rwpcs<ٛf,cTeT; rcbq&8޺dǨ(ڦ._EYFSy |~4&1-dHcf VEgeb70;J6ΉԂut&Pv^ ,tD}yoK(uZ500G vC+G#16mbrՍ쫠$V%^ ̷r`]ݏ#!kNC~ܡ$1 h4#xO@96߇Ӗ6V0@@F=xMMC u!^ '䞺c7^lR#"c$@Z( Y~Vb{I FaCB0yNA;G>"@y}cq1!N]Ihl/8OT eR$|ĸ,N7IW{1k =%NXhi9Dl\eG Hd6f>Rkx`9ě#Weg HkgRNBDd kTs u~!>;.StSʰN_ 75[=+W!Ȝ,B0o$E0cOPP(^s۰QaBA%`:n" "aǂ8=RvZ' 1, @qU""RbHFRQ(!~U4`_g;+ydv!֛큁`_eZGA8 _mbjj1P OiQ,Z*Pf$N@])Z#LU6m-D rfkj/" s:e19)'G,]@;Zsztbj:и,/ Ǻ&@~R'uR(5.@u5ؤƺSd>GrCDTI;}LLQ ,S2g{x``9#'VRVX? ԓ "@Zĺ_61msecOBWT&.䧶a @qpLtTPLkJFMR0oy1^WeF_L/ ͆ڐN}=Єxq,Җ#tzHA$Iqbul d@Z}icBi, ?|P-P'u'T);~\=%^욎u=oR-c,~G6 W:?σHu`Oj4bM#3gLznET 1+!YXZHAu!Y:>0N(O;b1Zh>yZ`_i`FyNۺ2t0{w:ų2VԈ&u_ʥXK41G?Y,<_F䶦-B 8LvZd(L#d 0mHlUvZ}mSZXΫ JURiD t"!0tyB~ϊ+'(KbөF)&͜ Zd$4[$~|U09PAh`m!4izb8\|J u3 uICzt,/y|7+b !3d4D?Oև@8 ԓ "@ZzzRĀrGOx XS望:oޢ# ea B`3D~4"?h!^y9Fff| Yn3 Ih08]z?8\:aLC<[.qhҡ)%|0o`;/Ȧ',΀F5:so}>Y glk#Տm1Փc7Mx+4tLa00~69Y6,Kh.;ʲFV2׺Mv<(x0IwdP4m A8d`5Le>Uh 4B1iDm.،RaaZ/ݓN N~ %@^Lky<F)&͜ Zd$4(1 "*fV鶔%L;3:%AiT}X<ן<Ә:ӷ|·tx*1HI{ab' AH'+RӲFyqoX p\ΑDcq1KXhݐ);}ɧH1Ba\ălܪDwx 0f-Tw:o(_rU t+s4Gxд5ظEiڐq.lu0F^\lAXJ Kq TErU}zujmeϪOB$;M:D Z]\ "yP\Hl|K]ky_Uv7Og^UCy^S)Ra"44D@쑟{DWiX[qCfa v'׶-@rXֲxHc|H.x啫yjh:A8 ݒ3ճ'3͸L#qJ $4~=ӝ$#1Pf`I'|wQF}AkUɭ~r菃∪O9Zvzw 6rs^tAwoCܵO 0fgӟ;[|TY#9XZN6j輡zrI 0H:QjAoaC+g9UN<͌:#?Q82|Z)B6-qc(~3@Ț\= {Z` KDQfӘZKc'w=mLhRN)iShZ޻H {ou0vՖ~29Ӯ^J A_uXCl>I_Oy#)XseG 4^!]9 @ǠUgU+UTa fT$N@;`i'-`KZiW8 ilD[뀱ȐZ LuB0_I.:RO!Ή7*+K.ΡiqE~)1́B@?,q~dlʕұMOU_NB$e>\!®5_CMca#Vkg/Zwtl! IN{]K+TyeV鶐d&tLAT]I˷/şA)?=-=G'uR3]ܔ>/zkx ]&:'iČҠty 3 efu:YLjSm:e0yչi~C9aIONǤDI#j Ďş:fݔB7]tZ' 5rq t.*thCue9ldJ C޺=0m2ZvuȢӆ.8.^o[pj3Ik Vc>ŤE0"dF\Lx2`{C 0 Ԉӊ4&MjEhF(ib8vI0%HҙRɘFp "ZbSkvTlHpC\TaYnELX,4b҈g/9"^"Y ~L~Ķ$mI[TZc)Ugx%3;.n;;"N'H;0ija *8 vGtu)t%k&׻v^@ZWG|](p=*O?e+C'hicz Ԓup7Du?7V0XEڳYYw:Q&B;O Z^i]XӈSRȷsE^z'yyHw{jBkzSr3HCŢXUw'$h tʃǏ^v]toCk3q4p5$L+Z*rM(}rߔVs{'GZ-B3 Ժ@yj:qD]? =2`]kqd/2Z#cȰ4 xZMy8',ݩ%IiY(y1[AC1x7}%#Ijm_]'d_? `ً千V剀dU%knT H "@C K~YA^,@dJh)8%0rtu`;Иm-dNur5ELai4nFԙѱ8݄"X rqnKClp: FSpv nVI%/l} U6f <_iRfi\#QѹF +yYPUTT{lƑ\2X(W@uAY0a4Դ}G~j:qn_?ӣqʿR0%;Qƍr^98yΎ|K >ej~PbWvkΧ"CBP%JU*῁-sDA$z;>0Mͨqk踡:LL/Y"N,ho|)Ύꚏ|]v(-6TǢ|^čΓ r&Ql4R)RaF  >5;+dg]0fx kڋl[qJȠQF(4iEsiyFA@vVOc(R:ACm `}d7+i_A%,@~? 5)@("ߣ'X#4i.tJ֨OM}7#0HsQiUHkHTܢCm6Hgcg M}i-\diztU3FR ́ T /Sx$e<% Lӟ.kzYZ}* 6ĢN<5X w*f!#Jm/8s)cyVYYU~ҝDcJБtNRq[i (Ijjs 1y"`, 20{?LRuԚ:UZ-X|Uc "14F1Јq3ey0 Mb)eylޖi_ECʶNftM `2[<-fTu]߹ S LJ*"_ƓjS ,Aj"T_%\MP)8:hQ{`=@ߩU!(MdȓMZhE4;zXm*S"k֕KW[uBN[@wZ,+=2wG@O==x@f  kqJ~k犚.qzc Fi"Ff|.VN-鼶?&zw1m}<$~I,দ67T:=T@9ilHrG:w@n0ckRCEZ,N@Kfm*aшq3e =5lӾ}<VuZph0>$` /&!^p } =tZKsd7{2>͂>/ ?!A*X%Eo뉙EJd-@gX`Tźkj/ 5FϜqS[ l"+4٠^ bNB$kl&6 '='r]<킻~2;u GVǓXoWxͳCJڝ uhzY4q̺j8$Na  oߨnUM U.K~Pe5}Y'u2ƋcBԱs~x^yl':x^ssxOqJCtYM~w@y[ȸ0WshM3HvR.γLM86n> HBZ?$N@1$D 1H-ӀL/]z%4OT P/=:eV ,VC[[ϪAJ1WQ7 x$пǗI~1({JOѝPgH5haP ;}J'>m‘Us'Ff񳇩Y37.5xQ:`L ۴Gm} kʷZh8l~WeNa LE4ew=W!~17b芵 r<::G [^5:Yu¨P9(-<6\]*1h={CwOgP~ϓ_8= imz7E2yígcs]fn͍k,N*o/"]&2xz vˋvg7 ?'쒗h,lL)ǿ$Y.5D ΰ P`Q\k2 Mv`b ;@ \DJiZi--cavߘq8<=vfWm-#ZIQHHľ7F7z2ɪYUYun_VF>'3ϖY9$:MP;kvajY 2S'jܗ/ەKZDy\ry#MxC \sVBFvɲǻ^Zsj,.HP_xUdlL&dR GEp]g@CƑwi9rgf9oe1!SOXO̴ B6Ne&*B*ۓEپ=N묞j}ίJP4лtkYY³xC%._Bh\Zɯ˪ZqB-` ¯EQկ~85Im]y痎5Ww^cτ1CĄ{y<}|{>k{9m/H 9 7f@:rfYy[(P007 mlҚ)^վ;@3:(' P>倇Xr5^$:'=Ow*jtTڿ# %󟚚27o?m6@H+aƍ?q;_c1cd97{Ĝ~UF1fFCu*h lO=MFl"O"GRE/%hb#wDAȖ,Ho*I\oq:f_~cѾ&MԩSg'8{ڀ1bO=g1ivm쐍:_5W,ڏmOڿ_ 8Hjo5 98 dEoZ ;9|]Ni(u.׸VUizšI,q;*4YxS*v>`fI$_xHIݮMlZQw\5n):[y2#}<)|}%C> |UߙiIk׌붋f^],`Co~fÆ 6N s0aW~W9|k!ѧͱ36G?Qcnq9G)Fn(R"9\aWJBr6i^=t%( =]|m_>V]g'F5t'iH,{P@IDATG:wqet7qbk,É%*݂$[cټtK}0SHٟ"HͲKoi^~ -'uJc֙g-zm>#20$>8g[e{1}?~ܼ3?=of~yJ@U~Ӈ丂pT)@yDh0]焯 h\MgZqu9ef: !ȫIL4MI%Ӻu'a%#L669!D9lza)%qc2B0b 5э`#Ys'P2B 62wmvt41}ymWܹ_~foĻ;_nN"g6Rھ'ˎ^k"qo\+$0OQu;|Ǟv 6pNЬvwYs.mh2딧^].ǝ\X>_RqI{qLB ַƆ1C-6˫2٭r 8= "wX/6ٙXс 2D-A٪w{˻̾m!c_|;߱#_: {2_WVO{<`?Uyގ} KSxMq66 UNOV`=/+,2ܤqB0pQOʲetǓU3Oeuۭkq)暒Kll'!q&$lP(`8_ʓ1ؤȐoļtYt_wWΚO|G&}tܳqw_4]ηgϞbc{GdG~i;/`zj_aYIJYzC: e ˎI:*ǪN#oer }2@9Z`eN]24ȻIiܥC^6>)6'膯Ԋ{ɓ_NKYC]/8ί) CMX|ռ&];LΈ6m2nX-a k:q^ńIFX@V;=Kz8l_K^nAdC~P$^䮗 &-I Vx,,,o|̌L(h0ar__E[˜>fVg%Z=Et]8&a$QotJ0:z.)}I<6Zb 1@BrH%WGȺ`cjKz .  /  )>spN$0,5Ĝ9Vy;I ^OviѣGeuٺu˿KKh.br ?>&p,j&9;tMԋl#au(9wh0uzn^ ʫt5}ye!uPԸֹy+#8+d+VMtŬ(V)ı,6O1(Cd_*PU^9l,U=SRe ;9am8$ŗ/[TµOڮXzl!gF'wxi:$>@ed@Ьd=ؔ0&eIz`rR]qV>Ynذ 21$y·U%7S `Y޲)X3}jXYbȕL,PYe6Kw_?~jERX!O w*Kl~~( #FB&O6xSIب" /k$B3K@Omv$TttQ5NL,z״<ja E%j/,Sf:W혤">8n `c 'xV@l:}04 KqFdπa]u߰׿^z cݥpL,E@s0T$190 Nl);"ED=ܑs'`ڎ%$ 2S>``@<]qxͧW)cic-)< y- Td&|ʀ RWG)b"vn9y7_syg͗Zf|5O<$lexy =xYke!;lDy6`a00K̘-V9{akpF΍L,'dK2ML.Ϣ*'? rjFoꪕ"`'"g|'"lCi*c.`W&ߍUNTFH9pcG13rgh^z%JvGUԧ̻.Y1f>xȒȍnSХ%8C95@||Y!%@\Xd "EIJ*W#;q+il$g>s=^S}}'j? TzA1Cq@ľ$,d z#*qz@܍Ith x!c Qk=wE:—2L2Oh1:hc_r3EA*0tOwDlɓo2M 2' IIE>Yb c#"o \z, 0o~SGWKegĝk7^>xTP ɀn:vL) 3оtct"CuxpzB4[4N*W9E8f^t8Z@C2X:CtӅ>hT2eucJ!:OPK@Y]8@>}sa' ] 婎ޥP8i)h'aReI`\=5eE٢8 `/N2(ϐETcu+ͳɀxBDTٲe}T?eoy%q@OA3Rav)䰒tt,zNC]4ϒ}x<7а2p56xO씾 `$ äanj(#sWe!!nN#8J +cy q߲9V;w)v\wO[a̞WGSO)Fj4 t$wIe3NSFl>Վg."gHQt ɣɫz;6`4% V. SQ$EXІF^`[K lCV #QQ?V\6 $:%~qyb|ԏ;_?oaSvdT֭1vV()>/m}gd~ZP~I#m?{ksy|1VˮJx6oo{ p%Qy6Gih-<{<,^VvM2rc@I stB:Hu/#=!<+jy뭷 v l*_|IY?j._Bf108P۹V"lʬm@r09@,kZH'tY8i A,E4{PdCS=3:[Ҕ+%" d;)\F2^h=r\WjBjy$y:yBIpі20-/٥`|bsqg31ܿVt,2 42m<kssd!eqG s{]I aPa5_?r<<ʲ\t9/xRDX6 fM&9a?AP<n6voF(/; b':zBw?"ך4氼 0{Κ}{u'?iA,#|:_=i:7E"o/xRDX1URjXFjyC,p&ե=p8l\KʀHUXF}\!,q49$9ZZһnY uWwrU6}{FQ֘ E*,\Ts^lelwe!gM+du@2 ..ϟ6G/hnܸa6|o;0,K'zWc++0R:i%K! a i;0I' ]N.fbEz p˫aAۺuɭWhM;aid$,- *9KIЎg0qI!#6 Iw+$Q&~$q(gtO ҦMc=fv}j9fdQcN‹@H {'*!̧%aA7}mEtC4<4Yj<LdqϢ)ܴ&^섥IR‰ +Co;1s+$Dy'2/rϊ|cB/76fBkW?Ai?|>K׏o5KhǜҘ!k\u5PF K#I_ sI:5n}|< <0O<}P珴n= tT& xs)M$(,ǽrԥFSqٽ#P[fUveU_w0N8v41x3yWͅ 4k QXN6:ݞ&,%"̦,2顒bt~YWUr(>ɮbK+;C 3d"SRJB!dwKѧI]&Ί9 c5WcN%ch`ayV>E^K9F𽀻e.(ȜE֡܎P79D6FhVٯmP0qḋP,RƧxm2!?Msn|#`nNA4𝀇zH?XmrpC!1q?cOvVX^g}ʊ9yCd졂:~wYZ#BhAY_n y:=r{ ޤrx c.mҐqؽX=h3eA+_?×x }4]e$P64KgKo?|{O>w`2\9+#&Itvr'b;Ba]".L0I'!>2]N-ϓ[GvU!OCygXMeZ Ɠ/JoU@;zE( sΐ>'+:!CEEtYɕA!\+1KXrW]Y*(%KyeHnb4uVm~_"0jd'dA ^LJFܻKtIȜ,P^#_|%5GGG^2E"TUE(Y]zl d|Q *ʋqsT`oQ>r/ =Re;eC雖j++P7&B,h!)aˊn0tE]vWWO y$yQꭈtCV؍k}˦FG/fiIȈy2{,lYX8wǽ+:Rh.qve;a2.o,#Z =!2َM;7&P訌0@I XV$u#cg:WUep=0N!>+ve@6lZSfe@E4YlW KWd;2[>@Ԏ>V[-p|J̝yR% s.( k KE˫梲@lc&e4Yx/IZw(KG},ײ5^TipO$qVzAF +5҄](:ЯHU@=KDB}04"豁.0 iu$Nμ&nÇ7@ڽ)8٨V6 6}m; apK(LS+},0o` (Xai}UTF(䄁l-YF * R|'* }ؽ$Џ[ s0uc"wTFDvO~ՍC"ǿ+5Ig622.Zo 8{BJ5c}A&S;P]L,rׁ\:%W|u,Ѱ :W7]MPaj֒Kn9 1&/RX2/ps>x)2@̆KH7S)&6g'd5ui&5e7@?᧹V.wu s D,A<>H~_ :Vrҳ%iJ+)*}j_`UCB2V *0cAw5۰=]8x0ڏxN دt]cecJ\?9`x!*5% Ix:W[?yH;S4}VR3XҤ*$A|+ K6N Lbhc:"dS+ gSȳի+op5LEMDq1I<<6hVM=w / j,`_Q+ pIoJng'}-> t$^ + NYP֛P!9a>pV1r1NNGҰȑ#6V֩%Ym_, G:}aBNvgT&A yv ~ hJ:\whv@sۤ[N p!d]S.=e17vEUWpԊlY+ON)A۟%1I6y `N4Ef2*qc_M_lRF`jjlٲŬn,X).TD Џp8iSᬋ`롘ymu]'֥q I<(ÍT*yCRVe)z$F_cw4XQen gn*ङzU g%C&iJTAHʹ+-r.u߿ߊܶ>WC_H斵 D 0m: TgE]G~_Y\һPdw,.?^9ṚL*$FR7ӢqJ_>̨gp%0It(sKE]]g%Hen&GncbL1B \-^ KNH["8 @su=B,@Amc}Jk&4L3axP:7B ܥʇP,\iG_T 0]HRtR7R1AMK ;Iacu9l$?/d#u cy -CQ]B<A>ti->y2HiؒR[J &I w$9} Ʉ<Qq ϓ'-C>KKK4n^գl eȓ0lŋ vH C*ψ;e$бNgYMB+aAM87vVK>JA%e!;v?xh9D 3طˤ@Pk&6E.z$:;w7D@k&K6ӧ  <KK3tX36P3OP#jenYO:7g],COZBlrᨧ+^è+nPnyUU!_ԻŲP7UU&. rgLb>yO^B@r-ڕFߵ+rX dQ&_!Ci6P]ܪUMut2 !8,s!h\:e' u,'$jjYSL;{wdbl>{Q j>eMɬ}N}pDMCIі{LSxS/_臁Gdc? OVvbzذ5lC@@>h'WLn @22{A=.Mgq\\g:>w7qH'CSЇ| ٘seUhMޅ kjmfh#EiKSO}9n 24eGnV at?$8 4rgA-4Zq]GNet8(uo}ɍT7Fl-r<#ѡǰ2x.O1P2Ǜ ^;g9ϝ`I159Yj$Xidk XUJ,[%k_Nkyh*ϓU|:YH.d=[qqq4ЫM*7%eH?G%y??*i6C]UBUln $h"`yV8sѶ|33URkך7]c Yl.OI1^e@M,[s9\Ǽ3OzZ5=p7м./֩}xmRtI.W=AM jP]}2@cۋ<$6LC ~L4s~)>/40 45 `Y!y41p'!~)PT J@0ę9UYYY76QCD8u :zԽz*,!ai v^J&07 l{mKR9HKt) fHQ |)69q>%F x!H X| UmU׾Hw\TNLG_ӵYХwS'i ܋n"AMuޠlc_t<~.;Kx&E?*}^~@y*|&_ Éh0nlM5eHUg509BNM2 99);(ǥ-ҎNݔ%>>[4]q]+UɍTAvJ7JL5o4>V, |E_Xל 2/&F*OE - IWDf`< z&۰'>FX߆T[QP=SVYY]Ҥ|Ub{\޸ ^МXd]JypEuw.bΨAU\KRPA#rmOrMb]"L/D[*a2Fe<kޱ@G!Y[7q&U`B"ɢ\?ӵ#EOľr@Nwө8.#'*؞ZK~ O!."ThUo4Ɲ8|^1bsmAqs݌ފ[5@Wa, nHyK(А_H0_!N2s&벲!CۯqW|l\J~%neJV@en/ڸ3rcС:_vR^(L|?V@8wֈ'޻bսk(!pM^HuS6THu0Fy_YU(7J.cSoD+7;&|8sz` ep>x7?/s/}Ɩ\vDDe¾MztKkuW_\Q*{x TgE(dI(˳ }Z{ůirq2SIUH͐B%dm+9KCwx8~؄|0OBB) (RX*r8G.B]Y ]T0KTa2O=@5~uBuǿĻa(_E:Ѱb6x1CuҀ9g>'?@͏L5 ~IHrƑfE/.lf%cSI%=Oo# MB;I(;ᇤuwFUcXcuuU\Ct+kUWw[. G vq>ZZŹtݨk=F=*skfafZĹ|nrrJ<|Dا7%FA!j~w[O kְYN':]v@wiވq:4d5!mH@@k,'u]:j\ׁǥr|8˲ _=ux2\ٞ/ WŢZ;tfC|&wi7 ՇKS#cc2ph W:Q18{oi{򜧗a YS4;}=(끕Mm4dvF-_j$@luN9xOٮ,ulr>p@;\w9jOVCwPԸ!5UYt3e]#PpF=6Ҕ;Ah>uSj8/`F#2\>kz*slcn]j2$@Lqs`?I\N}u{a\>@C.sx>MG8xBpִ,s+߭w^f,N}TJ!-\j8`zhS"D󱵲Pdm%$I @>' L^;j}@³oVb!O^Ɗ֗rÄu@mۧٔqMiBeU/=d{H"~ JPR GFDHW}ӽO~Y2xƦ]hguPs`阵NGVitqne WnXD_io#J%!a!C=TaW%A+xMsE%VF3v`6h`g sTt(@݊FLCH}wh/y:8T'dλBt5.8i|eAh՝z\ѝ&U5_pf*8mSEhal2C@uH\Iح+xڿt@IDATP6*<3>2%*;_*+p 'vq%_kCBu]u9jmwꦵ}Aj*/W^#bd쁋5>\;Ia.C}Z%ƒGawe%NmR!M}ƍYbj+O%cFFޮ?s:ejG.9c;kE3X/$W2h:℠#NH^B`xI +_}#7QM6DVR%acia\uCl{vR`^KKtHҺoQi3gffKk ))k¤>L.fz*nҎ=iyysihzfЄRNZ&.0da >vV6 |TIXAD1 p`R,fb>@/r`X?޶rncS^j)a $ $,+@uHUGS ]iC>Pg9y k\ظ{ 1'^XVPrU$  NW$^d)^fOp߸xB@A,0|6pm;"Y:3&ܥWk˳pʳu9a,Y+Zw:|vnҌ!VP@VB%pF|9p!o֏onꊬ5 Lj\4@~0x rY8:찼G'u''z=iIBֹyM Z;K=$*6mwm HG_c6i%\|1bތ0fjӧO|팅M }y@ 3%T᪗|;0NWgOr|Vpu,.ee,\fV"W|ņ2e%ߤθkm6֧5(AD&>ss#/t&Y^6gd?0ԩSaapZkWV K |ԬSμl9y4Ѐ@Z[Io)ooP}룊 fe3L CȈr6 jS/4v]vȜenk={2;XQ3sG̈<ڭr KyI9(qNV;,C;VG +yVe}eWGLH )mgiAjm-5V$Q)+l^!S: ,-7[2UW7+KsGwʨ(5.C24>@A;}pW}Tɬ4zrNpnPCmtM:"Ĵe]&Cf(8X52ΞE!J$EB`Q$o4uL;cn̛Ic&dˁ ~޸y"G[N $Xk':4KE;,?Q\5qe@r#u,ղ_/{h2Vئ`szih{W 9+XstExV;pYN]KkOK%̤u{5%&6! "Ğ*rMp?M1 Kȝu27k -oywt#FRSr&DtaxvuJSpYTxCٙZ˯4 z>uѣE E[=;`?Y +hF6W$cYSQnCYsΙ գFv3cӝw$T:YADNWA>unmvaHg{#n3`[$@pD |E+kۯvw0]ƻ=yN:O8UP>9zyMuky\/MJ;=fWPuDU$'jXS_\3箼e7ټ;G1!оho~3 `Pa!C>銎몐 fѰyGNZב Oeh}PċPyqz)JF4* eR+>b3/bnntZgٸ]&"9 AߒJ[0m0GV^A<u#b8=̯%tK"45*sY 2ʾ훢;(TjBCW.`t3]̀bx4Q͹ʛfn-OؤPqel#X"Q}LORNNdj@Cq^s4]e*Eʱ}QRKwTV`; >˨~ ;o׮]L=ޔ==>+i=yG F{<H@(Grng#y:;et/j5qtADBrїjc jQR0.6pT*eg)b"w3'v|JiW^1ϟ7s3_6O\ 6U#@2_yD_Q?>8kϵE55JĈu-e_)z#/=;~LmO?pf }+OdO2tCɎ#n8wFed#yK9CDNڭ״ZKN.:-Kj>.Z䢄 _+k45dܧy&|eXׯuf$.--|;V'%f.L_K^2A>'ly`9ٺ2~ aT!fN?h6b=y*m‡K:5(AD-di0a3SF7d8|Θ ;́mOVO~Kh^jf掛3Nc]@ cx <)" x]$!|% hڝr d9ivٌ"Ky;ʉp 6?M'<%?&#O +}Jr}<̯pnw% .& uYH׸VY<7Y:se4u\5_ٛ2ӯ,u3O]>wIIX ')SO5ښ~v׿_2玚axGə_/ ^c/JnGlG jǨ:i /m&5(42H cp6׎&L8!d6[?OtË/hz-7xG`}o_OU䏝Wp"z$'50go`F (mvW$tu /Mqm˳ͺ ȨA#ƬcըvQ ERӸzQp1q}MrFc=f:ԋ鹼=rz,^jo5v_.cJOzTP6 1e+k`.*s hi) s7(8C-qVZuOi-CC SU/ zU)} 5W(X*CGmu{̦Moo6X*\9}E3*_5tLEL@12Ll*)*|D@o s~8Ȕœρgv|eY (ADq Ap"m &l(!~VzGǬ34Xc?eޮQVbʆAd6}aT'"ʴyҳ^"7tO'7\ڔ):oWN#qN}: jԄ}sn{?+̣>j쯩l/Y/>oN]zɬ}9nZc*@}zhrfc^&r vؽr ʩl)$6Ux#rЎM7dPW5ew\'Z5[cM ppW_21 i'ٳgF.3?? Hy̘ɴu^D䴂98|;/@ (@{jX^% K#99dm*ir-+7^8]{̼:7-ySzaǕaaj4ϩQEz՘3Uk@&6泟<7̄kß%.c6٭AQ {-p0vw%_AM$@oGs\gB혵\ݭ˻u񫫜u‡׿:>ZqǪRbG:)/V7}}fݺuOO,믛~wdG&d]2r6ۜ\GOH*'iq3:+O5 U$@_6ݦeQ?69) Mh}zp]#F9翧2upSwy]$hTHo=x֤PGnwpzZgl~0gfGzl'N/}Kz[7̈-tP;4xgjE$uԳ,[S5Y} ;`3 *Flp uLOs: *e%ALur|[):6 !$*Aնʩ&%!z!Ma=tqS(Uˈ[:1΍?Fx>gc^0o/?L>\8cA2]9Af~\Tg YFŌYX܄h?*t1@NdνpFt,!%sb$,HCo#. &5I: eߗfǎv8} "RBsP!z̒U6K-)Je|`Q͂7{s,_iaUVtoP "J)-v%bk#摽-Cfjj>{・d%>|?o;z'E'*+10+Rᘉ<|2&V_ޢb(ܾa<1Ept: u:]8z 4E)uHv0C1nPQ:ƛsR%e{H) ; F^x İ,{PeuUʀNIg|O-?e7Awwm|S^07do_}_R}-hD}]a붰fMٚMV`6rĝGӧN;adj*GC2w 83t~]1 ,Q͘GBF֌jj;]'^ϠmIhF܁AhVPUypIc7 G#f94#v'> c~ 췿m~Iol1{?E$6K`Gbԍ]s^)j,ZYqeb;OI90iT7]Kۻkʗ@kթӉNvu Q| :$[5EJvFVyd4(i_2R*URhCdzҺDǕ䳽 ex̡Osf?CSteKyU~[li^:5y}(i,ە3ۿ}>"turGG%`@Acje h s\f7}>}n?O?m_O?#8j߯ʯ</'ˏWއ?/=_{٫?ms sp9t$& zw퀥a ik6x7t¦qB7\o>r9>%pqWM࢐7 &R\U d=FKaQmueλ#m=w{|%/^>?j?9|XǾß >O<} _x___|'nߧ{ӯ?o߄7m_ wgu(ω? x߳pp= =071H.L7<+Q͏z#S?Ə7c1A݆<j"pi'GrdNB:epee'd,˛{.GKqձtp?)f9DM,߷ҳC*C'g>c~?z|ƿ ?Ox9$OS8M:GHЄ$~01_39p!b z=] (tw@Nkl soxLi=>1Ex%Zp! O]btd-`!W] bD?9}J @L/[d9"]ȼ~EXK\_6m}kpLoI5?⿏ӟ?|ǖbԧ~~zg~t.1Ok{o 9?>ۭקo~?o}kOxO <=?t.WCaU%Ύ3jp3[,o&^" 6l/~H:63`B|@f%͗|? O>C)7hW?8ټCL|W&$8^h"?I9h?)//{r{뭷;G}s;=}؟gc3^ݧ|+o+?a7O?{z/oG#7y ǞjCő>iPk1#7na=i\m'qV٨'rv<#& |+Pm /YX?΍|5qs6x}ǟw_S:_^?EC\W3<9F}o/>!wV{iſ GwQcQy'O#냀|B($j x%]d*7}_|·a~O'oR8S?_/r͠p.NrC6놿:L0e@ g@WO+?$GW48^ڥDJ8)b Cma:‡=qgU S<`O[X<뺀8/=h`3H;on'^-JM=ƿ3A|K_z'~yv _}Z厗ߴ_xz^*̱yܤaqn#IL[yQp7)g#P$c A`i>u<^pi"oj3gqpN}Z 6>6ֽoH]}sdѦՉ3 LGZ* __>/=}ov~ɟ:6XAbqӳnPbsR /v1"B]R7te`|?k1[6y~&]aqPm:+DPԖOhSK(49ظ?sotfAO>rjxZ0K: lTq.xOgk_ӟ>}}mذ_=?~;/肫Na1́~0ӊfvI51<ؖmuΛpsPxeۏW8e|7e"Åq;}FzQW[!Ze4e)R"ֈ{+<>0M.EQxS\)+|A_+ ݏ+r`9j8'0~ Wa@LkLb_Y#5 >_׾}_o٧X?k ~kpނ8o5p2iH[Sа^v)l_<. c ~^9a_pQ}Pƍ4N"{Ή%P]ԖXL.ܯ[uä19Bq瞕 E| k_`n446/p1x'o}[Ot>>6o?>~ƿx/!O_峗̾[8aTMb: RX5X=Er$is':/@COSrXCp^I|t}P[ȫRE!_xl}^ @υewRy49;\Xvq^%OnTMvDظt}q7'Fs=Eh>Ƌ*y睧w}׿>ޛw/AjÛJookxi_ŋww?Ӯh)G|CrL?es/jqWHdF:dG=HS fJ"f""<H9oN_B?_JPFI4NW io?>ȴd<X9sm.e]?GCyϵ+On z&tt>cI2T !j<7I]{wm>| }?D?g 6~|O_6/#3crl*)k!1 '5tDKu}+S]ifS| ,9I>z %im4.J>%~C5x71yvqߣ.Wo{e3 Gv湚 1&ZD֤f)tkCMǯ[#=;Hk_?]۹A}uV3>x_ăg>kk$ʍX-82,C96]r ի \@11ƜͨmI;3 <h[η0ڥ^=܄~s|.M=.<`վVnk\qO+,srS1ogIs4gكրAiy m vN?f R5AWsVCCxt|8^'?mKw;Oߒ]ϸZzǀn@'K?w J ;S\{<PZSl#m,577 mY Su,[sޯC$}KX;]`ߏ5g d]hjŕO 6T+)N[,5D!Å>2r1Ute n'ilQJ$$]sOUq,>â{ %ww_ `C-Drxd>2ޜágiyJt9f`Nj;u@bt=oove=cw.T%ԙt!٠s!)]Q kE㞋AEFc^>5!i_@uqUۭ퉗sNǓ2'E/ 7oJb7.p.⭱SJSM?tJ;%J 90 NʒaLZN$Nmt)V>oPxS_I".b t J_"=j,SEזdȄz(S!y{> -}@_TI nHh2q9&5e|79>FCA[%Zʅ &OrA k$h*MCkȇNKrsF)BR$K,?Uu@sRE[k1#fp0A90c#@IDATT )ngճ]*'Q)ElV`bKL r+[y%*x^4{L!8<=Ș?W:r>E);[-wϟ"5W9}6CX#ܖW[(j^sy2+zlB"7o|#` 7KZ^$5\(q3/@] w:yE| 81nt X&B /΍vx+1+91Mac0TZ |lVcP[)KljuJ-Nn)Rejb5Ag;RH/?F_94y9ξO>T3b<5=dIvJ 91S\ 8t|| 窏/].xjEހs#iS=zrξpg4#G^<Fr3,WHb[57yr0/;~a"bWv] 5^s?UN{NJ(6z.Yi"Xt;y$Ct pJr>G>Omoƽz%-뙁_lXgJb1~ y-[71]q"CN87갾dثbGȳ<3GCZ.>Zҙ7CJSB68t4#YPYz]`nsG{y?#bE^@nqzEO r~.}^b򉐲sdhظU`佁x 8t50pw vIk?ZwcMo>IN#widh[mBN%awNHtqٝQeA;F{GڰuRuO܎`Z!X8 Ⱥ/#.S 'FI>/(z]BD< {M1\֒Q{ΰ6&6QhYjjTjo=POGjo_Y&nG RKFV펧v [˄|SLOw's4FbGpϋ9|ߖV*~q&6RSLGyz "{C;ӝŸ%qn\}〛Y'{BuN"8%BMD~B׼N݅Ԁ8$R>fvH-m! ÀM[S /`: xHx'm|7rY1wZӸoPFN}VS얆^e|og"~R }R u :eO)WFc YÌ:0 wAz^VqW&< f@6oj2hSÒk\<5@3:ѓ%~)/܄aHɓ! O# Daa~b4NP_ @ ].n.f:u,8yII7]I#AQ;Gf&EIP`@v;p!00iA+&փ9H̥q:ɥva^;>c}Δ`j N7IvBPS75$L-rwBJ>,!Sht\ =w7d@Mi3==66!ՅugwNSd/S/8~SzjP.Nx _wx\}ʹD u5 ! #h͂f`'$Ƃ1)ɃV --u'N::N<)Ty2e1gS~+}V9Yk'жnsj;MMbEΜLqT2: H_ @J\콎cbzܤC|סO}י'#'8^͓'91Nj._.2!`61ZSP Q0|HMMfEZ&]{{u\vVA!U)} j_ wK/4)U{IVVzy=z q l4|TkU7zFh|6-RSt5!vC&@_ Li"\Tmqo)l%ԽX\~Z %pVHȧO7vmjt'1qcN u{^$Sb2E< 6S()##?2dejw'aӁD2ٟ=<{Ikû&QS$^"PmgPM7}FϾ.֯"9{ݞS_m.UB5n +DsKrq&c'8&3c8jvx w!J]~^y<:NBzr #!76o$RFP[$uo)4-}u%smN,yŽsi 8k]{Ʈy1?GvqBg:* SP{;bF<9BLO 5tؗh6+=[*uS^SAN ͚^+,< @Ή9[2+|7u&6Bx s @ bs zvm/"O~N'?H id5K*G Ǧw]d76p8<[ 9Aɼ+ \OdF>sg8I-B\o=|WhGSe?iJt O~xv.0i8Wjyz5 jxO}E_mȳ8joTwqG5O߳_}!^sjT'O`9iyB; 䄗^&dNGxm%Ek>LI:bq[π&A&u4M}o!ތ4ͧZY&{> 2%@R"n:~CkKe~f)-bM+HA>ķ5z"4zC+ʾ)KQ&NmpO 7r"1n]s]:NX^C^ғ{|8q㌄5\١s8سNۼRAK~Zggd_ᖁF]Kv9*.EwJʒpםΥ@>SQJƳv y̵TwrBc"L3ai{_A bI]^ :-sTkuS Г{5g,6!4_y>kحR xPْ&NKJJ CHSce7xɗ^j]Xrj"_*nچb`:|#F_MϹfC_Ku9L?FjgxBT> Oq4 \UR>8nI J>)Z|Pef, VkEWw8Ū ,} #N6q^,(Gnt|x8e"Hh'nq?˾M7.[ :9͞$'t M2L$GP6y(ڢz }#^QjP.,h}GG85zִ&W golT%ԙxE `_sq%.\Zi^y2}Ƨvyy2Ny}206cR TぺX\^x=qMnԖI_ץƍz.rH'i A ӒEҋ7#*lVzз`j wۗWܐZG( cNQbR4}2}5N{ /1u8G/ 8@{t~7aSs. |@_PNA[P[Evqܲxysc{M:/ Uh;%5iI0J\S[/p{Vl@XLsd,6N1 [v\IH&<70 tD\*U9E{L=o҇j`DRtNW-\ k3ݩLs" ϓ2Cy%)хlg+:Ԟn (y?{gFo<{F?I\Z8<%~^RKĦYfϡ5IrADj\@!W1i>}_Avq&%w>gjɎ9y(kxXJqPb@g*I$V(YU `1j}~"LTs350*J(a?nr.3">Bc͜]\5ϚMyS'y /Rb <7n#w. AbdG6yɀb}HDDռ뭗J9>pf^ @9N8-\㭅Ls{~O'tfX˅$vzʪAT X{c;y:x=i[ۜPtv֖xsd vH4NNôCLBI|ہzV4 ǘO2wu{*psXpGUl>v([cJ9 oE&#q M~!v<6Dkk $A/IMc܄P=nt>~7c։|ng ͣ7gLs{ۏ)Hl#ty1p\ ZQ+p$KP$4)6 df[xZK_/4H@:ckgF۸#7Dc ijjFm/ 0(ڝPt.N„:c #]"S1IO? pc^ G>}d NX|~Hnc]g";a/bR!"ċB%bViܙSBp VK'b\h=:ɞ&G O",jr3pHk܁~j׊L֊sٔ v1nr\|G%ݏ;>rHVHkQ@ք-.S`gt%c6,u4rSV8Ei}Nf_! !쩉|s \K@9[ 4$r4qw[,Z΋oD&L#Dɏf#نmnHe.7S#/ɁsMc2׊1"$ӰQ4uY~d4 :6n)s}2,vS{Rx\O/ez {v: u$,ړ'2*G~GT~>xs ͈.zjɺǟ{xĨva {*Im'ykPwoL5qld < 8 |65& 9jͮ9"1vtW?@O9駸Wu#7A0'S< &N=bq'}7lPEba m8, Li^@I|;r~taͅ~@FV^J-Njӿ_[&VOJ@#_,Rd-9SODbnj:]y(S#و,twv!cXv$i%*lwOHs…q#2L"@8 uWĕ3z6I?)tH:,E#`riDNx_O3o|kZչx7]`D{IUhu\ej]f ryzjW.xZ{APcnܘK.B0%fKXjH])DO#:{p qr5vFL{m5ltn YIs}hxzĒ;[y}*Ak52=K$i, p`ɃXdUtx[P= >hSǺ>c5F}8i\d5)Յ)|^x4\LE4 Y,@c"ҖGz &֞x4G4N/t~`UWZ>`1jG]RAYpGܫf?>XAr]MGmo"UR)8WԎsOi|7zM沱j ! OJ^HMD@!0ի'P7u:oNOtS置}5VSXw_k!O~I7# (iuRNj9)3҆`}B; u^\i OEN>&N#y84=K0Coz>KurZ x?3MERr!$M2 4-ov:4v/ѹKk.ڭc]<^8j^ @N.jjc~SoGHywG.=5ONmN~Ats;KhP fg[>~64>+LKWu^w vTW𧏧͹S0y}KM#]];r}>1pjM7!P[:9 A#K3u'^q<ڗ3&\m-a7u6(Q]wve|toYPIh_c`-r~.`sN䕮K^l2I%% #z*NRdz=ScP?GcS<w,n\H޷cG<6{H.ૌÂO-pwY6"+\r82 <ΠuvNO%@'/7mj~.Wp%fu ωu,|;^ebH=: Iȍ Fr< e Ⱥ{^ >R&#\puA(M4(z{O[.*i2Q؆.L3KSO]n729 NlI{Qm+DSl[qw%{ƾ14I<͋gj^7Zc|L.t ! 0?-S ZȚW*HBN<3~v'/M??Ecc*Lp$YOBDXR)`-N0r肸+!.%^ʼw-8CqĢƞ{L8z <ń!uM'zpz$nG-d;T5wxr*31 2?gL1KDs& :<FuB^C);q>}^r(rD yT]Qjz7ufoDp"4R#򻍸+ Qgw wQ/&jS]t s 0ŅY;L}@0NWGY_zM#1]u.+Ws W-˟*'VѬ j˽CE Ɋo֞H6}"@L2h͉sBaNƄ i9,.M!sd+~䒒#^v66ɹD/na!6>(9zvF#3D$j7i|7zpDqyƈ|HؽMMް 66?|Q1b|7p:2f'%06噁,(&Md`ڞ40@9i4]s n-N%~fZ.^%-v>/vQaBmFϭ3^"Im $΋r!RDLp<$nv y* ф_|SY 1K鋼N;O#0S1nS9CMH&8; p챣w.9R@B yhSCTױ ҁ~oi_=栋&mmcI>0ș aCb:q=Ld*v>>eGTxp=bc[~ X2 @8 !뼩ă;R"wi'K>Hnd"aoQ%,T_|uqǘۍOZ;bWt,kiXt$NcjkvTD#/r5Dv tHACЉHM9q8YWx#@8j'\M[uCdk{%.}җH7ˋxf|Gw!i fqrL9 i)7SCA0i@/zGFÐ9AF7$Fi=>be2ƍMqƦzk(aSGFr;FrIZE9H_1Qsfbbŕ*!( EڭsU/*0ZWL9e]jم{ĵѵG٘p4yrꆿ;5ҐjnfP7cD`'.Sy .%1.O" Mn/r>yj.)f6!-(Ĩb,pq N>2.bpuS %0GjN =v {GS>|/{.)WÑ8hI4sL$G&ld )E|^$o%2nx־gbjPE?9pY׸#=Q#i0sWu \7t-Y* ˨Mhu{p8h.R2`Lݸ>QdPx srzyƗ|;v .ƺ} *Fo'vP)ujCE!=G;߬8C i^.SR -.) Ҧ՞I7)cJ4|?3bD^?OQ}Oho!!0u񛩜0R;J6|KZ*3%iK d@¤x5:5_?n]|E.9>7~ŹCo}Mm_mԀ5gNTɓH=Z.7/ nݛU!QC{Mv}D^rlpu>K>bj[R_kkxev;֚4!N'%v+c5R-ȶ+IS+mH4F#h+ԕ׺ [||&{CpZdcjR-sVqsENG,r2Ǒ9ikqjøb'1b89 @𙧶y9l t]$$Mp7HoyH.64Vm0ƶ66[]-9u.jgJ-IkgϱOg6XũRFKԗ^ݴ\Ӱ2ӐG_"%"q><=`(ln?l@rbs1)V:ʡ#q<69jn'-Oh[:OJC9ZV2+/I6ȥ_GG=s2d#/B>wܭGo`Q sQ77>% @8gZ<9֬yhXаqtGGۓCxa{\}غ=}aQkMavyH C J萬,MιUϐfK0n-GH\;X\wæ褙ŏڙJUtvp))pyt}$NN\mu-G( VѰT }ɛrZaEp:O>not2`slK#?G#5S1b'1QsM,FxxX.%)@1 yM4Oz4RD@ X9vOHa '3uS;* kSL$q}f%qimݩ6X~[M+mn -AZ,}&lcz1%C{?J;*q֮.AqRw;ݵS|{:/ e.dd=^bt~6}Ѧ}3>c7{8Oh̺ Y)AיN L$8-3GyXO:&Iטx0- ϵ_qIz1=j>h}:}V\4DDz0]}") e4:AO+pn巉Sf [>e@͋/@aq#q16SlҢuT5(#MG|&Y 1[='B H,ڂ[r:[})Yӡ#-E]6|, 5 O2Q[1tvV%l%sÅ#S>bק Q:쁣j0$],\`p*P'HG2/g@ju.ek. p hU:lͥ|שH&= -Cs 8㐧RMCtj#UU< EjC 1.& Oc*r]r񦿰P;I7I+%\[HOOݎ} s*OG7m. i|0mu fx_\;\(yb8a4@9*T퓚?u1#\wpd y%}M6jU<@֕y>Z] ^|!ZNzn)wt֚1P 1@W9I} i j;NMrM0T Ky^-L<춗| E_G諍-Ӹj=PK1٨Xfr'*"NZłNݝb{Zi¸ŵ|EV2_+ūIIbkcg1zq2IIo˸zI2@juY[i!smG-.q HGǹn7snL'SYc 0qz /0eZ'#8*9ʅMq\9.ڊS mbH>rb-"KˁNjDո:;UY j rn/4^Y~l.E,Ցgǃ< 48Av#Mpׂ%b.1i՝̗\q-75uHLI4ǯ;/dg??u*q#0)A{Pm͑_S ai ;GGh3vֱy/NZ\L O]F.BbX碑|_S? k .ßʖ]"2Z n$&@@J>^E I:ߟ'&O1HX }NQI_%wmڄfN O+YIW44,]+0v~-̇f`]ھ}R FgWjwO7ԏ92NkapxN<=?I fŪ-MmV.wp6mXPQf/#ƾpF0{EC.&^!F.lۖ>߀wwjǝ"V~-7ϾW.frBr%r @9ЙX:fS0ė:!S{{C̲&4짻>u[޹~Rc0B{4#x%]v9wemZ{Q7o)cS~xɂb$)b_.FWⰜ΂d>#0ne-| iiH -.Cx5 Rp#K sWI` Ť̳.S'23gH 0{30S Ǵȋb.|&?bd3{pT 0bW)Crl lz>6O##VJl&1\S@.Xӓ4zmxbv8J7iZzI&mAxB/[|ny- n9{tsƝ CC=KS[n}/jO)O]/5mf> @2#Ǥ?ٷb #1_q):Ml7*/鄏ұIIqpO|ԈZ"D PIKna/rS"I >-7ebu ΅62s?u7wƨ!cGJ߂9=pԛi@qlwQbK%[u]α'0|MiohW[P63o~[b ql'ޑ<8kpbH[W MA 1eӮ<wc-˧D~P;1pJEAiqxtf^j]wi׳. .}VҎ}-x7߶9?>O 猋cCx}d^ǎӷ cS=]W 1jOpF‚CO/΢&Bx7?Ti{wjQj$l pK%jn0}Ql^vyY46Bd-SA.>!U U",xIDAT@N6v@m3N芙i#-y.0Rp$QQl}z<^8gd^ fNAZٍ`c5=Nԡx|9`4 "zGBnSH1A Gkr sQ F r.$JsH/+u\g p:mqc ^}ppvR8pbcd%aIDm :1٣6y{2y<=ჀOΘ3.7^9Lkd-a.i?~x"1z:=I"`{5.f[h` =!ɑtN"ǩ)rύO'u\T7RǠa?Cq.IӴPA2 Ic> ;.U>1#ǖ7m:b‹#ׇiٸ#Ɲ J@֙z*$x&|5̔#ΜxTG6Gs1Wi3Ǟ'cs%y&or7/bQ.4g@Hl17m \:A!`Խحj"}-ji*xBa.+OGcáCw m~Z,^bd#Ps%^u mH@۹*N1T{m` rIk,b=x{Y]vBB6Jٜf9#dIG~Jt/VUzٖeWf$l(=kLn#9-xE]gR;.`~l^qOa{R wI3pQRMhJ@.Bu!t>aX=fqp>Oqqud\G;rA<ܔͅdנG>~vbRwqo_ `qixR2.=%e!vWq d}2H?tαk7[l˵BO'@r)͹rNr'Fes skzi@\8ͥ6&XrI{X$ Qq7cf}΍ =#X\i_66POuHf >xs@ƻrK<2FC98*-u LM'0E M$/px掜.KBԥҭ3E mbHԇյ'U #s۹lk+wY$6pˀ^v!]E`!L&/P/u)д M,6>^hs 1#x੿' >;nx8G 5cb}.w#xC92QC(8K\ؙ8D3'vN@Y ɩ&m&ahlvMrּ)]_(T[@S̉%Zn( .%n=I'29fi:*%v9iNq،2XǶ"5w]`oNy ۍx6cjp`kهo&୷(7bwk:&+Kե naq}-ӦSv 8.6BB0irgxdK)I];Kƣ+I6yZ󄜠MmrR=ٖ@"x:Km f'%sOnk@J-6StpF7}%p#!un%c fF΃߸4U{6p1C6F!yw8t>7ԏEcLo4G<F58ܥǡp0tY}>lvE+#Aѥ#0Ҏ2ٵl[oԬ-ڎ%1);U ]OOAdmF " GΗP%x ?n);~ _GLjwΔC ֥}dGuG\.<M9.2 q3g.ahjpE`T^z NjZ7i])=>&IGoksӀqm+.9MGљQ " Drs?} YE<~ %ܛLj6P϶4wVm剝7 Vx-1=풡kx gA@]`c.F F.Ȋe146w~r0l@\vqg*Dc 9 LprubPi.J.+ oYV]]â6uGE[&ǓzQ;S,16em%tJg 3C#<ňq'ȹV<_ n(}5|}VJ6Ơ:lbLCಮp'mj3ڗו7LM, i\g~1k669q.gx#g1Xss^3:%xg9\,@ڠy-@8c1a >q6}󿝉zf;CM2#CC :X"BMpL}F|hu;Mh纐‘3M1wu ) JvlR-mX 6HN& j]:f2͵Kd"6ӝS,y c*kkE7蘭 >Hqq$,0?.C6zCGmF@m]ɫŠsyl98>-Z0!} 1${ۣ7bfj_䐿MG%kNEpw/7Z֥>W!S"!J6>> 6:-9MGS #6ՠ?O.ںa;Wql,gzX.(lHo/DR{fH\L6ɫII͜kW޴7>'C %KQ1U]"|Ȯo1WFl kG$Cp}=I Kh ȾKt?#a;RxbK -Nn|ԙ"\~PS+B1F~bayh#rF%du`uBiBCPBbH*w)ɞc[?P). =q[(>p{~qlGG_{kIvkz0ca$,"#! D@@9$"DD #Fr`l<4oW{׹>nܵk׮s}W*ӄY>m?KO>n߾ ~ccZW u zDyVcM7}}8#DR?#_nYe&K5|%]Mffl.X2͛y ط,+Yމޤj(Gȭc7=m 5Z\<]:^G{KLzkϛ,LKɲX a, E":Vo!gڤwި6([\mgJZ<4[Z0hq/Zwm128mi {ѐ,ȷ_Y5%XYw5lf#n7oL W0Pg^Ը7|N *{}9oxZcθϏ&ӱxMs10_\)+Lq*ϖd&*zd\l2Jxc7nQʼr +Z,:^#[*ZrY֘o-[Q}\c%AѼS=zYwJnHJ-@\*:ʆ9:j]i՗2\Ђ=hQ#xoo_qts?GC_srZuŔu=c53v=gs4z S9&(* opQuțe/|kY=8k7Yoڟ>st `_]f7`M$+Z ARY~M cկd&C\ZF~Ζ5 wmվ'׆`ؓEx/, |sy$j 2IM33|cyozꣾBԠ-į}_Sd'wL_14*z-bz S.yQ>ݘeY^oU7] T W(ƨF Q| nQ5zB z}~*|;͂# ȯػHix, MYvE1-jv{vzUgIJ|yIġ^{:;pt蝀uY ~0X\QߦC}4Y-fSfDk}vy_44҃VkB^Fߨ(T@j odY@M3>__{Cě|V޼7=W3WB'X3pʑ F{3|aåfo,˯!y ^qf9F}t c{|ao=ݼy,ox#ª‚0 \܇nio6G~Iϲy6:]sOCk u=aks"mWlZsei`n#{`?ݷƱ,[rji/uFkְ 49pyq{k'5=77߿?ݻwo{n͏y/B\ E1ԛ7㪆{6=]};|鎺P;ͽZ5oJشYllgAs]Ry .,7^:pݯM/_x4MpA}vz~0$hϋyt3?Yr[Z9>sF9jKO&GM7|@@G1xsUxq䃃1׊9yj|N[sپF.+u_3yga9kbi°!y%Yҳ㍬gQG}Gε{B{r3{xɝ_+ӟ*1ך5(sey%< ̵su)W9Gּ߶E=%q 妈̆~ޘӹĩUo1O_ aEu;+ɑB#% jś"LRi1-=:+7cq"[¤o9=|r6S`us+prv&_6oOSyoӈr{>kzܟ7`rc |;ztxk{=p=0oI؟ǯk!Af"z:}g^L7ޘمa=>tӇ5]ӣO>dž+"5nIۿ!}`.$w.r_3~󹌐3c8~gWhHHnĉjگ{[>{?xY}T?gsGF9֊ZT⵰SxѺT%OS=s?эp[[.SAsF_/R5~㊸=4Nע(5¡~q=#-O`gkup\gիWo ;M:F.B:>rӨ겺r|skG8ⳗFq-}S3#,eެiԳiS=Fx#SdY p/eu]cQ{==z2^cN=f|ϻL=zS^8%g xwOG9+_Y~V95遨Z!u?WlףCVQ[z'] p᷇qljli`{5e>Q5gɱ.#y_}΃g}'Q/2 D?>tZ:V9/#1Z}4#rPǹjZ|x9rh쭉Qgg Y05cQ~'ó"}TtQ-R.sD͡iZGcC9Gn?s֋w'im[3}G5G3zpcG5t1F=xL#z^^bv oae^Yk{=Qs5x=}yG5 yďjПjϣA&JCo_s1N꣞#^kgxV*y˫yWgyA=|յ-Gx'?µ|O$W׎#X4ksjN^O>K{/ZX1˱85cE5#E\r1~ّiEŐcu?oZhQz/5<{t-n Ӟ-b̳q.{p]ZgNucĉjŔyqp츪c7 cҨ9=/q;¡/~yE/Qs5֐c(v,[fQ޶C\9_Vy< GFy~]-tΜQު >~k#vH/|$[5xUy> <ՉFyY'QD rZiԜҌ 9 7V\5Z_eY|ςGڑ<=-bGV83*OSaz"4w \⒮[qxNaG4'/i]si}4o`bz4?k5-n?1|c&'G^]QgO)9rͳzKCq"j?1?&xC]_qz5k? _ӹpT-xY.0ק{v$Eq,7xg^N~'q󩻎;p;/;kgqpq k=F#u~?:@+IENDB`ic05 KARGBi#/ڄ-,* )'%$#! ۄՄτȄ  &&  #+38:;?@@?;:83+# #QRUUebadfegffb^\ZYYVTB.Q#/.--K_la`^[ZZY[SRQPLHD?-pq`GHIlMIJKKMG *Sg~IHHIIJPbKLLMMK .H[teJKKLdPMNNOF  2JJ`KLMMQ`NOPP@  7KLLmhMNOO^RPQ !OPUrQQRS^UTTUS)?PPRTUicRPSTTV]UVVU,@RR|սƹVV^XWXV/"BSTTQdcZ{[Y^YYW 3$BUUVSWi`\jZ^Z[X 6& CVWWUY\cc[f]^\X9) #EXXYVZ[d]e]`^Z;*$FZW\\]i^_``[<+&G[\\X]^^ah`aa\>+(H]Z__``ebbc] >+*J^__[abacfdd`?,,K``a\bccbfegfaA-.L^_ekqyeihghcB-0L\]| |acdefgfc!B.2M[\[\]]^^`__aabbdda$D.4NXXYY[Z[\[]]^^_``aa'D.7MUUWVWXWYYZZ[]]^_%>*3KRRSTUVWWXXYYZ^ 2"*HNOOPPQRRSSTUV^&!DJKKLLMMLNNOPPQQ\:?@ABBCCDE>#QRUVz{z~|zyvwvtfZQ\/.--c~zzywrnoL K  Q  X ^!d%i)j,kơ/"l񶛛Ƒ 3$m񶓞󺕙 6& n񷕖9) #o񸖖;*$p񸗗<+&q 񹘙>+(q񹙀>+*t񹁛ᘞ ?,,u񹀜A-.x򼙟ܡ B-0y!B.2{$D.4~'D.7%>*3~2"*y &!ufuvwxyxyg#QRUUYTSUVTWWVQKIHFFEC,Q旆/.--%7,:95310,)+((&"    ! %),TϪT/" H٦  3$+ 6& !9) #WY;*$Bo<+&Ig>+(mA>+* ?,,zGA-.,,9]BB-0Co@!B.2$D.4'D.7%>*32"*&!ic10GPNG  IHDR+sRGB@IDATxi$q&>~}LOLwOt8I8C\J$V2,AdIZ3JhF![V2RAV4jKXrA#,H9`{w_/+2"22+ueGw?"*+3Mʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 (ʀ2 10&R@$z^u^r5M**u;[TmTu'At!k>NrrmS wj (ʀ2 (ʀ2 (0A1A(cz}^se`UKd<8!'7O`96I2 (ʀ2 (ʀ2 Ih 3J^:u^Wh{,~ݡ XU Ao&U+٥Wꎉ)36ѥnʍ+MKellO̙=#޸WD Qhn*Ng ʢM,'wdU?;S7+=WdddÛbHvkYPe@Pd@#9} ߦ?ɾTy$0N\9(a(Q>.0J>)`ec${? RP8CuuHxDBФ勼ũ5F.|lOG z?yTFm) p\Yr.Mm:I Zq M%vh۽5 h}fm8@<64{dWd&4E'/6*ʀ2 ( sڗ"C=4^_2POGҁ%3=X1x/i{{lw=R}V 6.%m]^j%[+G_X/rV~vi,xRk-[EM}$')v qkWNd;$!`@gDǴ+UXưΦ:,uRHI.n=r&H>D-LȎmHv>7 EscڌKBP&} ZYOmWZK \XY_ؽOЕ8zDMЏڏjgne`8m6#QT[zj`=7w飓)1% &-a:nz^wqvgW[r`9iwV: ~D\.`/Ndڸ[[FHyX૛\. `꡾Cxq4@L8!'݋[C $9hya};my; $-1jx$zGr(<\de{jRws<tx#uM i(tmm2-g}Rq cy|>JM8sI tLGu[WbXm^_(=DZA/. *yG/ߠ~>|\rЪ2 dԺk j`3j}q~];'P4ٓcs8 ٢_S$~'ʠn!Ξ_d 1{GƼMv}\zm;2MYzK{g%w|E.0f$uCVy:d.[cfL1ÄoiXSNG\h&e5^G}.pLv?mK:8[wqԕ=>A|\B Crm@ZFȳזdx}d$E!/B""e߆4b3O)(I}|cQZ@ߧQ‡&eK ϶ޓj!򗹯mKZ~賓8l:I[lp=Gq8 m߹]_x}6C̼TiiaB`{G4u71*&r^QqBhYh$0H2ụo!ooɑ>v%W$m?FW,cW[J MXTR)o;~֎< j}5W;h'V߻@&yϰ1O΁ OWObb 2:BXqxRs"Oc%bێD[eG v[\@:R8ʁH/[;W5qr{sΦۋ s/ I-*E]aFJ?/#5b1/y=M5$O<>YONlrvS-%?Ɲ裋:;<$ϡomx{Lh'h%#b`׋%+♎dF3D/?S`'k󳑡kwV!#Xq!hc/<'>~}Oq*i.=Ƴe wdrMYV|pI xJ;xD~OM&%߱X۰;nlnuj7q6=o>;yKb.C T@B4ߦW;Æ V- |y}OF眥Wk'Em'6OH&0Rd\R[g9'cs&P-<<1:ʓ~V-RyLюsyVR))n<>f;6~Ӯ]9wT9v[u}H!VmߞǁV==M}k^?}R/x8|؟< pIqHivDܠ" X^77o2tK䝕fyY[_3㓻SK^7旬Qj`@5:?HcFwRmzzTa-cu($dԔ0=ei{= ңw"v!+}d]=өJ7A]j-_f\[GzbCcI_;#6Y# 6ט[Hk^2/xsLMNy3G7/̚.[+7˷ά?kri h QºĨ Xyq}YF@e0)G|ಟ>ۖ=8<<-eϾ&im/}Бfqi,\r\;}ϥ/i @~`3 01гSf&sNRX71|g/mEˋl r\^"}!"OG̳)s #_&>X^ț<9wǂv29^|#sߝ#)+6pd)d9U:%>k^v*f\~1sVK<9b&X&cwI[𓈙:;'v\H;aߪ񇆰N/`k^8[{_X2t{Usses53}\ y7 ʑhY3P֏3-=a`c` Mʀ20 FĂloKE+Kb ^\Kj ՕT^|ca닸$uQž`:KlRewEՕMikNBBcL2"xeډI >K[aK^4W_6G7?{`Zee((3O td~cAL}Re@P`A~Eil]F,Aqjb욢_h#L W_5;fiA1؄*.K.٣vy83*療~^z<ʌ8OLC2 (ʀ2 (52YodkmVY{ט}pf_=r 9A#2舌U9` C'6+2 (ʀ2 &=~Y^c5cfzɘuc' C ޺g} $Ika@(=FM8;1GQg<:e@Pe@P0`[u{+nGNm7}\ٙ+vo//߷[/ hR1%u1PnHСCC9s9|_ (lN;D*e|lmmMzJ$c{;ޕ&+o (a|A`\t5;wb֏1E:W5~(ʀ2 (3@뷯#.fa꠹A/^ٰs㫞=YU"V1y^^ |4?մEpN=աh_$"%4\iWcHmqN^@hl촂'!ml,yvmi=ClǴ;5cius9;kp$mu ڢ8obڧ (ʀ2 ( ,;dx~7;fcmӼ}9+OO* [JH3h/'& d~g<Ӗd1(r7 [DGbA?Ŷt ʸursi/UgōS`ewHL_pNyX܉\vHfe'!Hd ̝5?6,@B| xP~lQǦیJ_ou 2 2gLI-[a\_"ڥ (ʀ20psYa3s69afg͡{յ#w.ҷG5*Q%Qj{^GG>я~LMMc!ŋf#Xra~.Y1`aY)~Nl?2)v\gEu3UO2)wCN88j HBC;etJ= ە\pUn䊛{}3~5v)U7dquѳ'l#~5 HyWӬ?[`Kk;m~c- nA"Mʀ2P=xCĀۇ洹Us]s3c*2W I?s=G~GL&J'Z=?1^7N^km.F^%@Õvç>d|hc;Ot-#r60B+|Aksu]ʳ-)'/ܱpCYY9skX/P2nr*i,@*[2TzXѨбi" jmhXEWn+w\+^%GdB!25?)\6!Y;?t{=v0 pT^Pnus%7Szm\}!s`ptϢY^w9?֫5e @9=g߭c'N0 oN0vǸky-a"W}zX nݵm\>] >M|vv;K9YK=ϸl8u2#|:6㳃alGֹgRuqݺWWƭF=i8ρ+7JT 011iO̭ot?d4Wb h Vͱcx@TN1Z{Qc},usynwuݕG i\}8xRءGֆH]BXc]8 !Yux Pg Cvn@sm`1ց6a{|tB|3f13B_oX:f@i6lhÇZeҬeRrs4ȼ=yLe|˾C[d=Zs>s4Ⱦcycߑr2Wr_X&|| B9ʲ]k+50¸!l8O._8籰me}@}n]ʺ21|u/+C8eΞyz~ʿUWR=f,KfƁGO݋G^ͥJ (P3*Ay8GPr'S#)7?ex+{,:o Okyʷ<oƽ⡈ He A]SY'āڐKr&'6|s߇ڳTu<s{gooY-4 4}b?\\-?_է2)jX_ȇqH2vMGZ.詎  c|3ȾAO}+7?E;RV.woyOsдq^0WA{2wܾ=?n4'7݈>?N*ޱO|,Gy_jrídd0Sp!P{LŖa؆mL:rs*"eƛ~ycxe_kwx}lS)=oaaklb=tmsнfwm{o]-6 4q{?q{o_&/2_@cҋ<)O9ՎQSju`Cڑ2\fY N,醮JCvX/c__mtB㌵2{S{~?KO;Bs@Yz:?=[k17c' ܅e0;䱣tD+cJ02aw=xyꩧr/`AΧk9"RWɲ1I}.KY~ߐ˓e=e.}>nc_ /˨ ʜ,RG#ˌŹq1z 6cH;Rː2n8gYw۹~-B>I͡ԗز,eP @7OFbc 81}z.v\Ɗc'ާܥ\bh]Pyg{h֯sUc{v޹`-=0sӏq\ojI hIUgi=z*2OBRNY6;j|-_ KSRR%Oז#}<2:Ex?vX7l8w}"_Fue$|bm]o~E~H?ԇ-)9yQ66nJ?Ȱ @ݧ/ߣ>6seb]\ԡ}ho! _r qؿP?m4Ӈ<}鳖g1oH9 CwZ\4귤΀>JX̙3ݕ~zy~_[u0>y~-OG V/f+CvWǭKY.Ȱ,ra=V}y<_lce_\D1a_Gc'~7؜C~cp $leP!Ys l8 xlߣK|81^>qXvO|oy>@쯣$k_ثڧoQ`ژuXcb/s_Եm A"b#GD i9ꔱӏNQR]msuܺ+_z>|mϼ~)P_݇m9TT-OaSNͲz!~g ɐ7SHGcAx atW9i zl㓋+}> {7S+0}ШE&Zeι֕S ']z%H@fZ+4|y"ZۧkKY.ߗ|X6<&+R].Be#!yI":l;jg"9NB>~严/e:,q˖ɓ?i!̐C!1·([SSwaDB}𑃝_m @-of*b5)0VE40 xǰ')[,GTJbK!P;tc}[,4lKB")[!].e"òȋK][ Y:U>7 >ϪcS2 nf߾z>YLA\{5N4P'#=??+&Nʜ@OI{)[gq>WT>O7/_sl}y?],˹CUcVл\{s^5^]]-RF<~Io~%í إOaINոjfx(50Xh7>Iәx@*sKY.Bo9SeSb!LgRC2Mlj?ƫ:0u`\V#Peu#V$e?|o}Ş]\@\ߡ ؟^G;[ h@7ѹEaʩ's1X Z'/ \b@_Re XsׇA[͘+de9N p>LF~xe_ ~as54qa<&Ɖ<_!:y\,w1c}UcVq4 >*4jQT&3cE=O.nb%cq;z@ f*@|A}PclQ+M~bۙ6Vh ]@ؕ! ٦-8L \ʢ 2pc=;ckmBB}m7sqP?0]WNrHe8 c夌OG~IY*:K]{\d90_~9E'@HaVY5|nf|T.}mk|=W-l1fNh`翉4YJo+r#k|".By팗'W*LIqU<ÜeӅf!pxmf|K(/@Qh$!n@:I]C퐓u[iy22!b< >SIWHRuq0u!|qe0"4RXnb[܎kǕaYNXc<7X./K}hAHN(nLyx\"UQwL~̘uz?2|N}kBMҋ٨U یx}]$YmU|UY5^>ցդ2\B'} yoT+&S  Acv_a}ȣq|@OLP%d?'\La;1 Br,ˮ dtcpv8G܈Ʌ%1['gmvp|uuO Pײ߇k8KrT+7=5mN_?>ֱ?̅"y b<>ӗ R_sﶹu >^}h[9םz%* [Mq4g{?3s:䩪T W M6&X:n_.AWSe\ Tɥ,e($WMG`^`"'Cl>Oxp?r?:o?vEkWJ{[;I $92'R` MQL=䪞t1UO;u&䪞t1U [p.1|m?vo p0MFulh@Η hϋ&2K/@B>HLr՘UaE{th\O;>E{mϜ8k٥Ma+Xj^CVú `(k`f[^usMXIR)M]F \6G?c\3o M >q^(|g().#& ϙYsG̫od 5ǧZKM˸@2g@q~7y~<I? \#)}Ja2^H.%ˌ)ʔَa|X6YwМƃe8E}(>l:yu3O> M\WgxuXVe|lTgxuXc'4T`1+纓c,X[fS즀zS2\N+s=]J)2!P{X1!{eC)Մ0CwmyxESi-K_`zgq #|"C0X<2IĄԓ}n*6S1z r|+C.G8yr~I_Jr0#ϪL7X&5˘[9eP7n3s3⤍Fs+>g~g~&37$4׈G*LؗǍhS~l0;c ~|ٮ6W伻F''us1Sg!ٞCe{ Qb1<0!<<3dB?RAqeAOESp pڹyHۑsYr^?I=an nѼj駯h[x?H s?@6L޸!%S2×K~⸺n܅>p6m|&0`l`堚"#La+Ob, k>K)}/s[?rbLoj̪0>qh?F">׭r!$ml HL̴ҳtQe40z_-OO̩S*gp@՘UaMlup]hMqTs^Q^y‹6`c46Z@p8֪ yւ | _0Tò }N0c\Y&p8[e[t2S.%*5GʔŔ\5>!|P3&!]}A LO=D/I9u6E­K!|T0p ?qpeCÒRO?N ~= aq{՘UyɫtgFz~晪&z~k|r9L㎍sUÁy⁓~ſ-cp;\wHj50z_-wwͳ>k佀0-,Mr*'ןb/Egǧ6 :3F^Mڥ,(c}.NjANH8!ly!|!?})mUf0c\Si2M >qvJU=U1u`>UN5zr;_[bVezʣ1Bπ9RD|M/`Gcbȸ!Rq1X'UN2bH=Y\dbr>g{K.quhueβhe)*3v?ʲ"A;^\SdʱXz}8 Mq#rlzw#Vί,ǹOYfsnϵH] H6F\77?A/k0r)Uy/ΧO#/ۗwof;}>ەuݵ2YéÄmy5a|:_!yE;tb?цZ.f9^1ƃMlup9d.41\7<$nSd!kt+E[bh_ tB6ׯ_xAҥK泟'?kU|M >;/.1s[e \vsWǽm ʣ q]lCu|n 4X@AIB:4$CXُ>1;RLJ)˔Ƭcjf|d.O=t\{az6?۴ǣ=k%̀h<`o^u;;y{;6_*:̡P \6GL@lup.QK`cnCA1A?˸DBcq8pAYX{Obp9$Pc}1_lviC`d{,1C2EګƃAց9*v 娎[դQ=t?@i#/YϪaA+]՛>iJ` t%Ȩ1p}gΟ?onܸm~臬?TAec2b!J㓊bxn,k돋vb,,饴5 >q+`4ǐ({%'||,)䂙]0w$L/mis56CjM ~ %g@~^- … G5O6_׃PA__7=y{ۑ/ Vn'_{ʇ0c2N? 2.j ~VcQ S\)eq}};>iv;FVđqO`.52(=2pEsd?w+Sc~W~y{VEk~VWy)cpe:lpIwK ta !B)YmÂ<˸.6|2s]+'C~L^>y)XlqCc~>2ɇYGTY5|mf|K|7WnE|}W`6YwmKLM>p8,q!J; UQ1H=.l<,y&ɜ\]ie^\T>񚂩;2';rV1OHƚRv64liÀ{k0x  '||_5p_6??ifffTV]5of|KwU \6G= vQ~[ʅnԠS2;=C:˾P r.˓RO>`qeY31Csb1/cN A@IDATnL?};\Cf=̻ 𢝉l/m@@,m7۲* unC n'BT̀F{K~uun{ggg`kGI_ͫj>O'x"*}7>y:#ܮϪL7X&5&٨Ϫ̪ǍE[d9p}n2:n auq|rݑ} }~sBmatc>~Or0e8K3&˻unG:v߁nۋw߶YV^lAtmM͔(3}_V^ys355exw K̯ꯚ~9~xh hf|UY5^>ցդ&p1UY5^>ց\V%̓wc*ϦO',&atBJ>ӓ}>c:|5cȜ$l-wʼz;a.P.ц6#`) $"Yp_?X#=zԠ^3' %}4x:u|6O=ٷo_FU~f:K6*QkMVgxuXVe|lTgxuXfƍq?cOmj<#19PqG̫)`mǮB N[[֥#s$SZ09gСCVĉq~ofA5m@`qqTagցդ&p1UY5^>ց9 .бj "E-F=zWV4%0LD~T54ҏ y/~G… fee>8PHfaW*QTN6Ko|X;ݺ3Y}|NLEVǽy/'v81&n o9t|4; m}G]7c MON9c@mlLw:I>Aw*?9D:'&19A60F`{j3S\ɍ3s ҝp2)|G}Sl7 #u{Ƭ6 >^.cCNv(EYLَQn7hJ`@y%0PY\ܼynwY<>Ϝ9c|w۷q5G:Rokr\'kV&a{{gz#MeA ݾ>]xI|VM־,b)8b2`o7ulYu|bbҮ kHl#xܛEM)`88Yk1)`$lHQΖ?t#֓h&Iwb5^r m) D/$9{ eu_ڦi쭋>ySg&ƞه5 >}yq3Io&b?a+NnsU|z40OӐ=3;_~ݼ,RR~;ks9 > |`/:zh ' :9^te2no_Ωz7 Tz"q'=({$֧S*'J oqQm`< Xq~`OlApi} cq!aaзCAqM-z\ /m0ԨNw:١2'"5Y4Cvc( xUc,6xL‚MA*1~u9]/>5A?2}{S\:W A/҅%'%uˎUe@臁wC{!ly^-0ۃ+@$-6@"I/ſ˭^09`i`&ese5H ~g\%n_tad%g_. ,췀k (~.`1Plh:6۷Y Y=ǁV0b;f2 4 h`;t^4j}G#W]{1[oe<2Pp3Ejre݀[D3йD?%̕VCjdZPhb_A$}?6QA 'Ϙw1} iT1W9냯~.Dݵ;B?2m'-*o!H@w}>ZJ|5Ғ9~}J]<C>))2'm\3+#b0]W x!a9p^ҡ*/2}t9-;;?tv{c|k]m_6r3g<, `H[TOb獜d">Juyʵm筁7|*oyiq>(WuFjg5 ydj8}|ЩN-:]_o sOʀJHz^TG4&Kq݁l u<pnѦċ c@!6nǢ쥻Pd<.ud1XG/cH.se,49A2K]~A6!6ІjbA,z]H/ss#8R'@q.}vB;wDzgn{&Kce] ,9@q"96_kwk l{)f׮N%CCqMltyI2g$Bj=mCEv7{χ)%[:{A r !`txw:|䥘\|\p"3hG٠1dhfV@@:6I@__ZV| Ad>k\~G*<>7uWO>~n}\'my2n20&^srC]},\9Bm,q;r=cC ҃>h¬_1s6_1SVj-hk*ga+<HN'\l֧*zp"M=ܕs8\G[h-d|6!6Gz:)؂r/=rYnSGW t:zB+>w$?ݦLU˜P*uf >ufv򾳵M13'YLq\$ };>jqoX9eg4.ꮟM:ɶy*&q誀iD.k926H}3+Ah2@  ~][nuO8r9|7yu&̹Y|2Dz]9vkcO~nr!:[ss]CA@Km3IAidZ/<m:sV ӑe3Q=Zfg>Y9qmWSb:^).2HQ,N;HӘ^H 릍-kXψ"R϶k]{Zzh=w2yF@6x|nnw7Bhly%jBU&6$PI†hⶃErFcm>]9VF綮.83a.vID񰠓lA7r<(sPɉ-٠c3ֽ_w>_2b<j%zݫl%ԫ q/vnvCmqGMGW]t%$v&l|6;f byfcͼ''󕬦(cb-6Cy} }쥗ϟOpڻ6|p>8E І:'.,,yL.X1 w,>|3Г/6e},e9>vsӃ+ y^su~q@GFPAw Aąd@-HXMxo?kQP;7fy}D|odD}[cmo4֮y]{$[ wCٔyt]n9e5.$!@4gDˮ}k:*$.Fs/OBEլԫ.ZhY}Kk{R8qAE)@ͭw勗:NxO'7f~ߠUs+拏~|ϛgY͕f@`&F'}T6z|홙hEk < E/~Au@tbY㺋~X8x<ׁ6YG+j펗XVʳ,!gyCm%.1\Y2\vs RNvqU N[ IVɣ=%+;%K+Zj``C6f$}x\L *J}ϓ27`)n <=`cSTzLCKK3f}u\>yW믿j0X'嫴Gy_M/~GĀsXt,w-h_nqUe/n;'`l r>EC&pre>Թ l)u^x>O}hcl΁v6 9'Y"9P> 96g_vo"V{-r}YImwƙٵ-9,{IGpغ|/rso y/Il) vfq)ZNLv/m^?\,G+g|sjJ%%g I&/>|c~pIm5϶ϊoC~J7yhψieY qZ,ˇa`ȶonY-8Iۙ v.:z:gͱGk̋/d7:@ WLPE fLxS0W_WV@(@AI>ѐ莡v.ްFkn#]oXm.mɲk+E/Re][n\eŹ`Fxa 9f|ϣ{?AxhǓ|мm3qy}ĮA]Gxmxll5#t,t YK>ݬ6'9A ~ɬ>Ȣ[RSi#fGwmʂ[| OpG}ϸɥWiƽҽ)# Lg'ù;fmՏ3><bCR!>B߃mʅ<БB~2rAYM}<͜rg<;]?>.YLMΘIZOcuM-_Ӟ3,ܾ@WГ5m^sT: oDaӅAP]W,P}^/޲-vzhq=dRA&O 9cpa]:%\U215fN>z̜}y{54S3TUka[^M!tI W3$1ᵷ3,y/'BD;t,Ϙۇq䋵U贋nLH=>\հlOKM> $946g'Ǯ~v|vI׫ݑc*'}< [;#󙗺ȡ _{St"ElS7I1i Ɲ/Yu 4n;,A|CRϑhNvY}%aSo \©zESsffrs7//}w[+g8+??@:"˾dQre,ꋋua\nws MU`:<&LL7,G6?wѣuع|e}z}_=,9Kz,@xc\":n3􅓊g7TLGRZen*f,ch1:n pM멘> '⌭' }] Hktǰv&I&e6¼q Î.cg2~驘l!3vx?&=KSb>sL@z숴 )<`8wC|0sA`|||4I\w2:ڸ[Ͽ`Ͽf9CnC1@zb󩎰F4$\дK+ _o5c~9',;$! u]}_B\(;wӝvO_CT803;yN6P3Wجnb9R] ZR|Nn=sTg2f"-ǓY3w7hTjyF4\zrh A ~Ž}# su39=n;mk}߳niO;湷Ϙ+Zmy@N{ Яx!ssuκ\$u/>nS1Ƴ^Qݣ'WcxAMi'~>[bbn6AVsovۜouhtbF/ZOU`f |G 8p9;t{p9@nr^5 .=c] 5;=ng/蟞^O tSfvWq?SsRpjڼy[Dx`3 |cW0#X1 Z~$ kf@Ynu_!c>p6+_m/3f{QD/'?y`/w;#1dtA+ϘK-ȷvӎ:UF,'#:;mw4K`bS xjA\??=`p̒eՕGeL+,ksa|^cahI:y¢h|o耝JÇStwOEinQޞ<{Ҿ-E?;X 2x?߃ *ƝkP+_IV_Z:򀥭MyZB Tܦs-cm'pD '9f^ 3iZ5,kGJkA4 4q1E,xX\\[ XJBԫ4䍝` gί n_E3b}ϭ2WHV<~Nv(9FC6]@mleG8=@77^}ly9}U۩F ܔ=7\YҒYXX-Ψ9Zڇ Zcϋ~7ߡoEz^D3{/+5!] Pwz=tLÞ7D/!NpOqBz9 DSJZ,ڦPh3z/iJ(k0jdҞcᶹN]ρ-ZOC -s2 /\1ot-kiT(z\ /<48Z"՟|T_9nØ z>.s?[>Ir2ٍ 6 D.>X9Cص0?jڟABᏞ} pTVS|CPW(aadeGh36mP^ -LDid l5p{0;wc77 vk]O4* u̍ M\2> U`K1-Cew}n9u]]ס In ශ 8GR:Rt16|*QFs_?1jwiR3cfP!. OX SvPuBWG"kο{%smsw]4* -2qkP.꺦/Tc<2Px.xm 2n {@ u)'s?S+o hoxk#:6[޾^&}`?ô[=:8sr_{Duh(ՑH_Z`eSw:|6㻲-% S w cWʚ: 4F8١.m28 'LK W\6!T {(BN(l*:Lɝ/ytG4A3b_/~\}}Иyk53Ϳ^K€FeL<}*TUr-Z4V5qʵTS|oU!JDO<˴D'9IJ_{ט2޺n5xXVy9OTT1Pds^rpyIWF{p$U{h80'cɊ/Ȕp>#f8H'Nw{ ?svC:y{Ւ?X7{e(xњ LbWbz_ @a;gqtSp+G϶vNWc^u'0BV<q<N04а kxnUH0/NoNC:m[q0A֗ʴ}Z(\-3E # Qnx4c6*"";.yyHpmw+@9(t4F8=$nJw֮7_57_t )^0`yl+ խO_[Бdé + ݅@ pn)[~hq:{n"YZ1BcAM# sx% r챿P&spMc=KYĥ4sV:!o_PmQSq^-e46'ڽL۴D|~$Wˡi `/bS@З<^1EByrg_/ZVzJ+f\uN s~&]B<7̅~ p]GI 4DA!).Xy(_<9%{Эs{ ߦwKOet%@ڄ>2ȳd1DZ-PS¹OG7W@zJN[xbɋ=H%яѭy'UB]SNǠ^nuJƻ6 -b.yz6T P ^ &P BEbkt)= HstG@cqJ`9/ʪ2/*/^2fHz{ˁXb9l0#$Q(<5> sC%Ųy@Bj540j3>u~E>t师yyElyeIN/?}NksH1eMT%QC ]&{ l`1R J>*J[Dl  JAU>> )I7S |u伷wkL%(`UK@J  ڌ2o@|nYb2E|U_y=1&Wez<@;{/S-O=WE}rL6iZ=RyOVja`yR6Ă>E/:)pǷ/X%Y[nlV@Hq V ŝ[})uȸrSqG{/;{@ 'A8/Ưnz{ˏy^o- cBL*92TpI/^qa^cspmܦl=6~W?w/Wu;@:u3%&4*% T4FpIi`SGS!T^Цʳu7w凹N}߄>z_q]6}#?j.߫5'⽉;ap`9/i9/ j}0sPoӣ?P YӋ>+ȹms_\r>#d8H'Nw{F$ȼ R!=ah콇q.LimfIV$[k;qN_Dn2pr;8mUX׭.\YhA 03/ ,v,0,ap_DŽ:#ǝ<=$Wk\m>4ccw_k>J$D ?|)ݫ@Ńj91ɍ%4~/ԬI?x/=$u id9e|?$' wL3&koϙ8L4U; 8#RV@T?tJ)4 FQs֝ =O{}qrKC0\uҀDDDa*5P' ڔTTwtfr f5Oe$?AG-1_6jvSȚģަ%?xԱ -5 堥߿xŽK$Db&ֈ|smFC}ZJΛ`lk.Ĕ_9ih]NfС:?G) L&XFd]WCt-`ñ1]eNQ"#}Dxg%GB0{E8y 0wϕKHsE{|oJ@ȷo6٘-xiC1H.;s-ޅMx&yk}gLOӲ_=1\_kO#_a{}"HLdUh#|zsqkzNa(ݣs&չ\rW ;0: \jϯmNx:P]5y1#Mq`96-5Oi_*ҟzB.%>CicAChE{ iih!湻lχ ^p t'9r .LH+  @&E4:h,#?Fg|є\6I;&[Ѧ_cH_ί f)2zN]/ݣs\ѭb" U_:.udBScI<\l.[6^J[6zsw2v0ѧM4Lc/{iN}hy qmM1̱b| A[e ъi\4ro*}}ͬ+Sc"&Dn=0.:0 Y5v8s<`>1SmbP W 1JVo} < sFdx??o&Ccqx/  || 2M2KE+0 +} BPUӁ|@xpϒ")c9r .L Llq! ѐUrtFٮױ< D$?;> x(w$yޫÇP _x2RSMaSl߼g L%KzICګ~V OimhKr`?2RrWP}SaΏ$&"ZݜJ aW ]uw v <şB>%pg˯O56~I_*k )_8Og$@)bE@Q'La@aṁԒi%@d(]s)kDʈ6a$ HvDE7dW/ȁ`Hc,up4ձ>)Yz݋qN2@zG*A‚i1`w~R;oϾ!^w{'9pޛC0wgt@?ZИ^PX&qN$КP(G$cqNw-U+wL/m?ݸ}^X* 3O =e+<AV.%-!1Ix a @7wI:{em0wq$c$$dlƓ:Q]}@rA'>ߥMe_Mf&MuބIL&FƇ/;j K_\J&_kC qf:J#h' R x61FN&O?3l9V+{r|@'B)үSܮS+St/3LB&dp"I諸-$GT;F\?Mߡ#bwdnьst8]Ř|gU6е#6嚖G@Cъ-+(>b+* P٦Aոtq.@nI #$i+$&`} ۖu`˽[xlr l:.ن暼$kԛdMuҮ_d~~p;u|4Ms)fNr[r7 :+a 1[\N`bVA kjw"`R Q4pMMCg%djR;?N I`b8 k!`A1} Ҹ['X"`oB, @IDAT㲮)zF\=zmd3ĜUd·ȰN2Ǯ _%hv߾4J0|=ϓgNaa%L_[ųa!R7^hHlI=*&T|M# gb*hޥ {ȖWc*'m%/%$ cxrٚUϨ1ڢDbfog||)[JcŸg1mN u90Mo/{GQ7 D[MþNM(|^wD'235]GA6(q2yvRG9:){NLgw>uSJ`"HjLak&¢d|D+bp{O`*@c@mr6>C&-W;ho|1Nwϟ[`j__x.|zT*{$Nъ-+$4'ɫIROh8`/^ VEI $H LDm`LU'Y:PVA:2 %jV?6vSX{hw?ё{4'a '.ү)~ }KrQ!0bL0M1oQYyKkjA*9֤ip uZ ˦^g@ 3Zq 23Y4'>o{2]vv |Uw-o&64\6`A*U`_:zT W>DLq EjTg=VBuMY'YV\v&Cc<ꁅ?{tNJͫZ*lub' ՕQG+7Qd:ɯ m~=Ʀ@wǚ-S^)-n_\cj8XjauF]z@XUU)q |@2wٰ>sFFRrBP*; #/_{B,4Ͻ1 tH҇EO)9]yڦVR}w OvkG˴ɧ-"WJ[lHhu* WĚĢPjռ&@;Am3&|vLMi7ْ|ǠTJʿBGsI-{?h{.G>9W$n49

    ܧA-.MˈM8?L'\k9 D %}S$ Jw#V RڇP,>$]Ϟ˺r}\K~H=soPib.M體 ha+>{4aOp6CҮ֖c3:.:'|.8ye'o<75Pp4P= |BF5|)  $YF @pWpAԉMoB4DUGI{Bara7u`Ḅt+ɐAl 7}u J'ϟs#=V\=@ z8r_ѫ ڽhC{`\}A@ept%'ߧ>|$mܯ_`9v$unV?n:2BI:DWH,9oMZ)l9ƹ+M`sN1ښ~Z.xJgC:Iz&Y'!붚7tul 7m Ǜ5|olv-I٥O9«_5~`Q_ Zq(gvhsq,tW90\< E% ȏ j#ի` j9TA*sƽu?u`i̦brύhQ%7pJ9 Q`mcMGw:کϟRo@st6ABX IH.j8C>M>_&e}Sd"7]h^TlBFUUE!,AXSs~-:Plq \5ըQd㣭PW1F&DMK/SQB^݉?ѦǦ@-vOjУAJ'*.K+âR 3]T`rWD@,@actLAWi5-n_<`cS.?.W*uԞuKJ+cқn\x !hk ]n;;YtR}Hyu^0&>զ_H J'n`@`WvVᘤ9ytH;=! |bG<5EPͧ%TA#LTUcGN "['RX:P`& סޤ:~j1>T'e./>hDP 1񳧛Ot\5md.y>:EMz4uIPzWt"ON aP𾘀4hNG| {.`vʓ>Mldj8%UV}3h @α:c>o˅Y \lMvm5]]O:@ug,Oղe!i-쏟lm9sjI\WtVt7V񓓃+t*ztӜc瑄r{"A&&$Ow#tv J.یtLWip^ϡcOP! lm:,eC6DwDfNLt}Oܘdw?l'mx-H vi3Dl Vq hgځ]ܖlʱF#AU3*{i>,XxiΟt,Ez]]I`/*3h,"<~q.P~ǘk:Vn2|Ok0<2%01kL Z-솑%TCn>@=FA˜eH/uRKS6-Բv7.ox01&01=;t\xO$dwqx? .9 }xp!Z1ܷR%F;Sa Nwڇ:Җr|4SR]׬61 ,r;U'DZ'pBE`<<Ճ_iBH9SI>:\NB%kA"x+4O:%=;OxX@~g$3Q=tL dN ,>+$$gCpt-X@җn,)5Y~%UV}3Y ";=l['6۵ Lfe5fDFh5Gy͕7]ū}e($0Sgh^?6/|^9^JVtv/MAgWfUp")g0w 7B6`kkG*G k@0}*B0i<.ڌtLWbEV A4y̲:icyyS7l}㯌W6͝\7iڮ y6ڬв zwP")c񉹗hg1#uPWphI o4 D TjT կvF5,1o m8&'hmji>p0p[6M<xb6+. .x8&ivNn"0::1ziL0zG6+~QFY:5D0cO:.$V ma\zUe$p_MjxϞcNciد#I9gE2lX>Zpq% U~ KIG+Ug§kD]ȃ"+X8OjpKl)⪫nWv;F6=h6׻x҆tXC=ռODh?Of|¸xyc9>[P=Ͻ4q+0J qAO;T$1&%\Fd "5be0+IYBSaֻ~5{5:NU O|:_=K`˨Q+i>߰8GܽUB7!ӯJO9:Np %Uv ?7̀5(G\ KJgwpXa)&>=ys[t ][Yi g UN}&lWۢTb\ 1-UO9m:6|loIouPLbSwǙ6V7>htA1`!vrfc)0_^lT_Ϥa_,RWc,8xw Hڱ, s" @[[ ĄYry:&RR= #6%O]cxZVuƲ~*e>+o~Dc&||2D|E.Q L՘'U !䓕N%*!IH8yї [i3+h3\i )$-cԅ{t|D@:Ho K~3 kQN׬0)Ux p4 ۠C+W !") u֑b *ERXGmM@KOd,}2ƨx@]@5 l~%`J=MnN /6 /# NWrM{DN 4pE:$u=M<ß1CŃVhhRNYy3bwEJ͑myQzgZ]KC<xO#^0e5%dv*ݡsYm^I֗xkS rcA1`4Ln]:^Du>ۂRB/f豻W. L]Oh 051)Vhż #_RGYOe^}T0}Vk?Wm{|Rv+0@IW|[u}ep^a+7-WԱ׳"p8D4Vm-*, G&k1:)@#ANKb2tmr7hE7@O7ͫ4dM|,`27f)5E8y 0wϑ`pyd&F#4OXz:mMG1 3%TY:Юs9t{dA9W'öZ^O7mB3ـjߤ[Z)V_ RGYoPƝTQ},g_pRi./v?zi(ػ6(>vC 1A**2஛֭}7sM 0w׀5N$8YJśt,to"!O4XP|PeT`^] I /"=ا??u\u.l4&&6Y֍h_R|L|{A/u6V=Zǚ3;v><qINw(rB `U ܵ> L'CK~4|2ޱW!:]hlC8w.5ʒ8[(zjjLr1u:msB Kg; ]yƄAI} !wDMJKu桨>'L_L &lHm_FȓV&$!`arX^.<r$x;#J~%D"iq, ~VR= .?<5 hcxijs~ɲ2v7ń&Ⱥbx_>nDM\4췴!LRcl,W$Kd1T .L LlqhۗDlv .^nN{֮ 4 0 hN;A5!yL}`=9>:0\# tjoV,7@)/& Q}DW27'=$αk#_=8&]r'6TA#LTUcGlhI]Ϫh=FJtvI y1ۜ]&qe;j*$,5$q|e#xt.kP#Sѓw¥ n3MRN@Q?œc\Ń?L'/wpv8,<6j{檡2W{.T( @#b*h" 1+?rͽLvFwœ36L6hnML&0YW$T7R{.ou)r0mmI{гjCLJ,l&t_ *Oq]:bǴ);Rˁ"4qX@Bp4TwrG 5IG %)Xja6'[5RnN*ҝ%TY:eC% D0d:PrA0xe̾Ж| Kjge`y{`yN[c~x@[fJKb_en4ZV䈧r@X4 4X0yCQDnFarI;SaNzX!RAHl.$tAHmSNl_]QMLϳ M:[$2zCݑo%*?.om9 @[_ln - x2PV An@nR}$0]|## 4X0ґ ;IDX [u숭-W붐k<1iEu(䶡T'яF!m2?)iǗgA:* G@))n"ilnNE?T6-'\GvAe-3J+adRV&0n1 ,ir@0i\PzWg`cRWL\ uܾY; /\g䴌 PRqɇ(b1gyנtEڴ}ONiO2mxN7|Z~%Z١^N)^<鰫4L$0a2:#,X6n@u-gZdY g@p* I ,M`2+W dNY\ &j/،<zT~tw%&2?K~H;<jv n;dr΁d o_'*STFNNqTN 6WGnu韦b-xÊ:^Hije8e,\m.rëL:_<ظOQί|5|a?F4d 6h`(Җ6 @* c,}(~U'>ϲ(=u"3) ʿIƖUn#A'3ͭNo=VC}{VYyY\?]2M5y▶my%R뮘pӗtEwMKx\;pH;_yl&wy@L [ޔS02&F}`L)whbC:m .wqU)p]OlbKDKWW&"Xz(b>5;ο $Z? xHwWMq_Iߞl7fwu>  Ewy@79E#3rZy@0'MBm;eqTiP$?m2Zf)˹TijrpԖD@xe۔e4H&;:ȃc:[!1K&Ζ!k,P?C'v=^EEzݱΔ9^\3imX>D>xdƓ֤f`B>Rԕ|"O80Uhm2nv]oVh}f00㛤sY5ANW[M."΁JHp4DeW^ꪡ{Tm=iW%$ Oq8F JB`M^U|L% $CYUv#ph5A=vuw}yeD/eNQgɲN˄ʙ|0ʥ毬GULx2ɣSpș6|_3l_6?6v`Ru@**ld&i^# 5iA.5g? =@|3^\4^i잚@!{j+qn놦,<.:)c~wIT')o}ϘQjsB3K1-?j|=CxBwj7Y> `0H`X\i. C `v,%T©75,G|m=G_`"e Lt8lC݉i}`Em=8eDju̺\'uf_@fI:w&:3HΒwS.grq'-| ]M|&L'vӼ$?4&L %UPŮ%@@@΀ xr_~23lG$^aePܦ<`atNK( [NWdYᎩcY-oc}n:ޱ1Muc}0Kj@,nenN]^gmiK, e<ZKPXB*o4 DC?lO,Zz>x Ez&?_ڤOX1 S~7,Q'6ܹifpd8MSSg2ˆdLh?:cldMu/G}~p;Զ^'$s ;LaQxvՎe?`{7/ 8mHS6O8mC$yS r&#*ҕ39G~!* `~m怽fr_yq11kt`HZ W>o>2+c wIGZU.:Vu쒑2\EM/6rYHn.OM׃Mg}:,G_I@gԊ@@@΀kVUz :yFЉ:!,At+)q>OU.uܾAe󵌩Sgli.Ƅrcc aQJ:ȫ D>/yÃcӼM^ @Gi˲FDn`"S^p'5oFMPB*X4 D N}@KN˘$Cba2$6ɜvk2 21lsʆ"}d=m˩l^G7D}јa,ݸ Z<|WvtJ3zcqW␯ޠ69Oez&=Թpp|Lٞ7Օ뒮ҺK "i Ei/mʼn~b='%;@IDATm|'g?U,x j*K>u.ЗmfMi?aSMfNĽ{d9V'Ǹ@ɖONYOיʺ퍡cwc{)ԁlj|]ɮ,Y9 &U/yv=/h'Wh&:ư64 Ti~Q{7&iQPc6>*/Z^r(yB xNl>VL5˅+ B.u EE;]9rReYǺlSo>5P}(ta}'$>4oIb* K\iQ&d5#x@{ƚ8#l[ī>O.";0U% @,"mRj6砋43~*W=rE\lY`]6酴b璅:m/.5Ǖ7|k7SMpރ o('AXڞLM1'N8SWlGGS'FU}`@"elvlSZӷ U|hf|Pܔ-О^4\ S'{?8/J^_ iLA0.KҘZ Z #Kt*#*'tj/e,DY*m5MC@c:d$7WR'6קccچV9Osz}=rr& /INj?`c4 CJ Lxݿy2c9 pS\iStn(Ȃ݇:Y`U jW, lh׹T'?\UקXAl&؜];1u2wSs`_=>N 񨥅0 N֣  יZr#5cɷ}7̣h 08&Sai/u򁦹6zWX o, `+hEҎeTΛ lm* $6vMjk8{qh׋FؽDbrc?胚:1e؏u餲{rg$0 ?;Ҁޙ'><:w*/*i`h۔lrwW)+:`2+!׹Vh<1iUuBQa3"p0ⲓ:a,0 S9(GWZt+`e@Nwuc'-`t"MNX9hg^?z#% c1u-FwU"x픵 @FѾ *OLvUxrO3jƅ`k.Ϋ[sVg&9ΘX.E[!&]pN*JtϸsK:BE*#M,.|i80N}!zC|N u .ҫ 8Z j @"p4 ۠yI1 )1* EFj˓.r2+6,]lBlfk} ;$mWvL+3n ǖG |5aa7ՙ@?4 oFUY?c|@!{ԁk\p{#w)] @@@΀fTpY0Џ餐6ᢵm g8_t:ު@ĝtHԸ\ :nYFAb)čEցNӆ! rn0_#^BɷE9 | @}GX4P :`ւ @%IPW' 쩪N쩷768|z>IَUΣmMe狇uF$ڑ%0Q?h%>w{@E4~:"D#_|Y$XN9Qaz>U*6zV<*c JRb\ɋͫ`'رN좛AZnp ,?X{&cBcj dن>M-ڞ _^q LUlA;O~7:C_k3pnU~}P2”c.4]"2Y󕟃Hz/H H<8X2&4a+vqX'\T^4 ȸ6e_{6x!e)v\Kh-A{xf&޽z !/ |*@_`,~m "x@HcaNH9%|azȽv%5Bpd'pL4SKENs}2p 'UPkW!񃦌65m'w M<(פcK:Sh#XL1qڱ:`ӡiM:Ә/ܥ뮡UgQ7 =hBpۨ+@(u%"~(KOY^>}ԁJ 71NRYFUUE!,A S:?+Y@9f`?r䩁j#h6.!l;A@N QL*>󕟃ANS+CV'd[#uWEWsx]4r۠): ]\t?h6T$a7MgC L8tu4-pe+M6͝7[%ahLp\;,:rwP&׀躖˜8Gl9i<%N-hR`@$MB63aAAnWNlo7YA!/لOQ ؕ>eLs xeWlF;Թ4O0Q-k)'0aj -ߛ8SGj݇ @Cem, GpI&@yOb>r&4؜́d--#jQ^{cϺGs<ğYAɤe|eCxn]O͖G6D 4Xi^%BqPߒ"#/|pkHj9t*,|:w4Hl'׷tEDTKGM;4HcV +@c໰3Vڰbk=+nO4Q?&01}c,hƍ'x"@&sQ1\fK5L\"iDzp*̉] 0D*1Y#V-/~vƐ~rsAj%^6\R7 b b*oGC,hB䵌mLB^Ǜ*&]i*dmQw]6춣7&mz/q0; tB3ŤS˦6Pm4:&ȂXu.KY!)'T89;6 9MnZ>O-yH :o(H_K7* Et*&m˹h/}ujҘv2 lu $Eŀ.1#b3)qMu?]Wy|?me<ꎬsREJ , >w~ Vv e:;hfPҩGzN15Lln7aѵBnWЫs&'N^m; ش\5Wrtxn [k}I)ݮ,uuާk{Sk-q0ɡT\+Hi9HrQIC@ -Yz~ݷbK!Y٦mQh.nq1  $6.Αޢ v9tm +fv[Z'fuFCt@$k֨XeeڞKKiK.tnm|=yk ZXM<P Q3~2M؎lZnhd69\6*3e=|,`lbjeĶl`Ƒ$^HcF@})PCdy+KRCRF%mӼ˾L|SczPw__e`{T?pٚU0'uەE_>X1B[co^h7?eD%lL⹦Y :x 3 npt4AX- :̀N4 u _ie"-I @6e(86$+8oINl7b0H)H;4iR_L'|,.!2.}}j  zaOl"~Zp@˨ DM<׮I4G~I- = -GwKP Q:Pxk?|er>Y͇ږ|?er@I~ ]Pne p*n Z-lJ/w!vϐXPpzGTGIhn7^ `0y'ruO_7^ N4rUزqdzw [7j!k@ݳ-`VCD=Y֒1_Rb'cMu+iBPd  ~,x_Ӟr` e[ůZ/ $ DFm.7scf09_[m}H;2^TqzPLi^gt Q[w`5B}*A)K]Cd M~7.SQ{W*Kt<ʚa޵W5)jݟ `rz[xK{|>S dEUުj0Bnohu`=i|r`y2+ i'?FTK5:߅M1mBomZn6g@@}ʒBu2jY[3Z M/U 6A%Ϝ&E,O-)IR3CÔ *^惑#9 a%%iI'51% dCVL5˦D8JW~u4l)6{82=RtX1uy-j(@ |ߴ\斴f X*lw_? m/ 'Ϟ?M16g+_TeWXg4\ɉvtf@}*ŬxAUV[HqdzXB~ꞎUu ތD@JQfaZ+țYo񀾁‰}Γ*%b H:%$'s UU$8$㵪.̰G#.$70 ;}k!%OTt6N%zȁ򠿽R?Xp!3n&K NvldE(F+Nus} DG6ԝ:߮ Ӹ^e+N!!*3Jt̑fٽZF&(+W=FA:NG,H||yJI̴1E2ѿFfv@y"،+}ɸM@M۩K BbsyB$NL PD[}Pap$ oyU2\[fpu(-` ֬. YƗB@ew]<;ʚt)y2alzxI1),{ˌIt׺xh1 <*e7 &p)*m(rӊf$T8\pVhzd7J8?+AܦdfḟLH> gp8hSvٗvB夎)oc ȤNZxd[{&픳=ǂy:0$C[oCJh%o.Ɠ}̞_CZ oH|"@6e㈩Wm(rNM:~uE庯<9 [ `o)]/2:jGp'ml%?&(UZ͐q>Sб?Ƽq ]wَρm5MC@c:d$,C~)".v^C˨S6eH4Bcf"rNxݸ@xoP'2?W֕,a7'dLq碡zZNц.),(t  WDY:P 'e^v˻K$67ћm;1u2ˋW|$VpxD׳n7@Ylqe0NkPxdg{DB:LA<]>x\M6h^ jk{m %oz@eOtô#K2rw=8Ϣqpk_{i(*M':1u2&bUG7'CipG*>TM;a +{CSu@.*F(|7MfYZH D2Q2:Y@7:upKœi9]!]7B}ӄb4L.Hscs7Kt*3oLX>x%3&2j=Wjwڽ<{|8COм @öd82 AKͽu c)Y'ٯD%l2H 4bIt-6Xץ/S񵓚Mw.ſҒ zdD KSb/ uCi gi 36Y>HF|>5s]WWm]pJ2inTrql6JxrUr -;&ͭ:/=2ϭŗ<Î_e)= _Y1FszJW, wny<`5|>Dr H:%$'s  8"f3Ms݈ ߆B ֦H. %?la~J_z iRGe9gh 7vE@g"pK:±0'\?V\Xّy,_*|U߉ xF)WoJ|$ й/ McXp(z@>N)=Ѵs9۪m"P'ٯE3xd<"Q6 37+nKG!'kdٓ >)KBծ>b|㯐n+`K*2i&:DoFsD>*='$dp=eH(szj:ākܽRFF:rDE1d4ڛC'} :cK1֧^^LevF@;VP7pO%˃h Hbs~VL55y&W`F]cWhGHtC?sгNwv%vvSap-oI@`O!Ó~jlYbu%ao[Ncr1^Jr5~`ѤĤMN4W +VFͅXڽhuŵ} 8O4 %̙ټaNӗ;cPҟV՘H\z)y&RڟdH2B70S z;t8dHB{8O&1ڜ)yٮU']Fw zz'?}‘u3 %֦p csu ^'-N.2?$"m,ËmK6\.gƚXە+1SbRڎSѬ>pNa`b6-d >cve#iq,sƓ˻H:Ah:Knܶ3h0 qt,.;"0/[<_٬sW>Zt*k.)/ЩNZpc!A1lC݉b)؜2%o/?B-I~"XI'*K0v. mE^n,׻xc*'umXE6;Bq[;ϸ\O4*ϏIUw|b bbVL55yXv &rDNޝ8..h_5iLs3_3=P)1-b_SYV5s4ٶ~Oېe/2/K)yג)vidu+lo:]6{ Glo^ [w7 WC '&mrNX12*l.s0-o/e܉ L]7s3OƩz )&;;9CƀuPϙˀ݆ބX㵕|Y5ߢ!oͰ.fbK*(țiqxwAH%h6%)l`8]˼Ot={ WXBCdfƠ镺5iǸ2 2mSϫkxNi5Hlzmzچ,s>DO,Y?y36n:Kv5ԫVq6{ Хag &'s Y l`s/jo 1;"XAhzapê"@ <יMȠ *Q7uM66mBLJT2?Co̜_`P8T%@N]Yw ~14μʋ6 sNcU\81u2]V6GU]\`H'l V:1ݬ3gE*,N(q4H0̓10㥀(,2S1:񾊑Rg$ÕԎ Vق]O-/52 `.~BwӦ#)#bTH3kƆ yh4Aco^IëxC) !NU.M8̂&6_9Sy⛣u۳碾.;x<&۔yy P}9 .jkӥ OLu)~NMN;A57"}y뒈0E̠Y\~X.k l 8zȽ=3xk?M%ԕfzfᔰ%DQKh* :PTw,hc?CIGMvLq :Kf]2t$d\) Yvu7T@֩Ŋmp`r_|i:S.FdRhVj$d<U| Y^BLAl~n07EدEtSuR" eey\/yr+Ñ22/ed>DFʇ״7>Qa032}/pŧ#2 5 %|?K'm x6ɏht &7{=AsiH,d2@ @-m& &%Mh~& `mD4䞕m2E,x.9Ȍїtmͩur}˶s>Sah׳44R V>o\n' oJ.r2gw-GNm$Ʉ4]: A'3Lߦ 8'oi <DyCS@هdR5#А`*dgfHXU e8g{l2ɀO(L&4[S%]δ|h)DkPyC%Oh]יfǧ;kSL8 vPk&x",5uҐ82?t(1b@>ZO:$mއE`:(u'<{aU|kBx!2QUk C @ @)o VJ BbsA“t,`gWH7ӻď܅Ԋf w;[4l9##^`|9g L'Ag6/ZOv預:2 2mruyPȳC&ԛҖk9SB~LuO>#>\ȵe\ANlYo1 7BEd7tEx@E\t']!=` ap3ǵޞvޫΪܙdٝQ;jgUi:VWSFma$O%ʕ^^UwM,K.}DgpO#2ДjVC/FNSUU̺ӄ'iGOpTWynA2 `-,83*t`ԇE :~wl,d֣Cd!VMQ[mi*yyUXg謋g*Z ;,ts4=)(Q"@ʮ/)oԞD[Π_%FsDzޖNk!]㓸J_Mg/tscoBJ_ ^r5 % L8R4 FmaD('cNȽ"NȵP u%,ⵜZ+Xh}CoZi$Cl"_pSvuRd 9m&`m&m(cyصl_5qTYYІ#sCFqNtj~c^,ICn|Xwc&@Qƺ8>aӀTm3q %V,rbl'đrkuđM]j]@]:B>BWD+"_=YlXr dZri0zچKISZvN2M 4lw] :ʜj7 up2^:V%KjȒn 0CNk =Loc pڠS*ɅNg8 +rar?׎wԮK!V֫o3˞#-K.GmT-z@S%RfQ]E}mS s.%u˺H8'V4?z0lthoRj*RT4>$@mVF-E9K3|C.D Z“&HNjqoaAoF>W{+M6X6V.9 q,9-dXȴy #\*ni4(>g1hCn$<8q\l˂sSFqNtm~f̾alH8GADYRa;nL4!te~L7Ny@:jql\r[Myg\˟DDŽ8N7 y{U+"Ucth7u  +HEaFiSÒ{TS`ѩ0_P]AZHu2i e&Nr,i|?ÿ,>ɣt \ͱ,8$eT;@9(X_ԥ)Rw]n1=%.9LnfOE8?``a9N X<lA#f^Ma&+8=V5`5CdSpע I&3\\`34q29MwyXMN#7X@[0P.vamvyN6E$WFB˽B@Z~^Qo/nӡ>I >{ Y;d#( gV$kڣhO_6^i4tӔ8&x.k:KJn- R9gjSK5z%;}۷&(cAOwGY7Ѿt2@a$Dw(4Ɖ 4 MY|juđ y}E47g$UUͽkMB! ,e×Iy.G%12_ 3ʱIlrI m^|k:Fv4ileT~,?e8#Dni)#SQ( .Ji$ tRT>ҁNT"Oz P@M5k1wsMjelݐg}r,e5iqeߒ>"dQgmcթ^ˤ9a$y]4}m.}/9VqtL-% : s4 @; x-%#+WtN# ^x ?L#m׀w{ ?)J4  q d&i,2-aꖮKDLӝ˾u @ٟh!t}FnCҁ^%%,M9q^4&M #)xH₅΋zAYgi[p\状 ^\:H׀8m::2]:%XGu\ϱe2-aE3|iT4$ã4fT;@9(XGG*dh ar մ+W N`uqa_f XpEEZaa9v,q^7x/ Ղ'j8 Y@JVTnkE7x&XVÏ(N# MJ^8IKxn:}ـ^/K%MiFR")p]R]#u"AZiI ph( 30I܎5}" RFzYK["Q^ãK u4@վ(HXGއ՘Ao?W'Yb𺱉Ζvzlui2xzrAqlw_jxvΦ*ileyj #S,{f [fwx2@-Ԧ3|CCDI OX>i2{2`xHE2iʑF2,j5z@Ni)wcf妼^VmS\,K/AR s xvΥeթ^|J]tID$-Pd<6jIZAHz-X' Ygl7V sI}d?@IDATN#4NV#y@n.i ¥jRY3Ҙ岤Rp'gc|GjseNt\ghs]&Hyzl *b*v4ecnQ[m!"QK_O.rV]'w]k4ʠ3MV\CiKq4Qi{zzO7AĆdLy2h0<3nCeؘC>d2W'գC:.F1QHX8N,QqkqrlF:f2!/TiMzܖ'8T p\h;B[o4,,e2vT+|7tK+z84z&r?`I*e셯n\CeFcnԯኈma+4@qNbF9Q|sK#!2٨S!6XhXG'POёcG j y}2崨Z$Jۡ@ D\p-@&d@УӞO&@e* #o j;Ǔ9I Wz:pZCͨE]Ձy q\dM ct1*VR'.>b-%G,CKrDa׸`I[cˤR۩MT12vƘH; ve:Txޮc4CKu\N#Ž515 {dz9ki^@5zhMe6r2ކ_y~7Tf'_O&xi/)2mbTg4s@abu[n]O4߶^y/{ ~ߪ*UYN$Q°|}Fj;m`8nĵobٔF,2]rS\Ve# )b_T)]WIU@qؑ K|6R ڶZ]U"><[wg< BzS"Q+` F\Β!a_Sgzi&ܣeF2#]W xMrVrA 9&9:Z0h@az#om>FFGpqY]Aܰ;&h9vQp"@$'kz\F(01!Cj T2%6lr%5ޘk$0,bN'imK>X:q|(Rn/ӈHjY/o{6jR&ZCqxRWopQh'@Z$JO7Y ZGKs|ݴ wh90 領/`qY~0&(Xcj9w.uy UVyqÓ(}!\iNc+ۥj+q?8C VGn 3V4+,iRp i?Q#z#)H?aWX 8vY9v;e~ @w_㤲 9qMui4`Lu\֯,32ɴlWtG2'86I%%G{9Njuq 9TI*҆~g ( ta&ǔH38̑Gq[L'lq4%lԭ Xp}:<44]< 8,}GBݧ$BWRnPl؁S?K1ZŧŨKq*fPGϢqz$`JsNKR$K((F ؒG,l?8uAa$<2W`eR#@Rfq 2!C,ipXc$HA|R;MDzeJ܃ ^fp8yn(:ǟ `HtD 6np2#uSlEU:j}ȧ]}h3`Ӄ8CFYL}B$`2.xA <@{ @YFLp |rt^pE‡IzT[tk#~m0v`M= Ihݴ)`5̾3#kRC)0Cr,TF2$GIopgx%A1F=n*#V 40gK#vV!i eq 1va8e` 58Ґ 9TM.mpE/p袿NAt< fDAi (*9.N2vȠD5i$ ^Znٛ5&R_Pe{8qZ'[JwJ#kZ7{N;F{"@e5H/_2K>+qI|Հ@#WFm#Xp_g)pؽfaQiS@đύ]PF }M,(צ` F<};8HrB<nVD]ȗt.P*vF{@:˳Z@9XYi iy*fRjZx Z~N6j l&l%~`@ 7" gt{Ɂne>G؄ ]0&h)>q+R[BU6O :Ker\*∱8D4 k1ws-%b,S'5ǰ2m"pee}aV5?6>eY%Lt\;a %4 X̃CAWTڨ-#i .Hfj=fIs$YQ6` F ;G=ŠZ$&'^C#tċӻKh,i17CЌ~`ktҍ{Gfs몈`"?p"TmXrW)59fV:s]`8:`##b ?Aܡ:ѩC":db{g kck|l $E-r: "c%Nddޫ9l,M˶n81=irk~LʘoI䶵mz9aP5].rrVJ@t&z:Wr.}uFsS6 +Z!pgh8rϖLEɚ:|y@":dM*f~&.x;*Scepbvh{@:bq1!ۯn$s^b\6V^'LeY4| ^&s_ڨMg91 X>YM3Obxlgs2}'W(ܕTZp$%ՋLDLqs&g吋"letIwx@3 =y8;#l*sY/&# "`L:S3#/֊Hs4PU;ECCAӓ)wـ(8dl]Д`MѲS>#:d) fb@‡p8 RVJ.X~ @q0аsn¡%G(l0FR~zב!gZ!@x(*u5JmF|יڨ6,֑ݣEY',Fl$w(0F^=M/H !G 'tVلvMq4>Z6GXN1 g}9PRCċb%u~0{@:mΌo(=M4;VHRՆ{- b"-\ oLl2h}'NlZSMFІR4rWo.i4kː'!uC/ʠN# =Cc}5X}8}0 ꍒ D,2-+> ΈatOi) p4r=6m=ѵSSF]Y|D<:Ǣ,Cqzj.ފi)%UvKŝӉ~j>}|fmXAJ2T,B'$0 2߄q f)`9Fk(.G<'z`A|/7:`y7X.hbіGH{,Fk;}i ָ5c31EQb9Ġu@+{le//(Bo4%F݂J3 q_'/ƀ'4o 9 o V"ԅ^Xj#mtbgAؚQHבK? ɠ.`D8qT^Gw%Kکhgzq<ƅ?( bA櫌vG kL[fB")EZOpBPy8 ;n 3d$ͩEm'?K\-ܠզ[KobfhsD\2@7p)͘`'A't $U#cfN,pᇙ֐A=+Z*Vs l;z:%0xծފIbIrK>.T oi`D8@(#`f~tOS:O1P6={Y-"KWY%K1m8N5r\'@ُd$>TyTЏf ~*oXu,(mKZhm+RkKA!#ol'O5cnXX+ZRb ħz5֫_N qq^m+ ShCKSܵN>(F苨 8hY,]WNv )r@G2I%y{   V!!z{R8 NRnu":N tf}_2cPk@N r# ~i3L4gC\LqRv/ۖE1/<G8.xjQƫEE)L,X7H3z,]:\st C uao8&6еLHzx d@T3G+WԵkTV ~Վڀcui]' !pp! 4ovpg?AY4PSRRq+XudO% ?r Y`KKMcEiJUr2Qe)q4RaMu8\&xY^_H\\=xy`0 :߽4011p% mp%'AZ'wǾ!p`B7tȁvfufR#F|r ]; !*U[ qawIZ ` 3Z#UFV(hFR~FX0cȥұ!q,뗎55A2bی_ $q F@ `F¶mۂK4.\PgϞUϟc^1G' ٫kGՙԍ{5D_1+MCJ4%2&h͈ Dc#zRf Zb5,QP蜟\{j;*ӣ׀4B㱹476{zwa\sكG?]9t jڵuGԁp;w.N>IdVSQ6?@C̕8B[X$Cʉ΅TVoPiN0iǤއ+ 'ܔ^:BJ,QȢH^?[nn=RN^~MZpҀIIhS ' q\ggYa}`Bb)IBb%aLH~44@0@]0ue:׸^OO#iDbԆ0Hmk``50::8~:x`paـmXFMlw<\P'.WG/,0)' \:ڹFp;ZsԠ J*%8M. z,ivX#tT_#B~ I(hҪH{@;IΖ.[/VfPeK]tJ OyLj*F:OWlV%ad%H8\h}ƍ`믿^{5ue?NmPlgp]qN:zu}梑)ξԹ7hF X61^X_XGbmHQz۟]HnCӜDR..ВL! y>PqF`:Oj㶜,K9Sas"iRv0tFڰSF i`||\s=CW_}U;vJe&Y.MTGdkK.\c7/2šSdXD _8͢9r2%W"""PЎliMYº\4~%o`]]޺Qhkk 6mڤpPW\ C`q,yCeuuʁ`VK \Q]ghfNX}Q^i@TPpXz @ECCJБt*DCW"2e "F34pYhS y.CNz.[lNlHc㷱4/7%%3wO-0Kꣁ5k֨{,wf70,|P--Y@ :YaPL(A,m/j `~&RیLW"*tgTvLlXP j6sZ'jcx[A0:5N/cXzeҜ[^(]XQaȝ/hw<\333^x!Hs-o :4mT/RzpX0?WN]YEe3]+h/ipYY'%]MH~^[Pۮ)! %6ƖOy`]֗e.O6|O34Feȴ@ aBA{uy5a$-#|ki`˖-z,lF]=Ե3JۭԦ;^уK(8P%ˢFYhT̬w`| X͜,O[iI|4r(Id?-lzIEdԀoD `TcZ;uׇ֩5k#}5pw+\GzLmPT<]u*uDg@)#7)nQ-6P%۶ Cɭe~qylypրt; D%r ySÆmZ,tzJZ<2Gg*qaఠ%o"-azTE#p8)yfMpaسg…}qxf|zMߦ^8Mu:Y"$GZQT0٤eC7>8pPN@8KHuGDba-ջGl _f x@{%2b_4b@sWY1t$<ҌC,iZ2JògM"OH*D>5cttV|";1sM z WؗJ͸b7sFeCMCG)mXe3s{` k׮ plݺ5pd&ֲ'c##l &w'ook3}hBǑѴmJm>/z˓}t~0=ZrӢu -A-AyėLMsel qqQf Og|6\m9_TODZ>ZRQ`͖;Ow>QSɁOz9*iҎȟehm)˗΀jxW r8jld8~x>qf /_Vعsڵkڽ{wpM n 6 {h|W>l0h~ڹ~}=йg=fRvx-3dGd0%i;42V'+ZRxp]+J *^ o3$$0~It)N?" lnƊE"Q+j N!g0qa* $ )iRtKuԁ7%yusqv9  mA D Mah9&5j:jz5эǩ.MS .۷={4$4r'R 裏zg}cj7i6?)#݀ele+q+xI@ 4n[i7Q x ~ ewaZ؈gp}\-d]̫+|%^ 9f=qBZ$JO7Y Rh6jQqyFk웘C$glH2L2,%qfX{"nRY`Ƽxs^M\ p#ujr|ZKٯB R~b vO;߮0M`?~P:8N<a Ko޲7՞MgU]E96pݮβY"͏Y3hu&CU%08A*4`ˇ6/cs07@Vm/5\Aǔ7Ilir`x4qĚMa-}LӬ4y߽XnW`#k/`=9l faK,չ6vnʭjĶ{F!pַ@G;VldSx{O_Vŋ#-MlW→Q/Oڍ^FGqRx0l#ژ#(f`Vxo8 lD j 3i> SF~@ e;Ǻ+Mb'Ye\iRි~ǻsvBCŸ!xRK:՛wvw/XA%x |2"l"$@G}DSiIRPh= wF|!%N#1J륇xrB55Ae/ x܎IgS8,)VmYN %ͽ]?>rTw TdQen qsmg/_Mϑ#`O` 5(E/8!p`I .*Lѩ>hM=[V f bv_ڷo_ h+׿^z饈pC}6 W=sIuuG݀~=P܁ck|5״<_VIg_I=xq\`k)~ @ Z;s&uu^f“,C "al#~W0ϡhF@Xѭo|ĂT<+iIPvހ]0Xq,9 |HZ~ @6 HNakO+肍xI6 Pm S [EkG%:' p7 ]vM}USyu]w\z׻ԛ&Ȳa~Ce$`rio!E$8 G*>,i RQ#S~F\1L{@1zx r=9cw`0긌cT:S'1*a"I0%ϰ+  ^ jW7i* J5kV_3CRzzC4s|~b52o84XD'{UM@0K`qر>!05{I~vmּ?@ Z#7. G}Tqkת??T/b,`ffi V;ݣ~~jf qJm,`i` cyFRX"{ WB$n4@'H^\ *.l"׈Xi[ #Im0(Wg3 ֯iW vϩ٥ڝtWAӣj@?P2ΐG9AdHؑF6.ҺS5Jo0%U&F~!88Ktq]YQnL@~!n-MkK%w ^A}>u5:wy ;N-롎N8φ ʕ4Eatt4X011>vxhfM<@ΤIr  ^9E'xV|Ha`8gn<[絭˫rrc^wuF/@y0N6&\α^5 ugKamN ۖXEr,t!J;B)[A3.P53\M\E-%x@ p5zr E:7\rڷa{à e#z=ܣ{6MK?c?aGe?~, ~{r[ILpEs7Kh~80Cȇ5Oc%FL/HB }0z+4,%%[I_o+9:-Y.:p1 b^K:%ژ3J^mOLR`;֣+BZ;)x>cFTQe[N Cw4}}B_DB{@ e(m`kt:䴠G)ᯪ>1Ghc__/^IׯW880 Lt\dqpJ_*urdî"eJ$0GXXGA6mU,fa_6hV˭w߁n3Ns-֕ 8Vqg>xXIqá!o*z8~:]pu5 Y6i9pԘˀ {sݴ!FM,t{)r},- C࿪7HP-`LŒ|3+_JO,O}Ja@VLwOPq/POiE-DK$e_#9*wf`f={uJ-x@m[x~rkF4he&p 8Nslkrȕ"!"T|K9 A<08\wjB B7Q;!R|"QsG Lt9=4S~8[$,Fڀe# v?fݔ`Iw^}ſROuq,\-`i3䑑&\M)XOO~ 'wir,V"|pQABaLM]F]T<|o"VS~&_Vظ u# / # vО긲]G\Xy4Cд:c3ZԹkniYo-lPSur{c.q>]8 D9B68mxWgf^"/?3]{WW;26{??S;wΊ"ӾT7DZAB”I=dEm_ƂVПW{vH%HCik@ޟ=*5 ОL*S8e3A#4dZ%86eL`7Uo:ߜXtr31D::6+F|24A!M aME,:L{t:Zl&m5*'ay_QjcJ$={F ^?4aaA}U7=7od~OO[˗}Dݳ<'Z8GBK,`- Ez0h/jjĸG _}bZj;Z۵ ĨRϫ4M2~6U WYX}Yby:^S9ne]FVWmn'nhSdBt`ncι)a61#`|@]ϗVk?^?V?\ꁝ_}Zo?~~O GϘܳ!Z 52D+p- x MG# %o`ry% $x}?$IS861zF&m#ۗN2}0eʡӒӍ03ԏZW*13wm3бNmd}"WWD)7Mʕh]!ݻwO}SjݺWi-=]'{ތ+PZ.tVR`!Od@>5~:kyhytCUBO&dZICi^l#VHi锐.Bwr8BXU]ippaul52~` qZ ;؈JeAٶWg̀a=M=YSQ%3 'm~m";@}@Ñ#G%Ы߰a? a {T"\=CKE~FKWk yr-gyިlQ_yd.⹷V] hw hǻ;4 %1,~N*8%^fz8)l;; :zUD q u5ftfH:@~ wyB6%\8I,\IΔߩԖ{hY@t;m6 _YI"ܸqC}sS?Ei3XO~Ru]VX,X=)R>E{E`:p`r8ݘl#6=X.S阆g+y*$d$*{Cr\FC9N6YPnl0Il_=566 he3`_05}DL#ũi]Ȼ 0}dIl٘f\T s2Ӣ n^xRz!O\:}SO=_E6^aldRVي" p&G ric/G"ýgF$Bb41PX4w4p?4NӦ NLɴ N/<صA~|0\5>]G;SY\9KKLF2- T!?w#膟(i#a&N91$L&GŒ {J3 kΕkzS"+ٳgEi8&o0'6\?#R~< ?nHfdiYz^`>3ڞ/w@Px@oʔy@Jyp&uc3$LtVlM30_ӸvѲ_Qj8D-%/^Txh0>z#w=N ph2lsDH@Pt@LխMgBC1ļNkrh^ySh@2 Gi\GV! E:Nt=yS8e ~iE2\1;%P< eG2}h6G>[F!bd BGU'dk7:Ȃ ()B Nm ݸdkG/ޘS0}+_Q|xGD]wRM2\8>iic#f=3zX32A>HJ%֑Hvjn^c6J׾uqrsǐQuq|?4xt!Eź Hf`U\s0hH ӌ,ŀOtxp|2.-fqpR+A7S~qkdF|Iu<68}Sz׻"T+F@~E):era9z&o=uIZpӦ`zӼǞകiYrY +cn2|W\g^mAN.o L|׹QDL5<@H2Ǒ|. ô;*EP`؀l{Y{{+z/3\g Nbw{^cE۠}UX e ~L8*Sny^EXplY39-keӆ<}b&slC9p,aMe,S]\4>}u˺4q0:n˱ Η'1GڇfiÔڶCPzuyBp2rlaӳk9NeH"q[S!wN^zE}uSXk곟Mz衈kVnQhѰ町AoA72)6ODvuue|4fK%'ز` y =@Cfʁ8OG#B N<"W^}<}ʕ*ţ40day4 өd'f"1;EJfX6L-{Z<4<ҦǷ(qNR[TAHw)>C;>5 !͈XK=~P:&G%n3:8 vX?( ]h(CI l*hG?Bs4LǷr;|E!F yS{e4]⒲%^[:!] PV>kۚ4!zU=Lߡo'[In.uޖC81#a Pj-m4\TԩGj`ݻ#m[{z˞Eiȣψ"Z{ i }<W@IDCJ%V=@(c._P4mUNE}6cXM]E6LÕcrjA>pH+d2:) JMn43׃c1NaGGj֭nzXݹ5zl4ݻ'hO>quIŠfi2ÔJ,3unxʹ>m |6rRJ:2VNK|.qI^urLp>MRϦڵNcQ0tL %pv,O􎓑'xœF\Z&T%q 0 M͖A=n/ΨOhr+VO|jݺ蚓w_a6 ӆJx),aО.{SƒӴ$iꁬ+>y.*ӀwT 9=NB meZu:,_NW&\YrH}:&@5p6d4*mi Ld)h'ي*dA9ᢘIp2z3Im=rjqQZѶuϭZ*p.#E㛃26w>aXQl &8al`LlXjߊ ßS{=j;JU'V4=י@_Y˘fvixC\4yGԌ9̓>ǡeR4@v)r$ +p0NM|XۿmhZG]s6lPG#FV=mYWy'B;zFh$M D8Ό Y+Z3*&hj"H 5c8NĖ   NV]lbpu6՛e(h*"gmkkq3^r)^@0 xA?#Rπ?my'z62'@Yd9zvӫ輍~ϞӲt:pl'J\>x&me {0CGG/KڗlE?/*iΐ*bg tʊ ZܦġZ9Հ4 e) lA"KA,X܄fF`iőHҖ'#RJYo`C@mu`W4zQ1|hX=W!umEcԮ F.QjoCgxƊ(P q/LD ivi^ AL8B V. +NMաnf"/#GDʚYN;|cSkPNJmVm%t4 :Gꛞi'ߟe@bb?'AB¢q\w.!ܘEQxhRoՈ׬F[v5=+lH(wVƵu2Wæcp Bf .V;uq~5rfۦGhw 6d8=wyB/p2p$8ULnpa4o0FӼ`f,3,ON &T`Rjb}c^RO~'Rx OFʚyG<aέoW[tξ I?9nIπF&L,2jZbd\ tE]I3|օgχ@!(k4rT\1dZfJĕ>tx@E3 dqjtGu'ݻ8EAq@u  9.M3'Z &iC WANR+49:q)5?}F]'@zt}pR~b%RE RyyD`CL\p'&JI~mE{Զk*c;*S'Z0(t%M :Jl#N;VqI,I:[g|\SHC'+rs8mcEณ+W{^zJ=tG$iN!)ZgT1;m( yvB;+Twtf<1zIY76Ǧ`fڵK=KRj= dpDXRbUi81!~(BJ}6]3@wK{@QKϖn@]f!.Kl:/*6JK'Lq2ɐe0U5n4V+#\%_ץ$O< !,[Y,[- e #fGG(ȊW맟H~/Fʚ|D\2d{hz˞Q~&,)>MCb ww T%u3twdey@;"ZmKK_\2-g3?2FF2:UOXᤚp~& dhl] X#Q 5X{'1;NF˸v>H{2в^:m]կ~U]]!^j>vw(¹J(T՛LI 80N:"ցd @8D|.*UaēCh Caɫ]hoҰj""sy2N24 `Bu8~GѱMQk3ԋǞ=zT=tty@PKގ-V/.EOܫ08${t}. St(H̢ߑ` ,DZi%IW¤y vurĨ\_UG6<±@xQe XLTFއha]V4>!IAA43pX`DܿH)u>"|r+ٟӗoGzxڻh"e FH|(Ľ a~3` f8 D1Yr[6t`sx@sj`8FLSў NNKZzgXuzawv/'e/M+Lp |H]igpf}C-wSS/Zwc kjl3v5y tI}ȱo6:`4⌹9e5@^nрO>$g?jM3{ܤ_ct^ ðYyO¨XP牒[k25\bI,ଃl2횷:`8ܢs.a?,@. srst1M0,PS~@#*wQ $-u~yI e]XƓ$lH 8p$%?IϛFiKJ Oૺr@Q&1 `Ho%%0kS.MTF5,h9;58RVO=TobW~WC֗ѣ.*uLқH@d8ϣ0%S(NhRsBNR=WwIjk8r+2IY}s37w#bL'F0/H}~e=I'01 K>u kǃęozz#>Ñ&e˛WS[),pO D^d`c [`q$mmY0Kbɸ/~\% x.|j5e6pzԎgHXml)L`!ԀKUNT>Uzeœ޻7[w{ZݺkǣqɾTmmUo/6fc{{f<ѵ[V=$H$@n@)PAZ7+Ce:F_k J#.-.a w5~/:"}G^ ^*)3ȸ iq У'(N'1 z&\ijuN1_nc 40>$vϻ8Uz"P i2"qw vO&Sĕcr庴M|ۖsy \. Ǖ?ŽYG)M_Ad~K=RX<ʲcF|pe0 2k~&S,/dH`~o>>^?cvvR4qBMw8)gP8q+`A$ i*w tb2Aw .Ϲh6mI[j5ٕw4@#K{Q cH2wE&L7ꥃ!=~ J{ސ aL|T'l,_ٻ}UϿaMoo*Qdۿ666J7VeyyL4U46)V\r+dqNk0 d=*C")AfʴID Njr؋Δ;?iS[NXFN:c>lz% /4&ںzS;,ms>ŽBB)U?ad$M3aIqH7/ӀǛuO>!Aƿ<;,ï5`;{|{:S koFQ*ZJy _N! "Ò5U9'Qt55%I4@HD e)HX"tPMM򲭤tTwS Kbg_fKvH` H Z b1:ݸcO>5]T/`\wvf :H dxU~ٛws?OO*Qd??vwa&*y|? x= 0v&"8i`IIm /tyYVM}q=DipIѦYO ӯ`I=~6܁e{_ tƕUX~P1CX:~?*g?H ,p/"\[\`{P `@q (zG%M;36N-G y*'ں2r<-ۖ=Ao HX\~{i% 3:@oљ7&.o]0ɊU6 ^}V=__| \3Օu8 SmVHLgpKЩ= p@UY:#&FԙT=Yِ6!_Jbj#Y5y)GS,G .|Xǻ0P@YK# nn7=vڣЇOd|zd ݱ|(wgXo>0isQя~c _>z.PFHby ,U.XQ1Ii"a 4t,ʩElrzb*&d5:¢>umlOmt$ǝπCJL\ps.4C >~WfR< \Y۰\ϯp6i)iq_{Xpt$6ۿ XXX7EAVt>aI ( UeCw &~ 1R{-M prϰ-t-/Jc4)Juyk٤+ZioSlx`WrK~xv{L*XԬ SUžcĞ6<@Vޔ~P n}V-Eյlb1,O{YPUY@q/V>9Ą-1 DOڸ G" >3z1M xry˦N0oRڗ:\K+ԬLb]#V8zKIBq0ia2@xDۦ7V|6$~d׮Vla;$tbuZjW؝&*IU! @2GMy.oFyL:ʥ ,XצL򬣷ʷ=/g9Ao WqpY.!JFߗ&^:1ygBYv(BG}t2un~}5W<@߳ <1Ұ၀<{,U wP3XZTKlFjD@M#i@ x`?r86:&Z[޲}! _+cJQNcFEwzMQyJP=-Cq򓼄@M/ b W!<j{ )zX NqW~I@xj>!8eGGGDp2~[;_lTɆ~BCw ‰I->@@:PKD"4d*4!xEp PʅRڃ!X9wd)D:ƀ @GUo)7Y?/6]K&Z]9$pѵm\f)6.N^ygnܸ}NJ  S+[.-։F= i4zi\ $&|9lg4md6ѯ -ד2m*"wȶ>c\TpO,̏2HCGix>5ăE|2@|b2*iCǍM^/;Tp~g}=QWַipbW/0y+pSh@q:co&Ë~{*!@X%܊8"•b/Ǵ^T۶fǓiVSHZhJTC]t^UE'2]":.waj[p 'j rX?qJ߽^TQ?U=߿_ڴ <&^~ PwS8Y9Ev,";o̱HtP tʓuy:&CJ~SxcswIga4R^BN>}lsJ_ % /;)=8^kgysu4r{g@&)0Uhk!q8fJ#YQ)UӈUR݈H#\i@QS̝7WKi @B&=I 5{VIWD+-3ndQ'C$=cltJn-7SuFF+ =^zI| @އe$p32@ Q`DKmX+(\¦=OW*#'+~Wd<@g-.4 Paug@vq0I.@ །BB Ӥryȓ.&n;1م?(#UbLed#6Ǭ:7g5u RFǣnl.T#8 ?o'+⭵\P6$0)>?~agM~#\|\W,^?UH3_vA%꓀@DX"@C *vi{όK04PB1DOo?̝:}˸K]L@U?a )1̡8BT&)kՊDP܊Ij @>Je\Fk授VH46yձ(|B:\}JꐒϷgoO_g?UTcܻw/{`~;Uex̪}&HLw baY9~`TA(~MM~.H!m@hä 9ԴkSyRZKZN6탧ԻnNX'Puq7!E hoqo=:@`ȫ~S;!;kc|pPf`Nw&a\ UF㡪_ӟ,mws< ѧC>t5;!yo(eE@B." 4HI{sUhu5PdV/GP@T&lGjѯrq AYt:l1F_zNab@IDAT6aK@_n~~JC'-kk=_T'c#?( *oPTd@濥і/l D)$TnY$FŽ+80_JMg+(?Bqdb /N'>Q}vG)6?QN8^Ӗp%KBzT+6&G&&q̝MU'yN*5hK}8S:U%Z;!t籆,"n =Ey",Svi@@hWzB:P8S`;)|.s.urOOq;}-Z9ۆO`PN^:6arA|P?.t`FJiHq'6lJGXƃnW*1uTkԭ6G  s(jhT{?&8AqȤL4ջ[zp&@,O`8>@6/M<7?,{z0?(oEl+^'mԶt*6fLŪ}(*@>4p+c9Mt8gID] ݺ<$y;[ĀRLM.m(;C@L7jUGC{UehrLa[< pﺮE %L,򽱕ee 3aK׿1犯{xc0c|Xx)bz"@? Ȁ}x0\J[LLubN+&:S=UunF;+1 # |FJQc}|DL^}-Coݒn1xh̠~]3FW p+L9營fx 쫯}xxc8t}sר/gs ?7+i $lBB`*tuaE0]o)1כLMږg `f!{(ߦ=vP(ʣЍSt>i:P&fه,P=4x 򖖄gh}[?U+p7MKDɎ&?͉c2d ^sĶ,˩&N+&Ս MJ.@G$_S9I./yNʓy2WUչշ-Ks9TF1<Əц Qh+q' ǣB=6]VX_U)O,xÉ6^d+R0#4X$6*F MLONӔXsIDi9IbWH S9W6t_}]}.jHL1NGIE% Vq+F L|kpf6[LI'0Zpy@Ve0<` >8Wً7ͳU9 &X?‹]k)KJlhCcIi -./Ltrg*U¤2oJyL=Qg4C*O&¢u([VU ̷ oWUEW< rOٻ3)W_Q6ڵk;׿26~Ű"+V^ü :Æ&fsw c[L#idxXy{?Yt:xmJ-t#1,:{?27oFlTWa@V:o9gD i@_ook)J㚵^38L6G)6mLGA+*Vt9cהdMU+H䁰ة9t)w눘 ufߦs&R9ƔF2*QT2#RXGb֠fqU^y$$ NT2hq^SC W[K ЗE8c+Xj eJ>ƌ\ |[7C*sah L5.I&ń%T$&T vSEX 4,J\@w'))s_ I ;;pUL%ϛ:~[a]H8CӁ(%]|~ rqMMO"E* ~1P:Xe+FQ,9d c.Ѝ|No 5 h $H5^pΝ;kp l}x`VUnጊ¢ I@;S\@t@:Jdm(_ I$f5yt-{.kzJ^<ă]nn߾RGU8VVޞ&żISi;&Wi@;&*ML0;p(_ueu4uēalV3U=׷V{Ϧ(F>ui]LRzl{2+S0,$G\V dGߜiQ82 U[N6-M8&XF4#e ~09r~ڃ9qiZ'}9$,,r{I5Ӕ^{(HFFn]|oJݸ_PV$UD. _f6~3i]gN/@9|㊟a&)?g}7yވ(*.G#{ O[ǰaJ3I9y (+ifcpyy9/n#?8 )Mw.W;U%3K:KO:#M8tz A#'MZ_UGT:&5UNWrJS,upZ]=7uy7+@ tG'Ƒo*o+Zr!L#tp󀭌i)S;<6CqX/N2bv:`=4[3H6pg"rN+e\INe ăe:~fli hYkaI!<^cx.Kϕhpӡ,1uݯC\ Cn \7$e< S ;wT? ]S8+[^),u#{# 9 ۼ*we9:4D1IN =uu}7hel8vNY& tRFW&Qi&M싯l1m}f+,P:t_jF=PEtzd-KJ|;Ή̗ o̷y4ƕ 6.җFkIECMvqI{۷I/@&Ap>C'ec XCr[@fU}d*Ů/ א_MWZ"~6۵&49vȐ0$(Ode22·o^giԡN>t)KR6mXN 'K D#®۽.L"1Ɛ0'2Kp: -pxX+6} y@;pR 5Bh1ȰbS PYOJ:a/` V=P[؈a雦Ū` +xz@暚?0]Θ D\L/ad*z a"t@]4vi`0`D;{<--iCkDɷN6tiK#mWG烯ģo: R}= Eq}$bh::3 {G |7W+(3g0 P:ebaeoӾhk}AQ\S6U(hÉ5@^_sC1T%Sy\Et3"}0T40(qΝ.ˤEN%}_NoLzO_w~Йg͔7Dz͊2h_m܃U9@IY+(\(ػv 0QəM'qY (giTu)##(f/- d Du`NOsfrN3tFsca[&"g.L順Peb#oOCt7cV˗/z{DBo)R·x&@c&`;d濡 L2C@1[1VV3V, U@|_lS~ 눏SttA}ZYNv]@ȽtKxF@ʪ4aLiK2+:SL>&Tn@g{!D٫0bg mW2+`߆7-7d@rGPZ]aJ.&Vna}W:=/\WtiI%yys#(AR:|n&FݽZ㪞3 Xt@MWl+Ȭd.yqYu|z r)!OгMړsJ-F=Eb:p+IGPʼn vq=F;T(g\YiXO MN` cXpXblI1ds񢩰˵Xi |-rdB M1ҍ4r8\<2S9篣mVj jb:iچHS  nǰUªIu׊IFnpE+<-\|2/'Oo;vfc V.ǯQ]]<r ? T(+~@i7`ceL}E Hq=IE΢t1e]@xq[![_^Azĩ@`P%O|rPP"OBvA.vS1f 濡@Ȋ\W &h M\p"+^]KvԁO6k%5 p.%|=5Ƒic30:#3H i:%rjSo#36: ҫ0ahvG`b1?RM. ~_73_{0qUa`[W݊!L̯s@ :gCY\!T!â01+43h vm2'&Wd2O SUcBWas(v.@ϐQ>,kt߃0qHڗ0q<[۰@}?x^_t`~uE]O؂6 ~ mŵׇӳ!^>˪?J+|b34s]jp[QY;864kDOee\VP" {T | |P븠ir J~T_tq%n}@uͼe`MXꩃ8MX`@^.f+OlVHcᄇZ_b&b% 47a0/w׻RxR|yڕ|nך4'iDL!ċH8Υ)CVɡ2MҦXiu2ߪrW|dPv["M1Mb 97@FqFH{= Qog-?  ʀb g?َ1~pEgU {iQ>mCIGrft↻,FYwÛ<<*j va TpH1eLF1m!m).ץ"ʥ40h.5IuQgqHK]} )16јy[SԶI9XkAܫᐗfx$'L%Q:X5yu@ 6!{0 + (Etؕ+xyu U{×)fv/~@*elVlkj?A]]EnK5p 2q;5Ksi[HZPYۆz]{ 0 1 w$ SX2 2te62if7OnzU[pM qBqupjL}8:xO|pg6ǥӎ8 F# x/I gwq9Xc868إՓ"^K+<ċ&HڪQ#gun@8ѳId9)/>.F9-Vzf;/J񕳁9ï8,qOuY)&%>:oU~.L&*S_6ʊiiYq heVHyeL9 OH!٤ !\v<'~=H,3he4 ' @UC^k`L <i"SH !9:l67p>@@3 'p%@餁 |a%9͌?~0 1 4fcA..5#&ZӒx[pAb1*jJ:r2S9p'tīF~6ڛ|5S]e]QܩݔhͬKMqJ=#~*:,p1$sVXg{9SY>\x-cӝȀlMvQ(* Pz"`=uj.WMtCs%X!<4#s0=0ZFCՆÇsz5ֵx:>NoqF2B\yp}8+>H,ڮ љ4ĈO^jOtÖ4E'd!v)=q1ɖ$>p)iv,>nalњ9ZÂJnc'~ oi Hțz 1&X@\d&k? 2V:^\d(:m?o5kU[g*q RƮ?Yꂭ -P_@LjŅwyڕqvŷ ]X+ʷI]n+ת]HwgSF]:Z3GkX^y᷇͆6{ b@ cj蟈& _:vK8J.yIU%ަ%)!HpVy)er)-NR/[]7F؈axg\#iܼ&BG@]rw8O但rƹAy A2_ W@fwu+@UtHV\T\EU*T7Q: .AvUN>2_UaKfyu;cՍDiX]_1SGNKj&Xc|x 0z Հ (3l0 l0jƪNЀ9~Ѭ[[ x `rvN? +w<#&@5Zyvu4`|(Z\EMZLn $996 U4l6vTrA[7aB{a1g!lcih GC)(|W`!/+@.p+w{Q'r`}= hoǬR5'K  @Q\S5NtE)L b0g.wykJzN;tڝY2 d@bGمܨ+G{;d!||oT7a.#9,MP_g+21:9Q 5.\(#cXQŨLX @]׋iЛ|l)stbNO:iD!{wjA=p% -5Nd ^:N2ovHYj/ٞMJduE]? ivGCwq&M>Ⱥ 6 LN:GR,םLerjGqWYdS\Gӛv}=X@IDATѩaՆ@z6%fż 8eޝ.߇2ebNw6y duySP1+]>VW4՟ w&N ȝ41е:*492H>yr|[x#oڴi*c P P'!}z#p6/'[Y.Ƀ>dYx [66- n0 FCq?˥t@Ji@0]1]EgJסlX* ȹ\nTO9RlC9N[]s j2HW,8-4).0e)֍)-SZY?4G@sx r}P]ų>y]^S,͒Ad 'ILB4>)nԸM$xKqN*fT*g.ĤX++cXKxEN嵴iצ iFTuQ_>pG*|9o۴h}ȰRצ8!`qꕹy_'K zy !^0-1N 2*Uiɒ uoa3sdbJ.ѡNvM9_|Md9*L{/ǩߤ%HO`Omy"-u:?`H19R赱 0`a{[ͳh"p 8PdTE'i\#M V9|[S9ջSWn*3s~F:[Zޖr:!Bf@LDž1]@xac!l$[p:5Xs.:XSk@۷p ,7,n0  )n-C9>)"&TF 6&p_Xdf?z?1SXpxx% bņi@Gi@3DE&hmd4:{rzXܦ >ZOf]F!hH?{ҁ'ILB>>1pup%l^hpz2fq g wgZ\+UJ6A#w>Fvxfdq'C1ʱAǦ5Fyוp0'>逎ByAg;rNxz^7a1߀*9BA=/ `[cɘ3y8` >&*8RxV]fERdHP=9=ST I'=>T :ޖҜQÝ(OYBE M"2Y27H#r0սc]`b> v6Oi@Iz "eI—*VWmf5$^& P iS<,^D M,bJ!sy)F<-:^I#V.𰹶óAbf$pEڦH3 2J”WH*S[zkACƘҭذ$įyk4[ Yl4EEb/a@&}g2xKϙL>9ϲ伥1x~=^ j<ݸʈ2_V}{`;*RX=10`}]$-iJٕ:>u?s uVGx6N,yerXGWUgMm|UmR'Lږ=bvN @B~MYwgfwd7\si_xv.KwCb` [Ls)]\k3XO3Q4E:px+3q6iMo m[>urB3J>J],vR@`6*{6\ ۿ @KEHs& @.j6^K|o|wi / XcIVX5]`}?yCqI:huu}ZOvཚU p!-F8&a2y`cб߃x蒫ý}@os(XOºs& syGCI?HŁiԑPGQ,G'S)D2⁌!/suPWu(`oQ p ~իWG'ꡀc4h 0mG&}}3p[Xxn3u,TMbQ(Yyk+ו)m)mQ:ِk2Y6]e@SؘbF`dr7*{J{j^$<=} +1VֳlEl͈ĴVj֍L3l ?kO_Zmۈ;ot#@s6̺2];W6d^r9x뽺w$l=! x1x@!c&JAT1LGbOJ9gY#? MWiw>yt~9NW+#tuXI./}Cob+a֤;TV> &%a 011.x _X~}B@ ؆YAMܽ{6 @49C~ixMvOAtx9}e]^Obljܗ|&OޮK,ǒ vV j8;zg뛪?ϟ?'xa rbsL;3&M>HVCqƬ[d ξuf.updCxbZ0PIR[x I<ž@|p*&lXqL B`677F?yDۧJ>46)V i!fi;2b2j)@XXa=T:~J L5FOٵm.tR?_|mtR~НbK@ WbLjࡀP f|P@4Cx'ǰ<{Y~Xv.|JPpY($!05YJ+LФ4W\(/iNbڅÎvU:…6xP**>m2|t`wOz$Dc<q;QCk >KU3z5?x~nCo?:e'|eS_v rvV9ΠOEuvc`jұ@֜p t|+&xIc['dtMȗ&8|h x/KRQ!up Ę@԰ aMz0ivG-*{{u_)Ji E779f⇦vi~0to/?HDVte( y + g@ɲ㴹gϞŎVIqԆd x 5:ŭg9/ۆboФACǯXtɡpg3vPlGC6+^+<2F0{4r9}01i`܇=Q6ɍ󴤛b^7I@:] ^.xhf ;ҷEEuzʠB2N4yͭ0>sN_9\\\(-o'8$C'L;k+ A >юS3N#=$d)JI'ˆ*Chsh;gw|w0xhL *`~J=NϏ(-Ù ]>a.*a+-m AB[¶k,gLK,x]ZҮd{cL$0Ou68yB!cK:0mV S?*<1&5ࡀԗ!p u3@AVk0pa@.?u@1VI +dXi@&0@`:Q M7Prg,ػٔ_Szĉaz ";jcSdU@x0*s1&5lB# =ȫ8|<{ p 1ꁀB(_w A0qΰ24M"̹C;o<[9Mtl O3#]/ɧOɋhe9mՕk Ldj!# ļ 8e&Q1怫 gpX~@.;4at;u `+Ɲcg}Vڄ7j/| vfO5ކ6M 2؋6xrT@WF-WrMn§oZW;8'X69w< p'd'%#(GOA*#@Q T*݅Ie雗x\%Tr٫WY<޼Rs)uŝט̦8* Hi,e;QY OlOғCyh:jWbʻeP75,Cx2xLx0O,NV9v7Ɖ % :9pw瑢駊MǿU<#p`B,#;  ̷P*}0>@t'"/:u46r\ ›=䰤KH&+^O1> D~0w)Rӿ^㬀`ހICuS?|kz";4\SGFv_鴫Jǩ,;:=uϺadzU &(,eF9S29}0t"n`܅ћLd8=u-% iID]\71cۙ9 OW:iy40K6;cČ%w3n*j:6Jn(~`X9 z4?1Ν;άa~Z Tٽ7[M*ypIx2ћt@<#xM0O^I@j㤛r]dQdiL}$es9a7L'}O۞ZZ H`Řwٗ$_jفU *r:"o0o.+|T/մ 0zzՍ:sTe *U:H_$R周߅CTSa` cbQHy]7i`=>[Ӗ*Nڼ}v*ВYX߇uzX@֚o>3X` #D2| HI5p`M+Us2'b5kpt&|Gl7{l?Vj*i qtm&/mM.MLżzs#gJ7Z 1h[߶vg3HFP * qO~ Wz`*p@q*޽]~]6*${v$+0-8+!Isz&@Qt@Cgh=0Rq4C1ʱvc\5oI39WPC8yIqV_?WWQogp? Ox+}1_ZQCϳ 0l.+T |-ۂ|b!1eTZ;K+.(S2#F;|9'(Pp&@HrQRyZ:o .l@c1eLv.8t(T5ċbN'6eXsIY:i І W)X"`Pl4\Kx"CɱPSBb l>6wK׳?ǘOe')`}F!p%@4PۨE&ʋ'% -,PkQIeHt3R,ԕc=AUE$?d>u.;DC5TDpà+DQW,_P]fl0|?70/u~7 {nM$DC1VD=NT^.#)$ 3609wDGqs͏rɗxMm| l^;9ir*zPb-^\EU*%NC_(@?^gZQ[j^#'?9P18hd(&0•kp^ ǨN+Y^HiԓJJjSqON\[Y\]G妴lS+h)6yA=t^#Ot y˻KC{$Movn dO'E lfYQ64~O(1`q PĪX}p_M Ip;%i i HzLrzu8c6G߻FM Ӗ32fa+wǧSpt_~f/8|A GevEi8@ 8 +Rˆ7&`)NT9DV@jӀJ[ꌞT)=Kb 㯫9U:6ehS%]Ux=O-[&Pmגg)Ff54Y҄iK0 [ ^3<_O˙8w@p~3Ŧb;28tOD@8 T@JlO8NARcʑ#Ӕ7DOD+d~(~'Ӷa~cD ifVhsjAw8 r`3(z-@ +M&Yߗ#l6p&MU:iSŏ|5CDG]@(51ACb0VT߈$s1 e.dR򷿦dˌ 87 *qϿ.mqx}`9:{* PVC VMQV'k@@::SmCQUW5ΞxдOd& 0 FCq;U LNߛ@꣏>vvv2?O|(,~Y iV'=}<`X gx M"@ZTyIhZ u09w͜R :rmxUѴ3ٮ.u<4?i/&HWwLV I P<#wGY{S'H2'` D˧S\ NG,^7a(5QZL:cfC? c16.H !J;(q2mm^mxtig_ҡR툍.@Df&{RB P1+E9ߩܽ(޸]WoǘxqR˫+#jg r9xe~Gg g!*P=6%Y\}_*qŖ}X,۽O1~M'3J}y<[ *0@T40? h4m@O{[Vȱ1oLu&TyŖFu% _l jI-J*R9*Ge aXWQ5ΑJg(l]T?(LNm&p?ȻEPi&+۱l@;&*MLmus]/U2eSJS@ҭ`Qd7~ɣ2&ZEC]K?/v`3s Y? w=zD(G|[.WA&\_=`V}]ZPJ9HHflZ'29PrN+:|ao[^oQ㮏d?Cq4fsL2<ϲWsԖ 4?ޛxqTw;jdɖg v0# I ɷ`8ـml(ٖ,Y[ۻN:wUW>=}{WwW;1:$<>eyR[wS5>ڏOpho; N$XMǬNELUSTfD]U% 4nu +>~:yr?rBwm<~VQඔN@Cfxo%=.Oْ,ɯLfo#<FV3f  Z(CCOݖwy|}5Jbܾ}p‹U? MTE|i;1BpCzLHNMgB`fK$t,Y@+9mzϙ|}g_Wg=W3+GQ{`-m`gi(CH>sٮ0p}74pFJ~Rp; 7R6}d"ICi<6 (&yŽO>wwB==… ֙l7z¢~ *,ۆO+ ]LZ;'y(&1/f Ƚepf.n: O4dXH #nLl36I\Uܬ+6B'^Y͋ՍWgf:kkks<Ż. ooަ} 2m<"O |5A< @Jvӡb @V<0[6W>\rf0%/\Ie>?yr}m}k^:LGk1I\ՈYi<w`|uj~^J7ˮ]G>rO[6.w F}sݼAw<Wfr &F4B\`͌jM]=P^[fN1J6xFz!G!]ZįKk ?]𡊿OF #n4ڱ ťi5JN[xelq~Yݼߧ? ̱[ғse#8x>7|`aI)KAOP#vOS?b D1A9R~\N3R;ذhNMT(Kr>H2:el؛X@.#tč:6@䱹5iԿ'>/om۶{q_̞4z)b]XUw_6x~LW㩻g񕀘NO (4o6j%g 1rNdX3ZTҺJT\۩w\_&%[Km6jV[M@(th:6fgcqngݙw[zqZXezAsvw6uPмHLVX,]6WZ4ucU*"o 1&D@Rj:HGHJY_09n8`vRFO?:w5 U6w] 2pms[i<-އ'(V)؋5t$t@7dEc=ʭU[.+| k @6b?SG49ymv5m4[;V$n_ޫn1Dž??T\/3_ѢBkpS` Ikԧ89OG 4HMGG6-3g}PC}G~yq~8޽{{>Ξ=kݸ^=cgpʩROU8  <- Qbnstj{tԙ FExjm`S2 hZxt9m\l#a񋍦㘪GM*o2>8`TlQAz,_81?NwU:FZ`9[mc`Lg D=!Dzo l:&6>,ecV-$㡾'AY\B ÿ!DQ~}4 T]t$7sn 8h|mq:)oLuݗxz@:?O@*< -uI\AKAzfX;MX#u(*MAoc>0@)&x -1,\ş*u|AVuCz\]vj.:HGf33~8`6Ԩ)XWߏ}m9/~NoGgyqGw͂?S_?.,O8`JJPϞ˓#!<0$/R}mUi2pC>=}oXߑ`:F!ROh#7"FZ6/nW;Sp oGg/Po5’CeGOE=>]P @(umӸ])4FƋP; 0XasF)k 'EL-21T;LG܈m̛ ڟ v(u|qa%.--/}}2{~:x'6onvDzOPM%y`-@:07D)K>oqƕl@iǏOARqRB>i\k[s֟GvSF΀VV@}ϻgEϻr=vGvP?~eu6#~ 88yxN b8ј} %g <OXbNTTrH?C8z\nmg&ih[#tč!%/ӓL:wxkA}?cЫO|K,GQN‘l;*kC߯z1LHlj2@6y71G0 ',y!| sADG>a[N"Ց鴅 zGd:F/6Yvrrh|?mprk+)8RgQ|ϪP !_Ws.>yzw:{ḥ6.۝ʆ+L|'`W @Le2&߯9&ޙdqz)mKD5M="=+)_sScױtGg 7&lh|?mtjãu}f}g}ݧ}]_3fx+oRj.4oG/d8? ӱ#m'4LGBSV该<miϩxC'SڣTa<bzT;~[A]BgM@učW%7J[[JF6ԋ}J]Z;?>~_6?yrO7x`1<\i_szNu,QܪP:# X˃R2m@Jf]&@NEB*ԉ_uMx~'a}qy[ #naKД8\S%SJz[ϖcoüw+'MMw]%xJ'_WCSٳGN>5q <0Q]{ sEA^F;U0rs22@ .+}^>Jy.R&7&~}!9ok5[g+P_9ї};nS7Z:?u{}cU=l[WꐺItBT`.8P%,   3I./R3$tS+xCy2O8~?#Ep=1bL#gfF\I\՟:i9mc Kp)_Zp >Z{ns| ޽[=$?~;|jc]K;7-Dł!m;8 6Auy5:72pDjc9y`[s: 3}BS*6Q&DG-xN,dNle_>ɥ^iLvF03͑s8`2#oA>gLZ^n7|ҒqSOoǃI*m?p?=@ҁQu݆3dFHɏqT@%^pFoR/c9u:upu[ ]ݶCn$>uKo=ciP6z0{#b;V i\g&*cuacRބ jpIhI3@XGHsKREX]7V@{߬NVAw;{G?|ơ裏^I˫o?V.u0 h1)vK&[̛Vr hr<@IDAT36۲tf֭[ @_G'w~Ю>ν7Ά2Lm:Q,4ky:@A>*8 v\NeҒI bN2?=wu t:6b:ma#]7+:wr05@ {4'l:-8>uc0k;+p6-|C{v"R/^Twm\PϽ=xzm8c| [lz}HJ~b5h^u z@p eB@#9mg%оd& /!3m}~)픜9E/2NPuhOIXO|(VMx p3lZř_Xg z39v2m! BzI7g%+6@'sǐBגMdȓE2=5S_}IQm5v1;k,e# %(^}Bs~u՟Q7^ ߽cwܡ>O1Jɿgqsxػ0![R1nm @vKcNt9Y}J? `ܵO[$Ɍ_z-K@y@yD E SסcFcSBf\eC~-[߭sw',I\5ayHR@uе_6ۧ9uNu,*k%m~v(ϋ7ގken Xc>pIhzΨf^;{ϺG3z~9=3~?݇.//VKK0~O .o}[ eҺz? kkj|nox×LZ\:$7Y5'"d@$ BK#9m$atHRNmz2MO`92 P=2_4RKۡ(-ѱ;v m u-3z~G9;\oy7 uW=5=O#{m(? m hE^њۙ6jY9t4$rIkWZ2+)OV3+z30b.;~yamڲ~K_T'{GS+ogW]kUc_MCesXOM|?;,Xd2wQ1Yz _t&2h: n ߈c ?dl63Џ `!Lc]XyuBuu PĔ

    *k zM)v`{]W40?,@fZ9qUv-X/z>!Wc>g8|xX^WTDcӑw:UAN (ΈpU˔ dhh˥u(^}SQ6/lWԮ--ܢoF-,Rϫ^{͉ػW/C[ޡMRd`۠OqbxtӰDҔ^@ 4#P#ޮڔ=j9Qf'u.K(ߴd m-_G<>6IDȤ}As&Ɏ3/krbۀ Oؓ*+#fj@ ~7`py^~&[q7ݺ߶Jǀp¿^aCT>ԭ3?_pCK={ 5h@pڄs'}]bk%#H8E3s2 &#MbH>_ Oēh1|F,7gBs"'E۶IuPx>)9uj>p}_f@/IWI\) ku;:wRyUwbuOM7;C=~k-\=7}sVG]}7 L< 8ma{-pe cN# ;'AAv0N Mw_x65zD4lKbS| m6bT3y<!Yn/xVLE!@'Wi2vư%#MK-ݓw|p1dyIʐ"AN YX`6]J :F+M 9tWz nvܢ?0=Ζo]}_WRe;/y˕WZ[ߡxR;:NZVxzYLib8됯#ySNhjY\ZHLّe tlPR|\۩Ewdk6byZOG,[I ku9Y_vnNM-Yo뺆yt 绌A*Q]qjsAN3~߰7~ *{Gٟ؊pWR?VWsTR{orD+upR?> Z_!^3WC7f/`sfӜ3R 9أ+3!iR13N\QcRbNܡ /'M~aD(ݑI֤6g:tO<V WaWMGDT9T \9NgK=מ=?ͩ;OCӟz坦GT,8m\Pչ 8}TlnNև9s;8p൜(QrvpHs?&9,1@(j2*8X1ݴSrT) Mѳ2p&z +Pk.ۮ԰'3A+&u]U1g I\ym ^+)< l~,SSٜt0l>30R]6G_}y8o\Z;R̡A8;ǒPM}|b3 PzoX# ,Gt~Q]IGhhLfH#vbhe]7Edi$)2\U HOzy+t DHXJF۵$"Ow <.IٵK,ӊ ꨓ';|G*P@y^w^/m0׾5u]w9>v}/.}W:&e|{d3Ut=8^@yZ',죍m\Iu$Φ#0ie!}Hi 9ela"!:y][G̮\`_ҫ/O>}}?0ӎtBFe0R8A# 8$0gXeneU/`A&U˝4$4=וCe#$/;|G݊N)uWJ/̹3رC}P_һ?~9~coC_;<3y. 2 I{+AKhdm$6jrK:`<@"y =/ (sI?E4c<'_n=a ^Y{1cGⴲ6C$ǟ6(g65^AYw=Z>)D\S7tTis1Է^,Bԇ}PrnA۷o/Fq{>k9C_ީԭt6[H@p|/\n[Ba<۽ná$/9nx!r½>*yO?E"E~vCҭ[㜜BQrh1s' 8ɨ Hve3UU&TW4}t%u#WIyhWT3A'D+`:p]VN+-w;B?s~''я~}Q'A-(:J)(uC<8q]8&p[a'i}D {s@L@N);^I喊|S;Bz1:N FtdcKثLH5؀JL)vji8T::_Bp֜i$3A } vmDl&V?Eb )U.U#_-AjD~G on+?>|d(_ߗ xzYa TWdTxO+!y6ig}&9h^4 { gWgpkd HZV gvX{{\/bz[ I!&)xрnPpJP΃ K0%A0`Ić:1Z: ?~^[}?Q [ v?я??U7wfgΜQ7;︉X]_Q§v m?L0ìX|.8e݈U7p~` v1Ɣl&gg ]}-&].K4ҡ$yԖ􈗊iW7\ ZHn- %#VduP.[R[Iv)>Isi& ^L8+6(]AG;!2%%2QbM(S^p!B޶mޣ>rWG?x}$9rD}[R++++c+':+c _ۖ+B[wa/a>ĘՅ9ha B^r30C_CY(+'e.8⡯M'dP0Ў:D+ÕtRhmlɲp/v.`Ԁ#t aiq܎w+tD Yl$ ^lZ$ǃmS'rTX bFx~y\`H=t$M-I+A'Ha%xו: <}AÂC|A]sŇDnM}_Vw}#~m=^<3jMJXȦ@ 蠁I @I~ &= dCM.9; JfAwLixF2,Ox>W.SuWc>œBkV#wxm)?v<0 Q8mx= ..o(} K4+KVO=7‹#L Y[ߥ[P/AَS`~A&!:brVzECwMMOmEDk/NVoחRa>iU{]k06yS@w:~CpUx}-mV^iuU7x\TO~/kS9 %l1QjؔMP&_X iB~nDZq$h.nHݴ.f}g\fڱbn.xMkB= ç}IOWx7A[tUIQ2V fDƱw]-Z1t4[cq\s@$a`ê6B$a!Mƞ\Z к IIA}/NϞ+1 @i[T7&,UQ]wk}$^tIc=u g< )IR\F@kP|Ka?5pyx X9:0`:tZq[]OL<0%ra uNqf>Jre|B9I?Oz6Lbݤ!,rq^ {c΀uq3i5&GxQSCLFpH1Iֈgt hM(!#SaSEB DK1P0'aL&@=calO= kjO#pn\_8kVx+? $+?yuw~[3\ *o ˨h$lU< >Ee@Tm9)UU]ܶ;n,3foGh\@Fekq:!YdFNSkQbmnj/䓡˝qBb4pPF"e8 oax>g .rl:F|տ˿( [?VOضg؛9Fv# *|E6`}fE+\JGdB0Ohr>Lg 柽(d/ڱԱӤc1,ZGegQE1`q |8^NAp&oLpSN۳R@_#(RbWsGPȅKC]]Gt)$_X 8nRk@%U&mC`M6vϿԩ7?+W[~jnҒg?٩zCY򓟨E}C`]~4o~_0P_T }ʗ*(c ~H'Q1iA]ꦽ;$v//P[pܾx =ӧ sաG99# >t9ݵV\'E2zW.V|`08ܲ0}h^r24R }NNEw(![HOmH?do\t{MIi{ 89+(INio 8v@JacMʓcL*w|A{HpS6KxH v$Y2ĀiS4 3K|.B!?Ah8{{|{MWޫn~cE}ݧ-?zG K7KV/oq-;Nb$Njmczoq6u~_$9y@KV/xC\&!x|^8~ˑ].O2>#96x̯Jm=Ss#:~ϰg6Y(h@ Etyq^4"ZS.w)'"{KNd7k4((L^8ڣK7Em #qI_simX)oׂ`X!w JLi7`8Q5Bpr,ŰcQtcֿ_9i7-;oQ^q'bˁ}C\#o}}]?|/X;R,kPj\iۙ ҀOja6Iʒ'E 6}IeAN/ 檭8;bhkcO!nڕx1G>h> @5 ֜G|I  k?]ӶdN3-]кʪ.A%X,17b8)6eͨfٵr.ABa`O10اƋrX9%GrNAqDmP#A bi5l}|00ټ_Wұ߀YS,ytG?gyyWCu$[p߼/$/ J^oYFgMf) Iـ2~ Lx$x :u 8#[큋yye< $%RP7nrDܗrT,cM6c(1 t 18Y|ѯ |/v6rtq =(hA%8bWzV zVt5Nއ*.ۖv$~}a}kFw}Z\TkΝS=zgE:zG+f6CІ' CUO 5uC_*zI  =1 Tk0HuJp:P ~Fr?<L2F:Sa ǝ9^wKH#YlEpqVXi?#38:h.*iWƨѭdf>ˎMc.WyGz Sˊ6(YH1t"F' bLv' Nҷ c_>GG=ؿjmjf}‚w?޽p;{ʗK.'xB?Wśkt2x7aŶ5׆*ո03/vH+k2{)ik&|Ӂ4'=1 <-ܑtܽ(790y fv4 *« `B<)Ie [びvH%fuŶԞm7=˩+Bu]߿Çտۿ9go'0"CP;OyGK7w7a+M k dѤp'yW"@N:@, rvx7=pz.I]3g#§"Q I% (n";_q??)r f(.GgjX۝6|3p`kH4شd_F[+D%۵TAɆm!}Ҍ42qJ@U]:r;|n] \(zW6clڜ$],7='pF}\yk7 ,!;`L"rtcN[G𳾧u=AW8 ^I\ c/\E$ =C\c撳c6ۊ9/ᇞnJ/Af yxWj>kꊭר[]w },o_W8ӿm\P/:00p)HQvnn-ohzʇKT6 }r!`A$yA2 DfAiA>=WM:'  1t+Um* snnId6yq%§uc7K|.B}[ˇdBxab EqEAaAE Kbg9nq2#\&B ȵ>ң9nK{R2y&`B~{1Ĵ%# e [ǻ8i-`'X,ywo6;pO'ikkkGU0~j3tן@urEo#[}a 8NW`}Z 8}Jڰ_)ٖ##ݲ;ɴ8 h.۔e6i 7wE/oNu/N 6S@ ojaqα?Kk 0hw)g//]СC-weWZ> C> =ԩSbϫW?Lm\vc oS &AX8LrI]~m. AUAEn`Ѕ<6Ea6Y%D\{Zh05dqWA$P@)1Myɭ  M?t豑.+0e6 PBb9'R;_Na2i>rD'y@ xA'CWwn#cN3Hi:R8IY)͜g`ǎ߳gk,%3|Icl\ZSO<^~0<|wQXv\ w?fʱ7]18=C'(cS]R) P7q~ մ]N:Iߌge ;*)AB@0erpЏ#A֯4p@'9ȯpA.q6OJtԅ-~w**%×mD-7|_[#Bf6~'n<|h1+:.8H~u Ȁll:9Pbo&_yU<P,Q!pLiA#F'I!9!>Q_|2. Cd7Ud8۩>Pf'ɖkc! w(O l"Qy6ب*1lUMGe Зm7o.,,89P vloyg}lcq8q.%KӿaZ#KpAB1exb큉"Mk6Z;t @V`m@~&MGsH6߈a0YAu6 ˷#B!hQFO Qny9fy:_|H؋Q?ğܔ^$y )eaբ.Hԯ]1Frv ۓ3W-[ .5hX:P0X#Q J; *Z΀?'@2gO?^{`~^GCwoWj-=c c#tn S $ Ui|zqRA1m N _h^'U`ck= ZCkH)o1;Z}(*HDC|ifdLg%8y@K&r^25g`"hF+I/p =Ln(at+iE |ѲkÂO)~ 2gϞU>z'{';x 翶(7wI$JxkaVc;#41⡷g[#h}q}ːȖgRVAm99w.?K/݅sP?'ÉgF(afEX1c}:ޙoe&r)b Ǥ6vP5`92ul]njӑmY*҅DA)۰hE<HrI:Gs HJQic' P:~>Gg gaKzLf~ d<g$/RM p%&lQnhwNfE#ɎD#82*Y9-Ӆ/bVVȦ:DG0p`)~Fpx0֕nᄈ@IDATwgQG:ނYxą ZP ; sΰ㗑[*Xɮc8n)_rz4pߘ>@yЯ6eMLFjR$^) 1X\#pCBSinO܌g 3ܪǔdb|LN X' lNq.uX.?["ke(YQ1R~mgl?s*;.:ck {df t&>?x`tw֟۸>pխP;.9.t|Cvj3s;f 2Kҕ xP̀uh1t(Zb^ǂ^CA^ N.zlqeI Wm\܎GU:]z6#3}:T'UZ, d)iCx&zBdI% ep~*|Ro. p;|F` \;`ѷkR{oRjUCs0cJ*^ ,a xHY͑MZsnb>PkƧHV}ā, zV~,'s1-FT8F A䖆Ps3`74fZ&x;PZ,f &a)K+,0ԅ=CyPkb؅-LU k6d ,kj0dbNπQE߷WN4y l: fYKr}]8s# $+D:xz'OO7r-}r2zeUnW&^<rN299dǎSoju5߹ ç9z*C?/HQ`  { /5|}1Ǡ$cLWY4 NjsfmC:pv?8'$@y"H+),NWq-`raiQI{A ChhƖ:_$- ?#?hE<@&ͷGNm\S[#ZSKp5s#%݁Œbt.ʄ9Q̜kS61iX>Ƚ3|,qC_]]~LTK{/w?-c 6oim%ڷτc8O?i m~G4'Rb!ksM( wqb@9"HHZ'h!px[@D 6 A;L\7mQbSz{ v^tmc^P-'VP F""ñ8>eRrڬsCd9(ȋ LfhP. =d tS v ,|o.SKkكPAal?wŵ%,cP!BPIC 1D°Ms3~t)XP$VlXi"~K0cDCd l㾢FyI2̗!9q͒c zZ(U њ%>[XaMFT2pHE͍Y@_1v^C|2Y'9\lBcTmlUJSdʴe-\'Ί'K 'IfN93e'${B+ksZ I]S(j_|WPށN_]0a_ZBJ ]Iؾ 2U S*@F5ȸC,+jd>{$vl0<_IJkcA>q-A cЦJWg< e%BaJqUso 7dO'{xάϯ1ѩQU];ϫS+uksPxCw}a_/GVhqSմP Cp @|u5o~qqt ~ Ĉ6MAgp_ў`EdMfǣQF.uڠP0Q 8($SdN2Pwu}_+E;"m^dНptxw:踜5 d \EiuA+6 y呸Ơf"` 'gϞUgΜ)G( ϭ3}W{H<`hAj;EC 1F,"V1u'tG04H.O<6Vg}G.zg" `c>|jN X@A; h fwδ k n@ *>CsLx8T!tV<sb&{mv _,$TZ;OŐC~pO-WGH xKr^$ḦehՀGEneC3=gϟ?VVVԹswUu|a ~ק~_eBkn(Ǣy-kvC.ܰ : &b@_$R%JkTp?,(2fl#H\cb2QIL]͐-AD# a!4r d/Jvc2ذYx o깟3@e&K3v)`~ќqI2$}:(?\h5SvmR[9x5 >P875MЙN- K8L5J! ["$\B^`pTwD fN@3 p&}9}^S*W zJ?{ᄾf-~*u o܏p\w2G/H#G(Q6JqʇDk^L%[R,`j' an[_I kӬ#k~|D6\ژ-zGDDl.ܑNC,  k56uέTgP24y4EY `AGEmyRdP>UcC6__G\_?L'ۤw}PU8"БdɩڐH8F<"]cפl6;3P3T̓:{ZxH}*;Ov{ ^Ct|v-Pc~xNj_1A!f8Э6ʋ2#8!OL96GĀnI;M)~LP}4HЮl >Os٠Q./@C+a|j茜L6!u@!@Kɍ HyJ<"*BR!ISI״&EX8%;$g~,]KZ䜓+9O@M$Q*W6BhDg6) /z30]G_m H,zV9&ix lP$P^:_'3 dB b0b iyV'Fi%v%I@81 $-mqlPu"rI^EZ/eȔAuuxsQVۭ>)qql%GXӂ}=.b ~I6@A@}| {,qfXKWZ~$[P/"Hؐ\4<ӭR|1h(=l $f-)_!IrĘMOLr@эz`!Hjh^ۃ(Аa7?1&̂\vcf8O?6T.ӻpIKĒUbN tB60#]4<&z;fNupa2>FQR/sc׸>K,@zR!rެFɗt!ͣO {z]copg}!ebh|f^n3AUbdt֔mqj /|/6_ܗ0"`ȶf:~u@|IO%z$ timUE51_V4@P%c]'6p !XƕÒ мƆBvmÓV03<i*;-V^6:G$"S*x1CH- a^Gm9OHvI^`xr֔mx :~ 3pq.ȕ{][qy_Bb!PSn\ e!C~~I0k/hBWMf&l= |,|B<)fIF6b0HcAA|/`ib!r÷I}`q>Uq׎te =j3%5cE> ż?i|4F X_R;MЩ*/@9UYUH1>2ˬ@L/xU\6:CEwNyڰln]\'Gvv/4NLNI`!Gxåz% t1@vmS")y!}0QCG%ḃuU}Nnfq\+Lީ`6Ѱ?V2;}0k rA@(BH6#s\"|W끝j1ȕ[$xO|MNKKiE|Z/9>;@O"!!`ΰ1Y Z%FP|`&S)d& L g s9^lAmnnjʖğCBt#7{M~NDUc!=n\"t0^ AɐTl8C9|buxaJ8ljSEMMLCKm $V) @,O}]ܛ9BCt 5q[܆$Wy^v`ݐ4hAmsl;M'd P)a @M/.m: !/*o[SK}ǧa CIk:3rZSm.P*i`(f󴝍 2!g`<0Ŭ*_NJ[f~7*Nl`i?$qm##ڢ+s $9͞msfU#vC,ljH Dg W {19 {hF0S`H|ڌz<,p^@.SwR \U $bqM5+#YKNVbh}`8&4YFAUI:_)(b*aq쒫8£˻| [ _q^[c@= :IJ>k* >Ium>ol3jHXXۂ@0oj @b2MGԤ-h14xDCS)"=m' ֤m]XhlZ+caL !>䇪Vf0,EblQW$Z *'H2[%¶lIɉMTY\QQ& 0>F:Ha:u|FF}! k[1a(@, ٶMWi}-xUȔShM@6&8Aي>eeyngd0KXF6wjoƸTL@YRik 6t},WG::dnZf=KF.֏/.v_(C!/Nbqx66p#,4|Y:|UnP,-Ӥ u13ɚA׆DP'1^`Z`CӀ,Fw(kU4(l͘x @>"r`bך# CplzƗjQNUsn.Eq1lWGHUQكAj<29ewu"tG.ҏ$* af7kqFw E͂MnXP <0]lF ɹA;O$ߎ$fWY'}z)ώq;{N"x "y[\woX^h`Z> hNݝJ2ճ-%`Ԣ2 vhRM r~l&g"rFq +O4ZF&VV#-唀Fd0Ω"{]%YdY>鱉-Nz6 k4:X#? o+pvp{\oz,΁DOm܅ACǁB!FDAԛ|WZjMxqq"O |O|&Ehcǂ궻~ K/M3I~ąKɠ77W9NR)P_Wa:kɊZBh&=7ՓF2'-HvPYIݞwq-4HW•Qܑ[M2< `9sQ^ޠ9xވ@^1O<&Qޞ!ݿ֕6yx+^,JKL f{-4Z@l?`'x?8_c]m<+/3L>Zg\ɳZǽ8\Mo"0˵~ |l)M=H?,puxe!AB'=ob(%c/ +I :%=}.M΂\$PT0 b<*wd=z0=!'뀳@Yg_RCs`o5ڜ1>"_'>'68Ӕ Қ$yY* *~|-)KL0k`zNA{ȾVC˼<b}kbi܌- K>|bx~?=î8Y_/r1L.ImrmeCٞlIGlCꍢm}'۾ @{fJI Z"x2,q:o}Ww۟o_b*%HJ$Uy^xp[[eX0H Xr&˵t r*"!=#GSaC,b,񯾗_ar!\.yN4EMOۀ0`@t n&ˬ#Sz%/{pTHfe9pԚCTJZf Œ[y^73/+sóχ^g♴]HqȖ}'M, :Z6<:Էop$ pp1q_@} <-}4mPB<*,PGzZ"P x?E'9D=.zJ#\1R^ڨl8&W}Z'#Xo)[+YBDx7ٳtQ].jC¼4q=pL֠q|=s32_7Y ci55ߐSh{ k:/cEL^p$=~J>f.Z/E@p 27UM{,U>תtOZ>`U 9!WKh21 3 ȏK⑔ xzЄ;2 [u&F-ksd3{nԳtFz.z׷:JFpWm=x_ 1]L@qrW""ۉ r7݄޺M@$q'w+?) u}W񪅹όN=2o[]Uɍ$}Xx.%3vw4?g7IWF#5no^&2g" =GE!vna{tڷlI vY 6ۻc_k&U@};%qN!c HKs dy6NsBu­@eW4_M~5Gr {ۭc ^+AwԍސdW#L=1 xw}g7W*[+!ގKE釞#͎Q33^[{`(DCo2S^ d} 'ޙowQ}aHq!6;6pp,Zk8W  ;y[.A[c~7!)$1wCc$:@ַȯ 87N`;pz_h$>A-S'ֺ7)OF<ۻ\׽0 {ָPjj,m\lS1}j94b%$m8E-09޷|GJu>4O세ި,,^gNYzZt胱r1IϽ1O72zq*Oyp_,#yb8Ja-r\/fWB,dHƘag#w?Żu\6|xyoŭb|?h5rh:җ4SH|;f%> ~?ѾBf1}- NRVa#UTgx34F&. E -kfbM͠Ac Mh|xӽ N8͠{0#ׇϕ`8tJIZKa%H@tIS[\dRP??oma;--̯QfFF3 =kPV4$0rct_+ $Sl?mGXĘxF/aAEBVNT.q9-H:f>$/[;  BGXֽ[+3>N>xu .-v!',=kCRz͵;W֗kMz$\)e'%eTf\haɨ$>4eQ}QFyn$A<]*q U>?V}g*OB}0߅+)Yt^geq ;6lkŚZ+ ]8J̄˜ql9k-^2@T=.:V}"xOگ#z=<dιPkYchPqciwTc{k֙ I|(0}#/+nWW<~q5eWBJiQw0'xÌ \,0 ˌ O\6Fj&Js8ZB])z,J' PSceIJq:1aMRVZl;}BsāFw|P3<޲67}yL\Uo]?g ̳̓&gz,\a T|y50HCn<-𵏵lO7hq LPثq-=Wd=wm)4lo[ U ΋&#"1Zv~\a?AN066wwG?ZzYk{kǣj|8XZ|VS1\8KN8킙/ւkg}rSԭM2 K'=5X=tL Jh1Y ZExq`Q4z;֋ēT,ʹfkE7ENubU KK-;rX9˒k4Jl[ T&KwVI5%T7:~ԅzzt='+gK+ݿ+) KkQL2ye`A#_`o~F)>ap}wn~n3$)y݌ >>dSnfn.Dl kiI6W[k؛mdl gf3_WRw ȭ0i*w/~Qm{[{5M+JRHyZ,ZM4Oj-?@4RefJyWe&jom?{ɼy7|PbG]S0WsrNqJwԄadH>:I_e#+:9"Rx(,e$df8rٸZSQ0fEjxm~qlN/wJE^:`L]_,mc-|e&a(nGtWĕCˣ^f4sб7ծhdC};7N h@LdJS<->|'<Ə,fr׏;8cj7'Qv[]k﨓}jYu0 6kFS)̉vZhsgǪLKO+[kqe䂧;BtTxq 5'ηZhOo~g}=i`9BY.WT. =鷾k,+1{5 :-X {RrQ#$ᓔ1`1=uQqɾ.*# 47_g}M&-5tzUKl{:Y,Z!Vwmh2ˉ1<޴q$^mX\qƷS-="kv)oҮH |OZ@2$Eo'~ѷȷ`|7Gy@ O棺W Н[~ /7'GJ/;dܽamSZyMWtus hNu-FWo)ϕ[K[Tt-"G5Y:Iy"$)DZY ۞ۺ`+*dI~hXᄶV%{[)uM=o`"51[x6/Gsw}9WA!4m^Pm9(ك2УJrV|K(SR:ͥx?HG*Ö$kM3E N,wRS ;4Y]r,/yazt<^ 2@hjǢ|hBOgQՄ5QмWN|dvaD"j.B(\RLcɓ {B4mpwK[6,q9@V Ea "5 00k !<\a|٭y((.*\1$)kOCD'W3|F#.( <7B4qw{ lKm֑< i}u49 |xU^ r {:v<'MO[ + Zfgx?8wC=|7|baX;pO'3âpNG=7>Jv=gMvDFHo.7lr|ٝf`HD"0MPd/WW/?K'zhlgt=OAodIYnrwň%aۉ B-df2syL-SԶ㈁VpbL#oRwRA*M6L5ާb}C~b=(Uk[{#HʪV3s+d'D]G*ķfqnݯq؊ggf4=rW{$LѦEl^ `#;@lw81S۰-_,cˣ ]x?V''>`Lj_RӇbSA.f:gWSӚjQq'&㋋xJ&!ƱFl?){xJ b;>5]yQ@dK#6@Q[\^'frN<0QG8xݥOfrPM!)G/{ޑUxmY-[6o4rLSFvi#84f?uhqX\<gv "$ڂtց 6]Oׅgm*FSt{4E~?wnBoK&|"~vey_8kmwDYDobbڛwRxf08X/ԁk7z#$ ih$ yUZRr X,8*eu;ڎyaPo:LҗBl}9d:c8ZYioVшTQPkA!)Jm ]XB7 ;&`k1u'ka2ɸ}23D?Hel-'2@JM m=EHx?;"6o;0>4j>#x xBW_ٺ"(ó W/6/\{R9 4\$pOs s=P8i},_MݬOU`ǜNhC]&z aXɌ D0;^r^bN{ =jC(u%WӖF;ke&<0 LI͢D1&}"_/"cϑh]35k6F$Y#]W ;עk@*E*|=,kxB7my7kB] \?vNT/$56Z=,bo~&.7x? -?>̝\~=?qg:8' ާ=+\qUEŶKnp1x`ZzPld]-Zn0hSMɈ@fj 3I,`}$٬3@orsFѼX[?Zώwf03v,jNb$a#;Lǁji%`ﻪ D38yҒlOzt4 R.\.yhXpI-{cky, &&* (?B]('~P-&ʴ?0ޮCV3zż\hb9ą=T\艧I46R=Y>8 Y4z:lMhnw^vAf&4gl3`Z\A>[f9(KX~H Z\)`OG~O/U5pM넭:(8帵83clFRUkVyl]AMjqudcZ4iRsDot8A}w{w,CY_g7LCO8Z#4>W,+MݍJw8n,R[Ki.GvxynQM&F.:B^0m^ Ύ\j)ĆMzDIq=zDKM(꼺~ժMĴ@ W?oS.+k?SW=ԟ\D'r&p;4ib{PNolS"w"p_"Y;H<6oh& I@[d#d'@7aֹ7 >6clhs\GYa||bo(U++QOa a67 +Q,JiPJ8/֮oCI=>I9aBbPRh jE#uG7'nw__asDdï0w~F,.?!]zydgϷݽh fsr%^/MNF.鲺WU(񔍑UzS0<8l9Ei,Qj7^@ ^W a'5몙ۦ-^ 7+dqkYSr#k0,`ֲ7D]X0462*aE!T&SlǾoX0/뻐3{dSa "l=[*"f1 바r~P бɟ5~Y1OrC ao/ɀ2;u>wu9Е\KB{;Mҷ.Q#JFk Xe2ē A3mkVBn[0O_gа|_G<أYa'wX6,ߴپk;6 hHiYl``!G'bK |l bfEFE(8_bVH^NqHE5H}pC$Xf}2}?Ç1 3×lY#Fs 4YT7Zb\x a{-{gWqC^H-\'zFLxjJ/G#- 4)<#n829 V5Jf-0'g7TOxMȬ; =qIn ӥ~7OҶ+`knӚ2P0p>#,΄Y0kYAl6H{v8ߕ=3;ܮ>|$[ռʺ4W䍌^]\0]}5ɏN=Don8d_#" e52),2Kb;ԉ'ɪ¥,{N=҂sq'iȥ ':":kΰ*T&j7q{}H#Ti 4O)W LW{.Ts|KhߺΎI,&@d/XZʺ 兝#鲵7> (/k:Κh[F +7=1jS vs(_S;EI[`X}3=aC5.P#pMDI2jį'~4`Cz!ro5>tGvWz>r+8 u{9:;In#W5c>Pg`ֲHpzO3+ok76xX[YZ\MiR"'D6}6d7њ璐XՂD{M8T| }]ϱ$v";$TmD_g&qjSr)z$lBbySf ' s s K VF{sōټpݡ9 g[6Y$Y(xл:;WA|>?e欆œ}}y~jzTCWHQS`M_/VDyyGN 9䕟2Ay"7sZuXZA%clF$73\y{"5eL.6Q/&}f2j ldo@1o\·ć,-%'$vg' sWWGkKمςKbH_[9]EdS1M#D ŢDQUePk]vʢ$jrvH'*`b,7w'M%٨(>Yc5#cJFH_'l Ld1頙0,-Gc&iAZ 2b`;:uR,UgE'tjIBy4靭GZ0-TǥλhuQp? ]'~ыx0|;XPGhru>ry\6vܪ^Vwź\4oF]#Axqd]NɅ^/zYxveSO'?\5#9g󵠩 L⭞FfiՀ쓤VDNjKN`PNcXߚN(:F֣}S+7/kci61 ӯ)=jOރ~iCQ=GzYYyY*JqAg 9gy]B]I˿okR?$и[{{joY7cx.Au@]:yVp}\ZtLaPZN$&afECAz*bk3 g=fT~Ԯs󧜝wVG;W˩t=`Yڗ@ KF[A{ҷ40^ަ>!7PhLn֩鞉$f-KBoRG%".!-nPI=ZAt!3j4n0,a{rZ L@Y#AyF}=2n嫳Ej}Zg9! WTk̜;J@u3M\ HLirr$_S8= ߟ&~p042|ZKNgfwwf3t^v1}ꆋB#>Zp mΒ0u7 ͂{4;{6$\$-Iyiܲij츅ZVqGl, Rq%#IH>Qe'd:ݑDMm&w}8a=7#GlӈlXN.R&aJILb:+a_(&'|7ɸ{vx?M{oCǓV׶` L1X14g<^\6Nq! ,ˉcǟ rC޸-?@_;a߮X@!g}ӗ &X,:lw݉;7iL bI[m\,$:n ƨqVvtX|3k  ++R4@jUT=;YtѓzW-G$Tۄ ˋߎ'"\kn WYS~) Gt|z4p=Ozxv,ߊZ-HKߌKM'0.B_x{x` ot8A9y5y }YO[jZcS~ѺbEx=7 f"]}ل X5ECX=gT[2͂`;+G\w#h]L9Z>9z~,qMu8'qF7hhrOX, '})WO]E"èN{c23bd> . ^YM@$603He:48:?%`;rӚo6녋U X߉֏ %$}p$z]oDhS_ MlN Esa 㟽 /ݩV|ıp?g x5. #AZPZ.`yN6 Kjj?vz7fƗ{mF,qnnXU۳nj6=mT2[8(ݵ{5I] 6%nϞJOf7 ?;ld޼MNb#~R*ypy'GwG),/ZY~#u Yov֛xp k1MNUv6e+4K<065M˞&2Osz{ߺ(]bނ>^ftӥ*j58GvNq{rMۧK}!49a n2f?c.(j_ DYJM`oФs$4k-^/mN Y#,e祂TRlj֩F+BOMIbA ``K_l>op>YH@|H5>is"K |~a@A~1'g+r7 _rAԺ\<SQ|3@R(@\<-%l;[,hXnq<%rl='iSq kA _w;>l=/?t@Kblb?|~='Eq}v:7fx/e w G <#Xp1 nfiuT 5x(Z^@A1\.]-]I#kbYܼ&{G{';ca9nM6 1p>Y}'d6=g?֖Д ƣx4X㧰J r6`574 lշe<Òr5_1>2m',-fmA5CE`Zʌ / Ƭ9oԐC%%qqmI=whKJM  L-;N1̖R1\"e4A#Mrr8@ yַ}d$:x,E_A)3ݪNH/Kf`;:k{AM [Q_EH~կ?1cu;/x랉Wj^w `H۶,ްryܷG$ֶ_W-Jx A Y;Tߚ8<.s^K@iKhp%0GB jzXlO{P:Ux} D y =}vԍWUxveܩ"qV!oBN=#wC6 Oӛ9y*B)GۛXmqnޱ$6 rIXۄc5>?ȢNX OΑn%mFN6[~j^O,m+ncɐ}$P,h53Vsb bIxL ~~ZdjBwp uI4#kY5td ~#͍j㓯)/zk SHMj;l5j:o1ϷɃU{_o#SvgB7aਔcLʐS>IiieMN[rS4R?Mz>b"KppjAFy]0V) x猕}:&;\LMUΈ|5mVE&n1ۉYYpZh9Y~2iίXkɤvhwD|PIl>ƧaVvh,Q߯4~- /G z^X !sN=bL9l8%c[Wjaǹv3'k\5 PwsX}vM"Fnt6CRNxLȌ$_$X&kEQ~r3ֵG/T&ky=)_[Em,gF%Q:[$ՙ a~#>:̇kFSR}"yqXfzL&oxuBwD$` (YX`o A0w&YqS鴠Mc~2ka/.<-|4~{Fj#Ν wN`;^WN@ ì\Y^syisguc\wu}ƑSn0|3‹_曌9[޼NL ݗ( Ÿ^$1M^W=3W୲ _nP X<*Osף12l;z1_cx uv}|qK^av5 `\qFM'nJD#)d|} L"'G"ur[G .'-'bKZKratgڰat#+ 3M:y޷kw+*T):WQs[te`boY{P)GSǾ{X^I( i5nY ٳiͺz()a';i{ {S lM-[ij5LcX4{޿z>euӋ ^o׾*n0D#ejaHadPAv޺N iN >q5<rMroڠїJ1O;(MLL?5$[=u@Y9ZZV==2LhD<7 L{k:]-"ү|䕮So櫲=+ k9=SjZލ[\I9:\v!P<.tړjQ@ ox?8_ '_k:m)N8V*ݝg+?r pzĦZt[^ySt(DxB-8簎pYȹ֘ɑwh'ޝDzO$MlBh7~l K7R|FaS +\~wӠ3,}Ϙ0A ƍ{Lz?CHV(ܝrM]3MC8xf{>%bI\5g[ANiz6ofREVZx6Fq9x2qz?#|h1bcq|`cfrl/=.7d}Oy탛5mvqܠsg #_ƙqH&5Iւc04g$%w$#5&zYN݂-mV[x44Ų (czM ݲ~7ޠ`Pڇ6 eoK7 qqɘN-.QTX ȗ-U#wrAw^ :TϿf x?gVD-ľكr=^vr3eZ\,r*WR2^ oLbL3 k~=ޙi},п10eGG^\rUOf}cGҭzGL$p<߄:jqS^d4G+7n7ho.G_Ҏmԕ\z&b˒#2+Wciy3:·Wm^O"7F2o\HQ.h=CN $y =B$S'H@C|xZ&E 3^⻈O4cU*T#l $!Nkz j)A]jlZi:ɧӬ,h9yobS;,̇Y/ZKb(y^JSluoX& l&~[=Md9W9}`W\6+W ¬>EuBKfڳ 7Uq E7xrFt6ލv&ढ़[MB?K?Y3S6n nWϖy+BUU.wMK-0,hrR/MѓqlpZNP{8ɔzxUG!^v^2{d/eѼ_5J.3% mJaKܼXX=Ao`/'2{avOSI~L|r}4:za?YPs]L/% Nspk-j.<:=*ZaWCͶYu::7ygxQXp{>f_ԈkєV}QK1g~Tˮ_l+hK{!oJ}J$ONq-qB]ti0Rp]sӺgՈڻu|r}J+Z%p :X;!rsKxZr%)-c8 .z_E˦YS#-=/8L5.o)OEa]8)=eXA?YۤI[>dE}ƴ[0鬣Ȥri=+Žwἥϙ<C %qZnjq?s{yĞ|"FlZUǘ[֭~,.?M݌͓D4 ޜMʾD7SPt uI +Ei1y[ E$k"9o+)oנY//Pz ~酼XZ@-IbA.$!5&pˋQ6pUv{L)&_35eWLJOLw* /܎n^ ak=-lƍn>y{ۻl 9Io '5C\v}K[M|c`cܿb O9GjGt*x'gkc#k5kMhxȴos_ Nt0yS?y6USgǨ?]g YLe͜](-viw%\OX)΃JЭ0}`d7sܵ L<ш'iգ(*CHք,5>9-WOϏ .tm!eBNMUn"8*ziNxυݾuXxo e&Kj!$&hÅ )<C9e-#<0#Ik oX>9?D7qKa;6{|4|V$>|u +#;z~ԋ/;bX.ѲpD}rv^F ۛ&io) 4dӴ/*.xR)M|>dT lqZ #p~v7 4Lo5z)9]5yxг'TQOC v=gB;+9# ጚ j#ӾQ+`"acjCٚ%c2x%"-vifKߗQWkcї\w۝Bnψy NoLư^; .DWxz &~FJXE㾟%wŰtXsv=11M[EKUMd'B7Q?+Y)젡K.nN<)pu _$pS6.й~}=6 `K}ڞD0ev]=h1曓K N $&LlVc*(EJ6z7d1ubD6A#;[6t2?{l2{GFclΑx nMָ'z/fUQCzZ4;xef5vU{sWwϮ4ߒw.yI;_|G¨ `X2F^*k7K*n)&&=ߔkLE!%B"n Ft/& OfLS/Hyg}MOoJiY{c[2N vkI.W ή&_M-XlAG#YME?Fee/E]/YD+ lT R+-“׹,&wo{9&X,98fq/yLp 2iJěa܅9RF#Yo˽ǒX[\dG›>ocBc 2gR0*Mb rIE){!BB2VI4g|)tO84r`x~pmT=K d,d%pϘ׭;wXOek 6qK@Cm"ӓd^h'}J~c+V,HίjK:5W7xBX_%"M0 ׷y/2${dO8b>PrQ.Ɏ"L<BI8 ӽѤb*k@!ie N &yFu7s2#l[`/;|Ri+ݳc7Xtu`IeN?W`c G$g -UNC_%}QAK,I_E@z$Uu&5:}sgJ?*JΑSOfi| *T=.bѸKN$BAWÖch ]MlN/NG>XzŇߟ5vCz=QU\ .ݏiJao}GhIH]`i\: \4s\",M!MT u*P9,bW>IOBVE}݌gy#dck=Z5)B6LLMSOy4 JO^ruxe!?JwC 1—a=JÍVIB9ਔ[f9,pX _]C$ ~` .,HabvU@=H '? SELa䭠}.p7C~ D˧TAL@I |r|3r3|.=?JӾ]ɸX^3ʻ_w^l47MߛdĚsǮWߜxPszKW#5-{s&d^H_mGsTӽe{%c[/gGye r.J}fkO(wkA?1e M_g'!Nvf/sp8\3b8hzv߁Լϴ$}sW+. ;%OSyz>=ON N^{ђ',TA/Ҵ2f\TdzyXO ~&fܽrU)+<{}Dp-^{lahY 97]@}>_zcS9ӫz7=xm y!M⣋mEi?@[!v:tޓ9__d&۵?,:^ ]IqP7D'Yt;j{$lA!}]BboG~ 3a3 ĝͲd1%,jRf~.'? [Բ.Oy=ԷuPgD Uɾ` sr 5ؽ] aڈ]YԘ;g] z]Wy+|Vo}G|_ 8ke8tXƳئЯV&krZK2a4%x7@S̾zsbn ||Ծ9$F3o~ciT$^JNwy'9u LِRCli2R[A )VMXcIחMݻa 7< >Iwg9>*00yKr̘"vbE^K:aҒ(hrzBz;lk|>kfNh4(Խ{B ]hk%ǻf'~8lOo8fTg̏Gy@Wđ3^~0Qϰ>/{_s]]D fpqR}~ =A27:B*k C{?j*vY  O=N-ɰ+\qvxoHUu73((5\W+ƾ=9礚@^׌(iēo7sny=eH<<`dm_ Ӹ9RUPKxգ ܲK01')B}8u RZ}C@uBXo}7'~V_ F#n|eNs 9p{_{hIۉc}؋b|.{AyZb1`Y@vhuh[m"?sZ 󷙟k'>$GFꯑM/}}/y.(O='C.ڶ|G4.:OVy\u-g(T᭦]N}F7^O7!wxWߑ\PmeM w*S"xvjSoh-VnQϋ9].f)MuafؓONB =q۾IN`^nF#|,/uN2@Zz<]p󋴣D q>^st^}g. 5MH~t o]n`lk^$3*OnyGB'ϓooHCa9؁g7dQO%B{Zb{Šnܤ>iD37M::h:%oAq*ӃstƑA^3G 6ygJGFa#Z|ݦyhZlgzoJeF*DĨy{F$F"~җGH+آk/>On߬-Ԁ{IW1#<{eE +p$sެ<#~X ܓU4Еzͭl0Xop5El ^*ꐘaR¥']Imf!ԩvҌ2t髑Ny:Ͱ}`lD`䜦9嗿Oko=YK1[/8I+z5y7Drя^=G{My|{&tee 灕_k`z% bS? #A9tz:V6m Z rnH&_̃,GyeUdm3KblXny-#ߩX.e9jdT|L }mxp:\<%sYŕ׊úUjW!XlcCM(.7%AN^ځȝEU(xiHH; N_M$5!'T!7Ifoodgx?秪f,zUnpC*9>A'F~Eq\_.9Bm~ _hqWHtmG 1{>!B0Sdf{HJw߉py :m֢/Hu_!y_BϽ?^%m`clqf{(e O}133 o x l1cѦh?Dߦ:]uusmC$ rTn5sۭzd?/$i3f~3(u8VrC g.tXǘA@1?rA|?Nos=x?9~ Wj#UK|_b8R;EX^Vz^X'B 񅜬_TËe繗sVLol`j=Ef7$OezW=O_gC46)`!ڟܩi|aݖ6~s2`0dr@fjIS#=OrS"{&96A nD0T`7KV rtFUϬ"/'/X̜z\s0{!Py>y~+x?8 YݴMZ<!wW<Dyp^oCO=XQ+*/EvWz7FDZk#`/ 12c 63-dƇp.kDNm/lJw4B վ׆/#f!y6C|Jm3^Μh[vw=uSI16nB6гx<1Od7o["V:y$ |s`;yhkSL,Jy ؂ oO[)O<7vU3>ܸqN(/(}mv/.y{m<s+[~Cw|l SܢnD3{1 F|-b7s M.).?ɹ>r9Kdș԰YӣQSg33?°$ ZAYE絩$$}ao>3? 87q3BFLn7grsppX^/Ο̇/֧:y#(`'L_7Ya}<%pv i3HYgjq+6nJM :+X lhkS+% qay-F vO3_ɪT$Vv!'3OgMFl ˆ>f`Q3947@y,(D*:~ߍd 7𼇹bJXw-J)ǎg7|>o}Ga4ܰ1'pCp=#ߕ8Tu1Fr|\8x'{a$%Iq}l^'7Lԋ2&G&g47ДKA(TU75;;؝9T\Мwr^Jꪏhؙ uܶYG4m' &H6Q`Pd 7ffa">5LZc~Gg=|w-g9GVu7>+0FۨdH=ĵOHuɩ;B2BvXdҿ>7?i5wq9ك+l .=ǯG/InUxs=.ZgY8Eǿn+1c963``{!f5 } htڦ쓋}``\o6 hlpF&j0Ymԩf=.ܗd=W扼cjy˱A{$)41]MOa&bShfof MSN܇9Ie[A{ -ܪ&e67G^ߟ^!7m[nO-h#jDr>YKN/b̨<{{qaMQտOzO`~NܔMI긹:n+|Ƀ3 243xR3G+Ꞌ|k̗5Z$"Zpz;x+ :F|imڲlI{"(-~|^"zwjrn0 a`'ĹݙaƑy}eWRSpn+a*WS-Ə9?T=!?iѷЏ9l<9}KHÙ'HxјOt7o{ H%#zyhϤ-zWC\q6b9w*>Qfz5"!׼'X: Hj`CdҲ{:m+ۖʝiP"f+u5W|ffM+G{JmӞnN@$rP RvTBSz$ x _|ݿ'{'p3)+sVy9F֓:ccf3??#?>|MN-'MEC59΁k_qQSU86.IT w'};uڈ#@?8Tsɉ`8gtT fd,sXX' 6|KBKJ'g. ryy텂vXP]5H)6&bt]>kdc@䏣AI?6=l&y 7㰞5M_ y>|dșFVuC)zM} o֢XnƐX7j'1s~njbT= ֨=>k t*I j xN^8c,25!GvE8EiRbP ,J} ]BۜQ1sdNd˴ieK7WlB;:lUrT$m7"Yr!i`:;CAn45"q8I) )i띘`5'iXuz 0ɅgYGʤ\8@~6?]oxxɇ7eE^|ȱԼX=q~nEͯXr <`p>/u_ƯH/γϳ&x<[kHE r33:.QMr黅/KEZ$iAw^n|z#|稕(Q1`2s+Sн+6GjQb+`efAii<ڹ)'tKy.< |e=9=풝0#_ҢpRЙ2"YM/fTyn|:s:0yZcM=^Xs\gSqJ'ZQsՖpr;[Tz~qZh՜'KY+|8o|tGeŏkFa 糸E XWpZ8^~M~_ERG. kKyѪ~!p@jGW<`u隒@)I] lhӐ`h0#iRH*2Ittղa{֏A`!WOz$d4T=az+<״Ừ h_b@LIci!S`2 tfӂШ@FEJ&`f.o1SEgBX'\i|}YwwGy.?|1~|ZScstߌ O O >&7fƎceEܴC^V#<"^9Ƃ>M u&@a 3re@ YeL1(-)D)o4s|E>k=댛 7Ń>oj2%w^ %LsbZOoR%)?-\ݠ LNm~/Rf3oY3y-[]n -$ߵzo; :_ݜRnoZ'ߏhS5ж(r3et巨 hW‘ï : uɡya7zAKjB.Z#uuUg>EO05C,g<)^ {=Y\7d/•5C'&aXҳ3j6iMH %]e$}Yu4ɋB@g/\\'o`#WF#04m=A03mrGKě!8&ы"v:+0l'Sq@߄ ({CG4 Uv[;ؔL$t Y kc MFг =IۛƆ-<ь ?̷: }:~DmOWݘIo_q%/1s˚p u36(L=}ɹFy Ic;#'1a8/Xk<>^ ȕ/RA =SDΥv-Ro@} 3.gQ"Pk46M{ >[= _° k MG3Ǩ<xgu"αw&󉯊i>'sRB<,;e|OtD-4;]m!4&j2\Z0[mtnYAJSnm'- I7=%J, _S}S l1 ܘ~ \hĨ*U /A!}& 9YfN\ÉpNGx_=:k f}U|>< -ܑ S z-g<|aeaQ$ -$fhPTjP\fKjQ :yK…PN8dI+hoH0aQ3 Q=mP,m@1.֞@IDATgylLy2Ru?p+2s(cIz2. R2$o8L AQD3oj>ymm 6W'󊐙y װ>oOtAؕU?\V{t0b}hOyFGצDh4*hp6߼7 ehf/' -{@Wē{{yL><;5zɀj3yːnqwg< -Gϓț=ݓZ8lF, @PbqT^R:qc:9UD_Fc}_:ٞy}RpcEr؏.^ A9x.2{".]}#44H`/ H_b&ۆ<|)!(2]S8)}kyq{;zS JϺinл \әJg>~n?=7T"~)KJ "w缦5T j'JBo҇UXq".S/%uGAi+Mx?Nv'}mFŨ cC5X{Zcq`k j6oyZyE|&5nfX#OrOxڋ?/+=gg/8c/+rX%LJ7'b_2F^} QH~hn"I7MDs @TFސM@J$] ]H39-8Ys[V8}VnzWTr{D68R~zM0 :LLV:ƆYadp,!Jj-'/3SYt)CoaX!.]c.Fz9t=Q1V C5¸A[1hxFww]MoH{g|Vo|tGeǐ`[R?=Q85A5^\gn|8ɊXqg=Eud%׽G{=D87 nA}j}H~O|i5c8'+ʝΪwQI#  R&@wb޻"]OcƆcH-w4haZz737ϕǘ^xCr˜<\GJZ!45)gnt,d&6g3o5 8Zk}TK⛔T~OiWwn Լ:O~(0dzf& xCi25 3y?HO-N [:V ˊ8d`!+%{y^b~`_QCNVF5E Բ:s*9\C 쁅y,0@Z|U X%䱢6Z6][{k |JI)oFBSD׳hMOo%&yo"{9DqQjn[d<`:ʼ2e gs@rm̓9: <&45>Sxz} A6{ɾqUcgz M /DvYZ[vnK/ek׺ HՄd1pr4-1hhR"x?:/x"nU8Uc!8GrQ5Bǯq{ Vչm\\٣^yx=}g5Qj@*yjX̋js)AOx⤭a<4XF Ae(HV4\d㏗X.TFߜ9)LGΜxru,U5o5sW,zؓgI"aY-I+dyEP켶9Q˳v͸eۚ+[yB[}8}/)D9% HNnqCȸ,/בh+Z3':7D gPꨱg՞5 ͓#27%.VYPX1zM}OHCUwHElBdC ]H 1VKx3ڢ8WX#u챲* +<$Gǁ4C8Y93q 1? &X69>ԾfҢŪS$xM UHڷv4Har'jn?W$o".wFIrDhZO8u>iBY.`ٷ6E=tX!:C5!KYA Bmj[FR^p4ӓ$x&2L|_;bchO`vOkܾ¿4=V7z6scp9X<\}/|\FZH*5y#mIk/ΦoJfuܢ j7*&'F =.?k# Oa*<یg6wڌG{ ,|f&)]h0G}!NzfDFn0/Hi i k:n;)43l"Qb'sxr[ozx?8>/C/0 7d8U,5~`q=!|9E=Vp^VI7\Gr^g }K/|`W= ,3@yW'2(KF2}hx99g NFNM ][]}I$= N_Z5 m:yr:aɆ Nf:RjP\@I-FjMI{N-``Pm'$ |T7$ X6,G̔0D2drRT}΀Rdh+׮+tfx5-+H?QA&5t0dS-7<_+=?;8mÉ;x>U{4ͪuzfOrԔ oNa}A5l^y19?rE3F9s3cԱ&+b*uQ(yF8α6c`EqRKY]8O"v*6 \R9ϫǭVC|u^*ޚ9Ǽp*xOo'@K7+sY^+,9> /YE;3>kǸP/9wDzkaOf.Q :%H<)$͊ H:}zJȃlȝZsX:)\ms2+̧s<x+yCw:瑔Fx;I>O7 5]_x}ub Ü7ufXcdŖ'=jFGQGXA{ d's6 ?øoH^%nYy^gD9`uÞce-:|nЗϳN ~<M`c"} \ Bх:*h;)Q Py9T5i+0 lCs%dtޕf1^Td_ɞ۩|>ϰU&3'xs|;_=$7h[I(HXdo^Q,g>֡趷GgI%$f9o`ye'}AkuQk5ːg#CO΋tpjqsߴ!P7rCc1p.yԱ`iDZ0ACVuiFMr#'{`js>'+?>C=~_T:]Q[BBg}oN9<j))dq[ =otз2b>f\CMq]wqwNґ.Ga(mS=lim ̮pi!APjK)ƍZGM">tl)4Őhfs}#qL/wh6INA ͳ?WSmkl6â7qۃx?88/ WmpC3qC k8>ï?uw07\bWUyWC%kMkZeysa.Զc'JBMe&x,'7wr1s$<ȧ/#ҥ ;q +RIŬg5Rb+N(eI|?v"g-xmv<8? O 7pSL1 =s0C]VW{`xXÞsY8G<@,+X8*y>z5ܴ{m`z&Xທx\9xxEq)$8겁x:p_^#A JV*0R#J |2l62óAdgu9>>7ͭ3?ƙXu|܁+[-'gfBMD& hN-Q doI#-YfJF9R6H/3 N?w>R539|IԸ߿@y@o<x~>$eq#y{}~պuhd1&!yԐ}tfj(9'3499Ao'7'T!є[q¤%= 36vĮ7CQ/D;jEZ*0V9*kcQ1Y/\H,\]KM]6y%vg #|w'~ppX_* @?s(7nbOS<9qRC+Ǡ-=[X:ݶ+iWT wWaY=K&,DgMef;IideMڒfV*X^l+k]az+34."r<4:TBt 6 jRQ| ?7aO#c=w9}D<䔀5!ݺ{{}Acv!'%&Oqe7a1ESEN_Hͽ's;1?1a'E]~~:lVAN֌/y<|\X*~ѻe[Ǖ/4B#y6^xvpo08nֆXXAgpQ8%P)r濍wiN4PW FG n]mjnJhELZ:[y:{K,}eR.=+g~ @vo~6~PC|#DWΞç\hj/zz'q6iqN8D~Eݯd?@.VH1V9PN)ZN j4PQ$Ƒt:ֲ}ؓzHm2߄Hʔ qx[xz ჭAW<%)%6lƁ )sb mzly֓R8is%6N3g4Bo~WKmZ'sr}sYp:j.WvaݏrhI}ȥS̉^C,Ei{Fc\opNa}q|?`Ɲ5!^t8.Vڟpϕ`ps ~tf+1>4W:|2J3H=' 2dƦS+ilf`ME[:@_N5ԼsM',fj}I[;=g!Bm1 U/"0P%  Hm=bTlfpKjQ3}_dqUըnXJ; :HZS:u3pTUy0F~2̗g8K>^.31&a3M aXԸo̯7spš>L~ @np38@긑h =3Q^VF"'g̼鼹p$[-ߎ9eA~23˒a 3_17 GO=ݓ8(Ĩ[ jzׄ8j_|OW^7G"?%n䁩V񊸧XkG]V<8sؕ/rV,,o0mg"2/5ⵏt7*|217砠ۘzVgF! e{{6~XԌ@i%(VU(:3V p+hdN*NwgΌj9=1c^Ŧb8.*&`HhV 6r4/ժsAI9.6J@by~ '~POUm׾KL?z+y+n (cy'x1Gby_Oy߯. u}jXWpY^p_A>{zK?\ b򊻪7P~$K:Nm}~p lbda7Jց75TefqdӚl6`ڊ5'FkfS`~pB o t֥fKF+".3LSjZȟ'0٢\'FVZiͼ=;YZȿ?RJ+蛠זqQ&~Vc ^Ճ%nN]i2 e\l}k~p3Ly3}>Xկ`u^o<x~5qOo88">q7cXKj8㉧cWrÞW|y.s,V"{yx 4x~^4=᫡)ol H@c酾;}GR 0mwm]8ް2y q|Q =Em,d,|?A⭸ XJiPSJxM :nOj|Va>wCs,az SNy0~7dwֈ[H\vMƃD)dz [޳dN ͭ?6q𬬅۵]fCv:y x~&+bܾPaqew{F }u|aH|+8~/y!Es##瘗ø,f><E<`Pyf8 ++0<˃Y|!WЙsz6Hy'e}WH穳iP[mXfIep$szq-Pf z(*"gL 7gm}7>zfĺ7!fO_j|8i fRz 7әa Ֆl|p 3df<)dh]^[x/qȓ\L_dsW+[zx"շH3 \l8ή96%k R$g ГD9 HsJC16{8Ř kF-R4tm}]m Yrgw-҃VU֥Mw۲[-d.H` B !? <B~#Y< $$&cw[mJ]ʬ'3O&1b1Ljs}>gN>1.eD^s>pܡlZSncPY G+٫F F oܞp!oD?ʴ1yRX+jVT'j%j4B v} acb(Y7P !)H,`&![<{8ћ7?/M^qhR7rr`W:kZ1jze z]\_:ߠ[}|a-ѹő48ze F.q.g:%߃S~<Zٻ$v$ecP-@ EJnԠÕV)mkTҌ4H mKͧR&{F5@IDAT4l}gߕg=IR&:k X}HLaymTcjMb|A4UTU:8Dv[ן6wó%Ch쯷IW MXɪ*\ Jr|=#M{փoB7laXeKᆓ _>= I9{e5n8e=^V{Bx7[h "vdio$<]-E94v'(n}}wN0⡉gy0ILyb7Ygү2Qϲ7 yO}~tz< B67W3]zGn:Q=k;Jt@ȴ6AzB*5iJCo63~Yڤ,#$ o̞؛"@qAz 4Pu[+0XјY.khde<| jz=C_VUj^ ||OrS<'zY;Mwve`+ūL)ggoܖcU ,Ե@K}IC{VM:7&:̈́gn/zlM0 3x!7pSpN$/P#׮oV'5HXX[UTXo~̙<7BQR?BxfIʧ&4:!{4odZ^^ Kt+Z*ϭyWr w?o9eί:PGt'p0y`oy@̿лCWM,r.^VVy1c"p5gmԱrc r6zRbdŬڂ uҳs$f|c^aU k7 `UųWb :͎d뾨bgC/HN3<HHU/ N!wN3|5F-SٴM0[kM-nDR|g^_##O_~ 'O<gY/i IU&ʪOKpW1p;`}ʌ\N Z!b,iFfOϺ>uH zho .aUؠ1'I Q887H7ܴMntyoōVZ1"z\{:VZxAύZWGk#+ x&Ǭmz|T47xߔ'x 6Ek[ "!p"`5H]Nӕ,:-X}S4 lT Pu_:<:gۄ9ݡKLLm1eIkU[UfCoAC1j7 DdcU_y3 DȲI"=)B !/(x+B]<4V茨<)5,ў OTfu h([kznrճVx|g=fO|`@}@~o8#AuTC_V 1Vu`^_0VqX/Ku/5p9~yp2T|ˋo}D9f&DF'7Cm^LE#Q~sEHCB!N+6ǐD><;#oKNr[U)PךU/UuCȲu4*yU--ho}(&? %#̝p2e0 W?SEciؙ#ɰf2񦎋5HNvxm\դ6V!;IwfcGZ4]i-^pm*7Ο:8?7!bOH7yZ+c|^y^ly,m;u@ y千zujc+iQ6<%t=/QIGVDC._+?mg[nٷ5/)~܄Ģ~4igCsmSZl ЫSpժ7/ |þuk o-4S |u!| Е4[IM9<Zٻ$v$ec x͘9Xݘ;zN_l`=oZ2(+go )aݳjes ž|׷6K ^TUǵB} Y"MO %C yDhB]@- 6귂Ւ7B@~,:ͺ7Ma{nfjjJc$3gal#Lp+\XGπɾtD&iMRT;֦BC-[dʴ F$U%ix{\ o oD n(8F.+ȍ 0XkVmiaXqs^839 :pXpVa_ f}mۋȂ X\jpYQ$P5((+rXARK.BkfHwF+&-4XmK捁ȞIZ3k!f}~嗠9 5q"T0o_iاڞs`Զy>Vl`ޭ85W=_m;C@iQNGϗ me-f[\CKr///Y9 z/ P~\|C\V}Ӈ>H F.Խ}e/{pXgRnj`uk\\z6\+g7g4@G8gv~O&Ml*7 X݄%HJTB~o'vGsĶT,Q0]=47&P|3|V{6ckPxXcZrcZšjHvtAO =߀+a~-/ŦvA|î7Dnf_QJ+Jsa*VxLIyU|SRf׼>jh{_}o}q@V7C @A|t7 ׺g5qd/F_*09YXc- o1*8plaט1cz1st qy(K/Bߨo#`f(z'Ϯ.f6D}uAؠ]#V50LD47if]#ķG͞)MQvJ章T9k%uaό₅L pѬYo`6l=@j7MaܾW ҚJc$ l^XoEkY**bwڳ?k葩NaݎTHdk[ogx6B'p:7i翝>~'_ouZz7VݪŌ=NGrN5cc`V#>:_0!I,k||5J7ky|JF`16j pV˺fcV˙z[\i|̨eD(5`=_`Y!EcZdʳrV`#QNTQhr05HfcV(Op&bV Qгhhl $S5Yݳ$ zjXiĶ^nEwhz{v ͙ǠUWWq=Kwn'>OEq\-ky||oV1X{_MnNJ?%f<4+t,tH[:\Ӝ^Ols5oz8YKǂ1j:ѳBKVk9-dD <^JV|E<سy@VװLX`] kefTU7S*st,[ĶYzYwJ=_gY+9VgVsH-3c5{78-_fԀ46  |)йR=7RX/yј{hފ|Y+={/GuyI7 vL'zO|{+v^ Kh߬M΅5s1r#x`ê^>;K/r֞4Vr0Gǜ,PtЇK.')o!z] <s,޾FRkAN΃s\᳞"Rɬ \{ׁfN-VLdt 9Vr\ o< _7br/ *?okV.8L#\ʵ (sc[[T ͱ@C,9ۜ#7'r͊7޷̵Z%nbp )x/B+e{qR5<سKu[]C2JG9E=ɾ0 kҳy#j#Ϋugzٳ"t(=oB͇# ž9ޯldTϳְ&p37J<'o`̣:nazd2Y7gpRiMCkW3;B V;?7Mv 7*mlL?ӿ}| 9"9Ǻ*N4둝x@Sqł^1aھܰ={]J -o8xx^jh,|ϓ{ó=CGE[j*sA,~jRzTPu-mJ~A 95|,_z'Ϯm鶻2q:jUY<y\mb9}~VIaaZϻ)rFgc_9ٳ!= $\eo*`y~婀aC_+!6pg DP*Y=G2y|Y')2 U= b|l_W,;c_xe8Xyu˟koֹ݃> o+ܫk^X6翙߁Un@XŹsMsţyg&+bh`z*z|'c-E:|X Ё'tPu)-"=kuIxݫv鹩?[F /\.y %/ =ʭN5L65ZƋHY$uۮ zYgY0qfiYOYqg+>;^Kâ3eu5HgxҌ]o~(FhȑsݪJqVa,zUX6Þq3 7Nn20f3J`sX֞{LJ"4T'Ml/~r|r%E‰^,XqG+Q/,z o?D| E/7cm#OI"ɻv:r^)wqǀf7\Ӛ^.g\8=lxYqq>K Ki$o6j\?J>!U@[igg kȋB ya洐!Qhf%W|E<سy@Vװ7,bϕ^uCz3oޜ}>*OI'ڰ85Œt5Y6liZWck%oN+ 聐0{Yם] 랷kQYבoD>EnDųC|*bIey-txMzPVrfK+T 7;WOs/񘳊c Yϫ F.^S'p0>.ŢV({l]yqc7vzä:r={qϘ^̽u,yܸS8袆uK.~xʂJSjc敞K_)^"IV|W-81(A=R"& k{09Y>åE)6UX漢0Ks8)_34yqppp!'[QZ@Czqii z3 C%K`f6#D(XW0r܈_S95IN7D~?RpGӹ8=ut8ܫ3f%fNH\Gf7H|'^=I{ˇ5],jiY5OE 5YqqVOPTQ5}rX=wK<1_20_ ֜ӢCO ùּobzt(au[]CӚszwOxf![d 4z#kBfc$I#xXu]rg.ף1VG|_n-\c%Oαx=s{8i G:LV]נ| >zoA_̗:ГyYEiVRn%RԛX|Oyp/Ƭ7_vFukY-3!&]7-ݮwڦ=amWsYWG'<'dz+z<`^̽Yz4fu=W\cVouX񯧢‘HS.Ev& ȥ+1_{1%f1cz|Có 4סU0g=[]r\G]RE`n;}vu' Y4W|W&_ i\sh #MXyPΫ&CsWɯk9zlݛ!t.Iz³S \Es:vtRr0Qb1x^4c<17LO!ʞe̪<1on(zհ& 5}z'Xz1QjSf9B%ka#Uo~})~'epJM./{M/#0)񓿞x1^=e^={㿘W_7y|o<5}pfjXcs11ctsՅϗ4V&kX08Sp5`B1+z瞞1}h.Nʟ%A1ttGJdI=@!OQ XNi3{V 2:,E]yzxk n$X~n^{ ﶻ1#^l9 ϼ]>0P0Wh]G퐻[4;}wetx47->% s5'ɷE@oCQ}XA5ui.d3$AꍬUz3o kϩx{@)NoR a|OZG8+3?Bh1pGԾ?Y[8cy$f1{ }&D\A49V8}+8б =ɫ4Xk輧^\ތ co8o_ٵO+:sdodz)oy[p|jBsh ۞̭RTzG) HO["*sޫ{:°3\xWtBZ]-FנakMciUjs{s:^( se z'j͝"9l59U/9sθH >4seս<%8F +zGU647y2Rg8Wys̝>ܾǹ}|aupf42čFyJ`*|AFMHP5򓺤W^/t禥edLɳk[.#\15hhڽ>V $eF\:y OVa[uab]TSaEgo;cOpv6wZ鉗΋J"]Y0Mk^|,Rժzσ}L< 4 p +| x mw[">~5~@V|ˠb.<:0=B@U"&rS]1i.\}|5 F4]LW>WIss$ۍ=4:#Gx+\=<I_.}`e5E0Vֻ_~lds3f&f6Y1V9bW#bα/#ݬ@(a{=֍#\=]$`g32:ͮ3Jni`NJK'%mJ\o [1uhVX7<@C+U76&gpv22+V(~5AOĵmCNDaʨږ+-7YO7{pbNI4kbsy;%}]VY t3@Z(Px-sN#CyJzIX2@BSfRfk , lj ѯ'<︼?e0Ԛ@\^ g0Y64Q144um1Vk^˛ C{ bA9V̵c9f<c\#ƪ[1cp½g-69tpuph'HwͬD]͏qAɬMB~yy\VV5IS,3033@$wzdЯ@>asz/&?+ UrvA-<A9ҳt`>z+r Ymo?V=$kKCsQoŠ `Ա:,OYNJ6sc֞=Hy1{Aˋ/.7/Ϟ=7yb <9g3XC'\aWDq >#.gnn:b9$&X 46ky6_-M~"Њ<ߠ0uZqb p0yrZܓm 7}}Q񮿦P62[(0G15TTڒUX~X>w GĦ "]{6y'Y9W[ :fha*G[<'x {BoPJؽ'Rh_1x^a+uST%۩sqnHm@W[T/қ}|˿]X|wkjWpi.aČVsH<ӛY#={>#}uTE<< uCcpH {71\1ZވeeⒺ֒c57op޶(=&,ޤ'(( lM6϶ds@ ƅ L0"l6y62(?G³9)a&qiOҗNnݳlҤ_gl$yvl |O{a;+|8v8ĆETiD*}TqU?B!oV_5:PS'OخsЏ[ p+RހUlK*` k9 9۫9y"PT9THtl3dY ``[W2t |`h#bjкgnh-sN#JMPuñBYn}'oox~2{ңiެk·< kFXcٔU2U gH{ʅՋUs80ceN$>k[qαaՄ#zXƱc9&`%Gy;O?{~%w F/1tM\t4zո\Ini kgX[5pjaQXcz}|-?^#w]>MYle2]T8K vS`-/nk, p{^g cVk)w[Mnl]?m r+eP /{+</HVnU0$Y;ڡ:^vwޗ劢 k%lRPHϲC5@k<NJ Y=w6;GQ2hE#67X ^nlαS[//9_ucz1AM spE]Ktot=qdno( ֮q1=V}Ɲ<ɯ[ *ͥ8]i9/bFqT<txafoUm}=7UKZGW *Dκ;ٌ<;|>Z\5&{>oˤm ̮yh}QۙUj{@6n'mF/|_OҏK,gƷ.+SN98.F,qMbI4Xc_3?giX5EZ/+f*`+Z<'F7Y;׭CJ>Oo0\꺶7Co#8f~Q+Y5^/ҹVh:~,ܤV6P8W$ nc9|j95'8+_Q3u_gp+R^붊I4]q 謉<@(PFkno6J&e~]Ϻ[O_% 1վa՘#1_>Z`BsX=ިmc=JW.3kWC&s.BrabgBY1ׂk *`7`X.׃VO+_M"}A?ȿo;Nuo 91d<z&؟G%QIDAT>b֥ȿy}szˋxəo=vvךD4Y:@3/BojY3{Tߜ93EԎiF,x-{}݁ۨg="\8S I#_ߊy{TGKQn)]Sߋ"Bn}çsh(GzE+,a|By'hN}=zQjY\=<)\xpY#6RpvQ1E;(VeW4+A sdz1J>*א{z%:+ϻ5M킞8JL~/M#WOH)'cպ\oD xX=]$6k q"a XE  Z q~WR!*d+Z<`+8VM8rk[}&5UcN$4ZD1ƿF;3@ػdѹ`WksKh`CU?R>,ќ K 7Gl V /=98ٟ˷O.O9r ŲvOb<>s{g.C^0F7_0˙Opp:1@W'6Zg,Il43]΋]U\~t<7M<{r=%Eϗ!L㙟 DkP½|/p#//Ӵr(ۏYV-KêysliX5u- qXYGb5kTA k X#՞7#׭}.x(z.?^?f4 u(5sxi%8\nF\r}h˷~~ 8OQS֗T)A3)䁧׎ޤ-Do~ixp]x !}NNJˎƮ v;oҴUʈrІpjQ}o[e=Kê8җ \Zk@p/m4š V:Vs3ƊBc3[{\aǺM<'s78Ol^cm D`鵗om]JO x|`;OtC 'p 0< 0!$>mL@?>1 <i^].[Juy@0%8:ݛBSZW#J.oEݹkmB6-J,Ok.l/4>32=o=r闬}E5 >O}|+ ~y" ڏ[[}wg<K+Q./{>v#w._k)O_ϻ9v 7=_=(sHo3HˏӇ<b8G\:njb1c *88G5g # Ʈk<njb1c ʸ٘5o4 csXc\c ׭ت9< X7{q|~J~7 yC䛓|җԭo=#P}:E?_I߬~7P*2= )Z)8}GZ^16e~DkFٳ^k///EP?kioEQ_@_Lː_~_d7=L缽 55y'֭ =F".gtIt#vO>0&ڔ̛ />;9zؚK}>mwWDQg|3zRH#f|{}caeU^ӱieѱ../8wEǪ o累ȥ4CƺOQ~׺#?A<Ź8ϕžޚ;=SZ}ff(p"֔^Yݣ]oq 6ausXqF#s3VlDW.rc{u *8G\:njxajVGkEf񯓿ދsc>_#Ɗ31VU >zXus cբs{\Ա ڬ:\b1cp<0K} hb8V̵cf<9`o\c=aG<>Q-<ֈx[1טDZHo  X11cfbƲnjx1E<°靖ٓ5Nr}i?k=g9|ós?&|..tf4f=Z{™uH3GޏZO{pie{kGw#t=3 =4UU|31ŌX]Տ"ވ3?{pf5#x<~ʵ^=r== ϱǝxXO{:\2f&flD;aM{1 Xes,s={30wgo֊&y0Nb>{qVte^lxr8Fq7xͻ̳gy9AQGGh:r̂Wk"6󕾠äUsOUUq<3X= w>pdO^ѵ4ZExGcyZ^{#\pUaXJbs3fmug5#\G1.uku\gn/q'bZF"FJʋro ,:1~uf9Gca4g kGjοo?`3*7‹`\Fp|{8yqDX.^:ce80,{0fo|w,z/f0?V9`9.b_$\3g8g,Q 9X8Ipri̵kEqc':QngC?3둞{3zOm%C=7/}%{ߊ {Lff^(?;rƨgg,! ^=/qյw=>{c?vy{t#}9\=u|{bypÊsX5ƫ~/(1{g˗YkVg̨`(9 hZ>C=QQngy k:i2 ~u^~o^UfzQ~/pv^߽|VtW8GkyfG=(7[59}sW5459;‡5f{E=t!'}UsΘ9{=Xk%fNon/_<kVgu`lp^5{:a'1.K=^8 r8Z8{9R{̃z/{iXd2uF_ȽY5^|j#g4K/}*NxqD5'^:ctXy:^>>:i V.p{N}O౽h:_m߫ݓ{r}Eؚ{ٳ0Þ-'k5paOGp8xV_t\s cVxhMGY彞gza(9rϋ{̙ "x;Xa{uz}uOGat= k!\ڽiuMZgq-~/9p"}򞿅?vo{qXA{x>{[gzH=chhkM[k{񢺌ؚժ8s}N|Fk}zy79zdzd'X_HdzX?Rk=\<#Ǻ oaV4}q1ce:uչ{;a{:^qG{hF|g1Oe} 1ã1gTsV 6Vݪoy{VMtƚҎ4f=\uevs\izzX9G\1Ϲ>8_<cl/4_cVpc8v$^ki\sF8ݶ Hm폹<7Ony-pY<^߫;ўlGfǾ4uu(yu~0^߫C[X&\̜q oQmoߚKk\sts=1|ڳZ^:8{乢/:Kq{:Q_9Xtt_Zco?irVt~-o4+jV=!\\s'u;錴^MOW_z=@<^azVOQ('^3aU8Yg{^uCê-ncfq#fԷ'r=q{:XJ'p98j cZOoih%€:p5[:Vm`4GzQ_r1QOuts +:O`*Kvpx.bΥ5uxW4-0gͷ,}=||KۓjRW8٬Q\o?yXG]|a=^UX]^#sDΫC_V]pz~==9tezshDG-k:9ރd ֌zs=O'^T@N'uxbGQZx10V-O5{Z^^|kżVc{Z#|gixuFq}hrf愶^К[^/ЏjDq8WO{uh[}ã'꼇ftzz?MkWUNjǨ)5a{=xzaWgf~=nau]LVGx> ̹'Z=^un<uH-&c9F_V]9V]tZ^ma`Y5e]8==\1hlT;OK;=^|__qp#YM{ڽFpƫG~3ӛӱVmF[5K3`kέf} '`"8tq,:Hsգ(4z^Oyzz|21hQpff^W:Gzffx^FQ?}gUW,Uhh~-q s=O<;~pǭ Q't]#^ ,^oUkEfF>#yEz>E4xp(zֿ.|Dz^GFu8z^o7y9Uj98OII?X '$O:e>:G=8uѾ|" 9[YcGq+<8O51xk؃qWcte'm'bffҋ=l|M10"\B mMl|Sҥb RtZ(̣{wi+Xh:_mjd@2hCa>Yo-(J:y.륈z_ [Grrjwrfb-8~'hԗ*`聥&A,)gQ6ʬ,?߷K. Wz" TeҐF뺆;30s)s`Z5Ѕ.X*JOʌg /"p'G ))^*eOґXj YҢȂ0וjxnlvm~;M@ $MK15D^;Nŧ^P [c03`-Fc2i<<c#xq)|"ayJU{iȸȁn[7>9LL!oy\_Io:@ABCDEFGHHIIIJJIIIHHGFEDCBA@>;853/*%   $*<    =&e5e6e6e6c6c6b5b5b5b5b5b5b5c5e7e7e7e7f7f7e7e7e7e8f8e8e8e8f9g9f9f9f9f9`62h0*$  r  U6FGFGHHHHHHHIIIJJJJJJJKJJKLLLLLLMMMNyE"  """&&& ###X9HJIJJJJJJJJKKKLLLLLLLMNMNNNNNNOOPPPP ''',,,%%%((([=KKKLLLLLLLLNMNNNNNOOOPPPPPPPQRRRRRRS,,,333+++###  ...^@LNLNNNNNOOOPPPPPPPQQQRRRRRSRSTTTTTTU111:::000(((%%%$$$444`CNOOPPPPPPPPQRRRRRRSTRTTTTTTUUVVVVVVW_ .555@@@666,,,'''(((888cFPQQQRRRRRRRSTRTTTTUUUVVVVVWWWXXXXYXX^.999FFF<<<111!!!***+++>>>!fHRRTRRTTTTTTUUUUVVVVWWWXXXXYYXZZZZ[[[`-:::JJJ???444$$$+++,,,@@@"fJTTTTUUUUVVVVVWWXXXXXZXYYYZ[[[\[\\\\]b!-999JJJ>>>444%%%))),,,???"dHUVVVVVWVWXWXXXXYZYZZZZ[[\\\\\\^]^^^^d'-777III>>>333&&&(((***>>> bHVVXXWXXXXYYYZZZZ[[[\\\\]]\^^^^___```b.-666III>>>333&&&&&&***=== aGXXYYYYZZZZZZ[\\\\]\]^]^^^^_``````abbd4-444HHH===222'''&&&(((;;;_EZYZZZ[[[\\\\\]]]^^^^^__````a`abbbbccd8- 222GGG===222'''&&&(((:::^D[Z[\[\\\\]]^^^^^_`_`````baabbbcdddddf=. 111GGG===222(((&&&'''999]D\\\\\Z~WXYYZZZZZ[[YW`abbbbbcdddffddffgA. 000FFF<<<222(((###&&&888\C]]]^^RV~[bcdcddehhfffgggE0 ...FFF<<<222'''$$$%%%777[B^^^^_WBlNxNq[{NyNyT~i|\eedfjjfgggghhK5 ,,,EEE<<<222((($$$$$$666YA^____```V]bbbcc\,f,fdfjjffffggghQ6+++DDD;;;111'''######444Y@_``````aV^bbbcccc^g0iileeefgffffW6***BBB:::000&&&""""""333V>___`````V]abbbbbbb_rcdddegeeefe]6(((AAA:::000&&&"""!!!222S=^^^^____T]`aaaabbbb\acegddddeec6&&&@@@:::000&&&""" 111R;]^^^^^^^T\`````aaaabLx^egcccddddi6%%%???888///&&&!!! 000P:\]]]]^^^T[___``````b e`fbbbbccccp6###>>>999///&&& ///O9\\\\\]]]SZ^^^____``oa`abbbbbbbv6"""===888///&&& ...N8[[[\\\\\RZ^^^^^^^_ki_X``aaabba|6!!!<<<777...%%% ---M6ZZZ[[[[\RZ\]]]]^^fn^^xT``````aa7 :::777...%%% ,,,L5YZZZZZZZQY\\\\\]`s^^bqT___`````7:::666...%%% +++J4XYYYYZZZPX[[[\\\ra\_jxS^^^b____7888666---$$$ ***H2XXXXXYYYPXZZZ[[kg\]k\V]^^b^^^_7666555,,,$$$ )))E0WWWXXXXXOXZZZZaqZ[j\W[\]`^]^^^7444444+++### '''B.VVVWWWWXNWYYYZv\Zj]ZT\\\\b\\]]]8222222***""" %%%=+VVVVVVVWNVXXXndYg_ZZQwV[[_^\\\\\9000000)))!!!###:(TUUUUVVVMVWW_sXccXXTXZZb[Z[[[[:///...((( """8'TTTTTUUU~LUVVw[^gWXTzTYY\`ZZZZZZ:,,,---&&& 6&SSSTTTTT~LUVflZlVVRv&\XXXbYYYYZZZ:***+++$$$3$RRRSSSST~KTVzWnUO>i!XWWW[`XXXXYYY:(((***###1"RRRRRJazrrxrruh QVVVVbXWWXXXXX@&&&(((""". QQQQR~HĿ@i OUUUVVYbVVVWWWWXB###&&&  ,PPPPPN|O~Q~Q~Q~QRogZ~P ~OJNTTTTTTTUcXUVVVVVVVB !!!%%% *OOPPPPPPPQQ^jRRRRRRSSSTTTVdTTUUUUVVVD ### (NNNOOOOPPPPvQQQQRRRRRRRSScXTTTTTTUUUE !!!  %NNNNNNNOOOcQPPPPQQQQRRRRUhRSSSSTTTTTF    "MMMMNNNNNPTOOOPPPPPPQQQQcZRRRRRSSSSTF  LLLLMMMMNvpNNNNOOOOPPPPPTjQQQRRRRRRRSF  KKLLLLLLnQMNNNNNNNOOOOPe\PPPPQQQRRRRG JJKKKKLdoLLLMMMMNNNNNNTmOOPPPPPPPQQQHJJJJJJ\NLLLLLLLMMMMNNh]NNNOOOOPPPPPUH  IIIIJTnJJKKKKLLLLLLMUqNNNNNNNNOOOOPP H  HHHHN`LJJJJJJKKKKLLLl\LMMMMNNNNNNNONL    GHHJXlIIIIJJJJJJJKKZrLLLLLLMMMMNNNNPL   GGGccJHHHHIIIIJJJJKt\KKKKLLLLLLLMMMNM  FFvrHjGGGHHHHHHHIIIatJJJJJKKKKLLLLLLL&N  FiFxGFFGGGGGHHHHHQ{YIIIJJJJJJJKKKKLK,N  ^Ha`FFFFFFFGGGGGJvoHHHHIIIIJJJJJJJPY0O Lĩ\^NæOXTTSRQN}L{JzJyHyGwDv>}:>s=p;o9n7l4k4i2h/g.f,e,d*c'`&_$\rMN'P###SSSZZZZZZZZZ[[[\\\\\\```\b_ZwhYwhVufXvgXvgXvgYvgWtfXxhXxhYxhYxhZxjZyjZxiZxi[|l\|l]|m^}n_}n_~n^|n_}naq`pcrdsdsdsdsdsfvgu9hOL!\$YBW~fT a&\:2cE_$`'bjjj~~~zyyywssstm`* b-\4?oKy]Jx\HwZGxZDvWCuVBtVAsT@qS@oR?nQ>pQ,_@,aA,`A)]>(]='[;%X8$V7"U6$W7M1bqstardict/qstardict/pixmaps/qstardict.png000066400000000000000000000217371453553600400212560ustar00rootroot00000000000000PNG  IHDR>asRGBbKGD pHYs B(xtIME {Xo IDATx}{$Gy/{ٳ;YVvV>;O@ |!c;|;y?csA|p6ƁXzއ}_UUYYY5v*~^^^^^^^XNy't~7m{;n~ (D?$]:{!Np ဈ@j>y@q["sowD<At^g :U3 qksW}~[rƏrlJ=B/zEDVgQƎH'uʢJ@\h[XNX= <\WQ9N .>?sGZGmfK,~p,@)sQVŅ>\J4nt>5V D}@qAty'lT,:c8hv;VoY٩[;hMkׄ״55:8zk ~K<~ dm]\G;}k199iM=&7\qtYȏ\dcff=k(w]7vM<b"a\~1Q,LU }b1V.:ep]7& ew'v^Z .C\;n1p C=nvIMo `R"B)G묇, 2Q{0Q2S:+@y;XTe +ꕟjyCGdS@Y\|Bn03pΛ=P1 0 8v>яC\ M%D 3Y@:߬Nt^6e#bz~0NNYJh.`eeѣG裏vT&tdd j*nxyN8qpsKJKjb8( aKq0}S "yb!v N p0Y@ |͘ RFc@}ށ}D`l6 2 P('."bB!#N>pAt" xK $mBqYPCrAAD=mcM|v4iN)ZtezXpj eFyK8<ٜ#voX$VR(NzSŽ}88m լq9\'v:_>L?xphup:cc#Uz6s8(m '&w\fi<(?J&}j1;H\rCk]2{vS{iN<pQ6EN{W:1_.B>F "x%>E)}\J „Ͽ`v^D P.<=]ߥ"0;"pU})gI>$|MS'pǮ灛f<}Am)luju&whVOw@fl]Sה`iqWZp] ,pK@6q}ާ6T *o Sr 0Z#NRwg ! 9!""pfxMPXM b{H  u׋-q`e|]QWG$nyc'p h 8VDn,&[,@uY^iBi:pfQ!Z wĽcV`*ۦ@9 EvܐA'-Bħ//RFخTĶϨЁ@U:A8s y5Pv!YVqلb[d߹ \XL%aAm}.ZdzLܙ@bb! $98 nV8tCvJ58}t_b66 TGd9Dv`vXn8QFخ`"\Z=1`h\ L#` YA!t/qJ`/o!#ÖBX \Z=?rvϺٵŖ<WC+NWZA1& cl u.l"NTD DJ0ok}/X}a x8c*ohR̕@$oTLh@LAb53:TQ#9 FE "E& Yk 0:U [: ^s9`#P8!tE{َGXgqSCl?6me" W03̇ͪ-bj.0 =_\_ A^q2)j (*,3eTLaʰL/ v\Vq(bEr{5T. K. jDQf kuՏW W* S ب ȡZvk$hDZ@GFr">YIbr7՚#H%>LNN9 lDp Ж J~F uam̌u⍕rp=9ņ\&#\ZnN]#"t hE48*@!o ~ӢY6&Pc2Pv *tmϜ}[phc(QITh V` T`,!h@6}3& 5潸{sy9:|G^pI<,ΜGt9Jm͎ O,(6Ja*@'+ l#`f!ɓzc>MbN88 k4='?>mxIToU9ܻy '? _BF3F# 6(^FBW5'>pN;dPBv O Ke`vCGƀs%ށ~mxIvv߅Oq)e+lpS1A}Y.YiۥU0jtU`϶x6Z;~jqBnzz )#1Ĺ#ōq%*I1NjbЛWpqEҶ+-B=%H|au]u҇KKKkJ%y^X9=jwVޥACi $0MD \?_Su9_y4X,>:v 8fP&lRQ||ӂ1%`̝T+e/\~ltnScH6JOcKw#j{b:rGg療te70WpU x#G$ڵ }jI +% NfldO R}5K2>JkR/+>ݷ!-wM)l@ f6x7T4'uXf d3YpzLkv`qeXrd8|G|+qRgѸ<5j4V+@ 'u,I$b\5]o c\EWk7Qm{)\4##+̪i[XV nRxry&/RN-<$X.ߏ? 1ӈ[\,~w VFXf r dI+^l޸f z8?zz2BP2$L7)uJeBYPk WpäӢɊ KMӏhow^T:{U al#L MiQVQ YBMv< kb!UgޯZb-paC  j#>,2538.׀r/* \_r1\Z@ou x2֓$U_f:73k q~M:L4y 0 ;u_}:[ڀJCp;&tn*Ev߲pNk"q H`I nh$"WrDZ/FT+@&NP)O19_Yʖl6g".Uາ-_1f Y3*ūQfodlE,G&OS v`bbB{sN2( c@H |>rSQlm[aqrWv.@"dA%42eID8~ /\@f!\1(mgs}C_y([\# GYWy><&}~Gm\?2D< 'p@Y0\ F̰I2u\0VKD?1Y8}.P.IdzڛfY B;B(4|}9Kpp8nމ177g>o~3/_'0TM_ 43YAy~CYD 犺1njoPr`[~~Gމr9m|SC&fnH\J[7 X5-G|f)h XY&")T݀*P_Aq>&'~ RXO0sGL{. S [} {àMkUAW$M5lḱJچ"E#|n{o=fyرcGzxg羉Ca(tOT}P(AIà_Med B\Adk 텟;_7ŷtkbI_Em=ɦ QV1]FZܜqx2og_],Ƕp=kĤA wJʤN W|/m܀n< 4 "*{ߔyB7п3/--'FsLݲr5E)@; buJP(-8I"D~2pfV.(ZvZ zp3z4Z#Ý^ZO\,ҢaEt@잀`<`mF%#(?:=W7lő @n dnRwP&T0r[֤H& \F kTX@+@#7qTIsOdj'C)QD3+?tY.@r@55 5ԣY%']D'` QDOUxxc!OP{XRA(.hT@԰OV5 MJbS$DBڪ"nd4ֈ$žߔɯֹD椉5A1Ƭʂ=z9aaHP7EdP:Xh0q~dAߛRH\5jK*84܃Ilχn :[Nx9 ٔ0ж0ihgJOVEL rjMSJx)!3v[ fCmt  6 %y_'{q»3$Gzo#Kn!zN +Id$>Bt4룷d4* [ p@IӐ*Ū t( (m 5R 1`d}h,{U. l`tE'==Hq 6a,Y 9IZUՊɊA0L5X297B?}l ohR7zwL]S| p)\,9 ` ]Hg)ޏ&T JO-#8)n@ [U K8HЃ-dA책iɫ<OI$*B҆{*Dٕ1>dO 8n0E?Ŏh|?6%]fi(``|(E\>>eIzXnw}8ro-lUS/cH9r0kMnD%r,RƱ!_PsD?,"0=+|;`$ȤJZ ʿe(Vg@ӹD"H 9Y,C}cG|TNs8瓲Ol.4H^j'qűTLID%c$`قր"aG=YjebƠ&bFt* 0{U7EdPV$SIDAT1,dܫ. RHIcX20iF"M$ )ט,Fc;߳z~^ wzu_ 6 qKtg˳e; 8ޓ;>5Z]"'Xߔ}jT,yYT B"_S֎ŐێeY9M^0c\ݦ}.qJ&aLf?M̠iO&ɦȟ|SUT uCIENDB`qstardict/qstardict/pixmaps/search-filter.png000066400000000000000000000220101453553600400217710ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME "'M: IDATx}il׵MRdRKdڒ"[b;q^-8/{@H ـ3q C yx@`3I y%kuƎmŶ(ZR$KfdѶVJ$%RdUu3?X.IʶD6(f/u{wι j!X"XB)mR6BqI)mFBH9D)HF1J("(m̶mʵrO\B<@²zB!č1Rfr\S.k- -R" RUvB" PHΞ=Y5L% Xj 1sūSN;)]ҕ"! 6pm|B)a#]]]o\ݦ&DT=Ż SQMRM===k?/8qqe``?>00\xQBd2 q$ … q˲ ˲֐@kk鮮7tӻw}Y m&+GQm0::J:::୷[oeYgx#Šy{v\p]Zp!cE9畾MMMҥK0:: }kӤⱱ}}}wܹ}Qwٲe}ݯu]l'!xfRJTU%B8}4AD#@P|qw}$_eCCC ۶m__t{3뮃ŋ @QQR0ΡND"7엾~2EUȠf6ضmor{g_%_644{{ ~?qы/RJ: Xl8\:L&_7G?Dl/:BpplB|pp_߿gyVݽz?QJO|[/_~Zws-#RBǜ=+{ցs~]vO~r@Ju]Xp2ߴijD5";w?߿%(*|/${_:^H$VZ˗_GԎ;>7mߞze^2hƍkJ? !~Í7fP%0?7Ϝ9UtZF{춗_~/ Y*ny۽{lllRtRD"c֭ϵj y衇úud BCP(O:ŋGGGrBƠP(@XZmRFH$*NRD"566lٲ{M 5 b1f>_{O~7)oŃ;noood "qo~n: eY˗//hlllkR e(fP(eYkG`b1HRn(5/SU톆c',X{inu=I)5׬Y]b}=zW=1/C B:_dťKZNeنt:I H4hss3D"0 e뛦 B2 iQmǁ|>RJ, J$_u]]+&c c C4|az*!m !#H?L4m`Rlp2;410 s|3V?d2)8{D,YoP싈daYB5^WŸmQD5MSb5 NhE9 `&XUxmLIX,\. ˲ι-(@AQ|,GcT*5hFy`D18xꩧz"4M˴瞑H$׭[|xx w̙3^z饾k%Pud81,HOOO;D"Ý$`|7IsRq:BA:#!BtpI) =h&E1Rj !h9S望0A@!Rp5ܹsnu݊wޙ9͎|ʿ*ؿO?￟VɪeP('Ʉ8DUUiRuQDdRJGRJ B8RJ&8,$*$bB "n=[?L3 (pB9Mh4Z^zuFu8p@eY IJ|g:y(xጂR2Ƽ=ѧT[f ^mr@D.зV+yA̫e\N]e͞|WWCLZrرc;vk.Sph0eRɶmS rRO)GU{oJ)!Txü_ FE& [J)HĎFV[[[q%7CCC`ʖ-[Ҟ2=oހ_2'2L7d2 o~րRJԛSޤ !2UrRuoR)sy9)l݉l6{je۷yϞ= @PUd BHdW }bVzAL' 򇁁PV$+Vd(?~hh/W=Qu?````^qߛE9|ws.ŢI)B$)A"<čb* +w<x^hQ.J 'xbٳg^ pȑ۷o?n6 «tRJ|SʂJL0Mp#$HttCe^FH$b绺L7ٳ'[,/]TJKlْ*柉,ɔ3nTxLG_vҥ`<XDZdI1BӟtQ__ߟiZ~ɓ'Gvܹĉd:H]9$CSUިw@_I4MwY:7 2 ^pa.JBY~}ѣGkW_=nζonn*14?ܟ9,JVT#8TGeP\A`O\3^2K'z{{B0 KuRH&6ݻ{}'_(ڵ-[) a d$XUKo wF|U _)I},`k~P(={ؾ}{qppo6t1k3onzZHM钔9[D# 6%.}ccc񑑑f]׹v4s1_*׷g`rߌbZhAa.0d뤔0 MuEQJÔ>H !/{I!a|29bqMʆa]]]ca؄|ǚ??{-6 ¹ ~j\O]l:A{H BQH\5LBr8>)p8eY%!_?To/BO2_y?Jl@Yn_nnnmmmB " \.g9#@w} s~$w.\X`YzQ4MMMݻw8hN:M)m馛,Ab Z',N o"zn@!.E)pW?k T"-XZhp4!D(ׯtرs [o!V]v"RB0F !%oT̿\a J7:~E9gΜd9ZҚq۶s/̕>hm޼_vL"˲is.@Hx +1,qҥN&jTx'RMTEQ4GoWt6MӶ,˜I?00BUU[4%(sgyɓg⽞8EQ ˖-%%&BD$hTUU@H=BGRJ۶mۦmۦc~˗/7jj555e5M'|бcǎڶ1ƬH$RN$]vg}SN]{ZS/putt""QUz j$!c,!Q rYJ%V,E\V)RJ!Tl.sΉ(4"cLj&܄Pͷh-^8J(Զm, 8hYZ%-8s1cBUU P#_Q4/c -EQPUUKEQeYdʬoƘV@Yf.nB0O,".LVu/:j 64@V]T@ ETb6IAwcP+q8ڿ S?A? <˩܀_![~ݼ{LϦ 0A0o:! L]`/Ո? "OWl@BF}ts G҄OT%nA`𪼠ڲa)PxԪ<@FSf HЭ(9D|-@F3^A}&m*j*B ȕJU@YRq?j^@XV58{D@>O`&3UÈb50P60e>c bP<@HV:9F)F}hV ( z5y8?Lj` 5D${xG56UQ = CAP ika#qPXUasEuX$ UXIDATX̪g_H)AJItp&~`upԠ @)儽y>#Zp]4`Z@= Q7P,QqOe_8IZ:j- nt[ԣ|&8}Zs%^3uԚR(Xm*qR&Гի5Etj~ty$a1Sz =+(Nb~;lI(V! KVAY}ީ!a[K))"2)%R*sbF墱XٶBT)%CD2#DJIqqN(\E0cfê,i9$$=:f͚8"(n?DPZ*Pǡ, ܹV@ƽwI?̹;WK0=@JիWk 7кzHCC#m9ڶ-٬Hv.sl6[xbɓ.\8*=@ dw # ^ Wcۏs!dc su* %B|va#M!_ 0½8Pv_=?}kN3ٲ,)6K,w ZU{^e C|#->pB.ZZ etwmы@>pxȨj 3׌@Ty@000 s (LA4 *S)~:<˫?M𔄀ZW>(~*_; &p]kx?̠%Q@֯>ϞcIENDB`qstardict/qstardict/pixmaps/speaker.png000066400000000000000000000344441453553600400207110ustar00rootroot00000000000000PNG  IHDR>asBIT|d IDATxwdWy97T3ݓg4i ID`06k[6ڏwmYl,b0`lFAPBaFyz:s~\]=ea΍U]u}s{N-۲-۲-۲-۲-۲-۲-۲-۲Px#:|]N30#޲z#?P ,v1BUBU(Z<(MPӠ&L(iFkG;>q? ԇu{6.L u)J@R3xs_<{P=1:":P0ؕvf/Jݮcݠ BP] c{&+!M4RPryޖ?6p|&{IPX1PT6%h ./j1T= Ryo<١]Ptwt6A'l,mL(iT;m|{7ΰi `J?/-"HYq*45!?ݱyabFQ^A(Z`j |rd畤1 ͫ3afIRi膆t#4 N) 4kciqplfJy~ҳԫh{>Tf%C+8{ú9ds]I|ZS㍰*a}d\V=__(~RyId6n`n9z{ꤣ#a4&j acYe GJ4a нs4ЄXU7u]t ]P sS;Y(Zzfc$VT?Vs %NUVS? ߿|˓;/߈K~+})fN%7`C7r  L~jW 23;wRHOe}h7$/F]xpA:a=z8K?5w#Bw@H M w}$C@Rcvc'enz;`A_9\x^&AEU±4I qgO A<yW$?V%籵5~-]54 )|%RGz#P @_z8Q#8!1=5Mb٤RP7pM6l:|x ALίh4EPs9]lU?qL*! @t4֨+cXjWG݁ lbsx*鸛p'׉{)5} |p-, Z۶4M/?'u5R58xI/UvUV](&d?>qrgׅ'`vf dfTAn)$1ZN  P Vpkq58n,݉;%i&0M˲XXXV8ܷp/dl ?,_Z ۽J6Oxח#S6@ +AiZ?B3+HG"QbHlj%O {?鴐W$4$ &FH$[/׽.6~b~n?~{Gx} xY.{JPLkfɸ^A.X+ح鄾 kry U%qN t鹛DzT0T+JXK|!ۯy._}7J6ٷw'p'+E\wa?|G^s(x`ld~IAr*鴅::=o~E1DTt@NlҏH' {q\\" ӺvK]mWө Ai~r۲PJ143֟$UNqϷa\1 cDҤkEV:W=^3{s.9fH&5*rm p:0( >_s|"$ΫD7) $I6|dGءrv6nl6U=ir"q@o=؍e;\xe&&&aזpsb=f<+[ R7(^[@*g&A\hts,^= }e7ųd:ntƒjlWh:peIvȦNKfYv /7&jb҈{*Hq"AoCP xJ4M4M@ Yo:2k(+ԫ95 l\WCd}A*NWoM~󍝯JƫojrZ1#h-U"<ē؎5`<>Bm!myCP<>VD?˻/|b׿S i"F4O^4L2,=}Sa~{vfI&eG34r^.oIdX M֬Ϸf,K ֯_O:ĉ/ZÍpLd o/bnO ^$B.h?tU~$Ij:&tn@RY8L%]}tՃ#4A#+%ĕ?2 K]59^e|B;ғ :;<\BkI9GڶcAn;v0ڭQov,ʷގFv-9۶m;F*EG@:fb|ttl U>#OR }Ch^i Azlce6b1J) C24P{!H2rT[]%xi}Qr7i=v9)_T\|鏍uD\l C4MLdzzjJ:BT\B^j坌:tq7T& Ь[+~_qK*L)4~^s&O.?^WTx ?ɧl;ipsNR-+P+"! 7*(A."\_4b-KMhd2YK̐Jܔ8 _X΢Q~ɉL&Ʊe=OOw͟~IX<3k;k'NJiyA*3 ٷo௝@xň "!z-pZ|_Nvlj x4G;=bx5?W--dKFQIGQ|?JBma/ك864|t6c;R}KU-W|P)fې KeP$l,;x{fffKs0c*ǽ.TM3%B[mދ]N^ܝ"wK;yCq{hTM:9r01L!lBr=;4>r L|Kimxפ&mEDPZ*BPMg{Џi61E |vv5,!xK2RGZ4Q ۑ"qI8W3I$Q4]'HPSY0/YfaYcfrF!㽟7=Er :p̌E.)g ԰c:.]w1[2gR>?9)zDDjy*!/'rKSf)yGOq_c 4ǎAJI:A)H$(,Diid6WA#Ce?x_~/%p^fX95Ѥ;A6"y~݃10ϡCtq2Ir:} T _2c"~RuAa7(id39?L$seIMXV9t|/h_Aanr~ç~6/6X,I{AjS[m[elz{ ibG4ΎNpım)@hDBIrq*wHZPVi4HЄK ֠/ x^| "y,3*M> Ug7ϡ%QuOW7m̑R#'&aө62O\/-{;^>rXMJ^4ha$$~(󨗟gY\%^@Υ(T>ƿld[,uI Ie/pS<+>Uk9 -$[S $ ᩀwEFh5N:DL::v}ش AU0^ƒic1ytH^<+ّf,*sHoj2L=SP? pԍ7}./krVIiL#A: ^YrecfzٹFgM}*`jz 5MLx'nf3^O A^qstvtk:aklQ)Nl8IX? LNM0r+~HaN<@^ͦuB醎nba_157}1 YdbA̠'ui2Իξ২T*LMNDB+/0 3?L' V" z<4t A(ߎ>=J0c903}}e߁mBWcfұ9v9=\ O*4[I}q& NUmXGW Ybj. L!"@a?^񓘉FÎ,RsX% R$Dd'"ix0-eDc !~ 8S'T wXQjQNT:\&ϓ;cJL3guvqD$<9{/Z_UU_2NmuX-UsF ͙cfBaH*Z3 1241j'Ǒ<DPUl]7H L&k[ˆ47Ġ?"$B<ajfS'Xr B*ZCb5?2]MEM28N-]w"q ~ۛ D"Uk.MbZX(qjl 6mYQh@j=@u^ػ65U*JePtCQke?6^+e$w;ك}z1W 8]CE@)-"#:?LQϵ,,@{]d3YD\ [0&`Lxu% s4IDAT!̗Xv+ϸ|tgBBGcB`R IN=Uo#ԩ5/WD;vXۮ^q4gއ؏6GR($H߁ ]BʜgEnYq~"ZbTI.OH$I%#ˆ j~X$y}6:vdӖQ 5P$Ɓ> b{;? ΊQzMtv:ALM5 /EwSn !ԏ+c %g5lpjdzcXЌPדyDiZZIl4frr@ܖA*L jG{"għam3_*qY_;[ARD:xasvL&#ucB-[Rl+&'nG|-o:  3O > -4,㋂C frCk,z-\)ё 遟~SP~~arpRG΋Y֭H*:#MTEq~jBoOD3\N!0uNf:?sۥC.S#h"#FP%b).2]Lt033q֋Yr<]]~Ph&- 4@e, 6mZZy&rz!֬^.A6/sH2vMF*1sDf&9hB&'O23}[02J쓡Elr{@[q Zry!(6 I*JIV$tcT*‰N'no>7? ;%@G5-vQқ5'ɞϳz"BehJTW{u7^0J|HaB"G.PgMQ<1S,120X.d8G6ϕٹYg$˓0hm۱lۛnY[+ZjQ9X-1|On !8v0==$ɘP)drf'X B#`}m) EKBz B8Gdn ]L=h!dJƛJYzs٫IeVPőN$@QT8px?ߏ v,;"fϸ@[m׬;B KgZgTW?qb`|bT*C6 K 춬|7`;ɲkR>:H p(x7Dǻ@8(,;H'J~\rЍ<^<ЍT؎MӲ, `Yؖ!\đj}%Ui4N,r JAGf·I' W4_ xh4=b=+osO ZY>^*aTYYx5I\ds4 U|Q|Xk<?cx*^ c@+kp||)%۸Go9tG*ǎf5'5^s-LSuߵ f\U >0K@+@s%gyopx[(J9K/>`G'{5];xDj-=0Y&F#^#cA6O}dGvځ{6PvG#C84+BO&#D@Ԥ8]u+k.WJ4 zz{*paJ)-,t7"1nEiTs%-s3<=<]6{Ќ,!+ˠ22+ O;s3YO"i5h4*;i|7<zV@~[hWS `koϦXKx|߾kVԏW$IH$eCRelt |GyX"w1$ؓ(iQ^(\J-z{Hu\+4k'Ž8g}vfTf5xs ؂H.-7Fp"@#/B˶((tHfd[Lݶ-z&Q@46# 腎kOn /=d ,!v8~8nN,S)2Ywф:$=אk%5v?0w`|ϥt Ha4f}Zsc}ɧf1+@gm[;_DMVjCX+ qt@ CVT|.lkg_ǺU^rbu]Y&v1Ԛh50.|9r[TJ c d_`}8'P$a卛~՛n@h lR}P{ 1>:+t\ \)SUU+T[{&+/F {ś;2i!m5 JJVTNr/iEݽ+'*#,x_߻wTщ6#`Yw=u*Bwk+V`u$S hJ)d ~4(h wnキ&[؀@u 3SJLlaݏg7Tejf6å -dzٻiJSV&$go]WQ%dѓu >'XAQ?sJ)-:0 6lX4 q78-:;{uYn i.MBVp6neo5/LvV|SV"crt|#k( i뺎Fгh;ݟQngBnFVϳ.hB&^pތ'4hξk[ؼ.̗V]i֭[ݶq`&DX 4bU^\K*w@ U;F5F+ùl`[К1(`Ua#*#7ˌJ-lrr , MKtBJGYpH,;tt诲q9o !k#uUE%FOfR*'"Ͱz`J=yP b{ƊYL:&l+]D#:!8\t :̣d)؍ !1=؋C;2 a^E /F=U|iGr㎝L3T5rCC+Q^f={?S|2 jj n!:9Dd% C+{µY|Ǡ+ϲtj8Q5 ~^Jy⾿YQ]M4A&+n6RKW#A&fhxpa-{~ N8),+\1k%CkGY'v :ڒ0t8 Nv)BѴ2D*ܳF(\?&Eu%OK: _H$ZuO>$O=$ uZ{C7XϊtB )pq< d% s6tvu}=Yr4n"6UEhUtYXLW$V&'G߇{ ldx _הRh߀L&$Iydnv}cGz!I308@T- ;J# $6 `4kW&Ȥ S!c[(i&fD7t SC7tWtM.ЄpPBG! 5y'Ng@jJ~q)o~7>y%%]BH)чajr*$ΟNr}tuu-1R8u4g%=PS$O[C0<\V'I RIL&pJFa+ 8ְ)/Ԙq<7/X5yN_*o>O7_,E 3A__f"v:bs |":R)zz{$6+۪q#d)"TaAVVH=Z3P`ǽ̟P~g_B+111{8z\DjU49t mՔD* BV} n)ݞE͔RI/8}%9Kfį{?*rmc5/r JsqJbHdӤRn0c]ubLi|Gѿvwm '>-R_WJ .Zk:|l&S*3r$###ggA8u7]0Mt%&/D5bاگ!*=}wqjڛǻ!?zLfB tMkzoZ23= s,Qf"J(lǶ-] lYޮZ`q}B%J_Wg8TLvRRC2"H.²lJ%j jzF^r!a^-74#D7MwRG.vl{SO_goF3?3Î)QkU0tD2I4֒\њqNk&Ng vm"nerMK~]T:*C9)+k/,ϼdD GJl˝*nvl']O=q\L/#oUTJH"ƐrQBkvzͽ IO{]Ѿ`^3-~zAnvmV+R:/"AK1Ee;Wya#Q0'7~≧ry%E}"9Tkx@{7DK'?{ot9R%ov99;{nRJN O&s\I[?f~ǎ_ '@-PۤW*)/J .4+%+ԗt;wZo|5?ٵ7߼F98y(ށ!J>%JՕ5%ռR*%Gb|H3LfIfM,%,a}\pHK\VmzUzj.WiVą BBB d̚Y{$/9=?P(DCIC*UU׿/-^XXgڟ*}@L0U*}#G+RW-eqܹ*7BHwy%8|ާNFag*WMgz J~f !ePBxoؼy/aqXh0?CXb{H?jwHhii#[.}iLg ,>)'GF …3a߈ wcʙ>}=(?,{3srd6ܗy /U|q|f| 5ulJ%B᲼8 gO\۳x,_~gJEjjF h"+kN4)ѣ 7(.UbL5୻py P5).Y3 (0뗟={XRQp$N~I~2Tr'iq=LCj@HJ&[P^uYXy>y~eK_z?pG}dڵ0'[h&a? /#?3!Ɇ A09 ESG-Z09+_|j_8G~?R81Y L3y6K[Hq 6ó+- B*SsN'9p/33dCh9{}${Fh#0X8)qK~2TAvu3TUXy+w{ _.8XF!|znS;TKjAJY1'y<Sh͌cDŽ8qR@R%WuO5B8P]Q|3<#Uқ6 i@rriNy9>{hd,b'Ì[oSdZXjƴ{:?1oƏ~MhCq{S'5{-Rkԗ !c)Eǒ]v9 J @CyT-Yr'&ikSS3U$ظ8BѢwXO?cO('Xr2##CP*}0O^x LHܷ/\@h#>5wܼLS?&X3 JC.7Dkn]N]LirVgj  `}}Eiid텕d0(';́5 On~W2ZG}{)dowIg}u:&LFaMF@%\O# nwQ?0 \n h% ?";lI~*tFt ^$[NcXŘyytǝw{T p6\lTTT1Elz(~)nǎ hڴ7Q(3M?71RS}ݲttvJNk׬ᅱPZZ['<여,JqqEȾ 2><" &k94Ma Yh A:6JMKZUJ_]⭿.nypL$<@=uKK( DB`'+Mx"Ex"`fV|x񓘐Hymx"<Zhk|n9557& \}|7F_P*Uj3qfzl%nq,|"wj7ȓ  e@ RFIu5${Yps!'L)"Lj#&cJ:C7xM?x܄h=!TҰ  eG//aEHh|PVfY*&֍^+\`D)m6E}0:i5 P|$ߏH"E#>Tj )=x41K89b(3ER7(2|ୡysYsfqJHL" %|.40Є4=s"1P:*O6!*6';}|q'hQ}@ǥ]]2 RԘ&StcX!ⷢs1ԟ|`g|/0gAi!eX)W 3񰞸X- &QPh6g>:LQ J痕l~=G_hl 1&r7Ga}||*ck# VcJ`Ah5ֶi)l}wnr|+jTce O).f=a  /TE+$zrE667*Yl-QMm#B8)'rH kqH{l kI!=n2X³A&^.V,0aʘ7oָKT^H(;sfPWIXVZFJpZK_XP>0"=Ph rTIl4`0r٣ɑ,8̩S ]{p@w\v0H?GrQ3 AqW`>.]zʱ[``%`E#.1q ab-CGe*0Y*8.:8#ssr?]⢢73xЮ`>_+: ;}52\F(bj(M!VOz XK*IN[\iy',4tv߹v ho>=ŢpIBM?-CG9 [QPcd1኎.JZ%2Vns, [ir氂K@`8 4rnF,`|WBY@wݤ# S TpR *5any[T˖-'<~T@b7XoR9M gQN4 8UO^łPt xaxG \\`4J[|nǶF BZ2q-:ZB>Shk^:X'2D9rr"HMGFkiB7l 3@x|.XZI9"[[lC^5*L%3g*bץ?͢ÇӇ(2eaS'9nzMa1* έp :w y1Ajl%쓂^LhuTްq#՝@Yo‹/ M2> cq,:nXF"U cHdШS `SgJf|[;E:S6V:vb}{G;YN~teDš Z\~l |D&P  YL-$:HY(okjkHFt-":D[MD5.\ /CXaZq ?*`S8M7HG)I&9Q0} LF&#CD ":He%u[mTOG?ӡ?&Y{"?ÒzcPsHS@EmoKmnJ2nJ۷ok|f_&ITD,€m Z41ndXS*R33Ps4h# Aԧ!%rxT Cqv9k$E#*S&l{6(EJO ؀\l|cL[*lIw] s`e}|SSH|K5uSb\4e"}QTie`>\3Ԕa%K!0#3(4ݣ=c /8=.& \A-'f,^j6E4 y<8OrNT6sh+%ЌkΚ=In#D]h[RuvӰ!jWjHFks/ {pyw 9(hY_Op SMhd9Є[/8çN)SJ]FW4"Q"MxĚG`;e.uTR:jkjo[&Gh>Cښ^kԶ} *JTiK(BksS2*}{ue]qĤD"V_057*+θnzI x"UJ\jzju.ꓖΖ3xOc>BF%;IENDB`qstardict/qstardict/pixmaps/view-fullscreen.png000066400000000000000000000132121453553600400223570ustar00rootroot00000000000000PNG  IHDR>a pHYsodtEXtSoftwarewww.inkscape.org<IDATx]yǽk]0X071{H"B"EHz 6 KNd@,%Q<ǎmGa6s8,.fYvv===3Ikկ~uLw PƝE%2Jn !$ uGJTF D)QI( j mM0>}Rʄ\ #Q&@0a7! C&@-ϝ(eyW$cAw#Xz{]]SSC-aH7oFxW_}3"Ȃ'kkk+(ʓDŃӧpEWܐzOUF" >H ۭ6B I(bq0_n Q@@EPJvިQ$Hy*(EǁO2\ezzzvH$x;VB b~<(zM% B A"O@ `>x]Bx^M=dFr͊]hllU,IDQDg j p/ F8B@)$IE"@0.Ԥh p555Cҵ=A9*)|ce7>==Brr؀iO"FeeR_7E<$It(r GH$4WTu\બ+ xGBuw7|e:LA& Y?28n q9UM)ԝR B*++u ҪחJ'I757&!z{! 66"  tjUEoo(*R$q ~px`aGUKuޙ,OVEI4]Zh(&սK  P׬tx===X?g5 .ay X k׀sq 7 odP(ylpx(E`l.x6? /i;|>|>eGc ZMZXvL3Q<0Z3(n^p (cxq(wʼn(cQ,(VX JՒ8MjLcQXyatttiY8ĉ-+Q`x<1A\x967\Vo766? QQQ#5@z͆e>45twTVal4̙ n4`WFNq <} ~`kΜQ|ZeEN\w0>CgK/hZKyRN-iPqt=On!g1C]VУq;uwm~ IŋѼd F? j&Now:<ݝ6~Ü9m4̝|3ĺh{M@ոqk ܵbF-[wE٨408GA8Wmo;M<`//i"+W{lWL_qkA&8N>:2øv0Nnތɓ1~*YS2]EߥKoxЀД)id5 ԃp- ΝxmB*o8 -\3>y nZ8di1Uc:oj8۲|, -&)];g!c֓ObhKf&~x?w$ᄅ;w}ϑM1c!tcu,ݳAIEB19%K,@>'F/_<]\^sʧ9Ƙ5F?`-gRVe8g> Y/ݽ>LƍC :Jm:=>ܱIpvn_C1_xV%9%1dF-[H?^j$pJ.?P5cr)#.% Bֿ;V;+MF/_y7[;ɮ]`ɮ]?oCD]L<cy+_~7n}۶YTkkQ]prm1G X!@<vd![-<+ PTkkQugw%[bֆ yjΩNEͤI΃ 0P֮Cff[gKKw`W߷mpraɯY@j ,yü-[4 bu ==E0oH<_]-5(>-8ܞQ@D܋UZ y(#Hhq@ ,#̍(rP R&@ ]חŠ2  Nn`۸!u?bAjSJmm`v|_*&-={,¿a}Q`Lg& W4a',ʹM={l+tjm5>ov54c t ?R%Paux<<2>n}?w$8ڊ7PlW>QvꐎTpbFO! .| -r ۻ|1Hɫr=Ėx*88ww, Mr&@/\}+8ʙwNleKwR w94[8i"[;vnhS t?ki?xҏC0L؁VQ,j 6lv[pO'qĉ\Pp[6HasADZcQ 1I~׏l[R>S$c1t^8+y!Yo&|H;i IM!'\3T ?,s|%ܺr%䘷ysI aƺuУ-ì I-9Ikey#ph 6(:6)yxG! BN gPQ?{Pǎe(͙p޺ukE Jq'qsΪQ_BҭeGs精1D3iGN8S?:W 6LcO8w/WY4 ;NKVNr%seydY}$lڔ';<~ D1gb^ =w.Û\~?/V+ԨniM0w&]\y8X, R^zBH?R,083Q?{6LJL) < )S2֮ #MJiB.j:x_y_c²2n3AhTN5P2x?!8 )ZK}}-":RF#!Sb/^FGG'-Y<RIe@!$Iµkqu38SWS`y74镬|IJ<*d\;˝'AY;)J6ҭ T9ISq,o&C)qYln_I/o@T\6V52(ap6-j R.:R.;`ZA: 3yAo:ݔ8!WɈ(CW40 r8@ G!Au_Q+_Gȕ$Z`Rl:C8 'ٓ\܆ٛgR4[7-PUX@ 3 AaqM} }5Wa#2\Z"s û]BFf0ڭ$PQ0&a$"Yy0{\rB7"A:bdlZDlZw&k@z!Ì⦋b-!,l6K'tp3vgGCPVnQJ$f5m:BJ|` Q-rasRGBbKGD pHYs B(xtIME '`' DIDATx{pTǿs7 |t2*u /% &VU'>ZjtfF#% X1yAŠ؁+I6{w'sf'9;sY@h4Fh4Fh4Fh4&^ac}XoO[P %J-x,o-SW&0ZqBVB8l i J! ?*!&GY`5Y$4q#_BB%do. Jiq$ * @9PTc$$%Dt7*ւ(l2~u/`\) IIeOZ<ߪo\@S z1[ {A*Q_MGPTc$%%prm wwV`-|Ӗ,4WrgG^4@1eD*ȳz u?իTZ&%]^YI*7mIX`\QMJW_Hv?P]8`1$$*A jw'7t2][Ь`miFЬ[}cUl[6d%fqiǺ܃Zvw֤;(wݣǦG{-!vƍiK{aXy*@{$V<LP{DTb-eUy<zv+35p Hl+T@!ď  Sl;{sfOȸURHgBP {o+b" Zr9sK H~>Gpwﱮ]2-(p*gK R c^dzbZb*DIpӐ$>HbQFIsfp0܃خ=fkr_Uf["z #4_!jcޞ1mOi5/J^gn%01E |տ'+2Y xk({qZvZ gO RT:.^0'M h]3`@aI'y, w)hBJ|2s<;5)0/zOF I{#ϫ$ a/_!! QX6e—5`RRmGca`,e\̱VA]=u\fXb'dzMdZNwV*2s2-CHl %;&yJvL"1}(َ1QߞRz #h3_I 7ط*C;:~Q,jn ά | wpC]}і.XZWVO,+e.Ƙ@ʨz[Qq;n3wPPaӭ⇏Yli^5/mrU qd؎9≋p'/@]E(3X?aװD+fl'p%)/®*>X= x/R׳isDЌōZBY$SZRcxP 9psBpU$@>6~V>{_X޲ƫq5 Yd{Ca 3CFCc{Od7 `g8(03@fr)CF8'ĕ csي=@h"Ѫ@;ܥ qo} qUuoLRbk"Д{0W<ƌo%2iE7DSMM] bFW]ya۪#b\.`9@6Er7ߵL]f@ `Ǯ7}\͕t!Qgon 'x{ߘA%Ӈۃ{|W#Vh[?rjGz:RzvfD*pJ$}i^/c -{Cx-8j`2g)%a'.o1ט dltM@> C_,鎕>us IC(Q2r:V~4w_'VHIS5]jFh4Fh4a%ܶſkX'lp)aM](C}nQXp-a>i0 CAQ!-x@`JġG2p hb<V#"){pœ<7bf!`CiDKbF`Ю<@4?O"Æ7)ng(SB`H+NEʐk0"M%IENDB`qstardict/qstardict/pluginmanager.cpp000066400000000000000000000357071453553600400204300ustar00rootroot00000000000000/* The code is adpted from QtNote project Copyright (C) 2010-2016 Sergey Ili'nykh 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 . Contacts: E-Mail: rion4ik@gmail.com XMPP: rion@jabber.ru */ /* Algo for plugins search. ------------------------ Plugins priority: 1) Directories for plugin search have priority To choose between plugins with same ID. AppInfo::appPluginsDirs() return directories in priority order (most prioretized first) If there are two plugins with the same id in some directory, the one with more recent modification time will be chosen. 2) Plugins have load priority To decide which plugin to load first. We have few different states of plugins 1) Discovered plugins: All files which look like suitable plugins. In this case for example we can have 2 or more copies of the same plugin and only one of them should become available. All of this data will be cached. 2) Available plugins Plugins ready to be loaded. All of them have unique ID. All not suitable dups by prioriry or other means are removed. This list of plugins could be available to other code as priority sorted list. 3) Enabled plugins Subset of available plugins which are supposed to be loaded. 4) Loaded plugins Successfully loaded plugins Compilation mode: AppInfo::appPluginsDirs() can return different set of directories depending on compilation options 1) DEV This could be set as qmake param. It's developer's mode. In this mode plugins search works differently. Only just compiled plugins' directories added to search, so only they will be loaded. 2) Normal mode In normal mode we have two directories for search. One in ~/local/share/QStarDict/plugins and another one is /usr/lib/QStarDict/plugins. The directories could have different paths dependeing on user and system settings. Algo: 1) Iterate over all plugins' directories and find all suitable plugins. 2) Cache this data in order they were found 3) Iterate over cache and make a list of "available" plugins. In other words make do not add tot the list plugins with already known ID from previous iterations. 4) Sort "available" list according to priority set by user. 5) Save the list to settings for future use. 6) Iterate over sorted "available" list check which plugin is enabled and load it. 7) emit "pluginLoaded" signal for each loaded plugin. Business rules: 1) Each plugin should know its priority as was discovered. 2) Plugins are not expected to heavily iteract with application on load, since we can load a plugin just to update metadata. */ #include #include #include #include #include #include # include #include #include "appinfo.h" #include "pluginmanager.h" #include "../plugins/pluginserver.h" namespace QStarDict { class PluginServerImpl : public QObject, public PluginServer { Q_OBJECT Q_INTERFACES(QStarDict::PluginServer) PluginManager *pm; public: PluginServerImpl(PluginManager *parent) : QObject(parent), pm(parent) { } const PluginMetadata &metadata(const QString &pluginId) const { return pm->pluginDesc(pluginId)->metadata; } /** * Return a directory that contains plugin's data. */ QString configDir(const QString &pluginId) const { QString path = AppInfo::configDir() + QLatin1String("/pluginsdata/") + metadata(pluginId).name; if (! QDir::root().exists(path)) QDir::root().mkpath(path); return path; } QString idForPlugin(QObject *instance) const { auto data = pm->findPluginInstance(instance); if (data) { return data->metadata.id; } return QString(); } }; class PluginsIterator { QDir currentDir; QStringList pluginsDirs; QStringList plugins; QStringList::const_iterator pluginsDirsIt; QStringList::const_iterator pluginsIt; public: PluginsIterator() { pluginsDirs = AppInfo::appPluginsDirs(); pluginsDirsIt = pluginsDirs.constBegin(); findDirWithPlugins(); } void next() { if (pluginsIt != plugins.constEnd()) { pluginsIt++; } if (pluginsIt == plugins.constEnd() && pluginsDirsIt != pluginsDirs.constEnd()) { pluginsDirsIt++; findDirWithPlugins(); } } inline bool isFinished() const { return pluginsIt == plugins.constEnd() && pluginsDirsIt == pluginsDirs.constEnd(); } inline QString fileName() const { if (pluginsIt != plugins.constEnd()) { return QFileInfo(currentDir.filePath(*pluginsIt)).canonicalFilePath(); } return QString(); } private: void findDirWithPlugins() { while (pluginsDirsIt != pluginsDirs.constEnd()) { currentDir = QDir(*pluginsDirsIt); if (currentDir.isReadable()) { plugins.clear(); foreach(const QString &file, currentDir.entryList(QDir::Files, QDir::Time)) { if (QLibrary::isLibrary(file)) { plugins.append(file); } } if (!plugins.isEmpty()) { pluginsIt = plugins.constBegin(); return; } } pluginsDirsIt++; } pluginsIt = plugins.constEnd(); } }; PluginManager::PluginManager() { pluginServer = new PluginServerImpl(this); QDir(iconsCacheDir()).mkpath(QLatin1String(".")); updateMetadata(); } PluginManager::~PluginManager() { QHashIterator it(plugins); while (it.hasNext()) { auto item = it.next(); if (item.value()->isLoaded()) { item.value()->unload(); } } } void PluginManager::loadPlugins() { QSettings s; QStringList prioritizedList = s.value("plugins-priority").toStringList(); QMutableStringListIterator it(prioritizedList); while (it.hasNext()) { QString id = it.next(); if (id.isEmpty() || !plugins.contains(id)) { it.remove(); } } // now prioritizedList comprises only known plugin // and any not previously prioritized QStringList notPrioritizedYet = (plugins.keys().toSet() - prioritizedList.toSet()).toList(); notPrioritizedYet.sort(); prioritizedList += notPrioritizedYet; s.setValue("plugins-priority", prioritizedList); /* * now we have fully prioritized list. */ QStringListIterator it2(prioritizedList); while (it2.hasNext()) { Plugin::Ptr pd = plugins[it2.next()]; auto state = s.value("plugins/" + pd->metadata.id + "/state", pd->state).toUInt(); pd->state = state; if (!pd->isEnabled() || pd->isLoaded()) { continue; } pd->load(); } } QString PluginManager::iconsCacheDir() { return AppInfo::cacheDir() + QLatin1String("/plugin-icons"); } void PluginManager::setEnabled(const QString &pluginId, bool enabled) { QSettings s; auto pd = plugins.value(pluginId); if (!pd) { return; } pd->setEnabled(enabled); s.beginGroup("plugins"); s.beginGroup(pluginId); s.setValue("state", (int)pd->state); if (enabled) { if (!pd->isLoaded()) { if (pd->load() != LoadError::NoError) { emit pluginLoaded(pd->metadata.id); } } } else if (pd->isLoaded()) { if (!pd->unload()) { qWarning("Failed to unload %s: %s", qPrintable(pd->loader->fileName()), qPrintable(pd->loader->errorString())); } } } QStringList PluginManager::availablePlugins() const { return QSettings().value("plugins-priority").toStringList(); } QStringList PluginManager::loadedPlugins() const { QStringList ret; foreach (const QString &pluginId, plugins.keys()) { auto ptr = plugins.value(pluginId); if (ptr->isLoaded()) { ret.append(pluginId); } } return ret; } void PluginManager::setLoadedPlugins(const QStringList &pluginIds) { QSet ps = QSet::fromList(pluginIds); QMutableHashIterator i(plugins); while(i.hasNext()) { auto p = i.next(); setEnabled(p.key(), ps.contains(p.key())); } } PluginManager::Plugin::Ptr PluginManager::findPluginInstance(QObject *instance) const { foreach (const QString &pluginId, plugins.keys()) { auto ptr = plugins.value(pluginId); if (ptr->isLoaded() && ptr->loader->instance() == instance) { return ptr; } } return PluginManager::Plugin::Ptr(); } void PluginManager::updateMetadata() { QSettings s; QSettings metaCache(AppInfo::cacheDir() + QLatin1String("/pluginsmeta.ini"), QSettings::IniFormat); //decltype(plugins) tmpPlugins; QHash file2data; // read metadata cache int size = metaCache.beginReadArray("list"); for (int i = 0; i < size; ++i) { metaCache.setArrayIndex(i); QString fileName = metaCache.value("filename", QString()).toString(); if (fileName.isEmpty()) { break; } Plugin::Ptr pd(new Plugin); //tmpPlugins[pluginId] = pd; file2data[fileName] = pd; pd->state = metaCache.value("state").toUInt(); pd->state &= ~Plugin::Exist; // reset it until we sure it exists pd->modifyTime = QDateTime::fromTime_t(metaCache.value("lastModify").toUInt()); // if 0 then we have staled cache. it's ok pd->metadata.id = metaCache.value("id").toString(); pd->metadata.name = metaCache.value("name").toString(); pd->metadata.description = metaCache.value("description").toString(); pd->metadata.authors = metaCache.value("authors").toStringList(); pd->metadata.features = metaCache.value("features").toStringList(); pd->metadata.version = metaCache.value("version").toUInt(); pd->metadata.extra = metaCache.value("extra").toMap(); pd->metadata.icon = QIcon(iconsCacheDir() + '/' + pd->metadata.id + QLatin1String(".png")); //pd->metadata.extra = s.value("extra").(); } metaCache.endArray(); lastError = LoadError::NoError; metaCache.beginWriteArray("list"); int cacheIndex = 0; PluginsIterator it; while (!it.isFinished()) { metaCache.setArrayIndex(cacheIndex); QString fileName = it.fileName(); it.next(); Plugin::Ptr pd = file2data.value(fileName); bool isnew = pd.isNull(); if (isnew) { pd = Plugin::Ptr(new Plugin); pd->state |= Plugin::Exist; } pd->pluginServer = pluginServer; pd->loader = new QPluginLoader(fileName); if (isnew || (!pd->isLoaded() && pd->modifyTime != QFileInfo(pd->loader->fileName()).lastModified())) { // have to update metadata cache pd->modifyTime = QFileInfo(fileName).lastModified(); auto js = pd->loader->metaData().value(QLatin1String("MetaData")).toObject(); QString id = js.value(QLatin1String("id")).toString(); QString name = js.value(QLatin1String("name")).toString(); if (id.isEmpty() || name.isEmpty()) { pd->unload(); qDebug("QStarDict plugin %s did not set metadata id or name. ignore it", qPrintable(fileName)); lastError = LoadError::Metadata; pd->state &= ~(Plugin::Valid | Plugin::Enabled); // mark invalid and disable continue; } pd->metadata.id = id; pd->metadata.name = name; pd->metadata.description = js.value(QLatin1String("description")).toString(); pd->metadata.authors = js.value(QLatin1String("authors")).toString().split(';'); pd->metadata.features = js.value(QLatin1String("features")).toString().split(';'); pd->metadata.version = js.value(QLatin1String("version")).toString(); // extra? if (isnew) { pd->setEnabled(pd->metadata.features.contains("defenable")); } if (!pd->isEnabled()) { pd->unload(); } pd->state |= Plugin::Valid; metaCache.setValue("id", pd->metadata.id); metaCache.setValue("state", (int)pd->state); metaCache.setValue("filename", pd->loader->fileName()); metaCache.setValue("lastModify", pd->modifyTime.toTime_t()); metaCache.setValue("name", pd->metadata.name); metaCache.setValue("description", pd->metadata.description); metaCache.setValue("authors", pd->metadata.authors); metaCache.setValue("features", pd->metadata.features); metaCache.setValue("version", pd->metadata.version); metaCache.setValue("extra", pd->metadata.extra); cacheIndex++; } plugins.insert(pd->metadata.id, pd); } metaCache.endArray(); } void PluginManager::Plugin::cacheIcon() { if (!metadata.icon.isNull()) { QFileInfo fi(PluginManager::iconsCacheDir() + '/' + metadata.id + QLatin1String(".png")); if (!fi.exists() || fi.lastModified() < modifyTime) { metadata.icon.pixmap(16, 16).save(fi.filePath()); } } } PluginManager::LoadError PluginManager::Plugin::load() { if (isLoaded()) { return LoadError::NoError; } #ifdef DEV qDebug("Loading plugin: %s", qPrintable(loader->fileName())); #endif QObject *plugin = loader->instance(); if (!plugin) { qDebug("failed to load %s : %s", qPrintable(loader->fileName()), qPrintable(loader->errorString())); return LoadError::NotPlugin; } BasePlugin *qnp = qobject_cast(plugin); if (!qnp) { loader->unload(); qDebug("not QStarDict plugin %s. ignore it", qPrintable(loader->fileName())); return LoadError::ABI; } qnp->qsd = pluginServer; metadata.icon = qnp->pluginIcon(); cacheIcon(); return LoadError::NoError; } bool PluginManager::Plugin::unload() { QString fileName = loader->fileName(); if (loader->unload()) { delete loader; // probably Qt bug but "instance" method doesn't work after unload. So recreate loader. loader = new QPluginLoader(fileName); return true; } qWarning("Failed to unload plugin: %s", qPrintable(metadata.name)); return false; } } // namespace QtNote #include "pluginmanager.moc" qstardict/qstardict/pluginmanager.h000066400000000000000000000062721453553600400200700ustar00rootroot00000000000000#ifndef PLUGINMANAGER_H #define PLUGINMANAGER_H #include #include #include #include #include #include "../plugins/baseplugin.h" namespace QStarDict { class PluginServerImpl; class PluginManager : public QObject { Q_OBJECT public: enum class LoadError { NoError, NotPlugin, ABI, Metadata, }; enum class PluginFeature { FirstFeature = 0x1, RegularPlugin = FirstFeature, DEIntegration = 0x2, TrayIcon = 0x4, GlobalShortcuts = 0x8, Notifications = 0x10, LastFeature = 0x20 }; Q_DECLARE_FLAGS(PluginFeatures, PluginFeature) class Plugin { public: typedef QSharedPointer Ptr; enum State : quint8 { Exist = 1, /* used during plugins search */ Valid = 2, Enabled = 4 }; Plugin() : loader(0), pluginServer(0), state(0) {} QPluginLoader *loader; PluginServerImpl *pluginServer; uint state; QDateTime modifyTime; // modification time of plugin library (outdated metadata check) PluginMetadata metadata; inline bool isEnabled() const { return state & Enabled; } inline void setEnabled(bool enabled) { if (enabled) state |= Enabled; else state &= ~Enabled; } inline bool isLoaded() const { return loader? loader->isLoaded() : false; } LoadError load(); bool unload(); void cacheIcon(); template inline T* castInstance() { QObject *o = isLoaded()? loader->instance() : 0; return o? qobject_cast(o) : 0; } }; explicit PluginManager(); ~PluginManager(); inline QObject *plugin(const QString &pluginId) const { auto pd = plugins.value(pluginId); return (pd && pd->isLoaded())? pd->loader->instance() : 0; } template inline T *plugin(const QString &pluginId) const { // invalid pluginId could come from DictCore. so check it first auto pd = plugins.value(pluginId); return (pd && pd->isLoaded())? pd->castInstance() : 0; } void loadPlugins(); inline bool isEnabled(const QString &pluginId) const { auto pd = plugins.value(pluginId); return pd? pd->isEnabled() : false; } inline bool isLoaded(const QString &pluginId) const { auto pd = plugins.value(pluginId); return pd? pd->isLoaded() : false; } void setEnabled(const QString &pluginId, bool enabled); inline int pluginsCount() const { return plugins.size(); } QStringList availablePlugins() const; QStringList loadedPlugins() const; void setLoadedPlugins(const QStringList &pluginIds); Plugin::Ptr pluginDesc(const QString &pluginId) const { return plugins.value(pluginId); } Plugin::Ptr findPluginInstance(QObject *instance) const; signals: void pluginLoaded(const QString &); public slots: private: LoadError lastError; PluginServerImpl *pluginServer; QHash plugins; void updateMetadata(); static QString iconsCacheDir(); }; } #endif // PLUGINMANAGER_H qstardict/qstardict/pluginsmodel.cpp000066400000000000000000000133321453553600400202670ustar00rootroot00000000000000/* The code is adpted from QtNote project Copyright (C) 2010-2016 Sergey Ili'nykh 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 . Contacts: E-Mail: rion4ik@gmail.com XMPP: rion@jabber.ru */ #include #include #include "pluginsmodel.h" #include "dictcore.h" #include "application.h" #include "pluginmanager.h" #include "util.h" namespace QStarDict { PluginsModel::PluginsModel(LoadType lt, PluginManager *pmanager) : QAbstractTableModel(pmanager), pmanager(pmanager) { pluginIds = pmanager->availablePlugins(); QMutableStringListIterator it(pluginIds); while (it.hasNext()) { auto &md = pmanager->pluginDesc(it.next())->metadata; if (lt == LoadType::JustDict && !md.features.contains("dict")) { it.remove(); } if (lt == LoadType::ExceptDict && md.features.contains("dict")) { it.remove(); } } QPixmap pix(":pics/configure.png"); settingIcon = QIcon(pix); QTransform transform; transform.rotate(45); pix.transformed(transform, Qt::SmoothTransformation); settingIcon.addPixmap(pix.transformed(transform), QIcon::Active); } int PluginsModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) { return 0; } return pluginIds.count(); } int PluginsModel::columnCount(const QModelIndex &parent) const { if (parent.isValid()) { return 0; } return 4; } QVariant PluginsModel::data(const QModelIndex &index, int role) const { QString pluginId = pluginIds[index.row()]; if (role == IdRole) { return pluginId; } if (index.column() == 0) { switch (role) { case Qt::CheckStateRole: return pmanager->pluginDesc(pluginId)->isEnabled()? Qt::Checked : Qt::Unchecked; case Qt::DisplayRole: return pmanager->pluginDesc(pluginId)->metadata.name; case Qt::DecorationRole: { auto &md = pmanager->pluginDesc(pluginId)->metadata; QIcon icon = md.icon; if (icon.isNull()) { if (md.features.contains("dict")) { icon = QIcon(":pics/qstardict.png"); } else if (md.features.contains("de")) { icon = QIcon(":pics/computer.png"); } else { icon = QIcon(":pics/plugin.png"); } } return icon; } case Qt::ToolTipRole: { auto pd = pmanager->pluginDesc(pluginId); QString ret = pd->metadata.description + QLatin1String("

    ") + tr("Filename: %1").arg(pd->loader->fileName()) + "

    " + tr("Status: %1").arg( pd->state & PluginManager::Plugin::Valid? pd->isLoaded()? tr("Loaded") : tr("Not Loaded") : tr("Invalid") ); return ret; } case Qt::FontRole: { QFont f; // application default font. may by not what we expect auto pd = pmanager->pluginDesc(pluginId); if (pd->isLoaded()) { f.setBold(true); } return f; } case Qt::ForegroundRole: { QColor color = qApp->palette().color(QPalette::Foreground); // mey be not what we expect auto pd = pmanager->pluginDesc(pluginId); if (!(pd->state & PluginManager::Plugin::Valid)) { color.setAlpha(128); } return color; } } } else if (index.column() == 1) { // version if (role == Qt::DisplayRole) { return pmanager->pluginDesc(pluginId)->metadata.version; } } else if (index.column() == 2) { // settings button // options button if (role == Qt::DecorationRole && pmanager->plugin(pluginId)) { return settingIcon; } } else if (index.column() == 3) { // settings button // options button if (role == Qt::DecorationRole) { return QIcon(":pics/dialog-information.png"); } } return QVariant(); } bool PluginsModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (index.column() == 0 && role == Qt::CheckStateRole) { Qt::CheckState cs = (Qt::CheckState)value.value(); pmanager->setEnabled(pluginIds[index.row()], cs == Qt::Checked); emit dataChanged(index, index); emit loadedListChanged(); return true; } return false; } Qt::ItemFlags PluginsModel::flags(const QModelIndex &index) const { if (index.column() == 0) { return QAbstractTableModel::flags(index) | Qt::ItemIsUserCheckable; } return QAbstractTableModel::flags(index); } QString PluginsModel::pluginId(int row) const { return pluginIds.at(row); } QStringList PluginsModel::loadedPlugins() { QStringList ret; foreach (const QString &id, pluginIds) { if (pmanager->isLoaded(id)) { ret << id; } } return ret; } } // namespace QStarDict qstardict/qstardict/pluginsmodel.h000066400000000000000000000021031453553600400177260ustar00rootroot00000000000000#ifndef QSTARDICT_PLUGINSMODEL_H #define QSTARDICT_PLUGINSMODEL_H #include #include #include namespace QStarDict { class PluginManager; class PluginsModel : public QAbstractTableModel { Q_OBJECT PluginManager *pmanager; QStringList pluginIds; // by priority QIcon settingIcon; public: enum class LoadType { All, JustDict, ExceptDict }; enum Roles { IdRole = Qt::UserRole }; PluginsModel(LoadType lt, PluginManager *pmanager); int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); Qt::ItemFlags flags(const QModelIndex &index) const; QStringList loadedPlugins(); QString pluginId(int row) const; signals: void loadedListChanged(); }; } // namespace QStarDict #endif // QSTARDICT_PLUGINSMODEL_H qstardict/qstardict/pluginsview.cpp000066400000000000000000000112611453553600400201400ustar00rootroot00000000000000/***************************************************************************** * pluginsview.cpp - Code adapted from QtNote project * * Copyright (C) 2016 Sergey Il'inykh * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include #include #include #include "application.h" #include "pluginsview.h" namespace QStarDict { class ButtonDelegate : public QStyledItemDelegate { Q_OBJECT enum ButtonRoles { ButtonRole = Qt::UserRole + 1 }; QModelIndex sunken; public: explicit ButtonDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) { } // painting void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); if (opt.icon.isNull()) { return; } painter->save(); if (opt.state & QStyle::State_Selected) { painter->setPen(QPen(Qt::NoPen)); if (opt.state & QStyle::State_Active) { painter->setBrush(QBrush(QPalette().highlight())); } else { painter->setBrush(QBrush(QPalette().color(QPalette::Inactive, QPalette::Highlight))); } painter->drawRect(opt.rect); } QStyleOptionButton buttonOption; buttonOption.icon = opt.icon; buttonOption.iconSize = option.decorationSize; buttonOption.text = opt.text; buttonOption.features = QStyleOptionButton::Flat; buttonOption.rect = opt.rect; buttonOption.state = QStyle::State_Enabled; if (index == sunken) { buttonOption.state |= QStyle::State_Sunken; } if (option.state & QStyle::State_MouseOver) { buttonOption.state |= (QStyle::State_Active | QStyle::State_MouseOver); } QApplication::style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter); painter->restore(); } bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { Q_UNUSED(model); Q_UNUSED(option); if(!(event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease)) { return true; } sunken = QModelIndex(); if( event->type() == QEvent::MouseButtonPress) { sunken = index; } return true; } }; PluginsView::PluginsView(QWidget *parent) : QTableView(parent) { verticalHeader()->hide(); horizontalHeader()->hide(); //setSelectionBehavior(QAbstractItemView::SelectRows); setSelectionMode(QAbstractItemView::NoSelection); setEditTriggers(NoEditTriggers); setShowGrid(false); } void PluginsView::configureColumns() { ButtonDelegate *btnsDelegate = new ButtonDelegate(); setItemDelegateForColumn(2, btnsDelegate); setItemDelegateForColumn(3, btnsDelegate); horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents); horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents); horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents); } } // namespace QStarDict #include "pluginsview.moc" qstardict/qstardict/pluginsview.h000066400000000000000000000032771453553600400176150ustar00rootroot00000000000000/***************************************************************************** * pluginsview.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007-2016 Alexander Rodin, Sergey Il'inykh * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef QSTARDICT_PLUGINSVIEW_H #define QSTARDICT_PLUGINSVIEW_H #include namespace QStarDict { class PluginsView : public QTableView { Q_OBJECT public: PluginsView(QWidget *parent = 0); void configureColumns(); }; } // namespace QStarDict #endif // QSTARDICT_PLUGINSVIEW_H qstardict/qstardict/popupwindow.cpp000066400000000000000000000126571453553600400201710ustar00rootroot00000000000000/***************************************************************************** * popupwindow.cpp - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2007-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "popupwindow.h" #include #include #include #include #include #include "dictwidget.h" #include "keyboard.h" #include "selection.h" #include "application.h" #include "speaker.h" #include "mainwindow.h" namespace QStarDict { PopupWindow::PopupWindow(QWidget *parent) : ResizablePopup(parent) { m_dict = 0; translationView = new DictWidget(this, 0, true); translationView->setFrameStyle(QFrame::NoFrame); translationView->setDict(m_dict); translationView->setMouseTracking(true); QGridLayout *mainLayout = new QGridLayout(this); mainLayout->setMargin(0); mainLayout->addWidget(translationView); m_selection = new Selection(this); connect(m_selection, SIGNAL(changed(const QString&)), this, SLOT(selectionChanged(const QString&))); loadSettings(); } PopupWindow::~PopupWindow() { saveSettings(); } void PopupWindow::loadSettings() { QSettings config; setScan(config.value("PopupWindow/scan", true).toBool()); setModifierKey(config.value("PopupWindow/modifierKey", 0).toInt()); setShowIfNotFound(config.value("PopupWindow/showIfNotFound", false).toBool()); setWindowOpacity(config.value("PopupWindow/opacity", 1.0).toDouble()); setTimeoutBeforeHide(config.value("PopupWindow/timeoutBeforeHide", 500).toInt()); setDefaultSize(config.value("PopupWindow/defaultSize", QSize(320, 240)).toSize()); setPronounceWord(config.value("PopupWindow/pronounceWord", false).toBool()); setDefaultStyleSheet(config.value("PopupWindow/defaultStyleSheet", defaultStyleSheet()).toString()); setShowLinks(config.value("PopupWindow/showLinks", showLinks()).toBool()); setShowLinksModifierKey(config.value("PopupWindow/showLinksModifierKey", showLinksModifierKey()).toInt()); setShowIpaPronouncers(config.value("PopupWindow/showIpaPronouncers", showIpaPronouncers()).toBool()); } void PopupWindow::saveSettings() { QSettings config; config.setValue("PopupWindow/scan", isScan()); config.setValue("PopupWindow/modifierKey", m_modifierKey); config.setValue("PopupWindow/showIfNotFound", m_showIfNotFound); config.setValue("PopupWindow/opacity", windowOpacity()); config.setValue("PopupWindow/timeoutBeforeHide", timeoutBeforeHide()); config.setValue("PopupWindow/defaultSize", defaultSize()); config.setValue("PopupWindow/pronounceWord", pronounceWord()); config.setValue("PopupWindow/defaultStyleSheet", defaultStyleSheet()); config.setValue("PopupWindow/showLinks", showLinks()); config.setValue("PopupWindow/showLinksModifierKey", showLinksModifierKey()); config.setValue("PopupWindow/showIpaPronouncers", showIpaPronouncers()); } void PopupWindow::setScan(bool scan) { m_selection->setScan(scan); emit scanChanged(scan); } bool PopupWindow::isScan() const { return m_selection->isScan(); } void PopupWindow::setDict(DictCore *dict) { translationView->setDict(dict); m_dict = dict; } void PopupWindow::selectionChanged(const QString &text) { if (m_modifierKey && ! Keyboard::activeModifiers().testFlag(static_cast(m_modifierKey))) return; if (Application::instance()->mainWindow()->underMouse() || Application::instance()->popupWindow()->underMouse()) return; showTranslation(text); } void PopupWindow::showTranslation(const QString &text) { QString simpl = text.simplified(); simpl.remove(QRegExp("[&%-/+?\\*#!:\\(\\)\\[\\]]+")); if (simpl.isEmpty()) return; bool isFound = m_dict->isTranslatable(simpl); if (m_showIfNotFound || isFound) { translationView->translate(simpl); translationView->clearHistory(); translationView->setFocus(); popup(); if (isFound && m_pronounceWord) Application::instance()->speaker()->speak(simpl); } } void PopupWindow::showClipboardTranslation() { showTranslation(Application::clipboard()->text(QClipboard::Selection)); } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/popupwindow.h000066400000000000000000000121741453553600400176300ustar00rootroot00000000000000/***************************************************************************** * popupwindow.h - QStarDict, a quasi-star dictionary * * Copyright (C) 2007-2019 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef POPUPWINDOW_H #define POPUPWINDOW_H #include "resizablepopup.h" #include "dictcore.h" #include "dictwidget.h" namespace QStarDict { class DictWidget; class Selection; /** * The PopupWindow is a window that scan selection and pop-up * when needed. */ class PopupWindow: public ResizablePopup { Q_OBJECT public: /** * Construct new PopupWindow. */ PopupWindow(QWidget *parent = 0); /** * Destructor. */ ~PopupWindow(); /** * Return true if scanning enabled, otherwise return false. */ bool isScan() const; /** * Return modifier key. The modifiers are from * Qt::KeyboardModifier enum. */ int modifierKey() const { return m_modifierKey; } /** * Set behaviour for not found in dictionary words. */ bool showIfNotFound() const { return m_showIfNotFound; } /** * Set the dictionary. */ void setDict(DictCore *dict); /** * Returns the dictionary. */ DictCore* dict() const { return m_dict; } /** * Return true if shown words will be pronounced, othewise * return false. */ bool pronounceWord() const { return m_pronounceWord; } void setDefaultStyleSheet(const QString &css) { translationView->setDefaultStyleSheet(css); } QString defaultStyleSheet() const { return translationView->defaultStyleSheet(); } void setShowLinks(bool showLinks) { translationView->setShowLinks(showLinks); } bool showLinks() const { return translationView->showLinks(); } void setShowLinksModifierKey(int key) { translationView->setShowLinksModifierKey(key); } int showLinksModifierKey() const { return translationView->showLinksModifierKey(); } void setShowIpaPronouncers(bool showIpaPronouncers) { translationView->setShowIpaPronouncers(showIpaPronouncers); } bool showIpaPronouncers() const { return translationView->showIpaPronouncers(); } public slots: /** * Enable or disable scanning of selection. */ void setScan(bool scan); /** * Set modifier key. If key not is 0 then popup will be shown * only if key is pressed. */ void setModifierKey(int key) { m_modifierKey = key; } /** * Set beahivour for words that not in dictionaris. * If true then popup will be shown with text "No found", otherwise * popup will not be shown. */ void setShowIfNotFound(bool mode) { m_showIfNotFound = mode; } /** * Popup with translation of text. */ void showTranslation(const QString &text); /** * Popup with translation of current clipboard contents. */ void showClipboardTranslation(); /** * If prounounceWord is true shown words will be prounounced. */ void setPronounceWord(bool pronounceWord) { m_pronounceWord = pronounceWord; } void reloadToolbar() { translationView->reloadToolbar(); } void saveSettings(); private slots: void selectionChanged(const QString &text); signals: void scanChanged(bool scan); private: void loadSettings(); DictWidget *translationView; DictCore* m_dict; int m_modifierKey; bool m_showIfNotFound; Selection *m_selection; bool m_pronounceWord; }; } #endif // POPUPWINDOW_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/qstardict.desktop000066400000000000000000000006671453553600400204610ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Comment=QStarDict is Qt version of StarDict Comment[zh_CN]=Stardict 的 Qt 版本 Exec=qstardict GenericName=Dictionary GenericName[zh_CN]=词典 Icon=qstardict Name=QStarDict Type=Application Categories=Qt;Dictionary;Education;Utility; Keywords=dictionary;stardict; Keywords[zh_CN]=dictionary;stardict;星际译王; Name[ru]=QStarDict GenericName[ru]=Словарь Name[tr]=QStarDict GenericName[tr]=Sözlük qstardict/qstardict/qstardict.png000066400000000000000000000217221453553600400175670ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs B(xtIME "5 r IDATx}{$Gy/{ٳ;YVvV>;O@ |!c;|;y?csA|p6ƁXzއ}_UUYYY5v*~^^^^^^^XNy't~7m{;n~ (D?$]:{!Np ဈ@j>y@q["sowD<At^g :U3 qksW}~[rƏrlJ=B/zEDVgQƎH'uʢJ@\h[XNX= <\WQ9N .>?sGZGmfK,~p,@)sQVŅ>\J4nt>5V D}@qAty'lT,:c8hv;VoY٩[;hMkׄ״55:8zk ~K<~ dm]\G;}k199iM=&7\qtYȏ\dcff=k(w]7vM<b"a\~1Q,LU }b1V.:ep]7& ew'v^Z .C\;n1p C=nvIMo `R"B)G묇, 2Q{0Q2S:+@y;XTe +ꕟjyCGdS@Y\|Bn03pΛ=P1 0 8v>яC\ M%D 3Y@:߬Nt^6e#bz~0NNYJh.`eeѣG裏vT&tdd j*nxyN8qpsKJKjb8( aKq0}S "yb!v N p0Y@ |͘ RFc@}ށ}D`l6 2 P('."bB!#N>pAt" xK $mBqYPCrAAD=mcM|v4iN)ZtezXpj eFyK8<ٜ#voX$VR(NzSŽ}88m լq9\'v:_>L?xphup:cc#Uz6s8(m '&w\fi<(?J&}j1;H\rCk]2{vS{iN<pQ6EN{W:1_.B>F "x%>E)}\J „Ͽ`v^D P.<=]ߥ"0;"pU})gI>$|MS'pǮ灛f<}Am)luju&whVOw@fl]Sה`iqWZp] ,pK@6q}ާ6T *o Sr 0Z#NRwg ! 9!""pfxMPXM b{H  u׋-q`e|]QWG$nyc'p h 8VDn,&[,@uY^iBi:pfQ!Z wĽcV`*ۦ@9 EvܐA'-Bħ//RFخTĶϨЁ@U:A8s y5Pv!YVqلb[d߹ \XL%aAm}.ZdzLܙ@bb! $98 nV8tCvJ58}t_b66 TGd9Dv`vXn8QFخ`"\Z=1`h\ L#` YA!t/qJ`/o!#ÖBX \Z=?rvϺٵŖ<WC+NWZA1& cl u.l"NTD DJ0ok}/X}a x8c*ohR̕@$oTLh@LAb53:TQ#9 FE "E& Yk 0:U [: ^s9`#P8!tE{َGXgqSCl?6me" W03̇ͪ-bj.0 =_\_ A^q2)j (*,3eTLaʰL/ v\Vq(bEr{5T. K. jDQf kuՏW W* S ب ȡZvk$hDZ@GFr">YIbr7՚#H%>LNN9 lDp Ж J~F uam̌u⍕rp=9ņ\&#\ZnN]#"t hE48*@!o ~ӢY6&Pc2Pv *tmϜ}[phc(QITh V` T`,!h@6}3& 5潸{sy9:|G^pI<,ΜGt9Jm͎ O,(6Ja*@'+ l#`f!ɓzc>MbN88 k4='?>mxIToU9ܻy '? _BF3F# 6(^FBW5'>pN;dPBv O Ke`vCGƀs%ށ~mxIvv߅Oq)e+lpS1A}Y.YiۥU0jtU`϶x6Z;~jqBnzz )#1Ĺ#ōq%*I1NjbЛWpqEҶ+-B=%H|au]u҇KKKkJ%y^X9=jwVޥACi $0MD \?_Su9_y4X,>:v 8fP&lRQ||ӂ1%`̝T+e/\~ltnScH6JOcKw#j{b:rGg療te70WpU x#G$ڵ }jI +% NfldO R}5K2>JkR/+>ݷ!-wM)l@ f6x7T4'uXf d3YpzLkv`qeXrd8|G|+qRgѸ<5j4V+@ 'u,I$b\5]o c\EWk7Qm{)\4##+̪i[XV nRxry&/RN-<$X.ߏ? 1ӈ[\,~w VFXf r dI+^l޸f z8?zz2BP2$L7)uJeBYPk WpäӢɊ KMӏhow^T:{U al#L MiQVQ YBMv< kb!UgޯZb-paC  j#>,2538.׀r/* \_r1\Z@ou x2֓$U_f:73k q~M:L4y 0 ;u_}:[ڀJCp;&tn*Ev߲pNk"q H`I nh$"WrDZ/FT+@&NP)O19_Yʖl6g".Uາ-_1f Y3*ūQfodlE,G&OS v`bbB{sN2( c@H |>rSQlm[aqrWv.@"dA%42eID8~ /\@f!\1(mgs}C_y([\# GYWy><&}~Gm\?2D< 'p@Y0\ F̰I2u\0VKD?1Y8}.P.IdzڛfY B;B(4|}9Kpp8nމ177g>o~3/_'0TM_ 43YAy~CYD 犺1njoPr`[~~Gމr9m|SC&fnH\J[7 X5-G|f)h XY&")T݀*P_Aq>&'~ RXO0sGL{. S [} {àMkUAW$M5lḱJچ"E#|n{o=fyرcGzxg羉Ca(tOT}P(AIà_Med B\Adk 텟;_7ŷtkbI_Em=ɦ QV1]FZܜqx2og_],Ƕp=kĤA wJʤN W|/m܀n< 4 "*{ߔyB7п3/--'FsLݲr5E)@; buJP(-8I"D~2pfV.(ZvZ zp3z4Z#Ý^ZO\,ҢaEt@잀`<`mF%#(?:=W7lő @n dnRwP&T0r[֤H& \F kTX@+@#7qTIsOdj'C)QD3+?tY.@r@55 5ԣY%']D'` QDOUxxc!OP{XRA(.hT@԰OV5 MJbS$DBڪ"nd4ֈ$žߔɯֹD椉5A1Ƭʂ=z9aaHP7EdP:Xh0q~dAߛRH\5jK*84܃Ilχn :[Nx9 ٔ0ж0ihgJOVEL rjMSJx)!3v[ fCmt  6 %y_'{q»3$Gzo#Kn!zN +Id$>Bt4룷d4* [ p@IӐ*Ū t( (m 5R 1`d}h,{U. l`tE'==Hq 6a,Y 9IZUՊɊA0L5X297B?}l ohR7zwL]S| p)\,9 ` ]Hg)ޏ&T JO-#8)n@ [U K8HЃ-dA책iɫ<OI$*B҆{*Dٕ1>dO 8n0E?Ŏh|?6%]fi(``|(E\>>eIzXnw}8ro-lUS/cH9r0kMnD%r,RƱ!_PsD?,"0=+|;`$ȤJZ ʿe(Vg@ӹD"H 9Y,C}cG|TNs8瓲Ol.4H^j'qűTLID%c$`قր"aG=YjebƠ&bFt* 0{U7EdPV$SIDAT1,dܫ. RHIcX20iF"M$ )ט,Fc;߳z~^ wzu_ 6 qKtg˳e; 8ޓ;>5Z]"'Xߔ}jT,yYT B"_S֎ŐێeY9M^0c\ݦ}.qJ&aLf?M̠iO&ɦȟ|SUT uCIENDB`qstardict/qstardict/qstardict.pro000066400000000000000000000075271453553600400176120ustar00rootroot00000000000000############################################################################# # qstardict.pro - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2008 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TEMPLATE = app TARGET = qstardict macx { TARGET = QStarDict } include(../qstardict.pri) FORMS += \ cssedit.ui \ dictbrowsersearch.ui \ mainwindow.ui \ settingsdialog.ui HEADERS += \ ../plugins/dictplugin.h \ ../plugins/baseplugin.h \ ../plugins/trayplugin.h \ ../plugins/pluginserver.h \ ../plugins/metadata.h \ appinfo.h \ application.h \ cssedit.h \ dictbrowser.h \ dictcore.h \ dictwidget.h \ help.h \ ipa.h \ keyboard.h \ mainwindow.h \ popupwindow.h \ resizablepopup.h \ selection.h \ settingsdialog.h \ speaker.h \ trayicon.h \ dictbrowsersearch.h \ pluginsview.h \ pluginsmodel.h \ pluginmanager.h \ util.h unix:isEmpty(NO_DBUS):HEADERS += \ dbusadaptor.h SOURCES += \ appinfo.cpp \ application.cpp \ cssedit.cpp \ dictbrowser.cpp \ dictcore.cpp \ dictwidget.cpp \ help.cpp \ ipa.cpp \ keyboard.cpp \ main.cpp \ mainwindow.cpp \ popupwindow.cpp \ resizablepopup.cpp \ selection.cpp \ settingsdialog.cpp \ speaker.cpp \ trayicon.cpp \ dictbrowsersearch.cpp \ pluginsview.cpp \ pluginsmodel.cpp \ pluginmanager.cpp \ util.cpp unix:isEmpty(NO_DBUS):SOURCES += \ dbusadaptor.cpp # From https://github.com/hluk/CopyQ/tree/92ec805b41bd097cbe523c08e320e3d32fc1c511 unix | win32 { DEFINES += BUILD_QXT_GUI QXT_DIR = .. INCLUDEPATH += $$QXT_DIR HEADERS += $$QXT_DIR/qxt/qxtglobal.h SOURCES += $$QXT_DIR/qxt/qxtglobal.cpp HEADERS += $$QXT_DIR/qxt/qxtglobalshortcut.h HEADERS += $$QXT_DIR/qxt/qxtglobalshortcut_p.h SOURCES += $$QXT_DIR/qxt/qxtglobalshortcut.cpp unix:!macx: SOURCES += $$QXT_DIR/qxt/qxtglobalshortcut_x11.cpp macx: SOURCES += $$QXT_DIR/qxt/qxtglobalshortcut_mac.cpp win32: SOURCES += $$QXT_DIR/qxt/qxtglobalshortcut_win.cpp QT += gui-private } RESOURCES += \ pixmaps/pixmaps.qrc win32:RC_FILE += \ qstardict.rc DISTFILES += \ qstardict.png \ qstardict.desktop target.path = $$BIN_DIR INSTALLS += target unix:!macx { desktop_icon.files = qstardict.png desktop_icon.path = $$INSTALL_PREFIX/share/pixmaps desktop_icon.files = qstardict.svg desktop_icon.path = $$INSTALL_PREFIX/share/icons/hicolor/scalable/apps desktop_file.files = qstardict.desktop desktop_file.path = $$INSTALL_PREFIX/share/applications INSTALLS += desktop_icon desktop_file } macx { ICON = pixmaps/qstardict.icns } qstardict/qstardict/qstardict.rc000066400000000000000000000001101453553600400173730ustar00rootroot00000000000000IDI_ICON1 ICON DISCARDABLE "pixmaps/qstardict.ico" qstardict/qstardict/qstardict.svg000066400000000000000000002715211453553600400176060ustar00rootroot00000000000000 qstardict/qstardict/resizablepopup.cpp000066400000000000000000000220251453553600400206300ustar00rootroot00000000000000/***************************************************************************** * resizablepopup.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "resizablepopup.h" #include #include #include #include #include namespace { const int CornerSize = 10; } namespace QStarDict { ResizablePopup::ResizablePopup(QWidget *parent) : QFrame(parent, Qt::Popup) { m_isMoving = false; m_resizeDirection = ResizeDirection::None; m_timeoutBeforeHide = 0; m_timerCloseId = 0; m_timerResizeId = 0; m_isPopuped = false; setMouseTracking(true); setLineWidth(1); setMidLineWidth(2); setFrameStyle(QFrame::Box); setFrameShadow(QFrame::Raised); } void ResizablePopup::popup() { if (m_defaultSize != size()) resize(m_defaultSize); QPoint newPosition = QCursor::pos() - QPoint(30, 30); if (newPosition.x() < 0) newPosition.setX(0); else if (newPosition.x() + width() > QApplication::desktop()->width()) newPosition.setX(QApplication::desktop()->width() - width()); if (newPosition.y() < 0) newPosition.setY(0); else if (newPosition.y() + height() > QApplication::desktop()->height()) newPosition.setY(QApplication::desktop()->height() - height()); move(newPosition); show(); m_isPopuped = true; } void ResizablePopup::enterEvent(QEvent*) { if (m_timerCloseId) { killTimer(m_timerCloseId); m_timerCloseId = 0; } } void ResizablePopup::leaveEvent(QEvent*) { if (geometry().contains(QCursor::pos())) return; if (m_resizeDirection != ResizeDirection::None) return; if (m_timeoutBeforeHide < 0) return; if (m_timeoutBeforeHide == 0) { m_isPopuped = false; // hide(); } else if (! m_timerCloseId) m_timerCloseId = startTimer(m_timeoutBeforeHide); } void ResizablePopup::mouseMoveEvent(QMouseEvent *event) { Qt::CursorShape cursorShape = Qt::ArrowCursor; if ((event->x() >= 0 && event->x() < CornerSize && event->y() >= 0 && event->y() < CornerSize) || (event->x() < width() && event->x() >= width() - CornerSize && event->y() < height() && event->y() >= height() - CornerSize)) cursorShape = Qt::SizeFDiagCursor; else if ((event->x() < width() && event->x() >= width() - CornerSize && event->y() >= 0 && event->y() < CornerSize) || (event->x() >= 0 && event->x() < CornerSize && event->y() < height() && event->y() >= height() - CornerSize)) cursorShape = Qt::SizeBDiagCursor; else if ((event->x() >= 0 && event->x() < frameWidth()) || (event->x() < width() && event->x() >= width() - frameWidth())) cursorShape = Qt::SizeHorCursor; else if ((event->y() >= 0 && event->y() < frameWidth()) || (event->y() < height() && event->y() >= height() - frameWidth())) cursorShape = Qt::SizeVerCursor; if (cursor().shape() != cursorShape) setCursor(cursorShape); else if (event->buttons().testFlag(Qt::LeftButton)) { if (m_isMoving) move(pos() + (event->globalPos() - m_oldCursorPos)); m_oldCursorPos = event->globalPos(); return; } m_isMoving = false; } void ResizablePopup::mousePressEvent(QMouseEvent *event) { if (! geometry().contains(event->globalPos())) { if (m_timerCloseId) { killTimer(m_timerCloseId); m_timerCloseId = 0; } m_isPopuped = false; hide(); return; } if (event->buttons().testFlag(Qt::LeftButton)) { if (event->x() < CornerSize && event->y() < CornerSize) m_resizeDirection = ResizeDirection::TopLeft; else if (event->x() >= width() - CornerSize && event->y() < CornerSize) m_resizeDirection = ResizeDirection::TopRight; else if (event->x() < CornerSize && event->y() >= height() - CornerSize) m_resizeDirection = ResizeDirection::BottomLeft; else if (event->x() >= width() - CornerSize && event->y() >= height() - CornerSize) m_resizeDirection = ResizeDirection::BottomRight; else if (event->x() < frameWidth()) m_resizeDirection = ResizeDirection::Left; else if (event->x() >= width() - frameWidth()) m_resizeDirection = ResizeDirection::Right; else if (event->y() < frameWidth()) m_resizeDirection = ResizeDirection::Top; else if (event->y() >= height() - frameWidth()) m_resizeDirection = ResizeDirection::Bottom; else m_resizeDirection = ResizeDirection::None; if (m_resizeDirection != ResizeDirection::None) m_timerResizeId = startTimer(8); } m_isMoving = true; m_oldCursorPos = event->globalPos(); } void ResizablePopup::mouseReleaseEvent(QMouseEvent*) { stopResize(); } void ResizablePopup::mouseDoubleClickEvent(QMouseEvent*) { m_isPopuped = false; if (m_timerCloseId) { killTimer(m_timerCloseId); m_timerCloseId = 0; } hide(); } void ResizablePopup::timerEvent(QTimerEvent *event) { if (event->timerId() == m_timerResizeId) { doResize(); } else if (event->timerId() == m_timerCloseId) { m_isPopuped = false; hide(); killTimer(m_timerCloseId); m_timerCloseId = 0; stopResize(); } } void ResizablePopup::doResize() { if (! QApplication::mouseButtons().testFlag(Qt::LeftButton)) stopResize(); if (m_resizeDirection != ResizeDirection::None) { QRect newGeometry = geometry(); switch (m_resizeDirection) { case ResizeDirection::TopLeft: newGeometry.setTopLeft(QCursor::pos()); break; case ResizeDirection::TopRight: newGeometry.setTopRight(QCursor::pos()); break; case ResizeDirection::BottomLeft: newGeometry.setBottomLeft(QCursor::pos()); break; case ResizeDirection::BottomRight: newGeometry.setBottomRight(QCursor::pos()); break; case ResizeDirection::Left: newGeometry.setLeft(QCursor::pos().x()); break; case ResizeDirection::Right: newGeometry.setRight(QCursor::pos().x()); break; case ResizeDirection::Top: newGeometry.setTop(QCursor::pos().y()); break; case ResizeDirection::Bottom: newGeometry.setBottom(QCursor::pos().y()); break; default: ; // Nothing } if (newGeometry.width() < minimumSize().width()) { newGeometry.setWidth(width()); newGeometry.moveLeft(geometry().left()); } if (newGeometry.height() < minimumSize().height()) { newGeometry.setHeight(height()); newGeometry.moveTop(geometry().top()); } if (newGeometry != geometry()) setGeometry(newGeometry); } } void ResizablePopup::stopResize() { if (m_resizeDirection != ResizeDirection::None) { m_resizeDirection = ResizeDirection::None; killTimer(m_timerResizeId); m_timerResizeId = 0; } } bool ResizablePopup::event(QEvent *event) { if (event->type() == QEvent::WindowUnblocked && m_isPopuped) { if (m_timerCloseId) { killTimer(m_timerCloseId); m_timerCloseId = 0; } show(); return true; } else return QFrame::event(event); } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/resizablepopup.h000066400000000000000000000071111453553600400202740ustar00rootroot00000000000000/***************************************************************************** * resizablepopup.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef RESIZABLEPOPUP_H #define RESIZABLEPOPUP_H #include class QEvent; class QMouseEvent; class QTimerEvent; namespace QStarDict { /** * The ResizablePopup widget is a resizable top-level window * without decorations. */ class ResizablePopup: public QFrame { Q_OBJECT public: /** * Construct a ResizablePopup widget. */ ResizablePopup(QWidget *parent = 0); /** * Return timeout before hiding after mouse leaving. */ int timeoutBeforeHide() const { return m_timeoutBeforeHide; } /** * Return a default size of new-shown popup. */ const QSize& defaultSize() const { return m_defaultSize; } public slots: /** * Set timeout before hiding after mouse leaving. */ void setTimeoutBeforeHide(int timeoutBeforeHide) { m_timeoutBeforeHide = timeoutBeforeHide; } /** * Set default size of new-shown popup. */ void setDefaultSize(const QSize &defaultSize) { m_defaultSize = defaultSize; } /** * Show popup under mouse cursor. */ void popup(); protected: void enterEvent(QEvent*); void leaveEvent(QEvent*); void mouseMoveEvent(QMouseEvent*); void mousePressEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void mouseDoubleClickEvent(QMouseEvent*); void timerEvent(QTimerEvent*); bool event(QEvent *event); private: void stopResize(); void doResize(); enum class ResizeDirection { None, Top, Bottom, Left, Right, TopLeft, TopRight, BottomLeft, BottomRight }; QPoint m_oldCursorPos; bool m_isMoving; QSize m_defaultSize; ResizeDirection m_resizeDirection; int m_timeoutBeforeHide; int m_timerCloseId; int m_timerResizeId; bool m_isPopuped; }; } #endif // RESIZABLEPOPUP_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/selection.cpp000066400000000000000000000053531453553600400175560ustar00rootroot00000000000000/***************************************************************************** * selection.cpp - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "selection.h" #ifdef Q_WS_WIN #include namespace { QString currentSelection() { POINT Point; HWND hWindow; DWORD dwStart, dwEnd; char szWindowText[256]; if (! GetCursorPos(&Point)) return QString(); if( ! (hWindow = WindowFromPoint(Point))) return QString(); SendMessage(hWindow, WM_GETTEXT, 256, (LPARAM)szWindowText); SendMessage(hWindow, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd); return QString::fromLocal8Bit(szWindowText); } } #else // Q_WS_WIN #include #include namespace { inline QString currentSelection() { return QApplication::clipboard()->text(QClipboard::Selection); } } #endif // Q_WS_WIN namespace QStarDict { Selection::Selection(QObject *parent) : QObject(parent) { m_scan = false; m_timerId = 0; } void Selection::setScan(bool scan) { if (m_scan == scan) return; m_scan = scan; if (m_scan) { m_lastState = currentSelection(); m_timerId = startTimer(300); } else killTimer(m_timerId); } void Selection::timerEvent(QTimerEvent*) { if (m_lastState != currentSelection()) { m_lastState = currentSelection(); emit changed(m_lastState); } } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/selection.h000066400000000000000000000044401453553600400172170ustar00rootroot00000000000000/***************************************************************************** * selection.h - QStarDict, a StarDict clone written with using Qt * * Copyright (C) 2007 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SELECTION_H #define SELECTION_H #include class QTimerEvent; namespace QStarDict { /** * Mouse selection representation class. */ class Selection: public QObject { Q_OBJECT public: /** * Constructor. */ Selection(QObject *parent = 0); /** * Return scan state. */ bool isScan() const { return m_scan; } public slots: /** * Set scan mode. */ void setScan(bool scan); signals: /** * Emits when selection text is changed. */ void changed(const QString &newText); protected: void timerEvent(QTimerEvent*); private: QString m_lastState; int m_scan; int m_timerId; }; } #endif // SELECTION_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/settingsdialog.cpp000066400000000000000000000510701453553600400206060ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.cpp - QStarDict, a dictionary application for learning * * foreign languages * * Copyright (C) 2007-2023 Alexander Rodin * * Copyright (C) 2016 Sergey Il'inykh * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "settingsdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include "dictcore.h" #include "mainwindow.h" #include "popupwindow.h" #include "application.h" #include "speaker.h" #include "pluginsmodel.h" #include "pluginmanager.h" #include "qxt/qxtglobalshortcut.h" #include "../plugins/dictplugin.h" #include "../plugins/pluginserver.h" #ifdef QSTARDICT_WITH_TRAY_ICON #include "trayicon.h" #endif namespace { int toPercents(double value) { int integralValue = static_cast(value * 100.0); if (value * 100.0 - 0.5 > integralValue) ++integralValue; return integralValue; } QString getModifierName(int key) { switch (key) { case Qt::ShiftModifier: return "Shift"; case Qt::ControlModifier: #ifdef Q_OS_MAC return "Command"; #else return "Control"; #endif case Qt::AltModifier: #ifdef Q_OS_MAC return "Option"; #else return "Alt"; #endif case Qt::MetaModifier: #ifdef Q_OS_MAC return "Control"; #elif Q_OS_WIN return "Win"; #else return "Super"; #endif default: return ""; } } void initModifierComboBox(QComboBox *box, int selectedKey) { box->clear(); box->addItem(getModifierName(Qt::AltModifier), Qt::AltModifier); box->addItem(getModifierName(Qt::ShiftModifier), Qt::ShiftModifier); box->addItem(getModifierName(Qt::ControlModifier), Qt::ControlModifier); box->addItem(getModifierName(Qt::MetaModifier), Qt::MetaModifier); box->setCurrentIndex(qMax(0, box->findData(selectedKey))); } } namespace QStarDict { SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent) { setupUi(this); Application * const app = Application::instance(); DictCore *dict = app->dictCore(); m_oldPlugins = app->pluginManager()->loadedPlugins(); m_oldDicts = dict->loadedDicts(); m_dictPluginsModel = new PluginsModel(PluginsModel::LoadType::JustDict, app->pluginManager()); m_miscPluginsModel = new PluginsModel(PluginsModel::LoadType::ExceptDict, app->pluginManager()); pluginsTableView->setModel(m_dictPluginsModel); miscPluginsView->setModel(m_miscPluginsModel); pluginsTableView->configureColumns(); miscPluginsView->configureColumns(); m_dictsModel = new QStandardItemModel(this); m_dictsModel->setHorizontalHeaderLabels(QStringList() << tr("Enabled") << tr("Name") << tr("Plugin")); loadDictsList(); dictsTableView->setModel(m_dictsModel); dictsTableView->verticalHeader()->hide(); dictsTableView->setColumnWidth(0, 60); dictsTableView->setColumnWidth(1, 270); dictsTableView->setColumnWidth(2, 120); // Load global settings runInBackgroundBox->setChecked(!app->mainWindow()->quitOnClose()); instantSearchBox->setChecked(app->mainWindow()->isInstantSearch()); speechCmdEdit->setText(app->speaker()->speechCmd()); #ifdef Q_OS_LINUX QFile desktop(QDir::homePath() + "/.config/autostart/qstardict.desktop"); if (desktop.open(QIODevice::ReadOnly) && QString(desktop.readAll()) .contains(QRegExp("\\bhidden\\s*=\\s*false", Qt::CaseInsensitive))) { autostartBox->setChecked(true); } #elif defined(Q_OS_WIN) QSettings reg("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" "CurrentVersion\\Run", QSettings::NativeFormat); autostartBox->setChecked( reg.contains(QCoreApplication::applicationName())); #else autostartBox->setVisible(false); #endif linksBox->setChecked(app->mainWindow()->showLinks()); linksModifierBox->setChecked(app->mainWindow()->showLinksModifierKey() != 0); initModifierComboBox(linksModifierKeyBox, app->mainWindow()->showLinksModifierKey()); ipaPronounceBox->setChecked(app->mainWindow()->showIpaPronouncers()); espeakCmdEdit->setText(app->espeakSpeaker()->speechCmd()); // Load popup shortcut settings shortcutPopupEdit->setText(app->popupShortcut()->shortcut().toString()); shortcutPopupBox->setChecked(app->popupShortcut()->isEnabled()); switchScanningEdit->setText(app->switchScanningShortcut()->shortcut().toString()); switchScanningBox->setChecked(app->switchScanningShortcut()->isEnabled()); // Load popup window settings PopupWindow *popup = app->popupWindow(); useScanBox->setChecked(popup->isScan()); useScanModifierBox->setChecked(popup->modifierKey() != 0); initModifierComboBox(modifierKeyBox, popup->modifierKey()); showIfNotFoundBox->setChecked(popup->showIfNotFound()); popupOpacitySpin->setValue(toPercents(popup->windowOpacity())); timeoutBeforeHideSpin->setValue(popup->timeoutBeforeHide() / 1000.0); popupDefaultWidthSpin->setValue(popup->defaultSize().width()); popupDefaultHeightSpin->setValue(popup->defaultSize().height()); pronounceWordBox->setChecked(popup->pronounceWord()); // Load translations CSS QVector> cssAliases; cssAliases.append({"body", tr("All translation")}); cssAliases.append({"font.dict_name", tr("Dictionary name")}); cssAliases.append({"font.title", tr("Title")}); cssAliases.append({"font.transcription", tr("Transcription")}); cssAliases.append({"font.explanation", tr("Explanation")}); cssAliases.append({"font.abbreviature", tr("Abbreviation")}); cssAliases.append({"font.example", tr("Example")}); appearanceCSSEdit->setElementsNames(cssAliases); appearanceCSSEdit->setCSS(app->mainWindow()->defaultStyleSheet()); connect(m_dictPluginsModel, SIGNAL(loadedListChanged()), SLOT(dictLoadedPluginsChanged())); connect(pluginsTableView, SIGNAL(clicked(QModelIndex)), SLOT(pluginClicked(QModelIndex))); connect(miscPluginsView, SIGNAL(clicked(QModelIndex)), SLOT(pluginClicked(QModelIndex))); connect(dictsTableView, SIGNAL(clicked(QModelIndex)), SLOT(dictSelected())); // There is no signal emitted when an dictionary item is selected using keyboard, // not mouse. So it is necessary check whether the item selection changed or not // periodically. m_dictsTimer = new QTimer(this); m_dictsTimer->setInterval(100); connect(m_dictsTimer, SIGNAL(timeout()), SLOT(dictSelected())); m_dictsTimer->start(); linksModifierContainer->setEnabled(linksBox->isChecked()); linksModifierKeyBox->setEnabled(linksModifierBox->isChecked()); espeakCmdLabel->setEnabled(ipaPronounceBox->isChecked()); espeakCmdEdit->setEnabled(ipaPronounceBox->isChecked()); scanModifierContainer->setEnabled(useScanBox->isChecked()); modifierKeyBox->setEnabled(useScanModifierBox->isChecked()); shortcutPopupEdit->setEnabled(shortcutPopupBox->isChecked()); switchScanningEdit->setEnabled(switchScanningBox->isChecked()); } void SettingsDialog::accept() { Application * const app = Application::instance(); // Save dicts and plugins settings DictCore *dict = app->dictCore(); //dict->setLoadedPlugins(m_dictPluginsModel->loadedPlugins() + m_miscPluginsModel->loadedPlugins()); QList loadedDicts; int rowCount = m_dictsModel->rowCount(); for (int i = 0; i < rowCount; ++i) if (m_dictsModel->item(i, 0)->checkState() == Qt::Checked) loadedDicts << DictCore::Dictionary(m_dictsModel->item(i, 2)->text(), m_dictsModel->item(i, 1)->text()); dict->setLoadedDicts(loadedDicts); // Save global settings app->mainWindow()->setQuitOnClose(!runInBackgroundBox->isChecked()); #ifdef QSTARDICT_WITH_TRAY_ICON app->trayIcon()->setVisible(runInBackgroundBox->isChecked()); #endif app->mainWindow()->setInstantSearch(instantSearchBox->isChecked()); app->speaker()->setSpeechCmd(speechCmdEdit->text()); #ifdef Q_OS_LINUX QDir home = QDir::home(); if (!home.exists(".config/autostart")) { home.mkpath(".config/autostart"); } QFile desktopFile(QSTARDICT_INSTALL_PREFIX "/share/applications/qstardict.desktop"); if (desktopFile.open(QIODevice::ReadOnly)) { QByteArray contents = desktopFile.readAll(); QFile f(home.absolutePath() + "/.config/autostart/qstardict.desktop"); if (f.open(QIODevice::WriteOnly | QIODevice::Text)) { f.write(contents.trimmed()); f.write(QString("\nHidden=%1").arg(autostartBox->isChecked()? "false\n":"true\n").toUtf8()); } } #elif defined(Q_OS_WIN) QSettings reg("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\" "CurrentVersion\\Run", QSettings::NativeFormat); if(autostartBox->isChecked()) reg.setValue(QCoreApplication::applicationName(), '"' + QDir::toNativeSeparators(QCoreApplication:: applicationFilePath()) + '"'); else reg.remove(QCoreApplication::applicationName()); #endif app->mainWindow()->setShowLinks(linksBox->isChecked()); app->popupWindow()->setShowLinks(linksBox->isChecked()); int linksModifierKey = linksModifierBox->isChecked() ? linksModifierKeyBox->currentData().toInt() : 0; app->mainWindow()->setShowLinksModifierKey(linksModifierKey); app->popupWindow()->setShowLinksModifierKey(linksModifierKey); app->mainWindow()->setShowIpaPronouncers(ipaPronounceBox->isChecked()); app->popupWindow()->setShowIpaPronouncers(ipaPronounceBox->isChecked()); app->espeakSpeaker()->setSpeechCmd(espeakCmdEdit->text()); // Save popup shortcut settings app->popupShortcut()->setShortcut(QKeySequence(shortcutPopupEdit->text())); app->popupShortcut()->setEnabled(shortcutPopupBox->isChecked()); app->switchScanningShortcut()->setShortcut(QKeySequence(switchScanningEdit->text())); app->switchScanningShortcut()->setEnabled(switchScanningBox->isChecked()); // Save popup window settings PopupWindow *popup = app->popupWindow(); popup->setScan(useScanBox->isChecked()); popup->setShowIfNotFound(showIfNotFoundBox->isChecked()); if (useScanModifierBox->isChecked()) popup->setModifierKey(modifierKeyBox->currentData().toInt()); else popup->setModifierKey(0); popup->setWindowOpacity(popupOpacitySpin->value() / 100.0); popup->setTimeoutBeforeHide(static_cast(timeoutBeforeHideSpin->value() * 1000.0)); popup->setDefaultSize(QSize(popupDefaultWidthSpin->value(), popupDefaultHeightSpin->value())); popup->setPronounceWord(pronounceWordBox->isChecked()); // Save translations CSS app->mainWindow()->setDefaultStyleSheet(appearanceCSSEdit->css()); app->popupWindow()->setDefaultStyleSheet(appearanceCSSEdit->css()); if (app->mainWindow()->quitOnClose()) app->mainWindow()->show(); app->mainWindow()->reload(); app->mainWindow()->reloadToolbar(); app->popupWindow()->reloadToolbar(); app->dictCore()->saveSettings(); app->mainWindow()->saveSettings(); #ifdef QSTARDICT_WITH_TRAY_ICON app->trayIcon()->saveSettings(); #endif app->popupWindow()->saveSettings(); QDialog::accept(); } void SettingsDialog::reject() { DictCore *dict = Application::instance()->dictCore(); Application::instance()->pluginManager()->setLoadedPlugins(m_oldPlugins); dict->setLoadedDicts(m_oldDicts); QDialog::reject(); } void SettingsDialog::loadDictsList() { int i; QList loadedDicts = Application::instance()->dictCore()->loadedDicts(); m_dictsModel->setRowCount(0); for (i = 0; i < loadedDicts.size(); ++i) { QStandardItem *item = new QStandardItem(); item->setCheckable(true); item->setCheckState(Qt::Checked); m_dictsModel->setItem(i, 0, item); m_dictsModel->setItem(i, 1, new QStandardItem(loadedDicts[i].name())); m_dictsModel->setItem(i, 2, new QStandardItem(loadedDicts[i].plugin())); } QList dicts = Application::instance()->dictCore()->availableDicts(); for (QList::const_iterator iter = dicts.begin(); iter != dicts.end(); ++iter) { if (! loadedDicts.contains(*iter)) { QStandardItem *item = new QStandardItem(); item->setCheckable(true); item->setCheckState(Qt::Unchecked); m_dictsModel->setItem(i, 0, item); m_dictsModel->setItem(i, 1, new QStandardItem(iter->name())); m_dictsModel->setItem(i, 2, new QStandardItem(iter->plugin())); ++i; } } dictSelected(); } void SettingsDialog::dictSelected() { int currentRow = dictsTableView->currentIndex().row(); if (currentRow == -1) { dictsMoveUpButton->setEnabled(false); dictsMoveDownButton->setEnabled(false); dictsRemoveButton->setEnabled(false); dictsShowInfoButton->setEnabled(false); } else { dictsMoveUpButton->setEnabled(currentRow > 0); dictsMoveDownButton->setEnabled(currentRow < m_dictsModel->rowCount() - 1); QString dict = m_dictsModel->item(currentRow, 1)->text(); QString pluginName = m_dictsModel->item(currentRow, 2)->text(); DictPlugin *plugin = Application::instance()->pluginManager()->plugin(pluginName); dictsRemoveButton->setEnabled(plugin->isDictionaryRemovable(dict)); dictsShowInfoButton->setEnabled(true); } } void SettingsDialog::on_dictsMoveUpButton_clicked() { int currentRow = dictsTableView->currentIndex().row(); if (currentRow > 0) { m_dictsModel->insertRow(currentRow - 1, m_dictsModel->takeRow(currentRow)); dictsTableView->selectRow(currentRow - 1); } } void SettingsDialog::on_dictsMoveDownButton_clicked() { int currentRow = dictsTableView->currentIndex().row(); if (currentRow < m_dictsModel->rowCount() - 1) { m_dictsModel->insertRow(currentRow + 1, m_dictsModel->takeRow(currentRow)); dictsTableView->selectRow(currentRow + 1); } } void SettingsDialog::on_dictsShowInfoButton_clicked() { int currentRow = dictsTableView->currentIndex().row(); if (currentRow == -1) return; QString dict = m_dictsModel->item(currentRow, 1)->text(); QString plugin = m_dictsModel->item(currentRow, 2)->text(); DictPlugin::DictInfo info = Application::instance()->pluginManager()->plugin(plugin)->dictInfo(dict); QMessageBox::information(this, tr("Information about dictionary \"%1\"").arg(dict), tr("Name: %1
    ").arg(dict) + tr("Plugin: %1
    ").arg(plugin) + (info.filename().isEmpty() ? "" : tr("Filename: %1
    ").arg(info.filename())) + tr("Author: %1
    ").arg(info.author()) + tr("Words count: %1
    ").arg((info.wordsCount() == -1) ? tr("unknown") : QString::number(info.wordsCount())) + (info.description().isEmpty() ? "" : tr("Description: %1").arg(info.description()))); } void SettingsDialog::pluginClicked(const QModelIndex &index) { QString id = index.data(PluginsModel::IdRole).toString(); if (index.column() == 2) {// settings auto plugin = Application::instance()->pluginManager()->plugin(id); if (plugin && plugin->execSettingsDialog(this) == QDialog::Accepted) { Application::instance()->dictCore()->reloadDicts(); loadDictsList(); } } if (index.column() == 3) { auto pm = Application::instance()->pluginManager(); DictPlugin *dplugin = pm->plugin(id); const PluginMetadata &md = pm->pluginDesc(id)->metadata; QStringList authors = md.authors; auto *messageBox = new QMessageBox(this); messageBox->setIconPixmap(md.icon.pixmap(QSize(128, 128))); messageBox->setWindowTitle(tr("Information about %1 plugin").arg(md.name)); messageBox->setText( tr("Name: %1
    ").arg(md.name) + tr("Version: %1
    ").arg(md.version) + tr("Authors: %1
    ").arg(authors.replaceInStrings("<", "<").replaceInStrings(">", ">").join(tr("
    "))) + (dplugin? tr("Can search similar words: %1
    ").arg(dplugin->features().testFlag(DictPlugin::Feature::SearchSimilar) ? tr("yes") : tr("no")) : "") + tr("Description: %1").arg(md.description)); messageBox->show(); } } void SettingsDialog::dictLoadedPluginsChanged() { DictCore *dict = Application::instance()->dictCore(); Application::instance()->pluginManager()->setLoadedPlugins(m_dictPluginsModel->loadedPlugins() + m_miscPluginsModel->loadedPlugins()); dict->reloadDicts(); loadDictsList(); } void SettingsDialog::on_dictsAddButton_clicked() { auto pluginManager = Application::instance()->pluginManager(); QStringList filters; QHash pluginsByFilters; for (const QString &pluginId: pluginManager->loadedPlugins()) { DictPlugin *plugin = pluginManager->plugin(pluginId); if (!plugin) continue; std::optional dictionaryFileFilter = plugin->dictionaryFileFilter(); if (!dictionaryFileFilter) continue; filters.push_back(*dictionaryFileFilter); pluginsByFilters[*dictionaryFileFilter] = pluginId; } QFileDialog fileDialog(this, tr("Import a dictionary from a file"), QString(), filters.join(";;")); if (!fileDialog.exec()) return; QString selectedPluginId = pluginsByFilters[fileDialog.selectedNameFilter()]; DictPlugin *selectedPlugin = pluginManager->plugin(selectedPluginId); QString selectedFileName = fileDialog.selectedFiles().at(0); selectedPlugin->loadedDicts(); std::optional dict = selectedPlugin->addDictionary(this, selectedFileName); if (!dict) return; Application::instance()->dictCore()->reloadDicts(); loadDictsList(); // Move the added dictionary to the top and enable it for (int i = 0; i < m_dictsModel->rowCount(); ++i) { if (m_dictsModel->item(i, 1)->text() == *dict) { m_dictsModel->insertRow(0, m_dictsModel->takeRow(i)); m_dictsModel->item(0, 0)->setCheckState(Qt::Checked); dictsTableView->selectRow(0); dictSelected(); break; } } } void SettingsDialog::on_dictsRemoveButton_clicked() { int currentRow = dictsTableView->currentIndex().row(); if (currentRow == -1) return; QString dict = m_dictsModel->item(currentRow, 1)->text(); QString pluginName = m_dictsModel->item(currentRow, 2)->text(); DictPlugin *plugin = Application::instance()->pluginManager()->plugin(pluginName); if (! plugin->removeDictionary(dict)) { QMessageBox::warning(this, tr("Unable to remove dictionary"), tr("Cannot remove dictionary %1 with plugin %1").arg(dict, pluginName)); } else { DictCore *dict = Application::instance()->dictCore(); dict->reloadDicts(); loadDictsList(); } } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/settingsdialog.h000066400000000000000000000053221453553600400202520ustar00rootroot00000000000000/***************************************************************************** * settingsdialog.h - QStarDict, a dictionary for learning foreign languages * * Copyright (C) 2007-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SETTINGSDIALOG_H #define SETTINGSDIALOG_H #include #include "ui_settingsdialog.h" #include "dictcore.h" class QStandardItemModel; class QStandardItem; class QTimer; namespace QStarDict { class MainWindow; class PluginsModel; /** * The settings dialog. */ class SettingsDialog: public QDialog, private Ui::SettingsDialog { Q_OBJECT public: /** * Construct new SettingsDialog widget with parent MainWindow. */ SettingsDialog(QWidget *parent = 0); void accept(); void reject(); private slots: void on_dictsMoveUpButton_clicked(); void on_dictsMoveDownButton_clicked(); void on_dictsShowInfoButton_clicked(); void on_dictsAddButton_clicked(); void on_dictsRemoveButton_clicked(); void loadDictsList(); void dictLoadedPluginsChanged(); void pluginClicked(const QModelIndex &index); void dictSelected(); private: QStringList m_oldPlugins; QList m_oldDicts; QStandardItemModel *m_dictsModel; QTimer *m_dictsTimer; PluginsModel *m_dictPluginsModel; PluginsModel *m_miscPluginsModel; }; } #endif // SETTINGSDIALOG_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/settingsdialog.ui000066400000000000000000000741331453553600400204460ustar00rootroot00000000000000 QStarDict::SettingsDialog 0 0 567 586 QStarDict Settings 9 9 9 9 6 0 Global settings Application Run in background Start with system Translations browser Instant search Show words that are translatable as links 0 0 0 0 0 true Only if a modifier is pressed false false Alt Control Shift Win 6 0 0 0 0 Pronounce words using this command: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. true Show buttons for pronouncing IPA transcriptions false Use this command for eSpeak for pronouncing IPA 100 0 Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. espeak Qt::Vertical 426 318 Dictionaries Dictionaries QAbstractItemView::NoEditTriggers QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false Move up Up :pics/arrow-up.png:pics/arrow-up.png Move down Down :pics/arrow-down.png:pics/arrow-down.png Add a dictionary Up :pics/list-add.png:pics/list-add.png Remove the dictionary Up :pics/list-remove.png:pics/list-remove.png Show information about dictionary Show info :pics/dialog-information.png:pics/dialog-information.png Qt::Horizontal 283 20 16777215 196 Plugins Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft QAbstractItemView::NoEditTriggers false Popup window 9 9 9 9 6 Behavior Scan selection and show the translation popup true Show if the word is not found 6 0 0 0 0 Timeout before hide after the mouse is over Don't hide sec 1 0.000000000000000 10.000000000000000 0.100000000000000 0.500000000000000 true Show only if the modifier is pressed true false false 6 0 0 0 0 Pronounce the word Switch on and off scanning by the keyboard shortcut true false true Show the translation popup by the keyboard shortcut false Appearance 9 9 9 9 6 6 0 0 0 0 Opacity % 1 100 100 6 0 0 0 0 Default width 96 9999 320 6 0 0 0 0 Default height 96 9999 240 Qt::Vertical 20 101 Appearance Misc Other Plugins Qt::NoPen false Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok false QStarDict::CSSEdit QWidget

    cssedit.h
    1 QStarDict::PluginsView QTableView
    pluginsview.h
    instantSearchBox speechCmdEdit buttonBox dictsTableView dictsMoveUpButton dictsMoveDownButton dictsShowInfoButton pluginsTableView useScanBox showIfNotFoundBox useScanModifierBox modifierKeyBox timeoutBeforeHideSpin pronounceWordBox popupDefaultWidthSpin popupDefaultHeightSpin popupOpacitySpin buttonBox accepted() QStarDict::SettingsDialog accept() 348 576 410 299 buttonBox rejected() QStarDict::SettingsDialog reject() 424 576 410 299 useScanModifierBox toggled(bool) modifierKeyBox setEnabled(bool) 143 208 399 213 shortcutPopupBox toggled(bool) shortcutPopupEdit setEnabled(bool) 143 248 502 253 linksModifierBox toggled(bool) linksModifierKeyBox setEnabled(bool) 169 262 479 267 linksBox toggled(bool) linksModifierContainer setEnabled(bool) 117 229 285 267 useScanBox toggled(bool) scanModifierContainer setEnabled(bool) 142 106 142 270 switchScanningBox toggled(bool) switchScanningEdit setEnabled(bool) 143 140 498 145 ipaPronounceBox toggled(bool) espeakCmdEdit setEnabled(bool) 419 335 478 374 ipaPronounceBox toggled(bool) espeakCmdLabel setEnabled(bool) 207 322 226 358 qstardict/qstardict/speaker.cpp000066400000000000000000000043741453553600400172250ustar00rootroot00000000000000/***************************************************************************** * speaker.cpp - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2008-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "speaker.h" #include #include namespace QStarDict { Speaker::Speaker() { m_speechProcess = new QProcess; } Speaker::~Speaker() { delete m_speechProcess; } void Speaker::speak(const QString &word) { if (m_speechCmd.isEmpty()) return; if (m_speechProcess->state() != QProcess::NotRunning) m_speechProcess->kill(); QString s = m_speechCmd; s.replace("%s", word); m_speechProcess->start(s, QIODevice::WriteOnly); if (! m_speechProcess->waitForStarted()) return; if (! m_speechCmd.contains("%s")) { m_speechProcess->write(word.toUtf8()); m_speechProcess->closeWriteChannel(); } } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/speaker.h000066400000000000000000000037661453553600400166760ustar00rootroot00000000000000/***************************************************************************** * speaker.h - QStarDict, a dictionary application for learning foreign * * languages * * Copyright (C) 2008-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef SPEAKER_H #define SPEAKER_H #include class QProcess; namespace QStarDict { class Speaker { public: Speaker(); virtual ~Speaker(); void speak(const QString &word); void setSpeechCmd(const QString &cmd) { m_speechCmd = cmd; } const QString &speechCmd() const { return m_speechCmd; } private: QString m_speechCmd; QProcess *m_speechProcess; }; } #endif // SPEAKER_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/qstardict/trayicon.cpp000066400000000000000000000113761453553600400174230ustar00rootroot00000000000000/***************************************************************************** * trayicon.cpp - QStarDict, a free dictionary program written using Qt * * Copyright (C) 2008-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #include "trayicon.h" #include #include #include #include "application.h" #include "mainwindow.h" #include "popupwindow.h" #include "settingsdialog.h" namespace QStarDict { TrayIcon::TrayIcon(QObject *parent) : QSystemTrayIcon(parent) { QMenu *trayMenu = new QMenu(tr("QStarDict")); QAction *actionMainWindow = new QAction(tr("Show &main window"), this); connect(actionMainWindow, SIGNAL(triggered()), SLOT(showMainWindow())); trayMenu->addAction(actionMainWindow); QAction *actionScan = new QAction(QIcon(":/pics/edit-select.png"), tr("&Scan"), this); actionScan->setCheckable(true); actionScan->setChecked(Application::instance()->popupWindow()->isScan()); setScanEnabled(Application::instance()->popupWindow()->isScan()); connect(actionScan, SIGNAL(toggled(bool)), Application::instance()->popupWindow(), SLOT(setScan(bool))); connect(Application::instance()->popupWindow(), SIGNAL(scanChanged(bool)), actionScan, SLOT(setChecked(bool))); connect(Application::instance()->popupWindow(), SIGNAL(scanChanged(bool)), SLOT(setScanEnabled(bool))); trayMenu->addAction(actionScan); QAction *actionSettings = new QAction(QIcon(":/pics/configure.png"), tr("&Configure QStarDict"), this); connect(actionSettings, SIGNAL(triggered()), SLOT(on_actionSettings_triggered())); trayMenu->addAction(actionSettings); QAction *actionQuit = new QAction(QIcon(":/pics/application-exit.png"), tr("&Quit"), this); connect(actionQuit, SIGNAL(triggered()), Application::instance(), SLOT(quit())); trayMenu->addAction(actionQuit); setContextMenu(trayMenu); connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(on_activated(QSystemTrayIcon::ActivationReason))); loadSettings(); } TrayIcon::~TrayIcon() { saveSettings(); } void TrayIcon::on_activated(QSystemTrayIcon::ActivationReason reason) { switch (reason) { case QSystemTrayIcon::Trigger: // It's quite uncomfortable on OS X to handle show/hide main window // in all cases... at least for me (petr) #ifndef Q_WS_MAC Application::instance()->mainWindow()->setVisible(! Application::instance()->mainWindow()->isVisible()); #else Application::instance()->mainWindow()->show(); #endif break; case QSystemTrayIcon::MiddleClick: Application::instance()->popupWindow()->showTranslation(Application::clipboard()->text(QClipboard::Selection)); break; default: ; // nothing } } void TrayIcon::on_actionSettings_triggered() { SettingsDialog dialog(Application::instance()->mainWindow()); dialog.exec(); } void TrayIcon::setScanEnabled(bool enabled) { QIcon icon(enabled ? ":/pics/qstardict.png" : ":/pics/qstardict-disabled.png"); setIcon(icon); setToolTip(tr("QStarDict: scanning is %1").arg(enabled ? tr("enabled") : tr("disabled"))); } void TrayIcon::showMainWindow() { Application::instance()->mainWindow()->show(); } void TrayIcon::saveSettings() { QSettings config; config.setValue("TrayIcon/visible", isVisible()); } void TrayIcon::loadSettings() { QSettings config; setVisible(config.value("TrayIcon/visible", true).toBool()); } } // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc qstardict/qstardict/trayicon.h000066400000000000000000000037461453553600400170720ustar00rootroot00000000000000/***************************************************************************** * trayicon.h - QStarDict, a free dictionary program written using Qt * * Copyright (C) 2008-2023 Alexander Rodin * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *****************************************************************************/ #ifndef TRAYICON_H #define TRAYICON_H #include namespace QStarDict { class TrayIcon: public QSystemTrayIcon { Q_OBJECT public: TrayIcon(QObject *parent = 0); virtual ~TrayIcon(); void saveSettings(); private slots: void on_activated(QSystemTrayIcon::ActivationReason reason); void on_actionSettings_triggered(); void setScanEnabled(bool enabled); void showMainWindow(); private: void loadSettings(); }; } #endif // TRAYICON_H // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent qstardict/qstardict/util.cpp000066400000000000000000000001041453553600400165330ustar00rootroot00000000000000#include "util.h" namespace QStarDict { } // namespace QStarDict qstardict/qstardict/util.h000066400000000000000000000004471453553600400162120ustar00rootroot00000000000000#ifndef QSTARDICT_UTIL_H #define QSTARDICT_UTIL_H #include #include namespace QStarDict { class Util { public: static inline QString htmlEscape(const QString &text) { return text.toHtmlEscaped(); } }; } // namespace QStarDict #endif // QSTARDICT_UTIL_H qstardict/qxt/000077500000000000000000000000001453553600400136755ustar00rootroot00000000000000qstardict/qxt/AUTHORS000066400000000000000000000010331453553600400147420ustar00rootroot00000000000000== main developers == Arvid Picciani Adam Higerd J-P Nurmi Benjamin Zeller == contributors == Gabriel Assis Bezerra Scott Aron Bloom Lawrence Holtsclaw Marcin Jakubowski Dominique Leducq Marcus Lindblom Konstantin Molchanov Thomas Mueller Bjørn Erik Nilsen Kaleb Pederson Matthew Schnee André Somers Alex Unden Chris Vickery Benjamin Wohlwend thanks everyone not named for all the patches, bug reports, beta tests, and the free beer :-) qstardict/qxt/COPYING000066400000000000000000000035111453553600400147300ustar00rootroot00000000000000/**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ qstardict/qxt/FROM000066400000000000000000000003001453553600400143540ustar00rootroot00000000000000qstardict/qtx directory is updated using update.sh script from the upstream repository. It is updated this way because using it as a submodule is incompatible with Github automatic releases. qstardict/qxt/patch-1-x11.patch000066400000000000000000000011401453553600400165560ustar00rootroot00000000000000Only in .: patch-x11.patch diff -u ./qxtglobalshortcut_x11.cpp ../qxt-1/qxtglobalshortcut_x11.cpp --- ./qxtglobalshortcut_x11.cpp 2016-12-07 00:54:54.000000000 +0300 +++ ../qxt-1/qxtglobalshortcut_x11.cpp 2016-12-07 00:54:43.000000000 +0300 @@ -30,7 +30,6 @@ *****************************************************************************/ #include -#include #if QT_VERSION < QT_VERSION_CHECK(5,0,0) # include #else @@ -38,6 +37,7 @@ # include # include #endif +#include namespace { qstardict/qxt/qxtglobal.cpp000066400000000000000000000206671453553600400164110ustar00rootroot00000000000000 /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include "qxtglobal.h" /*! \headerfile \title Global Qxt Declarations \inmodule QxtCore \brief The header provides basic declarations and is included by all other Qxt headers. */ /*! \macro QXT_VERSION \relates This macro expands a numeric value of the form 0xMMNNPP (MM = major, NN = minor, PP = patch) that specifies Qxt's version number. For example, if you compile your application against Qxt 0.4.0, the QXT_VERSION macro will expand to 0x000400. You can use QXT_VERSION to use the latest Qt features where available. For example: \code #if QXT_VERSION >= 0x000400 qxtTabWidget->setTabMovementMode(QxtTabWidget::InPlaceMovement); #endif \endcode \sa QXT_VERSION_STR, qxtVersion() */ /*! \macro QXT_VERSION_STR \relates This macro expands to a string that specifies Qxt's version number (for example, "0.4.0"). This is the version against which the application is compiled. \sa qxtVersion(), QXT_VERSION */ /*! \relates Returns the version number of Qxt at run-time as a string (for example, "0.4.0"). This may be a different version than the version the application was compiled against. \sa QXT_VERSION_STR */ const char * qxtVersion() { return QXT_VERSION_STR; } /*! \headerfile \title The Qxt private implementation \inmodule QxtCore \brief The header provides tools for hiding details of a class. Application code generally doesn't have to be concerned about hiding its implementation details, but when writing library code it is important to maintain a constant interface, both source and binary. Maintaining a constant source interface is easy enough, but keeping the binary interface constant means moving implementation details into a private class. The PIMPL, or d-pointer, idiom is a common method of implementing this separation. QxtPimpl offers a convenient way to connect the public and private sides of your class. \section1 Getting Started Before you declare the public class, you need to make a forward declaration of the private class. The private class must have the same name as the public class, followed by the word Private. For example, a class named MyTest would declare the private class with: \code class MyTestPrivate; \endcode \section1 The Public Class Generally, you shouldn't keep any data members in the public class without a good reason. Functions that are part of the public interface should be declared in the public class, and functions that need to be available to subclasses (for calling or overriding) should be in the protected section of the public class. To connect the private class to the public class, include the QXT_DECLARE_PRIVATE macro in the private section of the public class. In the example above, the private class is connected as follows: \code private: QXT_DECLARE_PRIVATE(MyTest) \endcode Additionally, you must include the QXT_INIT_PRIVATE macro in the public class's constructor. Continuing with the MyTest example, your constructor might look like this: \code MyTest::MyTest() { // initialization QXT_INIT_PRIVATE(MyTest); } \endcode \section1 The Private Class As mentioned above, data members should usually be kept in the private class. This allows the memory layout of the private class to change without breaking binary compatibility for the public class. Functions that exist only as implementation details, or functions that need access to private data members, should be implemented here. To define the private class, inherit from the template QxtPrivate class, and include the QXT_DECLARE_PUBLIC macro in its public section. The template parameter should be the name of the public class. For example: \code class MyTestPrivate : public QxtPrivate { public: MyTestPrivate(); QXT_DECLARE_PUBLIC(MyTest) }; \endcode \section1 Accessing Private Members Use the qxt_d() function (actually a function-like object) from functions in the public class to access the private class. Similarly, functions in the private class can invoke functions in the public class by using the qxt_p() function (this one's actually a function). For example, assume that MyTest has methods named getFoobar and doBaz(), and MyTestPrivate has a member named foobar and a method named doQuux(). The code might resemble this example: \code int MyTest::getFoobar() { return qxt_d().foobar; } void MyTestPrivate::doQuux() { qxt_p().doBaz(foobar); } \endcode */ /*! * \macro QXT_DECLARE_PRIVATE(PUB) * \relates * Declares that a public class has a related private class. * * This shuold be put in the private section of the public class. The * parameter \a PUB must be the name of the public class. */ /*! * \macro QXT_DECLARE_PUBLIC(PUB) * \relates * Declares that a private class has a related public class named \a PUB. * * This may be put anywhere in the declaration of the private class. The parameter is the name of the public class. */ /*! * \macro QXT_INIT_PRIVATE(PUB) * \relates * Initializes resources owned by the private class. * * This should be called from the public class's constructor, * before qxt_d() is used for the first time. The parameter \a PUB must be * the name of the public class. */ /*! * \macro QXT_D(PUB) * \relates * Returns a reference in the current scope named "d" to the private class * associated with the public class \a PUB. * * This function is only available in a class using QXT_DECLARE_PRIVATE(). */ /*! * \macro QXT_P(PUB) * \relates * Creates a reference in the current scope named "q" to the public class * named \a PUB. * * This macro only works in a class using QXT_DECLARE_PUBLIC(). */ /*! * \fn QxtPrivate& PUB::qxt_d() * \relates * Returns a reference to the private class. * * This function is only available in a class using \a QXT_DECLARE_PRIVATE. */ /*! * \fn const QxtPrivate& PUB::qxt_d() const * \relates * Returns a const reference to the private class. * * This function is only available in a class using \a QXT_DECLARE_PRIVATE. * This overload will be automatically used in const functions. */ /*! * \fn PUB& QxtPrivate::qxt_p() * \relates * Returns a reference to the public class. * * This function is only available in a class using QXT_DECLARE_PUBLIC(). */ /*! * \fn const PUB& QxtPrivate::qxt_p() const * \relates * Returns a const reference to the public class. * * This function is only available in a class using QXT_DECLARE_PUBLIC(). * This overload will be automatically used in const functions. */ qstardict/qxt/qxtglobal.h000066400000000000000000000156171453553600400160550ustar00rootroot00000000000000 /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #ifndef QXTGLOBAL_H #define QXTGLOBAL_H #include #define QXT_VERSION 0x000700 #define QXT_VERSION_STR "0.7.0" //--------------------------global macros------------------------------ #ifndef QXT_NO_MACROS #ifndef _countof #define _countof(x) (sizeof(x)/sizeof(*x)) #endif #endif // QXT_NO_MACROS //--------------------------export macros------------------------------ #define QXT_DLLEXPORT DO_NOT_USE_THIS_ANYMORE #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_CORE) # define QXT_CORE_EXPORT Q_DECL_EXPORT # else # define QXT_CORE_EXPORT Q_DECL_IMPORT # endif #else # define QXT_CORE_EXPORT #endif // BUILD_QXT_CORE #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_GUI) # define QXT_GUI_EXPORT Q_DECL_EXPORT # else # define QXT_GUI_EXPORT Q_DECL_IMPORT # endif #else # define QXT_GUI_EXPORT #endif // BUILD_QXT_GUI #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_NETWORK) # define QXT_NETWORK_EXPORT Q_DECL_EXPORT # else # define QXT_NETWORK_EXPORT Q_DECL_IMPORT # endif #else # define QXT_NETWORK_EXPORT #endif // BUILD_QXT_NETWORK #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_SQL) # define QXT_SQL_EXPORT Q_DECL_EXPORT # else # define QXT_SQL_EXPORT Q_DECL_IMPORT # endif #else # define QXT_SQL_EXPORT #endif // BUILD_QXT_SQL #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_WEB) # define QXT_WEB_EXPORT Q_DECL_EXPORT # else # define QXT_WEB_EXPORT Q_DECL_IMPORT # endif #else # define QXT_WEB_EXPORT #endif // BUILD_QXT_WEB #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_BERKELEY) # define QXT_BERKELEY_EXPORT Q_DECL_EXPORT # else # define QXT_BERKELEY_EXPORT Q_DECL_IMPORT # endif #else # define QXT_BERKELEY_EXPORT #endif // BUILD_QXT_BERKELEY #if !defined(QXT_STATIC) && !defined(QXT_DOXYGEN_RUN) # if defined(BUILD_QXT_ZEROCONF) # define QXT_ZEROCONF_EXPORT Q_DECL_EXPORT # else # define QXT_ZEROCONF_EXPORT Q_DECL_IMPORT # endif #else # define QXT_ZEROCONF_EXPORT #endif // QXT_ZEROCONF_EXPORT #if defined(BUILD_QXT_CORE) || defined(BUILD_QXT_GUI) || defined(BUILD_QXT_SQL) || defined(BUILD_QXT_NETWORK) || defined(BUILD_QXT_WEB) || defined(BUILD_QXT_BERKELEY) || defined(BUILD_QXT_ZEROCONF) # define BUILD_QXT #endif QXT_CORE_EXPORT const char* qxtVersion(); #ifndef QT_BEGIN_NAMESPACE #define QT_BEGIN_NAMESPACE #endif #ifndef QT_END_NAMESPACE #define QT_END_NAMESPACE #endif #ifndef QT_FORWARD_DECLARE_CLASS #define QT_FORWARD_DECLARE_CLASS(Class) class Class; #endif /**************************************************************************** ** This file is derived from code bearing the following notice: ** The sole author of this file, Adam Higerd, has explicitly disclaimed all ** copyright interest and protection for the content within. This file has ** been placed in the public domain according to United States copyright ** statute and case law. In jurisdictions where this public domain dedication ** is not legally recognized, anyone who receives a copy of this file is ** permitted to use, modify, duplicate, and redistribute this file, in whole ** or in part, with no restrictions or conditions. In these jurisdictions, ** this file shall be copyright (C) 2006-2008 by Adam Higerd. ****************************************************************************/ #define QXT_DECLARE_PRIVATE(PUB) friend class PUB##Private; QxtPrivateInterface qxt_d; #define QXT_DECLARE_PUBLIC(PUB) friend class PUB; #define QXT_INIT_PRIVATE(PUB) qxt_d.setPublic(this); #define QXT_D(PUB) PUB##Private& d = qxt_d() #define QXT_P(PUB) PUB& p = qxt_p() template class QxtPrivate { public: virtual ~QxtPrivate() {} inline void QXT_setPublic(PUB* pub) { qxt_p_ptr = pub; } protected: inline PUB& qxt_p() { return *qxt_p_ptr; } inline const PUB& qxt_p() const { return *qxt_p_ptr; } inline PUB* qxt_ptr() { return qxt_p_ptr; } inline const PUB* qxt_ptr() const { return qxt_p_ptr; } private: PUB* qxt_p_ptr; }; template class QxtPrivateInterface { friend class QxtPrivate; public: QxtPrivateInterface() { pvt = new PVT; } ~QxtPrivateInterface() { delete pvt; } inline void setPublic(PUB* pub) { pvt->QXT_setPublic(pub); } inline PVT& operator()() { return *static_cast(pvt); } inline const PVT& operator()() const { return *static_cast(pvt); } inline PVT * operator->() { return static_cast(pvt); } inline const PVT * operator->() const { return static_cast(pvt); } private: QxtPrivateInterface(const QxtPrivateInterface&) { } QxtPrivateInterface& operator=(const QxtPrivateInterface&) { } QxtPrivate* pvt; }; #endif // QXT_GLOBAL qstardict/qxt/qxtglobalshortcut.cpp000066400000000000000000000200041453553600400201660ustar00rootroot00000000000000#include "qxtglobalshortcut.h" /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include "qxtglobalshortcut_p.h" #include #include #ifndef Q_OS_MAC int QxtGlobalShortcutPrivate::ref = 0; # if QT_VERSION < QT_VERSION_CHECK(5,0,0) QAbstractEventDispatcher::EventFilter QxtGlobalShortcutPrivate::prevEventFilter = 0; # endif #endif // Q_OS_MAC QHash, QxtGlobalShortcut*> QxtGlobalShortcutPrivate::shortcuts; QxtGlobalShortcutPrivate::QxtGlobalShortcutPrivate() : enabled(true), key(Qt::Key(0)), mods(Qt::NoModifier) { #ifndef Q_OS_MAC if (ref == 0) { # if QT_VERSION < QT_VERSION_CHECK(5,0,0) prevEventFilter = QAbstractEventDispatcher::instance()->setEventFilter(eventFilter); # else QAbstractEventDispatcher::instance()->installNativeEventFilter(this); #endif } ++ref; #endif // Q_OS_MAC } QxtGlobalShortcutPrivate::~QxtGlobalShortcutPrivate() { #ifndef Q_OS_MAC --ref; if (ref == 0) { QAbstractEventDispatcher *ed = QAbstractEventDispatcher::instance(); if (ed != 0) { # if QT_VERSION < QT_VERSION_CHECK(5,0,0) ed->setEventFilter(prevEventFilter); # else ed->removeNativeEventFilter(this); # endif } } #endif // Q_OS_MAC } bool QxtGlobalShortcutPrivate::setShortcut(const QKeySequence& shortcut) { Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier; key = shortcut.isEmpty() ? Qt::Key(0) : Qt::Key((shortcut[0] ^ allMods) & shortcut[0]); mods = shortcut.isEmpty() ? Qt::KeyboardModifiers(0) : Qt::KeyboardModifiers(shortcut[0] & allMods); if (enabled) return registerShortcut(); else return false; } bool QxtGlobalShortcutPrivate::registerShortcut() { const quint32 nativeKey = nativeKeycode(key); const quint32 nativeMods = nativeModifiers(mods); const bool res = registerShortcut(nativeKey, nativeMods); if (res) shortcuts.insert(qMakePair(nativeKey, nativeMods), &qxt_p()); else qWarning() << "QxtGlobalShortcut failed to register:" << QKeySequence(key + mods).toString(); return res; } bool QxtGlobalShortcutPrivate::unsetShortcut() { bool res = false; if (enabled) res = unregisterShortcut(); key = Qt::Key(0); mods = Qt::KeyboardModifiers(0); return res; } bool QxtGlobalShortcutPrivate::unregisterShortcut() { bool res = false; const quint32 nativeKey = nativeKeycode(key); const quint32 nativeMods = nativeModifiers(mods); if (shortcuts.value(qMakePair(nativeKey, nativeMods)) == &qxt_p()) res = unregisterShortcut(nativeKey, nativeMods); if (res) shortcuts.remove(qMakePair(nativeKey, nativeMods)); else qWarning() << "QxtGlobalShortcut failed to unregister:" << QKeySequence(key + mods).toString(); return res; } void QxtGlobalShortcutPrivate::activateShortcut(quint32 nativeKey, quint32 nativeMods) { QxtGlobalShortcut* shortcut = shortcuts.value(qMakePair(nativeKey, nativeMods)); if (shortcut && shortcut->isEnabled()) emit shortcut->activated(); } /*! \class QxtGlobalShortcut \inmodule QxtWidgets \brief The QxtGlobalShortcut class provides a global shortcut aka "hotkey". A global shortcut triggers even if the application is not active. This makes it easy to implement applications that react to certain shortcuts still if some other application is active or if the application is for example minimized to the system tray. Example usage: \code QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(window); connect(shortcut, SIGNAL(activated()), window, SLOT(toggleVisibility())); shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12")); \endcode \bold {Note:} Since Qxt 0.6 QxtGlobalShortcut no more requires QxtApplication. */ /*! \fn QxtGlobalShortcut::activated() This signal is emitted when the user types the shortcut's key sequence. \sa shortcut */ /*! Constructs a new QxtGlobalShortcut with \a parent. */ QxtGlobalShortcut::QxtGlobalShortcut(QObject* parent) : QObject(parent) { QXT_INIT_PRIVATE(QxtGlobalShortcut); } /*! Constructs a new QxtGlobalShortcut with \a shortcut and \a parent. */ QxtGlobalShortcut::QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent) : QObject(parent) { QXT_INIT_PRIVATE(QxtGlobalShortcut); setShortcut(shortcut); } /*! Destructs the QxtGlobalShortcut. */ QxtGlobalShortcut::~QxtGlobalShortcut() { if (qxt_d().enabled) qxt_d().unsetShortcut(); } /*! \property QxtGlobalShortcut::shortcut \brief the shortcut key sequence \bold {Note:} Notice that corresponding key press and release events are not delivered for registered global shortcuts even if they are disabled. Also, comma separated key sequences are not supported. Only the first part is used: \code qxtShortcut->setShortcut(QKeySequence("Ctrl+Alt+A,Ctrl+Alt+B")); Q_ASSERT(qxtShortcut->shortcut() == QKeySequence("Ctrl+Alt+A")); \endcode */ QKeySequence QxtGlobalShortcut::shortcut() const { return QKeySequence(qxt_d().key | qxt_d().mods); } bool QxtGlobalShortcut::setShortcut(const QKeySequence& shortcut) { if (qxt_d().key != 0) qxt_d().unsetShortcut(); return qxt_d().setShortcut(shortcut); } /*! \property QxtGlobalShortcut::enabled \brief whether the shortcut is enabled A disabled shortcut does not get activated. The default value is \c true. \sa setDisabled() */ bool QxtGlobalShortcut::isEnabled() const { return qxt_d().enabled; } void QxtGlobalShortcut::setEnabled(bool enabled) { if (qxt_d().key != 0) { if (enabled && !qxt_d().enabled) qxt_d().registerShortcut(); else if (!enabled && qxt_d().enabled) qxt_d().unregisterShortcut(); } qxt_d().enabled = enabled; } /*! Sets the shortcut \a disabled. \sa enabled */ void QxtGlobalShortcut::setDisabled(bool disabled) { setEnabled(!disabled); } qstardict/qxt/qxtglobalshortcut.h000066400000000000000000000053551453553600400176470ustar00rootroot00000000000000#ifndef QXTGLOBALSHORTCUT_H /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #define QXTGLOBALSHORTCUT_H #include "qxtglobal.h" #include #include class QxtGlobalShortcutPrivate; class QXT_GUI_EXPORT QxtGlobalShortcut : public QObject { Q_OBJECT QXT_DECLARE_PRIVATE(QxtGlobalShortcut) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut) public: explicit QxtGlobalShortcut(QObject* parent = 0); explicit QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent = 0); virtual ~QxtGlobalShortcut(); QKeySequence shortcut() const; bool setShortcut(const QKeySequence& shortcut); bool isEnabled() const; public Q_SLOTS: void setEnabled(bool enabled = true); void setDisabled(bool disabled = true); Q_SIGNALS: void activated(); }; #endif // QXTGLOBALSHORTCUT_H qstardict/qxt/qxtglobalshortcut_mac.cpp000066400000000000000000000217051453553600400210170ustar00rootroot00000000000000#include /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include "qxtglobalshortcut_p.h" #include #include #include #include typedef QPair Identifier; static QMap keyRefs; static QHash keyIDs; static quint32 hotKeySerial = 0; static bool qxt_mac_handler_installed = false; OSStatus qxt_mac_handle_hot_key(EventHandlerCallRef nextHandler, EventRef event, void* data) { Q_UNUSED(nextHandler); Q_UNUSED(data); if (GetEventClass(event) == kEventClassKeyboard && GetEventKind(event) == kEventHotKeyPressed) { EventHotKeyID keyID; GetEventParameter(event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(keyID), NULL, &keyID); Identifier id = keyIDs.key(keyID.id); QxtGlobalShortcutPrivate::activateShortcut(id.second, id.first); } return noErr; } quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) { quint32 native = 0; if (modifiers & Qt::ShiftModifier) native |= shiftKey; if (modifiers & Qt::ControlModifier) native |= cmdKey; if (modifiers & Qt::AltModifier) native |= optionKey; if (modifiers & Qt::MetaModifier) native |= controlKey; if (modifiers & Qt::KeypadModifier) native |= kEventKeyModifierNumLockMask; return native; } quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) { UTF16Char ch; // Constants found in NSEvent.h from AppKit.framework switch (key) { case Qt::Key_Return: return kVK_Return; case Qt::Key_Enter: return kVK_ANSI_KeypadEnter; case Qt::Key_Tab: return kVK_Tab; case Qt::Key_Space: return kVK_Space; case Qt::Key_Backspace: return kVK_Delete; case Qt::Key_Control: return kVK_Command; case Qt::Key_Shift: return kVK_Shift; case Qt::Key_CapsLock: return kVK_CapsLock; case Qt::Key_Option: return kVK_Option; case Qt::Key_Meta: return kVK_Control; case Qt::Key_F17: return kVK_F17; case Qt::Key_VolumeUp: return kVK_VolumeUp; case Qt::Key_VolumeDown: return kVK_VolumeDown; case Qt::Key_F18: return kVK_F18; case Qt::Key_F19: return kVK_F19; case Qt::Key_F20: return kVK_F20; case Qt::Key_F5: return kVK_F5; case Qt::Key_F6: return kVK_F6; case Qt::Key_F7: return kVK_F7; case Qt::Key_F3: return kVK_F3; case Qt::Key_F8: return kVK_F8; case Qt::Key_F9: return kVK_F9; case Qt::Key_F11: return kVK_F11; case Qt::Key_F13: return kVK_F13; case Qt::Key_F16: return kVK_F16; case Qt::Key_F14: return kVK_F14; case Qt::Key_F10: return kVK_F10; case Qt::Key_F12: return kVK_F12; case Qt::Key_F15: return kVK_F15; case Qt::Key_Help: return kVK_Help; case Qt::Key_Home: return kVK_Home; case Qt::Key_PageUp: return kVK_PageUp; case Qt::Key_Delete: return kVK_ForwardDelete; case Qt::Key_F4: return kVK_F4; case Qt::Key_End: return kVK_End; case Qt::Key_F2: return kVK_F2; case Qt::Key_PageDown: return kVK_PageDown; case Qt::Key_F1: return kVK_F1; case Qt::Key_Left: return kVK_LeftArrow; case Qt::Key_Right: return kVK_RightArrow; case Qt::Key_Down: return kVK_DownArrow; case Qt::Key_Up: return kVK_UpArrow; default: ; } if (key == Qt::Key_Escape) ch = 27; else if (key == Qt::Key_Return) ch = 13; else if (key == Qt::Key_Enter) ch = 3; else if (key == Qt::Key_Tab) ch = 9; else ch = key; CFDataRef currentLayoutData; TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); if (currentKeyboard == NULL) return 0; currentLayoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); CFRelease(currentKeyboard); if (currentLayoutData == NULL) return 0; UCKeyboardLayout* header = (UCKeyboardLayout*)CFDataGetBytePtr(currentLayoutData); UCKeyboardTypeHeader* table = header->keyboardTypeList; uint8_t *data = (uint8_t*)header; // God, would a little documentation for this shit kill you... for (quint32 i=0; i < header->keyboardTypeCount; i++) { UCKeyStateRecordsIndex* stateRec = 0; if (table[i].keyStateRecordsIndexOffset != 0) { stateRec = reinterpret_cast(data + table[i].keyStateRecordsIndexOffset); if (stateRec->keyStateRecordsIndexFormat != kUCKeyStateRecordsIndexFormat) stateRec = 0; } UCKeyToCharTableIndex* charTable = reinterpret_cast(data + table[i].keyToCharTableIndexOffset); if (charTable->keyToCharTableIndexFormat != kUCKeyToCharTableIndexFormat) continue; for (quint32 j=0; j < charTable->keyToCharTableCount; j++) { UCKeyOutput* keyToChar = reinterpret_cast(data + charTable->keyToCharTableOffsets[j]); for (quint32 k=0; k < charTable->keyToCharTableSize; k++) { if (keyToChar[k] & kUCKeyOutputTestForIndexMask) { long idx = keyToChar[k] & kUCKeyOutputGetIndexMask; if (stateRec && idx < stateRec->keyStateRecordCount) { UCKeyStateRecord* rec = reinterpret_cast(data + stateRec->keyStateRecordOffsets[idx]); if (rec->stateZeroCharData == ch) return k; } } else if (!(keyToChar[k] & kUCKeyOutputSequenceIndexMask) && keyToChar[k] < 0xFFFE) { if (keyToChar[k] == ch) return k; } } // for k } // for j } // for i return 0; } bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) { if (!qxt_mac_handler_installed) { EventTypeSpec t; t.eventClass = kEventClassKeyboard; t.eventKind = kEventHotKeyPressed; InstallApplicationEventHandler(&qxt_mac_handle_hot_key, 1, &t, NULL, NULL); } EventHotKeyID keyID; keyID.signature = 'cute'; keyID.id = ++hotKeySerial; EventHotKeyRef ref = 0; bool rv = !RegisterEventHotKey(nativeKey, nativeMods, keyID, GetApplicationEventTarget(), 0, &ref); if (rv) { keyIDs.insert(Identifier(nativeMods, nativeKey), keyID.id); keyRefs.insert(keyID.id, ref); } return rv; } bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) { Identifier id(nativeMods, nativeKey); if (!keyIDs.contains(id)) return false; EventHotKeyRef ref = keyRefs.take(keyIDs[id]); keyIDs.remove(id); return !UnregisterEventHotKey(ref); } qstardict/qxt/qxtglobalshortcut_p.h000066400000000000000000000067541453553600400201720ustar00rootroot00000000000000#ifndef QXTGLOBALSHORTCUT_P_H /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #define QXTGLOBALSHORTCUT_P_H #include "qxtglobalshortcut.h" #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) #include #endif class QxtGlobalShortcutPrivate : public QxtPrivate #if QT_VERSION >= QT_VERSION_CHECK(5,0,0) && !defined(Q_OS_MAC) ,public QAbstractNativeEventFilter #endif { public: QXT_DECLARE_PUBLIC(QxtGlobalShortcut) QxtGlobalShortcutPrivate(); ~QxtGlobalShortcutPrivate(); bool enabled; Qt::Key key; Qt::KeyboardModifiers mods; bool setShortcut(const QKeySequence& shortcut); bool unsetShortcut(); static bool error; #ifndef Q_OS_MAC static int ref; #if QT_VERSION < QT_VERSION_CHECK(5,0,0) static QAbstractEventDispatcher::EventFilter prevEventFilter; static bool eventFilter(void* message); #else virtual bool nativeEventFilter(const QByteArray & eventType, void * message, long * result); #endif // QT_VERSION < QT_VERSION_CHECK(5,0,0) #endif // Q_OS_MAC static void activateShortcut(quint32 nativeKey, quint32 nativeMods); private: static quint32 nativeKeycode(Qt::Key keycode); static quint32 nativeModifiers(Qt::KeyboardModifiers modifiers); static bool registerShortcut(quint32 nativeKey, quint32 nativeMods); static bool unregisterShortcut(quint32 nativeKey, quint32 nativeMods); bool registerShortcut(); bool unregisterShortcut(); static QHash, QxtGlobalShortcut*> shortcuts; }; #endif // QXTGLOBALSHORTCUT_P_H qstardict/qxt/qxtglobalshortcut_win.cpp000066400000000000000000000164201453553600400210520ustar00rootroot00000000000000#include "qxtglobalshortcut_p.h" /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include #if QT_VERSION < QT_VERSION_CHECK(5,0,0) bool QxtGlobalShortcutPrivate::eventFilter(void* message) { #else bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType, void * message, long * result) { Q_UNUSED(eventType); Q_UNUSED(result); #endif MSG* msg = static_cast(message); if (msg->message == WM_HOTKEY) { const quint32 keycode = HIWORD(msg->lParam); const quint32 modifiers = LOWORD(msg->lParam); activateShortcut(keycode, modifiers); } #if QT_VERSION < QT_VERSION_CHECK(5,0,0) return prevEventFilter ? prevEventFilter(message) : false; #else return false; #endif } quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) { // MOD_ALT, MOD_CONTROL, (MOD_KEYUP), MOD_SHIFT, MOD_WIN quint32 native = 0; if (modifiers & Qt::ShiftModifier) native |= MOD_SHIFT; if (modifiers & Qt::ControlModifier) native |= MOD_CONTROL; if (modifiers & Qt::AltModifier) native |= MOD_ALT; if (modifiers & Qt::MetaModifier) native |= MOD_WIN; // TODO: resolve these? //if (modifiers & Qt::KeypadModifier) //if (modifiers & Qt::GroupSwitchModifier) return native; } quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) { switch (key) { case Qt::Key_Escape: return VK_ESCAPE; case Qt::Key_Tab: case Qt::Key_Backtab: return VK_TAB; case Qt::Key_Backspace: return VK_BACK; case Qt::Key_Return: case Qt::Key_Enter: return VK_RETURN; case Qt::Key_Insert: return VK_INSERT; case Qt::Key_Delete: return VK_DELETE; case Qt::Key_Pause: return VK_PAUSE; case Qt::Key_Print: return VK_PRINT; case Qt::Key_Clear: return VK_CLEAR; case Qt::Key_Home: return VK_HOME; case Qt::Key_End: return VK_END; case Qt::Key_Left: return VK_LEFT; case Qt::Key_Up: return VK_UP; case Qt::Key_Right: return VK_RIGHT; case Qt::Key_Down: return VK_DOWN; case Qt::Key_PageUp: return VK_PRIOR; case Qt::Key_PageDown: return VK_NEXT; case Qt::Key_F1: return VK_F1; case Qt::Key_F2: return VK_F2; case Qt::Key_F3: return VK_F3; case Qt::Key_F4: return VK_F4; case Qt::Key_F5: return VK_F5; case Qt::Key_F6: return VK_F6; case Qt::Key_F7: return VK_F7; case Qt::Key_F8: return VK_F8; case Qt::Key_F9: return VK_F9; case Qt::Key_F10: return VK_F10; case Qt::Key_F11: return VK_F11; case Qt::Key_F12: return VK_F12; case Qt::Key_F13: return VK_F13; case Qt::Key_F14: return VK_F14; case Qt::Key_F15: return VK_F15; case Qt::Key_F16: return VK_F16; case Qt::Key_F17: return VK_F17; case Qt::Key_F18: return VK_F18; case Qt::Key_F19: return VK_F19; case Qt::Key_F20: return VK_F20; case Qt::Key_F21: return VK_F21; case Qt::Key_F22: return VK_F22; case Qt::Key_F23: return VK_F23; case Qt::Key_F24: return VK_F24; case Qt::Key_Space: return VK_SPACE; case Qt::Key_Asterisk: return VK_MULTIPLY; case Qt::Key_Plus: return VK_ADD; case Qt::Key_Comma: return VK_SEPARATOR; case Qt::Key_Minus: return VK_SUBTRACT; case Qt::Key_Slash: return VK_DIVIDE; case Qt::Key_MediaNext: return VK_MEDIA_NEXT_TRACK; case Qt::Key_MediaPrevious: return VK_MEDIA_PREV_TRACK; case Qt::Key_MediaPlay: return VK_MEDIA_PLAY_PAUSE; case Qt::Key_MediaStop: return VK_MEDIA_STOP; // couldn't find those in VK_* //case Qt::Key_MediaLast: //case Qt::Key_MediaRecord: case Qt::Key_VolumeDown: return VK_VOLUME_DOWN; case Qt::Key_VolumeUp: return VK_VOLUME_UP; case Qt::Key_VolumeMute: return VK_VOLUME_MUTE; // numbers case Qt::Key_0: case Qt::Key_1: case Qt::Key_2: case Qt::Key_3: case Qt::Key_4: case Qt::Key_5: case Qt::Key_6: case Qt::Key_7: case Qt::Key_8: case Qt::Key_9: return key; // letters case Qt::Key_A: case Qt::Key_B: case Qt::Key_C: case Qt::Key_D: case Qt::Key_E: case Qt::Key_F: case Qt::Key_G: case Qt::Key_H: case Qt::Key_I: case Qt::Key_J: case Qt::Key_K: case Qt::Key_L: case Qt::Key_M: case Qt::Key_N: case Qt::Key_O: case Qt::Key_P: case Qt::Key_Q: case Qt::Key_R: case Qt::Key_S: case Qt::Key_T: case Qt::Key_U: case Qt::Key_V: case Qt::Key_W: case Qt::Key_X: case Qt::Key_Y: case Qt::Key_Z: return key; default: return 0; } } bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) { return RegisterHotKey(0, nativeMods ^ nativeKey, nativeMods, nativeKey); } bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) { return UnregisterHotKey(0, nativeMods ^ nativeKey); } qstardict/qxt/qxtglobalshortcut_x11.cpp000066400000000000000000000174241453553600400206730ustar00rootroot00000000000000#include "qxtglobalshortcut_p.h" /**************************************************************************** ** Copyright (c) 2006 - 2011, the LibQxt project. ** See the Qxt AUTHORS file for a list of authors and copyright holders. ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in the ** documentation and/or other materials provided with the distribution. ** * Neither the name of the LibQxt project nor the ** names of its contributors may be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY ** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ** *****************************************************************************/ #include #if QT_VERSION < QT_VERSION_CHECK(5,0,0) # include #else # include # include # include #endif #include namespace { const QVector maskModifiers = QVector() << 0 << Mod2Mask << LockMask << (Mod2Mask | LockMask); typedef int (*X11ErrorHandler)(Display *display, XErrorEvent *event); class QxtX11ErrorHandler { public: static bool error; static int qxtX11ErrorHandler(Display *display, XErrorEvent *event) { Q_UNUSED(display); switch (event->error_code) { case BadAccess: case BadValue: case BadWindow: if (event->request_code == 33 /* X_GrabKey */ || event->request_code == 34 /* X_UngrabKey */) { error = true; //TODO: //char errstr[256]; //XGetErrorText(dpy, err->error_code, errstr, 256); } } return 0; } QxtX11ErrorHandler() { error = false; m_previousErrorHandler = XSetErrorHandler(qxtX11ErrorHandler); } ~QxtX11ErrorHandler() { XSetErrorHandler(m_previousErrorHandler); } private: X11ErrorHandler m_previousErrorHandler; }; bool QxtX11ErrorHandler::error = false; class QxtX11Data { public: QxtX11Data() { #if QT_VERSION < QT_VERSION_CHECK(5,0,0) m_display = QX11Info::display(); #else QPlatformNativeInterface *native = qApp->platformNativeInterface(); void *display = native->nativeResourceForScreen(QByteArray("display"), QGuiApplication::primaryScreen()); m_display = reinterpret_cast(display); #endif } bool isValid() { return m_display != 0; } Display *display() { Q_ASSERT(isValid()); return m_display; } Window rootWindow() { return DefaultRootWindow(display()); } bool grabKey(quint32 keycode, quint32 modifiers, Window window) { QxtX11ErrorHandler errorHandler; for (int i = 0; !errorHandler.error && i < maskModifiers.size(); ++i) { XGrabKey(display(), keycode, modifiers | maskModifiers[i], window, True, GrabModeAsync, GrabModeAsync); } if (errorHandler.error) { ungrabKey(keycode, modifiers, window); return false; } return true; } bool ungrabKey(quint32 keycode, quint32 modifiers, Window window) { QxtX11ErrorHandler errorHandler; foreach (quint32 maskMods, maskModifiers) { XUngrabKey(display(), keycode, modifiers | maskMods, window); } return !errorHandler.error; } private: Display *m_display; }; } // namespace #if QT_VERSION < QT_VERSION_CHECK(5,0,0) bool QxtGlobalShortcutPrivate::eventFilter(void *message) { XEvent *event = static_cast(message); if (event->type == KeyPress) { XKeyEvent *key = reinterpret_cast(event); unsigned int keycode = key->keycode; unsigned int keystate = key->state; #else bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType, void *message, long *result) { Q_UNUSED(result); xcb_key_press_event_t *kev = 0; if (eventType == "xcb_generic_event_t") { xcb_generic_event_t *ev = static_cast(message); if ((ev->response_type & 127) == XCB_KEY_PRESS) kev = static_cast(message); } if (kev != 0) { unsigned int keycode = kev->detail; unsigned int keystate = 0; if(kev->state & XCB_MOD_MASK_1) keystate |= Mod1Mask; if(kev->state & XCB_MOD_MASK_CONTROL) keystate |= ControlMask; if(kev->state & XCB_MOD_MASK_4) keystate |= Mod4Mask; if(kev->state & XCB_MOD_MASK_SHIFT) keystate |= ShiftMask; #endif activateShortcut(keycode, // Mod1Mask == Alt, Mod4Mask == Meta keystate & (ShiftMask | ControlMask | Mod1Mask | Mod4Mask)); } #if QT_VERSION < QT_VERSION_CHECK(5,0,0) return prevEventFilter ? prevEventFilter(message) : false; #else return false; #endif } quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) { // ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask quint32 native = 0; if (modifiers & Qt::ShiftModifier) native |= ShiftMask; if (modifiers & Qt::ControlModifier) native |= ControlMask; if (modifiers & Qt::AltModifier) native |= Mod1Mask; if (modifiers & Qt::MetaModifier) native |= Mod4Mask; // TODO: resolve these? //if (modifiers & Qt::MetaModifier) //if (modifiers & Qt::KeypadModifier) //if (modifiers & Qt::GroupSwitchModifier) return native; } quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) { QxtX11Data x11; if (!x11.isValid()) return 0; KeySym keysym = XStringToKeysym(QKeySequence(key).toString().toLatin1().data()); if (keysym == NoSymbol) keysym = static_cast(key); return XKeysymToKeycode(x11.display(), keysym); } bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) { QxtX11Data x11; return x11.isValid() && x11.grabKey(nativeKey, nativeMods, x11.rootWindow()); } bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) { QxtX11Data x11; return x11.isValid() && x11.ungrabKey(nativeKey, nativeMods, x11.rootWindow()); } qstardict/qxt/update.sh000077500000000000000000000004531453553600400155200ustar00rootroot00000000000000#!/bin/sh git clone https://bitbucket.org/libqxt/libqxt || (cd libqxt && git pull && cd ..) || exit 1 for i in AUTHORS COPYING src/core/qxtglobal.* src/widgets/{win,mac,x11,}/qxtglobalshortcut*; do for j in libqxt/$i; do echo "cp $j ." cp $j . done done cat *.patch | patch qstardict/translations/000077500000000000000000000000001453553600400156025ustar00rootroot00000000000000qstardict/translations/qstardict-bg_BG.ts000066400000000000000000000611271453553600400211150ustar00rootroot00000000000000 AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Print Prin&t translation QStarDict::CSSEdit Preview Element Foreground Background Select element Click to select color #000000 Font Size Select font Select font size pt Bold B Italic I Underline U QStarDict::DictBrowser The word <b>%1</b> is not found. QStarDict::DictWidget Save translation Запази превода Search Търси Error Грешка &Save to file &Запази във файл Go to &previous translation Go to &next translation Speak &word QStarDict::KDEIntegration scanning is %1 enabled disabled QStarDict::MainWindow About QStarDict За QStarDict Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007-2023 Александър Родин <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Изчисти полето за търсене Clear Изчисти Fuzzy query Неясно търсене Search Търси Words list Лист с думи &File &Файл &Help &Помощ &Settings &Настройки &Quit &Изход Ctrl+Q Ctrl+Q &About &За QStarDict About &Qt За &Qt &Configure QStarDict &Настройка на QStarDict &Scan &Сканираща част QStarDict &Help F1 Ctrl+T <b>QStarDict %1 </b> - Qt version of StarDict<br> QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog QStarDict Settings Настройки на QStarDict Dictionaries Речници Up Нагоре Down Надолу Popup window Главен прозорец Behavior Поведение Timeout before hide after mouse over Време, преди да се скрие, след посочване с мишката Don't hide Не крий sec секунди Show only if modifier is pressed Покажи, само ако модификатора е натиснат Alt Alt Control Control Shift Shift Win Win Scan selection Селективно сканиране Show if word not found Покажи, ако дума не е намерена Appearance Изглед Opacity Непрозрачност % % Default width Подразбираща се ширина Default height Подразбираща се височина Global settings Run in background Start with system Instant search Pronounce words using this command: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Move up Move down Show information about dictionary Show info Plugins Show translation popup by shortcut Pronounce the word Misc Other Plugins Enabled Name Plugin All translation Dictionary name Title Explanation Abbreviation Example Transcription Information about dictionary "%1" <b>Name:</b> %1<br> <b>Plugin:</b> %1<br> <b>Author:</b> %1<br> <b>Words count:</b> %1<br> unknown <b>Description:</b> %1 Information about %1 plugin <b>Version:</b> %1<br> <b>Authors:</b> %1<br> <br> <b>Can search similar words:</b>%1<br> yes no QStarDict::TrayIcon QStarDict QStarDict &Scan &Сканираща част &Configure QStarDict &Настройка на QStarDict &Quit &Изход QStarDict::TrayIconDefaultImpl &Quit &Изход Show &main window QStarDict: scanning is %1 enabled disabled SaveToFile Save translation Запази превода Error Грешка &Save translation Text files (*.txt) HTML files (*.html *.htm) HTML files (*.html, *.htm) Cannot save translation as %1 SettingsDialog Up Нагоре Down Надолу Dictionaries Речници StarDict plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Deck name Model name Allow duplicates Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary qstardict/translations/qstardict-cs_CZ.ts000066400000000000000000000732601453553600400211570ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Element Foreground Background Select element Click to select color #000000 Font Size Select font Select font size pt Bold B Italic I Underline U QStarDict::DictBrowser The word <b>%1</b> is not found. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Uložit překlad Search Vyhledat Error Chyba &Save to file &Uložit do souboru Go &back Go &forward &Pronounce the word Open in the main window QStarDict::MainWindow About QStarDict O aplikaci QStarDict Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007-2023Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Vymazat pole pro vyhledávání Clear Vymazat Fuzzy query Fuzzy query Search Vyhledat Words list Seznam slov &File &Soubor &Help &Nápověda &Settings &Nastavení &Quit &Konec Ctrl+Q Ctrl+Q &About &О aplikaci QStarDict About &Qt О &verzi Qt &Configure QStarDict &Nastavení QStarDict &Scan &Vyhledávat &Scan selection QStarDict &documentation F1 Shift+Ctrl+F Shift+Ctrl+S <b>QStarDict %1 </b> - Qt version of StarDict<br> QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog QStarDict Settings Nastavení QStarDict Dictionaries Slovníky Up Nahoru Down Dolu Popup window Plovoucí okno Behavior Chování Pronounce the word Vyslovit Timeout before hide after mouse over Za jakou dobu se zavře okno s překladem potom co kurzor opustí výběr Don't hide Neschovávat sec sek Show only if modifier is pressed Zobrazit pouze při stistku klávesy Alt Alt Control Control Shift Shift Win Win Scan selection Vyhledat výběr Show if word not found Zobrazit pokud se slovo nenajde Appearance Vzhled Opacity Sytost % % Default width Výchozí šířka Default height Výchozí výška Global settings Application Run in background Start with system Translations browser Instant search Show words that are translatable as links Only if a modifier is pressed Pronounce words using this command: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Move up Move down Add a dictionary Remove the dictionary Show information about dictionary Show info Plugins Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins Enabled Name Plugin All translation Dictionary name Title Transcription Explanation Abbreviation Example Information about dictionary "%1" <b>Name:</b> %1<br> <b>Plugin:</b> %1<br> <b>Filename:</b> %1<br> <b>Author:</b> %1<br> <b>Words count:</b> %1<br> unknown <b>Description:</b> %1 Information about %1 plugin <b>Version:</b> %1<br> <b>Authors:</b> %1<br> <br> <b>Can search similar words:</b> %1<br> yes no Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Vyhledávat &Configure QStarDict &Nastavení QStarDict &Quit &Konec Show &main window QStarDict: scanning is %1 enabled disabled QStarDict::TrayIconDefaultImpl &Quit &Konec SaveToFile Save translation Uložit překlad Error Chyba &Save translation Text files (*.txt) HTML files (*.html *.htm) HTML files (*.html, *.htm) Cannot save translation as %1 SettingsDialog Up Nahoru Down Dolu Dictionaries Slovníky Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-de_DE.ts000066400000000000000000001006121453553600400211060ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation Übersetzung &drucken QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Vorschau Element Element Foreground Vordergrund Background Hintergrund Select element Element wählen Click to select color Klicken zur Farbauswahl #000000 #000000 Font Schriftart Size Größe Select font Schriftart wählen Select font size Schriftgröße wählen pt pt Bold Fett B B Italic Kursiv I I Underline Unterstrichen U U QStarDict::DictBrowser The word <b>%1</b> is not found. Das Wort <b>%1</b> wurde nicht gefunden. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Übersetzung speichern HTML files (*.html, *.htm) HTML-Dateien (*.html, *.htm) Text files (*.txt) Textdateien (*.txt) Search Suche Error Fehler Cannot save translation as %1 Kann Übersetzung nicht als %1 speichern Go to &previous translation Gehe zur &nächsten Übersetzung Go to &next translation Gehe zur &vorherigen Übersetzung &Save to file In &Datei speichern Speak &word &Wort aussprechen Prin&t translation Übersetzung &drucken Go &back Go &forward &Pronounce the word Open in the main window QStarDict::KDEIntegration enabled aktiviert disabled deaktiviert QStarDict::MainWindow About QStarDict Über QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> <b>QStarDict %1 </b> - Qt-Version von StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007-2023Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Das Suchfeld leeren Clear Löschen Fuzzy query Ungenaue Suche Search Suche Words list Wörterliste &File &Datei &Help &Hilfe &Settings &Einstellungen &Quit &Beenden Ctrl+Q Strg+Q &About Über Q&StarDict About &Qt Über &Qt &Configure QStarDict QStarDict &konfigurieren &Scan &Scannen QStarDict &Help QStarDict &Hilfe F1 F1 &Scan selection QStarDict &documentation Shift+Ctrl+F Shift+Ctrl+S QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled Aktiviert Name Name Plugin Plugin Information about dictionary "%1" Informationen zum Wörterbuch "%1" <b>Name:</b> %1<br> <b>Name:</b> %1<br> <b>Plugin:</b> %1<br> <b>Plugin:</b> %1<br> unknown unbekannt <b>Description:</b> %1 <b>Beschreibung:</b> %1 Information about %1 plugin Informationen zum Plugin "%1" <b>Version:</b> %1<br> <b>Version:</b> %1<br> <b>Authors:</b> %1<br> <b>Autoren:</b> %1<br> <br> <br> <b>Can search similar words:</b> %1<br> <b>Kann ähnliche Wörter suchen:</b> %1<br> yes ja no nein QStarDict Settings QStarDicts Einstellungen Show information about dictionary Informationen zum Wörterbuch anzeigen Global settings Globale Einstellungen Instant search Sofortsuche Pronounce words using this command: Folgendes Kommando zur Aussprache verwenden: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Geben Sie das Kommando für das Ausspracheprogramm ein.<br>Falls das Kommando "%s" enthält, wird dies durch das Wort ersetzt, andernfalls wird das Wort auf die stdin des Sprachprozesses geschrieben. Dictionaries Wörterbücher Move up Nach oben Up Auf Move down Nach unten Down Ab Show info Informationen anzeigen Plugins Plugins Show information about plugin Informationen zum Plugin anzeigen Info Info Configure plugin Plugin konfigurieren Configure Konfigurieren Popup window Popup-Fenster Behavior Verhalten Pronounce the word Spreche das Wort Timeout before hide after mouse over Zeitdauer bis zum Verschwinden nach Mouse Over Don't hide Nicht verstecken sec Sek. Show only if modifier is pressed Nur zeigen falls Taste gedrückt Alt Alt Control Strg Shift Umschalt Win Win Scan selection Auswahl scannen Show if word not found Anzeigen falls Wort nicht gefunden Appearance Erscheinungsbild Opacity Opazität % % Default width Standardbreite Default height Standardhöhe <b>Author:</b> %1<br> <b>Autor:</b> %1<br> <b>Words count:</b> %1<br> <b>Enthaltene Wörter:</b> %1<br> All translation Alle Übersetzungen Dictionary name Wörterbuchname Title Titel Explanation Erläuterung Abbreviation Abkürzung Example Beispiel Transcription Abschrift Application Run in background Start with system Translations browser Show words that are translatable as links Only if a modifier is pressed Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins <b>Filename:</b> %1<br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Scannen &Configure QStarDict QStarDict &konfigurieren &Quit &Beenden QStarDict: scanning is %1 QStarDict: Scannen ist %1 enabled aktiviert disabled deaktiviert Show &main window QStarDict::TrayIconDefaultImpl &Quit &Beenden QStarDict: scanning is %1 QStarDict: Scannen ist %1 enabled aktiviert disabled deaktiviert SaveToFile Text files (*.txt) Textdateien (*.txt) Save translation Übersetzung speichern HTML files (*.html, *.htm) HTML-Dateien (*.html, *.htm) Error Fehler Cannot save translation as %1 Kann Übersetzung nicht als %1 speichern &Save translation HTML files (*.html *.htm) SettingsDialog Up Auf Down Ab Dictionaries Wörterbücher Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-el_GR.ts000066400000000000000000001061561453553600400211470ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Form Φόρμα Search: Αναζήτηση: Case sensitive Με διάκριση πεζών -κεφαλαίων Whole words Ολόκληρες λέξεις Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation Αποθήκευση &μετάφρασης QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Προεπισκόπηση Element Στοιχείο Foreground Προσκήνιο Background Παρασκήνιο Select element Επιλογή στοιχείου Click to select color Κλικ για επιλογή χρώματος #000000 #000000 Font Γραμματοσειρά Size Μέγεθος Select font Επιλογή γραμματοσειράς Select font size Επιλογή μεγέθους γραμματοσειράς pt pt Bold Έντονο B Β Italic Πλάγια I I Underline Υπογραμμισμένο U U QStarDict::DictBrowser The word <b>%1</b> is not found. Η λέξη <b>%1</b> δε βρέθηκε. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Αποθήκευση μετάφρασης HTML files (*.html, *.htm) Αρχεία HTML (*.html, *.htm) Text files (*.txt) Αρχεία κειμένου (*.txt) Search Αναζήτηση HTML files (*.html *.htm) Αρχεία HTML (*.html, *.htm) Error Λάθος Cannot save translation as %1 Αδυναμία αποθήκευσης μετάφρασης Go to &previous translation Πήγαινε στη &προηγούμενη μετάφραση Go to &next translation Πήγαινε στην &επόμενη μετάφραση &Save to file &Αποθήκευση σε αρχείο Speak &word Προφορά &λέξης Prin&t translation Αποθήκευση &μετάφρασης Go &back Go &forward &Pronounce the word Open in the main window QStarDict::KDEIntegration enabled Ενεργοποιημένο disabled Απενεργοποιημένο QStarDict::MainWindow Ctrl+T Ctrl+T About QStarDict Σχετικά με το QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> <b>QStarDict %1 </b> - Qt έκδοση του StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Πνευματικά Δικαιώματα (C) 2007-2023 Alexandre Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Καθαρισμός αναζήτησης Clear Καθαρισμός Fuzzy query Ασαφής ερώτηση Search Αναζήτηση Words list Καταλογος λέξεων &File &Αρχείο &Help &Βοήθεια &Settings &Ρυθμίσεις &Quit &Έξοδος Ctrl+Q Ctrl+Q &About &Σχετικά About &Qt Σχετικά με το &Qt &Configure QStarDict &Ρύθμιση QStarDict &Scan &Σάρωση QStarDict &Help &Βοήθεια QStarDict F1 F1 &Scan selection QStarDict &documentation Shift+Ctrl+F Shift+Ctrl+S QStarDict::PluginsModel <b>Filename:</b> %1 <b>Όνομα αρχείου:</b> %1 <b>Status:</b> %1 <b>Kατάσταση:</b> %1 Loaded Φορτώθηκε Not Loaded Δε Φορτώθηκε Invalid Άκυρο QStarDict::SettingsDialog Enabled Ενεργοποιημένο Name Όνομα Plugin Πρόσθετο Information about dictionary "%1" Πληροφορίες λεξικού "%1" <b>Name:</b> %1<br> <b>Όνομα :</b> %1 <br> <b>Plugin:</b> %1<br> <b>Πρόσθετο :</b> %1 <br> unknown Άγνωστο <b>Description:</b> %1 <b>Περιγραφή :</b> %1 Information about %1 plugin Σχετικά με το πρόσθετο %1 <b>Version:</b> %1<br> <b>Έκδοση :</b> %1 <br> <b>Authors:</b> %1<br> <b>Συγγραφείς :</b> %1<br> <br> <br> <b>Can search similar words:</b> %1<br> <b>Δυνατότητ' αναζήτησης παρομοίων λέξεων:</b> %1<br> yes ναι no όχι QStarDict Settings Ρύθμιση QStarDict Show information about dictionary Εμφάνιση πληροφοριών λεξικού Global settings Καθολικές ρυθμίσεις Start with system Αυτόματη εκκίνηση Instant search Άμεση αναζήτηση Pronounce words using this command: Προφορά λέξεων με την εντολή : Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Εισαγωγή cmd για το πρόγραμμα προφοράς. <br>Αν η cmd περιέχει "%s", Θ' αντικατασταθεί με λέξη, αλλιώς η λέξη θα γραφεί στο stdin της διαδικασίας προφοράς. Dictionaries Λεξικά Move up Μετακίνηση επάνω Up Επάνω Move down Μετακίνηση κάτω Down Κάτω Show info Εμφάνιση πληροφοριών Plugins Πρόσθετα Show information about plugin Εμφάνιση πληροφοριών προσθέτων Info Πληροφορίες Configure plugin Ρύθμιση προσθέτου Configure Ρύθμιση Popup window Αναδυόμενο παράθυρο Behavior Συμπεριφορά Show translation popup by shortcut Εμφάνιση αναδυόμενης μετάφρασης με συνδυασμό πλήκτρων Pronounce the word Προφορά λέξης Timeout before hide after mouse over Λήξη χρόνου προ απόκρυψης μετά από μετακίνηση ποντικιού Don't hide Μη κρύψεις sec sec Show only if modifier is pressed Εμφάνιση μόνο κατόπιν συνδυασμού πλήκτρων Alt Alt Control Control Shift Shift Win Win Scan selection Επιλογή σάρωσης Show if word not found Εμφάνιση κατόπιν αδυναμίας εύρεσης Appearance Εμφάνιση Opacity Διαφάνεια % % Default width Προκαθορισμένο πλάτος Default height Προκαθορισμένο ύψος Misc Διάφορα Other Plugins Άλλα πρόσθετα <b>Author:</b> %1<br> <b>Συγγραφέας :</b> %1<br> <b>Words count:</b> %1<br> <b>Μετρητής λέξεων :</b> %1<br> All translation Όλες οι μεταφράσεις Dictionary name Όνομα λεξικού Title Τίτλος Explanation Εξήγηση Abbreviation Συντομογραφία Example Παράδειγμα Transcription Μεταγραφή Use system tray Χρήση μπάρας συστήματος Application Run in background Translations browser Show words that are translatable as links Only if a modifier is pressed Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut <b>Filename:</b> %1<br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Σάρωση &Configure QStarDict &Ρύθμιση QStarDict &Quit &Έξοδος QStarDict: scanning is %1 QStarDict: Σάρωση στο %1 enabled Ενεργοποιημένο disabled Απενεργοποιημένο Show &main window Εμφάνιση &κυρίως παραθύρου QStarDict::TrayIconDefaultImpl Show &main window Εμφάνιση &κυρίως παραθύρου &Quit &Έξοδος QStarDict: scanning is %1 QStarDict: Σάρωση στο %1 enabled Ενεργοποιημένο disabled Απενεργοποιημένο SaveToFile Text files (*.txt) Αρχεία κειμένου (*.txt) Save translation Αποθήκευση μετάφρασης HTML files (*.html *.htm) Αρχεία HTML (*.html, *.htm) HTML files (*.html, *.htm) Αρχεία HTML (*.html, *.htm) Error Λάθος Cannot save translation as %1 Αδυναμία αποθήκευσης μετάφρασης &Save translation SettingsDialog Up Επάνω Down Κάτω Dictionaries Λεξικά Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-en_US.ts000066400000000000000000000706651453553600400211750ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Element Foreground Background Select element Click to select color #000000 Font Size Select font Select font size pt Bold B Italic I Underline U QStarDict::DictBrowser The word <b>%1</b> is not found. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Go &back Go &forward &Pronounce the word Search Open in the main window QStarDict::MainWindow QStarDict Clear the search box Clear Fuzzy query Search Words list &File &Help &Settings &Quit Ctrl+Q &About About &Qt &Configure QStarDict &Scan selection QStarDict &documentation F1 Shift+Ctrl+F Shift+Ctrl+S About QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> %1 - QStarDict QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog QStarDict Settings Global settings Application Run in background Start with system Translations browser Instant search Show words that are translatable as links Only if a modifier is pressed Alt Control Shift Win Pronounce words using this command: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Dictionaries Move up Up Move down Down Add a dictionary Remove the dictionary Show information about dictionary Show info Plugins Popup window Behavior Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Don't hide sec Show only if the modifier is pressed Pronounce the word Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Appearance Opacity % Default width Default height Misc Other Plugins Enabled Name Plugin All translation Dictionary name Title Transcription Explanation Abbreviation Example Information about dictionary "%1" <b>Name:</b> %1<br> <b>Plugin:</b> %1<br> <b>Filename:</b> %1<br> <b>Author:</b> %1<br> <b>Words count:</b> %1<br> unknown <b>Description:</b> %1 Information about %1 plugin <b>Version:</b> %1<br> <b>Authors:</b> %1<br> <br> <b>Can search similar words:</b> %1<br> yes no Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict Show &main window &Scan &Configure QStarDict &Quit QStarDict: scanning is %1 enabled disabled SaveToFile &Save translation Text files (*.txt) Save translation HTML files (*.html *.htm) HTML files (*.html, *.htm) Error Cannot save translation as %1 SettingsDialog Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> Up <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Down Select dictionaries directory Web plugin settings Dictionaries Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-es_ES.ts000066400000000000000000000746621453553600400211630ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation &Imprimir QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Element Foreground Background Select element Click to select color #000000 Font Size Select font Select font size pt Bold B Italic I Underline U QStarDict::DictBrowser The word <b>%1</b> is not found. La palabra <b>%1</b> no ha sido encontrada. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget &Save to file &Guardar al archivo Prin&t translation &Imprimir Speak &word Pronunciar &palabra Search Buscar Error Error Go &back Go &forward &Pronounce the word Open in the main window QStarDict::MainWindow About QStarDict Acerca de QStarDict QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Limpiar el cuadro de búsqueda Clear Borrar Search Buscar &File &Archivo &Help &Ayuda &Settings &Configuración &Quit &Salir Ctrl+Q Ctrl+S &About &Acerca de About &Qt Acerca de &Qt &Configure QStarDict &Configurar QStarDict &Scan &Explorar QStarDict &Help QStarDict &Ayuda F1 F1 Fuzzy query Words list &Scan selection QStarDict &documentation Shift+Ctrl+F Shift+Ctrl+S <b>QStarDict %1 </b> - Qt version of StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Plugin Extension Dictionary name Nombre del diccionario Title Título Explanation Explicación Abbreviation Abreviación Example Ejemplo Transcription Transcripción QStarDict Settings Configuración de QStarDict Global settings Configuraciones Generales Pronounce words using this command: Pronunciar palabras usando este comando: Move up Subir Up Arriba Move down Bajar Down Abajo Show information about dictionary Mostrar información sobre el diccionario Show info Mostrar info Plugins Extensiones Show information about plugin Mostrar información sobre la extensión Info Info Configure plugin Configurar extensión Configure Configurar Popup window Ventana emergente Behavior Comportamiento Pronounce the word Pronunciar la palabra Timeout before hide after mouse over Tiempo de espera antes de esconder el puntero del ratón Don't hide No ocultar sec seg Show only if modifier is pressed Mostrar solo si el modificador está presionado Alt Alt Control Control Shift Shift Win Win Scan selection Escanear la selección Show if word not found Mostrar si la palabra no es encontrada Appearance Apariencia % % Default width Ancho predeterminado Default height Altura predeterminada Application Run in background Start with system Translations browser Instant search Show words that are translatable as links Only if a modifier is pressed Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Dictionaries Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Opacity Misc Other Plugins Enabled Name All translation Information about dictionary "%1" <b>Name:</b> %1<br> <b>Plugin:</b> %1<br> <b>Filename:</b> %1<br> <b>Author:</b> %1<br> <b>Words count:</b> %1<br> unknown <b>Description:</b> %1 Information about %1 plugin <b>Version:</b> %1<br> <b>Authors:</b> %1<br> <br> <b>Can search similar words:</b> %1<br> yes no Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Explorar &Configure QStarDict &Configurar QStarDict &Quit &Salir Show &main window QStarDict: scanning is %1 enabled disabled QStarDict::TrayIconDefaultImpl &Quit &Salir SaveToFile Error Error &Save translation Text files (*.txt) Save translation HTML files (*.html *.htm) HTML files (*.html, *.htm) Cannot save translation as %1 SettingsDialog Up Arriba Down Abajo Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Dictionaries Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-fr_FR.ts000066400000000000000000001011151453553600400211430ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation &Imprimer la page QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Aperçu Element Élément Foreground Premier-plan Background Arrière-plan Select element Veuillez choisir un élément Click to select color Veuillez choisir une couleur Font Police Size Taille Select font Veuillez choisir une police Select font size Veuillez choisir une taille de police pt pt Bold Gras B G Italic Italique I I Underline Souligné U S #000000 QStarDict::DictBrowser The word <b>%1</b> is not found. Le mot <b>%1</b> est introuvable. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Sauvegarder la traduction HTML files (*.html, *.htm) fichier HTML (*.html, *.htm) Text files (*.txt) Fichiers textes (*.txt) Search Rechercher Error Erreur Cannot save translation as %1 Écriture du fichier %1 impossible Go to &previous translation Page &précédente Go to &next translation Page &suivante &Save to file &Enregistrer sous... Speak &word &Prononcer le mot Prin&t translation &Imprimer la page Go &back Go &forward &Pronounce the word Open in the main window QStarDict::KDEIntegration enabled activée disabled désactivée QStarDict::MainWindow About QStarDict à propos de QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> <b>QStarDict %1 </b> - clone de StarDict pour Qt<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007-2023 Alexandre Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Effacer Clear Effacer Fuzzy query Chercher les mots ressemblant Search Rechercher Words list Mots semblables &File &Fichier &Help &Aide &Settings &Configuration &Quit &Quitter Ctrl+Q Ctrl+Q &About À &propos About &Qt À &propos de &Qt &Configure QStarDict &Configurer QStarDict &Scan &Traduction au survol &Scan selection QStarDict &documentation F1 Shift+Ctrl+F Shift+Ctrl+S QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled Activé Name Nom Plugin Extension Information about dictionary "%1" Information à propos du dictionnaire "%1" <b>Name:</b> %1<br> <b>Nom :</b> %1 <br> <b>Plugin:</b> %1<br> <b>Extension :</b> %1 <br> unknown inconnu <b>Description:</b> %1 <b>Description :</b> %1 Information about %1 plugin Information à propos de l'extension %1 <b>Version:</b> %1<br> <b>Version :</b> %1 <br> <b>Authors:</b> %1<br> <b>Auteurs :</b> %1<br> <b>Can search similar words:</b> %1<br> <b>Support des mots ressemblants :</b> %1<br> yes oui no non QStarDict Settings Configuration de QStarDict Show information about dictionary Afficher les information à propos du dictionnaire Global settings Paramètres généraux Instant search Recherche à la saisie Pronounce words using this command: Prononcer les mots en lançant la commande : Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Veuillez entrer la commande à executer pour la prononciation des mots. <br>Si la commande contient la chaine de caractère "%s", celle-ci sera remplacée par le mot à prononcer sinon le mot sera envoyé à la sortie standard du processus lancé (stdin). Dictionaries Dictionnaires Move up Monter Up Haut Move down Descendre Down Bas Show info Afficher les informations Plugins Extensions Show information about plugin Afficher les informations à propos de l'extension Info Informations Configure plugin Configurer l'extension Configure Configurer Popup window Traduction au survol Behavior Comportement Pronounce the word Prononcer le mot Timeout before hide after mouse over durée à attendre avant de masquer la traduction Don't hide Ne pas masquer sec sec Show only if modifier is pressed Afficher seulement si la touche suivante est enfoncée Alt Alt Control Control Shift Shift Win Win Scan selection Traduire les éléments sélectionnés Show if word not found Avertir si le mot est introuvable Appearance Apparence Opacity Opacité % % Default width Largeur par défaut Default height Hauteur par défaut <b>Author:</b> %1<br> <b>Auteur :</b> %1<br> <b>Words count:</b> %1<br> <b>Nombre de mots :</b> %1<br> All translation Style par défaut Dictionary name Nom du dictionnaire Title Titre Explanation Explication Abbreviation Abréviation Example Exemple Transcription Transcription Application Run in background Start with system Translations browser Show words that are translatable as links Only if a modifier is pressed Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins <b>Filename:</b> %1<br> <br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Traduction au survol &Configure QStarDict &Configurer QStarDict &Quit &Quitter QStarDict: scanning is %1 L'option "traduction au survol" est %1 enabled activée disabled désactivée Show &main window QStarDict::TrayIconDefaultImpl &Quit &Quitter QStarDict: scanning is %1 L'option "traduction au survol" est %1 enabled activée disabled désactivée SaveToFile Text files (*.txt) Fichiers textes (*.txt) Save translation Sauvegarder la traduction HTML files (*.html, *.htm) fichier HTML (*.html, *.htm) Error Erreur Cannot save translation as %1 Écriture du fichier %1 impossible &Save translation HTML files (*.html *.htm) SettingsDialog Up Haut Down Bas Dictionaries Dictionnaires Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-he_IL.ts000066400000000000000000000610021453553600400211250ustar00rootroot00000000000000 DictBrowserSearch Form Search: Case sensitive Whole words QStarDict::CSSEdit Preview תצוגה מקדימה Element אלמנט Foreground רקע קדמי Background רקע אחורי Select element בחר אלמנט Click to select color הקלק כדי לברור צבע #000000 Font גופן Size מידה Select font בחר גופן Select font size בחר מידת גופן pt points? Bold בולט B Italic נטוי I Underline קו תחתון U QStarDict::DictBrowser The word <b>%1</b> is not found. המילה <b>%1</b> אינה נמצאת. QStarDict::DictWidget Save translation שמור תרגום HTML files (*.html, *.htm) קבצי HTML ‏(‎*.html, *.htm) Text files (*.txt) קבצי תמליל (‎*.txt) Search חפש HTML files (*.html *.htm) קבצי HTML ‏(‎*.html *.htm) Error שגיאה Cannot save translation as %1 Go to &previous translation לך אל תרגום &קודם Go to &next translation לך אל תרגום &בא &Save to file &שמור אל קובץ Speak &word אמור &מילה Prin&t translation ה&דפס תרגום QStarDict::MainWindow Ctrl+T About QStarDict אודות QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> ‏<b>QStarDict %1 </b> - גרסאת Qt של StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> זכויות יוצרים (C)‏ 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict %1 - QStarDict Clear the search box טהר את תיבת החיפוש Clear טהר Fuzzy query שאילתא מטושטשת Search חפש Words list רשימת מילה &File &קובץ &Help &עזרה &Settings &הגדרות &Quit י&ציאה Ctrl+Q &About &אודות About &Qt אודות &Qt &Configure QStarDict &הגדר את QStarDict &Scan &סרוק QStarDict &Help &עזרת QStarDict F1 QStarDict::SettingsDialog Enabled Name שם Plugin תוספת Information about dictionary "%1" מידע אודות מילון "%1" <b>Name:</b> %1<br> <b>שם:</b> %1<br> <b>Plugin:</b> %1<br> <b>תוספת:</b> %1<br> unknown לא ידועה <b>Description:</b> %1 <b>תיאור:</b> %1 Information about %1 plugin מידע אודות תוספת %1 <b>Version:</b> %1<br> <b>גרסא:</b> %1<br> <b>Authors:</b> %1<br> <b>מחברים:</b> %1<br> <br> <b>Can search similar words:</b> %1<br> yes כן no לא QStarDict Settings הגדרות QStarDict Show information about dictionary הצג מידע אוודות מילון Global settings הגדרות גלובליות Start with system Instant search חיפוש מיידי Pronounce words using this command: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Dictionaries מילוניפ Move up הזז מעלה Up מעלה Move down הזז מטה Down מטה Show info הצג מידע Plugins תוספות Show information about plugin הצג מידע אוודות תוספת Info מידע Configure plugin הגדר תוספת Configure הגדר Popup window חלון מוקפץ Behavior התנהגות Show translation popup by shortcut Pronounce the word השמע את המילה Timeout before hide after mouse over Don't hide אל תסתיר sec Show only if modifier is pressed Alt Control Shift Win Scan selection סרוק בחירה Show if word not found הצג אם מילה לא נמצאה Appearance הופעה Opacity אטימות % Default width רוחב משתמט Default height גובה משתמט <b>Author:</b> %1<br> <b>מחבר:</b> %1<br> <b>Words count:</b> %1<br> <b>ספירת מילים:</b> %1<br> All translation כל התרגום Dictionary name שם מילון Title כותרת Explanation הסבר Abbreviation קיצור Example דוגמא Transcription תעתיק Use system tray השתמש במגש מערכת QStarDict::TrayIcon QStarDict &Scan &סרוק &Configure QStarDict &הגדר את QStarDict &Quit י&ציאה QStarDict: scanning is %1 QStarDict: סריקה הינה %1 enabled מאופשרת disabled מנוטרלת qstardict/translations/qstardict-it_IT.ts000066400000000000000000001006051453553600400211600ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation S&tampa traduzione QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Anteprima Element Elemento Foreground Primo piano Background Sfondo Select element Seleziona elementi Click to select color Click per selezionare il colore #000000 #000000 Font Carattere Size Dimensione Select font Seleziona carattere Select font size Seleziona dimensione carattere pt pt Bold Grassetto B B Italic Corsivo I I Underline Sottolineato U U QStarDict::DictBrowser The word <b>%1</b> is not found. La parola <b>%1</b> non è stata trovata. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Salva la traduzione HTML files (*.html, *.htm) File HTML (*.html, *.htm) Text files (*.txt) File di testo (*.txt) Search Cerca Error Errore Cannot save translation as %1 Non posso salvare la traduzione come %1 Go to &previous translation Vai alla traduzione &precedente Go to &next translation Vai alla traduzione s&uccessiva &Save to file &Salva come Speak &word Pronuncia f&rase Prin&t translation S&tampa traduzione Go &back Go &forward &Pronounce the word Open in the main window QStarDict::KDEIntegration enabled abilitato disabled disabilitato QStarDict::MainWindow About QStarDict Informazioni su QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> <b>QStarDict %1 </b> - Versione Qt di StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Cancella la ricerca Clear Cancella Fuzzy query Fuzzy query Search Cerca Words list Lista delle Frasi &File &File &Help &Aiuto &Settings &Impostazioni &Quit &Esci Ctrl+Q Ctrl+Q &About I&nformazioni su About &Qt Informazioni su &Qt &Configure QStarDict C&onfigura QStarDict &Scan &Cerca QStarDict &Help &Aiuto QStarDict F1 F1 &Scan selection QStarDict &documentation Shift+Ctrl+F Shift+Ctrl+S QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled Attivato Name Nome Plugin Estensione Information about dictionary "%1" Informazione sul dizionario "%1" <b>Name:</b> %1<br> <b>Nome:</b> %1<br> <b>Plugin:</b> %1<br> <b>Estensione:</b> %1<br> unknown ignoto <b>Description:</b> %1 <b>Descrizione:</b> %1 Information about %1 plugin Informazione sull'estensione %1 <b>Version:</b> %1<br> <b>Versione:</b> %1<br> <b>Authors:</b> %1<br> <b>Autori:</b> %1<br> <br> <br> <b>Can search similar words:</b> %1<br> <b>Puoi cercare parole simili:</b> %1<br> yes si no no QStarDict Settings Impostazioni QStarDict Show information about dictionary Mostra informazioni sul dizionario Global settings Impostazioni globali Instant search Ricerca istantanea Pronounce words using this command: Pronuncia le parole usando questo comando: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Inserisci il comando per il programma di pronuncia.<br>Se il comando contiene "%s" la parola verrà sostituita, altrimenti la parola sarà scritta nello stdin del processo di pronuncia. Dictionaries Dizionari Move up Sposta in su Up Su Move down Sposta in giù Down Giù Show info Mostra informazioni Plugins Estensioni Show information about plugin Mostra informazioni sull'estensione Info Informazioni Configure plugin Configura estensione Configure Configura Popup window Finestra di popup Behavior Comportamento Pronounce the word Pronuncia la parola Timeout before hide after mouse over Tempo di scomparsa dopo aver mosso il mouse Don't hide Non nascondere sec sec Show only if modifier is pressed Mostra solo se si preme Alt Alt Control Control Shift Shift Win Win Scan selection Cerca selezione Show if word not found Mostra se la parola non viene trovata Appearance Aspetto Opacity Opacità % % Default width Ampiezza di default Default height Altezza di default <b>Author:</b> %1<br> <b>Autore:</b> %1<br> <b>Words count:</b> %1<br> <b>Conto parole:</b> %1<br> All translation Tutta la traduzione Dictionary name Nome del dizionario Title Titolo Explanation Spiegazione Abbreviation Abbreviazione Example Esempio Transcription Trascrizione Application Run in background Start with system Translations browser Show words that are translatable as links Only if a modifier is pressed Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins <b>Filename:</b> %1<br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Cerca &Configure QStarDict &Configura QStarDict &Quit &Esci QStarDict: scanning is %1 QStarDict: la ricerca è %1 enabled abilitato disabled disabilitato Show &main window QStarDict::TrayIconDefaultImpl &Quit &Esci QStarDict: scanning is %1 QStarDict: la ricerca è %1 enabled abilitato disabled disabilitato SaveToFile Text files (*.txt) File di testo (*.txt) Save translation Salva la traduzione HTML files (*.html, *.htm) File HTML (*.html, *.htm) Error Errore Cannot save translation as %1 Non posso salvare la traduzione come %1 &Save translation HTML files (*.html *.htm) SettingsDialog Up Su Down Giù Dictionaries Dizionari Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-lt_LT.ts000066400000000000000000001011341453553600400211640ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation &Spausdinti puslapį QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Peržiūra Element Elementas Foreground Priekinis planas Background Fonas Select element Pasirinkite elementą Click to select color Pasirinkite spalvą #000000 #000000 Font Šriftas Size Dydis Select font Pasirinkite šriftą Select font size Pasirinkite šrifto dydį pt taškai Bold Pusjuodis B J Italic Kursyvas I K Underline Pabraukimas U P QStarDict::DictBrowser The word <b>%1</b> is not found. Žodis <b>%1</b> nerastas. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Įrašyti vertimą HTML files (*.html, *.htm) HTML rinkmenos (*.html, *.htm) Text files (*.txt) Teksto rinkmenos (*.txt) Search Ieškoti Error Klaida Cannot save translation as %1 Vertimo nepavyko įrašyti į %1 Go to &previous translation &Ankstesnis vertimas Go to &next translation &Tolesnis vertimas &Save to file Į&rašyti į rinkmeną Speak &word Iš&tarti žodį Prin&t translation &Spausdinti puslapį Go &back Go &forward &Pronounce the word Open in the main window QStarDict::KDEIntegration enabled įgalinta disabled uždrausta QStarDict::MainWindow About QStarDict Apie QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> <b>QStarDict %1 </b> - StarDict versija Qt sąsajai<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Autorinės teisės (C) 2007-2023 Alexandre Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Išvalyti paieškos laukelį Clear Išvalyti Fuzzy query Apytikslė paieška Search Ieškoti Words list Žodžių sąrašas &File &Rinkmena &Help &Pagalba &Settings &Nuostatos &Quit &Baigti Ctrl+Q Vald+Q &About &Apie About &Qt Apie &Qt &Configure QStarDict &Konfigūruoti QStarDict &Scan &Peržvelgimas QStarDict &Help QStarDict &pagalba F1 F1 &Scan selection QStarDict &documentation Shift+Ctrl+F Shift+Ctrl+S QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled Įgalinta Name Pavadinimas Plugin Papildinys Information about dictionary "%1" „%1“ – informaciją apie žodyną <b>Name:</b> %1<br> <b>Pavadinimas :</b> %1 <br> <b>Plugin:</b> %1<br> <b>Plėtinys :</b> %1 <br> unknown nežinoma <b>Description:</b> %1 <b>Aprašymas :</b> %1 Information about %1 plugin %1 – informacija apie papildinį <b>Version:</b> %1<br> <b>Versija :</b> %1 <br> <b>Authors:</b> %1<br> <b>Autoriai :</b> %1<br> <br> <br> <b>Can search similar words:</b> %1<br> <b>Palaikoma panašių žožių paieška:</b> %1<br> yes taip no ne QStarDict Settings QStarDict nuostatos Show information about dictionary Rodyti informaciją apie žodyną Global settings Bendros nuostatos Instant search Ieškoti vedant Pronounce words using this command: Žodžių tarimui naudoti komandą: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Įveskite komandą, naudojamą žodžių ištarimui.<br>Jei komanda turi reiškinį „%s“, jis bus pakeistas ištarsimu žodžiu, preišingu atveju žodis bus prirašytas komandos gale (stdin). Dictionaries Žodynai Move up Kelti aukštyn Up Aukštyn Move down Nuleisti žemyn Down Žemyn Show info Rodyti informaciją Plugins Papildiniai Show information about plugin Rodyti informaciją apie papildinį Info Informacija Configure plugin konfigūruoti papildinį Configure Konfigūruoti Popup window Iškylantis langas Behavior Elgsena Pronounce the word Ištarti žodį Timeout before hide after mouse over Lango rodymo laikas po to, kai jį palieka pelė Don't hide Neslėpti sec s Show only if modifier is pressed Rodyti tik nuspaudus modifikavimo klavišą Alt Alt Control Vald Shift Lyg2 Win Win Scan selection Peržvelgti pažymėtus tekstus Show if word not found Rodyti ir neradus žodžio Appearance Išvaizda Opacity Dengiamumas % % Default width Numatytasis plotis Default height Numatytasis aukštis <b>Author:</b> %1<br> <b>Autorius :</b> %1<br> <b>Words count:</b> %1<br> <b>Žodžių skaičius:</b> %1<br> All translation Numatytasis stilius Dictionary name Žodyno pavadinimas Title Antraštė Explanation Apibūdinimas Abbreviation Santrumpa Example Pavyzdys Transcription Transkripcija Use system tray Naudoti sistemos dėklą Application Run in background Start with system Translations browser Show words that are translatable as links Only if a modifier is pressed Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins <b>Filename:</b> %1<br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Peržvelgimas &Configure QStarDict &Konfigūruoti QStarDict &Quit &Baigti QStarDict: scanning is %1 Peržvelgimo parinktis: %1 enabled įgalinta disabled uždrausta Show &main window QStarDict::TrayIconDefaultImpl &Quit &Baigti QStarDict: scanning is %1 Peržvelgimo parinktis: %1 enabled įgalinta disabled uždrausta SaveToFile Text files (*.txt) Teksto rinkmenos (*.txt) Save translation Įrašyti vertimą HTML files (*.html, *.htm) HTML rinkmenos (*.html, *.htm) Error Klaida Cannot save translation as %1 Vertimo nepavyko įrašyti į %1 &Save translation HTML files (*.html *.htm) SettingsDialog Up Aukštyn Down Žemyn Dictionaries Žodynai Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-pl_PL.ts000066400000000000000000001007641453553600400211640ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation Drukuj &tłumaczenie QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Podgląd Element Element Foreground Pierwszy plan Background Tło Select element Wybierz element Click to select color Kliknij by wybrać kolor Font Czcionka Size Rozmiar Select font Wybierz czcionkę Select font size Wybierz rozmiar czionki Bold Pogrubiona Italic Pochyła Underline Podkreślona #000000 pt B I U QStarDict::DictBrowser The word <b>%1</b> is not found. Słowo <b>%1</b> nie zostało znalezione. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Zapisz tłumaczenie HTML files (*.html, *.htm) Pliki HTML (*.html, *.htm) Text files (*.txt) Pliki tekstowe (*.txt) Search Szukaj Error Błąd Cannot save translation as %1 Nie mogę zapisać tłumaczenia jako %1 Go to &previous translation Idź do &poprzedniego tłumaczenia Go to &next translation Idź do &następnego tłumaczenia &Save to file &Zapisz do pliku Speak &word Wymów sło&wo Prin&t translation Drukuj &tłumaczenie Go &back Go &forward &Pronounce the word Open in the main window QStarDict::KDEIntegration enabled włączone disabled wyłączone QStarDict::MainWindow About QStarDict O QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> <b>QStarDict %1 </b> - StarDict wersja QT<br> Copyright (C) 2007 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box Wyczyść okienko wyszukiwania Clear Wyczyść Fuzzy query Mętne zapytanie Search Szukaj Words list Lista słów &File &Plik &Help &Pomoc &Settings &Ustawienia &Quit &Zamknij Ctrl+Q Ctrl+Q &About &O QStarDict About &Qt O &Qt &Configure QStarDict &Konfiguruj QStarDict &Scan &Skanuj Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> {2007-2023 ?} &Scan selection QStarDict &documentation F1 Shift+Ctrl+F Shift+Ctrl+S QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled Włączone Name Nazwa Plugin Wtyczka Information about dictionary "%1" Informacja o słowniku "%1" <b>Name:</b> %1<br> <b>Imię:</b> %1<br> <b>Plugin:</b> %1<br> <b>Wtyczka:</b> %1<br> unknown nieznany <b>Description:</b> %1 <b>Opis:</b> %1 Information about %1 plugin Informację o wtyczce %1 <b>Version:</b> %1<br> <b>Wersja:</b> %1<br> <b>Authors:</b> %1<br> <b>Autorzy:</b> %1<br> <br> <br> <b>Can search similar words:</b> %1<br> <b>Może wyszukać podobne słowa:</b> %1<br> yes tak no nie QStarDict Settings Ustawienia QStarDict Show information about dictionary Pokaż informacje o słowniku Global settings Globalne opcje Instant search Błyskawiczne szukanie Pronounce words using this command: Wymów słowo używając tego polecenia: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Wpisz komendę dla syntezatora mowy.<br>Jeśli komenda zawiera "%s" to będzie ona zastąpiona słowem lub słowo zostanie zapisane do stdin procesu mówienia. Dictionaries Słowniki Move up Przesuń w górę Up Góra Move down Przesuń w dół Down Dół Show info Pokaż info Plugins Wtyczki Show information about plugin Pokaż informacje o wtyczce Info Info Configure plugin Konfiguruj wtyczkę Configure Konfiguruj Popup window Okno popup Behavior Zachowanie Pronounce the word Wymów słowo Timeout before hide after mouse over Opóźnienie zanim ukryje po najechaniu myszką Don't hide Nie ukrywaj sec sec Show only if modifier is pressed Pokaż tylko jeśli modyfikator zostanie naciśnięty Alt Alt Control Control Shift Shift Win Win Scan selection Skanuj zaznaczenie Show if word not found Pokaż jeśli słowo nie zostało znalezione Appearance Wygląd Opacity Nieprzezroczystość % % Default width Domyślna szerokość Default height Domyślna wysokość <b>Author:</b> %1<br> <b>Autor:</b> %1<br> <b>Words count:</b> %1<br> <b>Ilość słów:</b> %1<br> All translation Wszystkie tłumaczenia Dictionary name Nazwa słownika Title Tytuł Explanation Wytłumaczenie Abbreviation Skrót Example Przykład Transcription Transkrypcja Application Run in background Start with system Translations browser Show words that are translatable as links Only if a modifier is pressed Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins <b>Filename:</b> %1<br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Skanuj &Configure QStarDict &Konfiguruj QStarDict &Quit &Zamknij enabled włączone disabled wyłączone Show &main window QStarDict: scanning is %1 QStarDict::TrayIconDefaultImpl &Quit &Zamknij enabled włączone disabled wyłączone SaveToFile Text files (*.txt) Pliki tekstowe (*.txt) Save translation Zapisz tłumaczenie HTML files (*.html, *.htm) Pliki HTML (*.html, *.htm) Error Błąd Cannot save translation as %1 Nie mogę zapisać tłumaczenia jako %1 &Save translation HTML files (*.html *.htm) SettingsDialog Up Góra Down Dół Dictionaries Słowniki Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-pt_BR.ts000066400000000000000000000731321453553600400211620ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Element Foreground Background Select element Click to select color #000000 Font Size Select font Select font size pt Bold B Italic I Underline U QStarDict::DictBrowser The word <b>%1</b> is not found. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Salvar tradução Search Buscar Error Erro &Save to file &Salvar para arquivo Go &back Go &forward &Pronounce the word Open in the main window QStarDict::MainWindow About QStarDict Sobre QStarDict Clear the search box Limpar caixa de Busca Clear Limpar Fuzzy query Fuzzy Consulta Search Buscar Words list Lista de Palavras &File &Arquivo &Help &Ajuda &Settings &Configurações &Quit &Sair Ctrl+Q Ctrl+Q &About &Sobre About &Qt Sobre Qt &Configure QStarDict &Configurar QStarDict &Scan &Busca QStarDict &Scan selection QStarDict &documentation F1 Shift+Ctrl+F Shift+Ctrl+S <b>QStarDict %1 </b> - Qt version of StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> %1 - QStarDict QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog QStarDict Settings Configurações QStarDict Dictionaries Dicionários Up Cima Down Baixo Popup window Janela Popup Behavior Comportamento Pronounce the word Pronúciar esta palavra Timeout before hide after mouse over Esperar antes esconder depois de passar o mouse sobre Don't hide Não Esconder sec seg Show only if modifier is pressed Mostrar somente com modificador pressionando Alt Alt Control Control Shift Shift Win Win Scan selection Buscar Seleção Show if word not found Mostrar as palavras não encontradas Appearance Aparencia Opacity Opacidade % % Default width Largura padrão Default height Altura Padrão Global settings Application Run in background Start with system Translations browser Instant search Show words that are translatable as links Only if a modifier is pressed Pronounce words using this command: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Move up Move down Add a dictionary Remove the dictionary Show information about dictionary Show info Plugins Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins Enabled Name Plugin All translation Dictionary name Title Transcription Explanation Abbreviation Example Information about dictionary "%1" <b>Name:</b> %1<br> <b>Plugin:</b> %1<br> <b>Filename:</b> %1<br> <b>Author:</b> %1<br> <b>Words count:</b> %1<br> unknown <b>Description:</b> %1 Information about %1 plugin <b>Version:</b> %1<br> <b>Authors:</b> %1<br> <br> <b>Can search similar words:</b> %1<br> yes no Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon &Scan &Busca &Configure QStarDict &Configurar QStarDict &Quit &Sair QStarDict Show &main window QStarDict: scanning is %1 enabled disabled QStarDict::TrayIconDefaultImpl &Quit &Sair SaveToFile Save translation Salvar tradução Error Erro &Save translation Text files (*.txt) HTML files (*.html *.htm) HTML files (*.html, *.htm) Cannot save translation as %1 SettingsDialog Up Cima Down Baixo Dictionaries Dicionários Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-ru_RU.ts000066400000000000000000001327001453553600400212050ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Добавить словарь Kiwix Move Переместить Symlink Создать символическую ссылку the file <b>%1</b> to <b>%2</b> файл <b>%1</b> в <b>%2</b> Cannot add a dictionary Невозможно добавить словарь The file <b>%1</b> cannot be moved to <b>%2</b> Файл <b>%1</b> не может быть перемещен в <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> Символическая ссылка на файл <b>%1</b> не может быть создана как <b>%2</b> the file <b>%1</b><br>to <b>%2</b> файл <b>%1</b><br>в <b>%2</b> AddDictionaryDialog Add dictionary Добавить словарь Name: Название: Author: Автор: Description: Описание: HTTP query: HTTP запрос: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Шаблон '%s' будет заменен на слово.</p></body></html> HTML charset: Кодировка HTML: DictBrowserSearch Search: Поиск: Case sensitive Учитывать регистр Whole words Слова целиком Kiwix Kiwix ZIM files (*.zim) ZIM файлы Kiwix (*.zim) Print Prin&t translation На&печатать перевод QStarDict::Application A dictionary for learning foreign languages Словарь для изучения иностранных языков A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Предварительный просмотр Element Элемент Foreground Цвет шрифта Background Цвет фона Select element Выберите элемент Click to select color Нажмите чтобы выбрать элемент #000000 #000000 Font Шрифт Size Размер Select font Выберите шрифт Select font size Выберите размер шрифта pt пт Bold Жирный B Ж Italic Курсив I К Underline Подчеркнутый U П QStarDict::DictBrowser The word <b>%1</b> is not found. Слово <b>%1</b> не найдено. <p align="center"><a href="%1">Open QStarDict documentation</a></p> <p align="center"><a href="%1">Открыть документацию QStarDict</a></p> QStarDict::DictWidget Go to &previous translation Перейти к &предыдущему переводу Go to &next translation Перейти к &следующему переводу Speak &word П&роизнести слово Search Поиск Go &back Перейти &назад Go &forward Перейти &вперед &Pronounce the word &Произнести слово Open in the main window Открыть в главном &окне QStarDict::KDEIntegration scanning is %1 сканирование %1 enabled включено disabled выключено QStarDict::MainWindow QStarDict QStarDict Clear the search box Очистить строку поиска Clear Очистить Fuzzy query Неточный запрос Search Поиск Words list Список слов &File &Файл &Help &Справка &Settings &Настройки &Quit &Выход Ctrl+Q Ctrl+Q &About &О программе QStarDict About &Qt О &библиотеке Qt &Configure QStarDict &Конфигурация &Scan &Сканировать QStarDict &Help &Справка по QStarDict F1 F1 Ctrl+T Ctrl+T About QStarDict О программе QStarDict <b>QStarDict %1 </b> - Qt version of StarDict<br> <b>QStarDict %1 </b> - Qt-версия программы StarDict<br> Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007-2023 Александр Родин <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> %1 - QStarDict %1 - QStarDict Shift+Ctrl+F Shift+Ctrl+F &Scan selection &Сканировать выделение Shift+Ctrl+S Shift+Ctrl+S QStarDict &documentation &Документация QStarDict QStarDict::PluginsModel <b>Filename:</b> %1 <b>Имя файла:</b> %1 <b>Status:</b> %1 <b>Статус:</b> %1 Loaded Загружен Not Loaded Не загружен Invalid Несовместимый QStarDict::SettingsDialog QStarDict Settings Настройки QStarDict Global settings Общие настройки Run in background Работать в фоне Start with system Запускать вместе с системой Instant search Поиск при наборе Pronounce words using this command: Произносить слова, используя команду: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Введите команду для запуска программы.<br>Если команда содержит выражение "%s", оно будет заменено на слово; иначе слово будет записано в стандартный поток ввода процесса. Dictionaries Словари Move up Переместить вверх Up Вверх Move down Переместить вниз Down Вниз Show information about dictionary Показать информацию о словаре Show info Показывать информацию Plugins Плагины Popup window Всплывающее окно Behavior Поведение Show translation popup by shortcut Показывать всплывающее окно по горячей клавише Pronounce the word Произносить слово Timeout before hide after mouse over Задержка перед скрытием после отведения указателя мыши Don't hide Не скрывать sec сек Show only if modifier is pressed Показывать только если нажата клавиша-модификатор Alt Alt Control Control Shift Shift Win Win Scan selection Сканировать выделение Show if word not found Показывать если слово не найдено Appearance Внешний вид Opacity Непрозрачность: % % Default width Ширина по умолчанию: Default height Высота по умолчанию: Misc Прочее Other Plugins Другие плагины Enabled Включен Name Название Plugin Плагин All translation Весь перевод Dictionary name Название словаря Title Заголовок Explanation Пояснение Abbreviation Аббревиатура Example Пример употребления слова Transcription Транскрипция Information about dictionary "%1" Информация о словаре "%1" <b>Name:</b> %1<br> <b>Название:</b> %1<br> <b>Plugin:</b> %1<br> <b>Плагин:</b> %1<br> <b>Author:</b> %1<br> <b>Автор:</b> %1<br> <b>Words count:</b> %1<br> <b>Количество слов:</b> %1<br> unknown неизвестно <b>Description:</b> %1 <b>Описание:</b> %1 Information about %1 plugin Информация о плагине %1 <b>Version:</b> %1<br> <b>Версия:</b> %1<br> <b>Authors:</b> %1<br> <b>Авторы:</b> %1<br> <br> <br> <b>Can search similar words:</b>%1<br> <b>Поиск похожих слов:</b>%1<br> yes есть no нет Application Приложение Translations browser Просмотрщик переводов Show words that are translatable as links Показывать слова, которые могут быть переведены, как ссылки Only if modifier is pressed Только если модификатор нажат: Add a dictionary Добавить словарь Remove the dictionary Удалить словарь Scan selection and show the translation popup Сканировать выделение и показывать всплывающее окно с переводом Show if the word is not found Показывать, если слово не найдено Show the translation popup by a keyboard shortcut Показывать всплывающее окно с переводом по нажатию клавиатурной комбинации Timeout before hide after mouse is over Задержка перед скрытием после того, как курсор убран <b>Filename:</b> %1<br> <b>Имя файла:</b> %1<br> <b>Can search similar words:</b> %1<br> <b>Может искать похожие слова:</b> %1<br> Import a dictionary from a file Импортировать словарь из файла Unable to remove dictionary Невозможно удалить словарь Cannot remove dictionary %1 with plugin %1 Невозможно удалить словарь %1 с плагином %1 Show only if a modifier is pressed Показывать только если модифика Show only if the modifier is pressed Показывать только если модификатор нажат: Show the translation popup by the keyboard shortcut Показывать всплывающее окно с переводом по нажатию клавиатурной комбинации: Timeout before hide after the mouse is over Задержка перед скрытием после того, как курсор вышел за пределы окна: Only if a modifier is pressed Только если нажата клавиша-модификатор Show buttons for pronouncing IPA transcriptions Показывать кнопки для произношения транскрипций в МФА Use this command for eSpeak for pronouncing IPA Использовать команду для eSpeak для произношения МФА espeak espeak Switch on and off scanning by the keyboard shortcut Включать и отключать сканирование по нажатию клавиатурной комбинации QStarDict::TrayIcon QStarDict QStarDict &Scan &Сканировать &Configure QStarDict &Конфигурация Show &main window Показать &главное окно &Quit &Выход QStarDict: scanning is %1 QStarDict: сканирование %1 enabled включено disabled выключено QStarDict::TrayIconDefaultImpl Show &main window Показать &главное окно &Quit &Выход QStarDict: scanning is %1 QStarDict: сканирование %1 enabled включено disabled выключено SaveToFile &Save translation &Сохранить перевод Text files (*.txt) Тестовые файлы (*.txt) Save translation Сохранить перевод HTML files (*.html *.htm) Файлы HTML (*.html *.htm) HTML files (*.html, *.htm) Файлы HTML (*.html, *.htm) Error Ошибка Cannot save translation as %1 Не удалось сохранить перевод %1 SettingsDialog StarDict plugin settings Настройки плагина StarDict Translations Переводы If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Если включено, все переводы будут отформатированы с использованием HTML <li> тега (может быть медленным) Reformat lists Переформатировать списки Expand abbreviations if dictionary contains it (may be slow) Раскрывать сокращения, если словарь содежит их (может быть медленным) Expand abbreviations Раскрывать сокращения <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. <b><font color="red">Внимание!</font></b> Переформатированные переводы могут отображаться некорректно. Data directories Директории с данными <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Добавить директорию</p></body></html> Add Добавить <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Удалить директорию</p></body></html> Remove Удалить <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Переместить вверх</p></body></html> Up Вверх <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Переместить вниз</p></body></html> Down Вниз Select dictionaries directory Выберите директорию со словарями Anki plugin settings Настройки плагина Anki Anki Connect URL URL для Anki Connect Deck name Название колоды Model name Название модели Allow duplicates Разрешить повторения Web plugin settings Настройки плагина Web Dictionaries Словари Edit dictionary Изменить словарь Edit Изменить Add dictionary Добавить словарь Remove dictionary Удалить словарь General options Основные настройки Test Проверка Card types Типы карточек Basic card (word → translation) Основная карточка (слово → перевод) Custom deck name suffix Окончание называния колоды Reversed basic card (translation → word) Обратная карточка (перевод → слово) Type in card (word → translation) Основная карточка со вводом ответа (слово → перевод) Reversed type in card (translation → word) Обратная карточка со вводом ответа (перевод → слово) Unable to connect to Anki. Check if Anki is running and the URL is correct. Не удолось установить соединение с Anki. Проверьте, что Anki запущена и URL корректен. Unable to parse Anki response: %1 Не удалось разобрать ответ Anki: %1 The JSON returned by Anki is not an object JSON, возвращенный Anki, не является объектом Anki returned an error: %1 Anki вернула ошибку: %1 Connection succeded Соединение успешно The connection to Anki is working! Соединение с Anki работает! Connection error Ошибка соединения Validation error Ошибка валидации Deck name cannot be empty Имя колоды не может быть пустым Deck name for basic card cannot be empty Имя колоды для основной карточки не может быть пустым Deck name for reversed basic card cannot be empty Имя колоды для обратной основной карточки не может быть пустым Deck name for type in card cannot be empty Имя колоды для карточки со вводом ответа не может быть пустым Deck name for reversed type in card cannot be empty Имя колоды для обратной карточки со вводом ответа не может быть пустым Anki base data directory Базовая директория с данными Anki Anki profile name Имя профиля Anki Kiwix plugin settings Настройки плагина Kiwix Convert all colors to grayscale Преобразовать все цвета в оттенки серого StarDict Cannot import the dictionary Не удалось импортировать словарь The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored Словарь не может быть импортирован, потому что в директории, содержащей .ifo файл, нет .idx файла The dictionary cannot be imported because .idx file cannot be copied Словарь не может быть импортирован, потому что .idx файл не может быть скопирован The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored Словарь не может быть импортирован, потому что в директории, содержащей .ifo файл, нет .dict.dz файла The dictionary cannot be imported because .dict.dz file cannot be copied Словарь не может быть импортирован, потому что .dict.dz файл не может быть скопирован The dictionary cannot be imported because .ifo file cannot be copied Словарь не может быть импортирован, потому что .ifo файл не может быть скопирован StarDict IFO files (*.ifo) IFO файлы StarDict (*.ifo) qstardict/translations/qstardict-uk_UA.ts000066400000000000000000000770721453553600400211670ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview Попередній перегляд Element Елемент Foreground Передній план Background Задній план Select element Вибір елемента Click to select color Клік для вибору кольору Font Шрифт Size Розмір Select font Вибір шрифту Select font size Вибір розміру шрифту Bold Жирний Italic Курсив Underline Підкреслений #000000 pt B I U QStarDict::DictBrowser The word <b>%1</b> is not found. <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation Зберегти переклад Search Пошук Error Помилка &Save to file &Зберегти в файл Go &back Go &forward &Pronounce the word Open in the main window QStarDict::MainWindow About QStarDict Про програму QStarDict Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> Copyright (C) 2007-2023 Александр Родин <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict Clear the search box Очистити рядок пошуку Clear Почистити Fuzzy query Нечiткий запит Search Пошук Words list Список слiв &File &Файл &Help &Довiдка &Settings &Налаштування &Quit &Вихiд Ctrl+Q Ctrl+Q &About &Про програму QStarDict About &Qt Про &бiблiотеку Qt &Configure QStarDict &Конфiгурацiя &Scan &Сканувати &Scan selection QStarDict &documentation F1 Shift+Ctrl+F Shift+Ctrl+S <b>QStarDict %1 </b> - Qt version of StarDict<br> %1 - QStarDict QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled Включено Name Ім'я Plugin Плагін Information about dictionary "%1" Інформація про словник "%1" <b>Name:</b> %1<br> <b>Ім'я:</b> %1<br> <b>Plugin:</b> %1<br> <b>Плагін:</b> %1<br> unknown невідомо <b>Description:</b> %1 <b>Опис:</b> %1 Information about %1 plugin Інформація про %1 плагін <b>Version:</b> %1<br> <b>Версія:</b> %1<br> <b>Authors:</b> %1<br> <b>Автори:</b> %1<br> <b>Can search similar words:</b> %1<br> <b>Шукати подібні слова:</b> %1<br> yes Так no Ні QStarDict Settings Налаштування QStarDict Show information about dictionary Показати інформацію про словник Global settings Глобальні налаштування Instant search Миттєвий пошук Pronounce words using this command: Вимовляти слова, використовуючи цю команду: Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Введіть команду для розмовної програми. <br>Якщо команда містить "%s" це буде замінено словом, інaкше слово буде записано на stdin. Dictionaries Словники Move up Перейти вверх Up Уверх Move down Перейти вниз Down Вниз Show info Показати інформацію Plugins Плагіни Show information about plugin Показати інформацію про плагін Info Інфо Configure plugin Налаштувати плагін Configure Конфігурація Popup window Вiкно повiдомлення Behavior Поведiнка Pronounce the word Вимовити слово Timeout before hide after mouse over Затримка приховування пiсля "втечi" мишi з вiкна переклада Don't hide Не приховувати sec сек Show only if modifier is pressed Показувати тiльки якщо натиснута клавiша-модифiкатор Alt Alt Control Control Shift Shift Win Win Scan selection Сканувати видiлення Show if word not found Показувати, якщо слово не знайдено Appearance Зовнiшнiй вигляд Opacity Непрозорiсть % % Default width Ширина за замовчуванням Default height Висота за замовчуванням <b>Author:</b> %1<br> <b>Автор:</b> %1<br> <b>Words count:</b> %1<br> <b>Кількість слів:</b> %1<br> All translation Всі переклади Dictionary name Ім'я словника Title Заголовок Explanation Проголошення Abbreviation Абревіатури Example Приклад Transcription Транскрипція Application Run in background Start with system Translations browser Show words that are translatable as links Only if a modifier is pressed Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins <b>Filename:</b> %1<br> <br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan &Сканувати &Configure QStarDict &Конфiгурацiя &Quit &Вихiд Show &main window QStarDict: scanning is %1 enabled disabled QStarDict::TrayIconDefaultImpl &Quit &Вихiд SaveToFile Save translation Зберегти переклад Error Помилка &Save translation Text files (*.txt) HTML files (*.html *.htm) HTML files (*.html, *.htm) Cannot save translation as %1 SettingsDialog Up Уверх Down Вниз Dictionaries Словники Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-zh_CN.ts000066400000000000000000001013531453553600400211520ustar00rootroot00000000000000 AddDialog Add a Kiwix dictionary Move Symlink the file <b>%1</b><br>to <b>%2</b> Cannot add a dictionary The file <b>%1</b> cannot be moved to <b>%2</b> The symlink to file <b>%1</b> cannot be createdat <b>%2</b> AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Form 表格 Search: 搜索: Case sensitive 大小写敏感 Whole words 完整单词 Kiwix Kiwix ZIM files (*.zim) Print Prin&t translation 打印翻译(&t) QStarDict::Application A dictionary application for learning foreign languages Start in background mode. QStarDict::CSSEdit Preview 预览 Element 元素 Foreground 前景 Background 背景 Select element 选择元素 Click to select color 点击以选择 #000000 #000000 Font 字体 Size 大小 Select font 选择字体 Select font size 选择字体大小 pt pt Bold 黑体 B B Italic 斜体 I I Underline 下划线 U U QStarDict::DictBrowser The word <b>%1</b> is not found. 找不到单词 <b>%1</b>。 <p align="center"><a href="%1">Open QStarDict documentation</a></p> QStarDict::DictWidget Save translation 保存翻译 HTML files (*.html, *.htm) HTML文件(*.html, *.htm) Text files (*.txt) 文本文件 Search 搜索 HTML files (*.html *.htm) HTML 文件 (*.html *.htm) Error 错误 Cannot save translation as %1 不能将翻译保存为 %1 Go to &previous translation 前往前一翻译 (&p) Go to &next translation 前往后一翻译 (&n) &Save to file 保存到文件(&S) Speak &word 读出单词(&w) Prin&t translation 打印翻译(&t) Go &back Go &forward &Pronounce the word Open in the main window QStarDict::KDEIntegration enabled 启用 disabled 禁用 QStarDict::MainWindow Ctrl+T Ctrl+T About QStarDict 关于 QStarDict Copyright (C) 2007 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> 版权 (C) 2007 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box 清除搜索框 Clear 清除 Fuzzy query 模糊查询 Search 搜索 Words list 词汇列表 &File 文件(&F) &Help 帮助(&H) &Settings 设置(&S) &Quit 离开(&Q) Ctrl+Q Ctrl+Q &About 关于(&A) About &Qt 关于Qt(&Q) &Configure QStarDict 设置(&C) &Scan 取词(&S) Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> 版权所有 (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict &Help 帮助(&H) F1 F1 &Scan selection QStarDict &documentation Shift+Ctrl+F Shift+Ctrl+S <b>QStarDict %1 </b> - Qt version of StarDict<br> QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled 启用 Name 名称 Plugin 插件 Information about dictionary "%1" 字典"%1" 的信息 <b>Plugin:</b> %1<br> <b>插件:</b> %1<br> unknown 未知 <b>Description:</b> %1 <b>描述:</b> %1 Information about %1 plugin 关于插件 %1 的信息 <b>Version:</b> %1<br> <b>版本:</b> %1<br> <b>Authors:</b> %1<br> <b>作者:</b> %1<br> <b>Can search similar words:</b> %1<br> <b>可以搜索相似单词:</b> %1<br> yes no QStarDict Settings QStarDict 设置 Show information about dictionary 显示字典信息 Global settings 全局设置 Use system tray 使用系统托盘 Start with system 随系统启动 Instant search 即搜 Pronounce words using this command: 使用如下命令发音: Dictionaries 字典 Move up 上移 Up Move down 下移 Down Show info 显示信息 Plugins 插件 Show information about plugin 显示插件信息 Info 信息 Configure plugin 设定插件 Configure 设定 Popup window 弹出窗口 Behavior 行为 Show translation popup by shortcut 使用快捷键显示翻译弹出窗口 Pronounce the word 单词发音 Timeout before hide after mouse over 鼠标悬停隐藏超时 Don't hide 不隐藏 sec Show only if modifier is pressed 显示,仅当按下 Alt Alt Control Control Shift Shift Win Win Scan selection 选择区取词 Show if word not found 当未找到词时显示 Appearance 外观 Opacity 不透明度 % % Default width 默认宽度 Default height 默认高度 All translation 所有的翻译 Dictionary name 字典名称 Title 标题 Abbreviation 缩写 Example 例子 Application Run in background Translations browser Show words that are translatable as links Only if a modifier is pressed Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Show buttons for pronouncing IPA transcriptions Use this command for eSpeak for pronouncing IPA espeak Add a dictionary Remove the dictionary Scan selection and show the translation popup Show if the word is not found Timeout before hide after the mouse is over Show only if the modifier is pressed Switch on and off scanning by the keyboard shortcut Show the translation popup by the keyboard shortcut Misc Other Plugins Transcription Explanation <b>Name:</b> %1<br> <b>Filename:</b> %1<br> <b>Author:</b> %1<br> <b>Words count:</b> %1<br> <br> Import a dictionary from a file Unable to remove dictionary Cannot remove dictionary %1 with plugin %1 QStarDict::TrayIcon QStarDict QStarDict &Scan 取词(&S) &Configure QStarDict 设置 QStarDict(&C) &Quit 离开(&Q) QStarDict: scanning is %1 QStarDict:检索已%1 enabled 启用 disabled 禁用 Show &main window QStarDict::TrayIconDefaultImpl &Quit 离开(&Q) QStarDict: scanning is %1 QStarDict:检索已%1 enabled 启用 disabled 禁用 SaveToFile Text files (*.txt) 文本文件 Save translation 保存翻译 HTML files (*.html *.htm) HTML 文件 (*.html *.htm) HTML files (*.html, *.htm) HTML文件(*.html, *.htm) Error 错误 Cannot save translation as %1 不能将翻译保存为 %1 &Save translation SettingsDialog Up Down Dictionaries 字典 Kiwix plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Convert all colors to grayscale StarDict plugin settings Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary StarDict Cannot import the dictionary The dictionary cannot be imported because there is no .idx file in the directory where .ifo file is stored The dictionary cannot be imported because .idx file cannot be copied The dictionary cannot be imported because there is no .dict.dz file in the directory where .ifo file is stored The dictionary cannot be imported because .dict.dz file cannot be copied The dictionary cannot be imported because .ifo file cannot be copied StarDict IFO files (*.ifo) qstardict/translations/qstardict-zh_TW.ts000066400000000000000000000630661453553600400212140ustar00rootroot00000000000000 AddDictionaryDialog Add dictionary Name: Author: Description: HTTP query: <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The '%s' template will be replace to word.</p></body></html> HTML charset: DictBrowserSearch Search: Case sensitive Whole words Print Prin&t translation 列印翻譯(&t) QStarDict::CSSEdit Preview 預覽 Element 元素 Foreground 前景 Background 背景 Select element 選取元素 Click to select color 點選色彩 #000000 #000000 Font 字型 Size 大小 Select font 選取字型 Select font size 選取字型大小 pt pt Bold 粗體 B B Italic 斜體 I I Underline 底線 U U QStarDict::DictBrowser The word <b>%1</b> is not found. 找不到單字 <b>%1</b> QStarDict::DictWidget Save translation 儲存翻譯 HTML files (*.html, *.htm) HTML檔案(*.html, *.htm) Text files (*.txt) 文字檔 Error 錯誤 Cannot save translation as %1 無法將翻譯儲存為 %1 Go to &previous translation 前一個翻譯 (&p) Go to &next translation 後一個翻譯 (&n) &Save to file 儲存到檔案(&S) Speak &word 讀出單字 (&w) Prin&t translation 列印翻譯(&t) Search 搜尋 QStarDict::KDEIntegration enabled 啟用 disabled 停用 scanning is %1 QStarDict::MainWindow About QStarDict 關於 QStarDict Copyright (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> 版權 (C) 2007-2023 Alexander Rodin <a href="http://qstardict.ylsoftware.com">http://qstardict.ylsoftware.com</a> QStarDict QStarDict %1 - QStarDict %1 - QStarDict Clear the search box 清除搜尋框 Clear 清除 Fuzzy query 模糊查詢 Search 搜尋 Words list 字彙清單 &File 檔案(&F) &Help 說明(&H) &Settings &設定 &Quit 離開(&Q) Ctrl+Q Ctrl+Q &About 關於(&A) About &Qt 關於 Qt &Configure QStarDict 設定 QStarDict(&C) &Scan 取詞(&S) QStarDict &Help QStarDict 說明(&H) F1 Ctrl+T <b>QStarDict %1 </b> - Qt version of StarDict<br> QStarDict::PluginsModel <b>Filename:</b> %1 <b>Status:</b> %1 Loaded Not Loaded Invalid QStarDict::SettingsDialog Enabled 啟用 Name 名稱 Plugin 外掛程式 Information about dictionary "%1" 字典"%1" 的資訊 <b>Name:</b> %1<br> <b>字典名稱:</b> %1<br> <b>Plugin:</b> %1<br> <b>外掛程式:</b> %1<br> unknown 未知 <b>Description:</b> %1 <b>說明:</b> %1 Information about %1 plugin 關於外掛程式 %1 的資訊 <b>Version:</b> %1<br> <b>版本:</b> %1<br> <b>Authors:</b> %1<br> <b>作者:</b> %1<br> <b>Can search similar words:</b> %1<br> <b>可以搜尋相似單字:</b> %1<br> yes no QStarDict Settings QStarDict 設定 Show information about dictionary 顯示字典資訊 Global settings 全域設定 Instant search 即時搜尋 Pronounce words using this command: 使用如下指令發音 Dictionaries 字典 Move up 上移 Up Move down 下移 Down Show info 顯示資訊 Plugins 外掛程式 Show information about plugin 顯示外掛程式資訊 Info 資訊 Configure plugin 設定外掛程式 Configure 設定 Popup window 快顯視窗 Behavior 行為 Pronounce the word 單字發音 Timeout before hide after mouse over 滑鼠懸停隱藏逾時 Don't hide 不隱藏 sec Show only if modifier is pressed 顯示,僅當按下 Alt Alt Control Control Shift Shift Win Win Scan selection 選取區取詞 Show if word not found 當未找到字時顯示 Appearance 外觀 Opacity 不透明度 % % Default width 預設寬度 Default height 預設高度 <b>Author:</b> %1<br> <b>作者:</b> %1<br> <b>Words count:</b> %1<br> <b>單字數:</b> %1<br> All translation 所有的翻譯 Dictionary name 字典名稱 Title 標題 Abbreviation 縮寫 Example 範例 Run in background Start with system Enter cmd for the speaching program.<br>If cmd contains "%s" it will be replaced to word, else word will be written to stdin of speech process. Show translation popup by shortcut Misc Other Plugins Explanation Transcription <br> <b>Can search similar words:</b>%1<br> QStarDict::TrayIcon QStarDict QStarDict &Scan 取詞(&S) &Configure QStarDict 設定 QStarDict(&C) &Quit 離開(&Q) QStarDict: scanning is %1 QStarDict: 取詞已%1 enabled 啟用 disabled 停用 QStarDict::TrayIconDefaultImpl &Quit 離開(&Q) QStarDict: scanning is %1 QStarDict: 取詞已%1 enabled 啟用 disabled 停用 Show &main window SaveToFile Text files (*.txt) 文字檔 Save translation 儲存翻譯 HTML files (*.html, *.htm) HTML檔案(*.html, *.htm) Error 錯誤 Cannot save translation as %1 無法將翻譯儲存為 %1 &Save translation HTML files (*.html *.htm) SettingsDialog Up Down Dictionaries 字典 StarDict plugin settings Translations If enabled, all lists in translation will be formatted using HTML <li> tag (may be slow) Reformat lists Expand abbreviations if dictionary contains it (may be slow) Expand abbreviations <b><font color="red">Warning!</font></b> Reformatted translations may display incorrectly. Data directories <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add directory</p></body></html> Add <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove directory</p></body></html> Remove <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move up</p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Move down</p></body></html> Select dictionaries directory Deck name Model name Allow duplicates Web plugin settings Edit dictionary Edit Add dictionary Remove dictionary qstardict/translations/translations.pri000066400000000000000000000041711453553600400210420ustar00rootroot00000000000000############################################################################# # translations.pri - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2008-2009 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TRANSLATIONS_SRC_DIR=$$PWD TRANSLATIONS += \ $$TRANSLATIONS_SRC_DIR/qstardict-bg_BG.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-cs_CZ.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-de_DE.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-el_GR.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-en_US.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-es_ES.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-fr_FR.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-it_IT.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-lt_LT.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-pl_PL.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-pt_BR.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-ru_RU.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-uk_UA.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-zh_CN.ts \ $$TRANSLATIONS_SRC_DIR/qstardict-zh_TW.ts qstardict/translations/translations.pro000066400000000000000000000050111453553600400210420ustar00rootroot00000000000000############################################################################# # translations.pro - QStarDict, a StarDict clone written with using Qt # # Copyright (C) 2008-2019 Alexander Rodin # # # # 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., # # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ############################################################################# TEMPLATE = aux include(../qstardict.pri) include(translations.pri) # from https://github.com/Arora/arora/blob/e310d632e9f6c135c376576d2d466af03fd219ee/src/locale/locale.pri isEmpty(QMAKE_LRELEASE) { win32|os2:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease unix { !exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease-qt4 } } else { !exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease } } } # from https://github.com/Arora/arora/blob/e310d632e9f6c135c376576d2d466af03fd219ee/src/locale/locale.pri updateqm.input = TRANSLATIONS updateqm.output = $$TRANSLATIONS_SRC_DIR/${QMAKE_FILE_BASE}.qm updateqm.commands = $$QMAKE_LRELEASE -silent ${QMAKE_FILE_IN} -qm $$TRANSLATIONS_SRC_DIR/${QMAKE_FILE_BASE}.qm updateqm.CONFIG += no_link target_predeps QMAKE_EXTRA_COMPILERS += updateqm isEmpty(NO_TRANSLATIONS) { translations.CONFIG += no_check_exist for(t, TRANSLATIONS) { t ~= "s/^(.+).ts$/\\1.qm" translations.files += $$t DISTFILES += $$t # For what? } translations.path = $$TRANSLATIONS_DIR INSTALLS += translations }