pax_global_header00006660000000000000000000000064137471054570014527gustar00rootroot0000000000000052 comment=74f35cfdd5b14a92597f580c8d3a4a96f89a8d63 tootle-1.0-alpha2/000077500000000000000000000000001374710545700140425ustar00rootroot00000000000000tootle-1.0-alpha2/.buildconfig000066400000000000000000000003411374710545700163260ustar00rootroot00000000000000[default] name=Default runtime=host toolchain=default config-opts= run-opts= prefix=/home/user/.cache/gnome-builder/install/tootle/host app-id= postbuild= prebuild= default=true [default.environment] G_MESSAGES_DEBUG=tootle tootle-1.0-alpha2/.github/000077500000000000000000000000001374710545700154025ustar00rootroot00000000000000tootle-1.0-alpha2/.github/FUNDING.yml000066400000000000000000000000511374710545700172130ustar00rootroot00000000000000custom: https://liberapay.com/bleakgrey/ tootle-1.0-alpha2/.github/ISSUE_TEMPLATE/000077500000000000000000000000001374710545700175655ustar00rootroot00000000000000tootle-1.0-alpha2/.github/ISSUE_TEMPLATE/bug-report.md000066400000000000000000000012521374710545700221750ustar00rootroot00000000000000--- name: Bug Report about: Report a problem in the application behavior title: Bug Report labels: 'bug' assignees: '' --- ⚠️ Please try to fill in every blank. Keep the information clear and concise. #### What should happen: __ #### What happened instead: __ #### How to reproduce: 1. __ 2. __ #### Screenshots (if applicable): __ #### Build context: - **Distro:** __ - **App version:** __ - **Build type:** Flatpak / Built from source / Built by a third-party maintainer #### Logs: *(Terminal logs are often invaluable. If you can, launch the app from terminal with `com.github.bleakgrey.tootle` and paste the output here)* #### Additional info (if needed): __ tootle-1.0-alpha2/LICENSE000066400000000000000000001045131374710545700150530ustar00rootroot00000000000000 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 . tootle-1.0-alpha2/README.md000066400000000000000000000032311374710545700153200ustar00rootroot00000000000000## Tootle Simple [Mastodon](https://github.com/tootsuite/mastodon) client for Linux ![Screenshot](https://raw.githubusercontent.com/bleakgrey/tootle/master/data/screenshot1.png) ### Installation Download on Flathub ### Building From Source 1. Make sure you have these dependencies: Package Name | Required Version --- |:---: meson | 0.50 valac | 0.48 libglib-2.0-dev | 2.30.0 libjson-glib-dev | 1.4.4 libgee-0.8-dev | 0.8.5 libsoup2.4-dev | 2.64 libgtk-3-dev | 3.22.0 The following packages are also required, but will be installed automatically if not present in your system: Package Name | Required Version --- |:---: libhandy-1.0-dev | 1.0.0 2. Run `install.sh` in the project directory. The app will launch automatically on success. ### Contributing Please consider donating with [LiberaPay](https://liberapay.com/bleakgrey/) to keep the developer happy. Donate using Liberapay You can always help by reporting bugs, submitting pull requests, and suggesting ideas. ### Credits * Icon design by [Tobias Bernard](https://github.com/bertob) * French translation by [@Larnicone](https://github.com/Larnicone) * Polish translation by [@m4sk1n](https://github.com/m4sk1n) * German translation by [@koyuawsmbrtn](https://github.com/koyuawsmbrtn) * Simplified Chinese translation by [@gloomy-ghost](https://github.com/gloomy-ghost) tootle-1.0-alpha2/data/000077500000000000000000000000001374710545700147535ustar00rootroot00000000000000tootle-1.0-alpha2/data/app.css000066400000000000000000000014211374710545700162430ustar00rootroot00000000000000.header .chip { padding: 4px 12px; border-radius: 4px; border: 1px solid black; } .attachment { border-radius: 5px; background: rgba (150, 150, 150, 0.2); padding:0px; margin:0px; } .attachment .pic { border-radius: 5px; } .attachment .chip { padding: 6px; border-radius:6px; } .header-title-button { margin: 0px; border-radius: 0px; border-top: none; border-bottom: none; } .padded.ttl-view { margin: 32px 0 32px 0; } .ttl-view:not(.padded) .content row { border-radius: 0px; } .ttl-action-bar .circular { box-shadow: none; } .ttl-flat-button { padding: 0px; margin: 0px; } .ttl-post { padding: 0px; } .ttl-thread-line { background: @theme_fg_color; opacity: .1; margin-top: -8px; margin-bottom: -8px; } .ttl-large-body { font-size: 110%; } tootle-1.0-alpha2/data/com.github.bleakgrey.tootle.appdata.xml.in000066400000000000000000000105201374710545700250210ustar00rootroot00000000000000 com.github.bleakgrey.tootle CC0-1.0 GPL-3.0+ Tootle Lightning fast client for Mastodon

Tootle is a GTK client for the world's largest, decentralized, microblogging platform, Mastodon. With the user experience in mind, it provides a clean, native interface that allows you to integrate Mastodon's social experience seamlessly with your desktop environment.

Mastodon is a free and open source microblogging platform similar to Twitter, but with user privacy and decentralization in mind. It is one of many protocols that interacts with the Fediverse of protocols like Pleroma, GNU Social, and others. The power of federated microblogging that Mastodon brings and the agility of Tootle creates a fantastic duo for all of your social media needs.

com.github.bleakgrey.tootle bleak_grey https://github.com/bleakgrey https://github.com/bleakgrey/tootle/issues https://liberapay.com/bleakgrey/donate none none none none none none none none none none none none none none none none none none none none moderate none moderate none intense none none workstation mobile https://raw.githubusercontent.com/bleakgrey/tootle/master/data/screenshot1.png https://raw.githubusercontent.com/bleakgrey/tootle/master/data/screenshot2.png https://raw.githubusercontent.com/bleakgrey/tootle/master/data/screenshot3.png https://raw.githubusercontent.com/bleakgrey/tootle/master/data/screenshot4.png
  • New app icon (Kudos to Tobias Bernard!)
  • New interface design
  • Added Lists and Conversations
  • Fixed bugs
tootle-1.0-alpha2/data/com.github.bleakgrey.tootle.desktop.in000066400000000000000000000007571374710545700242740ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Tootle Comment=Mastodon Client GenericName=Mastodon Client Exec=com.github.bleakgrey.tootle %u Icon=com.github.bleakgrey.tootle Terminal=false Categories=GNOME;GTK;Network; Keywords=toot;mastodon;social;network;post; X-GNOME-Gettext-Domain=com.github.bleakgrey.tootle X-GNOME-UsesNotifications=true MimeType=x-scheme-handler/tootle; # Translators: Do NOT translate or transliterate this text (these are enum types)! X-Purism-FormFactor=Workstation;Mobile; tootle-1.0-alpha2/data/com.github.bleakgrey.tootle.gschema.xml000066400000000000000000000027311374710545700244160ustar00rootroot00000000000000 0 false false false 'public' 12 100 true false false -1 -1 600 700 tootle-1.0-alpha2/data/gresource.xml000066400000000000000000000020631374710545700174740ustar00rootroot00000000000000 app.css ui/views/new_account.ui ui/views/base.ui ui/views/profile_header.ui ui/widgets/status.ui ui/widgets/accounts_button.ui ui/widgets/accounts_button_item.ui ui/widgets/profile_field_row.ui ui/widgets/timeline_menu.ui ui/widgets/list_item.ui ui/widgets/list_editor_item.ui ui/widgets/attachment_slot.ui ui/widgets/compose_attachment.ui ui/widgets/adaptive_button.ui ui/dialogs/new_account.ui ui/dialogs/compose.ui ui/dialogs/main.ui ui/dialogs/preferences.ui ui/dialogs/list_editor.ui ui/menus.ui tootle-1.0-alpha2/data/icons/000077500000000000000000000000001374710545700160665ustar00rootroot00000000000000tootle-1.0-alpha2/data/icons/color-nightly.svg000066400000000000000000002376621374710545700214210ustar00rootroot00000000000000 tootle-1.0-alpha2/data/icons/color.svg000066400000000000000000001161001374710545700177240ustar00rootroot00000000000000 tootle-1.0-alpha2/data/icons/symbolic.svg000066400000000000000000000157331374710545700204410ustar00rootroot00000000000000 tootle-1.0-alpha2/data/meson.build000066400000000000000000000021671374710545700171230ustar00rootroot00000000000000icons_dir = join_paths(get_option('datadir'), 'icons', 'hicolor') scalable_dir = join_paths(icons_dir, 'scalable', 'apps') symbolic_dir = join_paths(icons_dir, 'symbolic', 'apps') install_data( join_paths('icons', 'color-nightly.svg'), install_dir: scalable_dir, rename: meson.project_name() + '.svg' ) install_data( join_paths('icons', 'symbolic.svg'), install_dir: symbolic_dir, rename: meson.project_name() + '-symbolic.svg' ) install_data( meson.project_name() + '.gschema.xml', install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'glib-2.0', 'schemas') ) i18n.merge_file( input: meson.project_name() + '.desktop.in', output: meson.project_name() + '.desktop', po_dir: join_paths(meson.source_root(), 'po'), type: 'desktop', install: true, install_dir: join_paths(get_option('datadir'), 'applications') ) i18n.merge_file( input: meson.project_name() + '.appdata.xml.in', output: meson.project_name() + '.appdata.xml', po_dir: join_paths(meson.source_root(), 'po'), install: true, install_dir: join_paths(get_option('datadir'), 'metainfo') ) tootle-1.0-alpha2/data/screenshot1.png000066400000000000000000005655661374710545700177460ustar00rootroot00000000000000PNG  IHDRfsBIT|dtEXtSoftwaregnome-screenshot>.iTXtCreation TimeПт 30 окт 2020 16:37:02+ IDATxw33[v;H(j,ACb&1آh/$j{I1j=VƂ*88޶y~qw׼vvvw><πB!B!B!B!B!Ğ !B+H$IB!=$!rd^3&B?He2Igv׽m%%YB!ľdPgYG٪&`V/K[KJ*3ٶB!ľ"Ӥ$N;|e,x&B!Wd̵ 0D7=&_%q%Ď&!Bu$YLɴtf.+?Ů bmm0 !b_^޷I,J&nֶ!BeљDt˦^[Ӛڛ!%-#ʹ˴\om !B2I[K44]j1ޥ;v&Ö͓.M$B!״=N[%-ĖNkҼW3)aL5ZRk{-)B!u.6M&.{iiI#Muı,] `$H3Vi^|B!=Ikݧ4)lHUW5qlZژ.ql$%zN$K[nB!=UGF7kC0iײtg aJ襵K||ӥQ!_V)at8P T5B]scȶbHGƶU4I4,wM7xC>bx|t&~!B/d2IuM~m -x󷿽x<3ilea[KۻG1LK& y'p10lBN:EB!Na 4,+?7z楍NqZjhԳwoۜņ!0c_;oջ(p]%YB!HOul;I~a~W;k֬Y~}q)1mv_Z0fZZh|=A8Nk&B!b&6VW6;K[+m̴J;,Z{1n(z8.6WB}/65YY{ThoǖdF/龦^ΤKCLa'i7>z$vL;gB#~$LuR-5e b<#RmI+־i3xVun>Fdɹ),,<^_}9N!G' nkZ:ZL/청ѱ$qN^~!Օ!365ՕlTaVk'B#~9;nH^lDy[tYX~5x;`ؾs?wQ/< %4p ed#Æ62l[m#k ղcG9cF;9pXm+ǍemE8~c&Lbx>Otqj%C<։י#B#~/z-stIcmW77ϤڹU?xRvM7j" 2p0uQX^#iDx"A( 7MbFiفhI)E]86N!Gb_1| @Tk׆6gLT|ٍ.ٲG6?;xÆ=,x^Tt{SZq qB#~i+JėNlt[-UOd}qïx2j.UUՔE,׋mX^?{"??h?9bx}HxzgMlloR*}B!\že4Ql+gЗodk-ӕ66JwEv#w]E1MxJ\;WS3uT8bzr MKZ rBR/~õVZؚ6Ȏ0wccGVV#FH$>DeE[X 5& w0Z>;r`뮨LnIwˁBSrh+IsH]nj|Qkƌj(G5|kD#()PD]%?}~:_,^į䡇 / ;++ǏsMLg4B|)ȵ_[2I3鏱ULZN,]PM[Jv,HSO%|>\DL<>-bx|(0Û*/'d Oq/3i4ͥ[k+8B_/z]x:%LGGj"єW3V.>0K,d;swy*@/29fCGD.-rc C0G4z<澇z8v鎠1tuwgU1_'ZKBFuֲ2{i_@eU5L?l}&}YcLYh-k?H cF,XcX5I'˛MA)TyJPB͠VZ$;b|QR)1cȑ4yr7.3~{ɓ&pM7ユ a6K?B[_͢e߿ )Iȟ/']#tڿp'.m}G9/o.7^;M=d7)s\6[Ei?fmdM5/rgt9lǞt |8l.ۂ?'z TÔpda0b2y$(A>zm|aQE\?e۶NEEhk:m{;=;tUtbtE)hV%n:xU+[˷+ПoMeᡷ2(E9nx;bKy =.,py M>lX㶪kjhz:gW}8w>3&+V%lr9._!DwSOK%&0l@nM7eؓp/1yig_KlPȢ)1?=b7#O>s27jJsT=Nc3h p#ޤJu4q'?89 :k}o&A7d/1|8+Ww7s J)~-0l+J"ƮK-7it2jq5$x-Y$hxud' x>#HL]%k/ƟAcGV}lեx_ OP@l,V5l'IŦe*o{ n-DTUW0ʪ=ӗa̛Ni} rW\u56nw7 6l~A;k2N]wT 늉F"p5fv,$5V~f~1 ku}l›HFìYٶ‘0w+?+#}']t6|{~;<͓'s塁fs ʯW*>[o닿B7٩bG+dT6xOfbN/;H;xo8fQ^ ٺm6nH5l^EE{"ۺdo=OF~}r3 :g^;qwQMO_ۼJq8 `ׁc&ZhE$߄FՔldEȇDqag?M5i*fq|߉gK^aNtb8蚎|}8Ơ߱#A?8O>yEZ䡓4]/2qL#/uОOA_列>MTiMߊO>Fa%636NnM6#ߨL1p%| wS ~x$.ۛgopon<֟>]蒋93ZLX.Wl֭]\x$jvE]DqXM-q t1#k駹5 m]-֣l׺rޙgo1w|w\x9 : %y'h| o}so*v~l*-Mݳl()?<,d7t#~"{8*J78>j"JiB@풛c1L ?ߏ!PD$Itc'9}2z^%?/9K>#Wl߶,@G) i@XʵjV󺑓K0{5s I|n eނ[a.pw wGݢV/<u~H놛hLf67a/GqٶRG? +/4ے.b.>lOƩr;l]lp]jMcbX@AY GMl[S:(}+ZLg0s6}x].uaYdhmh*T$A}<2wKVóXРtH֟4U416neSZ>[.o~^-eaw d>v]&3?wO6п_?Sy7v JJ_RQ^b꠵ns/m/Qvm'=r$J괥i֭_߬ZxQT" ; v`b)E ;Pmd!zה@*|Z jPq1'R^S1hzW\ɔ&V8;K."uzB(F?N<ˬ畿W>S&SY~2qy'X+c3c3"x7PJnqgWR 5mL$_Vs5⮛BQQns?ϷlڰGH0 n0 ޟC2bv\'" wOno;[[L54ôL9,>3MkR[Q S.e ^?علvZ+M*F_=!#GbZVmEc&[s:x1nM3%D&Z~ҟ-G( 琯oLX_{v.w:^sod{((3Q$#EoTv]bh<o]3Xkqw'b۽l*芭7ڔ͎m{ӻJn:n&dHn]j48C]$ b;WjF}#Kg*Mr=XB)p=pMKKmEx%qݷbjLyM|,~ sr1Mex"Lsse2'dej}?boTwRJO\y52ZN"c_ ,@ū]?nj0 t#h2f4w.ʴSOC[05bl2`,T۲aĊ{ Y8GQ /4.Yr%}SDpm5jh B!S঵cv`Y!=J:]MSiH$b{?>k>~ p5 7y2 f.y ap1ҫ(6b&-[=.Ăȵ_=[ OLkR=r$5tmL>{o^Kپ|5.x*MjLJ/#??:eJS!EBфu-{*?{|ī 1kIR.>ߏ'd[e0Grt àc|"܇M~b !k;zD #nawW8#ذq#K-x,SXX1_?| `;l[!Bњ0*p'Mqa1lX a8J!L۝\m3N!GB채yhx|a"F(dQX֞ ˶mV‚sX]A89{$")Bѝv%~kU?PUQNAC'$m+WQWWYf x)IJ+?|c3m!,^c3il7MCc'M%xзOomވiyje^.UiB}/Ds{/V.zZ.TUo9y{UհmF @)L0Ƣ}%N!Gb_1j=q^Q)a8?d$ @f+'B#~!vk c×ZgXbh hWB}/Ds{h< 4þB#~!v4}'cq !>r"euIsajquB)ȵ_z cZʯ}%N!Gb?wB!=+a,X6%B!K;ƌSB!R[zۖTI !B6I(B!$ B!h$B!M0 !B6I(B!$ B!h$B!M=Y]P-hױ1LeRba dgg*/B!R%ʶSy3iP(@)e4Mlq]\v]v1a#ɣB!D}>at]˖+00x,NjE|x<,J%$xx}:sO.H%0>̽BmL6Blœ9swq̝;yq ={6/sN=nˀ"Y6oT X]uKyh~LD&VY+ >8C4\yobȩ(cw}=.qR^\&w?s 3ʲmxǧۗViȵ|5+ ftwS= IDATu꬟r u]>Ǝ˱ @MM ;v,3glgȑ[9sPVVF gڴi͒?ٳg7ԩSַlR:a(.. H%-bԩL6 ˲xgزe YԟP(Ĭ΢xX /~M?< mAaB8pNss/:o~{&>>LP/; >acOh\ץl6^}BPvBW1BYM?O,ډ^ 0rֻ]^$0>~@?cv\uk Խ,aGxK~c\euwn:6~5[C͏u3 ޸2? Rg>H>sg/B|6oڴ~ޜ8'̪j^PA˸pIg>䥟Rly[|(~3kIϻ0F `AGs҅w17ֲ)ORϧJe?뇌b@a!h8Ӿ} O, d+9mTwe_ry5(lqZn,n聅|"F}<ןs cdo \RM1w&YtFe3h \v!ؓ\z(K;̥^ʠA]֚* 3n0`r3f`6,64Bh4JNNNFSz| ~~֭[qlO^}d]N; _+oA]<*0&xxz1jx>P8C"cˆjC{ڒ̵VjJirjzN?ͥ~s6G~%ĉ:_xgsUx#,"q?▟"o̸v&[}Wޓ0# 8ϛGMKlgc`Zc|qx?dwۉ MQp1G;ӐDVVme*/߼ p{"`%Zdt -(޻-<8~s#nxk>x٬e+ g.T||#';4|Gc.}=[*=b?b #lu,zСCYz5m72 JKKtq(((  aFƍqG5x^¸yf~4I6M#X2,DПOܜ #דCu:h Cdp2{$ϗngymj>~BF[ ߴ_|%(pJyw_o{y5~s˶Rm)x2~⬾Fش7n !w̘1 =P5k̝;E1}t,ˢ_|`0lwe͚5lذŋ[o1x`,C=ExbV^oa2jH'FuyG)+-@yjj7Чo/u7hg,J7H ? RPx50R DZI &[<D!" 6o-eysTְl*J~ΐYr6=w0WSsܭ,OhnowZCc2[s7͚G3uA3(:5Vbyxoxx ~}Fy'<ܕOG`sy#+BtmuWʙw䲫ewf_U&Ohstm/X|IDo~0j4G^7<ʟWh O ?;7>ğD7ͅ 0:xZ~g;x(ot)btM >e$ 7T!nر%wyyy}ټ<Aqa_'rg[D<g֭,ZX,F0d̘1wqyGA2w!L2j(fΜ٣`0.^76h,pQөo=@ ##FG)J5Vhu p&x b1{Qc=6of{s#شy ķa8N6XҥKx*iDjZ7?w{wԥf{.%;BEape5smsp]w|>_dN)\v@ Ygnw\cG=UZǎюÆϖ|?^z۵=z4<{z4P(E>|U?(P<@|7F%_;Q | 栩8lG` ()ܹ5j$N"?uBa>lp6yTb4ݏCō}bWAOo O?[ho'cʉǷi9b_2O</Aa dtS'sSؒ;9,7{ߺw653 9ٰ~ 篢"olӻ/, ETVc2m|XBm=xλFffvti_noQ{&Hǯόw9U,_2 BG&O=,C8[֮E6(]yg5}%|;j 9-5z> z%jɉՐ!\O<_ĶD)]Us/(@;[׬Ʊ,Y@c_sX[ΜăOYG'?RX_zKbw0\lyN~_fLf#?η6ӊYwpbA[7u95Y QL<8zџ9]X0ÿq2 p#jYzs*С~ƙ_ҁrro$F]tؗ#3<~m&~A|&c”#ch-B!z0[k8MXX]/Ç0d2A b&ߍ*Hn/%ω$ S%(~ uO 7HVAN*aFc;6λs|\:~Ǜ=o{8e78.}&J+N7NF0 2c83r@>#`s(| G|B~{۬I.A fc|I;qTC$$'jȰKcg3}x~è\OĠ|/n4D8n;`4Sz 'N̫,50eH>Y2~PGc~t+WLfuz_;VkE 3<~mQgޝם} ,|9}>NXHbw!bK@o:M`Wox׃׮ZvcƷP-}y (, Za6+/c9f9])|\rA26OFW byj0Y *Irc98QW/!eRڎPf jEҕ$.3i&H4ܾb32yPA~~M̩x% e|ڞiW!{Ϻ9v• $[64&n14hsǵ^jUcbATfx|XQ^Jח fvUO!'NjUC#PFYɲ0Xl^vl܊ck ~5 1O_PfD.P^Z IJ ;'q_jW!W%t2URk.ءRm,jNu8fV|L׋aWc +#; e,rLvn|(|^<q;K$L֬\r/ww(gy  />ߧy_N۟U!Ǖ0.]catC 3HՃ+ o iGhmzF\ q#ټ UgW1xp$k*,iek{vA*aB$m泥K뱲vcuގcO؟U!%%%\W+X*15 C0jX*TRɲdy1|>TLИ=R_5@M0srص(D0C[1H`*Op0 CxC";H6JMQB!}z\X]]C07c;8xǥ(F jà hkQ 6=hKaXx&{u8I[0FoHR Db81v +N4^Sw::IyE:lB!MKu6kjF4^}h;v2#ЎGC_.$#&ikT,v4q]SBH8*9PzV+p8h6vTdı5NhE- ݼ"ߏпr̄B!v0N0' 6YZShCakH$mm*21rjLo--Ӹ\aFITU P`:TDTmSU$Q_ش\,"L2q„v܄B!v04y2Dò;Ks4q J$&DpBWh \CG)ފ[V۸ $NHxI"ij jU_MsXhI%aB!ėOK'?ں(i߫5.H%1 f@]R՚ C4K='ƎW'q+pql q <IJijM&-E!v= /[00T8@A~XIEu Q!_B=.a8`5uu( Cv^~F \?xԺ.u.WS҄\MXk\X2"+[N]haWRB,–ZmIBQDA%Ƈ24&塔AyU% ؋Gk,Z+Vti/fJyBeF49yL,ӤС8,]ذ-ّԔ;.[&줒Ø^[4ՎK!RChRk&Bļ8&uM=MZGĴ,ʫ8S1}! ޖ-[EQZZڍ8?y7vB^VK.K޽&kx- ' mh¶$*6E,/QWr\"ZU`Yx$n{(GN@ 'H[g(?TwOܼlb, 9#A@D0wϻŞpH$J%m~첉 A3NWwVUWtܵk. 0c Yr%=gq]!_#pk3,,,,,,~sQQ^ԑ'ĞmU @X, &P͡4xLBJ1G|40t8 BP=% ^͍*ve*uLBL^f gw6a<)Yq#>fx޽;cǎeѢE̙3 bcc߿?ڵ?$)) |l޼r222?~<,[sxpӇ#GVg&-bҥTVVԩS`͚5X@ p@ަipB-[FUU3ZmٲSZZJ-5jT5 {A1x`JJJx駙6mmڴaŊ,X2bbbYy! IDAT=z4z4Mо}{ƌӬ0 zj***hٲ%Ǐ'33)ee5faaaaa[* ¯Fq"}RbsW#=:j@BQ&ć jeBN _@'A Ap * }B` vI`y*ރ07zAh"7n/fBO?%??SuV,XYg;wƤI,\wykANNgy&N۷3g222ڵ+}/fĈdffRYYIRRR]))) 0! ,~˒%K=z4Z7xK/ZpBH 2֬Y{E]D6m|>sFAjp 97߰vZƏO||<筷k _;ǭ`T> W^} NAΰ!ujE#۩ Ht$ޭ MjJ6-0 >D/,ߏ.M~JkHDgRUaA0Py5dΜBeE%ov1 M61p@/_N~ݻ7. ]ץK̙i)))mJ^b߾}iӆr222Xnwk׮|>,Y°aê{LBoر#۷t.]ʰa߿?[&??EqgWթS'@nn.,]Y M6~sNC9Ӫĉy'ٵk5X֡aaaaaakNٹw?C̤s}0a}Qr@=RW*Ҡx4 .m۶h"^xFŰaÚUVt}D=3ȬF:\;,,,,,,~Mwaf㣷g>6-.Yn W. z,(),RT\U(3+(3TgĪxblnES@hXvjT;?b /`'Mp\*:t`ҥTVVR^^Ί+ԩSnCJȑ#̤e˖-Z@4vq6hVk[4ٵk ڧ:;w$##EQBv),,l,!ڵ /d,Y0fUU)..&%%t6Y֑D縏0r3Oox%7l!(6S`wᗘvATA60}j@j.PTpg xj .Z );ѱ g~g|CGUUZnի9餓;v,= TTT0}trssJIIAJɼy֭#wMϛ7l|> NGp\׏cIKKcժU3qZ}vt]gٲe0e ܹ3 , ##tJKKرt àUt|SD]p!C0ҳgOJJJ,HaaaaaaqsBFsEpRδHNٻ'vo]`Q  J @y8M E3=šUԸZuMFfB ؽo?O>[:l_,Y€)//4MBJI\\\lٲ%'Nd…Jll,3Ųe˘3g1117I0j(l6 .~_}6mڰqF^{/Z 2üy|8NbTUe˖qNc7رcqݬ\st:ڵ+={l,,,,,,~k.u(Q5=ww->ޮS68i\FRB{ؗOiy#NMݰaN)0M6m̆Mشe ?Cee%RJbcciCܩ#w 55' ֔a( d3|cm P9 FEX¢Q,haaaaaaaa(`hK0ZXXXXXXXX4%-,,,,,,,,b F FEX¢Q,x 1<ڈ#H߱6 d]S"^$6)[[{8d۪v u=5'~顢h@K0s'.e։;ZE仛;>i#)Bל$ȮmHvi(3[OJ&c7N?~ךAwsRH1ơ~-(QyUdktf|d+ ^DqW3葽,9}WҾp+迍!õtv>Qpe|y]oڎ'?,xxKK1_ƛC"3Y2j|G Ȏ*UhRG+=x¾{Y\} ?}#s}|>˽gCA+[p[r{+^T^8sJL-+%4D,Nv<}]oNׂL`^d tr 3d ٟYL扫sZ^g.y)պ2ӆlM1ORZet8eWUx^>[{ZW}lR.y.18粛\}57wiG6WpT!W=0YQg/̯Q,Oxf6~pݰ?QjnɌtDʼno߂;3WP#Lxpϭ(ai19/^TO+x6,)3XHeZ˨~w?sN`W9ԯ%%:{6{;*5:[i=؉Q$sϏK[i}˗qgTsO'_H+%ɝOͅdwEË?FF> ko'3:ﲷ8;B_- .iŔG7H.san|ye6_ۥpv8ilPi{s]aF?UpGAԄL}|NkhV٠z.7 4`#u&~i8iJw5=?mE^]KmP?Iɨdm2S%3'&gsU[<^nC)W⩞ +ِ'#r8L.jo*db]!)ϓ(=qߍm9;Ʀ|7:n&uzvݟ{w/\Knav,MvqJ6(JV=Ҩf_aGbwNsqlBngsvy&}+w?K~.Ś;TҟᶮBcܟ0l~i>?VeN`0/YΏvfzoɻZҒ1/f e_UΜeT%1cKkNOˤ_L֮߀ NiH',~?o|2w7;tdF؛eR-òe~Bvycl |Y=S;Lٷv8cRcr^v׮Qh13$*,XNj/o%&+v֗T\Qld3/w5((榏v(M/s1ɜսKlnq+̓|,Vb:, ^ Wh[#Cc̘hx4<>x,x,qLf7r3ګf`AL.:+G$򗇷8[+T:NO\گq_rFYY&XҚd˜/ DAuДH)-qr=l߽+wo^V#|4s/x2Gc7tpChFhOj͈_񧤅Os?5׵ m;d#y|Ǎ\F۱ڔ';Ջ Z0oV!f$C'tV%2{銱 :@p<U<4 RO1ϟ?`lgΜv^P H*3ib W!ql߼b/5|H|h}F20Vg6mY%fŜ |>+cҍ.:eߗ|"DV "{sr[ FsBGcm )-.EIkz*dW~_fqϕ\(e|[cP 4g-c;  .zeh~W0`gB߸1K;TcU/ͱ> C"cH^ry7پJl1pwN" b9F)/cήltjffᦝ*+ cs˟0̣mV߇W(../_ц[)Y)`+q̓ݨ,h#%^ɻt*bIcOK *9 Z65*$&'Rc%+RSQb Lϧcp ?LY /vG}∏ Z08g˃-pMLag "lFILԈб }ؤYVDqPR5r2.\'l(3 S>V!1=95 (+$ef*f!yK-)Y<׎AVÉ;e4m#S#bu6B(mgғSX b]G9Ly-jPZ$19nᴚE%&^ouްȋyC-5}AtA| W:E !n 5"u +A+ؐxϵT ACִMcm\/ͫ׺?Gsڬ!]BUxFNtܔS?M$z=C4M!NQU"Z2pbG>*eEV'jPld% ";%?1PhdoB]doֵRJ@`<0ٻ{/BzJil}CT ]m sgVOX42.~9fw~:O=MDPSH)O|-bQϼǧТ;4R&%{rX IDAT0cJݤd~oM;Ćvh%}0}ͷ%qٰGn|u `]x5+شi O)9kv:珍aۏq?AN.SϤK<Ӄsqx 7I.dNv5yiIժk}wI Qt?; #| Ϯjp@b2ax/ږުePEv7l}h 1| cGgS~Dv]:`7~!\8  ޺o*h,-Z{0bUGŸ8mb[5ʽS+Yi:tNl,M!7ݎdG6zڐV50$zF~k"6 6zUS7>7ɤ^=2 2]|\TKE䅽~HG Ujy WG9~Qt|^Y[A_˻?Aa@>?ڕS9Io_@g64 `#qo_~5vO^2%56=1O#>v6HaœI*3vfq_GyG9vlF#ϸ(oe}]g$7y5ffi9);)dA~㷾Dm1(%MCbiqKcY[3i|?hNMY#~/qLpv*Y[͉:;pSzH1\U$]f1X3|2;XA˜Ņ|Wlgʥ Y4s=WovrId;Lvm*ݍӘֱZ~x?pt:.xa$dP~V.ӝ:-̤eJ& l@E|[XǏµ1A%gdFGoÊJlK: ^kFdzqy™d]r#xPj7oFVxF4dv,AeDW3wP NN>ph$'Ɓ`o vfM,eWwgD&<6k?3g̛Jfv7!k{Zv T6~М<>b-vgv7Ʒ口]Ʃtm8-*`|We&+.cH2:{k>/x4];PjzL x6:~d2Oy_Q a E($)@@`0 ~ˆP ɓ=F6m\E(n;ț-{dAi,+/w[%ٿ&\RɼZkc4efȣ+L92-ǏׯLڱ@SkZHiU3\-o^=,ӿJ]J)|yiR˺\~RzVlٰVׇրbamjIarZOkaE[ql2ݔ|~8:rKt<+<ǬXWIwG'2ffm>__ȸ`}uU&H=.~.0CG +iLL94j;V AKUJXZ,1 727'S:Чg EG+6FIdDSEJdz_'*o8剿3YeQGD"hlu{oٰv2^WQܽԃ;o7ӯجPzؽ}y%U[*Df&'od!7C ^> $ۈ9U*:{ X;iNQo7v8hN;xGixNY1`*`%F#FAND7%l68F Pp!Ѿs@1>'B'+S%-,~H C |Xcaa[G x`9pf\*=GS0ZSavqmmpbhsݏcaaaaaaaaqEX¢Q,haaaaaaaa(`hK0ZXXXXXXXX4%-,,,,,,,,z1zu)yů!vۏwZQUUa?g=PB/ l'/DE/SQQ/YˉΏ:E G)Wg]P䣢`GAC"Q졺%N3  'tlh0AeJ:Xν}3jo|ǚh}<#X uLa7}oJ%>UCEᇲ*o'/١LCEuZ~%ZŏI*pPnCtTsg,Ύ'n'\v: % SvAEP4ClylnVE S' ¥_WU`O3%J~ev3ٶdߏ|v1d':5PSOvQkH LxRsKjԧf$('oe'V-Ƥx{׮Ӻhf,n6k׮˨YT6 / Atտ^l/&Wvеw{ MLLL ,x x<Kx j=P/<{kx)uΆkjmaT6j}5D9ꃚ.*R`'=`W=isEb_;kvx' hչJn;j 50L4 1d HIb؎!o*!K%6r <ΐvZVsNQy/񷗔lڪp> Rw_H׏ }y9F" bRJRz5's .F|;Cltnsw' 6Pw 62v֚v Ad0"PT>9 LjNM#~PWJFԬAE!E٣VbdD kiˋ_25'h-p1e-ۢn5ѵZך#X|(:߇fZ!D^VSXZ64$ɛZXp-ᲛMfWFK0< X_K,FM"j{W3X "*q)D-Y+ZFGEj"%Z*Ŧ:5Liݠ&B"8 6Pl pb)g<))5oQK4Qe AԌ ]kGJa0'hEk$1>;&DD 'JHHjuS8I[Dv  DVdi//e:pPMA*l`ٰW8RApj*1#FG*c B*Nj^Jn@%$j֍Dƚu*jÕin(KшC t0% L'.;ńę f*weN˩I=6!4+B P&rǻȎUPQC(ԓT2r9e  d;i3U @Pb*M[PF J RJ0Th {) >ɀaNr35bl",+i6JF;Yq9â5d\Tӆit T𺑈_MdA"JV,H 53 DDƇP=àVɚ薨vt To_{,/kt955Pdn׍kulʆ;zTDj(W{Jo8y%U~C>9e`K0uw_`u+%jlhhXT\{U[FG"vRK0jf#\dӃ85>F#LuiMmqvI*.E/&> Rv Rr(H >i6QnH:vj'fC(H",/ Sk","وMrN)K4PEOii/IITftZ8"4.FAMdU 1k52:fRN R&~}?wZ7sܺms7u]I*jhݼ?W;mO5G)j S_d!qo>?8`<H)ٰrwoz6F( ,:~_:P[A$y ";S0x J 4)AKn :HiJD$&\?Y}lتѧPTr:4Κ& mt*AC}sW{Xm{l`ZW.^m"ٮ.Qc;?{lIr}~厹o0C ,$  nH!z =H7]-KK$$qcdU{n3}禎*~䔷g4 V)C<1oZM^7^aAe+oHϋoWb5JQaTs =t ETkx2iwW U_qI wMx⮔M jB=/Nk6hsQ319GgO" _o^Ʒ Kew`r3Lج>?8J$#=>sS э'`]W$r UJ~c ?aْǙa/d+ ,1ΠT:}c-fݰy,&E2Mڧ"y͌[]xԄ߃cg]N)ٽvJNMYF-m_u.X,2H9>?{DX~pc˼KalL7; zAYVc| ^q҂;*/#;5o]ս.>vlg99sw?!KŘܔ^Xg0A"0kiwNE4'68eh'ƹ1;@"eF`m  ߱v-0Q>:cĹL)) >hԍ*\0=]aCk+cKAQ4U*# N+D,F"ay-0or~Trb5QN߻"4VSqM<*{7ѫ ʐL=!wM,NkOU<')^P(" ߍy`%d_r7VQq҆iEe^4t[O7|jkg^F5í@;`f08t{w*pi$/],Yމԝ}M˘nf.-{}MS~3k @nL^134>ĆwT蝅ajFwUCdq1:8v7$nPfYǣr[ʤd3pLB\c^cܐ3t)m$&ktg_))䛰yx!iL+e4ɩXj[RIIjp 'x2FQmƠFPIzx{C5Έ{zE pH78Z[yi#YE1 oV{Ճ5Y/hL.5Ps Hɇ?sG9lA "=x[;~E2(fgs҂_cBoG(0Z- ,~Xħ YX=UGck%ao~PZ@P,C!wq_p_2>QP/lS0X ǿE#Nl_lK̥MetcDFΙ"J}O yl#e`ʣ_9nWs}90Jg㈶2Y6O8Yewx,rVf x@Afa>UWζ`,Śol7o7͏[hLh㲻}}h5cr4:SOl=X2j^:,ە/z@t3s״,|W4Kuܦ lo\^S<)9jx =cky$h_ VD=GLÓAw41z2g:@ -vqcR=r^7 x03GWa*k?l*t/l4R{dGG1Vbk0şvTq" Z)Ш6ֆ,|lMG">}lup|M_ųl탠5QZc%?GM㿑X3\W W{ :c*DP"jck8PgR"#.lc_KpiF^wӲ`?y%I%rMׅ|(;{BPeb~kiD4@!m>mņl?r2~|^.=Su2,Gvs0NyC q(&^^ÿu;moJl棍6gZꂷ+- Vnr5tNٶF0t皍`)R.1H$s|_& "ؖ|}o+zBe:Sxy*޹2 K_LDzv6~2o>qZN eY^b/;WNQf\STއS#!X|\rr=SyKl 0)E*I|>2"}xcǫ!PC5DAzz\K&NSoOܫ\)½/1ۜA̴>RFgUPٗiT1j\j)c(S}!aqibB_:8^qtOT?JٽFR ϿK]_}('lفKqg7A3>"qF[['?TWR⫊Ƒ> Łeô@؄b ,kWW/POBx;m~Mۇw֫r\W߉4?Wgt`zЍl:OtA?>`| DOhVw}a.ֻTslk1_X0hiOG|K+<`0<=~7 xܫEX Gu,j ǵAqU\ &p\:vo#Qސ8>E΢{jDQyCExLyx8C^nB*!Ep Sd鎀iV=?c}z&0ώs^AHF{F%:)kHblX%0B䑉-%ė'`Tי:im4O=#hLlHvxFް3*|#ʃftI?g@%!̴:SX r-QO+{Gsӱ~mNS\ $U0(IHYD F!ӫ|c~C;x ;c\";9~c[ɫ%Jm1q 8Y#-SR"^ B3vF1+`ji/-F洧s rR+iϐ hkf:D\2] !i-{ؐsJ]B]e`J|Y+,uK-q8DWOmezu߬l[=J[I꺗t6'sevuqv,>z㻔Ne{&n Bcsz1:Ťea{rK1;y4r>zғ Og>>3PH<ëe0= R(q/1XZmjMXA*yE՟ՍUQdS^7Q5I铩僲GƤUkbvr`(yHLyw"<wŽ%3'(xܑ1O|P{vKƌV< H.[̖-pJ;n1K!2PQcJa՘GBkiY>4^`gsÄ7}kX\xg.#u{MX2pkOHz=voehcLx&>{%eL3(knq5,k^{i "&DI͎H;^n_L8Ak+#Ǚyv7kݐ$fnB9, u[ÁD|[onƸ ֝ޖY>:ݴ٦nO{7Ж_ןP/]pӎ&ߥtZw8PWϗikvPW,mi{P=ҫ\/%DAbHŲFd35CG##n;^QS5Kͫ2q!uV`JWG0y)Ip|%$/e?-~uep?C~M{Gh$JJ'VES9s.큆=;Y/\52H?|6O}:?deV$SLT;EK UFu.ƫ 6Àn5z``ܜӌ+Z#i f X3 2M$PǞ+*c8xGL? } "Z;̮Pm lfsȝ" )b2bÈPŝP140Ӹ`Jp9F18x, X叞qO3'2~l![)UL/Sz߳~-Rr ]U̍ & '̶~2`Zx=1x NJf'E MÚU88=/x2όlFobJ!.KcKfb/4"?+$o*b-QT qQ !r- T Ƈ3Ƅ1rҪb 65G"hTgrѩGoo+L%OTc OU uڑZޜNp\@2⤋g.Qޤٰ~Csa$U<8%xs=6$=>g2I<k &Y^5˧]'YATq(Owپz0=EڔO=fC6kϋ˾O_N jok t rY("q; RI t"Jg1qQ|ipx5 >*!@v'"b.%'H{prB1!:8G5+>u8Q#H+(X=Rб>Q *\+޸)&G:CJB|ē^4#I8+ p_lX O>*&?IV|wkXtpu\`V)^kհ!? }?D.e +Ǯec,"4|gX zyv~E[F6ZVh["4x/cS+{g^d2=-܅Ѫ[pf7k,Agfv6mα^ b0$[ ;EvhBEBE~1oB1jw`øW j,b{1Ƭ)^T"/x. 8xfX뻰gśc42V9nPXOi3'"E|qhk}~ܓB󿺾W.^iĄ-UarbByg=fMM`" iq ̩yf'yL1&JP$3!"m 7$_1l)N;;Hl/(lTJ[YēG<'O+bM9{HI%wy*"Vȣ+굽{S>쬖VGP~% ?6A8pM" !{ +=pC~cJcFL؃6 Ø[:D#%bگ*}ɰ"%9x0(+\l`DP!w7n]8Z,YʳNt]]O½m: ^r0v_ܹ z,ak^Ŝ ےvX;\Eu&hIkL899i?݌Y㻔d;7߫ο-/˻Ο^0$XRdv0a\'ҮF |q6%dgOj$Dj;>9þ))1pϣiVK/+xb-&:Q_鼉Ccp ֈkɄ?}nĥRID2!*AM/M[ IDATe^T ; -&|N*( 2 l ,ފcpv؄HqcB8"Xkscp,wx.M{ *_-}"mc ;*ix| R&\9D`52޴LՒaA8ƶd DBG i{QLǕL9G p[cCyƑe +4bu7fc+% 㣎CA1 \.w+axBLƵ}Q:DXl@ĐX\_(*ss4@;SТCxcl3VdU WU1_Ns8 )aĂ=S1z nf$bp1U#% (y׬Q8oSEKN6_8b?q}]E1}p1TYpbqb`=YeH[43q85G'x 4@ ^R'ޓ0Χ<|4b358 R\7pԥ ⫱@(wiCXWR|E:Cׯ{yq8sCeo}g}9vʵp8Y-`iRSnm4AȿدY}/sc~6/= iN'$! Rz;{E^oEx.N̼ʪF,h{mme*Xj%)[t`>0)bc R\]xz&<Q.6n`NY=N&a+rrY%Jx #2*F9j!pOzb(s=c{9r%E E+aχK@նo^`t~Ư'5kbfy+b(>C# lYU"ȳu$7[6jޢ.TC݄ؑWPZΉ(#% U&B<Sl6o5F+>Q0BlZ SR!Ƒxó4$$Fk%#qRX";[b_cG8~+{\(g<lhTQE;S"l(6*V,{܍)_`&mI"tN:p_S̊GlPo8{_p_ cLc7t H!UMdz0TQŏc]_+H`h$T#i$ʢ"B4/}rf*Ѯlr`,C3iKyP| ϲvn˃fTfO`ƴb:FiS=El;׽wx_0|7A F0&9}H1:[DV-Oqç-?>d(!s߽ ԗJ;;`odPslpzI~`X,gNx=9g=:CO Cg}+MD#h`vXӀ#9/|yr5ﱭ7*-R=K)Q/fc"LẒnEukFI&plin3mSqn;{R"Oo۪D,Hv{r7<;rN0k@`rzhQ݂asCa).^,](ޭؑzlIl(qڄVT{JrGF f5 웢L}4/}db߄סLӒ2؛TUWI8&㵚=T I/;@+HrܥOw'%VCoƓ_DS}t)aZeP彩\EQ<=xͳz5&F3Wd [5֪FSMP2UqB+0JXR#`4Pgш'jqxj/©4b8a0UJk$Xʼng*?wwC+=o_ŷei)ZG>;M0xJ &; {{1ƆE + 9G@VƇ_#|7}A{Ok @*гVd/|(c#h{/O" o=%S]hP;\%O]I`f[ei:".@b^[`/]<=_i[CnIbDѹ{HM^¹꾩wy߻o|4]Cv9Sv>h:gZZ.Fw&[ 'K7-NZlwZ 8?QV^1ѠΈzQ?"(0y"9$;)OP2j߯qt?fm`8e@>qI'~"#lJ*ƽkEOu9&Dɔ%/Haw FWW8m-"Nuoyx̷}\/54:V_" gJPSQђh ;${#U5쌣!:-@] ܠH ,Հb&3XQ/QS-"άFx5]#"Li\z:ҙk69?kSHpXq$*(p j@xCgSƎLj)35ӚZIcXzY6yr>eaE6x>'T0.Byi(Pl(wbU'T1E! fڲNwq].n8(Qd;r,LØEx1@^[oիɽUwz~f+.n&~:Xa{פbw/Fz_%Nz{{ 1\@W<,EƅFY G~/ mΠd|ZYMfRj~lETW^yc5I7+tS*Ɉ3CDmJclGCWB_cĘd~W|࣫JN\HMf%Y*ZzO^fLe0Ng='r|OY{5"֫}9d:_DP%*cxt{:jmV`L Fi'#EF*iV\%* 왂+RSpvJ&8m45+A-em}/[創>?|8 GJP0 5X3P!{"oUMxaPFLU6&:>'=,K=>H]<XLoGOMWI;dFA=o,F@ "(TL $ {-`xAY딲MVLu0S&r'N\HCJyb}#'8aLE.C䕣BITHDD`fQ c^߶G8T؃ժÉ%ROVpŠcv*9% ech>䃊X@Tczc>Q_?r3Pek%ߠ8:4F0vxp$%yx\fSYKx${OW ɏHCR7zd!S!IɄV*e^NΟ]}kl1^]s+ܕ7}$>:ٙ=vq$H)AY-/d;BaGHpXA(m$NX޳;W\Uz{z ڞ<*3X^_%u9f9r1(hHȔͳU/V| _.io=mUf@Wz4 -ijhWе[u7T0Ӳa;{DMڼWqt> 38LJc{:Ѝ+;ag*o,xˈR͔=e?XCFLzLFAqvY3XEPJ)y\=ҳ9C.|`$Ɯ e :SU>g*L0eQD"` Gy!*Uć%ŒYO0 .m^>c˓0AݳC?ϓ#L^.瀚*S r1H^ G /g,+߻R ݐ"Y-qQUA[júȪf[zޞ .;п_[ͼG2ȂK,IwT' Ue_mGzߦ SrQ,u/A,,O}Z0j! a tash6x=/~&"yvEڦ2NvbI:Gg(?nAnef3BujqjXb$\/%_$H\~Q;<xt<5A$tZMx ͲM\hALA\P);3! \ 3Q '%dr+]_Q>>6gZ*(hchr.đ+O/r'-U hpxĶ"`ň֑G\&TqčbgѬˑ깽QL\"'1|b2m?}6}fZ c]~\Ȃ`ؕz4}z%g|{sx0f}\h 6# 4S ,^S+Pnytf4/jp9.c̒{w?݋ms9dfyyީ㵹._M;@xsYzX7U'PK].Qbm[u0ͩ:&>ϋu2ߧUl-x؁PdA*:Q6!wr|o-RTFI0R0[ 83L莖R}yM#Z-)itg65| * 3WYXuJ6e[IEZ![Q}n= [eCm~?& bܠ-l>a"8#!4W#X sTqyu|-$Ҧӧrm %cA̢sx-w9CJ?ϔʹ"CcC,r^th<K_O?ak IDATm6}M!w#3 $4*n]8('*_diy3Q:ҊaRx?)1NuqYPLb˖Z5覄*R/yum͕ug޹ٺk_;3;Ʒ-*Suֆrsg=(8[> &o&X C+7(BA6SC'c~yVx>wkb\-7{@p[PWƅ`=,f r Y\ dB+'9ɕtˣf|>'tU%uz!v1D#S7p=Ї&0ؖs},!'թco`jR(ҙGd7}1kՁ7F|;k?0xեTRbxW2h$|!:RhkXYQ"d6 ·džDKyd{׺X zsׯ9FZu4 gTV:{ZB=PTz֓V"z'w Z`"7E#!ysx~n: 'itW"V*ukx4kr?(΋ZZl,+{,j觨V<<ŚkZDls'Β7۔*XuB%JYWe&2Z}Ԃ~]ER cb&-'1%2u{v?5:bxC/]yoGlcl%`F $yg.˧60\g!݃@ZPӾSVAg`錄#vyl[`lWo0 {b`=AU]ݧ8Px2enRR*̑3N BnVVj5XD r"1_W@`4;Cݟ彯Gt#^c^s0'xOyqYSH0 50kJOg\zi5(]s3/wR F\p6IrWo| =4x֩tS2097e %(vVii{dr^9w*K vZ$xJ>'I|jཐTJ{|6Wx҈ N dXB}ǘI*/YW#T[R@)ʾbNςeM](mdUO1Ϙdy=5z@(_onΜՇjj𯒄UKz,1?y[L0SӬ07)Jw0շi%\~_WW`GGOC0l)%nC\z1ƏkT3]q)_BͶ)ye{8c2&_:t˝65ʭz$턮&#D^)Jc )XZ+8*7%[zgTJ+"-gžuS}Gh @n8!I62#\ {G Rd^DtK5+JL[ Jy};ŐU4p`s-fQbdɈ;l I6ꘄ)A0*X/pY 8SZ84qahR-#) /= Icc] Ω[ƒp/%MGH$L  He=mFF=ιﰓ|kZ_;1 98CLcBtj%QL v%>xB/JJy&K~f[ zc;hyO +6l&AÇ.?w䉣8;g?\Q&ژZZ2 N gK6mM).^b53VίfR3f$]|iA25{괸-k^jlerx6Xf^4wR,h\3MNl{w6֮y޻zmW,k*k)wZz!iՐf)r,(oq΂EeU-V,0J8 ;iXe+O1iO"EXbB7C%r&^mm(l%(eɇ}OdA^(\]D+]FQ5_2?$EDT$ ʰ~@D=DtA.Hϵ8G "TKv<TP(dh8Db.p$ !Ebzhܮ}f>5ͲA{ s0Sékbv'˧x U m> tbNdF _M`&xʭ" InQ+ ~8V-k"@0ޙ%ʘ(6'^t4oRa2-Z;9ˈn?d"t{t& ֛r%m0R 0ϼ?ϰЇ<|2o5.3F7Xb/0}0B;{6o+QGWKEeб^ڏ;fk>y@m, Dˠb[!sw ;˭[2zam:,Ja>߮OfԴ\v88C}ټ^G3;'=oc~לnM9=eʼn4׎rqT{j / KW8E+, PxRWY` n?mB(P\l{ &%C'" k&E18:pW)\|))3b+qfǙ9%*,E2f][) BnTI—?3.!jNH/K+䠓R ť5x&0&JI8BqA} Oc\G_{Og*Za9'%9QpӚ| C=6? q31N&^3|#V^q bsuhGGEc"B?p%C1T@ #X`<-fUӕLh{vq% v,HdYZܜ__.y~euTa˻׷vO۔aJ@6]Ti ogiY@e3|EW,RpGɼg)rN0\5ةn9Zbݴ@XV1wv@rur:&5TΙ IE**kmQγ;pD[ frg[ǜCDސ6,Į n !uY\#[{4-`R1Ӗ_Z3.l0>D)ui w*p0*`țpTNƵ"!t!gK3T媀YZ'6=Vxn2&[g}-eDJ[ BŖ3>h9ew[VykY.S>~7^q)vR`Sw#iCUq:E*_ JnD_8V﹑e$!(8-. sWZlS6 'DC@ʙ&tmy)6ɕ/~{jԔoOM -,FL/v1%Y0 p<|%SŬuAJt}5fPi9uoQ~jf7| ʩd-/pyTzȧy#~hecSQjӤsh珠#ީcDAa&Q9e1SUMmհ aJ7^I?rބIp?cƅEzvM*U!rq©K R  ?BE_. QʹIk<O|S<>U|o~`&':ǐJqVUjX:̴ǘ|\n".lX-K"0=:-¢Nw.v'>4 EHS0 y  ģQf@p# VF]4e%3rLlYZ~Dך {[ƿWۿ_= ͕o*c8BC0V0[ccHօtx"MXʍi)A!A)ff't!O9k] ,Y/\Zc}='"\Ҹd%`kGLd ĕF W]GNun<7{C92X{QT.\~~xg/:>woF|d6ąy]p0K!8׉x첡h9*T 8i"iheL7@93S 00Rmj6,gYff$fʛ.+^<_SFVmO 7d_ow/+&-}x av,^_6Yp}:MzRSrOy`|,5e՛) sL|y }-=]œ916֭2_\`#\؛71wx}Pݬ΋턵^Xe@L J c =&_٥9Be#H!XЉs2HrnF)1bD>z`9~-vn,OWZ~uDs<Rĵ] )wlt>6f|rwZ2&PcMˇ0h^ C[abun(EvVF)4S2k\HmxܳC}brCw+a1`EakB@#E傺`2bIpeײ *?<%t-Ue{ICM9QŨ{C]C)ǻZPrmPpUh_p"3h%X `]R,lӖӝ^s6dLLNv|}5ٶWirD;4#&;S fXC(Mi20|յxɋ?:}ڐ N2vg6ϽٽAײQ>58ߊ$3kQP W,8Bc;C 1*0{K["tmuNθG# ->CJ1X4`=SN:ed:pD5(۬eRrcz/Zr]sy]﭂kʹ;o4~@3U#2 NA6ln0{UP-, Z CU,F\3\:Vn$!Nل_<ŠU k|unNpkP$T\|\s4I`/t|`=RڄO=IO#o9VŌCd2E@;^ ip]$rQv("Q0ҙ!hszݓoȻZTjtw8OHLW,$;X#szG<*`3sQ4`kP-c瞇Zu M{{,h L2h,.kV-^m{ץO8,:օOub k|HT9;-6YNgYݨˬVK\TKjx'mN_s*.[wՓw TgR2/R>QR8B2v#{v31ßPn"TNH̚DpˇzåND=gK֒a r"ء"D*ӭdF6 @<0,4D{r62 N-'d$'=~sEcJ5N%B)9 r*tb,]6<ȳ]Ez4!uy>7Tgr_}h 5|[b'kuNc^L*s99&P,SưP0oݬ<[8@ f7`@{W-iO%7kͧ9 zG9frlsQުك{ABc4s5cM;.Ϳh:s=|h*-˓d2S#;v}Hnխ6|t${zc(Bb!F,'|NuY0.&!ͻ@&GGڱJ$D.#n1Xe sWG3tek؞|-ǯOIGeS #{g ElzA>d/`r='9o|g> [h*DC4VdWBS4 gU}A8]U,e"HQ&G`Abk;D;0E!Fv8p8F 0u#$ƝL{ӗ9aIgRoq,/|c3]֣66./ xl`'ể bj  ևti w9x`cFB'A-ܐy֐XKU2:M(͘rw v\Uްk2$.)ѐ0&!ET16 @ʙ2-PUREZv \g^YF65̷:b7528 =nexX>w϶oHj 8u@I:nk==os9Ф뗴6U 5>{dQK8<,9m6-:~jyrL gʥX ^L9}= {Mk7.C!r/z]ί8E`DK$7-\kBC,fq^hwG6Rgn@uc|QdIҰ1+qY9 $lm‹]E~ps'擽 .(w {Pt2a|m~Lɵ~̄pcD1vc&V1wr|-:TU XvDiK8c }:r0H&hAZɻJOEnÌ8G76 #nOƜoEpס`szb B&Gpg ш|bKi QtomʉAOy2^b!v!68 EsW1 +1h&\؄5lĆ{$cev:[Wooؑ E!, U OtRאm~֧u[Mr-03)a)l`3uE=yExFY54bӄ`4֩>uYfǽ6݋0DԔ⟪KGIcU?ˡZ شVtH8hoz8 oxQysPovfί;g|Qiٔ{^Vvʵ@fZ '<r]F@wnt%'{PD>,\yyNl iO|nDvfDu7?7lCcb Ji|Z(1yfӫHԷ7nk!:$+pFt߂B \kqܸ͝x_?ntXKI ߾clcIiRm1t1ƦB@:fRYV6x7! Qaζ0Jg3K ~ףccdDZ~DWTq/˟8u½;s|qDdfn>X~x̳'zӢpWsNogWHMz@]Fr$˱yzӿpeyOxc:twh:yF\f}VMiG˨2 vbCE;Bp$v&davyDc‘vzи<6N(]Opc&va2a1|q{+9ǜ5 9Bl`"iS"\[1-_d87O̖ 59 o>5-|J(U4$)7~i;gaf^049!94ͪ,uK|`|SM-/m-~q9# oG=+ԻI߸:`g:g$;H 7ݐ|B 9x6?li7vIo1y!1$nc:6H;tW XO8Ġ0KoăEH+BB6,Fl`nY™+gHw#EVՂ ~]>g.vx8N~JD-?fGSA4[Q.ŀgy=)|]~?p2H"FR/9n+7* 1Ǘ= I KW4DR6StKcܧ8"6A79w,'vq0,p^[t*mIbߘ0銰G\>=E$bha[ \RN.;7\yk(auds qPBN‘\xE9(<_>t3rhV`mfc0OZJg b 02 YgKcbo=A.A`m$*/$ڼGʿ_˗Z|Ɗ<ßƈ_-+dެY{Dnw[kn6 HFB%r334idFi}d&35gH D܆轫oX܏<<#2-d5nefsvLqh#•+cNJ)[`hGsNv.Bm3YqVgRu{g=ӝYiPy0jS[umѝzUy"Eµ5p ,8vt<.nFnE*T]n-/n=}w&uAXHTNwt~A 1,oa]~2Q,.50<)y ꡐ?4">#ǭS,q6`kAv08^# Ge-/T„s  戵[p(Bm lcF{757ofSËsnPSX3U)G0֙ƍ|+f X׾_5~Lj9r{HjǠ[(j8kiy" !Hk-RZTAs 1qҸ Ajr\dJQ!|Amssly޷qsՆXHY6tFŜoe81\qjtiP~k`,gtm']}C'F?h﨓0 5 RX.q/qk</e5C?3e fsd8AzY~BK{"IVW _\鐬FBf9=q{K/LP Es275Q;<Wyd#x|+cCv_|ES\dXq @ ?c:+% |KW־֝2^3}ylh,_sQŒA㊔TqZťUl.w{ itJ[Ol#q?|Q jzϾSҙJ?tZp4z]Rʼ lKʡ*@r!a?)5/\}&cGV:#WcgnDŽu zž|~A=jŠL7x!Ż7G [yק%WY͜R7wFbMlΚ9JA}mrF5182[ky7^+ΚggxmoO?jmow+a) ƽyKxg/9CH`^#G'`׵an("Wʑ RT3k*oר]B-c1g24YaN l:^!5a R;aMQ!\ }9o]u\/*c3l"8c5d 3\ COr\={ߩ)XmsBqcQ#Q4YME%M4vKgcJLrsڰ95Ì=\5! `8T3 7i;#ch2ɱk lZik0kT ToϖW017^|ǯmTDd J bj #TQy)t>YDžE}[vNy{B dXf0Zcd|t-5v m9*߯ 4o^/\Ń6٨i1Npu{GyP9]Sfv5݊?" ˊs9og^1C51ytj j*P :6.(B;̮a|sv)߼v#Tp&? ?Ƈ7GT񥗏oBޜ].nKL*+9k6q跆9X 9y׀ߜ0l<{kεg5DsZ2snQAU`w5o]cV+ B l/ 3sVƞvQh61Ҡ/ΰn-Țۼ]42(Q칚>[re~%;8k`,K C0xGj8j[cȡPSFq c26bG^ IDAT 5ûtVV_Xue*uev?ZS ~0XThui* ߽O/cҏhmMrZv^{.{|% >ot0ޣJ@ji't-/{Rot\EX‚(R#n ßeQ/K Rdޜ j(J Aꚵm܋'wq#}dcx،li&/zHgKhiK\>9!kZt+r0w<4鬦5q}0#]UEp[FEfst]j6#"7"ZPG֏8ZCsΛ_ʬ:` 5}]2q3:jf $pf?nbV =1u9p%iPCjsQ<q3D I%Y]&(ďh6Q{ ||pulz9౗ ~fLmlaA2RUpda)bk%+na6׮N9.-C?(xm~?=(Cq߾3Čȶ.^ڢ&Jma[31XgcԐr ޵G?>dX_=_sZ^mi-,x@ (5'];Q3\u$# kSs95Ll1-&tR^*9"SMP"I6TӟFRZ-H)SVw_w~/lFlM^p I͝CSet&흷PJURӡ|[hkinĘ{HIقw;1=}rV Mޯ@R5 IƐ 2o̝Ts0ݠf躁3[מK+k~>iF<~ǫ׏[Nרy.ٯ:6P\C>27K6b C1ΐ-.iN:= .ZXHo1xTwtk^)괾W+wgb.=K~ }aJ>`|[Sߔ|"haAׯ+%hf:&3PO|+"K ze8*4oCrXC[x(A"v|EqWj6rX޵6z)P?Tw>@jQWJUrU v.ge5csZ Mmk#3NCğIOAw//GS`]̄ux/l?{Ʊ`D;Qm)[~L JrA+aYA2[4~"L+kB#6VdLf0TYvM w Os֮pa1 63䠂BP}]p'?'5Eia27s7? %;?ǿxq(~ŧcsPsR UR3xf,ãs ^{rgw%Su0';|療ɫ) igp(P{2{E#8x_o\[oAAS̡TFt5N, Kl*Qs՗]ri=mа܆v[\)4n:M:[ 3gosCouP:6 b/AMYఘ _%$XZԴqfYŠUm&EnvhFD'(4u2.`lS4r,7DM7-P ! 2Hbfq212ӊFXɖ4~J~!{6^{5F E o̠WUvWj֟.'EA)GJ3Tfw(  '9nbs~>cFWn"(NY;yWc?>Ë:BڿSՠ+{knN+D#j| |N~2gG+sۜ%6TιEe۟!UՀq]3##DQ 1DaUmtCD4F,=_:˻L-hХe}6R> YmBtX].PeħbBi#v5zN;>%F{}4^4N:mՎ&DrBȧU iA؏<׵}$ 0/QV. W#j hѧ{RFrO\b hzK pinm4~BMZs6%[FQ1-J*;De>#56v3\4u̱ 3>|+c@`ȯk;ьukg&#<8yoW'F|q( 8d|NtH]J(y2"mOdQ^ј} /m]ce2.*4^@!e+C@V#JX aRg+׌x Y59SE^a9پE 4RΔbF9( #6rL㨬myi<螗 ~&x)%rs-WZR\GƆ0y[{o ךh‰ܺ)*=t/D{|Jy\]"0(+4G@z ^2#;5*h@konf؆ Ÿkd&A!Pkz.jtRz=U)>Ԫrݔ6^9 ,ӂ,;kAG{nR@ЦɥO6Nٲns%5 gZ݊{^~Y{s0||SKW'}}xSM\ݗridBeVMk_|(z 7!2z$0C}msO3>3_yڅT!s@q;˷?4Lop|5.6۬WbnYP 75VP*fb&^P\d ٱB1d|xW>T4^'gk'][+!:}~[3oe9Sdv1X?V['Wn>grT6 8ޡIAȄ<4 .7fib; P2L>vsX?0>qP z.5*To9Ka3z9<$S~}}\e.#GP!IY)?x i%~=2MFX 3M-k3d#AhJ¬jӅ+hV;3$5)&"$PhAEn_@%[ouN?+O)]N=mĺ O;$|iBջ}yQlb]g#!b݌2#,o]+w\ѭˮ0] =lhz@c8f02Pr磮F=Uf;N2. 3f \:8^ʋrɀw4r'ZG\8qc_?e|X]%{S8z'~kؚbRZX|N3Й?GyS4ng(2@Y3"YުM](簅r, &k4GQJ5 Zn^w/i66 0ưtǗ;oPWBeZGƔ1xF6Ӑ2?̃SƟ0<6XiFTε)7\l+S u*F$&i͕pڒwx bӇ<UwRJKy4iRM[%3`gt)b6'^LvǧI%6]^c;K2&v|*yv 3nKy y ۓ]sMmwe5oߪ{Qȅ)/}~/D1`EIvʯ!5 p8+Woo~\=m90pYˠőԥlI`.T;ep[F̡tF-H84Qk=mjUc`"cOJ8qf}1*}@z͛ )v'<_mz&o-E)ԡtb^8s(U[l|lQ@& !m usO K]UÊn؄R52q@$lP4c`>i9늛jƒ39<['co k ԣ AjʢƇ[23Lb(9⯘stpȯ||wO_KطΣ XScڂʥQU0ZnpTp+*AjRR_wNl {ޯ=R9Xqwm}լ?kyMH׼u7,2J[%V)A W3һ ~Z6nZ@{银;y̳KnE G|- FBh"X ~)xf5#Ft8rέ{?ߧ|'a9d(*4a91먞 )۸:z18NH]!όtG~10ch:>#oZN41^7<@iJQ E 2@|PQ<6zЮaFcG}sR;{Z-EBhٿZ׳eaeQkG/ eY߰JiothTg ݕS"HCa:oF'2FQsڀHG~/}pşY3sXN*+q(3D3BD[Oq[ 3?BNp\}=+#0v;2HeOI^x?6%?|6L:ʁ6? r]wk,| Hf6`<,f+2Fh3\=Ku(6=HWJRBHN=/ ԽBPHQ ġ ͳ-GT}WA9~Da/Bh4[09ٝcʦZ#e0;G4. 8:gg|/ yf0Z#|g-}*W2)Ĭ=MB Qj8[엉xǗ1iw׮ }aBE=ܤ戜l6kAYk M =ES POmJm#Ȭ>h[w(}r sp3ҳH˦߻lZ6뮕*Quvwwm t Zy.i#4ugdHS(gLu L^ƷI:mSp,.n3L 4@%nitc>79_:P*e =8~lfaa 'S7W,h7aۏYŐy+%%֨mJRV&l: n}bKqߋyl b}Dus  :Rh4| ȵ"f!\ 30lRqC#y҂UL&~ጂ(vnlx +{mƸ5h99߼ƟEa};@A3@#3,NIze-rE`4W.| L6a +#Yf0ۇ[&s9@<9G&Q'Ʃ)#(66 0qԨ7S'\PweAmbX& Ȑl稤Gm6Y31ǼGo胰cAcXk 'ۓ-o"kua W&,[FDL{o"҇0%v)`goRF=zH< vS,{cI1:= *fzrmJ*33,5̧]~,ܦtA npZ0<_ޘRMfx#2osA&i? %;2::4G9AYwqD ]^[!R 0Qj z'r' *ьZ`%#OsFOwaG@LsJqtnyk37s674=+ur>])>h:0b Vq|\ d[qr;'|ָa4>s70 HY@bi65RlRnZQ_S\9&Gu`fH W9hPR IDAT6Om9W9r `ah2Եb(qm^sܭJx:Sm.;fmH}4#]Cwf}_%t8g#neI ^蔞 }>$a Aa]g"[@=WC<$a q8v{[wmpk fZ,ACt iQۿ`87G\{a8Ev8ù)0F-r"FNI w4 J8Wdi4w9)٦vEkT&e%%o1{הA-@GF9띳xG og6Hk@64ΰsk /cyNvQ)ikscGxk?#̣}k8+5͹p2iwpHҬ1Qs*nV4c\596kHmi۬=BK.%o2oqi9#a}3}V?͘^I%}gݦ~򊳼w[v+T{Uk)](h(Y#Y>#lW9ӕ<}xR+}c~9g`nݍv9܉oMEΓϴ\TD5qBR#\ih!hj"lK0ƒԘC.^nMlw%0ĝ9߼u2߬R9~,"8VT;[=P9qp4`Ap4$M0X?[Z7{Bo"tkޅ]BR#aۦ( &'H#9/Mijr%:xsIhlo٥׋.R(C/"NSjק@5Jx(8 7ܺyBM jN7^ġQpCF=5ZUR.EwNɓJp%g6GMrFݹ&J72 J|D|,ӣAI9Y!$\=YWwt1'o @?У <1}•!J &)pk4F L\ )SI}ڄ'jb( &Nٗ"ӊ=z`֌P #Ffs!}ыyA[\|{ԀaQ8&(<uT-*q jN# -a=1qv9F<ɌW(xde@vQ#vs!MV;bYHn0M d9^ c8MB߶[]m:-)1݉-ٔڶaYRp7ڱ.>^UK:.x|w+TN͛NIy_j&s%C595Jvvf+dS2[[$ 5bFk2Z F6t{|}!ɝU}țq!PsBe)my779M* }|y!R[Hrle{V-i?##8̹8xG(Ez\Ұf Jb5cD[*IXBA9|bLvzJBОgpKiFnqVkØARJ%vPnUJR mi2}nu[(Btz.C| EiVc=dք݂vl:ouibַ]VSt0 R[:1M-kyV}[)k>Edn+}7ric]nIJ=!ڣOwGvތ Qcx:)p~tݔiSQ)B]*j|l?[NQeq.NӉv^˸5r [1'<+hvRA@^B4w^q:dLj[;bS8j $`%cֵe.FV{X"L5ag4\r6uc9AjfԳ?LnB倂T쐱Ɉ1(9׎\S`״ nJE:h KO=^X-xVTj;V$dX$&WgG޹ :}ϺP{]j?YiIu@ ڤ@3tHAc 'D{[w{#x6#B)P\\ȝ~uQԵKuF'4.2`iIʉn{,d9]s-$I3|avCE36SG[1/e EYw(H~ My~sԭgk(}*f۝w.7w"~CN{9s}.7ՄylQs €+5kk4ZkD&KV7N[G T8#>PU'O*_~IWZùSߓ: TCԮ jQ$ ,:]i)e [B{H3-{V8eSXXQZ;Y S5qY%}Rb\VsjI]v f=m{`JvEڵKc[)lEYx6]R`ԧxwsPÒq؞") }} ݜ{!}T( vu 94߲TRV<o]M:R}Ԧ]x,YpnvpPWQf5 c,#7W N(e5v@$<),rWƟCu>}O`\'GtW~Ahϔ)YS)]R/ 0<].ev&#)58@vtI iAlEk ~D5exRI{\R-ZU{ga}>i9,v|]ow=ꣃ g4kh"0{4j}9~92RMN¼J\Pcq b-Ӿಠ)seYNKaVrSwL=\su]Nc][6 $'t-Gӛسޤ;ȝ-4D`iO#(/W hTUE4TCh2ϒҦj?p m";mQ} ON׵Ht br[QjR7PS2 dbvAH mHCߴp+OǶkKP16exk2p,Q[hFd𬼠1.6/]hh_;&"WI5}3;z<О1:eQ.PLUd2!eU)XL~E8dͥIC! k3 |ϷC5G쀢I-G( FOe k9Js;kbw؆}wm3c5Cs4Bpdž7 ?wo xm'KP=.kfab̞ԡk@%>-56o#7u>k ~cV H1mrnd?oV4ֆWu6+W-jQpV'Y7t2-8q1`:T6([7k%ԃLU'ګyr_f Ϛ{Zkm<-\+7cǎM8#k⨞STȋ Hy,Ք![~:L IDATu< qQ;A-Ҹ7,g+빗 G_ hVwwia[Rt3Ask=9Y%ꩪ' \ϻ?aTu$zd,2N'fUȵkY ߀B=8CuE9F|m;>ua6zLus[nA;cxÎWh? çե𿡸av %֖ S&D}{[Ё]KſڮJF=d? #ÊYg @I~vp0gn9eO3澈qks &7lAC6(eXŶ9 lZF?y>j `v: gsUCy&MڬSmNnv[^М~}.yV|8SVKYFQX]\0VNVnij5K9fs:A,;byp2U7hw i;T,z0L 6/D8_t (sޯ=#W-C{^zn}D)%!@B9J]m 0E1蹮8%Y64Tc›goI!k@/BZ;Of~H6zflweez&U=񰆕@mvV&\(@Nn.Sn n1?`IBN9gF:- 9FҡF0ZdhЂo :2%&ANgq`coK͋ӋkLc"?6N^~{42/<|{ZrvsufGؚsq;>1M :~gjqoG; nE*6?[VutGY.Y0PTRM7@hm$13 R}*9\SEqV_(pO/ `wa'?Ѐ[eU^wO@F `q% 4o$vw? Kf3(Oqr{k'c\e+f}W g3>ցVf1猐^;-L^󲠢D=Kx=tńA;6x6bX蘦 f>RvPʫK}i]t :gP^C'8TG5t"Kyoszh }KrtM3M,4TB4^X *`1z0~rXMI2-E=5֔O>`'mm5h,ʷ Z|_Z)F]n/+{Bdd}DM,Dž-_s:|pF2Je]c/N QOXizs>aje-R%[6y,bx;kV/yܯoy&=[cReJDoh i췿;_75ߋ Õ̴+|Ϸ7ʃ+!/.<V p0D]:\^NH:giW#sV-R8~1A X \WjAܵ8p.zYc6uk-%++Ez8UTjM Z=hȆ-8?ofǚrzK%p3eH~r::$S:7𼺮g]i@Ql Jv cr\y 9㸹׮Boe;>7zc?tMtN6/XQs|慙O\10\oBQ;>o2@ fٓkF{Cm7׀AqYu0^A) >y;kǴj`V 5KsNx 2󬡍uGBK٦vZx>! V½]Co'Xe+Xca:B:| :rs`1 #J_B0Mg@#9|t WZbڞ]@oh7~ i3H̋>~wϿ7UzOcg?;|O ,aӫOL#m% [c je0WSŒ iJzAx <^n{<(,wc9guD0[: )cm<|N6uؚf-iƗO@KT9ӻyFP]ExXVA)&^B<ݞܧ漏ՒyS(yf_9>Nj?4!vF۾ mλu8.z>6TTQ,_g9Gk D? ?-lAMwY,>5F| >pLq^Nv>#;cz|YPAUy,Wt|9y_ՠS"Vi%s|i \y%J#ZFȰslzPEWDSӳ+ kЫEO[.A]FQHhyN!S|1!0oiVm=u97 <>1ȣlA#}H쿳.o^1ռwSLB^?s6I1ÿȮ !nTѢ_=q97浾% ߀ n $#Ĉ9 r̸q3C`[MZU.u&0 JkPۇ:X?_1946,vjx;ź~Dq jjc"xos4rz x2t.8 !ydd"өjZzxso(!sM?| e>Xj (wvl6RIf(h[6Ɉ4uX!#חG3XڛDD߀K4X߁~xt7âF)vr"_eeSo]6h3G_ѮD_n!v͐~+"i'xc.3K AϽ}w9U& re#0c:P'ov|/dxVUV2i2ؘײ>ߵxG<֫q?˽bbq\`m]>3H_O!fs*ljfmNl@x^D'4㎦u4:E;7䳂3#{ZF|koi{ ˾B.gf!Ӈ4-FA0}} '~7#eGo] אsķ? l"0סq9P3,SVүcߵ/a%YGʌn!_ZvAg^/X^f kړT܂M-n2p)~29?ZEr{bxWXvspXο2OZURr#vgC捁_ $ F|ҹ8q\e YgxizM?vGBր\ux,\kb9eϠU`W5{ΒB m,8eHL^(Q˹C3ζ7`৒ ng:\}ʩOX^#ŌS<< ^+ 9z!t<|a^}[ZDh!iOxHu-ܟeӫi}sþ`j`F-lN-f\VJ!ϯxa追N*MP^!io\:owV1<;-d-so5?߭4<y?RTssUovnNT[頻+ XV6c[ڙOV=bZdq޳ ߀Bf2a Rr#TVf{\]}9\`k|xdbE\\* )V,$2Ӛ)9[ }tx A3X:qƱ Pv=>67cQ0RӼsH<)lCS햃iXe_GNח@Ik'LsmP{~ ֣cU ,j)p5>Wa/Zc֍i!T'w/šVE֩Q õGθ k:i`3ګz^8ܟLǪ[g lKTG!jUЋ9 ȠꜽpYk _pglDwdWDGFf8r`~ЖԢqmj5|<=c63 G 0ׂ6c8ދ kfYz; 8׃\oկ5n[ii%)}Q=rruJ=ղѼs|o5ޜsBp@Vb7@_f&U~RMP-KC9{]ր+]o֛٘e9Cƞ'm5c- A/RհxD˶my/,2[tuu*XXs ~ S+e"]Yϓ41[U}u^,L`*L:XѲnYu)qUYfsh&Sfc6Fgku|T ,h1푲q޻r^k?_αp6\|W_.ʢ91:% 5E恙 =ȣԐ.ςt>M/Oе7|* DuvˋZKtgc69IZyѺ:轑ei}Α^_!,\\*_k\v 4E]S5g l5L-G 0Pw2otU2TߞTj:{=FϞK@ lϋ[Ucⷬv HtT.ù (}dНWt>vYr*Q{ju[*Gk6R};=H*aoiߔXǠƞoꧮUҀ#]mw &%43-́?"F$M` GjV[)p!`t.JR1d!kh擪k0PCkے9Pt]^64UP*? ks3F$i`cI1FfunG}eBUEJrM&>GXt}2P^N)w]ԮH"')?@:ƫEyn{o+|8rd5LZC\|xN NWm{OnNC.}  'i8̝)M&^{ݛmo~Sw}ǸaO gZr NcJ #h[I˃we~̀o[{i>|`H -@r4}Ø51/y3_~w U>-|dS8m.IhmgWbC+![0X9hJJcpi:<5Ó2m;[lj.:=hc;Py$>VgoIAn}~w y>mH |)]W| D=xiyδ{H/٭,>&xz3&kfטPb>@`ua]pGW|qܞCKqcZ^wbzqvsz)͋*λu 3kU9* u7/C{ZMW0S;׳9V_xߩeg;zȳk, w IDATh/C:G}sr_/b`!|85'[# y ˛M3xY)H^i4'@t󧖿)ԏZ:S]l&ܢvy՚jN ߀3/ q ΞB-365sfuҖFFs;Ƙ XcXf i]S\=w(*|suwy73!s"9W& 3.B ?Gy-gH3e0ٲ*J1Ӟ2k sB7Q)Jo fOASv]~ːmv;Mi% 粬ѱS ;i}WoiAlƖ6Jf*{f&Ǝ ۽,Dlbկ:exc ݪ6'$j ro1E 2m-^UOUWqXY2Und6ۨ6}-r#\l߹>1VM*,:ъ!En:8F˽̂voYC8ɴeb]6CPiدp>7Lj5j{ ,"2y41e' ]RJ>mivpGIV[۪;eچjek$^05,*Hp<7`@OAclfJi&Wy,*c|o)K6iUjz.wd]N,af|:'n1Hj1#PםV kf2tu2fQ`PFw*_r&4oU:5;z*b gP*Xiyx8Lˀ -X`m.FY;DZ✕K`WQew~ZXEށy^ ?Qݨ ])k@7ߤ]tLcHG"߃]+,}hc^r\l_3vZ 49< yΗjPy,8rVr]V)5֪FH=om}9? L+(v;U ؑD"2/JOj zG>Ga=w<;p,z+ZcjeUpk]˷#\sx_DV+M)M@4[w}JX7LfhA'Qs0~VA3^pPg3m7+=r59{HC̈́m '"Zz9+!ڝ(&"Ơ/r<r9. X^gHgb>b\sD>3/حYu8huci͘z./.;nL$k|':j؀"2^ˢ>*#lvUbGc8>)y^XU1DKl3kAV/gnD ,kW!_:Y!A&>+dO+dm7ƼoO68&dgfNF<.$j(|#q>.l} ?)l}(]tekit;a֛c[״*bOq;3KYW8FYDOV7$\,sLQ"L53H,dd?.8,82 Y0=U +a#H?LeN9EZSз 7Xrgu=rv6:ݗ_y.sk9Ž>~:P"Z:ESLJ{gqyaY H[MwHvַ5o2FL>GWyWgs`u5}rkE0~ZU{ػ.{>q%;œr^0+sj{E4?i3әYl+m*Wu(8+0Sf,sA\ypSѸ9Wr jr~܂v-e_4RǢa+K竾 4T9V!FxhwY>jѧMC sG?w:d펐8WfC^@7`;>~ۛ}6,&OK.|[ •AÓJ=b+Q1,O..F%mefMŮƱ&@USz$baa* Nfs+}Ɣӛ,l+;[l;˪Yp~8G|BsZoYQAT}Q*Gڸї{ۿ}8y{g_3| 6:5 +p6s! rFcۿts|ȭ3F,*mÖic t&ZKѯ瞾{' 77eo?il:E&suGLQqht|} ?)ɱNxf`UsNg%b)Vp~^|;J jkηٹ(}_Qr֖xk۩Vjy r)+!]mOfpjOc|kzɐEU#4 6&+LnULQ矷-%C k[0ڐrVqmf#c2rmr+-o #hĨbvޞ 7i @Y N5z[W;w]L{yFpӬ(aBebcV2s뽌>mlF"OCh6ɅfTMH6@(&\Zjp4%xn5U$:ƙŞ/OgxS,P:>RsZ2*2LME7k&W9(nW rW9:\߯\؜ lUԝh{^q8>j:U.%>WcWA$)C^(\Zv_UWZR3%ո9V\,#y#Ho:S̾6ړV#lCtvoO.)YTս#~'JLQ^2/{m/\ډ='qԜA:Y93醙oAC4t^Oh^1[&KW*(Cy.J* s;$;7 7 ^Ac.(V.6,գL[Ãbκ*M.;izTtι9'88u%J^|Dn6Oa{Ct2a98~ǂf9&B?IvPdBP Ɏ+MXӠzafsMcwCM.Ǝ\eJmKKAϱ*Oǜ6bk?_u+S&1ɾ8h[LdV, 'Qiu%58 n:(w3TwQXBECaO +Wd,Wu!X?#E7v"P3^9ˌy~W65@+S k-_-:-"e<.˼|L nx~Ua ,Qs+Ƈ{V2;=ct5k]wDGl +-*hVYF_5 ņI33_iNEfy^yge ;K=՜S #4pqJ_<*oko#O^ r갂)8BV1Rڜg6QUZ `%]:L4dPJ);zkQ(Z~5<.W{?{zj#Rf8E]=ۀyb CJY= dϴ?.߈&-Oٴ>z>%ZC  <.td2NaXŶ (Q jNCK{.4%v*d4ն춆Px-~ k˽y9ꓖupC,d^Mg۩O2{\BMm΂mZVn~'Ysjj8Nb5x~g mm p>?˂n3ߏ㼡Vw\:qytqU漲vGb4V׫Qگdmu6cј\"j3\dX,unfnQu wOMgM!ct7BЀ8h޺FӪ$G+˷zR=sAg}UFi +O\+=bT~!;|R3L;i~{q 80 *kp~4*0s.֏_aq^B9~:Țs:r+ȕFX<&lt-j/{cV'eؒie9TtD (Qjq {8 i22Mжw`.]N ׁgWg|bCIU2_vq+&2?4~/w`D!DR7C.E4FQ8wm>!.Cbsi-^V wr+/1+Kҿ6|O >MVwxbdk*@٥'*JPyVb ҀvB ,D TZ\s>o;I#:?cƎޭ]$.IZuVoIs}ʐMsTiTsW}GxW˼sCєmEײAJʼ9Q.j4o*"lcbt w+0 ıc79>1w'yYH7nD@YUG?>[Ge=xF)E)4hQeܕ5~@c@seh@t!FM]T9j{pqy F^.0b E4 ix^*? ?+MGwDC{b7t 1yʄl6QёW|bEsBcgUX[W^ 5z.}Q6sUmL +ӷ5@ppsxm=u*i]ܲvѾj5ҿ)M,Q\iQtgh.|pfIY?*pyߦ lv1 ~[̕aJbV<#5|/C,bן|fOշNbNٺZ';=g0EW\ XͿmLO[cF;+>؈9N^.^Y v^׹2Ϯ0ܢ l|pHUcYݙ=S5W->DO<@.%Ṯ6vZ=Z+?-l~lscKb>{-jB^.xtZ{EyR߹<)hLmՄS֕hinWT.&t}[Ɗ,; 7ϙ =)4*qfp ?56$Hοp_>; "ۯ9fNiSjV֒Z7[,/)ޛso3(Y;3uqC?ݘ(n̕^?֊|>R 3+  ov#2i4*Mfj?HRx{s!Wr/n쯗FZ9QBT{cqmUF\^E)E) BWAvZDl{|ۡOz>ymx[?: ,H6Bw&nAvZ}BGf2w#ϐCn_2Tp_ V}pNJ#7R RTWe{f=F'r>2 ^Iذ SȢsݸup\ok+}S Y1si+hYWsW>♐<޴i~8Д̗0O[ fMd6SO^ Tb\iQhvEA#]R;SmA~pZm~۴agF+?- ?)jAdoPz78F3ٶ$z/˛) t2 1+w,Uu,2^ 32C'[$W+[SA &XG713 zs7PRM;aEnd&SOmk Ql7G _tزv# Τ @o 7 M/{$02[v&šИ%/ݧ6 RB3Wϻ<`ϏwB\M~Q̾בBp̍ nbT<"-fT:j wE!'^ .;|rF 6,-Q8>gC7S oD3HZ?fv&mM 0ny=7c* _C[\ՌnQv<*O  s&vZ>Wt"_$њVpֶ=5Bo^, f~SCyoQ&gGgRqu=ٵ&4$.$M6ba!RH^8g$`WiUSO};;YN 5̄+F5`SF јHi.IWh5(bEOĘW0P56-W۽߼1亃|l]sFץ48[]uVilB@W隽w@9i`rk(bݱ^nO 7m.fiSQְ]ـjS0,:^cz0~R7źa0m703x'+7i+l~Bn2;Uibq0Q`#;0 |ݻlw3Bn~mUcqCO.~9ڃF7n޻Bv c,A9[kG]3Ǘ uy4.WELOy"$*Jie's6GØ0`yy8l38[՘ɶuS29*ǀrP M'!p=v$b\}۸x ߞGPL^Y8=k}bZp2gB*!a]f74  I40mŇ{Y%7! z8es Scw+cn[YQ/ *y=ï X㧅\XPwMݤÍFqo*87gT +j@^M=rj;ӓQ6ݎ]=WK gbt58pS}_0dMiktjϻF\m,a=U]U֮,Uk0F2Y(`uf- JuU/9ߋ4DK7|)O5퐎m]ǐoޔNU זFY3am@`j]F-?ם[/ӋtbDy<=`7``|Iqy?$O on}kGpmfKd+ /.& ZBO]"\) Exsۈî[=U {?yHszzS\E@E3}9xi﷑6ҵB͋jRj 2$+~:Oefꊎ/ c*8b`moMVހmNv4- `.Q*+V)v񎾭JЂȳ!ocd/NJ@;6Wj^p&+Gt n]zo֮ 6nPljqv|i[`߷vZ~0gs(AVw^#p9Pb".,߀ӃmLMWϥ E3OzkMw+}L:k!Okl\}ܱ*eNi@[jn kXRY]og%Q bx??V?^y{~7댽;r*qb. ~cԭs'1K/-*06ƯUA0mpF enҼ`(VnY>@ͭz*@O_{)NGC "9]ȑ5_/|O h|VћAl.as >l+ϭP&POعPw#z!Nی}i'Őϫsga5YeL*M\pi!)N+F݅SklX/vM9Mpu!ӷt~͞YG.qՐ7 sb.?rT+&}ĈrѱW0y>M_?[XjAhjmOkZr Ezv>%{+/rhVW_{_Ѱ;;طu\6%GaCRKqؼ$,oS /^mZ78cB &ųdžvl/v~ -Рgku(`[nl=?ݩl*!_n 6BdťFhJ|O rZN;>&ҵ-m ýM ~]t_Zvr\̊qC*<eP0u"ĭWq5 g%'}0:,cnkS;?)>TzŤWo~-{:WZkHtZPcY5wjΰ{V|R_ܦymP@p܌ݗ߯;)4z>ow <}ṿ0ɗCM;dNI#2[Tƭj~D5QYg q,*'ydw>ִ]"< ZV N^Zကź /lKYY6XK!X}ca!)q$Υ7Jt~e ?)],YB5ѷYGQĜuK{vr[oа蚷=PG^W)NWmbCS|3cM8L% ?4_砒^Wh3_c J i99fOu ksQ-:k#loWoې;o@I۩fC PkN@k݌7 -8`*zz-2| ˗4+q=s[o'O OC8 lݢL,ncOsgO=ޑ{Cmdlm`.B[*C^'6 s|G[܈[vŪ35k5S+~mbk7`Ҵy]#؟Wr 36}{Zw,y7V=OHDm fΣ]O=oY=IA^վ*jZVLi"#1!]xQd~.:+^ &^5ýsR;4S []XksE}w2 tmxo|Baapִj5ȫ˲{mnxc _"g ^ Ǹ*mCxqvv7 %j+?.4?&Tnt2_ m! pЖ^RK^,+ VkVF`1*O쿟0~RuW3NPovJDWhø3Ôu#Lb{DrK&i"eqJcU+h hE)I*gm'#ܹۤRRI Jq p$}'cC :xmbޮIK [ 4GJ؜z3J;iMͽ* M8dž67}[hs'P4~/i-.ߒqB67wjuk\}~?Uj Rڸn>;`:7cE%+1Pe#T˛oILܥI h)Jbgj2KA|yg']қ]EV[ͥw)po_ pwml*|ii,rY;7kxe"{)|J3ls\z-L lsv$Rp.9~^d ֡ oƈzG cTjx[T`d3{_qdT?>+.CgZ"Yݑy|ڵXHץS4 TcXMeW9@NK3 (OuAJ~d{&>x_vg0m҂xW;9mt[C籵G4JFCj@ba|Kja:M}= ߀ i1qG$=I6O}6ᆿ3 w-2qyWHwͣPP%Iig `V\3M{ah6A$w܅֌U'â% ގrgo;Uw˃>ko )Nhu3(~_Ջv~ȑwm_@%__o-w[chy๑-)t8f/-7`|"Xiv:T &[k~{V1xKȫv&}v~f HpS( uUmCcC\/ohwZ]џ?@V[jϭ^g_z+mzM۶9)Dy '|i~M[}ԁecmTNdWX?W>t%U8 o%%7`9x5'&ai1VӔG}:M.'ИC {@TҀSo<,@ #MWfjvr ieD`u0J1T=n49  Oaic"=8 IDAT9OG=6gi{`|h#FAݜq hy-mcu=}|2C4w=è# OiR.@=2n9N>JW=:koY_4a7+wV:kH&$PgX}b+>v F{3~ emnwxEȰ_=K^iR{tbqWYbWJwj\+ ~k h8/#o/!ofn&,lN 7W(8~J0 P:3]1Aa]֠\t3eZ,r5+akP+B]zߒ`c8NFϧe@wSi{(mVK> nľO4bc;)?{2n`'Si~v8LȝnVVkl|ÁZ;+=D7S?)8p8J ۫cF~Aavw=l!f͕TD ^TdϚɺt+oYtF gΛȳFB0kGn3"6qo165AIfcSSݻWxR5z!CL疞ό&Icxߤ[{MX1;}n MO#}rvꐻ𓨀kh~Omoa ɗ% tj۠2OV0[wq>5Do瑺a?{/)7Ҁoo~۝!+x†pyWg9+gGOA@Of 6}YǦnݰGO'GP?%XX$~ ͿQ6#ۆo܁.S0Gxqd4>NG| iQ(0v@&k9̢+`n(>''BP|E+M>s{US细lÁ{q4xg@C}1dv '~sҖ}s1F3o|(h[ r 9a|vzNoc0:j\7`TaKIӣL0RQOיQ4eќK2fF!Lk\ ~c8-C#B+Dvm,.댝y` .hĉӢ3l/*(b,ƫ!MnXbK4ɽxܛ\5Ę\5 V*" ".[2s~LySX@Ukeisi^9 nIl4V_>٘pT#hKτ*8e`.*l;ieI FKm&0Gzl C)1RNG4 SN<+HO38^ p*sdy5հ_XB%܄uƣR_9no{}W>X1Un @dD/|xk+ *|stUe4~28فP m2>VS,G|s#TPɠ7I|^V v#6J5QCU(JJw"W1(B}rH-7R+OUX ~\T3c1P~yBMKN5eᴱ {t贯>EGt`8 Ӆ)"1l舛a) [ݶA){ ƟV gYQ[?DT%LK{0sc_|MR34OM_eCiF>j!ĵ^2 odёt{@],TBfn`jeP?ұ/5[pKšdV gf~EB0}Rxox1תH9Ց3H /ʉRNjR'G}PG]L UEܿ զMa#@+KaepF+^ÖcwG h+0t~G(N(*T[bNF6-\Ӗ* S|3A ng)b.1ؘ~n1 6k/ 83{6#(w\!վsϛצH.k7N9^w$:r]M{kZC~c(U?:y/O\wEވ!B~]j PXk[c/I8:^c%=~$`pޥ`E?n 5zvԮGȿ6$o5(Qyo! b8 +ߨ 6\b fLq"1_feJ!h|U%{ADnO0}*UM.B%{ r3ÊWJ잍"<.lPCiw+iRinp)mv[XpE :k6m |--aoa$|o6SKkPJMn'Jɋ2,* ;ܻ V%~zrn90La+G];E*/ƣ=HO`V(]ʯP,N rynmw7"W<4!XW+T*XP+^`N%YPʊ9V&ZƾGVžkT$QѩB3fS>گ Qh#ūACvTt RʡWN^t6 x>by# U)~T\Q @@^#-f 0mi@ٸT nȻ)7_Be]: d\Йp XGَiA# !X'\Vy Z`Y/ х ~+pǯY7M20^HkRt(J 6]JS WryW oGIh9>SggS uHe;\/ڴ<ػ=%Ҥ´c邨  FĜ~ "e/޹)`>dB8 UApoj3}*3"F|*:rw&Odb~LDcqlmVv"GG]n,^ ԵHFA`/EAF.p7"VC_xXx0J(rUt(KMdh&̦1|A[v-ȿ -2Zt[h% W0MvA dln)U=h h+T>FJ彄/EYbq [Hp# @Y(BÔ7Umn6$l:*lmx{ܬהPJ@zX]xz a\yw+t!vq`dk\F~ƽ]!2f%~Gc[::vJSڝNhoV F ԢJy?_?,7' Se)  T]W1=V.Q8F4X.hPV=P- S*xRAGtK* ~d]!'*͎m@)QCpZVJV[zڕe5K䃃gB^[ܠ4+Lxaʺ9$5x7#4D hvmK+kQ*+[HG)e|/Yl8s9h?Rm폜[C ) )A*WT;iUJz<@? #h@tv3U#;K{oRE*P嚆a Jh刍+t +΄]H1%Uиį+i3HF|q\lxC/ .|;s#Z|*!x@+mIX]zL 7QHG,O4\Ho<_#[k%oV#%)uރ6۰lT>Px߼GTY"%èoxLLE(*?׾@QsUstSSɈgNLںؑߦ lSXI>o7Ax~ᣨ1LR555\O1774>B jB)Ze.V@E!>Tj]yIq=g_2V7A](-Xd b -TA`+bwΔʵntj;]CqN:jCԨo*sJ/i5q>~mZl`vuA%<4s/fAy4+,޷Fetp|ȪpkApz]U(b#Fz(jA 塈F#zKER9k1%ćȽ +(嫿[:gV_MaYNs?,0;5KP%Ҡ5&)K) x>7iן=(vo2O(TEk D.|wayWȅwfԥgr)GRSSC* 9D0$INT;HAAޏ(H&TWW;"T*/  aAA*"QAAFAA""AA`AA*"QAAFAA""AA`AA*"QAAFAA""AA`AA*"QAAFAA""AA}A;---|{Wc)k.}%gu|W{ms\sw9bDPgfs?IJ,opu Bsne=g7澎`p5ױ`KEb 3Bw͵}3߿z6o[6q?gFA>$GPJGc&hYK(STWWGwvuq܉'E}CA{`zm◿זh}!F.[~=֭[+o}5p]˲"@uUUF?|[\MI} "}{ _vo\AN%ůnWnlGp"tvvr.`UE> nG7:do6t^ ;u4s`*1c QJCC'O_^>(q/m{KX,>p<;LlSgG#k6m̚5kE0 gȦ,\~՗yZ?z*=Cʱ'~ /Ǟxc*lMCL,v!g>GqڌfL2D)ŵWseά'90~Gqx_F]5|xi|3xvܾ{BYr<==yqo^ {Lk߿F6-rŗ]/1t~zH$ BoZu% Q(ˀ_߾c8`x~l&=Ϣy3Gq]<}_Ax7P]]7ȰCYx1"7?.]ʨ#o~a Bo((Td1z(:W{v*Boo3\ġGO> o۾~[[->\bE)QJo}C0|0%6"Q)C ׿cưhNo& <6lŗ_ŋ9x$"fܐn$uyzlN9%K_߽Ʒp!LǞ|JL3Ǒw vI?}w1} KZÇ 㾻,y;v( z*h7Vx^y('q`ҥlݺ:~d&wP<}464uV.Zđˆu])nWr9.g9i`z._yh!aYX vd*I:"Ni$m{"1'!ɐfflݴy/JXLQ&|0%  yW UW 7P]UEҶvmֲѲ-[A6ӃR0tGqNLO?'撋/fĉ}TAAehyYp!۶mI&q)L&o駟fdY&LG?Qjkk8Qޕq>ΝҐJPJɚe~tlA[M¶JC{7yA;.hE}`9`2tjiz2YnF=X?ر\M67oGuSLm6lȑ#|]UMT{{;?p?W |e{־J*  O.:K+Epeg8y 9e[krYfk\u]6m|{>;R(c{ y~v>ߞR d~g97,z<)9!#]\Ȗ-,_ݳ zVw77rӽ;]yy!7G:B!,ge|B)EՌ߱UaZu/?|=7vrކ Vl׮]Nss3ԧ8yy"\e\z\ve1bỮˊ+ذaCԭwݘ1c,fJ5#<5)^[===d3=,|}e) m[L:d|,:3Y;d6bPŁST%mК-z|3|n>Oe5K,eذ}Tw/!jpUaOlV歿[f%p~}5;-c[mtвa96,gޣ7ﺍjFlk/\!e-ڕl*l~17?zݡ?ryG9K4Ά_e3?e {޲/dܹ0zn{983m}ݗv̙QGE"MOr9:t(@/2{/Zk&O!x@dҶmjjj|m]!3 gႅtww ;=mPB%$_2+W$t3d5 v$t7 U3:ͨWv@+kW2οr砵O?>G3j^h^r3a9dlk9\qG͖U/m7r_eY3zm|l5?|aɳo+_Ƴw_^s P͛73w\;Bd>s8aiǎ /;hnn<+G&Lࢋ.bƍ̚5:kSҎ0g5V:ژ{:Zv(UJة$ն}6 4 ɮzV*v%?`Rd Vt]wJ[k+VZtq58k:X|_G~j>6\v7WLRKqɍO>gx{`? @/MW2,wp>K'Ie#-EU9pp8[_pQJ:Xoso+gOeܐ:4F080ҳ=|fG˺9jIIj˔,Bjz˦\ŧ0 'i5ȿr'aиp?'Xz;OqL9ڴMf Nς#9N6?fΤ+M"iS=pVTT jk2~$ipLVfG-g%%H4nYO&q(3vv1Onzq`ɓ٭t߾_E{c| fѭ/G_<|z>:a?>zZu&uŶoΒgI,8{d;+"N7-y]0ͨNLS˜~O{4~ Xd eqǗuS]]3f ˖-#χW.pmmm_>ܤ;hqfXjǏ`͚58ӯ6@?a\ns5k2 2m9{TZwѓ` E]UUhCCXԺ.cFdȑ6ه:#FЈԧIyFUB[#:ME>8,_͛7fzD ómjgnq+eKOp#I5w}߲#iA_W9<|Qy FIL)gbdf?_YMbt:yR%=ji- hx%\-dfdܷ㯏ص97_?2K_mMލ/΅tίn<+?CK_.` HO\o ק+*3rn:i"wo-+ ~}YۗAx}vMuG}4]]]\9s0o<=Xlf֭s=ձԿ|>SO=Yjc455a6G}4c,[3g2v^mٛFuݟĦP[V3d N;<7oϚEcIQ ERQ$=BʲcQhyiTѐvdZ'Йmc6gss9h+/Ϥ,_ މ0ON1f5`1?⺏6w#?M.1?1I?<9%{ һǪ~τxv4&0,4Os$/˧#AٶQh2/64.+ډUItMomǥqzEX0瘯qW2ߝ8tLHǥ_]?_uVk>hHLO0? .cUtȁ9r>~fq5+y˅-v1e]y#؍"ս=:8N As&N+qȹ#<_8䓙:u*Zky'?I*9 2 7nd޼yPWWI';\.ǓO>I.c̘1_`~,/\upyݬY0d*>p,;xhLAGQ[ۄCM"F|i?nw. ޠߍ-`|c Zn`` 0>ZQ;x#BMS jlhPhDFelY m$,tl;td ڡйutvTW;@+V`BZvסիW`GzkWʢ'ųh IDAT. @v1 ވV~鞅ٞI(DwWxy\'|eq8(}?.P=|W}@JӳFf%U3nYN7Z5</of-c՛Kx`<56":es(o;>|'1m@>=Jk˧Ҧt2*Eo)L/γ_Յsx_qcvA ~);IZ q|;F_)P5M @?>ůW8pӷw /52*a—^=op7?98iz_mٝ" s`t]T"ϳuJU%85H'HFAW\ZeQ iM:,44j[ +mDU N"ZୁLk*"3zl~MN xY{fuSˣo1?Ta9w^`V4~&딱4W%)jd'r'+Nb܈FҖz>NoK^+NR{Ӿqϼl-MF$UG}mYKn9cm*aCl<zg\CՔn#c0bG˙Lk3ÿ7gr>MT8IvprrwZoӺk;l}A/]Ss{"oʶIaCO#}G 8cIw}߰s #4ɫ3KXM~Pg'M4*&\EJ0v@|q{F@* _wSҋ_y_֠]ȷ`+3S:OZH9NDF=[H'S)|+Z NIj&i[9ۦa4 '"JH&I7Cݰ@at ۶@kO#txF'm8ç_̏z~lX+) ~7¸WIpy2` M"ӎ5v֛W6L ɄM:M:]ӁyܤJQ \ a gZTWdf;T=I+Ed P[I G®!m;4c\>Fhͼ~K SǮx OiA/;rjj]W+2==0A"yтAUZzrXh,WrdM:N2!@jÓ$y/6-$HwTI}#Y*An4ɁX.,eNqr[kЂ  `'汕B%=ݹk{w+.V䒚y :PI脆_e+M9'jйHd !בuuA ݸf to#݃H&I6,AAxGw6G,NGę d]u:d\^x"P lE8].d]CB Ba(=Com߄ϐΑͻ<89n{[8:j(YUEN0|>3AAw~'9xY[XUW,YikȺ+:yVC \M"Ui] wmo n7ٖto Jk-y:7ehYAYѴtYЀmds9&|p  ;Ez(mSFr4 Nt4YMFnLmpU ʍZyܬkדO5MZdkmE6%;q\io$itvwsd  wID"AӠAikyb豠+֚tds=޹8V9m8 y ,MTII@V:tt ׆b~WqP6G]z4t[Й$< Brr$]սҍ.rȦjr3 INtut![&-P0֭eی=`" +ڍVZxyضm2e M:NR 8  藂Q\Z?UK^>wBi(26;h.vIySKrrڲ3d!4tt5Kt+7ڤjjuqLm}=]bҁr:׬Y7:u*Æ Nٺ r-pgrn^IJ,>Ou4A}Ge5^aL`⡇7e28x /';mprRtVnNg'iKh2]-d9z$3 E-KgGE6eQ[oos㗪j/[_{ kmmmq||fܹ<䓴SWWǔ)S{hnnfذahyGxٱcÆ c5 _|YfEMM GqЇܹs7o444pg3rH/^̂ fE~˳>ˋ/Hgg'CSNa}7`ҥ2p@N:P:M7ıq@KK 7|3{.cǎe̞=6jkk99p][oqq)*?g_Ç3}tFֺlX ~)N>o0O8g{ 'F:&n噿]yY YhQ"Eu-=9vi|ٮv:o%[eӓ͓!h(ڷW K3> F3kדq|.oܹ3m4{9fϞ |͛7sgb fϞ>1֬^!Cpixg;+Hӌ=s9*V\ɓO>ɰa8蠃xy81b4774hSNE)ٳ#~?S | n'Ӯp:5|(Mafl.\3ݎޤèT<'yy`=Y.5piVnFfF&֬~rq:tݻi۶-[f5i҄͛7i:]~JR\x1gΜ^zDDD\'22D~76mJnn.;wK.]im55Ϗz3g]ҥ ڵnݺ$''70lذi@LL )))ڵˣ1;;sJjv/ `…8qXb^e)BGUmFmر#>Kmt0VK"/9 TC(N 4MtaUAg01t~BWوCSv#d;g/.G:# W^~`ZN&L}@ٹV-[*.z\.233 C4 /v_͆@)u9`,,((NGNNf?n|yܹsvi?qűzurgQz(~),::ҼysڶmUV\?>\.222+1C!##еO?jEO}>̋|͐"/Ӆy a\"@04tv'z` Civ\i';{^q F\. bua̹@߰1[cz=h2I)u9XoH^RdVZE||<`WKU4%FoEѣGtQ^RCVsWy!BTa,d2z|6NMdOwb#/́#Džٔ5@Φ =NiŹ ΧI7I2HHwfP#~}Mu8~(P@pZ{h<㿞d$,Zd*SF#6/b0hذ!v")) ݎ 33tCllG$%%{ԪU5k^ PF F#eQ&c5MĉDDDX>ɯJdd$zNΝ+1/NG 1b:t`Ν\2`0pBCCجVkyUT9B]?erLjQtoM@@/6rXkQЛpz:YG=; ~- Ftfh|"@g/cits/\Jϩg^^_2`0Pn]O˖-ݻ7~!oddd0oR-[ЬY3z=yyy~-[Enn.AAA%^fѶm[n݊l&<<}ܹ̀s?~w}Gjj*vql۶H"""x峘.\_~!""EJJ 6T۷뉎pC\\%UB!wEXR9MS#$sCw(옸N -׉=Y]*c0PިCgrbѲ1R'5t;wΜeԭSر#o6;w}5t4M#00,R{f͚50`۷o???BBB.ӫW/l6}7oח>}0//?!W?#Gy:u";;-[j%** ???رc.\`0PfM2;{LJ JӦMs !7N\x 6#`*\s[;|pAf.prJ wCp`tpw0p&  \(/ΙsGД޽{Yn7m۶ԪU шnnWay !qGwEu$?i6Ud3nG<3c&}F bV]mٟ )rtgq(E6-P$*#Y#tX !G5vfX||OM6m0~J -wqRdfft:ZW<"BQaPM䃕lٶ _A_P1 Z|}b6\䒙MfVSS9BfV陙fw?monsYt^ݯ(Bq\#?u۽kWvO?̪W֭HKO''70@a21dgpB*g9ęd.gнkHuiX!B%hFrJ G#9v"33~~~ԍ&aC6M Q! $]NzȈ"#"ڹsUG!&*'B!ܒQ!B%B!pKF!BB!- B![0 !B$`B!nI(B!ܒQ!B%B!pKF!n@~?'UosՆ##ܪ.2g{0 J棱 3~Xso]bnymJH^7mG]Nab3a`$yדn" ^UV9˩2WJ&sVx@*dLq<~V7lȭӯNzjJ;{Y)**'>l:h3:oWfc1SY痻z˜7&cU@jM𕧸SӣW*g |p9{cLk&kUR2g JyגFҙd4C c,*c~ɜ7՚"3qӆ^ o8F3{~뙋WMaxxD`5 mȈgPi]¤ b MI,M*Cc@ f6a M۞be<;k`5Ѵ/V&w?,ϐ.qĄc5סU ,rM֊} <ܯ,D6Os=$; ҅ZL܆cgp ;0σ2Ӈ/~yi;_]ǭ`4CHܚtEҖyۣ1~i;]5I\٬CӡpK76_ML7vR %|qQyOQi.;li̴#%yk#"-}jpSQ:|d*Wdz5uqbTbKwq D0_& ahyXu[Жu 3c4ְ ^BĽ)sVb%j,wK $tacsh76'a;ﮃG7ʯCmڳLGKM&$. gzLgo`Y2{!ż{)G'w|">c]Cdț ^`6bzňw?ŗkژ<V5̌=$H ZagnbXb9Siуhu¼|gS^שU dzplb_QczIW3R*Om/L魷r:ǝ':=\4ԷO*z>c;&F{f*խ2jkս Pw2K)UIqP9KZKQ[!fVIVe\Ve,VVӾQsU*`%`R3Ǽ7AWgwd~)ê~2{UoO<*o'5@s?R*䞵IKԐ覭*sV\7> bWX, 6,Ղ b7߂XR b=} rIg[25э Mkǽ#۠?{%϶eb6rssߝ~NKNiަfIBI bO*ta8&oYׁ^Wױo=f2r8P!iS߈LpMRH\+ Zs$L-<5ccf+؂,MÑz 7`L9v2gA?AOi`̬Mk5̆)iVgKҥz 2]!)ܿR^e4rl?6ד!="| 67ώx;͇2Sֲ-7|˿fT/|<ޖ?e4$ qWKHoׂځV+>= +ZWjH=s+$\PCݿCb0`._ ٶ,,\:I:t^-vh$C (0FӸ{t͓cdvN].{_ǜFiX d'ɅDfxSOw oECWl<{1QzKS@A#y KUJ0w~ia3Yݯ ŐLdHW-KyHï#{R귧CWl횄c+{\ʒk1̿3[ٝ `al]wyOYeˣv#>ËyŬ)KPI/~]-_}.*V~+ulCEOy1ﲿ=3t{<"K'<STESynTwQg"cӻ|t0yd'S|ݻҽϭ4/KjtURٵ5^z7ɘAM녧Xc ڇDs]:񧄧WJ3s }_`-I|~w?ZF>CeIǰwh[jot=O?hg>dwzKu dN†`ȱ}e OƸą[pl5ƅX+D) DSS{n̿9xd7~{$]/<ͻg{]tktRv~+uB۞]_飦2.L"iOP].f#ͦcr+fxdˇSK.+J*U=C8o9GR]?Sʃ2g QJ;=z+l3 `Lxh^ GORobxy,Kxsق۞}[q$HUG#㙚 Olt[9.8d'cU3>^.Y!*v|\ Kc?4mV9՜^wV\\ɰ? (ܪvvp}!W|Z7ҫǍ\X7\ҥ4D=EQ~17": ~vBVhSEKC0 qb'pD!e̙{vp 0uז"m<u" ӓuj/~I@EQI(čyL]D3dZ5 JuטGL&5KCny)%oRD&B!C򒴼B!nI(B!ܒQ!B%BaYB!uGFQT2m@pV)7VQ~/?n8ZmD!80V;*pW/w&;+krwq"z#cUPY~>V58v͸"9g?f,k_YQljBN5~7=k:u~B!K^2<:ut:t^Gc0 ]$Όlns?s%%p&:?[yBw "*56q'41}2%p `ٰ/?U:%+8.>˯wg@ f6bMG1$lq D0_& ahyXC(EҖyۣ1~r4֝.:ObЯ/$0j$f6{ImUS+XMf|C2b x4BWV!}u Dt;_%ba<Ԧu#z֯EMΉmXm ?fƞ|Kxv-F°Z聜=c:{#Lju}ϒ ,K=R<>X2yTZ8 Z(]O<([W0$63TBٯxUj8cy0=/cTz{c=;!s+i ½6;mV~mӞer?Zj2!qhB!ʧW? `| "h @{ (-3Qm[g꾚e:*]JuGAE]RJ )vAndת{eRuR_z׏;/:=\J)UIqPW!^vU}_W_NJvH ӫ{֪\U2EGCſj)jN{2y^r\W;jŠ=U=iwڬƐBݱpAվ j^fZpA[Yk 1_ rIΈawbͩ y;7=+^;P]X?&CFu@>ۖpF8%77c|w:9ٿs/9^Wױo=P~Dq1m^K/,fOA K_9 +;=[#{R귧CWl횄_dk1̿3[ٝ鸫Wiu. vt3]>:u >Я kEx c뢿{r=Jv/Oy0dsuB!J%g=l=GM%eP]ԙD♡?z̟B_3s }_`-I|~w?ZF>C3vC}Q'@$laMl޳t+B֌F}joi1z i{X*~pjr OnǙ~kGwBa6Ԡ9La7p +tvw۞Y)c(<֮7mS~s!(JT 5G,?35ķVsE]@#M«#>Vܓ 4^/&wwّu|/6ϐpс)8F?[AIґyyVXi ͚JkVVƀ^ˏk%9u-YumHma.W?UNXM />7e ϱ|:[u3o+B =Gku<9M>8o9GR]?D܍!c c5A\hB^q"?Kvcw>v*Hԓ/ʁ]^wV\\ɰ@:6.ͦf&ܸ:n !c"75n=`Eu\6Цl\q/aV|H~sݬ-%/%Pm~tРN$!~zNeo3x0 ܀!!OyL]D3dZi<ǠqQ}'IҰвDz G݀A!!@.I !B\%B!B!- B![0 !B$`B!nI(B!ܒQ!B%B!pKF!BB!- B![0 !B$`B!nI(B!ܒQ!B%B!pKF!BB!- B![0 !B$`B!nI(B!ܒQ822ȭ]UQ*{ {vΪ.(ZIY1#$`-_O{Y{ͣ6[% \c%J棱 3Z~uQW&i^i5.L%V}R|1#$`NLo3hEhuSfc,y\L%ya߻S?i ?\UnGl* Һ6*/#&ɌIWiC'ϵ*_Vcǚ(B|Džk`"9g?ftT5^*t1 #2*WTj XU]!z8V|F֯5>ц.^^?Ef kG`Vpbf_%?^4j2ڐKϠ HۻI[`PXU(ǀͩlPV= xvD7 j%i_&< .~X2!] j2a CXLx_ jX0Yl؁@Px{cIlwj  GeDZ6"߂٧7uܯ(׹oC[%όKX.zi ɗw*~%6_"oӍ0_,@[ a{ȸҗ'~.s3b*<:ut:t^]Efgp ;0:H2{{4&/?t<{qmT\>Gc0\$Όlns\&)EY {>0Og\"Ly֫kgGcڗ8K&bÛIXbUZvc]Cdț ^`6bzňw?ŗkژ<V5̌=$H ZagnbXb9Siуhu¼|gSPHƌx<9W7h9(n8 kfYm1Qe'gwm$OwcYBL֫k@TqJ݀3X4KzS>>;羋毟ϢWKWIUzfM+0iTb `@'9{^h}t7n4B0X `| "h @{ ġv?L-{Vo P[Ղ>czIW3R*Om/L魷r:ǝ':=\4ԷO*z>c;&F{f*խ2jkս Pw2K)UIqP9KZKQ[!fVIVe_-X|YRZ5$@|.*&9~oV{Ԛty?k<(ê:?E=.ci{X/>J2H-P?9MyuYr݊awmR*3u_M|Mi+1v*&+o[^EI9TɧL֫r[1v x3wv6e?NYǦZMFezOQ曱Z +~o3ڥrSc# *ꂳ|cU9v.^ b, V .| b9KAlg,Eb+%*s+m8F7*ʯlFq|<@>ۖpF8%77c|w:9ٿs/9%ly]'9~S&-5j>yKхc8md^z]^_Ǿy>Ԋ|ʺbcDNj5Á iMF/Q O][+FCW|y?k>!'N&?`;*~ =kRH>36e 3 Yzt;-I+xˣʔw䋯y߻<ԯ-V|B{2TAʥSz"kH9ys(Ҏ.c]YEau{c(+G c v$ _1e)W=%)s#O)qU^yvlƔ]k jbTlK=o:LqEW!9t0w @aa5;sl _\=KJx,PBLzz5;a*( E^ݕgE#%)MBh瀘{ĒLzy?_Δُ1'k0cPidfE֧q*e% Ǔfб~#*tyNC{2)eyupQF '̢ݩdA%s)>촀Kþ CXf'1^_Iyzc$(zɱޏǀws7/cNb#4Ȇ8p ٞou]7-f᲏8Z,YK/ KIx;޼--yze=Wy;q/n3g}K7j<9!]]ޭ%ެ3&Os"Yޜu?S\ _/ :Ϯ+ 0ɘAM녧Xc ڇDs]:񧄧WJ3s }_`-I|~w?ZF>CYIǰwh[jot=O?hg>dwzKu dN†`ȱ}e OƸą[plX9Y3~8Mm_ _{^ҍ9ׯ΃|8n<>?][}Eyfd H5Ӵ2s>%]9W]6CR@i?4mVR*lŀJY5(~D+?|SwBP_>Al܅~[~K4QV8Yu|yܽ t<׵%lyt_ZWTΧBHhpHs/9ٝlSK# <Vo!ǛJKw|Fsk;PKryt+6͚ѡ.WX{7h} ڲ.~ff_vaK[Hʙ:Ob{{ԅZLV6e/J'0β_^L\alNl+oegH8bL؂Ъn9~?^4j2ڐKϠʹ>x6K.W 5vwZxY?hd?-:/aY.6􍝭`4CH.'i.;ln#2~Ώa=#ˍI0VML|K,;!F)|-+ݛyQ}2,{s' O;g,ވ<:1b]߳dBF9yRn,1B1_Cc3ZG2ftƋleۿ3 77% <{n#aX-8mV~mӞer?Zj2!qaj`*^Iy7z/+}SR0$63TBٯxUj8ca,c%)o̴ؗ lSJbWТ&pkWkM @Op%~'e{8G:y)U_ BH b@<<|A%9=ژLYyj}aJo]}[eo0hg;>zd]'՛}>z9glo0s*WqRe]l ejPleͻILZkD5| :Nc^&򾮟^R+<^٤ 7=v=߯,@ J+r5UFA|I%w8G7TQ osǗ%jHN }O],O%9;jŠ=_/kvs'-.=/s+׽lXglmغ gh\rss1w;\f-?[|'⭅v օ=8vaǒGiLJcق [>jre K/ؙyqn{$ob[&H9/^nW)\*5mq^@Kdަwe_1iG}}1O>̭|%^ݨťmWYX9ruDƪ`̬Mk5̆)iVgK` {wdRtՌVZy.8YkRdžV cY#1&_|-v  ~ue\V8$IB5.\".jB{_RW>C;c=9w;l5DfmlZ A usۼ"u׿y_ jZ1[da'R:Դu!*=v&}qv:lw.iH/ɳs6h3|׫ÈB޺1zp|K2W|w}5DI%1ykuF=z߰0\|"n_OE.3|_l޶]Ăw [LwN(Feszߥo܊7 "J}}4ď'ᬱ?bMO! M#TS mKz?NeRk톩 ҧ>f-݈_ebÞ|{I43b]s딾5ĤѦԹDZtX'YۆB77(+YN9V{cc0W۷hG;\7T(Qm+t8t.K؞fKOfoCS7Ό SR?7n"%lGFoBظ=棛/p8J,>h+>F* cS7AUp~pNx*HfWxW qsb8R)ĹpQԡO}f[-^NĻ=p~؛~ݑ8ۖ>UaF>xxUp$>z;rg;6`83q8Co.Ѧԍ8'8UVvC֖.Ŗ ? vG"5^́Oiv +aB-Sd+@ QEoeֶhMŠUGa j@_'Ie'ma_)4h#JCԢ}f zR`]6#ZгKSlilNیͻ49o4FjRyQp6hFmg?zW# ֹ֯uxn ve}FG 2Sby՚JRFD{H-lO7*լ#3g} it!RC:`V%LHbiMDdk?EZ)UXM^y۷\!Y҅|D57z( v#?l3fo`gfʬm͙S7ϴZR)i,LrKjYlErbgFrr%9š6 Vtk'F[3{NIkW%ǿLj=Rec)U__'dE|J2DiώC-NcV2w; Q3"~$aKqзլd1IGWN"z^ ~Ň'!c%9c7EmXu9 "hUߌx:f9l}'#, }oؼB< e$4c1C63Uf/FׄoP(`Ėh3 +,aU;]8c',\zdAAȽHUDdgʗ'D[^Geq c_d8c02R Zs׿Lj0lEdܲwǑeuCXWg\N#=42i_j@!v{ _iqr8jՃjTP{VxoO*<1"uB\pׇiTl*uz4FU8ƭTlwN}i[f>R= ˆMƠ.QZ]@m HvƚO 7}(UVbЎWEw #~YV/GvD@ܴoWG̤Di0}Q7)ٖ;p">6J@5xa!iP(Pz EX%IYqѨ.u;a~;D(Ohʿ$791¾W"Ҵ'i2' MsulO% 2 j5hs<>{F'gdoܕmcZq)LmWθ;VS8c4`ah{<^ cX?* |l?gfF;? S/0)"Tw:E.w Xs!1=ex3?WWE F>!ѭ7&3MyĈ{"2a IDAT/DNq y- _#nkY1# ~M~HVc4{:}a;.A<C'Dp;?a qR>}gX43sױٹsCӑ uG8Cvq}GPO @Fxlޱ4 zǨAc4S G~!V>.BW;`O1ʡC#ySbEط$İx@._ͿioCiDZ%1/w݆CGB\U3|صE^mVrNJScFgQdS?@ @@@"@ҹ'&&R_iiw/] TC6%#q-Q/1t#e䫴ZIbY*}[O ZًYhRc5);2czN^Q>%0E  o!S✌e[Dq셢Sw`\bO;S lũ *wa˞,躌ڥwӠQ/ JWJRwim3 }9黱3_dw8 <:qOLB.t\̝}غ7 ]bDƘa- \ێ-G~q촣,=j`1GƉUNJwlt*{QM o;6':]'w8_J%6xH{c1%{pX!>Ä;<b ;=]&fĭB>pwvcjmro4 aoѴ4+S%r"7l9'<5@AA!Aֳx7FU-Z'+3EfB"eDLGzߪ!!Uo 5]ȋhèbVJ1NrGPp?^}FHANT  #|;Wt>9v6۞&_q/w8<$8cPxlF~P /c?] >AtǕ@9]Į~X2翆^gDz?Eܾ\.2P?` Q@pX9N&O-@8-4{׀tqb$ڿ_bY;\^1T8v$^jGM7,;i@ܾoD%arcnɹ~$ousxbLL bKnV.FDzj:D~u;MRcKKibroƹ^X?L= 8a3q8Co.ѡEy8'JlX$y4u8ʿ fp[sQ׳ bX $XN~;AB2q\  7{l'ݱ!(k P.+@?_-E\"OQjY];~Z0if+@ Qt3_y(f_`x5r[İcγ˰`n:Ac-a5OrbQ#9W'sVǝYb;v.]X;/mȿ~ny~ce Q>l|o&DPH)]E ;_wzӟhcMo 4v\*W7!uD(}$l U& TÈm;tQO^0 WF5˧~R 'F[ѝ p ^%""!:eZT9H>[!=4 pqO@V1r jk)ȌB,*Z*ϝΓݐhKo+?ʓ0 <][8׎tY</{wn2cۏ}'k1gP?OZ9J]G!_+*UdOt^4ݽ:w)Ʊb0^XqnLYEwcoGVG%]挔o!\B4TjHL귤)]$yrf/udtѬ!N'iJrmt],Y4mm T ?BkϘ~(Rz+%ʍ|SyR]/ophOna釮7@)_-jS-Jr&ݟŻWLf6`}3q+"eMOFSiT֠ߤ]ѸZWߴ~ROj+aD zv;A%)7z( v#?l3fo@ֶeT_Kj7=6W)>qWwd-csYd{cEr2!u !8J J<v@aey4{M(U46?wuJf1V qzA ZŒcDU; }lzշ έVg=LZ ((k0o`4{fxUe>n{d#i8#z JIDۋUvWFXg8c֡xEMXbR5c>%c1*S|>1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cIℑ1cI!V.#P CEPm\:uT%acN+6Q(!/G—୧jBIEΝriy(v+~!v 0o?saN[dEcDX%ƕ?pr*1DaҪ1k( 9Cg $4VUt9]ۭ?e/+KC!q p~HQڑʒ/ J(_{ ~Yq>`FBǐ$.)ou`/7hw>Mz㛔lV@ޅӹ=k;J}6qզը&NjLFu_-uAqo˒9t H4-,kDʜ(h4qD}ZS<Ο0j|+ۯ;ŴQ3@wT:ٮcn@8/c uupz#Y_L\qYw/+]G8YaFN*4Z]l~8o /FYp5, Ƌ^ζst2RFBhnfFIl3L]xNAǣ{Pūؿ]|; ف}C[oL|g q ?M8MF%C01 bFTEt@W.;) Lƾ ϧzŦ ZNy:(ݮCs<Rt+ktBb0z4g~^@\> 3f )%$v_=ckG~])ވ݅# `Ր{mS~ӠU0;v^Q*> 1lassvQr妤:Q4,@ _5\f$W-1\ݽHwO./y֮S ڼwDDƿiIgbiEwStjmyWzO?u&5V2lmc;Vݦ2R'{mܝ\%ic>FskhGolhC44O|D3گDlXoҒ3Vi]+n,㼤]kt4=JCBHuth+rgUrǍzRe97wMe-/m156vZb8>sOLcܫ)4f!\הL)Sr=",JDQF\8{ca!ȯ9ZPp2E@Y:P yH0PdcحsYEJͥw8-qE`: m$cx)apXuй8&hPowhE .:Ҷü0/Vm{ahu{Sm|ǁ%-O *zuH ݼZG̼[썣QC LE0-''8NߌDLGzߪ!I!Uo 5ݱ(6-h; :0@g vrֹ,iHWJ0Vv\16]~Gǹl!~SDYQ0LwE?SxlF~P /c:ObWĿ ?,_C3"G]+٤MDV)*8 k-Ç+åb军2 1έ#S w/6No źw +'n"r|=m"x"@#kב~k0  (:3 ?ߦ7˥Q11+$[.Ac>lrEY~U}=(:Rukx$MᚱQloq. Q@p@o5u=n/b *M?8"^c~ZЍE_op gE>:p1ʿ fp[sQW嵨]MHzv8%F¢_wBF\~Rxؐ|5TzGώzc|<SZ;.U v +aB-W2=ԎtBB 7ŅH {?< y>jW%6b/xf^)S۵E\469Q~Gǹ$$C @;YRu=n/Mw%)s[;蘛01M^e$bl2  bkL>@R5 3TU1`{0p Z4\DMW⵵!n%/mJWhd2쉬$ ]8%Ƈ*1F6iRbFΉGB:?遦a^Pވ{U0x |uL 5qY8R+"y|gIs'"w考ս`;]5cxdža迦ۅmE2~AnEw&,Ǐ1xx?o9>}']gǍT\n%Y%/&uB:~_)IDEݕC^2XY໤˜ zR`Unт]jgwQoQ]GEO)mBݹ>xiHԐ'oI17RHd8FMAjyGRSSh{%_ޮkUTW`ujԦ7{YS}|)!S^ $)h"M|2jHҐ.&-[2h֐T'ȓ4J%ySD6of.rۤYǿEQi%#IGWN"z^ dҠy\gǡ'1+8adI3w1P<¢w&,|A;Ë4s jߵOI3c=4d1c8ad1c8ad1c8a|Qm\:uaV{X湱0+ y]2A(Ʌ'|lS gb_u{P]C~`QqlKϩZֹ{kA2+,.&O{BuGV.qB;9FSxPjRz|8#gcı-=!c#>w>Mz㛔l{Է65j*w?/,D;  A!?0u1Kj@PCfO՘ZP~/'2qզըGvޞT?Pc|TYJ$Tx/#RDAi^ IDAT}з}Dy]7zLJ{Y\-'ԣ1ݠvFH1n%o?#e֬jCѬ4ڶvD*zktnkVC*cHWYgcTuEsUt@x |[ BQD_u؏KY?s{bLz,ZiTlZN0KӀ$<<I}Px?Ĉnס9 #<|!vnc oewx dxQP# 3f ){ûJ?Z+]nJC0;v^ER*> 1l<PKaoxjڛAAqlIL]7Wܸف}C[oL|g q H[o,S퐟:c*C^P7_ߍoú/ eLFɾ#F\>ƠO ۱t\ ڠEd:q B+X4,5Eah{<^ cX?*Jr}l]\'L{YArƻhkYQ#}>vOܔw Xs!1=ex3?WWE af˟4?7Z:z .F<=Ν>Axv"Aߕ>`t֮S ڼwDDGIF\WFcIJK,Nz2U_|\ Oӷy]/{I?A4[1Mj&e8~6rvD5jBkWnGqg+=WEIژ\譤[([b&SCIjig6ɎBOn?z9v2AF }Iеy 7rYv$~omJ݂NnT_&3FDWGt41*غϹOʮsI2Z{Nxܙ7S/7%Ue8Tw{}jkr'%=HeJkyLMoI[`.w )z̔{52b,Ĕr7)suVr>>%]b;v~C^^TQ&!ه-{2jmmqwa,xtu̶1Z@[\]۲-܌pp,ƅ:lRt$..}CbUE`: mBqWVN5H^82,jYw퐽[m̿0[TuנQ/JW^`,,5G*nBgU9[ɚҴWiƻJKQcH\[`\beN+y GZ" 3n!W]WLCz>Uuiӑ/jDH`(HM '<݁|_BrAS_># qxzƠo'/;  ALG Q~iaގMɽ0:ڎ^FSo{hvERں<=;|TX"01MՀN~ݥo~!Vxԕ~RrxEm56]ep~,Ù8B7aТS(@J@\:/}n*1xΑ^DuAtgR3stXn=;ǏILijXj8v;pQ pVFΉGB:?遦a^Pވ{nU""2BN, SFuuj1w"A|88)<^ ƛj(=ZŴ->| c 3jf({U ; ''!_HV~'1 ay.6宏W͸I# (w"^hs}ESuB:~_)IDE ]S8MD_6T֑Wsm'EY ǧa|8Wo± ؜CfE>6 F5Ͱ.@b)Si(67 EJE$.ckAf9In)̓֞+^_x_46L=5 %WMYqi?E ;_wzӟhcMo 4v\*ע1x+Ӎʈ."eMOFSiT֠ߤ]KDbR8ZкE%k[Qu?-Un֘ zR`]k-٥)d{'HYǿEQi3b'idNƏ+J7nl@>WEcV6Ơ~|Cc1V*m6d ?/@nX((s DI"BnãV*.c1f˙3g~\v uEn^lWŋ1rHƒsC0^(WpF>9Gm-g ,ٱ8Ybc=jcԩSڵÍ7?C[ػw/7o>}J0a{> v\GNwv}:ٳgo{椓N"//V>68s"?lfX9… 4SRUUEFFƍCPg#?\_sqK 7Fwx**tΊKN2I${Hhx .04Аh  K ~+ mo5{J+;[wcJ/)-8oP{;mIxݳ<-u~I<,kTEJi&63^ᗭ, Bh+,^`0Hnnni,YBRR'O0 :wLee%-bȐ!4M^/\-A[r%yyy\uU!,={ХK fɒ%p $&~?њ,m<;w7^&y k^&^q1;Y`! p8[lj |8BH@Ĕ]%aogvq LPc .iyd&hu_ӫ/{#bozO?PSb켽ِ8c BP Yx1^za]-bɒ%ض̀0?:ubҥTTTa|GbYbgsΩPp8LϞ=ԩ'N'` 6(k <_ǖEX"r\~rzzuY!R%7б%\ pc f &$i/#:sYC !ROv$t??_VG?gY:؍P~b{b6\Ĥvfwƺ*v_5'';'?Z^Z h+H!!1ELL ~E,ڴ`4m?GU,#l4ʸ+- :& CF6Nt .B1A]:0ctv2 G3,h9(*x]2jXOY|kQ]1Y^HQ>Ո `+ƴ-%;Y6o\~_-ϙ]/cc~%p|,'S_:vآwŬY8sѣGn7IIIٳv_uu5UUUmnLo*vx2!IZYZacF=:l IDATkb/6^v:82 db歬F麏(YKwjcLN39vRZZJїwғ8a 0\E&hZ5i \ti6ѱ5jj–$)Mv j%L\Bcdl\/1xt6/.:i}I=t(+):L˺6/<ΎY+øu8tq*ze+{|~|&%8$w{] 7sUsSH)Ϙ"D5#p}>E̜1v`뚇{B wXGt9X=-[,F#0s-|W)+ qz"q%\g}oA\\'|2ÇGJg}F  .n>nmغuk~MӸkaᘦ_Muu5ڵ㢋.:,OMo(%LLRbk3Wi>'i,KXCPpLA=8@ @Ratm!@Opus@8$i :2j8hHM^[V'fADw(]7mFK v7?,,{^çe44q{=c`0{:}:]9_71NQ~t̤Nj/ؑNm KH(9@lm}$6= Z$&# RBPϣi7pC}B.&pW7hsʔ)x^_W >*4$BxY_d3gE;*#*W2>M[rr9i$DlKs8 4Aa[i@kq*(-:Hv/(#u\z#' Dlpk _T0󛄋äN϶`{q9|;v.t0073 ,5][wP3C`{qN-5hLc:Hl6F*BP(~D^Q/sM 7UM:ĺN40dtL4^l-d*=ba˱̓bӿ˼EXI (T>Mltx(@jѕb1l(ŶL 0kSE+(+(>O8/̍xL=C#Cd,*' >={xPo;f:E-:z R46Բi#iܾK6Q~g H֯˳TN47uǩ}lr;7%mg뾊zNmMBP(m6%]#-}Ĉp,/R =NǀHKo1og9~˧+K;$YAɴHu(qԒYgŶ'z2!teǰlK `C8Rɷ?+8UTVE=`XN_-++: qt!=g tݝ,:4ghL2ySQ>OH/OK*E#yx33S"#LLWVU_zE_-P( <~-K;Ol4ؼ#! 0Us=y\GV5V %v &:' n]'3:qv8蚍)bY@$lxB}.4p V!P,a**FoT!'p=+G'5RRU^ͫ3旧C$7NFBNt&'Fb[{`4 _2L>_vAC1㯗0s2^]Ac1g7y#GV\',zj$_.o/:^YxtWL29=s9rbnMBP(m9u7Φ ".?pG}ݦOuٷRɟf=B8LΓr1015oDxeYKVuwݞe":q\* BDO];I&Srka8oCxgh3vHBLto*n9+_P( ض[w !V}$LͩC ls OtkRsGU4Ɛ˭ HnpWU$i#i3aK'v#A:HpnY@5m~_ۊʮP( Bݥ -&W3&:#qp%"!C4_߅I,Qi$-tM&4f p,'L(谫8lBP(6'40Х#%BDBHiȨT"4B `;aZ BP( mN0VH)0Dw*\NZd3 j:/GuFIR @ M8H: BP(?gڜ` .'AD" "p0S`D'J@hHDZQZ3:0"sFMlhBP(7mN06e0lM)" iKZ4CŽN!8B` i(%e7BCGO!R( B޴9uiMw4$NԳ'khXhu7RH4Mc ]H4)"^EDJS@A4a!kb!HVЄ[lr 1l*BP(6'<Q(D8D$13@<;D !r=59D$&X8lB"en Mjѵ#pWiÉ5A|ZNP( m5'Us8FQ4U^(lbB$$;atl#264cELrpj &UuRhBb !kͦP( Bh9cd7쌼R F)40L1F!;+X¡S721"t"jY"t4+OCŶ2xY6)oXn  #"c!;zfQ( BhsOVDtЩ Gg5x0s2}I G-jqG!9F!]"yE"(6 }I HH׹csZ) BP(mKzPnLBϑTdtfr 6h?450=v[Jma"9`Jx%0 \XA1C|5 RJnSEP( cJNv)EHŃrP 0k#TFJ"v[،aoXTSq47ZͺB..6^H)ٳgbq,YBAAAS( B&ΩؐSJZW3c<0bYOR:B: MD !Dq@dq@QMPq ȗk[pd P{ٳ={6SL_~8… Y|9~LƍGΝk,sf0ڵ#9nΎ>[RQQ@VV&L}G BP(6).‡j2%AoWm@n!پ=fe5!d[T9!d(Gw]8@jPw6ܚuEWDt=iqk\1,xb9SXd ,`„ 'PXXgͶmX`{.BZQƂ իQUUŊ+0as敛9眃eǎ̝;,Caa!3gN[n~uԨQ211ytRN>dYf SN+]vH)5k֭cرgWvKڵ &Mi,\~n ǃBP(67饆8ֆ kȬg }G^(45sOO^a)>>}z LtBNN#G$33{1RJ:uDvv6ݺu;lb\\dddx,[?aÆѹsg&OLzz:/-5k8>|8]ta =;5ѥKzɄ Q+ B8:ڬ)|-AL̓#0f,s0GknqKi^x4u;8.L݇ ]TYH r,b0 Ry[wqlۦtǡI%>4ks  !!DŋeŊ;0jE] 6mb…:p;777.]kѯ_?Jvvv/..4M:uTO4:v֭[qbl&77{i$uo+ BahӂԎ+_߁m:H)4LGg<ڧh/iFp@WHwNc@t J-(#PYBwƒSj^zuK LDyKdOZ 'КZQajğMzP;f#x5kӯ_?n7`B{= iap}v/^̋/رc9 #渺[ M~0 BP(M FIn~7!ga Ne8Wgnƴm&t p9G, lh Sڸ A@ECy;GCC̎EM>RGU'0|ѩS'wβe޽;ɘiTTTrJz쉦iض]O0ҵkWV^͸qp"p\ZXPPO<χ˻!]vk׮̞=K2jԨڲت!55Ν;k={n233462Nc^FBP(?m^0-;9e>\hRDz\ixnŤ1}陓HpL4=DC$B`;XjStvhҎ"jC&dsB_Eu:vڵk9c?~<.?<XRYYO֦RJҐR2|틦iBڴ%%%ܹLlۦW[L֭[Gv!77C_v`͚52qD ҕ>l0,X@ǎ Äڼ}>_v BP,#Y$b肿~tyٱd7};ѭ}*ۧ1pj:#wB Eyu[D!YW0t}jBpߩٜ}\M`Z%Mtih ưyұ1a*a*M0:F 7ƑZ$cz4{ye|'ՋCa3 BP(mt6`C^{J5Sgl5ԓC?c c˺ۏwRAb C͋ ШNPBPDmH4pA/g撛|tccdggpB|M`QF1~VOP( h Fd7+*T6eGhKhM m!Ba -R̺45#qG7[92339sRRUUeYx&( BPT,# .ɽymi1WPm-)85L Q.#<68H!Aj\S&s#}!WT( Bh+lc ii|W` VD׈<8f@IN̄>$zlmhBP(U~DΔALJdJ$2Eu)yub %{N C;ƒ? BP(BJuqjN{) BP(P( BPm`T( BP4 BP(&QQP( B$J0* BP(D FBP( E(P( Bh% BP(MBP( I`lX|=SCP( PͰtO&^ƎR'.BP( ?-߭/Ūa ";+X`Zxl#*c_Ǭ$S'k-Gؽq?oYu֑pyO ^`mIa+oXM/o3Mbbw[B޿+ɝ/eZ^+U?mE Cjz?Qu]FB5|jɏToN9Mw蚎tka5'?%J:rwUso[K>G?Gq݌4ry^~y+l+Cj`if_sӼ<\{ |!^zb=ULEt}9"Mj:ܶwEa^{$%U6?!̞sG=#'qgzhlnzLB]-GY擼8} %=E@\(.lpuEn+w~}˘K87.N;\7XƔk8e?X?m}429-՛Q,xW'$e߮cK=0Z8M>[HMqr4v- &\Iyy2^/ U罢ЪbO˸xd";~ዃ #Srt`,ɾKC~Hߟ=k>ɉ(s!<]SC̙UAXΒ!Fto zoKy9眞,9)u5V#mx|R2#3 #Og/ˑP5Kv :A]K'!ZLohPQYeruBr@X2oo9$)_ w1 ^ 8;x}&@h׆ʺ? .MN%pl,=v,J086"ѿ9 N81Cqֲpk :޺cms*u%U;AwmF^vqgGUܼ^ {##ZIW3<1L^^Iwzܾ.was6jޞd]\طg]o]A_渿f u"GB@zuA1F'zv@`#?ځ{ 9]b>>.ֹ/01=ȌIy쫂Cium{h f&uMΥoEֹ7D± c]:?#9`f;g͚ P秦<řv$-΍%\Ҡ ?[ z_{qi:&W);M.*!U~n0oC꺈%^L/fhutdy o)AYUC~݃pw;-79$vWw#?plՍedI^Ca [_5${5Fw0ģeNgrBuƵ9rǦo]!ɇZymٳCf-aL,^xa.؋1eS뺂? ;&ՙgG蠟W}+Nǽ v#pnzZ*5d뻙ݎB<'/M{᯲l*/vpt@b3xJ мn .EL;cH7Z;F"7MXIiQ'٨Z|\FWANȏ~h_>W<x.מ^.ˋ˳uU3! O͠f-P;R{yKjɧ04V`V?Ƹf45!쯠` _xOcun#܇s6~.uGy_QqeqϤ]+hZv]le*~wrL:670z2|pr*VqE|LJO/tNi@x YxG`@=[KhϐoHpॿgQj_ۮ=|=N}~jٳh:ep2: \-3^an ={_M0ʂ}{Hb \{8Ɯyyק}|BIxʇ[p5P;N1s՝L!>o'e%Ў ]=+yl?'w2 Ϧ T|b:*ZC:D > H4 :=~ `8psdߒ{J5X>K C5ҔRJ{|x%8rͲ*#M/Ou T"oc8+c7Y.;HpURnAvuW#+no^-o[cIGJ޵We됴CۖޯfcMVq@^u2BJi헧ݲ\:6C8aֳ+eKu yː <%nwE =u)&.9Fn؞<"-7#UF ͐Wd-_5.aM5.9h}ZZr.xENN2eG科ryd9ev-/= : 'yGF&5yN{I5b./Kd̄˼cȫ3ut[ju<}A RKLΨiog|%$\*{rVsn.^+%#K?/o6#y|injQ/:GYVT%G[lTyΈj= X%#q} fu mOgV)`C5(崞>zl` Ə|Nc8`Wr?f,=sջ?= {E*3sA.L`0H0t"#,.]Zgegt05d#㇜ [ !+K!QeD'+ɥ-fc3gnS~MI@jpbmKdl VB40w'}Y#~dw6^iWף1h-!T1=SԈ75c p3cY|K<|@_<\nxq\{<8mʖ*k78ymvlnV7GCb٢@g?gOa0xkl$%KEf0|D&VCM2] ʏwzn O>bd1u#o/?qI\z'.LJ|G`\B6؞q's|gE#`:'3 $WµX-kfί$fu\ѣG6n\6-o4[@[y ܱ Zyϰ鴠J0H+,i,\H20x<2!w/IQv?<<2gNv8'_^1bbp Pw+87ÑNy1%[;%TFrړCRbZUvs L`U-e!ݍe:T@ᒱ yu^^c F{];ޯ|W}[߹ηݛw<(f\qwKw'7}+'f-g^7 G'hQl ]}#HOtIU'`Q `Q4XV3"N)Ws s)~Ls_1k5l^;IN%Ys(/)/`2J[lK¡Ș#U s"gKcR.A: Gs*+Č!M e iv2On@E(#[{;Vkւ?+"c&2iҤġ֋'Ԓ㤋$;%f#3oGŧ$~kuΥS^DQH#9'v(PLtEvb`|lRC͢0Ą|{O{w7 1aYݜկS$hw~wl^ d]aY{iz@~#rs+LL;y~y 8"ҒHqi$+a"AKBj4,k7G>Lyѕ<^7k6xwf $ Eٟn忯#'qEhĸ %%.M) xc>//Osje0L@amy Rt u"JMa'|dmI5h8HPnz?,[ qN\Yʜ_Ow<^Ӌ梔3{Zg?zʲ|O?[&tuc{'3ޝ]1^@@\z"4^qM8y,z'ǩp2K :^6;X#ziL;w [գղ Wqqxz>73pUstbKn-14| l`kid-NW} O?9]&3S~;S` M-aɹ'JݛiU峬G/z>,c >7t_ E )>]쮔Td0oݑ˙ӾfE<>k%n' 2c*MMmKԀxX>~o+ؙdō ~-(,\~1Q59#3X.1.AJ Ʌ~U ށ_zt\,`q.xꕕ gի!BBxvә%sez]L[ZIܑtn,}Iܮ-|_bq$Pz֖e1WX7>h\,;Ix쩷xu]md `mkp7qm-Hְ̽5SFᛶog3];嬑}՜~L{d{X֖(5'vsn(E;(2ҪHi:_DFNR3^#E UW ߿⣊~u=pb>!4BjuhN_MnQ_^_wQTk%nzB ޛ *(DDP^ +kłbAD+6j{e# l6[f7'N;sΔgϙ9&^Dž`9Җf*W%族qD'yЈ, Rw۸| ZbVDK$rnN$\|zE;\ކC{ Υ2!Dw2/jvh3D5@<ԇ1F~bП+欙jf)]蘻93| <|q tou1 GsFObƾ.](e, sp?x~9R1:WHq'`ӬŘw >J}Q'} `۵p372yasge-_vtC|p)Sn`Pb2~z*o cɺޖ.㹥NR}ۯyWI/$\hDe[>!@1t7C8M[|V[4MC)-? J!2_@QHz”+ɽ:Dw/Uۆ{LQeaD ~5?t'_ӹ0ώ95O K4*T #kG>k0)}[+v u YTsRTK4bpv?KHŵ*(q<=NL/6 5mX B::ޕiiyj[ff_ Ksc MId!0KפHrh&ߜ̤^!GVuos`ɺ,PFJչKc$!/|_&DЪS?}wQS+tK BN8ܙjd.gny?/~{'FCxZO)m¢詳]0B?}u]C߾$^ȘCYm 8j#[9ƫYRbTJx, y&b E"d|\3i6Du[(6Gw!9ZcgIGuJڸl,}n{d٬:%{/+Oቩ/A~#xl4y㹳xSx<^<ٽU펉ɩ٩[Yf*D~W#w{3X(Vq;)3r.I7~q-ASᛏj !ھ{ l./-SjI c#qpb6J-Fc8 RalC):,Bl龍)HyJ ]2ks/gI(B!|Q!B$B!IF!BB!' B!O0 !B$`B!>I(B!|Q!B$B!IF!BB!' B!O0 !B$`B!>I(B!|9ʜ7v"jEcü*]j N]Ӧb5׉vAT9.'_5 Mak iMBc'6e/kH]?E,$w9Rw6=|w:C_?aus.. J+WKiUc3hA~s54&GFR^Wʖ0lv80v2B?;rr'[G}y_Yr[o!6Ryi8iXikx4B#<6|`=\OǶq|l`^{wænV4:zJ3rxjf߳ø3DOzE0$`l4ཌྷ%25_##,1L(?}lgֱ9rÆXVo#AnX6YzKΩRs410dƶT[Q!yoNHbd%9va>YY{x#Ead+!U녩  WXA&sfdxWoH-]>Ma η 3" }fep=Lfp876U:+W6?0Oذ6etwv4 dxf@Q06&g/*'_5&kFfBs_gvcȨG1rMǰ;oq!)rb+N釹anLSȦk3g`I[rvHo?RɷBuT~E\90{ₖt s{Gjm5=*ǗU?eyY,iL58Ih 蝶.FײnA~ׁзwqe;%U*m-Ўj9/(㗟0aNw;VR]֑ Ré=G#+0(t*thKUY WvR8o>Y_ #,TU+!zRZhq[xx>>=rzn1 rlyG"y+5; @+gVV8=$iv.=+0ך\MQ_f;:pQeg慭a==jv,=:5'AfgM;pcό&iv-9}qvU^1eu3cr\;nuU'gdզ2j{vWxކtͬw_0G2lY)泳m_/#- O$q;uOIA.PqM¥ 1N[/O5|ҽ\siV ȦЭj#-طD+j8*VPA϶V*&KDiU*6uo e.Ͽʥө[9IV|]~EW-|,v]Xnu1mPesYz8|ұ{=!4'团Uߕ7F&u 7؅۞[i#_dP|hl;q_ 06%V3uB"ۻbAd'/13Dii^v8? ŷdt4R;Y yXB(3VFvq͡jlBTOjlBtph3" o8S3v/F;c\Л6mvaJPi/[cxHb rߗsˏrw0*GfZ?W OU4*#ǯ`@ʭֶlt/KOO:zM3N|θF~3p #mGѶ=wr]{vEWf v];b"Z^-@FsW z +M6^u704 hoLQrm7KUi\_݊No5;4&4o F""ny(r'AE"5F 3m((SJ03j]cFfU1H[I|<ԛ@Wyւ/'g5c^mXxaDJlմ>} ee)ˆVʻeAYLě4γSxUWk uR6q6W:r-~%69H؂3}V*tAK=Gxɏrswa_PcΖ0)|=j +g=O#~Z$K2@ՀVTAv_\T;KᑜRk 0jdGo,M J٘|t 9lPøhcXh8See\G thՊ X5&s[WY< JeH'4s;)ݖ'.m%|[ jT4CzӦwk/XI4g&02D eubQ(--N V:Bxnoq}=7e@J2'Wqfc=/^Ŏ!t qlh_wUuj ~{wRtF =" Ett|r"E]w9!\r}2gxʓ6!dz0(FrǴ;&_>3wXY{&Kqmg+lCҦw<˺]}mk [C9wc@;H42_-g3 Ec<Fb:+4̓8>Lw~:rRZ``I`@ilt|t{B8g^\ Hy'>> &,{sb:0WeXOU,\r-5:93ZQjLFwb;7v%M!m$\X$`lZږx#]F9e%-*}v ?%v}\^F 0WT~v}?9u?3;uU?k!ܸun\'? 46.̘&Lüsfihaauʉ!U$>OՏ#elھ{ llQ8]^Ks{UvU@3B!Bx7`Y 06Xt>jQBbrhp%Ų!h.i!BB!' B!O0 !B$`B!>I(B!|Q!B$"N[nm4vNx Ctrf͙GQq1fF_4S&D`.MXݏL}j:c_ZOQUwB:~aGjdp~erF_6_~#*͚`Wk {4`Iq< iOz/(d΂f;{&U|iՃ[nؘFNi^9Y$}s>Rv}ЪeK~A#Hy>V:nmHoף7oe΂'2"_)'`@YoN6Lԯo[#X8x,+hTE_̌Q)Mfi5F{,w$-4?_!/?=3}z侽),*b칼:!単㟪|kÿL:ZlIbVLr}%28ɳ3^jߤY句Q4iOx05Ƌ'qՄ[QU~=ؐ=ݷcb۷STTDDDDu)%n?zMGQ|I(h:C8N'kƎrJщf7r`Ԉ uNyiLGQj5~V_~T@FѤ}`.WOWM Mw/RmSSdͻ>m;`goV5keyCI(HM;m 5'`GkyPIoj$"""(**>NqII濹a瞃h$ Q+r" /(--;4[կo.ʯV{拕_gNHo絈UMcje%DS!5YqIw5BJN\%: "u /9U'ͩ8F[y9Y99^5LQb4yɧ<jz;fta]E'hu7t 7ԣpoWy***BU5"#J Yo6_8~ұ}],X7wYCYU4 w"6%r],_~^2ƏkT Wj5b*y~ #0UBy 9>Kx\%h4b4p:8N h4bs4= ϒB4;NSN$۾8]B!' B!O07B!N^0J(Bx<ˀQE!Bb3Q!D#_(Ed6ڒ6<&`Pig~)| yt0z8\ڝb,Tm*>ys+||plaq͜VWdZ+ʢ=rZ¹a9vYo\KWK;3"=_e[}H]Y@Q 쫆qC]^øl+Ԋ$P6pRn  'y$e&Ϗi]3P] MLm9k@kb5iЊbx0{eÍ!\xdp<5iW sXyDC-,`)_sBc UMx 9g]X;a{6Ǟ\6zUxV 3g3K>\#N%%2!2lLc~痸u,xe>F /{;VBNf }8|~0>yʇș 1R`O2mc$ fzϭLdelf{xYhӎ+N"ʙΚWg0w2la$r#3C㸒_U>'c'4MC⍙o4 873-/7e@b4'zzֹOpP%DOsOȌ&N^iYw} ?4J3P]+YĶJw~6slZaǶ}2I߱߾:)-zXػy/߿Ofd~>5̴s2 E`gئH!ML7==>s'32رwV7g=/?6B_:`0voMV<,,ಙq_S վJEsνhZ8|rV0yDl<7/=r/j{EL>H_0{!7͌+`-`o^[>'ZsT~t>y3,>RY ~r;3?V'Xk,?L;`+%%Bd m' M86YT_h&g6ٺ]Y6:́%<<-JT(=8Zp۸t'(}w}Bq]طiBz^τ[.eU\/ԠoL=Y.ر{{q1Ne1]/\뫠*ya]\Wlw/n_MLB;: AA!: -̈́ {a;pL2YDDl4Qt2]rټX#+=̎ J //_^G^̰3lTh8{s-.Bૹa~mkYs71^ Qķi-Gk(}M f[iU 'ZM0<^uax Q'Q 7<#_dV(ɣDSjӚxBD#';OzBLLEM %6 Z6%hrQ@EDCbv=yaͭ$VQȶ$6Ps*KNY.{%qfgeIrU:YohXC8Z~2[}i*4 eOwٯMb쮌a7@͆ヿ\9?a.[y b&"FAݜEv<{QFڕV9C41*ȕMUsW%&0ECtyjCm[Z}`}j>;C|񥩤i ly(RTk4b=~7 1qĔ%=_c`|Ufj~7Xkbt}\reMRҴ:Y#˞^dOq^e_^U>'X]èi8bg0gU9Da+IZim|?5i'o1X}zbt=0:av&CSL8v.i3yɹ|a|CZt̋l IDATV|| _gn4S'0yÅQ^YƃYoZʋnEioEzVv$=s8#S67#ز7UU[y~7>G~!r DkOKc)ťǡ0Ldfr$3b߼ |Ϟ)=44 |.L7f,f>mqئb~c:neX7ܜd״z6q{`詆WӪV>]sٝ1~Ie!Ndp•'`KۺL?ldiq$]lE:pO`{aSKIxNӯhAԝd㋏0#~1vg?<Dxrxe<;TgWwO5!B! g_VCOƣjܬ=Xtz`jCzk? !B4ezFOFOb)LX0{8Z!#F`3? !B4eƪwS1^wP*P3sOe|FO5-B\zj5QfPu]rH׀W^(B!ƪϾj=]utUHk-#Ԭi<>FEtU(]։B!DSnd_jT]j{ӋBmO/o;%`B!Ds+`z0qtvu 4`u-gO1zʄ@k%`B!Dsh'p$}b=5MWpNaU7W5N 5$ !y E$ VSU߹U]\>{{ .!B[-cg_ނ@ŀ]T Wm. !D_MϞ4o67.iO2WwB!=Ag`1ha9m(B!+|zGozד k7B!ho?=yVo:j& w9B!Q Ag_5ӻ| szH_.[!ō<$X_ut#B!N;`Km0 !Bcv}hA-]W{MB!8 m: B!8  k,BdumB!ĉ6^*8 P!~y19 B!jރDW5B! B!B!B!B!B!_*SqIENDB`tootle-1.0-alpha2/data/screenshot2.png000066400000000000000000004345311374710545700177320ustar00rootroot00000000000000PNG  IHDRfsBIT|dtEXtSoftwaregnome-screenshot>.iTXtCreation TimeПт 30 окт 2020 16:38:14 IDATxw;3*ۋ{ llL3C35$@ )@y!_BH$q(I$:PBclc0}ZIs?fFiZˮw}d{fs9AAAAAAAAAAu/ QUq{6  {FǶo"AA \<+!'劸A@gOD^{S\( BB5pǽ%r)}Z:VD  ]ss{,TVe?u  ^.vWtȾkM($"[S  BG%kI f]{9PlN#_-b&ZK;AAwZ#3.ӱ {#NKOT f( BGaKҖ&I>\}Ne::AA: #_3lRZ!Z/#úcMKAXlN0Җ(&I˴O&"AAh'E1]$K/ ڕX3 7Das-Y( BG'W_eG?4[*cK18d$ c±  O4g]li_zQCS6f~Zer=g^- YAaDeg(/ݺ VY$襹- D}/ʁb   ݱ0Ɓ T8M5_<ڐقQY"BА_&:A,-)_AFZjGs>|'?鳑HdPOR4ƶL霭-Q9Wˢ_$z%rұ٭4<bvpAAa( IJ^g^1Tkcܷl歞)Y[t9ل*8Nk.l;"AA2Zcqb(y'˗/]jF H\͉E+ o<ҷoxsAAa&7l8ĩE"%@9kcVƽfalX[~ˏ;#X^t 3^YgZk |3h9c>9\Kis˹tx!'Ǣьi?Dk@)۴׽"(!h&M‰8+݂i)=/֌0DI7 mMttQ}zd*Dk7m'&n: O LAZG{;+Z_޽"˛ ?L+Ӆbal.Ni4˻cQ} ړŨk1 i9}Ahy/dzFISXXdeE/Ft_s{2tkw+צ'#b s0ڶil@a7;g(,*fĘq,[@0N0\ 1~JgT8/[%G@+hܭY^ wli0\ID h;/&Wl\+0D, vwV2Y ,OfO{{ʉ'0+4ї]SFۤ}:˺giI{bZݨh-~L@ee%xVa{.^ڗI{ LӗS_o~ƵJM\ﻗ=W%# cl.sO~_ΘUDTn}6~*Wx!ezo"םNȈ"}n=*3cG$@IL:,.9y>e֝T10r2g^p6 ;7Lu4n?wTC'']\5]+fK0gF1ÅwN߁2n`KX V5 k2W\Zhwa>\s8X6k3v1s N$֐ԋ4:%mNj䑇e5sġ˹hRw)eb|or|?A߶mn7,;Nj07_fn椢lJ09o~]7y-⽷> S(7OfV/ynڣKYz~Ճ(Pp6B[vV}osDq[CUQʡoO,a眿f9_j+T[ɦ/,&^8j> o,kjM*vC"96xx> ,8`B{s/G|:>O;n{4TgaTE4z^wq֗bXx'<',wzbV͑Ky#'OY = D/bqMelkli-ѓXR0 ~+ea>Io`ͺ;@ճ'wM%}á:-gѴDž측fY c}C:ռ?wٓO9 'B pl7?~3˄ yd!W}=GrUg2/<_fmak<7$n<2Cf^{%ApI[TgXƷ^GqzWE mR^ZH؊'y 8ȼԲuEzbEc`<>{+?zaC Tnn*cl1Dm988o.ճ`bDޮE_Gcw!pL; fE}ҩO9锔j S` {N.챓>{NZ+;z|y u-gL37j"_OSwڑg' ؁>]ҧTaoZMa_OI{Oشam{7!#q.F=zpo$d* =鯎Mܝi9>)h?wE+P!RWGA8ԺB!]5XF1b[XӨC8hS"PWCN^Tq_F MOz\r*?xO,Yؑ;>UhVx X>jA^xuvTG0 쬬&2%5*J::n:c!4KYLx- e[} >N@o{-v6`X9|Z?%Q2q}0缳N4>LE7[grޜ~޾ǎ*oE|39k#o =0g>+V=wNKyy{5I:$zT~! E6sƨcm e RJ@j2&궫C۴y yWwwLCQtmP׀^Ǣ" ֍,vf: ~ƻl#:o) Za >;y K#?~vC8*ښjE=r, hxx..%X/֔aܕ{F . 8t81wVuȫQfȑÙbqd:;w~Fg"fZnW(+)iv/R֚p(=W]{+V?ߋhV tc]Z ZUIckm [l0zɚ޾ eێ0-*ed ^XQVL=?E~̍fw8/ *YٙOP>ΪYo04.cGUCw\ qSGع>0zAygAc}-[{/ժ%ьѪRKdv$lVA\R^ڝtIkMyEcbNs%Ebhoʏ__4 djo{XSZBcQKǶm݌~b޻odڵ_-l={v]f^ٶeyi[ӽgؐ]~#vح-WG}Sڍݦ)=a˿^\H#uQR]93>`daԈb˖ml|.?*C& BX;/& o=o_uXs>nq &f W%ԟӯiB(]C j!:$*ϴNXӪ38 2uxSGe+9[omb6gwٴaM{7!+ώضy㾮zTpL{]O|٢{B5mk8uջ<=?/(D5r٤jb1Me(L (:>9_g=L9".:q,Ý_#5v~2 kx.K;mAV<'ʎ}{-^UŎr/o F48nfPF`8eNh%{T0unyZ&4R_ӐHd i.W-_LIy }`>Dcr ^՜;˹__LZkjs(-B *1O/,Ǭ ѷK(5;آ'qm3,C L"Κ9n㩴-”K_s{^d(W/bڑjj"-F"udUGiʴ.jXCMzv1>z~[3V: Ō9:Y3?bҕڰh$@AI .F9C:8qC3`*by%ȰSOiy=Buk~2 B cA/O&1/ rH Cw.  vwI+FjW۶$ B_yF M T#3u Ӥ¢jJFj1L3V(1 r/Q[rV /S۶ٹc;HKJA3JMB{NA/g)~Pгo J0ͶIǩbuup,rE wV2=$:Q)ampA!6#mDQA $aAݠ=坕L(Ah/M0zs]BaZkt%RJ%^a`QD Bh{yg%3Jڋv0 7)bQaDM{;+|:Ai{ygEQBۥ桔j.> ^Ygƌȯ(A #hAAqmU  i3oJAA؋!#Feu  Y]2QAAȊFAA!+"AA`AA"QAAȊFAA!+"AA`AA"QAAȊFAA!+"AA`AA"QAAȊFAA!+"AA`AA"QAAȊ Lճfl/6ff6ICjkk`|B =лd` Փ>%AA{B]CV⃅K`]m4 wFiRPbVGޕacQ\ߦ' "[Mu]3ޟfȂ+mWBr6 (8Y*J_ŶJ7/Z_r'*|xP%4? Jyh_ jDTE wsiA  ` УTpp-ڱ&$ZF d:a14 <Ѩ f %aPbƇshnRAAr@ Ƹmп_Ķm H(q"93 (j DLq+'Ou='썉7;ɍN$bhg??y÷?4AA88`ϧl9& Chl/XkVN2mH F2b5@5'4]uW J9FkWTnvb1IiFf\}t)->AĽ>NŮj U`kJGk٘ pIdps2i^ w&)ir$R~kOz$j h6J%Er|bRظe+w<{Ʌ {  N0\~H#1CA1lʂos#kњd :^Ez3zc 56I"mt;B d^X#4< ' v-0A$偧b{[AAPq<+viOS&n #yqZbgf-uȔI1ǿ* |1҂<2LQٔ]ѾF_ ɑӉ;viuzrr73{L aFӀiX(1k{0A ;8lD*z]5@vʆHFmbq/D\)aMb"&eE=_L_ڙ5Ʃ*&pa@Ia!+i*,2XAȲ=rFBQ@ pcc,ƶ 4~?0I3 /Hu]#`s@klogQLH&x34BޘLBS C iAвӫ;ÆC+Ŷ:WAAݤSmƙqŕ`d|zخ;[ šXẖi NǘOu.^r1$H4.S.z eI0MiRT LWУː9AAhJQ]m{RMVӄU׈ͼJB/16u^>ƦQ7' Rk1Y)( XeLL&+HE%DJn(m:c uB4iQ{RJQRPi9VH4 L ?n\jjGsκ:z# icm$B4D6)%!i]RQ]ک5lM]c#A p )cuCOГeoK v$R9;wuvBDc6(qUqSS2!B+IȼwXt*&;qH52)'`9QҖe ?n "/)h=QP+o( 8^06DDcNds@fhisכɄ3s,1 ]Ʈ1o9$`+OBTq]kvr+` ɦľZ%-Q&\뢁6l(eeYűҤ|)\l&dނ pcmYHO!%cZؤ = ,\((e46&"A*atJF+e&VFr\t҅យi XN~H е!'h:(QuF pӡ5 Ѩt⿖'3vM x@XQiI ݌%H?)7 0)#`LgF<ƍB7W|2wӞF_AC Ƅ?o\6f1A2*%ʆ1cFSU]MMM Ax8L$Z/Ԉi=/9JIXdL R,,SMFN?᝷[mG 5^B  -y EQC;Vi'mN(f̟?T mݨhtkULV%#L&g\JbTN AL$`9tMN JX`(Sx D0 KDb5aMa ң{wϪ5kq!a5&e%Nq5gu帺4u2 ,R0rH C%|2SculF4fhL҂ pac$s|^^גdTJaF11:5Çʪ*!X&Ak76%i!iJlI2u@7r.*LK=j4@doS:Huqc/%OfㅋXx1c'qW2"+|Mˣ/m  :`Eo_Ӵ8xX> DA煨8px2X8F>t"v7&Q9c8 t\,``t%%%DRpuo51D'1au1:XcFp[Nqm;~6AAh W0z*5`iO(-*=pQqÇgٲe(0q70jv>3ٶP*ݠhLXIYi)C IU\A4D;nju{φh{UAFvJ&U~cDIbpOVΊ nۆ"N~^žZ{ɷ=Grډz Z 8ξxb@)E8 0 ZPQFaMJt7:YeF\:gPrZF{#yh lT>GӫtSNƗ?{^m#NyywlQM,PHy =h<ḡ-( M萂1.MR ŏVҠ FIMM-uuN4sܦ1I){cqwNfHZŌN(E IX6I!Y0Ç' ,!,020 Ci LSa`zSX LC9`i:A^8H2 XݻuW^IW:s*Ol[ ]75Ϙmh"_\=H|ß4жMA:/DAϏ'Sm ={6M:et;M Zcnݻѻ7_|(E8liLV 1|{ɗ\}c4ª9󬠻fq}p՟NY7ۧ]ߗԥՕ"XҗShDصm=7V`%7ggAtH c4T8m)nJqzcF;@%<"E~8D `VB0 0LL4,,2-h鬳 Jg: A J Hӽ$7FTuND1n>0=9aL]Gy̙>D3l-XlBl\rN?a0.ߘXo9 UNa8*뀱{ՕF{ɱf;f17j0k@t9*j*vc'sg,[/~W:_-qv3^x2ԟn09'Xu᭫c%#WFCi5õd_r|& /tH cvMd^HJ|62Ю l>ϲOh(>l -"mmxVɤQkJs ; &*9͡R\i՛frbb"B/\_Ӻm]a?߹~J_Q%OƝU}bX2x'x3O0]7]SޭӠ۩;N<ۯ7}sOE'+oy=swsF? Pk2=yncϘJ??f̷X;ɾO|;)Ĺpژy{AtH vFr UErigcFXS K߯+@^(L ñNeaɡhYku4 ӴiLEEE ׿uɮ5S Ldt/S1f!יtr#~4[=M9̩n巶z͜q"rRw~]\][Ȃ ?]Âul Vo|?,xvl]c~|7D9o b1l;ӠlxۏS-MH1[l6&O9C$:GaCOLʠl|#_{W8U>9%tKMˀqe*?OZO(`s8sdiWlgG r{n7]YPW0 (lgqhapyu#9Uƞۙ38y-63v88oۑYvyP;A9hg=| I]if-6JQ^ޅ]TTm@k m8VA7 E'\ю%1P"M$ 0 !slOmWJ I?;M5L`»CL@ƥ?k+j8]||wٟr9uWlKZt3;YqS5z~ t9UQaz$k;J4`AA}c>raZ y.mLjD"Db^Qv+)^GU~:Zƿt;{NrI1 _zpSHSAgtH$@º6^2pōDNs/95_~44Q48BM<1]\u H4J:)tK0)m6U1Myc]wKeT!C_˸qӔcsAius#Z5TWRkM4M~6yw}ћl_ueeoip!_MzN<]lg,2@d/#S.>.m6woPu8^}y|ғvEA+[!@xLL[~^yeѯ_֬YVʱ4jk9t6Z)i)ҍҲDc-lE_4%-Ay"wxKBl P.CYT>Cze] _"Gׁ[Ʈڕ̔&Fa a%+\]1Ͽ=9=sWP-ҭ2%}} |KWp~']T/[ˋ&"]ϸы R0JijBzQ?4ɑRdBvSXXHnپu+QvӝfP]67Eѣ'ڋnBܾ"3 I͖ւK9< IDAT]U5 a6;VGhHDOte 9O%޻ixnnwyd4 OGoG;ǗsQchB.ⁿs˙7N h[;\w ҷ͍+SȤ9uTlutIWnx67w*A"" y'ү8bEe+~h8-״?wpՀۮ7'C-_7 _'6zf{Ac9+EAE|WVtك~L9{Jj1K9\/ tHh&Z6;^nEД;cs=_p[Z)M *klۼ-34/*KYZyJNIױ6<rbuPnhk7H=_">}XhWѣl#;'ϳoxy4_1x6ÊO~7.|ծS۵eK̨dɊxB'x$g֍yKsUxqʘcݭ߻!08u>?_9YuUyo/{ҏ~T7ν2p+}bV&+&ƴ B[!]ҞhivtotݗRgO~_DZFF5TS<3~r\F?.)1r{g^;L,3]Ͳ/UY• qڏ*9~~0聦GSrOyu֣|羽dXcyG^U*(>[|eh|AFl $g0Ii$~QQMN!ʶYХXc{ ],77NvkJʖz*}g'OB\\kF}ǘXn ;#<+2 Q֣/CFOKȾ#&ȫO/w3>bt5DhB O<x|t[w5bS֣?F̡GM弋2z͟?Z#=&sf@0Qcf¡1%rEs^`6/'07t/sg7^?a-mD[! ֫?CFcGsq|wS0{3.ѓi>mO% LsF*e^ed赀҅ 1z4ZkUF]Ioc3  aGF#SNsx4h۵ jḾ;#MC};oŎ\ ((,K8Be+t0 l7a9Ll*_.GO`& Bgi}6F[']vҭ1]%%)-t&):_Rk`L BXlCG>0hi1w936{پN{yiaTJ0MqgTyFDsrL`rLrtCw$Oˣ]UJ))+sse)gCך-ϾN)fә({s]k8yyěL(̛ 58ٖz"4QPyxOĂ(ӳػ`9z@ғy~ll k ٙ}g|i F ]B%K(HP3.[ ̖:L5IIxKK))) 0%% PBYyW֭£]K EYK.Eug|/HO_ѼLj ![ r azFZPa]a]k)lI4Mzc. MS$$chFbb".,%-eR7`v|'> e[ۚФ -4'Њ)9Mp qrCj8;\ sY.+!nh4(t+cU~Jaho`;l$&%sBa 5(͈z`w[$P n sɊy2UT*Qa ڊ8;6g;a/s!huMSFla vؿNTIT0 f`h'f`i< Ĺ=Nڱ)s40PZ`̦P*,cU v(OKor#]!`[E)`ʵ()mTpc:YcJ@cyE @C ,jİNj kYPѲehʺ)*KX?vB!Sj-.*+дEz?KlTʰl7o\ڪX.#er;5fbn @Qtf] m_~ .Gc Up S4- Py`ݚ9Pc?Hˑe2C3c,͇Bq8*Fb|Q!0F3ӵLaᤵQ)@SDn 2 54B-: ̠2U K =T0HG/atqfF$30Lݲh`mUDB!ѯAOzJUT)T 3–AC}P喻Q eX屶4&,>sI<0;hH,b#8i]B!Qt_R7h)-ʴ%0lb&)*Y۱vyAkg.q ƐJ_NMQXKR fus|f.`?%4=422T@6xi]B!GQ #@5 ƻH Y&Z|[(J0/*Bd[-*0g Wh4 ٲa1Hs=pAׄWPhws@$k-wMucB!jGUUs6& @790heL&X120`̜6bpa U sv9RYg>[`@Љ ͌fbӉ~4> ! ge3Gxh΁-`P?7 ;ԛlQj3#@5'h)=45-x kE181|bN.eҕlN?֕B,"ҀϿb`Űu]&0< #|]B /6@O L`."_6dki-a)B?6`:9U4s=VCCS-_`YKh. a c\z"ځlbہ,Cy/ףyY.: I0 RB!D-]NF?.[0p`!@sD̚Ej b"hV Ɯ*->3sBs%$bJ!BI)\v;) Kkohsb-p<K]haW Z# Ai 4=Tg -kcx ZJ~rUY"+RjB.QA!E-wq1@+^XK#{Uk2,DjL4s@fZ40@9hDU:B!ğ۟>`p\s0?*%mH-o3  2]ǘ-y>J~,c]m@/ gNу+O)I) B!jIF$%qɦԿ@)KhYP'T5њf V0cԔ4N-B!c9N_O\/@v%]фbPs(

>>#B!HO !>Brr)+-E)_pV 5\bk3Z[CC8K(ZBQ$`PTTH~A *Ri{Uϕ>O IݞD!f$`Q p4 ‚|RRRaaA븲`Ҫ&>!'A&!Ⱁt]'!1$2(..JKJźhwVDki;q{<Źq=$ !∐4M<60 RVVχ2 Cah@ttt ́pp8; !^麎% e !("MXB!"* B!DT0 !B$`B!QI(B!Q!BD%B!JF!BB!"* B!DT0 !B$`B!QI(B!Q!BD%B!JF!BB!"*lۦu3;!BQkءSÙB!Qp6IB!JF!BB!"* B!DT0 !B$`B!QI(B!Q!BD%B!JF!BB!"* B!DT0֐* VG$#yn(>Ext1L>x+ G*MPj/6:N]סԠ;2O 0H E D>%NUoQsSw%a:tRNߑ. D>޿[{_zw.{Ю//Nwu}R|fHҪ2ǹU\uk6>5 Nl;$7]3|6tt%W%;y^|^n՝t@e84MpurTĪ&qӸ9l8F|y)=f\0k*ūcs uYCX窔yxB (>$\7gn8'rɇ~jx1op)(z3X&-JѶ0?[g@ =ڶ)JJ J|(cz|}`?LQ⦌z,v޼ɐo1oҎR?xY<{{p߼׸-nZn̿yϳ,ny9nO":zjF'xqa&c.zEKfpϼy政;>22m}'<~i͸]\fkv7t x}*lhu_IwW5^ V/MpTط?/!#.]>mBs0o'q]cCTúo ihR>r4ל*/eq=rM%|8LڀdهaHveMt Z%?Dz6hz[0]i\>$/}Sm|lkF?`uC?R?~kJz?mtiNA>\%k=]>ku_շw^\h??Ebܕsw^wZ%Ԓcs{)(O7,(!h6M\|:v5/2dž97qi$8wj{3O\m,e{bH:4M"$>#ȭ p;еG6Qަ}?mY>=+?6x6ȴA4хӈcfwPԬ,F>hEcްs ٷx[> ۼdIǐqǁ~{ [5@$du ~+{yLvzg&wmlh$ ӎ:(;Lм@n}J^Wʂ`s_ʻ1T^ߟ]>7R~b~_҈ǠNJ9,@I|l2oƨ2u"F>Nl9<2rIڲ0bͷ:ӛσCg9hD[]&r=-_ŘcY?a_;բ,,t:\6K3cq0v2wwڞ{}}YHI5fؒ$c7f=ʋEvj> =+&ws\ÙdNJZ6yc}?yɷp|A6-^m@^/>v! 4Ჩ3 Ni:>~ u^^ɚ?x\}ijW[7Y2VVUQ}5?7i$ 3#VϸiK[s="6=MӬ]#.;Ŏ/es'uMB)L<i8m[fa"o?AV^ә';Krs=j"TF[gwo/P_)/ 咗ʨU%Jdp̝sܐQz0I箴+;ǎb6dqTZeXKnbcqg `;YbO-91 r@Jv'`3ˆeK3y<֌̳_sw#GoFnY8ke,1l#>x&cr,h;\T hn@` 0vƵ*vejٔn?Aʲ۽jʡ%+/VʷSpvғRm[xjos3(RJ}Jו眗ܩ3umSJd:1U>kғR;ÓtzrSiy?'8 jARJ5Vz%nƾO۔혛7*c$jY*,P7Օkjay>|c/S:ץlT,E871e ]u9T)oU9E9c[*Us{35le(JLV;YM 橋6u섟Ub%c:?ISwáNF|AcvgN(=m%&)ZFzcU{kW8=JO>K=9R EUg2Fʋ<$>#W6l?neoz˩ǭʯܥu}}j}VpߺTEY2濗6m$}#/GM͔Ԣ{vso[AqNZLYk8T~3WU8疫wlPe;樒H1ZF~jR?pqg6QZjy{J#wyWu҂M-*XSG=Z7wOzfa$fMK#9rPRnk vJk1rZBs [D;m.[ +[]n7[}K+sx"n+gqvb]ԡf-ͅ==X+§YI> tNH-%ywwt.nws),nNm8Rv愞7. |X_nb5 0v x&x쒆n܎֊cZ0rsLQɵ\[aoWk qH:o}Ko}¾dSDFn&%:->FMkQyӢuKtcjS,UWeX|Ϳ2fx]PZRR˲I~7~6O,Ͼ[ʲr9%)({ß7 GR#<%^c~z0Oi2e*OOάI-wOAMw~~sL'ic JSG q:>2K4R7j}MUQƚ:RU8nlP16]x'm 4 TuʼjFT'#+p$0?›:٫G6\Uey6jEedy5RR$ -0e$FI4UC2{5F^5';UYi؝:EX6 |k6bkt8 ϵ5=$7IE 2`T>fgZ^'KIs$ s*rid$ic˱x~\93@7bO<=1N{R$ػ;Ntm 23214t2/cĚo3gc*#8.osbp0 y-.wJ0hFny =׎< E~R)Z 8X[@=-/UQ:luП3)%l|; P4YxX!F+VhYlߖŏBhNoCͯ1cMEY<~Z𗇦0I?c(nns1̞P7wVMK^7?]OLDSjĜo}@{FO&s1=1{GG87e _ՔQowɭ u*Zi1E ϫ'/_yq?lt+|WR uAjn=j_؏E/̸Ieҳe<6oofy~'&F=?{c=oCk3pZdW; h^륆c  b6_j Xh,ˇ~{g~_ڞɘjLK%ą/s![O0n~Н8'}|{|E?q%~؆\o^{D u͹DGmUo=u'zhbY&aFn6R@Z;7-އc7i̜q~LhY' e kQ+6=mkgqS<0N/hkG;XC}9?OMK78Q__Q״Hu%7gvsY/l%MIg)q\09<Ӟtr|I&s bD?z0Kګ6>ujP4KLWm RzkyVF^1GMjvo^~ZS~TmMo8FVSGtUM[Q|mޚꮑ=TdrzTݜTpxueUFnp%'PwYrꖥ3Qƺ%sدlhaw6=/g^VvnBeJ\(YTo%uVHWgXk]PUMT &OtK-nRߔ(Oa.YSlNTӥ:s'*PʻuͩUu4j\4Y251J~~*z@u\ٔ+jӵygi:PI*{l5~To6?V'JTk(R^xF*cYqsu,i6K:==XmW6{JlVu?\U^A*Y_T`IX-rڪTnV3)H3|UYwqցP=JԂ7'.Smo]LYn^dtmkՕ6w-Sm.W=ܢRwosuҝKU[cZ,\'W^zj4ez;Kԙ.UU&m okvZRv*5Mj%LR1RP6Q?Zu}js236)K~ڮxx:y?vW!P6f#ܝYjU߻r޽V] ?8>~֩㗪wPgX[lYE"UruJl5vyv*9K:R8w2Y8[u';tZY'Rʂ[16ۍ;6p<}XDb^&NQO)2]Wyeֈp6wsWqՒDсuҏX:F.3yJgnl2rPu!q}֍}]ڶivv;(ſYQ`@X?0R561ʧG]O=2P 9Լ|[& K6Sަ ݤhf'ťQS7?gҝ^,X u4QO{õl0!Dd{Onm!vȳ,axs57^RZb*FnIʸY>0RpjSK,\K^b* ?=1A4_Wk/W?˜\6e,[#ftg3*+rWr q Or !whOav0J6{O[Ex*$W5ҀFB1L^ZR°3](;웺VQЯQX*)9[x7wҞkZ!*㣏vSÝ>_gm܌:)í5c]S83)WqZck@I>?iݓ8ryG N3ERm*ÏHb8Lx=p1u(yER6wꀭd+~BJBwi֮a {zhW%YG\4NR['rKaG!Vd* "%{y3~uqߏc,Oi> ܘ45ٙȅ';)5rwdI'$$o~,urnD\$n%M,S<sY}CU褤d!Pk`M3h0Pf=QaKeO1b2K8;nc'ZŠ|n\bB,FJq:NI{yoY1WqzA\I =ڼXey6jb+QeW#9xFd*"+_żߡ/B!8$X.Eiv'DCI!kkf6@wH@`⳿u|*7_ܒ^6E}k'OԞĴq,zi[;2?@]65E^jV::dp~P _-%Vf7g6E3R9\WnS~vg'ͦX}"t+2s04;Wm `iFr!kPmUAfRуS\ VpW!.ѽ;WBpGuL_$:G;Iږ x{OEN ,2ESHڛ <ƙ,wqQXqF#zzXM'ţK]_ޕ(ژ{ Bdhž_yeV|6]˒YBQw Oǁ"w9Z;2,N$'הw3w2ǧhe^vf~Q$nnW_`/RtlF) gxo%xrɠmlsY66Lˆ[Oh< - ;[6|ZkuwJ$~I.Pkݜ;OtpL{r3U%|93~]?fu~,ۅ)`Z}i ! Iڼ} _rС]#;:̦Q.f;y}|ۯ=4۷d޸8b_.[ IDAT c6R ZBXF⧙^(NZSںʍ qi1L:/3 ?6f"r A6WMaMݝ'R96Bq>mx27yWSܜe3^壯wFVɌ{ nZ*'UPmb LVޔutS !u*R,[68̟N֟'oݸ|{]Zc&/?>Zȅv&O̍4Aeݸr>\7UD!8m۴c;wXe~z{aX# lkmalH6e&E4;).œB9f``tv_}d'.L>ZQ]I"{Ε`Q!8,exktB0há)䱙kxNrQ攒ͦ㎳v+}k٣\h/M͈+a!u֌-!㕧}3xlٰmB!C"zLE!^=!BB!"* B!DT0 !B$`B!QI(B!Q!BD%B!JF!BB!"* B!DT0 !B$`B!QI(B!Q!BD%B!JF!BB!"* B!DT0 !B$`B!QI(B!Q}>޿[{#]?}ڒvp7PG\B!z0PZ$8n'.䢱O0#]UMqsOi%P [?x竒}/7NV7kH!H 2Ean22_~~[_9o2勯.h Xf`'iZ3x{:z=JTxY<{{p߼׸Kv !SOFɣFsIb]NePiL>a7{ZuB?ڿ{}Hv=lzw<Nl?}ĂM JS}/<W|.o^|'˘Ԋ^o-I2vh֣Qd1Y MivJ3/1qoؗ--:KM X_1΄G&sR[bi"rZ(u1UT__kIg|.&Ɵoc3:Gn+Y3O`/W4^twJrkW?ƈ31>~~?sByW1_8O'ڵeZȉz[]ģv&;,ۧ_ jG]BXip. I@*4ZN@7p 0uZ2lJWewQCٳKش\GյҔ'3ڬꅳtzn7꼅6?c)*QkK;󊴭DN\Jt$nW'޻JURr#c:?IS(y~;V9T)RJX*gdY纔ݝjQiPt8UH;DM+JxLU_e*/Sm_x.k" u]sr3w}[]lSM\Dأ^3#,czyxғPOnlIMNg[;b/> F6-b=7+)QN<o'w]N`]2}eeގ7QVtq:.۷l Pc^5bp{U3O}Pk[9֔_%cA C'R?wyWu_|g\}e{BvUO= |yYM |ɢy4'X-S=!3W>|v{&YۿeOǍm>R.\p 9ǃ"- 8HpBiiYp|^h'LUEƎ⠴?R.jq`W2}ӵe[N Ϩ'1SU׶|ut|]q}Ǖ-⵷ᣌe_|EF™?8~#w%)͛⎸=6h"#cܕm5U1 ɜ'WWB 1Z"SOI'͡4_|rϩ8oOnOZ =(ihT8f>mt!gOi8-^,[Ҫc¶Qu h}s_͇ä3lI^Z59۪^Ƥમ GO2aΫ|>wyɑԓHu͠@Ƥ; K!Jt JK+SWzh>~I^uvGhWƪ$>q|jqQݼev\1?1aX4inTo -N{5#eXjrL}{mӯz;m\>dɶ?|6)~B棯^b r!K_s˱۶`)՜u.X҇gƌ .(?᤮i޵iɝBTOӏ1//|էzn:]"ZYQR~hs>AX<"MķWvÃ𗇦0I?c(nns1̞ЄCq򵨃c}V\)e?чy0;Ey{俌s”_V0GBhx yٻ(ōٖM$BłQ`ETTzml׊ko׎E B#eC A̳9g9S|⽼QÙ؜N/ oJ=>!y+xܱ4=UϪX4`o-;x[ݬ$}aJY6?zwb&ݎ++D` svW` m8ۇȸ jmbI??'/%A;3 Co˟2'x/q߄d佯?PVn,/WZe889̾}aiJՉIo}b2kM[n\5?~<|ŒϴuHc'D[0)`Ⱦr"uv0p|;1cl8l6eU!"""<^"JK$)1H7=\m Ek֑кeXm9X4hJt`1 rp8-TVVxztaz|>?S?V2J"##;` '6~nޔVĵ$Y:Dn7<6/^Ʃ3 6&"""5x|v1 |> d""\^e׮ĉ`;IMMf(/"*MF GS)[4oUT`s8JM&S{:N67;689l6]r6y8TVyv {DlNtL;~GFͣdr>_6:4F60*ӲD Jn^"ښϦbzV%ǙTfeٜ nÕDl˲J)(1G9hMz42ciCJ*Os?yb(((%*:NEE.b^*֙$>fⰹ\@OAŋt/[F aF7W1ilajO֣18l1NZ4$-Md 7,Y]Di]d|\?˫p8/Hi)_¹ Y?+*6d+.& {l qۓvQt>!IDDDA4XPeEv9أ!` !,50A Wl}`LpcsK!5k6Knn!I1NItJdXtwv~(#PȨ]5(nĐLff*'<bc"1ʪ(LŔ^KΏ)[OQÁtWylNqGDDDDD T,R1J \xV@ GWg5ii~8Wן([0{L4&)33H>'-;Ͱv|e\ qJɞ:IA'7l_g20Z@/Jӷfu z+5V:+V='ՔޟM_2:V;/`WѬ}[{JN|TQn3gQr5"ѸG{Jl'&)Dy Q"""" QF>q׺l ly<%PQIR|HDDD45a 5A[BX+,Cpu"\6M'\Vr2\D7!aĶiITzb7lat$m)f [DDDD\ J}~*S:Z1OI 囲Z5  pee Ac(LfKڏz~Q9Iѝ6-q5Kǘ ťe;&Rj 26%>3$^J6咵h1~^W^ڀ$"""0e`t6WߥI~؜]gSX@麵em$I)]ߦV>@f#;w* (\(ݼ_E%N&_NkzDDDDf20F7%2n, wR2dRQzb4-zJJ$C]LCb""""(""""!)0HH """"(""""!)0HH """"(""""!)0HH """"(""""!)0HH """"(""""!)0HH """"(""""!)0HHh6y(6%"F> c72+)?_.8i ?4 VtcDDd_i2oWC) R i{^gwPV 9Fdž uv1WDdsc] tV[%dC㣈de2Ԁj?h[KWm SD4lErHoyn=v1,ޯ?h[MiH?tDDB]l?מl&{8k]5?~<|Œϴ5F6f3xL ws\+{k^LIo :5'9 SߝϨbyql[; ~^3X%2Hf'#3QCsE sۦ&||o&jmLf.s-wd*gsuZYceɼuk Gz-u(cI mxFlƨvΚ!búyY ~]3>OnMcy|յi""{eE`.|;JYpa'^xsb\`-)o I[R겹]ҭ Ǧ:5>f{WPՕVד뜜~ZGF[T\FIyb"3rx͕DtV6et_v[[ٌz:Eq \~zm|4)pކjmي,F>5qq; V-+bbY-L_M]5a=Ȭex"f!s>}yz75GD׳.A \^?oU@v ލY]+=S:Ē'G~nN915k~A{߫dPd=_uJ+Y@N'tv(eOɐ&p+lڂ]6p|}ͬ`ОKkBi:v)/}ʹC[rDŽ u䚚C{̛\ȏ;cuDn3;ɽo5(oas3h@S\SlђjFok8il.Ffٝc7glQm]zk/~߉eT$sJ3x7x\xƶTcIbmB:m8&z3_-,!R-[%;ӷ9n'>-"\†%$"U*Vle IDATIsU`r!=M>:M2nú\otEsM^gi:cOhޮ?Fb+* S+DvJaDԈhFVR̔ueLY)  &:)%lE8^m{֑E[!ˮroN^Kz}\UƔgx|AaX*O3iI!nyq Ļj]Yv}?'m3S6Q ;PA9h bS%k$JAT~_͆kohىvϿq[}X޹Ejds!Xc"!ޜ_6ǾUUy Hsl81Tj=ie_{Nv_깭S` T,XCTOwE\w:-/ʲqt |89E$pF]{;6G2njmE_{r௾a lCVD~gY {Cjy Aw``OmlYD8,'@nFEBA[Zօuy5Ѿ[/C~c9H=ClnIv%>*}j!GrcakJxسÔp k53be[١ϭ0C,[WY[i{[Yc[vSb AHE>*`jۥpFf^Ü_'W "v*؃>n}Y4^H"9kfnNآ"c{}Sf\1c}[}ln:܉o[帖mVǍdKWɧs*D'/"xID,Ƿ|ũ5 >UA0.8a1yI>_%2|n$-gA[pcߚNfGVi"_꽭ìgqD G]V)iVV$Q}dr3/drU$W.|ofӶ)N_,ŗK:(:N-"20t) GǶAoA$Nmv[dJxͤL=v;C,::9jڔ 'Fkwmߟ$vڃ_Ŀǭa!Q|̝ vqXN8)=YƲ~toy|`ЅM9&9$Kٕ,O{ KXٛD-5<H{ {ˢr8h/b~ǖs0^tIaϳ3&ffj'Og$L zW=3mrܤ5Duj١)vmhCA>[c#&EDv8#((g^CZEU72XuGjPeL_Ǿ{4W& /`$UǶrbaX=}d4# oxjIРmǮ Y_VC鐴(regg&(""""!)0HH """"(""""!)0HH """"(""""!)0HH "_i)Ud??ʿRKDD6 "!<9<n\dt;hv:qg?7ӋIYKے>FHc(q^G얅q<ϭ_ɋX-a͐ڻ+)UN9hb[WOYTOY;8CZ$Er^q,.߳DDdgƫr>^zR.ݸ}NS8'hv ,≳pv:V.˄^?H6dHEv%Dzg\;@ݰ}t2$9(_-/?0#?q-gn>ӣvQGO&x,g[H67vCp2U:lv=b|""R7dTK'D@@&tz}+,4" c<:Ό[0&;8ͭJ~>FlŒ&k^jXl^k[tMvg!nGo͊J]vt>2 ;ظ;O !!(9U촾l,c9nqw3(ʂ`_3:kw"{MwW(yHNOQUUEUUqd?fͣr҆ cJE <ݎ+]Jܝ gQؖ+ZWVINp @]|""ɉ5RUQ{6ӢmvX-ilROsF^Ou /YT$5Sp++,`kn,mv+\(\TRYN{q\'""9"5,}絥j%X|5~2ph5򃀍&D7qmKH!i#ǘx;![| 鵻6먫^me9h=yfx~BP.{u|""F=`Đ#L5̭}L}A&Upi}~*(vYMv}f:s93WIsŮC` ޑOO_JfȾ<5A!cxl-Ѽ1a.äqhXͬ^',~t|[:se&}ql$v;žODDr0SP1}aҌ>l$)ν7L9~&OkC<ϧ/E>"N0o_!=0? |y1A_/^v6/ncu| vH]P[;mvLZӖ8Wϵ_d3m;v?k!rΦiӦ XQO&1f4nnkDDF+.]n7s/_Ԛ&ôvgB;?Z9F""{|Oָ83iO a8Y=DDDD$$F IQDDDDBR`EDDD$$F IQDDDDBR`E?"""(""""!5\tQCV'""""@ƶ6du""""Y 9C""""} ""(""""!)0HH """"(""""!)0HH """"(""""!)0Dxv3nj ix f.`Sp/""AOH\21zxYKZ/Sna'=wGeQ!U}Yߓ/w6{*83͓cqcHî摏[("(0J#ev֓<}Nv 5q)0ֻ t$#-V.`.x17ݑYc^[[Э$k5J<cx)ذ']&Pyq`;WҧC.~~poɧ_<ՓNo5exVD䠥(YO>9v0>p=VAWwq'9d<}n;r ;M[BZ0 OZ-Ul3o Pɝ/?~cʇ0xY<]+Ho [ {+;e%yݟY6N-|sNsI""!FiԬxsȰɫ/d]lCxغsr5b"~}9ZrȫбCܽ'ǏW9 +{+.>DDƓyPnyg6yo2za4syw?N?%)1.hR'~"7uS#j$ٶK?ޑG>53VtwWOvF؃iq.Ss5»ki7:,z.ܿw/0C_.sT^'5%6‰;.vGؼxe[&=|zT7Z5#$".Æ߼}Kq]ѤuQ}Z#:/mSqG%дS-[ᨵ8oƶ33*xQ NWEzq ږCS9,* [ =,2kds^~P:|%?Z{}ʽ. 5{={Sⷙ+ \[pY@ q[ol2xYP2/7tpw3/m79f לwҷ5k>F8uI0;Y;c積9Uu &ph_T@qn ,s1zf0zn{|_M-!+G׈=[p} ;&fU73k 38qH?Yݶ6K5l0SI \t;;zV6ܝ gQגui4ZJ1s]Sgqrl4%&3V3ejڝ?#0yz`a2iۚ걞{CQ=cnm ÁÂϸY y0->xw/޸+s/ `KU 26b vseN;!_e{'lb _w S3OfQDFL y8HCo/qdĻqEJ9GmW$>EEVHjI G7?XIszܖ:"pE: %. 8pQIeUq׷}3qZba-G7Y[Ǽs&7M.pq '2;rša0+&XNQW3(N apClك?zsZDڂVv3>dㆍm)ؠq-[B INq'>ĻtM[|-0yrE& g^>ٱP<0qw:_-&8{x>Q_r:ny-_3_#nN2s i)YYHiہ6/~K9pöV ;fikS[\ Erd oX4wq[VV{!_qUk;k1("-5f2?F+|QDY@KIq%էrbѪGoze1_y1Ͼ1`r`Y6{lɎ1G1%hjR7o,:粒ҌTf&v@dxepﰋC.li}/{OŒ=0 5ƃk:lA\.7enЄ…4.JkH IDATe?/_NwjӘ8w${7u\/ aI\z1ہ3KtJο߳i!sx24Zk6;^@ t O\Yh2!>IzҲ %j5cP]z2$gϲI|LZyh{U2-Ѽ1a.äqhXͬ^'z#ıWplȈ_˼`)up8|uE\zׅWy`:GǗoe C^Y$|̃+*^<98}t~n,==oÚW0>dǑϲgY;ɽo'>䢇o͓d10뒳8U,Ull~ vR8¡$Mx7fpmUyw~O0sh$^ԙ~=bE뵽DBWIK#Pa~qZ,9٦O5WMۚN)5󝹪isa|tbiz=ѝ|޵ZxWI͢.3'4M4ND77 ݲo2"aw7x.S5n쭯7S6+`V=߸mr]_d>1ĶnX}!gkw [&{iKtP}G;Xȩ"O4m@7c Kwb\*pX z8fu{ø4p1^v&zu&3%Wié"rpXt:u x>g?5kMfi\!i S}mNRy|J#Xμ ,Ext~'Ϋ+,Dt`ԛy|[?"іe_nAߐcA7-g\ ˃DcoΈlQ ~t4VAT O]e7WeGn-4^a:r IkٚI ""uQ`}NÏjr4НM""QŅ""""r(0HH """"(""""!)0HH """"(rEDDD$׀+.jDDDDdhضc׆NDDD/!tHZDDDDBR`9tDDDBR`EDDD$$F IQDDDDBR`EDDD$$F IQDDDDBR`EDDD$$F*@7bVē Y ؄.1 _͕g{˒UP#CQ.,>6k'4:ޱݖ/Oxye8+kc72+P; rj>/0:~!n[wsM^ul}0?9U~>Olj%qwޜK^YsxU),^8!˲\WlS |0굆Qo m@k OJOOM?TU,ώTk{EdS`K85o7\qA ޛ_Aю_̡^kA~]D;ӻ:~derL;F$4HeMe_pߝo`ʿS4/D xo:AjGXi 3cleT~&q\T=^ہMߐzlS rY$Ev5 fJjO#dA*<37( gJ[?gudw%ٵ_/n/M{ھ >%ɢ\ߜnnj151G2w1krJhaOO}reUUm$&9iH[Xn,؆IT+3V+k;Qض Ҡ`￵Gc$'fpSHbju{|M$=#3ڶn^T¼˃#] щg{9 dpś9$`3{@laAvCeㅜM[b~ޙսOo*/71ai%^Hֆ{2ϖTѼE< .[y-(gy AR$+g1ai q11pWa6 s{epw}[w]+ +aŝxp'6O \5)] yՁ5cEJVH2DuaCz-*&q扉4{%Ux7j}6bQ\F`Mq>ᴸV/jƕ6~2.քcSfn+(k}XX}FYu#?VJ M8:}ʻ1K^o!q?{_Uy?ps7{/V{"*UDpmQmUk[[ZWk(" {*@vn8;rBH @17|LUn\^VYjx3:XfQgm (Yȟ(⬢9Sjۆ. aggzt Ʀټ72<8DZT3:oK1 's\E$]͊ynN !Zd47w`”EDظp'-*b[gl1z5KV.:'ꈦ˺;᱑NL%,٧U>m0ZQ1GӦش*ID o:|JńVV]a|;$quq7 (YxI 8kZvScyA~n^!}@J9GiRqZ=YHKK$Ֆm?BsRyhl2A͗Jp'$3&fWN 4墠 /I{vqK1._ ,/vqRaqxɹ0ji0 3'En$E4CTqQ4JKgpN w?O3oZLO?qH,_w٩d v31C1 B7)q\qȃVTJ@f2^^[=˰Adq,NmwV 6QK%!Y$`gz،9_?h1 }[_lϔmnfW^@޵++3QI);X&}HӉuJz S- T0cU9eT .[Zn.a;,;+Tas3ڰsGogp:} wTeż}Fl"Úi`d`+SZ+c]F[pOtj zLKqX=WzYoqVm j3os>q}fi[ژ9.)p]·19Lk}GBYdOowNo"蓡1ss xgzußM>wmnv~5q,}9Ӿ|ց@jh<>naPdt>Et+(iƽ,u S-vTUd2Fa]F| FRmaJr xKx[yo~ۉ3\^U\Zsc@FS3I0Ge_Pqץ3 `KS~}by9h˒qSr]Ͼx 7 VLTs|ͭ\1&^cqJ0aUr 6?6oe8G̥]t0۹~5[e9vkְ]e]*I&8 RPY;Nx6zьg{cǛn{#Sibnc94 К[s*y2{VPjqގ3kL[i!o xr`XKvǺl!Vj$Dq Ows-dZv.`sZi.I`&3LfSû0AKhScܽ{oǢ ic༇ <6))asSFv9'9cZҦUpIZdIVo?3!i\;27($#c "3y|t?+h;΋luf`=3,s{Zi˴U[k*SGTS|2I||pB:jЬA:XUSϼVum͌<q_{n߼O]_&>䐖vsqIO0560v-I=v:9p-\<k1~s6iu>ԥd~5v>8~?m@]~܀WomFئjlAH 1ku%dF'6/Y9Ŀ1=tYW%[rEx36r,;ȏX=zY\řKjřP8Nz>*JUj$[hvvȇ9Jz^]d EntvqkVJ/^Ca(t E'i&G\>ֵ2#@R(DC譙;'Ѥ%Q3#SOwBx+!BQ' B!D$`B!uQ!BIF!BQ' B!D$`B!uQ#-BMF!BQSO[6 !BFpNեB!D#&i!BQ' B!D$`B!uQ!BIF!BQ' B!D$`B!uQ!BIF!BQ' B!D$`B!uQ!BIF!BQ' B!D$`B!u2 ߳T]J!B4S0d|*/'BqiˆSv-iB!uQ!BIF!BQ' B!D$`B!uQ!BIF!BQ' B!DNݧJ~a17lfO;ٱ?RVBCiI$Zeҭmkt@blκB!DsE|Xw@h +sS*g~?lXϴy Պ碁<=7"BĜcޡüj!/a#r(,3Q !4ٺu+K,!''J9r$vs7l3 0`iѝQ_5s%T;w̙3i=7/0VC)eh`Ul&P-8G@TRGc\~WWҽCSv!1Ȟ]cG~޽|~]dɸBҥKYr%eee0|p233C_{5ڴi1 3fpAL´iصk{5*f[odBm׮999ݻ0uMUAA~)cǎe޼y 40ްw?QQ  eR(t|wYVhj_H]n6㴘yx<ӵ މόgonEx5 duϨk}H xrv]7'xrcyeYt=2Yʺy3}_ןߒ#+BS믿f\p$%%f{=:222/$'')Sqx<޽/I&픗oOSOς OMaT@~Y)*/ #-.۱n4M#gPT^BPP\5b:j iyv"v+Sж]ҟfAYGy|7h2^{9n@>s;]YI.{+ q.ǫ,fO t"+vtv*NVS~؇};\T9̺c<2q ش#(cVR?TF ^+/uWsHt>'\@GSX/q`axK籌ikfBz X,vIf ݻw롚4.~m}LRt8uٵkse„ kW}lNhѢjpa|tؑs=q5_A\pѵ I8Vb"8& Y4&IdҪ& Ibt̺[,$DGarҷwh&-:t`bۈ_-brZo+I)=9:莝JIG_od\w/'ƁY7ȴU!K~?݆[Kd؟g55?Z:K rV>9+^sa+~9oN/>qc4P,b@ϗ+=(t;3%_!ip8ӧ~-˗/gΝ̞=Z>ꫯ>̿G=)Xx1-Z &&6ǃn'11f2WS0 W%( MT`6߷/_}5 Er,0&, @ Y&P}bt:&M6v+{|FhhWpZ㌽5-^a)8ݽ5de k:MPEeGV@ zt Ʀxm/Cw!! b],pQ3̸7G](Q:+ \ cx, kQо-Lm;=i_1x+s3x}9K] ҝt?B!NaÆaXXtihZ'1B:(11cvZw^|>rrr`۶msM7(s*4߫%.?,г[WVϋE`|VcpKU"ZW: ]LlTVh^u^p9@2#{Դmh}mڴG9uf3<@uwSI6IJQ^ 6IiEtv+1Ql3fqM8&3Wٌ-pnwXL-+QQ8Vbڥ3pS)U`9AÔVVO sd\}#S5?o'8%t>'&ȼk(QlT,'CgWS}\RG KkT:&J~ .Z1"ߎw9&'[(dҼ"kEċB!DjcVKXRZػGObt:t:Y-X-f1aXY,XfkŊlj`MNLA=OB {T(hts\Ts8-?#bưhiU5vzZY3q:mD:X,3f%,FQ1[4͘-@2a#$%96YY jHx{MNLpbKj{T2݇qz4xҫE,Ntnf"vz<:<:`7E%<.[ޚ]؍fVJ+uqc5Y:F=0Ezn~LFҳU"Vd%"dmWu{=^=(*-qL_ST Ats\FF`@uZ qN!IQc={,{fSҧLgc5B!/O[6ЦC7x|a[Pɍv{&ST5GS-XZHݻuc(ePQE)2@BhPӰ,D:t,\NP WeTg_P㕀+g#C(wSӥ, !'I Qժ=5=TVsQDGGӮM[n߆R @iF@]GLhFtf EEM#|j.o^aQK!YJC~xpM&׻B!8k4gT*l`kAҔ:Ңe PQQQ24`ZUA,vڴmS32,| , J5dN6s·B |ZF%}*mh߾= *qJ)4C4h/EvX.\ CCD?Fp*1,FL !B\>":0f5-TC5vdeeV\ W&K#v5kFtLtPNdp+@3V} LC֗B!8S41|` UU:F@ZZ*c&l)0L,=#R ]T>z`` N%^B!٬aZP $0tjd Ph4oޜJW9奥/F:XvZV9G-8b: zX6T!,䆖5He zZhY04oÉbn`Yl83aN3ڙC |Cy%`B!٧0LziY( xdpBIJj ܭЉ%>&?Ke;8E ODy- M&B!6M.`&*F=+x@PWce]) x].*+*0[,$'( ]jZcUބn֛\B! kr쯥j?9xBh%R?BS$&&cڰZ$&%cMc*|Zcհaql& !B&0,#wǙ7ڡJ@4&-fظ"plɼ)@SuU0`kQ)ŪUشiS̟?իW75Ν%=!By\kZ1܌UZ( z(Uv~t:Ba @SkrZ̘NrR+Vo߾:ٲe nkرFIO!g&نZq*U@[qhjz`l 6j[ւYՃ1ДNpxҔQ3сdj XzY[h=rJ6oLAAaK۶m۷/ǕB!Dcij>#Pi10Ƕa*e.wHT| y_j4JfU㯭 T(n@5Vks|Gү_?RSS1Lzj^yƎKǎB!Dcii8V*+}u5CѵPS4-^LQCZ4 #QjE*4H[ ]вJ)"#<">Ctˆ#Xl .HKVV| qqq޻}v6mDaa! 6Π߲vZJJJHKKcԨQrJ-ZDyy9N^z1tPZ].o\uUϊ+(**j̨QHMMeѢElذBL&G{ui̙8p_ס<,^lnL2}BqJ5>AQ6[SA2}(200ДSe( RMa Ey|>0eȂ֏1Pi6[oٲeDEE1rH~,YСC[%//>}ɒ%K-U8p W_}5|ܹZ` >k|@ee%͛7g„ tMߟKy#z̘1MӘ0a&EpBzɓ ٻw/EEEL4+-[3OYYYSZZ(zŞ={hѢB!idFeWMZE%PFU@Xj_Ug@j`g*aFJ"uBSPկ?N h L bP5%Zc4y1W iv])Z(<`ͧi躎n?5&""L;vlbPdd$yyyL>^zqE0s#iѢ?gP9ԕɓitڕYfQVV?LRR B!Gm2:qNgiPF j 6j4CQc Ϩ@o1BQ+qN̦{|fҶm[VXAnn.nCii)dggӾ}e^]vZ`0dСC$&&Vv;(:t(餥%''3eʘ1c>8t]?X'vp8Xv-۶mcǎ LB8t cb!頰ܿC5_Z P^ԂZࠕS( hzЂv M0"8]0Llْkҽ{wF+@LL %%%>|gdd0tPkڵkE]baѢETTTQM]y ݻ7=$&&#B!qVum X__{n߼O8nL|aro}ׁ[4ݿ遞)O#>:qL}4?#9:tO>c6qݸ3yW8P^_~;Z )Bit`5<5z?nFئjlAִ;cj6+)V0>i NXVXNXXVf̍<`=HKKcҥ\.t]0  #z'ƍQJbҥGL4P@)˱lt|h!q#d"%!ҲR y&gB_T?+xn PT0ML&#":fJIIa„ ((--bkx(ػw/ׯ JV3f f}=ҲeKJ[!8Ȁ1(2"Aqq1šŚ@2| aʋ&**+Ux&4#G2rFKSunFKO!'?8..hJKK(/+uAU˾`fIDd.ZB!pAn"::X|>.W.O%^hVhdl6cذiB!Y03Lˆ3oB!DS#Kg!B:I(B!$B!B!N0 !B:I(B!$B!B!N0 !B:I(B!$B!`ݬnӝSRtg G;.dV4S$R^TR$e*8M$`rsqX9)*7dy QSz#U+%{޳lvB%olIf?$/}[`qē5}r% w,̅3 pZUQzwtw,-g=OQTS^VEUo~L*)T⩣QnmP`ѻOln{>3Vz Wp;)ەiC誒ן[_XyK/ u=`:2Rg#l\8a|mOy!D#)ҭq3ޫT*bɋ`Zyx2Cp:v"߳ݩ+4-q TokC+G/?lo/mx » [+ @aN"4CZ΁p1<~"q-QkWށd&Kh̔QHx;)T}jUJ_ed\=%yٴf#s'zuu6 CT9yrCձik S9aZݭZ,7.Qz@]3H]_:";p_G/)SjoTV4x= =B*% TMV5mW[RFjLcQJ)۩^Tz%]awݢϢ,TkIuMc&OC;rx7>z[,܏P3l.{H:u="9RexPGyH*<~VOݢ^ ;*QO>RxxZTِyinhody*ջ/}+,[vwTc绎YB=o^V@%eb@"-ۙ^#FO ~ig*ewkE>C- :ެ7CqhlU;U𛹶*Ⱦ87z\>\95F1<<SQ ǎm;teb͝mO|4G3͒oyrr0ʹ^.ZxP=ڌEP Wqhqjy?VCZcͳq? Q!ęDi(Saϲ-wULgÔu9obdlx13Z1&s4g;H)<^FfWN'Ђ˯nwX@D`eʁP>ŧ'hh}c$3W#/ŘZF-,0#6P>㾴:Haes`L K=6xN2сXkiM4n};%LgĀX*az(dl+ m@~ODrXe拏1zSi߀ FlߙsK@@G fغfO7){~b<HgYϦ4CTqQ?cFB4"a΁P9)[qVvLx.ga3~GoLjC:|ć8F)/!4Mo%':XΜЍ]GŪoYUkπ))禶yG>bww;2}|LhcE1L?Yrro~u!^<1uDz:W?o{Ɇ[% ߿2mLb02a1Wmcsҵ1G׹}lb:Fboy:$Wu6\0)q𒖨 z??ouOL bJ\MEfQh)q}-`nwb~<蹒 hi\y{oyx՜%jiG˄+O=c|ÿ[Abn5Qg)o|Ym7:6tГX{+2#0c03mDWV,G緲uPmWdfQSby:=G.6Tq%Ӹgc$ϋ;"ʺscgKr@h lC2a؂!BELɔ -J6mhS &,&A\K.wwv>{3GdfUvoNO#;"{`$m~ /;'?1o*? BǪ"IY4R^|GЂ"{\KU_( Sĕs?Ώo?/__M,<;LħgL_~ssKϝϝfξȎ7!uʿ_sK)>A#P__>?{~`9T:_OjL<ˋ>A0<8?~8~kom~~w=O7~W>`Q.&o[}W[,~wqd;=^kߣ|o>44Fy\6=œ;)7umm[¨y(p4Ao5~^Njh4wZ0j˼;/mۓ<ε|^#ӓz ɉס}GFG FFh4@ah4F|Z0j4FhFh4{Fh4hh4F'Z0j4FhFh4{0>B(b0)J~Fh4O$B,"yyZ0>"z~H0*PJ!D)Ee[iJ$DQDNxa>nRJ$! M=|{si4FqFʌp0+\z]yض8mXi{4B`B1$aoo ( pދvI?8M,j4FьqqZ0>Xh4Fs/>nZA G@z VtFh4V1࢔B*R>Q $nh40z'`1oRf?Ѥ&H_(Fs>Fh4g Ҕ8 QJޖu c $I"L\F|QJ1Yv8>`$!@0UᄧiZ(T>SFh>(%p|j@˲!h`^-7Xfs^Ow0 E%e6ߣR,ҨkN0?d~IR!\L-5F!PJefibYty5 ?&$MSL4a}5ӂ񐣔Bq :[۴]4%2Tya+$!ى9}dsL4KXih`$͍K͗_cgLp){< ge8<1lS>@'[XI5) cg g?%x3Oaqeosw}+Wo&Qn'xIJts;}}|vUh>Y8C\<ɽblnn$ i.etFJ iqcm۷Y$$ 377v}_ F$NS:>;=z>m;BdJS{I!ϱq p0`ba^-oTK_#*Q((݊?/6;W벾LRܣ7BP)I$ylab[#Bf0LL2s}6tz$,KI2c2aLzoů[qelSe)nɣD(II`&ea7i0L,D|Y0- 4ڙT4 L-5'Nõkרjeakkmjqv!"q$Iq8}&''R,0<< $InÊ$H2RDV頔}{}C1%ߣZ*P)XM$0?2BnN7as9>`.q O!lX'22Tz&7J,R#rtNɸ[\_Zee|G8z$fqR2v[l߼˗s=6T)7?3Sg>sO[ض8ѩ2ioKf*Y`QΝ?j•RåTɳo¹'8rd¥,oYxY4ih4 F1E^`@R! CBP,R1>q#$Iȿ[5 =-A%C)T8HD&F cq !}׃r6 2|&U榧h}0M1M8`1N=B׿5V>{$E)1v,&lqoobcjyӓy]^%&sg<#%6oq/?{Ьq:S|[|ի}Gy~'zG3u^k%/~÷Y$yǓ!p Rp<Ÿ}kvYJH,nVEI˲m{,KQʣ$%sa0 \ץE~ y^@ CT4ˈҔDfR.135I0@UJ9#U0E+%''8@R,,#R C$ (Iz%V̥˫4OptaRb-DW_K'|+8DZ6Kt]:S1xmn^z;ɹSXB .sqgX~psO3Of^"H+{;loﰗyv(;Dl̈́Z@`Z!jgx'9P!^y?p}<_am{-l^gb@&ڭ56:b{XF'c6V~OeDQm۔J%RJzmuR VVVD4 6k!mJBբjqxNU@ CD8H5yo\bav0HQc9b$x10*f m]0MLaX ݭ]HC/{& Je$첵ʍXZa~cWBkl\&~DDt{iwCJBm l9<9z#U!RXHiZX |?yljNpTNV@} <~˗X^^ay+bcXFQ)*̛ kS L7ʔ|F1c$Fź4 Z" %qdYGpdyV2ƘP(8cTU Ba\0r 4%Z$>SJ8DIʙcMUDd.r D 矠'yNp8P _qOs~d69ϑc'85mvUw@>G"7VD>Fq%9/:1MXBmL6jyi&ZӼyѾuONg.h40Lg(,3meūo_4ϞY-as8Qeqqn̕i'M,C&?4?&կ|^~/& ˟8y|F1|Y(~W^X`M&}j٩&T㜜MnFZRTn{L`Ђ0*#f)5fFw\05$2$I+{a0@ 3SL4MU$[ڰ^O0wSy<"Ӱp"jfR'_ dKsvXxQ*K6tL3_(iB/R(יi"2z3XdrďG2$9zC8~OBR ²5U%O16vyZô g{H20݀Bu/Ko͗_os,O=QhhpЂ񐠔Z}'eQ&ʘ!I*O1~CiP,hԫLL4(X5=7[[ ŢTɄ嗘Z=r G`  Me[~d6!ʨif ̣u BaxmVL|ʕ ]ѓȤťe]ŴrPef!SsP8SB5C9C>۟ym[=7G<ʋysh4hЂ=yC1c8j*aa 0q( ˶*LMMRVu3O20x('?~̟ͣ8ͳ8PRh4qڎCXbzjYFLˢX,2ѨӨ< %r9TwJC~@41)1P[Xڸh4Z0"Fcnh+{!p=zF'e }d!PC5j* Zp+;E]Df7(%꓏z%F9hxwXEP"%()UdI2xm L4Kxd]Fh4ߵhx;Cwy ;! dq8 R/(m=hԁF|т{ŸQ1&+ T0L80Mbu\ OFܞr+:yph4- 0 ! ;=eځG0p\h`b6A]^q(`Hh4FC C~PۊtαmTX&ec.9yi1!B0YgONB&O(z  -C~t:$IeYfF|т 4a78(.ςa Q ̲0ޠ`|@(O4D^D,ˈ4Mɲ|LIJ,0 Z-,ö'IBekk A|CIa0x^Fh>hxH q]c%ݨH7h G40G.h 9y;5_)!v@ +_e}677vaE&Aj)z6A)] BҲv qRFh>hx0 knܶ`aPr؎%}s-\8 =CCئyFY0 ,0M^G$j5*qnY\\}"j,nkX@}0 /J .~?O))*hDQ9lQ)v4M1MRaiJŲ, P(1N4Mm H0pqJ% ah4@ C!rmHȔZmahu@(QVVJa{Q {s044!$ CC`ecbHDQ^/oiHΗ+X !h4`0nzyc!i8;("8FA$TJIe{{,p Rc#"qi@Fh> Z02,,L"־S'Ba.B@%˲H !(TU<ϣX,Ŝq,2J>Ӥi:NP%G. >x,>Pǖ;id1ʖvjJ^\.^F<,`<Ӧ Ĵ DD)H Hu e?x(Lccq,k)`G!uݱ~zģh4-51*cY&瑦)Y)Kչ`iZXeZ5aX>nK|8ry|[#uܢFh>Nh 1LPo&ekĢ/=rAk1K}h-~8F<,`܅QWFh/>Kh4FF FFh4=тQh4FsO`h4F-5Fh4D FFh4=тQh4FsOtCAo Z#8"IbDz.k}@;p?Dɔ~?$ X6 Lu$2j)huuT *ZTKW(G p]>WJʈˆ0mc]]f)I4 JB2,w3߉]V2C1A (0Mq_m{S %8Iq"mbWq ~~׬N)4a!]|}X|5o/ }8p\±t02M )]?l?Ľ=vnq;m2. -ƽ﵉ozDֹ;mЋqO)Yeu&7nܤ5Css> 23]B&Q* I?~3E&e(de+FnwiW/]b}g^}qDgK7or:8)ӈҍX\e{p%i-_fG/;BJI&y9#kWy+[Oϫ.A&lpeVZtɃY=h !@e)Q;(P?lj"eyK{5n]˫ӂ&"wZFGαc$#B]!T6ՀkE;-Vn`ˤi̕UjsGOMSqmx߹҈ťdx~zu9ag7ֻ,gjݎh.Rnn't2MyQnLG\NeDȲ|hg(NV6CR`&}Eg\_JfųL91DF=V_[znP$A{턁YaaauCʌ+;!'O^ysg)icksHL ;d|~*slvJU$ YqnQc^ ܸx8WJvȤׯݤyfkrО Z_㵷8rgL"$bosU3KMwߦv[(sLaR dJbA3B ÀJIm*-NÝgSskOB 1((D6iIf)e#ӄ4MHRi؎B!0 I q}R$Qp q\b{mWRʍO$K0"$Rxc[XDaDbDaaY/ɭ#-Gi*mH7َM d^} 2$& C2%0L-cfQ2#KS8ɏmc$)I*M3 (Lqf00e[ʔB!]7:?`A |UE1qi8*wԳ4%M"(! iJvX[Zdq7ffs W$c8"I%²q1AfILiZ8IDd"$lmxov~ 96mקn'Jŭa z݄+Ʉ/(^ʭ͈՝4 |EPth$4DL!p,c F^v)aHB!pmm$+"0j Yh8 VN GSETnq&I$ s QiW/]? jbx>mXHӄ8 Sqn2#1i&Aئ+<#Hps]lRfdiLIT`ZiL2Dz~~# 0]IQXi/eFGqBf(.mbRI($JTa` `oū7x8Xx5|?QYJĄQ^0IQDf²]|F(9=#P2#"aH&´F׆ȷK(I aZ(v]nnXW*aa8)v2˛$ѱiVcmekoRx99`Qr\ׅMկp,#RU XYcw& ٓ|[<<$&kĴ, $JJTb9.9J8HBcnI͒~1RaZXăWyj@mB$ID 7`]8!kv<\_OhYBC2qI!$ݝM:aBhnUҩ%&6-ڝ.NJmak4Npb2;?BsNdC&l^HPޜdav%@e awx-+3==t2PIDeiiV/&5=){NHiʾ@VojD6KWc`%mN<r'SbYLl&CI$걶t KH"ueTFcc[hL3U/S]JfGŴ6\ߠݏ ,R-8&dI&t)* gU8#KbMֶmeBL!Q~(ɹ#4JS *J (h*k;vdXԚLNN1Y+`,hmN7XbjIuvs/`~ kkl Au\_vv=L c{uwߺqGD}Ekԙ_Q-St n~/o#MJ,~\Wp솴f8~dfcX IDATB;ZG)#.I.oOT5/5rsd**[tC_-09`>Y; [Rb~Aho7/el`v(S2@|ki29٤^t5N;QVv[,o$(á>=Tdⷁ5ials9?F?}4{ϕΛ,.mrgQe6vZ Wi CknuIV*Jec/imv&{{MŴYqM[T2i<+WLn6ƅz<&,å7zk2PWye7XL-Y+~"+-Vg]4acgkMN^'ډg$R$2 HLY8APv RϤZRqaO+V ]*L]E\pReG.veTvѤ ʎ$ Ô^}"V4ULMx9^1`՛7 }:ୋWY8~O4VnՋKSa<ܳ.]Fn`.sݫs^$(SG85soq76{fF v6LlAg}olR) !q")*%Q9sbӳpj3{̴|o~~)2cok׿\MK 2Ji{SԜxgovv?B (yg8cQB:-67om'lǀv6nr}Hɣg9z$gz^{4Q:ʜr(.;kx $BIX<4G皜\|"lFwXqŝX˥h`5W=gFÔib]׈>g&FB7Yh(e6R$&c&Os외AFFeY$L><@e9y|4SXjL]G:ex"$F OOxj4#$!*w몌,I]@HD),tHEW(E]BQ2&a("ah.B:=w=t[6$R/tܔg>\\UPH9< ː Se U/SCN#O]>u,S!œ-a\ag i Y}hR[\{Oxci"tZ(#Dq݀`Pa{kwސQ, 2w?Μ0N+J:}b ӽ-ԯM3xja퇈pU?h)bX Aǟ]Q'-)h*g[易D'ӠV)pGߍW!tM7fifi'|v)+WV OM![5lq}xG{G82zݓC4kHAѠҬM}&={TllФV4^A@Ma΄ӓsJnh?uGOG<, ve;Z?wo2t#&gTd(T暔7\jȲ,W 2o~o.]g? 0o?1[}*^*XZ D>apzrF vF87I4 [,lΕ__!vO.H2bVXq7=6%Frwۧ>ז\cjNxt<݇dYA'n:ˬK4E`] GtNN2QX/ 'ş_ !w(-m}o9!Gm$% ,C,U^_wߥr*X*zrC)ʄr2N6X.)m¿0d1URyd7O<<)yi "U#'&Ӑ] 7|w5 ADRtPpsNc$sON](y~eHUo묚)ǣ}>zpGw 'XRB< F"D^_GP[տ9?sETĿ?aA;ݻl= g)I?K3B?X:?OPmnXqJ["?ėʴ*]!cGT)GJFdD& ow7j<}=;F0JˬR"1ssY:.oIYWєg6D1B(ks;osHŮ.TpzXo?|yӧ{>KoI'~A]19?(f|r{ QY?xoml=bZs&rPB*s\-}kQ +?j=CL]ӘvF{I"M*V̽{{FKșjչۼ\o1u_m&ˈEw/{GHm]v\ټƟBABFի)ZE'e,Ҕ01Ks/uF{wŠ-S.n/)j: D+)ҫ(t?:`9e0dfIdxܺͦ?c=rn@^^9_kQGҤ\9$n(5T!}Q`Ľ:]:D80|˂ ~s&c+Wָ6Dބ~YP'x~^k) SR`WKDMLLHe:ciL4M$Ad9]"dEE2-m>f֔ ݲ 6.A! zN zS?"2aX+-{7sMeSx*Q"S Pt \,2,$t*(&,L.јxB"ٔ 20H1'SFxe2܀0 IBubJ"M08tM!eŠRkPHJCb!A&$Iry sT, eŜv;!DBz~y,׋(2ay>9N&؆LVH2C8J (#ESZPТ KI1 (* tMdL5#%G~ 3&~Mj8|ry,kNrF (2b2LǸ 5e4Re F"B1SBHIXxexSqÌf3lRB "7䅀UV5L@RT-M%r. (+$}?iHe%|kJM 2JJ@At2BXEs&Z] 0Eòm sYb Vz0&D~ cca%Zeʥ uGꗐ=(oF^ܶ(VbT*Q4FQLFB&N"fzvOGcxdz򠭄f2BHӯ )oƯ .6|P`T*څ]RB[# j rgz%ST©̱^ ~DZ\[C7wpO>'ח]H<7Bߝ08E5%] Po:f84 ak&E1^A͂K$! iL # UFӴY@ EHhhTBY"Jcƣ!V2q=b+ "]BF7mVxt|s&/m1t3Tʷe$yJ g\dB EJ <`Ѐ0ɐdo:bH6:*" #~",!I4 ٞD#ɘxBɨki;2x$E0UCh#hHo0d2͉$ }ɘp: {x^Lu22V I "Md3_N/ϑx5ʒ@@&#SF^B)(f]aK0s"Hdu ?/ ʫ.YKBUs4Z<<;4!\͍S׉ l3zy6P/ZZ-!!,HHHIkud=) VXع0x4b80q U;zeU!\hi4p/g|&IS5E],! B1ш`3,b. UQ4m>G&dTU/ $$YCU$D1uQeZ8Fdi;1ȩE qOnjF#M.iIͲ a:8yW~ NH$vw2iEd-S!##4tTEAzGCYŸP597 gR;ij4t!ó}~ģ4?s/cV Rd)"ː҈ I>ojxL!>z_RnH&Weu+k|ЦϏ+9/*o[(~k& ^Aju2o7vQQ23o2#_qIMLD27SEH M"F<":?W^ڵv8|pO>9{ QnBe~-+loONKzivȣ'=O͐+/,ӮZK;s3,:mw̙>ޠΤ;:+2LCMKW?Mxù.sK񇌃"-ʕg$IHY}T"(gXQ(a(:9&c %#p_f樕 #(2"Bg;L;Uw8 Kkԋ'JN_j=XrpB{9GAS0qj,/͓z!BVMjBfբ\[臸KZm,@jde9e:d~qz ND|n+iUL~4ΞXsDy cXnԨii6A1E6Wi5ꘚxf L|*ٳu44N=զX.X}̆.0³}e(N$Ah{_Kse>YldDҌFR lLk]? A|sZo~5g;uunz6QK䩿qQVj(x^zi9ꞟcTh,_ajce3K"1 %4 Ef*yoq2%-#L(өp&5[`H7aGȆM{:뫬y*&ɻ.'~"NA`yK5.1{DA4p׹6c(rޜ!Q,(VkWWY\E$1H@ݑ 0d.R,W)z.ٖA)+TPZĔS ]<(B xMl-/"OLFcL:]_bIO曼FBɄuZ9+ǝzkݤ٬HܕAZ^c6BBd FjBWc0tJ(*X%\o3TRHI1i,_opeEix>YTs+q TK" Js,nlRhIHQЬղCɱkH,5 4*:mՊs S (4J*KPҬ:H2LP)묷L64U`*8$\mh 3tUeJf,jvyurJQqT1xNA7sť(î/renlP,˄ lC; fkc7& N2Ѭ"764G& K l\Y1g:>o6kT|쇾tE.Skse7& uLY\Yhx3[ W6{oP6g4vÏA/3)jS_֛oڪR-@iH,딪5ZMCΛ:|IAC2GO8Ncka"\k\i„LֹAx IDATM"]8!LYKM˽DkGI)BeUPlTT|&$ 4& QQ1e4 Ep* J+ I8%2&iA\& by& GGb:. dC(C>[o\^DH,Ԝ/V1VfJYy>qk,.-Q6d)…!n"YenncțiXousE ԉR QY/r upY[Xkbr)}BBxdqa9A֐2 Vܼq)PU9 ,4 sTJJD$ZeqvytZQeY/K+lD}^Wlcw;O'䅱^,K_ "_IA3o/v[!RJ$\iבMʢ*KJJBq$ĴJX  ;!I\2+7Yl]*4v[|#2x+uViX xo2G)46XY]e}mG9Rw8zIJڵM &7TI@)W_c2 &dc{MUQF E3Y&^B5+6ac95^{m[& F5*T ڳ:IIA+\VE,Оtd}p0kJ6-}]D}r9dͦ^h-/S,Y,ߧqobX:s2%dwosLCUƀnR!57}xFRf!f2' C2YC\`:%AFR M&K"C::VYBFx^fyWeAhX*QaD:2 ]^䐒8$= "JrVAEuSW<{"(*ŹY~dH3sFB.Aq UC7-tUFdy Fynb'݀I" PdAgyVf5:M28#39 ,W`34Ք|L_J/UYJy-mQ(*RNuq&c4EPd֛2#sϕ|/Lg5ifrE߽5fqF@Wq`Zfa,ȩG<9P_}7hy"##S€(LE˶ xBwxu^_iq+}T$$$)HdBŜ~A׈ *{S $4BS49()ĨZ>&Q@HiL$d* +:*ϺHgϲ'OxeX6SQU2|QB8h4ecs}L>}],_y WƯf<_S|* i E9SaV*X/2%O!$wmCG7d+/]'wUnC*h/ݿYձT)wUMǴ_:9nZ/|d˟ۤf䝂PU/:'EA3$m1UGQuU(~=!sf%y*GyGeaJd_7y/߅343LyFwUݴyٷ|/ P{(/Euqݴ1mxQ{ni1D8"B&^-q6Y + iB~DI ֬61u[$,%Kb<'#tASԱ˲,箜zWϙԛj(~!ua!vgediBL'.e"^j.ȝmIeiBxALd^^|:`Vpr YB{tOzxO?͓·.IՆҙ.iL]vrr>`E_16Da}N;=tV<8h*Kp|p n<%ILų{iLspx7kcŖ^4](Ad)i뜲Go'>,}N&Q.a7gI2#, {lmpE)i$I3~琦 Oc~W<}+w#| diL9|EiZ #FD0ۻO>Ǔ>N}(SnD/H=};?gh6j,6K%zvgYuP5_%'cN&Xf}mAI6wɰk5L x0~ Ҍ%}&QNfyn_Hr4:H(p (Q0x~K>i:i+Q$ˆ8%?'={>e5>[ i(Bο)H$/ 4I<Ti*%Qs3zE 㒲^G=0&I3ٱ2r4{SuC. ($];L(wf1Opp|Ace#RfJ{EPIȴۧ? P"&բ?q~zT #-Kt g:<ӧszDE8 w=w1 դ9?Oٱ1pG=802fFFW25&lQ9d e&ZS(r~zL%6Jc'g]8C-s%[G^ncTMeIz1r)f5q3 {6-FOw@+`*s"g= JfHɰI5K&ZzEA"'Eed I@IvK cHRݬbh:yolj4 .[MwtO8 Sr,4!PѬ" m &|^N7JUsšQ'}@h_JP r:Jy #AL^'u|$ƩiU&=jBQZY,j]zqSkRh 3ÐyS'Skg+.5@.2o? GGl Rl%CQ bwm6Q1ezc;/`T$|B?@-dPH2kqcTĹ-b19#JT WFNPMtG[O(7proSfk0BN<s>MHb}76F4`/l0E JqMʖ~i997h_cj6>7G:˧S~LA' b#&j Mm>ӣ.,T6Ϸ EcCBwt#ܬҕ|a?O) 67olҦc} Q&s:C y&d4$x)@n:ވ{?I`[E7WY(+챽s9ј V`MHop)Y@&ղml蔝'O~0Qp=ЦH$~CԢtU;{%oA X#@>rވR]"R̈¥GfUݛٹf̟{^'=eOs5,TxsV;,N3v6ޣefX%;{4GzvH^"l>S(*2-~g{]Җj旹,Tv00j1DJ9Hʸ-jؚ`쁞. %mr6)՗X>7K2ۆF<@F GFƱF$bƇuu‹|FUʒO7> ln)( D>>Kq0Lv|ZGnt"~ oCgxqDdb-m@-,ܨ!xl"JiN;`tNqVTӰ+h7if>sr\yZ*#@ ݰp |=8)Dem#GCZGg<9P!Ler(*%c{} b"gv0N&K.%e(;g쭯a1. b:02Q!/G3.b Ov01tgR["J]*qty?m2eoaM]yfy=e#o|2v&^0_!xNgd3vD&Y# L.8ۣ~bJS$k uzQҲ] '#͐N& ׀ncv@u~L􁊈<)[/xt(;m(ݵ1 P~fVQl1S$W@ nvh|)Y Ķ`ww(puܭMk̤P9|4oǕk6gy}îQ7U7*2R9Zϟs™6[RduƊI^qg pN ;c:mq^[es%n AC0w̸ٌC#ʠd*R:h\5x~/vԗ;~'_1`p/>Zc?ʕEVsC>tg6"R/i|Q#Fݙ,_Y揯9#;g[kiVoRēm6w̗Lj`8%VݤBncSNGi3V,6 yw8w~O9=O;sY֪\(Jtwi'tG4=FL:7ōLJo]Ls3Uz';S޺̜W*.e~+dJkQ.B"jS&R G|{os?֭Gd}V+ +{ҵwr6V>zӍg|2Swy&?Q?[op\_,3]ͣJq%!dtc8Z|r%(^Owo=NN]& +<gKE`,x+\7Wycveы/_y_ P w[#A`fXM6~Ceg7T(d2 6t^K4OS-1z?+vw~1;L-7o}m Cfh<=5H$ޒ("/'2qM܃%^q)+ 1Y!87+DB:;8A(c)+`R\Y7ėeU7x"s }#ן# Fau5hGCLt![9j9[P/_Wc˩"~&t ²t@EͰRl\`H:%4BaQS)8-T#׸lN,6Z%0PMA "mH2F:ncǹsJjqRYM:kVʎ7`xs6ݣ5Ǵv9Lx*Ņ#D2-RؘlL FENNmtEh9reEUL ӴHed}o5i:ʈF BBl9Y"䣾>:mN;ch1ݡKy<l-HF%L}ßqvt@}*Y"^<2 OaH(B{>feL>c-!g'Go;OY,Pp,*hnX26m("&&0o:B몄5-LCgxϠ`:>Nix?1C؊ihhf ˲Ey"뤱+ea~xq HyҎǚDb8d Vs '<|zBR-wx͓0th'c_O}񐇟 Z BtJ;!.ɱ⨫HAĴlT#h66? _w(L7qʙ4ERS^4$p{J&p}BHYͳ~وHaeM)zji#c8:>tjU 1nI:\rqjYk H*Q%LJ-_w60`>?4hux!%xH +2O"(H*iJ!xH7@Ӳeӳd/+:$˨<O:UUE4OKf} qFJ7Ty湃Ajd 8+3|~6rSYkO#w\ 2z}6&iǏ$c8|Z/uDg@}iS3v}"C:MZc;c!I9=t'i ?;xB?ALBDB"IK(d+v]Ѝ> &3"/-&g2*c!}⏾{rl2.QeS^`fj>6BjƤX,ԩT跹\c-JgKy*exyu40 /dDZ_'^}F4(LYPdr8 3%r  u +S4Lm?""D2$&5#Ͱ]d}/v)rq/WeIE R&7xg9r( ^E!;`9%DDEhV&Ox2v&?( @PPT2:ݑO$B2eu=9؄lIoIݣ]O)(nEUu;ﰿg9zu LGLg1 |l O=#5?|ʳax37,0eo+/ux=p;,,\u9|UZ p(QO o.a _WGa) ETUC_>r<Ƹ/]bB<LզRȲD{x.#)/sue"fY)3hcf˔瘭dQ^焭sM/}z̨ry!n )[P󘚌z 2TbLdIBUUMT ^EL1­8m; nܺL*T(/w̠74wJL*" r}nRe,CeJf]7Yybj&B'Ua \[Fs; `iՙi zN6h`E89^,@DX~=2/ KKh2q=4BBS,M 8.u,;Kw ]5+mrؓH01BʵW)m+yBK.AaXbv"ɸ1룙6rmL :k7VK A硧r\FZq! ,I 0=T՛}:RROBqPe~͠G3m+,L8橢Hxb8ԗ0TpC#=%ͱ0oE;G :U%2IYȂ^`袥:iu)T GqFR7`dyi#Ya# Z眝iz<)č]GD]M IZb6Mڱ3ecTl;EP`z~jT,"TEE13,^eRΑ-U.e4IV(=?3f*׮P+8X!a3K+*%9,wLhd)V*3L|>"BUl'OP\=pks9S(,z+q8 f$I1 ssu,K%YdI))k*;QoX(R.Ȥ tUaoO-PeH*d͗զ5 M3Ь,3T+e L`< Lnf^j]בujB6%㤩S*ɤ(JTav: au=?ig(fYZ^b^T,)R(טVX\ESd4E"$tl@ZIqiUU"0yfXY^dTje4UCFTbJNeZZ0~)_%oR ^*qv'_7r^h4 sb^ |u]<ϻ|=XYYauuӴs { !*"U54YBD璢ƾz4 qVA܈( BTEA,7b?ѧb.r-+" C#BYlWD}YAV](& ސj_-Al5t]EB\"" C<ϋJ#!Qh[C4yDdU3QU EU9Mאecs&$]Џ2#I{H)<~Ay_Q4!~>\LBI#]ԉN:p7}UCd !ɓUyZ>~^}MB0HׁMY"8财q y8Lgy Ԓ$O̍:q`o%FFD"Bx!—V*u t! qd)"B DHocA EUIF0&r-M6ZiLt'/guMOШ˵7; c,QaDh"C!!u5Np!2,‰iqZ& ה>%,Ex~RhaGqYO"ׂ#q>iϛJߡD߭2$yag4#q6I(2x瓎≤*h{~H0ؾڏ㿒:gUSA2} 8[2(\(d<R6icc]**$8W+reX{ʵ[p X8ޤH^20~ 2NywDoeE6^_5uoD݈_-TW2SxyEAVYRT +dt/}Ɗk|UtWwrDF7T_X9WKʗO k>×k:KdG+Pԯ/-JWjd}]}\|Mޟ\U,JosRmU74H_ٯ<\wAcKXM,_WM*c|㱽8=ύ~0@mz|mq.㕢Ⱥ=ʪM7 N>e]E}]~+׵ieiIAӕ7aZ_Ya}}?dCZVU ^UY$Q~s*05D&@)泤L+sWXNP0~!!!!H0&ƐdM(Vc@ =t+fWs'$$$IƄ$]~Lr~|uՄ ˜F1!!!!!!!!$ cBBBBBBBBIƄ7( o$QH0&$$$$$$$$DaLHHHHHHHHx#˜F1!!!!!!!!$ cBBBBBBBBIƄ7( oD] Da 膎$KAD!aD!躆,IW "|C !)* _WzQ(\UDQ0{q=:$!KBD!~:"A/E]a躎*u*K "A{tMAeMK d$Y047KQxc"Y5dYc [' qyV/ ]FxVVGFUAzC U):hǸAR5" CG4QLn&ñǷViDˠ`Va0۴{# ~KuJ#on(4MH7d@?aqEUdt3YXXR.1կG!р#$ȦtWVwG5@UHi2C?k ''((wNi680T.}pN3 oU/d<1 PBO+DQHУ*9l?iK 3ZgMtPHGtNy!q,b9rEJ wB?qړǴ]JhJ:WX0[65t-z|>wL Ac}>??>+KsɀUq~qYYY~-F6~Dcgk\##@HDO8OUMϾb3ؼc$K](%n~XE j*E2 S c#U8?x8=:&LM6)K0wxBN;8NMw4z! v&m[G]OywB.ͷBD`Ч?`L&G{]F@3S8,*#=T M!p{!Bp9R1yOo)Ri#1qLi*0yDig#^)>i3E6렫3NʶdT:~PtrJt<" qSYDxmF>FvD,`vab*;i< 46 KvrؖJDǰףEf*Ic{<3Ƴ.S&"A0~ƨ6+5簿.YkQdrY cEhm p]`w9o6xbW]^ex٧~eGX,i;E:ev1HJ:!a"tSWQ$h'5Uea^؏PeB̠c8QPtl6C2PXfߥi3"Pt2cqeS38x {:+"MV€aOqd  gB +xVyҲ6N8l"S35+OyzgG=^;[EVx[dMcb"̪×R(7q_uLg[,^.UlroFw01:Fa;X/vx|0Bhiҹ*os7w'vHAȲn%B%2;Tl$ zcy:u,+;,ϖ(Y[OspQkH r:k\+x~#[c"[r*]zi*sK+\+1:p{G 1р_3& nAV" Ƭ^cvl=hlẈ%n޺B ;cwc0sdʳ|e19HofVAb"\%V1^}![Ϸh:3|%T*j;B쳷wX0 AHr+\Ʌww9=>@!嫬@^}c$ 4v]{AYZ^dedMCt;Ss@69l)Ϭ4?l1ˣ{?la*gfuc'9;oU:[$xnj fJMonY3(N/P_Xf.qgg,(@ivEnL9`wxAbؤܼt!=nyTP-,ȝe`E=?aFmspңO34Z"!N-P_Y '{A3 xt 22 b9w?D i+Kɗk-Zh!##="֏Y+:3Nm2F"ϏltJG7x$1Y0(/-7ZqЍ)j3_d>i[t!Q(q:R',ܻ{fАsڂ\&?a%WcpwGm>95F!0jss>j^UWХ`Lk֣0\QD|niwHR\F>S4 "uT D續F#1ĴIKFfB!})Bq2h!A# h4H *e^wyp9GQDY`<;"DZ{pZ.~HƯ 11q1hwicS`2bJJ8WPn- }\b$bu5xIKE(V֏ ar%[lR5?h_>c+o)o7nx)rkD9Ry57yrܥnOwpdXΏ4 ?y#1kӃ~{ G*ͥ5s|=%ڟG N.mz "gG.mk5M.S/"ڠ?cŘk6Wa˅ *+V Ϳ@qx#b/e J+|B?Q{o֐s#[oyM}Aof{_yt.zӠ"Н~1"V_~oZ'˴,l?{%LMܪu['_m2_>Cڝ>Q`wؽ}?iZ nSqH؜?yJ/[lecH>_gp}>KUZ8w9ꑹ:g4!dX; f]K/ϸ'\^u"~ +yR}87g\V ERZſd1>8ޥucN0!uinmfj1* =|{H7t6^߼J%#D>&vQDEx`b<M=nؤ^! ^D ۫e ~wxR;wGT՘p?;n1JfsOo{ gȳsጓ^Dqu~]&9?qٯ* ɯO9|t77|us ɥK>?s|HIm7o6oo9pt9&2{gte.FX@Ǫ Jk*F{=uuowx;|e0]'5n|oP)/h +dv~`B&㹃&!q(!)|rNƁ!a%v?ME]upaXYr"BA$EE2E %t+M2L9zxՐ٨Šۦ?"JJ#cK\Agic\d@PT3WPY%[,[!xptap}Bg4p0?4(jRZU!q W :xdiʝNػ6;\B@RL\[B=mayLƍ$.jFVLƺY,_W N\>"]F,bbZ*X^P(Zp9ris0*\";EtdY(" N2[Zm(fx3IPc}4rqFDތ|uqyKx/]S!3͙8 uˣT2s}}c@DR 25dZre0<BV{=V*F\DNil+(Y(.NN/88}ί;f1R(l.\YQ)!(k4 9gz6cLfz!f]x;2~G~(4CE3Ԛ 1'J&8}L,0Mey,'lB}Hb3p]'+hahBP&4@E8" 8µgL.!(QҨ6 6KD4u ]EDdECCT8&\(<ʣ0HfgpHxL//̳UoF"?Io[w:,]*ku -DiqnDí+=s8][01uY'G<SKF0LQOf]K%PIR-V(os2R|>K1#䝟q׿qۇEm#Tz(lFr"/lorQT*dw Bg7E;=NC-&,}*fQ$ߝ1\RXZƋb$1f<2͙k.#ZV-uUǙxzvo(̃:iQdm:6o` 2Y]Ơc:a- H O>AvKE\RFƐeDi-▾bQyLDnlD7&.yD뺊{O8>Y"kIrY~v$ˠ>lSS y BdEPuαi(k,-yp%ʄL-nl`h*!E:^A V+*yiJ*K.N/j(k52\"lP[Ygkܬل>4%iL0f|$ B2:̦S19؍~FQ6|Џf;Mg&[w:WH@Ɔ".?d M|ARn3 N9nQe U8A6tK^v3_em;f=fw8=rqrN88: IDATf &(TX\- kG_Hvx&O1Zc.~yxF;cd@VX[*SX^f5n .U t{x%Tu&BEQ\$KЎcoQ$QPŽ#[ޏ(U*X2I|8 fMloT:-ڗc4=eGܕpL6; J\_tcjb*c>}˧zZșq#(M^>ALn~Tċ'a4Mf6lsqvaR8>aFPY ,'SO({Ʉ#PYmV.e9~1+L2IƯhU:Wcy83Q#qcM:o;z' LX$ 9=YZ \fe  VBIr$" V7.WnL(aXr\ 1AJ*QVGSUФhP,(k4.G)^ȗ)Y7sEUb.$""4,JZPȒUft[}Йx6Y wtM։b$#2V6GL1y7Xݺc&L{mNMPjF8Aጾ3C/R[σVDF3q7,劄%)UĥfDFĹm}2|RY"ݢw:gpqrTdMOFAD32T*b2d BR=uA(Tk%,]#oP.1U%_\1 #cyuZL1kaZ3F2FZ\3Eg6/XDLKMP$S.L`b\3t lAѬT0U[\m 2zC8 ) /'VjA#'D]=;dr 3S*^C|\qӎ|'8?\dgy79-q

1yHuebJ͢bƨu{~Rcbb֛L3?uFTfV9?^mvvXUyM/8y^u8A}6|C!ѣ?OJSSω?4ɳy)JedYAxagK|L&S|Ə%\߾R HbLub%Ks}[7Xi)dT\a<BZ%EYA^ iY4E"ɠ\8D@ ZlԠZ}df#VDVD<5|2C K,W2o[[T$ޞ"*+X4 E(Ḋ=Ey ,@Ty !W_cdK0V7h,/\C"x4XB/g5,7*d 5_g{! xGJ\^463g6s -oJ#o*DOŶ=$WR-f 6J#+:aPʪ8`вE JB"pf ˍ JY}D%Ip6Br&/7Vi3貀3wUW֛7q3c{[, qZB>Nx<WVkTs:ҳjQAtyB:+"3h]ѻ@_}7RznKRJw B(D(bd2 B-Kcm4Hbd ˵bbC9HllPHJUnF#g<F"F.͒9<B$)|2B-*MW,9` j|͛;2MG؁lަi!ej淸}sf)ˈDW8nJonS+Xdj+U߶AT)VYnVsx 0d ygk rZ(fjNfXhsA4vnrcJTB(٬~Q~}qL }z.̜$3$|e ^?Bw??x%>ne Gg (Ouo?n߼'M> >[y F3vvvE DEĆj61l?Jbw`";3lf:;HHN6c&zl>gx *eY(~ TUU4 %L.C;Ԏ,#l涍xȪndLspmX5PU]O+gCu]&ɠ:0 @,dL=bŞ'$0BXd3&R3<dU%cDA@04! ȚBcddAFQ52 .s7DVU,O/VɚjdB,m0ͱ{銒X "!-=mqbEM SS/ A43 |uaa&[Kz. {kn[diDZm)~#*F&;@ MJv|Q i+MlfV5͡H@2X;^H>&׿E0~Əw|yK<Oܣl տ?wV峴S>=>I'i|lئwuƒ'VKuJ |Lʟ=??g]?:yxw򟳹Jq1C#i|Vy9i3/Ǐ8<8j0'`esۛ 2 ~?/}϶6 g'<;y 쫍O-W˜0~x5|Ç.r%>W?uZ߭Ο_~Ȋ)P_ڠe(֖i>0ox唿>IiJ/_9QBVٸSGִ_W#woQi@a=CQQ+'(~~edd&b{Wį3˜E- e|D YML3R>AH\EӐABtr jbeDP4IQ?*F0|mdIVP/$_ A@dTIFվaI$tB7aHf8$ O0sJuy7LIIIIIIIIIƔ*)))))))))/%USRRRRRRRR^J0TaLIIIIIIIIy)˜RR1%%%%%%%%奤 cJJJJJJJJKIƔ*)))))))))/%USRRRRRRRR^J0TaLIIIIIIIIy)]/|R|vћaƔ0~c8=bDIADU0ALj 2"~qoq1QG1$""F%e Ihk1N |Bw(q& fi :IY(Be^]?98u]l1C#gN& ]B@C|($}/.pҤhj& }BoN;bFT L]C>&}f0O\B&iOw6f6ЛŘ,Z l8gQ AKPR*5&Kge`DNj dR!( <w>ݷTz,{( ;f@Q/1u>[EZ rdg%C^x2'[mWH]_1]lb$O }q q|2q}L]S"wogs*.l+4qe1M\s~qAO_s CQc0s9t cGxx8B13hHRG:\& :?|쌽m!os!};FU>CoxLYQP/Aѻ>sѳ' [vBJ&j3*@ѐHPt K?Qo9|xORrUCo:ra0`ڻ;X9 _Y!b=`.CTW8$\q|bMeYl #C7ؕ+˨}ơƲ>=tIgPwl:3rq*_Q%3Og{:`lvms׿Fv@x`jǟC86/8p>&I眃GyG}غC\?z2KDqīT%g~̃\O\iDOɁ/i^=GD\ml?)O0srOLl2ؿ}N[' Y8lu!Q{o{q~|ҙ_H}0q2Owƴ{O?h8~"]sώxp37~#=3bd$=& Ύxtpv,9{-wO9{ )~yʗM:u e G= |ߞ 9>R,e4إ}~ģ{{2eF Y9E]&CF3HTrKא$u' S#l\.O!r8,XSř{:}NyWMhZH24DI=~+bvgU1Q!O-`[y:VHELuq5v,Ui*&;a81 L@P$|{dg812b|.KRQT 00Y9Qh bB.,&Q;SFј@P039&zs b\D.5eE{:ur0 BB>" D3 X(+d 5d.و`he;LEOL)ɐ`+*F {]Ɠ Ct+[E \>;xzpE^vX$j" !ΤGjRIfӐR1"}qER*19FfR. a|:;v=@iKe"Nod 2blDlfn˔J!$pmzat6gF"|bJf76=~ 1y9Ds($t C!Z)&!K6^$PEe1=d\ɉ32 'Oj[5gўNNf끙'chb|É$bŠ3Qd U M0 BQqDȚIR&1ѤhG!k$&91:3ƃ'gݺrDPD0Uo:j0O "BG\|? b2\*_ bB<] $ZL $2:qpzEwh:;7X[mzws+%9 9g{F6X_EttM[,gĸ1<9m@ɖ4VN409.)9FS!Ge=3fؽ|kz0Δa璽GQtڕ:o랰'80`looZ'vΘI}v)S]AtMMg6uv=Y; $D!b>@Ш,Z5ˬ{wYѨ,z(^B a0 9Eȉ1JKؕ0 bxszWsr!T %V7XΞ5a4&^F%z $JѾ"8Fͭm7)GK3խ]V%$g|q0L<~yvw="Ъ݋q#zW<:`4  ۷,S3"NqzqEg#J R՝[l4 gx+)ᜥ^4zMDA$p猻]JdJ9i>O=Z!=}Ew4Ȕ8{.lD)HsAGû9vImmMZ3pu'lT+:so&#O19"=:C;$_]au} M_CWDgu|{O#ƍ6V5,%ŋ{tg8!pESM2u^dy blԩ[=ɓ=z#_(5Xem*-10^rrY{L{Ÿ{ARb8`й\or.c1Aq2%-)Ȁ\PQHAa IDAT( Q0cBQEֲxu*f!''\Va4ryx&3 m$a9e#VLwnda6qyz£s|:[7Ra#ϹjSL0 QDNi_wf덷(e$%HforNK4f>9z21k(4^Y2!1bQ@? \oW>C;`um m{M#cn~bdYٽEhTQrvK.:膉{ (첾e.?!NIƯ8f/R|ABdEEU{QWJ QdYN($Qaߥ.Ԧ\gZb{gm̔ %gD *?svߏ:&Z8ONO?7ut]KƏgdyyOz[wWW7@ER!r(3;b1;Ԑ2:|eVU #$J$%q:3:NcʼnAԓFuPm7CL &=ZgG?3,h >| :%O8Srhd 889LjsI.|VQ7npjD%_~@M" !j0d:{{r ~>?D#* ʰp4&¯40$@W#:Vt))(,`KI23r.1lxQ?/ח3(GD7Щp|MfyJuR4>70 : P>$cemօU< ?!Ѫ6]:kEM#Z|"L{T!;k'K{ƻutE t_1oa<,$9zv]x̤DDMÏ?q7\VBlBϣug ttk6J}WQ%hNvǬ/Bȇ~*NH>+\$Z<㳏C_Kfc{~MS;BBĬ}OzY!Jg G<⮧>a6Lss{g/؏}T IЉklF-x4<-5Kb l>(UvHdrM S""@|aE{. 9:9bIs#I3*+,特6"x2 Af'+k8J/#e#VF-.} 3/Q=xJLF=z kᤘ_^cuub*uicԔ 3e~i2I"+:ly2:ԣlvUzF:&" AIe,TΏx~!UI{?xsaEE~|;boNl^hN6K;.eHiF&C7Q9vq&LJ'<{qiߤUk!_#=WFʣG˔}ax5(2^/YDNKgTlD.|c% o*rP|RhW\N$h:a)Ѵ)q[g(jmܞN\]C*|CH~yqa((]$eb?aP/$шoiyz\2TB|&;7#jѴLt k=Cd2F^7xJNQ_Fd41Щr~V쳞0 #r788r|pl޹ *[]G\A`z<9hXds}at^ͥH"6J!v턳)Q::)h"j *f.jLۡh ! >,`\ M[?` 6IhU&B@XY!N4Dr2nQ@4iܣq~F3QtL*W(+T9Gt^;2$K\b#=qicN_r^o ,c&n,'u!'БʔhN 2R)^jr ]WZ/lά䒬a2e4 ^Y0PtTȭBl}:A(x#-?`!SD h8:n`9.}pİף/ ߛP=;3 0 7xλYCGcT) QT 4:f[ג 4lbH`v/P6{U`&%:V۬eefSn rDZq>a4{>=EՌ1i  G!: ut鶚F qFmBU4k2-r>^G20lvvvEq-Ɉ'XHZƭ)nA!GGtMQdae~9SE!um7wr8s< idQye.4jU>;BZ͒v\WEgZѼ X_ p Aa yws[S:D_΍xDo23WW0~  |YQUM'xaq"̒uTq3/t^()EnqYNK'^?c7qe,K~xIpyIn/Ihnѥ8ͥ5pu: lޯ~B/.25" ?(J,n_("$"D$EEBW'^-.q B. | z-5 ?|};K8MYk_"ABH a?9WD$I"x^}V e؜prvwyw(]4ę;SP=`7 !Ĥ  +d4K<ri% nayNBBt 71ֲ^#'|CmBVOGP%@SDĠsTYJIű IU7PpXx O2 5]XW$ULӧ0 /&vqktgx{RDFVRu~ȽƤiOdeHl}ڤ" Oa*GS"fxI吽] -dxE4Iܻ{'hpx32$b.H>m.󸴪/M̗FKƬ$XX{p)Ӷ<КȨ'T-ۍs)}fi$г!Z#9Cri]5_Q0-bIG0FIh|}}jXn]ҭ!QzPt҉$FL=Ṋ[ضF}(C y$* $S}i$۔YlLg dyf?{HIϯR,IE=,ad4`0l|C{*#i2rA\/2/I NEnH4ݿK'퐍阖eTCFC҈ds2I Em`EI!'<{>wZ;h^rD5AXՌHlǸrIzm4&!_7,* e q7-SZ*CT$t%rsA)28٤?iƪN&'cc2'u5mjDAy6b2'U9=.6C\.qbIKpgtZ^~wVL5>'D NbʡJ6dph٦\@4{}:IwXXs.LFC#I)f/{x͊)kZWa@NLs!љKuu"nf)FRH7@,i;M2ic>Nnk2(ql9`ܭqvrC)/)GP}JF(;zs|9Dg!!c81lKz< zMBftcؖ2t{֯ƈ<"\.V%qh(DLZ!'{eF#ofXp.-qb&g{kkXN1ܧrf]gѣ)9G-hc~!Q)/!ιcLj',ʘnLavɏϱ.P:s,Qsʉ$t:a._$]"*/㏆y¥I=D-"+2ȫ0"@gV\X$$IziEYuD*ǭ%>zV/Ohe0l$fM$iH!g{Oʌ< Q_&hV<?e83 JI{5Jm9;nmk(Pe$2fe] (ZPtIIeDyE/PM{FYhiȪP/NE;(2ye^ZEiV%JDI 'r1?ɏ)/M,]`sc@kt4d4TM7lQS\Z'{RCc>U uZ,nFE3 j jb;76hq?#Na|I'z"%ן˥99><ԛYeIBTܘM̖}zNJc%y- =!"t DעY_oYQ1 7Y W+`5lCf=sXĐ726L\5SRs[db6zlUQS=>v 2Q/&dn`#n'.t AV  P=mo tyo!6Dgqq2V<8ӷYZ^-yD*`^f玀QmƄk$6{((./ [;EIֻAp,N6X` *,fS3™sGԚ=1wx>-W6Ud[c1m*>)dbHZͷ05SzUWAPto仴5Iel:MQr JNw$2$ QIQt #Qcɨkj(*"6tHaj84٤{Q2^EBlҩ92x7 d)Lo(ڽ(fSi\d4 *6ԗbK)k4#(`!2-b7I2*>F#qLp,Hvd&K5_;0 Pc5ڽ1bͤI,N< dt*%4I\Xz&ʒLK~G IDAT$H: nfBNHMT4,j;d.<[pEQE,mlc'sdmKZ1,jh⃨`S$b6qSE4YR)BKXHK&נ^{gYbFOʔJgnd*iX&ΓPM'!iIX\_14T҈MD#A4$&_hQ(ʵmBIu4%$.p- 'Fi BL7 n貈淾'vP$ UӑtVKg0A|iMY+c^ᄉ!*:LdF'E\CGDU一)AP4↉F"$0FI"#HQ݊JIE%?ƨ֚GSDxd"F,a--hvG I<$9:-S*QRg|3]`H"1C CbtAWDZ@ ضBXx"I6 m9F$ L%A.MxH,&(L1Ri #I3b)r8`mJ7 '>fb9q) JT3ͷX 2b]6=`.$[\N"G2kobh/SA!30 D"HXBZՌO$$ NWy)&⫒rY Bttu35+ѨFllDvL'_gC|^;d@xU/޿拧k[7mjWEvcr}|<& p:躁oRA>h͛c5!Da@4_+l^b'}_7~w·<ⳃ6;9wnpwЃ`_ـ;|w8vٹEҩ+ 47qD,%`WK𯅫tfFjÎuH%-_ DD6 H5?:$I%J#qxATg!\_=+\_W SK4#A@dDj Yr|+j }ɘSYJ牛*/lEL##Fh''m U`S:j+q\܋̾߮,b2o)z`q>Gµ/J" |'1W2уफ़z?Eq5Pàץqb1$_V]! CS: Pg>" k׋a@:\$3&܁7aoN /d.&>*i(Ez0#ΫMP Y(b(?&8OL=|X/ W+ @L]giq U- cHuⶎ*@DNLD|I"%>c*Zid2X(F{t+u( ULׂcj!Yqt <ƣVÍa9޸OQ|L~^ JQ*q\ms0-0 t4׮SkvgYЂB*'3ՙkL j'tv2(\3hxC /x&} ,f!v&MJ W?Wg:Lbc.Rb2#SӨBKٗLFCZܘ$6G?[2 ikb@Cwy[^"ޔG5MO~{o( i9ܯ8ZBAn̋cJ@7np{-BOtyB=qmb/?1fGLIIJW0Y7&L;>|HȽ-5pBOw(,z+\ 7Q>Q4:f2RoN"Y'N:,>z4Yi!Zڌeɀf}H7qMd!_,wM`DҠ3xH\ⶁ(Mڝ>tƈ㸦,DatأhrViLaX&atDզ3"d&LX:2vvCo8A,7N&*2!Q0njLdĎ%Hl!v7;c Bc,EL'#Z:q4L$Q@Ye]N@f\ Xr0hPI$b.*2w;4=HDLҩF֬n("t׶0TqMӦ사aX.Lq<8't$;Ij4Y>Ale0Y2dL`JE2d@>) |VMcȚHѬ> )bK/kQDLw[t- 7^fCw0Y' i .|A#"h@{1 $6eP~9XY$"Qu;L=ѠCcc:aJP4gcq:0i{L5t:tbI!i33 rg}aR/N2%ބ^cJ5 IVPeN}D%6 %z*Q RIiPt\Ti1 s+r\Jҍ,no]:S^eLyr54pD^`*()R ,aj*ZnŮ\2f\E!a3 #Z-Ώ|L(0ny~k|wGϞa.l0 ~]3g:AFNQڥJ>|ڦ5B&Fbi{QM[眞9-Q^L<*wXKTq#ݿO1j<=(vߟ pwHF~ˇ +5ijԏK[̥>mS a"DYnjeYuc6Q93繵Mޕ藞`7`=F{ j1xEiԑ iXNl.MT;~J0P;oهxjցK(HZ bk5)WZ8XVߺ q $3qɔ c_5ڝ!iHr~͍un-p1a4PY!PڇIy0@Q- |@4S89<$d#&۷`%FlSi'8A,3xzNtˋX VLA,;4xKϳz6.NFvj1ͧXXZo0_:S;N2=&+;TUĥ,=&S&rFREЯ6r8NϛH6W٘OJ cn Աx4mz=lCţc"!$ ƜdƭRfȠ &),q[njk%~ǜf!ǟ0Ւl&)2,N,#}a@MV{f}li7Z$7TQ[p?|\o!":3Z>#%^O"4V9:rxlvEك_8&wr\\&NE@( Hټu6 N^EdrR[`[\KHxU@*!$Yp,oANr~oFZ&wb =8뇔z4{sLB+cm)Қa2L="Qp\ ME #Y|ݷ <|zIp}otU_(J%kv{8h*Ƒ KS(DPW(gzj\ǩB 4s53d;pS]Wts/c0XO(O. ۸D(eLcy^LBMJ=>}hcYbD"!4}}sXw ]mDs Ҵv I2}9" 9#UyiS I[܂={F+\ǚp %^b(EIIFtt_ҙL~M5ֳ#8%Rmkەs ). 噦k*Qmf&dj躊iEuz*XL;*fvɌT1|Q(acD͙\ Q5x:M:ăyK3늂2*ϟYҙ;Cy IM{j.(3WQ򺜊3s_yFk3]yC|;ɴJؕexlBf\sBR9&B!$Ot=P!]:3k)(A$'7A5?1qb?A0!15fً&Fdp4K"0MtCCfg:08ze'TNk54U0M(19:xQ{ z{8"X(|ړ~LEM$'J044#rԤ8Jy iXS30"`.\.[_I6E#W(j'%]>ko$EkG{slvˍ  iNOi {5m(LqQ \Ug>A!:~Îg~0ɓv'1|A܆nM)2)>)H(HȣSʥ#]21EMM2tClO EǏR"#1>.<<`o(g̉Wػb0yjY& L18<=a |tSZR^zsD6|'N?fRq똆ih( anfnR>mm$ (FkjhPxFG6$'HZ8q'Trf3͝kY۹bqLqdNl)0鈥nqhb$L,M99={Lɕt>?˅>l4@tٸ^\.fj=8J!ç(}4jcUtYx^L]GUTU#Aj` kvT9edNa$6A<&s./3wjU50]6E)G"<6 V-\fyyptan0Sx̽X"~ v!%EfPSMTz<F8Tx,nO$ p `sE&K{ `Fr([ŲxQ@ER0v(ym4AAPO3R3==E:=I:;ꎒHj2gC]D@P(=]lX>" Eldl4K"'KStt$aفQ |f: o(Nf@ &Lb\q oFI` Ça٬̐.h`p$r  \/E"Ѓn\(ɱ4o0B0@tM07BQ44Gw(F0vhzuL ZG(':4F ʹ}! SX(7Hm#y?.MJ `P"g T+͗P o0+A/g,B͝Qbv$n1zmt]{=G:bbXrdS8(Xm1=|8ls4wPU塥s yG`-Xlܴ?DmQs&yM0Gq[ $ >Rsݕb͌gs(Y^X= ൰ W *`z!fXrXj| TFwL 157L0WǶ1.WFY_P+ZC9_f]\bFGG Jb8(  PX̧|^?r.( 4==ͣo@Q}| L8K/(<ԏm{L[lyG*‘(284Ľ?r|_QkEys0 TX$lX/Ï|lti(JzVX-kq?y%я6ˆF=9zWlht9|]ױ|B>xݫ['N^;vk;<‹| __kxo}$ X7=p˸H`5{a_6$Q>7زysc_޹w.#/ᑳ¢[t]G6o\_?=='$0 !F&EMLLp>C8v8k军rM_}\(wC/yN[k wf[y3_a( ?k`nF.%7zǝg]eCXT>_`jjz3,/3 X??bu8?rd{xi$qMP8.ATYҫCXT8_ ]_x?ǎm'G|>;a~zض/}d"]ZyK*l@^kFQS$_kZ[Z8p ̽ Ͽ,4LQz军]E>1񏓈I%2K<(ۿJG{;;v:oCG\ČX, 'TᮻaǮ]l1;kc [S*x?o`|Ï~ou7яeɖLX"7;K-7\6dK*窯y</dIooC}wf:\{Ϟywq{Cjw>z<׹oN~?l߱뮑 /V*~֯~|>{n~w(^$0 q#,99qwޅ(MTw~&'',ܱ"ss|An`Ub1r/!Q3UU/ fn>Tb([rV+7n< Rxt]P(G>A:;-o_"?ulipqzN8x|}wwzH`2ۯl={61cӕW%_(5/鋜:}0Ƨinjy7q7n뢖(^ $0 q Co=2h t*'mU?GTUU¯/TF%:$0 !U(2wgh1’{IYVG!B$Q!B$Q!B$Q!B$Q!B$Q!B$Q!B$Q!B$Q!B$Q!BԴYs !BV-{F`(B8=(AQ!q޲aB!5K`E!BKNJJ~c$\ !B sVlYatUB!kҪ6-70:cYe^N!BTS!n9qYscr,]B!cUouMS9!B:e Ntj<B!u٫ f,]w!B!bE\Ke_蒮6QZB!V_=sXY-:@b+B!ίʬ0,.hWw[b .%B!rEdeYn`\*.Vln|bB!Du aR'o^xL8qo9 !B8 L0?st>IϵKz.^x\K!BT/>0?,.u͟`Cxh3[}f_y[4{5kB-RQ;(Zp%<^mo4.B9xMG.;gm3IX%r֊';Zt(r{GFFdr9y}c>Ɯs'Ͽ=?W=ۼvgmmz&o+]ЅSx+7rkçO!.u###{s\839WڸF$r+c2?Vc=;Olݺ/\.ǟoޚ655wO~򓘦Yv,ƧKǠ/=yK:Șj? azxzdP &Z28l{&qŷΓ/]8buţO-s^K!Dg?YE3L]KP\JLOk|]y-6hpz ~[V>_dp0Ӄ)^~bW߽,b!>pBKW.cttpW|ɧGs1΄Ņ-eEo e|,X sv-lB!.5 [j +80<-p8"R3 0V .źg^qsTـY9Fzp\x B!TTk髵Lb[X,.]Vse"±aqahnaߔ:s| B!.fƅkYW R ,+gsXi8}l !B\ ʀW-4. /6饲5r oe-s V+W0V;B!ĥbapq.aZw4X+0VǸJYkŅBq9gk2V .ֳ8Ruͳ.VF8Z;g TbB!f#je\X+\'T\qaQպťfFK`B!ĥV`.k8.8e[n`5r8j?,J`B!ĥjXOH\YKZuMφ@83SzI.E B! qcXk 5Kzf _W٥wԊjaVP(BKbZ 7tU;Z+jZҺ(B׊z[~]{::I/Y8{ZU*^]/Bq9'4V/k[N[B^s BqZ׵rzC^!Bq' ~.iTXtCreation TimeПт 30 окт 2020 16:41:28E{ IDATxw|t{fM0޴@Bm)l,Beo2"@ySۉ;۱w'餏^;EDDDDDDDdtՂ"S'""""""""Is)6UP֞*Ԟ W*7HK$ppx4V$ହnv%Ś>a"""""""""3^յZ Z 9qKdjk駱¹Bx-"""""""";xC%K8kKOR}KY Z Z Z ZSVk!Ys\.р.:DDDDDDDDdH>a^o[I$؊7k.|ky6\r""""""""wZe+[bͅk=oz!""""""""K[c6Zֈ Zf5MtY""""""""" 51i8/6Z/q-ibM+U9[K="iyaMAj--bc 55wZT'"""""""" :af6xlS95|N4 7l)Ga k-k)Ղ-VfxR8o0Z}""""""""ju\k׉kՇrF{:kZ.V0P!]-kX!\[k\sˍ\DDDDDDDDvrvfǘ_q o kO]Uw d逯nZȉH.]xU b]n-x[:0W/K,jnDD(ޔrҭjٻrX~CQwq(ZDJrrqKƎ=rWNj0gKNZIwDHNQ 9ckj㐕~3v\6z?#Q#GDb.̩{9O_6r0L+NJE#FpqPi5m0PӍ:fGHiw+LH8D( l~snkav{%%6۞tl-Y~}ilɴbmO KY[qRRRZVъFB8l\+`&.v!:EDDDDDD+[Kw|4LjøgB[,mop(D4f^6pB6Ֆ51HMKg^dOx^06!:EDgpDZ^Cl+V(Մ Zv\KӶ8``~t^3ՆEDQ àOlXNji '."""";[nϲx2גku6YkӀ.VXkāMUSR;ذ!9%]hlutW:HKVjmSV[k-խkZKɁm۔QPP@(vzF~z撙i&7FZꛫm:EDDDDDD+[i\+9͘YK1 wx31T0 eeqίrTJD]g_|eso.bЀ]]t#eaFb<=H)Q'koPSSs|rr2\;zl2h(fG\'h:nkq,s[ oK X3m8mKUh6/Ǽ3Y3}"^t6IY}j  mΞMrVI>}Ɋx=u֙-޴jzuHm" s͸v'k\K a6Ϛ=eIvX5Y=$paV|z0lT.RCaekVqn$gd0d۷_:]ܸyWwx{IJwEKWT/ゅs]&_L|+7\q*0.:Nrn}gD c~?[d[;dfe՚<}v.b囷lV䃸nI\mw"GKaV˩@#[>,ua8/&?LcN4B8jtgkbI(.-Ͽx\;9o`W1z 0<o3_F ?xtXۆ+X>߿E}! a}ܒe;u:v'Ys@`ME'|$}mP˴m-)QB|XZ+FъeX_f.Ǟ+VNp\ tdåTyR(6 zʦo wvz|^GZ8u.;fxÏxW|xi)װN}.~ZrRSҋ8`}߾m9b]˹Krn;H|;&~bdƵrjeqG?ۆ\B82jrˉ;]]Nh=%Qqa0x@֬]dz=7N;dOm>m;>mU[; E{qu+V ٰx~rS_Dzkzad99i&v&ʪ HߟƢEd{lֹ]TUy!9vZԆUlqg_|?QHG]>j{؝k._yfq= 9/:_[Em]㿛5:fI,3K_0 .pan5;@vPUQcE_ U Ri}ڤMsCbt<6j9';85u -r 0:P|+H N#"%w+O6{ mA}[)7kq;.۶9Z_jby0ba$==*x x[+=g[X׍k{Yzg̤@YV_:4 p/9^ؤT)pϰI*ڄS{PNҎLԔQQZʬYcQAQ=1_q0-f7/e+(:JǠ8׿#OvʫeTD=eٿ19;o1t:P^ZB(X6n9jf_vP]gO;9erQwjjsVϮY3 o}δE ]fSK^}{WRco0ҋlȢvl fͫ_-`#I|ɭ\whf;mN"uplҋ 58eնBV/Se̙mtlhݛ^ssN]f֛1 ֬a]_Vmh BsTa;`#B$.RMVp)^L c\p6AM;E6Xe S^ž{eƽ:>'~?i إ/ 6ٜ^5]vwa5- Rfʶ,#&gPhg,2t"~s)?n4gXl.ox`5KgYg>{1`m\o2Z)>!KˉPg ]NR V]xqXn{>s*i9Ws<~4;1.^wKb\ʫnCKf\uI 2$\Ok^\x۹0HA^7^k E}=w"N8cPq=Y]\e=Is>թws ڔ+8߲_h*| /?X[8 {&₫/eXEe)kF$a[2ytJHMM~_nk9w̭;j_I穩 ."XQAir_ 7) ;~cU0^G}ϕZw=.Y3g";Ugp*są1W2vE I2;`$9oi%u}Ld䉍tخ)ᅲkok{VYG޽y{uhw4WNzWXElW&8#{pe&AOC2oMOFsz=x3q#XbEex<+{F>:0;,P+"DŽ+h_=(&*s- ||tv_%F`Nlf'BÛ⚑ɍv֮]WAyYrŇ5O=7 V[eėʲxW^U,E)1Cҕk1͚ H-{ )c3sݣwrZV┓׵ꄏKد~d w8X6b8ԵJ#AsX0 갃c4]ƉZظ8LJ.yY?,#pA$+]_25N=C\y,>`ѰΜa=rCŽw)]*55k*Ykyx00~𭜖[7o}Rs7=x+'2CY\v|< 9Swf`86%D6q|=n7? \.\93ƴ1Lv@/q:4#clYv5Çj5|nNNץx~ n,x!XՋy6mzӖ@.fy[4W7`+,l h DC;z 18)~(/kSVR5lҙC3Fu5}ކkoUpGe\:E{rgR:-#]9k"8:,=7'/37T?$:r/E4tzI^GpЇ^ɢr$}o D.)_%LZ{G7*"+3g[AD#n;`꛰tM_k8TW5󊦯vÉ4ة^rr ,A|#gGq}>߮ZO+Y<H!eu%-ˊ{~ wT7}[g_Zvd2`{kl5~ܫڇ9ͧ,jk[\ktQCuE9D[?*SRN=GG4)?` JKkw8@ptw;`;`앹.TcUPS"p4BuQQ, 95~}n7~s4Ui0.:N̡z3\|" &++=4홳@#))lf dRSLƉF:Ғ+PyMc/ضUr˗%?Mo3OTD 28Qg鬤f} s5TD -ÇuU+'3ͯ,Ҡ;) Ԃ!}cٱ\)\"oLx&d2|I\xC]@i/g Ǎ?4 .<.9vۧ.55*8 |qh5p7 چ ՖC`;}zkT[i,ʉs~7m:g_|qm7]ȠXf-^ϴ4MN;.Ur~۰q5k{[Q-+JZwccQ1mj!sJ6i.< gy1?ߛ*w5)TEK#Dp8W/ OY;<~s4U̴t ؈MaAڰr.[[Z떓Fy<:>ho'8_}3`06l`ޏ߽;;H|,~+>ipIaIq AbE IDATdeaNFjrXZRJk9/3'0.J뛎+=$7_1_8?l`kswCH?ne 1lW{f_3Żt)ګg*vKSSgΝh|&OGHPpVFj.QW%{ogxduۚaqQ A7{ skI{N"͉Dvv&w7ۘ1s3fj44Mlw˿fZ^Jgv?vtxtsp7z#brsr8t3{Xx g{dmz|ij.~?\aC}wDk6|/eY_lrm(.F aC)fpL,Xgٸ T1-6IJz 2/%~(9T UQl`{ST^Ç\f[%UWp">t7.Z״Cwx0{qܹ'0둏YXͧ> Sbac_*TȬwìw6/1WqY;u胘㪫m8l\U8Dٜ񇳘|,otДa^//kKObʺL,6ŽMټL%mfzT;se_^养c0<׏]ù`p~ TɁôXVaC$P[geyU Od`2&Ϭµn ϲ#+ZZw6u*X2m"4 {p:b4ѻ'FGޛ0gx3Eŗ^mv /{Ԟp'/x9͠l?Fd'/;O>b'Dio჆Q=x ||sh2PYSZ,+{ӟ|?Yr`R_n3%<їW^|'i58 \wդS!&;vnԬoc'P]g~NE<:< 4j]QZVr.v(ڔbfC7#O'_oV=;S&C?jilظOM=KWgדyeܻL=&VGq0`Q!D徧oY{04I`~-_۽Luzm`3=n{<&?:-_ͷ~ m[׭hV z(&֌!lps5&=nx% c;XEMe#fqQOĠ^Әu 2\.3=mcPU4hRQ"TiGyjn&\\uҟINKrax%5=}2AjZ&HyI1I)O(I5ddw)ieP]UIU}xGtTnjQGU2 O $=8X5T g搞mcEURRşݟ %6p&#ORb 6UvTIy0Mp("J*Bt22y=ڐӶ-2Jj-mf$")w*YٙnL;J$TMUYHJ[," x>M?i99j6mB}{YrJ*Yٹ-NSږSS݆*-$F~i%e:ÝLjF;!(<ZڿٮedH@[A(O7 3z8Zb2|?0ir{4hM! x0քn1H$9HZBr"iX\0=DWGV]8Si@jErٙ֩Iw-9]"@[!@^Kgrjl#7.8\ª [mpV,p+Ň 63rTb#ǶmUywI&I6>~um-cul-]Ȱ!C_nfcϡhRgu) cRۄe9{K#p ?\}.uHtl-ҩ\:Eo}0<֞k6>ߏ'%R**8912ywk($& ZFh!/499CXv-,P0͑K~p{t/]eYuc&Į8@;X۶1/ؖ:tl-RјQ `\kINMRb Tc\=ԩƵ""G\DmIg^V.")]۶Miq.gs]n/uH'~WDDD$a:i:u}nb,'z2ԴNeYTU~-Y9`ԶXmܩQt{EDDDckra`&mOI%oZ"0mwMKrJ*a2͘o/utW:٢8NB1iuoƆoNJ"uy 9`3߈ khz^tl-Er YoX)""""""]ZVr ÀzC6y%#^}Hѱ쬺\LKJ)""""""]ZvBfW """"""""3r֮EKiDۤWr~Lg-JDDDDDDDD)"""""""""HH'R '""""""""҉ȉt"r"""""""""HH'R '""""""""҉ȉt"r"""""""""HH'R '""""""""҉ȉt"r"""""""""HH'R '""""""""҉ȉt"r"""""""""HH'R '""""""""҉ȉt"r"""""""""HH'R '""""""""҉ȉt"r"""""""""HH'R '""""""""҉ȉt"r"""""""""HH'R '""""""""҉]]H{DQUh۶$LӅO")%["LDKPYQFl2rxl&SS]I|RRHDDDlwǡŀC‰LfSFJ 0.OD$!:NUe9.^}+ c.*ʺHVD+h*zեH٧5DѮ.ED$! Dd"#3[-DDDD4&X]ե$DG"] uu""""M$  (J4vu""""Mx<^"HW!"r"]q[fi8vW!"Պt"wW "]X1ȢkˢUF 9#]Is?͈>';եH7@NDŗK*rk[q@B`E~0èhD/?'H+ȉUQ&-e͡6pkM4?XTӊ8} MTnEDDDDDEdޛ_sӋn8h40 qa7/Kl.eĜ^DDDdgtRNJ^^^Çs4@NDvZJ ,/ [si!3Nǀ,o+1B!K aFQQ&M4MN=Ԯ.OD)Ҕe>5aiõSY0e2vHj3~4/g.IDDd0g&OLMM Ɍ9cb&orJBn\:(m?!??˵5v}>W]uqÆ #//c6ivztr"dQ}`L&Უ;ۅ1yܸ]nCԲ6aM61$۰1 c[Zn<guq ːwn$Ft'? z\ {FϩfͬonV GԁV}۟|K!Vb-EDDϙggժUL8޽{{8瞌=P(ļyxwxj9>3p8TUUCED3r"SyALDb^\v_H=2 ®}蕙BFLmqM0q0 ڵס 6A6UT|SkXWZA`D?n'C_LѮ֮d4L8'wKNi~ ;C5:Ы#FE2 i/qur"""5zq޽Yp!ׯg=<<99={8yyy,Y<''//.LȉNcʊJm2M?&)}r;{aQ'aseP{9ꙎC:Q"03nyk( etҰ yJ79bHZ@~Yv1?: d{sAI‘wM'c㚧S7]GdXlR}ܾ4zq ?-m?V١mڴwy}rry瑑u#GrUWqWs3e֬Y~|uY >= "ҭ)^r YD QwXQr)㚓rYda|x0qac I.,N̓]wF7a<Kؤ9aFI_`o9Hۅm l:v[fSTX\ͳ/NŰ2wSONXØCv 8(ܜV1mrJkXQ%ރ\|•[XWG<^ĢJBeY8;;9qҘi,+!`/ύ'rȅzsga¥=5k5%q=M/<27cRQp&'r}?U&("""8cǎo߾Ӈ/JHOO';;ѣGԨ#DY?3 8)|2 p{[z]5-7C ak W~/<kRW:E4ԧON>dM̙3q\ a`̙"77N;8,<˖-<4M.rۡ'"ȉõ/8eVw%7Ʌ `alduŋ_~ǜ6A# vUasbQxc">iՁ !W2YQ=v?Fd#2e`c%\?6^pWF&UW]n7rK5ltʪ*-h|*ߌ0r.uA0­/LQJrQbٗ-{ҨG>Z3`RmfRcfPÌl};,.!x040wHO2\ Ǣ..(Xͮ643R3H3\ jN0pl qpJJ_q^mfsóɫ.|SMd;v>[9<5&.gssn@N&ћ&Śe wV?{wUuq}L}c(""ZZV[kZVVتUu߭X \@EADN@9 IDAT- ٗY1IHBby=}f;s9~,*K$ހEz{W,^J{q]I=4۹;| ȉHJ"--#7كm09©Tr"P%qh3R$\5Bval[+(k g Z0 ?vH'Bm%@X&$`dO3/P~xX   QQ^ @3٤=x~|]Uz{ =t,p]K\=ſYʚU_2% #c+ڮy zCX8/7j\ҙ2},>3c0Dwb*oh3zv>Mo# Yn1b!39@n/Qm% Dm+3(0kM9նW>-&FV0W*YUhfJ*T֔W3V 0`< /+gp\ᩝ@ʪrX@9r{eOvl0aCUe)ƤRV3'T >:I#rv$zY\@L9t,-'1e`7T""""ʥgogCD`|eg@z4<fls[mZ̧r"-}%ZkE,h(%Hę:p W׭"łxx,Hx !M(`ǒc088Z8Hm V4DDDDDDd/Рmk=Yۢ:8 bbA;!Dx uH"R%b8D0\,, Ѕ&ۉK,`ky08|'D}ڒ7X2"""""") '"K˃Xx`bL4F܆P\\ P6]cNU{,""""""tKUuі6p]qJp,/kآiL or1ֆc91qpA9jN9󚋋i?rtc`|08xXi1NЯqVϚX9Lz9Ƣq@muHw".5qXKXudx\DcA=cCX\`7 ZoGDDDDD[S@ND%ע.Ř=,ס>q!gZE!ۇk\,'  qam\,%3.D1DanC  ۪LQciDDDDDD) '"RBŶ4\8!08€>ia`Yqh=u^(>m`#9 D`8ug\\7_ ˵NjeC͕a8 љCbU$""""""{EHmyEM]a5^i BJx ؎Chg'J<$ՔDu$:PVUGԎ5,!֛C, Q9zhMM9Xև%GnN*^%bc 4 c[d}7e!h!;OڀMXMcca0V[XNS""""""" ȉH4('jpMEmPê= 0o*Im`@[` 5hqܡb犽zpD-/%aO)n\2 Zk`Xτ=Y""""""-!"-l3P[mXٴ1\g9."xmgj5,б[l~|F5rKzv^"cc^{ !u裏X|ΊnQ@ND6~kRPpnX"Ơ MK@@464dC;W?)Ɨcpq8Ƌ1H^]e?p'"""""պ]H3ė[j[T[)|Qq~`YuklQb6c,\kZ&bjs}Z;oS$ˈaQ Xg"0}hn]kMM | K,qHII=~W<3s9ٳ5k^z*qx;v,YYY_+-@9鶎= ;MNŲ-Ի^&Ėyul+ ` 7x2Syb8ؔo.86 e5lu|z _mJiȢΛH,,_1{kq]u3ϐ˜1cmng}ƽI'AtLEEoӧOlnWYY|TWW퀜t[~ԧMy0aˢk*" Jvp'R>u.qY$},&RSSGM]Kȱ;ة`yp=y,"mXUWXӆ۽SO1d9Ν̙3$!!ѣGSPP?Ojj*999@,薔DII K.eРAMi~G~B555M'; 1b'NIJb?SfϞMyy9}r!Mǿ~ 2q3g| dgg3ydt\$a̙,\P(D~~>-{>,uyX|90uTzKe."""""u) '"Y#xaQYS/9:VUp!)z"OEv+kqG#T9.Vm˭c `^Bxp-h+.,;j[X,7w\2e ~!gfԩ/STT)ʕ+={6vƘUFFgfXEUUgԩTWW7gϞz~V^̙3aРAꫯ2a8IJJjq5蒓5k裏&33 sy瑟뺼,ZI&ٸqc;ڵkba̙O?%\B\\.Ң"ҭe&x8L:.![5Յ?zC᷉؀U p&%.ŵl&j@LFBD@ 6qD8vXXV6Qlqj{q ˋ9DQ-[ƈ#?>Fbdggp؃:u8dmm-@;RV\ٔFbb" eggӯ_?;v,lذa.}!778`"++8jkk?~&M4-Y9sPRRmۄB={_~<# 2QFaKJJӧ5˲ݻ7˗/qJJJFkӖ1; ) '"ݞ2<=]M4ຆ"ؼfzY=$$7ped IZ6ڈCeM=G >4?}ғHO?Í0>6Y5`bP[Ncޡ1˲M󣵶m6{paq}c6C QWW@QQ=#F`ƌfժU̝;￟I&1~x]x뺻u|G,r"_㺩y\D DMe(_]J8e8xwZ% D0K1j XXUq1rB>}|uM@ @YY}|ߟT0p >S eYDt X`'Ozrĉ 4$1 x77oƍkkcZzY8[l,jzϪU%יt%'"""""7( '"$rd?kx)˘p-ӏ̀dҼ`0mcr1nOkSRP(;#akMeBݾ۶ݻ79Æ cg{b 'TVVrӷoߦjP) g#$0|4\%##uy۶IHH --6]uu5|ضMnn.'tRӰɓ'3c ~i4i={dҤIx^̙ӴYgz}'x<ܾ*mghkRyj6mx5C[3Y~z3 /3p@FE^^'YIEDDDK׳Άtˀπnix6ET9/y@"^~:WkSX~5Us΀e0&6X/k~A9~xROzޜq9CeΜ9<5͛6n89=z>zVT9g?+%Tx|qb~p(5Ʋq1 0.,cXjN1`l&^{VݙlN=T\ץH$amyd^ 3RDqk a190OX8&c =qx-Nʹc2H[cLDDDDDDG9 #哲 l 4,`Z<uWPm؇ː Nedv_|) '"Lr>"0djVֱ,LYm!I zOoZCOZP"""""">5#-˱8vpΊt#΀D9.HR@NDDDDDDDD ) '""""""""҅B ȉt!DDDDDDDDDr"""""""""]H9.HR@NDd?Xj{;'wjjlr""z^Ao C{;/5{\)ngytogFDDDDDgEYJgcY6`*yfn_jY5\jS%:HV?vl35;t QH5gOG8g*+k ^iイ)˥rR&r̯ns'9sQQdq?c!'s6%Rm\6Un/mq)ܺr{ &E>Ϋekn㮿^9 07QA*y\:)?%WYDDDD1΀|MVN; /\˵߽=ǯLŷW3ncw2;`L\78+yYmx{6 ׭y2҅G?d~Yv y8OxzԆ#rwDDDDDA!'" E.E.UWOj|&^_K끝K7gNx|830\v Cs雕%ڋC w1ɇKԡ%'0.zrbշs`XI32`c;El%~v֧%Wmuc/=AvE{ FIz'x(j*J{INOg_Τ\ĴqC蓕DL#ma8y0N )`<vt8OAڈ~]L^{CNDd_F,"R[Ζe eo(<|> '^xο 1{|<PNN 朋oqoy~.Ju9rdP"^yA.;5>~l6|Tɕ'?^˰(%˿%+D~hKѱX^_[=bI֭ԙ μ>~n-ýn{?江7w⢭DIzO8>I&flKٺ|ZV^  z79ue3x,μ&H*^WO_gL~~MB.ϳ9  }krG5"[XeY^@o(""""DDu ~5+#o;WqfM3_g?\t<=Mk~[')-|4emw7v%'ra'i@qOb ۋ^ "撘IIj/xPR\c~ t}>G2a㿽W(YI!&7>2\DrEq?%<{#fYY\qvY/ IDAT/,O2PVͅ0npF)+忳uU39WaΦ׎3".s0>:/=onpJ?QDz\zh;<'7r8PFIEDDDDיĉxN8,=5UD<)/"5/`=69yV 8eEYIbӯXN1E[NK:k>~Wpּ%瑟E8UX$ ˎ;n~|9~|@R"TW [l\2u(~|q~Gsǒ45*/4l.o ~׷HGsp}3y#zuDžWgL =&nE9Ȥ2xH,ⶻYədmBM=Ql*$jeac%$d;Tl-a'Nr(.,ƱH:oc9^IW0;Y,u\l3Y~7Sڍ8TU?H0}眝\p=rg S^F nhOϚ\t6s=wRȌsضqvcv98c1e,_V6: """"""DDyD0 X1ƂH=#8Dj7h689S8nGs^*|nܽ-[,ZGhD|>y;Lv̯Lֵlc i]+mKp)@0`c)~"?!DkCA^qwER?~q,8i>z^[;D,d=^)6kexA8F=__K޸S>:~sRǫ9/xҾ;"VQYbzU}x 4EeT9PFDx񶋸&FcGֲā^;[W} <2\8l&$C\@nCΦ"WY< `Ua7sq p݈oaVѠBxfZQ0;?gDDDDdߢ`EDY͘k. 97G?=u0I?>{;.cs,îu?yTn|f֫!heȘw~>oz}\>?%|t8zSv^9%XTo\Ǽx6q""""""DDd'J,g^Elvde؄yk8 DDd'l}/8"yw[HR@NDDDDDDDD ) '""""""""҅B ȉt!DDDDDDDDDr"""""""""]H9.HR@NDDDDDDDD ) '""""""""҅B ȉt!DDDDDDDDDr"""""""""]H9.HR@NDDDDDDDD ) '""""""""҅B ȉt!DDDDDDDDDr""H]e-mtv/r,H[)wJ"{;߸]W}_.]׽U"""Q@NDdspڗ"Ul4#SHm1\P3R8̍XDž~I˘&\]lpz潳iDVVҸL2%aEWS{^.5lq 0r\nht|sY6w7ͩbyqZeC,T7z`r^1/,a}KRfߋkFkmdc!=Ta* sQM:ӎ0 eR?T[k며<K Z7Δenwۆ˺{,Tj;c(/fM[;1?!3e(0ѡqDcrs9OzJꆥk7Muupm`<$pUXNj{<`$ԃgjW3}ދYM1<1[ @~nJLfP`c뽳}.VlϘCp],8o bWp=kyƓ̏OeP˶ZTO& bsZVWp^7T&rn;ն4NJOKYR7Vq ޱDΜ܃0?)wW{Tf; n_χV<C^+YY<6ЩZZۼjrysPW:/'MxCMI%,z+LfBJ3qeرC% 3-< ʃy`ouaWYš${lQV-+rEPuvV/ʋ=;5Z85RcCvtԾqk*xsG"zu,-u Я١&g@aΖ:68p@{0f`Ln=L 3$qe#ɽm)f7 /lpr?ko˂NIkgsl?M^pߊwS,?Sjx_:9eYg9)p9B^_T{ziY;eWTM':mvlYx"R ncTr?9^cYvv'=4vtؾEyuEd6!)Z85aۚkV;`b_n+\կ.Nc&/]ԏeB9rۏTR6~c|z$۱kVqKc1`|?n>4A;h:EDD3JDJ`e]QY$$qVY9oop_\õfh@\rCr<-~*9!43L bWU2{c;W2kE hS$.*ʙ΅P3Gܯ1[gI i uB/''HR-Dqdh!R¥Suڮ^{}s83=eӲufgH==+”3 eA"T{0}'iu!rӸ`LL] /*eq:.l._#o\ ۤGJ)m< py}f\msV2bVG+h_nDDD7n,‘ICvV &pxqX3<4kObLb;7nWJľOzQR;%Cr@c3Xn-[\0[#TNHgf-M|'Rnm!3|m1zVQ\{D\ݩ]v6BcHJV]MݲI퉺ڥv/.{ w<$5Q4C΍PV V&|C鵓NFxU}k2w_ӗiy_eo$ 9߆mP0qN n[cӫOә^߿L[Iv3]DDdr""P[U< Itm.%a\!->'5?̽S)d=߻$lㅕ.}zǎm!\!3wX~iKyEVqgh\*"ԷTt|6@(tJ2تvG[u'%I=b1QPctM풭SK-Ξo/U0rb/~>6#'2$ķ6봣vnxWE6'hЉr]j|Y[\Whmש եHwEn\Ο@ɐ8܊Z*{r5|ED]kX|p+gy~͸s|xmU R*\A\_Njk ?ZL:k奷(M0jV-qyypG W[96I^N9)g\Ʋ#Rӏrd3KnW[ɲE}ԳUMgx\|k Fba;!WCNt'ms唓x%,a66 !{,w=vav=5&Fxo{8<`qt>_ͿФTzTЬJ<gC^Q{84<=.77#`P=_}~D fg}}oS?/98Cn6_o>?۹ եHw~ kt/,\/])&Dpv+3 (eC!=; /FѺ([ xBJC1qb<o"FtB+u _ Gl⣷6ZR7ߞ704'?[G>,❱L2>xq /'6y=ŏ`_S/!yG>ny^(e~rZ<&XZ^4Qj&![~&b}i .CZr1}N6keЕ>ynjL稃4-nϤߙvavì.Dkxѕ<ܲz ^jX%JN/B7ߗS1^yrLz;٩WM8ѵ}Z0 r*|p=N]®?s@ײ% ȪS!"@bRV`6|>v)l4ۭd2lvOj܏(I6O-qa7(-⻩9!Av gjs,v!zT&VpXH פz1O/r}`9 ¾kTHDDD*"G Y]̮"O"H%!"rhȪ92i#8R '""""""""G DDDDDDDDDHH)#r"""""""""q@NDDDDDDDD$ȉđ98R '""""""""G DDDDDDDDDHH)#r"""""""""q@NDDDDDDDD$ȉđ98R '""""""""G DDDDDDDDDHH)#r"""""""""q@ND('Tх@G{.bb] À9J-ʄRj WtYw#_oDz~|Ε;DYC\Щ> ^ 4d{9drVY<_]VDDDDp@NDHSZdKʠN8]F$˟!\PDQa!!9CbaOe0&ܕ[~7^|Kvm8q#l'p'6KS%VE@DD/=>ȥa˹32|.W+Bf9X|#<]x𳏘kϿ?=ǔһTr""G(7{@7,3ꉊ+V큒C8ig IDAT`ȣDDDDD*ޒm;IL$yTOKB. ٔOoO)>2Dt]ns,SRjѦ|pObʝ|xx^yqAE&"F\'|fԵ$\ge慳af -d9ok;iv*KNOO Tf'_Vcz+z,}Ri=վ;sBraBi \Dvvo6 ߾][QZ > &A\}jsK׶=|^.sJ R\Ѫ2M 䫈H%r""G(ihc۹qm2cOV˸ꊪX J㸭iI+36zșMjcқO?!'c.î/# sCY''g#mbųzn{ٳy|3?5v V;2}iq[W"?BӦ>& 6Iu> =屗0kzѱיT|[-f8o/K }ާ'rO:q#S?|{{c;Һw|w `޲>#7S2jF5.zNȰlZ7vn 8wDm,c[@ҋ>w>y7m3m2n2|y݀"""""G r""G*X}\7^}"}6ǟן7:`ہk J畻D֧Op-fO 7&եn.Y<4NџsC}p絊<ÜG?S ]sRی~2מG21捛@6y3q˝4f`6 ^s v89t]Sz=}ͺP'O12?^]y) 7[\zQ<}c=u'wO,:=sv7@7ys^V{;:+yYГ7Җduk}'fn0i{@Lga&""""R]&ȣyc\ѵ|؞Khߍ,gw(nF;khJ޾V)o'pŜ]=J(" a?1NĶcƗ^4N*\6~?9wφd͆}՟SwA"S>gڒʇcra9D|C>_MˤN\}qGͬ~8V*C7˴cM/&k=)O8AWr ߲(g׻`\ɞԬ*""""R]/].cXl"93_͍i7$?D'sə:7hM>xnq `3'o [.#@BBv9DsU~ 6曙QcvnMκn]ĸo&Qna7SwC꿫]/I x6Qf~;i=%Λ6IϪΝ<ȪL&0J "}$KgV5L8cb`o#EZ9~}>36YYJr""""RhȪH%3>5O|U<56[<7帮I$0nv}>!UvTWN \7#fq[);tjA>L^ arv[tPs+#񶿆=ϝǜ2UxTLO7Pfúll3j0|n~S88hU᧵(r3ٹ }~zz.u9vyj}/qHصP"""""9#VPGsbR\ )9XnбәcqZ%Ua+#ؕt 0|l65󫕿WQĕ? &q3]s^{15id'n^ɪ|2Q*|ߛ<&f,KgV uR2_}'~N+80hҬWS7+Y]&n}N䬓S|+:\nC*m,Odf4KBY4DvIS~dȉbs,G@ߦ/Y8O{b5@#r\$<ŁrǕ;g>]}iN(e\MtjF&/Kư!딒KW.j p1{i'7l]wǃggv[0ɀ70g$s<~zw; ?VI|*s݃.OǗ "ڳiS͏i{v}&<CN+?_s '7JŌY@͒ݜqϽ3҆i WO村XMpL@_^מ >, 4džT* DDPnƉ\o1C>_GN$X>ro/8.?FՋxeh6) flɬَ;5$]f&<|ꃼś^杮"R|Գs>\ګӔ.9Ϝ˙]J=&25{p;/Q1ZѣV&r]}y0j]q'bj|C->z R<4Qٳjy_|eQԃjTht0mwo竩 xA| RFzydn+ {闼 6igjڐ\OFȉHe.nfSfoW__i)S1i{.yYCŘ9{6>hLq&6dg'*8""!'""""vh Q[HMIIyˬ0 N/,*ɧ29TB9PloE0gƏ]9@h_{|͛oժՋмY3i&#~_EM80 !رy^y|`ɐջ∈>( ukߖ/1+8r^y}0o7\nڴy܂),,+|Ŋ?//(LfMqG:0*r^WF5ʪ@Tժƫ/S^=̛t~Z5(Y[sƛ3oZ,gUB~s &йSG.Z=sIIIl۶-EЧW/z]ZqJ.+Yc;ۻWUoEl޼`0ȷ#G_o|ݗԔ6o9s8t8R8qkFӧ7r"""@NDDDڍוq#zVZ{qõģhr.Z @AA}eqe;|1t؎},Y@.g_p!VGȻCޯRa$iwn.""'r""r2M93~bH9x^nFnKOOg/s%Zh]XE,n][hؠ=Sb)XűmVpi\eԫ[ ~:9<x<zcVs""">r"""H[ŐVVVJ"c~=4w^4M~z ߎ]AKjUÞ9ay^xbYVI D""72ct IgѺU+LS3H r"r[r%/"N&!kYeאi[ 0 ILJ&%#YTU` m1¡(yrҼy󊮪Hp]ٳge-[O%N03gDhڴ)guIII\zCOlfaL:χaj|.]@a&\W1 0MBE,=5:1,0`xc֭[GZyT$mN~~>G gB!\`9LmV/5p-ȨAד r5q7puಫ/׹=9TUeOLaY͙8d_E~~Uʰ+j1 3\Hڇi)o]Di\30M@2KoX|Hl6lb;0)ݱn!+;Ϥ@jl߹waԵ&VycId#<0 =b{uug|3qm.v!Tm3tнYz5}\|tؑc2}sUr 70`y}qXl֭1GNN4h`~4M֮]{59|U ~,^P(D$bؑl]+i`XljlӒ.^ \9;Q_8K'}Ǧ̞,Z5ӱcg"F}!f<$__gˆO絅Q\âpuÊeۚ%,ߐXn)3-e}x!!a_Sj^v O3<^/Ob.|9FpwPo ta6S{EDp6uTBu>ӦM#--}bY 4 ??)SСCӿP 1Js|jrrq&``:ዷ|~Uٴg2>_ù3sW7N'p9r /z˯:_\M=æ""r4ظq#SN_~j %M6 ۶9cwzR~}OζmHOOJiӦ\s5_3l09眃FCVE`6SNͥ /_~D o 鵰|^, [xRHKAD &$~f  o㏾|> $Aq^?~ _b2@&rN nwVK Hq~YKKNi$TjƱ6Zia$}\"U2<6B> 0hU A_ru7i$`٤9Ǵ>\Ϳ?п52^ Ƴ'1 aNq`~ngW IȢɱ'ѧL۱%B# 0J8l55!+# %J:O>W^jS_%2L`ZFlߗHfXgzp2{r{ oMB㓮~'ӬZ">_25Z-ͣL~~,.B* ins&7ٻ?qoر#5j>ڵ믧v<䐑QEYYYwqtޝ m۶=y劋INN.׹ED$!'"G&MdҤI_;cÈsy}'j(x U7="p%dT&-[1L;f Xb%K^9k \lρQ IDAT å^-?-a/|EY0[9z/3.3(v S; (i gu9a9-&|؏@^oN.3GZd#r|T *hF'>( ~Ϛ{[Soep,{Yϯ9u^B^/$Xɳѭ+1).q-9s~XۆeUx ;i O_ރna6Kٲl2݇L}}]eQ~ei셣yO ft>^3?=ƙ?k&0aL}4ҴAYp!iҭ[=@ժUWK,!%rJ,//kX@mۤ YbM4`ժUضDRR9֬YÔSXjX#vǶKn# c3j  %)I&8ԫ]zjQFM֭K-E*)[H&y1&Ҿñtґp^.sFım.Yʏ?ƍX;M;0Y?K&OCD^«<̤3xT/_cDYٝ?<{Y-nf؂,y {:̚-iYkWWI!,xj S-ǻ[קK"'6fH9qN_5l)/K-8mW+y/KB^'#7j~=^̢)sQ=y]~yZo-0w_^O]1^|׌n}y. gy|vS[Yc|"&nJ9@ǎ)**b,_)S0c teYl޼/`0HFyX,ҥKYb3gd̘1ԩS4,ˢcǎ̘13gdFE˵PȑF=DRs{k11Xt ֬ZLz9i3f0vx<U Aa7׶YH|%ss]R (vD[Ix3ዅ)SX52eTNvy[`1+ͥn,]c1zL>'nSfALj^8G2|f ~'.:9JFnS\͚ӄp<./Qn\17Դ4~3%gч/\PHQ7l!>233n[p1H>FjCڶnFSOCn({/,w9HֿykШIS6E1@mZ9zny1W-gL0v}8OŸֿm+B1/ u*""5o޼\@jj*^z)#G>  riѹsg\eȑsE/6p3c B`f͚qꩧxӵkW(ƍ#ҤIzY""Gr"R͜=kbDY5k^NBn65 À̪IJJ,rQ΁0J9U@qq]961Cu aS-ċ/HÓɶMzOnz:~qcۉ,W͛G۶mI]sy|yT/}l&CFw7RQ 67Rs;-#{`{,~.9S:{ȜpћICWx?9:9JxMfo\] ҫc 2Nt4+uusO/g)a-ncoOjT1<4y<ťcs y'"r8 &"rȉHelތQTP@ҥ`@M>s&ٹ[HEfHL @fjA 0H1 R1H&I"cH!͍ bNµm('B 9 mrf͚ K(vlrsYr!oNW2܊Mcqr.rB]J&ѼiIجyۯU-`̝=<{tWbc`5mʞe}c.كY? _b_[>4kRL_Š2}bj\:ބB0v%lӞ_˟{Pu\-[va9ooūw:ݛ{K^o\å?g,=11k#9)J|4mu1'%L6&ݴ#$ 6@R;3Y4̴n$5Pɑ< BIv2Ϳ`r" i`k۬_;fc&C? iƀAw96/BcOo/#EV'x_Xnx/_О&Zr'M 'mqm<7f! AH'ANzb 3IZ2кɌ=5kH6ҜZrYq=95g#^QTjgC$tnD~1o܏~r ܽ("QK(ޏFbrXmi4pC=pBchվ:"ﳈ1ȉH8c~ؼbyIa܅ 3'ǀ(IIt]1I%)&Սbl!vэ jI$o.AQQ2u&~_@#o&0=g;?p_QD| 59~͔Ohnjg>㯝`z|$eԢI94ٿ5-i, V *uZеw [&TVm=l(x|^VІ$9i\J<&`57*Eنi>| &)YM:4hwϳi_7?F-4/K;_ƒ"g_Sq'sLT? ڞ̙3Jvq,yl-+}\k‚*d4jr]K/t Y0jd./X $4lFдH$A I)I~V"[zX<"?F#?.,XL$1cӪ&| Bg#Icr7fPCl_V9_<#-]1\t5Si"""""G YJiX|@,?O,eXXv񎮽>7ߍs0C{b}>X.$ś21C$Z)ۑR?s<> ֨; l%h i__nz\je&|$UO7yTWzȉH4o<ر=0q1]˟T2ްsz,b~Ӄ/Tp?bpq!`TfcYQފחx2񧁵q Br|..sͫ;l%!GS]EDDDD> DRZr%IC-Yԁ-#cbu&Xx|~?Fx+x<I.^<%Si:y@^#bINۆaDمxccx୒+4LpbbQp`Vi/1{:(,Ĵ L׃i0C1db%V]p-[*DDDDDD$ȉHd;m:NK8.lH p0mvv!l`,+jaX9@gbF<ع2u@ynn[f ,L$ULH\(J)992 g1QRĊ"A!10 Nq!l $2pb&FSohAqۜbb7 o!a{^*DDDDDD$NHTJk0M<~9@āhM$D%!a`lXq\""fcdbD@A 7 wu#N~6N,L8J$l(jGc.vq.[l]v/ x5kVHH|(JMD9 E\k\8.Q%f@vL%RpVnvqSSL$g+[ 0p sbfYQ@(s7HLI,"([v?9mۖHӲ۾E"%c) (D\>\ Ï[891c%D,dD 5z\#.bbaRTkYӦ9LTJmZ`[Q1Lc9۶sQ1K¸2(R{ bS bb\"Q-01˜y%'z{ l8ļ1\ I&Qf F ,-yQ9JMTJ+*0MILM۹NL"e[PPd.EM(Z@,@$&we$${,(]D?~ꉜ;˝gzb "R{]E_QnVN9ܦQش(5MeǦPEeQ(DY(R#nѡ=aLʂyYo.4ulf#Ə0s*k׮c…ܹ l4yoB!)]!LJIKNe۶l\+%" eA4Wc((T,f3} yvtDx| vB!ڡ$54N1tU^GOi$&&s"B!8FI@Nqֵ  qGFҪC^ TA CSؠTh"lA4LЉpX6t3Qp8@`$T|hx,EiQ X5Vkص֍h<>/aM.]۶m> ..}atR^|E!>>4R|7_R9r$-Z`ѢE̜9׋W^ 2~e1o<.\Hyy9111L0LVX%K{mYseѢEx<RSS9hӦMmذիWS\\Lbb"C*ɓO>I0`EEEo޼yDGG3bϟϜ9sE_~%L072g>lRlݺƌC(bܹL<ZlYgd̘14v O?^4MѣGeh=B!G' ! O=IFj 1|bHL&6 –"dPCЂaY-%.VN8څe0M Zc4 ف3V%MYaK߯6)lt:VWQQ ^u|GՋQF駟*w_Tuu]o08gٸ ٴiW^aС 4Ye쏪r|8~!/"OЦMfJJJB)ŬY8u@ P^uYfТE ~?qqq 2[rѻwofϞ %%e˖ѣk-͛ ,Z"ƏT`ܹ3s!--TgeRSS1M<\.W6sEuZlI(ѣG,`C!Bqҡ}{>z-οRҙĄxN=]Vc" f;a%&bw"Xk(@ih0HV(x1h2Zi3O>IV= / ,o߾\r%bYx<RDGG7;tFܹs_0 (9p\,Z3fɈ#  :ܹsxߧ Bcɮ[h'7/^N|l Y-[ikc58sK0-+NbGgIQ \6"HB}pQJQ\R>܆*+_~%;wwddd`AZYB!D׮$eᮆ(XJ!`p0UCyTuQm!'8&$'shb:kCMhDvoZMNj|nBJb/R;Ϊ WWN#]rn7`"N:D4 z{Izz:swW0`Ç? !B!802CNqD9X3jZju7vàEzΈ4MC)_qŅE-+#H7ѱAtJ " "SRVfosNQJQ^^N8tֺB!Jf !!'q]25gO>,@LtQqqiזDbtvp`Z&>rr"vQPZ^ꫮI'kiO׋B!BqI@N!kSNᔓOfM|ɧ̜=(R|i)ɀna:^"srٕCvN.ťe 9ec8֭nB!B!" !() ,ܼ<֭_ϚuXaw줼QQQnْN:йSG:@rrB!19eUq)BqNZj*irɇ:B!B!FB!B!B@rB!B!BRB!B!B!B!B!B!8$ 'B!B!!$9!B!B!! !B!BqI@N!B!BCHrB!B!BBB!B!BLA*++,ff-M#{WSv2_W*6-+b/i*lswfm_8q<dlM1]Iy)(( !+Ĭv"&2>?rkI_4W#Eݜ۾sdಡN|`%a,n?>OܗzOi4uhmQI ~-){'MI7^o`-c{|”}gP!ra*HiQYwWهOzumF𛄚Ū;5|SsIq$iO;4o|wn~_ŮNm mnX/ߔӬwuL-;sW6#_̰Ͻ302$뺕< ZK,5rŴp3j^Pkl`rbߺaOm^uX]t6KbS+ll!v+ 7ob_^e7g]x9^בoMg/>OWyY߿JZ-]<+kGaV}.K½SKa<'4PRb{yvu&W~=#aUe|QoNO;$,-*&ÙК&q^֊7.O>M?yBqBl2aWM'Y{s/¤Wr(в2ѡwnPϫ1tAM/0%0Ľiq!mFѝ'70"VIC3݄ |G)cqƿx͜sC[9 J!B#^6O_Ėr)srDkAf؉'_UG<&+ )xwwH7j⥋hॻ>PD-:={#u.C^:n)OGswͼK圖Y xVd0on}\;#WmȌU3GypjFoj7^S9)';ͅx 2繪 ~zd_w=?!D::}?k*d3i%X=N˂e==+I8* ߱`v1b[3YL֬!)ξ?ݘMqN|^ARrVo36l#KKƠ֯~8鑳hWws2y{v e,k3 rp}N'h$xX6[Κ9^a]X.8=۫ߟ&?ax'Ƕ_':-?{~-΍rNž:.']Y{0ᄚv=-]ʓϥwneN>' uqrYAf=hQn};s(55b ]FWx6uyvܗGvP#6cr_=مq6 ;&5u?ubu?Θ!1=oy\"3%SV蘬濼S7[[Fc#mcZprzLb]yQ^x3lS] 6y+WE9QY\?U=A6׆9yfRϔey;z_XNHEQ+VQW+Ć슻n(͂ 3cq eXU5C"~jg􎬨wskKS浿:N=08N ݼJmǷ.r; mQLI() _Q\;9tX(G/c%ywEp){S1?msLEjx Jyl&i1N'Y 1gnȤڪF}צ@f1XMJJ̛Ww9dh򳺨 =%yZ;)Cv+OE8҆ Rk1su8Ef|/'/]ƌMg'3_d L7E|]9y@*/qB!H1'~ʹΊN4c̀N}}ɮɓhesqQ^O93C@}ăYLĸjD4/^}|[U z>|Ƽa.?SR~YDfŌ@!E46k0R5*r_wU+tت[Wκrj$:cGV88kE"+JLnڻh[WV#K"w\f3:mO/1~z7ύBw;nf2<q7o5iopߍnNlX1{CLX[Kf3 jd)'q 3t.85ץW;bc9|ύ\_kSon{*]m6w1y聵R@4-qqmSهOW׻'ӜZ@3S^߂t26\V PahFT'~vδi9ĵ_1ֺm;l`0aBdf!8 h5g]=0fòDsZ#>YqqؓAN0qHKBKg1΀g$1-1D), Ttts33flċggr@tэ16x@5^N7w+sq 3SC~~?^Cf_5nX#r%j-g2ܧ]ťkDODc6C!T FF:i "Eqa1G|t9[Eݦؖ٬U]%Ca$F? V3KX.zjRAN4ujKs]oTH7ݓ4>R79rfl0qwNfqsL䂾nflk.Z[AyՖ榝) Rs}^?Tjfڽo+:Y>M܍~9M᮲>.:эQ^ƜFzPi6zt$Qߛ[`ލIc{I^`93֛8;'sazSV8tULaQpc!8H@N!::ɩV!yd%14m$⯿''jԽ*V 6[EG#gTq!EDȈ3Oƹ;Z3ʛˌS| woX )kb]de"UG^@'>#N` -#''UV-|#ĝ4'ׄ+a"ht>UtBp^mHw0=;4~t=޹oKC |`b<ԝpڞE fO+kQ (ٚߟ[ɉ, iT~ob|-FLWa u5c*L~yu9t(|5cنۀMcc\kh{)YCnvhbvBdN]g[p=>eYzS㥑cGSa _o`QFʘ](sfO糟tpݚ8ʻ* qI$ubF?O1cSIlz\ E;w/~zl2Ixkޕ'断ϣ[:s͌{Y hj Å7sW*_o K4l$Tka%q8"E۹\66UPĴ9hfaP~NP/Z {% Wd9xNuyCcj`o|+JKC:՝6 E^銼f#D Y1_Z*Ҟ}ɣ1k2Mw}kmEf97TX`so"_^lɱ&NsHjB XDidvo;[_g72%eh%L[m|pD4Cњw:q 0陜tR&Hat?.WSy 2ٺb =_ZB+_yN2 G'DG.΢Kgt۝~`4$ĻP[̡FD >N<˖׶/%.C8@2jy^X{8n͠]Ya?N,t:<.>P+b/fd4'g 0E8ct[ˆ{+K}, Wز1'lIu{˙kյjV.gzX8qH+n)%N *)7"tk0lD4CQ^xbb9Njlk,QmOc~Icּvx7brv+U7h)VBv||92#S:6pS=6߇IY:tLn8ߘ6izm'K@T;CLhUy_n]~`cbHzgjxuq=f t: !8jBq >M~J|5|%wN>R#~ܭL!< ZkxaxCsD<~r1gw^-\3%CX==O$OC1ĘKƑ0m*SfrmCr.;_EɏsA=pADw]rycZWRsfB[s73􇸤M-Ѽl9L;A6-}?yOK‡fꐿrש .v *3 [N?O[d~W%3a?ye:D0?v5HV~->Mӈp 3{#εT IDATxv\X£o젠[GYtnao$kL>=ܤ!.Ic"6.2]ޢr_eb$ieu^䆿vL?/Bfc3Nj$ $qz%Z*/e~皬w&@ڧDHOft +JR[:8w\<g K+m}L83}OctdafyI:Ǫz7ݯٛٞ͢ɣ1kmcxMd.dۖ">X&?[T[50wwdX]g2n0\ 4B>fB/h&ͨ4fz'cEŶu|V'Q1*. p+2EɩtLJ \F>=> Lc,Y^[$גDU\@wrDϝOodݠX:8¬φc|' ӅB B#AtOʂQtw OvΨ= ޓɷ㹋y n5?f}Wcrͅ]dӒ8ѽ%Qu&[Ŏmil&ё/?/''hi_ oSo߆XC@pgwaJq{| :Q^`_Kn)?M'|1 oOO |h8R[e=Vq=oYyѿZ(=GrV͚ޜyb~w]')i'&p^{X}]M\WJV<U Wqa,썤U; HL抋3`MsyIAp;1ƥM&F椵[#wBױ3SyZx*fa~'ǧg)Ѽ]/O0:Y\yaIRJ'tkͻv5NN 6z\>Ǒ!@ !èʿ5?4Aq,ٵ} :wq a~(gW|¥Xԫ3ͭztBˤh+H7gVie|y謓?E޻o6&nO[Oo-ѼX;8(?3*M[ə3l9icASxmXJ}8Ox|,y9끝iN tc1|5hGkW2pWCqpGF,@p0`xX5ΣJ5_1Bï>`d<*<< yDG.~}!{Gy"Z{>Id^yTEz=M>Ip'u]|=u\1QN>S?D- `Iat>#DZ:jkj q8~X> /SrB/wx~:զ^vlFNKj6JpPG6k+>V=Ȁ?G1 F-_}w/W$7`' t Ubbrjmۍ.ǂدPPI^Q_c9(I(h Z NBDa aKa)t ]'m#( \|$:-d`9T3$ '8H@N?:i* Cv!u$0Lc6v2#o@@\;"i`;o*9!" !a׎H;uBcñB#܃G!B!BCHrB!B!BBB!B!B!B!B!B!8$ 'B!B!!$9!B!B!!ᮀB|aR:B!D4l6nq# !zj>zyk ṊZULJӫTQjm2]Éi eX b*GpUwtpڰAD} 塊x1u N4ob+Th! Ҫ7AB+ˬlFj4%9^"iP wù DXQvx0e3%[?.`DltaŒ[NX 㺠I706! SpM1ğUg%'ىM|W̔iv~ETi4e=`l[\CXrŅϲc8hAE"1Iq(hp/ʁ c*d{%i7yc[@]iZB2rsFm2 ^m& { D%ƳK۱vX"\\:* X}{aFFF+4+4"`d#;Bi 3o04,GX`U#qc1'\MH> ~; 8‡"ªTw`U?aă#q'^BRPr}rݪk>P@W *1Q5=5UeVoU]seꔪu̞}qղʟKW'kiԬU]n;7MɧfzUP TwSvzշVm^i^{U[Rk'%|vPV֮Br;zB{.X&22r !đNrBq x^^[~fvh+_kziTw 5ړR3'Wo!izeeWQ~Tu ݚNe;7}AfiB`קCf"=&PnPcT4^YbN8@N=' 'rw@D"djX ך~jclx]h򃊠+ۨ5nb8B,A{u( ,{hK% P>-ihvKP2};zk3*jRg; XX|7) {+2v6t[aEDAeQ1Hʠ*bl ۥaz0+i 4,PrWi!P44r9ʮPn*Ԛeʮm|bIPi8Hq9HL 5")p:8 ݫаPLnX*zDEQٖ M6!,6faV.,!¦E8"cjPhF`E.@f ;.MMA 6`m(U(RZYǷd)Ru aDzl t!` y;:@Z1ԔìI/"%Cw:yа%iDkDF h*=aJBh蕡 k[U꾭qz_U0kk*ZnUiz \_CثJ/(\ j_ը廧UoK͞ꬹw^ ou/W6՚iM/dV_N~~sWpMp2SNqԑB^/[̢y_֣̑ Uͪkx=՞V5M̫*WUVa +`XBh8u ci!vEQ]Kd ,TB:ulF,v╝Ù0pL #GDܺQXР(n(S'd3Q?{kKrުuۗs3wr8P$MR$EEt! a% H0b˖eKPДeH93/kUCusȱ9~kw׭ku=[ph{^|8 %S)Cj28̧tI=Zr `Dl\Ng6h1c+b(F.vfK#pu7q3!DŽbF fY<30T-;P(d)8ʖK b@Ր r-3%ZETaGav3Zq ZfؠLqd#3k;\2ħ D0s3#* .MMg Oi-2%h D jݭ<@mXN")R#!B.dɫ|scob'-{/)!a2_f썅g_Rg\stcvngT7!yY3c%DUZ܊$gx[͸o, f^cxPkػaq1iu{5=;(n\ k~ص$bbQhbV m4_D 6o|gF7WSmy>i∻v8>y]iF;9 )֋XKeߺ69^o܀>v {?ѣٺwכhi-{*M舱껴7{ӵ#Dk&ۚ¶ӒuO[0"Q}Axyl-L;$aYtxn(䤠taE8hD"j*C%z$s3.qgUxG=ky.GS0͛ƨd3K2 1|ڈF#ڙWBWL p]S$bog4T8w%0u:2<]rRUI *KbۯfEJɢH &3P[{k7wHRy`΃E nilڻ*fݒ)zeFv( :C_%|ˎ5p5OYq t>sBm˳ػjAB*QuZr,:A!)Rkd&D\pݽޏ ,gEfghk$S S%{'kz$6}]4w]ouGn*֖\Ӿx唍ON)7ϯwu?9_=|T1r oǦڭ۶ d۶Lב椛idߺNi׿;6!Pʉ־Z ezXv:fVP ȑ"CA!5q87QA}Dճ;3װ9KRD8Kg Lps~̓+Y2{x>灪8fʜp!~>+`8*/\|eou*o?}? o?E2K.Wtq‚|po}C` |Fa%)"^Ѫ;ǔ : dkצhi騌%-W ե}ͷvlϧk3_{;w֕ĵjYng= }'CЪ|,q}р `>趗ES{tA#[g\#˿}Hq兀PQ4@֒s`-o\wZHyӎSP5&#mz)}DX3 P)jH]Ld\A,@z꽒-:>@9*H&pu2qxOG *h1FTQEE FYZh+Ϗx1NJ/ہ,KY8O"*tڥv5d1ct9̹roQ"K?J ٓێ[@Y^{݂dq/)H,; FH=lǨ f G tcFRN1#^Ȏ-=u0{'2.OٶwIi27>/)Il!EG=Bx|(&Ó^j(5Mi$M0F^x>:9^$w~9ﱴ*(kzMYt~]߭Ѝ]qMn߬U6ro#Ng hc  0#'yL=x>AN;8.ҟVuJkD59f8 P(͸(8VW`;Zr0 Dd.rOKx)G{@3kRN(F}GKCYO`+@*,GkN23#d땱5ɒpg%>ܻLxzF.W}\Om׭0"40+R|@ΘvNi, kkF2S K(nk]\#><6?VTBm7%I Sg#!zenY.D |#ןO˺MR=۽}>62 0㊁0`%ȽѶou:}N;[oMYi}( !5<(@lZ ׵ )Jd[2jHZCȥ)>rT`2)TUD IP g9,BL{Yġ˚(( 8*ɔxg}}!PtBִ^\7'?29'bsIEĦP,w,kIMC6 UI9u1A1H012ma7~;'ic}*!R @aĆ!A I!gH ?++?xс1mQqi꒻~B="pibpY$D1p af)6%&y lR:xk(&8jj.QKF]-@tO1HTlm1V,#q_W?͒rpm$u}0rqH]>}^G/_YQVC}ߢ &J"A ?@]omf$¸bʒO|f[ṉA +rm5-Ѩ0M:!4*φi8)zTZ'k-}ymi'6GUs\U?q3Ymґy2u;MJ{~u1r FdHIƹ͟ns)kz׃6tI橺ʡkoXDfCFrԨ)L"W2''!Uew,X&ʩrT,֩lմL=t<8aL<'"rehI`,ܾ /`B)7 H9|~r=,J2DפIAڲ Cv*A9SPSڐ 1`$CrGl(VVJB{aMvBFmՀyqʅr4TL0 W.X` "Y2eݣ2e7z}nKOwDHC[2rb|":R\N4LݤQ8 ݚ^O>e]x^{uC h骛P*LoiTS#Rm[)Zg?]׋m %p6Z14}U\;Ic+-u^ޭ{!\mmؖlȷi2.Ϋ{$IKKحL6Fz0.:I M_q}sm<9U:I׿ TKIVMcwR@!3!UƟ(6Hf1S=g$3Mgㄽ2ީ^dd+T5˅րu#ݤbe3|&kY$xsBhr"0gu>܇e_~>7b$ӿy5-LSlVO9E&T(=?L($Q.i ?2X.mrB",քl#Rϴ%(\fИ7D`4 @JԊ#]h1QB},66keo,HTT̀H<Œ7_nija=<R/Qr`$¥2"5u3B%wa >BcՒpx'i)G HRﵱNAON7\R&g)=Qdߣ;[ u#_γj *Hf/bj7SRQzL"UdNq˨>O73?<=qFS;&KB aK6M@Mdgg-ڵ cI:q=Kr@{bmRt962| x8 Dem͜aH4;[`d4F1f <vxVD9uojy;d6~5EY&vI7&f A9Qqn\)pmϭjxG4Æqo5 |ҝj¶{Vٙ|-EMBUScmS}x%ǓԻ> W/0`!7`kEu1UϦd㧏NE{n.fi{mmd u>v LK;~+s lMVQ9S\1M ,P)"V%ZSH@LZ.x<1.ǰ2 #SiL'19)K|ŧ5āœ{j>Ê%`UP,MKDEn,hdِ& ڣER.Ů'"$\XwtHQ6#p ȓUARy=ڠHR&O)B+`jRi0*n镺+Q;u2 -6P*DD-"JacRP u5O_ |/ ;G9bH DbQ.⭂FFt\gUUJQ5xȂ!Dʩ$+ s9 j;XR?S2inc@_?}?uc (o97w߾5a|i>abG*1OoeZ$}ϽoTJqr@o9Ued^ TYm*Vaw $k6k:WrʼnVz׺eL}~:%.i[kϦdLkfSuՕJ6DbO.E5Y[_ S&Y qe*E$0,u@rjx&FPT-1l#)@G"dX&&'GU)j2XLRǛ.$Өwo}f:E&D,N!J[=*%x(\UuOE$:eth?0 Q[SvHZjE4KmΈRȮ9yA,-ݚ٤_]|!P;QPϗ¡jEE4"ʚR0YfٟZQ&>0( ~ꔙ1~%OjF,&6F&0EsM0F\sG%M!6I)"s+7 1F^ɔwck#rWˇw_^{[79CmMuc4+P=;x7~;o,p?ouy=rydbG:$RGACJ{~IVsѬu)GSY/H[΂I)v7ޚ[ҦU_ȸI΋vl[93h5$Eՠml<ϛGO=?ы_Swvuv~ ۼ>'̞ }G yuޖ% TN·*ȌY͚ٞiHM:%_Cz[I!)iR[mH< ĬDVA@hnmuRxr"LF&91-p"X#Ib1󅧦d{X h0ģ\22 [wBː)q'wDZ/$HCmn,7X՝$9oÖ䃬N`G /)WO >aa7F?N77P)L) (zcGJ`r!f\ ,DJH^(LZ Woxy2F^/7Ybl/ShCj渪yn<>B̀35$*Y[BF㠥?=luPUԞ?{?}w{~S+qL#jYTw Z0Eyg^V<';r%u H9Rgᐐ-0t꫆XH8(!6}g :Q4ϓᗛ޺|= u~G{6k}KHf½>nBk=7M5A]w ;LuVTPɉ^+9vQ .!RL=zj; 2L5rO=}Sȏ%؈]RTN{5=2quHȬI~6)"#% ό3p￿GEvN2B8n3"i4Ofvd ȸD_AtZt+urYhRnMGϴu>ڴO>ْ\Z~>`jcW\7n+ ~M'~on{OFxZ9lkgֺt 𫁁0`4:}&qybdz]m? BT5!VJ@$ہ{"p-Kp/y1~Ȗ9cg5'QB##T>5J0:!j0^Q#REGKֶ7Eq,R3ώ˗R+*o/',N(b919OVnH,bN؆KM$/<4?OHbZRSbՏ:MO!QzDIǍH?Oq-(К5+)`;vEJaW&*Jl"+5j`**E-F e鸳{.gb,Ǝ4r8 =+\AKf\V~OL eIG'9~EG 1_PK$EtY&-ڎ(!HREI^(FqVtCjÖ"⦎뢁Z=ܔOђ9|ts"pRDfޙD([qE Ƃ|K~DPS͐qI484pz ŢnE϶ϸAx#""Ivw2u/OKޤΣE6! f+鸞+$6TT_e:{]<.J5[K;[v}Nur-(l4}В-_n͎c 𫂁0`4o-f'Dw|g#Ow_>w%dE~g6b"L-hĔ*f$>uȴH"b5G^zCa G kر]F&[Qa[~RK[ ,LC̊j `D:Z#Mm|?qFMӊpf>!3w2!Dp(%W#%5[ۭ+_ri_UcDԬF@"zM;X9[i-qب!d  d7mh Tf"DK,]63i5O[f%blɚ~ŒSmUi}y=*H WGb4D 3}fa4ZK?e$NYWwy f(@/iQmU_ݝ"f5xMuB#4 {PHj@q$37ȇsyC'Ly$gZ2xNoݴڦ9Mju\g~)/N)k+~!?ƙ("'k!CQ?"R"bCt7 t=ZC7?M̵E&:-:αt|<$iNSTll⮥OyZUH=h`m JP清PH4x9E;iSqY/ʩ$X P<֫0\ruvM-֭w [PS" b0Qe9|Hq2Ҍdkk$g6iHF!)j7Ln$um+?cҐs)M G9RF.2e*}^v`EVjƈ4 9A 2^r[ybtY,}MT%e'fHDqQR#W'/_dP|_s1&ڔ\ddm*Hu 4?]M(i6{ dΰyCF/@WaW{^rۿ\0w+ԣҘIbu6A;ljm3&n4 T̘,~u IDAT:?-y ~T ƄUBNI-戫m ązuMr4/#:5>WыR 9}x\SqZxZɵ<tGκML +Κ)>uv.=;}ug+O3m>H#kg70`Bn>I=zdT_KVѧZ۶Oo6[3ui &Z(JMYÎ͸;vz/&W_$_r{\19tN0MUX nՏPEO]ԛja Aq sXLZdb#= 9{6)`E/<X9k) EEFw UhB`ю͒LQƵd6cSX%xs &J+KF$_16(iro|C㫌/[aK޾%1;7F2Hl`ywxKZxTsH]pT9ƫUa'؟eUP{ ˉ=xer_%bHy**EҲ1MrVDj $ITҽᄑsd<*1- Hi1ab`dYf5!ǖcrK\=Klo{m@mDEB37T`* L,,no0p"%sZi.4c׺UҚo?eRNpbUG &JRJΙbvL} 2E {cedދ^xQvpsoed pxEf8{|<^,}$~n7t}^kmo\ӅmhDcL$b9>5Q"xcFFP;%:8۶Z BqJ5W i744$T`'wL!,ˀ,"BxLBNb:;&-ƻbM4RTW[z@=]%wWog%O?kɋ{ے\gz,m-A AB$ HMP( zSU/zӃb0҄ '&D$HJ \F=~2KYwmsiAs7=JWYYk?JyYօU\URMTK%H!Ph"Ub)HA,UcƔ{!(t'tbbfL#}eZBgZ*&VZ˫016ѳ(.~s8?WZ"BvLR&sSrhN8np&؍yA1<SGE֨j.\@*"ҋ1;UA 鎲>1HڣvS86XI*71@o=Ds^^ &͜g♝R[Ppt-J2M{$ErՊLЩxM k#w\˴lf/PN'CJYQΪ}[L,JySKkj|1vz/-_LYE-Ԫv^ƝL3r{zfw-^w5iܷ3Zc5x`Mȭk?V+.N{?;{<H1pV`CyfꦎBLUK=B*%*d=Eؖ.mЊA6?$-DUЎBYV~4 @m(U!%ec/7Kr؄MCM A3( 7"xC+G+RJtO8>(Ѩ/0WȻ+D+ߩpj\aO7Vt I`s%Gx ; CqӐ8K"_|+Բj%%YыRxOEFdgĻYnt_ڋ(V7>Ll`EMesC q~d6I4)4ڈDMqM,iROhf&׬tx̕;bΰ&qVjgY:iTΪ3~|Zcr5-* }~E$cycp\5k o5XcoNSJ,>owM_og}[D8:#[# %,斥:GӴUԠ-(FU †$<,}Ri3䫓}|H4ULZlPuUѹ3T$I" 27r!o=<$ +P=#rBǹĎn9C[T%-qfoHooIY:rq[ϞQ\Yg\V˹`ʪPRyԹS8x$#|ω*ZTڒ;g e,R02h$T:U {#Oʕ!cs~\k1㷄I0x lŖ A YDr,F=Ǡ8@hB}0&wvR!'Tj^o'`ioŤ93lE J1,kcx(p .{hPc_p6+a(э80kT9#qem8,=_y)JP-ŧXQ>GR T)$'V )`i ĂzwmSv"IhGxA/soMN([DUd\SӊSgQW |fhRͧ\a,2jn} c;SU_5EPʸ#;lMcLԊ+I[N7Rx@}KɈ΁pWr$GI8R7GK!,vI-WPF|7{^Nd LeNlJf*)]}]Wl}K/ }3(2B/gfSܠ5'fFt5]3yBy y /XҍF0/8'q=^sLIx }C!]c! !/Btuq 7#)hN&=2#۹m۽au[~Pu^N,M-+6{uU*avf;[XXc_Xrk?X$N{|纔;yo\SϧkRN kXsf+z:CLsԑHm)%k41,ٹ䉲.fui5&/Y3)`=[IBu` n(jDOeJKW.K&3lKg ;ܵbLiqޒGqg!뛜fo ',Q9|B8by9N)6wH70E: @QSk!GVQuAV%~bޣxr|>J]1(&'Ԉ٭R'AA%oGSbeDsu똽ƼM^),'DzFco3VϤ$lË7|k2=E3Q8'#=Zd\lܔSJ8.Ts|cnOQefqip?"r\8p 6յW%*Up J@ ?)?T1u](9(<:R>Sf"Ks 2$)2 puZ@V5Gu@ȉ2=+tdɮ'tͭk=@NFPl+2-S:Wŕ:~am̍C/yhL\ǯּn2VBuZљ2+KFf{˙湍vMngm>yl!rE%qncW=NjBԚA YK1EgU!89 ΀l-A!'i'%@cO6 :D ;C7XgM]N_8"OrlAH ǻ$l}E1p!eS n/zIWOol?& uԪpGupњUZJUU00R D #Ǫ4V-%^,2Anf~bOWv٫r9ozLO3wh^KHC [ -k8ߵB\E*cQ}Ϯf"lۈOlwq(`ܼĀĠqñTQQCbUPlOXζ"ʠeAG;H͵H8gL\mL͇s3-KxBt? !%P֕C 5s-{_q9|ĢA)Rf/MM0] kwuUHkj3hh{W5uPK>ݩ+A2Oܭ*NܹjFq~tvO޹[ޡC.>-c<{)?<1T6J%"5wek;kBn5XmV@O|Bۺ\<|qVM|`!* >WrB nݏRNkyglacεZUMt IDAT"N@ ;ħ$)Dޒ%V DHa5{.cNRZeʠ`DJ/KʑT]Z!21ojG'AwՏu9ۜ<;@q;]ҽl8#;x6nOy2 䠹?r:W#}P)M!fU-;ԗ;̯;>(ߚA+UVPgdJ:"0pƎV߱V镽c$?Cp5Bu\E0'}a^nҘ3" -E!gV k?~ugoJ,ʥ8.kp!6#e2Ȋ@Zʿ҆: Z" %B:΄*<+<OpW Cp df@"B.rSJI05>*c$StʕZ  7FU1(8,Ɣg&LzyB"8N@==<2'bCP57RSͳ@șl όghs3[V ClT5ɍ0ŗ^HWǶ\ojKh4BZnHީw7ViN'{&NgY V+]׆k}ȭkP{Vg.fqYy՛gNsۥ&5u PV˹6xxc@^+B#u|s.V~AG<)JtMnp͏RC t$ba5[)Ic "YڥTCR$.bd<8شb\0x\d'1y5DvHPٔK63l; _E_CY;幔^BTf.}9܈?qv':pQ"~M+9Dgh&LAѥCm\E샙Q,+g8:1*ՖTd SQ\RZ|ڣ8ǂONZe+@:99rc}`x+ cam_rcip&8eSy TC^dh!+"^~+'>}OD<^}7]|zE`FZkWZ[Z/] <>4h|̓-Z[ǎR_oM)ÁPjOQF2 v`k<ъ P:H vXfcs /GŕYF'gG'm[ >.1D.27(9K2]/s""RW$lRfivͿZdUe-P͚^ɻm:S̓zJ;7](wwj^\'Rf>'+u?8-T d~#i:92up/ifd<}'oN kd 5XcjjHLR۝qQpzs?m2g^f eB~ Tȗ|:æ9O¯xoL mseg8yD{Vox;ar"y>o XtIGH+A&@$mA&ȱBQnmWAzX})`Ӽbx LRw"AהL6&2:nҩlpQbIFnf! -<) TekWPɱZceѶF0iS܈xa<1D||K ;/Ō^{d-ܻ@oC vYʧ" m]p筫%7/%&܎<AI=SUȅ:ЙEMR?&a PqǞhd_H Q%@'|3>rMZڈ_xj;_ǼMG6v"钹)5%<RFW?%U y"y1?Oɇ$ָtU|f v0͒k>]՜dU뾿X=ȫ)O2\գ5Xcw6քk; o Vgm8Me]*rYJ=KU&c/jV@8Ov{`;}3zL%Br{vHT O'fb_Āc]lqQI8 xR0oӳ4xc<<-yǨpd不#6.0˯1҂OmmsF"vixn<=䀓Q^{q.;x߉_>U~-j>|%cp; N.+2V@Y⧣1b+SjshL*q82(՘W%ʠ/Sl`k?KF-)Í݂s0g2&}y!Q"Љ=(}[p-qlb¥D%<3m6EŨ{/mi1#k+.c9wI+!)Djh;Fј޷e#=(yŒW"#ItNc%%*j qu+PG\N[!=8 ш`\SFQ:`1uB{[by$ݤۆ}kV VZ`HP<%G c eE΢HeΪh`kyt\X|R\:aeeR,濝AGU}Z1Fs"ܩ?/*{;olo|8]5ߏگƿy5X>քk;oqJ[U³lCYV15(oMhm&mx-2׮@)&(=Cyƥ m1Bl,f2v=""rʍˎ\avmrd->>˓I NV'<ZC_7I.84*ꈓg!Ve{GywKׄ:scX I &nS4vӌ1]g)ex/ Ǐ_ꇎx1y~ao?ul0!bfQc &k¡1瞧mwbXM/\<˫?yF/Ĺ%*A=5)7nȆ$$2kp8)g6yB@L2?aE{aEPv=9PB+%Ap{ K $/aTt#NC1pd m u&ef)J->2&?q36?uCOBOo /\?}Π׮9\/m4zCMsOhQ%GyzwlZn-ć&lŖ^,)TE9Ł  lf:<)y0<)-0  ._!q?\?%ROl G7I%rC GAfلm$ ]["[|s:MaKig$[iL5#khIZWSVkIYu k 9ͼIW4rOg\ұ缺 RHPPJ"^L̗<*^lTr~7 ۬wMCMeMɭP 5XcwכW?j#/yMŪ,3QOvXUNR*ҧL AB5 &R 8cb6([|J` )7W&o}'ϐ /ńLq7rCIZlɶؗ*BKg1@a}L1G\J Un*㓈V+LOGajc63vDC6gqz9̱.GG #cTăq:Y`)51aJ!WJ\X ' +X 0H-PTPN|Pbo<сCߏB: ?`'!5¥nxsLt⼛tCE9BI_^p >7.m=1g\-JGa̺Cx!v*2%3mv@e%/~'p4S VL>h8b+TeAG=̣W9KM E2%xWbT1|zm>0o^C]c~vG 7 RahxFx*>d9`0[+*Ң>Ҥ85] y2Dj:eQu/w5XV!4]Eܿθ{r{gInd$<=r_wz?}LOk[c5Xrk08BJAVY۟}]F~-b?mi]뢶b&цO/WdI)aDltMX,;d<B" sJ\H_(t/:#l=.ɃH(C\Ggp>~n6V#f> `K&~F4R2%VHF6bbJ\\Elןͯ<LJ_n?O,/<44/1Ƶm'U h8<%'r?,y?%>f~1x3! ^9?qwQU3\P:=VLMZK773i81M [ofz:tڡ\c*84p~ܱۡғ[[}m!sDg uw28yH[IČOWzTM"ÇmE;K'\Sbۈ`U"T^O'dJ d(<Ǖmwp_I˟/SC|8AQPRsG@Q(o:?g7o/VXƼjNBAļZƧE{?|ʽ6~_s%gX̽9JknbMȭkz,jik>LڊM]gOhw~VKȫ+:BBQ7"F%;&W׎2N|LČ)8zo:jq|+?Ap.iL0Y$U@{g5( \w0" ȫCrxb1}[(fg9쑌M> >١%ᬍ.>%# Ԩղ"<Jׂjk뀿xOlre5/弍lbx:j͓C{<晖VD@ʫ0w.۱Qne_7z/ nGp ~ g9n 3vCF$=gƼ;ZTM-UCC! ׼lZt7{r0ȜZz*iz6Oiŕ^_+"]=+wպ8ZsU{YD*SS).r/*_7{+NIiQ(=6?ѩtz?6mx4>WTyq YW,o~k;kBn5XZV>]Ƕjh,.cͲg.g?q>(spD e$<`)z{7 ?*1@eý]&[{'/@Anb-Go͙ē6S;l'%9WK[H#AJzŢwnF$6[[#Ckc󠐊DW[|ot3yo+Ot~bLhصy/78x?ab 'R6iExr#幋g)ШD𘸋7OXޢ5Ւ׋s)#" Ď^PY7-QĠ hFt)9(t`=LZ A# ]KZ=p{{Þ>< )qcU<З Se-yħvLx-n?w7?t_jE4cz\I>6v@|o 0^n綐d+"n*3h$􌰓8Zc4lAlA7G(>dęV<7^{TP{0'[9i),+įwy__&nr1';<_pgsM%]Iɐ#%vB~kR.C/N[tg[Q; ~;[><܅;Sӟwk69J"Rdٽt5+8z@7o F`fYϮJ3\i^}kn5xcMȭkp:bZK)7j3żwFh~?)R9L iV#[E] k1{]o?8 NnE|,$r%*RZd-uʨ?vx0J7e ZqqM?Q&CPz.%=I.=#TH0'ÔϾ>;g7\Hc&ox"LeQ ƴpB0J,g `stIίWy6s5XkBn5Xro+3[ qVfF)b7Qp󧹡7 103 T=d Zs,e<0@[ TkRɵg y._/r[OWl$\QPB IDAT{(ye.X+cnwb"bix+filgD" b4gaRh;iJ #^qMU<nz䨠sd$жyNFCNJrOiw4& 9=˨c~s#/y# cwTh7g5CzN x̃JoQO07SV|QyQ[\G>MԒ1 x#ӻ<؊(_Έ>{npam%q8)،wh( +xE q*2)@UC_ѣuY%~;WGyLoo$\/N(9F)0i)Br 5Rr'ܼ 4:#&;d2-=fD<;D쵹ZCk7ӽ=UE d`K'G:|`E᥽/!׿p ڊ3br 1)y~D[sgz<ꎐ[1eo 2zc~ .Swog]!߇XkYa4bd|%e],]@3!۸s^o 8(rJw\MJN ,=<{:AIR`):\&W5n690=:)*kVr ce{ҭ[&fiNi9_b5 F_+|DgQUORUPL+wbY$朒}ZkT 5Xcwf%i;نoѺZqw/u-[o4눭͇oü d2ro+ Z4ȯXh;\W j<oSŪp6yr#%*/Tq9&h3ioopIbg&gN)GtnMbcT@&F5!X 8"r%DJp("Y/BpVz(@Ƃ\w*z9=Ol/4ƻDW:ADj8Ɛ>[|Oq :p$7#6130ݴvQΠҢ8ozb+Dh|jbbЖCsdb~FGJ1cplbCyWٳ%yˬs{ DAbxӃWOFaMZM@h00fez}TU燬$FabٟOuYY៬;  2 <’jTĚf*K*7>5t#zSMy dYeB#z}ȁkf͜`%JʴFM,6pquA1g}pg6G<S%Êw\;' S|6;+#k hZc}M ~<pA e:X(f3,\˝n6ըAuc\T HmyI~rG|mQ>&תhj.iAQ?PYdj{GwX`X I6ⵠ&}F|htFZid5Y(\@ e+9_=v,RX_Âc M=Wk@@{l茉h>$7nG}R K3>܂١ L[ìZqt͢g\RڎA/=Y͹rT׼{2箚όg?'crW=y^Fo:LřEaUͷ_p~9a;Sls:Ok=@c /泿$Ǚ7+s0X7d%Xl-Xc@9?^Z̶i1Pbv@.a dl|!*4IƥYhܲ&kBǥ/VM-C;M0>kkw,pږW*Zd[OLiVi%Qk޾b\?LNSvl4ٛVx3N 33řى8s cBJFh=F9JEc,TM ؐ3(5r@9qĝ7k$EY/6MX2CN5&o6uƎ-Xg(@[F93GSc"F4mO@J`g-cs CvWv`ԍd֑"GZԉj 9(_xS%[ό8ZXnR8=FL5`*laAW0#BY31as2+\2ͯ?bJū_=a3[a+74_.n:߆X9(ҟrK{s.P-ts-J;޻yK#ź?'{ y|g/{ 6u6@k[Rlm@l. P Z3'@yU! >RYÃzAs5(efI~Rװ{o=)9.,}*b_k>FMpS9F>Mr%mw:ypiD?x39vDb#@{6Q4(mjP:ŠjY^iBuYh>+3-8}vh탟:[HmydA 2c!بan~VKxT7P~=ݠۛn|mmby,|r1H2NШR!sǩ|FZO,Y Vͅ[_Ts~ b V|9(x9a8i`n B^7f;gV` G%[7)͹iMsfRoY'jtU9p)-a65B~`},32&dJnj88!8!'֜-?XJh&2b< FҙdXMAUg? ?\sƵ>W,wp;_8;/To? 앖>jAmG;p502mz#Lc޾vȭ6,x1Oz_ah4䌱A"Aj+ Rb P$Qȓ@eieB1?O12Z^B>۰t1(!SEG 0J:m'GߙӱKz%>C6[zZ<.MߗV'ybf]*"tƒG:iڲ;F4cAd @nAێ/}Om`JܧTI}qv])5}>7s7{t0.ԠKA5VB+&Zڄ{ٴ)֕S!&gj|Oȁ_xz?}>&(UzU~/dO\?3Es>?8*ecS\GY>FF\m)Qmm(JLɫVHmVI D7ZRՀ&@K sCr.)rve p>Ű#:"ƊB9Fq mj:./>J ŸMhFq@NjQG3ŝfY8.ᨆYRIek :ss(b3J`^H]"7@0J1YW\O(&ks.m5Wo},cy@D˷~pW;}{;e[dsh@7c\m9 XdW3?]LT[9 w-s~2vq­oPywdE8k`﭅uZBR"yA9hVnƯ(K#9*:UER`/4"ԶKE|_U+iM}"PG9)԰V݇rHoՠ,M[LzZ~lԊ+]0xHӤ+Eh&/SIqf>q{BSdlV“A鋣rDږidA/idAR{Ea8uPjچHm]xڷn7nK6hd4p|T6FDe9?rCgw7ߩ9hne?w~((〉&&ʂbq^:7ȩ/OQ}|iY6( ޯ|{njX8!,±E!/,A,2gk)9qc:.ӢFx̑I )F͘8(!͸ZJ&\r~y5P~+ S:{BVٔ(SwQi /hf"~8GQC}V; a3N7 o}dҘBi>2?{)L7+s†Z?_rRܵou/SP##|%xeh_Qe 83J R ̤fjL)\P:J6s-1v7k ACjP/Hvb6t}k(> ,5M 9h(hM+88PTSHA]c⨄bEb=k=(a-Eidk1#ټOQ6BI6ɲm盩AB@%׺󓖳-OU mFxb&-v6W͓HYLs~74v*5s&ɕf~wcیq{Oz&]r{5/}RF&N;@J-&|{G\DIDi~;/k6/'>:CWk3Fb U@N*YȀ^33hDi3/}%$.TO+$>8FĪRVk}p1x=.ێ3\5ay`+}dۙ$';q5v x\[Ygw]݃ 2 ?2AdGZ;C~GvY~Sj[N[MYG]ո q) ed1 -ke[8Z Meæ^ǘ~,%ʈVO<sY?_ovsRx~;_|,xቌoTxfΘ6||kͦgV% ی*k l!`%U+12 wuOKPQ?(e~03]Z΢Ţ=@S?VpvV])hPl`8DsHrROafOX2:*W^цٶdzCcknΙ߆ymS=EP֒::yFF2bQfJ;@™ւuA.4+ԼA Ee58hdnf|_3roX,+l+{nc&vĸyZ q뚯}r3ۚlXSȘOtY~(vg5GPie0ZJnՕ>}f!_ H<_0K`6wf=|TvשtXz.ն[8b}**IS-ezm:Nӎ{TI[ӪvcDU/ >w_LuT8ę+T܋o-~iy$@mh5ZBt[:GWy.1^<}2 dAiI\*Fv7jw߻%~!a"hq>Io]yѨdcCu`f 2FJg9=!/G(ʜ/|_|Jl1PXC, jMxyf<3Rh͹͡;UeG5 4PUXk.,s%wiQk +$3P`sd5 &#-("ՂBD͡u/RF&} 'MaVt5YxYjN' 򄲀w:[%ٝ US[Y e,YWYA[bBF( rx4cBgf*hl` (B/f΅ECNPdڢrgW( IDAT 14A0$ZJ ū2\fk'cfv1s9X([S59j X6( r~f rKPVɔ9Ϯh¯pQXYſ+W3:RFՂ͜6ڕ[amM`MwB;hAd{AK˥aYؓװ~نǩ1j =2-_~w] 'BmLioPI}%;RZg84ŵa֣8b]UI-ǿe>x(PgbBϔ ߕN3Y Z:k46v v|X-P_7*9^&dAc 2c"̸yIrcXobͅh<+89!׆Kx#QP{%R5_ʸsJ/xkܫo90P  s{OzVv̻_ͽ]qZtd| y IM?>?#1v) =^1RbXä@2(DxDiԒY f_yMsq~>7 D{Wa*nq c c2s'߾-plO|+go{|s(Ƽ-˝ Hश=7j@ ")Geeh KYgԙj깸*p~DYQ0n@č#^mNگ43{JP/lp9q-',r(p#YDoܯg\zAr=^Y$SX%;p"7Od41{7cWn"C+E7Ιu]Ms[祧 rP'ε'Wޠ~ .\G b#O q.!AO8zIk07K7hFVYeyӲzy[klrjI~[ɏ~O6K'.Ҙ(?LM@]%7  2 <_{.)݆4vEkf`2J<>6q}tC:vFˣ5ɘP\4qX50t=>4| CvԌ/$}RpgctTs/xcٚ0;\yk_)] dus`2Lݗ2J3>Ν43Ҭ) M6k6mԛEJ ,^%ABI,U@Zj_fff2rQrW_{j$?A2Xu)G0__BQ%l [7}T#}+ f%/.ޯ:xZr^2C5b U93Fl#4c*v)*\itآv ג?lw `m 豦6#PB=Vn]FեyVP%PfnA%߇'|->6[ȧx#nr(s !d4V B+)l^+}cYA{Q07ѓ )/@TV<]/0Azw \BB:'ѹnKOmOٳJ[2YV#SRq'E\NmL^;Ua\1E( (q/䴙o쓳IyF-XdA? 2#-\{I5b->j>vҬzù9@εxڃ{__[3+>3y`rXXc͏r3L`PlSǖ+9oyK35& s[Sdc eB~,vS8dlqu2 Vp[PG}(0WS9Bk2jbB5VVA-(`!1G8b ug7o\#f9;PoK_h5؁ r{ɍ{x'e34o{M%`9ˍFq%*S3ףM.•%3c^Ҝ}#g4RdFɓ.??_7QjlIT mbSU\k n' 9#Ȧ`4w[nƵCu\R k΁ɂ[%9OXY3bZiJsY31č c C8E0C3^j4t:hE MmBۗ.gYi~T[ Rh#tm=γl׃#!o;`9 M3ޤsQKc݊jsu+׭ Z楎XAUˏT3Yk/[GGH õq6 dAyer 2 <#˛>Ǻ9#oۚl+mA㜳 0?^].r޾ͷ~UncAŁĨ^y(dA2ԍqfAk})g X[t ę 5ΆﮄOe-.E~0c c6Қu j"fjodez.gb F@# <ϐ|BӍj9c M sۖv}ɺئ>i|)&ͷX^ Ư" ʗKn|*ל% k9qW#q)!˂v㿾h6t }-\f@O\c_(FNӔp/|[ͩw8<>BUd6\@-֛&?q5U|+64ʰXҌ{E/ݑ+cMA/PKmKSu=2FG  [ˑKcd:w ݞuG̨9nͤ]5Cޟ3:V :g]ꊝ]~[-P)9}}:}9c׮Zz pQTD: W74J1EZs>~Ǵ㺟Bk|tڥx 2O @nA䑗GnEW#.u-E|['ʝ7W7ex)h~9AmjIl/8XkR@Gl[J,5 w*+s$f67 @ۉ"?ws~䧏(83JڄR9:Ί" eJT;ǯS7C) V[DY`%F!cLz }WU[Rח"DQtoi7%襹(P#@{\X)\4SBML*J,Vij%knc=@5uqNŭ,s ΡkZj P`h̻]<և:⏮B!>.+_{@p.RoI[iHSzN/F|2?)?gQh._5miI  /z; A 7 Hihv}1μ%`>JcxǑnf|kaR&AS3]b&6B79r~1LQiJTc) ` 1[]:_xg`0%4HFWf ~AX2F"ނi]‚U]!v}Y ]D b]4c>}4eQbgsX1G _Di5GhЬG^m9n=u6r_26D^ʢ|riSobh`got71[2[0/"#XSs6g$5sM3Qcׅs}xe+L]7T4Zƍ8= U%' JqCBs9F#&9HeJ Y> bQEA+EgEAy.bT8\"07~N%X-W5jb9i5BIjSO~uVֽ/4}P6J f]n҄Yf љV+YwQN*_Er2MIsvDpZ+ڝ|Ue^WT2UOg 2 @nAUףּt[ y6CDuoH[>;8=8$W#̛tSӦ .*: o,XJ`JUP(]ר'؝b u JҶe:ulAȽm1O TTܥ(xe|TbRk w@egĐ-t w-̸0B *94r%f5}(=Mco>ۯl^{{qПV[ұhG6;ZZۄ<z¶\CV> b4ISMu®6BP RAlrZmCjf7 ?w9̙ y3D-5ZV"x=?۔CsTLwOݛ`P0Lʇ2JjE&xseR͛!XQ "pOkiX ~rܬMTN4I:WX=hoz1k!e}%kd$c&ёx<6՝e#Y n .{, cVN0)kߜ3Ǹ5vZbł,E\'(ͤCI~q<)6X /Ӵ˲]q=IsḴ.^N}mkÀ{`*7VA*e:8TY)3-SZʕjhe3-pͯ*QFtr*Ldb'9=2 <2AdFx?MZSEgVjsSX>M4=㴴j#"80DBktݘ2"QY1ioWT[=|0ߎz^q]*: Wr}4÷'M+cn>䵿!l(dflfLאQЌb8`iKK{9c@UE~`u#P9s/FSSBXg$.Ac|5tͥ8ɀ =08bą k0D]ge*Qr9~]ݿzFfTG[Hne}V=VYj*0]4kx7N3y޽4-K k4_n>V_{ ,9=M_W%|kU2=`zTkl\ko8-d%=[?vvOv|Ǧ} Gwn 2 @nAoC3 {\cmCBm`]bm1<@LAKkB/5aY^s*mQ+P7:[e} EmZ8K4^qJ_??cUͽ{W2?3Bm0$'dL"DT b55'}r. 7՞K7v15r?TMxL@k*FۛlMmtIq (v/{h/mr86 9ֶM949(ƌ..8 %jtB=fŰGэ֦yZ\iKm ԳWzzyItC6X}HIǸ5=!>߻ft}ZVU}%=ZZ%KԧiHƟ?0\E?{]eb6/Fm cWꇅXdA~dr 2 "@.U;o: ĺwu][(}Am vtxw^cͲ|Y8`*pn3aqEE &@N1K(8,Ra%MWwR!fگP(@1ri2KְT,T}~lӗaÚq&?࿬Բx!6*%^RvhPA>,SQ0&efi}ի%8K񺨵](%f%.^ #NGbg:ӽ; 2 <2AdD`R>R]AˊVŚjqx%-\ 'T^%q mR:-:r]Iu zJAquR3 rE2?h)z0KPKjfJ 8Y`mIЊ N=(m,55h 2]A]>3YX[sS0]T9S y) 8+t_G])V%2֍po,Zk)Xt%!_0l2ۑmqOjlGK. ,ς]j(Fd)PL8 /",9wьXl48?5sc}es^[ﮖ UKx> >8w*ԗAQ==GgXe } ݲZ IDATY^)a\hCvdAG 2#-ѹӑv: Ps2O?o b8hCϾBW=|~ao$iü1u[?sQce D a/_1OYT/']M!Vh7AՌ)ئb;(l!ở{2GМC-MM--*6v6m}I۷G^{uhn5e8xChR8* kW/[B57*%6 Z>0 @Fdl68/P޿@i)1aأK͈ LxMhZa6::R ^z<A@Xz9W$SngAUfq}Sq궭&g|yy00A  p󩽕~+& ˁ]]9/!dAW 2#-!9O6fup{/`:b`)aM C{bힶ֑kX>Kb ~ߖmA㼁0"hݒ™$i@DL!RU1Md文*]zQl`w1lFC`n)UM+f(Rc/-F/LhOxƾں(S3Үx a LO}يNSz-?ݙ!Bbs`.ʋE1 s TܥYx%x6fsD:.Da5] x49ZԪns:5+8hma {TX'}ⵖְ:Gz.hk^S?:Pw=hI[5K_(І4ɚu*jP~*⏅!KSwVp%:MwA 2 6c=*Y1!ZOOKj:' *WcmG1N3,ö]7gmL)X-^0 m:|LFpT >6va\ǧ>԰ZtW9&$'4nv~(Wi534ȸ2&h.ae9v0, ӊopxe# )je5>B0"i@NJi*cimV7;]$=Bɇ%jY@an~$3p\Hs ˆU`F\ `2 <2Ad[p/ B:/^[}>HqCWK0ym 8raV`^.5̓+&Ghk4tÀG(yfm.o ue/1|<#uB]";s=> ԸH)D7}7 k iG Mp/utIm냄x4Y9=&5azE 0R_1}A!]?~ ,(Ơ  ɱl 5 ƨȌZ5S1E(|~uf|4(JadF7]EVڑn|mM?F JLQͬ5C,~9p'ndA> 2c,߭oXo3.Qʠե" rxHVvoŅ7acF4ap! ,4f9=u2@rrr|]J S*7&Z%ő^coC\aRnšsַ^0Dx[Hta|8ކ{vY_ ǁO: 7g:w0tXq;du[NkvP󃏉#n{ւmHrAVrZpM\fa֧J~SD3 ,dA{ @€. gmj@[M'^/`Ыj65%`{uMTq8oo I>t߄奺A]CʴXD\gsL+,M)wh"kq2sR5T誾EvcuFZ&M1 4g dkd{ObD 1nz`LoGH˕\C***)$}4S1-5tck ݮ#xn&>JMbh[\Wb(դ 2'CCMoDfZF.)iҜ_cq OGӭ2M>- ]UC7]4]w؃6jT!NzLwYBv]ʰuZn}fi^h:mr&Lg턹›*Tfi^'u4XOEPߺl8Wz$U^j[?}+`'; I\b ">ώD f VJُO2gqWeFVi/׆L-imW? dAaׅYOZ&a=}1z1lw[WĖ3"wL8s2HKwA+@F'vF8W!K{dc]劔'nߺ lx߰\Ys@6 i#$d%0k" ƺeӄyE[;pZ'C>zeדw)iu vǽSv 7-ZH ,j[t(WjLyrGNI1 2A_I%G j4[/Z:a2ԛ #RujS j} c󿁞;?A+ ;翙#GuD׶|WEFȝQP9<S0[/p\ynτUx_?85_#&o޽B#ㄏfJC^WHcLK~)z\ߎZ@J\ K^/:naabr v\c$Dbhʩ>V\/)E¿IA<&:R.Ϟ.6uouK2rmsWȕAN<#5d58'w92$c6~h`I[USH3o\f8zik0fF߱~jVLr~H'nFM=n'jڹCen7{ <\ӋlĈ7ƊmQ P_˜kJ.Q*zƎ+5C%U>2sj$)}=^ X7?3~41vg1/W vYoOm~?faʶuc[?_ϳx+?.CvJ*F%hh24{Y 3Scd%lvw2]k%0,TEj\LlKd tpÛ#u6l.Š234Oveў,`kn?OgpIgԚ+|[.}1;"zjOO>6~,X/^] TډCJRi~?p; "l)m$~7#+Ң}*-IQ?M/>d]~"9Z}?K;;Lw[Y\9T%FTvL.9nJzWm5D nG?A7gjlh_UK= !mP/+,LLk 1)L)N6DT5F,AW/]P;~Bv?Axp?9Ďw<;ג,q!'f䛨TԤ'ur*jQҥ:6Bw뻨E.j;;8 :WDrd4A[)AlէanwX%+/˒x [Sg"cDh$:&jj{rMqt*QzDK*uoLZxo[s>ݑN)F&~[y<ۚ]sm7~.% `.Y\a&XK8o 0~Av9-%qFJYQhG<ۂQϷCZUT,d/qϲL#^S=LH˸:+eC_rf4T?9o=Xj?A<3 OW˕>_̎Lz^/d+K#xݢ80iv/8!tAKX#;w| ݍH !"uQŷ51e~mN`' |}Ϟͫnp7Z=ƶ-)d7*B$cSj{kM~x/|Jz2ҧH2jkY^%*SE0Hw:DEz'̢(мByՓvR{ n!%/]$'m}aKòד1ve2N}H{_=/Mvˆ;"a7Yw/~@>Y{V  ~{NlhW o?Q5)W/?ƕ:Y#!,6ף3ֹ"+9UǕ i)\Q/ߗ\qQ={Г@{]@ ]7Кu_Ǟd桷/ o|y*NV-f)+buaHyw{c[j;䈺?a=b q  *pD]*zu?z:1rDօ.S貵2"7ma۶;|][bCu]&mdlEW2_'ټXmy~OW,oeN:%Ԁ%Kk=OHsh]ddVnx+aI Nr;?oUS+"0ԘTyn:IlzllysuQcR6jtrvh㽄y⁽ ;?PhБ·A>6pHe֘WC.X&Ƅ5%촕PJR[]2ZZě7=yc|ďM%ˌC+R0uby-ڸzxl&F4mNOT4vi\8\TsΓj,+z)QI&c꧀S#Uh_kx{4[@՘kw'S@/zT4׭PpOl|Ƕ߱ecXϲj͜=zD%-yg| -j[O`ԉY0#ҽR?z?K,Sd YM!/AsΠ?q@?ظNģ(A,ksp5W#btaaa;ar Q-~ 6WM{59r%F+ð%c4Lvȶu5?TMVf7m (]IЃl戰xY3iHEd>?vzj~-[6 sɞlZU9h?V-S}:L ً6Ϥpj&.>GvhnMwW_ቶ޿mCPϮ \_ *J4/?2OgOh+M!WmύE-,,,|bیWOJehd@F{eb"a~'Kp;d.S˓<,Gu,k%=w: U LRdęo[tߌdmOLV( IDAT~̺0rXo#U_[ՒuDJ3n {Rla?>):ӆx"'lyVTyY<z$~ןֶՑ9Gؽ5TZ_GxsDEuj>΃,<^t\^q KvlP xo,PrdJZrX*]9$”&~~V# 7!{7~ Hfa#q]eD@SFߚ$郷V=-9A[R,˭ZhI*)٧C܊TOevZ+NaڊfuQR = kfؼgDFPc?iLjQ\ ]v]L5Cc /Տ%+/leʲ&'| '-bJg V[;Sd.OW91̷oIYޓwӟEF&\5;uSEE9Z7a\UM#S$a(mֺV?ϏT3R|]#іR,7VU2W6!y+SiY?dGudYq͋[XXX7@KпTc2"рf<ތ7}TƙzɈA#ANHO\ҺVk2mܤmI--^31->*U`#kNͱ="s^sψ~g T^Oy_q4a6#!H7~+{=nM ͐ N {qaKGNuZwQHa׈HT߯!yi%Y?q4!˴fow{Is7ŸI- C9[}f1n/߿7/,,,|,BnaaaKCHX:.Q!¦$,գ1]e'f^'}h`-9LW 6#}}r҈5i0-qofđu)ΘjvB/Tok|s _ 2iT՟\]Fs.SQ~&vc메uGRx…ڤW\iVŬ'd;,9a1 Y)*70P/|h_d?"mhN5!rUʳ)N%ⷚN*tHX}ߏFWisFEIxf]0xtD໙]!h{u2j֮ϾR9tzs*?G5Șu2'4Oo%v>"'!_pkx3^3eYE *Wu``E&i3c O7eR1׮R-U'j2&CU`qDŽmتb=~FȬhZTN+I,mרT6VY="’mzc1K$k/j~j+! B<RVrM8.\u-ż6*ꖱff^Ww|ssI>u΁-@6:8]nGv;ԭK؛r|H85r9PM4{+w ?q-q/_XXX~X—FMVx"(k,ˢXݔuFܖ[͐͢C6v|"G^[܊jyelNfH.f!=:ˋf]%|@ >54Yn{#@'wcb5G(Qfqϱ37z!Mj+lPKO.T>ҋ= QҙqʿY,%jqڤ-L$^g%He_QSGJ:sF)sZg2&V8ň!szD E=ZwIr,u>=1j"#*l9 ٦e7@[^]؛^rCn3Qi!oKuY/uD2Kks=F1`cƺLxp,ߪ8?Dr Ŏx>ʽnJ8eepշ<]cnW7"1xxQlu>k?Uj jTGϤl-,,,|,BnaaaCM,Slx ^/K]׬Z3֣~q) f/UviTi1e:LǮ }^~8ʠ ϖ:Qf$X`\}×mG4X"r>?=muێ5[dwoG- wU(sAQD)qLcӼB$ʆ#N4P^CUz m=WOG+HGի=@H&Tdikԗ'J<9@%I٪Y_KfdUC {";EM꫕Tl|iYf=7'0iF}2?⾰Eu3yz}?zl/Ft{ iՅ!!DJ}eqQOC@VB+@xp\s'b(~_$~o\:{HG舓ɵjxĝvROy4}ֹ5ŅDvfyɻdT&;za]J35eYlS ^)ހc72M=4UkdqϚAX% A'ogSZXA{iuȄxGs ڱFuJX—cvq+P|]I v7+n KlGj,D"\tȩaF7֭`lTdAauS\jrO+{!e2{uKD* -CU{u1jwC0OS׺h{#&AnPK;"ր/'¼oM|1BSLs>K5VD#u6*NqXϡmL9=6 eR3mDm߯.I5a T"MLcH^mc;w:x'>FY کymh$) lj}1BǛ6γW"M||P~KqD3~Ys Q߄*Pmvvs˿QfQ[[kƵ|qIJ~s2*Grj(ǚ#r%#zLEYHxLT6vz~JneL+02ώoVHMhhK|KT|9ѡi4_2b)t UoplٶӾoTiJ§#&[,-Oz;ﯜ6^Dqlh/S@Sc߸s0! BwrK[-um\"2ƍ{9rmlΩ2w}Vȸ"!-`.?VJZ{HիJ^#beW< QHkZQڡ }1W#}#3&mklLFFē_c{Uh$|$ -SSQj<+ afm{#Ϥq,;Vټe/!NL5kyw=vI8n6"mXW=\.rhgR例gtaaa;br [E5G)vF }Zcy? 4*2U?қe[1}ݒ2"FR+"Z:jrtEE=7'DV[U:$YU@-5vrzޠi'lۏHe2>vg^ 6OAi+ROoWV%zb,aaI=OL3yfE "G!E9<"r{r%WO'yDzx2'-5I@ug[9lj{ċq#ErRh$2+gw0vlD`.3~IN8\hǞ6Ldڛw "D\2Y0C߉-?4Lv*'-wVTn5a~a;gy3rCձ/ D~pӜ$@A##n.EefuHf\^QJPOq;+Y4J/rh֙Si+m*j# )3ԡ|{eT3ʼg!knO<~l7C[6mVkVVJٜ>}Qe+eǼ( d:7KJ[Ni#;<,R4?BP?N;}odS^(iG6|= sMSr_TWs !GErc&gyRaDHClNWKf'ޘ"̗Wmj|Kp֪c3&e0{FJBI&ƈlkj8NfdREHUK<1kDrT˹Dj5_ver#^قŘcCaz/w]ٲχjkƳƯ+s}ϻ/LpPLo\MÃJ{FrNN%QUr46ЮD/:={aaa+`r _Ojrk`on?G4@j^S+4bmm=։$ԩĊQg P/#{deiQgTkBNIձ#>o4s/ZAH ((}&b}Zb-l.ͻ!.Gm?Wp4z*ߪRVȯ8dG!xcl$۶zYy,9!rߙ>@~ɐ n4lվB+,Ii|\\7b{igT7^y`V'Lq(DOiE i4YN1}XX{W~Iݶz֟K+Rh# _XXhޖ#=3 #I#ZNnbGJBc̏TwfZ95N*_u$l GUf#/+>[A<Fs16kD3\gv=#)j9t&m)vSJ7!\_J3k˨5BUqH5S@byKj-jgrey"CGM,AG+QZ2ɭV< #R>Q_3QΠwqwo {'޺?O4Raב2Swc'LYZ\>!VSyNVa>"/!mLҜdSjg)H%,fFZEB#?6Ϥdz_* g5_Ψ:ozC3cZ+T"Y_z%e2];OLX̨4RO0f IDATpjCpsgz^r;[^+c_|uGHh;]mq ՜Hӫ$`>_U׌=g4WFեUil\ .7aیivȋ:\y{}uaaaar _x [!h[6M6œ?B#og$ȴψH7 ZSQJj]hÕZeH<_^=dl|m?xU2zۨ&(YY3 &j׸EGHjm-bfa{`ڍ9yvNIJӣ|^kd4툀KuH)l6CH3=Z|MIU;ďAecszx~Lӵ>M5/,,,|,Bnaaa+,+ޞ@eG ͹ KX=5YtZS6N+yW^<4]mZCb5-ڃ,$lo%4fELppr1|\FZ*W՘D瘖v8f=\O 9*䰴=Xլ'v+7k=kW=@.CGQ̗_8Ͱhs&GhۏЍUM<1S:~jO3f,4w0e l~{A'ҒwغcUlߒ7?C6ێrw <Ӓomice9!}84yaaa{ar _|ݿYdS!f(l,+%;pD *>|*0M[7T-IPS@TZEtL3d"l]mZyU# ϥEͲHBv>7VN&ǣ˷_kQaX HNV8viR}"Ϝrc^[ zJ.ʰ/DZ?sNd@ݿ Iu37[=y}hDXfGts&NnxGo#+1xQ>u5/c O,,,,|,Bnaaa )vC ~p鉼 S&vГ@0FP(D"tNi)Q7!wU4wxr'6Bj=DOkڒ'cfļq[rRp뺾]Sz)m95=Ubۣ9?})c}PDy¹yڸyDU.;YR='h 1 퐦'@?n77goFNnGx?^mQ^MՕƴr,.,,,|g,Bnaaa cLoA~>55$=f@0`d=ŌS$fkiG5ꉽz{'7sOz/:,=J+7as[w":77Of7}^$]0橮ߏhGqQ +!4D"+SzP) dv)}-tgIʘOlqmd]d}q}_:[5y?&Oi`V/"A,}Es_E-,,,|ac80L x'5|񩫇d!`=`{k7Ug/QSb D Au XV/x9gy\w^9la 3C5SlDߵ+lS9u:FmUJ^Q73 0^r qcsQ],oI1e4%,:yϷ AOFlWBֈ=TGC067o?Yu`h9ߢp 0eO-@篳k<]6@9Ϛ†i̅ !}DԹ/g'%Mq{CZ Ns͜2=Ӏ!{ SP̷c h;6Hc*Z28bYm//qbd,+.[6Ija&f?Q+L(Q$|kl>v+ #R.*%gK5<c״˦x ?kt&K@]qSJ̶JN;KG&qTLU:^+Em.ރm}D7ƪ7nu# ;`=h-t'K%C{'ݶfd2@vkr[30ld˛fJ#+z/]Kq=[șnwYehOo83>#g|"jxM]#,5;܈hn5jnNUP$,SW!3~ |SH3:d(7>oVx\km< #63mt{A[W׈QNYb=r=W)5;?aL%24@!K)#/WȠNN0;$}&vnX{K="|JSsr6;4v)~u6xƲ?|aaa`r _R:uKmC;O.޴cR)^)kMLՀ2ׯ̍Vz%ׇZrĩ>B·sOC$''n(-3+//^)8裨WWQ-+hy&guY^QxU^ l-#erZ{KZ|2ɼU4:kqi_kY.#S4vVƳo{}v!].;)ípL$[go~#7Z~ۇxco2KlwnrÎ1~^ύE-,,,|enmO$ӹn@ d)k3ecSU,wN2|dkXR4y gBFKa5 , ,Sv)lxW-}>2cLTT㜰H f"CZ2|Tb:xxQ;W~q`,WIIș|gW B5hZFGQM|4Beڸoɀ?ꃚ9L=';PhPR M`yKQ[So9Navq7.QH+q?!7Cl70u&:XW?ût̼dހf1yׯ?M m+tޏL"Tv1&*ڢ"t9Leo%yC7#92%TfȴóU&FE+fUý_%oDں˙ya+ǦRP~Y =A_Cc-c1wͲ?Q.Fmr yסkkf9_eE>BRjIu~U+T2 + P&LNq$.3{1xot~kadW;Лvn =KH2 <&ntvǁ ۗv'nsCjA} "29rOLu[{zJ8ih],iܾۇ$K]_W呏'#yqNȯs_ܔUd\)˩ɆHodo}F尲sfwmNTDʌ|V#Hf26juJ8Lc+.z؀e u;BCWJ.yu~y_cl¨TϤ{'$>sM+4ۻv7VN;"l` q PSF|Z &^@Րp/c'}mWBMEGHu;^*OWJ=nlaaa+ar _3! Ƒ'AA&:ek44n<|߱=7wC퍸iѪ93cjo%WTٵX{V2aTjNX܍NuM~C.1?{>o=C?t%z,,,,|E,Bnaaa x`toe"콳ܿHg`(,-͊JW|7cC$kь5gxNT580",s,Ü K>7b\icH{>""YVSVQ>OqFd>S'>\׵oܟm4ukd@Γnq 1;kq(BZ:o]//Yo&䓋Зi'wgÕqztC?ӝoܽ 2Q{]|p?!6".hcٮq$rK_&M;NAgXXXXX>]8r>`yyaSֈir̙Z6E ƌ&UpNE3kG)#>Uypc%pQVj[A=_qP#)Kt ;2f_T^֗Ѵև[/ɌQqbĊZHuSn%_άs~{5*uMvF ՏfbL1R)WXthS>![ [G$hy6Fm~s? 5tɪ!asn~x͈ZCA)`szI'2z\Z"2d(s^: baϾj slo7a0XJ_tĬL#LiݥHd2Qu3cWU9O6]^2r)!}Ŋ_w!vw/Hse*l;#4$kod8"z\t֪DN֙55gK_sDzCvLFtYmn9KM{$+U |Y(aۻP|'ypQEn wT7%Kw}fDu;cRQU^N{x{ny M5=F_ D$%5 Ӝֈ;@ōęzϺ^+F3aH_5Eѵ[1 2UŲnhkv{;E-,A+h,Y/3 ^9,3d0j5:B1IJF'n6g *2qDR2Uud9;ApN[{cm)^h'Mom٫%Ǟo^+i|/ ~ۛZef(+z00~v;{w$rcp*?1pۍKn6_+2I*BnsBgNERKu] E5lܸidLBoV0yW8n 4Xޫ1$?wLpջ$~*?kk)s4i\13?";'ڼG;VL_Ŀ/pe`> Baf؍VjZ%~Ɯ^{`VNlR!$fA{8 |g|8J;ݎɰ[AOC}G_ 627s=; { ;e]ck$9vY bz[utkٍB\׼_ w0\ w끂ݞ曧'^tO1Px3 v dì1NwAE_}DJ֤纎@jQYpQPU=ה9Wq6u˚zu^Ȼ VE9 7W4э]!tL$ΗTש?;͇z\3,#ၽs8p  Vvۅp1f+,PJRqxvRu8i-qC;+:kͻ? ӽHW~"?s#YXtw] !`)]' ;j282qu~<%#,d9Iz mhK_t755֋s|;8*1ߔ"3#~׌k2g(/-oQWq9~m/kO'!="ds3mG驼 2"|1h|_j9FgE׿!g1}22v<"5s;}6vy/WzlD+riQ`LrZ9)6ID[f)H`tyvY }V8o! Ѓ9xå "64`} @GK"0Tlث3Zzaaabr hJ"$ fd5RcRΒq5"ٕyjszy"a~FsIkH܎HD ܕ|dxZdY ߞ%:zMWwJgFɈ"eVL|v|eO43%(?@ m/6p^YSXF1hV7&~/wBN@T6G|~D˜ߢ>'SDsl )-z(ng&/C_XXXXX—3Uzniy'mD9ȺN'uѼ f>37DgGN9##W-<u~J5dI֤JqɄk~TUUwN5ⵣp||g\ϨHbLմR]7_Y[ k3ƎM W-=)Qi2gRLבu]UTµ=s32wv}fMFӌj,%)#}= VǷv *gh614U<P hi'r<ڡ n'f%eN7fS;|x1v:S#YAjHӥbCȴ]NZbz/,,,|,BnaaaAߊ#ڃ{jañ;= n?:W|QjJ§^muKr 1<=1*i\t:s8ڡd Uy#,)٪ͼ.,U 1uqjoU?#*Bsd^!g+GaB%‰Wqj' k#@az[slo:m !R'n' Z81ݼX[zF3Weyz*rsni[YswBB1|?[m =w脟OzHu, ӝ"d\z\VQ~֭rAǙ{aaa{cr u4Z ?MElh܍#Y{b[׌pcUFrrDmP4ވQ2eƏUz^]cIr]]ru%zըtz5s3tk,?iFsnѐO2en[ E~ЀO}k]yW }}2%u>KxHKׇp@:Mt3wX:"0saԽټ-ɘUm8N`cIhjѼ'N=DC N*I:}1 {^}׿V:λ/,,,/ ٧GfWlb 5[{n'H91aN-yn=ofѶni̲}/D3$S '5*&6$ΩF'Mΰz٫ϝn*hW6Η F^íiX'ޢbZeOs<>0i֒O[,/ LrI[ W]Ũ):yqqL0I mNmP0GyH"S{1<^puP|/ Oc>v"hjRȲSjBȉr ~AQwm~F?Opm<:)0B#neqNQ=t}o{U2G2F6C[XXkar _B1ަW氃 |2Xk[@#mT. B=<lWrZ^W٘"#k"92mgǵע']\z,;&Jr ltI?bȕ;#%xї*U~6&a5|+̗@6Ccc p Xوkמw@GcK&fٗWھl`7gz g@ؘ X咹Nr}kJX62GP 磊!: ^vScNʰ{ #?{L^y3FX$_ [XXXgllhIx>G ;ԖI෾abK3G~oi Mh K{QEs ڤumgwKMU>棐) |ż떯zgE"=AB籦1rֈ|I汮&`GK?ӟ7`Cӷv%L^ "D/>4f67?W5…z"A }OޡPU2y'Y県 ؋|TE=Cg0\Ir'La~|xGٿ ڸc-a$ PBÐyn+Jl{nHg? >s^{-,,ձ>``w{Е膒]qO(k\޲Ep7= Me~_M#T#3luƬ"{dzKO| frK.*AYȽa3Bw6zDZh~@~:="RGɷ=Wq3vC=oBwD# 7jD^8&9YPhG7vd,"K0yJ]_JsFVTiyk[3#l/3ҕ֮Sy [JoroeLͨl k6Keb7rޘ8b '~D77'V/nu1:.ڮ r) a+x-ˎcF\IS粯mN!ޞ:&? r)Lx_ڦY]^1kD{V}z6V`/F;AȦNĺ_9 |c n*w4kG76n!ؕx3 . :͌r_4Pm9Qk*P-6EwՉd+t$Mr4/!*"0î輊Z"enR32n{fm0,Ly)\` J֯ti?:uVdawh= Yݡ{9EGqxDVQ#[XyCyw\c=xGmaλ'A\(c7ls3qD2o-=¦ud֮OjKTco,";CŹLa2;?qwwS]@'\XXXnX7épr1I7'f6!>=?p~roܼ,~P?yh+u6Tp]3kGmHcA,yDEӒ`8"GaЯ$2gy|TBƝ%s?.s %R[}9xۃ4{5S* @c47H)(,u1`9@*  epѭζzͪA;$˩D Ȟ=orΖ4C9li;rF=R $Ӟ1ʭa{ [XXXҠ[3mDoۃtl4NQ W!d<ۗ1~RQ7>?b}[,&=s9Tt<)Mm^1UWVP{+Z\0b)xu}^͉ 'ݻ6 zsrcj-6^yܽ)yu!G'ˎm+u{ֽZOKtnmd&6vI>w+!A4Boףּib;?DwxOM7VldBQ'}{-/UiGv"9"V5l2.WI\z(K5=hCm4e{Q#ʶѬX`S2kpE1"Y֡,FYuBX4/6gd&m.xn:t,Az Xe;%st.ν$\5!>196FΆx @@;QǾ޹(S?zc3d2xwu@Ѓ}!֭hNFȵ^4-QPN:; s;6SmP@|oON/@]aF)}-,,,,Xch/ҍ]۷|?  2L`N^ !,y2*%c-ع&YDzg#݆]2<5~EvPB& fu<*{>g1S@#iYgMWۜXuTYUgQϚ}dUroD~ b|ک rƘГ} p?tΆEov>8' bI# uAM?^FIVѯN5"d%?;WT/ ME]B~$@EY;" v?e퍔3}όG7mS81_Q<ae]6{GmRBn^qz۝;(-[j4[<,];}䰉'ʭܲQ`G|d'T\TѶ|xʲi0>ćp)hLc(yxij4m'K=KB,6$] 9:va?{oUugs픋, 8q,I~I4&hd'֙d4L%Ecb@EDDQPᶳcr{>g=}>yu9M!!7S ˨ņCIS=-a@|/2A`W+6hvcb)_w]` HR&cr-st^'-9p.8h%O֦Y‘D% \7#w;)d]`)B/*0w إ^h//W*[*'kyGrsĜ]'L3'<ѢS,╩CܓP) Xomr@tq%,c3grDpO'U0_@X?r h7Lk=g pzu-nU$Y7Tk@ABz^Ƃc^QQT ~wϫ78JGS\w" "k/8eT$O\R@r.h4 IDAT` jޒ}&jy7]Ea)e NNP+HdئccV}{AE=J#fiC ]HuZ4_pAeY[yG4 >uuMYzVyA_J$~lEaiP YD(kfP@}®'W'(riW3%*jPc`I$'%+rAJlEnMDt9DĖhGtUٕr&h|ײd~o{$WVZ\>@|7ܧt;ںhդ( V8/oynWAG"HJ!r1,@G,V jHAZĸ)gID,5VVg2%S#DHhҐ{efMTeUќO*i$VhI @V3m~qÖ't,o+eȝU2W#y6:s7y߅f+^1*Q'1%k.'~ޞByBG rқq>+z|7.˔]<[…)Z+BFЩUY\(^qL[j2ۓ\xs$G$ڨ(UihFvJHJڢ.KtŸ/^ ]1/nvQkrWYYW\}J^GDM3ymf\}L1ֵ3&;0Eu;=C[s-& 죸! nR^u>yEc. `2mPD(&s/,8YL@[H*YO `I|psSZ͠B~~ywp+E<;_lY⌏r+뗨,\2!~c_ 1%nC%zr~RYצw>w/[ܝ٨ng&>D!3!7Ӭ%7Y)E0m~|T]N@ Yļ_MdUz9+nvwW|U~Dx&"50m;2j-[Kk>]!YS TRi#WQ1E#QI[]깙7y6rUD%fc<->BɼĩjYlTtkr -"i*Of ũ@D[nB3]N(m=G!E"JkPψd)Ss)JUPt+ ȫ-*t[u-Pt)V_mւHuk-\)ֈc**/[Bϳɛ-(yz`\ h@tߺ6i[aKߢۏVmU֯J"k4˒8cxm_݄ftDB wL1ց}1y=[AI)DL3ŋR\ kIiSuM'F>Yر2v? $VPkgPQc`QȲVbbhkqV]Ӳa9s rҋQe` 7>Gښ#T0^onf|vf).nu^@J.fuT+"wԑ %\oݫ&iV$-_vtn?IŬ댭v)O<_1\a Ycݝ!YYB9gU{ks ]}CeJ:d9IQ !t rҋWBhW2s@I{XgO\k2㺪l _gnvb-[<Uͮ6\5RqmK@2VQ l 3]-NmML/< yJ,YܝiܿʩJ%J([VZ0Zuŵٜg^|o9y۹D8 a5z'.mJev$*|g4o߸#Q!b re> T$0(:Z%%7DCJSqg 8TYx@_Nߎg67ϻ?\,2šn*%J\1-'8f5 5VReh4Xgbu2A%l٘m=N\ͅZ~"J4Ǖ+&2@3"@iT 'g>dF͞{ жG}&vN<$t–+_hHp r&ꛭ#,IbaA*&Vۙ4)8ړa: L ]Ê*ϭk-CTL?v$oAW*qέIH{I!9B(cȪAN%S*gdXm߮(^QQoWD3VAPξS N%UcH,u>/c{mSTƈtJF>kIF=d;#*U9G pbi]rҷSl,3- zٺ)O6xus,$畗WWqHie"Z#OaOId>hp2"WO|D”}L[ 8J!Tp܎dw&}fw1-*+Nn}yGn']䚚Lޙw>)Bև!f| @q 7ʦ3+p1CPRߖʎ- EMl86 Z4y%]ZشbD8G8+@M{o',@"T%!V.!XC+utmк2@!WYabAufm˓S: =}7(B!9BŨDkךfBm@Vb"JLro 2-uAP!a8 *LZ3:")MetZvE$iDաct"))f<qNJmi̍ܗ̡"-WrjR0"0fQc舝*eCf*muf(ARi_ctJ$+Dp \+D׊ݷʖ%z}ew394Hyz淯(gV= Zm(gS*hg֋hἬ v#k@M9Rڵ2@zO̤r+/xB1cQuUv~)TZL{9!2 *@3mJqkE'DA1u9npHHJJ3SZpDnny/`ր8o=@4?? HRHr4n:&z+,!|4 G!p`8GFVbŒyQC!HR:PɊ+:n!]-Bɜ;}QF.fA9Y ܴ[Ĺq!굓6c*;YH$Jy+qAZf^jwsDf^l^sXcϥN 7'ap/$q:kśqfuH0(;5#Q,!nzuPHX'!G;q!JbQ!}@ 76,-v>pn!O*kh~l0g`mi"ݫٷRboak@vL--uI5AT\ޓdž'HRpUj+ʸ K8σPLV_BtV@_`E$rkJ7쀸b (եث΅bݖ##KFdY*'G]BS|]ڙ9]}U\g]Xv[d m rҋ_B<)j=hqXE>Xz᪬L*'iUa6e\A> 2G"@^@Wt#Jۡ6: FI:b B2a`p P<+( p?kR#I_PY 勂HWwd E&R,a6̑#6fIwV-:|e*#t񳆤eUpz6BhY_pp~T:"8P pH e#ؾkaPah=H)JJY g9 }b]>N%d2#?b`ZQ<*(-4ٽ8+U~st[ݶ*bY,y o1#JXѥ^pvB{OcݱYC?vS dntQXHLzYyBH/!v[MaEet20q2N HD7!dupY%A}G${`3J"KH|hwe[1^'+;++gA-+H mgXqat#zZ7"Mxo͵ux޾v-ꂨcc lٮ;y舦)OP@ 53 лvehW@iK"w3v-3#ܲo7* yo/=fʵ5վ..PZr\dUQ]ݳEAX yGTg`yz%2ʘ/5QuCCΘKVS6؁$ǚO[ʺI_sO1wf=HiBss(D]#Q}++;@v 9?n=ţ  kQIX$Qo"ٰfJ!!žyU0B v"JgOgyGr!6@Ho5h]#[fQ$}]hw58ҏ9ҋ6F0.nߝ}j|5թ_!JKV=< qw鼺B8*ȉ^\'Gt mDk)Ypk1 тT7%jh]0AE7t{M^z55|!q!֘Ƨ+$O~#Cnf{}GFy: @{ a:#A( [ό7![s4+QBr0lQx a9(ŋd}nmeTAվbE(1-XV|"V{)t\A"!0(|ea Vyo1ns5 NU*;¢ōxTĦNtH  +㦍DtEtcg%n=!Y羻,!dK)8v@?=Q~g{SV%yY$覉5d]m~VH6ϦuE:%Yތ[F`,:{^y$isk/TΏ{ޒ󳽶6V@yW0]gB^ޙ:hV_Y ޭ1*fSq;[x'wϝ*EڑB?(BH/y"ݤ;K7dRTQs3c=H.HVBuID[c- cyj8tSJ:-?K:(|Юn(;?Z`uȈȩ\pnkTy:3q/B%UGbP :qAG  C[QZ/^8F"݊uv8Wy܋Dv~A{TEWW|Xp/^%DזEͺwkTt54"1 e2ڛM-18gE&YX;Yg?uĸKX +o_ZrX4(Ԫ*~ۿ^YNBX:usO)W4FzqN<uNic|]l<¹qvh-[QY`4&}f ZӐt\U0C(Bz~@!*o}c.6oQZ\a.D]k_.2#dg Çꌵ;bJGDT Fi-pǕTfG#=4(^m6ՈfY[F;yr]Nmz2ȇ,{a0jM[,v5FГpW=T$:CN;2LY L;Wh^G+|3FeDֺ̡.m5S*q<bQr( 0QP9eb%QXce 6cݟf*I 4 i7Gk;yqEQ?HmWKGp51 6/hx0qAߏB!dE)RZq r˩UB!BEp9B!B!B rB!B!t#!B!BF(B!B!ҍP#B!B! G!B!BH7BAB!B!n!B!B!9B!B!B rB!B!t#!B!BF(B!B!ҍP#B!B! G!B!BH7BAB!B!n!B!B!H+@!Bzk֬t%<+@cccOWtK_fr;W,߸q+0l!*<zx+.?D!#B!ތ)S_sSgCW]Wf\.cUW@Ȗ+W+putu!-!BHG(ᛗ]~}pHGPJaO6v~8c`ƫ3{BG rBzU|~x99Ş"mmm7=UVUL;h@rIP*dKyظq#'i=]5 y)1jkj4/U^]V!v G!Xz λ;>kLOWlwt(ʕpop%#]bӦM R>uکaL{y:~rÍ 7 ov2kK9<=] B!!a͚58-ƍ1{Jd xࡇ;7n\Ŵ:-ZLAB!ԁBHa\|; .'N< r;0q΅'ᚒrvSmO7v e8y‰pyL$<`Q{ɪgÿM8ǟ|*:C!(Bvhnn=ys^ I7֌bw{Eo~477Ἃ.+3^ŐBjK&"U ]QV !wAABH3`@#~_c]G5 O?(fN{3ɏ=|?ѧOu=xl=Z_B>⦟݈ Y0cDy0[ӎ;@Mֆ!CABHÀͯ~;9oK\cc#ӧ(qw힞& ^_:\wa=]I #Ǐ|zuuwډb\oG)U [.CN;( G!2x0n0r̜5+u~ay$ 6^]| fΚ}Ǝif 4{+I:Mxzfŕ]3fC=O!*"slGG?C!eBHӎ;{SN J)4mڄEs^ҹo`Ӛ(x Rb^i=V;>Q89/jjQS]Vp?~<< |nmͭjQB!rC= e0ydcL2SNűL4 {/8 nBઐdӦMowc((x7o¼/a[A2jP( :% k}4m\7>S&cGa9q֗7,Ž \_iة^[rm%=s'q}x翃[Cےt709xpװ; !$7|3ƌu=ƌ &ic{yaXbqCc=&M+';QG=rH̟?+VźiӦơ (뮻l2 6l !$NȱaL|`"_fij |O~T|3qeo|_vޙnʺ< 7y*~򶏚SnEg.|>-x8n n6[֎'-3uT477ci^xz*"vuWlذSLBAC p?<^{5w}7/ EP,QWW_dB69BGtxeyϿyPEUP@AT3_f(P݈B  M۷G ^{P%UDA z|L8!"xgy.)~.&|9(wշ09'buxOǕ1~_J܆35aW7gNķ?y1O5'\$޾ elɵ[A˛Ɨ?7L} !|x1uTq)WS@ /})#GK/ף:ѣqb]ᾯAQqͯ]pT5R:0GOacpKը0?sLPZMgQ)}k`߿;hGUvš4k#*X*nI[ʯ߀cAuUq'O~O+8cb.T8+ɝg| {CUU8x\z,ltرkl}7~mZT  VdBH ?09㎙i8\pyODf 0Ajjj0tPtA8o`erMMMӧO&-! yYwHk}TaNDASo^#~u<چ7&=%ÈBsqoüHi]YwުIW_#:/CC|?}:q >GX!iӦa3g}Q9C"!A 9BvM۱bRxPX2w/YCSN Ӧa(Ԣaj@-jPP cC"PXҀQUn ش,YS^y4֭^x g]Ǝ7e\p.|OR}oo ;}'F(G0qz3vOqG!yx`J<6f JBŚ( b%38#x2 8b$|~f~ץv}~x:Ϯ2v}dWF`&6C /x˱9IK3B}C֫qq>Y6X]OSĢfڪиC#hAs l5bFԧEkͱV}l+_𾝣yI6--]h!y cǔR83+:t(>X,AqտmT5IkWx;ณ#0f*r'~xwhu[;tوofLŤopxBP(esTB4ϸF֣n(N< ;T]9Xl[`&>`@]ښt U9b}9(]_tmwښY~~+_8Ǎ)9z˹u3{~_ B!m r햿}7JX;rP@9(c[PտkbasϣmJ4H (> &`G;ǮC`>׺}סO:A}K WQeMX:kԪQ4CmF@},;~Gpĉ[# {zֿ~< |yhCCOW6XÄ] 27}@},ι{D^<g/@(ԍqBcopb5g=TDQݟLz;agFȺ]wO/4}Sw:.j;b4 ŕ},석ܮgg݂fQ4u" `U/oi~~38j߽ρG߽ !B! r 'PU(/j|a(ٳ @uN.T ؼ6+DxA 5h[:m@ͦ締߆ eރZxPG r=x[gY ]ǞcPU݀:_ALl({~?t$k U0 N;8\  GCӃP#N>fg3;݁g^ͭmhZ:~9Ч>W "ڈR`o'%.:~_ܿ AllwhqUi8p7ܙ"t\UǴ.s/n29oJ(uxj_/~ {5" Ʈ} Ǐ`#B!d 3Jv<| hPq1rxBEP~Ͻa Xąʈgzq(b$xZr0[?l( Kk`FQ.ĥs7r""(..k?i`_7u9ñTWcr",m{5/D]RpŸkDK6k`0|NS0,ly,av~ ngFH@Y/G8?Vxa`YaFDDDDDDQ( '"RRRQ'eD]JDHvr:]%jCc`x RB).eD LHō$'lspl@+(M5߇zZ㒘M&""""""D/ifm6Dz~9@؁HM8CA622.Ѩإ̰HÈt, 7ݳ('"R!u6쨋]O{^uMf""""""8foބgq-캔F\\ Bq8.Q¶KԄF+f/7n(| 2y{(SL؀`P$'DwF]=os@r2eD8O&k7ix ȉHԿ_?L"15quܾ-⸔.! lOy.⁒Kq%dõ1pK޴''8vp$d^p!0 "^ǥ,b;.X8vɭZ,J{r""""""͙r",݋2<ii8Ɓl.Y AJ#.eK6e a *&'\ߍ u!I7`O(!䁐ePoS\8Dq 'FM-<vW+DDDDDD5DYjMAi)iD %r8~0ʿ.C~CRj@Rl@R캔:6H1x‘umq)2)|Fٳ#BQC8ޤ!hL$ hArJ a6Mru.VbuJc͚5lذK&"""""rP@ND%ä/.xWǕDaGˮK%?Rl߂~(AePKPh(Nɠ(!Bǡ0TDP:z(1=PdC%QlU䐻-KcYɓxo´#P״FCwo&F0>2 J"ۡu)3 b ߇9vCBR%eD ={ֺ7o#55N:,<|<uY<#49s"""""r S@ND-4m߽=c )g3\^L~ %`%Q̔$lI*#PfRBPA(aIBI!|@<|u-f$PPP3}3f |K,DL.]xhѢYYY˛oƍ),, ++qѶm[V^ͻKii)@0rs>UVQ\\Lrr2?OiӦ }}paŊ^233=z4:u:n_56l ??VZqꩧ*ڶ͂ O~!C .cǎ|G,_5jq|A;8FS{ضͲeO)**u֌7l\׭2MDDDDD] ȉH6a8~yCLMa)⭷0(%QRuAb;.niO؅0 &> EXiDA¥E%D,X Qq[.޹mߖ-[mƎU}$%%1vX>C/_?PksN~ӟ7߰|r>l\'##'DXb>,3f ..v ϦMXd YYY {?#FMqq1-Z_4N:$ `;rJFEzz:k׮'K.Ѓ СCIII>gڴitرvٹs'o#F㎣[Tci~?qƑ̲ex駙1cUUrȱC9i<ɣWLͧD 9Yq%uHqy JvI1)AuB!lI0PRd*uFv3C?LqQ1^yYP9ضW_}' 5k4h'p@3zɒ%Kp( ѹsgxGؾ};;v$33s>YYY[~^z Yr%Ç߿:mqhݺ5ݺu 11~۷ɪU>|8Cܹ>)SO{ 0N:k.VZS@uر#[=jL֬YÄ $ǏϽ͛,ʼ""""") '"ޠ2doAxڙnK]ph,_ox<F4DalEq)3]FC49;R`b۷9ב+Wѿ_[zٶMqq18Caa!7>>H$rbeee|Xݻwxo%ݻD"k&:t`ƍzI۶moܧvѹsgqàAj;T_z%^~ضMQQ}2CDDDDD'Dp┱ %9'{)"x|Pf*<r!D Fp0Qہ? cl&c7$Dq<@b 6V_?ׂ4|:쳇U'uLZeyyy$$$T}.;wdѢE 038_||kc_UV9hf9˲8ox衇8S>|xLyUl}uYdgg_bbbyյ"""""<""G)ˋ<[;&*)y'D ".{" S1)p(pBF(JnCiEi/A K a%IТK6fLǦYCêeYǓk׮Z0Hb 裏޽{L/u]FIvv6[+@V,enժ^cadffVYh4OVVib@*2 .]pr'rJl>2{<CZZ1*4Z!'"bJ IDATnǰ }qν"Npɜ|T>b؈5aOLo rq|IJ' gZ`z a%Vi=خm;X'、v}<:tO?_~3x?>:uyUVZZtRziBﭫK.m۶ARSSevx IJe|dddvZv777M6FYz5yyyL<(_֣G/_NVV_g;233m]vuk+V4MڵkG$}We^Yi>cJcSOp޴׳Zgj\+v/upQ6x Jm).  LB8%xhaa]׹>C GeʕtI\tE8))).III1ٺukƏϊ+?<lr>G&>>իWd;vl9SO=ˊ+())!33Sêatؑ/_7mڴ6tPJKKYt)`O۶mILL={xhݺ5guVVg̘1>c}]~?zo߾UݿȱP7*}6O{?}{W<Km.{9vqŗ"%b`[XM%l.Q>9nhS>!-,Z j*'D\|u/(q]x]hѢuO>^G 4l,"ILLDDDDD|v" >0R3{}Sas+mPmcRFz:o~˭^n]:p\>n pe"K)l-8\`AiIF^ٛ@p8J8ўfF'""""""O99S8e0[".[Fb Bʂ!2e񘔖'9;ٖ19a;t4EDDDDD eUD* qjUa]|q#_|_}5[~Jqq1뒘Hv޵+=wq]IOOSNDDDU/eUDIVf&Y2lXSGDDDDDDy ȉ4*DDDDDDDDDr"""""""""H9FH#R@NDDDDDDDD) '""""""""҈iD ȉ4"DDDDDDDDDr"""rXp>7l"mm)*"ԅz1+""+DDD_օ.ї!x߳<;iFҗza73epGZ{Ʒ˴ȩU6{3#9jrQC& LcvcZQ@NDkzV7Pq)%%Bon¼" HPg3}clh0D?s[!нg%XTHGmت1DDVihFSJَmma%yj= j|i>qW3x%Ft㫺zchU^""R """lП HE9wx:ѵA!f!ƗƬ#@Ds)^ s cx tq1w.eL=.>ҺrqQc lr 38׶UhF9o{l] a&sVӸs)|z%U09oX2q1SY,s8 87~o*ruGV0nd& aq{9C,A؟5O,Uz-͒/C隞GRzG6+]Wu -чK p.RvO6eaVuFjOmXJ,p}}9XM]iXOđA`8^{vKh =&6|gk73]NNZM>'g;1y/݁oe6[ū3zҢdbvOSYen‚iSH첆y1fEa+ξ#3^l!WyUO,glⷘu<7Yw͡_Oo>-cTcЄɼw!o9ڗ8m^IUtcFqٜJ*wȨ9w̜m]J`xi72GC׼ͨ?9Wr}VsS Fի̧}}(,xLZnS8;tBqdƥc'~f 批=b́,^y7°]x*s}upֈg 2MmXu:^7rÅ8km,FlY͚&n?L}jcײݿ^^C;88;Ɍ|'^zm3V(iga?X?}݌sڇwG]~V2]>i2C+KdMp[#c~ w޶.a)I5SYm 3&39$c{"yvpO?%]/<*?j[٬^2Rڦ9O÷CYy"Wln?_pfۻ^_zK/ %2q=k1~j:[ӼZ>wz[UȑE4gxciWpq WG(Zˋ12#A րӕPV> <M[~x[۶lҾ?,O"x:k_/OmX?u[+!%)WZ%>sA,YYF¨8}çUKc;= q Scvu>O>mpόF 8 0R zc촑w`IV}Yp^ ,cM)@<]w%= e뢦v6 !B4NLdRx?IeNjU1"Vwؑuu7l=+/Ÿ+.3zqx_W੽UOe1gԦy(yG+Kо^zo=j%k,~xdƌy?OO o`lb ֙,=l|8pQWvZճelIu?7zwen\vEW]2> ""G""G;{oy5oT3 =I7זa ?G"?_ƷitywYWn>}Yۢ-=_.4l.i {q m<;^.,&s-uhGs8aO=Uo|-G,-0xcg5q72ezQC;E ] ʛ^7 x3c$%\|%#jxA3yNq|\8waħ$Ɵޟ}xŤVu7h}YW[%!!+qY,Xב޹{nuΟg>Ɛ[2x`lrT_sF=(QyޕLW~ y=+m_P`^!y+s)ZLSxcrk쇱e,}%y5>W}> ""GC̮fV<6GXo'0Ucɶ-ѥ{.40hg5h_ino_?{PY#9~$:6 {.XۮYՍc\7_#]Ǧ.4ī0= 6V9Z!'"""O^z?]wgK9HuRv.hhR^{AV8Si}@Dؤ]k޸k&7*%v|ulX42;67yzNJ;o5 LjH},^y7°]x~Xkna̸?u(.3^I|3s̶-fy9M`]sf{89nGyL{3%elgN yվ<-7ei{K46DD?u5S^ǟ_{y}CefC>]vլaT&3]>i2C*s_Νṫy6c:mMh﬎v*nYiOʀ8M7(~%+Hu累*3OS`K_`C^-#zUIɅS~l-5r +JR}0HS@ND&p(S=th`V[0xUݦ#C/[Ҝ>ϐ-ǟkxQLTǴEDDDDDr""񻙚AzCmT{8"n =M[>Ե?a`]98ˡV?O֖~+o&y9MeB""""""GDD59cD2-fxv>K> Ɣժ/S~4 kAٚe)-[~jĴ_M&G폰T&V0v|Ϊ/reEDDDDD^ "r1Zs7riC%-޷ .c_gsϹgPtY͈޵+܍l[EO>Cɖ,|3k_z1hp|/îp` 5f1zC~c*ܮzko;zrÇ3o~ȑOW.""Ǡg@gt(`W؜ [ihJ Puz߱f@99D捻frRm0W^x\""""""@99X4u9DDDDDDiD ȉ4"DDDDDDDDDr"""""""""H9FH#R@NDDDDDDDD) '""""""""҈iD ȉ4"DDDDDDDDDr"""""""""H9FH#R@NDDDDDDDD) '""""""""҈iD ȉ4"DDDDDDDDDr"""""""""H9FH#R@NDDD6Qvi)&ʻ5e;֞KhSC*hsrψ ipޛy $) IDATY?FEX$g\+G}Dɿ/BNv9iF5 w*0 s4iZ=oHQ@NDkZV7`Q!&Vr)#x\ܗL*sCCҒi/7La^Q:@umTW^5;mhزǠI=XkR5zDD( '"""G5O-ײFSJَ_l##V-}-iMДW v[""r """r01kZv""9-nfϥx3̝2-'d}ܹ{~|Dͷf3ud&HHʅOlݛF'1MOnC 3yb]I|l Cnjd}^ <|zNK |Z>fcә4/2{ķhO3ޥ+<ݥhB~=xSz2W>~3YJ{2oD>;Iq8nE^oDY:%u8i);TCluT:,OAfby~&mvFU,M',@n[_6u;yـEϋ៳O#e_X=~~-g|udžYSUƮK+G_/`7,򩬦|,#Ju}lV6W..!6OXT]-(7%Һpw8󨈈J+DDb 0K;%|pO_o>ʳdܛ. 'o'-ceSo3͝ 2-ՙLNiiQi1s;S_өss2Ca)$vYükby"^gNI?Ǽɪ'pJ6f[:r/fqڧP Q8LҋӱZt+_d& Wqz6$;Xy.m{~çpoϥ{,T>+|׮E6E༛oaXKuPIvߥv?Zs;Z@lu(Z:1Yl z%;mdĐUE1c9yBz{+sz/Oaٻq^i=mkY){ I,yV7?>Sp1hBl}P䑷5o3Ͽ`ĕ76w_T}|} ?>lgN{t ZA0uϤXw2LljY&y}KJg( '"Ҝyj-,G2ɛ[Ȍ+'v}w&Թ3W! 5N>dg>yOkӓɿ7KbeD.*bK!w+i`0?X86.#f^7wg}'r7/M?o<ܗwf,wE^@/n~s1}2 [i`bB繶f]οϨ. 4vk[ƚT{y}Cej9d |/95;Of|1D׽5;_pmkz杒Ts>ŘoЉi(^]Ϋ~N.tDFv~( VɛH!S[&`:ؙ@0xUݦ#C/[Ҝ}4VZo q줼UgƸi'6_DݛrIzf:]s]D\*cXc~֡Ixed_۔6[=ǎ5UID-$(4O|9nhAv.=˳T;`S8cS!:ƩGH8*"rS@NDJނJ9ïSұQ 8o5f8vHrDz|ALE?bCyRXG/7--ZBQ2Y9dm'-4}~Wșncsep;^Iډ:6 \FLt(c?1~_m6%[G7NFw5纎 PF5Sٲ7 @7_k`._۔>CM~"M lbSޮ# 玛ӧٷė1#& jĬgY~#h3ӱǞD4mPy{䑚A~\i)ٲ ^ۘ*U22ڳ; g8LK/+sߤD€GoW,)KqsӺT8ɂ:kwۡb֣RT%i),5q}(skx<؝ze&㏂, K͛hCu7V' /vqHύыpLpi "oܶ%d܀$wnN7sc%QmT>Se^w[3v<ЇKCʯ9`r74qADt 1)afsV?{7`sq|ǫ|kSۯC_b c<!AϳWΏHIů3rh^)_!)Ԧn'T+@Xxc\'9;u6`uxvyy̪r""""WTv,=0NLMmJDD e/$2~Kam f>R;ߝE S)-YEKVEDDDęHa)%S.""""""""R)F ȉ#DD`Y))ԙʨ}uz?6RDJn왧>N=NJ";id_lH)?+2.u^*senM4h;MY:/)Q>\X|ETIl7,2U>ǦLO\dxz5BLh 1To(pOKTnԙD9+F14q.`\2C+AD($=9C0LyځLCRDևd#F+^Yrq6TePxR;{MdMF3C{4 伥{&gN}߂DDı\ l,u^.A _r 3r.7Jl[ >{s c/_v#lח-:!X Yl^Y|N`p͌ٗpGRXEln1zz񛾶_vL]1lLLڐfp jԞ{u$FgX|O_€; '2iYڇD$>D ƑCGFUEDDD>މp}3i Iߥ0 jRT0AapmL_*1Į BHduNdT ބ{~~'4$"RɟI&d`}nBitUK7vIٙģR>2hE4#Ԑ `^DH UV|`,=%VV~~աJHB,Mϩ8wLN\ m?{BTK[kwO$9B'6喍yET7 1-;gw/fLT%$ ZdȹDuXePG2 $4 : .oKFFT/IH`5v2Y`B ` ϗ3pb\\+ʑ 3(]A]@DD|r""%l7&>S ט`7ϠqXNgo.aٶk|H>NcGٮ<>IjYdW0Apw0Z =d0GOXسzM4iX zg=j:L0E憊&e7YRvץaDܙ/~[8 m^,& sOrڒ@iniG( ̭ؼ[py7_z̑0QHA6ywɘX6"mngz^<؊YkߧO i8s?͠K|֒AO@ݰ|M鲎I߲o%?.MKk9yZyt+&XUlY^1cUzψRN%^!6` ϗkgn>lݸț~_:: d'/aI:,~ wP$|k疉[avS5#h`& n#sCkE)ٵn=Gk6A2&L-eM -kc{u uξdܔ?ϡvzR¢^?SwZΌY_,fxҲc&چVh͜1|Hg*6kQY-n-/K]xa'w&I1:m&{֣p3/`^\>AWrMn?̢L+F-r0} ;&Y:}>T4)lb{p|iܭ=H譏^Uh/>:C;7K\) 0LdUD*ڨ9B}_ |,{ӽlΝܹsXID6?#w Le?ǁc9'>NKy,:L>mPm9>~ ~97:3C`Ǻuoؾg_e'uҩ`LayMi쐞֬,1 S'8aeimߙ$nƘe2Ruv#_lH!X~Dc#CY=p2uA0wdyR >ucth7v5/R7rB>ă7J;F& z%y 9@65ۻ UھoA\H!g7tJwr""Wpƒ!3#N9e'u`ʇ6N k̸J4?%/v&"yIˏ`Lmqĩ()Ʒ#S׬`j V |,6qw$'kh߽!d,lOtƺHgBZvFr1;ԥBCmˬ_2m yڽF}IߺJO&NiN'a&|˗%v#B[o厙 0ے9z=C^uxO~a;uTJ `;&fzS3kJ۾XÑtk:0sy(ox3Qep?SDD8-Y)rhQE&/XbDX>y;KW_Da"ڔǰO@ԩ?͍OjV`2@`B;ێė~bk5I:m}"b,Xݴ ylnϘƵz=^ηN {.xy7-27y=C4șiV-]=1xNkژ6aO9Mq$ =۩++yNyʵtA6:L8,rXPuk#1Ƙ10Ӑyq?>MpCO IDATk/Gm9lc?I /""r""%)Pbb D4!|G%ҳLG\o6-rZЭK~MÀl.džwo3#v,ԣsٗ@ٖH-+Leһ]8-ųU7X.o˚?qs/ncs@~ԨUͬ~M oHh>ۭx}$|!*,,[⓵sG/_[+[yvl{Ѫ"[LIE?bCN\Ax z:Ѻ 3Zh_jLzX3O\O3d 2l~KݘLfLIf(:O(w#>GoC>c xђ#Yy'H ȉXܶ%d܀$wnN7sc%a}Ic ˾_c[^/ i!txg޷EDN%$}MyiA4IDE}uw2Eky 3]rJvc<ئ@oIZu Kz\ g:IpEK݈Y6*0dd{Md܃A}PM4f!ʺ+; ^Ra(^#)v^`VY*Û>#_ᚧk]2ڳ; g8LKmnvf*?dn5;_GƇhgn|CFڍ_"&;0^Pg?O'y‡hciPjxy*DxWnLDw3i;fv; ʗ>bzd4^mPCS9Lyymbm@ZW/ ) Zv""rS@ND2Q߫|PF'ӫ /_O``@h6k0y|29Ne]cJ` H]45k*ץUbcF+s{yo#&3D'psWam;)4civBiNMC l[ŧJwBߪ y֓sgC>Mx~O1/kQ)^Xzgf޸!!-אVP&F{=ŻY¢ܸa7dohxޞ\oxߐ#|C&bNV :0~$T)Oފn]TN|4m1 uxɌ_2Ȃ4>A|ChN (_<{<#&⻪8a& &x:(VNw4 FWz29v| 9ְA}hNAD&IZ7\lHIgˌm7n'E"V6,>!ߨS.c?1'fS5ޅxd댶<%v}cDSGm7\l ,<1Gr::m~JR(ʎei+Qh/lj"""rQ@NDD.;NrU@ə)dqg#liKgQ M/^˶7rv eF9Gxz?e`E3SYt''M@e[qMe*""""%>cƬwH)1^EDDDJ}|)Lu)L`Hik4aȢ8N,:G)c u-Ɔ-EQl$!A֠߂C؁/ӽ~eb#W%flĭtjV*e" $8 zeѪךENw9u7ךZq&A7FE89c.]P12 ȂݩȆuٮ~1|~ԫLV?X{:W}3idd2a2Gw`݋ӫ1UC /C/_"`ET7 < e?w])l|*G+'5"(!vY+JZ!FWAaӍ<9'oh;ׂK#yCa!0m1ub~oӧܵqc?]È073#^MX+/Jqےk&ڌ`SpMfN?J'a13 z}VqAdʹIy[!=f"mn!ج5GMfmh&Q?p=]ֿ3cve^'blr|eكNee98|(@ʷ|5؞h中.خލt'id:wN^]ah?vO{-kcցi;y#v_6}{rEDDDPUZѦ3WNY>/feaiȍ,d:ik҂sc]wRb-g39NB m@{ _r} |,{ӽlΝܹsXID6?tYC:mpw%uٍ|!d`Mho|h5+9||/gRߙ$nƘe2fh2x;r# z%y 9u|][aWS\T߫|G l/Л(ʾT<{}>婍3DDJL]]X537TBp$ Q3LD+Kω9-wK!ۖYf,aaN9#,~rkP(!Ny~#Bh67561o^d5hK6ނ+f'TlK1 ֏/2^gB 3]6."""RܴdUD LhsۑO,}m=I=6OVd с6N>B:{Y;bo[yvlب`KZ5l݇ ` x|{yLfLIf(:O(WAS/klpɑ~)z.|>`_ 3ڧ.^gm2NX}@"""%njyf MQ)*ߒ>0Wfm?VaPOT)8XqTwM4f!ʺ+;M_>z ιe|?>0*UM/Cуh_&%t4=—};Pb)Liط4^N@T>Se^w[3v<ЇKCʯ9`rF3m[RjJ Mrt<=mgX:'okNx2/Ÿ3i,# l-[/pS 6Xp|m"IS0۹T8ɂ:kw>~ϼ{}ſ>岍5O6ng?2>"Hҧ ~,G|XySG0wth2/7TcX|Fx|Mn~xe7!ٷ7n/AHhb5ejxL ͺ l1OS21GV̚3a^B1;5V Hx3&vc &O|Of?Gҩ,+r]tLC MdwUyqL&M`tLQ| h@H(U>u(^لC't'Iۆ*0a s"HhЁ&tJ~aW1Ƒ̝ ۳˼7Pށ >Chnԩ-ϳ?k]X9w}|?){ T6>,5jaqavx8<,\v|nz9<'kp!"ThSymק ,@d4 O}Hۥ>io)PRgCDa?s݋,ـasx؝幚fȉH ʎei{]^T/"r8?g$_Vo>wcfNDDc7A&L&&s$}zQַLhU k[ `#y6g|+%(-0cG/ld'egvK`CJ_ Cw3Ec)KDrDC,T}b9%}{#$$0[Ut9݈gt ! >d}1Į BHduNdTZȆuٮ~1|~T+??NPL$A 9{1cz5Jt(!ez V󥌌#iGGl|*I jȄ]ClV8枃)[^ kV$c+/1T '$,r׵>;[ٹC=s7yԊ '84 1b.R.|4z+Fx_Wn`l.H{vuF^V~;n-QL)B Dxu!7qn_r˿)HlH0Ue47=&6^9?>L[`G3 U{2n]vPXl=)q`+zFz{eG1]hKV7iX4nBɄ6O3i_.*@Evo3kz>y-f_|0uvvo2R0]#p>N~Fkf[ţ5s*zTl֚& IDAT[P{0rGiփNee98|(@ʷ|5؞h)4փuTV0SL7+J_Bކ$W;}l~r5/ol.`ϴ#)O |2[?)[zWUcyQ[D2om?p3oYjр8Zj}=zk~u "Nx0df\-o1C]*!(8ض5o -fSjTgnPgkyޔ{{"wwʥc'/hlWw5>9e'u`ʇ6N NvfwFrNlI0]>)@|؎q$MٻQ4Zf&-ދ,}#m֦OupϙQ3LD+Kyο03qe0N|FQq/\}-΁,G̔OٖcҘ)H<ʷȥfWF38%~ϖwɪm\E@j㮻´iÇ yEDĽ;m{Z.&y>`ӤDB[ϵsxu'YRA$>f[,1f"o,ל }ͥq Qe Qub.GlK>x92=_f9W'4H}TCtS8 1GeL7͇ύq̱5p۷qlwGyƁBhwUrGc)"_HQ-"Rdgg3{?yVu/N`8W:0soDfނrmˈ>嗫ׯn[fИWLaDb?SPCkvBg1np86ǘ]~\S^-"d_od[Z"?Xif\\͐s\sFfɹ[s\|5) :rw~v'k9<g) '""""""""\ο4KU`յzoom| 8$ssspt,Yu9l?;L!w~`@s""""""""W7wο4[]@KW\mjkWO4;NDDDDDDDDatϞURAnx绯) g"""""""""Ό_{ y ͗ m<|+h N9ԌH^5e4(;o[a4""""""""ru1X3;WG>ɼmc8"""""""""_{wF-2A:O[DDDDDDDDNbނr= % n4lѿhPFqVA\7lMDDDDDDDDx郻y } |Ik)8'""""""""7f$w vm `+p0.UTצUAisT\/DDDDDDDD$(K(SpNDDDDDDDD.'Estc""""""""ru* Ll|IENDB`tootle-1.0-alpha2/data/screenshot4.png000066400000000000000000004730241374710545700177340ustar00rootroot00000000000000PNG  IHDRLZOsBIT|dtEXtSoftwaregnome-screenshot>.iTXtCreation TimeПт 30 окт 2020 16:44:23 IDATxwT׹w-KAEDXP1-QcML/jzLb)Mb-bQQA( tòlݝǔ]f+[`q;w{|9 """"""""""""""""""""""""""""""""""""""G /""""""""wG NDDDDDDDD']uU8NDDDDDDDDuVPv(Ux'""""""""PB:2j˱Z9iim :$5ijޫPNDDDDDDDDڢ଩[r(waW[ôlvH[e Z^:k悸BWDDDDDDDDZ l+_k9ހOqMsͅv9N ZZoO0P=Vk¸·[oEDDDDDDDwjMX\\ \Hn5e е""""""""һ%ؚmv-Vkø·g{oSU '"""""""" -n-=o5m9HkBµ7^sdӞ lv5kiVh)k8Y5~O6>HքqMr^}2ekvՔ\U5e o˶O/[;Ήn̈́RE\mA@{*cۚ ݚzlj9ĉHVelNƺG"s|Nr癕rdlkS\K\sW l!ep\K긖Ɖ RisrقL͆tmkb-[l!\`f{.""""""""C[9/c*K-^5|-JP&uhj|87X@0]r""""""""5@9O"psp&eV5׆ViK d Uep.~>:)3GQRXPiHQ,u/y|{Ԭ2e*ƈq!\jszËc:x6HG28q]|>?׭g}~ ^Y骽f[xzc  RK̙Ͼ7wo>5QӲTl9XV[eӸ;ks3@0''s¸x AAa1jx,y# R('"""""""ҫ 8Dz9 ߲iO 2kP jkj2㱞Gmm DѬ\!7/N`+A(EVP.jBr-\Up:4c_{;|S(Ҹ"""sf̸CiM \\s a링l߾2ٺm ^x("""=Ny鹗xlYNuG^RFԙ38kdޡ]l [͚?>@5;o#k-^+&qZ+""")ʴZ[-bVȵ޴C+߼۶1dC<^]xa!ή%{^`]UBXc~3G꧿#0鳜{\p3=oP#y;8͎DӴwVx]V3Oxm\YY_f֭øx"""m|j,ӧq! QzV,JVL.?\ y\fyuQkkw/@yEq7oڗ-ne7zכe}(++7{aH{(<l_ޭ`rxwΌ8Ծ趥<FvV䗌bsM[ɪغc7{DOL\yX M \T o/M?}_b@>zm\5%u1>_Ğ?%#+\'z_[ώ @N>}şK {]^g}Dv>tE1$˸]GF|;a]̺6˸Pt!HV?iC8tsF2r^v;?McO>lXGl+sik זtT0.P8yjװ*,;K4{]?#UYOw"""ؕLCݏqޮ(>+^Zê'?/WS'4q÷ATkyo|~=a2BXT]W=d;uX8v| 9.o^x~[_|>42v127bqŵc5K62R~(.%aۢس9ތrʩk?@0NCN)r۶l&d#ݿ%_Lr%pׯA5c-}:Ь=\kҚٌ1BMU9ޫADDDg+=+Y> :e$>`|eߥ 3,d`J>;I>ovޯ8:gS' W.͚rVXpr#0{fp]-v 3/uxgs '" OӟAu{)-pX۲kܛW30bL!y;s'PC^}e 7@8&u疫~"""]q^>!QQ@~)Oe~|}vImO>C ]alظ/}f]Ø)(MܶķnaK3ߠzSn 6i"}蟗ϊ/ۭܼTXu1Dt +Y^/~jkp\ZfيYuAj,p1'C^WnݳyBz|ssp/}m2G|n""""I۷֭ga 6[}wgڝuvVikj%_ W/fS\I#R(c[ux;輳Y(s H s.lnv!TG@3˒r>?<OWÀsnkƟ2_}V_Uش~~YTaM'\ 4}(y5 u >dijxYHO,.jI<#On[2|0|7aF~??[vR!XjךYg ;=j$7m+߼={x-ZhѢEaPN|̂e,Y9=+ZSybN;nvJϜΤīp(:R㤹a]t[migKV>=M1c;YVU+| 0qjڿomLnL>7ys}8â/5OwO9հgNxb Zr]umLgvYmXh>zl_{ۓM(g>l ͇gj0Aθ[2ye&vs(_!9YpBF^>Ïξ}dY}qu(Q7@!LN?˷kϯd*< +zކDDDz7&4kۖ ݄fex]۷v;l>hԌX܌z YA-Y8U9f_1Drr1CEy[-"yq F㊈G= kKǀxe,ԡ#RYQm<]5מmPDDDDDDDD 9KDDDDDDDDz. 䚞*GSyt """"""""қt{Uc xl<Ѭ""""""""ҹ,k `Xq]UUDrs)YE*q\7a`qUDDDDDDDD:\Ͳj>?"t[yۻOKitn!!cx핔 Jn^vI8}& DUq""""""""9u 9c B0\|>:+"G. &"G$k-˨>G""""=yRUy=;!%". Dcln\e DDDDzqBC! ٹ}Eaq_1<6o"rĩ8uP:DaH/8.%8.e6o"rDbTUVЯdPw7EDDDDY$uwSDDDQ++((,Ve8ED++)""mhEVD$7h!"& Dtw3DDDD0f99X멻9^w7CDM[HuwDDWYj5oocˎݔUTPY` (ep~ T„#9阣[XMØ9 +*WWyk,In62ZEewUos 3j8~ v2s!""""""rR '"ܻ<2Z $ [䪵6Y57iS+*캋Ú9b8Ξ˽΢*Z$61`Rq\2bkKdu~#uu<<9w>W\0?t.~mǎL:ɓ'{ܹsYl3;nlHo"kmٱgnڌssc2㒛R[yjs2kt:/?/V?&h-N(iaߞ(} w9DDDR]]͢EXh+pBONnn.g+L~Q*"shUV}$| :A\78n~\7% >7p]>>6^^_{.nދw9画Kɇe}gCDDD:y,X;3'u]l޼x<Μ9s뮻_￟~=ٳNJdYk}p8X,ƒ%KlxX|9ӧOk!RSSӮs}cȑo>***1bDz۰ap[DDc*"JEK(ijW,d8J2 z4L $&pC\"`%oQ#)UH$|.Ý95kkWUũ'Mf}ؽ&2z61]͌oSܯewÍD ( FB:e2(pFY 䎥pqN͋[oğ~iuo+~˲ b굟(͉w >k !vMmm-Ç?={PWWǬYx'xl+ֶF^DwQU5- IDATbqU!N;y2pp HB~ߗK.1.s|>|n6rϗ3K=q  LaBO8ǎ[=<f8>?>#򑛸滧֬su5ᱟ\x|^|qsōgfi ^{|9vhr~yyxbm5NjՋ;SW@LDn{KH\xfE] 7ܐ^nt '~;hlJUƥ* 1\uu5yy:NDzUȉHgݕXlm;n oc EqUX MV0`t[8GzUKt˰CÄBp1j1TV??cbkٿq!|`1ɟirm3?Es}iA Cnzx{ ,y\VBr6fn;$hU̓+Û?ΟdVM5~)xʪ9emo\ącBӧ> 60x^s]{2a„yH9i_GQQlذѣGi&8 j1EDg@4B,L'~ (̋0IU."zSD\q8';L_=_-_7w?HwShq@8m6qwʔ)$J)fO7N$[L^%|(.gqeF7ǎf;o&s\ua=(/fAbˎION8fҥ0sLJJJ1cH+V0gBǏZ1N=TxcќN!"r"ңF6 R 8aq,}ubX G= 1 ǁ0/pϨ<~?ߚj u5Q>w⺿v3|sW/ۼx_3iZOg{ n+lMj,;28hR묪ӲҵBG(&_~O0/H8@B;q^rdlM0T$Ư;DAL,ITU{Լ髎o8.#8jkW~.~JS̹Z¶:jwnOsKq`_Ɏ91 _O~&;Bk 4z>s|o>ۏ5μR'"""""DXUUn Yks'N<Pr <·Nxes{wM5|0oןy_-=;筝ss Lbs/8EKt!"=VUMM}!U%$^s 8P8 '$r#ǀO BƎ<8)XTkg W,_S!pWvx-(} `qc^3/O[+'l]8}8t3/c9@VN^NOԴЮS?~ʴB[{:O^{m ψgW<ǷNLKo=?oIC .g>8q |339bj-8Cn>wPQ_:g_ĹT?F4 7hY0GXڙ0/)Sfr.3\&8nJ;Gil?F뙋'*+~9 "70j1-WU[ʪD1m0C18cu1={~R=Ւ$*ݬMj1s|gUəX%'dmX%BQNH3H+Y׿Sɯ(Q^"""rxo*J fH2=ƒ1 xm4%PHT-Ui |?a,Zz6A?ǏOqSD(x^xr&jb :]/| >zYz\~+N@NDzՇa[`㤫 R:k ??1Gf`m5q&8 XP 8Ƹc 3tKfLNsHqƀ!զdۥsy;)O2'_w+j$| DGŽͦj1 9լhÆ|?TW`=ljT[%'ip'K{I6æLH3O=Ouw;DDDDDWR '"=A/YMS]Wj6uKḇc!Y`dU;f,~öTfGq`y^FH@NDzU㽥4#̤k[-QFfZj^xl9(KΚj![S]AC4۰ c-ց>ĢQj ?9уsL}$P.Y50O2/dODz/QeVUlRYJ$0ZɉS۷?@?@~q7M7d{6k1ldA+ȉHޘG!/鮧 /,Ku~CaQyyD`j]Y3oM}Rbh\@Z˲exg٬Xϲx9ȑLH1*OmFRAIelO,H<,Tc@Njeɒ%lݺ}֬Yþ}:ׯC'"""""r$S(%h6ٗԤs`qdTR}OMjdyP:& G;.ˬKdk*.]իٳgQXXѣ2e :t<r"cEʣteSGӃ%2y1ܬfgƱAt #иKߦgHT%mm,q @׹i&~a 9)))u]v͊+{袋7n\-""""""OX1D*kjj&Qd} %!^"D3Kc ^j9뀓KVy$goI^M\ɽA]N LMؿ?׿8c1c ._2eFſo())Iwߦ>}0mڴfCxORZZ#<† < /˙>}:\s p| %\g>N9,Xի:N,%\̙3_|I&qUWq9eߟϮ+.aÆئQF{n***͛73tPq"""""ҭȉH:yP:Isj8kKsFnamՇym^u/ <ѣG7 R3bFEaaam9r${ gĈmEDDDDD:H R][K],Nh+j}>jlscc '^q8KtU5&c=<`dxg,69Ɯ$@']_8(//Y եkq̺uv){졮YfO4hÁXz5 ,`Ϟ=Kmm-np˗SWWǧ?irssؽ{79MR"#F`L8;vPWW󈈈t4r"8'a/ʥ&^HVQ?iCr$k6%dM얚@$g,x$+DhqKqBYݷo999Ys<^..(=f\Jnn.;wGeҤIwy<gСڵ~P(shmi1;YfQYYɺuׯm:HGSU|CQ$Z^$!5ꦚƊMfH䬗}|>pzѣGdvAmm-uuuTTTP^^;vlW,cƍ4'uٻw/}mB!v؁:R2\}TVVc)**q63p8ʕ+yw7n\? 95~?0eU 6ѽԘDEU5N/cdWR3fvxq0Nj8gRUgcx8Z0Co˰aXr%<3fG{pw0bNwfb1.]ʾ}Wi p 6gäIX`0dꨮf„ k-cqdq饗 0uT9ΝK o߾]6kL\j1ĉYp!h /ݟHGQ '"JN0}*dG<1^g%]EW%8c껺DZ8.Ny"3}k yrCSO=/,^O>r<ϣJcaY㮺*3駟f̘13fDXbs! 1~x&L9Y`*뒛Kqqqv4:^z1cpy3g 4gܔڔr'h" D߾}#9d~13'cq3O>뙏'TUVs.ADz7o`c85-?%^zͱ%Zɨkf|zKc$Gs6Cq~>q)O?4G}4't|>jkkMOp$ٵk{/^{ACU,gyfNDDDz֬tn/+Zc,FKJ*Dw  (.dOYu,^FeMv6=1kFe\q2tĤ.^b<)(z-'Nd,Xxh48xǩʌ3:|᭷ZK~~>h PTTDIII}v,^`01z+"""""ȉHs]CEeHe~J0Lzdgbmc u%/7.5`.TTTBY'V8Xkٲe o&΅^׾SOc e]AH{)^/7'p(Lyy9Yy}PꠚZ6q\rs0`#13g2s;8\wuv<@NDČEEESQq jjMT,ø`0DNN.9y8DDDDDD!r""%?B8h55(uu5bqx[u|APX]#EDDDDDY DDn-țTDDDDDD_Nw7@DDDDDDDD7Q '""""""""҅ȉt!r"""""""""]HHR '""""""""҅ȉt!r"""""""""]HHR '""""""""҅ȉt!r""=erbݘQsݖ.FvwS:P?,I]?+V?ß~3zz1~wqW|g}\{8[goO ﺙo}*n~j޿/q~ƓAMpz5ȡR '"=ҁ.&lx[MTԲ޿7sbq.~.?T@EP*tE& H K H%ew#IvR=p2ٹ3wئ4Z IDATy/0½ѱ# #lw_G>GPqO)Z- /5?z|4me_ۦtϼGdkW} }^b;+/QI2yT$Y!DN :BQ0i?m?{߸G:eI?.;,ܾpa$=~m<,nj>j)g9Bbb gP(]}ʭ~BJiRXyb yvnx# \?YGÌw԰%l«+y/ߘj3Bnogey¾6?e@owơi3v:֊G0#?lOgْAbeO+?zT&L?yBS2 'xb)ũ]S!r[P3^)#wv\ܘ2P^1G抉*S jN&џϗ Hmj :㯟{5Eިہ cA-e4f㬮oCo_yfx9Gp*kZG`72jKK)hxv(I$ɓg!9#SVO(3'<΋VD6GoĈi$OSQ;fkuhw ŲtUL'EQPklH&f1.㇇Fw+ej N8;XgÑ&u{5|-[դF#To6sGy71Вn˭v;jxhwt27FkP4Ӏ/ӤrHzZma$fN>H7';O$Ƴ~EBA)q^\r]wL˺{|;i/=YHj=V@Cxj!*<+;_P\ s;i/E++^ eH)̰Oc¢W3ekWJ檂|[ow8v Y".4K%b$vjLҾ)m 6t.k.c[R% ';{\}+ҬvLWwml iks))7Vu#*aԹqTiQ9-Nz/zMSグy(q_w?ps٫(Sfxm6[RT+틇=F#ޥ8c6C7;vNxnKw:96eǝe'y.B׿bKhRLoѮF8{#xC0eR_/~R G#vnF2~tzc5Fl磒gk!Q%O !DvX.1G+lSsAyGpLwCWѪhʳY~wVNuSӝy] q,E /bip0Ծ;zqr|ӗfGk`*3Ig#vNhb+(Dʲ߾PB_g{ 4WA;3J6/]9g5PvJh5;CG;)`Id06= /7gl(4> Ι)\܃*aWw {!E#o#2]˔%=?wYχYO Kz}bp}YWIAG@zvsd_p캣Р!J_"gf£D ovbN|R3 `!|/,Xuz]ںNjm`mRLt#Os"aֱj`bΏRlj h#ua?o ;vfX6<hJM΁݇H"}cߎ$X9qL$Sw Lh+<-Vg3dK$U[pK I=v^#۱+i]EH^؛9W~і% n-u7طj% 0C_ ={ض%ŷNzta+Gڝڶ>3ZqTnцM=waW\ڼ5'KG)Yf uߨM5u`&}a{ǖ]2I ؘ0^_Ŧh9n"& f)jodQa:?&p0hR0p[ՍxҮ_wNǙ[>\hSmh 9{g1Q Z}:?IS ly f.'X$1VoI© 8<̙%d6dl#DZwwg05Vt+ }){6q45qпg7s|#2ob$K0Z*E3ʐJOp [ޗɐ9MJ4i]7sv>A@%)!J/Eͷzy6Gm$,< !ϐ)B / I!aMwLGy<#ؙ[z5rMM8{+od?G5G˺ܠ+G}Jl6q|z+RROoekkrx+;Rbth"TlL̾eh2u&q98{Hk1bsnm,LzOsK$9CFxX@,t:W7TmG_y{WyPͧYhg=Ds!gm$,< !ϐ9!ǖUM[Ѩ$d;GK<ϙKf,ѧl~JXM[_0irOmBoG QVӸhV1M%Zt*R]kU Iܼ˱mĭ$\jDD%q+֢Ɣp#]-SϹ[uÔKs~ύ \Um';S !toHBMG VN%1!UΘn?,h6cu^z6;װ+tMH<˩ E8ᩨDݍzCBnIg)7D•8a߄AQ,qG&,ڕ !Ig8qք>U5WW\(TEnTuҡ{YN^0NBb/Mj(Ig9yNП8+g/r|ӺtgLWfj9i#9=TBg3BN&LY^ |n:giLq}ݙv>/e™0aZOZwZ7`r6 @PxU='lI 1r\ՌE,56G^b稳;:>/Tx{ (mK au&|0fVp.Z/ۦO#OܽSqW<_x^p{li䠍[`yB_!rBwOwtk\-]*]ޟAc9G/eȧ/u޳8`4QDsEX\%~IWmo>_~:~`¤/G2t=Ezs _0эoCWJtTW\bq'c'T2޺hj%cfT OVQ`!GRDq.N 75Ɗԩ g W= T}z|1rkX.$.X7 CO$q,71Z6/sT4O7gfi@U@q 8ȊPw|k|ڛ`ђ[1lҶ͗p4BOpg3y^&]*ÄR K+yDP)۔C+ ʕ6<+Fq?s2Jl<6nY!LYB E+ 2GCWR`!:,h@_1?tҹs9 [4j2Q0 y{`Ġ96&eF+1ВnCU^QLKIZmG nbbL wTtI9;tq`_̃.ָ_͐ΑANؙ61Qr*?u"Ftj&YXWM5 hf~>/'/`_ӲXğ M)K5b%ɭ=;fwJ(7q mnto>2ѣG|ʗo6| XKk3 h9h Yqa'*U+nRg_hKz?mztPN4ڞ7W; Q+jw'P.]cE]V2 Uѫ[4z7,LQL 1֢7iZˑo2ֽhws8:K"'8rF%cxQ5D;-2M3:Gݙ*ZЮi%|qoabp˷[cSߖ^%|ߙjӾ?Xq|;12Ub6 ⇋kY nGJM+Τ=H_kUwւZuMM_,WǪmܱlL<6x|BȀe1AѧmG63~|7T*;r=b~fV3:@yJn ,eF@zٶ R$u~L}̨5&;z=h U1 {c㒉u@qteؠT|ذ'{tZ\h(If}LFB/ˋp-\Ü<49r {]KWX+ׁdž`?j~'D>?lٟJ竱#Q9C6R/gX\vCifSr5poM%Y<&{vw`DZ=iѯ's傊[CnM/>ۥ[X1{3 JWE5T`L.3%o x\r}*__,1ba֐B5ٯhR}'q^k̜P*Ǫ0海ϭD yy o)JE>t*OuQ92!Acwy/z?Ο>@N128 $I5S},>j}i≢oữ6s9t+ ]AtW9/ӏ}jnj؞i< 86]S-8ˡ#QwCy}i}rwƘx!Y M&ԓg!P!|q;sqPzե'{cN#gF+\h2z }tQ3y0*hcW\p˾7}<ߜze ى3zQ';j}v/3n3i"Dݒ,Bɯ !O\nAM2b>;"IsF8r:̓#Myƙ{S}K{c7}ϼPulU]Pa53}ټ_ ৵kԝz=k ͑(vXmΐ-xWmMמ-)'y 7=$f/3zJ3,g7}iv6 9gDqK#V>e%} MquSӝy] q,E /d)=t#?k_f*%aROkߚ3ߠL"4S[\K[K%6c14pOI {aBEpRo'տmcvm4M哆>`&:Α{9Xe^Ut?7]ز<ӝ u3;ffB!D9!cqBB>y~f3}Wrq>~ ó$a%,PcKƮhjI ؘ0^_6Vot:떾of,B{e(kz͜f95-I~aiU90i03NT{#[7#xiRq۸lr%k.z3Ϭ`+2sfFl+6 >پ3q|Svr0:Q'2ykij i8PO=;L9[2L-2W Ыls|9kY9mq}?jw$x"nM_^p6+[ꀖH- nyt]iʫ*oƧ`<|YhJne#&qL)B#7ȄD:=0ЗKkf$v&T](wM2gmo*I1ܺcDFכ ϋ؜![`00%GHhN`gnJX57d1%9q/  =z~>֐??{篘;0/e$KYejWkѻQƊAC&1k"~(Cꀖ򱕕f&:>>My_Yzqj!SȆOS}t !"_YYRn(8h`8άqrZo&|ҥ)<_٤%F!ɔU!cBH,.t^ݮxɌrn'\u`n O0su ۪ Nfn:禳IV͝w _~ޝkr\EQ`(^Iއ޿ C3"kf}*O+):GNf)=ʽ̝{W>cFk\K[s b1#糦9(:t(D:gHjHSnI<_B!9'O !C)OH(N8;\*}U'PƛLcʀ\Wse,b.tԍamƏ*]ޟSg6 N2?M>8FEM$11]*c|[閙s($X O)ʕc7xNL~sX1s9NٗN4.Ah߾}O;ZU-W&*gt{35?1N?Ø=<7w-94vFgz2ϼ=1%fQ1k7&ĥZKm23?j(S]׶Bc?d-E-MyԮ~e&{-1>N!F! 1QXRƚ33NR NԔ'`Ġ96{Zo >4x+ ˆVtCgi\УW-0i:n>Xĥţb­Eo:Ӂ*/]v&]ʥҡa9aJ.1ď~է DFehCU:w.!~+F`_ّIʯejDqJ²FO;!KxgxZ:`F%*̭<eҁTƇamrM>`"&:.gfό&w_292|2fݙ*ZЮi%|qoab%V]9ʪa7q+YWSvfk\ _'w@s,u%49k븚 3L7R{TvwkA O~}@\ID8H*s,sfO~[3xn!AK=P6 'h4x}_ke/˭6Bf+-ϔu'vV !ܥ>~7鷹DKdjW*W^xIĕ\$c쳒N!B4B<IL;e5oj__ EF~ygZt#0{ͯ|5WnJ*8㧟aYD;_}7+r!<}wYF/`S`MɚB ] ,λ u_ޢYT]S-Go>g+QI<}ێvm*[CnM/>ۥ[X1{3 JWE5ܞ!w1F0wrog[Ps|fVDNxV OӘiӸZb:8p(f^} (vxԺ)`|}ԎMۃ'C bv{\ꩭenk[{ߜko{9)+^P١ާ 09S|5v=*;f?6CiG!Qe(If}LFsLA:BQS?GO1ƔRq1S& B'ɵ+(]UB̜P*Ǫ0海/'-BP!x 89 @RM)7TKs_՗!B!BX9!B!B!CN!"[aW!"rB!B!B#B!B!"ɀB!B!HB!B!G2 'B!B!D>9!B!B! !B!Bd@N!B!B|$rB!B!B#B!B!"ɀB!B!HB!B!G2 'B!B!D>9!B!B! !B!Bd@N!B!B|$rB!B!B#B!B!"ɀB!B!HB!B!G2 'B!B!D>9!B!B! !B!Bd@N!B!B|$rB!_e/ r/9'c S&rsw }?3B| u;=eOǡ boDxSԂNJ0^[$꡶2!yOB;FĘI\]9C`s.d&t ÷,< ,>I8#:# :-yAw8mjh2!A5ucQV/԰tң}7;}&}њu}"ctIbCV )P=XRg2!Bz_!Eq'xǴ0srgxMϚN4 Q $"+n_8h!D~>@Ғajy~K8ud /l_&"ȀⱣ kcw>T,~UzoA_`B!+CeB! !CF*=t~8OJΪQ%6'CqgYIo)烋nEjlXN^ GŞfSCmLдn8{bxʜ oU>n88zP=ɿ7UnmKR VY)켙Y TZRNvܗ7Ɯ`+퍓#5x9vmiMf3nG.U#W-2FEAQ!1 ے*^8e[fUe%-yVXE?ZU);G7|JUQWFXXcSҞ[Nꧦm#*aԹq4y9-Nz/zH}{̩qAۖ~|>$ U VQ / Zg,]{#)7o_tVǷRl <@l7ٶ yV;)10ǜĤU\,Ň)A =Ja+$~q* !!I/>ǒb2!Fn!O 17:w)c,CQ"ƶ@wm[X|tw[Lb{ɬmKS:|lslĻjknI\<+ވlΩ_lEs[Yw]2z ৵kԝz=k ͑(va9L]zOwv%2v%˧ޫR YM_î hDCZAA;3J6/]9XMfj"40VEǨ:ewr k!-L'/▓i[cTES&LC$n{۱K4:S/o]>ɡ-q^grXOL`ĬIO}^]u3UM͓sI} mk>2ȥs"n>͝eyg$BLihrH6B~}׏*N1P{$d)vٲ\;z,B%=i_рj(6n#|=<PX>ON?N.t>jV#۫:`uEs &UŨNiazyjQUUUԍo:CEIiꀝ+YƤ@uToU[_ɊDzb6ozj|ըx/wUs:c!UUq/emJ~RKy=>Xj{јuTVScwsvSX_4/㐓RvZbMN٤@uTj^KR+aݫj!A6X$GVR :_ m{ҒN[4n9o!F^^:P#@$[J]u0wOjWozά59-K[X"~P9(}j*jޝK2mlϷm|8ySuQŵ֟PK <:*DיՀ!'ݱ$D xouekAzcԐ?NW+޲%ҠjonOs9\1\=PIo3>~aܹSTG>x;e,锱)c]%Sƾ|SE>{I,OCҒLRrR?l%Fж [ٖOoekkrx+;n'OK:mz* Df־!(+$,=7:fKߤ!6Vg3OU' MB/y#j ϩZ^UwA3RLw)øxzz osؗWˮʐ|0_BǘLYB7Mj4\̸KL_;hyblKRoҔ\gAvC:R;˚^7EP(Z8ka㞛6-ͬ^PnE29# ;C*ȥy7!ɀeW z0!TRF6PH$2=љqZ"OcI*|G#Tj7,ThDQILՐemfeE]10sQ*2IcNbaڐt7qAԲ~to.Ӊ uǷsx IDATɛ -Uʾߍǃr'HaJgevAKt,u.Ll;|f/NK'z I f*]po#?kV+#̱1+׶ҹs9 [4j4gsZ UyGu3qR.%iIb~,W9r=gӏ4ڶYyRZtP]|TL icX`0@%2*0!-L伈[N꧖m53Rg_hKz?mztPN4ڞ7W; Q+jYY>Q}C]fFJK)˾)G}|Dn>/'/`_xߡIVdVzjTYxYšMܬl3Tϓz?{E5p;{ Nhޑ"]vTDQXEVTPP#H[@ m! ̓;39{'ssN.2}C,Rnn8Yttjq˼&<9!=LKݗۇ>b9ߟi_=An=0:l1.I֋ݢ*nZ{Qu&Ɍ4ޅgکϺf}عa< j_4}{ƭ˧QG'zKGkM?v*[&l,vm JRw?o7N=ș} *NZc!Jם=h;sY6w=^x*\SqBKpzx(X`Ʀ} gY[qӞukg@Wasù~ѥ0m18Gϸb{ H;Nئ%uf\l19ӼK8չ269^nYi{.&g R0jK*$tE*,9[yd= {={3sc-d$Hq>* د1Uwı#qhhT5kT%f35;m+:k:cq\Br!rB{S^_Z?2wz"?r2o"*h&+W{L]Y3Q .xUyn\>{>X ?oodɌ d< Cj*//Xb!mJŪwͫ:ҪoiV<4cKg' g|֥y_o'V禼j7 WᯙH2p3 {3f5k >4À4j\-Yt?;1k՟L ՚ӥSc"Fn.Ȭq={;w2iv}쉳,8i׺3=xjxsnv9AU ]zŸ.ֱk+oXI`xo1Л(s-e*mr6i;t͌h V/2hq רּe(jTI (~4Z"O1Ԯτ>~ը%}XjŪWѕySVY4vdnJh8_U҇^kB!G^{%9MEc쯆s~muAq/r)wB28~pQkC؝Bٵ',~φUgTeϢ# ڤ2|TKckw'X%B]\#`՜X95r-UrB!μg2?:W. \8N+^SB;)]4&HBqK˰@!n?Ǖ Oj6}R?rSBH*ýDF[PQHbdG/^ci<5q Ll| m !%EnYBQU!Bʣwi7+" !Jܲ*B!dB{t !B!9 :wB!a2B!B!eH:R%2w}$#l$tWKvt~q/%gGYcNG ̉(z;}1ܝ_9:CI(oY-_kViBQvCNqS9a!3]ڨ\=x\eCly2F.$_rdo?MTZi,kW;۔1-UOI+nn9H!eI:8ȫe9eƚO|yIFs*Kgx/DN?ꖺV!3$UؘȱkD$I7+z9ѡu T7lK Φs1E˙*n'W|s&*7Pjf:ǽIKbps侰KO)L2+.gjEqS'#*'tC\%<09/T6$Gxv_L|tUw/nį# ` ,GtbXH]6=S>yLo%Q+SR~:¹d+Z'=U=y,~m^Wxyw8i=µKI>KJU?}!U;?gw2('Z!Ũqm *QY#.[YJ ªVvґ̺x<1]MI>SL?ŧ2[[[6XRwzST_+ԪŨZ.&ts8C",,yяZHf:@Jt2 & oUAw~θi L}zg}*_M;ؓ;ੱ@g[W_Q>LZ3O\c&&㚊cwsg8$db)L~oPȗP2ɹu{E[EjoGNōQ>JfSwn)g<;+_j@6t\ o6 q± i0&쪛ۨĝg4|CIpB6`2_ ׭r9ԟB!&rBxB`j,ucX8MX:EO]51 :ysTjbяGyPsNY"NFh>>?6e\P:N|(/UJ!zI,TkS?zPtg,(Yq^ppZ =h5;dAŎI!AοB5{RԹ7/K[S71s<ˆruykBq.-Id`ٞT2<;8=i*5 )'cYl]附σv,1\,ۛٝ~u5&L0hZ-W0l:@XE͛⮟_)=yێڴ֟*g%x nGO`ś?HHl%Ct ^Rd%r2fg 5R4RIJ[Hm8HLB!(2BNqdp*JEBXOHIP(8P_ 39Gm NGhue̙~O4ԯEh@WxhPT I*\NSx;c%-ۯy`@ʚw9ŪX~=@jc`MN᧥P T(8:(XTd},\|`ٓPReW M[xScK$v%POKNVH]k N!sLhwYߦӻ 5I_bv'ZUf^=e{?{UJhhԓ;cXs \ћSXy؄Kv^G0[1zI5[$cˉ,ؕvSH6ko[c#hZgbTpyJ%&!Bt !>J*4TЀV8Y9*bCPU5kگRIڃ2)hPQovhڛB;mв*Y݀Z/{W^Yߚδ$\C<] ?$\fbM44mEXyϼjF[jK*UeDkw4UI K`c ,,9oŭ7]n{B`>n+kqdk%ȃ.ND`Ź~@^iL[|hP4Y ɔg|&V֔HnVH 7e{2⹨qf|~T=`gN[{1ַ7t.NDNZs'Wjoz?s.p{1_)ޕ-*Hڗ@΍17NUT^Qtr>˪A ؄mfA8m_\j1 !d9!GL4$fnJ%4gͪMTԣQM0s~jAθaa۞eئ~Tq[vG[Xo@J4N sDgJ \+p;c0'1ue"7=R2?GWQM8YttjqB`yUU+rlΜԿ)k6ESb̚6 5*4&3i%6P"eo׹H%8<5ύ |ٞ|3w -GyӼZHI4w+jS.>+O-|i3b~>Mf$25Z*8_A;uYɏ{Y݂ő&-B.U̗X~UBKZ;~Վn *E v:c`UfKb$D9n,8S,¼tʊUpqF@]c~tcf֍-^ T!FoF4wu]H>{ڑvN!XǴTEYZ,wV:-~]>ПW;ݸ%ڲb'[a{o"jk"=[~q`qYu$2"xTpc#©Uַnʭrjhk?alS?Я(u.V'BҔ9X}EcXt>!_|]:EBK\ zzE\ʱ'İ2\=0hʈQͼ_U6{`=~YsVޒVOTή=Ae{6I{=y*.:S̀%bͱn!#w%󅫌^OG z$֝VUF֒ReJa~#xWolsŽMcbOaDb*3ӽVޒVggŔ,S!$BuH"J&11)>e$>jt @9rTW;л5ƃ_$*Ae[vưԬS-;{N˽VޒVggl*TT"ئӨm;,!B<-B;-VB!-7+ȓܲ*()r˪B7B;!B!"_!'4\!!B!sB!B!(C!'B!B!D9!B!B!ʐt !B!BQCN!B!B2$rB!B!B!B!B! IB!B!eH:B!B!(C!'B!B!D9!B!B!ʐt !B!BQCN!B!B2$rB!B!B!B!B! IB!B!eH:B!B!(C!'B!B!D9͹H IDAT!B!B!ʐt !B!BQCN!B!B2$rB!B!B!B!B! IBJԖxz\@%f<;l(1w0;l˫SkYpR6/e7|>;! "*B;Bb~*Vbw8w'ě'ϫ.,F-plWy-ye!b5%B!D9!zo;Ѹ}%lJ?N碥Sk0+03~ރЪ3_Pc'I xiS⿨<{N]@<pL.#t !vҕwBQ2v|ǷPU=1[Qnr\[-VdVd;g }a׳Wǡ,ݩq _Tm~[cޚA=͉+Xg|`gczo\J!BG:w75E_YN<2?͝omhRk|vh>'Ȉ%f-; ݩq !uZ?𑮸;_?.} `\5F!! !j3nE"_F1%ƅRWPYnM玣^WzĬwf>'7n?Z#JɌߞx:;W_\sٵ[$a4q]'~B`VeN?74lVՕ7__F |n3KfJۘy>OTV- h;!qTSس3`[K;ѠKG&8 YoIg=dZٻ(e`vs c[sҘ5NMcߢ%ғH?K&𺭄oX&NYfOp\sb5n c*[AWa ΘᶴQLnCnۜ9_e)6ԖӸWwVo#ux#[|‚SoWǦ,r|7$>6n;e`-LjL lO>{B! rBW><ŋO y&OKpyrV<փ˩+,&=aWHz͋/-Mk]/}&~t7FA?b>e#_c@frhы.>Sni=_ƎUlP֚9h>ީY{ x}f|ffF0B5g>ؒ 6OHd7[2}߃ w>LGdK|$nӕ`[/30X>_czwbhޅ?7w!Li[mgvgC8Sjfq|ٔ(VPjCn8@L[-}mvO~/-ƞrs} ޜ }5fSO (xu s*:B!r˪.t&ЬaLΌ{;7tT:эu$mܷ天DpRc9t"ybv&6gorr" kZMl-ӿ%gwK팫%GolS,e5Jܢ<̥$b(/fl#,]zKw^ytٔqY|Y(۷K؆aDM)dצӳJױ)\f盻zž?fOc#hz/ǰ_ʬB!CNqw^d${nvVxfWH:4(fUEͱX.OSOjFף:P Gw_*m -*9lO&`<͉s"3?ϟSg=|v~܊蒖&0)(6A&Myڷ]*6ģ9͚2qϕJ,%};rCh$϶VĢAìK|(GTj6R|~Ho2Sď VT bfA-{{Jܓ٠ܶ'0K,E~!m] 摗qLZI9m!n-rW؟eQ1̀{#BLNBO?i0a„\G|B{,G.@M%1)kn5EG%55T@cW 0r2uVر[cj珦nf2+c ZYGFɂxy/t 06ML~oW3*z $GF_ )TZ/! =R9L9fų#SJ*R ňMאa0dnne[y=y\9_e) iC cy¡)#yiy bp~ռ1J~[JdI=`rU%no|vXo.%>y2N%Ѩi_}B!\2BNqI4!!o }iöZҹܰ!1i2 o;7}o^x~WcFwI]Dˤϼ_U9mj2KhW˃s[X1QY uׅo̟tcg26Z(U>քKؤK14}{ƭ˧QG'zKGkp?xTmZR' mU3ͻ!j_Օ7@@,7tQ3Go{c(>8*,c}8w~v0~?3u[ >jȡ ]3'y~cJ2vd?Ť/g?-yX"P_t;uyo}6D…_PMmOVΛ^c4_`S~^e) lC }C^xg ? AՓ #(ߺ+c ‘4o-5wE-\5bǘ|/s꫶ٿZҾY *8YHtvq1=!4i!.$rB9KT%/:ڕ~p+.Ȭq={;w2iDG^^;3cB۔UWuUÓ^a0-?}Z!M0 -př&}{sr5?H>fxDmy;/uMyj髼KG޴&_|·l`Oպ4gS}Z\|Â4OkǓ{ /p&r&eD4>5d|E:U.ӞGܯ Nmyxp?~CƖoϡw+ >1c+; ^U}[6IZy-yX&썡s97UiDm DIUMy=6=y\J9o1[@zo)/ ;7|ģe_y5 m+W{L]Y3Q .xUynVS.6j3#Bճ@>qپh+f ^yƽ:g:TB !%9MEc쯆s~muAq/r)weIhi/>'GJLVvK}®hO /ww9v.̏_c_q$ş]z2 $}V1ٽ'ܺ.7n']O֩/^~c0zh{$\s/x:j u5ŀ.ᨿys9-yfqM_5bO9C^z %VnKˎ9kԤ23'JPiҝWp*Z.1 xr,wwkyl ˻^zcPg=$ΟSFyh0.NƍO5ƿ5v̵]doxSjet# 2qn=og}N5h"e? 9}HJMl8x&qrzʗ}_'ZDžа#أJp9{֥7*1e0k>m!xv{&)T<롪&V;ycH*9x?\Fp%ڽ^`HpJ4>3zXǞ+]L 12)n]LC]0ot7ʃT H\Cw4Z8sp?^G)Ia|nF}SאYF>,ܗȄמrn+oNYFyO8[F{TLzC9;P!\a DbV׮q122iₓVEB;6)oZ9^~S!Ľ$9)oߊh4rsw]F . .ÍpZFG\d2j_6/gJda }(Vvuv<Χ:#}Epqd8^!WMlj3WУԭ_`vlZGSvM*pv.BӶY(]m>I/ lҙ\J0`ô1nJ*W`ݪдV%^ٯ&nY:XiѺ11T\JjnZ\͏5Ju_-KйXt@.m scֵn;U͑a MM*鍛1%Y<~Oxj189{3ƉM[9s"-ШogŪu[iܨzP$Fڨ[Spv$522تaÖdv!IgEhDWpZSf8ZYl)Iz Dê8{murUCB BQTV`)GQaDCn {a^ɛWc Uʾ.>N:h}qa|T/ZJxQZ> 9˗sQ/DX;/\"f#BM[lM!)j֩9)T?]۵$>VJt4nޒ*z4mXMfRiөAٺqh5b.BCZDGGaY\;%mRРbw*)DGGc6h4888`0noZ?&licq,!1# IDAT=Ba?d5p<^_|O:rw]_t>!_|mkPB+©^^IHHd2YF !+!w@YfzgXZ6SU+&ق`BXU-ddd`0j1 h4 *фahLLk5X,&& zV߿Qu: Z4X f(Z/MUFQ1(-:Q[z]v'1# YLLL+Nh5MV=bQU z=j%3#+ {0{izf$U}nԱdlQ鴨*t:LFZ&FVˊQUZ-X*ZM2Y-&L0uXLF&sVV F#.ljЂ^o@dcQqppyi(|+tݓfFҌQQ"@M޵ʵOqSˍxͩ/P4݁Gwe4݉OCq˅9rO_w)pyw^VQ=t{޿NST?x1s*nωuq<^}:OnnyuWTMGlDם.Sv<޿/OTU5\S rN:W5ʵt+$bv;<gϦI$ӨNcOz(epzޮB! B|DQ֬YOTm}tOua2TW 7l/?cHשʲ̓c|'Q_a9mY?>NhUH  qkgWyfb?Q_{&uЕd0Hi;t>RZF}ײa]q6XF};HL7hxjQb0)HjٷwS6h( >p6䃬~&J(B0*}yT[OnGuC=n{Ǐo;}%K71zIlן{,=˥|(d^v~ \=Z 1v̬d3el*i~{%)i\aܹחU0s4j=aHEŶH%3 zor=1oXtGYl>3PƐ!fď%,io{u],l*:6d/V/gֽԍؾq#8o,\&+Ƞ}͇  ^2?6^{yvcȨ ]q͞Ɯ9Xdlv0ҫ(UY*JGcM)떾aL4=eoiaJpE {;S!, 6eab3tM*1B>iECfD_ǎ!EH'¨kQаbA/tLA#QH'Hm~7Y?H8__hݤE8öL2Ǐ7҄c%x +^|C,:Ec<.,z[GOjjǏ< co`znYtH$۩7Auy)-gRRRW#K_2Fp9T|2.z),"ӛRQ|nLD/H,<9e&5p" - p2{myDh."N.CW_ 7@,e?/> XI e-{+7^4F>CoO/7!b2tw3,<0MUȧzٵs']J'o5 $z;KlO:+;aPR|xp8@*ދ w+tw D{,tx#N*W6 tx!"!? &nOأ`mc[zz:%,Q:HvOes]"M2B#{M_0L8-i2 :z (B7Q-' T 4]==&҄,iw_C+ G_/@፣dڧX[ %q<:vG+<cG"8h9́\˛Y׮qٜ 'CY|CF}~Wnl*O/'kXs:gظ|,Z˰1* G ۹t1uek8z4;zA~$6x1X%nj2+~̙4Ջ#ogvΘB,Au٥=Z%ZVJv:*JQ2E9w)l{p_uIrD=7qx2Q@*=oOP[g;A~z9Z"̾rtvpUW̵(9XU-SϠ&G/f'Y{;et>.8a:H`F}\#_spNZK[MsL[vt2Op{B!kB)@c--X:Ϯh۾MD:4۾Efe$r`5o\Nc]){y}q]ɪki鍳s: />a8obV3Gc/{)WŻʑ>E%V=kn/0MK^aiU~-GS_3U#q݌(] +"Q:.KCsάKۙ4,;+ٲe+w1d\}l".Eu1|nׇXEڔzz0׾ͽ-a7;nbR@vo\;3\uu%Z[.#/Hy Ͼ1gy?җ) h$^cmd˚؛oszstf˷Rcх(X a\w۝\Njqzb̺tp%<j\—|'5< 5X/|n.:ww-d>|T>Ovϼ|v=xkn}4n%o3 i{hv(3_׽|w4A71~dsom7t4Rdv=+^L US S.[o/r0'nҞb/߁{ .}uo/eO"ȅW\ͬ'F&nNbGP[/w涯MSǞyC’ZpwzW˘gLd@#㯾N({s6o0 R \V, UTe9|J.+kهGί2{D[z|߮COo4g̞2A* = P^YЦ&vd"/$s"E[澅k8gLB<w-xz)-]q3I,~-X(+Ѷ К7ٵc6aPu5%a*m-50|Hu#&R[brX0ntttA?~<5)QN@ Zc˪7o޿q pChKMX$㔄OQ]1Kbd3-iG3Yh=vx R1X8pZ8E:JX@(ɞ^l>qo C f͚uiE{a 4 cAd;wc _Y~/ݝݔ xO\F_R]R17?LIi -{9~ uLHm+; 4Xyj3ad-i\w7M|+vR0c,};%[)V#TV1b`--t#`a 0pU|-_GR,]elМx]NEvQȦdr%]&v&x(Hk>,OAtqCP9vpǻ3բRy:n]UPu'>_q MrV1q0VCy9Tb/Hzogwp̩{5yE\#v9Qq( ÍDw8p]W%Wf/@'F<tKMu%[W.f5$mkds+˜Z,y9y~1#9ۇӡ(N@!O*!o)ĢaZo㥗^Xx !B1eU!>?U"[i؊NiIll>TP\/66Å4͇RG`TEu]4ۏj4L۶Q4Nļ2TtbP'>B#vŖ9̓bTYew?|ZjrN,ضB(Eɶ](!_ k]3xGT](W&eNְpKhR=栲vns_aRcQ0W}(9W'sz[)q98M?p:!=PǪVֽLԈd*ϦP\!̛ĸơ q!csq :z>6l;'d؀eHLLMZZ졵/ od&T]4@m&8P-w5Ghesf)Q\Ypu>MgఱePOSVVK@qQVYdsY7Ǚ3Jf6 A (*N.oR\5\EyԦfMuٰM ʪQoXDo.GlhFTk·9/s ̸2<1r9&_|5S&{Q[8;hI̬1blvWz+ Գ9xƀZܸIS2sbT ģkD zZ0VN,rp>5MdPF+53/0w(fA*6PaL>z?n-De0n:YW^j&U5C;^JO:.- IDAT)h-RqxӅ⧿bL}>X%y̿NU6 _M~~c0 6Ҽf1K6'I3ieȈ&jlFjXMqEaX v2VVU UDͰ-nk[bcΙ\(L;X*lPdj!B{\ySo)7픛8:)J!#{8v(˲, 0( A6%͒dH$B!f͚u-8We7l7ɡYo)d,'p#KOʦ$ꣽ饤V _I>ͤoׁe$Σ9JcU^lbہͼd3W߹1Ho"K0ơtv p*y:YX !IA4n؅`NGha">.$Atv( 8IvӛH:JbxV!KWG'}7I'{c*%%:vLwhI<;xוa#^zQ=A)CIG.GWOV D^R]!!.1x= 4nEOG;?B.x"~ >z26ee3tΛ(p HKz|!n. K8!衣;i+8}A>z{x*}mDDݽ} OI,C1"Ρ:=i;[6XO6KAw{wSP:]d FJĻ;DIˏ{]LT/%w՛A(%'-2^:0-奴4"hO>MOZ4UHE&on%1n`jٲexǃt*a׿SU] %4y:fvi]>$B|@ďn_φ9o0';4fѓĒ- 1e5rlN$άxA| eg8鼷g=݉@n$B|@N ! 0`$ﶤk2#̻c ("D{PTJ ٢( q19dhP!|B?ӉCCEAtN'8>љٲ9JPD!G( hƑ}M$G !B!麎FUN6.; !B!8#SB3 B!B!8$B!B! @N! 6F.K6NB!B!> `2,__A,l?a$70Q!B! CؖI6"#LcX6`8NkWDt6eۀedI9,@:d:?m[iqylx_Ll##+uh;Lel,J&'RLD1Y2įge l6iYw!B!z.B|u=HsgTS/˦GUl\9znؽ yq m C[oFӼu%uvt.3_{_%gg}ﶡUw.( `Yia&m** x]CB!ħrB!z[Hn@z?"_ ;W/-=6?g1װoesG^e?\G䈷/~^(!o) 𻊗jEшUV34EWՍcjz-߼δ3uEE? /yOwNb(%avSSWK<5-40M|>mۧn6ii^֭E[[/|^E5tdGfL!<,B!'B|(C?w4VaCM!C;~<侣ttessSKyum| Gk/=xxa:-;z}tv3p$=.eS)-+(ݼOeE +mY3ϥ*4 o.eU%wsPuuMR^^IUE k0B˲l´@U@SlS6)l޴ڎV4rXyvO!SA9!P6'[(KKEPb5L{yc߼e A_1,9A~k8̘ 6޶f]q7DY4~ڑM̚0 /8k,t8ܑv|@l<W'p9 -d!^ڠvb!e'821ON!H9!6*UCh??¸IRW#|=T\4w I]1ZUOt_B!@N!>n8.rJ'kJ]! 3eL9e%uݿYOA'Τq) GpŠ+:X?nh:οi.jFMf %u@[ɅT%6sm>t^,UdQ@'Q-0AU`b+'Z[;J 'B7 CǍ%C) yvQ5HoE%0mM 4 l40/a3~ume``ub`b( J'B= C|!;AxgS=-Hɷo9ގN8ݸ5?U5ۉ#B5L|2SQB~YK!BK9!Bq0?p ,L'X<Á+}pՄ&NBwbUP LOL;g|B!>M$B!'N'{3UUQ~e+ps;Q'h)B!gz B!B!rB!B!BA !B!BqI 'B!B!$B!B!grB!B!BA !B!BqI 'B!B!$B!B!grB!B!BA !B!BqI 'B!>iy}&tGd]Od<Ǻ)҆}+@Bɓ@N!B4,eיHGyrYgW *@. Ӟ8ҖfO{Zחe){mY:xXwý&}27lޓ3eܒ@wc?۶ɰbw !B|gB!ӣ`Xjna/J*R:҃emC$bXG/U @Qt<tRNTD5KEmǓ `Owh*A[WQt֢ ){(qRPmK-p;UnӰg4He-yEQp9 R Vqj`YXlU<:`C2k.d, e6zMƆ[0!S8jqMm{44JW`߭iӓ+1șH$r՝'k|JZM@?ל"ټE.B.B!$~2{dj/3zTaZ pwNmWA"ga6ɬIڄÂ)~Ũ W񃨢0Gca.a>EVոrJ)wN ysk[MyRDg X0;&YRӜbȐ0ÍE*os#K w(atJ/1s&f1y uKnI` hb+Le^0y)Z ߔv0$q䈖:ߒg[AmiN_w^=UNa /q2~d>zXae,L0,&=˶ay,w@C}Wa?MBH9!BqR6k@=vIs+ϡ ('T5M%\&$r6Z T8eyAuPPgρDoD;3;#)8 <ơ}:uU^6IEU{tBd$p0 줶CrR7e~ ^,]~՝quMPOwD:UaF42[C׈T< F:oD9WĉF[nK¦~RשL3X{@*cX}& ָ֨h=Ůņ9LacŭRЈyTnʠevmlRt|M`SֈzUJ|j k؅5S)Ԅ5b'rM *j `s-ڣ9҉MX"&Q?ABKNe=GAmeWcHW U[yjr/56yE/ DTرRcc|pʖ[EG[T|F"Bl< n201ӈMCkG:PUIZRX:\6/> k#hť,;82zLF^3u$m8}ʄ V@Ry\FlHKq-It&N@":F_?@Nn#guT7eoHIqg:hjnh$ZoaO y西x({\ል\_wMc[%~m4'OCj0wk)P3ލF^NC!"$!" NfZϸ]N\dYF RrAo0-/JZ w$33 bDe8 EgD'CA'J) z)E6"} ^`AD"TB2QH L+3JfIe\n36!Y`rU|"| ~ tZ7 ͸#cMqX$,J`ޠLgXen 2 LȐ  YnҒȄ,=yN@LhuvD"2mC21& @oH&rphL8Dh@N *qANJEI~vԟ?Rkc^M"JJc0(0Q7cKL*7KKR)H$F>w z=$!I r-<îC}؝O ~7n@f^{O$GMh4g?;Rw\*u[.e64üL͜ˬ v.mF&&YWWUk"̻d)?*S5ve9?lz7^LÛЖ˜ӱ:޲y\4w>tjPh,fbI -Gw.+/Sų1ͥ>ש,bοwav+TvTH+".JuGQR IDAT8 up:44UOqjO, EKrxB&)Ѯ$z)YqzzEU23t:t4B$ yH Uh(hhbdLCA:R,GdJ" 9}ǃ(Ȍ{jCj ƶ$ݿ RE308m!Q1I*Bbiip@XŒL74u%Pd!f{8B :2E 4pIJ(*QےlK PiN"*F6%@M"t{G ChIJ(@Ko:Ը$%:iÝI&W$) {" TC?RN b0*Hm5hڮ(ߣh4?2- h4gc~e5Y( V#5śKIa6wv.@[c &O.+ L !_R]PJR0_TJA|N ?<'ZR*6[HbxxE:ZF:bxr )b[{2).fhn/YHyQj<@sS3b<6΁ m]$rJ:P~~뚈a& JSS+\4 ͸ q45a"JP䠴b.EAUіmQڛ[L~ j֩\"Dziln#*G D?@GߩěaDZf}ය)*)e1*I:+(ۃ4ڪAU44w]TTc7hlD1:)+-nHЄ),6RLr͍tлrP飩HJl~Hgˉ(dZi `0UCUeBܳ^bF 90d{c9͡8%6D}}3)RFh'etwUMp=O}\J2nj @S)+J߈i3o@* +Abz||JJZc!B*Ze"iJR'28fP+ߣ#Th3fFUoDG׈mVh4(Z@Nh>DV,L민HUH㗱hJ>5Om Fr-\uq.,'c?¯sÊHJ] | /b]] h}Ga&g6ȲۖV0K7?*gr/ ,]Iy,Nof[hicuqYNϟP9dkNr39'޾ LW8־FQ< UwDzC̯ya[39YL^xZ~U"d-޲ΆclܸsWeFtgY!<1յ'x/pYཽ@d y?Ɵa#7S;PMo?Y>%Dx};6S]đNn|'LI呟>G {:ɘ~ߵ6c !`_6vdU%ɶWGVVb1hO-OFX$os1O=cʯ.[?|:_[/?>.cŅΝG!Buz;\:7v[%8d+y;7矃sk7A1yh)>e~=554ZG#<{9u\dyr7{SjXjqs9obN6+pGϽ~ n\t&:I |_y},6^O_T l W2XWI[&w|ˇuێv=!<}TxtD{/ƳYvre^Yif uY~7xIvxkG!M_~3|9{)^r%^%Ϙ}<½7Cny}9s~ۮ8#+'ظ s.|;\b66)Ey3|{x&EEq.퍵_IĠ(UjЕLة-чVBc#Zxggˮ=.a˖U-碋VP`uw 7sO?Ȝr?IAtO[_&W/Epbwsh=VIow-3=+V7>QSQqJrs(pٹy_{ͻVo`NҲ2ڢq!#r+r5I{OC_c?ɚ[p`%XSlSE< >^o*]mntIOo;ڂ-+V[ngۮCNn|ܲr!}9<Ξկ8,۸f,>Ci4Fh>CZ 9F0`23K2bj@ťR٤{ UFV`t1*0KnL"ū X"LX]ď2 LfV `A*8gRo?룫loP1L12(a0яvA Xv<{ B$[5# (c<:PJyqNutڝr" ?-g8'Ʉqp("Bֻa1uJABwR\̙T^xᴉq%]F=kff`3S֯}L7}! IT@0ۭ3*899.xrp22q:8V! +l/H]Wf XwQ.z{Ю0exB&H",Y>^ÓOٟAk{$h&c1N=~(I :a^x+-$cCt8E()~u;~X&?σp0ًqe*VdN}H:fD42#n7O0n<ƖH ._1fkd(r;q7a;gfƪC ;;No36DQjl1 qljy f`7Jx2sNsh4FhNO i4G : Q[7Û^cnRmދ,&;9o_%zCcv1˼ sJ}$}iO>Jl31P0+BJfٵ +-4'b6Xq e2I۷9=nB,-A9%82ۙٙqE1Jz2rѕQ8[//IXn6$ SYKnfv^^ œڃTCt#;TBI0 fLĮĹ^ߤǙU'd1FNd;_VDz(M{)XNygy0S\ Ē'@^vr!=HQ̘Ǻ9Pfbےhʧ<-(i$M.%&a|EVo9t#GzL|iZ&yJ=x7Y_+C{O#AG[[Q&c֝8ElWCvYtLRȿx9{_S)dG <Ŧ]_nb(H8q3#")|G]o-`Ѽ Z pe 0 :П=Erpʕtgllql\r%X10cKde[m35υ(XP^plX6d[<.O‘)+  eeЋ:$jNZD`939ێ!ߧ-l5s4RI~eF8R$FEsO_{Pߓߛ^F" g\&uUUQUu+HJc)Lb2(**: ͤ}̟ZA2QXVp~v=D@M\<6;_y,<{!vDlN]۶qqDO sT>Vt<; }9c"3&d?^̅ӘPN4>eS)ȰxGR7m6sΦ(Cǁ9t%,]|0]{ٻ0fFΘY %2cBZ䖕a7`(-Rk W1P1(3 = V,0sfL#5؅t&Ӌ vwvqɘ kN*+s9.c93Qٽu8K);G~VDc}'1Zwnd_e-RB Чؽc7p%K/<Lz8rϥ+102gTh$fdܸRZc>#\t"h ;Gk~vOG@as8g< oBMK?S[ 'a5EKB ˚ŋ#$e&MÐy sS!QuqsaF=u7+.qE VsĔ9gh${w*{ ^@ώbb8;wg m!cE6:1uj<@1cػ0u-MohjyjeO 25ʶ;nf7h 2h9D%'/+;eԩx&nfevp8,>CٳH},)F;ʳϭi dLl3F,\0!<@ǰ9KP^v?DsgRR(s-g'U$L9-vU1 B"h4tt:DQD$DQ ~H'Z<'},#2tT*E"`Г#II%etRwyN!La20 z$IB$A8ZQC}؝PNx">}bHg[3&qS~? \*"Nljb1BN%KJ,$!qL#JU!  ћm8l$t`0H<%c0l:*T`0HŔQRCтnEH Fl6XHR導O PffH;%%M$"M L\B8$K Hzv;VUN/F2q:tرG"qtf;v@,b!*I8  Gz#{ֽA)>) D Aa;1)"q $XՊ$B<& b9YUQCqu'A;#]#aH#$dՌN%XHL0d#E taTx́jBTe¡ XAa;t$`xRFo4pz%Ev,zH9$h Ղ$B4$#HF\nجdxhDZhpXd'ey|j4X|Zz"cvk=FN~ѧ\zFE`ھ@=iFt'ҙu'Ӻj4G!Ņ&b:1Y,*鍸QLx|S^,8lxjXD6WE.,t\h(f}OlΈm{pcupzˋ 'Aolg>5wǞvL@2prr܅s `00N_ ɀn7EI,p\#"Yy"ʼp{9u7Ncb:0guwf4EoI>qS㏠{P_Qbwa9iCc98' )nC2>MViνpz :o)oG >fx6{?givsA@ѧAQF')j4'7 h4/- h4x.c']â f']Fh4F9vFh4Fh4FZi4Fh4*R)Tt:zbL?A?"##CЈ4:>#ȨHcj4FrFh4/8T2A"`2щnrC:Td1g >挎rcϛDiGXWUm/.R5a6yd#ٌ$ B2 -+IUFh4- h4FbSjvgn&u66~=`%쀜 g)SRQvoZGcB..y݀0Dt ʰ>*}xe['Wx)#tdW^w>._ұUGjVL!n91#3P&13(3 ٨Zl2z$ʧMvRҕr1qB1t;`;3ܳ4m;g9&`('T<| ^/*ThK_phD Svo@<{*N+`G-v7赀!S [G=F,I vrҢcY,ԓL%ət.?sjJ:Iog=\˵\λPm IDATp&^zHE!K7DD#OeX=hsF df1:;{g4 D1HퟘSCN^>f!AwW$}x]6DbA{P$3YوAzY fcקDqG!_f6QDd#5LY)hRCJpށ zL("2]. K,-e5ho"~2<H"Wpfd嶒NF!fuZG${2i"fcV'+|'SG2MOh#;' QG:@8lc7HDTVw0e |xF^zns>3k}*)n}WeѸMză\i|L6J{8RD<9fgp8")?Iu ,|^&X$PCD"f(>Po!0A1͸n\ Xwc*jwa88l&42,gb]ۏo-_LW0˾ s#_tN^{%~OՈިo}ܡ學L_x3R<+"/3ˍo<32l߸+)q w sEӵ5^ZŬCo@Uw% {\tlÛFƼ93Z(AohF'$1eN妛$camAet]OOa)_ݳ'Db |OjԒx? al%gs͗aտe 8L^w@yn]ٳ%nAۮ&Q_,*f.sfc$Aj!Ӣ'e*ykG;v`<7Kc4 $;xx}ʹ\X+_&w7/$\'ڊTNECeu%2]q#<^\v5*EHF:Z|:6r<#)6,–sJo&`,hr+;gC;XpUٶx8@sSH0.`d|jdv{ `/\wb7u\rKپщ9o2ww?g˸+SVʺJjꦰhJĦڮ@+1L:}}.g^Voek[)BU.BJ)̱q`ٸ2h_0 H$6\Nb,j#S(X.2rY4g#8&3sOf.._Fa½ T70u8t uP+0CM9Ln;BUOn1!aq\ˍ/#ܜ ATP<%M"ôvC lDta%Ӧ1vΚIY2j{QELV;*s80̧(Aavo?e+i &;~ < Af  wr<`) /pH㦒V}DfM?w>|99>;CU:NudQŎAlfkH^8Sw=}uL/6cǎs}' w7H;r[hc+ 1޲t"*opx3K/_?\|uPS}o1&7)KQS_v--EW~T7YBA86d G]~!4,Fice7N-U((ꨀ(ِĚ$ 1C8NƖ$:{qt`i>'qPKkk+]#ozWi; ݆8a]3AL9l*{8?LJqC D"mHN``("pOM\/RJs~Rjd&cyq-Eccac$`,o3q,LS+8:u,3̽,j^XNSTVLgpwd۷nŞAϲ+kO;CE0M|dnaLy' Fc^: Mv>P%X*BEܴ@׬w.Vv:}κ1\cɚyBhؑ(/g`*o(+* (reJ9|I*q\|5_po{ko~s:ǭވ&j<ϸc*~=G7ݟ=h@5$,ϑ踈lVxaVZ\Kc2úkn`?~u7E:%K`by׽|y糬v4Q2MUwyr1ںhL-YF}/iAhw-__,m7Wv>uG]4WHAbiR^]hD2= n$ /_23c\`&*ݻ(&?({>RMZyt6lG6Rei m%׾ìyy'dcepku;'근#sbgB@{r:?Dj Qۖ +;_gnn{xKw#F$;^y.M B\sB{o%pσ~CKi{1s[yGI/y3cX$t@ĹCb?G%fw7\mp'o f'*Y΅r"ɿ|dǎ#ܺsݏߺXN=.}qXhf$I6Ey70Zv/aX n|c6+LS-A2ŗ@((ʛ}ƋO_i>m1s֚?vETtAQ ̝_344tʿ Ð0 }}jJZRP(HR_nJ%k\;8@#H|.'ub?|=|D-dnO$p,0(8brE6T R@Z%ZP(ֈJX c+rUE5$Q ÀjDXAjdYȡ=w3Ə+][|s`FAJ_+ 5d2)| <"jBL$z5r<Ԉ'KLтB`Ebȑĵy^9OI$B eH\X"щD-RJүNd"6D+S(VA3'Dlw)T]ÎLeR3#WBʬHZ\@R jBD`Fb$}(aV6~_oXdw519 OU]A2G\iƈGMr|Iƣl6l@.#HDpq0 41 >jOOkhSS+oa.RT(Jy8+W"^0[2VYG~#ێ#_7mSg M'KǶG_HnU7Ȁbc5# !0`N:/ v$95[ δG,4s Ӱzi &$iv4=yxizJu&`rX'6QyhJ[l2X&0٦i돧L;^qmOځ/,]VwXl{W/l吶6H&t醩gX}(d0\Ĵ*\9EQT~#~+2Vic/;CFՕ]@UDZDRVzrmǶD׳a< F׵R\T+ej^ v6%^Bs+FZX:Kgo ITU0 0ĭUn}c4N@ p"Χ٥orXKW^'K(RWyᅭ%5BNQ7$5BNQLhѳ6igdtNW/@7moۚfD^D>,ވDI9>f7$4"#W'Rιɀ{릜T8N]ُ IDATQ^*Ӿ*\ԥ((Ju"!wH)MiZB'4 8QԊ(+u&TEQEQט0R REQT@NQEQEQEQEQ^G* (((((#SE-^o$-Y-7)(ʫʏPJB)y|J(q(ʫ&9aop, / {o?5ʀ;y/}OQE9~, j<ㇿ@>^a=A/}Ԫa('"-RJPuk\ؙcD/K xj8V/RxnoC@Kޖ#Հx7ovecV')W|65[?/C!뺣^289ĥGմɚIQjjsVs>/*!#Y4}h̆e.r}|b]U}:r޲4E)CX}(T@NQ cGw/"ھO B$G_|;Q$4ìMi|t-?VsiYGX*`E8(r",xjï ˈ:&}l?ri%%B.Gbߡij37w83N \v,jq{6=]+|?d2Ok36Q/qd0dLش7pώ\ʾ$nɑ*吖.(̟phJ$aі281XdNZg*cՐxdvE[_ht4ٴ *tiq@ Rٽ` lDC}j(d::G%MI{ХK1 IҔȘXu8K92IZ6q!bb)li .ՐƬf(Ms5w90h3#*84XcJ4 8VH'-:CUM{Bg$ ;jdCKjrhkH,:&#UD]6{JLܙQ$iJ>kAWCKLGx(S9EQ30#I.z "zB>3l@Lrb|kDsi2y4͹+Yhsû={xa*(keW?b|R;/gyz 4dUo?~C?wP w~v ͏ZƮY?Ȁ_׿s7#_[}"W^ձF杫R!΂f 82T?D'=:9% ,ܵ1G4G#ոGG d2mO`@ʂqWoM(Xr{ʬj-hpyn{i>*ʳ;)9]:VyFh*G/~c/*O0pʃ{l۪h7PƎd-&]eAɎ}yHFtYG6#$C9@9d6@H`?xr)<;SС3)v+ܷ-4w8`*ͧxr(v-19]1Ejc*qP'T0 Ammma?:5}ɼIfZ5` NԚZ* QM SEy3Q9EQ:6x# zR;o*vM| g #55,it5\C0oNO\7w/qNT$(s-zg': V5zZlܒy~ܴn]HWJK) zaR|h]#gZ$ׯjWd UzBY/ 8fteEvMw+\;\e|\3fӾ"fủ‹G+Z;|.pۖ4net'D5|&U'܉+x@Tfn*#m0'k24Ze<~q1 (9n0ܐ3uA}y<m7#CE|>Y)jOmkM,n}ʢy>} :!Oyb(2On Q+s7q]wd*{bʖ#U)-6Jԏy(o6* (r)w B#F"b!d=-v!$ $^eէ,I$:ix.{6ڀG"hB)(&'j٦4ȀjJX%ini!'\0D5$FLDDBJ AvFo}gE&O;Y:!&~C0$(@4q!%1s/_̓s%q[PHD>-r`J>nW RQ}jFiúAD/ AK0חTܐWm5Є !biئ6Ǡ&hHl2+:kf9$&0uihx A(~68\ ABA yQ ئV l:QK<]/YՓdQMoWC; NWES\GD zPlTۮٶzCyBa=0*xi&)(ojʪ(!;1U: v}h;B ԎnYŲ9-|DB0  B2>8(1q_ (H_ޙ[g9,${M-.qѐ í+SȲ}e:fYbaY:,|7 _Jϊ3dfavK R YlTðt#7X,xò( Q]D%)b/aL(!1bxh,슳!nid363&.hJ۴MlK#cEV/2?kD35d^6-z񇹭Qfg-4)BA6eњ̚IJ ǘbGYPJwL!'r f[4$LҎF mS'nS+\:Yq9|NָA4fTOGSaIGRdN- MA&8-+IMFHX3"t7Z nd0ě<;FV, 4u]~.tT\7_Q _ ǁyN.7,gۯ;=79qkMܟ~\*qREMdES}z n˨TU*JB@*bg*{8ZEQ}6l@.#HDpq0 c*@7y\SS+oz . C\u]* R|>O2gUDEL"p9: \ahehu Ĵt$&.>O:ea[xF}RC%6,K!~ C01RHɖ<NSZy?OYOɶ]clc|ʖ1:S&ZH.1XI0#!&Da}:61mUoKN(m)m֛hH&SWð>SӘ"E=/P r͎]v&i~PgS(qQrpF)ŠvC>CmcEe5^`D#%9qҶ@a0o'srNWiA1MZ}_O a{gf+y(Kl<\+D, ˲~8xi:ǭWB?l\;֟SM.tJNMYUE:\ˌ! K%pQEyBvS qe0- V4]ljDNyON2,˲ϲ1Ticz̉n X5/ d>"/ ^pM353lZ$zx3ƴ@?-Q^SO{ZwJlOF=z/3CӜMe*=vf0޲/E:a|$;tO'^/Vq립p0to{oX(2 );!&3D QEQvXyFTEQ쟊((((:R#EQEQ.h\skozmEQ&犢(/SEQE@aHV; ژ /Tv/EU0T9Eੀ((LBkMB TAQQ")rS9EQEQ ieePI)}M]( s+\T@NQEQ&ԗs@ʓUiĢ(rSEQEQEQEQur((((:RSVEQEQ Bxeh |/ԼMװs7g/ %/t |/ %RejhH ,C 46 %5?DJ1&fKJܠoC;N~Hɓ|˫6ۖ~> EQe((rސ2Z*0:#VQ"cYyXi )r+> / yvw 7!_N$_ p[e$_p_}fήN|eQoTԧ57泴3Fc<*hD[id 9]mZgmO/(Oe^pUj .zr[6F9) 6ԷxϭRD>d{{'>Cز'ǮrTHQ傠r((ChS̝=c[N"'m b,K^ fOY>vnrۻρmgt+/Ջ'Q7]NՀ'Qn`kE`;CZkBѕƱ-}ECh \8ML(q׹f6"=x`(F tYjS*l:Px)dvk .h;8ϋU4䒞83xt{Å֙c~2T(Ud 5lN Pch(I[ Ð%6bF-VtF(jl" zG/=bX:FSCcsZLBǎSŽzk"F})zaEd͍MB=*6=d2C;br^“}e Vώ!j_9Nls<<͉<,[@NgVEQ8/((yCh:m=x?U/cfn{xۮǪ~Gy{?O?$玿oǔWZ0z}y__m~lzq7'F@GuBg|tܤ-c5ќ6F4v̳m'7ػwlCEWƎ$l 0T \903!诐:IFkl:X&_֊D bܹakspg[&#e~P!?PF8<ܾnX@Cy~9O5=NBm M (4=т}y(2~ 92PdH,iq*(r~P9EQEQ!0M"(i:v$B$@Q*RxK̟r^j/BBߣT,2>6'8o7Oύ:-gOz"gHIf:\'*BRhtŸtnN4j+μ $47FX(m_`<)8ƬY& FOEwħ9]A(qI$KrE 4.Oxno=5 _OI9\1/AgʠX9jfsB/S45tqj8mIg 7iVgw>>fx"7I ֌8MLLCh@ L #"Dtñ2m33Aod2eQs93IXٔeԋ1躆׋=Έqؖc#+zQJ'j]`qIWQ4Yy)QPAwE) r-$YUZjspP@H\8fFK \(TF[Ih]72G=Vωqcp> IƄ1iK`JpX7W`q_cFBH-7X3ź81B̎ۓ'8Q֦⬪JΌѝ0Cm^2h,H2]\S"A p6o_%vM UFK&qe*,Ӏd=ة)^T/N?}Ѧ-̉[kRsEQ.$G2wޢW|)R"$ C0}<}*jJBP J~sEQ.`6l ˑH$D"88F}$ahi!^2?7y 0 q]uT*J%Y?{G}53۫V]eɲ܍1`p B($ \w.4H% :l۸ʶd^)?V%@<|;{5|\Tū~L݅ g}wS|X:6cp.7u7۟`sŵ~^WOdVv8sr|@N7]~&o_PyCks4Hh7(ZI:o[Ӟ)SҦ"2<Prspȗ^6S' B!B0Sl78낛xд꧸O~O~yh+ly^[3imobL?QotK?ͭgփ㱃al.?3Q^s (,#Bp KW<zx@ne3[i:F4 Vz*#P=cF26JgG'tQcP:PQ Oҏ}lxIb|MァG|90⪥A~⠭*5,tFP!]Ώm ;n+ޯc4>Ȋ?V֢)˯yGQ}K֯@u=?[%G 95{U1lú~|c}ܳ~ήQ.x (q20E| ?j /9OļEar]WS75RY`羇+άg߶Ik{ . 7(o .s?icuO?YAk/3S{~WpʙA1og0smv<20+N [%ȝ_YӾ$|~w956g~ֽ8(QOwj@_=IeM9_šY mƊ)*g6^u{(>,u|??F~|nn;܀bi /Rt.^USg ;P5 cZ>[qm[?{@I ё1]>[Sϳ^餰(ā]G(^yGZ89mVi>IaM-nֿ6EQ;heyN!x( bwQ !$Bבu>jI7Ry3lyLΨfz[IQɔ@ar3fGxY=s5\~ZdcW]ÅxGemr9 sݿP;!w]>9)DبWa?@'OK,< Iά;Q3?zUӻ#=}c,]5-`fLD2=90;n!?!/n!GQ|#g?>2WQ[_\|qHQRv7`y6H_=i.Ə܆u+_oye~f5-DW]ǚ zg6a{!v4-cGWͿܾ-S0EOG;zjN[y&s :Oo,L~x)؎Z,zv<4V-!N+x_Gظˏ tWUl;o u;$뷯9ngyeě[Ϊcͼjv3n< Gׯ2Dr l%, 4^.]d 2I.FN㋟{2ăUڕ4#̻Nva~NCG>Y gǟ t` fJK6-R!ƩiH3e!;rB:zPٵmm4?+^˟-O8k}iP`c??Ʒ՟ŒiZ(rbՆ#TPb?>pYK2`A&wKs&U(Y9? 90_\Kiif 1X.\'?_/>1>l-Hx G\ܦFa8?4iZ)RV}W̮g`=Ƽsj| ~vR$}Ctwwtqi0fr,`QT G T@] 8B"B9xQn?9f`SDJ[&mw^8P4C_#ywKQ\EKy8FzJB>S*2>|/[_p+|ocv0)f̫07m lfr K?6tJ4wwȍ -g %u =영1W mԢ.h~ԗXi+bxQhnԠGtqb#):[jv^y35h箟Fu*IؙYRJNNύ:e|>Ciu4\.8NI!BrBLz 3ggpNvЖݯnG n׈3KufQTRAKynd1>[YKSZU39~ МgN'2~̀aB_Ѹ(23a :9 |nb`ClsJ9,9isξU]9TUbvݤ eFѤ5]jOX!7mf0;,f=Ix^uл}++-rs (g8 fQ-T˯{?ƕ NҋEspic ޹a7Wt#ncl!^|!~/< A0M=,,TG ١憵8U%ʇ^HQx8%5d>y~iLR>16Ӹ 9m?m$02ʃI2v%Y8od@ F;ۨ:,N?UU$[ؽ{?-m23N( Pw0}'[+{.gժQbsi^޼mԟrg:d;V)#9˨ZSeg|r/[5FtV-m w3sʩsIqd^mx,tuθ2V6VSRGo>=@{OuxP='LSmGI (v&U9em6J+ZDnl3)'v ]r ˱F;id$nP3o)KJq%!.o+CӮ]4j!f m0C{3f/f)sq Vr e=T?Wfa\<v {t0㔋ₕWj9KXTK_G K*3ڎr!ZF~]8g9>Rc{^}r /0۶n`K/ O˦b~=zQ<_[)!K;Zo|u?>2:dd2I"  Yr唍Mb0=x\, ÃEqz:'[Xχ% ۋԓ"2ʝx=L#C4&l~?2D:?[n$OaX(=x]N"1lƱ{4="ʘ8=.f2F\$pCq9lcU>L"F, xP&aFrQ\/}t*ᴛOwxO# He0 E0'a#1:TT F2c,4!66D8 qڱ ;|?&STG޽j.hX<𐟛eT~THB'''] {$;jֲ0MeeeB* !BM(Qz݃#c^p|ϾCs*K*:3ï#I_?{=߸[o#̿~Di>BmH!~oJD% }t_ka˘ι ]ίr&W|t20c \.MMMXMhjjεBM!Bi6rJvBAUEXCGZqa lviee'uRN!XTʕ6d Eq nlk7ͨ[n*(v[p5̮jڵN.yύT,t10$Ǎßߊ;-ҥ,_{)+Σ5ŠS^BU*37axdVmE|sʖf4Ai<eeq# e2!&B!bJUElv]?t: F%jj.g6ST,Dnz*s3wL(!cT.LdsЪJh9TCn f1LN7ʓRSyGXMdwhf6E7Ll'~p۬ExA4o゙S1vrpz}IS2OZq?3jɵ7 NƦJ8!B$B!&& U]MrCyTVT0 BnAyh6]v)VW{M!u_ei) !BL@N!BPvp, EL^^T^4dt:=BBt !G !BI5I@0`bLC4KdL^]~&Osrrp:9PUU b&iՅa(266댍Fq\TVVb1M0(..v322B&|l̙ ׇqB!xH 'B!ƃ42L,ۦqeֳeSn^r, MbhhVp\D"=J,cxB vSTTD4eddUUQU˲ˣ60mmmbSӉ PRRBnn..NPU,BtYB!&&58ּD1G`ha)*q(B!z{{I$~rss d1ctJ x"T:~?999Bq `D"B!R !BInD*904Mvc?j(v͆f)-=@ p8M4̙( !-'B!v) ަZ,% 6@i;η6B!H 'B!&)alj]!BoQB!B!B$B!B!m$B!B%BH 'B!Y<zti0tLBOF, 0BW@N!Bmt^"eZX4,ގiM&F&C2i?),$NSͮ?6XS[ִ?Mjw~bxPcN6.3,&ÖW-g>F .z6';}MqeMiu?=ḫ.á*M+[ω]=Q%̓4xlS/wW5 y˱d2XtKcF,j+J2 Zh*# 3U"ZdOKFLl=5$IFeB0f`f۳Hrjp#Xr>l~c4oa0\[G;Q] {wlfL:y xzW6զ7\x~NZ[ʙEhZ6|LF9 ~R]p/'MV3R{>)'/b# b`(޾4|;;Z6 Ԕ:ZtT8E1~ePN:mRS`Iݣ 2:x\\6߇i hqbMص\*r\IbkǣwDݒe_Q^6MH9r`"#l3eI c+;O|*xM?ƜU粓NDy_aN_Ame-̮>`(nqŕS=Ԍi`|s(ExCQU^FiaoB!˪B!x(FnLZ=;_?fis9شpSY$3^5%?"`s $\6]׉EÄO⎏}+Z/Ӵw?Gzb |K*)RO2:/÷+/Xߩ.?̵%w1\ ճ(pD:bͥrʣ=AժpmfjbcF(-ȫ /ӤU7.v i` (U۵(Ex?Ȋl{Y6j+qtFǗSj+JP?[E^E#׿f.Y=#q5,a(GnsNmDSfS)qPpXԫQV*dG9aw5}~0Y7-Q66F eemau>;r?9nP,gvQ5sZ3(7]qzsUG]M9NW~W\w3W_C!ΐ ΨobuJai9 sPj)񀢠j v$pϏfvN j\pU:'Ө+ϻ;> ]}lijE[x^s5*NpB!.,B!6)03ϑvpڳ1U/8EfcPl U˶B H6PP4 A~~"Ojphed1 tZrv۳FTUp q(t㑇>&ckNJ: K[PaGTLҩ ݉c xP?͆/Kg#KNq^7B T͆E:t{-, /f~M9^ɕg/u FMj 6 UT*u;11 ÁM_ #=q:tԑBMG3zzd8,D¦x*a1rWdb D 8Xȁ6nբ3i~ȱCf4mlMaq IDAT>Dcsdz[烦irXv)fEI-G%D"1.ϯFab?kSTˍ?@ t@4v;Ÿl:=GXqM6UUP$cM;yy9m64E] R#OfZww\uiӶY6! ]BbWyׂwUl\(E"HHH%@H!l^f|$8~0}HP '""""}"B6@APN51zbNLض = )(io_\֠d&C1WƲ)TE>Ŷ\e\Vy3sޅ{}`zhy^0bE 9Qyn]elvESGUU{ez,=i{VwO_Πau0|nZ,y7}W=V4[7eWSm{ٸq5Glj2nZ$fՑ e'sr.58}X,04yR#sٺn/YoR\,.[? 1Ɩ W7Z0аplmq[8CAŵ,Puv4Mijʼ&Y Ht6uw%hع]MD]^4 nڧ8C h?œ rh[_,Zںx';ogoS xqbv|fp6?eC)/ 7RP]4bF: ǡWjfz煾o(:1C_cͻ1Xk,܂>oߪ""dzMi{RqM߼܂ORX\z}~Jr~0)tuuD> - 6I8󼠧bvSǶ,SVVAϿg_2$LH$v }qΥbh-SL|8Ygyx(Cj(+ &/ĨG0Vr JA%W  rƎ4̆=I.D,lף0-sLN~1cOIV!LjQ;N= NJ8,±7ccO75lkmZNr[tx] -~{+sۘzz|mCWsZ~jB?ի%Sj)rI릪Z㺩PN%q`^/Rs6ޛo`l2MoԐLPX'^WdA;"븀ހ q1&{.}?~2I 6&:fVlmi."#u0(7d[ !H^c_jkkeɒ46?weeeF BB( |ϿV-rHQnbY_]@|Dy K/ zu*""""}˲-aP׮c帙yV,%#lHrmr6DL:JMTt{, 7]g빮ܶ'0~lߍP7j# (6 >8nckjsk9.>f|c' ]I6&7齿1DtyCpexBx=WXo=NzovzMO^vX8Luv׵5ʉcc"1cRQ+@<("bLVrrg1v錙p?d6"Ѭٔ׌ⲚQoS^LpQEnƀQ8t$ =J'w#zcQ""""2 tտɯ65ttۻW81{ŠG} Yn C]FDDD*c df;"1rs${3akwƉFc~.rr㝴w&bEG[+IuK´;ɱrleڵԵYNm$ۛxcrFL,"7G"ESSqcOe$:DQ-46%/;3;^y_?qJ r ۆpfҌ!Ec93&?w: N8=#f, \;z3NxJ}u>uuk>c:17?˲=1.~/,ʋp˜)LaVPy KO?Ƃ1FM8 ly3ysaܲ`ƙ^,)c!`~j2Lr[_gb^;]Mx_t 8 77 =,?*9: ys6KOSu9k\+!""""wav+F'ҶYs}*~{qG0*V/~Kk憭,_ 6`kYsb*J 1xFHMy _[,rߞb8yis\NNbg <%6=B6:WogxGyռl޲x+wR]SŶsyybH0jKOpv,ۢ)S&k1BX1cF''|P >r"2XclP*]"94d-}e֭m>:|=lY. s¬[Mo50 ٲSN#۳2Ԝ4!"i>&LJy7W?ĖmH`۰iRRw9[^5yp.ǎgl\< 6l'~^Kg0 4?²2ּ/Iȡ,MM1:o ̶ o1gٰm'6c6j F: o`XΦ|ξRl7q"xו~ED Ddq]x<9\l;>,lZWsGq眚Z613k."'bcˇXBt7O&+(粏_DŽ /"oP-G+%UuSODXO6pb #*>? q<˶pq(Uȝ|(j6!6?=Hф1~]dڊt~gg7ͫ'l':I3:u_Ͻ.a/}HȦvYL3%/<~CVGCUocT;ٙ}6gLOcW2z^z ?՟y+x?JyEM/>= $P1|*n[7}1#Oa˖m4YM?oeǾU/9ODXs}\cq/J=8gGDxuzjG~Z[[ikk1}D"A<'HAGG477YguoCDSgϦ(HH$xضmX:kL&I&tuuE{{;455ĉ⹏c|ڛضAIԳ%r\7aQ}Bydú xyeT73,?}Fn`wKb֭^ɶFby#?'BMlۛdj{Xj5I/a5Gn-IZaN9Ҝ[7e] J9ֵ+*eǶΣ7e- 1Ϧkٺs^,ںٲv%7RPTjaV+R†5.(Ͼ"}%KܕE4%  pq[S9(^D/K. c"<${,~쳤WDS5ꢭD"q ̩$"қeYxE矈O)}iȪ X鿴o'"""fwDDDDDDDDD' DDDDDDDDD9>@NDDDDDDDD)C DDDDDDDDD9>@NDDDDDDDD)C DDDDDDDDD9>@NDDDDDDDD)C DDDDDDDDD9>@NDDDDDDDDyw淿m|;7SPPMl[xI$˸1c;73Z(}p˭?Ķmnv$9 !'"""r_Ҽy%~9sY8D"K-뇖I_s.-#""I=DDDD!WErsercX+XżF{momkcYeByȉcw _?Xe _H~ǝ<'?%%ż⋹3y^PҳϢG ''એ&Gض_D2n Y79""rȉCiu5n{i]wc_09Z[[bmeRTXE̶R뷔akE/q4zn/)9F4440_$#so7fA}Wy 4ٶ͙/ uyēO[lΝlܸI{:K_5o~νbM9qSNԳ}}[*Gî]0w Ə9 2K.0|~/g?aYηYiM9"GQII1z*o{cc#L^Q0xcYV7AзoR*UeUD@NDRVZo~u;UU,{zT֬]M 6gOp#^{FY ҒmU3{N:7V7M,^S?ߟM>L&>NL;n&UY9T3p[VVMMM}$9XL5o>^_W/K/_*G+VP__Ovv6OIÙ0g]J^n.,]ITa}g{︓x<Χ>y-@=DDD% DDDnL=X=K/]h7VxuWDÏjjr1>6nڔYwn{؏‹sb67pv9(@lf—ryǗn/xCf]AAv!%7z(tr4y"H$8i|K_dXM 8m8%\eqZ9Z1lܴCuïwWNzk3Cw8BDDދȉ ΍_2x#GIGc3'UP:_6lJ egPe%|8_xAf9c9cXaanm*+%_ Ƕ{dms'I_M7qn ʪ1K{eY\rхqwGtU9+) DDDDDDDDD9>@NDDDDDDDD)C DDDDDDDDD9>@NDDDDDDDD)C DDDDDDDDD9>@NDDDDDDDD)C DDDDDDDDD9>@NDDDDDDDDwU """""""MsjGkU뒒~j"rѐU>@NDDDDDDDD)C DDDDDDDDD9>@NDDDDDDDD)C DDDDDDDDD yĂ+yۺ;ihn CV#?'%T*gl0>n)顱yy7֭Xv cum :Z_0j.>T.<"]]mYAgAtzjvmdպꯏp9gp3()ﻛ4r"r\K$ /~lѡ E丵yN}Xqƀ΍գw\jU:u|^9MOrW~e%GfC ;9jawyxG"""rLioog̟?K̛7ӧ3<?UW]C*"r\ZJwiNB纸c{v8b;!lq<'q<\qCN !u,K,a\{DQ~:;;Zr _=Æ o[CC---dUUUa6[l9yӐU9ttk7]V ^S3~,+(a%yB!0 _{aŢ>^WV;wkq[,K}WRʎQI6=xo$kWx9WE(""2pttt`8 Mk[{{;//fԨQ\tE`ƍ־likk+@\%%"^@ND]]41mdvi D֎7A313گ{+-0.vɋEFd"L:BK4tfY EwpyVM ׿e=wv1yf;b?>r/YbB87pTf%سn)>k  ꢺzmw&3sL}d2+ ;w./RkcECVE丐Him pɓEDCax!M% ..!uۃu^ju3sƹn1Cȳ)! {3B,,vH֬lkjcWrN'-|7ʷ>r*Ê# {> /sޤ:* ~?ﵖO\//, }nޏXb.;_…]Ε7~~xNGa O>}4G(a i/|0轘} ߙ$}w! Moh<c,.}so0aBf_p*3.SyџDdQ9 Pڂd ऑym*,ˢ ֎7oYX`u5l52W7]0,ÐRYΉuSsnm47wsvѸa+w2>xE7Rc:&`kOqg3Ǚsɷl1wS?g#5/o!|wocOc Ǹ"=Ӏ8W+gںv!DQu>_q.y<޶sV#|73oїq~BUTT뺬_qرc;cc@{ζGAA٬_:6nH2dРAuN2#f,s%D#!bDC9kX,\u,~tc9k;6,ϣ(7p%?'IS?ZœIZ: :&lϝv8Hԗ\_> _׷gk?=Ӵ^|9W&]V1]?<蹷Z6I7j<'g'ߟXĖ}*RW╗xh= ,0M<;9(eeq 9lX' /0g֯_ʕ+پ}{fܹsyXnWfٲeGeXL2 xbVZœO>Iuu5Gz""M=Dd@K>`,,G6wԩ<0MCkCsV`s,;a"!&O,K}ES{P0e51`y?)#<|8[Ԏ&w}0@G+,|-Cعy+ĝwVh+Q 0qvl߃O^$ ; 9N"oAvv@R>z\rs:;un;{./-{vC_Wz۶9s8s4dUD,:z0*EBdq=žK4D<u"K$u]©7X"G C, 1'&&Im2eCKgg0=ɟ$3ʃskא됹dK)ju`z.~ "L?/ŷ k$NzA%-,|ǯsNӳ??op)=D,njX1κc*D Xm]]=zfM?cQc1!na!y="Pj}*̋#eGEL? +df7Ʉr]ؾm3k_͟=ؒ,b' gXQHz@ˠ8"|+o}dҗx;ӛdk+䔔Qs5/A1) 7}>CSJ>O3ܳ#= K,^37v_ށUvO/ 2{9Mb )"""""G~;KtHmE$eA/a/DM/^s/x y!sC!/7F$bbcvkz`,hf $_^IEjǞ͕>>HX%3ٳ2Ӹc'Vx2 s&?Crߟ}\cq/J=8gGDxuzjG~ںtF38Cβ^=4uW,5ꩆxG;fL*P eEnVSN>%SUդ*OdK,S@AVX0+!24{VަG'#X˂"""rxkr*Tw3Ddee X t} c{,f%/*"RW"ynJ0^a뺌; bO{gc`gI>'Ͳ=cFqKYA(g[X~ht 䎺6֙|O{3Ur+-W'"""""G9zuL4+ 77'Աz͛N7A z˙ T lr,ܬ(+QQ^ѣj& .gq~CMdoX {Vҩ4+X~0`p!Cƈx!"aH#F4p8L* 8u!kz=n+CND$DZI~TLzeI[ +;?u | L&; 6ݙ\ͮm1@ HI"U5! MM L!1 Itty =|.RzsI\!""""""~)̺T3MRԬ:Gg2TTK „%8f2f9`أlbaW+ȉȀW(1&0&34D`AX6yd .=դ82&e 9boo,XODDDDDX@ND$۲22z?5=L1&I0Wc}b1rr0X7LHo"8i1!.\Ȗ-[ϪUhhh8b\nMMMG|""""""2+ ѕlͤƒZ XAt2Gz)VPC{ B9c.a,t|yu}؁z6-Zʕ+ٽ{7O]]SN%??+""""""G9bMˤf& 29܌SO{Ng$1IԜtcXdFR6GX-лύ7'Lyy9P__ҥK;9r>y Dd-X(DkggoMj yRσ/,,K]˲TTO:X&S\+W* ߮hll/ 'tw瞣lNJmm-(((яb6g…466 (-- .Yf|r݋8\tE7mzGؾ};g2m={6K,_".9Dd@ 3KLfԜqqA X&X?cLz1~IXV2 ~DSM{#tg𻾿y摓Ì3x嗙3gg}6ggΝL2̙=T `;'>Aee%> ׯk=,YӧsF`Ȑ!\q|ӟSOeܹ\r$ ~a,+qf͚s=ĉ9ټy3 +G>BUU;zZZZRzæM:t8W Dd@slH$|aùTo8c9H #0 ֺü`'S劉Thg|?SigH]sH&^'xbL„ (++#A#GqF|{#8q"\z饔p^ŋ3}tF袋hkkcƍ1l0*++9S)++cͽ>= |' 88өw RSSCmm-ئaÆ8o[n]""""""GȀE<$=n4=; Z&jD &IvsCU- Le||cc٩2s1;AJ9aK&PRR455QZZz}(x<3W޾lf]Wh{n83gGՆfV\ܹsٽ{7{gɒ%q:aÆ6b1jjjXr%Ǐgǎw}#M xP̰U{^9 BtT7|6[AfP.U5-]@J2Γʮ0 l&t}:|n=w.,3g\Zvv6;w䡇bĉ\x<#gСڵH$>m&˲3f 3gΤkRRRBnnȑ!"r\pmX,3L{)`"mH?Ɗ Yd0SL`<~& +GDL:.\Ȏ;"BSSK,aĈoz% 6l@yyy}aYQQg{-H;v`Ϧ̐ٞJKKkhmm&LRPPm o}'&ÇFyWy79rDDDDDD4FȏE0R z*`,󽥆sxOe3Vי2I|Z1Dzxaߏ8TUUꫯ2n8;<|Ahnnn38[D"Ehhh/ҲF_ݻwSTTĉ;w.m3d8;b1 =۶3UPP?anΝgѣ={6PbV^}=+],<ƏϼyK/=[DDDDDHQ '"ǕpX4RA$#K ^ta\YVPW|t$;j_kX"?'FV8iӦq]w`N>d} /5k 4kv֦I&1| Dqq%}7U&MtҖ2el[و []A?Qpo-*"  (ۯ 2((P.MJ8iӔq]:rr>Lϻ眈Hwc}9'XsriJK "r%9xOjսIM$\8}ulٗ0rW}\L9tfߙ n+y2;vfիu]Gtt4 222}xBy//`weee/Ү] u"""r=DV/0D2x=d}pz<ΐ+Ȱ\L&& *rk IDAT⊌[nrq~¥r?fzxoSNUV@j0`>Nr"r ӧ9sβ>;{!嫮,Lf Z2d2]pd2ѹsg:w}fFxr""dbihh(*sL)gHOO+6W>;H@`f )!'"Cpp!8RIOK#33,YYY97& łbjnnӥ""""""R(%DD }[O)MLhb v>#"ig FзDp~gՈc.bg7]1ZK_f>kzmq4?=7=~+Kn̑&+-no~\#'׾{;y:bp8BXLs9t0wu|¹2alqkT~]^ww Ɏ4+R:Ff؂f ⶛PϚɶy$v 09(N-`2]䟔K;p! aOpDR˙²OpﳙX'֤gp!Zo+q^}ze}.b.>1b|I?%Zcyv5W+Y]$gΡm}x ȏ1xϰ`HkmcFsB&k6gqX/߲5_WߔGia#n>^=-f{[׉;I='zn;k̜*F`&ɍ6gӏDˆaXN壗_h\]܉pV⽰b+gFBYް|p&P _qƣ:is~L}~?P|r#I#n'wl;l#yt5U>+}·7?[?ۗ[2kyxwL6;3Z}1~LlǼtv'kѦw_Z8w[.Wqh7'7?/ߘ|MGt9wVpKLwzf=(,fU6qUjqez` ;2Y!q3ڌ+PyϼWv9Ңa5\|a̬bHEPn.:?kߦӽo ΢+cK}npϹ1vVt|]u%E sjazeuEw|GшKLx[hr+W#aoٗhK3/"_'6, 0o|oF_߇ yn^CE}vNs2fG30v ܮoZeܩ8^8?0fFcLZ܈"Eͱ"Y劈ydUDr|#pzg|8a>};-gG4g֔5-d<)'ToK&vΝ|')wį okO|3lMI4aurI!1Z^ō}TlId Od&iiiai֞R 즼h2Ԍ@gH;ܽ7\z_^8VbSl2ΰ7at v$=Ӊ%6.~3Shyh̜h`߯uJO?ƷF 9NW7dOОcj9l`kr7jّ7ױf˭ Syg>g6$n!yq^׬UEY`17U""W %DD.gtOx[&CdWe SR]XpIϺ>߾ `k?# ~WN5s֯fNOk'M k c,$sDEG$<;2O,'gL'igR$T$agZDzLT`gLDTbveqvrfq )ٽ۩u1wVBfJn6owH2ҳ_^{Zwܢ>Qf+zmLݷOqx ͟I˚aXSw{XkN<qObsS8~d8挌3N}9p3 ۜ|w0)&0S)L6|}MNTiΧŹn>]㺈}Bb 'j&Ǫ]T^yazrOS7xoW k)kJ[qt&tS8M* o`#'-!X$/n%W1Larg &H/ys Fqg-vͪu. > Nqs\C.].܇:9y8TGϬ,O(|Llͧ {,rED$/%DD.sJ)KHv7ճ^ɿ>! 7l;aG0udLԎ 3b#O[}_,}nf[JuT>ss[3;qƌ[S+[ӭm|:֟W引%Ǜl5nͬua^{ OX?aAmѸ٭}blɍ-|{kѯ˥?}"Y#n % b B}{+*>(CS~F KI΍&d&ߌL: o &nf?) 'xqqoԂV^6s3Cct1Cc~'g'!ۅջ w|#|[!`{-InWyatlI~\ Iyj5Кr<$kl g+""QBNDrg ބ|bPcoF3 dgoY\K,V4 '/vsK8䇿%FT !VמRWs}}˞x|?90M>ˠwιIy4fOaacgf$Y79B!#<=IШ/ vX\ױ A?fI$N5´>Q\xHVضF*y18f |z{WW ”r}WS/Z,v5dݦLFv7drs,[73_ZR7&␅C+vf "S<kt*IpӼ(Q]ilc@H=w{e 1c@=UIaè*ޘ1̧# 奛_gM\p]kY*?\M؜W1ɋ d3?"vߒX3 &%;Ѳ a.ze6Xs5͞Ώ׶-ߌՃpUF0kh=aEF׬bA)qku[|ei+""y)!'"rm X3~.'cS]ϣveI<"n ? oOS)` %rSڴ \ϐˇl>GS\CciAϙD|Y|mٛob0)s`e^?Oe\s7>7M1̘$Kx3mҕ+Umg~>Xm⡩x-ӂhZtsLT,o4I,еqD·5WI=rmͬӈ?5 Z [>OpOfi3gQLjP'gD}6:Ç*3qvZT鄿#/ď!Y8ruX>—7Ty1,'Gd?oxgg"s|a \+V[Fmkc6[%FM?7^Ḭ13iZ4es+7g1}Hsik/ƭѲ ct޹\\p~:nc>W:k-8<K[X{tj""W~˪)\\ ٷsm|ҩ\IZu)^sDDxE""rp66LϤV($5o7Xɸdv\/NN}ŜM *4w|[AԠn\dG)!'"""WVvuef :89vWv~%p"ى_D wȭU<(Oc)WiF﹫W}|ky<%g(OBU)Wtɪx .̸QeGU]*"""Rr CDDDDDDDDĻ"%DDD$)dՙIIy4(Y]4vu$r)r""Eh,=Tގ3tN_KWrnpK i7_8qWuK#87.^pɍ 6L&g%c\rŀK}1%DD-'gRHIN&d0[d}zK2>;}g{M*;ߞظxQ{߶v+'*01ZXHK:MGrcPu)qGY̵\sPDDҥOY)LQ |ns1d%ljƣKf>eP6W2]?c@m[{XamT)mS⎲/\)'HV$:ӧkriӘwh\N."Rnent%|~:o{T͂տ"Wʼ |%o:+14;%k3}p;Un ~%l[sfu\=5fkʌ_t: mLL&L&zg8cDԌZح6k3x!zrqjBz5J{p zıhOrnOkOk[N\`n_^@[J_ΧӸ6,"ja蓛8rs6 ̎qɬ9X5Q̭h[ _l]t= S8g)zJm7"#׾awLy:>I;㹻kC}+Uz,_ZN|ɃU?ޖߓs һM#jT nZ&C|@Y̿YtTx`=ձخͳ87hƬK<1׌U+.Yl88 }[ۦϤu=|kJl +\(nYK9 G1;'xU016MS'-##'~i~b)otB6%F rr/Ee]ʹѺzmq4?=7=~+KnV<ߙL5=$;88FolvmYٛ 'g砃[(m#ld 㹧Z][de[u;|!&?;֒ټ~+i!cx[d=R)!'"r 7Ҡ㋼gz~򹚾yZ:z~ }_5-rՏ<Ҽ}VT1I[,uYlhZK_ܿ9W҈߼3y._ӑ?]Ν}! Ɲ^a*F+ ,-Kb/AYJF?>8T{8H҈۩pƀ/ޚ<{+Y5gTV RIEZF͝zQm4h= Ѻlvg]'{Jv̛8Lmzx8>|Ƕf?2G^֭\ɻynH&lO2=KiZ2`~ތf1_@^.hxkՓNao|:(՟"ƞ'%d뉈ȕJ\mE3_~W%`yhм!68IԵ89x3,_-g?ٗ&!ԫ5GK&>rvIZZiiiXů IDAT,v}Tw8mšҼ9Uȕa3_T:֪{?fhf/xS|˙|) F3NC` u|=z1J^S-k98w> ?08UM& :)+huQp/V%|v^H!k/OݲBﮄsch[yq=(!'"rh??6RIMs]/dddNˡL}nTy3]$I~~9,>$q\Ʒ+ Fڬ8ˌڐ vlv;,pQTNE2_,]ő^ |QK뉈eD\L2בtѾFqg-vͪu. =NLMUS[a|T4.?4|fōϕ>o3iY3 kn^ˍuA u?IBVmlc0^Ѻ+Dnsݡä{qp`s8}Z`ă ;.V<7s/NmnA'2:|~L 纏yEvrYNqsǥ5JTuo~^_4?:FG10Q]DDDʦCc~'g'!ۅb& ؒ$֌_ 0]^&BpI.tJ_/߰턅]ԑ1٧;"*l(!wa m.埾;ofRc?c@;K@k ^3?wFfV3/TǗb#O[}_,}nf[Ju 9կ ^Ԃ`Nch5R$RwΒqcc#7stCqׇ0ڷ/۵ьSGt&jy,Qm|=I?NFѴ^8?\^'""%d"漊)N^U0Wccqw4)(~@v庎mZ1SN"g5\p ~=Թf!Y7hO_8愀/2f?`-1jjUX zaX= +' Fbf),0o̞LD^"Fps:o’#O{y8>Ј!>$JړXj7jWKޯM?@CRi;\GaoK,H饤CI4ڷ/K9#y 7O},5VF`ߢ/)_όk6s3Mt""Rr&؛$fy l96fiğZz--Lnmw!?[?eRs<.tr'L3>Sm"G^cx*AWnJ5wD߆q_ 13Xq,_E.MJzVNEj.X)Sdzf M2}c<ؽ[7-y=.n/O:}_>e9Kx$ϿC,%-ΨypҙZ4es+7g1}H]<s;61ַ/S[k4>~%~HlA≹f AK$FhG0s?\?"sO||kӔ3ONDJrԪ{Mx#"(KM&?=ّf))JFW;Yz=u<"Rcu"r{d}pz<κள:CNDD)+ӟS/y{i1g)r""RdE{k`5g׺9X3l]5p&ݵ!X}=c/`ᵭrp,4F V+~Uimn:׆?̞L߂~*Q0sY3<{*q!rGgȉw.iI'9yLV)<6[CѦXgǙ#{3LVb[X/-0bX{y_Xm:gnCSً{O],,:ƶmFZo+q^}kཌྷa< A8O!Q&[ɺ"8sm,$[+OfG~0e_}CXk3[l@ߌ r[2 u`X37b)yAҦIt$Eud:/_,孃NTxtܙpmqtC [^Wˉ]Q,ݙ q;0׊rхgY?L_5;W܋8n瓫%/Ͻz]ϬgBQ,'8_Y5"Xݾ E-YuEMy62i-.B|hx~2:Jw^w}326wϧw l(3' O$=?0i-~{n`{V^ՍqPI׎<[T(!'"RebVpf"m?ǃK-K+nkQs7Qm4o/oޙ<.>niIN`  K}npϹ_W9AKG#ZdԳ/1~vt[hr+W#aFg_ۛͭǏK-5skIwm? FVݪS ;\Sg8T{8H҈۩`d|4ÇMN`ߎy9>LjKXr ǏHeޯͬ.H<خca3ͣc)r:ܾ4dc}}'bx5<Ҽ*bwk̞Wtɏёg6a|<;*C;y&홿a-w~~TiَygYߗ_De}ȽFPrDDRo|_|E2(vLw|ƯY+u_9>Id Od&iiiai֞R ߵhkVl4hdzuCZҾs3g{z?7ױfGEkyP&Θ-@cf>ޘDMw0$o c) F3N[pǐM>z)!'"Rޙq];ڷoO;k ^%?ޙ͛?9yVBFztqYOB`Gz*J8ך9W3{pMLuZ\W6w=Ltl fg"Gz`Y΃W79E#$_mR$ ʓ!*:Q=XCF!"".YBA&6|}MNTY1ff4A l+\ghC jjwgP& e*H|}<EQ0'>Nd#݇9N @pPqJ|tꊷ5u7%)H8? fLX;f :y/Py%~5.DSXT&ν8ٶ1UF6$1!90̑ 翱yPx)z}1`2> ra{o*zx4&%DD.GɻqX[RG0 vCN u/'9ͦ$%7IGJ]+oWm:gwCV{  lCv,^y3wK><0~m',ɾ\Wa#O `ؿ_ى|{=v!g2!+_KFX,̶8tBU\(SY=AtllWUI9f tl𗛹N4dQ[ >u?9I7َ3jݚYcP%\;.,""ޡHy<ƶ Ό3##<41fL!#<=IШ/ v.\ױ A?fI$N5´>Q\xXQضab7Wccqw4)(~@S+9o6eOT9s:1FpCThb<Ј!>$JړXj7|rGEoo1.7#:`G9-yE;`"]#s$7UI7f Ms5͞Ώ׶-ߌՃpUF0kE>?hv7vfnA@"_/~{#9~ 2#UC"^mwkh\PBND2SXhV:\,~TTzܻ-9\s?6Wxi?4j-ҹETMEMT,o4I,еqDI|aL-g̚<8XCP0Bٞ5J b[D>LXeS.Me=}6cjČ,cB/wiBXǒ%wxaEST ؃B ܔ6-jo*sc6aC/MqaAYT}Lci'Qu[pxxk60cʓ,y^ $IW|W={4Y` #B~{>沈xG~1|a} `>צ)g.*ȕ?U2+?1?GDQ$"ry';rP!âu`]2X7 iғ߷)4f'[gc?|uJ8e\2<_r\WYܕUgȉ\ٱr89bs61H di̺uK>3sq""W<%DDDD.YqL6*=w5ѧG\24f27d5HHKVEDDD$/]*"KV/RBNDDDDDDDDċ"%DDDDDDDDDH 9/RBNDDDDDDDDċ"%DDDDDDDDDH 9/RBNDDDDDDDDċ"%DDDDDDDDDH 9/RBNDDDDDDDDċ"%DDDDDDDDDH 9/RBNDDDDDDDDċ"%DDDDDDDDDH 9/RBNDDDDDDDDċ"%DD䊖DZYqd2N}pښT*gʺ5N˺TگnOqپ7\9)>Vk#,|{"cE1V& xDady,$L )ɤϝxK6m^EgpDYeyJ1V3˰. e<6N/V J^Q/fqr""dWWxރS0l"5 $! RD F4V)[ݕ24z~4ݤnOS|f߲=]"(HӦrߕ?eLSoNU'`|d3zżf!7,ᰃr_zyDn3Cx$~&]کZ+ц'ҿ({h#{v_rƓ[殎Ʊ4LA&fnmw\m[%\2+{Ď>zM|xFAq\g8=9Ȳ^;3ƕ+P!>_^WG,%қޝl}SQeVUϖ5ʳ->Rf;I[pM o"Km7rSɾk[Yh}E7'~Š)x[Da ~[l7I+Wݙ&Vfwɕt 1(Sh) qb&sbиt 3{.of٨{M2XΫL<G5<ݶI*ȉ< ;S~똀\I+f'Os eקst*;76xf1܂@»џafg./5_biYE9qH^/rcMOʯ>:nL\#mXױ+/>,Ec˗ՆbGb;.Èe4Viʵ;ϿZhSqeyy(ʳNa7,kbtj\X:x7Pۘ?s1Co&ʻ1T}P|,~RN_ۧR}mUbcAӯkGgU>…d,K@swB[YctAѼm N{I =L8P)DDQAND҇fut$$tI&)(㥼!V ':m'#|#1>4I!1oO"9@H(|9X8)wbW&>o$$*k-FjAl?+Lo=X8i쓧tҸ\>jj.bƬxI M=+kuR^ٲPEss؉'k~G;=+>kU9WxjK8;G9,~T} F}ۨb_Y+*nǏ\r+"#EDcƐp,F?f? ף2ӷ+yhڕ|w} yXx$}~9d<0Ì`߀73R(O/2NSO18p?:LfDp"MpʏLڰrƠ0B-N$(Sv<8U5DB|ܾ7s{8ո'c0,y{}|U++uL''S$G_u(7];b>+Z7OT*-C>cOzo}\-mN0jڇlޟ#zrOEmKc"\O7]|?{-_vMׄof f-Χyʻh,kՆ EDQAND|ڰz#. vBmxS/ aS7h1a3&g$J9 uo{+ `A[µy\=' +/-KK _w d-g=XuEKobut{;3˴mpo@/?ug£|?UtۧCYc9G|XK%zg}&$ ]|l+/9Wb"1n1'.^:XX&Ͼ[d^N E?(` r"":o*?{זxS ۄ۞ԞqkD~1䤰{g0_A{g&om6q\Mя C_c ВZ!&3#Iig1ʡbbM7d&=B@3ů=+7\E氫i;y!;N {/V.M=δ{< `8=ib(x]ju;uMNaVx x=5'ۃcwńɲٸ Ynt||x/'<ȻN3hjEvN|{/[\/=^kQYӏg/<{NbgxwOCh?㙧cqC@tC.q-n8 -3-3S_ǡCmĿH./<=S\ j_BVByD|sJxtnW{9VYd./c>Y1򴗡;h ߿]uD|>*ӡ1T>R\-2Le&Ckep k9Wt_u7םΫ븹oRL Gbgo6k>;[sZ}\b^I^}[c" {3i_rENK"\tNiqcknrl`X,r錽+ka iOF~Rv(] Xz]~mf3mkQ׊< O&!|H7m]i- 3dyr|F֟_ BƝ^E6UR?:U""""g1!'"r%v{_'7yBN]g7XNd.L71I$#q8. 3SY}b^ۓ:v|3'"~+jpoovT~xQt m[l}>_ƀG2*>Oza-#(4tƠ8.3 b d{/CHC0#ԌQyvPvr׎eO>OxFuL0!=6@m{>_rEK~\J"^?btӿy MN6r>Cneqb&sbиt 3{.of٨{M2XΫL<G5b+>0yxnn~lz+斕1v0%yIShقvM"(^2}Bn5E,pPqT6L%㊫H?:U""""g+DD#dD1Q<)$&}^8nV>φ9,V(/<ϙHIyFj,C;/xI_#z 6؊{xw&mqq<9dϾ -d 3<8|8\>jj.bƬxI M=lnnǏ\r/X]tu hN8Y<߭HqϽu%;~:4SKtU~ OFBjFa+q?DDDDv:_DG3ΎX87_jLgu|{\2wgBONj›L+%ߏDӺq)yS xb SaHv6f{iۮކ'q:/MEDeVx x=1L} Y9 or'2׺7?Ύ˞/zރL [y~@6M}Tx+XJcnxmB\~.q@LO@@ϯKz{g&om6q\]۞ԞqkD~1䤰{g0_At-/-ְjѭsL~@s۱ ,`5|f bʎQҘhs14gƿ!n޸#O=&su/> םr?@+yp_xUR")HS?}c\nG|Fm<7i=ad.zNz.^k`(5[ӹ]=앙ӺKzԼe2nS_㡹.b+. 8:> xv~c S8ѸB9̷ ZRA 5Ac |̓sgt'r˅x?SnI쐻zI0եQ\c-u3GѠQCc}d`tԤQ[ sl,Tf?bqh?㙧cqC@tC.q-r9P7cL)À߱ߋlʙIADI&~fնGDWS$/Qlbك ĤXK24xgu'r\\(m!1*(TέSayXG9N IDAT~En"7o_N8j%cq*NHx-45^Sk?IlLL5E(d2ƍhFөCIDDJ#DDDD'SzdيLzmJu#0vܳ]bbͺuL5D&$%'s81q'Tw8""R!'""""e燹?`0aOUsd+1 gl6 gбe["PANDDMJj*e+Vz}9w8NR_> k"Z"hܨVsAФ<Fbj={<_8euGDDʠTt3]wӴI˹?iޟ: l`R!|޳Ǯ?5X^xy"/cdzx\ "3cǰX6/a hۦuu.d2ݗ}_;) r""RNyyz/*''֬e#y:LyF /!EAAI2]H^}%L&S5D+tUs r""RByשW[oG'Pn5hysYӏ<2/i [f1eDذq#s2̚Ŧ?$.6iCjTN7DDD<DD &;w(BCCky+jZ**--[oV_RݡH9EDөCRNz<##(<|͚*Ɲ Cu 0Ljft*"rPANDDETd$1:kaƓ%رkWu*> /PTZZ:Æ`ƍ4o֬p  <-v-=ΪM*a[/l6s[ZTvenݦ9rؗpoϴ>ƨ,]Ƹ0(6ilrѹSGF_խ @WY|f [hW^} ԮUBN=O q'㬙eFF)Mnn.+Wdʕq󉮲*"H~Y#'@~~ f0c2ccgw` ob`^3DAXCCZcY٬X,ff& $e;B|}O["#i;b&ܘ@}b lCDDD8˙4i< * @LEꫯs{7?un^|EVZU֯_ώ;8p 6܏OT?/dWxgjk&{ 5 `0~6 ~^/Ɍ%(8JvnYwr/ 77g~ K^N.<39-xߦՀ`1ssXZ1LDsu$g%n',+ϖHܽl6DDDL[x1K,]vr-\~儆`֮]W\!Cl|gWh[۷gذaԫWBO4eUDQ͝ˌpX *&n$8"zbqF?`n0a&/;tc^?[^S<Gvv9q=.}Ru&|s/)|3u~/^K @nl$Zۙ"*!"""ǪUܹ3;v<\֬YC>}hڴ){f۷{{ROT;n'O 2ofd$͛5eAƑf#:3gT󞳠ۇFjF:f d*V*UGˉtf͛Ѯm+.S1Q,_?N(nނ5  %?sEѨyC & u6#~2SpgbiX&f}:Wǟ x>'?l..CJrjoVtl_Vck_3[H>KmIK^wF)V=šo3{y+eBJ~ZZ|EU!fQRjol\]gW9sRF f3{!ؗ5jd2F˖-OzS n'22(,:M/gNM ".5"kb hޤ>!yxnֻW\= ?wC$&cbn|#))ilݶ=vPn=0Xf $*", U/Lfg m0p09ſnTYd wf۶mlذAREDN!'"C&ZࢆJ~puJSvR/:9rԟ܂lЈoQ==|vN:n,ƓN|cGsA hh=pƎL/kD#Ff8NZ9\ql6~7.\H@@=z ::+κuXhVMxĜ r"r^+syMj4&s:hXۏ{\~Y7'eYPEB:Eb0gӿ$22̑4<^ػGW#Ԍ$)}/%3!vvۇ_r9r$/` !z1Æc+1¶āy ҏ[m5B1䑗< T@,@wtQ5ja2ҥ ]t)cG6z ?."r>ДU9olGLfL^#Fشafޭo{$3ӺŴm{1^FR!~Y[tK_>{úu2zAXH f#+,%,$͚y4Ն#]܆.&37vP#`?jFaL2f(O ` &.| x=n<^nNPq9a(RDX=&,N/N^kbϓLf? r"r:2+y L&ZY}‹7#c 0/iG& [65" t`6`')W,჏>#19nl%"1)} '<:f}ǚիO>hQf#סQ 8ݘ<_#BŲE }O{jnfC5 W<&w+`ٱoG3rOoC?~>#..7F0 t`0)wLFv>d%"!AժEPpYN~]T"3rVT>ցfU󒕙u*xo`>fӋ*qI='ӗs}:ZMM~ҠuW܃3Yh^f,r3˱~~/uNv+g&'9ׯ94>Hܨ !!cb894lԘF b`u&7kױ}233e@\٥=!af`u8@hp `&:~n\ИÉ+\2իd>S6oFJjo6 SDDD.[wTw󉈈m q"RvH%f}yʱHZa5~h֘\DFF:6, I`֬??g y뵐q#ɬY:u办W}A.  /D..lNӖd9M|]-]q;wUw󉈈N{t^A89kΏ'p NM%%ǙCh3̌#\N/ٙ9 1i EnYXf_ CVĉ 1e4z:YS3=9).|^p P2^+tX~1k[wctd?#ryrYZu2̧gHk R3C:<wNMSHRm&6DDDDDDnv4j4sh!+I2l$sXMA0 R If41M磥|>iț,uq~ &N x߹?=v ^&$_@ c0`Ϲ턚B3)}\tL0ٰa~}""""""XP jCR+ OՐUtcxZ&mm!73v)LX,FvnL&kb:n(䰊0;1o6IΓdX۽o I%Sn?Pa] kh`M*}b;o}Opx,M7퉈ܴ˶Zk)UQ3 D䆸wK s DzH=~/##D `\!zvX48|Slڴ`O8%c3DB!, C͘xUiODDDDD:i-__Xe|rn{8ʋ"q>VHa:hoo!LEl \mZe}X}% glj_py_7sܹ4d)f]+9v,}+cKzy|MN:mFٴi{!.]Akk+HdY\DDDDDDze\jSk [:]7Hf񺽴4q{|tm% 262J߅A\^Mcx<#a 5f3Y<+V251Ns%,)Ge| $͑Ƙ#M ǙD!ahpdbC8k9H4e޽tvvb&;vCe˖%K#|>Km[O^4X^?^Ǎcz86ƪNKlh99M~u-~'߲jF$dscoo_Xϋc8I'1(I'e XE~b =,ٺu+^㥗^"J سg6lG?XN?)gϞhHuؼy3'N`ttξ}0 ۶ƍ*<@WWf|% 0.kϲ,swosMOOSOݽ? """"""M%`qeWO֐FWY],2vNDd';нz5LH׃i9}:K,aU [Xf+W m!kgEkiNMx#5q|ͥpZc!A?jz +^#sꫯ~/Fgtwwꫯ8000@GGO<瘜l۶{[/288X mq{1~a\.?r[,yg1 b[\KOy*i([,[Zj-ic""WCKkY^zWL]r%14:ƥ l^GGJ2F¼?v Oxlcǎl۹A|./b>Ǫ] ]kd :Myp(L&=@8С::44tHR=ߪgj] ]ҐUm_^8r:,"+ӿ_g N7}=p3df?s%LQ-F4f2{F/M<)#J7~[{Ӝ9u y&G7ZfIv `&6m׿5cccUi$Gj wq|IxgV)m`I!""""" _W409V=CV\-!74LteYk ٿ +GWԤ5S3?}̧Ӝ<} Ril,0۶m'9cIμh?xw8}2u!Lqܵ%?i]~q8p:t~$ ׾F(SU|b<_9.͛7{qoBODDDDDbo|<˲.ʫ*tPgW1R(9. \\~,_\'}hii1Uǥ_<'q[O*cs8 .<{o@,l 0MV&I)Lj~/cx$|>L;OεE+Vvmg߾}|;7`޽<$Ilۦ9!_tVbT$+dY~?]]]{NDDDDDD">s&sӗ+4lʕڨ""""""""rs']kl--vNi$+=UVz_RízòzCZ[DDDDDDDDnNBZU `yV#Ym&""""""""7zC>-[U M6ȵآվ[,l[jW+ pNDDDDDDDD0mA܂v5V*78k$`[v.VsӉ4j9AU J]K!wpr7"(S8'""""""""IyWFc7""""""""rs!_CCHIENDB`tootle-1.0-alpha2/data/ui/000077500000000000000000000000001374710545700153705ustar00rootroot00000000000000tootle-1.0-alpha2/data/ui/dialogs/000077500000000000000000000000001374710545700170125ustar00rootroot00000000000000tootle-1.0-alpha2/data/ui/dialogs/compose.ui000066400000000000000000000476751374710545700210410ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/dialogs/list_editor.ui000066400000000000000000000321631374710545700216770ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/dialogs/main.ui000066400000000000000000000014711374710545700203000ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/dialogs/new_account.ui000066400000000000000000000430761374710545700216700ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/dialogs/preferences.ui000066400000000000000000000223211374710545700216520ustar00rootroot00000000000000 100 500 5 5 10 50 1 1 tootle-1.0-alpha2/data/ui/menus.ui000066400000000000000000000065101374710545700170600ustar00rootroot00000000000000

Filter Posts view.source statuses Following view.source following Followers view.source followers
With Replies view.include-replies action-disabled With Media view.only-media action-disabled
Mention… view.mention public Direct Message… view.mention direct Copy Handle view.copy_handle
Hide Boosts view.hiding_reblogs action-disabled Mute view.muting
Report view.report action-missing Block view.blocking Block Domain view.domain_blocking action-disabled
tootle-1.0-alpha2/data/ui/views/000077500000000000000000000000001374710545700165255ustar00rootroot00000000000000tootle-1.0-alpha2/data/ui/views/base.ui000066400000000000000000000270461374710545700200070ustar00rootroot00000000000000 True False go-previous-symbolic tootle-1.0-alpha2/data/ui/views/new_account.ui000066400000000000000000000230341374710545700213730ustar00rootroot00000000000000 350 400 True False center center 12 12 vertical 12 True False 12 12 True True True True True True False 8 8 8 8 go-next-symbolic True False end 1 0 2 True False True True slide-left-right True False 12 12 True True 6 6 True False True Which Instance? center True 0 0 2 True False end start <a href="https://joinmastodon.org/">What's an instance?</a> True right False 1 2 True True True True False instance.domain url 0 1 2 True False 12 12 True True 6 6 True False True Grant Account Access center True 0 0 2 True True True edit-paste-symbolic Paste Paste your authorization code here url 0 1 2 True True end start <a href="">Try another instance?</a> True right False 1 2 page1 page1 1 0 1 True False True True 128 com.github.bleakgrey.tootle 6 0 0 tootle-1.0-alpha2/data/ui/views/profile_header.ui000066400000000000000000000133511374710545700220370ustar00rootroot00000000000000 400 True False 16 8 8 True False True none False 100 80 True False False False True False 8 8 8 8 8 True 8 8 8 8 96 False True 0 True False center 8 8 vertical 8 True True False True 0 False 0.5 False True 1 True True 2 True False False False True True False 8 8 8 8 True 25 1 1 tootle-1.0-alpha2/data/ui/widgets/000077500000000000000000000000001374710545700170365ustar00rootroot00000000000000tootle-1.0-alpha2/data/ui/widgets/accounts_button.ui000066400000000000000000000547651374710545700226300ustar00rootroot00000000000000 False True False False False slide-left-right True 275 True False 12 vertical 2 True True True <b><span size="large">No account</span></b> True accounts False True 0 True False 12 6 True 6 6 4 4 none False True False start True True True Conversations center center 32 32 True False user-invisible-symbolic True False True True True Favorites center center 32 32 True False non-starred-symbolic True False True True True Bookmarks center center 32 32 True False user-bookmarks-symbolic True False end True True True Lists center center 32 32 True False view-list-symbolic False True 2 False True 6 3 3 none False True True True False vertical True False POSTS False True 0 True False 1K False True 1 True True True False vertical True False FOLLOWING False True 0 True False 64 False True 1 True True True False vertical True False FOLLOWERS False True 0 True False 24 False True 1 False True 3 True False 4 False True 4 True True True Refresh False True 5 True True True Preferences False True 6 True True True app.about About False True 7 menu 350 True False 12 vertical 6 True True True Accounts menu True True False True 0 True True True 300 True True False True False False True 1 accounts 1 tootle-1.0-alpha2/data/ui/widgets/accounts_button_item.ui000066400000000000000000000146401374710545700236320ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/widgets/adaptive_button.ui000066400000000000000000000042721374710545700225720ustar00rootroot00000000000000 True False hjghjg True False gtk-missing-image tootle-1.0-alpha2/data/ui/widgets/attachment_slot.ui000066400000000000000000000115021374710545700225650ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/widgets/compose_attachment.ui000066400000000000000000000145721374710545700232630ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/widgets/list_editor_item.ui000066400000000000000000000061251374710545700227400ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/widgets/list_item.ui000066400000000000000000000123271374710545700213730ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/widgets/profile_field_row.ui000066400000000000000000000055261374710545700230770ustar00rootroot00000000000000 tootle-1.0-alpha2/data/ui/widgets/status.ui000066400000000000000000000476711374710545700207370ustar00rootroot00000000000000 True False user-bookmarks-symbolic True False non-starred-symbolic True False media-playlist-repeat-symbolic True False mail-reply-sender-symbolic tootle-1.0-alpha2/data/ui/widgets/timeline_menu.ui000066400000000000000000000061611374710545700222330ustar00rootroot00000000000000 tootle-1.0-alpha2/install.sh000077500000000000000000000001211374710545700160410ustar00rootroot00000000000000set -e meson build cd build ninja sudo ninja install com.github.bleakgrey.tootle tootle-1.0-alpha2/meson.build000066400000000000000000000075711374710545700162160ustar00rootroot00000000000000project('com.github.bleakgrey.tootle', 'vala', 'c', version: '1.0.0-alpha2') config = configuration_data() config.set('EXEC_NAME', meson.project_name()) config.set('GETTEXT_PACKAGE', meson.project_name()) config.set('RESOURCES', '/' + '/'.join(meson.project_name().split('.')) + '/' ) config.set('VERSION', meson.project_version()) config.set('PREFIX', get_option('prefix')) config.set('NAME', 'Tootle') config.set('WEBSITE', 'https://github.com/bleakgrey/tootle') config.set('SUPPORT_WEBSITE', 'https://github.com/bleakgrey/tootle/issues') config.set('COPYRIGHT', '© 2018-2020 bleak_grey') gnome = import('gnome') i18n = import('i18n') add_global_arguments([ '-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()), ], language: 'c', ) asresources = gnome.compile_resources( 'as-resources', 'data/gresource.xml', source_dir: 'data', c_name: 'as' ) build_file = configure_file( input: 'src/Build.vala', output: 'Build.vala', configuration: config ) libhandy_dep = dependency('libhandy-1', version: '>= 1.0', required: false) if not libhandy_dep.found() libhandy = subproject( 'libhandy', default_options: [ 'examples=false', 'glade_catalog=disabled', 'tests=false', ] ) libhandy_dep = declare_dependency( dependencies: [ libhandy.get_variable('libhandy_dep'), libhandy.get_variable('libhandy_vapi'), ] ) endif executable( meson.project_name(), asresources, build_file, 'src/Application.vala', 'src/Desktop.vala', 'src/Drawing.vala', 'src/Html.vala', 'src/Request.vala', 'src/DateTime.vala', 'src/InstanceAccount.vala', 'src/Services/Streams.vala', 'src/Services/Settings.vala', 'src/Services/Accounts.vala', 'src/Services/IAccountListener.vala', 'src/Services/IStreamListener.vala', 'src/Services/Cache.vala', 'src/Services/Network.vala', 'src/API/Account.vala', 'src/API/AccountField.vala', 'src/API/Relationship.vala', 'src/API/Mention.vala', 'src/API/Tag.vala', 'src/API/Status.vala', 'src/API/Visibility.vala', 'src/API/Notification.vala', 'src/API/NotificationType.vala', 'src/API/Attachment.vala', 'src/API/Conversation.vala', 'src/API/List.vala', 'src/API/SearchResults.vala', 'src/API/Entity.vala', 'src/Widgets/Widgetizable.vala', 'src/Widgets/Avatar.vala', 'src/Widgets/AccountsButton.vala', 'src/Widgets/TimelineMenu.vala', 'src/Widgets/RichLabel.vala', 'src/Widgets/Status.vala', 'src/Widgets/Notification.vala', 'src/Widgets/Conversation.vala', 'src/Widgets/VisibilityPopover.vala', 'src/Widgets/Attachment/Box.vala', 'src/Widgets/Attachment/Slot.vala', 'src/Widgets/Attachment/Picture.vala', 'src/Widgets/AdaptiveButton.vala', 'src/Dialogs/ISavedWindow.vala', 'src/Dialogs/NewAccount.vala', 'src/Dialogs/MainWindow.vala', 'src/Dialogs/About.vala', 'src/Dialogs/Compose.vala', 'src/Dialogs/Preferences.vala', 'src/Dialogs/ListEditor.vala', 'src/Views/Base.vala', 'src/Views/TabbedBase.vala', 'src/Views/Main.vala', 'src/Views/Timeline.vala', 'src/Views/Home.vala', 'src/Views/Local.vala', 'src/Views/Federated.vala', 'src/Views/Notifications.vala', 'src/Views/Conversations.vala', 'src/Views/Bookmarks.vala', 'src/Views/Thread.vala', 'src/Views/Profile.vala', 'src/Views/Favorites.vala', 'src/Views/Search.vala', 'src/Views/Hashtag.vala', 'src/Views/Lists.vala', 'src/Views/List.vala', dependencies: [ dependency('gtk+-3.0', version: '>=3.22.0'), dependency('glib-2.0', version: '>=2.30.0'), dependency('gee-0.8', version: '>=0.8.5'), dependency('libsoup-2.4'), dependency('json-glib-1.0', version: '>=1.4.4'), libhandy_dep, ], install: true, ) subdir('data') subdir('po') meson.add_install_script('meson/post_install.py') tootle-1.0-alpha2/meson/000077500000000000000000000000001374710545700151635ustar00rootroot00000000000000tootle-1.0-alpha2/meson/post_install.py000066400000000000000000000010061374710545700202450ustar00rootroot00000000000000#!/usr/bin/env python3 import os import subprocess schemadir = os.path.join(os.environ['MESON_INSTALL_PREFIX'], 'share', 'glib-2.0', 'schemas') iconsdir = os.path.join(os.environ['MESON_INSTALL_PREFIX'], 'share', 'icons', 'hicolor') if not os.environ.get('DESTDIR'): print('Compiling gsettings schemas...') subprocess.call(['glib-compile-schemas', schemadir]) print('Updating icon cache...') if not os.path.exists(iconsdir): os.makedirs(iconsdir) subprocess.call(['gtk-update-icon-cache', '-qtf', iconsdir])tootle-1.0-alpha2/po/000077500000000000000000000000001374710545700144605ustar00rootroot00000000000000tootle-1.0-alpha2/po/LINGUAS000066400000000000000000000000441374710545700155030ustar00rootroot00000000000000fr_FR ru_RU pl_PL de_DE zh_CN es_MX tootle-1.0-alpha2/po/POTFILES000066400000000000000000000034231374710545700156320ustar00rootroot00000000000000data/com.github.bleakgrey.tootle.desktop.in data/com.github.bleakgrey.tootle.appdata.xml.in data/com.github.bleakgrey.tootle.gschema.xml data/ui/dialogs/compose.ui data/ui/dialogs/list_editor.ui data/ui/dialogs/main.ui data/ui/dialogs/preferences.ui data/ui/dialogs/new_account.ui data/ui/views/base.ui data/ui/views/profile_header.ui data/ui/widgets/accounts_button.ui data/ui/widgets/accounts_button_item.ui data/ui/widgets/attachment_slot.ui data/ui/widgets/compose_attachment.ui data/ui/widgets/list_editor_item.ui data/ui/widgets/list_item.ui data/ui/widgets/profile_field_row.ui data/ui/widgets/status.ui data/ui/widgets/timeline_menu.ui src/Build.vala src/Application.vala src/Desktop.vala src/Drawing.vala src/Html.vala src/InstanceAccount.vala src/Request.vala src/DateTime.vala src/Dialogs/About.vala src/Dialogs/Compose.vala src/Dialogs/ListEditor.vala src/Dialogs/MainWindow.vala src/Dialogs/Preferences.vala src/Dialogs/NewAccount.vala src/Services/Accounts.vala src/Services/Cache.vala src/Services/Network.vala src/Services/Streams.vala src/Views/Base.vala src/Views/TabbedBase.vala src/Views/Main.vala src/Views/Bookmarks.vala src/Views/Conversations.vala src/Views/Thread.vala src/Views/Favorites.vala src/Views/Federated.vala src/Views/Hashtag.vala src/Views/Home.vala src/Views/List.vala src/Views/Lists.vala src/Views/Local.vala src/Views/Notifications.vala src/Views/Profile.vala src/Views/Search.vala src/Views/Timeline.vala src/Views/Thread.vala src/Widgets/Attachment/Box.vala src/Widgets/Attachment/Picture.vala src/Widgets/Attachment/Slot.vala src/Widgets/AccountsButton.vala src/Widgets/Avatar.vala src/Widgets/Conversation.vala src/Widgets/Notification.vala src/Widgets/RichLabel.vala src/Widgets/Status.vala src/Widgets/TimelineMenu.vala src/Widgets/VisibilityPopover.vala tootle-1.0-alpha2/po/com.github.bleakgrey.tootle.pot000066400000000000000000000265471374710545700225320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the com.github.bleakgrey.tootle package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: com.github.bleakgrey.tootle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 16:21+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: data/com.github.bleakgrey.tootle.desktop.in:4 #: data/com.github.bleakgrey.tootle.appdata.xml.in:7 msgid "Tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:5 #: data/com.github.bleakgrey.tootle.desktop.in:6 msgid "Mastodon Client" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:8 msgid "com.github.bleakgrey.tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:11 msgid "toot;mastodon;social;network;post;" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:8 msgid "Lightning fast client for Mastodon" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:11 msgid "" "Tootle is a GTK client for the world's largest, decentralized, microblogging " "platform, Mastodon. With the user experience in mind, it provides a clean, " "native interface that allows you to integrate Mastodon's social experience " "seamlessly with your desktop environment." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:14 msgid "" "Mastodon is a free and open source microblogging platform similar to " "Twitter, but with user privacy and decentralization in mind. It is one of " "many protocols that interacts with the Fediverse of protocols like Pleroma, " "GNU Social, and others. The power of federated microblogging that Mastodon " "brings and the agility of Tootle creates a fantastic duo for all of your " "social media needs." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:23 msgid "bleak_grey" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:71 msgid "New app icon (Kudos to Tobias Bernard!)" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:72 msgid "New interface design" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:73 msgid "Fixed bugs" msgstr "" #: data/ui/dialogs/compose.ui:42 msgid "Publish" msgstr "" #: data/ui/dialogs/compose.ui:71 data/ui/dialogs/list_editor.ui:59 msgid "Cancel" msgstr "" #: data/ui/dialogs/compose.ui:119 msgid "Write your warning here" msgstr "" #: data/ui/dialogs/compose.ui:185 msgid "Visibility" msgstr "" #: data/ui/dialogs/compose.ui:238 msgid "Attach Media" msgstr "" #: data/ui/dialogs/compose.ui:260 msgid "Instance Emojis" msgstr "" #: data/ui/dialogs/compose.ui:284 msgid "Spoiler Warning" msgstr "" #: data/ui/dialogs/compose.ui:329 msgid "Text" msgstr "" #: data/ui/dialogs/compose.ui:389 msgid "Media" msgstr "" #: data/ui/dialogs/list_editor.ui:33 msgid "Name" msgstr "" #: data/ui/dialogs/list_editor.ui:83 msgid "Save" msgstr "" #: data/ui/dialogs/list_editor.ui:200 msgid "Search among people you follow" msgstr "" #: data/ui/dialogs/list_editor.ui:256 msgid "Nobody here" msgstr "" #: data/ui/dialogs/preferences.ui:29 msgid "General" msgstr "" #: data/ui/dialogs/preferences.ui:34 msgid "Appearance" msgstr "" #: data/ui/dialogs/preferences.ui:39 msgid "Dark theme" msgstr "" #: data/ui/dialogs/preferences.ui:54 msgid "Text scale (%)" msgstr "" #: data/ui/dialogs/preferences.ui:61 msgid "100" msgstr "" #: data/ui/dialogs/preferences.ui:75 msgid "Behavior" msgstr "" #: data/ui/dialogs/preferences.ui:79 msgid "Autostart" msgstr "" #: data/ui/dialogs/preferences.ui:81 msgid "Start minimized at boot" msgstr "" #: data/ui/dialogs/preferences.ui:94 msgid "Background work" msgstr "" #: data/ui/dialogs/preferences.ui:96 msgid "Receive notifications even when the app is closed" msgstr "" #: data/ui/dialogs/preferences.ui:110 msgid "Default post visibility" msgstr "" #: data/ui/dialogs/preferences.ui:119 msgid "Timelines" msgstr "" #: data/ui/dialogs/preferences.ui:124 msgid "Posts per page" msgstr "" #: data/ui/dialogs/preferences.ui:131 msgid "10" msgstr "" #: data/ui/dialogs/preferences.ui:141 msgid "Infinite scrolling" msgstr "" #: data/ui/dialogs/preferences.ui:143 data/ui/dialogs/preferences.ui:176 msgid "Warning: This will increase memory usage" msgstr "" #: data/ui/dialogs/preferences.ui:157 msgid "Stream timelines" msgstr "" #: data/ui/dialogs/preferences.ui:159 msgid "Receive new posts and notifications in real-time" msgstr "" #: data/ui/dialogs/preferences.ui:174 msgid "Stream public timelines" msgstr "" #: data/ui/dialogs/new_account.ui:21 msgid "Add Account" msgstr "" #: data/ui/dialogs/new_account.ui:25 data/ui/views/base.ui:26 #: src/Dialogs/NewAccount.vala:85 msgid "Back" msgstr "" #: data/ui/dialogs/new_account.ui:48 src/Dialogs/NewAccount.vala:84 msgid "Next" msgstr "" #: data/ui/dialogs/new_account.ui:129 msgid "What is your instance?" msgstr "" #: data/ui/dialogs/new_account.ui:191 msgid "Don't have one yet?" msgstr "" #: data/ui/dialogs/new_account.ui:242 msgid "Enter authorization code" msgstr "" #: data/ui/dialogs/new_account.ui:276 msgid "Try manual authorization" msgstr "" #: data/ui/widgets/accounts_button.ui:64 src/Views/Conversations.vala:6 msgid "Conversations" msgstr "" #: data/ui/widgets/accounts_button.ui:93 src/Views/Favorites.vala:6 msgid "Favorites" msgstr "" #: data/ui/widgets/accounts_button.ui:122 src/Views/Bookmarks.vala:6 msgid "Bookmarks" msgstr "" #: data/ui/widgets/accounts_button.ui:152 src/Views/Lists.vala:59 msgid "Lists" msgstr "" #: data/ui/widgets/accounts_button.ui:204 msgid "POSTS" msgstr "" #: data/ui/widgets/accounts_button.ui:247 msgid "FOLLOWING" msgstr "" #: data/ui/widgets/accounts_button.ui:290 msgid "FOLLOWERS" msgstr "" #: data/ui/widgets/accounts_button.ui:344 msgid "Refresh" msgstr "" #: data/ui/widgets/accounts_button.ui:357 msgid "Preferences" msgstr "" #: data/ui/widgets/accounts_button.ui:371 msgid "About" msgstr "" #: data/ui/widgets/accounts_button.ui:397 src/Views/Search.vala:43 msgid "Accounts" msgstr "" #: data/ui/widgets/accounts_button_item.ui:60 msgid "Forget" msgstr "" #: data/ui/widgets/accounts_button_item.ui:88 msgid "Title" msgstr "" #: data/ui/widgets/compose_attachment.ui:29 msgid "Describe for the visually impaired" msgstr "" #: data/ui/widgets/compose_attachment.ui:90 msgid "Unknown" msgstr "" #: data/ui/widgets/compose_attachment.ui:113 data/ui/widgets/list_item.ui:74 #: src/Widgets/Status.vala:243 msgid "Delete" msgstr "" #: data/ui/widgets/list_item.ui:26 src/Dialogs/ListEditor.vala:87 msgid "Untitled" msgstr "" #: data/ui/widgets/list_item.ui:42 msgid "Edit" msgstr "" #. Please do not remove the credits below. You may add your own, but keep the existing ones intact. #. TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. #: src/Build.vala:15 msgid " " msgstr "" #: src/Desktop.vala:18 #, c-format msgid "" "Open this URL in your browser:\n" "\n" "%s" msgstr "" #: src/Html.vala:3 msgid "[ There was an error parsing this text :c ]" msgstr "" #: src/DateTime.vala:11 msgid "Just now" msgstr "" #: src/DateTime.vala:21 msgid "Yesterday" msgstr "" #: src/DateTime.vala:24 msgid "%b %e" msgstr "" #: src/DateTime.vala:27 msgid "%b %e, %Y" msgstr "" #: src/Dialogs/About.vala:14 msgid "Report an issue" msgstr "" #: src/Dialogs/Compose.vala:81 src/Views/Lists.vala:33 msgid "This action cannot be reverted." msgstr "" #: src/Dialogs/Compose.vala:125 src/Views/Main.vala:25 msgid "Compose" msgstr "" #: src/Dialogs/Compose.vala:135 src/Widgets/Status.vala:253 msgid "Redraft" msgstr "" #: src/Dialogs/Compose.vala:154 msgid "Reply" msgstr "" #: src/Dialogs/Compose.vala:197 msgid "Select media" msgstr "" #: src/Dialogs/Compose.vala:200 msgid "_Open" msgstr "" #: src/Dialogs/Compose.vala:201 msgid "_Cancel" msgstr "" #: src/Dialogs/ListEditor.vala:201 msgid "Discard changes?" msgstr "" #: src/Dialogs/ListEditor.vala:202 msgid "You need to save the list if you want to keep them." msgstr "" #: src/Dialogs/NewAccount.vala:84 msgid "Close" msgstr "" #: src/Dialogs/NewAccount.vala:85 msgid "Add Another" msgstr "" #: src/Dialogs/NewAccount.vala:127 msgid "Please enter a valid instance URL" msgstr "" #: src/Dialogs/NewAccount.vala:160 msgid "Please enter a valid authorization code" msgstr "" #: src/Dialogs/NewAccount.vala:176 msgid "Instance failed to authorize the access token" msgstr "" #: src/Dialogs/NewAccount.vala:190 #, c-format msgid "Hello, %s!" msgstr "" #: src/Dialogs/NewAccount.vala:218 msgid "Server returned an error" msgstr "" #: src/Services/Accounts.vala:32 msgid "Network Error" msgstr "" #: src/Services/Accounts.vala:33 #, c-format msgid "" "The instance has invalidated this session. Please sign in again.\n" "\n" "%s" msgstr "" #: src/Views/Base.vala:6 msgid "Nothing to see here" msgstr "" #: src/Views/Base.vala:58 msgid "Reload" msgstr "" #: src/Views/Main.vala:31 src/Views/Search.vala:15 msgid "Search" msgstr "" #: src/Views/Thread.vala:13 msgid "Conversation" msgstr "" #: src/Views/Federated.vala:7 msgid "Federated" msgstr "" #: src/Views/Home.vala:6 msgid "Home" msgstr "" #: src/Views/Lists.vala:32 #, c-format msgid "Delete \"%s\"?" msgstr "" #: src/Views/Local.vala:4 msgid "Local" msgstr "" #: src/Views/Notifications.vala:11 msgid "Notifications" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Block \"%s\"?" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Unblock \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Block Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Unblock Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:164 msgid "" "Blocking a domain will:\n" "\n" "• Remove its public posts and notifications from your timelines\n" "• Remove its followers from your account\n" "• Prevent you from following its users" msgstr "" #: src/Views/Profile.vala:204 msgid "Sent follow request" msgstr "" #: src/Views/Profile.vala:206 msgid "Mutually follows you" msgstr "" #: src/Views/Profile.vala:208 msgid "Follows you" msgstr "" #: src/Views/Profile.vala:229 msgid "Unblock" msgstr "" #: src/Views/Profile.vala:239 msgid "Unfollow" msgstr "" #: src/Views/Profile.vala:248 msgid "Follow" msgstr "" #: src/Views/Search.vala:44 msgid "Statuses" msgstr "" #: src/Views/Search.vala:45 msgid "Hashtags" msgstr "" #: src/Views/Search.vala:61 msgid "Enter query" msgstr "" #: src/Widgets/Attachment/Slot.vala:46 msgid "File saved to Downloads" msgstr "" #: src/Widgets/AccountsButton.vala:40 #, c-format msgid "Forget %s?" msgstr "" #: src/Widgets/AccountsButton.vala:41 msgid "This account will be removed from the application." msgstr "" #: src/Widgets/AccountsButton.vala:148 msgid "Anonymous" msgstr "" #: src/Widgets/AccountsButton.vala:149 msgid "No active account" msgstr "" #: src/Widgets/Status.vala:72 msgid "Click to show sensitive content" msgstr "" #: src/Widgets/Status.vala:163 msgid "This post can't be boosted" msgstr "" #: src/Widgets/Status.vala:213 msgid "Open in Browser" msgstr "" #: src/Widgets/Status.vala:215 msgid "Copy Link" msgstr "" #: src/Widgets/Status.vala:217 msgid "Copy Text" msgstr "" #: src/Widgets/Status.vala:237 msgid "Unpin from Profile" msgstr "" #: src/Widgets/Status.vala:237 msgid "Pin on Profile" msgstr "" tootle-1.0-alpha2/po/de_DE.po000066400000000000000000000363541374710545700157730ustar00rootroot00000000000000# German translations for com.github.bleakgrey.tootle package. # Copyright (C) 2020 THE com.github.bleakgrey.tootle'S COPYRIGHT HOLDER # This file is distributed under the same license as the com.github.bleakgrey.tootle package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: com.github.bleakgrey.tootle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 16:21+0300\n" "PO-Revision-Date: 2020-10-23 12:38+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" #: data/com.github.bleakgrey.tootle.desktop.in:4 #: data/com.github.bleakgrey.tootle.appdata.xml.in:7 msgid "Tootle" msgstr "Tootle" #: data/com.github.bleakgrey.tootle.desktop.in:5 #: data/com.github.bleakgrey.tootle.desktop.in:6 msgid "Mastodon Client" msgstr "Mastodon-Client" #: data/com.github.bleakgrey.tootle.desktop.in:8 msgid "com.github.bleakgrey.tootle" msgstr "com.github.bleakgrey.tootle" #: data/com.github.bleakgrey.tootle.desktop.in:11 msgid "toot;mastodon;social;network;post;" msgstr "toot;mastodon;social;network;post;" #: data/com.github.bleakgrey.tootle.appdata.xml.in:8 msgid "Lightning fast client for Mastodon" msgstr "Blitzschneller Client für Mastodon" #: data/com.github.bleakgrey.tootle.appdata.xml.in:11 msgid "" "Tootle is a GTK client for the world's largest, decentralized, microblogging " "platform, Mastodon. With the user experience in mind, it provides a clean, " "native interface that allows you to integrate Mastodon's social experience " "seamlessly with your desktop environment." msgstr "" "Tootle ist ein GTK-Client für die weltweit größte, dezentrale Microblogging-" "Plattform, Mastodon. Mit Blick auf die Benutzererfahrung bietet es eine " "saubere, native Schnittstelle, mit der du die soziale Erfahrung von Mastodon " "nahtlos in deine Desktop-Umgebung integrieren kannst." #: data/com.github.bleakgrey.tootle.appdata.xml.in:14 msgid "" "Mastodon is a free and open source microblogging platform similar to " "Twitter, but with user privacy and decentralization in mind. It is one of " "many protocols that interacts with the Fediverse of protocols like Pleroma, " "GNU Social, and others. The power of federated microblogging that Mastodon " "brings and the agility of Tootle creates a fantastic duo for all of your " "social media needs." msgstr "" "Mastodon ist eine kostenlose und Open-Source-Microblogging-Plattform ähnlich " "wie Twitter, aber mit Blick auf die Privatsphäre und Dezentralisierung der " "Nutzer. Es ist eines von vielen Protokollen, die mit den Fediversen von " "Protokollen wie Pleroma, GNU Social und anderen interagieren. Die Kraft des " "föderierten Microbloggings, die Mastodon mitbringt, und die Agilität von " "Tootle schaffen ein fantastisches Duo für all deine Social-Media-Bedürfnisse." #: data/com.github.bleakgrey.tootle.appdata.xml.in:23 msgid "bleak_grey" msgstr "bleak_grey" #: data/com.github.bleakgrey.tootle.appdata.xml.in:71 msgid "New app icon (Kudos to Tobias Bernard!)" msgstr "Neues App-Symbol (Kudos an Tobias Bernard!)" #: data/com.github.bleakgrey.tootle.appdata.xml.in:72 msgid "New interface design" msgstr "Neues Design der Benutzeroberfläche" #: data/com.github.bleakgrey.tootle.appdata.xml.in:73 msgid "Fixed bugs" msgstr "Bugs behoben" #: data/ui/dialogs/compose.ui:42 msgid "Publish" msgstr "Veröffentlichen" #: data/ui/dialogs/compose.ui:71 data/ui/dialogs/list_editor.ui:59 msgid "Cancel" msgstr "Abbrechen" #: data/ui/dialogs/compose.ui:119 msgid "Write your warning here" msgstr "Schreibe deine Warnung hier" #: data/ui/dialogs/compose.ui:185 msgid "Visibility" msgstr "Sichtbarkeit" #: data/ui/dialogs/compose.ui:238 msgid "Attach Media" msgstr "Medien anhängen" #: data/ui/dialogs/compose.ui:260 msgid "Instance Emojis" msgstr "Instanz-Emojis" #: data/ui/dialogs/compose.ui:284 msgid "Spoiler Warning" msgstr "Spoilerwarnung" #: data/ui/dialogs/compose.ui:329 msgid "Text" msgstr "Text" #: data/ui/dialogs/compose.ui:389 msgid "Media" msgstr "Medien" #: data/ui/dialogs/list_editor.ui:33 msgid "Name" msgstr "Name" #: data/ui/dialogs/list_editor.ui:83 msgid "Save" msgstr "Speichern" #: data/ui/dialogs/list_editor.ui:200 msgid "Search among people you follow" msgstr "Suche unter Personen, denen du folgst" #: data/ui/dialogs/list_editor.ui:256 msgid "Nobody here" msgstr "Niemand hier" #: data/ui/dialogs/preferences.ui:29 msgid "General" msgstr "Allgemein" #: data/ui/dialogs/preferences.ui:34 msgid "Appearance" msgstr "Aussehen" #: data/ui/dialogs/preferences.ui:39 msgid "Dark theme" msgstr "Dunkles Thema" #: data/ui/dialogs/preferences.ui:54 #, fuzzy msgid "Text scale (%)" msgstr "Textgröße für Beiträge (%)" #: data/ui/dialogs/preferences.ui:61 msgid "100" msgstr "" #: data/ui/dialogs/preferences.ui:75 msgid "Behavior" msgstr "Verhalten" #: data/ui/dialogs/preferences.ui:79 msgid "Autostart" msgstr "Autostart" #: data/ui/dialogs/preferences.ui:81 msgid "Start minimized at boot" msgstr "Mit dem System minimiert starten" #: data/ui/dialogs/preferences.ui:94 msgid "Background work" msgstr "Hintergrundarbeit" #: data/ui/dialogs/preferences.ui:96 #, fuzzy msgid "Receive notifications even when the app is closed" msgstr "" "Erhalte weiterhin Benachrichtigungen, auch wenn das App-Fenster geschlossen " "ist" #: data/ui/dialogs/preferences.ui:110 msgid "Default post visibility" msgstr "Standard-Post-Sichtbarkeit" #: data/ui/dialogs/preferences.ui:119 msgid "Timelines" msgstr "Zeitleisten" #: data/ui/dialogs/preferences.ui:124 msgid "Posts per page" msgstr "Beiträge pro Seite" #: data/ui/dialogs/preferences.ui:131 msgid "10" msgstr "" #: data/ui/dialogs/preferences.ui:141 msgid "Infinite scrolling" msgstr "" #: data/ui/dialogs/preferences.ui:143 data/ui/dialogs/preferences.ui:176 #, fuzzy msgid "Warning: This will increase memory usage" msgstr "" "Warnung: Dadurch werden in überfüllten Instanzen mehr Ressourcen verbraucht" #: data/ui/dialogs/preferences.ui:157 msgid "Stream timelines" msgstr "Zeitleisten streamen" #: data/ui/dialogs/preferences.ui:159 msgid "Receive new posts and notifications in real-time" msgstr "" #: data/ui/dialogs/preferences.ui:174 msgid "Stream public timelines" msgstr "Öffentliche Zeitleisten streamen" #: data/ui/dialogs/new_account.ui:21 msgid "Add Account" msgstr "Konto hinzufügen" #: data/ui/dialogs/new_account.ui:25 data/ui/views/base.ui:26 #: src/Dialogs/NewAccount.vala:85 msgid "Back" msgstr "Zurück" #: data/ui/dialogs/new_account.ui:48 src/Dialogs/NewAccount.vala:84 msgid "Next" msgstr "Weiter" #: data/ui/dialogs/new_account.ui:129 msgid "What is your instance?" msgstr "Wie heißt deine Instanz?" #: data/ui/dialogs/new_account.ui:191 msgid "Don't have one yet?" msgstr "Hast du noch keinen?" #: data/ui/dialogs/new_account.ui:242 #, fuzzy msgid "Enter authorization code" msgstr "Gib den Autorisierungscode ein" #: data/ui/dialogs/new_account.ui:276 msgid "Try manual authorization" msgstr "" "Versuche die manuelle Autorisierung" #: data/ui/widgets/accounts_button.ui:64 src/Views/Conversations.vala:6 msgid "Conversations" msgstr "Konversationen" #: data/ui/widgets/accounts_button.ui:93 src/Views/Favorites.vala:6 msgid "Favorites" msgstr "Favoriten" #: data/ui/widgets/accounts_button.ui:122 src/Views/Bookmarks.vala:6 msgid "Bookmarks" msgstr "Lesezeichen" #: data/ui/widgets/accounts_button.ui:152 src/Views/Lists.vala:59 msgid "Lists" msgstr "Listen" #: data/ui/widgets/accounts_button.ui:204 msgid "POSTS" msgstr "" #: data/ui/widgets/accounts_button.ui:247 msgid "FOLLOWING" msgstr "" #: data/ui/widgets/accounts_button.ui:290 msgid "FOLLOWERS" msgstr "" #: data/ui/widgets/accounts_button.ui:344 msgid "Refresh" msgstr "Aktualisieren" #: data/ui/widgets/accounts_button.ui:357 msgid "Preferences" msgstr "Einstellungen" #: data/ui/widgets/accounts_button.ui:371 msgid "About" msgstr "Über" #: data/ui/widgets/accounts_button.ui:397 src/Views/Search.vala:43 msgid "Accounts" msgstr "Konten" #: data/ui/widgets/accounts_button_item.ui:60 msgid "Forget" msgstr "Vergessen" #: data/ui/widgets/accounts_button_item.ui:88 msgid "Title" msgstr "Titel" #: data/ui/widgets/compose_attachment.ui:29 msgid "Describe for the visually impaired" msgstr "Beschreibung für Menschen mit beeinträchtigter Sehfähigkeit" #: data/ui/widgets/compose_attachment.ui:90 msgid "Unknown" msgstr "Unbekannt" #: data/ui/widgets/compose_attachment.ui:113 data/ui/widgets/list_item.ui:74 #: src/Widgets/Status.vala:243 msgid "Delete" msgstr "Löschen" #: data/ui/widgets/list_item.ui:26 src/Dialogs/ListEditor.vala:87 msgid "Untitled" msgstr "Ohne Titel" #: data/ui/widgets/list_item.ui:42 msgid "Edit" msgstr "Bearbeiten" #. Please do not remove the credits below. You may add your own, but keep the existing ones intact. #. TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. #: src/Build.vala:15 msgid " " msgstr "koyu - @koyu@koyu.space" #: src/Desktop.vala:18 #, c-format msgid "" "Open this URL in your browser:\n" "\n" "%s" msgstr "" "Öffne diese URL in deinem Browser:\n" "\n" "%s" #: src/Html.vala:3 msgid "[ There was an error parsing this text :c ]" msgstr "[ Es gab einen Fehler als versucht wurde den Text zu parsen :c ]" #: src/DateTime.vala:11 msgid "Just now" msgstr "Gerade jetzt" #: src/DateTime.vala:21 msgid "Yesterday" msgstr "Gestern" #: src/DateTime.vala:24 msgid "%b %e" msgstr "%b %e" #: src/DateTime.vala:27 msgid "%b %e, %Y" msgstr "%b %e, %Y" #: src/Dialogs/About.vala:14 msgid "Report an issue" msgstr "Einen Fehler melden" #: src/Dialogs/Compose.vala:81 src/Views/Lists.vala:33 msgid "This action cannot be reverted." msgstr "Diese Aktion kann nicht rückgängig gemacht werden." #: src/Dialogs/Compose.vala:125 src/Views/Main.vala:25 msgid "Compose" msgstr "Verfassen" #: src/Dialogs/Compose.vala:135 src/Widgets/Status.vala:253 msgid "Redraft" msgstr "Neu erstellen" #: src/Dialogs/Compose.vala:154 msgid "Reply" msgstr "Antworten" #: src/Dialogs/Compose.vala:197 msgid "Select media" msgstr "Medien auswählen" #: src/Dialogs/Compose.vala:200 msgid "_Open" msgstr "_Öffnen" #: src/Dialogs/Compose.vala:201 msgid "_Cancel" msgstr "_Abbrechen" #: src/Dialogs/ListEditor.vala:201 msgid "Discard changes?" msgstr "Änderungen verwerfen?" #: src/Dialogs/ListEditor.vala:202 msgid "You need to save the list if you want to keep them." msgstr "Du musst die Liste speichern, wenn du sie behalten möchtest." #: src/Dialogs/NewAccount.vala:84 msgid "Close" msgstr "Schließen" #: src/Dialogs/NewAccount.vala:85 msgid "Add Another" msgstr "Neu hinzufügen" #: src/Dialogs/NewAccount.vala:127 msgid "Please enter a valid instance URL" msgstr "Bitte gib eine valide Instanz-URL an" #: src/Dialogs/NewAccount.vala:160 msgid "Please enter a valid authorization code" msgstr "Bitte gib einen validen Autorisierungscode an" #: src/Dialogs/NewAccount.vala:176 msgid "Instance failed to authorize the access token" msgstr "Die Instanz konnte das Autorisierungstoken nicht finden" #: src/Dialogs/NewAccount.vala:190 #, c-format msgid "Hello, %s!" msgstr "Hallo, %s!" #: src/Dialogs/NewAccount.vala:218 msgid "Server returned an error" msgstr "Der Server gab einen Fehler zurück" #: src/Services/Accounts.vala:32 msgid "Network Error" msgstr "Netzwerkfehler" #: src/Services/Accounts.vala:33 #, c-format msgid "" "The instance has invalidated this session. Please sign in again.\n" "\n" "%s" msgstr "" "Die Instanz hat die Sitzung beendet. Bitte melde dich erneut an.\n" "\n" "%s" #: src/Views/Base.vala:6 msgid "Nothing to see here" msgstr "Es gibt hier nichts zu sehen" #: src/Views/Base.vala:58 msgid "Reload" msgstr "Aktualisieren" #: src/Views/Main.vala:31 src/Views/Search.vala:15 msgid "Search" msgstr "Suchen" #: src/Views/Thread.vala:13 #, fuzzy msgid "Conversation" msgstr "Konversationen" #: src/Views/Federated.vala:7 msgid "Federated" msgstr "Föderiert" #: src/Views/Home.vala:6 msgid "Home" msgstr "Startseite" #: src/Views/Lists.vala:32 #, c-format msgid "Delete \"%s\"?" msgstr "Lösche \"%s\"?" #: src/Views/Local.vala:4 msgid "Local" msgstr "Lokal" #: src/Views/Notifications.vala:11 msgid "Notifications" msgstr "Benachrichtigungen" #: src/Views/Profile.vala:150 #, c-format msgid "Block \"%s\"?" msgstr "\"%s\" blockieren?" #: src/Views/Profile.vala:150 #, c-format msgid "Unblock \"%s\"?" msgstr "\"%s\" nicht mehr blockieren?" #: src/Views/Profile.vala:161 #, c-format msgid "Block Entire \"%s\"?" msgstr "Blockiere alles von \"%s\"?" #: src/Views/Profile.vala:161 #, c-format msgid "Unblock Entire \"%s\"?" msgstr "Nicht mehr alles von \"%s\" blockieren?" #: src/Views/Profile.vala:164 msgid "" "Blocking a domain will:\n" "\n" "• Remove its public posts and notifications from your timelines\n" "• Remove its followers from your account\n" "• Prevent you from following its users" msgstr "" "Eine Domain zu blockieren wird:\n" "\n" "• Öffentliche Beiträge und Benachrichtigungen der Domain von deinen " "Zeitleisten entfernen\n" "• Alle Follower von der Domain von deinem Account entfernen\n" "• Dich davon abhalten Leuten von der Domain zu folgen" #: src/Views/Profile.vala:204 msgid "Sent follow request" msgstr "Sende Folgeanfrage" #: src/Views/Profile.vala:206 msgid "Mutually follows you" msgstr "Ihr folgt euch gegenseitig" #: src/Views/Profile.vala:208 msgid "Follows you" msgstr "Folgt dir" #: src/Views/Profile.vala:229 #, fuzzy msgid "Unblock" msgstr "\"%s\" nicht mehr blockieren?" #: src/Views/Profile.vala:239 msgid "Unfollow" msgstr "Nicht mehr folgen" #: src/Views/Profile.vala:248 msgid "Follow" msgstr "Folgen" #: src/Views/Search.vala:44 msgid "Statuses" msgstr "" #: src/Views/Search.vala:45 msgid "Hashtags" msgstr "Hashtags" #: src/Views/Search.vala:61 msgid "Enter query" msgstr "" #: src/Widgets/Attachment/Slot.vala:46 msgid "File saved to Downloads" msgstr "Datei in Downloads gespeichert" #: src/Widgets/AccountsButton.vala:40 #, c-format msgid "Forget %s?" msgstr "%s vergessen?" #: src/Widgets/AccountsButton.vala:41 msgid "This account will be removed from the application." msgstr "Dieses Konto wird von der Applikation entfernt." #: src/Widgets/AccountsButton.vala:148 msgid "Anonymous" msgstr "Anonym" #: src/Widgets/AccountsButton.vala:149 msgid "No active account" msgstr "Kein aktives Konto" #: src/Widgets/Status.vala:72 msgid "Click to show sensitive content" msgstr "" #: src/Widgets/Status.vala:163 msgid "This post can't be boosted" msgstr "Dieser Beitrag kann nicht geteilt werden" #: src/Widgets/Status.vala:213 msgid "Open in Browser" msgstr "Im Browser öffnen" #: src/Widgets/Status.vala:215 msgid "Copy Link" msgstr "Link kopieren" #: src/Widgets/Status.vala:217 msgid "Copy Text" msgstr "Text kopieren" #: src/Widgets/Status.vala:237 msgid "Unpin from Profile" msgstr "Nicht mehr im Profil anpinnen" #: src/Widgets/Status.vala:237 msgid "Pin on Profile" msgstr "Im Profil anpinnen" #~ msgid "Add and remove posts in real-time" #~ msgstr "Hinzufügen und Entfernen von Posts in Echtzeit" #~ msgid "Handle" #~ msgstr "Handle" #~ msgid "People" #~ msgstr "Leute" #~ msgid "Posts" #~ msgstr "Beiträge" #~ msgid "[ Toggle content ]" #~ msgstr "[ Inhalt anzeigen/verbergen ]" tootle-1.0-alpha2/po/es_MX.po000066400000000000000000000266651374710545700160520ustar00rootroot00000000000000# Spanish translations for com.github.bleakgrey.tootle package. # Copyright (C) 2020 THE com.github.bleakgrey.tootle'S COPYRIGHT HOLDER # This file is distributed under the same license as the com.github.bleakgrey.tootle package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: com.github.bleakgrey.tootle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 16:21+0300\n" "PO-Revision-Date: 2020-09-10 20:20+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: data/com.github.bleakgrey.tootle.desktop.in:4 #: data/com.github.bleakgrey.tootle.appdata.xml.in:7 msgid "Tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:5 #: data/com.github.bleakgrey.tootle.desktop.in:6 msgid "Mastodon Client" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:8 msgid "com.github.bleakgrey.tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:11 msgid "toot;mastodon;social;network;post;" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:8 msgid "Lightning fast client for Mastodon" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:11 msgid "" "Tootle is a GTK client for the world's largest, decentralized, microblogging " "platform, Mastodon. With the user experience in mind, it provides a clean, " "native interface that allows you to integrate Mastodon's social experience " "seamlessly with your desktop environment." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:14 msgid "" "Mastodon is a free and open source microblogging platform similar to " "Twitter, but with user privacy and decentralization in mind. It is one of " "many protocols that interacts with the Fediverse of protocols like Pleroma, " "GNU Social, and others. The power of federated microblogging that Mastodon " "brings and the agility of Tootle creates a fantastic duo for all of your " "social media needs." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:23 msgid "bleak_grey" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:71 msgid "New app icon (Kudos to Tobias Bernard!)" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:72 msgid "New interface design" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:73 msgid "Fixed bugs" msgstr "" #: data/ui/dialogs/compose.ui:42 msgid "Publish" msgstr "" #: data/ui/dialogs/compose.ui:71 data/ui/dialogs/list_editor.ui:59 msgid "Cancel" msgstr "" #: data/ui/dialogs/compose.ui:119 msgid "Write your warning here" msgstr "" #: data/ui/dialogs/compose.ui:185 msgid "Visibility" msgstr "" #: data/ui/dialogs/compose.ui:238 msgid "Attach Media" msgstr "" #: data/ui/dialogs/compose.ui:260 msgid "Instance Emojis" msgstr "" #: data/ui/dialogs/compose.ui:284 msgid "Spoiler Warning" msgstr "" #: data/ui/dialogs/compose.ui:329 msgid "Text" msgstr "" #: data/ui/dialogs/compose.ui:389 msgid "Media" msgstr "" #: data/ui/dialogs/list_editor.ui:33 msgid "Name" msgstr "" #: data/ui/dialogs/list_editor.ui:83 msgid "Save" msgstr "" #: data/ui/dialogs/list_editor.ui:200 msgid "Search among people you follow" msgstr "" #: data/ui/dialogs/list_editor.ui:256 msgid "Nobody here" msgstr "" #: data/ui/dialogs/preferences.ui:29 msgid "General" msgstr "" #: data/ui/dialogs/preferences.ui:34 msgid "Appearance" msgstr "" #: data/ui/dialogs/preferences.ui:39 msgid "Dark theme" msgstr "" #: data/ui/dialogs/preferences.ui:54 msgid "Text scale (%)" msgstr "" #: data/ui/dialogs/preferences.ui:61 msgid "100" msgstr "" #: data/ui/dialogs/preferences.ui:75 msgid "Behavior" msgstr "" #: data/ui/dialogs/preferences.ui:79 msgid "Autostart" msgstr "" #: data/ui/dialogs/preferences.ui:81 msgid "Start minimized at boot" msgstr "" #: data/ui/dialogs/preferences.ui:94 msgid "Background work" msgstr "" #: data/ui/dialogs/preferences.ui:96 msgid "Receive notifications even when the app is closed" msgstr "" #: data/ui/dialogs/preferences.ui:110 msgid "Default post visibility" msgstr "" #: data/ui/dialogs/preferences.ui:119 msgid "Timelines" msgstr "" #: data/ui/dialogs/preferences.ui:124 msgid "Posts per page" msgstr "" #: data/ui/dialogs/preferences.ui:131 msgid "10" msgstr "" #: data/ui/dialogs/preferences.ui:141 msgid "Infinite scrolling" msgstr "" #: data/ui/dialogs/preferences.ui:143 data/ui/dialogs/preferences.ui:176 msgid "Warning: This will increase memory usage" msgstr "" #: data/ui/dialogs/preferences.ui:157 msgid "Stream timelines" msgstr "" #: data/ui/dialogs/preferences.ui:159 msgid "Receive new posts and notifications in real-time" msgstr "" #: data/ui/dialogs/preferences.ui:174 msgid "Stream public timelines" msgstr "" #: data/ui/dialogs/new_account.ui:21 msgid "Add Account" msgstr "" #: data/ui/dialogs/new_account.ui:25 data/ui/views/base.ui:26 #: src/Dialogs/NewAccount.vala:85 msgid "Back" msgstr "" #: data/ui/dialogs/new_account.ui:48 src/Dialogs/NewAccount.vala:84 msgid "Next" msgstr "" #: data/ui/dialogs/new_account.ui:129 msgid "What is your instance?" msgstr "" #: data/ui/dialogs/new_account.ui:191 msgid "Don't have one yet?" msgstr "" #: data/ui/dialogs/new_account.ui:242 msgid "Enter authorization code" msgstr "" #: data/ui/dialogs/new_account.ui:276 msgid "Try manual authorization" msgstr "" #: data/ui/widgets/accounts_button.ui:64 src/Views/Conversations.vala:6 msgid "Conversations" msgstr "" #: data/ui/widgets/accounts_button.ui:93 src/Views/Favorites.vala:6 msgid "Favorites" msgstr "" #: data/ui/widgets/accounts_button.ui:122 src/Views/Bookmarks.vala:6 msgid "Bookmarks" msgstr "" #: data/ui/widgets/accounts_button.ui:152 src/Views/Lists.vala:59 msgid "Lists" msgstr "" #: data/ui/widgets/accounts_button.ui:204 msgid "POSTS" msgstr "" #: data/ui/widgets/accounts_button.ui:247 msgid "FOLLOWING" msgstr "" #: data/ui/widgets/accounts_button.ui:290 msgid "FOLLOWERS" msgstr "" #: data/ui/widgets/accounts_button.ui:344 msgid "Refresh" msgstr "" #: data/ui/widgets/accounts_button.ui:357 msgid "Preferences" msgstr "" #: data/ui/widgets/accounts_button.ui:371 msgid "About" msgstr "" #: data/ui/widgets/accounts_button.ui:397 src/Views/Search.vala:43 msgid "Accounts" msgstr "" #: data/ui/widgets/accounts_button_item.ui:60 msgid "Forget" msgstr "" #: data/ui/widgets/accounts_button_item.ui:88 msgid "Title" msgstr "" #: data/ui/widgets/compose_attachment.ui:29 msgid "Describe for the visually impaired" msgstr "" #: data/ui/widgets/compose_attachment.ui:90 msgid "Unknown" msgstr "" #: data/ui/widgets/compose_attachment.ui:113 data/ui/widgets/list_item.ui:74 #: src/Widgets/Status.vala:243 msgid "Delete" msgstr "" #: data/ui/widgets/list_item.ui:26 src/Dialogs/ListEditor.vala:87 msgid "Untitled" msgstr "" #: data/ui/widgets/list_item.ui:42 msgid "Edit" msgstr "" #. Please do not remove the credits below. You may add your own, but keep the existing ones intact. #. TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. #: src/Build.vala:15 msgid " " msgstr "" #: src/Desktop.vala:18 #, c-format msgid "" "Open this URL in your browser:\n" "\n" "%s" msgstr "" #: src/Html.vala:3 msgid "[ There was an error parsing this text :c ]" msgstr "" #: src/DateTime.vala:11 msgid "Just now" msgstr "" #: src/DateTime.vala:21 msgid "Yesterday" msgstr "" #: src/DateTime.vala:24 msgid "%b %e" msgstr "" #: src/DateTime.vala:27 msgid "%b %e, %Y" msgstr "" #: src/Dialogs/About.vala:14 msgid "Report an issue" msgstr "" #: src/Dialogs/Compose.vala:81 src/Views/Lists.vala:33 msgid "This action cannot be reverted." msgstr "" #: src/Dialogs/Compose.vala:125 src/Views/Main.vala:25 msgid "Compose" msgstr "" #: src/Dialogs/Compose.vala:135 src/Widgets/Status.vala:253 msgid "Redraft" msgstr "" #: src/Dialogs/Compose.vala:154 msgid "Reply" msgstr "" #: src/Dialogs/Compose.vala:197 msgid "Select media" msgstr "" #: src/Dialogs/Compose.vala:200 msgid "_Open" msgstr "" #: src/Dialogs/Compose.vala:201 msgid "_Cancel" msgstr "" #: src/Dialogs/ListEditor.vala:201 msgid "Discard changes?" msgstr "" #: src/Dialogs/ListEditor.vala:202 msgid "You need to save the list if you want to keep them." msgstr "" #: src/Dialogs/NewAccount.vala:84 msgid "Close" msgstr "" #: src/Dialogs/NewAccount.vala:85 msgid "Add Another" msgstr "" #: src/Dialogs/NewAccount.vala:127 msgid "Please enter a valid instance URL" msgstr "" #: src/Dialogs/NewAccount.vala:160 msgid "Please enter a valid authorization code" msgstr "" #: src/Dialogs/NewAccount.vala:176 msgid "Instance failed to authorize the access token" msgstr "" #: src/Dialogs/NewAccount.vala:190 #, c-format msgid "Hello, %s!" msgstr "" #: src/Dialogs/NewAccount.vala:218 msgid "Server returned an error" msgstr "" #: src/Services/Accounts.vala:32 msgid "Network Error" msgstr "" #: src/Services/Accounts.vala:33 #, c-format msgid "" "The instance has invalidated this session. Please sign in again.\n" "\n" "%s" msgstr "" #: src/Views/Base.vala:6 msgid "Nothing to see here" msgstr "" #: src/Views/Base.vala:58 msgid "Reload" msgstr "" #: src/Views/Main.vala:31 src/Views/Search.vala:15 msgid "Search" msgstr "" #: src/Views/Thread.vala:13 msgid "Conversation" msgstr "" #: src/Views/Federated.vala:7 msgid "Federated" msgstr "" #: src/Views/Home.vala:6 msgid "Home" msgstr "" #: src/Views/Lists.vala:32 #, c-format msgid "Delete \"%s\"?" msgstr "" #: src/Views/Local.vala:4 msgid "Local" msgstr "" #: src/Views/Notifications.vala:11 msgid "Notifications" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Block \"%s\"?" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Unblock \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Block Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Unblock Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:164 msgid "" "Blocking a domain will:\n" "\n" "• Remove its public posts and notifications from your timelines\n" "• Remove its followers from your account\n" "• Prevent you from following its users" msgstr "" #: src/Views/Profile.vala:204 msgid "Sent follow request" msgstr "" #: src/Views/Profile.vala:206 msgid "Mutually follows you" msgstr "" #: src/Views/Profile.vala:208 msgid "Follows you" msgstr "" #: src/Views/Profile.vala:229 msgid "Unblock" msgstr "" #: src/Views/Profile.vala:239 msgid "Unfollow" msgstr "" #: src/Views/Profile.vala:248 msgid "Follow" msgstr "" #: src/Views/Search.vala:44 msgid "Statuses" msgstr "" #: src/Views/Search.vala:45 msgid "Hashtags" msgstr "" #: src/Views/Search.vala:61 msgid "Enter query" msgstr "" #: src/Widgets/Attachment/Slot.vala:46 msgid "File saved to Downloads" msgstr "" #: src/Widgets/AccountsButton.vala:40 #, c-format msgid "Forget %s?" msgstr "" #: src/Widgets/AccountsButton.vala:41 msgid "This account will be removed from the application." msgstr "" #: src/Widgets/AccountsButton.vala:148 msgid "Anonymous" msgstr "" #: src/Widgets/AccountsButton.vala:149 msgid "No active account" msgstr "" #: src/Widgets/Status.vala:72 msgid "Click to show sensitive content" msgstr "" #: src/Widgets/Status.vala:163 msgid "This post can't be boosted" msgstr "" #: src/Widgets/Status.vala:213 msgid "Open in Browser" msgstr "" #: src/Widgets/Status.vala:215 msgid "Copy Link" msgstr "" #: src/Widgets/Status.vala:217 msgid "Copy Text" msgstr "" #: src/Widgets/Status.vala:237 msgid "Unpin from Profile" msgstr "" #: src/Widgets/Status.vala:237 msgid "Pin on Profile" msgstr "" tootle-1.0-alpha2/po/fr_FR.po000066400000000000000000000266601374710545700160300ustar00rootroot00000000000000# French translations for com.github.bleakgrey.tootle package. # Copyright (C) 2020 THE com.github.bleakgrey.tootle'S COPYRIGHT HOLDER # This file is distributed under the same license as the com.github.bleakgrey.tootle package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: com.github.bleakgrey.tootle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 16:21+0300\n" "PO-Revision-Date: 2020-09-10 20:20+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: data/com.github.bleakgrey.tootle.desktop.in:4 #: data/com.github.bleakgrey.tootle.appdata.xml.in:7 msgid "Tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:5 #: data/com.github.bleakgrey.tootle.desktop.in:6 msgid "Mastodon Client" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:8 msgid "com.github.bleakgrey.tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:11 msgid "toot;mastodon;social;network;post;" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:8 msgid "Lightning fast client for Mastodon" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:11 msgid "" "Tootle is a GTK client for the world's largest, decentralized, microblogging " "platform, Mastodon. With the user experience in mind, it provides a clean, " "native interface that allows you to integrate Mastodon's social experience " "seamlessly with your desktop environment." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:14 msgid "" "Mastodon is a free and open source microblogging platform similar to " "Twitter, but with user privacy and decentralization in mind. It is one of " "many protocols that interacts with the Fediverse of protocols like Pleroma, " "GNU Social, and others. The power of federated microblogging that Mastodon " "brings and the agility of Tootle creates a fantastic duo for all of your " "social media needs." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:23 msgid "bleak_grey" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:71 msgid "New app icon (Kudos to Tobias Bernard!)" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:72 msgid "New interface design" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:73 msgid "Fixed bugs" msgstr "" #: data/ui/dialogs/compose.ui:42 msgid "Publish" msgstr "" #: data/ui/dialogs/compose.ui:71 data/ui/dialogs/list_editor.ui:59 msgid "Cancel" msgstr "" #: data/ui/dialogs/compose.ui:119 msgid "Write your warning here" msgstr "" #: data/ui/dialogs/compose.ui:185 msgid "Visibility" msgstr "" #: data/ui/dialogs/compose.ui:238 msgid "Attach Media" msgstr "" #: data/ui/dialogs/compose.ui:260 msgid "Instance Emojis" msgstr "" #: data/ui/dialogs/compose.ui:284 msgid "Spoiler Warning" msgstr "" #: data/ui/dialogs/compose.ui:329 msgid "Text" msgstr "" #: data/ui/dialogs/compose.ui:389 msgid "Media" msgstr "" #: data/ui/dialogs/list_editor.ui:33 msgid "Name" msgstr "" #: data/ui/dialogs/list_editor.ui:83 msgid "Save" msgstr "" #: data/ui/dialogs/list_editor.ui:200 msgid "Search among people you follow" msgstr "" #: data/ui/dialogs/list_editor.ui:256 msgid "Nobody here" msgstr "" #: data/ui/dialogs/preferences.ui:29 msgid "General" msgstr "" #: data/ui/dialogs/preferences.ui:34 msgid "Appearance" msgstr "" #: data/ui/dialogs/preferences.ui:39 msgid "Dark theme" msgstr "" #: data/ui/dialogs/preferences.ui:54 msgid "Text scale (%)" msgstr "" #: data/ui/dialogs/preferences.ui:61 msgid "100" msgstr "" #: data/ui/dialogs/preferences.ui:75 msgid "Behavior" msgstr "" #: data/ui/dialogs/preferences.ui:79 msgid "Autostart" msgstr "" #: data/ui/dialogs/preferences.ui:81 msgid "Start minimized at boot" msgstr "" #: data/ui/dialogs/preferences.ui:94 msgid "Background work" msgstr "" #: data/ui/dialogs/preferences.ui:96 msgid "Receive notifications even when the app is closed" msgstr "" #: data/ui/dialogs/preferences.ui:110 msgid "Default post visibility" msgstr "" #: data/ui/dialogs/preferences.ui:119 msgid "Timelines" msgstr "" #: data/ui/dialogs/preferences.ui:124 msgid "Posts per page" msgstr "" #: data/ui/dialogs/preferences.ui:131 msgid "10" msgstr "" #: data/ui/dialogs/preferences.ui:141 msgid "Infinite scrolling" msgstr "" #: data/ui/dialogs/preferences.ui:143 data/ui/dialogs/preferences.ui:176 msgid "Warning: This will increase memory usage" msgstr "" #: data/ui/dialogs/preferences.ui:157 msgid "Stream timelines" msgstr "" #: data/ui/dialogs/preferences.ui:159 msgid "Receive new posts and notifications in real-time" msgstr "" #: data/ui/dialogs/preferences.ui:174 msgid "Stream public timelines" msgstr "" #: data/ui/dialogs/new_account.ui:21 msgid "Add Account" msgstr "" #: data/ui/dialogs/new_account.ui:25 data/ui/views/base.ui:26 #: src/Dialogs/NewAccount.vala:85 msgid "Back" msgstr "" #: data/ui/dialogs/new_account.ui:48 src/Dialogs/NewAccount.vala:84 msgid "Next" msgstr "" #: data/ui/dialogs/new_account.ui:129 msgid "What is your instance?" msgstr "" #: data/ui/dialogs/new_account.ui:191 msgid "Don't have one yet?" msgstr "" #: data/ui/dialogs/new_account.ui:242 msgid "Enter authorization code" msgstr "" #: data/ui/dialogs/new_account.ui:276 msgid "Try manual authorization" msgstr "" #: data/ui/widgets/accounts_button.ui:64 src/Views/Conversations.vala:6 msgid "Conversations" msgstr "" #: data/ui/widgets/accounts_button.ui:93 src/Views/Favorites.vala:6 msgid "Favorites" msgstr "" #: data/ui/widgets/accounts_button.ui:122 src/Views/Bookmarks.vala:6 msgid "Bookmarks" msgstr "" #: data/ui/widgets/accounts_button.ui:152 src/Views/Lists.vala:59 msgid "Lists" msgstr "" #: data/ui/widgets/accounts_button.ui:204 msgid "POSTS" msgstr "" #: data/ui/widgets/accounts_button.ui:247 msgid "FOLLOWING" msgstr "" #: data/ui/widgets/accounts_button.ui:290 msgid "FOLLOWERS" msgstr "" #: data/ui/widgets/accounts_button.ui:344 msgid "Refresh" msgstr "" #: data/ui/widgets/accounts_button.ui:357 msgid "Preferences" msgstr "" #: data/ui/widgets/accounts_button.ui:371 msgid "About" msgstr "" #: data/ui/widgets/accounts_button.ui:397 src/Views/Search.vala:43 msgid "Accounts" msgstr "" #: data/ui/widgets/accounts_button_item.ui:60 msgid "Forget" msgstr "" #: data/ui/widgets/accounts_button_item.ui:88 msgid "Title" msgstr "" #: data/ui/widgets/compose_attachment.ui:29 msgid "Describe for the visually impaired" msgstr "" #: data/ui/widgets/compose_attachment.ui:90 msgid "Unknown" msgstr "" #: data/ui/widgets/compose_attachment.ui:113 data/ui/widgets/list_item.ui:74 #: src/Widgets/Status.vala:243 msgid "Delete" msgstr "" #: data/ui/widgets/list_item.ui:26 src/Dialogs/ListEditor.vala:87 msgid "Untitled" msgstr "" #: data/ui/widgets/list_item.ui:42 msgid "Edit" msgstr "" #. Please do not remove the credits below. You may add your own, but keep the existing ones intact. #. TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. #: src/Build.vala:15 msgid " " msgstr "" #: src/Desktop.vala:18 #, c-format msgid "" "Open this URL in your browser:\n" "\n" "%s" msgstr "" #: src/Html.vala:3 msgid "[ There was an error parsing this text :c ]" msgstr "" #: src/DateTime.vala:11 msgid "Just now" msgstr "" #: src/DateTime.vala:21 msgid "Yesterday" msgstr "" #: src/DateTime.vala:24 msgid "%b %e" msgstr "" #: src/DateTime.vala:27 msgid "%b %e, %Y" msgstr "" #: src/Dialogs/About.vala:14 msgid "Report an issue" msgstr "" #: src/Dialogs/Compose.vala:81 src/Views/Lists.vala:33 msgid "This action cannot be reverted." msgstr "" #: src/Dialogs/Compose.vala:125 src/Views/Main.vala:25 msgid "Compose" msgstr "" #: src/Dialogs/Compose.vala:135 src/Widgets/Status.vala:253 msgid "Redraft" msgstr "" #: src/Dialogs/Compose.vala:154 msgid "Reply" msgstr "" #: src/Dialogs/Compose.vala:197 msgid "Select media" msgstr "" #: src/Dialogs/Compose.vala:200 msgid "_Open" msgstr "" #: src/Dialogs/Compose.vala:201 msgid "_Cancel" msgstr "" #: src/Dialogs/ListEditor.vala:201 msgid "Discard changes?" msgstr "" #: src/Dialogs/ListEditor.vala:202 msgid "You need to save the list if you want to keep them." msgstr "" #: src/Dialogs/NewAccount.vala:84 msgid "Close" msgstr "" #: src/Dialogs/NewAccount.vala:85 msgid "Add Another" msgstr "" #: src/Dialogs/NewAccount.vala:127 msgid "Please enter a valid instance URL" msgstr "" #: src/Dialogs/NewAccount.vala:160 msgid "Please enter a valid authorization code" msgstr "" #: src/Dialogs/NewAccount.vala:176 msgid "Instance failed to authorize the access token" msgstr "" #: src/Dialogs/NewAccount.vala:190 #, c-format msgid "Hello, %s!" msgstr "" #: src/Dialogs/NewAccount.vala:218 msgid "Server returned an error" msgstr "" #: src/Services/Accounts.vala:32 msgid "Network Error" msgstr "" #: src/Services/Accounts.vala:33 #, c-format msgid "" "The instance has invalidated this session. Please sign in again.\n" "\n" "%s" msgstr "" #: src/Views/Base.vala:6 msgid "Nothing to see here" msgstr "" #: src/Views/Base.vala:58 msgid "Reload" msgstr "" #: src/Views/Main.vala:31 src/Views/Search.vala:15 msgid "Search" msgstr "" #: src/Views/Thread.vala:13 msgid "Conversation" msgstr "" #: src/Views/Federated.vala:7 msgid "Federated" msgstr "" #: src/Views/Home.vala:6 msgid "Home" msgstr "" #: src/Views/Lists.vala:32 #, c-format msgid "Delete \"%s\"?" msgstr "" #: src/Views/Local.vala:4 msgid "Local" msgstr "" #: src/Views/Notifications.vala:11 msgid "Notifications" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Block \"%s\"?" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Unblock \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Block Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Unblock Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:164 msgid "" "Blocking a domain will:\n" "\n" "• Remove its public posts and notifications from your timelines\n" "• Remove its followers from your account\n" "• Prevent you from following its users" msgstr "" #: src/Views/Profile.vala:204 msgid "Sent follow request" msgstr "" #: src/Views/Profile.vala:206 msgid "Mutually follows you" msgstr "" #: src/Views/Profile.vala:208 msgid "Follows you" msgstr "" #: src/Views/Profile.vala:229 msgid "Unblock" msgstr "" #: src/Views/Profile.vala:239 msgid "Unfollow" msgstr "" #: src/Views/Profile.vala:248 msgid "Follow" msgstr "" #: src/Views/Search.vala:44 msgid "Statuses" msgstr "" #: src/Views/Search.vala:45 msgid "Hashtags" msgstr "" #: src/Views/Search.vala:61 msgid "Enter query" msgstr "" #: src/Widgets/Attachment/Slot.vala:46 msgid "File saved to Downloads" msgstr "" #: src/Widgets/AccountsButton.vala:40 #, c-format msgid "Forget %s?" msgstr "" #: src/Widgets/AccountsButton.vala:41 msgid "This account will be removed from the application." msgstr "" #: src/Widgets/AccountsButton.vala:148 msgid "Anonymous" msgstr "" #: src/Widgets/AccountsButton.vala:149 msgid "No active account" msgstr "" #: src/Widgets/Status.vala:72 msgid "Click to show sensitive content" msgstr "" #: src/Widgets/Status.vala:163 msgid "This post can't be boosted" msgstr "" #: src/Widgets/Status.vala:213 msgid "Open in Browser" msgstr "" #: src/Widgets/Status.vala:215 msgid "Copy Link" msgstr "" #: src/Widgets/Status.vala:217 msgid "Copy Text" msgstr "" #: src/Widgets/Status.vala:237 msgid "Unpin from Profile" msgstr "" #: src/Widgets/Status.vala:237 msgid "Pin on Profile" msgstr "" tootle-1.0-alpha2/po/meson.build000066400000000000000000000002641374710545700166240ustar00rootroot00000000000000#i18n.gettext(meson.project_name(), # args: ['--directory='+meson.source_root(), '--from-code=UTF-8'], # install: false, #) i18n.gettext(meson.project_name(), preset: 'glib')tootle-1.0-alpha2/po/pl_PL.po000066400000000000000000000267561374710545700160460ustar00rootroot00000000000000# Polish translations for com.github.bleakgrey.tootle package. # Copyright (C) 2020 THE com.github.bleakgrey.tootle'S COPYRIGHT HOLDER # This file is distributed under the same license as the com.github.bleakgrey.tootle package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: com.github.bleakgrey.tootle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 16:21+0300\n" "PO-Revision-Date: 2020-09-10 20:20+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: data/com.github.bleakgrey.tootle.desktop.in:4 #: data/com.github.bleakgrey.tootle.appdata.xml.in:7 msgid "Tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:5 #: data/com.github.bleakgrey.tootle.desktop.in:6 msgid "Mastodon Client" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:8 msgid "com.github.bleakgrey.tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:11 msgid "toot;mastodon;social;network;post;" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:8 msgid "Lightning fast client for Mastodon" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:11 msgid "" "Tootle is a GTK client for the world's largest, decentralized, microblogging " "platform, Mastodon. With the user experience in mind, it provides a clean, " "native interface that allows you to integrate Mastodon's social experience " "seamlessly with your desktop environment." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:14 msgid "" "Mastodon is a free and open source microblogging platform similar to " "Twitter, but with user privacy and decentralization in mind. It is one of " "many protocols that interacts with the Fediverse of protocols like Pleroma, " "GNU Social, and others. The power of federated microblogging that Mastodon " "brings and the agility of Tootle creates a fantastic duo for all of your " "social media needs." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:23 msgid "bleak_grey" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:71 msgid "New app icon (Kudos to Tobias Bernard!)" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:72 msgid "New interface design" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:73 msgid "Fixed bugs" msgstr "" #: data/ui/dialogs/compose.ui:42 msgid "Publish" msgstr "" #: data/ui/dialogs/compose.ui:71 data/ui/dialogs/list_editor.ui:59 msgid "Cancel" msgstr "" #: data/ui/dialogs/compose.ui:119 msgid "Write your warning here" msgstr "" #: data/ui/dialogs/compose.ui:185 msgid "Visibility" msgstr "" #: data/ui/dialogs/compose.ui:238 msgid "Attach Media" msgstr "" #: data/ui/dialogs/compose.ui:260 msgid "Instance Emojis" msgstr "" #: data/ui/dialogs/compose.ui:284 msgid "Spoiler Warning" msgstr "" #: data/ui/dialogs/compose.ui:329 msgid "Text" msgstr "" #: data/ui/dialogs/compose.ui:389 msgid "Media" msgstr "" #: data/ui/dialogs/list_editor.ui:33 msgid "Name" msgstr "" #: data/ui/dialogs/list_editor.ui:83 msgid "Save" msgstr "" #: data/ui/dialogs/list_editor.ui:200 msgid "Search among people you follow" msgstr "" #: data/ui/dialogs/list_editor.ui:256 msgid "Nobody here" msgstr "" #: data/ui/dialogs/preferences.ui:29 msgid "General" msgstr "" #: data/ui/dialogs/preferences.ui:34 msgid "Appearance" msgstr "" #: data/ui/dialogs/preferences.ui:39 msgid "Dark theme" msgstr "" #: data/ui/dialogs/preferences.ui:54 msgid "Text scale (%)" msgstr "" #: data/ui/dialogs/preferences.ui:61 msgid "100" msgstr "" #: data/ui/dialogs/preferences.ui:75 msgid "Behavior" msgstr "" #: data/ui/dialogs/preferences.ui:79 msgid "Autostart" msgstr "" #: data/ui/dialogs/preferences.ui:81 msgid "Start minimized at boot" msgstr "" #: data/ui/dialogs/preferences.ui:94 msgid "Background work" msgstr "" #: data/ui/dialogs/preferences.ui:96 msgid "Receive notifications even when the app is closed" msgstr "" #: data/ui/dialogs/preferences.ui:110 msgid "Default post visibility" msgstr "" #: data/ui/dialogs/preferences.ui:119 msgid "Timelines" msgstr "" #: data/ui/dialogs/preferences.ui:124 msgid "Posts per page" msgstr "" #: data/ui/dialogs/preferences.ui:131 msgid "10" msgstr "" #: data/ui/dialogs/preferences.ui:141 msgid "Infinite scrolling" msgstr "" #: data/ui/dialogs/preferences.ui:143 data/ui/dialogs/preferences.ui:176 msgid "Warning: This will increase memory usage" msgstr "" #: data/ui/dialogs/preferences.ui:157 msgid "Stream timelines" msgstr "" #: data/ui/dialogs/preferences.ui:159 msgid "Receive new posts and notifications in real-time" msgstr "" #: data/ui/dialogs/preferences.ui:174 msgid "Stream public timelines" msgstr "" #: data/ui/dialogs/new_account.ui:21 msgid "Add Account" msgstr "" #: data/ui/dialogs/new_account.ui:25 data/ui/views/base.ui:26 #: src/Dialogs/NewAccount.vala:85 msgid "Back" msgstr "" #: data/ui/dialogs/new_account.ui:48 src/Dialogs/NewAccount.vala:84 msgid "Next" msgstr "" #: data/ui/dialogs/new_account.ui:129 msgid "What is your instance?" msgstr "" #: data/ui/dialogs/new_account.ui:191 msgid "Don't have one yet?" msgstr "" #: data/ui/dialogs/new_account.ui:242 msgid "Enter authorization code" msgstr "" #: data/ui/dialogs/new_account.ui:276 msgid "Try manual authorization" msgstr "" #: data/ui/widgets/accounts_button.ui:64 src/Views/Conversations.vala:6 msgid "Conversations" msgstr "" #: data/ui/widgets/accounts_button.ui:93 src/Views/Favorites.vala:6 msgid "Favorites" msgstr "" #: data/ui/widgets/accounts_button.ui:122 src/Views/Bookmarks.vala:6 msgid "Bookmarks" msgstr "" #: data/ui/widgets/accounts_button.ui:152 src/Views/Lists.vala:59 msgid "Lists" msgstr "" #: data/ui/widgets/accounts_button.ui:204 msgid "POSTS" msgstr "" #: data/ui/widgets/accounts_button.ui:247 msgid "FOLLOWING" msgstr "" #: data/ui/widgets/accounts_button.ui:290 msgid "FOLLOWERS" msgstr "" #: data/ui/widgets/accounts_button.ui:344 msgid "Refresh" msgstr "" #: data/ui/widgets/accounts_button.ui:357 msgid "Preferences" msgstr "" #: data/ui/widgets/accounts_button.ui:371 msgid "About" msgstr "" #: data/ui/widgets/accounts_button.ui:397 src/Views/Search.vala:43 msgid "Accounts" msgstr "" #: data/ui/widgets/accounts_button_item.ui:60 msgid "Forget" msgstr "" #: data/ui/widgets/accounts_button_item.ui:88 msgid "Title" msgstr "" #: data/ui/widgets/compose_attachment.ui:29 msgid "Describe for the visually impaired" msgstr "" #: data/ui/widgets/compose_attachment.ui:90 msgid "Unknown" msgstr "" #: data/ui/widgets/compose_attachment.ui:113 data/ui/widgets/list_item.ui:74 #: src/Widgets/Status.vala:243 msgid "Delete" msgstr "" #: data/ui/widgets/list_item.ui:26 src/Dialogs/ListEditor.vala:87 msgid "Untitled" msgstr "" #: data/ui/widgets/list_item.ui:42 msgid "Edit" msgstr "" #. Please do not remove the credits below. You may add your own, but keep the existing ones intact. #. TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. #: src/Build.vala:15 msgid " " msgstr "" #: src/Desktop.vala:18 #, c-format msgid "" "Open this URL in your browser:\n" "\n" "%s" msgstr "" #: src/Html.vala:3 msgid "[ There was an error parsing this text :c ]" msgstr "" #: src/DateTime.vala:11 msgid "Just now" msgstr "" #: src/DateTime.vala:21 msgid "Yesterday" msgstr "" #: src/DateTime.vala:24 msgid "%b %e" msgstr "" #: src/DateTime.vala:27 msgid "%b %e, %Y" msgstr "" #: src/Dialogs/About.vala:14 msgid "Report an issue" msgstr "" #: src/Dialogs/Compose.vala:81 src/Views/Lists.vala:33 msgid "This action cannot be reverted." msgstr "" #: src/Dialogs/Compose.vala:125 src/Views/Main.vala:25 msgid "Compose" msgstr "" #: src/Dialogs/Compose.vala:135 src/Widgets/Status.vala:253 msgid "Redraft" msgstr "" #: src/Dialogs/Compose.vala:154 msgid "Reply" msgstr "" #: src/Dialogs/Compose.vala:197 msgid "Select media" msgstr "" #: src/Dialogs/Compose.vala:200 msgid "_Open" msgstr "" #: src/Dialogs/Compose.vala:201 msgid "_Cancel" msgstr "" #: src/Dialogs/ListEditor.vala:201 msgid "Discard changes?" msgstr "" #: src/Dialogs/ListEditor.vala:202 msgid "You need to save the list if you want to keep them." msgstr "" #: src/Dialogs/NewAccount.vala:84 msgid "Close" msgstr "" #: src/Dialogs/NewAccount.vala:85 msgid "Add Another" msgstr "" #: src/Dialogs/NewAccount.vala:127 msgid "Please enter a valid instance URL" msgstr "" #: src/Dialogs/NewAccount.vala:160 msgid "Please enter a valid authorization code" msgstr "" #: src/Dialogs/NewAccount.vala:176 msgid "Instance failed to authorize the access token" msgstr "" #: src/Dialogs/NewAccount.vala:190 #, c-format msgid "Hello, %s!" msgstr "" #: src/Dialogs/NewAccount.vala:218 msgid "Server returned an error" msgstr "" #: src/Services/Accounts.vala:32 msgid "Network Error" msgstr "" #: src/Services/Accounts.vala:33 #, c-format msgid "" "The instance has invalidated this session. Please sign in again.\n" "\n" "%s" msgstr "" #: src/Views/Base.vala:6 msgid "Nothing to see here" msgstr "" #: src/Views/Base.vala:58 msgid "Reload" msgstr "" #: src/Views/Main.vala:31 src/Views/Search.vala:15 msgid "Search" msgstr "" #: src/Views/Thread.vala:13 msgid "Conversation" msgstr "" #: src/Views/Federated.vala:7 msgid "Federated" msgstr "" #: src/Views/Home.vala:6 msgid "Home" msgstr "" #: src/Views/Lists.vala:32 #, c-format msgid "Delete \"%s\"?" msgstr "" #: src/Views/Local.vala:4 msgid "Local" msgstr "" #: src/Views/Notifications.vala:11 msgid "Notifications" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Block \"%s\"?" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Unblock \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Block Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Unblock Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:164 msgid "" "Blocking a domain will:\n" "\n" "• Remove its public posts and notifications from your timelines\n" "• Remove its followers from your account\n" "• Prevent you from following its users" msgstr "" #: src/Views/Profile.vala:204 msgid "Sent follow request" msgstr "" #: src/Views/Profile.vala:206 msgid "Mutually follows you" msgstr "" #: src/Views/Profile.vala:208 msgid "Follows you" msgstr "" #: src/Views/Profile.vala:229 msgid "Unblock" msgstr "" #: src/Views/Profile.vala:239 msgid "Unfollow" msgstr "" #: src/Views/Profile.vala:248 msgid "Follow" msgstr "" #: src/Views/Search.vala:44 msgid "Statuses" msgstr "" #: src/Views/Search.vala:45 msgid "Hashtags" msgstr "" #: src/Views/Search.vala:61 msgid "Enter query" msgstr "" #: src/Widgets/Attachment/Slot.vala:46 msgid "File saved to Downloads" msgstr "" #: src/Widgets/AccountsButton.vala:40 #, c-format msgid "Forget %s?" msgstr "" #: src/Widgets/AccountsButton.vala:41 msgid "This account will be removed from the application." msgstr "" #: src/Widgets/AccountsButton.vala:148 msgid "Anonymous" msgstr "" #: src/Widgets/AccountsButton.vala:149 msgid "No active account" msgstr "" #: src/Widgets/Status.vala:72 msgid "Click to show sensitive content" msgstr "" #: src/Widgets/Status.vala:163 msgid "This post can't be boosted" msgstr "" #: src/Widgets/Status.vala:213 msgid "Open in Browser" msgstr "" #: src/Widgets/Status.vala:215 msgid "Copy Link" msgstr "" #: src/Widgets/Status.vala:217 msgid "Copy Text" msgstr "" #: src/Widgets/Status.vala:237 msgid "Unpin from Profile" msgstr "" #: src/Widgets/Status.vala:237 msgid "Pin on Profile" msgstr "" tootle-1.0-alpha2/po/regenerate-po-files.sh000077500000000000000000000000731374710545700206540ustar00rootroot00000000000000cd .. cd build ninja com.github.bleakgrey.tootle-update-po tootle-1.0-alpha2/po/ru_RU.po000066400000000000000000000267771374710545700160770ustar00rootroot00000000000000# Russian translations for com.github.bleakgrey.tootle package. # Copyright (C) 2020 THE com.github.bleakgrey.tootle'S COPYRIGHT HOLDER # This file is distributed under the same license as the com.github.bleakgrey.tootle package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: com.github.bleakgrey.tootle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 16:21+0300\n" "PO-Revision-Date: 2020-09-10 20:20+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: data/com.github.bleakgrey.tootle.desktop.in:4 #: data/com.github.bleakgrey.tootle.appdata.xml.in:7 msgid "Tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:5 #: data/com.github.bleakgrey.tootle.desktop.in:6 msgid "Mastodon Client" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:8 msgid "com.github.bleakgrey.tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:11 msgid "toot;mastodon;social;network;post;" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:8 msgid "Lightning fast client for Mastodon" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:11 msgid "" "Tootle is a GTK client for the world's largest, decentralized, microblogging " "platform, Mastodon. With the user experience in mind, it provides a clean, " "native interface that allows you to integrate Mastodon's social experience " "seamlessly with your desktop environment." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:14 msgid "" "Mastodon is a free and open source microblogging platform similar to " "Twitter, but with user privacy and decentralization in mind. It is one of " "many protocols that interacts with the Fediverse of protocols like Pleroma, " "GNU Social, and others. The power of federated microblogging that Mastodon " "brings and the agility of Tootle creates a fantastic duo for all of your " "social media needs." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:23 msgid "bleak_grey" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:71 msgid "New app icon (Kudos to Tobias Bernard!)" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:72 msgid "New interface design" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:73 msgid "Fixed bugs" msgstr "" #: data/ui/dialogs/compose.ui:42 msgid "Publish" msgstr "" #: data/ui/dialogs/compose.ui:71 data/ui/dialogs/list_editor.ui:59 msgid "Cancel" msgstr "" #: data/ui/dialogs/compose.ui:119 msgid "Write your warning here" msgstr "" #: data/ui/dialogs/compose.ui:185 msgid "Visibility" msgstr "" #: data/ui/dialogs/compose.ui:238 msgid "Attach Media" msgstr "" #: data/ui/dialogs/compose.ui:260 msgid "Instance Emojis" msgstr "" #: data/ui/dialogs/compose.ui:284 msgid "Spoiler Warning" msgstr "" #: data/ui/dialogs/compose.ui:329 msgid "Text" msgstr "" #: data/ui/dialogs/compose.ui:389 msgid "Media" msgstr "" #: data/ui/dialogs/list_editor.ui:33 msgid "Name" msgstr "" #: data/ui/dialogs/list_editor.ui:83 msgid "Save" msgstr "" #: data/ui/dialogs/list_editor.ui:200 msgid "Search among people you follow" msgstr "" #: data/ui/dialogs/list_editor.ui:256 msgid "Nobody here" msgstr "" #: data/ui/dialogs/preferences.ui:29 msgid "General" msgstr "" #: data/ui/dialogs/preferences.ui:34 msgid "Appearance" msgstr "" #: data/ui/dialogs/preferences.ui:39 msgid "Dark theme" msgstr "" #: data/ui/dialogs/preferences.ui:54 msgid "Text scale (%)" msgstr "" #: data/ui/dialogs/preferences.ui:61 msgid "100" msgstr "" #: data/ui/dialogs/preferences.ui:75 msgid "Behavior" msgstr "" #: data/ui/dialogs/preferences.ui:79 msgid "Autostart" msgstr "" #: data/ui/dialogs/preferences.ui:81 msgid "Start minimized at boot" msgstr "" #: data/ui/dialogs/preferences.ui:94 msgid "Background work" msgstr "" #: data/ui/dialogs/preferences.ui:96 msgid "Receive notifications even when the app is closed" msgstr "" #: data/ui/dialogs/preferences.ui:110 msgid "Default post visibility" msgstr "" #: data/ui/dialogs/preferences.ui:119 msgid "Timelines" msgstr "" #: data/ui/dialogs/preferences.ui:124 msgid "Posts per page" msgstr "" #: data/ui/dialogs/preferences.ui:131 msgid "10" msgstr "" #: data/ui/dialogs/preferences.ui:141 msgid "Infinite scrolling" msgstr "" #: data/ui/dialogs/preferences.ui:143 data/ui/dialogs/preferences.ui:176 msgid "Warning: This will increase memory usage" msgstr "" #: data/ui/dialogs/preferences.ui:157 msgid "Stream timelines" msgstr "" #: data/ui/dialogs/preferences.ui:159 msgid "Receive new posts and notifications in real-time" msgstr "" #: data/ui/dialogs/preferences.ui:174 msgid "Stream public timelines" msgstr "" #: data/ui/dialogs/new_account.ui:21 msgid "Add Account" msgstr "" #: data/ui/dialogs/new_account.ui:25 data/ui/views/base.ui:26 #: src/Dialogs/NewAccount.vala:85 msgid "Back" msgstr "" #: data/ui/dialogs/new_account.ui:48 src/Dialogs/NewAccount.vala:84 msgid "Next" msgstr "" #: data/ui/dialogs/new_account.ui:129 msgid "What is your instance?" msgstr "" #: data/ui/dialogs/new_account.ui:191 msgid "Don't have one yet?" msgstr "" #: data/ui/dialogs/new_account.ui:242 msgid "Enter authorization code" msgstr "" #: data/ui/dialogs/new_account.ui:276 msgid "Try manual authorization" msgstr "" #: data/ui/widgets/accounts_button.ui:64 src/Views/Conversations.vala:6 msgid "Conversations" msgstr "" #: data/ui/widgets/accounts_button.ui:93 src/Views/Favorites.vala:6 msgid "Favorites" msgstr "" #: data/ui/widgets/accounts_button.ui:122 src/Views/Bookmarks.vala:6 msgid "Bookmarks" msgstr "" #: data/ui/widgets/accounts_button.ui:152 src/Views/Lists.vala:59 msgid "Lists" msgstr "" #: data/ui/widgets/accounts_button.ui:204 msgid "POSTS" msgstr "" #: data/ui/widgets/accounts_button.ui:247 msgid "FOLLOWING" msgstr "" #: data/ui/widgets/accounts_button.ui:290 msgid "FOLLOWERS" msgstr "" #: data/ui/widgets/accounts_button.ui:344 msgid "Refresh" msgstr "" #: data/ui/widgets/accounts_button.ui:357 msgid "Preferences" msgstr "" #: data/ui/widgets/accounts_button.ui:371 msgid "About" msgstr "" #: data/ui/widgets/accounts_button.ui:397 src/Views/Search.vala:43 msgid "Accounts" msgstr "" #: data/ui/widgets/accounts_button_item.ui:60 msgid "Forget" msgstr "" #: data/ui/widgets/accounts_button_item.ui:88 msgid "Title" msgstr "" #: data/ui/widgets/compose_attachment.ui:29 msgid "Describe for the visually impaired" msgstr "" #: data/ui/widgets/compose_attachment.ui:90 msgid "Unknown" msgstr "" #: data/ui/widgets/compose_attachment.ui:113 data/ui/widgets/list_item.ui:74 #: src/Widgets/Status.vala:243 msgid "Delete" msgstr "" #: data/ui/widgets/list_item.ui:26 src/Dialogs/ListEditor.vala:87 msgid "Untitled" msgstr "" #: data/ui/widgets/list_item.ui:42 msgid "Edit" msgstr "" #. Please do not remove the credits below. You may add your own, but keep the existing ones intact. #. TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. #: src/Build.vala:15 msgid " " msgstr "" #: src/Desktop.vala:18 #, c-format msgid "" "Open this URL in your browser:\n" "\n" "%s" msgstr "" #: src/Html.vala:3 msgid "[ There was an error parsing this text :c ]" msgstr "" #: src/DateTime.vala:11 msgid "Just now" msgstr "" #: src/DateTime.vala:21 msgid "Yesterday" msgstr "" #: src/DateTime.vala:24 msgid "%b %e" msgstr "" #: src/DateTime.vala:27 msgid "%b %e, %Y" msgstr "" #: src/Dialogs/About.vala:14 msgid "Report an issue" msgstr "" #: src/Dialogs/Compose.vala:81 src/Views/Lists.vala:33 msgid "This action cannot be reverted." msgstr "" #: src/Dialogs/Compose.vala:125 src/Views/Main.vala:25 msgid "Compose" msgstr "" #: src/Dialogs/Compose.vala:135 src/Widgets/Status.vala:253 msgid "Redraft" msgstr "" #: src/Dialogs/Compose.vala:154 msgid "Reply" msgstr "" #: src/Dialogs/Compose.vala:197 msgid "Select media" msgstr "" #: src/Dialogs/Compose.vala:200 msgid "_Open" msgstr "" #: src/Dialogs/Compose.vala:201 msgid "_Cancel" msgstr "" #: src/Dialogs/ListEditor.vala:201 msgid "Discard changes?" msgstr "" #: src/Dialogs/ListEditor.vala:202 msgid "You need to save the list if you want to keep them." msgstr "" #: src/Dialogs/NewAccount.vala:84 msgid "Close" msgstr "" #: src/Dialogs/NewAccount.vala:85 msgid "Add Another" msgstr "" #: src/Dialogs/NewAccount.vala:127 msgid "Please enter a valid instance URL" msgstr "" #: src/Dialogs/NewAccount.vala:160 msgid "Please enter a valid authorization code" msgstr "" #: src/Dialogs/NewAccount.vala:176 msgid "Instance failed to authorize the access token" msgstr "" #: src/Dialogs/NewAccount.vala:190 #, c-format msgid "Hello, %s!" msgstr "" #: src/Dialogs/NewAccount.vala:218 msgid "Server returned an error" msgstr "" #: src/Services/Accounts.vala:32 msgid "Network Error" msgstr "" #: src/Services/Accounts.vala:33 #, c-format msgid "" "The instance has invalidated this session. Please sign in again.\n" "\n" "%s" msgstr "" #: src/Views/Base.vala:6 msgid "Nothing to see here" msgstr "" #: src/Views/Base.vala:58 msgid "Reload" msgstr "" #: src/Views/Main.vala:31 src/Views/Search.vala:15 msgid "Search" msgstr "" #: src/Views/Thread.vala:13 msgid "Conversation" msgstr "" #: src/Views/Federated.vala:7 msgid "Federated" msgstr "" #: src/Views/Home.vala:6 msgid "Home" msgstr "" #: src/Views/Lists.vala:32 #, c-format msgid "Delete \"%s\"?" msgstr "" #: src/Views/Local.vala:4 msgid "Local" msgstr "" #: src/Views/Notifications.vala:11 msgid "Notifications" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Block \"%s\"?" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Unblock \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Block Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Unblock Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:164 msgid "" "Blocking a domain will:\n" "\n" "• Remove its public posts and notifications from your timelines\n" "• Remove its followers from your account\n" "• Prevent you from following its users" msgstr "" #: src/Views/Profile.vala:204 msgid "Sent follow request" msgstr "" #: src/Views/Profile.vala:206 msgid "Mutually follows you" msgstr "" #: src/Views/Profile.vala:208 msgid "Follows you" msgstr "" #: src/Views/Profile.vala:229 msgid "Unblock" msgstr "" #: src/Views/Profile.vala:239 msgid "Unfollow" msgstr "" #: src/Views/Profile.vala:248 msgid "Follow" msgstr "" #: src/Views/Search.vala:44 msgid "Statuses" msgstr "" #: src/Views/Search.vala:45 msgid "Hashtags" msgstr "" #: src/Views/Search.vala:61 msgid "Enter query" msgstr "" #: src/Widgets/Attachment/Slot.vala:46 msgid "File saved to Downloads" msgstr "" #: src/Widgets/AccountsButton.vala:40 #, c-format msgid "Forget %s?" msgstr "" #: src/Widgets/AccountsButton.vala:41 msgid "This account will be removed from the application." msgstr "" #: src/Widgets/AccountsButton.vala:148 msgid "Anonymous" msgstr "" #: src/Widgets/AccountsButton.vala:149 msgid "No active account" msgstr "" #: src/Widgets/Status.vala:72 msgid "Click to show sensitive content" msgstr "" #: src/Widgets/Status.vala:163 msgid "This post can't be boosted" msgstr "" #: src/Widgets/Status.vala:213 msgid "Open in Browser" msgstr "" #: src/Widgets/Status.vala:215 msgid "Copy Link" msgstr "" #: src/Widgets/Status.vala:217 msgid "Copy Text" msgstr "" #: src/Widgets/Status.vala:237 msgid "Unpin from Profile" msgstr "" #: src/Widgets/Status.vala:237 msgid "Pin on Profile" msgstr "" tootle-1.0-alpha2/po/zh_CN.po000066400000000000000000000266061374710545700160330ustar00rootroot00000000000000# Chinese translations for com.github.bleakgrey.tootle package. # Copyright (C) 2020 THE com.github.bleakgrey.tootle'S COPYRIGHT HOLDER # This file is distributed under the same license as the com.github.bleakgrey.tootle package. # Automatically generated, 2020. # msgid "" msgstr "" "Project-Id-Version: com.github.bleakgrey.tootle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-30 16:21+0300\n" "PO-Revision-Date: 2020-09-10 20:20+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: data/com.github.bleakgrey.tootle.desktop.in:4 #: data/com.github.bleakgrey.tootle.appdata.xml.in:7 msgid "Tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:5 #: data/com.github.bleakgrey.tootle.desktop.in:6 msgid "Mastodon Client" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:8 msgid "com.github.bleakgrey.tootle" msgstr "" #: data/com.github.bleakgrey.tootle.desktop.in:11 msgid "toot;mastodon;social;network;post;" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:8 msgid "Lightning fast client for Mastodon" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:11 msgid "" "Tootle is a GTK client for the world's largest, decentralized, microblogging " "platform, Mastodon. With the user experience in mind, it provides a clean, " "native interface that allows you to integrate Mastodon's social experience " "seamlessly with your desktop environment." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:14 msgid "" "Mastodon is a free and open source microblogging platform similar to " "Twitter, but with user privacy and decentralization in mind. It is one of " "many protocols that interacts with the Fediverse of protocols like Pleroma, " "GNU Social, and others. The power of federated microblogging that Mastodon " "brings and the agility of Tootle creates a fantastic duo for all of your " "social media needs." msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:23 msgid "bleak_grey" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:71 msgid "New app icon (Kudos to Tobias Bernard!)" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:72 msgid "New interface design" msgstr "" #: data/com.github.bleakgrey.tootle.appdata.xml.in:73 msgid "Fixed bugs" msgstr "" #: data/ui/dialogs/compose.ui:42 msgid "Publish" msgstr "" #: data/ui/dialogs/compose.ui:71 data/ui/dialogs/list_editor.ui:59 msgid "Cancel" msgstr "" #: data/ui/dialogs/compose.ui:119 msgid "Write your warning here" msgstr "" #: data/ui/dialogs/compose.ui:185 msgid "Visibility" msgstr "" #: data/ui/dialogs/compose.ui:238 msgid "Attach Media" msgstr "" #: data/ui/dialogs/compose.ui:260 msgid "Instance Emojis" msgstr "" #: data/ui/dialogs/compose.ui:284 msgid "Spoiler Warning" msgstr "" #: data/ui/dialogs/compose.ui:329 msgid "Text" msgstr "" #: data/ui/dialogs/compose.ui:389 msgid "Media" msgstr "" #: data/ui/dialogs/list_editor.ui:33 msgid "Name" msgstr "" #: data/ui/dialogs/list_editor.ui:83 msgid "Save" msgstr "" #: data/ui/dialogs/list_editor.ui:200 msgid "Search among people you follow" msgstr "" #: data/ui/dialogs/list_editor.ui:256 msgid "Nobody here" msgstr "" #: data/ui/dialogs/preferences.ui:29 msgid "General" msgstr "" #: data/ui/dialogs/preferences.ui:34 msgid "Appearance" msgstr "" #: data/ui/dialogs/preferences.ui:39 msgid "Dark theme" msgstr "" #: data/ui/dialogs/preferences.ui:54 msgid "Text scale (%)" msgstr "" #: data/ui/dialogs/preferences.ui:61 msgid "100" msgstr "" #: data/ui/dialogs/preferences.ui:75 msgid "Behavior" msgstr "" #: data/ui/dialogs/preferences.ui:79 msgid "Autostart" msgstr "" #: data/ui/dialogs/preferences.ui:81 msgid "Start minimized at boot" msgstr "" #: data/ui/dialogs/preferences.ui:94 msgid "Background work" msgstr "" #: data/ui/dialogs/preferences.ui:96 msgid "Receive notifications even when the app is closed" msgstr "" #: data/ui/dialogs/preferences.ui:110 msgid "Default post visibility" msgstr "" #: data/ui/dialogs/preferences.ui:119 msgid "Timelines" msgstr "" #: data/ui/dialogs/preferences.ui:124 msgid "Posts per page" msgstr "" #: data/ui/dialogs/preferences.ui:131 msgid "10" msgstr "" #: data/ui/dialogs/preferences.ui:141 msgid "Infinite scrolling" msgstr "" #: data/ui/dialogs/preferences.ui:143 data/ui/dialogs/preferences.ui:176 msgid "Warning: This will increase memory usage" msgstr "" #: data/ui/dialogs/preferences.ui:157 msgid "Stream timelines" msgstr "" #: data/ui/dialogs/preferences.ui:159 msgid "Receive new posts and notifications in real-time" msgstr "" #: data/ui/dialogs/preferences.ui:174 msgid "Stream public timelines" msgstr "" #: data/ui/dialogs/new_account.ui:21 msgid "Add Account" msgstr "" #: data/ui/dialogs/new_account.ui:25 data/ui/views/base.ui:26 #: src/Dialogs/NewAccount.vala:85 msgid "Back" msgstr "" #: data/ui/dialogs/new_account.ui:48 src/Dialogs/NewAccount.vala:84 msgid "Next" msgstr "" #: data/ui/dialogs/new_account.ui:129 msgid "What is your instance?" msgstr "" #: data/ui/dialogs/new_account.ui:191 msgid "Don't have one yet?" msgstr "" #: data/ui/dialogs/new_account.ui:242 msgid "Enter authorization code" msgstr "" #: data/ui/dialogs/new_account.ui:276 msgid "Try manual authorization" msgstr "" #: data/ui/widgets/accounts_button.ui:64 src/Views/Conversations.vala:6 msgid "Conversations" msgstr "" #: data/ui/widgets/accounts_button.ui:93 src/Views/Favorites.vala:6 msgid "Favorites" msgstr "" #: data/ui/widgets/accounts_button.ui:122 src/Views/Bookmarks.vala:6 msgid "Bookmarks" msgstr "" #: data/ui/widgets/accounts_button.ui:152 src/Views/Lists.vala:59 msgid "Lists" msgstr "" #: data/ui/widgets/accounts_button.ui:204 msgid "POSTS" msgstr "" #: data/ui/widgets/accounts_button.ui:247 msgid "FOLLOWING" msgstr "" #: data/ui/widgets/accounts_button.ui:290 msgid "FOLLOWERS" msgstr "" #: data/ui/widgets/accounts_button.ui:344 msgid "Refresh" msgstr "" #: data/ui/widgets/accounts_button.ui:357 msgid "Preferences" msgstr "" #: data/ui/widgets/accounts_button.ui:371 msgid "About" msgstr "" #: data/ui/widgets/accounts_button.ui:397 src/Views/Search.vala:43 msgid "Accounts" msgstr "" #: data/ui/widgets/accounts_button_item.ui:60 msgid "Forget" msgstr "" #: data/ui/widgets/accounts_button_item.ui:88 msgid "Title" msgstr "" #: data/ui/widgets/compose_attachment.ui:29 msgid "Describe for the visually impaired" msgstr "" #: data/ui/widgets/compose_attachment.ui:90 msgid "Unknown" msgstr "" #: data/ui/widgets/compose_attachment.ui:113 data/ui/widgets/list_item.ui:74 #: src/Widgets/Status.vala:243 msgid "Delete" msgstr "" #: data/ui/widgets/list_item.ui:26 src/Dialogs/ListEditor.vala:87 msgid "Untitled" msgstr "" #: data/ui/widgets/list_item.ui:42 msgid "Edit" msgstr "" #. Please do not remove the credits below. You may add your own, but keep the existing ones intact. #. TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. #: src/Build.vala:15 msgid " " msgstr "" #: src/Desktop.vala:18 #, c-format msgid "" "Open this URL in your browser:\n" "\n" "%s" msgstr "" #: src/Html.vala:3 msgid "[ There was an error parsing this text :c ]" msgstr "" #: src/DateTime.vala:11 msgid "Just now" msgstr "" #: src/DateTime.vala:21 msgid "Yesterday" msgstr "" #: src/DateTime.vala:24 msgid "%b %e" msgstr "" #: src/DateTime.vala:27 msgid "%b %e, %Y" msgstr "" #: src/Dialogs/About.vala:14 msgid "Report an issue" msgstr "" #: src/Dialogs/Compose.vala:81 src/Views/Lists.vala:33 msgid "This action cannot be reverted." msgstr "" #: src/Dialogs/Compose.vala:125 src/Views/Main.vala:25 msgid "Compose" msgstr "" #: src/Dialogs/Compose.vala:135 src/Widgets/Status.vala:253 msgid "Redraft" msgstr "" #: src/Dialogs/Compose.vala:154 msgid "Reply" msgstr "" #: src/Dialogs/Compose.vala:197 msgid "Select media" msgstr "" #: src/Dialogs/Compose.vala:200 msgid "_Open" msgstr "" #: src/Dialogs/Compose.vala:201 msgid "_Cancel" msgstr "" #: src/Dialogs/ListEditor.vala:201 msgid "Discard changes?" msgstr "" #: src/Dialogs/ListEditor.vala:202 msgid "You need to save the list if you want to keep them." msgstr "" #: src/Dialogs/NewAccount.vala:84 msgid "Close" msgstr "" #: src/Dialogs/NewAccount.vala:85 msgid "Add Another" msgstr "" #: src/Dialogs/NewAccount.vala:127 msgid "Please enter a valid instance URL" msgstr "" #: src/Dialogs/NewAccount.vala:160 msgid "Please enter a valid authorization code" msgstr "" #: src/Dialogs/NewAccount.vala:176 msgid "Instance failed to authorize the access token" msgstr "" #: src/Dialogs/NewAccount.vala:190 #, c-format msgid "Hello, %s!" msgstr "" #: src/Dialogs/NewAccount.vala:218 msgid "Server returned an error" msgstr "" #: src/Services/Accounts.vala:32 msgid "Network Error" msgstr "" #: src/Services/Accounts.vala:33 #, c-format msgid "" "The instance has invalidated this session. Please sign in again.\n" "\n" "%s" msgstr "" #: src/Views/Base.vala:6 msgid "Nothing to see here" msgstr "" #: src/Views/Base.vala:58 msgid "Reload" msgstr "" #: src/Views/Main.vala:31 src/Views/Search.vala:15 msgid "Search" msgstr "" #: src/Views/Thread.vala:13 msgid "Conversation" msgstr "" #: src/Views/Federated.vala:7 msgid "Federated" msgstr "" #: src/Views/Home.vala:6 msgid "Home" msgstr "" #: src/Views/Lists.vala:32 #, c-format msgid "Delete \"%s\"?" msgstr "" #: src/Views/Local.vala:4 msgid "Local" msgstr "" #: src/Views/Notifications.vala:11 msgid "Notifications" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Block \"%s\"?" msgstr "" #: src/Views/Profile.vala:150 #, c-format msgid "Unblock \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Block Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:161 #, c-format msgid "Unblock Entire \"%s\"?" msgstr "" #: src/Views/Profile.vala:164 msgid "" "Blocking a domain will:\n" "\n" "• Remove its public posts and notifications from your timelines\n" "• Remove its followers from your account\n" "• Prevent you from following its users" msgstr "" #: src/Views/Profile.vala:204 msgid "Sent follow request" msgstr "" #: src/Views/Profile.vala:206 msgid "Mutually follows you" msgstr "" #: src/Views/Profile.vala:208 msgid "Follows you" msgstr "" #: src/Views/Profile.vala:229 msgid "Unblock" msgstr "" #: src/Views/Profile.vala:239 msgid "Unfollow" msgstr "" #: src/Views/Profile.vala:248 msgid "Follow" msgstr "" #: src/Views/Search.vala:44 msgid "Statuses" msgstr "" #: src/Views/Search.vala:45 msgid "Hashtags" msgstr "" #: src/Views/Search.vala:61 msgid "Enter query" msgstr "" #: src/Widgets/Attachment/Slot.vala:46 msgid "File saved to Downloads" msgstr "" #: src/Widgets/AccountsButton.vala:40 #, c-format msgid "Forget %s?" msgstr "" #: src/Widgets/AccountsButton.vala:41 msgid "This account will be removed from the application." msgstr "" #: src/Widgets/AccountsButton.vala:148 msgid "Anonymous" msgstr "" #: src/Widgets/AccountsButton.vala:149 msgid "No active account" msgstr "" #: src/Widgets/Status.vala:72 msgid "Click to show sensitive content" msgstr "" #: src/Widgets/Status.vala:163 msgid "This post can't be boosted" msgstr "" #: src/Widgets/Status.vala:213 msgid "Open in Browser" msgstr "" #: src/Widgets/Status.vala:215 msgid "Copy Link" msgstr "" #: src/Widgets/Status.vala:217 msgid "Copy Text" msgstr "" #: src/Widgets/Status.vala:237 msgid "Unpin from Profile" msgstr "" #: src/Widgets/Status.vala:237 msgid "Pin on Profile" msgstr "" tootle-1.0-alpha2/src/000077500000000000000000000000001374710545700146315ustar00rootroot00000000000000tootle-1.0-alpha2/src/.editorconfig000066400000000000000000000001721374710545700173060ustar00rootroot00000000000000root = true [*] end_of_line = lf insert_final_newline = false charset = utf-8 [*.sh] indent_size = 4 indent_style = tab tootle-1.0-alpha2/src/API/000077500000000000000000000000001374710545700152425ustar00rootroot00000000000000tootle-1.0-alpha2/src/API/Account.vala000066400000000000000000000034251374710545700175070ustar00rootroot00000000000000public class Tootle.API.Account : Entity, Widgetizable { public string id { get; set; } public string username { get; set; } public string acct { get; set; } public string? _display_name = null; public string display_name { set { this._display_name = value; } get { return (_display_name == null || _display_name == "") ? username : _display_name; } } public string note { get; set; } public string header { get; set; } public string avatar { get; set; } public string url { get; set; } public string created_at { get; set; } public int64 followers_count { get; set; } public int64 following_count { get; set; } public int64 statuses_count { get; set; } public Gee.ArrayList? fields { get; set; default = null; } public string handle { owned get { return "@" + acct; } } public string domain { owned get { var uri = new Soup.URI (url); return uri.get_host (); } } public static Account from (Json.Node node) throws Error { return Entity.from_json (typeof (API.Account), node) as API.Account; } public bool is_self () { return id == accounts.active.id; } public override bool is_local (InstanceAccount account) { return account.domain in url; } public override Gtk.Widget to_widget () { var status = new API.Status.from_account (this); return new Widgets.Status (status); } public override void open () { var view = new Views.Profile (this); window.open_view (view); } public override void resolve_open (InstanceAccount account) { if (is_local (account)) open (); else { account.resolve.begin (url, (obj, res) => { account.resolve.end (res).open (); }); } } } tootle-1.0-alpha2/src/API/AccountField.vala000066400000000000000000000002411374710545700204440ustar00rootroot00000000000000public class Tootle.API.AccountField : Entity { public string name { get; set; } public string val { get; set; } public string? verified_at { get; set; } } tootle-1.0-alpha2/src/API/Attachment.vala000066400000000000000000000050541374710545700202030ustar00rootroot00000000000000public class Tootle.API.Attachment : Entity { // https://github.com/tootsuite/mastodon/blob/master/app/models/media_attachment.rb public const string[] SUPPORTED_MIMES = { "image/jpeg", "image/png", "image/gif", "video/webm", "video/mp4", "video/quicktime", "video/ogg", "video/webm", "video/quicktime", "audio/wave", "audio/wav", "audio/x-wav", "audio/x-pn-wave", "audio/ogg", "audio/mpeg", "audio/mp3", "audio/webm", "audio/flac", "audio/aac", "audio/m4a", "audio/x-m4a", "audio/mp4", "audio/3gpp", "video/x-ms-asf" }; public string id { get; set; } public string kind { get; set; } public string url { get; set; } public string? description { get; set; } public string? _preview_url { get; set; } public string? preview_url { set { this._preview_url = value; } get { return (this._preview_url == null || this._preview_url == "") ? url : _preview_url; } } public static Attachment from (Json.Node node) throws Error { return Entity.from_json (typeof (API.Attachment), node) as API.Attachment; } public static async Attachment upload (string uri, string title, string? descr) throws Error { message (@"Uploading new media: $(uri)..."); uint8[] contents; string mime; GLib.FileInfo type; try { GLib.File file = File.new_for_uri (uri); file.load_contents (null, out contents, null); type = file.query_info (GLib.FileAttribute.STANDARD_CONTENT_TYPE, 0); mime = type.get_content_type (); } catch (Error e) { throw new Oopsie.USER (_("Can't open file $file:\n$reason") .replace ("$file", title) .replace ("$reason", e.message) ); } var descr_param = ""; if (descr != null && descr.replace (" ", "") != "") { descr_param = "?description=" + Html.uri_encode (descr); } var buffer = new Soup.Buffer.take (contents); var multipart = new Soup.Multipart (Soup.FORM_MIME_TYPE_MULTIPART); multipart.append_form_file ("file", mime.replace ("/", "."), mime, buffer); var url = @"$(accounts.active.instance)/api/v1/media$descr_param"; var msg = Soup.Form.request_new_from_multipart (url, multipart); msg.request_headers.append ("Authorization", @"Bearer $(accounts.active.access_token)"); string? error = null; network.queue (msg, (sess, mess) => { upload.callback (); }, (code, reason) => { error = reason; upload.callback (); }); yield; if (error != null) throw new Oopsie.INSTANCE (error); else { var node = network.parse_node (msg); var entity = API.Attachment.from (node); message (@"OK! ID $(entity.id)"); return entity; } } } tootle-1.0-alpha2/src/API/Conversation.vala000066400000000000000000000013271374710545700205640ustar00rootroot00000000000000public class Tootle.API.Conversation : Entity, Widgetizable { public string id { get; set; } public Gee.ArrayList accounts { get; set; } public bool unread { get; set; default = false; } public API.Status? last_status { get; set; default = null; } public override Gtk.Widget to_widget () { return new Widgets.Conversation (this); } public override void open () { var view = new Views.Thread (last_status.formal); window.open_view (view); if (unread) mark_read (); } public void mark_read () { new Request.POST (@"/api/v1/conversations/$id/read") .with_account (Tootle.accounts.active) .then (() => { unread = false; }) .on_error (() => {}) .exec (); } } tootle-1.0-alpha2/src/API/Entity.vala000066400000000000000000000107651374710545700173740ustar00rootroot00000000000000using Json; public class Tootle.Entity : GLib.Object, Widgetizable, Json.Serializable { public static string[] ignore_props = {"formal", "handle", "domain", "has-spoiler"}; public virtual bool is_local (InstanceAccount account) { return true; } public new ParamSpec[] list_properties () { ParamSpec[] specs = {}; foreach (ParamSpec spec in get_class ().list_properties ()) { if (!(spec.name in ignore_props)) specs += spec; } return specs; } public void patch (GLib.Object with) { var props = with.get_class ().list_properties (); foreach (var prop in props) { var name = prop.get_name (); var defined = get_class ().find_property (name) != null; var forbidden = name in ignore_props; if (defined && !forbidden) { var val = Value (prop.value_type); with.get_property (name, ref val); base.set_property (name, val); } } } public static Entity from_json (Type type, Json.Node? node) throws Oopsie { if (node == null) throw new Oopsie.PARSING (@"Received Json.Node for $(type.name ()) is null!"); var obj = node.get_object (); if (obj == null) throw new Oopsie.PARSING (@"Received Json.Node for $(type.name ()) is not a Json.Object!"); //Replace with something more elegant var kind = obj.get_member ("type"); if (kind != null) { obj.set_member ("kind", kind); obj.remove_member ("type"); } var val = obj.get_member ("value"); if (val != null) { obj.set_member ("val", val); obj.remove_member ("value"); } return Json.gobject_deserialize (type, node) as Entity; } public Json.Node to_json () { return Json.gobject_serialize (this); } public string to_json_data () { size_t len; return Json.gobject_to_data (this, out len); } public override bool deserialize_property (string prop, out Value val, ParamSpec spec, Json.Node node) { // debug (@"deserializing $prop of type $(val.type_name ())"); var success = default_deserialize_property (prop, out val, spec, node); var type = spec.value_type; if (val.type () == Type.INVALID) { // Fix for glib-json < 1.5.1 val.init (type); spec.set_value_default (ref val); type = spec.value_type; } if (type.is_a (typeof (Gee.ArrayList))) { Type contains; //There has to be a better way switch (prop) { case "media-attachments": contains = typeof (API.Attachment); break; case "mentions": contains = typeof (API.Mention); break; case "fields": contains = typeof (API.AccountField); break; case "accounts": contains = typeof (API.Account); break; case "statuses": contains = typeof (API.Status); break; case "hashtags": contains = typeof (API.Tag); break; default: contains = typeof (Entity); break; } return des_list (out val, node, contains); } else if (type.is_a (typeof (API.NotificationType))) return des_notification_type (out val, node); return success; } static bool des_notification_type (out Value val, Json.Node node) { var str = node.get_string (); val = API.NotificationType.from_string (str); return true; } static bool des_list (out Value val, Json.Node node, Type type) { if (!node.is_null ()) { var arr = new Gee.ArrayList (); node.get_array ().foreach_element ((array, i, elem) => { var obj = Entity.from_json (type, elem); arr.add (obj); }); val = arr; } return true; } public override Json.Node serialize_property (string prop, Value val, ParamSpec spec) { var type = spec.value_type; // debug (@"serializing $prop of type $(val.type_name ())"); if (type.is_a (typeof (Gee.ArrayList))) return ser_list (prop, val, spec); if (type.is_a (typeof (API.NotificationType))) return ser_notification_type (prop, val, spec); return default_serialize_property (prop, val, spec); } static Json.Node ser_notification_type (string prop, Value val, ParamSpec spec) { var enum_val = (API.NotificationType) val; var node = new Json.Node (NodeType.VALUE); node.set_string (enum_val.to_string ()); return node; } static Json.Node ser_list (string prop, Value val, ParamSpec spec) { var list = (Gee.ArrayList) val; if (list == null) return new Json.Node (NodeType.NULL); var arr = new Json.Array (); list.@foreach (e => { var enode = e.to_json (); arr.add_element (enode); return true; }); var node = new Json.Node (NodeType.ARRAY); node.set_array (arr); return node; } } tootle-1.0-alpha2/src/API/List.vala000066400000000000000000000005551374710545700170270ustar00rootroot00000000000000using Gtk; public class Tootle.API.List : Entity, Widgetizable { public string id { get; set; } public string title { get; set; } public static List from (Json.Node node) throws Error { return Entity.from_json (typeof (API.List), node) as API.List; } public override Gtk.Widget to_widget () { return new Views.Lists.Row (this); } } tootle-1.0-alpha2/src/API/Mention.vala000066400000000000000000000011361374710545700175210ustar00rootroot00000000000000public class Tootle.API.Mention : Entity, Widgetizable { public string id { get; construct set; } public string username { get; construct set; } public string acct { get; construct set; } public string url { get; construct set; } public string handle { owned get { return "@" + acct; } } public Mention.from_account (API.Account account) { Object ( id: account.id, username: account.username, acct: account.acct, url: account.url ); } public override void open () { Views.Profile.open_from_id (id); } } tootle-1.0-alpha2/src/API/Notification.vala000066400000000000000000000025121374710545700205350ustar00rootroot00000000000000public class Tootle.API.Notification : Entity, Widgetizable { public string id { get; set; } public API.Account account { get; set; } public API.NotificationType kind { get; set; } public string created_at { get; set; } public API.Status? status { get; set; default = null; } public override Gtk.Widget to_widget () { return new Widgets.Notification (this); } public Soup.Message? dismiss () { if (kind == NotificationType.WATCHLIST) { if (accounts.active.cached_notifications.remove (this)) accounts.save (); return null; } if (kind == NotificationType.FOLLOW_REQUEST) return reject_follow_request (); var req = new Request.POST ("/api/v1/notifications/dismiss") .with_account (accounts.active) .with_param ("id", id) .exec (); return req; } public Soup.Message accept_follow_request () { var req = new Request.POST (@"/api/v1/follow_requests/$(account.id)/authorize") .with_account (accounts.active) .exec (); return req; } public Soup.Message reject_follow_request () { var req = new Request.POST (@"/api/v1/follow_requests/$(account.id)/reject") .with_account (accounts.active) .exec (); return req; } } tootle-1.0-alpha2/src/API/NotificationType.vala000066400000000000000000000066471374710545700214140ustar00rootroot00000000000000public enum Tootle.API.NotificationType { MENTION, REBLOG, REBLOG_REMOTE_USER, // Internal FAVORITE, FOLLOW, FOLLOW_REQUEST, // Internal WATCHLIST; // Internal public string to_string () { switch (this) { case MENTION: return "mention"; case REBLOG: return "reblog"; case REBLOG_REMOTE_USER: return "reblog_remote"; case FAVORITE: return "favourite"; case FOLLOW: return "follow"; case FOLLOW_REQUEST: return "follow_request"; case WATCHLIST: return "watchlist"; default: warning (@"Unknown notification type: $this"); return ""; } } public static NotificationType from_string (string str) throws Oopsie { switch (str) { case "mention": return MENTION; case "reblog": return REBLOG; case "reblog_remote": return REBLOG_REMOTE_USER; case "favourite": return FAVORITE; case "follow": return FOLLOW; case "follow_request": return FOLLOW_REQUEST; case "watchlist": return WATCHLIST; default: throw new Oopsie.INSTANCE (@"Unknown notification type: $str"); } } public string get_desc (Account? account) { switch (this) { case MENTION: return _("%s mentioned you").printf (account.url, account.display_name); case REBLOG: return _("%s boosted your status").printf (account.url, account.display_name); case REBLOG_REMOTE_USER: return _("%s boosted").printf (account.url, account.display_name); case FAVORITE: return _("%s favorited your status").printf (account.url, account.display_name); case FOLLOW: return _("%s now follows you").printf (account.url, account.display_name); case FOLLOW_REQUEST: return _("%s wants to follow you").printf (account.url, account.display_name); case WATCHLIST: return _("%s posted a status").printf (account.url, account.display_name); default: warning (@"Unknown notification type: $this"); return ""; } } public string get_icon () { switch (this) { case MENTION: case WATCHLIST: return "user-available-symbolic"; case REBLOG: case REBLOG_REMOTE_USER: return "media-playlist-repeat-symbolic"; case FAVORITE: return "starred-symbolic"; case FOLLOW: case FOLLOW_REQUEST: return "contact-new-symbolic"; default: warning (@"Unknown notification type: $this"); return ""; } } } tootle-1.0-alpha2/src/API/Relationship.vala000066400000000000000000000031051374710545700205470ustar00rootroot00000000000000public class Tootle.API.Relationship : Entity { public string id { get; set; default = ""; } public bool following { get; set; default = false; } public bool followed_by { get; set; default = false; } public bool showing_reblogs { get; set; default = true; } public bool muting { get; set; default = false; } public bool muting_notifications { get; set; default = false; } public bool requested { get; set; default = false; } public bool blocking { get; set; default = false; } public bool domain_blocking { get; set; default = false; } public static Relationship from (Json.Node node) throws Error { return Entity.from_json (typeof (API.Relationship), node) as API.Relationship; } public Relationship.for_account (API.Account acc) { Object (id: acc.id); request (); } public void request () { new Request.GET ("/api/v1/accounts/relationships") .with_account (accounts.active) .with_param ("id", id) .then ((sess, msg) => { Network.parse_array (msg, node => { invalidate (node); }); }) .exec (); } void invalidate (Json.Node node) throws Error { var rs = Relationship.from (node); patch (rs); notify_property ("id"); } public void modify (string operation, string? param = null, string? val = null) { var req = new Request.POST (@"/api/v1/accounts/$id/$operation") .with_account (accounts.active) .then ((sess, msg) => { var node = network.parse_node (msg); invalidate (node); message (@"Performed \"$operation\" on Relationship $id"); }); if (param != null) req.with_param (param, val); req.exec (); } } tootle-1.0-alpha2/src/API/SearchResults.vala000066400000000000000000000016741374710545700207060ustar00rootroot00000000000000using Gee; public class Tootle.API.SearchResults : Entity { public ArrayList accounts { get; set; } public ArrayList statuses { get; set; } public ArrayList hashtags { get; set; } public static SearchResults from (Json.Node node) throws Error { return Entity.from_json (typeof (SearchResults), node) as SearchResults; } public Entity first () throws Error { if (accounts.size > 0) return accounts[0]; else if (statuses.size > 0) return statuses[0]; else if (hashtags.size > 0) return hashtags[0]; else throw new Oopsie.INTERNAL (_("Search returned no results")); } public static async SearchResults request (string q, InstanceAccount account) throws Error { var req = new Request.GET ("/api/v2/search") .with_account (account) .with_param ("resolve", "true") .with_param ("q", Soup.URI.encode (q, null)); yield req.await (); return from (network.parse_node (req)); } } tootle-1.0-alpha2/src/API/Status.vala000066400000000000000000000100271374710545700173720ustar00rootroot00000000000000using Gee; public class Tootle.API.Status : Entity, Widgetizable { public string id { get; set; } public API.Account account { get; set; } public string uri { get; set; } public string? spoiler_text { get; set; default = null; } public string? in_reply_to_id { get; set; default = null; } public string? in_reply_to_account_id { get; set; default = null; } public string content { get; set; default = ""; } public int64 replies_count { get; set; default = 0; } public int64 reblogs_count { get; set; default = 0; } public int64 favourites_count { get; set; default = 0; } public string created_at { get; set; default = "0"; } public bool reblogged { get; set; default = false; } public bool favourited { get; set; default = false; } public bool bookmarked { get; set; default = false; } public bool sensitive { get; set; default = false; } public bool muted { get; set; default = false; } public bool pinned { get; set; default = false; } public API.Visibility visibility { get; set; default = settings.default_post_visibility; } public API.Status? reblog { get; set; default = null; } public ArrayList? mentions { get; set; default = null; } public ArrayList? media_attachments { get; set; default = null; } public string? _url { get; set; } public string url { owned get { return this.get_modified_url (); } set { this._url = value; } } string get_modified_url () { if (this._url == null) { return this.uri.replace ("/activity", ""); } return this._url; } public Status formal { get { return reblog ?? this; } } public bool has_spoiler { get { return formal.sensitive || !(formal.spoiler_text == null || formal.spoiler_text == ""); } } public static Status from (Json.Node node) throws Error { return Entity.from_json (typeof (API.Status), node) as API.Status; } public Status.empty () { Object ( id: "", visibility: settings.default_post_visibility ); } public Status.from_account (API.Account account) { Object ( id: "", account: account, created_at: account.created_at ); if (account.note == "") content = ""; else if ("\n" in account.note) content = Html.remove_tags (account.note.split ("\n")[0]); else content = Html.remove_tags (account.note); } public override Gtk.Widget to_widget () { return new Widgets.Status (this); } public override void open () { var view = new Views.Thread (formal); window.open_view (view); } public bool is_owned (){ return formal.account.id == accounts.active.id; } public bool has_media () { return media_attachments != null && media_attachments.size > 0; } public string get_reply_mentions () { var result = ""; if (account.acct != accounts.active.acct) result = @"$(account.handle) "; if (mentions != null) { foreach (var mention in mentions) { var equals_current = mention.acct == accounts.active.acct; var already_mentioned = mention.acct in result; if (!equals_current && ! already_mentioned) result += @"$(mention.handle) "; } } return result; } public void action (string action, owned Network.ErrorCallback? err = network.on_error) { new Request.POST (@"/api/v1/statuses/$(formal.id)/$action") .with_account (accounts.active) .then ((sess, msg) => { var node = network.parse_node (msg); var upd = API.Status.from (node).formal; patch (upd); }) .on_error ((status, reason) => err (status, reason)) .exec (); } public Request annihilate () { return new Request.DELETE (@"/api/v1/statuses/$id") .with_account (accounts.active); } } tootle-1.0-alpha2/src/API/Tag.vala000066400000000000000000000010431374710545700166200ustar00rootroot00000000000000using Gtk; public class Tootle.API.Tag : Entity, Widgetizable { public string name { get; set; } public string url { get; set; } public static Tag from (Json.Node node) throws Error { return Entity.from_json (typeof (API.Tag), node) as API.Tag; } public override Widget to_widget () { var encoded = Soup.URI.encode (name, null); var w = new Widgets.RichLabel (@"#$name"); w.use_markup = true; w.halign = Align.START; w.margin = 8; w.show (); return w; } } tootle-1.0-alpha2/src/API/Visibility.vala000066400000000000000000000037301374710545700202410ustar00rootroot00000000000000public enum Tootle.API.Visibility { PUBLIC, UNLISTED, PRIVATE, DIRECT; public string to_string () { switch (this) { case UNLISTED: return "unlisted"; case PRIVATE: return "private"; case DIRECT: return "direct"; default: return "public"; } } public static Visibility from_string (string str) { switch (str) { case "unlisted": return Visibility.UNLISTED; case "private": return Visibility.PRIVATE; case "direct": return Visibility.DIRECT; default: return Visibility.PUBLIC; } } public string get_name () { switch (this) { case UNLISTED: return _("Unlisted"); case PRIVATE: return _("Followers-only"); case DIRECT: return _("Direct"); default: return _("Public"); } } public string get_desc () { switch (this) { case UNLISTED: return _("Don\'t post to public timelines"); case PRIVATE: return _("Post to followers only"); case DIRECT: return _("Post to mentioned users only"); default: return _("Post to public timelines"); } } public string get_icon () { switch (this) { case UNLISTED: return "changes-allow-symbolic"; case PRIVATE: return "changes-prevent-symbolic"; case DIRECT: return "user-available-symbolic"; default: return "network-workgroup-symbolic"; } } public static Visibility[] all () { return {Visibility.PUBLIC, Visibility.UNLISTED, Visibility.PRIVATE, Visibility.DIRECT}; } } tootle-1.0-alpha2/src/Application.vala000066400000000000000000000134371374710545700177510ustar00rootroot00000000000000using Gtk; namespace Tootle { public errordomain Oopsie { USER, PARSING, INSTANCE, INTERNAL } public static Application app; public static Dialogs.MainWindow? window; public static Dialogs.NewAccount? new_account_window; public static Window window_dummy; public static Settings settings; public static Accounts accounts; public static Network network; public static Cache cache; public static Streams streams; public static bool start_hidden = false; public class Application : Gtk.Application { // These are used for the GTK Inspector public Settings app_settings { get {return Tootle.settings; } } public Accounts app_accounts { get {return Tootle.accounts; } } public Network app_network { get {return Tootle.network; } } public Cache app_cache { get {return Tootle.cache; } } public Streams app_streams { get {return Tootle.streams; } } public signal void refresh (); public signal void toast (string title); public signal void error (string title, string? text); public CssProvider css_provider = new CssProvider (); public CssProvider zoom_css_provider = new CssProvider (); public const GLib.OptionEntry[] app_options = { { "hidden", 0, 0, OptionArg.NONE, ref start_hidden, "Do not show main window on start", null }, { null } }; public const GLib.ActionEntry[] app_entries = { { "about", about_activated }, { "compose", compose_activated }, { "back", back_activated }, { "refresh", refresh_activated }, { "search", search_activated }, { "switch-timeline", switch_timeline_activated, "i" } }; construct { application_id = Build.DOMAIN; flags = ApplicationFlags.HANDLES_OPEN; } public string[] ACCEL_ABOUT = {"F1"}; public string[] ACCEL_NEW_POST = {"T"}; public string[] ACCEL_BACK = {"BackSpace", "Left"}; public string[] ACCEL_REFRESH = {"R", "F5"}; public string[] ACCEL_SEARCH = {"F"}; public string[] ACCEL_TIMELINE_0 = {"1"}; public string[] ACCEL_TIMELINE_1 = {"2"}; public string[] ACCEL_TIMELINE_2 = {"3"}; public string[] ACCEL_TIMELINE_3 = {"4"}; public static int main (string[] args) { Gtk.init (ref args); try { var opt_context = new OptionContext ("- Options"); opt_context.add_main_entries (app_options, null); opt_context.parse (ref args); } catch (GLib.OptionError e) { warning (e.message); } app = new Application (); return app.run (args); } protected override void startup () { base.startup (); Build.print_info (); Hdy.init (); settings = new Settings (); streams = new Streams (); accounts = new Accounts (); network = new Network (); cache = new Cache (); accounts.init (); app.error.connect ((title, msg) => { inform (Gtk.MessageType.ERROR, title, msg); }); window_dummy = new Window (); add_window (window_dummy); css_provider.load_from_resource (@"$(Build.RESOURCES)app.css"); StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), zoom_css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); set_accels_for_action ("app.about", ACCEL_ABOUT); set_accels_for_action ("app.compose", ACCEL_NEW_POST); set_accels_for_action ("app.back", ACCEL_BACK); set_accels_for_action ("app.refresh", ACCEL_REFRESH); set_accels_for_action ("app.search", ACCEL_SEARCH); set_accels_for_action ("app.switch-timeline(0)", ACCEL_TIMELINE_0); set_accels_for_action ("app.switch-timeline(1)", ACCEL_TIMELINE_1); set_accels_for_action ("app.switch-timeline(2)", ACCEL_TIMELINE_2); set_accels_for_action ("app.switch-timeline(3)", ACCEL_TIMELINE_3); add_action_entries (app_entries, this); } protected override void activate () { present_window (); if (start_hidden) { start_hidden = false; return; } } public override void open (File[] files, string hint) { foreach (File file in files) { string uri = file.get_uri (); if (new_account_window != null) new_account_window.redirect (uri); else warning (@"Received an unexpected uri to open: $uri"); return; } } public void present_window () { if (accounts.is_empty ()) { message ("Presenting NewAccount dialog"); if (new_account_window == null) new Dialogs.NewAccount (); } else { message ("Presenting MainWindow"); if (window == null) window = new Dialogs.MainWindow (this); window.present (); } } public bool on_window_closed () { if (!settings.work_in_background || accounts.is_empty ()) app.remove_window (window_dummy); return false; } void compose_activated () { new Dialogs.Compose (); } void back_activated () { window.back (); } void search_activated () { window.open_view (new Views.Search ()); } void refresh_activated () { refresh (); } void switch_timeline_activated (SimpleAction a, Variant? v) { int32 num = v.get_int32 (); window.switch_timeline (num); } void about_activated () { new Dialogs.About (); } public void inform (Gtk.MessageType type, string text, string? msg = null, Gtk.Window? win = window){ var dlg = new Gtk.MessageDialog ( win, Gtk.DialogFlags.MODAL, type, Gtk.ButtonsType.OK, null ); dlg.text = text; dlg.secondary_text = msg; dlg.transient_for = win; dlg.run (); dlg.destroy (); } public bool question (string text, string? msg = null, Gtk.Window? win = window) { var dlg = new Gtk.MessageDialog ( win, Gtk.DialogFlags.MODAL, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, null ); dlg.text = text; dlg.secondary_text = msg; dlg.transient_for = win; var i = dlg.run (); dlg.destroy (); return i == ResponseType.YES; } } } tootle-1.0-alpha2/src/Build.vala000066400000000000000000000022351374710545700165370ustar00rootroot00000000000000public class Build { public const string NAME = "@NAME@"; public const string VERSION = "@VERSION@"; public const string DOMAIN = "@EXEC_NAME@"; public const string RESOURCES = "@RESOURCES@"; public const string WEBSITE = "@WEBSITE@"; public const string SUPPORT_WEBSITE = "@SUPPORT_WEBSITE@"; public const string COPYRIGHT = "@COPYRIGHT@"; public const string PREFIX = "@PREFIX@"; // Please do not remove the credits below. You may add your own, but keep the existing ones intact. // TRANSLATORS: Replace this with your name. It will be displayed in the About dialog. public const string TRANSLATOR = _(" "); public static string[] get_authors () { return new string[] { "bleak_grey" }; } public static string[] get_artists () { return new string[] { "Tobias Bernard" }; } public static void print_info () { var os_name = get_os_info ("NAME"); var os_ver = get_os_info ("VERSION"); message (@"$NAME $VERSION"); message (@"Running on: $os_name $os_ver"); message (@"Build prefix: \"$PREFIX\""); } static string get_os_info (string key) { return GLib.Environment.get_os_info (key) ?? "Unknown"; } } tootle-1.0-alpha2/src/DateTime.vala000066400000000000000000000016211374710545700171720ustar00rootroot00000000000000using GLib; public class Tootle.DateTime { public static string humanize (string iso8601) { var date = new GLib.DateTime.from_iso8601 (iso8601, null); var now = new GLib.DateTime.now_local (); var delta = now.difference (date); if (delta <= TimeSpan.MINUTE) return _("Just now"); else if (delta < TimeSpan.HOUR) { var minutes = delta / TimeSpan.MINUTE; return _(@"$(minutes)m"); } else if (delta <= TimeSpan.DAY) { var hours = delta / TimeSpan.HOUR; return _(@"$(hours)h"); } else if (is_same_day (now, date.add_days (1))) { return _("Yesterday"); } else if (date.get_year () == now.get_year ()) { return date.format (_("%b %e")); } else { return date.format (_("%b %e, %Y")); } } public static bool is_same_day (GLib.DateTime d1, GLib.DateTime d2) { return (d1.get_day_of_year () == d2.get_day_of_year ()) && (d1.get_year () == d2.get_year ()); } } tootle-1.0-alpha2/src/Desktop.vala000066400000000000000000000052631374710545700171150ustar00rootroot00000000000000using GLib; public class Tootle.Desktop { // Open a URI in the user's default application public static bool open_uri (string uri) { message (@"Opening URI: $uri"); try { GLib.AppInfo.launch_default_for_uri (uri, null); } catch (Error e){ try { string[] spawn_args = {"/usr/bin/xdg-open", uri}; Process.spawn_sync (null, spawn_args, null, SpawnFlags.SEARCH_PATH, null, null, null); } catch (Error e){ warning (@"Can't open URI \"$uri\": $(e.message)"); app.error (_("Open this URL in your browser:\n\n%s").printf (uri), ""); return false; } } return true; } // Copy a string to the clipboard public static void copy (string str) { var display = window.get_display (); var clipboard = Gtk.Clipboard.get_for_display (display, Gdk.SELECTION_CLIPBOARD); clipboard.set_text (Widgets.RichLabel.restore_entities (str), -1); } public static string get_uri_host (string uri) { var p1 = uri; if ("//" in uri) p1 = uri.split ("//")[1]; return p1.split ("/")[0]; } // Download a file from the web to a user's configured Downloads folder public delegate void DownloadCallback (string path); public static void download (string url, owned DownloadCallback cb, owned Network.ErrorCallback ecb) { message (@"Downloading file: $url..."); var file_name = Path.get_basename (url); var dir_name = Path.get_dirname (url); var dir_path = Path.build_path ( Path.DIR_SEPARATOR_S, Environment.get_user_special_dir (UserDirectory.DOWNLOAD), Build.NAME, get_uri_host (dir_name)); var file_path = Path.build_path ( Path.DIR_SEPARATOR_S, dir_path, str_hash (dir_name).to_string () + file_name); new Request.GET (url) .then ((sess, msg) => { try { var dir = File.new_for_path (dir_path); if (!dir.query_exists ()) dir.make_directory (); var file = File.new_for_path (file_path); if (!file.query_exists ()) { var data = msg.response_body.data; FileOutputStream stream = file.create (FileCreateFlags.PRIVATE); stream.write (data); } message (@"OK: File written to: $file_path"); cb (file_path); } catch (Error e) { warning ("Error: %s\n", e.message); ecb (0, e.message); } }) .on_error ((owned) ecb) .exec (); } public static string fallback_icon (string normal, string fallback, string fallback2 = "broken") { var theme = Gtk.IconTheme.get_default (); if (theme.has_icon (normal)) return normal; else return theme.has_icon (fallback) ? fallback : fallback2; } public static Gdk.Pixbuf icon_to_pixbuf (string name) { var theme = Gtk.IconTheme.get_default (); return theme.load_icon (name, 32, Gtk.IconLookupFlags.GENERIC_FALLBACK); } } tootle-1.0-alpha2/src/Dialogs/000077500000000000000000000000001374710545700162135ustar00rootroot00000000000000tootle-1.0-alpha2/src/Dialogs/About.vala000066400000000000000000000012441374710545700201330ustar00rootroot00000000000000using Gtk; public class Tootle.Dialogs.About : AboutDialog { public About () { Object ( transient_for: window, modal: true, logo_icon_name: Build.DOMAIN, program_name: Build.NAME, version: Build.VERSION, website: Build.SUPPORT_WEBSITE, website_label: _("Report an issue"), license_type: License.GPL_3_0_ONLY, copyright: Build.COPYRIGHT ); // For some obscure reason, const arrays produce duplicates in the credits. // Static functions seem to avoid this peculiar behavior. authors = Build.get_authors (); artists = Build.get_artists (); translator_credits = Build.TRANSLATOR != " " ? Build.TRANSLATOR : null; present (); } } tootle-1.0-alpha2/src/Dialogs/Compose.vala000066400000000000000000000173461374710545700205000ustar00rootroot00000000000000using Gtk; using Gee; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/dialogs/compose.ui")] public class Tootle.Dialogs.Compose : Hdy.Window { public API.Status? status { get; construct set; } public string style_class { get; construct set; } public string label { get; construct set; } public bool working { get; set; default = false; } public int char_limit { get { return 500; } } [GtkChild] Hdy.ViewSwitcherTitle mode_switcher; [GtkChild] Button commit; [GtkChild] Stack commit_stack; [GtkChild] Revealer cw_revealer; [GtkChild] ToggleButton cw_button; [GtkChild] Entry cw; [GtkChild] Label counter; [GtkChild] MenuButton visibility_button; [GtkChild] Image visibility_icon; Widgets.VisibilityPopover visibility_popover; [GtkChild] TextView content; [GtkChild] Stack mode; [GtkChild] ListBox media_list; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/compose_attachment.ui")] protected class MediaItem : Gtk.ListBoxRow { Compose dialog; public API.Attachment? entity { get; set; } public string? source { get; set; } [GtkChild] public Label title_label; [GtkChild] public Entry description; [GtkChild] public Stack icon; public MediaItem (Compose dialog, string? source, API.Attachment? entity) { this.dialog = dialog; this.source = source; this.entity = entity; if (source != null) message (@"Attached uri: $source"); else { message (@"Attached immutable $(entity.id)"); description.text = entity.description ?? " "; description.sensitive = false; } dialog.set_media_mode (true); title_label.label = GLib.Path.get_basename (source ?? entity.url).replace ("%20", " "); } [GtkCallback] void on_remove () { var remove = app.question ( _(@"Delete \"%s\"?").printf (title_label.label), _("This action cannot be reverted."), this.dialog ); if (remove) destroy (); } } construct { transient_for = window; notify["working"].connect (on_state_change); mode_switcher.title = label; commit.get_style_context ().add_class (style_class); visibility_popover = new Widgets.VisibilityPopover.with_button (visibility_button); visibility_popover.bind_property ("selected", visibility_icon, "icon-name", BindingFlags.SYNC_CREATE, (b, src, ref target) => { target.set_string (((API.Visibility)src).get_icon ()); return true; }); cw_button.bind_property ("active", cw_revealer, "reveal_child", BindingFlags.SYNC_CREATE); cw.buffer.deleted_text.connect (() => validate ()); cw.buffer.inserted_text.connect (() => validate ()); content.buffer.changed.connect (validate); if (status.has_spoiler) { cw.text = status.spoiler_text; cw_button.active = true; } content.buffer.text = Html.remove_tags (status.content); validate (); set_media_mode (status.has_media ()); show (); content.grab_focus (); } public Compose (API.Status template = new API.Status.empty ()) { Object ( status: template, style_class: STYLE_CLASS_SUGGESTED_ACTION, label: _("Compose") ); message ("Composing status template"); set_visibility (status.visibility); } public Compose.redraft (API.Status status) { Object ( status: status, style_class: STYLE_CLASS_DESTRUCTIVE_ACTION, label: _("Redraft") ); message (@"Redrafting status $(status.id)"); set_visibility (status.visibility); status.media_attachments.@foreach (a => { media_list.insert (new MediaItem (this, null, a), 0); return true; }); } public Compose.reply (API.Status to) { var template = new API.Status.empty (); template.in_reply_to_id = to.id.to_string (); template.in_reply_to_account_id = to.account.id.to_string (); template.spoiler_text = to.spoiler_text; template.content = to.formal.get_reply_mentions (); Object ( status: template, style_class: STYLE_CLASS_SUGGESTED_ACTION, label: _("Reply") ); message (@"Replying to status $(status.in_reply_to_id)"); set_visibility (to.visibility); } void set_visibility (API.Visibility v) { visibility_popover.selected = v; visibility_popover.invalidate (); } void set_media_mode (bool has_media) { mode_switcher.view_switcher_enabled = has_media; } [GtkCallback] void validate () { var remain = char_limit - content.buffer.get_char_count (); if (cw_button.active) remain -= (int) cw.buffer.get_length (); counter.label = remain.to_string (); commit.sensitive = remain >= 0; } void on_state_change (ParamSpec? p) { commit_stack.visible_child_name = working ? "working" : "ready"; commit.sensitive = !working; media_list.@foreach (w => { var item = w as MediaItem; if (item != null) item.icon.visible_child_name = working ? "upload" : "new"; }); } [GtkCallback] void on_select_media () { var filter = new Gtk.FileFilter (); foreach (string mime in API.Attachment.SUPPORTED_MIMES) filter.add_mime_type (mime); var chooser = new Gtk.FileChooserNative ( _("Select media"), this, Gtk.FileChooserAction.OPEN, _("_Open"), _("_Cancel") ); chooser.select_multiple = true; chooser.set_filter (filter); if (chooser.run () == Gtk.ResponseType.ACCEPT) { foreach (unowned string uri in chooser.get_uris ()) media_list.insert (new MediaItem (this, uri, null), 0); mode.visible_child_name = "media"; } } [GtkCallback] void on_media_list_row_activated (Widget w) { if (!(w is MediaItem)) on_select_media (); } [GtkCallback] void on_close () { destroy (); } void on_error (int32 code, string reason) { //TODO: display errors warning (reason); working = false; } [GtkCallback] void on_commit () { working = true; transaction.begin ((obj, res) => { try { transaction.end (res); on_close (); } catch (Error e) { working = false; on_error (0, e.message); } }); } async void transaction () throws Error { if (status.id != "") { message ("Removing old status..."); yield status.annihilate ().await (); } Gee.ArrayList pending_media = new Gee.ArrayList(); Gee.ArrayList media_ids = new Gee.ArrayList(); media_list.@foreach (w => { var item = w as MediaItem; if (item != null) pending_media.add (item); }); var media_param = ""; if (!pending_media.is_empty) { message (@"Processing $(pending_media.size) attachments..."); if (!status.has_media ()) status.media_attachments = new ArrayList(); foreach (MediaItem item in pending_media) { if (item.entity != null) { message (@"Adding immutable media: $(item.entity.id)..."); media_ids.add (item.entity.id); } else { mode.visible_child_name = "media"; var entity = yield API.Attachment.upload ( item.source, item.title_label.label, item.description.text); media_ids.add (entity.id); } item.icon.visible_child_name = "ok"; } media_param = Request.array2string (media_ids, "media_ids"); media_param += "&"; } message ("Publishing status..."); status.content = content.buffer.text; status.spoiler_text = cw.text; var req = new Request.POST (@"/api/v1/statuses?$media_param") .with_account (accounts.active) .with_param ("visibility", visibility_popover.selected.to_string ()) .with_param ("status", Html.uri_encode (status.content)); if (cw_button.active) { req.with_param ("sensitive", "true"); req.with_param ("spoiler_text", Html.uri_encode (cw.text)); } if (status.in_reply_to_id != null) req.with_param ("in_reply_to_id", status.in_reply_to_id); if (status.in_reply_to_account_id != null) req.with_param ("in_reply_to_account_id", status.in_reply_to_account_id); yield req.await (); var node = network.parse_node (req); var status = API.Status.from (node); message (@"OK: Published with ID $(status.id)"); on_close (); } } tootle-1.0-alpha2/src/Dialogs/ISavedWindow.vala000066400000000000000000000014361374710545700214270ustar00rootroot00000000000000using Gtk; public interface Tootle.Dialogs.ISavedWindow : Window { public void restore_state () { var settings = new Settings (); configure_window (settings); configure_event.connect ((ev) => on_configure (ev, settings)); } public bool on_configure (Gdk.EventConfigure event, Settings settings) { int x, y, w, h; get_position (out x, out y); get_size (out w, out h); settings.window_x = x; settings.window_y = y; settings.window_w = w; settings.window_h = h; return false; } public void configure_window (Settings settings) { var x = settings.window_x; var y = settings.window_y; var w = settings.window_w; var h = settings.window_h; if (x + y > 0) this.move (x, y); if (h + w > 0) { this.default_width = w; this.default_height = h; } } } tootle-1.0-alpha2/src/Dialogs/ListEditor.vala000066400000000000000000000142761374710545700211540ustar00rootroot00000000000000using Gtk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/dialogs/list_editor.ui")] public class Tootle.Dialogs.ListEditor: Hdy.Window { [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/list_editor_item.ui")] class Item : ListBoxRow { public ListEditor editor { get; construct set; } public API.Account acc { get; construct set; } public bool committed { get; construct set; } [GtkChild] Widgets.RichLabel label; [GtkChild] Widgets.RichLabel handle; [GtkChild] ToggleButton status; public Item (ListEditor editor, API.Account acc, bool committed) { this.editor = editor; this.acc = acc; this.committed = committed; acc.bind_property ("display-name", label, "text", BindingFlags.SYNC_CREATE); acc.bind_property ("handle", handle, "text", BindingFlags.SYNC_CREATE); status.active = committed; status.sensitive = true; } [GtkCallback] void on_toggled () { if (!status.sensitive) return; if (status.active) { debug (@"To add: $(acc.id)"); editor.to_add.add (acc.id); editor.to_remove.remove (acc.id); } else { debug (@"To remove: $(acc.id)"); editor.to_add.remove (acc.id); editor.to_remove.add (acc.id); } committed = status.active; if (!editor.working) editor.dirty = true; } } public API.List list { get; set; } public bool working { get; set; default = false; } public bool exists { get; set; default = false; } public bool dirty { get; set; default = false; } Soup.Message? search_req = null; public Gee.ArrayList to_add = new Gee.ArrayList (); public Gee.ArrayList to_remove = new Gee.ArrayList (); [GtkChild] Button save_btn; [GtkChild] Stack save_btn_stack; [GtkChild] Entry name_entry; [GtkChild] SearchEntry search_entry; [GtkChild] ListBox listbox; [GtkChild] InfoBar infobar; [GtkChild] Label infobar_label; public signal void done (); construct { transient_for = window; show (); } public ListEditor.empty () { var obj = new API.List () { title = _("Untitled") }; Object (list: obj); init (); } public ListEditor (API.List list) { Object (list: list, working: true, exists: true); init (); new Request.GET (@"/api/v1/lists/$(list.id)/accounts") .with_account (accounts.active) .with_ctx (this) .on_error (on_error) .then ((sess, msg) => { Network.parse_array (msg, node => { var acc = API.Account.from (node); add_account (acc, true); }); working = false; }) .exec (); } void init () { notify["working"].connect (on_state_changed); list.bind_property ("title", name_entry, "text", BindingFlags.SYNC_CREATE); ulong dirty_sigid = 0; dirty_sigid = name_entry.changed.connect (() => { dirty = true; name_entry.disconnect (dirty_sigid); }); on_state_changed (null); } void on_state_changed (ParamSpec? p) { save_btn_stack.visible_child_name = working ? "working" : "done"; save_btn.sensitive = search_entry.sensitive = name_entry.sensitive = !working; } void on_error (int32 code, string msg) { warning (msg); infobar_label.label = msg; infobar.revealed = true; } [GtkCallback] void infobar_response (int i) { infobar.revealed = false; } void request_search (string q) { debug (@"Searching for: \"$q\"..."); if (search_req != null) { network.cancel (search_req); search_req = null; } search_req = new Request.GET ("/api/v1/accounts/search") .with_account (accounts.active) .with_ctx (this) .with_param ("resolve", "false") .with_param ("limit", "8") .with_param ("following", "true") .with_param ("q", q) .then ((sess, msg) => { Network.parse_array (msg, node => { var acc = API.Account.from (node); add_account (acc, false, 0); }); }) .on_error (on_error) .exec (); } void add_account (API.Account acc, bool added, int order = -1) { var exists = false; listbox.@foreach (w => { var i = w as Item; if (i != null) { if (i.acc.id == acc.id) exists = true; } }); if (!exists) { var item = new Item (this, acc, added); listbox.insert (item, order); } } void invalidate () { listbox.@foreach (w => { var i = w as Item; if (i != null) { if (!i.committed) i.destroy (); } }); } [GtkCallback] void validate () { var has_title = name_entry.text.replace (" ", "") != ""; save_btn.sensitive = has_title; } [GtkCallback] void on_cancel_clicked () { if (dirty) { var yes = app.question ( _("Discard changes?"), _("You need to save the list if you want to keep them."), this ); if (yes) destroy (); } else destroy (); } [GtkCallback] void on_search_changed () { var q = search_entry.text.chug ().chomp (); if (q.char_count () < 3) invalidate (); else if (q != "") { invalidate (); request_search (q); } } [GtkCallback] void on_save_clicked () { working = true; transaction.begin ((obj, res) => { try { transaction.end (res); done (); destroy (); } catch (Error e) { working = false; on_error (0, e.message); } }); } async void transaction () throws Error { if (!exists) { message ("Creating list..."); var req = new Request.POST ("/api/v1/lists") .with_account (accounts.active) .with_param ("title", name_entry.text); yield req.await (); message ("Received new List entity"); var node = network.parse_node (req); list = API.List.from (node); } else { message ("Updating list title..."); yield new Request.PUT (@"/api/v1/lists/$(list.id)") .with_account (accounts.active) .with_param ("title", name_entry.text) .await (); } if (!to_add.is_empty) { message ("Adding accounts to list..."); var id_array = Request.array2string (to_add, "account_ids"); yield new Request.POST (@"/api/v1/lists/$(list.id)/accounts/?$id_array") .with_account (accounts.active) .await (); } if (!to_remove.is_empty) { message ("Removing accounts from list..."); var id_array = Request.array2string (to_remove, "account_ids"); yield new Request.DELETE (@"/api/v1/lists/$(list.id)/accounts/?$id_array") .with_account (accounts.active) .await (); } message ("OK: List updated"); list.title = name_entry.text; } } tootle-1.0-alpha2/src/Dialogs/MainWindow.vala000066400000000000000000000047151374710545700211430ustar00rootroot00000000000000using Gtk; using Gdk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/dialogs/main.ui")] public class Tootle.Dialogs.MainWindow: Hdy.Window, ISavedWindow { public const string ZOOM_CLASS = "ttl-scalable"; [GtkChild] Hdy.Deck deck; Views.Base? last_view = null; construct { var gtk_settings = Gtk.Settings.get_default (); settings.bind_property ("dark-theme", gtk_settings, "gtk-application-prefer-dark-theme", BindingFlags.SYNC_CREATE); settings.notify["post-text-size"].connect (() => on_zoom_level_changed ()); on_zoom_level_changed (); deck.notify["visible-child"].connect (on_view_changed); button_press_event.connect (on_button_press); restore_state (); } public MainWindow (Gtk.Application app) { Object ( application: app, icon_name: Build.DOMAIN, title: Build.NAME, resizable: true, window_position: WindowPosition.CENTER ); open_view (new Views.Main ()); } public Views.Base open_view (Views.Base view) { deck.add (view); deck.visible_child = view; return view; } public bool back () { var children = deck.get_children (); unowned var current = children.find (deck.visible_child); if (current != null) { unowned var prev = current.prev; if (current.prev != null) { deck.visible_child = prev.data; (current.data as Views.Base).unused = true; Timeout.add (deck.transition_duration, clean_unused_views); } } return true; } bool clean_unused_views () { deck.get_children ().foreach (c => { var view = c as Views.Base; if (view != null && view.unused) view.destroy (); }); return Source.REMOVE; } public override bool delete_event (Gdk.EventAny event) { window = null; return app.on_window_closed (); } [Deprecated] public void switch_timeline (int32 num) { } bool on_button_press (EventButton ev) { if (ev.button == 8) return back (); return false; } void on_zoom_level_changed () { try { var scale = settings.post_text_size; var css = ""; if (scale > 100) { css =""" .%s label { font-size: %i%; } """.printf (ZOOM_CLASS, scale); } app.zoom_css_provider.load_from_data (css); } catch (Error e) { warning (@"Can't set zoom level: $(e.message)"); } } void on_view_changed () { var view = deck.visible_child as Views.Base; if (last_view != null) { last_view.current = false; last_view.on_hidden (); } if (view != null) { view.current = true; view.on_shown (); } last_view = view; } } tootle-1.0-alpha2/src/Dialogs/NewAccount.vala000066400000000000000000000136461374710545700211400ustar00rootroot00000000000000using Gtk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/dialogs/new_account.ui")] public class Tootle.Dialogs.NewAccount: Hdy.Window { const string scopes = "read%20write%20follow"; protected bool is_working { get; set; default = false; } protected string? redirect_uri { get; set; } protected bool use_auto_auth { get; set; default = true; } protected InstanceAccount account { get; set; default = new InstanceAccount.empty (""); } [GtkChild] Button back_button; [GtkChild] Button next_button; [GtkChild] Stack stack; [GtkChild] Box instance_step; [GtkChild] Box code_step; [GtkChild] Box done_step; [GtkChild] Entry instance_entry; [GtkChild] Entry code_entry; [GtkChild] Label code_label; [GtkChild] Label hello_label; public NewAccount () { Object (transient_for: window); StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), app.css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); reset (); present (); new_account_window = this; bind_property ("use-auto-auth", code_label, "visible", BindingFlags.SYNC_CREATE); } public override bool delete_event (Gdk.EventAny event) { new_account_window = null; return app.on_window_closed (); } string setup_redirect_uri () { try { if (!use_auto_auth) throw new Oopsie.INTERNAL ("Using manual auth method"); GLib.Process.spawn_command_line_sync (@"xdg-mime default $(Build.DOMAIN).desktop x-scheme-handler/tootle"); message ("Successfully associated MIME type for automatic authorization"); return "tootle://auth_code"; } catch (Error e) { warning (e.message); use_auto_auth = false; return "urn:ietf:wg:oauth:2.0:oob"; } } [GtkCallback] bool on_activate_code_label_link (string uri) { use_auto_auth = false; reset (); return true; } void reset () { message ("Reset state"); account = new InstanceAccount.empty (account.instance); stack.visible_child = instance_step; invalidate (); } void invalidate () { next_button.sensitive = !is_working; next_button.label = stack.visible_child == done_step ? _("Close") : _("Next"); back_button.label = stack.visible_child == done_step ? _("Add Another") : _("Back"); back_button.visible = stack.visible_child != instance_step; } void oopsie (string title, string msg = "") { warning (@"$title $msg"); app.inform (Gtk.MessageType.ERROR, title, msg, this); } async void step () throws Error { if (stack.visible_child == done_step) { if (accounts.is_empty ()) accounts.switch_account (0); app.present_window (); destroy (); return; } if (stack.visible_child == instance_step) setup_instance (); if (account.client_secret == null || account.client_id == null) { yield register_client (); return; } yield request_token (); } void setup_instance () throws Error { message ("Checking instance URL"); var str = instance_entry.text .replace ("/", "") .replace (":", "") .replace ("https", "") .replace ("http", ""); account.instance = "https://"+str; instance_entry.text = str; if (str.char_count () <= 0 || !("." in account.instance)) throw new Oopsie.USER (_("Please enter a valid instance URL")); } async void register_client () throws Error { message ("Registering client"); var msg = new Request.POST (@"/api/v1/apps") .with_account (account) .with_param ("client_name", Build.NAME) .with_param ("website", Build.WEBSITE) .with_param ("scopes", scopes) .with_param ("redirect_uris", redirect_uri = setup_redirect_uri ()); yield msg.await (); var root = network.parse (msg); account.client_id = root.get_string_member ("client_id"); account.client_secret = root.get_string_member ("client_secret"); message ("OK: Instance registered client"); stack.visible_child = code_step; open_confirmation_page (); } void open_confirmation_page () { message ("Opening permission request page"); var pars = @"scope=$scopes&response_type=code&redirect_uri=$redirect_uri&client_id=$(account.client_id)"; var url = @"$(account.instance)/oauth/authorize?$pars"; Desktop.open_uri (url); } async void request_token () throws Error { if (code_entry.text.char_count () <= 10) throw new Oopsie.USER (_("Please enter a valid authorization code")); message ("Requesting access token"); var token_req = new Request.POST (@"/oauth/token") .with_account (account) .with_param ("client_id", account.client_id) .with_param ("client_secret", account.client_secret) .with_param ("redirect_uri", redirect_uri) .with_param ("grant_type", "authorization_code") .with_param ("code", code_entry.text); yield token_req.await (); var root = network.parse (token_req); account.access_token = root.get_string_member ("access_token"); if (account.access_token == null) throw new Oopsie.INSTANCE (_("Instance failed to authorize the access token")); message ("Trying to get the user profile"); var profile_req = new Request.GET ("/api/v1/accounts/verify_credentials") .with_account (account); yield profile_req.await (); var node = network.parse_node (profile_req); var profile = API.Account.from (node); account.patch (profile); message ("Saving account"); accounts.add (account); hello_label.label = _("Hello, %s!").printf (account.handle); stack.visible_child = done_step; } public void redirect (string uri) { present (); message (@"Received uri: $uri"); var query = new Soup.URI (uri).get_query (); var split = query.split ("="); var code = split[1]; code_entry.text = code; is_working = false; on_next_clicked (); } [GtkCallback] void on_next_clicked () { if (is_working) return; is_working = true; invalidate (); step.begin ((obj, res) => { try { step.end (res); } catch (Oopsie.INSTANCE e) { oopsie (_("Server returned an error"), e.message); } catch (Error e) { oopsie (e.message); } is_working = false; invalidate (); }); } [GtkCallback] void on_back_clicked () { reset (); } } tootle-1.0-alpha2/src/Dialogs/Preferences.vala000066400000000000000000000036461374710545700213320ustar00rootroot00000000000000using Gtk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/dialogs/preferences.ui")] public class Tootle.Dialogs.Preferences : Hdy.PreferencesWindow { [GtkChild] Switch dark_theme; [GtkChild] Switch autostart; [GtkChild] Switch work_in_background; [GtkChild] Hdy.ComboRow default_post_visibility; [GtkChild] SpinButton timeline_page_size; [GtkChild] SpinButton post_text_size; [GtkChild] Switch live_updates; [GtkChild] Switch public_live_updates; construct { transient_for = window; default_post_visibility.set_for_enum (typeof (API.Visibility), e => { var i = e.get_value (); var vis = API.Visibility.all ()[i]; default_post_visibility.subtitle = vis.get_desc (); return vis.get_name (); }); bind (); show (); } public static void open () { new Preferences (); } void bind () { settings.bind ("dark-theme", dark_theme, "active", SettingsBindFlags.DEFAULT); settings.bind ("autostart", autostart, "active", SettingsBindFlags.DEFAULT); settings.bind ("work-in-background", work_in_background, "active", SettingsBindFlags.DEFAULT); default_post_visibility.selected_index = (int) settings.default_post_visibility; default_post_visibility.notify["selected-index"].connect (p => { var i = default_post_visibility.selected_index; settings.default_post_visibility = (API.Visibility) i; }); settings.bind ("timeline-page-size", timeline_page_size.adjustment, "value", SettingsBindFlags.DEFAULT); settings.bind ("post-text-size", post_text_size.adjustment, "value", SettingsBindFlags.DEFAULT); settings.bind ("live-updates", live_updates, "active", SettingsBindFlags.DEFAULT); settings.bind ("public-live-updates", public_live_updates, "active", SettingsBindFlags.DEFAULT); } } tootle-1.0-alpha2/src/Drawing.vala000066400000000000000000000007261374710545700170760ustar00rootroot00000000000000using Gdk; using GLib; public class Tootle.Drawing { public static void draw_rounded_rect (Cairo.Context ctx, double x, double y, double w, double h, double r) { double degr = Math.PI / 180.0; ctx.new_sub_path (); ctx.arc (x + w - r, y + r, r, -90 * degr, 0 * degr); ctx.arc (x + w - r, y + h - r, r, 0 * degr, 90 * degr); ctx.arc (x + r, y + h - r, r, 90 * degr, 180 * degr); ctx.arc (x + r, y + r, r, 180 * degr, 270 * degr); ctx.close_path (); } } tootle-1.0-alpha2/src/Html.vala000066400000000000000000000022721374710545700164050ustar00rootroot00000000000000public class Tootle.Html { public const string FALLBACK_TEXT = _("[ There was an error parsing this text :c ]"); public static string remove_tags (string content) { try { var fixed_paragraphs = simplify (content); var all_tags = new Regex ("<(.|\n)*?>", RegexCompileFlags.CASELESS); return Widgets.RichLabel.restore_entities (all_tags.replace (fixed_paragraphs, -1, 0, "")); } catch (Error e) { warning (e.message); return FALLBACK_TEXT; } } public static string simplify (string str) { try { var divided = str .replace("
", "\n") .replace("
", "") .replace("
", "\n") .replace("

", "") .replace("

", "\n\n"); var html_params = new Regex ("(class|target|rel)=\"(.|\n)*?\"", RegexCompileFlags.CASELESS); var simplified = html_params.replace (divided, -1, 0, ""); while (simplified.has_suffix ("\n")) simplified = simplified.slice (0, simplified.last_index_of ("\n")); return simplified; } catch (Error e) { warning (e.message); return FALLBACK_TEXT; } } public static string uri_encode (string str) { var restored = Widgets.RichLabel.restore_entities (str); return Soup.URI.encode (restored, ";&+"); } } tootle-1.0-alpha2/src/InstanceAccount.vala000066400000000000000000000043561374710545700205670ustar00rootroot00000000000000using GLib; using Gee; public class Tootle.InstanceAccount : API.Account, IStreamListener { public string? instance { get; set; } public string? client_id { get; set; } public string? client_secret { get; set; } public string? access_token { get; set; } public int64 last_seen_notification { get; set; default = 0; } public bool has_unread_notifications { get; set; default = false; } public ArrayList cached_notifications { get; set; default = new ArrayList (); } protected string? stream; public new string handle { owned get { return @"@$username@$domain"; } } public new static InstanceAccount from (Json.Node node) throws Error { return Entity.from_json (typeof (InstanceAccount), node) as InstanceAccount; } public InstanceAccount () { on_notification.connect (show_notification); } ~InstanceAccount () { unsubscribe (); } public InstanceAccount.empty (string instance){ Object (id: "", instance: instance); } public InstanceAccount.from_account (API.Account account) { Object (id: account.id); patch (account); } public bool is_current () { return accounts.active.access_token == access_token; } public string get_stream_url () { return @"$instance/api/v1/streaming/?stream=user&access_token=$access_token"; } public void subscribe () { streams.subscribe (get_stream_url (), this, out stream); } public void unsubscribe () { streams.unsubscribe (stream, this); } public async Entity resolve (string url) throws Error { message (@"Resolving URL: \"$url\"..."); var results = yield API.SearchResults.request (url, this); var entity = results.first (); message (@"Found $(entity.get_class ().get_name ())"); return entity; } void show_notification (API.Notification obj) { var title = Html.remove_tags (obj.kind.get_desc (obj.account)); var notification = new GLib.Notification (title); if (obj.status != null) { var body = ""; body += domain; body += "\n"; body += Html.remove_tags (obj.status.content); notification.set_body (body); } app.send_notification (app.application_id + ":" + obj.id.to_string (), notification); if (obj.kind == API.NotificationType.WATCHLIST) { cached_notifications.add (obj); accounts.save (); } } } tootle-1.0-alpha2/src/Request.vala000066400000000000000000000055241374710545700171340ustar00rootroot00000000000000using Soup; using Gee; public class Tootle.Request : Soup.Message { public string url { set; get; } Network.SuccessCallback? cb; Network.ErrorCallback? error_cb; HashMap? pars; weak InstanceAccount? account; bool needs_token = false; weak Gtk.Widget? ctx; bool has_ctx = false; public Request.GET (string url) { Object (method: "GET", url: url); } public Request.POST (string url) { Object (method: "POST", url: url); } public Request.PUT (string url) { Object (method: "PUT", url: url); } public Request.DELETE (string url) { Object (method: "DELETE", url: url); } public Request then (owned Network.SuccessCallback cb) { this.cb = (owned) cb; return this; } public Request then_parse_array (owned Network.NodeCallback _cb) { this.cb = (sess, msg) => { Network.parse_array (msg, (owned) _cb); }; return this; } public Request with_ctx (Gtk.Widget ctx) { this.has_ctx = true; this.ctx = ctx; this.ctx.destroy.connect (() => { network.cancel (this); this.ctx = null; }); return this; } public Request on_error (owned Network.ErrorCallback cb) { this.error_cb = (owned) cb; return this; } public Request with_account (InstanceAccount? account = null) { this.needs_token = true; if (account != null) this.account = account; return this; } public Request with_param (string name, string val) { if (pars == null) pars = new HashMap (); pars[name] = val; return this; } public Request exec () { var parameters = ""; if (pars != null) { if ("?" in url) parameters = ""; else parameters = "?"; var parameters_counter = 0; pars.@foreach (entry => { parameters_counter++; var key = (string) entry.key; var val = (string) entry.value; parameters += @"$key=$val"; if (parameters_counter < pars.size) parameters += "&"; return true; }); } if (needs_token) { if (account == null) { warning (@"No account was specified or found for $method: $url$parameters"); return this; } request_headers.append ("Authorization", @"Bearer $(account.access_token)"); } if (!("://" in url)) url = account.instance + url; uri = new URI (url + parameters); network.queue (this, (owned) cb, (owned) error_cb); return this; } public async Request await () throws Error { string? error = null; this.error_cb = (code, reason) => { error = reason; await.callback (); }; this.cb = (sess, msg) => { await.callback (); }; this.exec (); yield; if (error != null) throw new Oopsie.INSTANCE (error); else return this; } public static string array2string (Gee.ArrayList array, string key) { var result = ""; array.@foreach (i => { result += @"$key[]=$i"; if (array.index_of (i)+1 != array.size) result += "&"; return true; }); return result; } } tootle-1.0-alpha2/src/Services/000077500000000000000000000000001374710545700164145ustar00rootroot00000000000000tootle-1.0-alpha2/src/Services/Accounts.vala000066400000000000000000000063251374710545700210460ustar00rootroot00000000000000using Gee; public class Tootle.Accounts : GLib.Object { private string dir_path; private string file_path; public ArrayList saved { get; set; default = new ArrayList (); } public InstanceAccount? active { get; set; } construct { dir_path = @"$(GLib.Environment.get_user_config_dir ())/$(app.application_id)"; file_path = @"$dir_path/accounts.json"; } public void switch_account (int id) { var acc = saved.@get (id); message (@"Switching to $(acc.handle)..."); new Request.GET ("/api/v1/accounts/verify_credentials") .with_account (acc) .then ((sess, mess) => { var node = network.parse_node (mess); var updated = API.Account.from (node); acc.patch (updated); message ("OK: Token is valid"); active = acc; settings.current_account = id; }) .on_error ((code, reason) => { warning ("Token invalid!"); app.error ( _("Network Error"), _("The instance has invalidated this session. Please sign in again.\n\n%s").printf (reason) ); }) .exec (); } public void add (InstanceAccount account) { message (@"Adding new account: $(account.handle)"); saved.add (account); save (); switch_account (saved.size - 1); account.subscribe (); } public void remove (InstanceAccount account) { account.unsubscribe (); saved.remove (account); saved.notify_property ("size"); if (saved.size < 1) active = null; else { var id = settings.current_account - 1; if (id > saved.size - 1) id = saved.size - 1; else if (id < saved.size - 1) id = 0; switch_account (id); } save (); if (is_empty ()) new Dialogs.NewAccount (); } public bool is_empty () { return saved.size == 0; } public void init () { save (false); load (); if (!is_empty ()) switch_account (settings.current_account); } public void save (bool overwrite = true) { try { var dir = File.new_for_path (dir_path); if (!dir.query_exists ()) dir.make_directory (); var file = File.new_for_path (file_path); if (file.query_exists () && !overwrite) return; var builder = new Json.Builder (); builder.begin_array (); saved.foreach ((acc) => { var node = acc.to_json (); builder.add_value (node); return true; }); builder.end_array (); var generator = new Json.Generator (); generator.set_root (builder.get_root ()); var data = generator.to_data (null); if (file.query_exists ()) file.@delete (); FileOutputStream stream = file.create (FileCreateFlags.PRIVATE); stream.write (data.data); message ("Saved accounts"); } catch (Error e){ warning (e.message); } } private void load () { try { uint8[] data; string etag; var file = File.new_for_path (file_path); file.load_contents (null, out data, out etag); var contents = (string) data; var parser = new Json.Parser (); parser.load_from_data (contents, -1); var array = parser.get_root ().get_array (); array.foreach_element ((_arr, _i, node) => { var account = InstanceAccount.from (node); if (account != null) { saved.add (account); account.subscribe (); } }); message (@"Loaded $(saved.size) accounts"); } catch (Error e){ warning (e.message); } } } tootle-1.0-alpha2/src/Services/Cache.vala000066400000000000000000000102361374710545700202660ustar00rootroot00000000000000using Gee; using Gdk; public class Tootle.Cache : GLib.Object { protected HashTable items { get; set; } protected HashTable items_in_progress { get; set; } protected uint size { get { return items.size (); } } construct { items = new HashTable (GLib.str_hash, GLib.str_equal); items_in_progress = new HashTable (GLib.str_hash, GLib.str_equal); } public delegate void CachedResultCallback (Reference? result); public struct Reference { public string key; public weak Pixbuf? data; public bool loading; } protected class Item : GLib.Object { public Pixbuf data { get; construct set; } public int references { get; construct set; } public Item (Pixbuf d, int r) { Object (data: d, references: r); } } public void unload (ref Reference? r) { if (r == null) return; if (r.data == null) return; var item = items[r.key]; if (item == null) return; item.references--; if (item.references <= 0) { // message (@"[X] $(r.key)"); items.remove (r.key); items_in_progress.remove (r.key); } // else { // message (@"[-] $(r.key) - $(item.references)"); // } r = null; } public void load (string? url, owned CachedResultCallback cb) { if (url == null) { cb (null); return; } var key = url; if (items.contains (key)) { var item = items.@get (key); item.references++; // message (@"[+] $key - $(item.references)"); cb (Reference () { data = item.data, key = key, loading = false }); return; } //var item = items.@get (key); var msg = items_in_progress.@get (key); if (msg == null) { msg = new Soup.Message ("GET", url); ulong id = 0; id = msg.finished.connect (() => { Pixbuf? pixbuf = null; try { var code = msg.status_code; if (code != Soup.Status.OK) { var error = network.describe_error (code); throw new Oopsie.INSTANCE (@"Server returned $error"); } var data = msg.response_body.flatten ().data; var stream = new MemoryInputStream.from_data (data); pixbuf = new Pixbuf.from_stream (stream); stream.close (); } catch (Error e) { warning (@"\"$url\" -> Pixbuf: FAIL ($(e.message))"); pixbuf = Desktop.icon_to_pixbuf ("image-x-generic-symbolic"); } // message (@"[*] $key"); items[key] = new Item (pixbuf, 1); items_in_progress.remove (key); cb (Reference () { data = items[key].data, key = key, loading = false }); msg.disconnect (id); }); network.queue (msg, (sess, mess) => { // no one cares }, (code, reason) => { cb (null); }); cb (Reference () { data = null, key = key, loading = true }); items_in_progress.insert (key, msg); } else { //message ("[/]: %s", key); ulong id = 0; id = msg.finished.connect_after (() => { var it = items.@get (key); cb (Reference () { data = it.data, key = key, loading = false }); it.references++; msg.disconnect (id); }); } } public void clear () { // message ("[ CLEARED ALL ]"); items.remove_all (); items_in_progress.remove_all (); } } tootle-1.0-alpha2/src/Services/IAccountListener.vala000066400000000000000000000014661374710545700225030ustar00rootroot00000000000000public interface Tootle.IAccountListener : GLib.Object { //TODO: Refactor into AccountHolder protected void account_listener_init () { accounts.notify["active"].connect (_on_active_acc_update); accounts.saved.notify["size"].connect (_on_saved_accs_update); on_account_changed (accounts.active); } protected void account_listener_free () { accounts.notify["active"].disconnect (_on_active_acc_update); accounts.saved.notify["size"].disconnect (_on_saved_accs_update); } void _on_active_acc_update (ParamSpec s) { on_account_changed (accounts.active); } void _on_saved_accs_update (ParamSpec s) { on_accounts_changed (accounts.saved); } public virtual void on_account_changed (InstanceAccount? account) {} public virtual void on_accounts_changed (Gee.ArrayList accounts) {} } tootle-1.0-alpha2/src/Services/IStreamListener.vala000066400000000000000000000003351374710545700223340ustar00rootroot00000000000000public interface Tootle.IStreamListener : GLib.Object { public signal void on_status_removed (string id); public signal void on_status_added (API.Status s); public signal void on_notification (API.Notification n); } tootle-1.0-alpha2/src/Services/Network.vala000066400000000000000000000055771374710545700207300ustar00rootroot00000000000000using Soup; using GLib; using Gdk; using Json; public class Tootle.Network : GLib.Object { public signal void started (); public signal void finished (); public delegate void ErrorCallback (int32 code, string reason); public delegate void SuccessCallback (Session session, Message msg) throws Error; public delegate void NodeCallback (Json.Node node, Message msg) throws Error; public delegate void ObjectCallback (Json.Object node) throws Error; private int requests_processing = 0; public Soup.Session session; construct { session = new Soup.Session (); session.ssl_strict = true; session.ssl_use_system_ca_file = true; session.timeout = 15; session.request_unqueued.connect (msg => { requests_processing--; if (requests_processing <= 0) finished (); }); } public void cancel (Soup.Message? msg) { if (msg == null) return; switch (msg.status_code) { case Soup.Status.CANCELLED: case Soup.Status.OK: return; } debug ("Cancelling message"); session.cancel_message (msg, Soup.Status.CANCELLED); } public void queue (owned Soup.Message mess, owned SuccessCallback cb, owned ErrorCallback ecb) { requests_processing++; started (); // message (@"$(mess.method): $(mess.uri.to_string (false))"); try { session.queue_message (mess, (sess, msg) => { var status = msg.status_code; if (status == Soup.Status.OK) cb (session, msg); else if (status == Soup.Status.CANCELLED) debug ("Message is cancelled. Ignoring callback invocation."); else ecb ((int32) status, describe_error ((int32) status)); }); } catch (Error e) { warning (@"Exception in network queue: $(e.message)"); ecb (0, e.message); } } public string describe_error (uint code) { var reason = Soup.Status.get_phrase (code); return @"$code: $reason"; } public void on_error (int32 code, string message) { warning (message); app.toast (message); } public Json.Node parse_node (Soup.Message msg) throws Error { var parser = new Json.Parser (); parser.load_from_data ((string) msg.response_body.flatten ().data, -1); return parser.get_root (); } public Json.Object parse (Soup.Message msg) throws Error { return parse_node (msg).get_object (); } public static void parse_array (Soup.Message msg, owned NodeCallback cb) throws Error { var parser = new Json.Parser (); parser.load_from_data ((string) msg.response_body.flatten ().data, -1); parser.get_root ().get_array ().foreach_element ((array, i, node) => { cb (node, msg); }); } } tootle-1.0-alpha2/src/Services/Settings.vala000066400000000000000000000022171374710545700210630ustar00rootroot00000000000000using GLib; public class Tootle.Settings : GLib.Settings { public int current_account { get; set; } public bool dark_theme { get; set; } public bool autostart { get; set; } public bool work_in_background { get; set; } public API.Visibility default_post_visibility { get; set; } public int timeline_page_size { get; set; } public int post_text_size { get; set; } public bool live_updates { get; set; } public bool public_live_updates { get; set; } public bool aggressive_resolving { get; set; } public int window_x { get; set; } public int window_y { get; set; } public int window_w { get; set; } public int window_h { get; set; } public Settings () { Object (schema_id: Build.DOMAIN); init ("current-account"); init ("dark-theme"); init ("autostart"); init ("work-in-background"); init ("default-post-visibility"); init ("timeline-page-size"); init ("post-text-size"); init ("live-updates"); init ("public-live-updates"); init ("aggressive-resolving"); init ("window-x"); init ("window-y"); init ("window-w"); init ("window-h"); } void init (string key) { bind (key, this, key, SettingsBindFlags.DEFAULT); } } tootle-1.0-alpha2/src/Services/Streams.vala000066400000000000000000000105621374710545700207030ustar00rootroot00000000000000using Soup; using Gee; public class Tootle.Streams : Object { protected HashTable connections { get; set; default = new HashTable (GLib.str_hash, GLib.str_equal); } protected class Connection : Object { public ArrayList subscribers; protected WebsocketConnection socket; protected Message msg; protected bool closing = false; protected int timeout = 1; public string name { owned get { var url = msg.get_uri ().to_string (false); return url.slice (0, url.last_index_of ("&access_token")); } } public Connection (string url) { this.subscribers = new ArrayList (); this.msg = new Message ("GET", url); } public bool start () { info (@"Opening stream: $name"); network.session.websocket_connect_async.begin (msg, null, null, null, (obj, res) => { socket = network.session.websocket_connect_async.end (res); socket.error.connect (on_error); socket.closed.connect (on_closed); socket.message.connect (on_message); }); return false; } public void add (IStreamListener s) { info ("%s > %s", get_subscriber_name (s), name); subscribers.add (s); } public void remove (IStreamListener s) { if (subscribers.contains (s)) { info ("%s X %s", get_subscriber_name (s), name); subscribers.remove (s); } if (subscribers.size <= 0) { info (@"Closing: $name"); closing = true; socket.close (0, null); } } void on_error (Error e) { if (!closing) warning (@"Error in $name: $(e.message)"); } void on_closed () { if (!closing) { warning (@"DISCONNECTED: $name. Reconnecting in $timeout seconds."); GLib.Timeout.add_seconds (timeout, start); timeout = int.min (timeout*2, 6); } warning (@"Closing stream: $name"); } void on_message (int i, Bytes bytes) { try { emit (bytes, this); } catch (Error e) { warning (@"Couldn't handle websocket event. Reason: $(e.message)"); } } } public void subscribe (string? url, IStreamListener s, out string cookie) { if (url == null) return; if (connections.contains (url)) { connections[url].add (s); } else { var con = new Connection (url); connections[url] = con; con.add (s); con.start (); } cookie = url; } public void unsubscribe (string? cookie, IStreamListener s) { var url = cookie; if (url == null) return; if (connections.contains (url)) connections.@get (url).remove (s); } static string get_subscriber_name (Object s) { return s.get_type ().name (); } static void decode (Bytes bytes, out Json.Node root, out Json.Object obj, out string event) throws Error { var msg = (string) bytes.get_data (); var parser = new Json.Parser (); parser.load_from_data (msg, -1); root = parser.steal_root (); obj = root.get_object (); event = obj.get_string_member ("event"); } static Json.Node payload (Json.Object obj) { var payload = obj.get_string_member ("payload"); var data = Soup.URI.decode (payload); var parser = new Json.Parser (); parser.load_from_data (data, -1); return parser.steal_root (); } static void emit (Bytes bytes, Connection c) throws Error { if (!settings.live_updates) return; Json.Node root; Json.Object root_obj; string ev; decode (bytes, out root, out root_obj, out ev); // c.subscribers.@foreach (s => { // message (@"$(c.name): $ev for $(get_subscriber_name (s))"); // return true; // }); switch (ev) { case "update": var node = payload (root_obj); var status = Entity.from_json (typeof (API.Status), node) as API.Status; c.subscribers.@foreach (s => { s.on_status_added (status); return true; }); break; case "delete": var id = root_obj.get_string_member ("payload"); c.subscribers.@foreach (s => { s.on_status_removed (id); return true; }); break; case "notification": var node = payload (root_obj); var notif = Entity.from_json (typeof (API.Notification), node) as API.Notification; c.subscribers.@foreach (s => { s.on_notification (notif); return true; }); break; default: warning (@"Unknown websocket event: \"$ev\". Ignoring."); break; } } public void force_delete (string id) { connections.get_values ().@foreach (c => { c.subscribers.@foreach (s => { s.on_status_removed (id); return true; }); }); } } tootle-1.0-alpha2/src/Views/000077500000000000000000000000001374710545700157265ustar00rootroot00000000000000tootle-1.0-alpha2/src/Views/Base.vala000066400000000000000000000067251374710545700174570ustar00rootroot00000000000000using Gtk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/views/base.ui")] public class Tootle.Views.Base : Box { public static string STATUS_EMPTY = _("Nothing to see here"); public static string STATUS_LOADING = " "; public string? icon { get; set; default = null; } public string label { get; set; default = ""; } public bool needs_attention { get; set; default = false; } public bool current { get; set; default = false; } public bool unused { get; set; default = false; } public SimpleActionGroup? actions { get; set; } public Container content { get; set; } [GtkChild] protected Hdy.HeaderBar header; [GtkChild] protected Button back_button; [GtkChild] protected ScrolledWindow scrolled; [GtkChild] protected Box view; [GtkChild] protected Hdy.Clamp clamp; [GtkChild] protected Box column_view; [GtkChild] protected Stack states; [GtkChild] protected Box content_box; [GtkChild] protected ListBox content_list; [GtkChild] protected Button status_button; [GtkChild] Stack status_stack; [GtkChild] Label status_message_label; public string state { get; set; default = "status"; } public string status_message { get; set; default = STATUS_EMPTY; } public bool empty { get { return content.get_children ().length () <= 0; } } construct { bind_property ("label", header, "title", BindingFlags.SYNC_CREATE); content = content_list; status_button.label = _("Reload"); bind_property ("state", states, "visible-child-name", BindingFlags.SYNC_CREATE); scrolled.edge_reached.connect (pos => { if (pos == PositionType.BOTTOM) on_bottom_reached (); }); content.remove.connect (() => on_content_changed ()); content_list.remove.connect (() => on_content_changed ()); content_list.row_activated.connect (on_content_item_activated); notify["status-message"].connect (() => { status_message_label.label = @"$status_message"; status_stack.visible_child_name = status_message == STATUS_LOADING ? "spinner" : "message"; }); notify["current"].connect (() => { if (current) on_shown (); else on_hidden (); }); scrolled.get_style_context ().add_class (Dialogs.MainWindow.ZOOM_CLASS); build_header (); } public virtual void build_header () {} public virtual void clear (){ content.forall (w => { w.destroy (); }); state = "status"; } public virtual void on_bottom_reached () {} public virtual void on_shown () { if (actions != null) window.insert_action_group ("view", actions); } public virtual void on_hidden () { if (actions != null) window.insert_action_group ("view", null); } public virtual void on_content_changed () { if (empty) { status_message = STATUS_EMPTY; state = "status"; } else { state = "content"; } check_resize (); } public virtual void on_error (int32 code, string reason) { status_message = reason; status_button.visible = true; status_button.sensitive = true; state = "status"; } [GtkCallback] protected void on_resized () { Allocation alloc; get_allocation (out alloc); var target_w = clamp.maximum_size; var view_w = alloc.width; var ctx = view.get_style_context (); if (view_w <= target_w && ctx.has_class ("padded")) ctx.remove_class ("padded"); if (view_w > target_w && !ctx.has_class ("padded")) ctx.add_class ("padded"); } public virtual void on_content_item_activated (ListBoxRow row) { Signal.emit_by_name (row, "open"); } [GtkCallback] void on_close () { window.back (); } } tootle-1.0-alpha2/src/Views/Bookmarks.vala000066400000000000000000000003541374710545700205250ustar00rootroot00000000000000public class Tootle.Views.Bookmarks : Views.Timeline { public Bookmarks () { Object ( url: "/api/v1/bookmarks", label: _("Bookmarks"), icon: "user-bookmarks-symbolic" ); } } tootle-1.0-alpha2/src/Views/Conversations.vala000066400000000000000000000007661374710545700214410ustar00rootroot00000000000000public class Tootle.Views.Conversations : Views.Timeline { public Conversations () { Object ( url: "/api/v1/conversations", label: _("Conversations"), icon: API.Visibility.DIRECT.get_icon () ); accepts = typeof (API.Conversation); } // TODO: Reload when an update is received // public override string? get_stream_url () { // return @"/api/v1/streaming/?stream=direct&access_token=$(account.access_token)"; // } } tootle-1.0-alpha2/src/Views/Favorites.vala000066400000000000000000000003001374710545700205260ustar00rootroot00000000000000public class Tootle.Views.Favorites : Views.Timeline { public Favorites () { Object ( url: "/api/v1/favourites", label: _("Favorites") ); } } tootle-1.0-alpha2/src/Views/Federated.vala000066400000000000000000000007031374710545700204560ustar00rootroot00000000000000public class Tootle.Views.Federated : Views.Timeline { public Federated () { Object ( url: "/api/v1/timelines/public", is_public: true, label: _("Federated"), icon: "network-workgroup-symbolic" ); } public override string? get_stream_url () { return account != null ? @"$(account.instance)/api/v1/streaming/?stream=public&access_token=$(account.access_token)" : null; } } tootle-1.0-alpha2/src/Views/Hashtag.vala000066400000000000000000000006551374710545700201600ustar00rootroot00000000000000public class Tootle.Views.Hashtag : Views.Timeline { public Hashtag (string tag) { Object ( url: @"/api/v1/timelines/tag/$tag", label: "#"+tag ); } public override string? get_stream_url () { var tag = url.substring (4); return account != null ? @"$(account.instance)/api/v1/streaming/?stream=hashtag&tag=$tag&access_token=$(account.access_token)" : null; } } tootle-1.0-alpha2/src/Views/Home.vala000066400000000000000000000004751374710545700174710ustar00rootroot00000000000000public class Tootle.Views.Home : Views.Timeline { public Home () { Object ( url: "/api/v1/timelines/home", label: _("Home"), icon: "user-home-symbolic" ); } public override string? get_stream_url () { return account.get_stream_url () ?? null; } } tootle-1.0-alpha2/src/Views/List.vala000066400000000000000000000010661374710545700175110ustar00rootroot00000000000000public class Tootle.Views.List : Views.Timeline { public API.List list { get; set; } public List (API.List l) { Object ( url: @"/api/v1/timelines/list/$(l.id)", label: l.title, icon: "view-list-symbolic", list: l ); reconnect_stream (); } public override string? get_stream_url () { if (list == null) return null; return account != null ? @"$(account.instance)/api/v1/streaming/?stream=list&list=$(list.id)&access_token=$(account.access_token)" : null; } } tootle-1.0-alpha2/src/Views/Lists.vala000066400000000000000000000030671374710545700176770ustar00rootroot00000000000000using Gtk; public class Tootle.Views.Lists : Views.Timeline { [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/list_item.ui")] public class Row : ListBoxRow { API.List? list; [GtkChild] Stack stack; [GtkChild] Label title; public Row (API.List? list) { this.list = list; if (list == null) stack.visible_child_name = "add"; else list.bind_property ("title", title, "label", BindingFlags.SYNC_CREATE); } [GtkCallback] void on_edit_clicked () { new Dialogs.ListEditor (this.list); } [GtkCallback] void on_remove_clicked () { var remove = app.question ( _("Delete \"%s\"?").printf (list.title), _("This action cannot be reverted.") ); if (remove) { new Request.DELETE (@"/api/v1/lists/$(list.id)") .with_account (accounts.active) .then (() => { this.destroy (); }) .exec (); } } public virtual signal void open () { if (this.list == null) return; var view = new Views.List (list); window.open_view (view); } } public new bool empty { get { return false; } } public Lists () { Object ( url: @"/api/v1/lists", label: _("Lists"), icon: "view-list-symbolic" ); accepts = typeof (API.List); } public override void on_request_finish () { var add_row = new Row (null); add_row.open.connect (() => { var dlg = new Dialogs.ListEditor.empty (); dlg.done.connect (on_refresh); }); append (add_row); on_content_changed (); } } tootle-1.0-alpha2/src/Views/Local.vala000066400000000000000000000010721374710545700176250ustar00rootroot00000000000000public class Tootle.Views.Local : Views.Federated { public Local () { label = _("Local"); icon = Desktop.fallback_icon ("system-users-symbolic", "document-open-recent-symbolic"); } public override Request append_params (Request r) { var req = base.append_params (r); req.with_param ("local", "true"); return req; } public override string? get_stream_url () { return account != null ? @"$(account.instance)/api/v1/streaming/?stream=public:local&access_token=$(account.access_token)" : null; } } tootle-1.0-alpha2/src/Views/Main.vala000066400000000000000000000017461374710545700174670ustar00rootroot00000000000000using Gtk; public class Tootle.Views.Main : Views.TabbedBase { public Widgets.AccountsButton account_button; public Button compose_button; public Button search_button; public Main () { add_tab (new Views.Home ()); add_tab (new Views.Notifications ()); add_tab (new Views.Local ()); add_tab (new Views.Federated ()); } public override void build_header () { base.build_header (); back_button.visible = false; account_button = new Widgets.AccountsButton (); account_button.show (); header.pack_start (account_button); compose_button = new Button.from_icon_name ("document-edit-symbolic"); compose_button.tooltip_text = _("Compose"); compose_button.action_name = "app.compose"; compose_button.show (); header.pack_start (compose_button); search_button = new Button.from_icon_name ("edit-find-symbolic"); search_button.tooltip_text = _("Search"); search_button.action_name = "app.search"; search_button.show (); header.pack_end (search_button); } } tootle-1.0-alpha2/src/Views/Notifications.vala000066400000000000000000000043441374710545700214110ustar00rootroot00000000000000using Gtk; using Gdk; public class Tootle.Views.Notifications : Views.Timeline, IAccountListener, IStreamListener { protected int64 last_id = 0; public Notifications () { Object ( url: "/api/v1/notifications", label: _("Notifications"), icon: Desktop.fallback_icon ("notification-symbolic", "preferences-system-notifications-symbolic", "user-invisible-symbolic") ); accepts = typeof (API.Notification); on_notification.connect (add_notification); disconnect (on_status_added_sigig); } public override string? get_stream_url () { return account != null ? @"$(account.instance)/api/v1/streaming/?stream=user&access_token=$(account.access_token)" : null; } public override void on_shown () { if (has_unread ()) { needs_attention = false; account.has_unread_notifications = false; account.last_seen_notification = last_id; accounts.save (); } } public override void append (Widget? w, bool reverse = false) { base.append (w, reverse); var nw = w as Widgets.Notification; var notification = nw.notification; if (int64.parse (notification.id) > last_id) last_id = int64.parse (notification.id); needs_attention = has_unread () && !current; if (needs_attention) accounts.save (); } public override void on_account_changed (InstanceAccount? acc) { base.on_account_changed (acc); if (account == null) { last_id = 0; needs_attention = false; } else { last_id = account.last_seen_notification; needs_attention = account.has_unread_notifications; } } public override bool request () { if (account != null) { account.cached_notifications.@foreach (n => { append (n.to_widget ()); return true; }); } return base.request (); } bool has_unread () { if (account == null) return false; return last_id > account.last_seen_notification || needs_attention; } void add_notification (API.Notification n) { prepend (n.to_widget ()); } } tootle-1.0-alpha2/src/Views/Profile.vala000066400000000000000000000213141374710545700201740ustar00rootroot00000000000000using Gtk; public class Tootle.Views.Profile : Views.Timeline { public API.Account profile { get; construct set; } public API.Relationship rs { get; construct set; } public bool include_replies { get; set; default = false; } public bool only_media { get; set; default = false; } public string source { get; set; default = "statuses"; } SimpleAction media_action; SimpleAction replies_action; SimpleAction muting_action; SimpleAction hiding_reblogs_action; SimpleAction blocking_action; SimpleAction domain_blocking_action; ListBox profile_list; Label relationship; Widgets.TimelineMenu menu_button; Widgets.AdaptiveButton rs_button; SourceFunc? rs_button_action; weak ListBoxRow note_row; construct { build_actions (); var builder = new Builder.from_resource (@"$(Build.RESOURCES)ui/views/profile_header.ui"); profile_list = builder.get_object ("profile_list") as ListBox; var hdr = builder.get_object ("grid") as Grid; column_view.pack_start (hdr, false, false, 0); column_view.reorder_child (hdr, 0); var avatar = builder.get_object ("avatar") as Widgets.Avatar; avatar.account = profile; var domain = "@" + profile.domain; menu_button.title.label = profile.handle.replace (domain, ""); menu_button.subtitle.label = domain; if ("@" in profile.acct) menu_button.subtitle.show (); var handle = builder.get_object ("handle") as Widgets.RichLabel; profile.bind_property ("display-name", handle, "text", BindingFlags.SYNC_CREATE); note_row = builder.get_object ("note_row") as ListBoxRow; var note = builder.get_object ("note") as Widgets.RichLabel; profile.bind_property ("note", note, "text", BindingFlags.SYNC_CREATE, (b, src, ref target) => { var text = Html.simplify ((string) src); target.set_string (text); note_row.visible = text != ""; return true; }); relationship = builder.get_object ("relationship") as Label; rs.notify["id"].connect (on_rs_updated); rebuild_fields (); } public Profile (API.Account acc) { Object ( profile: acc, rs: new API.Relationship.for_account (acc), label: acc.acct, url: @"/api/v1/accounts/$(acc.id)/statuses" ); } ~Profile () { menu_button.destroy (); } public override void build_header () { rs_button = new Widgets.AdaptiveButton (); rs_button.clicked.connect (() => { if (rs_button_action != null) { rs_button.sensitive = false; rs_button_action (); } }); header.custom_title = menu_button = new Widgets.TimelineMenu ("profile-menu"); if (profile.id != accounts.active.id) header.pack_end (rs_button); } void build_actions () { actions = new SimpleActionGroup (); media_action = new SimpleAction.stateful ("only-media", null, false); media_action.change_state.connect (v => { media_action.set_state (only_media = v.get_boolean ()); invalidate_actions (true); }); actions.add_action (media_action); replies_action = new SimpleAction.stateful ("include-replies", null, false); replies_action.change_state.connect (v => { replies_action.set_state (include_replies = v.get_boolean ()); invalidate_actions (true); }); actions.add_action (replies_action); var source_action = new SimpleAction.stateful ("source", VariantType.STRING, source); source_action.change_state.connect (v => { source = v.get_string (); source_action.set_state (source); accepts = source == "statuses" ? typeof (API.Status) : typeof (API.Account); url = @"/api/v1/accounts/$(profile.id)/$source"; invalidate_actions (true); }); actions.add_action (source_action); var mention_action = new SimpleAction ("mention", VariantType.STRING); mention_action.activate.connect (v => { var status = new API.Status.empty (); status.visibility = API.Visibility.from_string (v.get_string ()); status.content = @"$(profile.handle) "; new Dialogs.Compose (status); }); actions.add_action (mention_action); var copy_handle_action = new SimpleAction ("copy_handle", null); copy_handle_action.activate.connect (v => { Desktop.copy (profile.handle); }); actions.add_action (copy_handle_action); muting_action = new SimpleAction.stateful ("muting", null, false); muting_action.change_state.connect (v => { var state = v.get_boolean (); rs.modify (state ? "mute" : "unmute"); }); actions.add_action (muting_action); hiding_reblogs_action = new SimpleAction.stateful ("hiding_reblogs", null, false); hiding_reblogs_action.change_state.connect (v => { var state = !v.get_boolean (); rs.modify ("follow", "reblogs", @"$state"); }); actions.add_action (hiding_reblogs_action); blocking_action = new SimpleAction.stateful ("blocking", null, false); blocking_action.change_state.connect (v => { var block = v.get_boolean (); var q = block ? _("Block \"%s\"?") : _("Unblock \"%s\"?"); var yes = app.question (q.printf (profile.handle)); if (yes) rs.modify (block ? "block" : "unblock"); }); actions.add_action (blocking_action); domain_blocking_action = new SimpleAction.stateful ("domain_blocking", null, false); domain_blocking_action.change_state.connect (v => { var block = v.get_boolean (); var q = block ? _("Block Entire \"%s\"?") : _("Unblock Entire \"%s\"?"); var yes = app.question ( q.printf (profile.domain), _("Blocking a domain will:\n\n• Remove its public posts and notifications from your timelines\n• Remove its followers from your account\n• Prevent you from following its users") ); if (yes) { var req = new Request.POST ("/api/v1/domain_blocks") .with_account (accounts.active) .with_param ("domain", profile.domain) .then (() => { rs.request (); }); if (!block) req.method = "DELETE"; req.exec (); } }); actions.add_action (domain_blocking_action); invalidate_actions (false); } void invalidate_actions (bool refresh) { replies_action.set_enabled (accepts == typeof (API.Status)); media_action.set_enabled (accepts == typeof (API.Status)); muting_action.set_state (rs.muting); hiding_reblogs_action.set_state (!rs.showing_reblogs); hiding_reblogs_action.set_enabled (rs.following); blocking_action.set_state (rs.blocking); domain_blocking_action.set_state (rs.domain_blocking); domain_blocking_action.set_enabled (accounts.active.domain != profile.domain); if (refresh) { page_next = null; on_refresh (); } } void on_rs_updated () { var label = ""; if (rs_button.sensitive = rs != null) { if (rs.requested) label = _("Sent follow request"); else if (rs.followed_by && rs.following) label = _("Mutually follows you"); else if (rs.followed_by) label = _("Follows you"); string action_icon = ""; string action_label = ""; get_rs_button_state (ref action_label, ref action_icon, ref rs_button_action); rs_button.icon_name = action_icon; rs_button.label = action_label; } relationship.label = label; relationship.visible = label != ""; invalidate_actions (false); } void get_rs_button_state (ref string label, ref string icon_name, ref SourceFunc? fn) { if (rs == null) return; if (rs.blocking) { label = _("Unblock"); icon_name = "view-reveal-symbolic"; fn = () => { blocking_action.change_state (false); rs_button.sensitive = true; return true; }; return; } else if (rs.following || rs.requested) { label = _("Unfollow"); icon_name = "list-remove-symbolic"; fn = () => { rs.modify ("unfollow"); return true; }; return; } else if (!rs.following) { label = _("Follow"); icon_name = "list-add-symbolic"; fn = () => { rs.modify ("follow"); return true; }; return; } } public override Request append_params (Request req) { if (page_next == null && source == "statuses") { req.with_param ("exclude_replies", @"$(!include_replies)"); req.with_param ("only_media", @"$(only_media)"); return base.append_params (req); } else return req; } public static void open_from_id (string id) { var msg = new Soup.Message ("GET", @"$(accounts.active.instance)/api/v1/accounts/$id"); network.queue (msg, (sess, mess) => { var node = network.parse_node (mess); var acc = API.Account.from (node); window.open_view (new Views.Profile (acc)); }, (status, reason) => { network.on_error (status, reason); }); } [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/profile_field_row.ui")] protected class Field : ListBoxRow { [GtkChild] Widgets.RichLabel name_label; [GtkChild] Widgets.RichLabel value_label; public Field (API.AccountField field) { name_label.text = field.name; value_label.text = field.val; } } void rebuild_fields () { if (profile.fields != null) { foreach (Entity e in profile.fields) { var w = new Field (e as API.AccountField); profile_list.insert (w, -1); } } } } tootle-1.0-alpha2/src/Views/Search.vala000066400000000000000000000040151374710545700200000ustar00rootroot00000000000000using Gtk; public class Tootle.Views.Search : Views.TabbedBase { public string query { get; set; default = ""; } Hdy.SearchBar bar; Hdy.Clamp bar_clamp; SearchEntry entry; Views.Base accounts_tab; Views.Base statuses_tab; Views.Base hashtags_tab; public Search () { Object (label: _("Search")); bar = new Hdy.SearchBar (); bar.search_mode_enabled = true; bar.show (); pack_start (bar, false, false, 0); reorder_child (bar, 2); entry = new SearchEntry (); entry.width_chars = 25; entry.text = query; entry.show (); bar_clamp = new Hdy.Clamp (); bar_clamp.show (); bar_clamp.add (entry); bar.add (bar_clamp); bar.connect_entry (entry); entry.activate.connect (() => request ()); entry.icon_press.connect (() => { entry.text = ""; request (); }); entry.grab_focus_without_selecting (); status_button.clicked.connect (request); accounts_tab = add_list_tab (_("Accounts"), "system-users-symbolic"); statuses_tab = add_list_tab (_("Statuses"), "user-available-symbolic"); hashtags_tab = add_list_tab (_("Hashtags"), "emoji-flags-symbolic"); request (); } bool append (Views.Base tab, owned Entity entity) { var w = entity.to_widget (); tab.content_list.insert (w, -1); return true; } void request () { query = entry.text.chug ().chomp (); if (query == "") { clear (); state = "status"; status_message = _("Enter query"); return; } clear (); state = "status"; status_message = STATUS_LOADING; API.SearchResults.request.begin (query, accounts.active, (obj, res) => { try { var results = API.SearchResults.request.end (res); if (!results.accounts.is_empty) { results.accounts.@foreach (e => append (accounts_tab, e)); } if (!results.statuses.is_empty) { results.statuses.@foreach (e => append (statuses_tab, e)); } if (!results.hashtags.is_empty) { results.hashtags.@foreach (e => append (hashtags_tab, e)); } on_content_changed (); } catch (Error e) { on_error (-1, e.message); } }); } } tootle-1.0-alpha2/src/Views/TabbedBase.vala000066400000000000000000000052271374710545700205550ustar00rootroot00000000000000using Gtk; public class Tootle.Views.TabbedBase : Views.Base { static int ID_COUNTER = 0; protected Hdy.ViewSwitcherTitle switcher_title; protected Hdy.ViewSwitcherBar switcher_bar; protected Stack stack; Views.Base? last_view = null; construct { content = content_box; content_list.destroy (); state = "content"; states.get_parent ().remove (states); view.get_style_context ().remove_class ("ttl-view"); scrolled.destroy (); pack_start (states); stack = new Stack (); stack.transition_duration = 100; stack.transition_type = StackTransitionType.CROSSFADE; stack.notify["visible-child"].connect (on_view_switched); stack.show (); content_box.pack_start (stack); switcher_bar.stack = switcher_title.stack = stack; } public override void build_header () { switcher_title = new Hdy.ViewSwitcherTitle (); switcher_title.show (); header.bind_property ("title", switcher_title, "title", BindingFlags.SYNC_CREATE); header.bind_property ("subtitle", switcher_title, "subtitle", BindingFlags.SYNC_CREATE); header.custom_title = switcher_title; switcher_bar = new Hdy.ViewSwitcherBar (); switcher_bar.show (); switcher_title.bind_property ("title-visible", switcher_bar, "reveal", BindingFlags.SYNC_CREATE); pack_end (switcher_bar, false, false, 0); } public void add_tab (Views.Base view) { ID_COUNTER++; stack.add_titled (view, ID_COUNTER.to_string (), view.label); stack.child_set_property (view, "icon-name", view.icon); view.notify["needs-attention"].connect (() => { stack.child_set_property (view, "needs-attention", view.needs_attention); }); view.header.hide (); } public Views.Base add_list_tab (string label, string icon) { var tab = new Views.Base (); tab.label = label; tab.icon = icon; add_tab (tab); return tab; } public delegate void TabCB (Views.Base tab); public void foreach_tab (TabCB cb) { stack.@foreach (child => { var tab = child as Views.Base; if (tab != null) cb (tab); }); } public override void clear () { foreach_tab (tab => tab.clear ()); on_content_changed (); } public override void on_content_changed () { var empty = true; foreach_tab (tab => { tab.visible = !tab.empty; if (tab.visible) empty = false; tab.on_content_changed (); }); if (empty) { state = "status"; status_message = STATUS_EMPTY; } else { state = "content"; } } void on_view_switched () { var view = stack.visible_child as Views.Base; if (last_view != null) { last_view.current = false; last_view.on_hidden (); } if (view != null) { header.title = view.label; view.current = true; view.on_shown (); } last_view = view; } } tootle-1.0-alpha2/src/Views/Thread.vala000066400000000000000000000050431374710545700200040ustar00rootroot00000000000000using Gtk; public class Tootle.Views.Thread : Views.Base, IAccountListener { public API.Status root_status { get; construct set; } protected InstanceAccount? account = null; protected Widgets.Status root_widget; public Thread (API.Status status) { Object ( root_status: status, status_message: STATUS_LOADING, label: _("Conversation") ); account_listener_init (); } public override void on_account_changed (InstanceAccount? acc) { account = acc; request (); } Widgets.Status append (Entity entity){ var w = entity.to_widget () as Widgets.Status; w.reveal_spoiler = true; content_list.insert (w, -1); return w; } void connect_threads () { Widgets.Status? last_w = null; string? last_id = null; content.get_children ().foreach (i => { var w = i as Widgets.Status; var id = w.status.formal.in_reply_to_id; if (id == last_id) { Widgets.Status.ThreadRole.connect_posts (last_w, w); } last_w = w; last_id = w.status.formal.id; }); content.get_children ().foreach (i => { var w = i as Widgets.Status; w.install_thread_line (); }); root_widget.thread_line.hide (); } public void request () { new Request.GET (@"/api/v1/statuses/$(root_status.id)/context") .with_account (account) .with_ctx (this) .then ((sess, msg) => { var root = network.parse (msg); var ancestors = root.get_array_member ("ancestors"); ancestors.foreach_element ((array, i, node) => { var status = Entity.from_json (typeof (API.Status), node); append (status); }); root_widget = append (root_status) as Widgets.Status; root_widget.expand_root (); var descendants = root.get_array_member ("descendants"); descendants.foreach_element ((array, i, node) => { var status = Entity.from_json (typeof (API.Status), node); append (status); }); connect_threads (); on_content_changed (); int x,y; translate_coordinates (root_widget, 0, header.get_allocated_height (), out x, out y); scrolled.vadjustment.value = (double)(y*-1); }) .exec (); } public static void open_from_link (string q) { new Request.GET ("/api/v1/search") .with_account () .with_param ("q", q) .with_param ("resolve", "true") .then ((sess, msg) => { var root = network.parse (msg); var statuses = root.get_array_member ("statuses"); var node = statuses.get_element (0); if (node != null){ var status = API.Status.from (node); window.open_view (new Views.Thread (status)); } else Desktop.open_uri (q); }) .exec (); } } tootle-1.0-alpha2/src/Views/Timeline.vala000066400000000000000000000073601374710545700203470ustar00rootroot00000000000000using Gtk; using Gdk; public class Tootle.Views.Timeline : IAccountListener, IStreamListener, Views.Base { public string url { get; construct set; } public bool is_public { get; construct set; default = false; } public Type accepts { get; set; default = typeof (API.Status); } protected InstanceAccount? account = null; protected ulong on_status_added_sigig; public bool is_last_page { get; set; default = false; } public string? page_next { get; set; } public string? page_prev { get; set; } public string? stream = null; construct { app.refresh.connect (on_refresh); status_button.clicked.connect (on_refresh); account_listener_init (); on_status_added_sigig = on_status_added.connect (add_status); on_status_removed.connect (remove_status); } ~Timeline () { streams.unsubscribe (stream, this); } public virtual bool is_status_owned (API.Status status) { return status.is_owned (); } public void prepend (Widget? w) { append (w, true); } public virtual void append (Widget? w, bool first = false) { if (w == null) { warning ("Attempted to add an empty widget"); return; } if (first) content_list.prepend (w); else content_list.insert (w, -1); } public override void clear () { this.page_prev = null; this.page_next = null; this.is_last_page = false; base.clear (); } public void get_pages (string? header) { page_next = page_prev = null; if (header == null) return; var pages = header.split (","); foreach (var page in pages) { var sanitized = page .replace ("<","") .replace (">", "") .split (";")[0]; if ("rel=\"prev\"" in page) page_prev = sanitized; else page_next = sanitized; } is_last_page = page_prev != null & page_next == null; } public virtual string get_req_url () { if (page_next != null) return page_next; return url; } public virtual Request append_params (Request req) { if (page_next == null) return req.with_param ("limit", @"$(settings.timeline_page_size)"); else return req; } public virtual void on_request_finish () {} public virtual bool request () { var req = append_params (new Request.GET (get_req_url ())) .with_account (account) .with_ctx (this) .then ((sess, msg) => { Network.parse_array (msg, node => { try { var e = Entity.from_json (accepts, node); var w = e as Widgetizable; append (w.to_widget ()); } catch (Error e) { warning (@"Timeline item parse error: $(e.message)"); } }); get_pages (msg.response_headers.get_one ("Link")); on_content_changed (); on_request_finish (); }) .on_error (on_error); req.exec (); return GLib.Source.REMOVE; } public virtual void on_refresh () { scrolled.vadjustment.value = 0; status_button.sensitive = false; clear (); status_message = STATUS_LOADING; GLib.Idle.add (request); } public virtual string? get_stream_url () { return null; } public virtual void on_account_changed (InstanceAccount? acc) { account = acc; reconnect_stream (); on_refresh (); } public void reconnect_stream () { streams.unsubscribe (stream, this); streams.subscribe (get_stream_url (), this, out stream); } protected override void on_bottom_reached () { if (is_last_page) { info ("Last page reached"); return; } request (); } protected virtual void add_status (API.Status status) { var allow_update = true; if (is_public) allow_update = settings.public_live_updates; if (settings.live_updates && allow_update) prepend (status.to_widget ()); } protected virtual void remove_status (string id) { if (settings.live_updates) { content_list.get_children ().@foreach (w => { var sw = w as Widgets.Status; if (sw != null && sw.status.id == id) sw.destroy (); }); } } } tootle-1.0-alpha2/src/Widgets/000077500000000000000000000000001374710545700162375ustar00rootroot00000000000000tootle-1.0-alpha2/src/Widgets/AccountsButton.vala000066400000000000000000000073011374710545700220600ustar00rootroot00000000000000using Gtk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/accounts_button.ui")] public class Tootle.Widgets.AccountsButton : Gtk.MenuButton, IAccountListener { [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/accounts_button_item.ui")] class Item : ListBoxRow { AccountsButton button; InstanceAccount account; [GtkChild] Stack stack; [GtkChild] Widgets.Avatar avatar; [GtkChild] Label title; [GtkChild] Label handle; [GtkChild] Button forget_button; public Item (InstanceAccount account, AccountsButton btn) { this.account = account; this.button = btn; avatar.account = account; title.label = account.display_name; handle.label = account.handle; } public Item.add_new () { forget_button.destroy (); stack.visible_child_name = "new"; selectable = false; } [GtkCallback] void forget () { var forget = app.question ( _("Forget %s?".printf (handle.label)), _("This account will be removed from the application."), window ); if (forget) { button.active = false; accounts.remove (account); } } [GtkCallback] void open_profile () { button.active = false; account.resolve_open (accounts.active); } } bool invalidated = true; [GtkChild] Widgets.Avatar avatar; [GtkChild] ListBox account_list; [GtkChild] ModelButton item_accounts; [GtkChild] ModelButton item_prefs; [GtkChild] ModelButton item_refresh; [GtkChild] Button item_favs; [GtkChild] Button item_conversations; [GtkChild] Button item_bookmarks; [GtkChild] Button item_lists; construct { account_listener_init (); get_style_context ().add_class ("image-button"); item_refresh.clicked.connect (() => { app.refresh (); }); item_favs.clicked.connect (() => { window.open_view (new Views.Favorites ()); popover.popdown (); }); item_conversations.clicked.connect (() => { window.open_view (new Views.Conversations ()); popover.popdown (); }); item_bookmarks.clicked.connect (() => { window.open_view (new Views.Bookmarks ()); popover.popdown (); }); item_lists.clicked.connect (() => { window.open_view (new Views.Lists ()); popover.popdown (); }); item_prefs.clicked.connect (() => { Dialogs.Preferences.open (); popover.popdown (); }); notify["active"].connect (() => { if (active && invalidated) rebuild (); }); account_list.row_activated.connect (on_selection_changed); } ~AccountsButton () { account_listener_free (); } protected void on_selection_changed (ListBoxRow r) { var i = r.get_index (); if (i >= accounts.saved.size) { active = false; new Dialogs.NewAccount (); popover.popdown (); return; } var account = accounts.saved.@get (i); if (accounts.active == account) return; accounts.switch_account (i); popover.popdown (); } public virtual void on_accounts_changed (Gee.ArrayList accounts) { invalidated = true; if (active) rebuild (); } public virtual void on_account_changed (InstanceAccount? account) { if (account == null) { avatar.account = null; item_accounts.text = "%s\n%s".printf ( _("Anonymous"), _("No active account")); } else { avatar.account = account; item_accounts.text = @"$(account.display_name)\n$(account.handle)"; } item_accounts.use_markup = true; } void rebuild () { account_list.@foreach (w => account_list.remove (w)); accounts.saved.@foreach (acc => { var row = new Item (acc, this); account_list.insert (row, -1); if (accounts.active == acc) row.activate (); return true; }); account_list.insert (new Item.add_new (), -1); invalidated = false; } } tootle-1.0-alpha2/src/Widgets/AdaptiveButton.vala000066400000000000000000000015101374710545700220320ustar00rootroot00000000000000using Hdy; using Gtk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/adaptive_button.ui")] public class Tootle.Widgets.AdaptiveButton : Box { public string label { get; set; } public string icon_name { get; set; default = "image-loading-symbolic"; } public signal void clicked (); [GtkChild] Button full; [GtkChild] Button mini; [GtkChild] Image image1; [GtkChild] Image image2; construct { var butts = new Button[]{ full, mini }; bind_property ("label", full, "label", BindingFlags.SYNC_CREATE); foreach (Button butt in butts) { bind_property ("tooltip_text", butt, "tooltip_text", BindingFlags.SYNC_CREATE); butt.clicked.connect (() => clicked ()); } foreach (Image img in new Image[]{ image1, image2 }) { bind_property ("icon_name", img, "icon_name", BindingFlags.SYNC_CREATE); } } } tootle-1.0-alpha2/src/Widgets/Attachment/000077500000000000000000000000001374710545700203275ustar00rootroot00000000000000tootle-1.0-alpha2/src/Widgets/Attachment/Box.vala000066400000000000000000000017451374710545700217330ustar00rootroot00000000000000using Gtk; using GLib; using Gee; public class Tootle.Widgets.Attachment.Box : FlowBox { public bool editing { get; construct set; } construct { hexpand = true; can_focus = false; column_spacing = row_spacing = 8; selection_mode = SelectionMode.NONE; } public Box (bool editing = false) { Object (editing: editing); } public bool populate (ArrayList? list) { if (list == null) return false; var max = 2; var min = 1; if (list.size == 1) max = 1; else if (list.size % 2 == 0) max = min = 2; else if (list.size % 3 == 0) max = min = 3; max_children_per_line = max; min_children_per_line = min; list.@foreach (obj => pack (obj)); return true; } public bool pack (API.Attachment obj) { var w = new Widgets.Attachment.Slot (obj); insert (w, -1); show (); return true; } } tootle-1.0-alpha2/src/Widgets/Attachment/Picture.vala000066400000000000000000000036721374710545700226170ustar00rootroot00000000000000using Gtk; using Gdk; public class Tootle.Widgets.Attachment.Picture : DrawingArea { public string url { get; set; } Cache.Reference? cached; construct { hexpand = vexpand = true; get_style_context ().add_class ("pic"); } public class Picture (string url) { Object (url: url); } ~Picture () { cache.unload (ref cached); } public void on_request () { cached = null; on_redraw (); cache.load (url, on_cache_update); } void on_cache_update (Cache.Reference? result) { cached = result; if (cached != null) visible = !cached.loading; on_redraw (); } void on_redraw () { var w = get_allocated_width (); var h = get_allocated_height (); queue_draw_area (0, 0, w, h); } float get_ratio (int w, int h) { var ow = cached.data.get_width (); var oh = cached.data.get_height (); var xscale = (float) w / ow; var yscale = (float) h / oh; if (xscale > yscale) return xscale; else return yscale; } public override bool draw (Cairo.Context ctx) { var w = get_allocated_width (); var h = get_allocated_height (); var style = get_style_context (); var border_radius = style.get_property (Gtk.STYLE_PROPERTY_BORDER_RADIUS, style.get_state ()).get_int (); if (cached != null) { if (!cached.loading) { Cairo.Surface surface = Gdk.cairo_surface_create_from_pixbuf (cached.data, 1, null); ctx.save (); Drawing.draw_rounded_rect (ctx, 0, 0, w, h, border_radius); //Proportionally scale to fit into the allocated container var ratio = get_ratio (w, h); ctx.scale (ratio, ratio); //Center the result var oh = cached.data.get_height (); var result_h = oh*ratio; var offset_y = (h - result_h) / 2; var ow = cached.data.get_width (); var result_w = ow*ratio; var offset_x = (w - result_w) / 2; ctx.translate (offset_x, offset_y); //Draw it ctx.set_source_surface (surface, 0, 0); ctx.fill (); ctx.restore (); } } return false; } } tootle-1.0-alpha2/src/Widgets/Attachment/Slot.vala000066400000000000000000000024701374710545700221200ustar00rootroot00000000000000using Gtk; using Gdk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/attachment_slot.ui")] public class Tootle.Widgets.Attachment.Slot : FlowBoxChild { [GtkChild] Button button; [GtkChild] Label chip; [GtkChild] Image play_icon; [GtkChild] Stack stack; public API.Attachment attachment { get; construct set; } public Slot (API.Attachment obj) { Object (attachment: obj); if (attachment.preview_url != null) { var img = new Widgets.Attachment.Picture (attachment.preview_url); img.notify["visible"].connect (() => { stack.visible_child_name = img.visible ? "content" : "loading"; }); stack.add_named (img, "content"); img.on_request (); } if (attachment.kind != "image") { chip.label = attachment.kind; chip.show (); } switch (attachment.kind) { case "audio": case "video": case "gifv": play_icon.show (); break; } } construct { button.tooltip_text = attachment.description; } void download () { Desktop.download (attachment.url, path => { app.toast (_("File saved to Downloads")); }, () => {}); } void open () { Desktop.download (attachment.url, path => { Desktop.open_uri (path); }, () => {}); } [GtkCallback] protected virtual void on_clicked () { open (); } } tootle-1.0-alpha2/src/Widgets/Avatar.vala000066400000000000000000000027341374710545700203300ustar00rootroot00000000000000using Gtk; using Gdk; public class Tootle.Widgets.Avatar : Bin { Cache.Reference? cached; Hdy.Avatar avatar; public int size { get { return avatar.size; } set { avatar.size = value; } } public API.Account? account { get; set; } construct { avatar = new Hdy.Avatar (48, null, true); avatar.destroy.connect (() => { avatar.set_image_load_func (null); }); add (avatar); show_all (); notify["account"].connect (on_invalidated); on_invalidated (); } ~Avatar () { notify["account"].disconnect (on_invalidated); cache.unload (ref cached); } void on_invalidated () { if (cached != null) cache.unload (ref cached); if (account != null) cache.load (account.avatar, on_cache_result); else on_cache_result (null); } void on_cache_result (Cache.Reference? result) { cached = result; if (account == null) { // This exact string makes the avatar grey. // // If left null, *each* blank Hdy.Avatar receives // a random color and hurts my eyes. No bueno. avatar.text = "abc"; avatar.show_initials = false; } else if (cached != null) { avatar.text = account.display_name; avatar.show_initials = true; } avatar.set_image_load_func (avatar_set_pixbuf); } Pixbuf? avatar_set_pixbuf (int size) { if (cached == null || cached.data == null) return null; else { var pb = cached.data; if (pb.width != size) return pb.scale_simple (size, size, InterpType.BILINEAR); else return pb; } } } tootle-1.0-alpha2/src/Widgets/Conversation.vala000066400000000000000000000024401374710545700215560ustar00rootroot00000000000000using Gtk; public class Tootle.Widgets.Conversation : Widgets.Status { public API.Conversation conversation { get; construct set; } public Conversation (API.Conversation entity) { Object (conversation: entity, status: entity.last_status); conversation.bind_property ("unread", this.indicator, "visible", BindingFlags.SYNC_CREATE); this.indicators.child_set_property (this.indicator, "position", 2); this.indicator.opacity = 1; this.indicator.icon_name = Desktop.fallback_icon ( "software-update-urgent-symbolic", "dialog-warning-symbolic"); this.actions.destroy (); } public new string title_text { owned get { var label = ""; foreach (API.Account account in conversation.accounts) { label += "" + Html.simplify (account.display_name) + ""; if (conversation.accounts.last () != account) label += ", "; } return label; } } public new string subtitle_text { owned get { var label = ""; foreach (API.Account account in conversation.accounts) { label += account.handle + " "; } return label; } } public new string? avatar_url { owned get { if (conversation.accounts.size > 1) return null; else return conversation.accounts.get (0).avatar; } } public override void on_open () { conversation.open (); } } tootle-1.0-alpha2/src/Widgets/Notification.vala000066400000000000000000000013301374710545700215270ustar00rootroot00000000000000using Gtk; public class Tootle.Widgets.Notification : Widgets.Status { public API.Notification notification { get; construct set; } public Notification (API.Notification obj) { API.Status status; if (obj.status != null) status = obj.status; else status = new API.Status.from_account (obj.account); Object (notification: obj, status: status); this.kind = obj.kind; } protected override void on_kind_changed () { if (kind == null) return; header_icon.visible = header_label.visible = true; header_icon.icon_name = kind.get_icon (); header_label.label = kind.get_desc (notification.account); } } tootle-1.0-alpha2/src/Widgets/RichLabel.vala000066400000000000000000000031251374710545700207320ustar00rootroot00000000000000using Gtk; using Gee; public class Tootle.Widgets.RichLabel : Label { public weak ArrayList? mentions; public string text { get { return this.label; } set { this.label = escape_entities (Html.simplify (value)); } } construct { use_markup = true; xalign = 0; wrap_mode = Pango.WrapMode.WORD_CHAR; justify = Justification.LEFT; single_line_mode = false; set_line_wrap (true); } public RichLabel (string text) { set_label (text); } public static string escape_entities (string content) { return content .replace (" ", " ") .replace ("'", "'"); } public static string restore_entities (string content) { return content .replace ("&", "&") .replace ("<", "<") .replace (">", ">") .replace ("'", "'") .replace (""", "\""); } public override bool activate_link (string url) { if (mentions != null){ mentions.@foreach (mention => { if (url == mention.url) mention.open (); return true; }); } if ("/tags/" in url) { var encoded = url.split ("/tags/")[1]; var tag = Soup.URI.decode (encoded); window.open_view (new Views.Hashtag (tag)); return true; } var resolve = settings.aggressive_resolving || ("@" in url); if (!resolve) Desktop.open_uri (url); else { accounts.active.resolve.begin (url, (obj, res) => { try { accounts.active.resolve.end (res).open (); } catch (Error e) { warning (@"Failed to resolve URL \"$url\":"); warning (e.message); Desktop.open_uri (url); } }); } return true; } } tootle-1.0-alpha2/src/Widgets/Status.vala000066400000000000000000000210771374710545700203760ustar00rootroot00000000000000using Gtk; using Gdk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/status.ui")] public class Tootle.Widgets.Status : ListBoxRow { public API.Status status { get; construct set; } public API.NotificationType? kind { get; construct set; } public enum ThreadRole { NONE, START, MIDDLE, END; public static void connect_posts (Widgets.Status? prev, Widgets.Status curr) { if (prev == null) { curr.thread_role = NONE; return; } switch (prev.thread_role) { case NONE: prev.thread_role = START; curr.thread_role = END; break; case END: prev.thread_role = MIDDLE; curr.thread_role = END; break; } } } public ThreadRole thread_role { get; set; default = ThreadRole.NONE; } [GtkChild] protected Grid grid; [GtkChild] protected Image header_icon; [GtkChild] protected Widgets.RichLabel header_label; [GtkChild] public Image thread_line; [GtkChild] public Widgets.Avatar avatar; [GtkChild] protected Widgets.RichLabel name_label; [GtkChild] protected Widgets.RichLabel handle_label; [GtkChild] protected Box indicators; [GtkChild] protected Widgets.RichLabel date_label; [GtkChild] protected Image pin_indicator; [GtkChild] protected Image indicator; [GtkChild] protected Box content_column; [GtkChild] protected Stack spoiler_stack; [GtkChild] protected Box content_box; [GtkChild] protected Widgets.RichLabel content; [GtkChild] protected Widgets.Attachment.Box attachments; [GtkChild] protected Button spoiler_button; [GtkChild] protected Widgets.RichLabel spoiler_label; [GtkChild] protected Box actions; [GtkChild] protected Button reply_button; [GtkChild] protected Image reply_button_icon; [GtkChild] protected ToggleButton reblog_button; [GtkChild] protected Image reblog_icon; [GtkChild] protected ToggleButton favorite_button; [GtkChild] protected ToggleButton bookmark_button; [GtkChild] protected Button menu_button; protected string spoiler_text { owned get { var text = status.formal.spoiler_text; if (text == null || text == "") return _("Click to show sensitive content"); else return text; } } public bool reveal_spoiler { get; set; default = false; } protected string date { owned get { return DateTime.humanize (status.formal.created_at); } } public string title_text { owned get { return Html.simplify (status.formal.account.display_name); } } public string subtitle_text { owned get { return status.formal.account.handle; } } public string? avatar_url { owned get { return status.formal.account.avatar; } } public signal void open (); public virtual void on_open () { if (status.id == "") on_avatar_clicked (); else status.open (); } construct { notify["kind"].connect (on_kind_changed); open.connect (on_open); if (kind == null) { if (status.reblog != null) kind = API.NotificationType.REBLOG_REMOTE_USER; } status.formal.bind_property ("favourited", favorite_button, "active", BindingFlags.SYNC_CREATE); favorite_button.clicked.connect (() => { status.action (status.formal.favourited ? "unfavourite" : "favourite"); }); status.formal.bind_property ("reblogged", reblog_button, "active", BindingFlags.SYNC_CREATE); reblog_button.clicked.connect (() => { status.action (status.formal.reblogged ? "unreblog" : "reblog"); }); status.formal.bind_property ("bookmarked", bookmark_button, "active", BindingFlags.SYNC_CREATE); bookmark_button.clicked.connect (() => { status.action (status.formal.bookmarked ? "unbookmark" : "bookmark"); }); reply_button.clicked.connect (() => new Dialogs.Compose.reply (status)); if (status.formal.in_reply_to_id != null) reply_button_icon.icon_name = "mail-reply-all-symbolic"; else reply_button_icon.icon_name = "mail-reply-sender-symbolic"; bind_property ("spoiler-text", spoiler_label, "text", BindingFlags.SYNC_CREATE); status.formal.bind_property ("content", content, "text", BindingFlags.SYNC_CREATE); bind_property ("title_text", name_label, "text", BindingFlags.SYNC_CREATE); bind_property ("subtitle_text", handle_label, "text", BindingFlags.SYNC_CREATE); bind_property ("date", date_label, "label", BindingFlags.SYNC_CREATE); status.formal.bind_property ("pinned", pin_indicator, "visible", BindingFlags.SYNC_CREATE); status.formal.bind_property ("account", avatar, "account", BindingFlags.SYNC_CREATE); status.formal.bind_property ("has-spoiler", this, "reveal-spoiler", BindingFlags.SYNC_CREATE, (b, src, ref target) => { target.set_boolean (!src.get_boolean ()); return true; }); bind_property ("reveal-spoiler", spoiler_stack, "visible-child-name", BindingFlags.SYNC_CREATE, (b, src, ref target) => { var name = reveal_spoiler ? "content" : "spoiler"; target.set_string (name); return true; }); if (status.formal.visibility == API.Visibility.DIRECT) { reblog_icon.icon_name = status.formal.visibility.get_icon (); reblog_button.sensitive = false; reblog_button.tooltip_text = _("This post can't be boosted"); } if (status.id == "") { actions.destroy (); date_label.destroy (); content.single_line_mode = true; content.lines = 2; content.ellipsize = Pango.EllipsizeMode.END; } if (!attachments.populate (status.formal.media_attachments) || status.id == "") { attachments.destroy (); } menu_button.clicked.connect (open_menu); } public Status (API.Status status, API.NotificationType? kind = null) { Object ( status: status, kind: kind ); } ~Status () { notify["kind"].disconnect (on_kind_changed); } [GtkCallback] public void toggle_spoiler () { reveal_spoiler = !reveal_spoiler; } protected virtual void on_kind_changed () { header_icon.visible = header_label.visible = (kind != null); if (kind == null) return; header_icon.icon_name = kind.get_icon (); header_label.label = kind.get_desc (status.account); } [GtkCallback] public void on_avatar_clicked () { status.formal.account.open (); } protected void open_menu () { var menu = new Gtk.Menu (); var item_open_link = new Gtk.MenuItem.with_label (_("Open in Browser")); item_open_link.activate.connect (() => Desktop.open_uri (status.formal.url)); var item_copy_link = new Gtk.MenuItem.with_label (_("Copy Link")); item_copy_link.activate.connect (() => Desktop.copy (status.formal.url)); var item_copy = new Gtk.MenuItem.with_label (_("Copy Text")); item_copy.activate.connect (() => { var sanitized = Html.remove_tags (status.formal.content); Desktop.copy (sanitized); }); // if (is_notification) { // var item_muting = new Gtk.MenuItem.with_label (status.muted ? _("Unmute Conversation") : _("Mute Conversation")); // item_muting.activate.connect (() => status.update_muted (!is_muted) ); // menu.add (item_muting); // } menu.add (item_open_link); menu.add (new SeparatorMenuItem ()); menu.add (item_copy_link); menu.add (item_copy); if (status.is_owned ()) { menu.add (new SeparatorMenuItem ()); var item_pin = new Gtk.MenuItem.with_label (status.pinned ? _("Unpin from Profile") : _("Pin on Profile")); item_pin.activate.connect (() => { status.action (status.formal.pinned ? "unpin" : "pin"); }); menu.add (item_pin); var item_delete = new Gtk.MenuItem.with_label (_("Delete")); item_delete.activate.connect (() => { status.annihilate () .then ((sess, mess) => { streams.force_delete (status.id); }) .exec (); }); menu.add (item_delete); var item_redraft = new Gtk.MenuItem.with_label (_("Redraft")); item_redraft.activate.connect (() => new Dialogs.Compose.redraft (status.formal)); menu.add (item_redraft); } menu.show_all (); menu.popup_at_widget (menu_button, Gravity.SOUTH_EAST, Gravity.SOUTH_EAST); } public void expand_root () { activatable = false; content.selectable = true; content.get_style_context ().add_class ("ttl-large-body"); var parent = content_column.get_parent () as Container; var left_attach = parent.find_child_property ("left-attach"); var width = parent.find_child_property ("width"); parent.set_child_property (content_column, 1, 0, left_attach); parent.set_child_property (content_column, 3, 2, width); } public void install_thread_line () { var l = thread_line; switch (thread_role) { case NONE: l.visible = false; break; case START: l.valign = Align.FILL; l.margin_top = 24; l.visible = true; break; case MIDDLE: l.valign = Align.FILL; l.margin_top = 0; l.visible = true; break; case END: l.valign = Align.START; l.margin_top = 0; l.visible = true; break; } } } tootle-1.0-alpha2/src/Widgets/TimelineMenu.vala000066400000000000000000000006071374710545700215020ustar00rootroot00000000000000using Gtk; [GtkTemplate (ui = "/com/github/bleakgrey/tootle/ui/widgets/timeline_menu.ui")] public class Tootle.Widgets.TimelineMenu : MenuButton { [GtkChild] public Label title; [GtkChild] public Label subtitle; public TimelineMenu (string id) { var builder = new Builder.from_resource (@"$(Build.RESOURCES)ui/menus.ui"); menu_model = builder.get_object (id) as MenuModel; } } tootle-1.0-alpha2/src/Widgets/VisibilityPopover.vala000066400000000000000000000021761374710545700226140ustar00rootroot00000000000000using Gtk; public class Tootle.Widgets.VisibilityPopover: Popover { public API.Visibility selected { get; set; default = API.Visibility.PUBLIC; } RadioButton? group_owner; MenuButton button; construct { var box = new Box (Orientation.VERTICAL, 8); box.margin = 12; box.show (); add (box); int i = 0; foreach (API.Visibility item in API.Visibility.all ()){ var radio = new RadioButton.from_widget (group_owner); radio.set_data ("i", (int) item); if (group_owner == null) group_owner = radio; box.pack_start (radio, true, true, 0); radio.toggled.connect (() => { selected = item; popdown (); }); var label = new Label (@"$(item.get_name())\n$(item.get_desc())"); label.use_markup = true; label.xalign = 0; label.margin_start = 8; radio.add (label); i++; } box.show_all (); } public VisibilityPopover.with_button (MenuButton w) { button = w; button.popover = this; } public void invalidate () { unowned var group = group_owner.get_group (); group.@foreach (w => { int i = w.get_data ("i"); if (i == (int) selected) w.active = true; }); } } tootle-1.0-alpha2/src/Widgets/Widgetizable.vala000066400000000000000000000005631374710545700215220ustar00rootroot00000000000000public interface Tootle.Widgetizable : GLib.Object { public virtual Gtk.Widget to_widget () throws Oopsie { throw new Tootle.Oopsie.INTERNAL ("Widgetizable didn't provide a Widget!"); } public virtual void open () { warning ("Widgetizable didn't provide a way to open it!"); } public virtual void resolve_open (InstanceAccount account) { this.open (); } } tootle-1.0-alpha2/subprojects/000077500000000000000000000000001374710545700164055ustar00rootroot00000000000000tootle-1.0-alpha2/subprojects/libhandy.wrap000066400000000000000000000003531374710545700210730ustar00rootroot00000000000000[wrap-file] directory=libhandy-1.0.0 source_url=https://gitlab.gnome.org/GNOME/libhandy/-/archive/1.0.0/libhandy-1.0.0.tar source_filename=libhandy-1.0.0.tar source_hash=09de6ddc34f2b37836da47f9042d141cef3832180524f30fc8f38fa61f04a2c9 tootle-1.0-alpha2/uninstall.sh000077500000000000000000000000611374710545700164070ustar00rootroot00000000000000cd build sudo ninja uninstall cd .. rm -rf build