pax_global_header00006660000000000000000000000064152232553000014507gustar00rootroot0000000000000052 comment=ce9f545700f65b45e9d2feed7ee88dd4701a356d awf-extended-4.2.0/000077500000000000000000000000001522325530000140655ustar00rootroot00000000000000awf-extended-4.2.0/.gitignore000066400000000000000000000002441522325530000160550ustar00rootroot00000000000000# autoreconf -if /build-aux/ /configure /aclocal.m4 /autom4te.cache/ Makefile.in # ./configure /config.log /config.status Makefile .deps/ # make /src/awf-gtk? *.oawf-extended-4.2.0/LICENSE000066400000000000000000001045131522325530000150760ustar00rootroot00000000000000 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 . awf-extended-4.2.0/Makefile.am000066400000000000000000000000421522325530000161150ustar00rootroot00000000000000MAKEFLAGS = --silent SUBDIRS = srcawf-extended-4.2.0/README.md000066400000000000000000000301721522325530000153470ustar00rootroot00000000000000# AWF - A widget factory (extended) A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. ## Screenshots GTK 2.24 (Pango 1.58)\ [Preview with GTK 2 - Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk2.png) [Preview with GTK 2 - Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk2-menu.png) [Preview with GTK 2 - RTL Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk2-rtl-menu.png) [Preview with GTK 2 - RTL Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk2-rtl.png) GTK 3.24-classic (Pango 1.58)\ [Preview with GTK 3 - Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk3.png) [Preview with GTK 3 - Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk3-menu.png) [Preview with GTK 3 - RTL Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk3-rtl-menu.png) [Preview with GTK 3 - RTL Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk3-rtl.png) GTK 4.12..4.23-classic (Pango 1.58)\ [Preview with GTK 4 - Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk4.png) [Preview with GTK 4 - Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk4-menu.png) [Preview with GTK 4 - RTL Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk4-rtl-menu.png) [Preview with GTK 4 - RTL Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/gtk4-rtl.png) GTK 5.0\ _GtkWindow will be probably deprecated... lol_ Qt 5.15\ [Preview with Qt 5 - Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt5.png) [Preview with Qt 5 - Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt5-menu.png) [Preview with Qt 5 - RTL Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt5-rtl-menu.png) [Preview with Qt 5 - RTL Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt5-rtl.png) Qt 6.10\ [Preview with Qt 6 - Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt6.png) [Preview with Qt 6 - Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt6-menu.png) [Preview with Qt 6 - RTL Main window with menu](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt6-rtl-menu.png) [Preview with Qt 6 - RTL Main window](https://raw.githubusercontent.com/luigifab/human-theme/master/images/qt6-rtl.png) Theme used for the screenshots is available [here](https://github.com/luigifab/human-theme). ## Tricks * Some options are available from the command line (see `-h`, `--help`, or the man page) * The _Options_ menu allows you to display some dialogs * The _System themes_ and _User themes_ menu allows you to set the current theme * The _Text Direction_ menu allows you to change the text direction (LTR/RTL) * The _Info_ toolbar button allows you to display a notification * The _Plus/Minus_ toolbar buttons allow you to show/hide notebook arrows, marks on progress bars and scales... * The _Refresh_ toolbar button and menu item allow you to reload the current theme (like the `SIGHUP` signal) * Notebook tabs are scrollable (GTK 3.x & 4.x, *gtk-scroll-tabs*, like with GTK 2.24 + Qt 5.x & 6.x) * Menu keyboard shortcuts can be updated on hover (GTK 2.24 & 3.x + Qt 5.x & 6.x, *gtk-can-change-accels*) * Use `AWF_DEBUG=1` and `AWF_TRACE=1` to enable some debug messages * Use `AWF_TEAROFF=1` to add a tear-off item to the Options menu (GTK 2.24 & 3.x + Qt 5.x & 6.x) * Use `GTK_OVERLAY_SCROLLING=0` to make scrollbars always visible (GTK 3.16+ & 4.x) * Use `GTK_CSD=1` to enable CSD windows (GTK 3.12+ & 4.x) * Use `UBUNTU_MENUPROXY=` on Ubuntu to allow updating menu keyboard shortcuts on hover ## Broadway Start the server with `broadwayd &` and run `GDK_BACKEND=broadway awf-gtk3`, then go to http://localhost:8080/ (*libgtk-3-bin*). ## Installation For GTK, it requires **GTK 2.24** or **GTK 3.0+** *(including 3.24)* or **GTK 4.0+** *(including 4.23)*, *GLIB 2.28+*, *libnotify 0.7+*. For Qt, it requires **Qt 5.0+** *(including 5.15)* or **Qt 6.0+** *(including 6.11)*, *[GlobalQSS](https://github.com/luigifab/globalqss)* for theme support. > The road is long, but the way is free — we always have a choice. #### Install via package manager * `sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6` * `sudo dnf install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6` Replace `apt`/`dnf` with your package manager, or use a graphical interface. #### Build from source * To compile with all available major versions of GTK and Qt available run: `build.sh` * To compile and create DEB packages for Debian & Ubuntu run: `scripts/debian-[gtkx|qtx]/deb.sh` * To compile and create RPM packages for Fedora run: `scripts/fedora/rpm-[gtkx|qtx].sh` * To compile and create EXE for Windows (XP) run: `scripts/windows/zip.sh` #### Install via PPA ```bash # PPA: https://launchpad.net/~luigifab/+archive/ubuntu/packages # from Debian 12 you can use noble/questing (unix.stackexchange.com/a/669008/364800) # Debian: focal for 10/buster, jammy for 11/bullseye, noble for 12/bookworm, # plucky for 13/trixie, questing for 14/forky and 15/duke # Devuan: focal for 3/beowulf, jammy for 4/chimaera, noble for 5/daedalus, # plucky for 6/excalibur, questing for 7/freia and 8/gryphon and ceres # Linux Mint: focal for 20.x and 4/debbie, jammy for 21.x and 5/elsie, # noble for 22.x and 6/faye, plucky for 7/gigi # MX Linux: focal for 19.x, jammy for 21.x, noble for 23.x, questing for 25.x # Trisquel: focal for nabia, jammy for aramo # Kali Linux: questing sudo add-apt-repository ppa:luigifab/packages sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # or sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys FFE5BD439356DF7D echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # or sudo wget -O /etc/apt/trusted.gpg.d/luigifab.gpg https://www.luigifab.fr/apt.gpg echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # or wget -qO - https://www.luigifab.fr/apt.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/luigifab.gpg echo "deb http://ppa.launchpad.net/luigifab/packages/ubuntu focal main" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt install awf-gtk2 awf-gtk3 awf-gtk4 awf-qt5 awf-qt6 # ... and for full installation sudo apt install qt5-gtk-platformtheme qt5-style-globalqss qttranslations5-l10n qt6-gtk-platformtheme qt6-style-globalqss qt6-svg-plugins qt6-translations-l10n libnotify-bin # sha256sum /etc/apt/trusted.gpg.d/luigifab.gpg 578c89a677048e38007462d543686b53587efba9f93814601169253c45ff9213 # apt-key list /etc/apt/trusted.gpg.d/luigifab.gpg pub rsa4096 2020-10-31 [SC] 458B 0C46 D024 FD8C B8BC 99CD FFE5 BD43 9356 DF7D ``` ## Known issues #### GTK 3 For better results, use gtk3-classic. #### GTK 4 For better results, use gtk4-classic. If font rendering is bad, try to add in `~/.config/gtk-4.0/settings.ini`: ``` [Settings] gtk-font-rendering=manual gtk-hint-font-metrics=1 gtk-xft-hintstyle=hintfull gtk-xft-antialias=0 gtk-xft-hinting=1 ``` #### GTK 5 From [migrating guide](https://docs.gtk.org/gtk4/migrating-4to5.html#non-standard-css-extensions-are-going-away): _non-standard CSS extensions are going away [...] @define-color should be replaced [...] the color functions can all be replaced by combinations of calc() and color-mix()_. I think it would be nice to create a patch to fix this GTK regression. #### Qt 5 & 6 On Fedora with Qt 5, the GTK 3 platform theme _(qt5-qtbase-gui)_ works better than on Debian _(qt5-gtk-platformtheme)_, but the fonts remain blurry, see [bug 2459509](https://bugzilla.redhat.com/show_bug.cgi?id=2459509). ## Customize For GTK, use `~/.config/gtk-3.0/gtk.css` and `~/.config/gtk-4.0/gtk.css` files. For Qt, with [GlobalQSS](https://github.com/luigifab/globalqss), use `~/.config/qt5/qt.qss` and `~/.config/qt6/qt.qss` files. ```css #AwfMainWindow { } #AwfDialogWindow { } AwfTreeView { qproperty-columnWidths:"1,2,3,4,5,6,7,8,9,10,11"; /* qt */ } .awf-cheatcode-colorbtn { background:red; /* qt */ } .awf-cheatcode-fontbtn { background:red; /* qt */ } .awf-cheatcode-filebtn { background:red; /* qt + gtk 4 */ } .awf-cheatcode-folderbtn { background:red; /* qt + gtk 4 */ } ``` ## Dev To reload theme when source files change, you can use [Entr](https://github.com/eradman/entr) with the `SIGHUP` signal: ``` sudo apt install entr or sudo dnf install entr or sudo zypper install entr or ... ls ~/.themes/yourtheme/gtk-3*/*.css | entr killall -s SIGHUP awf-gtk3 ls ~/.themes/yourtheme/qt6/*.qss | entr killall -s SIGHUP awf-qt6 ``` ## Copyright - Current version: 4.2.0 (07/07/2026) - Compatibility: GTK 2.24 / 3.0..3.24 / 4.0..4.23, Qt 5.0..5.15 / 6.0..6.11 - Links: [luigifab.fr](https://www.luigifab.fr/gtkqt/awf-extended) - [github.com](https://github.com/luigifab/awf-extended) - [ppa/dpa](https://launchpad.net/~luigifab/+archive/ubuntu/packages) This program is provided under the terms of the **GNU GPLv3+** license.\ If you like, take some of your time to improve the translations, go to https://bit.ly/2HyCCEc. ## Credits Forked from [awf](https://github.com/valr/awf) by Valère Monseur (valr). awf-extended-4.2.0/build.sh000066400000000000000000000034521522325530000155240ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install build-essential dh-make dh-autoreconf pkgconf intltool libnotify-dev libgtk2.0-dev libgtk-3-dev libgtk-4-dev libgtk-5-dev qtbase5-dev qt6-base-dev qt7-base-dev libnotify-bin # Fedora: sudo dnf install autoconf automake libnotify-devel gtk2-devel gtk3-devel gtk4-devel gtk5-devel desktop-file-utils qt5-qtbase-devel qt6-qtbase-devel qt7-qtbase-devel # openSUSE: sudo zypper install autoconf automake libnotify-devel gtk2-devel gtk3-devel gtk4-devel gtk5-devel desktop-file-utils qt5-base-devel qt6-base-devel qt7-base-devel # # supported options for build.sh/configure.ac # none # OR # --disable-gtk2 --disable-gtk3 --disable-gtk4 --disable-gtk5 --disable-qt5 --disable-qt6 --disable-qt7 # OR # --enable-only-gtk2 # OR # --enable-only-gtk3 # OR # --enable-only-gtk4 # OR # --enable-only-gtk5 # OR # --enable-only-qt5 # OR # --enable-only-qt6 # OR # --enable-only-qt7 rm -rf awf-gtk2* awf-gtk3* awf-gtk4* awf-gtk5* awf-qt5* awf-qt6* awf-qt7* builder/ # copy to a tmp directory mkdir builder builder/src builder/data cp /usr/share/common-licenses/GPL*3 builder/LICENSE cp configure.ac builder/ cp Makefile.am builder/ cp src/Makefile.am builder/src/ cp src/awf-gtk*.c builder/src/ cp src/awf-qt*.cpp builder/src/ cp src/awf.rc builder/src/ # for windows cp data/awf.ico builder/data/ # for make install cp data/awf*.bash builder/data/ cp data/awf*.desktop builder/data/ cp data/awf*.1 builder/data/ cp -r data/icons builder/data/ # build cd builder/ autoreconf -fi && ./configure "$@" && make -s result=$? cd .. # final if [ $result -eq 0 ]; then cp builder/src/awf-gtk* builder/src/awf-qt* . rm -f awf-gtk*.c awf-qt*.cpp awf-qt*.moc awf-qt*.o ls -altrh awf-gtk2* awf-gtk3* awf-gtk4* awf-gtk5* awf-qt5* awf-qt6* awf-qt7* fi rm -rf builder/awf-extended-4.2.0/configure.ac000066400000000000000000000206371522325530000163630ustar00rootroot00000000000000# supported options # none # OR # --disable-gtk2 --disable-gtk3 --disable-gtk4 --disable-gtk5 --disable-qt5 --disable-qt6 --disable-qt7 # OR # --enable-only-gtk2 # OR # --enable-only-gtk3 # OR # --enable-only-gtk4 # OR # --enable-only-gtk5 # OR # --enable-only-qt5 # OR # --enable-only-qt6 # OR # --enable-only-qt7 AC_INIT([A widget factory], [4.2.0], [https://github.com/luigifab/awf-extended/issues], [awf-extended], [https://github.com/luigifab/awf-extended]) AC_CONFIG_SRCDIR([src/]) AM_INIT_AUTOMAKE([foreign]) AC_PROG_CC AC_PROG_CXX PKG_PROG_PKG_CONFIG # --disable-gtkx --disable-qtx AC_ARG_ENABLE([gtk5], AS_HELP_STRING([--disable-gtk5], [disable gtk5 (default: enabled if available)]), [enable_gtk5=no], [enable_gtk5=yes]) AC_ARG_ENABLE([gtk4], AS_HELP_STRING([--disable-gtk4], [disable gtk4 (default: enabled if available)]), [enable_gtk4=no], [enable_gtk4=yes]) AC_ARG_ENABLE([gtk3], AS_HELP_STRING([--disable-gtk3], [disable gtk3 (default: enabled if available)]), [enable_gtk3=no], [enable_gtk3=yes]) AC_ARG_ENABLE([gtk2], AS_HELP_STRING([--disable-gtk2], [disable gtk2 (default: enabled if available)]), [enable_gtk2=no], [enable_gtk2=yes]) AC_ARG_ENABLE([qt7], AS_HELP_STRING([--disable-qt7], [disable qt7 (default: enabled if available)]), [enable_qt7=no], [enable_qt7=yes]) AC_ARG_ENABLE([qt6], AS_HELP_STRING([--disable-qt6], [disable qt6 (default: enabled if available)]), [enable_qt6=no], [enable_qt6=yes]) AC_ARG_ENABLE([qt5], AS_HELP_STRING([--disable-qt5], [disable qt5 (default: enabled if available)]), [enable_qt5=no], [enable_qt5=yes]) # --enable-only-gtkx --enable-only-qtx AC_ARG_ENABLE([only-gtk5], AS_HELP_STRING([--enable-only-gtk5], [only enable gtk5]), [only_gtk=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=yes enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-gtk4], AS_HELP_STRING([--enable-only-gtk4], [only enable gtk4]), [only_gtk=yes enable_gtk2=no enable_gtk3=no enable_gtk4=yes enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-gtk3], AS_HELP_STRING([--enable-only-gtk3], [only enable gtk3]), [only_gtk=yes enable_gtk2=no enable_gtk3=yes enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-gtk2], AS_HELP_STRING([--enable-only-gtk2], [only enable gtk2]), [only_gtk=yes enable_gtk2=yes enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=no], []) AC_ARG_ENABLE([only-qt7], AS_HELP_STRING([--enable-only-qt7], [only enable qt7]), [only_qt=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=no enable_qt7=yes], []) AC_ARG_ENABLE([only-qt6], AS_HELP_STRING([--enable-only-qt6], [only enable qt6]), [only_qt=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=no enable_qt6=yes enable_qt7=no], []) AC_ARG_ENABLE([only-qt5], AS_HELP_STRING([--enable-only-qt5], [only enable qt5]), [only_qt=yes enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no enable_qt5=yes enable_qt6=no enable_qt7=no], []) # gettext AC_PATH_PROG([MSGFMT], [msgfmt]) if test -z "$MSGFMT"; then AC_MSG_ERROR([gettext/msgfmt not found (FATAL)]) fi # check if it's windows case "`uname -s`" in *MINGW* | *CYGWIN* | *MSYS*) windows=yes ;; *) windows=no ;; esac AM_CONDITIONAL([WINDOWS], [test "x$windows" = "xyes"]) AC_CHECK_TOOL([WINDRES], [windres]) if test "x$windows" = "xyes" && test -z "$WINDRES"; then AC_MSG_ERROR([windres not found (FATAL)]) fi # C & libnotify / C++ # to avoid the following stupid error without gtk, pkgconf is required (in Build-Depends) # ./configure: line 5306: syntax error near unexpected token `LIBNOTIFY,' # ./configure: line 5306: `PKG_CHECK_MODULES... # for windows, libnotify is not required PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= 0.7.0, have_libnotify=yes, have_libnotify=no) if test "x$windows" = "xyes"; then have_libnotify=ignore fi if test "x$enable_gtk5" = "xyes" || test "x$enable_gtk4" = "xyes" || test "x$enable_gtk3" = "xyes" || test "x$enable_gtk2" = "xyes"; then compiler=$(command -v ${CC%% *}) if test "x$only_gtk" = "xyes" && test "x$compiler" = "x"; then AC_MSG_ERROR([C compiler not found (FATAL)]) elif test "x$compiler" = "x"; then enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no elif test "x$have_libnotify" = "xno"; then if test "x$only_gtk" = "xyes"; then AC_MSG_ERROR([libnotify not found (FATAL)]) fi enable_gtk2=no enable_gtk3=no enable_gtk4=no enable_gtk5=no fi fi if test "x$enable_qt7" = "xyes" || test "x$enable_qt6" = "xyes" || test "x$enable_qt5" = "xyes"; then compiler=$(command -v ${CXX%% *}) if test "x$only_qt" = "xyes" && test "x$compiler" = "x"; then AC_MSG_ERROR([C++ compiler not found (FATAL)]) elif test "x$compiler" = "x"; then enable_qt5=no enable_qt6=no enable_qt7=no fi fi # GTK 5 PKG_CHECK_MODULES(GTK5, gtk5, GTK5_SUFFIX=5, GTK5_SUFFIX=-5) if test "x$enable_gtk5" = "xyes"; then if test "x$only_gtk" = "xyes" && test "x$GTK5_SUFFIX" != "x5"; then AC_MSG_ERROR([GTK5 not found (FATAL)]) fi AM_CONDITIONAL([GTK5], [test "x$GTK5_SUFFIX" = "x5"]) else AM_CONDITIONAL([GTK5], [false]) fi # GTK 4 PKG_CHECK_MODULES(GTK4, gtk4, GTK4_SUFFIX=4, GTK4_SUFFIX=-4) if test "x$enable_gtk4" = "xyes"; then if test "x$only_gtk" = "xyes" && test "x$GTK4_SUFFIX" != "x4"; then AC_MSG_ERROR([GTK4 not found (FATAL)]) fi AM_CONDITIONAL([GTK4], [test "x$GTK4_SUFFIX" = "x4"]) else AM_CONDITIONAL([GTK4], [false]) fi # GTK 3 PKG_CHECK_MODULES(GTK3, gtk+-3.0, GTK3_SUFFIX=3, GTK3_SUFFIX=-3) if test "x$enable_gtk3" = "xyes"; then if test "x$only_gtk" = "xyes" && test "x$GTK3_SUFFIX" != "x3"; then AC_MSG_ERROR([GTK3 not found (FATAL)]) fi AM_CONDITIONAL([GTK3], [test "x$GTK3_SUFFIX" = "x3"]) else AM_CONDITIONAL([GTK3], [false]) fi # GTK 2 PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.24.0, GTK2_SUFFIX=2, GTK2_SUFFIX=-2) if test "x$enable_gtk2" = "xyes"; then if test "x$only_gtk" = "xyes" && test "x$GTK2_SUFFIX" != "x2"; then AC_MSG_ERROR([GTK2 not found (FATAL)]) fi AM_CONDITIONAL([GTK2], [test "x$GTK2_SUFFIX" = "x2"]) else AM_CONDITIONAL([GTK2], [false]) fi # QT 7 PKG_CHECK_MODULES(QT7, [Qt7Core Qt7Gui Qt7Widgets Qt7PrintSupport], QT7_SUFFIX=7, QT7_SUFFIX=-7) if test "x$enable_qt7" = "xyes"; then if test "x$only_qt" = "xyes" && test "x$QT7_SUFFIX" != "x7"; then AC_MSG_ERROR([QT7 not found (FATAL)]) fi AM_CONDITIONAL([QT7], [test "x$QT7_SUFFIX" = "x7"]) if test "x$QT7_SUFFIX" = "x7"; then QT7_BINDIR=`$PKG_CONFIG --variable=libexecdir Qt7Core` QT7_MOC="$QT7_BINDIR/moc" fi else AM_CONDITIONAL([QT7], [false]) fi AC_SUBST(QT7_MOC) # QT 6 # Ubuntu 22.04 Jammy & pkgconf 6.2.4, pc files are missing (https://bugs.launchpad.net/ubuntu/+source/qt6-base/+bug/2067202), so it's not working # and pkg-config may return an incorrect path, fallback to qtpaths6 PKG_CHECK_MODULES(QT6, [Qt6Core Qt6Gui Qt6Widgets Qt6PrintSupport], QT6_SUFFIX=6, QT6_SUFFIX=-6) if test "x$enable_qt6" = "xyes"; then if test "x$only_qt" = "xyes" && test "x$QT6_SUFFIX" != "x6"; then AC_MSG_ERROR([QT6 not found (FATAL)]) fi AM_CONDITIONAL([QT6], [test "x$QT6_SUFFIX" = "x6"]) if test "x$QT6_SUFFIX" = "x6"; then QT6_BINDIR=`$PKG_CONFIG --variable=libexecdir Qt6Core` if test -z "$QT6_BINDIR"; then QT6_BINDIR=`LC_ALL=C.UTF-8 qtpaths6 --query QT_INSTALL_LIBEXECS` fi QT6_MOC="$QT6_BINDIR/moc" fi else AM_CONDITIONAL([QT6], [false]) fi AC_SUBST(QT6_MOC) # QT 5 qt5_modules="Qt5Core Qt5Gui Qt5Widgets Qt5PrintSupport" if test "x$windows" = "xyes"; then qt5_modules="Qt5Core Qt5Gui Qt5Widgets Qt5PrintSupport Qt5WinExtras" fi PKG_CHECK_MODULES(QT5, [$qt5_modules], QT5_SUFFIX=5, QT5_SUFFIX=-5) if test "x$enable_qt5" = "xyes"; then if test "x$only_qt" = "xyes" && test "x$QT5_SUFFIX" != "x5"; then AC_MSG_ERROR([QT5 not found (FATAL)]) fi AM_CONDITIONAL([QT5], [test "x$QT5_SUFFIX" = "x5"]) if test "x$QT5_SUFFIX" = "x5"; then QT5_BINDIR=`$PKG_CONFIG --variable=host_bins Qt5Core 2>/dev/null` if test -z "$QT5_BINDIR"; then QT5_BINDIR=`$PKG_CONFIG --variable=bindir Qt5Core` fi QT5_MOC="$QT5_BINDIR/moc" fi else AM_CONDITIONAL([QT5], [false]) fi AC_SUBST(QT5_MOC) # files AC_CONFIG_FILES([ Makefile src/Makefile ]) AC_OUTPUTawf-extended-4.2.0/data/000077500000000000000000000000001522325530000147765ustar00rootroot00000000000000awf-extended-4.2.0/data/awf-gtk2.1000066400000000000000000000024361522325530000165070ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk2 .Nd Theme preview application for GTK 2. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l , Fl Fl list List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a screenshot on SIGHUP (PNG). .It Fl Fl ltr Run with text from left to right (Left-To-Right). .It Fl Fl rtl Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_OVERLAY_SCROLLING=0 Keep scrollbars always visible. .It UBUNTU_MENUPROXY= Disable the Ubuntu global menu. .It AWF_DEBUG=1 Enable some debug messages. .It AWF_TRACE=1 Enable more debug messages. .It AWF_TEAROFF=1 Add a tear-off item to the Options menu. .Elawf-extended-4.2.0/data/awf-gtk2.bash000066400000000000000000000034541522325530000172650ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk2_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list [--list]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk2 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk2_complete awf-gtk2awf-extended-4.2.0/data/awf-gtk2.desktop000066400000000000000000000004761522325530000200220ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 2 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk2 Icon=awf-gtk2 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.2.0/data/awf-gtk2.fr.1000066400000000000000000000026771522325530000171240ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NOM .Nm awf-gtk2 .Nd Application d'aperçu de thème pour GTK 2. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l , Fl Fl list Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran lors du SIGHUP (PNG). .It Fl Fl ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl Fl rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .It UBUNTU_MENUPROXY= Désactive le menu global d'Ubuntu. .It AWF_DEBUG=1 Active les messages de debug. .It AWF_TRACE=1 Active davantage de messages de debug. .It AWF_TEAROFF=1 Ajoute un tear-off au menu Options. .Elawf-extended-4.2.0/data/awf-gtk3.1000066400000000000000000000025031522325530000165030ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk3 .Nd Theme preview application for GTK 3. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l , Fl Fl list List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a screenshot on SIGHUP (PNG). .It Fl Fl ltr Run with text from left to right (Left-To-Right). .It Fl Fl rtl Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable the CSD window. .It GTK_OVERLAY_SCROLLING=0 Keep scrollbars always visible. .It UBUNTU_MENUPROXY= Disable the Ubuntu global menu. .It AWF_DEBUG=1 Enable some debug messages. .It AWF_TRACE=1 Enable more debug messages. .It AWF_TEAROFF=1 Add a tear-off item to the Options menu. .Elawf-extended-4.2.0/data/awf-gtk3.bash000066400000000000000000000034541522325530000172660ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk3_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list [--list]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk3 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk3_complete awf-gtk3awf-extended-4.2.0/data/awf-gtk3.desktop000066400000000000000000000004761522325530000200230ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 3 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk3 Icon=awf-gtk3 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.2.0/data/awf-gtk3.fr.1000066400000000000000000000027451522325530000171210ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NOM .Nm awf-gtk3 .Nd Application d'aperçu de thème pour GTK 3. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l , Fl Fl list Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran lors du SIGHUP (PNG). .It Fl Fl ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl Fl rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .It UBUNTU_MENUPROXY= Désactive le menu global d'Ubuntu. .It AWF_DEBUG=1 Active les messages de debug. .It AWF_TRACE=1 Active davantage de messages de debug. .It AWF_TEAROFF=1 Ajoute un tear-off au menu Options. .Elawf-extended-4.2.0/data/awf-gtk4.1000066400000000000000000000024101522325530000165010ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk4 .Nd Theme preview application for GTK 4. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l , Fl Fl list List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a screenshot on SIGHUP (PNG). .It Fl Fl ltr Run with text from left to right (Left-To-Right). .It Fl Fl rtl Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable the CSD window. .It GTK_OVERLAY_SCROLLING=0 Keep scrollbars always visible. .It UBUNTU_MENUPROXY= Disable the Ubuntu global menu. .It AWF_DEBUG=1 Enable some debug messages. .It AWF_TRACE=1 Enable more debug messages. .Elawf-extended-4.2.0/data/awf-gtk4.bash000066400000000000000000000034541522325530000172670ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk4_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list [--list]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk4 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk4_complete awf-gtk4awf-extended-4.2.0/data/awf-gtk4.desktop000066400000000000000000000004761522325530000200240ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 4 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk4 Icon=awf-gtk4 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.2.0/data/awf-gtk4.fr.1000066400000000000000000000026571522325530000171240ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NOM .Nm awf-gtk4 .Nd Application d'aperçu de thème pour GTK 4. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l , Fl Fl list Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran lors du SIGHUP (PNG). .It Fl Fl ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl Fl rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .It UBUNTU_MENUPROXY= Désactive le menu global d'Ubuntu. .It AWF_DEBUG=1 Active les messages de debug. .It AWF_TRACE=1 Active davantage de messages de debug. .Elawf-extended-4.2.0/data/awf-gtk5.1000066400000000000000000000024101522325530000165020ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-gtk5 .Nd Theme preview application for GTK 5. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l , Fl Fl list List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a screenshot on SIGHUP (PNG). .It Fl Fl ltr Run with text from left to right (Left-To-Right). .It Fl Fl rtl Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Enable the CSD window. .It GTK_OVERLAY_SCROLLING=0 Keep scrollbars always visible. .It UBUNTU_MENUPROXY= Disable the Ubuntu global menu. .It AWF_DEBUG=1 Enable some debug messages. .It AWF_TRACE=1 Enable more debug messages. .Elawf-extended-4.2.0/data/awf-gtk5.bash000066400000000000000000000034541522325530000172700ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_gtk5_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list [--list]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-gtk5 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_gtk5_complete awf-gtk5awf-extended-4.2.0/data/awf-gtk5.desktop000066400000000000000000000004761522325530000200250ustar00rootroot00000000000000[Desktop Entry] Name=AWF GTK 5 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-gtk5 Icon=awf-gtk5 Terminal=false Type=Application Keywords=gtk;css; Categories=GTK;Development; StartupNotify=trueawf-extended-4.2.0/data/awf-gtk5.fr.1000066400000000000000000000026571522325530000171250ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NOM .Nm awf-gtk5 .Nd Application d'aperçu de thème pour GTK 5. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l , Fl Fl list Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran lors du SIGHUP (PNG). .It Fl Fl ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl Fl rtl Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "GTK_OVERLAY_SCROLLING=0" -compact .It GTK_CSD=1 Active la fenêtre CSD. .It GTK_OVERLAY_SCROLLING=0 Définit les barres de défilement comme étant toujours visibles. .It UBUNTU_MENUPROXY= Désactive le menu global d'Ubuntu. .It AWF_DEBUG=1 Active les messages de debug. .It AWF_TRACE=1 Active davantage de messages de debug. .Elawf-extended-4.2.0/data/awf-qt5.1000066400000000000000000000023521522325530000163460ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt5 .Nd Theme preview application for Qt 5. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l , Fl Fl list List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a screenshot on SIGHUP (PNG). .It Fl Fl ltr Run with text from left to right (Left-To-Right). .It Fl Fl rtl , Fl Fl reverse Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "UBUNTU_MENUPROXY=" -compact .It UBUNTU_MENUPROXY= Disable the Ubuntu global menu. .It AWF_DEBUG=1 Enable some debug messages. .It AWF_TRACE=1 Enable more debug messages. .It AWF_TEAROFF=1 Add a tear-off item to the Options menu. .Elawf-extended-4.2.0/data/awf-qt5.bash000066400000000000000000000034501522325530000171230ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_qt5_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list [--list]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-qt5 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_qt5_complete awf-qt5awf-extended-4.2.0/data/awf-qt5.desktop000066400000000000000000000004751522325530000176630ustar00rootroot00000000000000[Desktop Entry] Name=AWF Qt 5 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-qt5 Icon=awf-qt5 Terminal=false Type=Application Keywords=qt;css;qss; Categories=Qt;Development; StartupNotify=trueawf-extended-4.2.0/data/awf-qt5.fr.1000066400000000000000000000025501522325530000167540ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NOM .Nm awf-qt5 .Nd Application d'aperçu de thème pour Qt 5. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l , Fl Fl list Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran lors du SIGHUP (PNG). .It Fl Fl ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl Fl rtl , Fl Fl reverse Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "UBUNTU_MENUPROXY=" -compact .It UBUNTU_MENUPROXY= Désactive le menu global d'Ubuntu. .It AWF_DEBUG=1 Active les messages de debug. .It AWF_TRACE=1 Active davantage de messages de debug. .It AWF_TEAROFF=1 Ajoute un tear-off au menu Options. .Elawf-extended-4.2.0/data/awf-qt6.1000066400000000000000000000023521522325530000163470ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt6 .Nd Theme preview application for Qt 6. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l , Fl Fl list List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a screenshot on SIGHUP (PNG). .It Fl Fl ltr Run with text from left to right (Left-To-Right). .It Fl Fl rtl , Fl Fl reverse Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "UBUNTU_MENUPROXY=" -compact .It UBUNTU_MENUPROXY= Disable the Ubuntu global menu. .It AWF_DEBUG=1 Enable some debug messages. .It AWF_TRACE=1 Enable more debug messages. .It AWF_TEAROFF=1 Add a tear-off item to the Options menu. .Elawf-extended-4.2.0/data/awf-qt6.bash000066400000000000000000000034501522325530000171240ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_qt6_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list [--list]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-qt6 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_qt6_complete awf-qt6awf-extended-4.2.0/data/awf-qt6.desktop000066400000000000000000000004751522325530000176640ustar00rootroot00000000000000[Desktop Entry] Name=AWF Qt 6 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-qt6 Icon=awf-qt6 Terminal=false Type=Application Keywords=qt;css;qss; Categories=Qt;Development; StartupNotify=trueawf-extended-4.2.0/data/awf-qt6.fr.1000066400000000000000000000025501522325530000167550ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NOM .Nm awf-qt6 .Nd Application d'aperçu de thème pour Qt 6. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l , Fl Fl list Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran lors du SIGHUP (PNG). .It Fl Fl ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl Fl rtl , Fl Fl reverse Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "UBUNTU_MENUPROXY=" -compact .It UBUNTU_MENUPROXY= Désactive le menu global d'Ubuntu. .It AWF_DEBUG=1 Active les messages de debug. .It AWF_TRACE=1 Active davantage de messages de debug. .It AWF_TEAROFF=1 Ajoute un tear-off au menu Options. .Elawf-extended-4.2.0/data/awf-qt7.1000066400000000000000000000023521522325530000163500ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NAME .Nm awf-qt7 .Nd Theme preview application for Qt 7. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Show help. .It Fl v , Fl Fl version Show version number. .It Fl l , Fl Fl list List available themes. .It Fl t Ar theme , Fl Fl theme Ar theme Run with the specified theme. .It Fl s Ar filename , Fl Fl screenshot Ar filename Run and save a screenshot on SIGHUP (PNG). .It Fl Fl ltr Run with text from left to right (Left-To-Right). .It Fl Fl rtl , Fl Fl reverse Run with text from right to left (Right-To-Left). .El .Sh FILES .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration of keyboard shortcuts. .El .Sh ENVIRONMENT VARIABLES .Bl -tag -width "UBUNTU_MENUPROXY=" -compact .It UBUNTU_MENUPROXY= Disable the Ubuntu global menu. .It AWF_DEBUG=1 Enable some debug messages. .It AWF_TRACE=1 Enable more debug messages. .It AWF_TEAROFF=1 Add a tear-off item to the Options menu. .Elawf-extended-4.2.0/data/awf-qt7.bash000066400000000000000000000034501522325530000171250ustar00rootroot00000000000000# Made in ChatGPT and Copilot # Licensed under the MIT License _awf_qt7_complete() { local cur prev opts all_opts single_opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" all_opts=(-h --help -v --version -l --list -t --theme -s --screenshot --ltr --rtl) single_opts=(-h --help -v --version -l --list) declare -A opt_aliases=( [-h]=--help [--help]=-h [-v]=--version [--version]=-v [-l]=--list [--list]=-l [-t]=--theme [--theme]=-t [-s]=--screenshot [--screenshot]=-s [--rtl]=--ltr [--ltr]=--rtl ) case "$prev" in -h|--help|-v|--version|-l|--list) return 1 # stop ;; -s|--screenshot) compopt -o nospace COMPREPLY=( $(compgen -d -- "$cur") ) for i in "${!COMPREPLY[@]}"; do COMPREPLY[$i]="${COMPREPLY[$i]}/" done return 0 ;; -t|--theme) local themes=$(awf-qt7 -l 2>/dev/null | awk '{$1=$1};1') # trim + handle list COMPREPLY=( $(compgen -W "$themes" -- "$cur") ) return 0 ;; esac local used=() for ((i = 1; i < COMP_CWORD; i++)); do local word="${COMP_WORDS[$i]}" if [[ "$word" == -* ]]; then used+=("$word") [[ -n "${opt_aliases[$word]}" ]] && used+=("${opt_aliases[$word]}") fi done local hide_single_use=false for word in "${used[@]}"; do case "$word" in -t|--theme|-s|--screenshot|--ltr|--rtl) hide_single_use=true break ;; esac done local remaining_opts=() for opt in "${all_opts[@]}"; do local skip=false for u in "${used[@]}"; do [[ "$opt" == "$u" ]] && skip=true && break done if $hide_single_use; then for su in "${single_opts[@]}"; do [[ "$opt" == "$su" ]] && skip=true && break done fi $skip || remaining_opts+=("$opt") done opts=${remaining_opts[*]} COMPREPLY=( $(compgen -W "$opts" -- "$cur") ) } complete -F _awf_qt7_complete awf-qt7awf-extended-4.2.0/data/awf-qt7.desktop000066400000000000000000000004751522325530000176650ustar00rootroot00000000000000[Desktop Entry] Name=AWF Qt 7 Comment=A widget factory is a theme preview application for GTK and Qt. Comment[fr]=La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Exec=awf-qt7 Icon=awf-qt7 Terminal=false Type=Application Keywords=qt;css;qss; Categories=Qt;Development; StartupNotify=trueawf-extended-4.2.0/data/awf-qt7.fr.1000066400000000000000000000025501522325530000167560ustar00rootroot00000000000000.Dd 06/06/26 .Dt AWF 1 .Os Linux .Sh NOM .Nm awf-qt7 .Nd Application d'aperçu de thème pour Qt 7. .Sh SYNOPSIS .Op Fl h .Op Fl v .Op Fl l .Op Fl t Ar theme .Op Fl s Ar filename .Op Fl Fl ltr .Op Fl Fl rtl .Sh DESCRIPTION La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. .Sh OPTIONS .Bl -tag .It Fl h , Fl Fl help Affiche l'aide. .It Fl v , Fl Fl version Affiche le numéro de version. .It Fl l , Fl Fl list Liste les thèmes disponibles. .It Fl t Ar theme , Fl Fl theme Ar theme Démarre avec le thème spécifié. .It Fl s Ar filename , Fl Fl screenshot Ar filename Démarre et enregistre une capture d'écran lors du SIGHUP (PNG). .It Fl Fl ltr Démarre avec le texte de gauche à droite (Left-To-Right). .It Fl Fl rtl , Fl Fl reverse Démarre avec le texte de droite à gauche (Right-To-Left). .El .Sh FICHIERS .Bl -tag -width "/home/user/.awf-accels" -compact .It Pa /home/user/.awf-accels Configuration des raccourcis clavier. .El .Sh VARIABLES D'ENVIRONNEMENT .Bl -tag -width "UBUNTU_MENUPROXY=" -compact .It UBUNTU_MENUPROXY= Désactive le menu global d'Ubuntu. .It AWF_DEBUG=1 Active les messages de debug. .It AWF_TRACE=1 Active davantage de messages de debug. .It AWF_TEAROFF=1 Ajoute un tear-off au menu Options. .Elawf-extended-4.2.0/data/awf.ico000066400000000000000000000402361522325530000162540ustar00rootroot00000000000000hf^ &00@@(v*( YN6YN7ZO6tX0[(p q?y#u@ քR)&Հ4SEßoLa|hx繡⿙ÉȎʔ˙̙#'+ (+(+(+$ (+00//&)(+//0000//&!(+//0000//&(+//0000//, (+//0000///-"*//0000////.  %//0000000000 000000000000000000(,YM5XN6YN6nY;iZBwa@kle=l!u$w@sX  ؑ5 -Ӑ>ߑB)K؝UٙzJf^loִ߳ssﺑxݺȆŕȏʑµʙ˖̘̙ͩҽ8, ;;- " ;;2  ;;- ;;- ;;-#)' ;;-95 ;;-CCBBBB%:63 ;;>BBBCCCCBBBB%*+1 ;;>BBBCCCCBBBB%./ ;;>BBBCCCCBBBB% ;;>BBBCCCCBBBB( ;;>BBBCCCCBBBB@$;;>BBBCCCCBBBBBB<;;=BBBCCCCCBBBBBB?;0ABBCCCCCCCBBBBBBB!47BBCCCCCCCCCCCCCCCC &CCCCCCCCCCCCCCCCCCCCCCCCCCCCC <(0YM6XM7YN5YN6ZO7[P7jyfMr.s!p?uD~y@@  )!/,/ڑX76ؘyZTnΦnq}sqv}뷓}ņŇƇÔÜɑ͒Α̙ң -* !1<< 4<<6<<6<<6<<6<<".(6<<<96<<AAA@@@@<9:6<<@@@AAAAAA@@@@30;6<<@@@AAAAAA@@@@$=/6<<@@@AAAAAA@@@@%6<<@@@AAAAAA@@@@6<<@@@AAAAAA@@@@'5<<@@@AAAAAA@@@@@8,<<@@@AAAAAA@@@@@@? +<2@@@AAAAAA@@@@@@@@)+7>@@@AAAAAAAAAAAAAAA +&AAAAAAAAAAAAAAAAAAAA #AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA( @ZL7ZN5YN6YN7[N7`R8}^)moo!}iOm>q?qDv#~y@7?ՆI" ,)4;ՎqؙM֒wݞR=\_CEaGe]Ѩtstkm継su}뼏轖ĀƊɊȎǘ˘˙̙ɹԨիֺܵ %76  '9KJB &8KKK$DKKK#DKKKDKKKDKKKDKKKDKKK 0@DKKK1=?DKKKEKGDKKKVVVVUUUUU*EKGPDKKKUUUUVVVVVVVVUUUUU*EKGRDKKKUUUUVVVVVVVVUUUUU*3;:FDKKKUUUUVVVVVVVVUUUUU*-MNDKKKUUUUVVVVVVVVUUUUU*"5DKKKUUUUVVVVVVVVUUUUU*DKKKUUUUVVVVVVVVUUUUU,DKKKUUUUVVVVVVVVUUUUUQ!CKKKUUUUVVVVVVVVUUUUUUT.4KKKUUUUVVVVVVVVUUUUUUUUO2KKHUUUUVVVVVVVVUUUUUUUUUS(2KILUUUUVVVVVVVVVUUUUUUUUUUA2K)VVVVVVVVVVVVVVVVVVVVVVVVVV/+VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV(0`WL6YM6[M6WM8YN5XN6YN6XN7YN7ZN7XN8ZO6ZO7[P7^P7`S<gU8qY.q\;a'f>i>vxt!t#w"~y tCׁ߀y@tZ?@ ڍ‡<  ͌9܋B ޓ20!4+005rјH2Iَq/KՔxSQBGGܞ}UZUcaZ^yefb~۰hpl鵓nz}ĄƈɎǖ¯ɗʛ̙ϝϟͪشںߺ   >[d!@;7\vvnJ D8777\vvvvu B777777\vvvvv$A77777777evvvvv+?7777777777ivvvvv:=777777777777ivvvvv577777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777777777ivvvvv777777777&,7777ivvvvv777777(LjzU7777ivvvvv7777#GfokK7777ivvvvv 7777Ivvvp7777ivvvvv7777Ivvvp7777ivvvvv)7777Ivvvp|X7777ivvvvv)7777Ivvvpb7777ivvvvv)7777Ivvvp^7777ivvvvv)7777*`aaY~Z7777ivvvvv)77772Ow{{xE7777ivvvvv)777777.]z{V7777ivvvvv)77777777FqT7777ivvvvv)7777777772-7777ivvvvv)777777777777777ivvvvv)777777777777777ivvvvvS777777777777777ivvvvv_37777777777777gvvvvv}1777777777777PvvvvvR67777777777Mvvvvvy0777777777MvvvvlC77777777Mvvvrc/777777Mvvvs977777Mvvh%4777MvmN'77MtQ"7MWՕט{\KLRe⤁^Wbdh[diimpppᵑ㶒鶕w췒yz뺌뼏Âą缥“Ùʘ˘˙̙͚͘ΛϝРСԢѵԪլӸ٬ڹں    Iew5LH@d^TE@@@du/RA@@@@@d #S@@@@@@@@d )Q@@@@@@@@@@c 3P@@@@@@@@@@@@mBM@@@@@@@@@@@@@@mLG@@@@@@@@@@@@@@@@mNC@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@=@@@@@m=@@@@@@@@@@@2_l,@@@@@m=@@@@@@@@:Up,@@@@@m =@@@@@@!V{k ,@@@@@m =@@@@@%os,@@@@@m=@@@@@%|,@@@@@m  =@@@@@%|,@@@@@m =@@@@@%|,@@@@@m=@@@@@%|,@@@@@m=@@@@@%|,@@@@@m=@@@@@%|,@@@@@m=@@@@@%hyyyyn,@@@@@m=@@@@@=&rqj,@@@@@m=@@@@@@@+],@@@@@m=@@@@@@@@@8t,@@@@@m=@@@@@@@@@@1X,@@@@@m=@@@@@@@@@@@@.Y,@@@@@m=@@@@@@@@@@@@@@=@@@@@m=@@@@@@@@@@@@@@@@@@@@m=@@@@@@@@@@@@@@@@@@@@m?@@@@@@@@@@@@@@@@@@@@m}7@@@@@@@@@@@@@@@@@@@mF@@@@@@@@@@@@@@@@@@ib<@@@@@@@@@@@@@@@@O4@@@@@@@@@@@@@@@KZ>@@@@@@@@@@@@@K~6@@@@@@@@@@@@KxD@@@@@@@@@@@Kf<@@@@@@@@@K9@@@@@@@@KW>@@@@@@Kz0@@@@@K[(@@@@Ka";@@Kg*@Kv`'$J\-?awf-extended-4.2.0/data/icons/000077500000000000000000000000001522325530000161115ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/128x128/000077500000000000000000000000001522325530000170465ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/128x128/apps/000077500000000000000000000000001522325530000200115ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/128x128/apps/awf.png000066400000000000000000000036621522325530000213030ustar00rootroot00000000000000PNG  IHDRPLTEGpL+UU$II3+9K^s7PZ%tu7PY6MYW$x6NX"v!s7MYu!xz6NY5OY7NY5NZ7NX6NXz{6MY7NY}7NY6NY}6NX6NY6MY6NY6NY7NX6NY⃧6NY6NY6NY|6NY6NY6NY6NY剿{ZjSp gq@y 7N[8Ra9Wh%a$c:]s?< 956{jiD\k=d }?q]w"+0)>;BPzsy葽7P[c,[u"dgqimIasBg|v?ky>l|-'1;An9GEJJLS\ZaeZ삡injhsp}ꌺ둸PRZtRNS "%),,/114CESU\^cflsvxy~xIDATxuXA5PN0QTnQ@Vօ;۝ytw{r044ZҤ۴z\U0nQ?K#,BǫǑI2t06j'hWde}&A"-Wc WY1 q±R.JvSl ޥre{B,AO*{1UE]UģKW{jzI3'~6ṳ.d,:d׃8{h٧po,'Do~&nq 2}Vܓ0bL景,.d L ̗ֈ- H-Un"Ʋlj_Bw CazCPAM_ x%; }Ƽq3uOUS0@ V ]@Z>`Ԙ<υEy8@<_= Y5sh7}E]X;D]̲4~,|t \]y 8D `y%]|3p2mO6BIc/zH2"S9CPT&pGePNI\~ѹ u39!s,\|s ٲC>`t~n:9|*R+#B|z,WQ\x!!H|A@+ P0,?,$,}޹+,@ȩLO&9i5OkS5}So0&5TzB4Bg#Z z*/I޼TVymܵ]P`((1nlVjE8";S+9I.UJ%\ 8Z(U z,`r|HdJZIENDB`awf-extended-4.2.0/data/icons/16x16/000077500000000000000000000000001522325530000166765ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/16x16/apps/000077500000000000000000000000001522325530000176415ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/16x16/apps/awf.png000066400000000000000000000006031522325530000211230ustar00rootroot00000000000000PNG  IHDR(-SPLTEGpL#y pR6OZ6NY7NY o6NY([&퀟?q@u0Xt )S4Exah|LtRNSg]\L~IDATx]0X*ήa{h ܌U,)BِYf gfJ4<X 0[D]vx}=]if]V `K$`x Ұ7IrBIENDB`awf-extended-4.2.0/data/icons/22x22/000077500000000000000000000000001522325530000166705ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/22x22/apps/000077500000000000000000000000001522325530000176335ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/22x22/apps/awf.png000066400000000000000000000011001522325530000211060ustar00rootroot00000000000000PNG  IHDRj PLTEGpL$u6NX5MYzB6NY6NY@w隺6NY6NY6NY)6NYkU;YnBZi@awl=e!lXs   5->KJf^lossxatRNS:;?@Dhjqyz8IDATxڍk[0qJ Ѐ$nj^^j,1EWoٳ 8 n83% r Z*ԥ8׭IENDB`awf-extended-4.2.0/data/icons/32x32/000077500000000000000000000000001522325530000166725ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/32x32/apps/000077500000000000000000000000001522325530000176355ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/32x32/apps/awf.png000066400000000000000000000012631522325530000211220ustar00rootroot00000000000000PNG  IHDR D;PLTEGpL6NY6NY6NY7LZ6NY5NZ6NY!owqՎI_~#v7NY6NY6NY6NY6NY6NY6NYmMa?@y;7N[?q8R`o\R")t4,>mstDqOi}e}7C]Ek)^}mG=us R]7 tRNSL%ḴI.KzAסϝjMDIDAT8˵rPDQea_(_REOTsj k抆jMkktYEV'^V @>2( ,`hzrVץG;yiX/w7:խzCL$s H2IF D@`8@Qdcz@r|^Dd3ۋWBC /{a67%j~qxތIENDB`awf-extended-4.2.0/data/icons/48x48/000077500000000000000000000000001522325530000167105ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/48x48/apps/000077500000000000000000000000001522325530000176535ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/48x48/apps/awf.png000066400000000000000000000020031522325530000211310ustar00rootroot00000000000000PNG  IHDR00` PLTEGpL@#tq6LW8MW7NY6OZ6M[8NX"wx y7NX7NZ5NY}7NZ6NY6NY6NYB6NY6NY6NY5NY6NY6NX6MY6NY 6NY6NY6NY6NY6NYnI5af7OZ7P[7P^f>ivx!t~Ct@yZt ? < 9 20!+400H2r/KQSBGGUUZcZ^beyh~plz}ZH9tRNS"#/2EGLNZbfgvwy} .YIDATxZ@ݡ;L(IRh&iKw'|qv~:8s(s[@(;m4K|$굟3:%IHuoEr;hJ@2(0;,~cn8@E'Y+յ*1Q<0(T+kV}[=*j[ Th.ddP<gk[hqt Ň arIENDB`awf-extended-4.2.0/data/icons/64x64/000077500000000000000000000000001522325530000167045ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/64x64/apps/000077500000000000000000000000001522325530000176475ustar00rootroot00000000000000awf-extended-4.2.0/data/icons/64x64/apps/awf.png000066400000000000000000000024041522325530000211320ustar00rootroot00000000000000PNG  IHDR@@RPLTEGpL6NY6NY7NY7OX3PW6NY6NY6NY6NX6OY7NX6OY6LW5NY6NX6OY!z6NY7NY6MZ)u6NX6NYuϓ{~@рՋ 3!uu+Ձ6NY[4zLw5?<7P[W"@y;[o!7P^4?q=a{39VfAYg=ec}9@\) B璷#eBl i$}pd.Yq+\x*\z%a'^+\y3bpm pdC >tRNSuן#Xdb/<Z@?>W}vw%0偮 FH D#IDATXWA&wDEb;{6$"V`bGEEiv{/0;<<$e峦M)Ϙ )I6:[43FMG @w4x%Ĭ;y<Ps%-XR՝Ӡz>?}`% s,@ov̩[еcX4<J# ;jz9sl%p+cؾa  oΕ~l/~f>d_TU(st:R7,0']a@޾cϣ(S@!$6cœ\w8o^G|rxj$ ܺ}l7E@\. n+:$ T@ܵtX$ B"n=xJ@<{ڽO@l,|J/7o/|AM`\HX~T awf-extended-4.2.0/images/000077500000000000000000000000001522325530000153325ustar00rootroot00000000000000awf-extended-4.2.0/images/gtk2-menu.png000066400000000000000000001341111522325530000176520ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ɹȴΊ\HdL[HocX_JشaK^IͿ̿ܖbK˿ZG̉\HeM]E;~]IŵµЙcLeM]IiL?ɾwbK̽mPF71cL`JXFijfM_JZD:ifdgMeI=^IʼeLֹ+*)}ƹ%%$ VUTȸ//.ߩ333hK>Ǽ988ǥȽ䉈𽭞ù~ĮPNLGFDcKKJH]\YǿĹ»CA@{UD}yvM<4hNrqn>=_tJ "φ(IDATxoSW\h܄Q< j4kBLl U*殈2 ^@[ABMdQ &*؉()DQ}rϽ~I$Ղ'y|\_gMD2ubfD21U$6 ܬ7PcDG0f"蘣K%o6`Ug % 2f *f,}4VMY+EtZ\l$Xބ-rnj1?及򿷁* \\vlaAl9aT4d.*7TkA\%p@bnfu`VKJ'sRn8%3ݣ(9NEAYr{Gڐ. ).EpfdN=Ҿuf$XĄ-eVWel"uv8:j)򃮱ZɌCȐ+AWv ,. :: 1\jP^b 0Uv %v(dŖH&>'i"]D(HGq_وϪEv4%ypƒ&l1 ق$*)Dc~"KfbB߫LTzI(-q/*.n=qdp -6mh5.ҒJdq<'Ɔ/p EF#ޏ3&+ ǺtlL9.mѕwJ\qB[,c1@fVPgjO>^ejJx[֫\KlQΥRHKQHHEi9z|Tm=/+K0+t mA|)@KbK & * sN(CV:u<(56&@7 :̈́Տ"CAѠ1|ƍo`4f$/ez2RV5X{۴`XzR Gh*R+TǻseY!%d Rq%CWDQ= Üe"'ݥMX8 .(LXmQK4@n1,;$yI\V:]NrknvLP@fn\ޭBTB". #xV x) 8%@jgy%QHbaץ?*LX^1ʬGާKź2a式qu(G{_Iῒ#KcpfBp.M0=.G]o 0_S.Ux35j誊x43)nxvbvJugg5E25poyXޫ(NE鍒vcທTj\ᦑvD!MAK%Gb >kËUwt*S/E.|HĄ }QgL& 覲Rht3!E=z O\cnI>a V^1DR) nȽ۝^jbJ' F; z^nvb +%<|k^S5)9i #S崁s3Qs6.-u锖b3ZKҨ:[fu5U,"sEɢw^f7|+pɒK>"EJpGl._ )3o=*PKp'RٳQtr%h%cˏ30a9bDndP)||Aܫ|l lR̺ sV 5%\)iM̃6#**%?+!{,4CsrJCl*J%?36{̄6WԘD2#A9YuUH$4VH$ G3e3dXB5fM}ƻI$,ƣ<8{X y/H$5Z;A GT޵mK$,t:um˃rjiy< UO9 „S}A"dA` J}q5PE~FHI$j9X ʫMz6@h{>, *95hD0 Uz#D3;gk_YK]c#u.) 3K:2Z ZY<:V-VJ}G^<5!TO'ӇDY*a#.TF0h+#O|i< !yH[?]ڙ^Sd e` m uM/hR=mIAxehF`d@o:g1F+2.5n;6rCQgi$O,?-Yd$ui42?4a 1X`yTbj|rbc 1dCxǵSʆeeqt>fNiѝ] R.۬Vt"ޏg.as=K+v"y0k,?犃Nr\Jٺi+X-0%r(̤_67^9kh]^X>{ Vʆ{4Fβ+Ȼˢ^;xgd@! ЁDw/652]ow̬YZ6aa҇{7ab+[g15M>Q|HK"rӘxЮ6il]`U1Ch WӭX.,q DUDTdqHlz`YM~4V0',#~ -G $O&+fe1Aie#DÇ? )P %<$w WGՃ=giYv M Bd8-6E2Y<@B RВjM5EՕ*ckymYWͣhl\B9?R y0k̍QǴQILAcPȯBv2JIg+I/Pژ?foD{θp }ᤑIQMWInFA?xorYM#i,~n/{xBLcgwҺ1} vIB4`uH Ɍ$ zCő Ʉu'Ft9 HЧ`(A^oIv^X%- "a w["%߁ }}q+݃AcKalIQA&"򴖨 /NNU `Bo*ر]94T{nipd ;ź?|ݺ:~kQc&' 67(uv,HPa6և#DccQkV [lH`|dh? 0d輰iA!(e\cQ@?|S2Sg`ׅEv{SI}5zgbWda):^MYs V*\d19^&+27224F7T@$un4!("W&kLɨúdT5 h4Z`N@fD3ũ 7,yޤ,_l_ kyX7F.8ЫoҨC 'ZY7 ?DCc;w2M2w9K9)ccڸ=Ϋ` 4L@0i l邥 i*Dd%WR@KR<)l <1n*?_rnGv+J3ǃ_jg>ό9sgߜc3k޸+\rzQ1q8ciNL)N,f% )juǖZQGxJ8V$.ޕ$|9%>_>\Ntزd$Uɍm۶h!T?Zqg^U+I4_ItB c)cqEJ.S,)ˣ()HOJ/jk>{Ǧ6U AFeo޺S +2`#YOu$#&bc:p|a!q*Uxq,1,; kGFk F3Y&!tt|:DZ+w)%klյz񼿩ZKk,UtSJ##ǖxɒdѬJ\/ ;ypkTJopdڽc!* LM%۶utVbWbVcF|v0QPOͽcRx%-9mfbWJhDIKzJ13Jyd ұdP"&|1LttX菍 ]{gj̽^mcR`LY"NOcJwu4m]M79& ri\ѽ^{,R` [Gb;"G~莭)tVؚzHwl莭)<;莭)tVؚzHwl莭)tVؚzHwl莭)tVؚzHwlS-#] Kp_ :lyx&ًc~7P|1p49V9::ڌrm4NKxyCeM^c?fo@_~F}űoqtGK>şc]E/+fȱd =񇧆c~۾rq_.yR87t16Sr@R32Y]5dWD8ڞ+خMT$KxjPeѸ պԡf[9$cv֭1pp~U;V&P:6C, +oذgWk [x1zuLز/wS) r!S.rMEUwGlfs۫ !Ht4Kc݃^9S%96A9:H߳7}-_RYFc/Y-M*#VQ(a0ZWɨFNU46"[ͬc oB[`ǺG,3-<g%/6Dhnۢߎ]L02q.ϓnX ?\6Qgb}MlL%*"QB `UBz*|4!P*b6.T$\>-qSG#N;PŎM? ܌sM5_ⷪ_Nl!{Je5&$61ư)>X ;~:ac#Q|r Es'BmG"ѱ)NM qHvTǨ+yM_?O'ؕ)uLc/|xН3($8=xjc1ZfIŤd.9qb?E1$K{=V*,每cE!]8g yTʵlB(AAn|*@ ҂Ue hChJ.j;c?P%O??O9|_5fwjCc`yX1%,\N8&H#={ŷM&L9}'³GU_\<(&f:b,Kq&XE$a,ܘ3<Ge((AA|C0P , Ly0cyE6ah6m4۹k׮sǎNΗv,\(p?]D}@ e wc\E9ShRF*rF0XrϝB[gˠ"gY|n$bQ+u~i#g-}s s}r/|$}8f-,,zmga q5YG-1olaaybE=~29589/ث;M.rUcy~ '}5~̳ccW{5qB@ eFF.œS<[PxH\gfC3v۔ṵs $øceg(YVVb3Lul[aXdxrD^δ]Hz"D6'R۰(Z| +JDXXlqpuyz#$6ZQ ELUaa/6W&䁺08zZ>[]=;XVXɎ] :0Nbۤ(J oiǓM*;Oq`s V-LD6) A^vp;H5t"6lTL*eAlF" ~nED(VX ñb\ˑ%hֱf󵱙 %H*@ AsV *lNy$T((1Rءe'0=(bA䗳k~EnYF /.VYoov ^VJf`t,L[K3QUA#d rLq̽N;vrG?\[5!uV$隚iՊY$|)J-:j&D=:$Ҹ_?h $NphЕ;<#It, aTa= , ݢt$=q)2ՐYpuBl % L ghLUs~_RI|9Y{ݱUc,֒ȓVXY wuGp]1aKl4lwΪ^ܯuv,.ŔFFЎrhu^OA%dCZ|qˤ!ɪ!TQ*$ӰD6F 1=07:w3ݱ(7wR+gK@V.@U|8&ӲK,!vpjo/J0 j({Yw, 4{JRV䤪j[-)DZw%^XFtMxqND5t(.>) "#YI$/O0I pKXE e~|<-6!vtA$VI[)w/7:7]YsxY*~GD%]/PHͰv;i KS0 TFIxūcynx?/Uc'*%55@Q {|B"Yc[;F: :-8=Jϱ}/9߽"qu@̿cs.=krpΠ1+k49r,1pq|)9Z_x$ct26+5L.+,,Ftt%Vrω=ͮv_Nuu,}߱ƹ'[L=p'{*!G%NM:6q,b$D_j☩1`|j}/pXc]e Z^}ǣOY1_BFiUXHºm4SIYz-$.&5L2aNXK'a32!D3:se&e;Ď(1~bKmȱߢm?w>`|+p*"ӷS0aZ /V8{?]Sǀhm@#0%5{t{~T2qwV05 MvcxɣcЅp X/S.DV rqrDkwPaMGv9KXK8KrlײodC>+yHTroWm=5lX͔t71N:,g Vaþ-_u/#~}gq(ʾnL˱l]E[Ƴi?jDŽo۽^KpOɺn"8Z.r l6=5!)+NT8n>4U(ݶ6 ߻i{]QǤU0o9vĞs./cCQ08X{+E.P93X,)*?+aȎ@ Qp@O;ãO(ij |;Wб7s+&ܛe:ޤ|]̳/;dE%LlyQR?CD0zFc"+*rx DDb3 ۈQ| ѱ˕+ǚԥ2;M95rG!&"Ցsi'u,.1ڄ z#q䑓|Lc˜̦^ yLg/5: '<1|5>L$_ԥ^45s:6;dR2S iy8wC'7:11±ݔc-'a]тuEZq{ZnbUl&]?_U̪Rcɭc/PEGE\хs/%|j4C8춆S۸ɣcGYW?u4d]g8x`ŚZ :>=޲G_oDWI ZHJ~%g޴X t·w8dtX u_KslqL<efzOӥnXXh/\ fyAЈ({'**+<ܛV@Yr^:㊐tƗF/ΊeK<:=cfaIttgǒr#WY1@B±nd1.$1|,2HؘEYRȥ҉ώ=pl 8&+5TNx~,-/ u#yWDž풻XW L􇌏MLua>f/TG:w'Y1y(7y  2߈0w7܅ u1s=ڰtE8k1u:1As<&. Ả{g)io{{|LRXõ?~wWL]w;[?F~΋cl^Z~UC%Ј} a<&^ 8y,,1n>pL߃,.;dWTѽ /F[[Wk }~_>,?۠6#V 7c^y\F+bW b1. .B6ۘlk'3 N|| o[T;v`w'6:.!*f2= ZQ|VN;c ! )e6gƱSqOvw6!hEqȳ" }RZg,+ h9; GlA$9k b\X%!uaYNv$szJt h1cȱn1TB!/C:S#cЌ8R< u /,D8OSKu2Ql|{..ױYnL1Z+MU@0?{VXg [!82L*§2 X '|=(6"4D_̎+/[|xu[<yWa=#%zv-;uK cZW,8T3íƺ,niJ2A~=Z?"~𧟼/||csb!4}Å}Ǔ:gyOTnc7IP8蘽Wg*cUavb7m{yCC%FV[ Wǽ11:%͇7͟%LAώu;:98ORq)ܜ+y\^84vt?t/;EXccW :tG 剺KUu{nA4l|0WUmu/|HƱKZU~#aM7u ;;b4> ;>34yvMdLjc:7m -YWvJXtᶳc.N.]2_CPuPK8ЛgtQCdHčxc|LwG̛m^+:UrMΖ~w=迎~vr!Ȅٲe@M-[hS{=[g.U֙3W,̅qё?p5xmW\,mmcϐy7c1[Ԓ;fl1j Bg"PѱIӤ(q9n\'!岰MG-ʎ>ymS ˋf]KO;9rӝu@%4-0[QbXBp˯C}we5Jqr2;X򱨨ܨ"jHsU<(?NK.ʕ~XEO6L(w"WAj>ֱrΡ]v[?'w%Ce*bXcMGAV EN~ޞEcwǖebV зeqǼxǦC z<>>s ? g|cxbIVc5L؉w懩b1[w TN>.~̧cϊό_UcP 2s862_1ܒ`3JLV ~h)5ۮo"jnR4&`Ύ)46"}ZsH'{&ȱh@1N|H "|ᛎł$Qu8fnvqFz-N_  ~ s*J7 pj=jZC1' ݊8;6K"MX"p\Ay4_Mc:ib3Ϣ\RMJ,c]˸Hii5 t[_nJqXZNSNE/bpN屰; 8 ҉ c?30H08'Ƶv7z# 1T$%%8 16KpIFV^4W(|&bice;W[Wxs,4thBq\@C;Mp%Vٱ54Q)/ʌ=/r.,,͝{)SC6ba5! xtL|N9N2Y@o=55S쉤cdF3Fwc5*Eɔձ&$۩[mK޴BGH$G\f ~QHL%158"h|#wLZBR+<2^,s>dѥ,:*7ss!swsӝ;w^{J${Yg_hؤMB6$4 8 &.эlY{rJYtV^yvl~(&C+^K|z3/\ xaWtW\2 =-:T*ws)d+$'E9;QMA$"$rp'ɇ2)BH/a &Ne;P^}HF/+s<;66ѱ1QNjb_#N{YXh5\8u.)F,:tл9vbi1 4-=VQVv[m~48G ŴڇmI28x0VAp*1%+ȳ^Q:6\HcXdױR1 w\Qi/%l)ѱtHH'DwOuC'Xw4䯜B=}\=boQh)GOhX(ynk"hD5/`js$c^0Kˋd]mclqn$Iw(1F+njb ǒ#P-FkVeP:ֆՇhaha>Dnb k5۶m4Tko$cic,Ca[Y_z^ݝ0!N2ftCvN1%8?99COXc+wP p sSXTeۄ;sDam 1*sz#xBxσw={UyCV sġGBYZEz]_!YC[{ὶ4@,<)GH("L vmW+?{Եq\HZm#J x(bLK Bn/u3hjA71[D%foǶlI3SI`1ypo(WW$ Ʊ_!Y0\a[ކr3wYuk,C?f#2e]7 Nc;c(_1^[e$Sj3$v1ճ0mFIP|7BНkt!&.tuifSg7i2'7NNp<:VM+X~Y>(7ijB°cC28 Z5wo:Z-Ď :1D7?;}sGHn)~rE-F l --cQcc.P.\wtH ߠIFh:LjdpL`g|T6Ď 1q%W':*9lm ~q b!t.Ռ\}Ac(Dz53c1ǸC}BтڣxO.Ip=(jkR(=Ac1k#E se27׊c>I;4#e ,#9gu{9\aY?|v_CFg{FljwL\ |p~osI+ ٱaŎaggKɥ_oƻ%/=+tǸ`#G9H1.>Ӭ1cQ،ҥ󊖶VF3dmL/Q_펉!ݏo^q nߏ57Bvl{lٖԹ%cRqD jBμM8=lM)lubgIX UDd(doVWCEE~lXr@1ևM,rA6ǀإ@uHM(j$:g`F"\pS0OαAgj$clG$_oR_}` 3ڤw^͹=Y)㱂BxE_tEY ;%TCFJ--cnnA1cP|XyPRW.~읣5U1Ѽb:xO\"9[x Zm:Tn dǢx'D 1Vh$PL1c/P.>1;&pEeD)-S<8XP(lRq!HVP14 xe,B1ٱz3Rg5Iӂ;J==?x" :0ؚACW|)DwlXP TȎE9&ؘiXLTɂ;J.h r_1 HgqC͍P!E9"gYJ> dǢB<3Y (+3R۱.a=ç(/{G]KOa=HLjbTrF,lޟ~ilrrn=pLWPߢ{5bX\\ kؿ Bq,qؽ:{:VKǟ^q m÷=/9alVCa:wAF@IϱI/"1hŹ{W3/*pa8VOOn׷7 s씖D-=e=\auS'>I_?cץU :C4J1Pdw=={N"Eǐ~[Dv~!88EZe,zd~@EcSrs dg?Nɬ͵CpaM2Me/҂b0{%~cŀzׇoǴ|+jY:-scr-,X,/Eo3򗿫n9[:>i~<з7R}W<ϱ1F;ՀS^lLcsBF*h)2(A6~nxxho;{qR%ƩrnY[pطFpc֑R9+kn:PCf7L7QEi8Eڛ SUXĈ3PsK$+cPTMV(XYG-~q--,Pax:PcuGK5 Y;FߌW8bqQc2Rv^ x-i9]FKc c;681e|cgdX~!5sMvOBpXWJ:OYhg4j% RL+&VP~2nW@+ +N] dWj<6]k> xEc!nm)Պ6j۱5z~ s  qc1-VIh֨~k;UǪk+ٱH( ȎE5c-ԅ\"Oni& e"Mj{*T+I,s- Mփ%ck7iwl޵AEb=hm使ݯcHŴ 1y7lg h$L=E;:O9Vρ(d\o@z]h&t8A:V,P d"c~e#ͨŦ%vlv~$lorρkYr*.&xXr.n 0˧kJ@17 ;ic,]ob܎n~M])mn1P߄9paM.sE4^Z9zk>H9gZб2nm$(FNhر s(.zj:TXXca$ i<`Pl׭:XV>u<-c 5( r>FT-s-c54(c ☞`W5N_] vf5E=w;,='K8_zF@Xby`3z8tV봎Ve׻1ı<+FKlcQ \03΍VRn2˱icl5Q_3om?N*mS)[إ%ߚ:g3jWkIAUzb/'Oj4Ώ}nC-K 128FK +c[\YJ倃mK^. Jgo_|cmuu絛'wƺhusσJnFc`}g6- %1U08X0ѥrijM@ D+ ADӉɎٞisC"<9{un7'w7γgT3xL |Ig؅bE@-5?20w)om4ǎvHԱI4~Ϟ%vp X4ƿyC1S5qlQHdV .]TӚj.@a%))Httla&8HTK6 dIww5] n M!*zvl?uYvl]DqusVWV>q>%swG&U |o# [ywe//ϭcٱ0PշԴc4o%3P'_؀Rv/T&%XaBd; Pp 1TiM6NMNIAuEqPNym-V׀GIR\f-wv,?бɸBvL|}MyH}huɵ<-@;54?>IzXMر $RǂO߈leǢꠘLުl4Ҏ2/"Za;܂# [&x])Z  ($ (kmMH &&r?/yfOu; ft,|fA0`D i_IO1s6#C"/oX}qI8F(xk@(2XҌs=BcGCcX0s80ELQfQ^(:dSzLŰzXq:V006#[4?Ѭڽ鎥'[X_44'(s]w ^](, ޵ˢ+YdԂǠ=~|4x+ؽΡ3qAwwesl`Q m!A!ÎA?ژW,tl^*1LXGs8{X :oGzqO+%VhӮBy74cX{&W,t`3 =x94f=|XZE7ckk}6w,~雌ZPc+RՅ;Q 8;ft"X%Ts=tF:Vt69`u e ݱ:Ưnxkᆻa\ģ+~^vWw8C&o=HU莅]+V_R51J<ڧ9/I2_dD+ޢ󊰺=7\DrI860+߳v}oEGgnݚS}d}7 _Xfy? 鶫(N>t= Ä|tݥD{+a+Sg@G(FcZF^*yPսTg䈔xhYwL(XFVbЧ*g)(t ѭrJK.)(; (XF;&x +rGB(cZGw, X=fa@4SSDD7.t2ݱ$`E7qA s1QѲ| XXVf4cIfч^:=i BE+'{[{[-"96^E ;,wQ٨j4k&xf~bY:hdƎߺn# 1m)Xr9X== j g7lzȀ+xƟ@fb˨dd,tb_ǎ H~rzԊ'cI֩hx6mg2m0&$#g+rBoؾnU UUU1S]dqlu݊^؟|\(Lsg~~2unEJ;, W~d!W8b~ t,ˀ^oᰂ*1ə~֠W@x N*&eXƾTƪ9oifHe󏩌UTTT+11JeLeLeRSS+TTT+11JeLeLeRSS+J\&ʘX0.<"TWt*v*VId~[v?MZ`e/kpUy6UƪW%~hgYVN|;W,zrvQSTmEeԩUJ1&3|nN:4+K/w'ֱx"T[ED0%-FW!ЋED($cA's \b2fB`Lf 9qZh;/jzפj`py5aL1/cUz%2G$Dp\OfƎvPFƉPX^B0K51' >EefJ0Vc9lM8M=:2jh.0_W;VQ~vNJ:'.5 GzI+bAcCKBǚd"j1F~g^G؇ŵ`[ӫVQ~0vЏypE/ɯ_5|`ܢ 8X ʒ&fޛ9p#y,?d=mn"p37T1&3{ՂM˜d> 5C,_2I>3 V1$,J]A22Hx;1P\{~x2(cCSC {liU,crcݺ;8}-aL☚淉J7LEƊ g$~FK`pB2< rNQblnr񾬱O^ (ia~EO|m,&255HLxi$i67>vY0 +Mfc#eH2c@~[[>܌J.96CZ c.\hy0^P/\*tZH禷}rV 'MDECflw`rH 6ĺةҥ>L#aLX8g2,u|8f>=882' Y28`(c8H@&I쑤&/Qʘup{tumT0En6=Mos-T :C?  %kX?V+G/*c*c @c$9t.cn-.0mu2.w$fޢ5fl/K 3h. mA'Mc}Q.ZX ё_)$ u0V1;::JXrTJڏ#D?,YKc~ZjEeLeL!Aځubu/1֎d֐jȘksbJ#!^1c^c@],NG~r22 Fls3$.f` !ۍc7{6Y̰h& lF7ȅPLf:޴Xsq}k67#Z9zQSSHHc5_:bFM&k(֕N!uQ tp3tc(ͅXc,V1kOg#Z9z9>cm'abZc*cǔa-!I1teuɪ ~S0O5+}$)Ą|'-gWn3O06 t6x裃!؍AF?6CyDb )"n+8Ӷ2߇2E >@v_zOoolaǟYtoѦ/JRƄB]?.%S Q8V5;m`zԻT~ N8_[p~(4V8ĚK+9Vc8-ٌҭ9d>]?mU2 m6ŻV8_1x~Ey3Mz obA?QaxF}Μ3AskQi1 7ݭgrZ3SVcqppMstYu-5ϴMѮ$֛XTc *Jm,\_F\qfw#/1K>/,-ͳZ^DDia(9f)؜wf]1MDkNΈUʙ1'ba$*Z_&LV_Ē~ibJj|o`BCW|L({"R/s|s0&=k,4K9Y5_jIdٱ`lnƃi]h2FJf93NWκ"sF;eLXR|LN $,m -XXZ`]/|[1]^ bۓaLǎ%^/, 6tڢsļ0C'zV7+Ӕ1ڦXWUffU1uV07/I9t05J!xS)2 bK k)"Q@mږ)ՕhNϦ+f2v#g>+&)k*R"sR-MD><9ʉglw}]NTN ʊGp8]Q;TTs 5C AeRSgG1e2Vnr1LeL yMj͘ %1f)HYQnQSDE pUy6e2f"ØS9ƔÒ7}=sem0j+V/c711EdKd($(0T5Ø"C Mp^L (H ~^ g3 &IbgSFɢA"G2k2c*Iu8/'.c{ÅMϯ<zj$OSPh6SShOτ1}bZmdRO J0XTS@-'1:|Jˊj1 0݄IF1rLImtd/؞.I5=C=0/%cfńB.Q~r#~ k1z췆dԳz+$5b#9D K"bir;1P\c~,$l¤#ݚ<<]!Fw{JbxΟj_, gmjo [ 5}#2ֈTp ,vx]  ,6֝&kA7M^bIig RHmtt/fuEa'4(YW, 爌bR}ɔz;ۀHlHBJ?)0#6β1P`Xl2ՔSy֡VxfعkKXo m\ߪ?up{tumT0En6=Mos-T :C?  *c\?vq׼׾mm>KcU|0d2*y95q[\a۬e]$:[Ls|>g&Ϡɺ$4*cƾ=*o;V2Fu:HZ\1;::JXrTJ1:,a ,YK*c\?v~s~Xo2h4 km>c=S!ƭ!Ր1avuߕײ2?łFC<.L_ˌyWގcg~Ȳ82VZ$h&b W_L'hHƐ8it3ihcY~0pl$D 8&>l}}ާ=ֽ}6ejJ~Un{Vu_4ě\+H^[BM ߽\keu` !LkKN5G[DkO3:ڵ lp*:EVuc`H%0fFX o}|A!}Yq@Ef,Fʪ;LWEC45e` \4tuVTPU #40y5Cae؉lr0vN3HOj`k<4d6U3U0)' [bDD#Nyu<BȢXS;kA 144(\I*Z:[YDœ&]E NTZb 0\pS%pWn WTa [y7c*4WmdJث(K:I(4[B4 c"\5)k<~5c 0vdT/^0V*Rvy 1ۃ ila\eM?$KчNc#HQ$oPJcU]hzaBP6-15 2c&$ͺ|ڎ@jgAdKieR:*Ę'WMڤ-N 1e9ZX3c2ܩAxzE;cR*$ݏI_uJfKckIMOyhƔ)s;s.O+9ciqswɶlWcS.2D4w؁xrդM2ऐBW3}W_Qd7_,JSCy)xNH3cHfZcDIizˀBk*P'Ɨu[:WxՁ1簖o> `˿(yKƀ5L@vzjfj3Zoothbngjq_M&Ur?=[l{oyBԩ)y 8Qヤox偪p^c,pH^C[TD.v:¸ay[=α.V 1恪p15c~;D4Ί ;.SwU(0ӈf+hD|>OTӌ)kjvYsV aof8*pŃ;cM) S2{jUc~ vR7Q<O.Vn U4cJ+D~#D<$x:/M&1Tӌ)&1E>&oՠ J=ӤW^LOؠLLm*ubjWx71+5(qp.XJ|c S*gMcR>\%1F䞙 )14ټubj[|jcx+^-Lh!'ЧOTӌ)&JcR>{O0ʠ$H'p/LLKQ0׊~ K~4Ί7:`1p>EA'iƔG%1)ޖAI&e(dRM\U4cJI-'a1)Rrϴ_2cic cR1r;&cy[L|”2(=Ӻ{?S&6LL(W3V.iƔGDy\qz&)eP{犳qjb21"j#͘Rp*icZ1״m=ِzLL^K3T{l*IGԌJe5V?rhS(͘+ )J3*1ct&͘+9c(X93]uZTwz{ gJ۱9Ͳ 6ɇgƘY#fp16!W~\q 7 gvX~M'7|i9  6휱"uX[h[ds`,Zq,FiƔsB 3FM^덈o#L cv&7̠Hє-2dqI!rz蔳3óFJfor]FU@ޕ183Na1)RATLʒBurvٙ.c"L?BgULB~)m3eMa1IwT#KJc蔳3)<ӌyM1osE1SnYi\fL$Ɣ[C.3Vp~|ء}3㆗S]_+gfSEE ħ I3T1⎈3ffxH1Ҍ盏{{f164cJeϘyu/n1fDof'nlFz@öenJjҧ,AMtiRZ?a8~*jtmY R&~c Пi= 5IV8ŘT9oD؛ _XoԱΏcbB8F}N1&UL&sU7mt^N 4/'VV1!?uOFXo$~0fDŽ46jXńpMy8bgsߏ01|4C&0!wZw'y#"ogbwX7ͭVLq7j여p1rވ$a[7._]#cNbL7"XRIFY1rވc=K1&Ubg)Ƥy#R,ŘT9oD*H1ֳ>)cJ7MbJJWT1]1 cդսꉱyy{ kz;f͛>bL ķ 4k}$Ř|Bȧ4?aL˦ZH1dcT5koe1VV)Ɣ` 0ffaQ {Ew0*9)NuLA`({4P4f4a5lzbLTMMۼ^ڃv39#MLN\T4}x0)c +0G1%o^niy-:N4ƴ&.nH)<=Wc{"hW+Ɣn<6QuZԠl匱:z(*YJ1V&4pV\h#ZG_̦;Y;|cм]2nūh g XI~oAx29:͛Hc/zq>fϭ*\?*aԨ, hlCS%{x5[^]s>bl}'oRi:}ũu1vMLO1Fj,U2T\+[j H{q_!ЕeK]3`0MbL"c-~v TWtܝ2)RIg̵w8ɬowweϧ^p?֫ itl1@aAW R)gͧb m<]#+׋ҿlNʇé\1]$c Vܛ#$ a `$ȆQA4(t$?H3D9P3r"o }gb)Ř|JeBN-JO^NOO<zKkk2w ;/]|G3<9E2#a;YXM@x;"K0]ەq]Y8Tgɣoh2ȼ[ӡNEWWBLyn*M]"&TVg0ok01K'RId :CQp p LHX3c2۱*.^29M#a\lK`ֆpƨ4CЪ;a]%0Xy$8=Xѩ4A$V#Xs?2s_$a(3GSކ!@"`=MۛK1&78OP [u ^u)r&ڱV EEbdLcSK`dW-zxn Ōoi.?&joԠh7@iƼ6_'ùK`Ť[ƃ1M6cÃy<I2By E;v9cdW~#yX}m9d &95 c>yn Fthe1I[Tt00b0VoT" :o7˭E1ٌ YOZ/߷2l|uiaw1r i#I<+ٵv?0<G0fwGֽYoaDGѥz9Z}!< DNWz%0S x ??_/`Con~o_y=dDLhsIcp,~㍟(mo"M^°z-F#~c֢7D([_wHcp,Ljeiec"'y4kYRF*cr)5WZaF7/cNSh%DWF*Sg(ouâ7rLa9^{ʉebD/F%cՏsʌ3:/+(7dlRo7/鱗pWbSLhŨ=qlSUtEQ >gďjhK%+-p1gpv;1ʒ18&c@.p 18 c@.p 18ı=,p ρ1k3rcp 1 86e1 8ǀ\rcp 1 8ǀ\9rz08BO<q1Hpw]wپrlձAf+:5~0ϱU Ksdbv1k{zN[U]vc DM+֥0M5lZ?Sv qphbױmnJUeٖm/}e#\1y\`67XfN߃Mqwic;'Dq?p&ĺ1c d%#j$u]~^uWޞр.,uh0Zck[j"^;b,R,Kպ,w_Rb\-& V|>\4cj͵W{E=c^cǝm/g3+*UQolڕ ۻ;;Ye\͔#:b7 Xm7viӞKձƮKg"c;jk$i5{c~ٯxXj$|EXkW͜a%]}ߦt::Ÿ,ctA8?A-Iw12?p{=39wqƅsV(5dvӊ^a萙q= h$h4s3m-%Ǿbnɳɚ`H}E=oy_]vԚ1 cl}q~=^MdX(Z_蟊n\{c0֮\0V,&ԕRSԝ c.ԵBZZF:Ҧg{0ƾn5V-M{[_tc2adM0&C>%3c;bL:nS 0ưvuL>a{ȤauXN[^./81)K-x Xc>cF [ֹƉO 2e92|cs±rWceL81fQF4VQ*0ƺc +x sp1|HGሹhWdX%#Of=#殇}E;!ό@roA>% 4S>4 Qk'X:Ms!`2\HƖx ; cbԚ1A$}Lb081AD [eWfaLp"_xx ě5/of0&ּ`LX1fcb ěYSx.z.Wױz1 ?v8 㶯8Z Au.\p(̰!ּ!`Lyx3k\8ě1c͌1\dc2 7o0&[MOW.7K4ØVRai1يoΧLN4[+1M`YdsKj^CCjX1rlL5#1:0}gHwƴJ1n>WE91kD,^1k%2KFQ"19ŪKdxrljGc׊1Yngt#@Ld5{;nKOܣ#OLdǞ-Tsdg494z191KO#h,cbԊ1B1\1Ĺ"NcD,J\Q7*ZcKlں3. BRpLcc1cC7UW̌X{h0ƴFc*̠9o#o0}tbBW׀1ybR*q 1,`Lyx31c Ě73k^0&`Lyx3;;=Ǎog9fvrX _xNcfͽ. 9;fvN]DscϹp_8Wtljh {m {IWHj1s0_{qKcC HMSӋ[/9>(`(’|9EȲ>TP'rlSUjW'^UvDd,Kcžqlȭc {ш2޳kc {vK [pcg 0!spYZP-ōJpDDrYX{8}.,,0gsՅJ6[%F^ mqycul}ycu+& FMߩf1/_I.L=TƴO[&^kQgTlF U>1.uC9> ێOLDGlƴOŦ _e:O\D&^j0W`4*%2Z::0K8bṳp11 31>x[ñcZuҰ˕Z\gNDgX:w1 cc'xWF/duѸ]#OLt8VM./%~}ґox^lk<^z'>1 ƴOpcӺ7˧ߌwrVX|n 7+%^ ȭwK%٤&`.!>ձ|$Ĝ:8cC96%!Ğ9 zK%kwĈbٽd[&O+RV[зkNu~ۚ=Q6['^Ğ~Oӄ̺ec+ V~ Gs>+i+:Xmvg|M ʐ}+iFᄣ9cY1 @.p 1 @.p 1b;6 |8|>W$XH1Op1s 0xg8.L fA!ap _麎1\ȃFw\d6p ?"-;{ݹX>k쑚,Q|Jdczz~_zNIis\YO;/mp |Sid%X`.~la񮤋cS'3SS.31pLǼ_l'*F1C!RGqO҄pǺd5+DM&XɃL7/霼2{ ..ױǥdW=[tv̗1A`cʆfo; ::Y!~uLggc:Ə[񹳴1pЍ.<̋c;E+ -{ӪK11xL<ƳEpЍbϽ"3=VG$=plv'oWi($ku=u,;}kkz7YڊCw@th1vcW@&b1ic-#^IENDB`awf-extended-4.2.0/images/gtk2-rtl-menu.png000066400000000000000000001336551522325530000204650ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ɹқdL\HΈ[HÆZHocXݴ]HؕaKͿ̿_J諞ѭ̝eM`Jʿ]E;_I~µ™cLeMiL?ŵwbLۋ]IcL׍^ImPF71̽١gMijeJ>fMZD:bKifd~WEƺ]HeLXFʼ|ȸ++*0/.#""YGȼYG`J]HWWVSQPMKJ'&&333GFDA@?ù<;:{yvȽŽΠد877üŹrqnM<4ж眕ɽ_\Z}{ȿ⵲wtqnmjcb`{eYeI7kig{sQAgRH6NY}j񰨡r^c2{|6gvcGw#Oġ+YhUpCP x1yOB^wb:P ;%֭s RAԢ%б:@ (I80 O1Lcʺ*#ׯW h^g L-T^o4V Ğ#& ԢU5/cK$)~ooF`x<쭨Qo["lBNئm$(k%ܷ掠!D=hG<欵n?BSU?Td& d0h djUDH"ȢCJUnh8H||$MJR2Zbera咔.1?S^?i5u)N:L? '/J'`QA62!',`xL͟eo~yE1'E~s &E9T iu<x0U<~lC% LqjK3,PK%wS׭̏%Kg'Ӳ׬eɸz)e DmYImE/Myc '"!rBfQODгNsSбS܂ 鸟lK/O+qȂ{=Ð@v.0HڡG)Bõ6H#Il8Uh.8k$@[dI2>nstN1o k QRCPxâ lӄG[P2TL+&Ȯ;Ǯc% b/SeZ;n_C#*x6ފgR)*HVA֓`|x[mi N; 2'ZZ;IC[v }NמG[HDZMxTRǢzYXcc ʒIJi *ȸtQ*Ax7E#mV.uOҴD4KB:<_vǖ]U k&q5 %$ηxep&"6wfɣ_g,48Fe" SYnG:0\. $󻵰LĜ|xLG>BI:.џe:i&#.IObf|K8v;4j[GZ,plrOFNxwBihdȥQG(ӆ4~sz [Z!Y{ء$~ZAn10gܢ;b $"5&D`*Q1u6?Xށq6cqxoUB D4ZF#͊ աw\ *^g"j pzS\;킻NpSj28L8 KzQ{_t@ -P~),*PpL c  >XbQ!ݱ_  J+_ b1B0%+-Jw@`A G-CQ8tǞ8mjfGeq`DX4Ȧ ̱t~!q̼c6۟fԱX *)@ 4/t*-I SJq{+k >w=Z;T%@"U]u^F3gX#C*c,;';xaپco-|WT>)Lµ1Źec=|mAqhoJK^89 8X':6ػd;-ؾؾ2ɮc!idW{7zZC7CvK78#Xftgs=\n]Zh 66-D\/ Ʊy±{~6_V|5/y˶C$hjD^jc;`W޹>^Be kJχھ~XAR[U 3E+\88DrK -y`T]k]Pj= ?P2AJ%p\m9V$;)P 49VukPo+2gT7z#K7*;d6o8΀ * 8J`CmN H-&u׽~`c8qd~y{[Hц /ھQ\,b)eZ YË}֭#K7*AJV&v ZB!4PH1(xy#UL*U 1zr`fO{hAJK?9XY%v~X,Mr? :<,ogtUV9?ؿ9֔떠ւ t\I ؤH%ۛQaZ*Ynk>.- 5$X6W[1wwT1R8v{b{~&{m/t.<{OdzgtsEos\ \qc 'N>Im +aۛQcatL}vJ๢/вuHÖoCS>0I0hٱE9cχ=:L.S^v#XuS^Vm"ݱsa} fp,PduskDJk{P0'pinM3U#S!?c0JFcb.nA Vv< B/HXcU)bL,ON:abS]P%i)cL֌kQ:̇+LJ{ 1AǸaniqEǁ &J[!D6&'D JS\Z3&b؊G9W=c-[buQ@Cs jYc>9랺 fRlR8{93„0a۷mj:m`KW ocMx#=*SB`{ az`Fvr![^\Aڕwg"dzdT=i9֋&~(Y/u,(,[gŨd)/T/Yu~9nggDkDc"[P]6QKvSm ~0%aDNbh7c׽%afѧԱd:&1-s2UfHojcf(x+ı8@-{u6Dch{ O)0Dhe P -@/ \ sr8ۀiNƏrBI{^)zq#={4~ޖ9 s+ ЦbW/\IF1Bp˷eyI$w-v[>mm||gf.hA2.4fGzac-X^Urߘ}|#deVPB/d+puMguWѱ~x1Zړ#LM.6aY 5Ǽkn|LrAsog*Mv+G.^:C0tci?+BY~Ǐ~M'mVI7q,Zw\r ""ޑ1re+."b:eL :hR bs376kl6,6n>߿|Fd`eweaR\̒Yy3dl^JTɵ(c$s©S_>2=Fwl5676{py `[F켙BKQ8v&OŅSA11[$5>lGRᏑ\1HFRӖ-[ty~?J~^^HEEyddp.VCf7Y8FU06fn܈ƽI0dy[lR^1~:K sLHFbOc8-Pu7nmxtJf8Ǹe2,VMNUY ":s]G 9&XcW(kdS4<j-tؤ rz*z52c{Ǣttn9 fm9Ve J46¸Ʈ+xЕvJ)=( ['ok8&WQIwL{g/pϠbV`h3&+|5B.,Pp:&+ys::vBM9nl+5 /la51Yɽcq|1KHwN ɧ;gwlβu>~]O74ɂ.iQjd9ٸ?hw8Rv8.l?3qLd45j뵵*ZD%$}G!cߑؓ}GccO'c~Cw,@;{>HwLwD#1ݱ' ttǞO/;{TB2_Q' T(.Njأ:pJIlxxJ@ӷ+bm f.ly莹仯^I^!xh^2؛ *_Be;f5vI .IӏrX~^Aw%_{WK* /#v ۸E?n4mV5\*̭ch*w_򉢢>hm[b%ș/p-^+-2/رÆ|aHK`)ф^6r4~x/*L0I6".zX t;+^N R.G;֮=֑ \Ibt,ݵc1.\Q:Y΄3c>rh4 "^kXn;.ОRu>^L%BA 8җR,vdG/oȎLc)ĒV)k\86;~[%Rro9׻D=n,5M'WܱJeܵk>Άis,F!i ҠF!xL7a6.]3$ӐNrE苒;s9졎{J-| QEpp.PƱɜaCx/ks+lEc l!#cDZv ُKp#0GRR}+v60uP +G4۹(սcqj cF]6"j-KB(agn I4lm=PEOuo_O}w:{U' A33&4,Gj5`pPWX.Jh#1a~&P,RH_ɱ"!TE(ω"Ru,zVtur̊8f6b;gÜ[Fa;c,C xrDYÆ5s}9{eei.K'`Hj:f T¡l։8@dhEP#+\K%J1B  $I^dpLȽĮz0iν.\jkk` d n?ұ*@~힉 f=#5in2Ur*4s}|շ3fH,c0\iK->Q-16n E>)TB ,$|q_ΌLEH'zdc1qi~G:Lr@חdm:ʈ\ uH֣F.n, Hkǣ8F>㘴tb!1v0zk0t\݃~W_yrILJԴ s.`YJ1&c<F&틐mV6T5H&]W1Y2w96LRBr&>1F@ AJ IVJ6Èk ̝c\0RL & n&a:TIv.ǤQrMC`2`Z0NcvfOKc-e1R*NɱҺ={DF|||gwEd{ AV^; aȢ01WhVcskfxSոq~>Puiv]q|҅cc 9 C:7»N  F=6vTbPh0mLKkjCvL)bpn?FWL,KwxLLx()!7BRf2 <\)2nq1(d-J`NVx<(&noK,+mThLYnq1YER頀 F$ ȲD &q ?;|Q8ƯAdC*adOͱXB_W'';"-2œM57 ,Uc?0_`*Ȱx8Dz>ݝjaPXF\JZ2y9lNS@%.kSTZc:ܴAgCyƢX, eͱRG2(m:A\&KLЫǚcx#ȈKIY.*8"8$̠o,)DB6*$;"ۂ'Fcy }\܏׻>m~+ WJpd,}p#bDU̺P81/oef`0\Sb3QabP@L:%#4%g(.p- Kp] "(),4AJPJV9RbOiɄԌ\G 08\]}:6w%$$ JFc"?1d@\{@3rFcZ =%2"X=;:z6~~6T8fڠE[XlCPP U! U%$HMHQF,K,(<3Q8Vя} }E !U "4t+dJw,L4}z8&(eZZfлɄȧĤoMb%'ٴ-d]a['eoh,/,>`ߡtdjG"$ͧ. E&HCP@v~IVw쪩aI_D(IѴqXWUMqDdICt|7 'p DII7nxQ7n$%QUW$~x/([7 P#醻|*I}#ʞcKQ}_g$nHՄk aq備t,IBII\o##he#"xM (% / T*, +aeKyc>JZd/jt#ǤkR6٤nx˂jc+{%QjϏı y?˗Dʞy^R;nph5H Y ݱrl/{)pD9iZ]?5+j[^9i;tǖhȱ*OcQ;$_豻S׻:v緝~)S?8~>2b/Lj Cࢀ.$n1ǜA79jcuPgekm8mD:!3 5ZWg6Ncis,#Nj8&Y7.!ŠKrj7XC' UK1G׽s.M{)GF;I:-w6s~*Q}_:e9?w6q.օco=n|F3.$MWUMATڱ/w,z;r8c#=SHOc"a=vLű[G:|Gnιp,?3g73["w+k0iNڦv*ɜO꧚Ԏޱ:;75cdKR*DJaMr$$̻ŎҴoȲ3;8vmj7̙93+ iß͏·M ˷bs 8ldZFz¹&uc$n$!FPAy2;;;Oۿ޶m"g8k1yXvЊD󞟏m{M$mc,2koGɃ; Qqvjn(܆uHs\bD[Ǣ &tr}(&Of/nob>g<±o&GUP\lñPn>J9fc޹?Eq}\e!.1db&j.x;Qc ).DrK2MYQbJd1J KW93====43\3n}cĻT=Ѫ5Uʎ1"I0(&&l _l[EV4N#23ɟd^̀E uL5Ǿ _{甽NcupU#dBX&aH{c&s $Md&w{Sñ6<~̮ ߱FiaNA1@yʱ`<lRY&m6Q+`@XcM!6L^<:cK6yaqqN7᜼ ˩y1a:nULLpyd\@ [3 82g2Mأ~-Z|[ gom$;DӑaE\1'+g ?(c>k'^)<~?c[OAM$6ёv0Mj5[ 5}M~ WP4ջcU[r9v$ ǎñ! s8]p,))#L0Hp,9Ap,+I$ou;-s5h>ƂV+Yq6;Nre.~cD_piOΗDX1%Q+IW2eT߄׬O`\L* qWvH+\8˂TqU-pNPfa, cYtM#z8֮- gJHKH&4LCF-'Tt7W&F 1^JkYQ0Ɥ Av+ȯ V<تUd$\Ϊ&4dct$Bm]WZ/&BqPuL%ǎH[@l َ̙cV`cS< @~p~Ic&yW\poXdܾHuc-/}Eg#1GFZ,o?{=FV{nޜcrVBͰmZfPBx36xG(ǐehw=~vB`)e{Ӽ!a>yѱ.}ܱc{1 GlJCم1cS &aoHC^B-.;iM^*c+v4dZf.sdžӑfw1~ű+Y7Y7|zk45ݠi>rLXIoHHWµ-19Fd9DL&c^tGK-bpW<|J`owkv~pXbul]0'8&^cPc{ܫxEYp]ih*UpKc/ܼ19ͥ˱5?ЭvbWĺbh 5`>VձpGǢ/ ystXcqxIdG_T7T\SqQK(;Xurl'kqy*{-M?oº"FuRAX {7B1:ZiO*.JɏwDv<[-Sc^-/VDh7*^QcrcpkEe%>C{Ds_F zzCcn|90 [)5[cVoER c7Ϧ9k_]8֙:֬3> $,k,#3}虞-ُ?fC&OfgK#:0cum%A5rDVi3<#\Da:F2RL1gNSǗaF&u =n?[uYK;Ů >s5i*rc]LGn}1pӬQ:~v%L*Y9Y[UU;OXſK'EÓZCCiip7 % aL)[luƚGDZWgc-/DpO-XttݎϜ!D;j[mzP^y{n_¸fˀ<@F4=W\1r,1._Jo8httyScAƮY;Jqp 1N! 1M4MFtCv1UA6 ]i4be9߹cC츥UYKϧg܏c5Ckvz|w:PѱbV>$ 9cE--?\?lϽ*|,q]~FT V~>[i. :6 Ǿɇ{Sűӎ9˕s%.U<{qj@MUm;6{NúYuL1IʑTvlW\886gvj\/:cnw/4꾯8Ͽ[8W<^831"wokƦs xcCXx_u_'&&giIww>ViRciB_1z6.:8HdZcs747W%,o8)\}y5izǾ69qlөSc ,3<C=裨-ё3R흏M~dQ>D`(t6؉Tv8wlˠ5tMCc>9=L8:6I=<3x"7+ %ȩ,o8ɮTs?ybZZ[:ՙ3ź~#7mJ ۷g~DZhDv!e/ 'bttc11_B745*1K^pm$cpi?:->zG]f)"RS1a*G4<&BHVX/Yp饜쵞ii5}cu7Ggo1Oƺ*m16Ԙs"M00*+1Fb%KOWL*Bc6TNF$ q8ca,)8s &G1cboǮ =&꥜}Z~xgOi"50v*GaRfTpltGU.]hQtKc/:_\Qtly6Rx0M.jI$VaKH ;ON{'e']wO0kc4 *,l\X q>Ʋf^6f3q F 1:8X谑QhdF8u KĿOwiQw4 {+6 1|W&(wW?coB] ="OEÄ9)AX&^oܻ"q^Ujd*?e<|*%?F:znpO!WLػX=Qgvy?!|i͢;ȬL'W%3`)-5|vj9}Eă HpNq !WIB$ssX7E7J\}±CYǞ%f%ıܗ<;X8Ș.PMFڣ*Gn1~:`[8e!,0L!3$h;6#sX_lg'2C.Lb qוYDp 8ӽy6q>XS?ש|e_r(+sP(DBʚ8|lfqLe䵑TvcVD-`NrfL1_ [3 82gMأ~-Z|[ gej1MG8H Tc^(I82d&edr|>Xњ;Gұw/U'Tp1Y8J'z>c!ichFёv0Mj5[ 5}M~ W|}^1 KKW]*<GGgB\|j# ȱpqHf8lqǒ>”&8 8pprrڕ$gtDj178c}EF 6~+v0DŬb!긢6Vrk; TLήJ;fEHhŋ q Ppx ؃MqSOeiMe#]]]]!+ttt x9^IOOLdLCHٸ!,)ȏJ;NO0~qpь=c_3+nmHwaZF5C@3\,y\E# J~Á;YrFHnv2ؔ!%cvRͼ([mHw pWBE :Fju wN7>oeo/Z3tc s\ $1ɱ؁ reb5< ,9^II6ny'/`n)d#cqrLH$+bU 4# L(GWn3l%qՏ'FvEfKcQe>33=t {:jl`8K~Vhn{c X?8q{L3Д1p yǖp=V7dI8 $vPm8QǦ^߽&P$hc 8Nl\+om~}w. ֱBd9+D]v?/?4Ӷ&ɭ6R(d7kI۸р8c(Y̎2?{fK C4@c|t}bN1PH!Vc8&yF1^uWjJ1Hv2Ù5CQCzu,VҖ4#CL5z,# 82+ Ǯ4Ӄ+\#ɱ ;6RU~ W;A8V3q(MvcT4jzvc_71:6bT3ULT"X{dž_ 9>w1KMg/1# isIm9&<K%c=WxA[cAb8v+Z,_nc2Dh[Wg c{X`c>E}DŽ嘪*bzׇcYC-rUy=WZ0Z/Y(X1ֱ (I1}<]Ѓ; ݱ} \Ǟ>s}Yqa=i4D꘯G?6uVS\0bޱir<ڝҘu؝+9fMtǮKP_gOlPrMd{07OsLY O $c} su=qŕChF~ kw {fS;RͧZ至mr?V|(d\wאɮ1^;VQpFs /Xf/ 9vdu`{(R9&lx, ~#T B;kL.jӣ:zVZ㡿/]@حw g];N$UGp,S,Uʒ|A(cqs,CQo@bs6q*&y^>qx?KUϱd?bՑv+VE'Lr,n) Y5+ )Dv,ٟW\c&{q* "_%ctLacs!y+58v˨Xz$(Q%c c(:&c>+3a "{azEBr,n*Y$)Z;1_RJ0ɱ Bt?g@wΊI +0!9W;qȥc";e ;mTcu@ ${p"k51CFYq bO>+90<@ slM}fNg͙u/r_hgups EFv~ C~)9&xM&HLeo[{ޖx8Fm:D{?ywKL7LS-t9:zbr3j4 ~۱S(^c,bىP 9܁9[HL}KL7!)q 0cv#a.Q!H1|V`Vc+ s^QXeIKɼQ^uvvɔul805Pet$ YX|*d; a+Xetc~|۝ul?@Hl^Rs`oT3N}i;qanӞP1)924C@3} ގ%P8{d1#1;VVܓm19f4w[~GRp;{-+q($'t9jwU'r1uΤZ{#g{8 ;U) 8&_ͱݻw߾}{A5d'&kylXeInc<1{poѱAcj_7P @@26T !Jn8wDbZvͳ5 B׊Þ$pLGǠq7Dgo(M|^!T{hh8L/k?=.H&b53k+V.G݃=gXcBM%ǵ"[cț 3ִx;@n#dQ#+/7uĝ/*^2}Ct^;6ƱgtwbĮ }VtcG {r5Ke4fc5nXne6BKEV@`3-,l'7 -7~bi'-lr81*tLQ_1kvDBz^1,Y\Mi+UjX Ad#op0XqɕX;Wi| u쩱 ױc݅,^tX1U:VU\,BkG5pXl=ǔȎ96mY!_δ`r`d Ա~:eɱ(V.?]Qnj-ۄkK*@1!؏óg30 UR~òS[ϱs/6L&f\񐜢08Ga76g䮱G8ECZq 3* pOTkAyXO\+8v?^ sIp ?@=@[ika}ՅȠU1MJ{xAeusT;n\3V~kI1BɱFȕ%QI1cBr߀j~S} 8y]`817Ryȍ['*zKr,>).ZE71yŐ{I1Ȼ_+cqr ^/hyEcU{F-8qFeh2ո&, cK$^1Wcw DMF;:(X|<#:w[:-d,%6)"RI88 bwLrl"bF1P씎q.O2 1;sF @1Oqʼn~E~m1=(v8j5i>m惦ʒnR7n-f'30jt LҜqpLGL1q.;SAaMs&b2eѱۓK)K7WQA$Y⦎ѱN-8t^()dJɯLy7ѱoi190JmR{H4$X3He")k VD>ݵ1oݦoM1ɆP16kRXGH5?VN_8px+4tn$1Zҟ +WU;}K(e=NYӸ /eon(ܣQK14p?V} hꊐc pm|ox'6^k.7_k6_c;Gn@Gv,+WHBǸ5/^R$^~h͂5{nkhiqL_Ա8}|-7zRÌr[xǺkwץ6lV݉?0El4R(il#.]bkar A# }2Tcms/؎os8|lb*40Tss# Oc;3c4`[{F?DBQƽ4ޛrTZɱKj6c̝3I9Xɔ0}Hgןcx.8O%̆#եBcp5T}7(RrLr,V(s_2%3I˸.XФдj&`E+>|h2R1ɱwLR0f~H3 ʝ}c(iXr2S!8ᦌ`6(JxފS,9Ǡ8#q҈1v%1W\u lc)CC:\?oZp*˲X|'3$8Y8-[={HO*WXڒM5&]C{VRz@R;q(CT!/|/ggaaٝݝa|yM yfy`P ;dh>l~єu&Ѫ̀1@pǢXylKvo WR]=;c,zl:DِXdQ6{qǢXJLyU~aK\)ryTJ O:S@& #%IAgb{7wl;8V_^utۑu)/ёc_ɍctEձ)1O.X8H>hB} P6S_] ͱvŮ57w/xavس['XЩ݂;y\ױ/a]hqy**jz2J&cAVr=\wRc)JCqLsݗ\yⶅ:6jsĉ9t=b6d 0M6H FOb\Q>viur:L<2pN<8c1@ψjfvc:uL\qB)`6*ȣ+;V20ϼ?~s:N.,m1c"u`]1ׄW2XgmMYu"ty= uqicdoGK-bLp~kuh9%+ȩ|䈯-#G* -w,hzpǴ?mqh:w,3£c;*sl~GԡS!1 握dCo5Zt?t*4Ǵ?&w,.ױ_MH\;erlߠcij:*=RfE+Ӳc8uo^2u嶘fe&!QpǴwIK˸Ҳ/"`RwW%&Oc)'?Ʊتr L^U1cĭ(qcZv\|K$c5~Њk+1QwL<\i9uUc#kkK픵|`+1D"uqt+-;V-nh?Lڤ wLUvu揭co,F;c|c݁f?9Ac%Ug˱/e9cKKK4*.atH@e=N0bPǸc`UKO| cX1k(clsXȄTA҃c{|BeD3o/L˯i@" 76y|$j .L?Ȥ2 ?lW3n_0 ;Yܱ:V<=}a,+|vfUO#U:6 }5ɂ=зPK>Cbcm=4yoUJE#9-tSv1WҌ#_(ϟ˭sv:fR|x./\xj}l>,㞅:t=3T@1pW]%q?MEcqD}ǪvI(m€haމGpC^wԴAhuodi0Gu ~Q_222==1=2!-u&흛.)M09!7ϱt8cR> BEACǼ˱;G?^H:S#;6kۉNlB@V0dž&vb:0dձqݎyc}i4c<L؄kι+콭1as%(cMtǞmTbɤLXĎ73$<õ+*s-̛Mc.m1 qE8_o,i6Ut|4r'fUbUU%Ҕ+po^ьWZc1-EXVm(2L+dLݡGA[mV\G<a(hkr4t,.经7c}GC#+˷PEWlwLێ?yczm7cM-w#nS5_d%XX,<YΞ7DY 74JLuTzb%|?5fܱE*x?q @+)h(w^pW{bv?|9F޳GaĮNX8fT)4 :3RRqL?fgbo wu=GlZ q2{6(_k +{ X~)Id3Y*uR%cjt4 c;S-ܢ^ʨ$EP?X:E,_xjyp`i~"5aKHE O)Nؾ2l[𺄀h<LebE e"9A]FDB&O!$*ӢcEmı2K>Ϧct,{?]t ru`K3PÀZ܂8۟fc=71*+`]rQ &&˜l XqTӾ9{ X&(FKآ}1a'+,Ќh]~d$mуEQRa[0"1  ]ca2VXYPh59sh++Z,3Bkz@Zn͓eIgAԓMR,m;#Ztf-xٳ~m̴)M<.#PG|y) =DŽ™ߵ6 j2b{wzf;QcmՓ/x-xu`xy@.(@ik 5K!lS؆~AA`X6,|U 5b[St`qbKuia32oAdyd`u,X<9L;Bk.=gU>v MJ+w[c/cdGDcwHLǤ7g2d!f6Ȏi8Gs+s_Cjw63?!EnɁ$! $/ޜujkC":FWvV﷛Ap-P!bּTaGPi7kGϫ؟+ݹnwu! ~1L0n<㽽Dt0Ti JG!<͐炣<橊x73QFDŽ¡;)cgs]z˒1fU+t]Ƕ8ܿƙc6: ; c\wnP4)*J%d/ZPqaŹ;5.{z= ؆~c4?Y$9D4\p+Py\2Pv]*c*c~"UTTDTSS222&'ReLeLeLOʘʘʘH111y?*c*c*c~"UƔXfɟJJJV^ITc/[W+a->KUJ{ϗRr_7ceu=Q8cCax\Y+>kD$`'B ީDfF$k.ce1Vd7S'yO+ēBhs\Ʀ42fz;5֛WV4,i(0"Єם"*7fW 8rn5"᭾gXkGp#w';eQBe]w܊=O޾|AɩՕ | x:CY"t({L0#}KH͉m)(oO"kp<3v~ uß +j j. cݏ4G`q|(1?{kD"H׺EktGhfF̘E 31l#8vS[1c;oyo!ʏdغ"0+/":6MGA`CP,1YXƊ6l^'<%rIO5[ci/N ўf@,1T]UTTdeXtl&G/ZkcF#~O#fGnߛW-06ƢN\ h .jČNjLC$>Z Xь>rZk؆&G/bLf#PѼ4^}+֝jթqC'us%ם n]aӴ, AWXbFI5L/G.Nn8!RC5Tb, 5Ei)k\NFNz7x Å > ޠa CyF\撏\Zڔ[6GdL_ik Eѱlc* K"VEu 2?Q6!;Щ3|ި=xvVz^$b Jc?Tv=hjSNd'Tr>XMۆ&G/bTCpqflw>eX׀" 6G\cZ2Ieli7@w}¯e1iWz?ɡ3ݗ^~^w4C,>Kd55 V );躪m)^b[2vY$0f]( #{ٿjKI!b'2ʲ~yE/ћ;rxq,yIlxXEcߡp̶Ucv=KUuԪՕ_q෹Rc#^][\rtԺO̮5w#'c^zű6]٩ն[cK΅'10}3=k||Y@=8;DfN!f9l9_^CUc{&%Opg5kmn8#96JdmCWXTѩ YՏg`c+pKPAggt>Fo^ R˹TGmX/ tE8+f9@p@a˾ c^Œ1]ec]FbR1Fa{͕{{n k=92$x]uE)c}}H$om[~lG;*Z8Y L R@mfܞuiMWYNkE*ޜdL*cI9.c&F$'i`fQ-"K31f2V]:56 6k*`]ƞy6pT*.dRM bLgiu"7{:o ;C ;10жv]eBjfψ)ѡsXl,Mz2&X:`Cuu%163s܉szVۢ21{ڂ1P*c*c*cR39XBeLeLeL&NdYvYy)&1;)cҚOܲO%?1Ƭ 'x B5 *c0@7ymF{qhvy΁llx/&mώl sc=2߲w ~m8pm܂1++֎R16a)cl%Qd6SgGя$cvBxY|(KP'3Gk@Hcxߒ1R5ץS%oX֌MyF*Qa7λxnO^O1,cXkKfc5"A$1#  ~a.B.=݄yF GFv{b+Ǩ^ϽXO؀7-x+r1YcV - Nom1w#9_bqn$yFh=XRh'ۋ"I(cf'G"tZ` q p G-ѐvhFbSSAW\Ɗ䵧,\pR~k;xDƤ>;g1q P F:J󄋦F^!u;8*'a @q j#M\\p\Cʑ'Q];wX0DZ@&P!TWmmW*$@oXn=+d;#adf@M N%#62VL.x.\p;F_|p܉*cX 6haؤC|@3b 5l(A 1+OWX/rŠqM Hr,[ͭFDA+8QԽ-y-,͇sZig}Z_0qĸ"ctf[xn,2d}cV-*5jA= 0;˅>Øcg1c^'gks'vM)I 5O`=uTޖr : ng߂]omTMT%1{ŷvl8SynT>f2A;x/e05 cs숽)4^Je [B4c\ϩS'lGP((,­kdXƒ/8t&`mq^*<pJ||c; ؿ[:'? ')P {~;@NPw13t^jX1c+pYKIXldၯ?z7VQn^ވ*fJΘ!ӻ<^?݇7Yz@@7_&-FOA73,f8i -BHe.mưnNUUb7/ {F3VCCƺ:1tƃmCgƄ3Z:~Ӆo&'L56c>όLK~3Vkiy?U߆.c<|gjT1zBQ﷍0Vw%3- cvx;:rAQ6- /;1i*:0go.~ӵN&1~L6tf.=>U><{5qҤ*<0楶,c~:h(Cp |=ɫ+늪JWN˜KyE,Ĵ1Hʌy|ocXHʌ}M1NLa,g$me Jn0&mgbIa,PƶJV>xȘR0VnZ7ƈN0f1\uu \D1oV Bcp^De%Wƾ9sk O.T]yƒO=n۽jalVWƺ(] w#9і?g8m佢Y^,ZD&\Z wg3ӝl:L1hv2ܞ%ַcfU#cd"2QJq ;:L=`\&mf<4>/ƅ1T#cd#28Kئcdt32al3%#W:i˷"?mKDH=^[1wT3c$-"+DKdGt2eXՌ dt]7T †C]10cʒ$DLtgr>GLi]Ą1O[29Knt3MuR0V-cIS{j㌱%+햸ʎN;Sd_' crߏ? cI cn韄1$1eO˜k˜\`Zwm.=6tU/ {F[0g 16|tCQknnNgf"0: 1f }i1 n1O,,@9c]_1cm>1f%NSy$u+Nle o?}? Bùkó4ʯbͤvqFs@%gGt8\sx|5KNÝ d]n/K|lcXOr,[d+Cr+yI0<][`Øh8%="cĘޤsɜ!cp^aHbAù.l%na1b\p?8lv$[#yIOX>D0&=vg+e,+BDb:=,/uFg:^ڏ]s1u)zSeA_R` K"`0$jx;K<[y,à[1c65 x_18/Y+q_=v}Eyh_:ܛ'gAKc6j\Ęr9c; 悳 [e:c,bF,BNΎu .`.~,bBmbmrvDg\p\p=vM}S0viq..r]k9;#퐳#'bcĘfrvD1i1FkF!gGDcvcĘfrvD1i1FkF!gGDcvcĘfrvD1ik+`F!gGf.汌X!{bi "d,] 11CΎ uv#퐳#rcgxSӻɴn*}7a4~;:$Ʈ83&0p4ycӾ4r'''5#rcexO6>+7Gd|P԰iMgl6Ku#rcgxC&qĘi3\fB7p=H;\XG>>%{&dZ7Gs봼j|[o&1CΎ-uŘ Hu4[|F^B5a1#퐳#rc=F=#퐳#9!bcĘfrvD1i1FkF!gGDcvcĘfrvD1FWc,@"u(bc:ԡ1zV$+b#٫+X큊/MW4mJ>H,`0/R`Lubd\X8.W=ʔb cJ呗#Y-w1鋉֕-l"HVe)@ +*?Jó_*G9ɍJ8֊G9-սxȕ+Mp+}ކsj >'~QbiiY2&`ch c+tw/jp(fX+` >bdWI揂)%:1^DžʘȎA,M+o\/h(z1ozʗjQ*$cq%tTxBs.wQXn#Y-1(c  XT1ֱr!hl⪉BRnޫ7}d\ǘ*S¯e@GԫgL喢TVia,_/ubVy/X.JF$>BJXr.DG+ (WSZ(ZFKz0j5 Ȥ2Rߏ't?TæcRhX݇'6ԀƋuU`'|ojV\|UQ B ٴg}^N}4A6^y,ό3ceL^12=9paWto]3f-Qa#ԩŀ\U!R-cSӅ:tdn㷘16كg3=]#.1&z)(+(\aƆG˛za+Xa Xf97y_eg=(+&(cن! XmC(](v2LJO1<ģ{ ӫǢ7hÿ oz[ͷxC6 !]vcإc*c^ y7X8q?(TGUeGՁ~&Tr`J5S=VNձjXQ}=ua uS{!!a~lЃ4(u~dl0ncvZ_ \N}{vc{{[6eۓ,;'{BnfC6j0,H]ZbLUe1U7> AJD1:?ruY_G#$0 f=.mB4%Ƅx4༅<9B0nlN1y5.vb)c]bXX<}!~(H Y_*\hN5nYQo:0F0z S!stUj߃A{dcCMOAG[?%89;-D߳)0CC>br2g]X^2jp,cU]< 5xZ:HcD2jmBUL 41c CAX~%џYjZcOk#5Wb S:6^ޥ,~';bL]br-F?7:1<{$3O\ǚf8/~"㍰xd$ShɗQTCpa& L}YAm,Ξel$AsB^-lNÿvp_}=21̻us+B1AbzƘu,GyM\L4(5 $ƙIntb^r4Q;ks'(;~ aT]wQѤX׿r@Tإ#ƺSD1u=:յ`\p=4cg|ZI8ܳbRу ,24AēC`!,&,,9d "AsOU.5gt+KߛX7784v,u|͊Ύ͂W> nop iX,8is> .j X,8e#΂{~W+cߑgYp~[-18Vxg72 oXpX,dZzXYpF+&ɂۚЌ犩GYp~cpL}lYp\f^pgXcS cpL-p 118S cpL-p 118V$f'e=S78z96+deop,rXꄷwOAU&Qldu~cO&}8-˓P1789u,}›( o(֍͓/7ǡ0Qct,u[ o wX7^5*:|t( ..7͛7>cq,}/Ʉ7QǻQ%όbdLd\}8 X7 /M ";d~KC}2:&cp0Lx]Q[1ux5aoRe[ұcrfxrXnkC&IX7.;ފ"bߤcbZՐpKws7Qsq2M:ǺQ}<=<ټ fjKkOc o^;L&wX7^RK ~,t_[֋б&e@83c88Zcjc88Zcjc9}Sc 0 c:s@?+\1cǴi 8Zcjc88ZcjcV8{#qPX; +Ófш֤BQe[rph;;c@c6K316MƖӆmټ>pR86:>qw[>|[4W"c<(ΖhtO;?n3>$%4٫oudѲ]p-uMHvt7ͼ; Lj21|+^VjgۮYz0YXgXlv\ߝejZ{ݮ.$a0E0}ڱvf9ܱucqeSnd:-+Rڄd|+}ۜ`t8T955y26šsHƩrZp/zSSܧFm3 >ݫzC-+ZRڤc4f+Wފy'c'%(]ӎmұN+¹]XCK:F]mkb~x:c9FgtRtɣU Ѳ]p-uMpX~ٱvZ[:,8JPo2hoD\jaw%'b\c8_tvYza .Lb Hxf·\B+*52)`4 S/;dP˦d5:Z~guZUӯ]૓*lQ9;'cXV|6ʅPE٨ot*xx`X?;0 +X-uW:6~8=]{Υ)Q!dX*(`,Oqoww:?|E=+rc/$-Mw?֪gpv>oIW5oVXwW{ΏX`u,TcLo=t:oh9+P^^/yӴ*,zYz}zoт܄Ѱ 8.c=v}?)wpdp͏n2gȍ)o3)KO"oB]۔/[h|zcTocKd7&ǘ]Sdlj,?U?1/?OƬʘ~OaW>LebOYr::3KH CIcSC[0ڽbEƬH0 7⾯+.L޹΃LB֌ȘI`,L͘ c2icWf}!0pl{[X6CIcXDXJ_ݠ}E˫5`Wu81)4M;b:޽F{:ֱ\p{Ǽ 3XLcM֘/X籵65?XϭФ+a_Q,$cWk,W~M(zNx__732k^d y1|3#cE͌732k^ѹTctǙ5RXŘcp8լYW cW^#V1MmsK8c'Jc`12&ח1:$󎟌q{hrh|uٕ_Ӑ\`l霢uccywwmQ^eiCSD%8%TĹC"SC`z$l"(q1u`J9Q}i<]kWq潝76|L,OOsiNg]f$c#/8tҷc?`:NWvjǮ&b;vfN}5_p JRbJV"+>1.i 1X"9FѣDvi&O0?ǘͭFs#KbWx% _wgU;.I~'Xv5&OX: إ1w:_l̇hO/Ә=_+r|.x]L&cbpL,;2ͣiy3RG춖E],Rd']ؤǯ%&'k 'XrxQ1p<:W* T^ENu=nfzօoHىHC'X8FP`uE~EqLFabv^N],;P"oh\- c>pLܯcS.|0.W6KϹn."Ye;v;FW>b4.~]|#v1Em w]OdǶʇwlͲΓr KuTs}#Ne18v~Ng]f$c183 3p8KC܎}fNgcKQ%iKe±~z |G #ƹFf;do&G_nef ԎnYFX\-ټaE;\1y*$g%{1K{1Xy4F5[%8c9pS[iR=/{t'c`PbcKrl1k\YY5){t1kmw|WJJߏ8dOe cϝFvrc˫Ii))?ֹ*R,c`p`,;)jjz86DnziT ͓]R_WO31 8^zc8^zcu+61NֻMIENDB`awf-extended-4.2.0/images/gtk2-rtl.png000066400000000000000000001512731522325530000175170ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ɹʫ^IͿ\H̿[HocXԼܖbK݋]IcL˿aK_JwZG¶yi״~]E;dLiL?ŵdL̽ijeM۰mPeMF71;ȸZD:WFɾȼ!! Źʻ_I_JXF`Jǻ}+**ü988//.GECǿû@>=VUT'&%|Ќ|yvLJI澶433ķvspݤȇRPNƽ˾ˑM<4fM¿\ZYb`^gMgdbٕʍqkheخqRD͙nolǺԙ~xzcYdNE5KYzyTCnXsnif4(PzcmR)7g Gv9V|x_$^@!&3 9w vx@ ha1ea).cG9wArk( kyQSw? Ƽ#3S\DS >-~s@CsYXC*6 ,E~WϾtfs:*H"pч[L~CQ}ׁ۷g7 cibEg42uk$9 2 K3FpuFuJ,/)t.H$Fi(oY| G% PԟQ (*`Xn*L-5LkgµN иDpoi2u sz|̋R y({# K\kEbt}c_>HZ_!B :΅bK0H8v_!G$i24mݖ7xL<%ғp7?00rOKWcۖx#F2 Q1vP*n*qRieKOR^,ǎOڠ p#v:@K|^3O%6)s8v{̸{ؔ1zkgĒjB ֿgJP.:#ymQz-Effcc8*x 0v(XkrVF? %eHNpc5^Bo 4chRq( F)c9d9pʌmVQ}Lvbr|JƱY7b䂾PA2PY/_Ǡj!Eot3LۨG=kr&kaQdČtl!"tWK3^Hb 7RR9I^)աTh:glsuǭ=J7t.'+FA. %j Y\ vq9&ޏv9!/<ȏ118unJci`zd XU" -~ r?+5Pow'A.w=@[JOB^qLo GНHѳ{1jp 3A&raR܉ʄ .#sm&Z141TYeM,y|[6jcSa--f0GS(=.+'€͔qlZևUT2BQ'+8dıi$z&|Ҹg ã+`)Bl+4L'%AN26/VT nBO2{JXA*o>8G\AO db8=SXd{c m,.WkVUO 1W87Z_'x Ouڪ4P-[pRPŋhp]z33kkz:#DU86gQ왏EA5p|A1.4Lr]yx?}^L4H](uV\TWWÕGÛ:A8Ҭ[a1 լ7CaY:i'Rc9A+-nJK} JfwÕni@ b )@1Ao6h"/ڎ:9 iVg jخΖҦX)ֈĺfhV̄]w*,"f|%pPVaR W("TC1zHtuPE@sYR1 Ԭ7Cq蕫vq}"WP;4aa%b=A;_Ɍ8i@ ((>e2 T4A+eo\F)y ڰ^yQJ5Ь]赫Uy옎00ȋ}Gp/gVwM:]O\)܏$G c(Q\qeñ n;{XNw"8TJ骠TAE); c ifWwn?e]w*,ck64zuQ;_<Ӂ3gX,Nh}\Yqv bp{nhJ7epÉ5rF#qK 4X_=ng{ENus'KJ.CWhkN&.IGQcY pkرxп\]cRN `>j|۷ +rbbK Kkv '֬Xlhlkw:ʜ;, v՛^pKxI8 k4x%0rlC-8aG BWE^mX;kG6'{"}`X,vdjժO K;-~샃=jwro(rlwsp/*|;Rp 2EǤ-O/誱Ѣcv](zVuGѶ8qϻ9##'/|~}vեA` WO^$G%ɈZC%N4cȱ #ޯaѷ;Rp[ݔs1H2$n;A2tu s 21Jq]5rWoUW 8Ǝlp_8Vñ`OXڷE{α-q^xP)z@01wȱ?ޙУxOTE-YXGT;98FPı H2'<.(lf^r[a'nb?[,cXFn;ƶ^ulȕLFO:LX>n 96݃}UxE<j9Gt_dqԧXSGL۱'3u$zuBƵ5:ںu 7n"n*<-ʼn{-FX]jLhǎ AgUt=j%{<{G1 ;իǶ 9M3:>>=}c9'֍LeϵYqS-d8qϻEu~NcRG/b#>1$'CL=Px(v{{p;?=1C+PLc<ѴSGNPph4fnjc;;Eqyf@Ё𢃂( */@K#<4 `RV7 /è B^k/U/7[Wu[UUgzzg&|fyy~鞡O:v8@YE|-[rrru]:}4|[8:ıSE?6s}ىtbz&2I8O2(ױ/c??ED(2X1%Ŕk g;I">C;rQ_tAD=Fg\c.\8>93Y4WS۳}Sq~;;}wݸ9|! a{rǛ}'tIc_/>G32bnX2?YR,͸T(QUlIȱ}Șo1D5FMwrƆ\}ѩw43ez=C;G'{|2\rzT}Ee~}8/yG<{ȋnPc?n/ьln!<~dT#Ubkc5ۿ/߮^It:V]Nglǝ>`|kTllCcӣnטG}?_+*;;KT}Em OK3RY8VЊ5,;rE9$+2 {26CŲrVpQ+e`TÙivL> /qC̤{=Ȑ1ijSS}_?}}S<6~ZL1wwKf<S~6e#~eԱt';:s=c25XXjR@QQǢY<]eNK D`&%\bDQItݑ%TE2-%\8ѬaDEh: %:%:%:%:%:%:%:%:% Xj. 9Hܸ-Yd)9"VS jXλ8/cK~N0|rzyۜqW抯FUM-<]K bvco8CDΞK0j JMHvq +z**G*c3y?yL' &S"i/O>WiXXaam\-Ƭ|^[[[ ;l\~194F 6(3WR^\\Mr|ʫܑ(x/C+[vG7䇅OaC+";[dyj}/~ǔΓ,~{QtA` `StQXq<C4i7W1L%(V;^}U!!MFd9&NA5VЗ8㋜]-.Z<e f4= :"plBॺF˱5{dh"T.+ o>zGH!TSVʑ4Ja<%bp% ة7)8t\BIlGقqJcv4/ZpE"1NoǶnغujvqZþײR+i4NkmXf>C7ҝ41LH r~QbruћsQvE9UKa* hNHM0#xx""1癏^Ń\)8@j5^V:B(2YYȆ,q% O0oys B@Y0E$ ϩC2LFfd\qZ>b2)lUU-J獰MlZՒ;p%ΙY9|CH:V gaeh%Rn!|ax'* U 9eU)D o@1%rn1H1 [1gY^xSLJo}*\ H2YcٺbFr,ۆ:;u58z0A0`'FHUh/sXߴ'K(-n-ij~ieJk=6Lt*v I3`G ۡR% B_z!C1vO$ $/ʋQHFbrEVN:ز˥<%9b5h=|%5Go("75(7;^ٰa/h,"˱*Z* c ae\ a_TbJ-]kV)b )#ȃ#Xt'ZZf1$L͗c7 "|H\x c^D2F/]1cXʱP*.=h3ƫ| P:yRcQ8vÝϑcecKsv+>~ 5cAmu`޽{AcT޹u vM'?åʞÝY.9f1 [^;$0zz!#YբH /!FMр5̩o嚆lSevq8s@JQ Q M0]u4aFca{'4jNJ&>dKH{fssO[6py u&&m:lsϡqlz ELrdǰnZ>1{GN/yv6K\r,k[Z lZXͬo89޼yUƩ0͹` BڗoQZj{4~g{eGUbH/4Ӝ+3#jk]cvRW:vzR"}h9sR ti='o9| <8Z2eaT'tPp .)FseLMJjKLLLM3Tdg+_Xm8aG᳇;nf"[+8wgت}qRzbf9d$bc8Ks:%1s۴jӦcA2_$S(;saoedJɱٞvűxs.|86Ir,?*QEumF<[L6 ycX؉̭C++6 qXoL])1|qu$Х>M.Y%Пph_BO)GĊmf$zIXR5f$[!$M\"Ǥ+z]PlOJ+:Ɓ={E.iӏT8rzu:C̆c^UDz(?jNnv1%^@ D5p[4)sVkr͖ 8KEL l sg']5촡ֶ+isǻalC֭#|Մt4?+V$ 3Xg%'[4gD[&ѱ3ۙ_CqÙMͤXű ->oޏ+ܩNTG}dg^q4>u-hʓs,?\puDR^o}^V]o}RbbC"Ȱyhe^5/ M[vvyyvkffRbC.C_u|'TɃ.tԤr[IV[ & Uvqdج瘰 VvG*e;(nw<s~`yo5Xogz\)=[93jC] j1>>1Θ{[[S"1j(A nY}ӻ]S)=5jMH68l ٖZڐ;?yĒy&XMߴi8',{KgyFLTfPkk;].H~sa Jvjnv S*Sp%WaB0i:0c+M15.f} &ݿ|CEM=Orrnwo]]^'9v$Nmpۑ^$L i&, 8ՖǚI[UjdI1bnȳvHM*133.泝'8=mO"KB%ΧcL ƱkoRYtp.fcǪL JK333I51mj؅ cՍu8|}tֻQ ::{ rQJ0C+Sc$f҉E&*ǰ qjTЎu]+_n8+N_Q.^{Sot]WhW%Hrp5+La)-2%,2x[T pL5BlT#dRl b9Ju%ѱNZoflmbc)Xii3懲N Aꚼt+;s8Q.DN}o X^!?P&z 9fCk Y 8VeJLe.9:rb*T%BKX'?v礯c| Q ti/[g \O<-Otϱz.~rh5TZRزEliJVi8Kq 8TPdbCFs㔠dӼ;&yKAQױz=1¿hXåBdVcƺ yc26-!&_/14P0r!'^浹XccX{cdxY,+ I3o_ڴ1$QdI3(JSiTPN|(a%p ~x%{[f#, G4kltf1{Mv%pIj!%+Cj2M$KVMyҎ]j{ڡrlW,R[:v$/8E QFBQ:tqRa!Ǝ [&?/4~s˶۶IFug|L,By$].,ŜX?k+HA$xe}u<6u}#19f}/g򠈵jLG(c.W˸caހK?,q kߩI'}lV 궹pkJ_ ? mѣa9TKV-@cb8WsGSk2rKƒniT{K}Y4HW8$/U"kKc浹c99><:9+So%ne\)!.+kt]^yv((7WJqr@l;s  dcl|>>B_ƅ )UЄ-TKh i>&9CBߌ=P>it+?]W |o%nvk~z]QچcxԐ,(V'# :Nj(:4eօ~Ӟ,!9vA2ձ7U77Ma^ߏc `PL>~JCD+y `Ŕ͓cyT"9|qzPk:EJtwD`ـs耛\Q ΀"սp S@q!Ý1=*]Sy:Ν)r,̺Gc(=0CM9D7|;C5q,i\ P#C HjgY*wy+˝\=KvީkMQHމ~"aˡǡrHQ.&±yu+ N NcL;c>D1C7|b E7|3S.]R0^Gd-(ᗨ/Br(74ԷURNWm.p6Z$%ha tP8Jbњ_W(}8u1dǦ>njpk*}~wћ1dj !)vda};X爟*J|] ^1 =:D7|6[ye޸Hy6ΔcJ& 8cKNkߙJ ]ՈjΝg*MՇ (wj*%ゐh+Ƚ3W:{NCŖWV׹Gc:r宽8vћU}JvXMXU7,g7Uq Îb. =:4+lKjݸQ]i&/4p a1+\%6 ~#ex 8rp $w,1bhUCd.ٲ17Qư,C:7 <Cҏ7)C^܎; :J$#yCisl!! [2UJ 1G$-75uL*cnݚ(cqL:Y3T;4O-5:;R1\?rtoc ![9d򊨯=ZM݂ oa,4 F 3c}UY`PTLF`!֋n Le 40|@ ̼h%|[cAy571n{CRORcki>x'ȱ&&/=h[^48Q.̤cv;"ˁk3yrkQucM_Tq%ު J W:f Μ̐j2ɽEn )&-OVJy0B|?YT2arcp0U[ yH:bXVn_JÈ:vDXvg~Lxe~6+VtU?ZX,d}@ `$،:<9dUT'@SšEZ5+ -XdÒRۡ|$|ŒiZ}Z¤+[hv}rB/>4rӺ"KVP y~♒CıHE86cPLCg_ 1 Vѭ دv+$VjHt]$WDd&6M.[@.0r ;P`x&T:;Q$=8͎Y)w,8 ۳1(fAD AVc*0IŔ:C͌Ns\j@ 2 `/$DEmcdEY.B\|!P{M@p@I1`%H{a#+fnǼ;N>:Bql.:]g`Q]86t (`3>諗oz{a}|Qc֍fJ@ҁK@*H҈ ޒ eq.ibgvXcd+#q)qI:f}3:>9ã,qbwۓ-reje#ٙ#eL9v7L#cϥl3q,*8AQBȡDPH- R8clY]q7 ؕѱl%nj>ݲ05FtCـ.Xfa! w? WW//|E:'c@'vi:Aj X6c),y.Un9_cH}zk 7aލ}h{Ʊ#ϟ={~ޱ+Cmc,ǖ՞XhqlE,{$c#j;1Ʊ1cwo?z}OGGFohocjٛML<\ߏ}f9tv,l;σMn_1Go|)١X#cl2yo~UqOͳ2}yk,iTuE86sFqs7%_W2q'te Ec]vz8=v-o}̵#;h Sa+R>icG,d(kJ9pa^qf96; fY:XKu<;38R <(}ǘ阑7.%mOt*u=Mf9M{cy/q!MsIiȷ`ak[,1$5-_qJ?6'iݺ#RRR@%Z I|UiI)/g Iz*92?84' : zaLms FUcTG㍫_lKHT83s<c@W5X %vs@PbPY";אR%R(!96G`?# ı`[e&1+E/xօx^<1"Cg"^Mnb%Jx@t-"ǒZb 3kThn6Nx=lF@݌%c3 xڦdRT)v`$e04Gz5ckA{^+ؖʼn%gIbM>BwT%5 ,/ M' tJDwC 8SQtL8Æ +V80-S1^F':k ߃7k"R4( G`Z}-6*ICza:FH :a΂ ch*m 9DyPCM6ӌq,}J dyN0nX}iդء%KXC$YugX ƱB!]\c8~1FYɤ(+21qрoiF@ v1.E.ͭ !\Gt.PfӌرBz86cqv8FU1$ -71Q[j ZjnIJ{j.^P<( g`Ȃ)]/_zvsKUIM|v>4psv9dL{fW,5F>Ϳ~fc+Zcki XU%"6ǔ fqLa! @;X!bńMk/<ÜQDž6KxŪOGaY`1ieR0Z-л׊ +0h r燿t۰k@:ԀMfQkc1vw& l,slWl+I[8Ւvnÿ~w%u񲴢ؒ}iѨ}ͥPjӇs{[$W:[~gB/;y"D( g4NyԾXa$3q,W^H{ۂ lAI0Qg9b͓';t^m]ћ'6ZL52t׼?pDx"`9Ɩ±\7w ߑc1nULkmD}lƧjO\kFM{O817IYLӉ}p fs4}}]/-Z0F陏}(cCGNJ$)៳  DH&5;yI-rR@YoT={I_\DҎ8{N壘L{0ޛ7{{֬W_ݸsDS$(dP y$!y%2g}$W֯Ż+?:/?_cW췇ǖǺ=ty=R ,Kc+̱::i}"%fi% t2MAx~>ǀ!柶ooN(T}h$A]1]b8}Lx-j~+5L]?1jOjjߥ9)פV.mmlx:nlu|nȸЖO8.^hX/X_4'^ t\dOo7o}A޺} wݽfJ5O߭b[M NƖyKL,Xă˖K;[6,7w5 R3E23֬6r W")Q $H;K8 *U^t H0-#00c$(XUAi=)2=󺁐 lf(bA?t"ke6w1\{3#󷌌Neo˥;-UVN<)V8"scg H귾8ݖ_/hB}hWMJ΋%z s !yP3ߏ=e˖/"2e!5#س`t9H}gvf= '?=s\5 t+X/̺Ђ֙8vpZhBYfLjf|D DNj QL_9,mp:ڜ6pݎ-##=B[>:.X,cVckNM[wwɰDc1bgH2 ??>Enw{ri_nѻSTWՠ;fvt;wns>w4ɤgOd@c4 K8EOxW3r8yW}]{-ob^>|iORG8gŲ=t&rD$MK;!qݷ_{vdhg7rr;^ז;8DƱHaO1cƿ!I-l[s'A!zǾid[njIߤqp#zx#YD@IՀtM IX888'I& Z[UL͂Z:)WԎ8u￾!RU mw}[hش2>ћoѱא\Dsձ0uD93laئoZg"om^tծԦP$01IEzOEXmcréT:ɍg+T\6Ws kϤovtyKΏ~͈/9 g%2WmB#y݆9 A:"6v,̈+ul;ofAT3x8\ pRڱNNi\&d̕X"cuAܱ8XVF,_NCAe♹z1%(N2/'ÜFBd/ Ap&.+b:˜J{ ATyW<C3 V^ʄv-L>2/6PLA.>c@MvNSodEpYލ+p5Fxϔi"Pj+ ""v6;^p$rN՛9V^幫sjBx&q;>wlGi8ֱo"plHXorucu2=ܔ_g~#O,!D$‹Y7x0;v]r'%2Ḋ% ;`:%#QF$w8(2^^\j؅p[.vMh{<*HgB<8F6FR"=]Xavp{,߅{13cDzbJbXɑ]'McL).Nj4#5BୢW!~\p [Z]c.e!l I ç:~:(t #Ad)C)a VzkDE>^7> Td }0D"?+-cg´/r iu_t+pbl LM%>1/k(1#cE1%DH1vHkcJETZOF";#{ac\6U]AIy&T}rfo%c@Z ){AFrp9]%+ T(E.@<@TwJo𪜀^H6 6rEX]~pc`'z0GJrg1E2 ~}C?Դ&h?/VRKlW#AU*ڐr- B99f<"Zl18%5T8 je@З_li +Q-X+P9y8_NN~<,4ñK5t y玫}qK$ ɐ}(-Ԥxdp*wfLZ5Bono9H?uƊY'uL^T\#dMTT094'ʫ]w4t\6o߿2>e MZGށҌ/֑#]Oc-;6Wᾑg8=X6"X4͡ 1iƱi/KT"GAչ~kq Υrg'd$LB^>y.}Hp//cjoJ0yMw 9!vohmhB9\mE/lCm悶ӶP㷧ze`-_1پ?s#m̄aY5c@3L3 SiXv+e7Ƌ|9aҤ璋mH/*n}tz`.*AGa8)nϭD F\Vee$Ex#A1Ceϊr#/ϻ*=KٖM{,TPyW9\ʙ2WJth{[eqp,^snHL|UXuc'\?>wAbEWu`Xio4P")U/: n YZ゙:0$$~i:-HնyTzȯ.~RtxÂ.>a˳婲HU᪂wX~o/Nh {+\5/Ljcɏ3=[B`eIR\jFDWoZݸAcc% 7wu! [׊X4IꎰO^E&1p k[,<(ψJ=X\'z.׺ .k?(:򩪂jĬ) .?$ߑ+uԞ %FO-E2$>\dcm99Eʡ 6gxh% 珟pY+<:DkǑMJctl qLBfyth9N5l=%f<@E<&\:?7. ,aCY@(IDT#26&oWQg3+cv,'5դ=a5t dAL(jI,Pn=x/ u l̊ rHu5[AM;It4 -TF}Lu8vXUGbr  tޖ1c{P`< w H$aevĖ 91 %ۤ'9 pI*a BZUHQz FNLrpٱB$2x6{:XgWkq,Ijftѝe9+'JZ_-lEϙG 똳Y ڴc8NY||žfXyIy/ehQkߘ^bAD`I‚Nl[XmgC*0ұ:FzٝvкhvlьG$ +gqy3+3 C̣'$+d9|Uzf2O12 ɀbYc )o;ِp1r,zJϐk:yVb05][4f.cLL4bN-L8F&X"BӐnh<]|M[yc7:uX c91xJP:~LΚ+يaB2XO祹AS)F;X ːf,fٲ:?)q<ez h:a"p4_8]uL,K(!Xs&(5f;]>s#w-wG.Ʊ`&ƕ8Ca=[b%gɌ_t6pl 81GYXVhwƫOGΉuuڄۣc`KK1O)S>պݵ1[ :5)6.ԌWDZݍ"E7BgXLe*{'HGNf$Pر<=Gþq" cq졼][]Z㧮Dw7N%b㵀5+ t(þr]tހM(D~^ܣbCR1zщ-3K(giXCz^QS'ڐ{Μbq»)+a+sEOYP.ZW$h\fܠTEiEXOӥ˖LzM/5u\תa]ks (0L\`8XJJ@ؘ24oH<=Dz>Hv]@fT> _\ǸfUc5D֤"&UHDu[+.@fǶaac9s2GX1r@!M,cL1r ǘcA*/SXhXw Řd8qLq^ܼR3rג8hf{:DC[0SQ[TǙ?4x ib1>: > qΩpA=cKbcNKjҎ-cmkcNı#ɪ1HF[c\umɂbp*;VM9^L4)=Dqe KbcvfYvla "t, Q6ղsL5 02yˉ8QP\x2fIpbtUQsPV0x(s__C>=Ljѧߥzl fX-c;v`!,cde 9-c<1P°Uā@'FݖOЃMuJ,8h3s!+~Yٞ/ 8Ow֋cGǮc}<7;;;WcŹA=_Hb3cM ٱ#=Әhi McܿkIxbtlb6 #*@ uӇWy.t?yҊٗM/g+/5Ƕ_3wxn_گwűZ=8|ugӀbڢ9V \ZTculK[p}; Qc愍cO򻂩\Ǩp n}D'sgjf=;5wo?W?3sAj8F<*ȱy#i(TͺxPEc5O-OL!9sN/kR|\qw+iqq'1ZǶԴ^c1]zfS±VVdEre>DŽi՘k$Szeǒ39U.(4cL׋., .9ZjKcξ({E߱K3)XX!9.wlYx6r 2uX@o ܊ض0k9,zQK\o}r)˗ώ>nsNis,dgXr T=v,}bйBc';?;dF:o1/f%8N[{bcv5hgcVs:oK8 ~KDZ;&`-cGpҎ:9KHc>$=ǢYm떖cK6oJc;&1(gݱXց] 0 uWնn[:57V[>unf-|6WKɎiW-tޖqlC1;>Y"tcV)T?Gqǐqo7+9%y;|ж,4ʣ"k=9;~cv<$K&{vlۆXƞ:|& Ў`̼"8;t^Gcv-`߀&[ӎ-cSB c |!V )kb^y-o;:ֱ:,![XCnoNt6,X EXZ>sy}Rj1[ ͢v- D@Ҏi>Ʊ70`7&1 52h~_xt@k4ѩ cJ?:aXV.6Ym}á L +E]U}*] 6ٴe;!DGJ*6=h+`7׋QL[c>׍]YKsoq~;S$3l+Ojr%1(W@5$Cik(C%tfHf1Z^Zo~ղZU2nw_~&]q4_8]uL,9vwYsE@^fAI>ZۇJ*ZԍRSY#,B< ElL)ѱ C[}Ʊ"uՐ71q^Qly *cGX_%%%̯/>ȧdniٴi&G]g]@.49ey:ֶ:T"_$I'&6ǜu JUKw8ֳb9AyzFC in!1Gc Vrt߼uSL8RnUȓU~#j6i, '"N?(1s\+Cl2OϬG"s^9֤P3}ݍ"E؋{p^1097hw,0tH}X +Ej3䅙{M5g-Rung|61SBGǨPS'g6~(FcҬөVH*B/=rk֥eAcߧc Ŏ1J O-c,@M?[b#.oX:'pucʰ#CJ`hpbt unϓyn˂sL?9Un*upA1I IJ?l&_ƩsJIN8RslrP5iOHV"'X'$ HY2<X=c{Ȇp6[U%Wgnʊa3 ڮbvU,4f|±ձ){(d(cG~ɲJW??tcJRh̠z_.aP|kK[0J\K [JÓ8$dhbtTԗa,:D'-hM\ NiDXhD#c4!TA醒l'\7qB3Z2HIz%gRcdwAMe'%z"bU<`5^Ӌ=LlE+D~ 8^Q;vhuڙ#ux4s^Ƒ:q<_>ﳛ@d~ w}yRzC}1]:hM. lS9-vP!\ޓ$=2Uؿێ9x5pzGcY5\6l-dJDUxjQ&h2XʿO\?*&OG֪XE7 yРtX! hJN`1zeg[aб;Z 8'%K >R'&GB[~smҜ?m8&/ u*Ŭj֤~̭8 %c-6KciY`v0',ێ-Jc>cK#zlcVe[F8̵lQRgbˎq>f@(e6"ձ4)8fLO;fH:A<%r[8|̊bB,rA'W u %eI1C 8ẉc/ Acr3XŬ"`/ .#TX !1$gI8Ɔęc~?6:Mɣ|-]Z܌ ui8`h7gc7ǢeHfE<4 Ǣޑ!J;CnO+P330"藠NW|Gv7QS/u}1% M l#&@;xh94X$ ǐ(NֆRz.HvLtG!ԩ_='R6oͱmJk=h;'ccwƽ_+_n={g[2|1N1ޱs7zΝ_nSJ}vgM"+BTTW队䏡c~Y7dǟ8:&5]Sho:=$:v{7ͣC5w~[Oy6Ov@ǰ*k41>4wuہ+wQ><ɭJ1Z\ZVǬj^F͒Xu=ێW_oUǪnnUɎԱ? x-yܖ5@( RQǮ߻~@UՁ_9q$t,4ll솵)ID?~{Rv`cX͛]s%#yccf#q:c2?ܱ;I;1p!eO TJ/Ryr/0coa>v5Pt?^Y;Y>Liձч7G:nQ뱍xűj5w>} ؎gr=o h?Ƙ:&jv?fjN͞xܷc8̫`R]RuC=bO`灎혉ciiuJ'~8x\fSuPhIXswGw:$6d 8P\AHE14L_=sG_RRc t۠KTߤ$-|c.珍k}w ͏\Cf?f#ر7DmcHñUlu Sg ý40tv"??x%M o ЧVq`u0^i(83jmhؼX, kz:*;}y,uN?ƀI i{ cn »_l8=Ht%>Ցs#y 3 H +e|`!P0X& Cazx握cO/w7]m}uk_h)_ukkdD9 0/y:OԱaa 5g/90֭ 8_g&_]Fvln0cbdlǚ+K {>g e{N.W *}1 !GV_#_zd!^喱CuƮʎ &LpK$ydQs:\SPᇎE'/:e%JpGac虰Z_O;_N_5Aƒ/<_X+HֹcpFo11 '/V?C5+_,.6i`鉰֒&RQ8:D4y(r4<* +O b[1eB| bȿT 0KU[&:Vijm-JO7U} jDɜ1O4qvRuƩfw>NI&Gt1F.;kYHäܛYIrg,O/ճj8㏃ G^54}OP9Nw"ȊU:-Zmz5$FD! (68!&^Ak1?Zw$A6M1HvvֿV0w뺺7wRXvd`iiIIM̂Aֱ켌U3lz髕_]bY_ÕabE=,1K4Q!wc/rXM1h$A&/3ŀ tl옛avvgdMܱ>uJGUEh>2agklԖ)#"?3L &87~OK# Oä,6d 1d,(8%h{ٮSб Dc1`VEU[\Ɣc [aJLG]L 2QfTRsЁo @@Q珎aҤ}l5 z-um-jú ^kE#[|+ e,wVr"SS3417H}nQQ}?:Mc, Kdp#Y4j7A: dJX\jyq,''$~᫉;)o޿`nssSi1fs ec }C|_|;p}Kb^Aղܚ);~ydg\Ν9/QC #_Pd%E~#m qt1%9減]$ddɼ ۽zN.'L|N {C\*4.l9ӋҤ OIƛke1G7bZ^Ûx,9&E9]:! gH Y 处eMD(\n4.Ozr0cc~Um[/oUuU=%d 2,\.yIW ",^,fG3VkVU0,PZsIe8|4؅&0Ƅ y(jsb#c,Bcdv YV.%ͼ Xky9ͽmaL0X$ *ca݃k>{PXQ^mك*1^y6Ô+1VtmJ{؜_ OrS .,1V涜=oqq5yUO%m}xs{_yE+ts4,lv^9ϿV]fK9r'%c;Kz$0`sHzOnQ3σ.,1Ve2Y¢'[_?"_5:`٘1GrQXv1O!ƲXc"򯳒BuȻ0&xC9u(،I![g5bm鴅c1UN``O -,4%djD,E,L,wcc11-^ qYU #ida8g4XWv&lKҟv~}YZDksݺb$7_[8y2~a농Ou(h)PQl$flVRcl*^؂!`Q+DӄTv/<1?z=3vw![Ht-cwX0ƴevRYx5k5.i0Vb:c~ Q; I j13&"Jl@`[C1e; ]0 0F.cRGᗸK,6^U{,B*cv[iԘVxcTX]+B 4ls ~?><˜P|%YPjk 3K ـ b8PㄵZbZXTMu*IsvH5*\"YRŮP"c1J'♊%cP/y7g,T@ƎW?sY{A˓?L^&. 1؁$D2D}֯HqLA~ 1VG(QGGtr HE2Z&cE2"lƵ3&nAaY;-WW^ty?>:|ãqhJqL1ac#lJ^y_" 3ZMa슬C y I1 D ?W_?_&8gF#cCk9KmŘښXjw\Kt?9dE\_hIvR+ P#wQ@XHo2fwb1(s",dR4Ɩ|X nrxRh:Jj "YUh]m8PK+ Dqm=~vYC q5!dux%Tg˫F7c)Ѕ@7D=u 2Ƽ1Zݱ;;Q5Dg޽X[d+5 nNuwYA;\VɫxUX>?/v⚪2瘭W`zއλ펞! $Bu9xsy.a !P2}B\%1IrIˈ1m:ӍH87QpaR Q>^ /~ \K`ڊH8F#I̲.'n]xm9p1d 1s0{ \o1<}c~A.UoBVuZم㞒gJ4Vlho^ƨ8ʪ#2v^T"'^Tuq 6tƎvvt{kud(y1zkqV4Zܬ(F/qݍr)pwtc{ G[\o_hV7ЩGw /}e0حU*zƾXem[ P@" [їw w0Wu^*c0&d|cҵ`b)4sh?e)77yf #od`U7IQT]p1u>"cBD09czHU3zhׂTʑ1Rl9Ępb\XصacidyPC)9)T˳gB-T<>u9n/!o)GǑiewc;4˪v4IՎIc c|=mRg,A{4t}7ӃY ׯO`gO}87Sql`>Ͱ38xzxaK^"WئZvX*ߗw1{ڑZ8c0WLWML^^o^]#ԸOv/&~[@yd9م-/ ewc;nL0ߗ}J_'P_hGj}Ǝwc_[2-Z/mKy3ib,OQ3t_=L+ӁANy36u q?>owZ~*~E a̘&͙M6c|}1:5xEi->ci&O瘭W7kgk}jbz6/.L0$=v۟P ~7+ϟ1:cm:OB% lJ^>[cLR6Gw}gW100p<:w M{<]x$+^I1/qm8:Lo->c,c8Zy'h(#gM.CEM}}C!+&W*<ߖ)o*1+c>꣣G?:u`#26)5`xޔ7E>,G.V4NtGχUKQ{79,~mٔׯO|u⫯[}-涔+2&c(LD}KP,:0#V$y* c+N4|҆JUߘP'oϛԧ!rwS~S?Ac% / ^=YR_52Yl`)0;Ͽ.ঢ়S4^FWW $}dHc۠LƠ$&5Y~@ӝ4Ͽ*wE=!/Z^6||1v?m+d%v1qF7͹[e}J/78c< )e"FoN;Y8|[+Nai+5ctc&1q,=ĬEy8_Q0cqR|JؗC3cҷXxɭ0f.;۔>we, ˱ ݘ۠=7Y,YwޏsfcB䗱'K풺bWV9B:Ie|ܖu ڬ9 ;cM,ϰ?3~Néiś?dn~crRW!r~_y4gƚҿ 0q(v0:w'B8180ͽNiwSw"Cg{bjaFcM3a]ڐhAU&wؽVɓ _o =P x3ؗ#qo/M|I8)#{^N̾ĉٞs1yyrh<1ϖ |l1}}Ƙ-CUWs\w*ziX"ZMnTgZrFz9stXS: 1_Qra˓MMY&cLF$L:L|e|Dg{b Ϧ]@}˘-`AHaRS{j 4IzlĀRG(H!MNP8)w3庌 ~"ēGGoIg{bje3%y>OƈUFRY~T:ƴ3&iq%R!?Fj+Iky~i'Ki=\L^8Ƴc1VhSPHhiFT<$IϘE|Qó ֱc|6unAxbfdJg,~MǺD:d5gs :lO\L^1>o[ƴ ?Q#(pFVѣ#:A9J"]-1"ƒΘZh޳b1p m&?%B@~1i|n.f~EMPɹ1V+k@#1X3` j\V&jȣ` 8231Fgl)1~Nر̶6aJql}s?+:1Ntzj$uP#~W )MV,&=bFa!m*n4-Zdu h!-ɲLc=W'J}Wz :<x˫F7c::݀bƞ:q cL@FUDF3DG-VM)x4ScYwM[bc1y:;zDD2`@S 1ϱ^Og-@7+Rz?օcŢXX'+10*-O"SOx1"C5fr; X2QV닮cMc-1ֈb01D(4V=FmX vƾ:]]]fs}6[_.6(*dXf$2)`!FQ;lr'{ܻwsSJ9aݻ7< &_LkER)ĩc +5h+P 5m)xӞ |1LGJgzjSe@\j3ܖ4u/<ש#D6^r&njXhIMEb\Q@fba^<׷q]*UpRuj5UKA\. #^U1ތ`8qnb%~dXJJ-&ckqAF9,zIK6bfY/5fs2!悭 ?[_1_UKwRẈ//mJ,yC!Xq+MhI,iVJU^mGz4&&}˲BJ(J*֩*Ҿ(Fm_WpUi޼̏vl80_%̙sr?=3y3,ƘhXNk`Ttz{Ƕ^2*i . u;V޽d`,( q^L9zSo6brtox0ԈFF cc~0`^ϮXEh6楒ٶLMP3ƾkV6)TL>@6:c:t M4V-io_.t5E^ŋ{E k=a9t"F ֕]ĕ{ 75@p' a%OЕ0E}t0/^9ei>RIG^9){”uV$ǯ7&'o|ZA: cxiZ cu˘0]XzpWKx „|LbLn_cgtƙ)U: D"鬒x ۍ@Fh :A0cRTcg奥++m5/a/Хy}gcg}ŅOr^~]:Acnl3`O+2k[Cnk]O0\ +:pu+ԉI:a}Ea,0E c T| uƜKkoeq##o,tp疒i?Ilt8! { *1u¬~ӫ~%q5[):׷#u0l^nV1ByY4o,&84b c.amrɡ& fKgWMڴgN*,2&gx`­@ 2um%$('vqP ̘a (@"!Sce bE|s4/wߙe/,.-./3/5Œc+@|c[dKGsc/9tO12U6zÀ1iRD Z[q7hՌ0u gP3Ҡvh˖J/D9p+.^ƼTfۗ&ձ1uje1dKiKd쇑b6DZK3U6ـ<ӌ VD~"'`}qlҵ{.a ג؊mSTZvRG9LcaþTF#<K!͑C1S0B#YXJ>y,q]59jgNycԄp+f!ѮGÕ3cXDDgdKH3_dB˘//7B7cc.*9sdKz¼.HU!9ΰЋ#5: U6zÀx}G;M! G\Sˬtr͉WxvHoWV-o'1l{I7>0vߤK:#+cOi)1F .Ϯ<՛T䙻W=Wv%Wxnor_(de {1Z^X>Y9L۟زJO ؟ω1{>cG:ea.u'1Omm v_(|`ks\a _Ws 17cGDtbc 1߽۔Sb#z#i 8 cďq|6_VtbϚo۴7elc[rp+zGny#GyJu= +s֟U~v1Q=ƼϤ1YScx֣g// >c)y[tr䞩)ckUOmBÑj*[uBnRU?%c|4!vxRJ=SPLZ|C1ԣ41V̲?/)uƄy9/rK̴19`A%U}{MHLR׻W,n̝ٞ?p^*nDKy1eے#(=3[z1T^.EzKVB^*yJ~;3\03%#8r잙:q2ciytr)cD^gR=/t>c&c?3UdL䍤1c5i"1٣K^yHw:WyX&M11eo˯A"(=SW|odWOmBHLWRz޽bQˁTN3fw^*3f>==c^K zd^*=/ZOylp^HL1wTW/{)~RY0c]4oYɑcy{kټTR#!11 }|l6~^*!K1VjV}\dmTc] jpi1'\92xmTv2:Tclcl)u1f(1f?cb5?Z_b _@^!*;co?O?:l1(?1ΘWyy؆WƆ/w7l|.jmj5(\*?=z(<~@t֭xq1XϾpxcW禠q˝sn{;tɼ*gnat=y|:cW:c^1꽢)YdBlqEL)Gg&:3y?his#>3XLQlY\#:3 6u\cl-:"/hLSf}Xb,Fgg 1"Vqc,(DSȬ`K.a*TMڎq10}k:7 54) 8Y}geL >C]$cc90F$I[\r#:ti;V}+q-  Mt*Cݴ_ BECˣӥJPgZehYW[cEdƠe|Ӥz/b~%kAԵE1Rd-{"т"Z<>2lx>EG?8@whދ_+۩?xf %ekc̝H(^15h1kxX vкW4Em'1в7b?c [zR%>_X 6OگbX&ȝ9>cΣ=^sbjHa =591(c_*1sg{񼢱KZ!Ea4s}g0㋂>8yE^k#ܽ1,81FcCPnMJ&lq:$^HnM`_eKml괺0_^mҚBtO96"zGXm=r?=mb-U[k┪k: uFbm2+*\2]CUc:MB:U<ƊW'ԍETQbm2 R)hpy4c7y eTz1O+^?16XƠk̘Yc:MB:U`<ƊWnO~M䒙5R9ӌ-ݮSbƟ1Vr[cm2q,Ceqb:9v[S:Uz6?cdJc.ylN3vPvNռ :O+b?y26M>Fpinnש׳A'icE,p9LM?b̋tPnS ƼMyyؖ&ȑTJ!R)iR)c.T]XK˱>{RuAy|{Z=Xm==/j8,ԻwooּTR#U`D4 T߳&^R7vz$cy$)w>;Rq#XҞ}zZ#zw~idWYB$",/B+0L-kU~J+^Fl6~l/Y+ll+Y V#'lDP7yTi/g.3\\cg`590c3['/ Ka9/gj38z#GN l2]yiL+Qe+/@c>iK^*CEjjpbFΈNk 1gDcz bxshnm 3+RbIx'Ә5v-OU MťwBڑ9ʵT]=_~?ӥf^*k1k$b6|t ga1i$\|UV#1qEedm8b؅3YcˉD,ċGX,đ쓿ktv䥊9쓥Q7&{ߨ8Yi D6#K*~"J"XpEedm=ݎTQsUR'XcvrowNc 11i$YaQY+Z/$k+d"Ә5\~ŜH! zy8 4RݿtR8+W?yDREI.Jq=)v3rsŸ?*@bB͏w /}Lu 䥪$*jc3?4_^vIV9WH]ޓ]3yf2 h,'Ҥ?,nw"c䥪$UŕY o[,$lq_e;<+7Di Ncc4>=ZCFG]tjfk?p;0\6BƈGM5VJ,4;Q0cNAhxTIc#aFz.#ri՜_qQ&]BA5Qcƃ#ψl jT5F5A"-1C[D4f|hxƌmRmH"-/iyx>=6/qK5b3ED[ED[<>1EXЂ"9Lc 014`h -Lc 014`h -Lc 014`h46\9T Hɜӄ%Vѭh &֖zTg^kKصPD:MqO6lKEH}TFYw^;#N@LS 49oi[䴝Oɺ:G Ffy=%ϩ1x/4} Kc{ FfyuHc"Y.x+Xw7|C&aeڅ0~xB' F@{C 4~,0HN|g3d3ճi#ڈ @2S{tu=HsRFvެϭͧ`nى3kD6of:n]~XkW &蕚AٌᛋbFL@! }SqPxWNb>Ac zC}؃U2aƽL0R|..;!Է10ACPCPY՘x2۱s>I /2}+'bad3X3gܰ. @6#kL|ڢ1("I >L3p?[A)TNE 1otAL6.nLYci7̫t=6(̸S` 6 cYn ʏ—> COX !>(d3 x~CUjŚ`t6? " lrљr;4ߝ2r9'~"Wb$f4 &p5i_{H u]z Vj &qzu:2휗$ia'KäfiXVtw2x[LN0 lR./ ad3y kL邘d3QMc&}~ymU>_Lrܴ%AMŢGh~uarkvćn]l/6#USNRg_'NRWWNZjk$1 KBm{$(B%.ނ ȒqCS  yJ*fekD\2/mihLhƴhhLhƴhhLhƴhhLV6ִhƶƸјiiLƸјiiLƸјiјiјiјiјiјiјiјiјּ{4?6oQVcG6h< 0NٍGp~1ۓ72\=quL{tQXA8P71.u5@-h Т1@-h Т1@-h,grrrrrrr-h Т1@-h Т1@-h J5v0i`Zǵet5oc/.ZVgܽ ;k4Eqi2meQ 0pغh1:7-Mfyk.`&ZTgCp}}7n ժ={U]2X1gCVCı*?,7W\+cz(ȰkOLćOL6@P*n;F(oGs,dWPЫ!UtoKqͬRi}1I;⣶clZħ_h' `|Σӱ4Q\ <ⳗ.x :p?]ر.XCXt,@Ĥa_%:*XcI'>]uStU1_u5͢c t˱I'.λ`co^]$:[wx]}eǼW]Ɏ". s8 <=~|86'z vBǣkw> ! `RK6i=tnS)λ Adi;jcBǾ^َq\xtct12C /3tAdž;F1@+/_#_;If1pX|UJcO鱎3M:FzcV)Mty:ftD=f]+F#8;=D 3]J^+"xu.ɇX#ӱh٥4cFcK@ aӦc:7 8v @)M1(1gN͂X|%6K }E<8v,ogc+gҕұAAGܻcPJswұ5sܻώ%G}?!t,ш4 X^c<1 :XwA(:3NǬR}Eb>("_yce:_f_yce:_f_yceW.ϺTt sERy=1j WV+&oٟ >2MbWXoūׂMclrcޑdٜ(y:(x(xW^_fW^c|兎gZU1FuA|ƭcctQ11QǴA#Lg1i9h1*q[NJU$bY0zCX7R)flldt:eGdM3`̼wh:04D!hwJ$28fVA}?f37)W":0n*'wOH;_ZHcѱa놣=68?Hc 1Xu?\ZHf11T́cYta<\+~ռhZqc5k`)bc\XljJ<{u=yÀ8:qF x?8^ j˱fV͘WJa`;4:0nkϠ |^rL?.VyE>Y*to`B +/t1B +/t1B +/_f~'FyN0['N0Y'8NdQt ^+J񅁈K'Yt.=λ`бޱ;6(/nK@NSCSp54T)) tPUll62c)TgEUvm`ٙ7&&kXU2~D^p tedǖ8z18l$uy|z18Y˓wQQ$Xx# &EV#Q 1Xa3O+̟cw,0~q͂ {|Wt޽NN|ZQIqLL,09vڂca3Ocs1:dI^yTQDZ yNyv%'˱;KKKfA DN$cn`ٱf@`ٱqӧcW,aa+v:HҘw{^@c=Pa:ywWmW& oG^!8 +} ,;3GV]izBBTxKO<Ӄvސ]Dl9V6uH#} D4cO]8:rSٱ{#V}˂oT[GAqhgq~R]e9vp #dǞ~9Ouyp }LBv,6+1]e^*1&Sd8SC؎}51]ecJ|FWO-±Qz}Gy-ƹZߨHl\W03{b(kh)<iZ7({ē_T}(kx):8cڑ{8 iӢs_SRʎTP @-p 1P @-p 1P;x8x"cO]`p |1dc.ح0⤝mi A@a?Yj"{p 0ɓQu1c:i咦Ռi;M;{^ǘ}n}Mwy"fUw=v5v8ڞ10vȎ5: fso*ڹDi/ ݓ4o<̓wk=кŠfM`J~YXWifd|yњb`^¸zvrtroM<4̟֘nmj̿zeYtQBģɽΑv6NYxxxgRHƹ߇e1Ňl{=l(PrmVmR){xa:Xu]|<΢Z}]io>.U `cQz@XyXt׮B.\ :\Ew"Ǣ@ -0]34ʠ),@S8?fpD]t¢+^xo3 MgoG=I\Cz\QGaWc5.c_S!M\qh}јE+Q1 EPaE-#O'@XsC`FuP#hU2f_{?#Gk2ˈB~(j]c0DPMJи w)'Y&&N(") Cu r.ulIWV[  ;f>g L7oqis䆠\na;-z34u FnȞ+};N/mi܅.g,j?84 &cQ%#G`%c?k$䣲8WT\P1Nb56ޣ(JU1N4\bOiR%CG P|0LB3Gū&#Fjf.iymStV]7-&^ኺ(]B#`mvϚhcc?|MF:CQ3FD|ĺ'H:Ax H"05FA-38@J(EJCZ m#7,lccT2c:j/]rnXF\PVZ9dw}Νpob`bӁj; bxssyI)gHf]5(jQtcf bƜE[_K뤫K$-9Vscs1~ k p> *,Z5@Q Y5:bki/E7T3PԕAgr%\mAT+Q tU01R[Ũ-~&Y)x 2=bVM{FRK͞衆Z?*G@U^iQr薣F.nGaTgTjHQF:u1\:OѻTrdNK)qw(g1\ϭ4\ʆlhO0apMELWC=T]=ݨvEը>=Qű꿾k P 7Ys}pģ3h!#A̼1HÿF')KP cE)C<+ݏ8 `R,Sm#] ;|PQZ ^p/C3q́`xph9M)̍X5f;4*U`RԂbPSte:'/|4ʃ"*M`5I%K:866 lw]Ui \Q`΢犌}uV1*/|ŋrJKRQfZM-CJ}+%_ŒX_/2hucel#}4#՛a7W>oF,>`Ev5.qt "JOP6JIpN$Io8)FR1+dP)&m$uRxsQ1\Jx >#`/)]}a\nbUKۏ +9ca]~89&&Ee$ZY,n@pmmﮆDgAb wvNX  o Hir7֓]PߝSY*R啚ue_!PjSP>u\~AFMcҢპm7OZyGQ`=~Ƀ:; wXb9~DNlGE][~ՎYZPTNu&mC&n@1h`J& McҢ 1-Pm6PNjV%l^koA`Àcƶ4Nf>tn,-h:]^) Z'~ j߇]:{(U3 6hE&c6 gpEKM7 zo?ck-ir^̅.eJ7 Z'V r$ۨݣ8fU3婙ǜf ձrQ*/|+فO&4A_lƀe Bpd@9ZRkUWvm(Ϸf 1 9[oZx+ThTƋD@Z'Pny_\Z@2MG #rIΰDw+1%Zwp?7ݏ9G1R};c[CMZVC|ڱ16vk:.c*lʘ1m>+;h:j٩[;N):Y!P4ԏt犚cZwksEsYjo>CuKz&'wv_P+ˁX߹b#c]a =LX9G4B1P[M q@(.ck B1P{@ ձ&@uB1 ôPJV祬d@~O](ۍlxg@[6e9;Ϟ&.eֳ^F[~LyQֳ+o`G '{'߂ݲ;x|@vcScَec3Ǟs{K?s}OIp€1Mbz{@{~iirdd[ym|Bb%_ˇxVxnC$ -%xpӉH s+96|ia~`7%c/|&/z!-n qa79ڼsE,1 Rdrj2{s{/aC0[aX8=75 RU3s ܢ;Fv(aSO^:{$J6d㪒9vtt6y4Oع/0㥼Ҥ7fdo3W$W pciS)N0I}|,Vq\1Iw/B!ӱ^9Tq<[QBx؁K?L慂x 6RЌFJIXUixx6ENS9$\7I~`"XE, 10075Mjy@X V umqq$Zy+"[Bxؿ_$u>+1Y2,_Ȅ,#3X3Mq̗sᙑəl_kOB q4|}}{X*qRE`/,I"B/!<5ojz璉I'?H~ݣ?f;'a?y?R#8f9&ưbv"*'2//Ife'=95߾]50,MΌ@iz& }ݣ?FX,z*55!Ƈ ۦ؏Kȱo-}0߱io29ǎ|駧N7s,2ھ p"1kb<ka$c1,╫W%;2c(l.X%"G{u11deeɱ2cFs`-9\u7|,}4|,cǨ_b'"p:k $F|gF֔1IېC$Zm[ x#বBxccN3<ho } HzK/N-?ӭ7ߺW5oz xLlXߦH||S1E/P9z޽;X{u]?` Z:fX/Fx0qLK (eK)ftQ܊٦SUpCvKKxy;Zwԉ1_qĎc!/nbs KH{ ~DSrl*WcOd9v *-—HSydz CxpQ@Pт8 3:j:*`uv'E *2(*hgQΌu{W^6_q?o:"t:ߧN_|($cgo}@__z0n?r+>C? }>@'MEN&N}"tO _l̓n+b\.9sϞ>[ _Z{{8b?ܪ,V%Je@mW±{|>z?dazpǾ}pŏj=jL _؃pM~p`\Xؿq+a iuY dcDFy3i>̻F8nA/#q+4=9yk u}cjjۯ]ycpj'c < [g=A9ݜ1H4::z=5}Tc?֫2ֿfۘNʲLj&G>OzpKtݚ999ws7/O;Ɯ;5uq/Ž&KZz\|xucWC;SkwC)Ke 2liv#6dte 6p߽IɩCW-v_b . [r7~$_Ѵ~t?'(51Q)Oje& x=]8v 1#0:O;v,wXR_h PprFXh2_}=~ۘP@@mlYWcC:H(>1E>ϊcKX$vmDsˍIy1AñZ–Ia3|$taMNܜhWH wΝ'Pg3jc 9ɸ܍_@~ocŖ|RYڷɲ%%nmܫo v= ejxغ Rglxx#3T|wLI2+\#|ap$kbVXwVd`?)MC`p 8lc(gob1bK}$oj9cv}iʮ2s,FHlMIpLe-U1±aqc&: -rbĈ9tetV[AKVתI1bs,FEslI1fձhfO-QEO4?1Ѷ>ѸF17Ѷ>ѸF17Ѷ>ѸF17Ѷ>ѸF17Ѷ>ѸF17Ѷ>ѸF17Ѷ>ѸF17Ѷ>ѸF17Ѷ>ѸF39gK}qpf=*{rTknoCG~JH?<+EA֓d}@#gCv3v} ݬ(@;C:g{_{ ?_[_|smޱ=xrWńJ|m P0d=2sLLrtsP DO"9$ұw%-Xȡm[u<^J$TmˆMDgEPWkT㱺ZMg"snrUauSLAFtQ x`{ybn5okW!OKoRCC"i“9!'JWE]:Eȕk&6~;3X:t`1/E@c:f-'LV+֠?CyT"(c"i]ZTT=LSs8#T:~Q `)X <&L;FZhKĪRڪvn*qj‹8ťz5Azyt2J Ay:9zt٠,#g*r%gHwɇB PL=@~Gbf??sGcɤ!@d% V 'aFD 0.XdӫArƏpa;,\tŰ\0H2DN`&[˖&67J;cPϛQX;ѦMPq,'tctz);pK?*{S3tEG56M',c4O}j2Rbg ji$R[W[mA LpʫC@2rCbL)hP[+jkkd䫇fl"֑A)jj?cuv~0KU$WVF# [J,7>>~c/^FT$zv):-;kFѴ/7bxl5|AǰտJ5ܟ+x>%]O673'u;@?RAA3?I d9,wY j`JF )7wYyPA49IQWntܝ\#t݁ cšc:xfDŰ3u 7ho:d߂&"{C(j-#/PGb Πj?jC+Ǩ;$Rӏ NvHK6U:[?.픚8A ZN8}3i (O$|SXo:ם;;2-5y;Ӊ2/tt\8Q[뉯H[~wP=D%27'+U<~S߽chNѕ6mK㗅rL0U 7dX/0-laac[I@4?zGIW;*OkI"a<GVYf;x\|Yrb-QM\yy;hd2FsXJض}ǟܨ+mTpYv3tl)LeggdGIiB^2ъu|"!቉ ~%Jy7L=q|@ٛZ&0 B[g34rU@wU"+uGPg8 U:XvY0DJu'\8<9y>~:^T#r+P5S P ,cH*biؽ{LslͦMas5."ՠ9zz0/'̶XZ<IiȒKtk\\JJTlt:.WOˍ!n;﨡u:,✷R&$GNٳ]t\-n;u0Qak{?R8Qƴ}(Μ(gV1C KcINV-s{苸$sǺV,9999AMgQq{U)DKx&t'$tҥc4`g$u's55, $+$';@ȴw;Ȧ--g´M  *ؤkJ/V1GqNucΒ9cvSe-8GItđ,oI4Dg%5I(V*`xWqo)r{u==rZ_%z8J?Y 1D i7+Z N+'z㱮-U^~\z/8]X\\W23u%%+L=)&: A4c^v J @=OXgP,EXff(ǘ[f7;"v1Jv͝co9 "oMg? x 9 -- J: LO'RaaqGz:/uv<[xlE_t:im%NoPhRju{ܗ?SÒ1$^1cdǕ5F@PwWԭ͇QU :#,ciQ,#4SiL%'-=47GsV@j^Bpₑ[%0`ʢEAzǶ($sͦ_l4m;[TLtmngS%K:6]OXTk䅶s?MKENЧ33R#gͳwزc{ CNziXp ސB?3#agIA# 7ۮ;ܲc'y[b^SL`H{u╶'FDO+%cG1unš±<;p@+#H5‰Te$t.׉ OKnwk/mm!BrQjpC^9x2X<ыyycńfitE5QK;1w[R8& 8-;|&F7ERPbUBZ:_ܬ*r8C$6 ?y)4HAObvnž)eZ2)sNVYFN ʎ=~wa}lqPأNyECڝG֍Df'^ouVj ÈH"Y6ۖž±<ٳt3JޅhPMu pdñs'Oi?T$҅CE/ ./ڱ}X?Yԩ^$\:_ɰ}ExTUaAAcHOMcCBrʽ)PhA8աİtl:4F(_Kا;oe mH16ΚʱTD2kP\S6fFA(kQ+n `pl99gClVmȦMH]q K=V\ze@(Ǡf @hr͹c4ˠ eb_p:II%kEwSKK(igHɞi[Xeėq̖jORm!SFlU ıpre,9A~VP 4ApVL NUr1cŌ?ii#{x0GXy ڒשyV+X $ظ@8Π(Gm6EjZy/ض:&\;t 阸0 @jܚٱ5ȾH{H;2ab bQXX ,S׃nsxlu趀mcm67c1G׎os9Ә ރTe9d5`h6x`+e+$8u߱|8v:/Ky)۳.ﳭHXS8+Em=?j غDl;ZonZk9+,Dz.Od'N\@.xB$A U*\֣O8Kquq,8-47 BıBrR46SbȋgPͲX 1 sXH^*ݟ Ix幮Ҏ(|(aFU\:J``5;e`5n+o ɘX%aFM>6~1F&!?G;c;#v/xq{$#u &" qF'aC:Sc TMDS(UR#ъכΈZ|R =F2U /#8{f9w|˳͆|g7ٍ+,5!%\E3<c| ;'/AcH,@Br xE,,(%R(΋!Sz؁ Kf@p7[2v ($X,<?!y$HIDZ-+vT]ǰ"! [bHdU;Q҅T*QRπ_PjO֦* W6l ^Hևo6uBj I0)cJ%;`޹%Q;,XӁ{^466o`W`žM *+aYzCjc;9>7냾tĠu9 KT-~zSX;( rߐ!$I1 bñD˖SDY(S}_dv8ceҎ]B7ëMuɾ}ƈ-cgiAKr|iõ@ U1?Cukp3B,5rp[#P P ̑, ʧ@<|S5z]uz϶:d0lWa r,6q?8&/<\dbss*U̗{QC6́}fL/Fj5^L^$p(yWjx%~,l: k+CkIʼnt1 [ HT ӈ:#@LI fmX"- 6-}EQ9uOՕځږKuٷ.է׈c|qnXea,S5r0Q.|70 ñ@Ɩ@xԿl H)( ?8p ;E%(/d0˦1]ЂdF붫 `3b%}Li)H MCTWò N T<:!o`&aD"- ;8Q.ӌe1 X.\#"U4Y ~ذ֝Z1:FЉjxYjw6gVZJ>\Rҟ[8I cvT: uU Dtu}0weE1鑔V1 *a7JftV_#6xx!vҔfRe|Rs).N'&Gg݆(poQ;!Y|R2cMkȱXVXjGv D!ɂߓ(?JMXj.vsep.\. HaI<OD},8vafKENU ą1$ x"NZW$myLRϯ 9vP =2:a꫆>:dӦ[̷cCqؖ[|˴'WlXgy}qԱxeVcu/_֍0o;\ME˻~gl>Xqem8h\瘵욙̝vU~1+ ;[]+KƟ>^\x?ysKXbCv?slfScZӕ|޽q,X|<vΏWX#&;0_ip闎_bűuu%ձl&gؓ'L+/|Yh+ıWG~Ųg.A؎ԭKfYq1ۮy:vM!̵z8Uz5PeX=%f=xs׎#ءuɼ1ml<1~B*^c{]R?VI DcrY}l qlfvcqƻfFʘ{f/( GcGc[۞%`,W211ıF<7qfp0eW3sb4<1Ut x^Ey$VMT{3X"fpm^lX7ɛbӧsb}Aed>2˕9dGCd2'JHKKJЬd||-ڛ#R0c #-v (Xix&m0^ҾpEie#,{ r~yjFmN@D;XqLxi \JP<2Y'L%zsB6V6Vc G `bÌ1%6N8"6C8c|c eo%cɯΗ_`~m][©k dz6)6s6gx16 `_rk[cwR^WR *?^:wSdzFg&vlqZH&pLRY U$nk chpxx_ñ;-lij3,A-;87ktx0ǥQ @/B3QM3̆ti%O\qC`D=%'zU<@Jv o;zU ΢a3`qڛO&YSjof#g{-IvlU3ʱC &Z1I9wws揋e}g/7=WҮ|s SVyznRJm,[m?VXrHoC񋁩-5|YSiR$o¿XrXa;iBРo߱C΃dPpzvt]_zzFFoKހ[mq+Q/;%ٱ%V{~y׋Լv$;8uc{FBŌA'>] wbǾYV߱eˬV(tN83+=7-+{-垓-nwIwdKzzNZSS-N햛-՟ͶzҌ(行(e' rt Yv%rixM%Ye];&$%dU4q2dk jW;v w;F{F8{Z>HŚ7Ū{|,d,YVdwHM;E˖$>f>vc`,u7|FBs{o>ῴ $"Qr m}.6vcS=e%DŽc$Y)$Y\+{3jCmz0-;[-@~~oG/ʙ7=9~RQIzٸV%" JE߭Ԧ<+"Ùy V,.2m4-fXDZv 2Z%m_dô 1*d-LYz)e.](ea֪6۱'gX1cd1dX=3Qn?Ѷ9ӹs=:8[t饛V+[rn?P'|@lCslS^/☿?Tv3▤'919g*~U0GAȂAnyvg1HƖ5e .z2I4l N{h3pS,ayS3e0H.X6{3~Y71~cŜ`wjmR?򸀇`9srܿkƍқm7nm!?^)2o.Xb15P>COw1ɱK$5JB#-2BݽFE[K^Q27Fr z~-pqM$(d CjQ162 g*C T'j'Q*E38&;e#]睾؎}Qw`ޱ˝uc)+V,:фiUQ poLhD]\dբEڥ Xcz5N4 -B0jy#@:A9Xc{;6E֘@?ׇSZR}} R$ ZjTA]qM֭|#B*u/;Y,-jծt E>̀! $SfuVc >#sͱk\w˴>eB]kχbo-k!y{u5ʬ>V_p-Sm@[W/yűKk"VH\LĶrEU%–p r!Wbk"E/i`U."TU1?qkY9c؍f1}Ż=<|SzOkVƟȱ @׮q PQ1.F'XaRG cM e7) eiH!F'A̍h `29R"ts,g3!~C H*B!c8۶pBR q-HO pB%1s'&ɠcSb=zP1ǒXKEX"V%E`*Uq3Ӿ41E~bXcr鮅#%~&]fVvsiǎ b:w[<'ve>odSS2v5̝Ǧ_CTM1R;6_&#/On1ŃMFL %ek?6%%%`'XҿerއcXXL;քu Tj&#'L5óbL%4!qX8̝gc/ 8PPP`xġ /M1\|c"ދmybo8W&I&X8$F)IBVԋWi^pz1RBF㵼^! KJ;8wMXRZF~<议uc::n`q7P;űOٱq:W!*MF ;Lût⿕5r 6!˞WZp).Ub2B'Tk[hsCɔ;McӣoGeq -JRt< qjrvaD<:7 1*(B0v8qr~8駍 k鄎9̃Zb@RxrPp3xk}LʻrHe1d]U 0gErРY C&i1^Ɵ)ٲp Kb喷$ࢹcǸޒ CUuX^W_5'ehDwCo%_~:sf_T%X97XqW/}.Ze RW_Rݜ"rfU\s"p {p!($$Q>iD*J_O"!ԤV⾑61oñ)/-W2{9>>nѧ|j-*\޽ mگNbɱOc$\Vݫ8'oUJF%@v듿~9уb5KO!9Z1IIޖX.VygT(>L 4iehFJdc)R 6&|8S[ pQ>fr̝61}7EqXqOgWXWz^Y2uϕ›g}yϓ'=k]kc\S/`+=ubafMN+H"zLxVpJdAΩ.G:&[rxqK,R>rE.F!!l0sl4$$o@X4Y*GJrQCb9"DXry|.-cO6mǂeWa^^_8~xa}1?Bac!Kaml:aq_Y)񴞚c^uKp,Uj|1r1H6~ _*7J=M#B>ZQ= mxg@Zz:R{6We+Bl$ ȨY j1ıL&FڐT*X1+/|Yh+ıWG~Ųg:>cpnmc7'XzDq*K+r!WK\s*6?m@;s6@X> 4e+scp4@VTJ՛r/DǚmU͐)q-8s|B9P -.rSȵ;A9& }c Q˱*3ZHۓJaU+cL+cz8Uz5PeX=i'hXA$+P@lжOu,QĽ{ )`ŎIH e|)3U\rB` *_{6N8rW2 Hϴl{B1cw^2G.{m@/4ُAJr[Gks|Û87QV2%2хcB Nv3lv1Uodm ccCcr)jp^B$f hmCsN=30D\ VsPdQLǨ@ώr]zwIv@+ IR(\yDu{|0`o<r- %E st>hw:BmΜ mhviGڟWˇaJ9' [cǖ%>f)ǷpZ<, GcGc[۞%`,☈i8PڧsI;;[#偀o44IJ9Qq{nZY PreG\|#(B8ʡyH/a$(h|$* 1c 1&#2%Őrs%@%)777bhp H˝٥(Eb!a菃^_ջ`̒0>| 4iɧ86wF 9U+C/WsIUhnrJ "Tc7q#ls\z UrHplUeCrie-8yR%c[M1W,2ВqMs`LkmOgG~I4WCkǽ^;Bd"Cͻ2T?/!X['"O0@.Nk}MqHyg=oX&zʥ(K* vnOA/GOQQ(jS8iLg.n $!/6lݵ͋]')fRQuu4g"Uӯ/?zE b#ro/K$u1d;|A4Ab r ,vƉ`deFJ¿c*x7`2dIW/_n4bltqHxJGvxF/l0H lj`*B1>Lסuʘ gdC4YvB7})wc:QHv6b."J7@-e;'fZ׊-wTT/XY/VX5j #̀ Tč[9CT GÐ\|a ;PumƱtl|3wd7##}utXXCĕ(z1>23ptݛ_p\ NtP׊n&HJIvb+*4~92c@832vgF_sjd!۰'49鴓\LU>LE4XG f%@p@[@ƱMemhFWN<5EDP7j"+N2xl۵6[eѱǗ/ѻc'R6Hsfz^Mu~ccZbiT< LknSR{/1(waOwU8v+c+f|GXZwˣ.<8ଊD17Om~86+ڧJ<bѶnڣba 3Cϣ}qGB(hPPJ@yxW[3i9+_ʛiNdPl186Piy(Ա[V%h}}~PBZcGgZԎ=@Z;@?&W bL bȱ9cN˂1`)@;@q}2c18T2Ԛ7Af&;68FQ=ǘc1)tcϑd4'1a\gK4s#V#ȏ_ ̯cD!irnjcJҐ-xlRc5 CJ#i&.cLc1V={vHqǒ/WcSiX59>Žys Y'X&הM>xW.!~K>WŬy9ɣޚwn/&fj5s\|[P+F5c '<3{F>~ҏ_}[rcX_NR"ۑ3昜_q@,%rrbƱ=X\ ;'c1x5mek 1aԚ:Q5{&]W2cŋ~3+nR"]ԎAk(FHlmmsУc[lճU4F1m!kcmjH#ǺuGc&*5w=k~ϔ›''n߽t+׸}o]3xS^)nB9]O b8+hHǞp_l<3P z"Ec /O6V鹊aDcn)}XjTELeDG3~1NjV`4 0h5{D_kmO8az}lwj R؍sQ|}x^~ ȷ{xuIO-0k{c됆ci oXޯ#ƈrćG<(&ű4wlayo<8%UT^'ќq$R:N(JGyUg^{ ?hXƱ~Ԋ[C-*hT. q1X:zgSι)tstkJa,Xa(wB҉s'.3E9U˯D+UˤUl+uFzkʷX\"ԃT1J=+Q=HZ 1,Ŧ혏k}ܱl\E-UPX>%[RqB"^*5G8VCtűcC<꼮SMCGNmy]Y#aH{=,LX1c?=J8W8tt,:b@%Q n $ !cǀQ c8֪U[6O9VEd4H%+4d9u1f0o>ebAȖ>kxyWg`%ǘ(.ᖾWj߾}xpo=Hv&VͪmZj;t5סX8?t1<Ē)yF7۞>ç6]h;1UVx;~h ғ5ŸnInbnj4^/[O=Wf@^FkbkBMrH+,,t5ݣqH"cB0]?z1{_717VkIM">oR c=WB?bk6=ǠX93rDlC2Urhc@KʼnTx6 - +rUeo~fIrb874`B[@oO¿ ~u+kMt#yBϛ fF3NZx4Fv7٦G+vcǤoX~KwFt*oT,8:QQ1ʎ:q DW9,IN8fբXVŽ!x?|9rs plz^y%ױWTd^oi+dpBc8fWzX.VvS٦X]ivmzzƦpŢH2p~"w-N r i%jT+i&?;sg'* )DwוsO`Zx\FQQ ebmd| KG KñR1e2 ܍AekdyNWY\.}M{8aLRr %sᯛcɤ"_ۖ'cNw('DjL?.w]}ɾ,t [x!dV CRo!SȜR1"I&hOcA V&yzjrTԀn |j,k?.`Eg샚8=NHWZ_Rb[˭VShKxBRF`ehfF-38Vtܿ3ǜRcG~HU$=9 ~.J[]= *'ґ"Gtɗ*Pѳb3ϟ'cQc*1\MZW|s8>5CT qGuQx @Kb9ݒ1שexJ`=_|s89,+^d$=:u*#LBsюIE!o_:%Wى!5v,xs[c`tNI#KY$bK^1b\^ |HwX)l9wd.1fp,}{=(F׫1222& |昪 :w 1 Ǥ(Ʊݖqq~{8m|昪詐c?&ts8%8] 1Mþ0z7`]NV}☻:Ĺ-^1&p $6s $Y0P'y?ȃ  Ǥu+1uS+ֆ TPcZ")s7s[9F 1)\c*<'Xؿ=}/.Icҡ]ǔݖ Oܜڿx337~s,H: |zww4Ev3J_s?Ʀ'&g&ܺ:$c q X ұ={vEDrk|ώ]yIآw".wV96>~{vyɯc UMN`wLplCW~hj⩣S+sIY!.k/,3P/ o_j=V[{Y?F?R1O{a3װ!|c'\]65;sZ}J݅K%G[@Xy!c:_2Ph?c8ڇ;!BI05ѣ_~*l+V;zz܊ɱ1@[\4mWZ,ŶL(cr1{Ǿ y)ǎMM=~.SǜD+kKccW^} KLҹ3 `och`ܱ|#V>oc؄[ccړ<k1]CqEإA+o=xa@p[z1נO?0 D$&@1LڱVaa!qy$#Lōc0L W*8σ.H+ VsM z9He0E9c>Mv݆Zn;.=(rH8hS&jԱ]cGkK'aߒ]SF`S5U:v\]mlٶMg=R|nH-cC8P;,[`KѪn'wm*_A[$㩉0U/^r|K[BFƐ*jMUCz.~ےmh0 p$U}1zuLe%Sdv^jOO'&cSOn2.i\ɯ,Î7:MlY4Dۇ;e: P#[m  `cX(qP00 />zO8'89k j:zY'\4cǬ=zp lJt1$S?@کnxAKa31o6vOzo%9[cArIc;vc=fpMt+V\0/@F1L]n]4 PSQ; ø ]ZZj0;y?uo`1X}m߾Pȱ8FJN^zYGjQ/hmm EVʎaPina`M  Cy6~ C`|;+8aيaiZOE&l8+ޔyԱ5'!$ccc 3"Lύp͒Bܹ?GHPV;]Ǎ34ؖMYPJu1(>=pJpL ?^pl&?x~:TV璽 G޹d1pjٝf#A?cpQL9a:aր5"t._6քCM(%iC\h7!z;'{? 9w=ޱbAk8ew,H SX>{cȷ[~@~E; o' :/Y|䏭*Lvn?s࿜D~E;v|tϽȯla}O"Y|?j?ȟş@A)?(z>chBťc)>n+,0h1?eDNcIXoH_;&{8tZ%n 6RT{b_ 9`\9?]S)[ HY=0d$}Ry7i\E;Ƣq;>OrLH;o9}숣c#5;"ʴ@َT,MҠZ'X-Q"Sn 4wFt6oC,[ȱBұ[goݸzxkX G%,^C׃CUIIޙ'npkޢ !"t~r[ڜT9d{u %p IdRQ14=tJStLc;vHHpT"7B;[dBPIrLH8g;=wcq`HԠB?38=SP1~׫EHu|z%Bq x`U*sΟh*P $fbZ%XqpOJ Z:d_uyAQH=.KV^)foi\4M vL?F#L3KGr2L_$==)~6{cԱdXDKHVl0vî~cg\ Qd-ST~&WBHuzcMm0B򳻦ulgzpmεP-):쉡b8<1 &l6t[s,>⯫M0arWN*^33Uc]~ vLc5U 9R`ǘzK2㊿h`me7Ʋerj/1b`9L7b*bKlH \&b@0 Nn=2cb~l:rc9/ر. Olaرdo,J:a`OJN'_%u +F,+T Z%%pZm1 0WCxPF"#+`Y<F--Id[rZz5/=,ң&k[YijFUuǧED&'X2#țw4IXkieVkU%LE%qEǶa;h# ;#T m4lVa1ʪ́/ÑŮ00f5p"/4/G=Fc :ks(L]Rc[jt~xcd+%)%H(hŕUi}tZHe%=l$UF \LKE #$HU pT,|({Ǣ~&$fEfһݬ&QiKcc]SCCeQkn ʬlX'c5#UƟex3uBf!z?k}%s= t_CO"y.C_ @ a`bMfN:Z$fE%gHwYM>m0]\S; ;>Ea1?۾T^~J@_*IǠ6`3Dbc7ֵ-@xڸ ciUN0w%]Tﶨ켂5y\D,ȁ O [+XU`4v{;\ٳr5o;oՙFRzw"0:zJ?-BywOOCbS -.q2̱~!I%t,÷]n hY/ D;oƉ,4|5ĂXMYq^@Vbٻ!% ]`f$7Yc wj:$F剱a@Œx'+Dn\.g^Ғ1LUS9{Uu74|V@ ~y6 I] 4s"43)MVu%1"UWWz4Paῼ2|~l?!׏T7B1kWcz1/X;UQqTYR]]"ċgҎzUˑMͱ #y'uB"ی s GB-;on֔:-+w2(ݻ(ț?{FrC=XYR̮bQŒ䇰"7 `GD2(r(漈2⣙fNkV;A;On Wp<(N /g>ˌfitфbXx]cP-'1&3PtJ/g6Frr;8ʔz]vne`_'}Ϭ,d^7UY>T#y`2fAL_`L`\#~ya lS6@f}ư0@B 3c`h TLS2:k}t3lYn+flX5Tv?W#Ҟ ϭۿJ3*0Y:kr ;t^ZWAjYԓKgLΤ'HK,Jt+5{dK\ی "7")PXp-n-gRRڪ[ʺQ&VEOGzAGw!Mbϭc&"<l9Ms[[RN%=+wF&e1ui1t jCHOʠd֎U/Ya9Y,b֊" e:)JC`kḡH(f*K˜9BDOD)UB0bE Ȑ$I hAf\FbV?H F&6j-Qpˢ*I>܋c!{ՁQK |cZ:*-XjԮ3V\l^\1 'm_]F.Kë G*hgj\S&` x1"iut1tGd^D^N|AŲq 2W Afp/*.ŎwRƜ^\ vIPS><V34Œ5#d\GJ,Y(91Aw7WYd[ZX:,xYccm-6vMEC9eQ|dΗ]㏰v_)il%kkd)%c&K`:f`,^:/Zo%,]%-:?Țb*cih!6ɼ1QՆ; ֱnٻҲd@]\8aA{B75C]5, WR2a[\壂NIe,yƶ.MtEgi]8W݅ĞiTcw:㐂81 %ohC:h%%$Y1H4 !*D Γ3l:V/2VhwF!`*]>#W *ŶhL۩=h(8\\^ Ѹ5U~)e,yƶbNWܸ/ge}Ed}E1^XOeR%[%QKb4(2|`+sqYeq+¹1*]N01|mZ .rG 륱D+pd sgk]r:e,y2ޥ9b2GdhQHAq'K4'asaQR:e,rY(cf=sHˆ/46 =/(=*+Xg:L&$_^^pz<+ch иbo>= t1n{@ɔFY(,OJG|l%Љ'AT_یe 3X]7 / 3K A5 9$]1I=cKm_m jz яYZ:amVP\3leXggG)NNG|l% ~1VoB}N3VT ʢ31!' UXV @Xu2o5Ŝ-x_mD=$FrX)a\䊂d|h0xRѡ/ڟeq6crfgR! hO8dk|QCS=#H4>pKv`* 1_:NL*aƚUA!6~b1 q3!iv! j CkBmfW+3Y}}xdC^@H㸀لT U츭XmE^sal#6y;U+ iLu*Ju+#,xrjc\ĊHI;`m4t0Dk}b8K!bܫ' _Ey`+&Õ1 Q|}`p˝{0v34ts͘?Xƙ*Ju&j-nE1t[\us8h hd 6_B*W ޸ϡo9ڇ/ r Ү \A7C(b}ӯ cg323k1+\ȴ\y -6kdz[w -~[/btql+W?OEj~F|z~Kyݏf!`?:G3uYY'&3'/ 0-_ 1.#̭oc?{񫐎1MPOc5$81=;b"޿e{<`q/33dC)il% 㼛4o$  Co5Ws\Ūd~!Wb8KE'XWuHRa?Xb]yXHHz~KgWhO7IBd9uՇ B I[$j7Yy']ƴ!{a{6?6+>E@Xvsb01zJׇP&W0ؽOGf1'TX٩O|TYjƤ<In1"KA$(HS$¼<(9Otbc&b>%'-ۊL`' ®>K{Wunj5vX}͘{gU܉R1#7a 3xlf(aX- (20u5WgGp$:R_!3G3gKLY!cUL q̝92%ON6c$n82pH#@[MMjjqHqǭ ㊩xnK ԲmtL*{2ʝe G܃t#3~v/dSy#[fl݈irl%T|E|}d`o!S}S0~E&a Q:2BﴹZ#[)bF=J-})c,9cX#XL͘Ѝode{U~RE,1f 1g0F2XyY/&u.bDa1TH!ijDŁ깞3iq?$Lv3"bZѹ CI̘~,bajj8*i] -sM&*`lmH3o]|\$E[?VaY2Io # K2c0{0ٱ>QcϽfĢ /lOC猅fׄ1V_嗌\eLp:ZZ4"A%d5 [ 0ɽ!-Oj Q=E2F> sDv^/)ٞ|gy:;ؖ_*^ tɆ%zdL61Mm; j I#9yTŪA8C!07%8v[?<0ٞ|/)mX}11(N"Ģ$l7YB C1A ?^6Twx d3^jR2iu==H#X3Mƥ;6Β"S,.*lk^+9❁ǟ:,xY㯭f~=dd6w/);&bn/c:dΘd PL+]%T+ןW_A)~灘jZ @2ofLT~֗u -- N{;:: Ņtټ[,tSP34U3aA̢@~%Wli*T֊r\ ץ4Pq߹:0U cm2f귞'b?*?ݺT`,jY`\.G`'2 g08)4(`K~i$Pbe!V$[Vؒ32sc^cU>o-h˝]hp-cFVG9 X|5bKbKpg b8Hm#xƫD0`LWrx'6^c#x\U.gmn1]lWLJ%v&!*X o G YU"-.JK إta#"Ԭv[>!x޹I;̜7#9~V xŌ{CLX˱.Շ/]rZ"r=G{.cI|O_p@; `b́/氂^@E4n|'I \5u6;(dNWG2lRM/H@ &bTSoփttK `0>bTv9ׁJ&'-1e)5-1Yu[ ]e~:dx֥ yV׫nsκ:\4H<"=GV3LD)$'sf1P搜['&Rp8k+|IW*pg_E0vc>pygM~!u s]*麺^㓓s?WK=dz3[VNg3qY|i:ll!r #9h8p-k[Ȉ(+¾h\>;(CA@AlRIbuwXt>|NU3C1m;zG-c)AAL9k9Ti稢L,Y z(^igͫ 5pA%n$$r`Qk<םud„_}t_*DIS=Ja[^1UL؃o),u 5vxmƣ&fmbiN4s1ϐ2 *9Tη.'ßNvͪ*XP1j21Κ hQ#‘-z5E#jwH<R`2I,1r0d)rm/0v b.%MDMz*ƣ&' c:WMрrkX 1|d\hmK2S:_SXdpLW[ czK: ]zk:ƪ.;AM|8-mvdƣ&~UN -f{^,NKe.bYSV}+m/)d_^AH1Ld+ǔ;UiMdnavnnw|5pXo>.Vb]:cĀӠ7 cVgL9ѶQaak/-mOَ`SB0Y1 vaf" cz# &+0V1g3V|a1q$' u$5)g?0=h1?D033"q0k^?a&:+h|Ú9.8֥~f֥R{|iywO0̠ĎHE]^UL0S(h׽p{].ȌT }Mv>h3(=33Rڼ1T41k"cRiKEĽ. 5)㣉-J̠Իgcؼ1,k"cR57;uzs]*҃פhS&113ˠDLa\MXLL&>Ws) Jtyx{'} DNrd (u/+BcuhB_JWKyߏ1@R}p+.ߺTXii|ǗG21Mg RRKu}+g$R=}Mv>+?|>i6c.xuWu3M=R 0Qr],l3f3fT!ompɆf3Vjǘ۲Ir0k3`?/+ՋOil}RߤGO<ʘ1\h''(N[&M`B;j)cD)n3f 3y|lff= DZtU,c7MXK);M3&K}SÞQVcJOWϟhaɋ|{bki&0v%5ű4ccl;f;76cU1S a=E3zݵ~)0ћ 1ME&-.1DW3:ٙQ'ٌ,̋W9|=g[ nLLn!c}4oɾӄ`fƧ쾆>}*3c}괢1Wzabc\} )f2;hk\Wmwgo/.ER)Au0k+$)Z<:kb{p}uɽ䷊Z,EUlJK1Į8u s%m9Ď|,ɘUXib02F\vMv>YMa%1s7ْخSO˜X|CLSN6eMǜNdK"cNg?fLkRb m2ub.jas4uu3.פh#-^qE9V{OlX*Bu`N0ߺT=dAjBD0iS4pzN8֥?ZnKyt(Y`ϻ/1Y@R{g]*Dԥ]ѰkW{7ϺTYkRY 1̠#IY$iSeWW妍׺TtեrwXͳ.`tMk^ AeNKE0\$c=xkOhMk]*Y} EպTwWG(pK=\7?3xU>1AJ)cV@lfu@>iQ-h:Jk X {(|M}ikIzֻDzAP{[.E^͛KRD1h'F fnXB/-\-,w_91I91r̙yfds&'+Xo,1XݨG;7vxH֨SSM߸TArиTWѻwG.R\3[p9QEQh.x/yrb勅{OTdu 3>`)1-{OcDGb;Sڬ(2G_٦o\}SRߣyL,fsG6c\*B1ѻ/ N%r2#Dah.xט_ aO<Sͨ$~R-K-[cڣƸTzm}}kƥZ߳AlVj[3.k˜|/o-8E0<x\hp4FK22^2%M,jFmloZ ZZ]R*I#j݂De3kPcH4K2fL5KRRhq έ1ٞ[ĥ~G?=!{SFc\(l?x/4F3*cU]d?Kic".cƻ>Zqws7pℤИkd~L\*nd{+ߏjh/cw+gyc@g1:P1_ \͕l]Q-Tq%[뉋R(++ 3&ce?Il7Fd63z0&7W>,9Ǧ"xsJ &ԘXbn1$3XߤHb}BcH|*k۰Ec ". 2ãGBc oXkÛ?Z]g&9jl<.IKc.Ұwᝎ\9_1cn}#=$OX!_@̹$*58,E$+mִǔ`=L LglkxHhlm`)M0h>~Z%fy"MjMG M`g6o`}UPi\wh6MOѽ23AQdkl,I7L3>{䐒~ݹPK=(%cY3)KӧԀJ߃?5#y) &L^cj=T^ FR~l0LA_! F\cRMpoI+T,NH0y,_i¯Dh{p5u:@`0MS|RIR0$]%_džVعk>EkTwUMcecvBc_IBb'y=>`zN =<czP :z|ڏʲx j>M'x jafd$iR/5f tυ!-I0&$I+ B^c[G/iEqfއmve$Ep" >xI|4!i=jSOܔz÷+ј 1Ec4FchhLɢ11Y4Fcl\1Ec4FcHc4&ј,1oE1Y|tJ2ζVh'7^`cY]"3nDy՚zhćڞKR'%هޮ!CJylM᱆h֦4'MfF1Dyص5Vbr^376Kcfqc 93{ڍ5؛D:CΌ hLӼ>(+'8gis\gșsod͙>K:CΌh,3kol8k?^\zWNo's߃iu Xf@~1I=9XNfksT[u&:>ru<}s֏Fg7Wuzj{gFq [P=EBBa<(^DKhlLb 9 5Dq1C$A<ߛqL2cg刺L^|~ͼL:Ʈ9)1vUG?Ky'l? KpO~7]WF_5V (0r $y9!:s3߾eaT~+\ۓE-ȫv3>5̟+U8;/ӂ!1r 7`p$:_NɊJlUVy9n;#Y8<`p)30cV<ȩe+֫2x&˦+ y1rCv]߱N65aO=ޅ" =M38?Njqi,ņ_ΦkAs$y;2:8w wq;vo+hj Ȣ::Fy? V]u̽yH2#csl0Gy9&&ȱ,ŬcC9 Ac[\vȱbtlUzrl>Ʊ m y;Ifwqֺ1g_F;!dvǦ߄"J ql>7#+ قv2xDL=7k7>$H%+Ʊ%Ɔ.~@>5D}>pLDq%~NǎaɌÕ9/3r W^1\yc2s1Fyp9rLD1|cc*o $ccf^r ZTM&f1km{Okr wǔ^zscL) cSQr wx;Y3k1:nk~C)@ab1-xN%Y!r4qr9g]?jR}Eױ:V)vg%Z3Efֱ2czt+c峽籶X<<`бLe3Wz=Xy@}lvyRsx䘫 :++>275rLx~}Ŧf~51WbK3Z;"BˌÕ9/3r W^1\yc2#pEˌÕ9/&n:FzY2 ػV@P`>"$ _'Xpl~Ry_E`?r͞W`J9}1cL0hA'.{ʊsI)"Xγ1&'yG:NuNE&XY{.r\vۖJ{K~8Ip7>Ƽ}q`c7]é ~Ô᳕9FfV\agllK7cYp 9:±%Ҝ९] {ߛcY&u޵4vD)OӁ֜Y>o4NJN\8`\*%Ҝ` NJMcZd0c ̿X⎝}lc{{-Xa>kIDPlx};Fxru:Fxؔ|i͔Jx$Lc2/sP#ߦz Kܡ>QwMǐ Ǧ4'ϱ9h.xq<"@Dǧ!'x@Nǂ!Ǿ|ZR]:cjMo?r6~՚>86~18ǮjMo?ͱP+VicǍ;d̄"bvll+J,ۿ5}76$|7^6&f{E~NGKo=9~)zM9feR1o"-5&zz4RT8^zc8^zcϱ'$"_8^49 }}\1Ƙ)/qk[kt L@ap _cLp6.'n)ԯ18ƿg͊WZ}?Μ]QN|?g皎+#6tGUy>Rid2JxQ3<108Vt.Q. sli ͋f|KwZR-'[ՕŜS9̓dؽb7Y05VVaF6ܮa`=K9gvO&kb&Xy99/֪&MC cK}̿U{? /򸘋Sp 1iNsVey} jM:ttJ %YT1qܛSc(+4e1+ZDHC8xr7Q(:T {W8v{w[ymL+2wQwkz)ızHӡRTN-9gб㜝ߗE幢<^{s8MCw@ɤyĽ":I&q8^\Ǿh? D0IENDB`awf-extended-4.2.0/images/gtk3-csd.png000066400000000000000000001557361522325530000175000ustar00rootroot00000000000000PNG  IHDRcZPLTEմ¶ȫɹiL?w]E;̼̿˿ͿocXcLݭʝeM¶ɾÏ_J܈\H\Hۋyin`ݢ~bKxeȹӍ]Iŵzgyfijo`\JZH˼]K›hPԛdLdL΂[JږeO[HǼ^KәgPfO,**źaK^IʻȽɻaK܋]I̾;:9龮211paFDBǞy» %$$MKJӘ~}ûTSQŷ|zwȱmPBxtqYWVqcN=6dUΒxqolƎ֌m_`^\kigiebu\OݲccbzWG5LZm_6fkXr^ئ𻛌$L+Xc2Fu lR)n¥{ܑxmPݧ~=qi|bKABRKVbiɑo:ȧq<9脀֫l+;H`nٿlh2SΚgk%#߆ؙIDATxLTWǩeܣJ8vmlEWnշn@BF]%PT^&{ҹgC bmf2mn7MјoRac6}sΝ{28s9ys=|ܹH[L RI!uLvu-K׮Cx@cM]7fkY<5]gTt$k} 4Kpq,E Lųkfזhl7VĦi0e̊*Θa =/員Ȯk)]<їj53ĭ/[ DcK؜%0}ŕ>0y'^S! ­*mA迾5$e}2fu&0~ȄOf7)nܱǼ["#DȬ|{$7t\h("(x'rlZ+Neme D*urP_d(ßq zPD/x춠EVRRL,w{ON4f)C Qi,nܥ#ɍt):h cǩ[ ncPAcxI6NA[ [_/-V|9"<L.L$LA梱1d Hf-: ,{!u;{H‚!b \jعLhPzl1ҙchkxD1-6q&Q]Xq }ZS3j[LQ.!0$x0=г8c9tR3 QnD~n8. ȸiAy:?AcAc4P Zvټ+Ԟ4a4E3X2OSqF{yd6 %vz4G gz+ξ"\=.x(-͕X74&\ߙШRnC`#\e0 *}PmZLyl^<7.XW Dgd+7lGNm5*8.-Ac<`p6 s| GQgK6 E ΫzGJ b4Af0lFLRBb>Ф_$%xZ&`1l8$VZʕD+0a5!! >>4q)GEX܋զmD8DAY,v .[A"+I \v%xBbIj,F֫@^^`d ERؕZ5¦)W)$Ľ)nܱ)Tb@(oE@}F[~(ȍ1h}[e4[|8׻9|SxX+8 C94-׊^hl~ەK<ӽJlk,~B8V4G&aVcn}WcFbU_Ka+T?x)3tث*jϘ$'i%p`˛Лy~c>npƜөXOb/R؋@/#/iv-ڤhldȏ-C LcKs=WqWShW c9)W BXL~ZҖ4*.'#RG B* #R!{@ Ycy)']&~j&Yca5 LB'?գ&Yc 5kZ]acFr߫jotýcuav^SYcem vR,5h 1 {(&)ZǰNGM95R4>^Wu̕F `lfw47Vt47u#0eoWc779:)Ju$c^b";(AZ.;}.ayf^8ZOЩ.tUK_yq*(Wʗ!k$B#b2GNC epZ2ӍLu4v:j*3>x[tôam5pZ)dګQLd%}!dGzL=GfJKcS%G(TQAxјxL&WUڨ vph-MU75vT H!8rhz)F1\)9(AXur\~;G+{ E$l&r0ddRH F`m=j=ZuʠGӔfV AeP轶7UvP& 8N۔;= CyE3Jr0t4}OwEuj [ UCNOKȶ5MlдhLGG 2A]`B!Ra5^4/CGc\noûv6xÆ-J}j0t(aڎܞVZŠxiQ{kr_hz[tP.Dh _)Σn/Qʗ!k,Gd99mkPBK+=XTGgK{Յrj&u!W1j}k4vHLPGv!?X?V}/<9Jr0d`OZ;z }_ςlEs_Ss6a0fDd=Xx0q"<{@ Yc&h@H-T kl>@H~C RB!KiS@~O`"3'N{@ 'y>7)*RG =>߰l/0cb//@P]`69XdnM D]w!͙b*//o1 3X|souyVV]8Dc>M*t+楌2u:,S߹E{&H."S]y, i|tYh̍A1 I\.lsABZ2lչg/:m iLpV!ߔ5Zcd]YsKӾ߹}rو,Mf%]nY=:1vwAU\6pP:_L_ʺZ3fTWcqk]: $|QPYYƾ}'o߼'Ê6#{*/yiY6y9p}W^1S.&-_JZ"sy`Q5cxč,ieS.{-@kډ͛s毾&5 0K勬Hs%kl^rG]ߐvM^n8ˁ"#R6;Rn78o`۴Z3ѽuXaW{ŌXK\ <\DAc+xMOݻdɒ}ӓ,a.XcNHڡ(K]v>20t__"CR GmenЛ84=CkoÍNަ4Kl^C_~~&+NO nS9ӧk:BWc_ .^> w%sr_aR#3a?7p|)0z+s3ha,ciCTBGcnܸ6VK[tЗ>5fgPXv:"oJWnu^wM RI״EN6%J0 w%XcEY{'0ȐہP~wiinNQRʤq;{@ ?۴Z3} ?} 20 دLIEpºM ] vtԩF'Lc6ᓠsE^XyyNr˵=NOXc=𬊭1=<1@eXɹs1,mc WVc6f??ޟbj+l>;v*Gm̕"6F$Сwy9EP;:361 &cTE56:$V=COcsƱ;~<>9ay3ј_И"7İkVceyz2,Ϯ= ?_*Ɔ>Yhh;EH!EWch4Vdl1xҸTƼw815v7dyl/3 o)=os_r^2dW6]ckaw~}ե^1BcW )\<"ɍHm5~e5f:3h9t5-2UxH]^:/y==~;~为7qzqb)wp}vXO.˱3nI;x ʺ3e@K[cԢ_)^h#)ilUcZ4fDQbZ>ɝS&P9|Ƞ+2}.q;wpOh,㜬TjvtEF.]:pS'-\crkapf5ؒeK~k94DhUD ^,w1meٱ`0/7D\H`X&LТ%K̈l uB"͠h @aLMPIlLB&Ah&F0ɦQ3J"m:Vϭks?lk>{>s{>sν\3I9v֭K X78ss&Omm;&!(cL D,&XȱOW$s`s`jv-XZ1OsW9{r^z1Xu,>pM?q 㞏c ,%mC?4vj8`[cUU7~_qC|e]߽|zz {c=R4oL=fݸy?ذ*Y~𹳟 [Q9wcN$P'Ɉ IRںObªؚE&!c|rU(iBqg!`]7w=_Zzfx|r2c‘_߾q *a>9 eCŮĬwNRp lI+3 dXĘ`g s dWq ߚEFaAc{>9OcuXlE)O<ӡ5 (CEKYJ:j,[pz0ڲB15|UR\T %2 ܒG" ıJ"#S$A$X~sd*i$% X%,i O*" Nm‰,DzrMpbG[K ෑ.X" NJX8,d9q贵)XYe c;"t@X&d2>XXd9ie9ie9ie9ie9ie9ie9ie9ie9i1=CIìFDm1Gdll?lcǎnk-d%Ad!> >֮֗HK8vDB∇ϧ֖NO%1U 5>-i4j,pĉI-vb'-?>lPIJ8!.BOb\H^`WV1`W^Cc0p]947^@]+bₚ8r[_؃ݣfı:q]Fױ}4MsuRc|m`Ix&ONLUB> gx d* PIsrNA2cit ukћ!'PwH6!j<,@J31DŽ~t:n;zߏIR< |%ʖfd^, M ۩7r\ևfj.H1#GN3bZEE\|ΫZNmp"h.7{Л9h%h}-H P$ `(LA*!6:>bk8fsCTT`6f}OύدB`rO2@=/;MlW&%]fo=">l!9tSpprKcc}[xAx$懂y~e%}Osu Y ,8=eHWt02:s r#:hU4 S1{a ^F HoS}/1cz+'q> vrB4":9ɐDԭآa&RaСڋ.F3 ̎x5rB\. f|qQo73|W{oV/]^4L rOWc6P.z(W3WYtO\icg 78&=Cgĭ+fwWF̎dX& u3f# vVTӺB1 ;0r=Bo$|2:]'ND5Vnx^tET@,j`WOӤā<돉[ƱEk19NúӪwP_!!^z|Ѻhﰣƶ0ahvG @P@A@ [,mVÎK HjrxH.7=7xjmFEuZh wXXNvv`"#aGшY"J!%K1(Zpk;PTαQl8fp CjU%6|+>ihPQn O0ʮbT|ByP",v@ *COwc φބcV;Ud0a5IPjM1e-h:pp=c #Fdv %kbTGbP H CdR8&}c hFĨyUZm6T_O' b;7RX1C#K:X>HHx\PgCB ŞYu>5 h*q!FAbۃB-ڬbЩ0:"X/@3ƙ&᠓MFL$'pPz2T@/S' C.^ ˢʱ[Iɐ:fboɱkjs,.`ۙ檴zZ]."E\.umWՈ u8 E"$G0RJ,\Uj Ihlބc N&(văHDž9#dJ>A.g d-Vطߦb.o6Ʊ4lثI.pc/ F;.8a*yNC͒O"2Xrx,d!{W >=0-2cJ>牃OxTCC!B'nX]|^5:iŃɦIA.8 'EQ@nXL`.(Z\3#+d@]0UbQ Kc+]dGpmСƱ@sK_% vV 1P0L:4Q 9`[Z"B"6&C6RŁ u4<9f-,Vܗ >1i-كiI,8h$3 h&鄏$=['D̗(6iUJ@H -"3ŘwFא'MyimJzG_J1 @)1II`DHw4 Wel6WA9"x8s86 >Y0X_D8LF8$"bMރ,.̥h%KDA%sbrph8^ EZ8wа-|3WSԢ`d[~'brl8oqiW-wn6@{/+=I_rZ[9ݖL9vŐ7ƕ,~c2]Ƕ?2mLfZ}6̱kD\Ⱀ?855v٥cVW2XcI,b9v-2# y=>:Ve#D1pm6Q'oo2%Adq z?vA] 1ۿ8 !ν1Ecmgwsm'&1q`:{JY zEiLS%I%MFb}wSikcu#T#"Ta{CP(p,r9Yv;?Լu7P?ܸ"S޾=HI*AI WE(*lCD\,TP;N||2]|?$ؠx>ɟ?IX Mwuq̤] CLKUc{un8R: q+* %B V8,bQb.y}'N~7]4[ocSk|*cOult6GqLLjWnCFcE<*1MB1R.  D%ʢW< ).B}T8{ 9vmcWT8vEcW$H>IWsf>ǰAV߭1 lA{B*^"%fH ;&u;v^ȋ!."I95A;8{R͆H99ؑ%M64 d /1PdVVUQoaptﳞY3q!/𝵞晙a>^kƓYlΎW8a^؀U'/o!=?Yu(R=/xٻUƲ YʟgB>;ul(6F;,cذ"z  nf0tP$$ hy}:z1F ^msb/f( S$D&&jc߿>Ȫ73;,b\ cuqei1;ބdamg}[`aVȩm|7tq zG ']1c4^ցz롴8kA—ʖ W\."4Zg0i >0Xp30ljZΖ(E7"PpK ~, n0ƚcLRV=>C+N|\%ʀOaNoO׍cx|fó c>0fn-ɩC9 .+-q=RL/)/a@t 5t md =ٔF=-B֝td_E*$(CBx=4e}*c!#cU0hRV&pZ,@-,VS%jj3&iNja,2f3hss/1ݜ1|.)ڗ^ }-]|2@ZV#-``k0X+x%PЇ.HSReL #Қdѩi0-6X?f52f]V?F5G2}QI/ -~~ΐ~Oc ]򌨡T5^+_m>/aJk(p>}p6#*Y^Q9cYl1$cCa.؏I2v;")Nd;VΘHtmisӴG65IL X - U;T)I*V6RBcW_dFkQc#>4>ۄhJՍ[}~O㣳6$J.J?+lXtFɉ[YmW?}P"E{BeȪcCY*(zŭzJ/K ƪYKue9,jp{^X kc%M0m@jKPA{ュA rG>+(44RE|%=۰$67CihUc,dYVp1:c۫0f'V0٫r"G'= cMv5Ab "3@Me{Ep+q">^Q)p/ /C%\R7J ,_=^d+a W֙OXݚb,8*+P׳ ^J!v2C^YRI5Ua pm*+CO Gl#M R "ʓO 9N`l0ؤ&Q:4\m J4X%g|թmcQ|k1UY2+ϜJLl&& *N,ѯ1b?l0JAZ!HԆQ?\ &dV1Iʒ?][9cW+z|.KáK/]{qPn6!c+n,K|WN$|]2hؠ-f Ƽ%8\P 7p^#8bo!;DI% Y < E*#mF86|N$ [ŭVE$H8+iXS0[MQ6B\y?e|1i5N I ᇏLǪ!yuV"9鱻*1zL{$a2V[綬w mwUk&$nwVHLFFV95(Ayޚ+ fA1vfƄkOdOoMz=ɧᎎӓw%1v½^=4$̡Τc%?P4/6$Yw=VyOjƮ]}|u˓;:'ͯ2fDelc]d{B== 2YWXz2v.7 }򎱍yR1)ݻ㿾6=q5}8ݡlzx=Mi~,?~"7h!^f?cuy22}ln%_cd88HXE;Q)P +* -CKxi˜"YG)ɶosk?̄c8idXʩLna|Db&_5嫕_zoQdPJ,9Ƙx.NL]*Mɬ-{^qMc/2"} ˄nWwW HZ+.Dڪ$h2) A}:ivZYs$QkH'%In2;Z` za,y3foJU=ͱ02%P ?X!Z\rwVre0`o|Akfl)ƊaIkiU&3!-ޖRC 5)3CZ)(EFkE#:Ep?DD@%-3Leik*HZyGZ=t斑jC_qtӹ  RDD>zz()P Qwl a$= ikT>ڹs'Y-YZG$f fh7ߏwcc-UkjLNJa pbM݂RD8͍0~х I3[RFE}n^ ukAAi#t7d%V)h$ jNR'8_=[* ,j{m}1f:Wۥ^_H~kB1*`s.< &KJE\(O}. 36s."n\,..&%v=Bc~bA?5\|sa/|KV1xOW?Tְ͏}!ϐ YC>VH*ۀ&~rh)Tрڝv]cϧ/j$> r'?ص8)cl+NM[,+}lwudǦOҌ}wىދkwme8;=sf>qu|B.&p}ĉ cW}Wb>ox]!c A8kh>Rт`hj]fܤIj5wciFhQa#ѦA" cѺ T㱇pfޟ@F`Rjj&H֛d,ds :'_<uc-Ee!o W7]#K_K˿2c9yB$WwL=~8* BA=Φ&'m[, zTyN݇!H *RAbAT \5 IN`VbƇҔ1RXիQ`Mx!184t%6>ޡǏB [7ːJ:M\VyEGIc&1a ~6Q*vHiac?˕ՄƎ[)c7ot{mkwП##0A1 )s`2ZlMlӌT p(ld,hBR~&db?_(_)ÐLKF)}RQrn'ACExy~>5b0y8D~*D,KcWaW}'1tެp( N7`TWdʕwAah7> cT$VF1ٲ!1WBJd;ܟ{=VOs#tU.̾L$bF|?^St9ao"77BNtH:,,8I73oqߠǾ>.bX\ڋ")zL{~ +n[@عiۥ{mzr/y/՚dCSVTBef,~a::XX6.dI!5R ȊZ$J'q}~8F fY [{?w1;+V͈SdMjR\Q-J%Hq֏x?wI2-ޠxE='7Ye>%3lsr}Rz7;'7 W~{7f:NJ@nM egaSacH֟TtS W}5;mWYye{qZe;Voޖd3޿3o[A 44 ­H: J9m̿U}Ѷ3^ԉS"mQ7dʸ"JHD?'낄 cYJ-bu!^\<4c4Нۿw?y\jWXJƢ(eX^c #V8*D BJjw5ZsQ>~L 簫JU"&"\D*PvV^IlaM2Ppz4av=V X/oC/Ww9VcXʷ,W[.LdLKFxGS qa\p*H AXc:m!-@)1!,|" AxwcP1(oyH ONuc'_T*n)ݾ'3:[ 106s)Μm`[\1;X?GM C }kS+KjdfΘ "k%ǢuY! >>a`3O[2|3zѺ~lFb.K@KËN{8'{Wcsnk{6sY2F*:rƠ (g+)U%O> Ymyd7guK%Ul6g"!%D #o/^Qǁ^DgعWOE*ڰPdy,oHLӅ7eǷ[ӿ^csizzε$_Ëf>9gƓܴI0RE/{ɮR̍TU4cO&O>/Ʉ15nbx7cSo,])c(B7)b u1ֿҍ :P%aRB RN8!a 1Ȋ<]Vl8qyHH0e:A=yz1@3)x]ޮ.lE!T"QuӋFDdCӎk fQFάK'Ů4cXǭ[_x88qR2Vccř$2Ǫh1KA >/ӥjgT*,4*R;:}?g-JaTT #*"bhMuYkS  2Xp30le CĂBPT/x#b&*j*k gP~,/g[aVjn̺SuuW'XAa/G28 yt d\qרHҦ1:g/(DDPCjkonAѣ?Mit1س-- z?BZZh뱺¬*HٙuIk?5g 2_;*c}{~st[W' ?2cΘD6EfƱw뱐B5zobS'H}>>?xj8'tN͟)Q* PmZ;I&7*cMrW*ǼBw)&Ҭh1hn [6__ -->t=;3wV|PR.#Қdѩɔ1(cs#ez,ڳ"hAsuch2 ~StGc1 P+|0VidxiHu#Gւϸ1V 0Btm؏_Df{~/|H#x+{(( R pBFVBڸߓS+ʉ%+9Z1By#뱂E+sҚ2f > - H)oWJ~QV{37Ҳ:w%(9rflcE1sxtBByopq4.6lcb:.]rXwH[j92 C)%Њ8cTH| ЀZe||ŋՠ'30H b--^P A9m^T[yS с'Ɛ$I vVwnLg\:5nbr!s!ΉH4=JljD[A RABQM@ܠí)Td@Eltzy|[$Y3̚5kfL֏Y<Èf=36Řrkֲzrh`VﮩZl*jj7fcf"d8s8q]H֎rQvygVoVUnR֬P@ Ш8 8 V4לݡ)̭)mcgXSlf4]Q6RBcS휉w;g|aΈ j33 W5AK`sM rn,a~yk@q{' zHt\%%B$`tsj^/h##;37ȟ؍,c A(f un#"/RsT72XՃ.n6)BN*Kc<[$cYns; 2X+]y]_:Pkdvuu}\cDH$49kj^ri= ~hb/dY|%+$:0уXC%b~vmX\CKjykt k*|ui|[{Pc$RY 4Q #䯆 MSTJR40[ ̌ӟpE[giŊ;KCx QvvGqA-5Fvg±Bh~K +c'zͅyj(? l$b `0 v:cŵ b"JEkoypv?IvP_v^J: "4xdlPJbɓ+ $#I9h"ZH&{ 1+&ڏhcO8ߍKvot$řad1e+KKY=hZ';aяa9AZKs+!ұCaNx̞r ! &0w9\,_If4;p6j#ܶ1VSI+V+[A&D E="^!XH/MK+W' GC2DUqwKخ3f.0~g.OɛSUf%4D*YM9ZM\c}''\ջXcUجxRAxjO8JbEas;Be.>HE 'PPsh$;qo-?9Jcuk5Pߵl>Tbe-x*h":HP*hO=9p.A\Y= NxƓ[<~Yl'c6xg>x5ˑ]2 ''GNxLcN\SHːϓ9BOD&5z>OTbc ?#xRg,zTytĠ8!2}Ȳ/cG_)WG#zn_q{˘bؕc?d5~%BtK1;(c'n\Cy'G&&FNzNO`,|!2+5Ɩc \zth1r1N0̍wC^/===0MO}ˌEƺzP6|[6|EՉլl 8 d& Po՘tJy/v#‏&Ř2?զUeTהED7W8-d؃!C*p %Rj@~C|G PiYs? cL~c2%lL;*x5cߝX{ɮ}xεyzN]g;ݹ>ιb2TX2]wC'$5)Kn2, ɰJd^=K砤蟧|[8c1&V ׊t(|sD;tWep@^*(wJKKu>;*c1i8c;c\Bv7_|#+Ro'I2ޫ9}e!4^z?92H4!NƀX$cc)V:b3'/^z?#cT-Nv.36*WEl1qIᖳ1>v.rcb/"eƢ0wY3FXcfXI- c ԏQmm]f,V?$cfاq1|Kc3 ecx}alg\üT̘M(kR <=y{8ۛpOtkym@?祵b2sWa8j2:k=}qmx!;ŷW䥷{ޕ$;30l'cZ% bsØB\) 30;Xqf1gfll'ctvc$fK 'a.z'/W1uecwh1۟ Ʈ=[xƂ֪=pUؼ2Ffg{2/1L&Yeű۟ƞ|@ق3Fk x5+Gl<1H=Kw39~Yhp,v/JS_X9cG'Rt+pjEN86[ c&Xwc,l$)uv1 w?>u_+?4p IOح *y~:cʦ22uv-N$@y7yϟ/OHnv{~u9^)T06gn7/X&S$0Y]EEBm>UIɽgy:ؕ'= cm?E "EiS HTY[X4dƉ6#?c@l+ߖh b3_诼ONxyxqTDt0Kq3س0VޫLפ:cJd6 eˇ*R=ZY ?򀢌"VI0Pv n-Py># 6R[260 b_{ďg{^0lZTm30ƀIֶI1ueC؈TatSo?.]lxڈ;ڎa (P*4YK=e3Ok+/Mf* 폗Oe,}`=gAs㭿3&*A#]r3LE)4 y<)l<2 Oof z'WlU~/YfjlGf%[Q2-DA,ATxTImOe,H]s+WT~g er*k0\7R;A:"u2v Q *`7'[ce0IӜ9Np,Ġ+z?#m)72&I9sҒ-3\L+1Mq.sT~c-3Rad˜9׏Z^e0-ytiFs*ARcl[*[y>ҬlYz cRXjX+Vk2\ڪܥm`,Eycp_d׃nKPepD F&pDKKLX:&c~o^{K/V{)!͖>*NYremq4BU0RXHu[aEXٞ: <0t\2J1^ѭaRU<Ѥb r Bȹ ws,\ي$wM06 lp ]#ADu4S;J:sZctm'wel";׏@;e/2`ט&[qE~DAJ~D\ms.d2mɅ'#&X|b *}U_9 @6Ӈ8ȕcf{=f4_PI51r2Ƿa&w~8lxCzm-iƄ?FCեX$cR Ij:W`38?oi;bjii9p0,Ù`J/2cLѤ >vglL9cT;37 yy{ozQe E6o:o16JVФ+En*< N]ﳍ綘ki>M 0խm:nmː墳n>ϰn-XkZ[h}}ۑy&ϟ~z~PɉFY\6 ؼj_I^yS|ܴ=ci~̱o~/?<0VŘYw ,S֬p6pۦsMF.7 8໔u~D09zjgÇw:;M­~~FLx`G1Z2l155&&3}L.ǩK`茉|dj΅kFWDrGNCcH6j[ h |$bjfгҸC w҃ŨJŘV7 pk\i<×[/VShhnw% TGq9p79\gZ&GÑaC=v8x KeYT~x7 |BjlD??BQ!ɨ2csD~=X,ƪtu@B?Լ=.1ipV#X9~Wcl2LM@oGǏ{uFL-pnߥsMNNH@BCL9АN$e'/~3LG+<[fl.(c5鯪hB,T:1@0;yt&ɤ՚hfj^Xi3+Vn3tj=u(GfeL__!I.Wsk+e KADy(2oSXd_=e<UNBmD[v1@2ozY Ul0DN ` <'DPDg(' ­)B @?{gƕ@B "&kDΒZ,%Un7MRژHmT p9PpC*hKvIt۽ZKM"5)Jh$m}z<`0a sΜ9sA_>1&cBѡ43e6Pʢ{E/X)n,K$eX—S'C2^)Ȍ@!j1pdhqHb јa1 :k#CDqCkXg*YJ} d3c ,8v݁5&{,1R4?siWw/ }g,-(4۔B*#ث6-D\-+An]F(6SVc}he\vdhF'вN{@Lz/[420f?:o}{f ~G]d`LSX/5FKwLSBcD6.m kΡ(QhCpEE'X&I0))Jo#d 4'20S6XgX38R1|3cPZWz륜y{mM<`#lkhr Qd"G$C BcQ+ (BHe4SᄰR/{(}tP헁j'^ Pv:A_FX$'n"g/wd+~Tݓ(@\jG9Qiw= F a"~ĩG_JR-bX8/Iq# Ҫ^oaƂwy;DŽ*a=xqFHH(epf?QtFInkXNyr%T dxP0qG1@]4GB,5 Xquk]T ^ Hƺ`:fuС٠a?ꑖc? c1^HT_hce B3E2֪gl>3D.Θr^&KLtXؒt5m8{O;W\z;$2E ]7]Kzuծ|SazEs>KW cfJJgb—Qa,S@r#B2OcwR14*Xt2jQ}68Ǽfeb`{#GU]*Wpծs˿OS 1{+0[w/أoOu|}}/oʌ|1e_mKt/06D/(߶,s?NuvͿ++! 1_{􉱃*2gKOnX*cӷUs+/=,_1cA?co[>0E-~8MhTtC_~b'{L2cA?coofcK`lt,Vc_~a]~`Kf,TbU{K1,;\[Yoְ1V.c.~pbh& 0-;qvrHCY6_yԯAݖ띹7Yh"cYGOC#f+?^w2ƌyJ?Bczc8.B[1X` n/rgBj2vP5>Gbl;@lAƬ8 {En2ֵ>k3ڄC}qy+03\_?k'c1Hhmqcd 専C/$u7[G /{="6u'>MʲW6GsS`L+I!Bc^zɌy'E?;"N۵o}]&).nf#|[l̘s~Ǫ ]i!yjg,;|ϣQ2tBcAXhE1n#4!72c餀Wk_#cGbWn;2cyZ1U{gzU<59>>9Ub *lQ*د9M˼1cW/4gڌbUmeƂ9)lP*\xqc͚"ƀ9sYcǣI[ǧ&'7O}>yX=^1檖 3~ZTHhs 7iI%0hMҪVԌ9^̌-?ķiE)~<0-vrN>Ql̷>lM_k/[!Y&''4IOb|왛2 "y;'eE9XEnNny"oegƚEq cS 3).JGK* !Pǭ"`nłsTB)B)uTt.1y-_k/򞱌?֍LɲwVa O'EThbrN|=1qVcQ$#X)UyyssC)@NɹLI F<1z-_k/=+C °dP.iQĔ'bv W? '4u"-hSIDȢP5>Aip '嚞1wlv ,<s L`' RZpH9jKHT8e&B>"c;X c{b7ts9PI&}B*:=1>є$4aD;1B Q\jF.ur#8xABfYH41t;F caWC!YnbnyԹ7 ''zz'''j<1F7 3 2IܯF0!L\GH Vx[ُ S4y>-EG*`{MYL^nݸu-ȘYrjdBill]1cigLhW10~fj!n D\ˆQ*Nj2 LRL5,yy Dʳnϐ1y^a c=NƄƎ ibbh?Uذ0c[X|5 ` v4M /z%bغ?ۍ gwP>398;NY{q `y/3f1K+s3>ʀRoZVTŧ&&Nil>y.zb9 1Da], 9|qXdyyg,|,CMBhݭY{\[M6k(a-(k4z%u%;` }mhu03?R"?!6` ӿ&/]dLrQ0$6Srǟ3Em,Ҧ̦F՝Ayh.m' = #X9A11Cm'VFNx`hȐRꀫ].6LѓXyxy[OhnfyN$- Ũs-&JkT.`auiR\U1KݵUz!TIj1Tb21ـſ_häF7OLdhupL55Vf}O χXh< I3$;U?Zz'p(O~Zka VS?9QLey)OkjԤ4`/nɸJ]CdF0愌(ş&פ7M9 4YNJ EBY$W;Y,D!BX$:aƚftT X>Rk'IWv{Eg:G֚hIMJ/IL7u뫪{ϝ*(4 2F)C ]8II1SdoZyS +4$籿RؘE \l'3[svc3  bt?Srv(/褖]*1M ;alO I G-=uF5ɚ(( oGϐ$\@,2B+CBi'^$c~U`?^莤C뺒tEX19:}Liψ<9aXq8TnQSԢBthD@J@"#ΈNQD7S1ͩюOi45ݭ?2S60PoSUٲN򯂎1]Q*鱱@ т E`m41V2uD F;@aGKM0H۩S ;0Pˊǎmz߈ ^ƶD) RqMcy\N۸D5m 5 i]ĥ5Et*zN.֓obi= ; cKgK}}#RS` R:ZVRXi_\WXmzuHa>AivɩӤ[5Ǿ)JLcS#Cj43q@'؊ AƘ;#4lKhi 5MTbvW'i;6<vI{8׀%D$\Xji;u(AB^e鶊[ p@i%!PD(J$mD$&TT+<<3S܌_fV%dP[ ,J9%>e IO:);;.G)4QU6?Sс843#X0(+>(jOHKǒkrgR&M԰5N9&@I5Rd&giƮ*\hbRϣ=cۙr`\GƮ<22ƌ7/KX_黗:cѬ}hG0^'OU8xMf]] i*3f/c/YM3c쏛1"cBF U,6^-k2Af}{yk}Y ߠf*jLt-{IPOK m6b賣vM- kyӻ]Ƙ$ZTfvIM͠ՌuSz-rG&VҨf0c٧wj+>sd4T3ut6`)#}0їO0 {|k0f2d 1ߨ$1< <# ,j<9AXhoGAc:cIy0bE{:]͐c9\mlBUAgLgl)w'}HxpP=d qp ?Cmmlͩj7,,(3D AUua矗C>~9)FWK 0Ҙ׊7,ӂb@Rca9JޢgX%ЩUcl!}2M&sieqVΘKǘ ;)J.[c>gXz˒bhRcl`ddsY ƘbHb oRoijM<d,k#ӭ y0jeAJ*j W CcÓ׵ɒ 䨓UmJ:cXy0A>^'my€%aǏuV-:P`x\T=Z1s 2*HΛXo2l#6]8%T`^aC+Kt? =8ËB1ΘM&8'3,e̺S!#GFժcu 3]En6[*.K 9݁g7cL1h_IZǠԌl[,=FbFg`)9cPz$-1& ?,Ab"bɓHL BM b,B(28d1)IC(Y*I:@y.u@=}RB³y==,9BJqe܋){y!uq܋)F1_2yDWQ䉎A+Fd1-r3b㌍"[8l m|&,E,}jQ] aW u0f2f ?u0eDQb` dX_jSu9+g 1mcD bEʘ4m~g<D(i,dDذr!y򘪱"fЈ] c@ )Ҙ&(Mi+~ZB4Z.%KY!΢!c cl\7V1 t{ vj|Rna$Us1, +/. 2~nǀq6tخ c #sm]taM~s& 詃h]]Q)Y q11{Q7ZP1{ƌm ߀j*;]|aጡܘժcuzd -@ U4ՐrS{ tnOURԛ,:c1~̭|7V݇c5 ʗҺF}Z:|Vu54#!XWZc[0z(I|Fe iƕ0.1c%|]n.ެgK`W$;2+kamwX=[:RirA#Wb~C}v%#G#GujƠFvO*:,:ci#5dsMH^Ydcux|wc=F wcv-Fp6WbnLbnx.%c-6{*:,:czL+0 D[o^, csd6Zh_v)m4X;g/1jώ Q)E:c| km%O풥:ɋj=2YcN̽Wr;[I ű14:c_/˜3c: #wX+1s48"`5ıΘQ9KEVݔ1ǠXN~F_xbBF>ݏdzScL9vs>s*1hy'_bC!2xtt(i\q&?3tBhEdđԈ˜ƨRJ_%c*/ c'f''gOTe X0fT{WM)7Jc,Q1vtfb%+V77Y;ѳgxЅ4TooJŭL)Ƙl35 @ H"?ʝ亊0]cz"8=̇1Hg,g1fPhzTx_1}cEg3`,SO"ڝ@d/GFcM̒ 8|x8#Nsb:T3c3Rugl3?u͞X8_6/fL~j*'0L3*?7^,$,1F3W˟1-q'cuc}\c^ycX"aF UG.+mE@r>IedgdR1B ̃:bW[q܌1˜9O?F+J^̈_XCϐ1x&6.('E)u^Agebk9܏ۑ_ 3;]ӏ*U_o<I/NX˛T:Tco0r>Y<>~ ]EXc,1qE0C܏  Ν[8ѵ "vh'qE#+ќ=味CvlS]JkC)2W h;X_FDϠ5ZQ%;PW#X#'{~C6WUB{ڊ:13n.fqEh:c,ꌁ1ّ?BNe "ƈ0Abl[ׇE̘&ϳ2?>}E~,] c@ )ZNJ֌5ɝEUlZ{-?m2?3&3־3@,b1tfIug'\[]X %1ˊc}cc>z2r]z_j.>ưpPEn̚8vwY9f5v;Ye1ZdHf0_16؇1]̜uKUVBIIw~l}K+4ϋ3?c Z6x I@qR=m,RAqL! !bR4z,U,sXk37.}w?Ǿ}׀1}W'Kd6cfŘ楂20VV P~Wnz]Ps1aLY0'CK:3^ Y*T!:I]wK&E^ATUFWh{`2ua*E?T|Kfe^*l!-cPK=u/y13ɂb9}0!n1b,쥨{̔!:)]xz?FTU6RN4Y;hW^.}^a^*l!=cXK s'\bꩳa'R/A%b=uŘ1uK%,ؔsR$*ک=UդMTLV9 <.ftaf4/D-σ]^*l!cJ}5;2$~B.1'c"$ƖWȞjR" pIk 5aR'^5s#s~łڗ"c~fwcwisF33Do(UN+g $}5jdTƸvUݍfCg,-o]: 3Î.c214Z:Ř d1 c5%,6v>fbLd1e12ٮIOjɘV؆gkl+W\TfyD?&3XQ^*A^*3l磧&cb$o*k["%AChXMa"1q4lMs^f 4_I^*2/ uмTb &v>zh:&c~ EPRKp0^(4e+`ϲ=+K%ƶK ' K%`kl磧&HIߦ FT=3 EbblMØ~s逹MY~y^sJyΙ4詣 cR<ԶJ`d"11JiK>DcR9.s `#RA &v>zhRu-1!"(gcxx%cQc(`q^*x:/FZ05x>5 ž یSdrEu4AX39Ns[|b%U$DFbRNT*祂y,7?xpXQMVLǤS'DPRLuŁSM,P$&+c˷qRQ_WdJl!om"Vl"wt/1b~uR bJl!Z:k 唱3|&6!xƤ{y>=w8Ra yثj-l"1 gLzmTuSlB,'YE03c Kj-SpN\fp>IZ҆-^6Z72v }d1C"]q/j%7xa:`oj|rCqǰB\ pGK1 ptR\RϰWn^ϧڸwxf";1gb`i0#a'?r \ђĘ<-i/]SuUۄ]\17+/w'܁H=2+wc,?8z䡼>MS"N{ "=k Hs8{!l,Ƙsc1X#.#pW(Es!? \W.lOXX!MEL$Ez TEg6ǸN2c7O'y{ep7;9nv-Қd C4%2%^C̤8,X f`{ BFc`~I9L(Rl?!No\!ՍF^QbB1c"b3N6lV,>Ċ1 ̝1m 33 Oy0j82HGE&'J`soM+9iv yDdv0 )-Y1ᖹ;Ɩи& ?MtÄ^[]t[VQmt\w++BƤ!F-c*: ),b˵1-}  jF2 "B}NxkBM8|+BƤ!F-c6XqUvA,cűUS5aBhJZWtH9Ovn؈Ê$?GB0VlLӃĘ;\Y_+zn3'EiT7;6y<;2Lq^1 y~նK%gA`A\+gh9jR >˼T!y K: sa [3%O F+-5Vd2ؖA˼T ywk c`ߎzܚIQ/vR~Q-9Sq;w }0e^*DR4tKrxoہ(FHjc 4bŚV`ҬU{v?3ʳį cΎbͻ 9/Usdi^*lAc}'sٔllh|Fq _;1v mehҬ~<~4YǷ(Xf@`wi^*]G"rΜPk` [ azKIŘ r?H\IdZ MN-m@~kG2"šl9bqbgS*e0ڀɆ6~FFĵ,(eÔ^k./zpެUYtG;33|=ڑ? 1ݟ ^g JӸTKރNe()X j 2Әv U#jN2܄};wzLR8>%.Ȑ^i\*ZCE^-OHɧB25mJ37iMz>D>\:.ݙc\*ZC}o#c|D~ǒ'i,ИGfPXl7lO4?*z~f*q=;,JX0KKT5dzi EqL1T=;3.~/FVf9d<.}QP[0٭[ҘK3m9.WF5&p4~I*5cU݌]ҽXhZPË܏R<.r뗟}/k2ݓn$ hlM 5FK71cP4/Z ֶKR)V؞cণtLF6#koxx{(ٍqklzU3+!yTcޏ^z?Vi%)NXj?5bLGNj#j,^1B& #nukU~I1Pqsey*nĽ+I^ןx (GixlC0"Р(ؐkYt0X\cfD NcwHhu\*P=Ra 潢10^T2R k0+hG\T͍c77F{5?FXscG\c͍cq57F{5?FXscG\c͍cq57F{5?FXscG\c͍cq57F{5?FES_rsq8=P5v /\cpq85 /\cpq85 /\cpq8DcUa?dj"l`ҳ]Ԭ3c'>\ڜXr,åJt9HXa9zKVwߓ$ ~B39v'h_T*a2\V` A2jVRj]`gj_Z㙌g-yB4`kݡ|`AK2'vr]-q8lyf"얏]vW ɖ9ΕTT7-Ϭ{,Gqk:,Q 7E!&y\lDCq!4,xTys(m#v=i&׺P`QEɓgBY lbmi{'=N]8Q)Z`RyHFDuuŇvW\Pݴ'$_rK{ׂ|͇jG[YkLO̳f!{B'gE,fq|vVוB$tsvrӛ5)MDu#޼U{,X.b!LTX4Y ApVDôP} bwԑPH55m(xR&RJVgr=0v.KE]eQgO%Mt?g_$ =HizX0 cØ6a c01i0 cØ6al~ƾlN113cØ6a c1i>1i0ߊØ6cØ6a c01i0 cØ6a c01i0 cØ6a c01i0 cØ6a c01i0 cØ4cy?$VXGfdb+X,{+{y\aƳjf%5?V9Hخ^;;ʒS[9)X-ϯ9byoܟNDO˅1"m#҆1"m#҆1"m#҆1"m#҆1˺G1˜ua̲0f],Y, cօ1"m#҆1"m#҆1"m#҆1"m#҆1"m#҆1"m ck#wFkNn6v4YW1hCv0CggcyV\[ڻ3dY S2677a^8]V,Xm.eNOTsݝ| Ry󤬅92 n74I%訔|׊3vb.n7uwfe[71 -3V,?뿜)VX2a c clQƊ4Hγb0Dզ[5yV,0E\&1VK==W_Wg>e73Gwߙmʼɼ4V3cjqƘسOd7{Fa+p2 qtTkbl-)r*\m+N2u!klEkpV.|M>}{gF:EZ[uv}Yax2~]CWf\upګv*}=:Ը{cb4ny6-~9o4R1/C:reUmSZ*}7n6EvzcɑcԶ//MtWjjū\q=I);wPԸ{c?$lagұB5|פfu{iUB4qCdk8~c c EW֠=oۣnBPzuUԮFmҬ_5xJˣq;~c c^wq)}9,d A/b^P{\6OIiUDnuxwh18;|.I=[ǞgXNkK j5\>;[ǃPVy]qp %GPzuv5ԙނ씼 g A/l['-1آwE@nʫrA{Ӈ׎ K It^ؕ\ ;w_s?؟x*Obu,q,"cݱgK8JbwlldVP v%;Edp |M8p,ܕca("[:/#:<8ǒ`c++.&EX8۱3Ixn/,&eeF`bαR~$;a%͊bc1Y'VA7?;#Rlǖձ%8^X*c"cc"cc"1ǒFcK%p]dL;RYe8;cDŽf1]q <&Ǫ_jp,v&1Fe{;6.J2 V| b'Gj/d^8Ɓ˻cv̩± 8n1Yq ZQwecbڵb"lJl/@4Ǻ+9V)1*s 8FtHmMG?7+ cӞtp8OcTXweYy.1:=9fyx?FcXӅu1[Zfߏ1!c.mPXӅuB S WdccccccccccY8*OwKP]dXñ;!c7p,tR4>-&}*E5K/X+E3f̃]dpY`p]dQ֊p,1vaccY 8<:&KX*c"DŽ&`1 ;p,^cBCWV}3=8z:Fã^m1Ey<&XWy}kp,^&XKPt]|iNlVU~4a?3ӎ<*1).c'cB4oڱT3r|6I)wqz?+okؙr~2fq#cZ<׊֊ ܏y>\X+ cG܏h;3Dp;Lh;3.w̫{sŊ>:XL8Н,1އc绞Ww 1yEgtρc<.28,08.28,08.28,08.28,08.28,08.([ @7vN0P'x:3xIx lq2a(b Zq:0m2t gwjHs/}%' ~cUS\L,wiN7e,(F=`ٕ 2[C%yEZ߮UGesaJǐ1ұ) 6BǬ_ol'38f]ICec$y }K^W;v1kEutlJsu[òQX5ɜCݵ]sszb$yk>2.*Gero};`(]XcSa:#`h1y~Y0[X0ziMxǫ<\%L>#29fc ֊ݯ1_&ϟ~+sǚ;;vԱ4g  YQRI'Fb`D_&ǘ;`(1wlJs81=sQjw;,̆⊺+HŦɺҗ1!'X+cќҜ͟ggv;,/ri%ҕ¤hP,-Rd=!'X MiN0996XA9999pT9?K^czcPQKzXcp it#c9cvR߱6 K_#tmOU9OQT>_`tV֖Zٷ=vrlos2o'8&$+L,{eK1-v֜B+O3_*Uc8^zc8^zcw|nz3FxO8cEFዖ춢59Fad1%rc/`059* 1aơqc۳xb\h}i{Ynj#mm_6;8|xyS5y 1B `؍8ڱntR7zkp.HQb[^m*8_2ׇqfDz;HoZ}Ÿc ˳;q/z|ı_#k8򀦟18^zc8^zᎽ_ 6isIENDB`awf-extended-4.2.0/images/gtk3-menu.png000066400000000000000000001336411522325530000176620ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ѴiL?ɹocXbKcL紡ˉ\HwcL˿̿[H^J¶aK^IͭޕbKͿ]Jɾ]E;~ۧzgŵɿZHfOn`ȹ\JgPdLF71mPyf]I]IȢweאo`eMeMij˼xegK?hP^LȽigdʻ^Kpapa##"ɺ_J221Ǽy.-,`J)((ŹƸ988XWVJHF?>=OMK˛eMTRQECAý»troВqcyvt¸nQDԙl]}zwM<4磝|_][͵ɾcb`{VEꦢ´gMiRpnkտkihu[OdU6NYobnkhbI>~dUncت}}|j6sV,˒y6g߲ġʍ|u+YGwo#M~cpAP k1(n1]kg4J;9ԫu'00X+*L*Z兏NNȝ+RT?LPB[%(\IDATx[lWǹau턦![)4HvG] ǖ#Hˤv &6!l$1! L)-y0AQFyطh};תvlvAs;2Su9=GC^W(3Qj,eoP(3KmذYPd#s/̺aC 5BJraUh@cf'}ҬP( }S5fks^\[ H/R¬啯K=%y{}[Oagr:*mpR%&b R5Mj *cV6{XEZ#SCQeö jw2`ۥe".@78`+7o'e XE&ӘVȋէi}V(,wR5Pe_JP&UD^d]J1p)4g c2R]S1f 0.{f$bv,`2E y/oL8#@a4Ym8)a0,p@ r" a|Զ#* `mp,/qs(oM*OR6L&jLRzj4iK1c165"թ.jfsZ펒ӄfјN!g1]Ȕ6_=MX]ք6duR.LT>6ׄIIjڂ]#Cw W%mV[ڒhFg̴v֌#0Z̧4Z-mְ%ú5xP*u9"bpIi֭EUT&&t_Am.dZhccc`*Ѓj]_rll=Y: @04mM X\F"a,T#֔vɮhj,άD\4VٺufrU!'\7h W)rm,9Ƥ3UL;ބg0uR6&`MGl.8Lfc1Pd*"f L$'1iI !_%CY{Rti3+ 4*jUDc{t"'渶7ޫ) ~$(j26$])$& Lk39ʭ$gymH>k"HSV2%HXvʠ週VeJhE$Rc>Jpk dY$WZi>Mth61̗FNOhJcC+U{4gl,*M!1V|Eq#XxWuD) Š&Sd(AO]FF4OJu5b!)r { F<ɟY擑:T6bQo co<+Lj=Y`D= gKl4FTE\JϓucdHSmE@7X o 0 5F4E&Ƣ\# h6b`f10e{h{).L@Sh`e5bijɋ}+rKXW<[ʪh?_I&G&ED-+`Mt ]!>(rJ] *+P>+m҂5WُƦY"#7l|~QGpR=Ip6 rN jHHI&(wfeLaE SP&v>4xrSqOb W2(fҞ cy=,C%ucYRc';PԩdІ}1yތ21SzbZ%\c?kX3~F*r *)y]Y" b- +cɜ%B1[4՘@}5GPآh T& !低ѱE ƒԘ┕р RXP(rkICG? ʥ/3q2άnݵos矖K<Bc>CcMm %_kor8S4nv}C=} q>81ї>߹O}}-}>?2Gz>}h&gEGfF^?jNON.G㣓'h >=91L48y_\%fG>#[c"lz56˵A^o OZGsZ(X}};{|L|]t;3xU{`rYɠooQ/_wuى4ؠ$l;vx[aXChȠJ pe:FQJ0m5y,9z ,46Ծ)4H;Z׹!sγEE~xspU2CMtշsYg(M!.VpOK)1jD"Ak7ʴXijME=0h-4H Aae`~svgM͡4?;?ZSㇴ# gAzy:_)spU2CMpiVsv_r|C'r>:9}<ƛފ~5G b#j@8d]񵐾) ^i<&MQ̹vbgwpGqq_\wV\!q;C,4<,<*&G8*C Gvnk\zQi'2cW dBBc-OyaO>*}Rȶ7j'ݸNc3 9lIh,I.$A\QHsM_ ҽbʣ16mNh,D4݉s]ɲ=x#ө @)U@r2}!gXӟ[GQCf/b)طbz`dVWh+?(Q?͏;%޽;1Acl`nUd0|Y}d`6Y!hIs͐&4(-jˡO1GRxlIzwh=La붯 "Yr[PHӑ=#h^'&6y"ݭ 6_h`oLLq=H ŲKL2d,ꎓ8Dp1DV-¿$xHtC:Ej ɝ"UŽbaWiŊ -RcwQc}$C\dYu1X"ĭoBvN:oȂnT| Bc3SѨM㽏x0G p+;88zܙu}Rwh Wݲe"x {Ř*N(/p%'b!{0j ^ee0N5zEC{4p%n'/#{$+/1/Y ꋭktjj11"1C[YWr޽[Cn;ؼH͛WߛxpkbzիK8?d-AnB/m "4-/Ra\8KI%%:߇5ԕFc]^/ۢաp["[ L޻ukbL` P 108Ox!Sh }5|guz<: :=X׷4ohAcYxG/r(‰ג-/?oc[$hc6XW\ Uٍ"N$zc1}ܵ~޲[WYů|#=HDƢ>[cd'`mzڃ//T݃!݃Ay^LvSМMD_Nf "/X][h[ Zic|{xƶ^zOn^MTݣ[v[,FQIq$CcwPa{V\'Fh4LhH""Eb!ЫaW{ŕP@4ID56yd{Sn]nU_{l[ Zi ޢ*b7iE::N ;wn<\lRr\ Qd(>cn$X,[oWC}$"-&Vw'X^8j|YŚ5+z ?uků8(n^EƢY s1c$h!+ۚk>;/^g.{~Ș&زe$۫D_Lמ1&l}H+5W. ?!¿DE) M\ VɦRJyˍJo333Ϝ9; xf>sf0NO"{# J~w3!ò c?i±Yb -:iX= 7o=oW'KƱ ̳tdqc1 DŽdpX4fW?&!*ciZݱ=KIX:<|=@ 444%B>zݾ>ʡ#t ݱ.md]]%Ylsdt ]c=JƣA0::NbD\'18c37tdn)`48::868]]==gJMG N cwX79?? 61 @u V)Y% ::WvK7X#tAE׻'AYI-p.ƢIe0JXߥ*O\I1_fPbdmm89ڸˡkgkHp^t=яZPz!!נñ=2螽(Xz(J:::2|>Fyp+p wEW79TVGҡ"po2Ҍ{G}莥{Gcc{Gcc{G&;*.....%Xᵧ~{Hֱ?XAq)pL˱pJf-<"۝3nݍ<&D7[{Fgq ,r̆eHhKZ}{ſĂ$T߶.-rs=SB3PB3TCU4^ՔŔ",x!IsHY Hڱg߽xf|h1pRL("fT! ,:C]ñ"~'-jrk\Hk.b !1a@#NYʹ A ԂM0kKP )CGŽpp=$ ̳lDŅ P^,!`F ac'RՋ)世c\ ,)q4/OiRhjl6;{{Vi0KΉgsX01\lT&SNќ(UMEjEi`%eZ.1$昲#ל WU#DUE;γBUtiJJd+Bb&EPsJR.t[Z2 xG+aRp:]r (ІC2D*@xɒQJes46l7X;(N ٍ̌NjaQi$K9f;Jh 9sr,b&&6|4H<-7eŶݎ=>Wt9@4>(Ĵ_|6cbԛq,uc"*Z'QYKl8Vbض8 "J MD\Z6Q~7z݋?(n-N}n`ݳx+GmXWdl# "#EVQ]Dԗk˙Hi`>GTh7m> c&\ÛdB,_-p ^ Ngk騅l}}R4feӔmя!Ǡ_o+y)үc?w/~1 18xh[,9#۠F\\ wQIC%KلRbFTh@FP#|{ h;0b&\`AV/cbYNkְo KkT;/$[$-Ti߈ԯQܹQcNCawc%Sb2e?xį ~u8;2~mٸ|<1%jD6:w&5aZ~IS"A[էI%0p̤Rqzb<"ms_:4 Vfq_q9#` 6ɵަ& &I`e;i;Jez?iQEF ww2th~ Wc* <mI&St͟-bkX-8WDHh:9.ϗGGɑ 8pln/=+&eYI2dqx是Ϛ4.MK$f֖l m}1VzzmocqrlLi<"m|l{{z\nXplrqc quq,:/C'Zs]9_z}r0Ϙk/z)@)3fKb=v\E̮5$¬ݳn\.nĥ`tn,Ȓ--bw{{ / ;uy>G;av{kn/ʳ\FFKlql=[3}rlVxhQGuUO %bb&0Z JtF5؍yZI9g.Ī6'hwe;U[P^^PiX,ڎ;bx <,"nۓr_BwZnZ(ǥ8)/(,J"݋ PU}??6EaaA5P0+KbsnoݽVO5lܤnTQ.GC͍٨GwR]ir-DVO$Vp$0ښD6+vFepڎ3w@ki!s&[",(Lcadppfnt08oTRxmq=T7xn$GqԍʘE3yKb{:ɀ` xNr 4IuΠAt'UqWgui|RZ۪l,+Y7ơʍ jG$ ULւ6kzYfx݌v96=Ӆ1V&wY 8H.yE۔ZذZ46m{x 5EՃr̋}Rf!`{=D pZ_u*x-gX.j* EE@YЛw5,IdDzEI8dN@O/E(ڞ)u[Jť60Ex#c$PW= iA;3A;L,u(/Q #nB>U!b(C?~00 hg/?* 3ɋ6cEYqtx7]aF+O۱)R>vp81 &1aG\ Z:("9DZPT"`yrU{|7,ݱ_ JRP'A hUC>Ir6ϻ?|e' 6sj,2n rV9K3*E)S{[~)^ձasl?86Z8I(xfε^$$X>m}sQ/`Ewsq6bx?67E/o3xbkgGձGO֋t~ts2=˺.]*7'p,q8}|{S 􌯱<5k<0ghr3ܱ"Es8EEZ>c+9jOI񂤔)8>MqX. % ߱"%ilgּ" sLʝ|ŝgc7 Ddsw`=}[y|ր02"'(V'EJF1Jc?h=2~o5]Wrپnr~cyGN~_>uQ!XtIT0ur (qXcΜ$;E0_9cQ<1 oy'n* ,, Ԁ?~evitSq>DD|ZSX}xi>x]ic%X2M5P$qDؘϱq"um qyLmם;o<O*Ȧ#͇ /apl%Kұ{DԽ{C_ֆ2 _FS+˭nݱaJO"Lj)Z @8>/ Ô}UQcA#.p;ϠLFw({ =J)AS%c}ʧ}cu{)Y$VtJH^[R%R+ѰZ\媅 'x'` x7RKT $ {C#5R~Rsc1?33gΜNⶁkivN2vj]GMu=DkH)hbMS.KS+)o5Uc;cL˗4uhmY$pEN)u^fʱIKelvXcsy`8&50پ1|10g>:ocW+^T陟i^̼O \5GsU?  1s,l+~' NXod 8&wݶθ'BQ}Ch @Tb;F:cr')`$X ߾cZv|ccEٚ;;/B%i8ܛe6zq?D܏J@);&+$ڙ,ࠎ"QZ,dxXY KMB}fHކ[''[Rm_D<O1&Y_7!E9JBbv!{h@ұH*z3of^ ZU+Iq,9VcF3Ri7ܛ էOc+m##6oǎ4@ 6Lb7$pY{IPG&{H(=B`'We+-c[@0rV_yEjN֫yW]sLc[;o"ڍ^}1-?oacb^gB'!'-B3H# q])Q&zVtl*B1mf_]aW^Ul73͑]8wull\f 3ԫuXѱv `U^뼤9&d`㉙f}EjSkK߯+2q,+t5g%޾z̧mYYfپop Y#hfO:pýd<&M<+S.a},񪺊a!<}o^6islC iY2Q;VF<^dܱv֖SׁyE~wLYhu*,ϱV߮Isao޺fۡ7狇ճY?{C9vu8{̘Qa98kq>-ؠCEƱ/oєG)?R=x;KXܱ[sl5\Yq+yug>~.-9n;Ǫcq58ZG.œhXcִǥE3Ή;-v>C4wx/ȸcs_GG{jW);sƱoDZltLY>w4^;U"410^!mf"e<S XYqGeĊ[0~JTr1x;cJDʼ!3ԷGuʥc{''[:VNKd$ MK 9CM֩ctO‰cqvJvFؐ\==1(c8s|Fso q]7x2Z!qWSq8ggEı/0 ;cTϸ03%yeki$%Iqb_ϊg1(+@2???TM u*Z,:vl+btؾ|7R%$H=Piß`n*qXSAfիW33 LgUQX_1d!"<|AQ"0 )6㱎O+cScvv,gE8vzU'c\qKrNX<T1<3hc+JJ;/:v% Ǔ1ٽ>}@cM=1-ќcĖ\#pOp4;Mrd<0;A0$5x,S%圶;VP=,rϽomٞcDX +Mw5:h=^x;vtӧro՝cYir o [C]><>X\Pm+ǎ?B̚AóϊԱDEɹVƱ';pyNʇMwW瘳7i=^Mi}ÇtVrƁ|4;kָlU\_dPLrG1oC9qːHI>/jLIc-'LVرK)ThU[)ɶށc# . ő]}(;Iw}A1"T|o$n,FbDƇ'zp1 茧U(sD﷨sLΙ3EcbA̋1g5tl!hc4=Ʇͱv{fnҹ1kRgQ2Frh98yloڪϢWmb;w]7ڴ7;7rlrl eNp.ВXǤ5y,="Jin#!%Be1dUB/JG:9dE){= x'%1:Hc[;֭m[lYoՍxA>Yn< Y>}u5_yV7쥦S:AXUSUk׏M^qLzظnmqQ=6{-9 q_$^X!fr ' h)2nj7HO+c1՜hzvshZ0Ve; LLWXf(2*1l;L r Г)$c{fM#p˼En5(FRf%Oqo>w8 2X}xgcў%ZշqŸcױc9ffĠMHnp LWH{G9c1kΕ:Xؑc:6R^<X5Z-S.cuj*ӧ*TH]Ď7ޥR.Ub=#̱J(F;wl< 1dGUXVn&n&;Z[m>OP4 @-)OcioLWǭ.kQ@)7bdoBGqk(DՌ).,E.,<(?Ij5R4}Ӥ뫾s̜7˰ gΜslߡbqyc̱sNñT [Z/k]socs|w0~۪eY[رgy9k Rt57H,6 ͏mKX~MICIV:+-e [hFɉ]d Xq u,3p*rBYPHЕC*mÊ R`8A瑊c!E9Ur2(hP<#9le +udĭ-XX\5ñ :96Tݙ,Y>ڤGJ&ٸbG 3kS,SQu5ұm90%P#@n%UrPH9idş"(X3grcˤcbGj?yiάc]K7:*AsnOڻ8b2?? VuY]Kn,+U@R J7enޖAv+F~kbx <sJLïoDx|7Bo ҆<-;v#5c<ۜر|ޘL\>6WϢ'pl x7p+Ex|7>o MJm:ˎknKS{drlR&#+ҀfιΩ>}Yɜ: giXtK=IHum_juK%u4cj*(& 5`ݑc3S9Ѣ|Hgx[9}w/|o+8{a+pTk?3xw= Cybl3h~=F7ί,s:{ ^ɦO|R/;!z~pL_*< *5NN~O )Y"cb1(Ա} oK]*ޥJbNJ剌@mXm-JgddN1)RUpLo2\UXSSpLw2خ]6Mm)E_8H OIͱp w 2C8ָvjtltLx\ŔDܸh6Ȩc6ek\c;5:s : qp`yq);s .űir Z(v{}C|1j8fs8l +.űZծINJ %ǚ?DVoce1a!jXFjרcbT ^oS#cǴ~˼c%]c5:v0ehURwl:t@!4-F~C tC—md|[i mZȱKq}M_˖q%;6@s(17[t+vLc2X\s)tǚ¢w6ѱ߄>?RguLklplޤLcjIw˸cduʏOc&;纮^o ظ#c̕+ֱo{σFNqܻб=-}TNJc~`5}V0iR1o QQ\4~˒{uOc-=ڮcE\+6q}~|ɷ*>%hgL$BT6q߁[Dͼc펝:MrUU/m_.xv_8Bјi NC&>MIձ8f0?c9E~nN.ʱ+E9fNZ=7<މ>F~D1#F~ntǑ8ofFMSsީ<$~T'?/5&PkE}_,ʱ/^\H|=Ft]48፿d#b?߉tb⑚c*CSs, 8&(L/2tK`_F1jc _osE|ㆽ;%/j'8eܱ'"z>28 92~/D7^.=Y 27c)} ͛!V)I,ʱXt:"c1^/1<XM+Eԫ1÷?FS?*KI @ % ]RbJi){ GcP,UDz;h*S0"Pvdܱ{c/^72e lP>W9CO0ӓJ:#ܠ7}Ah)c>q X :v4UDz'iԛGMǫ|4w=6#^&^iz 1cj]5S QJyJGx֙GRy6ǎXXܻT&KczRx7bx"o}rRcGSu,bd;b1-/hpTQw%fNV:X11c|}cl|ʖ9bchF8aI3'Ʊd߀~dcu-[ ӵ< Vcuplm~ q a`\jl!Xzb  f}-;#K۹ "[ ފ}_q/;m`Q`2HJc#}MűZq,d5 NKȑRiiV,=;#m?c1׬=Y==Wͫ8*72\4au"n h4*뻑@3D%zhvĚȷ'yPZK[<0ť \H1x|[F;o:&o`dڵAW%s!PK.9ê KndHt3;Xb ,eZg߆ݗ.Sw71>oHqvUHc;dl6X;4hЏ؆;fjHjn=b\T>cduYD!AYc.5:b+rj>:\fDAޑ'D sd',QM~u:f'U>V$w$=+D&Ĝ8&.I-Ub\c'.Q5·E9,h1BpTeb)UNR'I~۷պCo<=^13ls^+w uŸc*hN (|CP:Jk41ZsVD8ε>}L*Eǒy_`mv=15ǖiʹ;ȴH.i.91͎[|O-O}. %bx7ͱ?TBBsaTiB`u$9J)gGR A1` Lj)hwlLcSX:TPq#›p2'k?R_~ѣqc~TךKpp֒%7xURb{ %%ڐC@OO`IQrЌi %ɐvRj Ic6f Lz+;^OzhcFtOگ]Ģ7;o]jhx;8+4Ajhh*?u\mBAvf VcWz@rjmzHc4N86"{/xhZϰXqrc,.;XJyClm̓fO{62~5\ V¤ak᤯X#דuݺWe!g[NNaam ..vb!L u~6ymoj\{g }mu0CEz av f¦%8 ǜL{ W=1=05ud/ ύKV1Hb7$39>QyVbj{_@'z);6r%M G0NJؑwxnTnɣ "Onz w?Md*V)Tf՘&BtKj׍ϣ<b%|])@ }vcHg“< 9gfNۡtZZ5gΙ9sf} BTUXJ+pMxrYȪ4Z~Ύ2GcxBn4c{I11a*%^T]y[dvw!@W8ERN<^Ȫ8tɱR%n'm:&>Q*PaWk_ M~(d"F:HQ9Nf.E yj5DcD2A'tqp$ z\Lf:&TFZ.5'm@%,JޤvšhKi$8D Esjtt՜GLrr£qF+*Ըc5^!P;,J4 rUA-(%A[s1ˑMN*S VA$dCtA7۬O+R B< VKrX=AY/.{[r?-k95YMfih I7.zg_JhdSjK=i +ܱ ֽV̕õ6|.hLc_cMP:GpIkFc!5s8vBnDh'T'Ğc_CN`t|+o?+ZArP[؎FWVgSou)NdEݱkF9j{VcZC[ іnjVhh?tѽJSPvy}]3ȱ*}g56"G#E4$Bz1e{ +)Fb>^.X-tU ; 5ю=ZmVk:l%# ?Ulu2 -R5ХPe5|"tת40y ~.c{7>a?r묱 ^עqQlHضuLnKY?5b-"ٍDzqY8v-+Ǯ t g c;؍DzrY8v9 ΋t1ے],;Ǿ±˺;o:f:&#5~d!KLcpk}m:f:& #"Y%! s|e11ad ?F :c;cu8vttLY;]11[c'' 1߱K_33?z?y{ 3Nw?s{yOccBH?vi?wضzex"*̱.+(LLDpr*aE#y!t5Vu1 :-"3ڱyDGo(LqLXMy8(ҫݓ"-4.(M3ı{Ȕ҃'O#]+a'gO C+-Xw?OqLTq]hm9g{Z{Ѝ xsaՒ"G.sldѺf]>'1Xh;IQYLgu;:jcO:t${J̜U1%} UC<ģ 0q@}H`NFc->Jƞ+FvoΝ"}he*c NëV1I͗wyc"˕U ;[2'V4haWsp&vOi-mE/Q~+N6sg{1,od:c$=[Y*º44xE2*#%Fu/X4EXC[J(K:AL ӱ,r5М~lأM nS}>BrcXB7+dLt;f0kxv1Hk8y++nfE#)s+hL;VM-!<=Ba8bVȇFXAc:1e?_M7HM҉UAjY"C%&,?-kACp,XDG7ۮcH%Q7x,ZIIɿ馠e>ʞ[1\a$}C0ǎY$1ȢTdXQe : N$rD܉^^1[1'[XcH$Ju tLcx/ "]J"$,Fl$c9A9T8m WԀ=07dx'}ıH&2%Y|Fv,oMy/x3([Q.`*lnDQWآP 1joD2$L,M-C/=c43S8OZ[8leI$XА pXf`Pcqx 1ߨ gAtwSSʔp+_=ږڛmmF;)s8"8R94vKVg\-Hto~{Yy`cis2Ѕ+8B5jɛo>&LdF!Cc`U7=^DվOWof;mع6~80qh@`qw8‘:6['bthljJcoɶr38K췙׾ǷoM㘇Jl&`mʯlER'r ot碓0c~?=қÕ0L]LQTaI0}'$ k1JqK^_9d74 5֛1F #YQ標!J$?u9ezzۿ|prvmd]DIx%]ٹrf˥'OnKFu ,~92~+XoʡV*Ednڶ؃F(mD+PKs%=/ ssk RȂgG:;}++='|Lb*Xz$&Z%zߴ.IZ^I jHLQ?0r%!R >XZYقjw?MeߵڲJ12\NL 'Őy5!G49Iahk\ 8^1edr +vvw~֥5'ZG?vB9(4O0rh V!*1hc+ {wx HtMW+1i&\3[ tW4.Î2ʮ0XT^S0&鳗;ʒh+rUaVhiG3+~g"_˜p}A{ (c=zo+rL,?caLp 1AC` O9cfn)؏1z3s1Θqg3W1gL_q8c1}qqH7eГ1XE2Heq*aQ8c1}+%ۢ/x~L9Eqteo~{xQcƜqteon'#O7 w͸HY7Y.ΘU1>LK~mW7XKѰp1̇X`V>3>˘Oon7a~=+nNyo\/wf`4,*\%>{{ƅr/Ha;[R?[]7g*o[sE;ۓoD ^b@8l?"cAyY.#b ke( A'ŭ`Qj(d,K~^/e0cʘ5av.{2y1Oa+v0!;) $; 2V9hhfsQwE,Nʌ%__3c~7q>'14og`)aPzlFâu c YY0IrKdPIb9?"f5} 5{i^חcCC`;3+{)[S` Fomh~|J{+.r30hF- ?_&0PRQ1:״0x66/ -WoZ˨g.P乢f~ߙ:UNiF*c0D nw}A? _& 7fތ}=" vsEōjȥȪ1E  /(c7`xlrU*3VzK+cmJe,ɘ c˱e KEXHcExqƊflX Ӗ1eϣFQ 1;| ГO7h @+1kĘ.r2Ɩc|5Ė3-,l(2Еpʐd#9c_:r k0b)2/)jx@LW|!ŘE7L-X~Lfl Vبc䥌520S7׏-{j돎 . YLQ8cmjZ0vy8$l-BZi?vjqcm Br6cgLl`yop:OMhPa!}K B@1@Ӳ7re.Vh>:21 g3Vcqucu0@LdudP0@INSb̙X.g]>:21 g3Vc1ƬjOMj:2` j&"d|td6cg, 1,yբc'rKRXCIў-,Xl(3v|O=40Vc}A״ lk=vcd8[-Z:21faPjblx3h0OPuo!61q2c2'.db *XZ;Y5YDq`)hj|X \mWY##xFG̋uwcY$cԓ1W:91g0\HȩB/f6[ ۣf[.Àac-Șҗ)0TU` ؍Tx!8JXw{G\0vJ=93(a̋ZoEqH|&⻤Lr6-%g>m.23.P\NQPGGd6 ZbrXL0%Gt3~Y!=Sx4k#+61'&~qmB-Kq:peeajy ;D̈+pwѣMV>rQ|Lgi$ ޡ$-D{S[xD.:bq%S͘9﷬!;kVo޳&4&?ع,xqd)0b}v<]% 8*%}ӫ:Bm9->=z x`0`K)iL~VH+a܇b: S쫎qK(dW9t`=)㙺@,2aDߠ-W!c'P&=6ةbmt6?:\83i/~Cx`P1h `,#~$={]א=H}etx[`.y_qvƉ `_Sp(k;*5pZZ=;iSc z~!@}3'X=GA*/ƔF1R#-vM22k7TʘfnS.cҖEZ[y)\y``} [/bmiƇJ>ދF_JW}E1ōn‹7G/˜X`Z%5gL;q*O/Ֆ$Ƃm`qr]q}g4c ^T?ډ1(qrST@hf8c$X0tR p-2Z9c1N81OcNp8c1D3q*18+RƮɌ5sƴxГT.gFr`Dư+z8 a,B{*k5v,bZiPXQaG#iǘvX9c̏䌕Ř%][:fKfՍ+,kfe0&ͬ ZWb b P`j}=N> [$tR82MXWHӞxS%T쬧] 0?c~3Y<#9:I>k$?bF!̽;3/e!y֗T*>1(-'D،}(<)}4o''KeѪ&Z3ٯ~3k";QN!3E 2,1o1&4҆ ;{T<)$|hӞ(g%2b2gdg)jb-ƕofV.c!L.a~AL=˽C7[<{{ŏH%gYL?x4(۱d0-06Yc'ת600Jbȱ^wNk@)Epc܏b afAi+&V O{,Xl?l+>|bIbS Xc5֛nUCE.eG cpqaeŠyZ6\5Q-Ns^2VJ* 2QAR5Gяz!V)bk{i(س$*Dq-h>!K[,%1Čm >e;bHƲ^2_`vƳG>Nt4ĥ 3|jT1Ƽw0# [R}Se3汽tcNƖ9o-%y pD&gHq,{scjW}}166l3fzXy s>K0 78*-!̀)$O,` *ñOpWs?tˊMxzby)NS WpD 8߸gze[ zw$dzqC0p>X&NjlQ2Vfu>yz}Ŧ80mHE~ϡV07VW(ɽ̊ %qۑ 82۞CܽZ:;6j>==qeV^`X]"ؚV4+D\{q^'zI\g柚U'"G=Jeiz0p1QZb{ƛu,(l=k `X]$c>7R Ɗv&~t\MmS;;=o9wWA +dLy)+zƦmF鸎P*VڅTϲC욯4}VW8ɘ(b?0Hxx^{}H1:eW]7V:^WID_y_?ض Y{OӺpvckzU^dS0p1QZUk(b{3v7F:f^FmC10m>>hU)ZW8ɘ(h &YےQ Jg'Py۲QUiYlU>+M:u-%'XY!u& Lڹ|[;1TbqkJ%cђ&vD=U]߯cdLX͉ϠEge:T{-OPM @,,c0v1{`vpāV>no©"33c#R^qɹσ?[}EgعA)Xp552֠}hŠ2~X*5^) c@ƚ, rSd5+et.̘&(W2VB~(/_z(/1֪?΍)xg=ؓ'3Uy{oFV&)ScZqhy%ckD<_* 6uaѦSQVg҇dɔ=5ÞLʺjK%籍+W4w=EvE5wWKw\by/c[L߼E3KCOpxVK#|(2֓I+5|1HΌ˼ccĴGsA1جg*4!j:MlIvu=coM2&L1Qr1LKo%;D>j:MlIvu=[ dL\&5]z1tMlIvu= :[ dL܌&xx)sh2L䣦ӪĖoשzӠ5ɘ8IDl22W킉|tvmuuj4doM2&NXUWCuU)zglhJcURHNuZ)EuElz-_^L)dlhqﷵX-mhf<3QhIpū::aRJ&_9+ ,J*2b{}3%>_r7[*w6 .L ;4VISJ2vݺ{/ԧo5$1 Jԙ<k\o73/go"cSg>J_eloo-&^#.ťS'1V1qƗOE/ÊpeȢb͛pǶˢ_'^bK6fl09YتYoo`bo-gE`p?`ٜN3+&Txҷyf9?OnDí.qo%Œ^}3v+b'yԞm? `vB685!̬p1~#"o?\Kw#a7dLKF|V=LԬp1~#s~kR5l5c(߈cR1k.߈cR1k.߈cR1k.߈cR1k.߈cR1k.߈td,P<_kͶ3]1~#ғ;1;V4Nl1ƌR.p{iNƸ g1V˜ccc"4b_/ƦV8vi QD)29A BRȞ*ϊ4ϧdRM6O<'~ )T'OXy AIxΞ s&!&څϊ| 7{n~|(}qly;y9c¨ZC"T:UW43LZ*Wr&=+2>9/esh1GR) eVlX3y2*8gcL266g$$ [T1z >+%8shPxΞe1VLy?pfj>sX>EpcB>08V?!灂Z*\|=+2g so9#}L>籩E8/t@|NcLGH :1-@>̘v|HcLw\I/;@eym?;B{߹WBzTu}mpYڵN= {}99D@ZJ CgM|7>m'Hl^]Py=g0D{ԙ9! NZ'{Ѭ+hR@Pga_.#1?cڝYQ_K#Bmgz!&TcKtqʍO6-dH0^o.`چ! ۉ{4@*cs}Qo.c^ $@VG$dIw^0BgWl2)1v}Ihj|"2{_$i32BiB0*cƼ@5*[z'F)gj;vZ R5N勗$&TcO%0lv|V|:UX@Z̘8P/lsH lW;Iwr)t~eDƒ$5 eE)a16N24;{z=wNMY1RJ%c+0Y \.iaܢ lrYFw2cL߰8~k\oC, 2TEyE-Mټr}(k:&(ubډG KNNPia"!)&F.ah~KΧ{"1o!_ֺ#ꁓ0!cjt+jco>4Z7cKi*NX@\RJC 9TQ!9k/ҽ$`.Nta֊zXnmc[ l~hf18 f7 Gu쑳X(crv] '18&8\p\pcpL.p 1^1:\!ƍwpp yoٱka*cR>[7n=LcpLcCg_!gESذo)=ޓf7d"M9\~.)YcD(z ldž~ˤw9no7Y함]tԝNU21:a7j8j7S~U$ٽt*z \dž~ool):yɁpN]01:;M\jF IbfxɁpM=LcpLcenD[:gu9&߸-1c⥳EUs좇pp wl73\q~vL'6cβYϪn f=LcpLcCfh7Zs5p|\KgY*/86^18&ձG~c*c>tlcp 18&9V PcpLcs2,/Yi+ ɱ-e O*[Ne))rdf"SN\c#92+-+x27_o*sOfi1 8ǀ\n8c`10Fcp 1 8ǀ\rcs0? (18KDZq0 -8ϱuj\q̫X(t8ϱӣ}2)fws"bɬfؤeCc psqO4:X3=,Mc+F2^Ъ%,vYUX-Vu8 ;~fňbVS9aA:#"HѺ؏-evCebX1wX;',(qݰV5ױYD]ΨFceWs9aMz?!a5.V-U5tY3cѷ.b9q7 g-|n.'?>cXQUINI5Cgޘ 7&]2KVJF1ϱ{Ч-3ycbXXgNXPVSJ'ӌ3R443ycaagV<3k? ΂B>t8~&8`? ڱt{`pbp7i pl$NJIdZ*Qm(,=P7VVĶ͕lTC Fr,$2pmUɎ ,^ 񐿡2b!^, }FE$ |XBHOc~ŐϹcc8&8\crR~{/*cҘR˷5sֱrpL{* 8c|+vYS;60au߱R.  t{PaZHJL#F3N5RB!JCz.^zw2cigPbC3F:FuL4s^uL48RI6ܻ_>昐.p<TDǧE,jzˬgڛ38.똢 'Gm-ȩl6%/\ DzZB,Oln,su>d^-nHFJic EV.rĮD*pUֱE2ؼ*/c)xQK-Z0svLyxda9&&$b"v1{}ͱֻH'c2Ё!q򮭎E/culX:8& [|1aUxr|ppw I2wLiep=9yCr}$ULaserLK,iraWc_٭]<9Hz:(&V,RI,j$kF_c PV^MZH-O qsAu,-IX m1WPǴ׏Nmc.2D4`\#c?\c]~}T,=_q0q|}8ѱ'{&ٞsY:ͤ䒁 BcM 8WƉ&! ZvZ|_ FwԱ8v>ul10`Oǜg3a?fccӎ 8.g:&;'c"bDŽIcz&(?چcrLt:V_ 8ƁQǖscQǖL% 8`ϱdp5Lb+pqNXj651sl|He251u9NcLR$ǖK91}q^q>JBцcu^1/c[~֬Ϡ-1sI fb<]+O }CF#ZG_U߇ĩ:ݻ@cձTS}y`1Y^Ftܠ1YzyL -c=X$T($| ǜ1V~p,MVF7,'"cc"cc"cc"cc"cc"ϱ; RyR1/rع`16,uI{<:L{lso1'^]dy0 =v1f1v+1E:,08.2'p}z:&K'c"DŽ ͏yř6Ԛb8Qᘳ 1sRlcJjt8yc$QLcZbǜŪc$Lc:Zzc_Li"1En8^R1gi9f4̘m8VIRy[ogڲcK<0["2-Rs8y; !߿%{TpDŽHh^`kkHf|=ثc9LS4SStֱ|m bp;fV3qڱWt类:'*< ߱z2ݗ{n\ C@3K~y;׶8+.օ\ÖvJO.x Ľ"VdTbm5Bqݬ$eQF/d~Ozb=ٖ7H~Oq*}*61ɱov188=d`R^c,Ε$XR/̽՜SDXR"Gr"W1A'X`8{紞\G,1! &_c葹}ɱ+i|1\i-\?K-zޢu`u]XƧ|>WpLp?`;w H{\vll LELOY.nv%1 VC߱Wg4u@=>{0Z*w=FsS8Ů}Nw)?n6w>JwEMti-tc_1u~^>"b^^_)uZr쎝'X)ct c tyӃ0h|ws%˫kwEs:湿4~Az?2 U~>n&*Ìp }"9V9cLFܱfu,h1[9FC~C0S7+;(vzS7c̃;>Jcܱ|1Ϗkz{cz?{^&<" ;6Z'r:>J#ulAb F|ȓ%ee~lp} WgzGR0Nusp }U1LMKQC>Cı:6:|*Tp 188/" %98ZBĸy;u~qI~{e˩~B~3o[-nO'k)9u&0Op1xlPL9m^SVOVL}ծfjʡv-θW);P@-p 1P @-p 1P @-±*p!@xjjQn'S$1ǀ8-ϜiOgv08\ǘ|rxܫV~ӯ/:[snH_w<4m gd-DNkTfWn KˊU6cEv Kg~);KZp ){^k_lɾiiugcm7#nu▛=Nw,2vy|/,;;^ v-b8׊^P73]zM8hcUX$ "S9Kf']~ ]1i`c~~l:FD++HN^ǢSuz`l0c LvycKpEVNF,:QQ .]:RĤ0h;Vw-Ɉc3n+ϻXvkEF>#Sڵcx*}> z֧:mZFԱ2_8/z9l1v]1i@<p +8Zjc8Z<Ǿ(J.ѴIENDB`awf-extended-4.2.0/images/gtk3-plus.png000066400000000000000000001546511522325530000177050ustar00rootroot00000000000000PNG  IHDRcƕ9PLTE¶ӫɹwҼ̿ͿocXbKiL?߅ZG歚eM؋yiȺމ\H¶ڢ~]I^I^J]E;ά{ŵθ\J]K˼ɾȹ_JF71mPdL[HdLǼcLyfgPʻʐoan`aKaK+*)<;:ݜhQ"!!211羡fPxepbŹzfyû̾FDC{hŷ³ә~MLJwdť`NüċWWUL<5~khezwt摎םcbaΒxTRP~{xuSDpnlᴴwspr\Oj]5LZ[ZZ:fߴ'L2X~fUإɑۄe4׬Jua\YmR*~ȸlrpe{Oe|~ND_g1ouїc3LMǭp<ϕ 6)V[NP=*4Pea^5vҋڭr(obEQioaA;0q&ôR*%&U=v1|*إ!+@Kp]!=!&u|̩|.ɒ`*YY:c/ԣ|_=rs8jss]fB ktxo+W //%ՁE9iEOi rRm .Zd3CPIhuyѼIO/2습T@wly%ˠGc}ı>J%XY02;p'api@gldln$q!m% )l=UhhQV -RQ_%C,g2ώ2fvRY_JctǺ(}^DnnYÎBL{:!8͉]x6m e-mx0-nHkQo,8C9ulY.Kd{vq+ ̩HbNIEc󲆷 _%Zx]z0GA.蓕ݥ4#wvrL<ڝha&I&[f%c &ߥbǐ#c(@Zpf9_cR(,'057ExXb>t bό 35!Q 8Jpƣ~Ϣt U6?)/ D1B 4Zp>&}pnazEҖE-:a:fq|D2ڽ^1;_9z.azvG}yacwa>b96W!e犤mZʉyӒp?PW'Ή%M`S xȚhfT+?=lMx^Q_{}b&yQܺCݑX{Ook큟hhce7R O_~U0s&-D3ϧ X#=1➑}> =!zP$'q0*V1c^{Ex)^a[Msx)k5k.;]i/e=Ж'EQZf Go^MpR3K[Нf>+(uBH W5(JZx R;ZjaP(RStP(:Fӱ(J-0DPjzԯMUtNaZOᆯ{Mc؎cj^\0nu7YnBuR&Atl0xBO VĽ:N Jrt,֎[_p ]!vR})LLǶL\@ ޺}<8xq|SC֭ViA4I}3#  OKf` g TL:9,`8>TdRBpxXX{|;(cNA-A=\58d01v:< !z^Ĉx:cBh1xQd,;[_ V:MJI#Igrј8N^:ͷa:7R~8Eul08/Eј?90q¯ɣwEAʲ:ށfU_)P~z%Ѥf&/{KbK<`plZ^7U-w*~`ʯ;z>`HA;8feكeg e8'Y)PY8]91cxtoV-XvC^K 'Y)PJme JV9<9Y8ŶAy0sY#;v]wa ]i<Ғxt"oWaVq S;v LY)P>)QuecYz;(c %p7#cS uZ:'(utlc  w0~7RDL~CPj =JPjP(Z`:] R LǞP(S =BwR(:F{)B[*:yu7?Ff:VS֑g=u˳M:Vǎu<{䝮:#9W7vﻷxruɒ}sU"c?8FbUӠbT}`msY_ԧcNgI'3hwl`@F+y`cGuR[±دnm|&V*) Y:_X1؟cqpcc!ru,SڱG@p,~*rlw)䬂yk 8~ͱIX4$IV'v\qxpVsSNqUt ]">[wu r$,*bԱ?>.v EB(1:t>E)ί޸5A_&F+:68ċ2ɽrDNG9J.w䨳c#._]".o!Ko|bԱ?]gXc RoѣGÿH"|U{NWWCa1zۯoaN5Z}Qq>N+Hp4JsU%A O <\KP\ >,%SPťr{h8XN׹c>:8w#%+U_%<;fbLz)qUѱ]NJ\2b^}k?{gǑqf3bq? Fċ1~3{gxggKc8I`J0v.hl `㧳źH+Nn^웬v]_p߯aǀgϷ{~Utuм2]?F:|D m>?|;;.>cu["鹬Go#cᙾбP8Řcb~Grb1LXk9zh9!62l`l\$Ҍ E?z{H[VR2[;G"T7c#3[{<~7w~x!cPh(tdlr&W?И!EF1LP`ˬlM3R]`';ڴZ:_Rtuiꛟ{r~еɛO矮]Q^mܾ+amlp`l```44m1Mqʰ]^WW8z ƖձDGjl&jCÑp1Sr)94m|/_2}LTWV #5o|nn"n˖-W3<߇_z07x<#>BñV1& =W^ٍoA6wbvbpw JKZc1fVjݴ:< 2Vss+ӹ&G3 ߙM\(0<8xnAQHOP_{Ӻ{;ZeZ@c<ݙҌ cb0f MPPdՐ##C+4Uh܃CssOBq g<{+}¡%dՃkO϶N#S!x&GYIޤc܎dcRO]5SWmQNKZkQ GSkx; G wFІ2( 3 P7+I}ܖ\s$ӥCiE>7RI~1bZQ1m4c>oy[L+?/ȝVZVZ/SiJ+RۙVZi%BiJ+RI+!iV"0z')T;T8jJP"j Agxy):%cR+-.-$ ᨰ+:,I,rXVв5pPi;BcFb08~$Ƹ_Ѕvx4sj* V.@@jq IuN]qIq.? ai{"Ɯ HИ1'zgtBp^1l`0?"FjVdWDxgac{K1fhG~~,N0x9,c0GpR%d INO W*(;QWNJRK]_gd/A\v3D;B1|( TtE_ʗR\\k!6lFHKh86Yi^8%GbxXcK:̒Q圜朜!c{qk.**n]TD}F GJu6LgFIBbL5 Og6 8zQQ 5JeGxPCX9|H׾xB-fl__\Ʋ:daQYcB6RՇ7, TХQ{ޥ..kpT["[#Ί2%` B&䀙*4mDL3SYuƣয়}i]NNtsΝ@kΆː13f kkxs6Aw"-ۥ'~lBmSק16;$_'%FQ#f3-k~̻mmw[jkK'd݌}%oo ?mnp;A5n<,Vf]r]˪x^y>r۟1|wm-BG$νq/EVV,Ւ$TN],+02$LX9u~yY4^xb֖IrUՑ[m"X{1c%`+~ɏr:;(+Ǯcʐ1L06vt,y3aŽ"&?ᎎl.Xn!1cW..|<x!~Oy9,@Ê!!bL|; { Kp2ֶH=Px@Ncٝ ccn糄\y$On#F5z۽Yk[ O(!q3k%gYkW;d&_-|Ft 9K8s"%O~~A 7// bA uTUUCu_fbDjمA(I< ?Q;Ҏɱ쩋|Zb |_4P55%ˠ-ؑgnطQ||>c61YgVX2dS.offq!52a)/8- .@ř.הҔ@fuqUph\H/>U,Z&MVd)N*IZ}&(NƶZѷp{{8s˝k(Ȝ hN<[.Ħ&hDA%C_hJ"lؒ-Xʐ>ᾪ QaG!FjWcu~pϕ9RzX?R16T([jdp0T.dA4d<tv߶mLC`l2}m#IkwP cxuΓolƶ|0: )r!y11-d {1m~> g 7_\ P W8s-V_<Ƭ>КOryhf,5: $0.\lY2~RX*ZJHCR  FPB*^ +1c? vD`?Pxy|s%#ʪp5i+t;e ]S^0 ve<]}چ\(L14{Y>y&VR42^ 547xue%c_ݼդ l㬉@Py|0Sy_=y 7{p W"R'ϪSʇ H_ Q5`@$7]m=޶!6ߎ EjH /=,7ō&<9tx$8A4A;QܹVcmW,20>Kp|8~/I㕒EqNI|. ba]Xf+-/;;A5>%fzg}V_2ܫFZ+pA6>^k6b%H_Fx?bD 50!ͨ}C{Pt}d(pIvzzq8p Nѿ449T|}Xy'd qm>_ 5QBRʣ2%WBZq?&ʤf2f,q%VCƚ6M\c|,D}y&:P)ɦZ2çȁ>AEPRnVDa%PUF|dgA 1fB+^6@b1h ,&(5v#;>8ya&o(( 8vmS[M^؍R1r̓ ޢ1W6e78`3QOu"^ąlbe!RBlPD W@ scAOA'8 ;DRՈ;kvڲE7mavڛ:a2 Nlb!k5`,Z6\uzJ3f>LۄR`qc|mr۱@(uxRV" dٴL0,fWbG_Fu;sf2W2۹ L5E>q1ʼh_3r'hf>;_cem]f={~gMN !t$Uщ+D]ѝV6] ` VF ;馕r alf1u2˘PoVҫ󲌓W8iJb~8q53.r`Eh* AXtqA wD/$alKe%e UBVsWBY+$ ,(_ c棧<ΤT]R^]m˻ S^?(^I=UzR1^I{NR.5 *4  &QZ/Ljv7.cClRLt5Jyg}Ϡ˃~3h^~P{%!^?hOT}Yc]W/ک1v|$sSH|2]T͸+cTB1W!6%/m!I#+.ٍd`1ٻн aK)&dҐ*_Ф JC/MӏZD R۽}?ϙ30y9̜sxDk6gTSPݜ=aq (bhTc HmXnUTܺH]Wȑ#GR ,U`rKW[[emssdkf֗1lX%c`#s7jDŽdÉp)4 @ڽ("&-:ygyl'SWۜsӗpB䈛#hC@ZS.>/y/Gݛ`2c}LOQ%81;{aaa2e 6B@P'2Clq־V\tjTX*Q"%a?Fx .b AeK6(VO=`MQom2%[0-={p)haf}`P3Rj֨]~lq589~l˖#hhr2fe!T'l33ə|hefFW|s3a8w+ÇL 1@s4g2?FJBqxQP AOPvh::S_ܺ5ss]퍾眝#{eYzҔZ5@Fd,3sjW`m Kܿg[=ƺ~7*7ߏ5cc0t(Bt[%Idةm±>|@:Lwε2it97sNɌhaΘCf} Jw!`QHA|IoZ9B ì| NWYn^ OZ}t$’ey <-MX?23~iݩlcXl&iar#d I/ lεYΘYM`jީFXBH0Nm>?BHS3-Bڍ|#sCsQ[h^3`6ob,>0Y,&nlN<eSǘAkwwS bl%Izl iF1XrرVdA{ kgj>Cp y5cnJY92tę| Ƭ; B$!ip Y58[,BD )nJ$Hb+ݻw~n^cH+Z Jal%ƒjOݶ!˲̔7(EԚc(K!:7%ɠXUFZ cV s Ԝj*Dž'1-(6A"؜9mfaUلFgg ʔ*ChR4zrR aVhűbېd,yP3k<1|+)39C/ҷ7xhҾ[ͻ񅚏„jq&gހvp_%$TaPSU{fm IIc/c֡0&fKDĴ u8 8sQDʡ Cdwr>HxD̺R-7PL3sc 06bB54c~0'B1,̴<cve~=+Vݔ1Hβ2QVK(*SH+L~*PT$a xDl%Kk!p1աjKUܼ2lN}DZ2l0*=7_?c`lc zrq~+7A?VV,ugxJ98ӝW3 E%qԆD>\V;26ϫA| N>Udq?76?#J1 FlեRRs hYd^JWS@̲Sqǫj(bL2M%$5%Uppy<;m)0e2YA\;cg8B7<1^?H+_mJ*sGP(s"8M*wRX9B)մV pIlU*me8sN#l7Ml\.S L' ^/5bBKko'Gs|y>ܿPc'-v^c?Vmn=qc{l5Y]OMI:$^v>PTHjA* Cm@Ay"41r~vck0}f|Gvf)coxt_sƠXƆe̺jyed"(rs|18!Rnb>h*T%~J xy#ݎ2h1!vۯ㏃py:^x]wgO<:%f *ݶ4ʲX3M|ݻ و y0aG.߿cQ)h7Ʈ.3Nciz"c%܏1cc4XK[L!o{Syӗ_.=~i4ߏk1b؈z8^K/s=7RRŌajޖyglMӱ҇M.4=X]fѲcňzb8@[ 1clgYƮ߁5籄åq0=j57Rclg9@(w##o(aʸeƝ+aƺ ^OX[e~lOj,#cMۆ17Gv 懞tƥ\Z&e#;$Lcqxbepu,{%c,gfdYһ[XlhӦlCkk*D UKhmZNvp{pi&Fq @R2|7J'ӏ=1VJhp@k(b{FfVq0JQ QkBsqc\fXʷVGG2lHN NN/s/ߏOʌ 1ccI1榗2ZYu! z!>6 ¥lO!"e Ո:!"0݌bᴖҒ%{^ǀXuLo޻ ٰ˫,Rk!B/:jiQ"./[AmaZ++-b挵ez!ɌB$)ȅ$L 5hY^1K}0BJsx[Z^^/[4gha/Ò@O0"8^Caa*KQr}&hm"/\)L1#YFP FVc391-0!Ĉ81Z.YVyn'RJp2[WF|GnuѣQ3զxb[3eҌ!PMIy,-%%UUe C.ȑH쒅e˪`XZk<5\GMNXc8,ԁ)XHSC8NFBc3u@ k>cyzUA::F$y QU^'8#qS(h~VV}R*Ε 1 & +jC:4J[˲QEpY,cIJziY cւ')UN;;[Iuc1OE&alO kt`!Rv#-TQ̒KV'tv J` bk̀r'-,sn+",ă" <˜q!PE`f-y F߫Mr:뉱w!;rRm 3o3aVE}NMȫ#%f<8YYNX !BjoĢ iz5GGi( $Yfb[uxv$\@B"$]2b:~G1Z4ii/qA Qtz?^]9n5䊖G]!]bTY,fgX Cvy[>gM _c~:q[Ȳ _}ё[UypހCzpcPPRPk7(?O}DO+XH UUTU`Ѥ{h˃uROu{C,^gTbϔ'UhKƠ?<>|<,f N{{''u埆 4Bb~࡝J _B"eJyjB JsKϵ\“ n"Xd `1B!5Ml@s@;{iNP0Zɘ"IX9c܃ڔ*`:ysWAqNj5`YXT 뮏>KP<9{z~N%\#"ťeMryN\'ѧOПl#^iS㟯 {؈(Ӆ%t/!9Z/0s?mXTԸ;I <=48x„ ^ I͇Ǐ&qRmX& u;ٝ 2cEV 0=O^釗_>$1NJ㑋go^p =;|Y{qhz&>lzob0 e}]Ӯk=y¨ RY<83-MxG<ɀ9!7S&چ* `䠑hSh!90c=sEe+=$Ú60\BtUSKTF֕ѱ}n(w_Z~kxʹd5IX w^q,KS"*1<2w젾BSS.{HRkuǎڃnz4Ϲp//hb6J%ù r]$kuiI ¢UҪ[XyB Q+@kgbdv$b &UBĬil˱Ṿk==}}TK$KW_dXtX )D$ҩk{+jo5\06b؈7_{m?֞s=v֏3g0vdlhU@; DecgK4@s"`}BsXŢʂ dՌqJ) l]P Jݹ*YjCh9c~$XJ9'> pPQ}RFvQ\^5j !?z2ZD*NJզ,|u!Q?&c 遼]sXRxr 4ECuSXh~"Zn>!6,@ Q.+IP@T9c[pJ|1a2L*gBCHa-Ǚ%d cH^K$d 4j?v(=//--//= COAٗ r!7j1I]]KInD 97}P.EDHqqy4Cǰ}:) ٦P1 #Bm݂l1Wn33ܻWMyx='w~_rƯorOWbgI\A+{R\:5CNf^vBA@;aEj'B}q$b㕲vk`yZ5d?C;xЏΰ"2ϝ0l1*!YV5|Q |Ɗm"ߠQ'Fz=/_[|H-b +4}9鿜{a%xƚXk{T#@.; ܕ-/ B^ڎ4@A(YNA@&M;D5pX$)) -C2c,p-[WWl&Z?^m^9$[y^gHz_e,%*<ߚcI>- -z%#sSW6lYɘdëE Ƃ]=yi-ṁDwSOƧ0dA!LHJc DR/CRqÐL0#1+Nci-nʼnT1+t\z1Nb "b [ӵP,Q%Z` q\N$fn c_q*DL4`D.)chON^M[{__N=~GbŇ_ea %1bHl}qBHF'8K|9 [.Cf7{:_^ûߤ }?MjSL\S(sn4cG/x?[-E7W}lgly$=&e茭Whnsr}M~Eu>Wsm.%Ebvyŏ؉Wʮpδb1OZ=!#rϣwUTDJ QkIG"Z{~,زUV&fl'4) n$ 2ɒc(GK])~5 ԏ1#c[Vd JR|E/~W"F,7^Yq4jB!REm"2L"ޮ|yX\';UkDlW˗܁e8M'\Ap Zpc 8HnH{Yղ RpQKH#'[D$5$"Y=Z% \Z<19:ƙw?zJ;3d`l )*V7tNhIjF ^EbboQݜ">f*!UVuw2Zb8HʫVYW^˘j97]1~yݵ ~W7 œsٯezlٷ,Z'"?>ƒdL~ӆDLDS!ea! jbdhUHv'88|~Zg7jio'+@Q@&Z Pf9˜f- l\ʡ0'+S^*f׿; v7alDe엦 KKM#&bz g2E&Ekd̒x$fP=8)]5MFPSܓMc 2բZ!Š,K"$Jd f ANYz^{U7#Uq.&GMP±#3cۙNfl; xi5{W0c=wXqæ ,.3VhٱbDqj K=_"3"ƌAz\2?X _puJ7f|، >oǞ^Y4V3PFQid`;RQ4߻w tZČA߻n$r 1{c?,ܽOWmLbޏQ}-c5'XclE}\ {ڀJa!#FS1bTщ 6Ro˰ch 9df~H◂yE$Η`}9B %Lnw&zy'/ .sgg^y„4qD49L*.l^ܰ'vzwMߠ=Zo1bz"Sr@MưcF5NknꭉTBcc!`UwrɜhMpavUpFe_ xls 9;cR%ni69.Wz_\$b ω;"B (Tɟ,Xڍ|3\Emق^3ىh3Ȋv+|bR M*x8̜1ڽܗBw˨'Ћsw})Uyo(ERxRwSŌ WdOY[@\D8&\}36G3^Ģ !~pdR>s1* ?l"B 3IkK)˙)7T0Z)CAIE4Ҹ`'a2Y@&M#(nȒXHV>**ah b@tXY'+^^gs}jx Gh HeRs VgĠE[/.z ʨ:u|awO'<[{1`ukl^Z1mƼXm)TӟR8ZWhKV+jXw^w܃x| d&0.=Gހ .h"a2`t# 1y6ce|}>>ǁ/p(UpGӱ OwAܲs>VxcQW*_n]bCd#ŀf^1~ k51׮_aa|~YY]8Tm3fGjכZbe Frfz;o+{h@#&&/‚1ͧTEa,KoӛBNmtȼ)b=t6%K=rYV6m~=n`B$dDoU`hxfW1 cz;c|vf.=:Kc0VaqmaP_:7qέ,"?3Ja&JKVt=b [blO`kM,%̐r 73'6D.uKCQ0̬搱1-OԬEZI;4( j~^fm7V=c~ItF{&=W I/am葖 R6c&H؊l 2܎ ĭl ܣ0Y$ÃG ty$lT4<(lZ`l{ŘI_Rʥ=K!ZN !+u"pi (Y{Ҵ]H1^YpbP$!J4/Լ48&_}[" '8 v.;\ļQJy m1v'$$.7or@I~+#!&"Qsb)#aoP)F?R%ŭjK^dT`0o˱=H-qZTX2-‡#͂cj2OO#jU3c沙v{3P&;l,d2&9`,RXF!eE@A`*G!$iI`aQ쌩\BŞqjwg̴7;"Y';RA6k!cQbv; -`;GV}|̷O$jc]yV{(LR0ᬪ"Pߪ1)a3urg#IEKy=oEcT+z.xfL\Q$ĄfJ%=̷O;Sc*n:cW" YXBom{XOY&_K"E`, >*cTn7淚 ftϸ?F6c߸wb,' 7޽!=c,-+c]uq\>x>)j1&kqX`L0}e4K¦_QҪWdpk`ZپA/16qE,W\I2QVdV mۛk)2 Y1$۸^3b^ S#Fr}Xw4{'KЂ4<qJԱsirA׆Dtz3zCQɲK:y ~FI Bw{k~vm6N裯emi5M1כc|w[.ҵX(~vZsS]zMbm7$ tZ "v˽VZ&"J9e\Ėu)T.Z.uy)=Xv c~ΰV5Zojڃ+jxw`$qcv'8s)M'NLRuu,@(gD.m|iy8&c_Obl_$vN`L #c_G`glK%֎dGIΏ3)N"B2ԌgͲ1Su|Hz}\͎OҨ.f;F۹;3& ǎ4H>**bcl1 6ڱZ`,c,J&\.,Yc[Ռ1#c 3ٱǃƢ1g21Վmθ1#c Xc~3fqCĘŎmU3Xc5;fb]*bkR>=cxc[Ռ1#c{"`KdbVƶbqcl_훇UEX ~{2O[kF^VX2ڱ_jvč12u^2}}1\˸o>Hli3^H1 _ᅤ1flG#c[g9ڷ%ba=g3& J.ƀ[ۣf ō=12gK;'Nv%`.g$0+pMۣf cwfj3W g,c0f,ck&cq4bX>cݙa؞뤟>]J&WZm ޯy|v(Q3怱C 80vu4:1b\o:|żk/}5\/IRU 2|?Q ofBQ˅\&m@s"EӰc'^_Oف'^xsgUH|Ec J&0ܩ1v`{Ռ&3[͏ot 4 & -V[,!qyZ ߠXr( c۷o/N"aS`o#.?F4`4kDegCCX hvL 1@T.ySPE^doNIeG*,Fl))r2pRGQJHQ~h2:#,;0V 5ZX1?~uDgث9b}ӏ[϶>g7f"0tQFS3L)ʖT(ꌸTš dryV1ʖ nMZ G@cg/c qal`zzV$)_} zu'1{cOF\{kڵմ`i=+Q5N.cz_OԈؑ~ RXreAΚ9c;5"-06`lK$˜ 8;k$FoؖH5ą1y3y^S}Ygl>LKfݒܲoAˌ15c X<x/W,\c?h1faz <+[tI*rG@bA= )ēꂬzS Q:cX|H8#\1b7EMQZuⴞG2kk6ErRHa@2ٍSBU J 2)\@yjHuQU:AQ1]!g,Ny$Z3LΖ,hiaB^ou횸fΕ+)0FyȘ2..WE \Nv = d K H< 2/ԐhW0h; c*\@HLƙal֥Rzr[ÎXJRR'(u+[oK`kV/:Lf yEFVIЊf rI n 0|a r6J+"DơTD ^*sP$ΉaңmTkfk7w1rS$θW2&X*^x0vҳ1Ϥ6Wc@&ŎAnL)r,٤g[O."BfJ.34pFl΄G $ɑ؅Pr]!0ntsa \*1M}3جH0En*Ɔ/K^G;'t,Zof_YeRޫ[y._DaLz 1`^>ia8X *Gi3|3hj~v*PTEBʚ][m84fnDߜ|G qˣb`c[fog-.3C7n :)D7o`l0%bmեXc]agdoNIJ3&chBkq1 :XNf3 i UJ*< !(8y1TsYfc&}s֮6䨪jnjk F UmˡuG[N hrTU@WU9LE=1FE-$;}hFסC.> 1TAlO ;6K<=5--ϊ!I,:wZ?6t=ϬKpEa^"{b G8)~rs-`GU[fߪ FQ%K=>4pժۣϞ:V[ʱd \[kh2xV54&;cnvb 1î}kl xXF&c`?sf hhޙU:GOmߺ|"Kccl`_3gCD?c+F2]8>&"f6M8?RuťU6+ "~ '/'۪N:C$x@evӀO7!Z=~ghz q,fv*p 4>/k޿nɎ}oT{bllM$cv(L>ofF5ʘc~z$1l|z`F(:Vׁd_M'(qCL VGi&^*swҧR1~1R7gb&-^Vr٩ ꬬm|j;3=7B2-["y7R|ԿΨKxEcT1ge,6 kz!a @n^?9?8N緎iut:--%/s]fƻRͲs؀[C#W{h G mlq#{\mի3=Ympa{tvzk|?cI`Ƣ1"{1囙7]H.ԕCw 8S!a ]{[˩QJ[roocE7e+<ƕ`A_' t\G0G48"FY cFc Fev5 wW_}_7e]?>eZV駫;tϪEe|CϘ//]G&8 M^ \e´CwiCC>xV7X{QGj=#xxm<[3lvnq 9߬a"rNէ#_i@ =it{L[W/C0 J;&0"bٍ8 IK%C]HHl<[tSN2yhF;y*#!AH;?0׼=8(\_➰`kH[{KʭA(/(Æ7ȴaeX s୿OPqo6|L=Ĥ2119vؕcY~s?Od۵޳=9*[tL?"!ؘcPt JGQl-̋$*F@SW݀^L%$,;Ux Ds-J;*0t'CrG> c4^, dI1 k; L "@##&1&̹-bIiJwwkhiK:L kar`6+G t젯ZDz_ċ0˵I@jRmƯձ}wX:r7`ezC{WȢ1=>ܥc,,abCoa:qDT4bBKs47G:| C^a 叩XBZu 4M.P5lqj_ :*Í$Mp6b7wo+P&t:"ac9t 2f(Fqg Vđ5ױc9L'BO/>8&}s˱g*c^` =hUzmY=/ݱ-/"Y#[&kFUٰeslI1Ek?< c 9;W~lu\_yc?c1cr׎9Ku>ӰUM'7<3Xt xX>9} p?~t_8;gص'7c?$ǀ1cx؞c~5N>ǠK(Vpwck,,.19t x/t̵cG^<}6XvJwԕ~NVƬ;F/`y OghobfqWǾG۵X1c{r쓠c.Q%d>;089_S%¸U 1[3J\z?SX2yiHHcs,_ұ=^8t̥c<{Ӈzq9vh(;IkGO+퐗o)s/oL_MXW/c?/$Ti32Pc}9oǘ* 8K<-?K={)ʫŽ"MslLJ1q+׿vj΍ 1cãh"LlyIj[&)JQe(Fq?8p ,INvOhrAǔC1شG@]Ɋ5ca oܘz`ƍ;dcnf1'oc&P?FKl^ɚL~uj1AAWP vsca+ǃqdScn,MdfjJ4ꬬz3qo$c{vX+X1cϦ?}Nٱ3Nc8>n_v옻6!rdcg[G"se{l]xw/A6S4j́macԔme}uo)"I4L9qR2p";.- Ds8MY4mh\9bSmulU,-@wt~1A'ް׈Xȱ=~jTr̤XWb]]\=ǯ3zrmdNY̓cd6BJ: &Okc0 `1eP oPf[3w8D-BlBɠ`/o=rQǠXU(ij]SSIAj ljgfiOh:kmת:w ڎiUwl˞?F?ӱrQ{0;vxu?cJǀYY-9Q(hb3!B:g9!֐-j;&ۓ—;9_~?~o~[1%epn=0 B^ 9! i9@,ޏ L`ܖ;,9R GLڱ.Uyn W*kRe"}*(`$ǀ1Uєɱ򣺮QXkSS+>cd(析‘ÆNXc1c@vLђ)Hᴵrğ+~ƞ+^>s̱tDZx~x9&$AǂcfI)%S)GsFPMBM۲=xG"AmwnK0lNR250 c5{S:`wY 9vX]ǂ"amc,gǼp ,a5 5c)8aI xP:s,؟ǂ5Oʶ/x\;1/2\;zc^8YXoA9 8fDg9nt3/b_sN(r*ߑ'Zc_c㘙_"b3-MC۷oˎy?YgY6 ?NAtl)zL vc~E8BL7ƚ4cSnw,V"0Z E(@~ t LK)NΣ (jQEDߑ'ޱw>}ыN#kYʑXsd;% 9uQ#4v<'NJEC@oh{.u&7` FibO"AVKq6c);_% *!+T\?Aw~BLv'`ĜEhac l!)E$=`ET26Ъ4)#Aidp:ˆ"Py%TtVzb)Zƥc[=~!,{74KbrLqد'&&aql ,wl ,@ Ƕb6 T>,M*[3h ym8|s鬀_ [SkyNX'0Jб+ȠWs5= QxajbK躦nN\Sm-E`KcrAkh *:gv`6*BPZLs^2~(<A6 ;!gcza &.\rab=9"4Yhhh!ARޞ E6aӣ#&uuKҀs#<^sVZHM :q{:qn0!Wf 131cm1hʛ#I ,ΡJq8[l=^L~>4a$X$pLj@}WbrI gG_"0a0a~qDö:{ iH&8s0cxM_ s)ޯ즬mG411޾?lwRTnW/y':='-6LniԤ^rXn^؝߯OpLfINo>G^2ýɹK,,bˌYǛF2eg[JD!iOFE}%-9*2O&}e%%x3ի*tuֺh%)Qhl5ٖ#;^t%sjrX-ekF8 i,ѕt ڌW23MP"V6_l*>iE!BSE,>JץDK!d!LF%% [,y()ɱ[ϯKUVPa˗;LZwL#ݡ]6[6WV9fs^!f~RZG1@  AMxp" YlCC6 s `bm_}ÿ|2t]\͢c!B=3F\B?,gE,Bl;l:uP#0FFHa9:(-R]^ 4Ev7Жh 4xXB4K,rk3ѮkkE:9)G""/MNd.npV)'GPUV_3dٶx0ײl,^Vy4 ׍;E&ow1.=ecw' % r ,ܨդc1 \+K&ڦً(㯐P^q<@ٕh%XG~cX;L%ܭVG-eCLe#ng[-d` I6V1}DYACE2N'ؐlLH.qRz 0}ýټL?z|cU߻ 8XƐPg B25tl0L@+e%d0Mq0v&p:NH'R ] TUjRR99}w\Fc>{qĎEDT}:`?Wt+ӄl!nl>,8{8b0 i|vQo0U=1%PIVWcs';]:qcxt&5zz;VPs<"(F'qd!(5,vΙbKNڕw0"m9I+I!1 u_JPKTU,cF?kΜ}^z7ckϣE 6JS$Tޱ4uT$>DeV X Ʋ˶"ticf>ň1Jݭ`y4%,i1T[113;L0JTlm-2FCuƑќk @k @_؛,jm[d Hhe4e1V/5{ub]!^E 1H7$y4ˌ fwדmNDl1+B~D2ce֏Va젣 0IF=zU#tueʌ';E.`adLk2ce֏`vav.{`eƄMF s0׈-3VRư($E>ӗ?>UEU"3ʌ)[0? L[\苲&̘q"H| _Kxˏ3OإUc N6*GYg_>Se2勘dpKXc{BN.?K<`343AQf/_hd$7m\ E166 Ɔn;u mʼn{ˌNH.nQ/<ۧZxn^(z jVg}75cUؖ_ L.f^g33 rdc=,6?8ZfČ!H?O`YMĘ -Py0/5aEd@,?!›y#$D <`rme爆[)% RJ,Y;?DŽGb~bX2o7?<ۯcP 3f{_|ꕗfݥp1V1?W %bGvh:"!ad_Շ'1TJ7jCgSCT+Ac)0H^`  'idjPXYoVY=;So-,1_xe{ E]pB xt WUMG T!v 2Bʒ^ _x6 jR]qJog^V<?Nۛg,G/e̓F5Sdc|nKR0 2B,1Xb1R4*:"Q8Sk-mh '{2p@\$bU&0}[ CmIrN]`X:* p/X"JR7BxO\9*N]{1Gi)ZE0o2FwY"g񇯵@qƢ{#\P.0&J 4˘Ҋ #(ɘ l\~ pя@ qz[ZÄuAĖZ% $bP؍neώ_x|k?r3ݽS[)W& Eggw=#zjI1AΘ(OmEidBd[<6*d1h]1RqŨ*̮dgQv8;ֵŢFs ? X$3p/,yxݔҁ[v(=C*#pի+Zic&A؎wI;+ {LƄ$ #یq$cΡCNblj?EO:K+1Kݱ ,v@q PE|Rz0pd3F9hE"{QgѭHhp6cX% b c1@EE4wuӒưnӢ"z_1{(W2.2 t&11D~skVԤBּIc1ɘ܊Jq˙?ӊ`̇ivZ;z5E0VO 5^~,1cue>Ygz[Ws:f:2Z6c$=~JR/nTZ<3BE5^p*ZBW/+'0D,yP cF[ƚLaJFb?wZDQ! _1}bήu', wq#;tdRM7ΣP>}_UGKg1V[0c;zNjv^hwxz](6aĘ/-ՐZڊ.g, vm\\mCLG&Utxmև'aԫn+{>(1UB`uX-:F=:bx +@rs{Z3kـ{H+cYz4Ztx膝ѓzNK˭«u#m:ْXEOO֬b(s?mQHf110ƯuIDCڃIXCNWNƨjk1Vx5Ylѩ I6c[Xu +x(122:7GFncssVlA_7b xCx1c-S[e1嫰Xbh0ڱCK 0N68a!e0-c|˜N?Z6,M-ٰQMϵwTdVX>R]5ɨ;o>6Vb5])3ō:Z\ Fƭ_m%>GQe19Z]蜯_X$G~"x*3f5ϫ:$ V"uAX0fiu q%еbmcmEUd 9@[Q-ף"1#0vZ)2cK|>K~'L w|]9Yd0FukLbCGnas5ޏ GQω ]uL^qwGǭxb,"'&}eD1l|6jPM>rt(qFKˌtU!2XPgT0Č髦xL`V$/SE|^cOuK%֣RKG՛N/xMK?r7oRؘ`x>vjΘ`m=>< =&x.w\W.99.]!݊q01ғ$dL9ϓݸJ!&3m=X=ec6s>J:FL:)0 HƖ]qYL9.Ȩq>Ʋ1>(3kcMFfuޤcE]#qn--ĸAdrGGp@aF cwϣ$nG1i{GT'Ժjy_R!JQLUTmݺ[ku+ӑyՖ1t)ukh(_Z~'o$xqBk %oD~E_L&5'%c8[k`lnEUgKXᙁuyëfaQ3{dGG*͡kb,&k?h=yc63<4y:7Pfl36{YT|4zaƢ=6X-݄A:=4{sF>OƒqHeLdWWc7F$;̓`l/4yƖA gZ σ4}`K Oyb0M̠o Ӽ@):(:tPf*,Us[~ЁÁ̟:τ7W\ 3GO_G1SOQk iu(j>2$tW(3f>cy6cc`,2vc,S2aF,2ccX]\MfZ`DeuPfL/XDٚXa2̘`̭16sc&fLLUXM!/1f==hDtW(3mc]Q|1VfN'#c̱"M&H*>v*>[mEv~Ϻ^BMƜS;XV>-H;ChccUS l:pB2fdbX&X=/N%5 'O ;. (9c7q`r؃+1Wj ޖ_:nkg?|hhd>hh#̇6y(֑bH=tfD> ˄Ze7D+%^FUINQs~2]GAWП9s"|!{Kޡ=L_.eS˦Lj6%K.ܩs'ki+Bn2X7B7d dI Z@U_"vd#XpZk"$bxj!]D/+@QƮOf15Q͇۬61e ѡ[$LN0r,HJ`K| [[ Ql՗[J&~)\O1>#;ƱT6ZXeSFg$>R]鹩m\56BaWEmRcuFKMb>,C͘cwǯ̘V(c<͇67aKAN+ D9R IĢ wQ(lO'IY_l%c[Ost .c,Ƹ ovLM)0HM f0fnj~VLVbF2C0ɭ̇6q?&'a^Hr t)<$ #"llO9S֧mӲ|luƶn= >&l 4 vKځ]f2&lWh/dcw$N$L.C>[S)(l̹>m/%zf3ƻ<;:1QfLͦ. h)dj6u\SSckcl$0B Wv(G:63c77I]+^VeQ(erg\LYYis=s16Rf31D&=X+cX&:L:3yVȻ<|YǮ# S53֩X*هG>xFSe0MC:ʋ?"C!ݍ5`,flxtM]ȂR U[( "V+2oc0}X̫1 -3F}~pxݻŸ0B8ƖH1񂏡AK+y 7txd}0km-X>ץIQ2`_y:"Jtjmi1<ϡВ-$r=kI2362YO<֑4c}}l+cU__Uտu*,m=;Sĕ”K@kXtT8ї'^l$zqy,A^8&.pdГOK'셂_ңOY^#w(1%a윰܇0&4bTEKSS ^yuz2U@{~-'G'c-FSh Ϡ'&{YV!U ƌ0Q>_^Pi.GF~HUv[gl~iAF^ej!:4]eNh^*!c 7ZCBĘROfT:eH xcŞKIV!mU 2_ӟ~r+WUﳣZcO ٷ`̲0ilkDzot'_MÜ.K=`lg Aeٓf.XaUrf_/l)1,{ } b2_[Ʋ5&-b}%NQ߿.P{uSUMڤë8Ѥ{dg1 R}8!32&2/1@[=GʇEUH ;0g1cƲ' ] TB'&zȞjRԦzx*&?{ťgӧ:wѽ^Q`^*!'c@-u$/Úpzꏈa̵CxO}qĶ*3LCal:kBpkVȞjRԦzx* &8 <<45!4/'xci {yniq5/~E5ZZسZ0RG|Rpr= c e/~LCx1ȞjR&$##/,L}!4/գ(~> ./Uy\J&/?@'ޔ {<X ]j :1b_\~ φ:7RǨ&Em' mgKK ;f4Ϡmղ0kM` {1πTC90R)ivЋշ XAl'7c7V&c y\W-cKlI4+]a7ȞjRԦzx* &ќ̥b)RZvMNe58b*6Nr4{<%22EÀmx3\s7e,Xa[(RQx>6KcB.E'c&1@dOU5)j pIM%@\ n| v"9ض?y،|wۑxS"YnE汫Bf pVr_$#=aAꉘlf[XnĮāxVq1x\3~+-Ŷlcnx0Yn`LlGCJ2bd̚+=r81)Qa!)*=rXOLXI`?giפ'3c⁑dL_C-OkIbC6jq^*'i|*cey奲rv>Vh ږ*AI3LOP$&TF")`X"b=/ ?Ǥ?3/פJMUǤxϵ-1@8Gcɣ4 eÓ/}G_N;+u4ATӬ%EPRLDK~x=c$+: ^IꙊctx+I5: k+cRUF:n:%,^yFMUGīc1) T=8xf}p#1F'Yq1JF@+K= cypkv*YpwM_^Lc\R{X>!6/P>:NJ2DM-Ƙ}??&GbϘ2v/://?UUlK{(#HEMY83pi;c3hʮmRT.|:zQSNfL21VysU Ɩq֮ 8?*24l񌭌 9cΒ1:o +XeOi=l*₭M|C*1ca||nو؍Z4<̘dm9:U΃~<^B~ w&ɓL7SMkHA |`FmkuYyHݤ c6˄߽#;Oi3;{./cwX^^y},55Ʒ'ӓ G7molw:9Uvs*~ cd| dd^V{:VgJgcȘ ZВޫ˜pn* VNƈ#pOju$2c vvo5%Kerc PB4%2ATL4)i4qdVaL_0cphc@l?/cQ[m16dE1ޢl)K0Dsy*qI&4QD!:P`uY1Q1^uڀ9|c2ӭ4O\8vZЖt};^֌a5TL(LQD!:P`/Y1QA"12W.+Zc e &:SƘ;(oU)SHL$ML 4Dgq9Bf+ӄ,-1Cr~kQ*w%I&:?Fi4'?}cgL>Mhgxppس:&slUp WبQ K_I&cIљs=jVt ~{q|:XVoW7n^?i<4MHԃIOn($W [*S3 6)5պkTߖ:ڼ5ˋ1DqGTO`{r&v>M_T cVFb]=!gTMOg&fwTMhxN-5'O+>ħ!c4ȬrbF/ ]:72NBSz*}x8klpZQP>yԮ2 DM-*bo=+hr<Ɇ qPʧ# TF7uclc-xͳ3-iR>2FSPaLv=Lm[2& /n$1=p"=֙8t*v SC "@^{ u#c4ȬW)i^` k E#I2ֿ}}1xM/`|:V̚=7^d[#ŶGQQJϠMMmlfڵWֵApjalcv=ed);X^1dc ڹTIKeXc#z*K7cΒ :6Ƴ1c21Mit)oөnd^SR'W0VV9C1Ę!2s&ǀ)Sݤ%ȼ\OVaפG\V],gebLN5v r?1ƿZ1_N;=cT&S[%4${Tb7i 2/))jM:|QLtݏQL'%-A:%e*Љ_˜I1*/c4eM^)Sݤ%ȼ\O:Us53Fe2eIU0{Tb7i 2/))SNjl&\ rձbJ=|Ň0FYwM5LgСY$|V1Fy k^Pc;gœY)*MM^?47WR)rYUH x*Y)z{ŒAR=v`F`^(޼TQmyx{u{{j?&M3pz07*͘bRE7lK=5 C8KYѤ=ۯNzI_?9W[kjFV%S1~4KőT`8"6/U4l㽕ߺ/"X=/Cbs=*Κ[Z6Lk^e%50 BRES*5/Uh[kDh^*|rNF{zzB=`8=!^:NJ2[s0fZsg2׹Ƿ(YxsW|l_h^ڭjΜ`ۚ5mAy>ϲ,{o A.t^ыo|̭V"cCod$=D~}`x|lM_ؼTg|H8` j~3}R7A(:6( m+!% ;zV98 ^ %\qJU']k"U'56]/ˎ=33|,tAYcјqX 5y[ (Jr앯1Ѫ?(l>ʧYdݹ5׊׮߮8.UR~׊ƥb5Ԙ+OL"ҳA,g< >`jJe>ƦҘ_?K˭Hdn$͘԰˜g,2fd5n{ÏStq B/~mRhlpG?Y~'gcqgggqq#Wc x,ݓR7}W'^|Z\%oc1IFmlo%)RZ%7'{@E4</<ev-[yJUcc+bTYGLlS$dvV,U0[t#vw .Ay\_ϸT=^T,,7{1@cqҝc~}QIε1_ )m$]K)%O12T_<Ic_X% .6959.TKcƠ`{^A3=]~I*d۷ǴMp͡{/l[V|QZq}c}'Fyl?Wc ]9tzz3m6;ƴO/4&gcds%6c.Ji?Ki̖dkL1ʼX9j#hlS1 N=w:fӰG>y$ӘAJ݌IJod{+q=Rb*۾"X.ۇ_0}Pxtg=/Pd+΁ b]C\cH+k˛kĘ\Zf`;2/FXPKWw]-Cmm\cZk)>&ci#0ɴ߾<4Ғu\cZ656:/v1$JAֵ 4tta24Vg5qi#_!jG asY%]<2\,)5{ة5f2YXMV1#1- \&+WWg55{q\}uzJZ1D4FR`]G^x&eRT ۭ`.I^!ҐZR̜;c?B>~ # uy$RI 0.&i=R;c.V)۝R.oDy;t&)u R DŽq5褱3;џR9|#b;t)܇ZƥJ5;ozTmRekMcg<5T\*rF\c>4.8--J\*i\*Z^׊gjlBFvƥ s3J\*Zqh \c:1|CFlpi#ט1mR%Mטq5i,#7\c4KՄťƥ5c^}T!,DQ5hCT3mm9%.A۸Ts }].J:ڽq(xKEk87׊x="K%y\*wIϸTCF{pR6F{w_?FXmcG\ccq6F{5V?FXmcG\ccq6F{5V?FXmcG\ccq6F{5V?FXmcGMcNuj聢 G"7\cpq85 /\cpq85 /\cpq85&ˬ(A ,JAh.=[YE:v,$`f. +Zh^>pQw@ 9Z^ڥk+E{G<va=9BcpL&e1MHsevV2c O,8XQp aoUsevVBc3 p9ZsƄke7΁X^d+YߋNFlP& /'W#19j~mu4BxjXBV94և2/UVR79C-悞c. =)1'7} Z/4+۞qD7FcR6'n7L9T':kś=\ :h9)%'deٔ?0ebcx:<:F#<cvcKK1v(h ]H*hvUR_&瘋b/r5r'fKg"eL\M=s!!ĵ[ :`A\h!OIg=M|ք n^Fଉ3snrHL<ֽ>#|"ZW lmȄ`{^a]1UJ ZP$ B"WFc_ A0 90|7A/H5& |ӋF|3"H xRhg )j :Rf3!cVb=pK<+:0"` Ad~B&V\]tPF*]#.Q7)("jM{E@|Д@d^,d|\o I߆J ib}bhEȺ!Z!6*@c>ZRЈI4FF޾mpD6IavRIIZc㸕`?Zl:lv^ދnXEQU\{5O ކkͽV˘uK(_B:;ȲoPLBfY|NRBr4`. :uLiwj,<߼qP8\bѺV1aÅ:\hq mVZce;*9;k"{d7uuąJcݛ{%4&])|YGCj{JT]]Vk)joFl&ZTU(.MU h9Hianh<ƾ m שP'}:P0IG%"^Lc_ oa?kW!{d7u]d] B"PTck7B}_bb7 7A1yAMTVd[XQܘ }#E h]yH? g>LcUm??ҸLƄ$mq-y{ n=n =C>iG#8P7 hV@h<ђhC3GL+ @pqٻcֶ Ç ƾ:t0^5&i@7Mn<%.w?D,}/ BǧMOCØ&a c01i0 cØ6a c01wY a c.cƴa cƳ"0} cӆ1aLϊØ61aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL01mƴa cӆ1aL[KBc"GQTbn׺aP\yWm}2"]NڋnRp'M/cٸ᝵ƮSOJC͇cM֨;ru"zƈ cD0F cD0F cD0F cD0F cuwCXpa,0\ , c1"m#҆1"m#҆1"m#҆1"m#҆1"m#҆1"m/2lV)nZi86tSÄy^ V7YޭWZujf:Oa.~:㷎5&75LblR3{pgH;ǘm w[V3Xa c}a_eKV[.X15dNq>nlpƶ70-[2Ռ8y×-2mov7b^tT2h ʍ3?v<6v0=cKX>6(>.4#q#CPdh{CrHKX(E 7 1. ԅUӲe!P6%лd%Yr̓Jx2<cp,Iv,Y1![赮ondLcpD.K4b:vO|=mby:֙h:p e)ƱbX$:Rt{8oWJ!O^O􈽂cpD.KpM>~>mimt亥Dc{6x.x>x\26҇eRvPyQ1RuRIbIPG&~N+18 diq>~Uk3xY=/[cFGm;y18B6C"ckpLuT9ݯ8 #oR,d_cI!|߯ke^ +\w/:U(4 t6۱`qpBMIyj@ekkNJ5@'mM9h󜐃٩۫bcG;p :vX%p Ǭ;&n•s"dpp̾cģI=2 o#%=15E;±u73)1=lSw[Kx3oSw+1c01cd018FJ& gER2 o1R2 o#%YXMc*`CoPH$`cpLƛ|:hX>䋠p p)9fyA8f8-p 9f{ c9 w3pv :{؂j-G&l\q p<+xc{O ьK܀IMmD&# ڱusFd1M[!/vY q%cY;/>N/؝X28Fɯc%C1!kߗn\E&B CC*;qǻa 1,e:zLvL>zRJS=M>+XŖ~cpD.KbG~qF=zpĢ3RcbZޜ]oo;뱳E'cpD.KƁǰ}Uk]8fKNXhluk؇D W*{ťK*w/?;M?$]B$Kj3V<Ŏ:2wK:t).k!!^(ʁI3/9Ɩj:Φ}JSYRkXP]'1>HK_&+gקCPм֔X8UǤcT;z#';EMPPn;L+},OrI:&)z+Jo#ʬ?ğh۱Cy,2N3-戓pL&lF~Kz[qY{ro Ǫs*͗j:ñwxy̒gTu]Oԋ5LZ㪫תmaa^[fX߳㒨~bU9h'J+Ve4;YנtajTJmR*n~ǭϖrxɸ܏Fvfiv;磩{B|lR^nQ mi<97k+էA񦇃۾ΡbPk^ -l?IDATxlWu!M* k+qn|ܖ#EEm`#n%1EGoX@ٴLY$s(EҖ+hVU!Z?}ogl{LBAIPlr,P( R B)ǝ]!XFI 7u1e׺l_Q( hӸ+F[a#ݸ( A9ʋk{ۨs ƍ}Íy²͹hS ڑ'(/1۱ 3~ryn#42c69Ι+Iz(JH&% j-C*Q_ЎG !7YQ+moզL}01f$rar Hܦ13eДv!UX\y=dK0 긧{6GJ)x.DjH;"=}K{@T$R2ֱ:8XjKA*jP(E;!Ih(JBͲ}+d,.!Oy8NJr:3 &cuMFǚHTw,;tTwӰPp4X vcR8]L \afDb(nlGjZ⑤ ň)4GWF28HC$)ۙ{kŦqgԶSAeqUR̄sI6siV"\<3#3uqU+f6v-xD\br.=bv2Q ZJzd1YŎ5!.!j7Q2,;DVg3b+nt6~8 4sZ3F,K&HfcfE(5cdSe0EB4vݬ|T1.YQ9YQ&&yIY@)xp9Mh\dDYacs \Xa|+vp"gl<7f|ZLZ#g&%j'QK}H2)xh%%|Y7&cTPS㱴OԱ9jyB{JF-mm2|G39.e,&Z;(E@+UԾ,"[[@|ScVL%hdgQ'itqoLVQ⤢(ZV-6595}qޔud;C[0ܔQf!Hz#6q7W^e!gAnfP#iH4C98FsUn[mG C(uB)Iˊj9)JX R950(JXOP* q) R cJe{BTͱW)J%[TzԯLUʣ@sj.UG0I_齦Tͱjڵ/%Ӥ^@>,rgAj58`uf6|2 3'㘘-Aq4BKvP34,]XC/B.$zOZHՇO9=,>k_ ZrZ^fY)Pd9a?%ѤZR8ŰAy='zkkRm kEg~v0:[jI-гvG2Ir,(GO:]V?sx(b%X:Y {nj]7`\DDڹqX iacxг |$!MrqY|;DZ,cMG:v Ayf;pyx D{: j)$ny|T~yXM&>+VQ(:ۚlu:ٖzz^{hzA?rdrLGU1]6T >3톁/& 6& M ){Ecױc8f㥀EmnH ?"ﶨu嚙!vu'b[MH AX>޺p>Î-y@n-ݩJoJu%hC °޺<ω) L{y!Wz3' >Xl7Ln]˗/?sg8f;^ݻisu533plIYHBHؖ,A|ʓEAfz5tloH=;S3Lȱpcs~N /Ƌk6x/cc~?0J;ցV^=͛W MBVcÒx%'):暚0H/q`lΞw~'28jG_KOno}9 hM`gMX, ffCٱ?~Enj[ۊ {ק_GmU%,V$[ Za*^涗8B@|'.^u)Oy>ȾM|[KyСCg83Cs:uW];wnl?}9#~opg)SBˆtDbt3o̳Ƅ?qc λf*x^C:_~=Fm>|RlK9&-P8:& 8/\,ۼa@)QŠY&,vgv6h*X 3ػ}Fb]|$%"p?n[qR\2"4BXc} Eяx;6<16. !(qHU!T+%Nt^H[刔=E!N @kIhHpTQTѩ{N½?y<=??;Is^blU\ʍyDrK0iAվPXվcϕ`k{K֬'ba5&~"Z^{\wmѡi ⵺[bϷƆ궜ޞ{8c($ &Qť?)r%܉/(Ejo=L7Pv;w] }|KIc[] b`+'reY2Dzke0z=k;=-Lotj[! cK"ȕ%]fx=1<PgO/2c  GXc^d@+LRh7~Bտckɖ4 Uv>]^^8p:f,ĞokK4顉.jr EI;K@$l*Mm@l;{`XxKl&w|BP7X˳ i{CAܺ}}kfl Sjᑦj4W7->?mÑ+E'*[Yǒ2(ov7? .YW i4ZM,mY2KqUK}]|9֢p DZV =mcgfc"ǥ/^nW~\!Ya _ZT,r[[T{66@[w9RQn:}Yer8my_0|5qNeD-/??\^7IXŹ37o\m'O.ۮ@6xAu۞2c`A92JqM{mއsd6istoqq9iCHdqNhx@jM2mN ( ֖Zo >J> "Lm ^"@ Re,eƂ`a0YƲJ'5+ B-uX* R.>P,cYe{}Ƒ$:FɚUV ۝k1*+UYRԑD,bY%f)JƶgUVPL2Jv=xEel)Ӯ'(V]O&^QͭLL,c[v=xEY62z2񊲌mnedeʴ+2iדWels+Ӯ'9]9@.#js$< l:9l>"W_Ѿͧs< toYuX9ɦzT˝їɎq=j!qFRguuV"W3TI&Wo >;Y<("\8ݢӃ$Eǫ(rhNEI{=7K$>Rp}Pj { x8f> W $k\hα F=>J0vلM.' nRxٖ) ER)C!.:Ί<5Dmr1G̡tRU_4!{_M>cLSg͙3gjjĎ@M y`F>2s,tM!ȔaqpL*J'"˺;a :TVc2ujLt>>lu0Չ" =)f@K찑$DPT>@U%^%9#5_-G aZp#3] ڡXD{c#T;CF JUDT1tE W"pƜ3p4Vbc N=lh3gʄ$,2ĆI /v/8yY##a\.R C9gM\ e!H~5C.>8M"cncbWE+0đO(^BhNP+e Qss Y`LvpxT9xd:c#h4-\j9C vA|109G::(B|؃;B;.&{Q$}!+]*!8\171\ʥPi܂0e2F;3H A]39#oUD?#ƚPѤefceF/s F Cpbx;" %>S퐕*Q4W:s@{w1 FJK%IwcFh@ςg;4kB&rH)1 i XT D$b">9+ 14 K^Y?cuu]Jc :憆ױpWx&xul≊ x@%%2Au-ʔW01]NE3BOQ\x,Z;o҇1%\}}eU}ch#0CQ^VUUNIߎ;~9C]d7"ovw47Y@&fYCOǺ?p Ѿoc؞~cfMώwL ro8wgM1q،E 1{oll{-2{X!=O`/b|! /pJB rإ33Uex}tr N Xjޢ<p<UTH+J90FoI sk\Y>V6C`GW+7O),B^]:1k{ԖtxwJi+eeұעhHB1tȽ@y%Ov歹jW_zV]09yA*;nze͞v,FG ]C@IHc> =rsq~Dk橱iyfa!z'}t+ތ=c, hCs}@3&b4/t8@}FoYOSN^;u}c :NRT"34-AwT2rGmݬX Ƽyb竮652]8>c%pUn,żZ[Xv_ky қƞ7fxpގG7,y^5ߴ Ul>|\Q6|]!'S]5lnƺ̲l-a_3'F@IHk;w9tG{mszؽ{c&n\ͦϘlx:7-b{шE42^۶T=(Q"uB'$t!,u|Z$`?]YVsp Tގ-oQEzQ 171'0;=Ryi1;=&܁`7 "OkڜdG*!s?6O =/V~^0bXX 6/ea3^B7;}>yOycM6$Pa'IZlÜY$+i8S}7Gg2UǗqmh ͛12j[1čL'e؀T?yZDyOmlI`qCG !/FE,F̦?*`_bBĘP 01ZŰX,^ )^v~h0g%^: a&> ;]W=z?~A ~csڜ^oCKX\-v0N2t|P6OWF6/<&8`imwzꢙbJ`zl~|+7r6,ޮ5&g1s-$Y4ѲFU3ڶm H"ڼMMɄ b'уb! HɖR vht&[҇_m c"[T_@[UW аnjSVswx 1A@`vz,ZAZ|o`_4\|aFSp/] Ɋ1>Q)0ZhNӘa0\/5~_*?^3k_*'!mbyw=wk=5}- O/^sUV;+~M3UIXG '2av<1]_?aTw adhYѓxQ~Q(.N*X3PBp`UJ1u+/y A ΍ x/ƙ8.N..ّ"^^^*j+_b07I $z ߤ#:**/G.K**Tǰ:sbh5hx񿏉 {7 3kztwJM?ՠ07FJ1Z0abŌGQJHXddBX@ޑ`./. vag:K8Λh|o0NI$E6Ȑ3Fx񋊇l,r"RK!QaP9ycYrQ_iIUTRo/w"hB4)0,3y#g6 $@1SR ]œ*Xxqx`Pע;cH I%&GƬnKr:i@OaM38 }{k_(/IfQ/O؜ل<*AIsZQ2 =p36tlEspLKvNn]# ch0n2lB%?6ȡ $18dHzo?5H H d)+Q,V,fK&X_& $6jHVȔAmV7LEȅ`2q$0))/\GBLQ28x(MqdaucׁL%,nIUgaa BK*45>c$]9fK!t*+=qؘ:lTNءBpRO (Lg* P(B(uBЫ 3>>K'cKzZ+rq.ZDέ涴ygiMbZsHXvjؐ!"v Vp:Y[p= I0vP^uƠ3&SKdcI[Ǐ+xA\y` ~4gVsCQ `fq2>|bp\ݺ}YׂtA{EpWۍ{5Ʀ&:%VE99t@,ɎV,QHJzB"A:*,VsWaM~+&%р+(9܊^bA;xpy6Ĥ( LhulqD7\8!\ cFrɏ.cmL>ۺ#m4hc ?ks .ha4]Ȋ4SpFe ϷlSCTl>;Af0ḭ<>cHorDF؄xBN! H3fG Q,΄rVSH@L帺+!zACsZ5a^ф8Ӛ6Ul(π`uyhPMw "M\D#JMn 2g .0j|O Fd%/\OMXSˑ4%ex08m~5:Xeh:aAq$) {S.R":*P &\񌐂dےDWQXKQM'a o .7|OpЪ}H'דel[wqӑdAM|s^L,c?PR%f,-Yv=kglԜXh̴ɮc_6&3zRf>K&s'/_|٥Mcr7~Z?|.'dDy&N<zr(J*kb?g(2؎U7 uzl:z~jៜtM(P[5}: {U{,s#Sz3ZXZ9riy<zcq1-L9IB ,#{ RrjVQ%R^UZ aTUgw|v8]|?g3гx*_IzV+X1a3hOU^F:}'vk(R`K"FVKӡYTҗIï }H!#^tĖ !ciX<$|i. m?yF:CؐtnULq8kSP}iJJZLR;5A )U5 \˘{H޽1W܊aͪ+V;E:0 CِlJlF(bMIk$" آ*m:i 0@< zTt. oК1+ (%NJ.XӋ8&D\T1G' Gdaŀ0 q* ?5? $hX`IbR5RPC91ZWٰOhd/~Ca"0N⢎_F3qJqnvj~y?OIw!0QO?眧9ytw:}"(Q1[DUP1&::HCZ8 V cلzyg܉-bx>b&΄D(yl2 Kǘ%WrN;Y w DlP hkBHQ#`oޯ [&Ty >rRfV Թ_dc-'vE=qs2n]Kpr2fu#dbH1oI L=XYH5K˘@_NLXcuJM{KdK `@ u@/t"8'3o7tMbC/S֤;KZƱ,BkVkdX]dVx-LUx\| :}fmw%TYX-X0F]tʙtR]19|QFEv0U['x}`O68B3&wL\ax7CCMVJem*S VߏL 6` U-I Nu#dd3)}0vmt3t<~roД )ڗ^4 DH@M~>~YZ#, M,<]c:HQ1T.dIQa,[q:1[8ư5XNx0dJIxYX_uW粯l )ܝ&nwHBp+.n)P=>{[z[ޫ|i(`hsW8al1-v{~ ck/.MM%mgA`eٌ9 S̰@t+z~@ `1&pcxew x6d/ikոzah ٭kD\1AB8TaȒDJh3feXl+d}U}V{ ?CyR=ꀧRu1Xl]1VP|$e6}` EH!#+  b;I[(B+vv 8bFhZe#-:DZgg*_p={lr=VM懃4f PxN^oU'Gu\#(1{7a;8崬Yw՗ow:ڠJ7o/4t^q:BU$xtoiU=oύc*b"O>^?qb-O=۽{AZ:3e̺jY[Ֆhek3G}&qC.Q ,W8V4ub}Ԕ1pĈTtb灁O遹GyhpmXZX5b=h^8d-'ϛ؋aܴ |oAsȰ['- j#&KLW܏!UXHp @R2M`"(mV-0sr-c+د2a;3fos޷)spPF@dtߊRdn"h2a̾὾'Ǫˀ14LJX>&,vcqڐG쉰+>=YN[l=njP_߁xE+Y}2ϋCdV$Vb {^qUc DZc%;vχPOB/~&ȅ &:h : pS'Q_> AS:cj" [v!ӣ5Qk0l!$c#ԉ3$f,c Ą?> 6`!GrLqdwt"g1G50"M6!0p*3 1BpB^xJ[LsE0v6˄1 4tQ!W Ӣŋ;:%aIXJ"l}DuRnƪ2=Wd^9,:D 92tzhx@0j(((j;j``Y5 YʪO6m`c=1,FĕS0J{% Ar- R*5pۚ1k{nVUYKmbcYvum1f6W3d/vNur,qJᡤF <-hB %EOz<Jtwwq/ǼUD 0HTrT9 K*9#_AKw=όq"&rE @ёރ޽< eDtm5:rR1S!b\ts:lz[/}T]y[2gl m|mu:zLѧc)WO)V}2iw/ԭ.`$z&(lMT#}Νþ:&.=cˈE _7HG"x{ީ<1ԍ}S|$Ja UAc-Xu?=Xw7c`0jX+fݛ?f9s\NNNסѩ55CѹmxnFkzIV!$a$VRF= L@fݙ:1<]ܣ,L :z0<@d܋F?FOݒaoHAJ%c;D].g5kjoteʦ_˜U#EO`bxpp;m:r&p}̃g;݊f֋|o`M8F~ScT$^5 XX?985v`8XCC]gR 밨J}h!Kԁ=s]CM?CfS 2P0ԈVJUQcU\"c'SO6]|񫑏,}rtZ2vq[s7o.>kmVNw7lC{0lЈ9w2mF>FW-R/HH*PdQU[XyBYE[Yf673$5J rlxuOlk҄~F#IӣчR`*b !B~^Q}+1.0Lc=u-Kx]n1^inj{0ӹe=w۶m.Q[I[i VV<(4Nְח\ZVeIʂ HQq!$B([bs!"g1ܲRB 2g S4dc:a&qP id)LI:N^Ǿ9sE\1q_ItcUUU.*Н_s(N(*k&$*Oak#Mtcl,@+UA\9N\ۋvS3a `T :˷!:Pdlfǩ_ ֳA11c׆>]݆ͭͩaKE#C?X96($IH!d}P1DDH$ҒmJjrc "&ĘB %L̅PMc쇯?ˬ=dwo`ȗU4alg_KWyD QlJ4iDt|۲b 2АQ~nRS!@WT)cSdȦ;HRlN·󏭢q Œ1S~G_x^T!ߣ܆@\YfBh osK\ߞW?W1qxqH67^0  bCƟ`*{+5EJ[^eyy? c8BIX4]\m=Q1[DUP r8!O970't*FΪ>_gS`XK{ (S򾜦,=ր؂qcx?yc I!!Nɮ1 E7[N)C#YMV$cy'X4t,):5ufÈ 7E|XG 8571lJF Sӝ+ƷfQ ͍Y{" +ҥ\qhsh֫ v3"ƌAw˘b8O$T$[ҁY\BɅ1K8&K<N@ D~PξDkBQ[K"dM3IѺ$hƱ͕[ FάK=>nZVc8Ox5E0=S+鯇 QUʄ}zz!cƔѡx&#"><O[0"^$EL% Fpg膐%7crR euRj#Gh4rc )io&0EX)c\4ɒFSƠ*+HYjZcw<^L_rsTtY޽kH^:j` +I=fD8ceXXU&o~6&G [T'gΏ7sng 1 zىҤ,A~)E0kJXDwrޜw[sb}tJ e +Fm7nD/Sd|>ތNϥЩZ.a oHKz|^ޫJWEGX`,'sEs+'THx kW?13|L(+1_̄&:8`t,GӐ!x{fr&R@(QV9rccDƜV0rHQ@|QI"Fp$bZ顈Erjq(7Ci=;ۧ}H 4"+$\f2icґAz3mU8}hCCENQǶVGz>\k9ٗ!l*(17r2W!ЊFR.T$^1j0Vh5z'o۔M#TT7 (}`/1x=؁(Lqej$!UEUNү 0VjTzXFZQ1>[]b c3v?;k%%6ј2PN{k"=98[엲!4b %7Ֆ`XgnX"g ټ6rrA4EǤdcqᨄX&JŚڸ<2c[uVZhk 2uu:!m6V'XÙT %5&}2"̩1[]˧Z.nDH ʒf"NT8}Z/ DBX'}jR!&?NleYD/ 5?ƞp36>>|ğ+Y\cZe-K,_"tq?0 _.cCX ro^41Uuz,cߤ*~ܫآ^; j-2rs~wOs?i-c"_r3l=sgwwt;'-ØMc7]t+6yL~>wSp1!D161/LR :r#gq҉*p27D4F4SJOҜUb*xU,VL.AΊ=ns(2r~L;htW7.~/+:g Âs}+|XOOB&;xZfI9kd\%H9mV1A#J+aJTo ؁)2Y}e>4fn?F,#,c``1fɹB~6gެǨ_YY%؆%f_b6Bl1j0&>996,pc<7o_6gޕ&0w&mI-<2b U2LL$!c\-3alG21K02"93vsܛ[%`lb>c[إglZy}ת 68op%` .JDmI cq]Zui5Y~۱e˼{jt36حV+c;{(M cUnyߵJ_)WɑFF@7pc&XOwc [_ecUP>c;ĘKc:/_uW-OWF7=:kL6Yƶó9>c]Բ1LVW]=-> Ɔsex؍cB, %Gs䷰ۑonh}}OsRxgf_xϘo9󕈱lb ͝c@lNs椃1O&tǏ*8a"_rs?7oGnKnM=Poп;[Zf>cڵkm -*c c7~NǘuuNJ+?1Xsb$o<0J]Nԏ!?Ӳ1-cвEp,[zWehPVTQ$1ր}>X+w?h+ze׮WRD.!bNy:}l9 QU8wXȼu[`XCF5ůTAjC\r ⨔CDc'p [*lOj\?BqrJ}6Gczsx.1V\uP>i_7!˸EOQ}L8΁P  FW~Er}CJ4qeWZs>9=m3IZI]wK9@,kI rS4 B~a(׃FGB p(WQ7wt{ ! D[3tTE01yK!GA}׏_f,#Gp]o!Fp.X%@-Ĩ lG݌y^ MZG3a6N0vZ˘ȗ 3w\Q-b9s[17=--3BhOq&CKBӑw`1zVI/,8?r] ~XrȄf󲫼;`k]|9 &G>[BΠZu4`R+iNJ蓏qKw$wӛ--oo?Nz Dw< B!܁3|0riyV}7:mkcOj!|ݷmmm}|m߭[}O^r}I'6/[(,/Ƥ1m5c;3FG71vC|i:^00Tl>yo\ҡ1//3ZX)06,1d&^G>(,Y^fq g|7r2|3'؝aqZNL+ ,t..(rko w+=B#I0 'HvN;״n׊:+eg|y Z]ǵ Szǝ+>|t~wxXsF|E0o# l ך67 qQ.VnZ2cX bj0 ]zVc2,}ېg%$XŊ3t |uodqhtmh0rkC6r'`7^|8&|'þ Q:bo$y - ,~mAU2 x(gRkӬ3gl}TE+A6XIԱ9,E^IbrHwñLah PFeQ{|JPM[vVm7 )rzV1tIVX R]^^jN_Zmω^-ڞXEړޤbEmSSir<x.0 ,ygg}&,]#_"r1]r؊'>1W'tKLzcҧ-gSfmXGByCtKhE2"5&`}K H'%+a K]Bkx`bCfZZ97M\;Ckq61tƲtRK㟱WrH/J !k8,LbnP2",|}FM'&w*Q([@)|_^A\u2DViYi(.r YYɦfcE<&^B3> '>red"9;CF#Tqr"@2bGU9&5K* < vzhzR,DYlSgEmϋts1lWBTlP\ު8r c? s(tJ#q y HDag!Z~*ˑ{"Te-*m? i@Mn:[83cےJ @{AwF5B)q$FTB58W&u⫯Vyw pG!Q i;gZ1c)y@ )r- TҚ>."T9`*M"1+塋UQQ$ih 4_ub?Vd VDB*"VɢEl⩞Xً3&ӵ=*v#c:@h ƘE2a]yf|kJX7󞱅3އb /j}:cʵb5D)m,0alF׊ z~.tƞcz3ܝyyղje$yhs13"/GYbM4c+ #ct` g il⊿Tu ȹPOqBIIaX33gEM#^k,hƶG(czWyץK.|( 1c3aW1߶ęRsܬbmL˷o'o?Z\ӂ( B`ۢ"c}&toL{蛿W־x棷>~}2cQ?cO[&c Qyã)ּ 0%]~|/.ȌEXh=cۃfl}0s}gSq ֳ㏆/ˌEX!ƞ b̈́1}ío޸Ժ*VηsG_O}3><ޞ= _Ff, I3[7NS!0>(ƶc=7Fmo2/>dNʟ0K# R蓷1Ř^g0ci  +C5njA0= {N_\+*݌x#svŋ87S^+ *kLlmhcᐄ4-kmmu<d8Oc{kEN9ؽgĹ7/kϞN_R ?v B&q?E?$$1qp0vv爬{ջػ;1ƦXdIO[oĹҾ/]4yc &?$)_1,ČeU\o/G!5ۢclwQc@ X{'ΝN2 dV ?fq\];XY9cllL2 YYsDuߚ5x\8L?&` N=갪mQ1{^|凱7eĀZ1A+خƠKL3G+k`e(?K l5GhiKHiО;pv볹[!a1I݈":h*12cF‘Jt|1Bc2E%1By`v31;874><<>mpЪ0"Cr4!=ZY5bUKf+uz~-_pmJ͒/塍B |džyJ1IF~G]D/lR- >몪g]]{U| n9Bֶn1ktwLNKdշX #$ޠ1$~Ј@1 ʘ- ܈?Ƣ&^fƺ'c>1ǜ0鳮1Fc 蟉Sj]yU c}H 0ux_=kɄqLJ;ea0A3lQ@c!) Vh?Sv'W cC@$coPc52S+~9 P;PRsdƠuw#&.czylA'hRM3 +/ KYssiO?69LX81U1|s4cEc1[elÒcRtɆ48LU:LN0#Y 3#EJK`16>&1tgze2Im0cҶ0brl?`Tr$:c!2`l:~auQ䇽1 ȋ rIwKX'0XFI4cEoKSG3Yl&a8֢3XKƻrN͘z>c9A燽1MJB++,^Ze>śYe&52Ƣ͘j>: a/'c,֢XEkV pZ_)dƔfɒc,?ǟ1|4#v>̻IR‹/nMȔ2n}qKxJ9JIRuc|4݌9i7~lƼH=;?vGZz:yli#[ %?vG?h50-tRKm㹮.c<ɘVxYS2#coB1UY2]r•KcIicl7Mw`)ڭ͙c?zK\tc7cQ?V}c;McN;}{_n%6g->|4Į Y^kvO`ATGT( rj|>W+sϙScl}歟?,k%];|CX9$ۇ#JFJBCIzϷn(Zdvml+Wc 0* 2lFT$ʢGW%vTc|LQ?ȅ(Ygvm|}fe|K3aǿȈGhfl k^I^b/ģ@z[`Dȅ;~u7SE; \6ְ:hYl%͍i5cb sDQ0"x ⍼ %lf,ԣ:b\Z81rfR6Ji-#n! / te6z y1֕?\^ɒ6`=i*26cKgW? p܋G:{7AN8 ^mPrElS6)G{I QY Ա7Ch:c,-z_鼕u?V.7cJ2k\+~fgCצVԒ^p/!)2՗c *65H8㋈)e^:|S9N !iDkc,叱| \+DPE&T#i 5s S2FHQQ)L':0Fp {AP$ m MH./Gر((=.c;3 EuZwgCO<>;b|2ͤV!6u%`Ă*8{1==H(Sv΄{N9!+H#q3c,凱WGX@\6OeRjid99 3z[3+$ݏt/5|XTND`R_+")ĵq6iql':.qďhPy 2!Σq?4>a0VB"S9 `Ccc}GfnXr\t 58y EYϺgYg尔I;e4:_\"EQѨ;~HfLg3K+a|)دL,t%Is*]{>zwBW  .o*\c>y/>$`UXćZdwoi;ueo˽Jz+kL̘SR_eef̜uy(hv+[tSGV!e"H\/ F23&$ȦLrAOC# 1$<&ҷUhɟrr?V)?V_^]?*ͻ*[8NVb,-5dpAj 5i~2q?FO0d@LѲr%:+~e#N2K8kp|{٭5k?&EdǢMdʐ0f0 &;ۜ 6 ~LD,L{QRG% u iIjbuT*ЁTxjx_hNä:7Oϛ`2?6<RkRW54F%hNͺpyS6?m]N:Smtŧy޵6~zYefkkJ!xٚդڴiڈ݀V"SQȘӁ1dLcm֐şƼ`4,]ҥB`7Hx4xv%PD1ѵ( ~]J%cLƈ%'OX'RQF,u V}^UjUM>3w먬4Zս%{"#(5Ub*O'E4" A79ppU8fnU2$ƾS!)$wY(Qěk\!?NL$1澾lz"ӟbWm-uxmL=D[{O#ea^)B'=TڴZ#a#aLBqy.dORfω@^F`w@l@HkӜ'd?b" e!-N$-ӥ MؓgWm3tg)'(5Z(7T 1\E =4SoL dnTcO$ӿlCC_nWEj4[XKE! ^8@Pz<@3l%C.-aqaILs1\`ƒc,)܌հvl=Ē2x1FEo)Je1ҀSGxҒ6BǦ<F/yo ^4-g,O0~eCdE%cm̘ cixbN[`c$BR\ [Qt@ix:LP>bq"(Į[@X!zAe:Nx@ݑmaN4{\x #[Zsn;>"t,dfD ?$bph1FBa1 gk:8y 3)w1s!Uܳ6Uwu~w{(d ~dWDnc˅Ӥ"NrZ؛XP&T R)uA Y҂Gݑ;NR_?mp8;6x8qARS]]'jkwo.--y,)iSNEcD)XCt˱N9=)'*= 9H9"+z.0Pؒ-(DcK ;Ntl1 6nBʪH cydFB`7f֪ENC9JBd) M;U,B1&:h;90`oLu-z8$mݬMKK8)+Cql7iNzC[;)IWjBUWZ]]Q+ [uW%ZA l)(hˊVmU?"'?{e;dđj[&y4 V2isn_$7RSf+ oK]wmŮU-``lh 3kb) ;X%H[RU $X% T@E-W8c 0'}:Zd0f0rTc5`I˻(,`vڻdU  Θ v5&NKbw vUX|dQ TX;s3쳎 ?/.$1b| EL5I'O>I1L/XQ  1r0VT>rT%Hӕx'J@1$%RɠU$?]Tcc+H>1 쉥4Y^`)IPԕx'%0ckH)Йe%~ Hg$OR$[تV"rO?2=` O~'%Pc-u} ]~M @Pj٬1-4JcnQVѩvU" Zx+饗^zjgWrٓgJ(s{ =`Y+_Us^^rgEge!e㡓_֋>ewlP39cX31I?>{"~L5p*%P胧 =hGԣRcbo3&b L@vd,Fo֠RK!,NgmfJ Aǧ,>PtE=Ip&U^bոem(\ X UYZ cAimX[mBαija+zgy&^n-]` Tt.?aJuߠvQ')cJhX2b ɐ:0%YlŘ5s\kdG $3K1?˾GŐK}_%oVURw/$" &cJpƜ۱DZ!1`)bk/dPm- '$c o֥"b~"}b]KdAxvtgҊ1(+c;uXڄ?rz!E1`)fcPdd0Ɣ@m*22Ȱ!#҃1 C(QF2cxS \i6,k$ 4P;$h,%Kc ܽI)Gywt(; ;8$Ρ/3l,>Ķ2fd1r*2s2r1?eO ^FK+NǺﴺ@rP X]bT ˇ191V1$qX&c>}D>Ƈʲc NEW\WTD3vZ͒y!X,tZZ cTewe2 ta8bAQL_X"2 VI1yώ@O+1F%>X;FkZƪ)AzM5W ` 2XdÛX!۹4c;X_6ƪc'eUKiRߢ#c c~}˺3/cL𬶊6S1ucl]TCb,YPT VdO[bbu3B.y*)Nzys =GKWfWmބڭm֞cRT+ŷUu43F VcAܶBmX4T 1V͌]@A@>F 2c/c/SSX_5y >"ؗN6064{RJSj1Mu~v%Sv:>ֵ-m6,ZhZmM$u@9qwN&[}5Aw҄+uk9}oNjн>5뚲16owT[4JiRb01d+fIVqk7oXs-q# [Z->=qKV߬cu5`cy*Xcjٲ2F#xֺ&J-cZ\oa`z'@b2FVmpܲLnGFl?Wb<3-|/"E3i0V(cp2+Mh0/,4+\L'ƚd0L,bRX&\QFc]ʏ Q-EcZcɚaed,jlFB,+c6dde 3;##gȘNe0o6&`Ѽ.?k1Vq]*26I%#\́_܃c#̤ y2z7ũЅisb>yz(tk-j]SDWFQєo&~}G!$ ~nbcR-{gP5mh́xm ?e=4e} Ĭ 51d&Ʀc,{3#дy.C>l\|KC~6c_MsڜC.ߥ2~Eܺl>7 0'Έz`̾[u# ޾QuLVy4zty.|aNj67)\љq|WS(%s c,vj=+{~c :i)ܖYӬiz'Kg,p>c'gF\\c`LURW:eLsS9Æ3cC7~ }1zﺏxp>j7}u1܌r뿤k"1Wgb8'Fhs?^~9x)  .89OZSG㊜8v_ 6qk[1ᙉv ʅ1VWiM1c.11vtd(<cUlxtpxTV5\`gl7CRqugdrz6ƶ1VTxt䓁K/D̤Ȍ=)6Y cXibjTtTXćN50;Wknj8~DRfX}m|-Dt6s'Ìh1ZJ/t"] t`LS@T[vV1}wp?֟9,i9]qmR$̸2puKggUB~:3\)>Տ#o(:T`0V 3.cN[Ys+ielY$[Mmfʟ1~*gW)xuĘG0 '#/'@; hn3C.:үcLcn2 5KٰS/n/Z'.c>K^ 1oj/Z$h ߦck)~ҬϕF)=t5мK+t>Gsfs,%I8z7Ve`+,B Jf>G=:"˨Zƶ 20=h/du&{ 1܃.Rh0NJ6a˶@ bx)@CҠβa?Hp2vCL#.s11^-ǖflm X1'zN@ƌL?1ZU$d Ɩb,zC'anf!ٚ%Cebg\L~>ߦD5Cye;n079Ym;IgIh 2D>Ƈtw˙K!|&fB"ȇO213y."㊪7㌱G}>2d캋t!X"2B,e̘._(a cl` 2XdÛe0w;vɇ1J=SOelok[AUخ]~X3e}j ?ؒXumWdF)a'U ^|Άޝc[.ceC[oXcK /1b>"%R]=c}CK>/b_ װpym-Z+H)>Go͜eXQNid^wKөKv9I撌͏1%=fy $YdƎ/ cg=1>v.m[q]zS̞Hp[z݉tv_1&4/Ly*0N}ɶej+X>mI~TW|[~ϠR+3&gǴLU{ܽlc&EΒ%W]Wbc4Hu{qeLc,1ue;63ә&NҦNcש6&RkumiQiF4h%4]M͂I0hQahiTG?{{;;_վݛ{}G\)LYEy1ECz3g>^liEceV\^*CvƠܗL82;'+釂_QJy1Ȩn{"RIo\qx zN2))1S_"RAqLu!k1ud=pR0&gFls_~:MW=|_Ā?vҥ g,1[ߟ_d|1/:/kïNޟsnM?/4/:dz/'nocVV&dT/.j6c^1e5[VscWƮTkC.1tRMm,1䣨Ȟj*:ZMV5v K{R:c"Ra9kQ=>]xTW=@̗qR;m1 ce/QcR,%N9?JDz1I8jAý^y8;W{EyEzZY=HtkqzDD0a2)z c^F)垓 fB'q3ܚ1I8dsp.fBR]Nr'yK=f cǶF#Cy<m}26KFy1<4惹 eǸNc,ce/qf cWц\bZp818v7n=UդM'26Ns R9$srM=/ -p36l@'*uihD52p@f2K#r qϒ>`cRX RYAV;#u4ATLbfAI3LeY=< 䳩?n{hS E}R`yn1;/3&v>Fh:&c^JmIQ%ULS?~"1y&2YU4G^*m>cޕHhEMY˘] HLcRabb^*aD,˳c_"1Mg,zy룔uJ^q>?:5hae*ce*b0•+y]x/R[ 8f*cCeΘ@d7_rc,_2{4`WxC](n8üyTW|IST'|Zi96OlɅ1"00fr3,ֿܽm7nܻK]l0OV7[Tsr/{l -VD1[N h^Pr*{6M왞fQN˂{aʴ"dPFkLQA2X̋bǘs3.h^P4dǙ?,ӄȞ)F{U'6+GeZ2FSz('&z1`Ld˜vd&)Ù?LӄД`6kCpˆKW߶ N+J1~T=c5f+4=S\ٜ]ѭss칬gׄqPԯ!T\< '#!c4HD+8AH.c &K5FtEǣt t2M™Adϕe`b_kEiT3~zGIcfR^iJ 2".;U+TK"R@boK˝Bc*ZX/:&ʜ1)d`{$(2/GB|bR\&[ٜ̓ 5s0P*&ИѵKVY?,F\ƂF@l{мTh4RR;:}BR 0H{0039:ra,c~oejҭ>&~5i-"l<ַ ^y\w7ǦԜ9}MM}BR;[}U"KĘP_ߡSĶ1=xVkgH^G~niSؼT#L0BƄ=26#9ԮA ~|X.6p )gźs/PP)U_Hy"#-Y2@lCErItJI{Auҽ{w#xk`?4>zG?tgPcOc3P>V16Ȩsj wv8.ǥtKƥ5i~1/o ͙ 4&DCCC'ᓏ? tbiL5pg(Ujs5FKSOf+)Qq噵_,ExRY̖ÿƒD9v13R>3A6!mR*h铣W7<%D<~Vc}yrrwu҉YTk|TNkܮc\*VC=˳/8{C 1q,قq,tqniq:#H4vVW8-bFϬ1^ @X)-b!]K*-x{'^ ĥARGϸT cx_ƖT0C4v_N1j܌ CըdVZ]/VX>fJb1IFelm\ĔɎx\*o>Y؛2gw(T&n|P1nKcƠ@ct$ͨ0-dk+K,UP۫cZ}'(&7nzt=(``7;<%jf6`H/ͶטV=L4>ŕ2쩪KRZr̖&טdrk᫵[wטV=LJٿŕl^,k+ϟW$WW;K0}e?_15vٵ-SvWOWOoH^uq5viݸѬ Gqݸa=ӂ.Ԉnr]]&GFx45Kպ1GGKzeǬ{uX늞TLuAcFw1QKeqFsȈDhHru֐j"!h;ԐTK 2.Ld{zƥkKca:oS̼TD݈.PCZƥqL sqh :i!qzMG*#Cޡξ2.ՀM mRtXP1km"2X^X_j1lUR MR5uUcAT(\cL5KZD甸TMR5pD5Aԍ!X^cƥJG+kLXuƼO^&cZ:؛]]J?z]Z}F{[qP8}Y,,Q<WbՓ/e@_sh67d\*mW[)Ec=F]?5^!##t:׆;6;nh#. 7Kx\)[L7 xW&·B>\ BAGT4 nNt8n:\fa=V[ׁk4G򂗦GpÊikͦiIJ p!:f.1Iy -C󋸓39s؝ˈOJB s"m|ǒAof-87bW>u#pD[~\ǘ Q~-#Ǽt?tv)4HE\.eRg /MSHnaEX5fi]neލ RXsQzk1 L"fG;Ӣ9dM~qZEYc`^q:FqE*~qrFV咊"z zLq!A5FRIcq̌avH۬Y~? tLQބՓ/ncsm5o.X۫4t|MqE<5֛gBdG(8tB,oÍ}.d󅤫TIӖ 8Њ@*MFrIA#E4F/^|̮NXpފBl~ 1vhǛy9e>jޜ|va֮bwd7uOU0%'YϠGr5鍩 {a2t#IqB0,D(֨qCs8*Ɣ;S#F--!}-Hk>Eksƭog5&MZ-axSmġq';/I 9OhxSTan ˸F+jl ؀ Gi삈#NkkLdK"a$ō tCewnAQW;tإ <N Qb>8,>56 UoCc4htј.1Ec4FchhL{)hhl1Ec4FcHc411]4Fc4ߊ4Fc1Ec4FchhL11]4Fc4htј.1Ec4FchhL11]4Fc4htј.1Xj7|5VhzL4cu3V:ofbZJ)";^V:ZGe^EB,Y*ϺTqdqZzժƖHrqKi\#əI%S:4<t]41@h Ec.Y1Иuh24f Y,Cc֡1@h Ec.t]41@h kl'rs&.K3\o&nPi$CYujwlK#ƍk18;6:Et~J(_vi]"jU3ts+eZp]DV8#N>Xqp E@;?R냎%.bvᝠf>bPDž٢_] #"}u|5Ǎ18;˴&w+naŵQlgƉ]^zڎӠqqp EG=Ze>3 *TPr)Ifw9ٛ^47ow_.p,*F8&\;RrLrEBԚw_{xRǡ:8 ̧T(,vؽwoX$XrWPwE;Edp;6D98p,ܕc*]юcy Ǟ*"ac +N&X{DZvM~Id*0q,O#L1?mKb%y"J,p,$ҋ*uN?1Ci0hǦԱi8_X,c"cc"cc" 1ǢFc%p]d?vr.ñйrLx 9/ 8!J7" +e{*Jfo[+9Tfu}l/〺cW]1*'Ty5Kp,t|}Vo>Xq ZQw=qIZf εkŤIuDHP^8Ɓ`X._)g *s9vYXwIK4`LAſ"Mr uq1% A}U)kr7(()ʧu=%X c7{\RRSIYY$Y>8BX}TIov$\*%Z>8BX\c~:Q އ+sW|#z|#&Ď1Ah >;v>4:'pn0iHq،+MX=WybLAdѻCK}\XVpvkW9\¯FN_9]qK[8Bcjc 7}p,ڱ6n*O ? coZHgRW\7=H9~;|pS98'/fRҾ1 .~_RΪsͭa̫K_e9[)N؍c*ec8Zjc8Zjcs[ |ǞT׊E1Mlk&cj 1Xhi~N]GTƶn^65։B0 1%tc-qvN'u{P;5^Ac$p?Wqj+24֝ذԪ=1 /zNo4aEm[SӜ3Ӹ`494&5i{2-MӛJRXoaۙS_Xdioܷ[&vnO|΂C9i vOcF=2Ӵ ا]M"4~a߱ReQu~>g4Xo$&{?fM֤$Ǽ'H*μEz_l<t|.H1?H/**9}r61-(_~o1"܏y'|}EzzkW-ňc52V1(ipߏWphoA shcSxǶG4QǪ52:~[1yC9i@y@-p 1P @-p p~(_$IENDB`awf-extended-4.2.0/images/gtk4-menu.png000066400000000000000000001322061522325530000176570ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ȹʴδwȫiL?bKocX̿˿ӅZH\Hyf]IeMaKcL¶Ϳ^Iڢ~]E;ؙcL_JfPʾŵ]KΧ{gpa\KdLź˽\G_KdLݳijmPgPF71[Hق[IoafK>hfdǽn`ʻxeږeO+**%$$ƞy 0/.`Kþ443tc;::ĹIHFCA@XWUsqoľOMKܹ_NmkibK~{`^\ö{xt¸j[M<4Ә~TRQt`؆cSƿŸpazVCn`gL̡ꜙ񚚚mUJȷxxyqajU6NYqPAlVmcܱy_RإzbX8hŧo|uFvɑxžؽ"L/])U30miP БBY l/ڞ |lT\0.+Pz/--*Zկw:z(xmr!8FZAIDATxlgPRR@[HTk:5E R*@[t$C%(>l\+Mb,cqMJR[GuUU][i1xlB~yyؼ_ޙqfx.)D4ڷ]kf}BHc!0'!3C1i.-]S 9ip3%a+C5Zھ_ap8ڐkHG4T;3oM+ _[!ݧ~M_+8DtyxBy+Ɯ OAc_ -NNvMAқ-FAƈሂTT&e eY{LKCC)@BvT4^pu0D^Ecwa98(<a gB2$4E¸&ÑwT[H&aQ /Ś`Pxx"\mivȋ$|H*&%z_Ҙo' 8jkNv:\+K8heH_HgeHw_r.!,d #G#hOh\b^0I@lPGQ2 9uAk7n-A\ F"1⁺mV%"cNc#`Sdɀ+4WE .ȓD$FbDvn<5YE)a@AgSh"; 0u)&t8B2]lKP<.cdi,KB]KPj*HaAcDZTj?PahI58h P3 O̻3J4Ubwb#!1ds2H` )Mr.a GP] ,ŋ_ I_Vk*'ej- ǢY dtcK*v;FC7+Fkl12cǰ$-B0(N iױB +4&/d@p]Fe JUXp:(S5&5|X4.BpL&K, &QC*#ƾgs2VF~GwLAHc 4DaXH\bc8^?ñ:ƒ2mH[$Ĕ? C>3Lnl61 t7X¢=5L~56-rPhq eB8V)MT0XppQW>CLc~|:X=%6˥qhMBR"x,:~_i 7V+PyQT,#P]RW Yznm]]TN^Ec6ĵkʾ6NF'!*$_ >2% yW[ؔ3>샯P5(`+Ԉ)A8եO-DhaIB>}QLff^Vc aq'87߷q(ΐKh9Z)NrrAt_2o+XY-%5$Byk8sqh]3Dz:pfpᘑWXÙ+@ck$3wYFXpލE't.[p 0 ZIq:˳ %'`uǀerSD248sV2%eJz,l`.8vf+w5~,b%X>,[9gNk|BJy ӉL^4r%Iɋ-t{T,7Cb3ܬ,z>'Ϊu[9'mBC|Y=KZ^ Gu,%}im||x=El)OHtC Ci,آλHBe43RQ'j3vK\I|:si4{]9xXHfޛ}}7V!ThHj'/.Ə%f"#vvoG%Q5Vcε[lnm,~n]y~M?7wNe+ΧV7JO}T\\|]}H5cx`X1#6Js |drieIcTdng=Иϴ 'W4VNgU۔dpHtq=f2읓moA| (9E*8!cs*A ` Ԅw#GɋOȁ;eͽw*0pIrUƒ孰Q,:QYxBz 6URkWSN7ȉ"4>{mqSf왋91 S'yE(eJk$`Q^g3|j$.`+J߭iz(-&I-#Sf[+*kjuc?@#7 _ޭGU F,i;\*(QA+<4EJsZQڮF9Ű;FЎD*G)ZG UcݘkkAEU ( z3wXiEys}lF6ЎƂ"2ـ iUR#HU‘Ad6l&x(RiRJj J[ ƑQ|7D2j8#.8uU'Bb!9@}PKS*UC+{LJnjTnnnZßqYWz[EZVm[\ *˥ q4ʟu4}=zT[R`QҜ3Ǻm> 5.P>]:r̍%EL" /\]\)ݦ8J|=vj,7+T-Eߏp}MVjKʺ WPgJ5٬0~ckÁ#(?w. ygVڈ 6G: ,9}k$G]54ji~p~66FJ{1Rod;b^Ia͠sxKPkG ڋϢ1몹Y9${G^l_s &mB/FhKF݃9#uv4vL*gUnilB#c爂:^`}UXK倷7п kk?xӞZD=6lʌhlF>O%1+=y%g~ط~&|ھc]c߿@ ؟aӫ*U1_>lxwή@W{ ?OՋۃ-%^th;\)ڰbrrr3xJdUF s5Cغyh 6Ƨae/Ǧ9Ud1qC`轼ޣXDcKG{?8ͬ1X=7|=,Td3ט;DL_>g~Fc7n>!4=غu LbYֱůk ab{ R lY[h5]p thr߅~S6=F54v8n0[] x=Hd 109 7%ƚGk 9t;x`pjg /Ѭ}ŏ?[e»^~s|=߿1X D|X1<tӋ^\kG "v|Lb`UF|3j2-;hl׷JV|e&2.yJ`[DKoq\ѹso>L)*WDMVƆ+po# zݽݛA2fzM]Ƕ$?8yo߾{?{VΊIƭ/LD%6Oa i o\,r XnysM*Xgp/ n0{:^pPZ >=v'os['_pyҝ[Z(@.+;3[Z[nw]O*9KtÝ4F ?o^McHl;[wm?Lw|YQb֢;64IĘ %qnd",ƙ4VUZA2xAs1CFܝ!.#h6t(im?DR&i)QУYisObpl ?wN}qȄ>sޟ~[B,~pp7"x\0:Zj2pv cX~ ct^]0'r3*R{ c?} NowbvO؊a6eՕc2xF7O&c-/?L@/KΓ38I[(RlXȂ:K57g~wLwLOz|t^tҏ$y5r gg!c:mqvv}xѦ1Ek֪Š+F<x+z<pL㏶ Γqd!r&͚+^76נq u86}c1)닭إ>04(}>pl*[[[s fth@sVPj2\:2kvn_~멺ucyRl%<[_ NK2~z%^0ͦ%o1(%] KmS̾rl~9Ko?ÀO5Kw_w˗jH|)8E|SPLJ_K6=H>XE jc+)-Ine KG6*iFq֤ZRɉK}P^ d;ZF4WXn܀ݸO$D[[w+65+kl\26 Cm(}V;^pHǡפcáu8((r.=D*2L2r,%JJ8ZSavC)A8F(AQǢX۷f3099{α RO:E1Ǵ#eqD|4H)Z~L._y#<9ݨE~k<~/Òquf0 gF 0}lފ 5#$-8FC `;S,rƨeF Ƥ[&n)N/"uSMsҩ2˒ŷ]NՊ:.\"oR☾߳ (Qp8 LqY%´ ŖDy(0ǀ8DۭD+:=2^G:u,DyHޱ~:[Wuloy{d佢c{##EDy(&{Eڱ$͞#)5H+:Ա`" X%}rEѱGBœáNX-%C}?Q9T^З_Qr?G,ß?rMʳOJCGMcJ/xߧQYXJ m YD&` ނc}fʟX?T̪M- i#CȔcx-0IP͆)_D%% Yi8~ n'[eg"v/=IɱPb!䰒ch¿>!UB=@Z@5PL,>itsG}k;z[YDǣUc"E10}4|jK/]y!AxC(pA{P%Q`@mf)hI9vQbv wdcv{ױlY%k5(LQqo={kl+;ڵk_WuRp PEN$@Y8`F0<9v{b<7i*qPv7x}S(.LW:66*^1Y )pM/ E R; XX,`YsudPkMqHFZizjGaPD& _y뇷~gmc?zN{q(8%sQ&V)LH)MHSvNٱ)&ǐ-,ulB=~@h)$@޾嗷ox+3FX&}[=TDI"ܨ1VR.?wAR PtN,cbar%OkVaUPAZyD r9&"l9{s`j w6_c& S0cפc@})q5Emya"ʦ☗G_A#Vq tppE{swu1L*qX` hi*5"{τD/n΀{_M[}s Nt1]jv1aauE$Bu,N*YTE'H琢fjʎN09z1ہ6waaEmX6bV ^&.ήֳ9>qnhNm@ލ (pspH-){Ww&s#agHg[Ayfs$rasrӝv"Xqz y`i&o?r OBeDZͯ4&0nn#lFUƣ,FCemgxdtUUUͭz^?]o!,-U0%5\C{ A ͎*v.o4 7G/ 9ttm>f"α4ѕ5V1>K|;4I{Ɍ kXF;Y||@r' x?a&qEUf8cS,Ƃd W(fu#`"bKqX2\U"*+ l/,9 C o0W8H91x\ŞK:++; df {/$ ɍ90{"EUWа}AdeKY 0~X*gr FH1c@+9qL(͇@3 bE̸<\jLȉ|Pxohgb$ͯnkX-z9USB UXC++[ VHc=ȁ84;u aȶ0:MGg ɠ…f>^q-nKe^X4T0N1FVo~onslгu ;m՟ g}\8nj{;f{ڡ'jjf/X"Ns6q)qL{4$^^Ȃnk]C!k44Cx0ruN4Xj%e&>Us쫯 @oޗ4㒆DZ\m6Wg64 8'&!gfa[k;N;Q[BK/@V=ҼxgןeW74eWUW7vF8 h5E0pblpWG[`~ V>`e,"ST+*-* d*;ǐ)&Dz33h@ ;<Wij!g|JIs(E<-+fs1_l-&, hfA̲VR2 *+G9iIXZ*LwҼTdVZ<-555[`܆Ksi5nCӌ9Z;bb:v1p8E[F9w1)>#Pv2|r|#\K.ix;v x.x|lytz7/%Pv,t}JǞ+:KEZz4]VM* )-I H=A6775H MDuiF\mȥ@B_QQt*큐<$KS`2))El:(*TzW Q)WӔ5`q)04$M1_JR84ăJ@T dWMIQtgGBŷ/Uccz} %E*qRIiI91|۟ٙߗ*IHI\$.Q/c5zlY Z'.e;O@=Wk[neI'+d(,P/˹X^9vϩ;^=`}wua3ͬ|Ů 'J9H a/\]yҾq X<+c]f/:se/'\u,\m^Wb}˳3rlt{R w l:Vccqc;󼲶Ι^j{KnuG۲WتcC(?8a}ab\`| X|ihp+69]?<Eg<> q?FoC;4MNkt<7;:?6n:ئceSgSe"[ZI({Kh00Rth7 zfp:swljKSBuKAR511 ߸)GY .q,A~Լ 0U ~.HTTNձ!HTyorm'X'1PڙwcA~RIsVDk2A`bbcq= ?bv\,6>)T2ܣ&ǂ+ 1ϠAK:$yoS_"И/o~#۱g[#h3Ց !]]af!,1Ť eZVHP :I?}== mi?ޞ{j2sϹ V8:ᖬ:r8 CVOTKlp&RpJ*E1Gح]8guG1h~zwlp8|ʒ-XK:ƍ=dT_ܱ_EaI)|nvݓMY3z ı;=L7"|Ac2 :DDdrN&)?b'֔rz+.u3g2\1(ưP]Ǜ27~)`pcƱrx yE3O8Ǝ߱>Dz$˧ICdiOȦcmҖڂkO||>xl?8X3vlh#-~l+S t;_`` ^W\@to$#) TE~~UZؐ"cʺ=U&wޕcӝfv* yBmv2hoU1!옏Ow[gEļP8 gvlO1DaVMD65.p~b@{ݸEa ]q P/'ʏӎgLO)ROfOX//uR9@CbN1ϗgK|q1v>k֗}}jgSSP<[Cu֦ҀlnjFvK$xu mchNgYi.Dغ)Bnϊo>-8;ïp}}ڪLa:ϴc&n{ʣ3y;aOEc|AIؗZubwY]ּOj1X_A<Ҽ3 GX ?~|/٧ c?Bǎ ?<89T\ ]\dᙏ?DZIH`0ɎO$Qqlc#r>++ڵP~rΉűY/ 1{'8`*Q5F? \\g;"K&:B?=vO:rM50hG$c+6r>ƿvk|l5q:yx*͋Eep=J1n5 {{tz$,wčF:V?8&!H$HώE9ˬ@1퇺U3*7cM5;6f]}0w $:߰^r䄃3~=% wC<N1B(Qy{vXk#>PXfK[_nk =$gՊ:y||$xqtl|si4|XFq7tu#'Nʐ'6 lcZ0sJ8V~$2DNx7֮|?rm$ƦE@$wahmϾ$|zat+l:8Aձ"V ;F;Qvlzߋ/= ױ2.N#+obo,9$@:zgvve=T1T;pu,qj#16ͭ :$۲>az~Ifo9,E׊;RW!VZs̶SUU`KO}l_^ c jSn*c!Rr0Aı㗯+內6JVn&ZT$8{}e~BAt;Q쒽筈cp Np&\F B$ڋXcnq#}}i8.mmH&X 9ᫍ$Oե uz1gVvc{VE>+MuF!ǂsa86XJ;>f0ؖ-wbK]S*N@ VWAguېS >E~⪥29R^2j#Su?↪N1-Bx7W[15N s>i].i"o1c M1"|a -LT>}RZ42G{Sa$KMʱs.xj#SuqͳAq8kZ[?lϾg# ǖ\+u[Batq@#؃/8R~o7w>V %+'WS>?7Y BCmy:!c>W^:%X|K4@:QYIسWu;ŕAoAwп]4x58wפqLK:Êq{dm5o9քЎ#<b`jni 4 'ط 5g?Y{=-g?,}³{`<_LM:eY1 &oùYMz7X=y\Y[t_}xVʠ"iX7VXXYT6VQTT ScOh*2hL8Q"7F Rb8q]2W*56".W$m8 W1WT1ZRjıʶp𲍗4f/^p)˜r$q_1oqE[݌Cf* M-x,77]kV\YE8lKR4" eИ`7.p#yktVuils檑Hsba&e ϔO-iM)+=7-^cL]1GY8HnL,fކ"T&N6싅+ OPNx⊽g 5KS*1y1F? q1q9ƫ`q6<s!dJ#,^]]IU+@E1T ЫFZ뻱c&2qriyFo q۰/[HhX(}|1$cdus=!kjcy\DV@n\꺽.n.Cs6s@oB2;9ٕv-h9 gƦ"彫$H1[O@˯gIebШ1|<HFRJIcVx'qcv~Ib\r$ Vc\}7뜽ծsq۸"pVϐO2qr;R3"096扼1'I.ԅ.nid4{g$vE*݁K`ޠ,>qEອZzeb:1l #'1VVBq)ͩc1|UUyǓ~DɄ?OOp6ٛTcgDZt5c*գnq<&bl@@kmIcL6c~#f ^_ ҥs=hqcGDqYwd_d]6_K:<ϳ(?]XrX%ߘJ5cH澢!tnæ',=Kcd7Sj̦7膔7ZW!ێ0H ]4]e'67&dG !6(m!4v Fci,{VJT 2VBAAb4HcZnTM<7&`(&_0䇭Ffdޘ1&mb1 ̍ecbč+X}}ƀ hl824 %1cV-u@\W1H ƞ_aI=cɯA{|_Cv3TL3c،)DԹ/mK\H:2tvc%kiQbK1b<.$!cnju1>,g7lEi 2Ʀ.؋sv4&U 1X8^=])(XIc@l)^eX{H̘pl>:.<nf~ˈXk1 c/J2n,K1ycmoF{c-ƾyr {?M~Z6 cOHb@1k <&`,H w% 4M1d 56u}uW4 +Bg>zly4$Q_|o1=a,w?XSMX T~1NEf ^SœP1 ɬ5P7<5Efmg y 8{4z&TyX/CHS=%{2v1}שubAFFvEfGWLf%jl2{yq/J{jA"A߱.{1gED%珔DMfQ͜'X$og O}[(76{0QcSlD S [D;)4?eK͜{1u.^|)v0[jd<&U 7#^Nwz6؋ӑRU'87k椠.d΅~۞c驙 GLm΁~K4:ciWbXJ+LSFܞc/T#%p(>Radd?%tnO8t]Xyd_!bfNݲz14\:g_8dd?haJ I͡IfXydc)飙vc8] ] kfA(ƚ72-vc)꣙ncMncn%%i2LM3%"kE~>.Yc81r%Ҳ;:;5mƎ{hPQ vRv]Ԯ]6S7y÷"1.Th?2mTL1CJ澢!tæ4#;rmZFu`ane&-=y30J Vl.׹{?2vOfac5ЌX 3'G~Qd0=ag>c-RϘ1odOY.[ҁoՈ̝l ,Fg 4dij 7ǎ3Cz^^ _ _an8{FCFIAAR$ov;;n ^%wTS^l/v䲱+E(l@in]uJUU N?U\gB\l;k7Q50|}9|# 51;;hdCc HN`chx@BToף뻩zP})s##0x⛤ a5@_BYl l;.AWeG]KĘf6< f`_:Y-ͿTa!|2w>ڿd9l=݁qŋ.d~`8`.<{A:؜ U_ a۶i` ZAlޙ#677- QauW:|pFutPg!E[LwvBv;bu{-׬z<;)V:p°>cL(&EECRI"#ByN18QV*hpaq8[!8 'ul4WVFOǧWQ"'\M6MQlx5n07Km6KKCY@ PCķf7&&{l}LOg^:LK;ep!|LLOHQ:cU'*@TʙV1?F, a!QQ)$rI@@uYͩEc7gl:Cj1vccc߯؋cc?^c/.:9U c%]\/wƘ~ M*ẕb +ƌaa 5Ůi2!cL0f\y1113ro?C^BF}«&cCދ~vs3#P% L/\D?Ew=TPc%f]> 11#IvFB ==d}g[RwۺdYW[[ Y,Ӈ2v}c벏acwk1&cʄ0+m9>.iy6={VRAJ1|O G4]_bĘj1}Q1߱A/ѧc} GVWb0xǓ͏#dڊ :#j\{<?9,_Pt6U^m!ji6Z8ا@"ݧFhI<^H&΁>s,TdX'wBlS#sQ ְo1fE=0棶vI.!|9^G`I=< ":'1A}M.c!cq;3ᐇ]L +LtԳ6LNy׻1 ShB/8DiHmP1?29`X%UnDZc1 7\ amA&$}r~%UdY=#DŽwp1c72^b<a؜XxOZd43fӋ`iP_5[c8X0Fߨg4䌿ɗ/'@3cPj6W}8j=r\mrخX4w1!Q|qo"o2Œ1 W41`-|:ZqlpJA,mdX Of$8.0cQex PՐ` o>on?cGr"nƱ89^o;p>mx c0@4cHw7 C l1̣iE=9= ~ln 3懹=XܻwV?w|u{pc[M8[]9cvcGӺz{gyE^lӲ"X] p'Mzwc'<1ҬĘ@(Wa_0z1Fͪk㮆á>oP|fG8<%ӏR0{1=2c,;EiN"Iy r{"lSj3`X4)ӳhay'y~y29D3(@>"{'&&#,$X0Vw^g͘Sσc蜼2!Dcqq^177SAl4t!c|2i0~SS3"Ɣp&XlJw\O Y1?jNjlvdy NƱOoG@V؍b ڏ$\LB+$&,c>NS$::;r~+cQ#j?j.j? >+0<RE͆b5<~%-v Pf1dץ+U덤$_8fjpXTd_;=%p}o? @b:=ĎRN}k̢0a9Bє&b{wdž;\1VZoz1NG[3 hJ`%AU>J#"i]ۊX#'&L0vʋ@6ɣ:b9=0u4 ۢyb[x]Jccf# ZX"D~C8/$W$gN&D`b`SD91ɀ=`jf{A3vhm\dI5-]clJ)ߦ=?]Zo( D]H@g6$ߑ#Dj?ct-/OL菎˞?/З1v=Lմ5lO-(%@~یI]3@O*e1W{gat[<(d˟QZoa3 MywKMTPyj= '=aezr%p(ŘO;_ PؠPgAqMG^,hIJ%~<եT7 $9VGYwGTDph!"?4 FG󗓻،1?2%,8N¨0}."v'Xr\Jzpa#Kt$M:NJ8I،BƆ9 شF@l4^rVZoi(~'I?aDGccoV^+^zQ'bגk=~T7M&iWc:ET"M)l<ܡ7KúJyْ̍kMGRR4ChX}~kIRWd_^)&c!6clp⮽l3xJ=3kSEd={-9ߥRHKUji{| .MO6I%S^ M@mX.tE`bע '`*f^)c*YA%Jf́$1ڰldۯ^)j{[dYPJ3u436T1V;P$:*@hRxn cM-mWr @tOOZ5 >:<<]1">UcסMc+4&1IcLmS4&1IcLmS4&1ITժ=ccŒo6FDzccQQƤ~]Nm&Qƍ44ԣI秭nk[cLcL=foo6ڎ_]H=S>uJqZ7&A٭u2jS+9/od䥲v~|M<)f#ϗZ'EhbuNtѠ1b 2Vj7 3I?9܎S3$gXOzJºqyKޣy7kmwW+ĕMӣC5]J \1beLz7O[cEC`qxrIOS9iX֗//O `Ypn+K1 :2ց馂}Щ=rr/bM$ 冸MB 0&=[~.e1>L3zJB܎QxK"ec r1euA م]. Yb pte{}M=X3LJ}ʌI0]bl9c>? `qЊ{ u# #a̍"Q\^Ց E,7_ӅWmNp{fDKOֻTRNJ4AqLPdWcg4A:cv/n)bn16+$` ?I݉Ҍb cb~VZ 0F PP$ÈQ^O ``86N,Mcdgf9h1aTp2ءbHbk˶ˎc:P\D Ic0ƌa1v>Ƅr0FÌa, *2d-xc YC |wcq,*cg`Xc =8aT=S<tS`lԍf5N$1iDQ6ˊ0b0W< 1f1b/yGV)"nJca2Dѧ"X 1A0p2R :EܔEcLcL,cH`7CSh[[玞Fbo~U+cFzh<OLqE@tU1<==UW[#M^442eΞ3k#3⋶10f8w7T< sy1^ `PPO1ZcA\7%z˘jo~w7Q3 a cufYԨ4C 0%kCr vY\7%zXMs{2 W0V\# c9,0 1a"H`nJ11&Z̎!óXLK&I*9J@fd n 3vČw,V!:rݔ茝Wt:,f鏞0' ؔ+mv(X0XC ;Zk@ .vX `P1]4BGh{(8!:rݔELjbV}Z8c)fƹl+0vꡦjC"{dd POwd4 Ca?hs#M^*~}Ka]_F_F'rlыXdd^XCZj1d CA ÈՖXdƸcȘe}͐(0CL\N+c xJfe$@Odb@FCDEko.}@yo/L- Ķ=~ƘtAk38e0$7hv(cPWaYG_i$mjz;i# ãoo~_Orw+ϻAKlZޅg&₩-Vo[Ƙq7_k #%b/ wжMxs/18#I|Ŵ@B  k^6±.yX$62]SWrHѶ`D71zHc|#v#O9["-PҴl<fW`)IwyQn1 /OV3ZٞLƴ;9S c`|wô9R_q ,.'Wh dyGƘ'67)Cz\5O0ˡ QbVnxZgR}g3FJeՀ?eSe[q}(c.."ݙ,@~j~KluE|+b)8-@/׼ֆ5-%%\))ʘhȯdmalzlD41n)؟8I`l݇Rx3fp}]1j)ȘoǡR&df]tpjZc'Kd1!z;7:d$цcys0V1kz^+/XN4P:c$цc p;s> -(!榫kfZ2:ꑫRتGuiCq 8VT]y92dXrsCs `YNV\L|ʄ,֩!^cx_Je yLgVzĸb\$Uhubhb \<@"1C2vZ~Ko5NoVP"v,X0cN G 9E3;`3`lZc-RrCM?oʕp}M,dBE-'cL2c1ƾH8ۄ wٍ.jGv%{ɿTޙUY]CLc-%~8B{V\ocEǠ-(+rű31LTQ4G0MԈѻKm-g=eU&cs.r+["#J0!fA1Vwyln׹FH^73/ݞ*/D3fnK6ls)AYL2#Uh9h1u7 Eh1c,d$25]6S^F|I^nOY1ˊ@&4Bl,Xrti2z+4cX~ccL|lˆU| ˆ1X20N`j(48myr6S^Q>bX,cg<3-s]j3r)[8P.{mo$1jcrcLc VDCE3Iqb7a|#{/3n,._Fw{ʫ 1FTm1oeV1HX zq]ValD)3=xY#lxbL}/e Tr8Mpg^Wszc{r6S^]ƌd<ꪫ=Βsa9oev8c-0GQ須}-ٌym30cJb,sBq CXcvtOL &n8qrc$ƘKs9.ʔptl "ۇfѶ=Gr_2!+p6n\el9Q\>Q'V\o3܎j3k#3⋶10f8ꋵ7g3h˶E)ScޓSN=KxLc3G#Icvzcu9ƺ0U26l6/~a4[=| 2 Y>Ag4ʰ!R zMmۅuJx-Dl6ÌŞ5teēkC)˕|*;A/ul^CYbJ:S1h$UieWΗJy~KNb\c_m1TߩfͱUVv\a_G+ ` 2D}+MZa*Xm~VvYDR1:PШsQ*W!7dC0MʊܖKoNq>ѩXEU47d_+f{զ\X͡_({+վ90WQUĞG6) z߮7jS}ŃG4e;^EuC#T{٤(lHZh3VX~r%_?^_{Ô8fsAd5M'ڑ`lʜ?|=눱n,oc#7%Ò zz/<{劲,NS]uQM<3:cEcz ֻrfVq &ַgDIYaf} ޛ!Oc tA,cn'э(< R{oҹ893|1Xn0̾H/4hS8|ABVa$;ge9yhȉ7\~O`,7٧Ӌ3kN4lP(~J\rbM z`,GFs X iW ѩ`h.ƺ8cZ&&eYi7 ޛiyɘc4ͩ{d1[P:jch0+^>}EʲNh.qt9C`?QV%\ԱCmacM4=2/_S8Y0Ym);>9'Z[]uKY.պ`lEƆ :1iq̌-:+Qv69vD>*F7fc6'U'K1“6=22fIA˻m7WWqS qF=+dLNE0cߘ5#%qtM{k\Ц!:yQ,X?8fV`Zï9DqWecb yEggRMJinBc6\Q*++ QYݕlbL$/S3v"0")ӈyF025˔) %: Ws1I ' Y{أ1IclْwqXecb#/L43FɘBq?w>{rϰ$Տ7{^I{9> T3I_=큖A2K eJW$3GKT ǴXk؃uЃIy*)_(35ɋ* Q2&ݢ]yL]i0~7"I.)MQ3cbh5B_/_%C`ZUA[0f>-pN+%G̓ǾE ƺq? 8}55ဲ1i_{QB1JP]Y@!˽vI B qp%ƺ),и$uG)z3&K`(b;>敉=*R{_ilʁ:b;< 7.7N1|3jR6݌륑1I݃h3\ q̺1%`W ނW$=L1NϿ1hYSHǡF#ec^Zz`S7]& cw쾫c {𢯗/xWgT+]E.It3^4=*DnK,Ʀ:%vWBu#>HɤPX=1m W͐97wFU+^e}2؇?`Twַ'ѺA3`LcQ0Fg ڠT=+^al9`efߠ#NV iM0GVƜ@O0݌e2d-U ƲE*Ms$rKb,Wc&O`L0^eI9QnqIbg`b#ؤLc*Mʙ>vFQ%1fv3g`j?elRf&1ze9g@e\)f~%ؤLci`0? K\T3F9z*Lq8g58FFJ:c+(G3 դFĘ-v&&y?elRf&1+lh(;Ce ,M}Erg\)&XS&efVZo3QV| Ԥ8{#9XP-`yMah兮I{q奥ජWz/8cjXµ~}-jX&k9WMGSM C<ߕ6#ŗͳ+Wzu&=0sղDkZ (_2njLFr(Gyu $8pd1/Q숉3nU] Z{jsLE+m &&M\o3 wg^ mBkZ?F5'3@̝b=/ĚonT\e<o^L'D'{e5Rr-yM\o3ǧ7^'ϓ'Dӓ!lu Rk.AcoiZ1qϧO * 1fg|I *XZrv8c?nɿIe^yCiS?d> K̑ӫl81;Kޏ7]|Ќ&y43#+4r0Vo}jenw(csY[}_[ żr cKellI4J1eػG6oa^D74Q?iO6<軟6j&3d;1fX16hӏV,{oV^:cMZj4x3vdeaK~Gc{&v|^c2+-̐윱籙ťky4 Ru U6'(r7s^NIeL8cr:;hKE3Z&XgCѨhD0c[CgLYOp՝St+ݖM ~..ةmhh#g(URmmXSccg3&cu5u$8=Xo…?$ /\)XCY) Ea D,1茑jv+3gt77H D8cr~Kkd\ϞôFoG,onpd" 2vqW ;J gsɹd Ѹ$c@3+7H D8c%~[rtgLQr)"g Ub7'MJrv~3KnԈ>8c2#7H1 D8cr}~ %ybgvYB8tC#MnSAI C o(3c8y%C71;gLJ+Gn猡/+C̡ͩ]vYB8bꈬw$ጡrq5XKuUc%qznoDGFznoDGFznoDGFznoDGFznoDGFz$#c!,b:"WGr2֞3Sd4H&1H$G823=ݑ+< W3UJ0f͛fK"oJqA.F&꜅kGr"a A7\^^Ѷ29QF|6A|W7Pc O]o$,:2c\\WXf b+}d2Gqtefžhk%nD; ^"#3FP6O\|}fכcV&Ƙ!1EgB_evChmE-W.f17g:U(c7oڢ^鎆7@|2KcM2cWhv2Kf_TX;^3U*^Q77 wps B2 q#1}p!joY@Vv$WR09"m8D(yld6QIIb|1#3dU:}̓pq)b 4__POW.u+'AߧIi-z-t(F;lV,0xrƸR2_5ʝ;U 7x5ܹsEtlO4tC+w%P2k,#q)>cdΑo9c\ +qƸgKV9M'^&Ielh:'i,h'^M'֣Ӄ rF߭;ɉW`2FD/w9:FZ ** :S65Qp'*:2*1J!2,g(3FUl*T)ư`)_$ƌaĂ-su?yk)r}_c-c[+z(6v\JbAUha%0EFػ#Eh2AgʥdA>CGfV8nvzV2t<%R#dѠ O›^+଩XB0897DdՉel!/[ 2D14LPh6!38!cvY$߻`3mwh6QΫda|,։!cX)0r|^A3I4F0qY`nԩvAVr;cZ ]^:lX{>#=$9謹B` Aa`18Hd` $>%$JZ!SA9Be&deO2cKqD}\yi(ؔ1NQWƨ:EHGhCa$Glc$FF#4)Y : K5IvHċ-0qfBBPa1,"d,7re0F|7܁,@`X/?Nb1wXkoglbۿPZj7c5y,LX)0Dcؙr^R,рjmhnDX/5ډ52Z_|wo-cR n88q )H |XEo(^Ֆ9u12rj2LX8fރwt[kۢۚ1[ħ:JȷطQdaW`L?`bA'3v[#")t !q1&6\[7h c00]W1ea!uR9͆aȫByK&\o z{x ygPYblnm[m\n6rneV/6"cK^t0NC; SH!@, o۰]"DZD)-LLNM\o1FHYSc/aR\čq s)H/PrH xqM)]04T(?D'I1oq^F1k>q#_+ΔMj=ۗ/ {cvkRLfzcqǤc*r0M_8&S>yfzcqJY[Yop,nnjcpLcxcp c9kE8:18X18cVcpLcxcp SoQs SoȌ }8f(p,{~;o0 n\,| ŔV{6|ǣ8f(plќ0me[А;7|r=yu~ʝ2&۸13c;6c[y!~c;9- |~YNU+.ue6"&NENcfǦwl7n^o7jo&ES|WrɁpX ޱٲ1Ro_7y;R6vl ޱl[;%7"D(RqT8\+ ۱ η~sd(m)V[‰6*7Uy ߱Og=Wv6d[c&r5y$r}EOZR",qp泗HVI${g>N˲^/+ؚ8\&|xO>6 9880uv [>mX/{>`[pTv,t9ؚL nj cpL-p 118c2w'{i0L%bNN9"<q:!=SȰcOrXg~"c]88*ۋCwˠ(,,C7CmI( l!ٖ,LE>:uP/NO˯~*_p\ QV;t@QvmyEOk0tlߓ \~UKv1c㲨pvmLbÀ1]cd1& 50,ܪg9S6vwrzqB5buLXޘrohݐ5.6uߏ%ҎQs7yUBF{l]lmWLߦwcCWLӾq}E`?m61o>&Bq';ǘJ|h0&_ ֿ`FXa^{ o`LFq-TU[sj؃1QcFx\"H2a7:bcʥ_C~=_Q1+Fq}ثq316Q='Ic4;1-SV3Ii+c.Ʀ7vF6e қmbbvTϻ~0d0c06ؼ2w[`L<2&c1 k c)gncf*| c6&dɐVH_$Nc$y^:&XRfzcrg X>+kR6zi5܏>_>RcLrg"Ɉ Ƽǘ"E{_QEaAx^Q"gl7j ؍ױNnØ}؝YwGͺ ׊F=f1v#1f1v#õ"ac60c72/ |W02S2c70&dΩ9s2s 6XRcr c:&S3۩cF1CLр1os1acAHuwB蝇1ט,J'"Yڽ0m33;e*0m-%X:gYv ˔aL\{M?[{=gh1u1:96Mƨ :1scLйor]6.cX=\1W W똼; Ri̤Ig`ױH%ccb ױֵfV/quƨRBcUg;kEol>V G\<ckO t?f4X{\ߘ ξܻ}ƼXz:G1zwϥz^Q7gFƼc+6 Q13Jgٍ Ƙ ؍ Ƙ ؍ Ƙ ؍ Ƙ ؍ Ƙ ؍ Ƙ ؍ 3 ٭x_͎w7_s wA?Olp`Vo9) o|z88XNpSF,P)U8p%ĥ"|H ] s@Re7P#E=lfXvi<ֺy3;<X88&_7?DMy  XN f`!pLd LdX cwsc^ peZsMpq։:E̕L^)m16gO-\ _7Gq,'-uN:>=]:.r?v(8㣙Dڅ1S^ ޥYV+M!yc-K-ؕq;:ZQk[:\yveDeڱ_.8I]h/T/Mayvsw3Y玡NVTrVN=dPWL_'.,ygR{L& f9bkDo˻)c#kEq캞h}FG.3ƨb%.mFǸAܥʯ)Ƈ Ի-bڐ-Xm.C`(Ui؊ rϧǿ::?ZsWK |6B,Rl<cq u8\VNc8ysy}gM.+u_wPlxy;F} u8 ~ Ϛe|dL73jʱA2[%J,RR(6$p uuLCE\_([P'8N|v8{\KC^*8 cpL/p 11űcq5Fwl7$OW1q^ޏ97Qi'sWn8? 88((?\X>c^R&,X.رĝhDOK=Gw*c]1 @/p 1 @/p 1"{WtM5}[%cz c1aRlhnI[151efc3gPAUrԳ>Qc(%VcUZ[͚UN*Ve~)Mm˩~[OɞyT,M--p āVxKul]tWG=tlWKΩߩ.R7?81ijm=)v}yyϼE8'{8WxgWPۤMBZKArbz?=EyK>q 12%džP<{Ho'S첔OVqK}8@L){O0߱JUDՠ옵I[1)mT>mKS _u6vq6vl'eر$eQ#;fN~{N_ZqoĀ)ǘm-4;c.#g,Bj$ʎ]խDvDzE,f,(}8…y@/p 1 @/p 9ɿy" YIENDB`awf-extended-4.2.0/images/gtk4-rtl-menu.png000066400000000000000000001300651522325530000204570ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ȹഢwiL?bKocX̿\H˿ݭcLZHҋ]IaK¶͏_K^IͿdL~]E;]Kyfŵʾĺ򽫜cLeM\KfP{g˽F71mPoapadL[HeM]Iij_Jn`wd݂[JhQfK?ʻeOifdzf!! 110-,+gP㞋yIGEø988''&tcȽƼýA@?`JʾOMLqb˥ܩ輵UTRXWVaQҗ~L<5ƿ~|y}sqoj\kVɿºzxv̹kigǿomj^\Z~bUca`´nTHgMҀYBŸxTEڅxtqȷגhU6NY~ܰإ'R6eGwl0.髊{ɸnunmR*dڈx^@P Bװ rnl/ݨ/. \0B}b^z/6MU۹oz(w:0Xtg)ĨIDATxPSEmOj! .7&&vJ܌/z3R s=tBWFI*Do6qo)H6 dV*NqޙLu:99I ]眼>>焞oߓY !^ i.ҏG4۾%@Z yo!W }e)zk}1j;dc߮I[xB͉ϾʫϜEX$)g}W CmD AR95o֘0"IC_~)X ;x~$9>{;(HHU6@ MQ&N2,( !6ߥG >:T^p5/T#^B<$gTcR )I@Қ[#R.4>ru0)]$#.vzt56aT7@=H,6EI0niZvHIӪ"^<&x4ahDnjk ] MZqo+FLh;&ע488rKxBRNc3!#y&D#y`TRsa^u\j FU4B"p:8aXK6a슗N5Ɠ=.EH3*2] >p&H@RMCԗ[Okkj"-kSk/f#/zLV1gnEW2у ?jl` KCI  $ cfbAvB5!=hF؁O(K1\cfĵ̂t`lpSi34j4 )_V7a%5kj},HkeW婉4hC Y͂{J xjw纑4w=`/M+4&$^WјU -@cE@p(ZP$-wDD]@Gv:XhL Huw"/o9V9e rr,39[+I9Je.MnJ[P[h=*-[76ke2%Ŕ2f|{0%[yw0>DX2W*U\Brjjk$1ʥ>^&Xkq;= {y+]eJ)79Mi߃IsR" 1i&ɹ2r3AJN.XfM%W[lRW1[ tmM[&5&➄:7M:xm3y`.9p?4OMHBp*V^3c\ck}wCcJծbA^j T{M[wYEPQQQB+Xgӽ m͚A6֯-(b,n'zysKi,NLjLJ՟4iyo p.^xjÝ%6+k<`}A#>sJdƾG hg aFneaLNcb{A\=},3T˖-{ͣ龒lm͚M6֯-(b,n'zysKi,NLi'~ҍ969 pb}u_pͻhlJׂ-l"cikB P 7K׼𛷀{Äx4#{JYbe/P]gMwxNn?y h/wZjf7$Qu uVщ9hLs~)AU[lRW1YzodXo;meJ;nyi8Áۊc[4tw  ;=n{;?5veRKKb4OV/(UCWPW~rq3ІaLjίnpI׉[\c˹ C\GuNO!s^{UDcc^nwU>;G#N1euziE=Tckƙz"]E*TMKz+aa`|U7Nt#uSXNIe@fjƨVZ׫V18fաtm|=r>ut~{ĭҘ=K;4V-V/#ȪX`9*^Y/g~z07K0a1-ļ~O;r`=Ubbj;5o...~܃h?w= g~ZcE2mekjH~8b Oblm[BМc\'?u PyT5*/Vͤ CopvxXgtrp[CQC"~y| U,S|༼WԒYTTtЮt_JJN9XfM.'W[lRW1[ tm*O[YcMdOh LS55ր4c1{n+96ɹ Ϯ_OՍXן}:6l5|X`WG󝙆ou" 籺JcIIA17⭷9z-٭ xgNS `몞#߿Æ b_}9Ɓ&58ϻλ眆8 ݋.#f\nFJH1mIojw4&lOWM 4e{Jt_ mn+%Hw?l^%`KbB8xL0(=ťaҒovUU93s|<ۀa~g91ә96s2\19 R@.p&@"r ֱkq55co#cn;N~߇ )ݥ)ɺ@;C͵8#D1NDXׅYBc7 G W 98oSS(ZP ~>,"):-pVG8 =Y 7Kd~++3 wEtM7 c|I'?uBc[tD;H般Gɡxp(=~<?ݖ*ε)垠E?<THÈDd!+ք9ٱ\T.3e63|pΜka5^'wu☊*汱0Ґ-Es,;y )4cep.P%Ÿ6[G9u̢Xm*äAhrXE/pCyTE9;f;XJg5Yz\;; nO9Py#c8)c1EQ9"cF>9a\\:qª˴c!1`2wr 'wL:(vypY2 0?x-i`2 L*I8IuLAHc1bHuL!(#7rTdE1HѾ95TbBP;RyG:T)ż#wDұ| |GQ.3Um#)r,{|}a[oI8Vo9/(ұzձoT]3 *- tY yoX>D^+1PP6@1? !X*-Q±|KK$D ꗤH˯&xKձ80!"l C_QdEzϡ :1:&bqƫW#%ٟ*v옴1b{^. yG7,>".So|OZzUw,N6 s+)NEp,rlmt5ı^ךmmjon\q9Uc*M R+t,H<gxl  /e+[bB[[աUT7= TDТXllsl"<$dcxĿSRO9ʱ5b^ݏ{*(py˷|yzҍQYl>P񇟿Ud' P+)3 3Bhh‰8(K?70ff~."c[[?|+ձ80Vl"|V!g"1rJ\PPWHRںm e ՏGd $z(w<,4C}M&9W|K\q_t/XJ\"kOss/ ނ&m$(RB2|ELgSsNƹU3 /_˗ca֯ih"­CM&[& [aF[ZF3gL}Ey>__8gc:! 6`\1 \+==&hmdᬡ$uwEu,N67"h"1ıPQr 1ϜPqt`kkagvy[}>nbc񧏦Fa,dȱq{[_YxϬt8Fp= !% u4!u9Wlp4dMCfsW{Aer~O8'L ◆L}_q̬w;rwQuL6L1K ξOf_]<$&ڰ&xM7:@z}&`S\+ `x xx0N11Jq"mtϨli$$qPK҈cf< KhbB(xE)GcD0܃^`Nr,LzP 4?AB2ԇ!8hf= $vfe9}{b[bƁb,ADۿ j$N4:~9&dҎU !R]ۈnD8{9vc0!ᱳ~ܔXGuuR v N@,b-Lm ]uLul7Y>A\2h$vıt45bqh[v߱F6sDuLul7?AK >vH4aCoKwW9RQ 1$2cGjcǎ 1i,dIzkni,oc^K?byJxU$)1KmqٸQ.>oINx &(9:J4 G$ 0cuLKe8Ŕh/%!hX $ƱhQ'[6kli XW։%LG(Ǟ$(yt0¡qLsa@[JȮ_`lU+֛վ&։P]Hƅ$E1NXOjfu8tC1Jk뚏1M(TtD}cW27Vd2PQTck}W.:LNUbcƥ`ڰSX1w=f!c@u,91#MPv3P;b5\sS}Թꋜn+uxwl"6sBX՟_: D]~gv2n&^;iqwfFpmv>Y1_u15:6D 2[akZzٺ!o{4ecEHc*.Ϸ%̗}6ǪK{0yR#t)K8nc5 p Ew.s:;.HL\zf`}>Ƌʱ[Fp\>,~{2Ms<ԱQ&j ifZFȭ݈JPÓ"tou{|ٕ]8h܍;wl2jM^xipV#[ms|({c7Ο- Ab Ǽ3Ck͉Mw.hZvges~R뽹{chQ/"X&1 )X(#RKH8OJac,&j4hڍDjMsedc6:11awod±hc7Nn3z.6 }A9F)Ǡ~Wbd两c09AȝӚXGy7zE_ܿ~|¿y>ȥX ){; A%z1f{7N9`tdǜ+\uldm"h9Z:<c&c%) KG20:$OZhlMJjJNJ5vPcs,Eͱj/BmwsN?#κ٤e7m-E1| gҟOh9v"v-o'cvw?m\iv܁X5ve# R&j! m_(UPޖ`7[\ DPpJ&@ȅ( Eg m ~όMQs}S ;:C:u KU.^* չ ch7 z`{gusunL;8P;=<`ب097%4o}@U E( Z(ndemt Zw,9rtl8P ۳ p >|κvW4ҟ՝?cܵб1%{wcPN23 ؘ&b01:?䋦h_E+Fӎ|>8&q=wX.r H]FDiһO&(D^ƽL,s%N%ww|19vy( v0Gyr3ߞ6hWn$ђ pÐbQ0Ǫx&{r,xM1o YHďl!,4ZyuIk :X!rL~0Iѱ>4a!pp Yo(Źwq Tt>=X\h R8^2iG+bS_̱fp $qd=9&M5009]\O8z:Q/:ho3dtFڏn8 Hݗcc՜c22EDcR,!pppK@i&:YTy%Qk/iB (^)^K*3гg58BXJsLuh|h;xY1^4{y$rK=M!suƱ}#= cxM1N:)JF Zed&穰r-#o|EyBŏA),yЎ1kvaJogώOt5ٱ l>) HQO_ :6x16E}2ߵDq4o5mm5*~ J |~DHXL gMS^ bckE5ѱ|W w%`Kl~r8[wo 9*wƧy3C,Wߢ11x뵚A@#O|d5Wzu,{ex̼T7 >*J(JDbWc8K{aKcOjL7,<Tncb%tO{D|"5ͧnvvv!^mȱ]vfg{ӣ_d\uimxHp-'I-ɱ-ܲ\L{31~~kТX oǖ,U Nmcrah[n5c wLyXc'E'ng$ ӵu^Wv6;FjǬ|YۛrG][:yMп6 OyqVsFb s{,,k1:@1R8v1!YŦ Q˦KoM \wvu?*LsG1>Yq$e}$t̟8+B<-*VN7<[W4v\]c9faLӬn[h_fFt<u,r8}^X/i>6k"_m|<˾8q0ǰ{1P.ٱ%ӓcDԱ ?9ǀIf^؂ZUǾH '~ޅ߃w0Ѽ9Zc/eW;ƿ.ش<{Tu#n^|qEˮ},i C`3EɈ#o0/r_bQB`bz|GBQ> 14(nGc?"ccI'v c1y$ǰcEXH:V8CF&\@vu*8vy ^ET8~~w !W^ AƒdAEXJ>~ '~u n;\@^~Yr3T\' *caەq.#c(co7-S15"O\88 )2`SniJakVBT5; dO ^Qtǃ'EiQ]:V(%?X oDlhDpG'v_WzcRE&;~P!-TV28v ǒXRR/阇`CDeqF{pQ~kӧ^œaCxmTi\(mi8@9v"FJ?1=x8S+ն h; qqlLb~ Q,*uaQ?Z5R e*.1VxFyKt jնbj$U+SHX"Ws^Ϥ,*S>Uee̋c׊C@90xk PX9j-/ਫ0j7#kŇ C.t[sdQ<#ka%莤AD:\|L#->Hig4P`y^ыc*CgS6(h!#NPDZsΆgjrEC|!܉rA#TYԚǖ)S=1#uMkw[_11xxg5y {zKtl>[X'|ÿ;SKrrOˇǞǪbbn5hxsPm_BnnFjZ?Ʃ/}e5˘MΞLP?.bF'FC"zh;g5K{f;8ޟb59ެ.\הiDqe]WZi)xu͌gB0pT bpzVC;n ձ²cxF8D*cV<׀]X fp#Dڧc8Ɛ@]H. 2BzU Ih-Y5jRjjS6TnmZL.`wl|:VEZ߯lcbztIX 3GWλqqB &WjO@_{q`pd>쪪*!aQcc"řL2YLeâ+5pP[zLzf2uEpݖZ˼D=s)| w!-.nA%]vKt̆9cΆڱpWDT %2w Uf;?fƽqMʊѸh ͟7DӋ%RyH_JDZ_Y}1#1k8^ c%V\j cG'S%ZrU"B1c|WX*s4gJtU5B1WL*h&߻S|Puus _W ( 6 f+hX{RWM?FWGW(1l_[yk"#t V͐Ectgc31^1@|>6ek09oc6M3rvV]~چ߃&sҎccTk)g3E%U97j߈VUd G>zA6{;ѽ95Qc18viUUqek(h >10G cK&cy&Q^ڛcȱ^tfG>H$~@9ZҦ؏[z5y:˝o*aKnߑ Yñ15[C s^FGO<+wZqe\ O# ^dFs Liݳթ%(N+s sb41# 7uFv~e?N͚t!w,̹e>e: S|;fu&űu:χNXdOk+p'([W-c'5T E)76#ݾB{c UC- ca-OBaAcwX8ֿXp{v?űёE,tبeccF>׀Wؒź*mLf-vc3&t ģiM smܽ uP޽kX7)CQ=0)`l9'$ulfIS[[(};E6:%3j`qFcc|%ٱޑ!w4][̐_jMп6 OmIc;:5xK%n?i<[-."O"zu}hrIXhtv1늋\7%o3S^mZ&A:V 1s߄9x| wi6MZ6]8f#8fs9$s4vxRRj#IKaW 7Ho:. \C@^, H8M S  Z@0|G8fV>txZ;nm_Icy?8/`$RI/xM+} oPy" e R Zܼ7<]9(X]yM#DDKxxYF4˻'4{XfFrLGñs_X`$RIbe~ű0JAu{VgYڮ*-zq08V?t:c#cټc|M >|lvE0`>fs _Pz@>1rHSH6Ut6v ˧^ H܍A-:4B`c؊؎ /j01,D=$ÛcȱBڱ"HJ\1@l>LZ5"<:\1FmA0)ӿǀJI$-Ǽű\|1(!:(=w bӭ%*QԆdl%NO.rHσKU腣S);>~3O^=~d 90jO.QoR+֯l:MX˱3yo<:a{\ٻ|> JT4a.:#d+1s&:3fJotjOԑ`i]+T`Qg|]ec?`|COO[rZZz )f_=O` 9R>>>1x(䷗`59Uy}ATc7Xc]ޯƒhn$0&k;ZzM掯nyycT) {GV˂a)xXcWo|Rc@ OZz߯>WKR =PͶۯ-wh P+ͬ5A,Šd %7ݍef2Qj61B盘ܘFFB99W>+e [o"qRdXMBTcȘ4jGEj,O#oZ-BS-Mty਽Tɖc肳iT+MElTc2a ˉ,1Jkj_ kܹs?\IvN\IٹqUcnt1F,}Kh$Tغy<6;%/$W6J$IoŌ&枏 K̙ąJK, ^7:Hs&)~$ƀuޖFүCfb=\F1xpI1?m[6/_s}pȨ"o.T͹^ƠM'goMd j= n#4:7ܘfqTajf7yX'ֿ_GcP#FYc0Wm{;6W[Voq*n8[_sok1o̤{~>3( s $BABKf \׋sC9Uco1wD[p)5pcfB}[ 6ѴPb~iucBArtLJ߄1Jz!9{[pw,x})pC0\_PKݴN:cH?tZs]țv+3m%^,AAwנ cs7*Nۡ 6vT8c?nt/UNv/UzKCh'|QbaB"@fPK{`h'S(fj,Ub,LNBQ#l[_c*W31=j 3F(}ֱIqkjUFb$>Hy.zc+)I5c f3g٩R)d{ 3F.FcW>.+6feem0clQAZWTƘ3F.VcXmmpRo 362Ph`$zc1iL3^#o1 1MSS*kjҤ1JޘY2.`PH%& 3F.Fc#4Ԕj AƔtS>XK~cw:7oLòm3~7F.zc@,Bc'tT2ƶSM`-q@:A:Ocvh6 2tZyA/6lPX̯tQ֘\?so9;O mo7 cJw)%= pc>{ v_Ƥox5&s] ̹:;yjxc1N-ccJv)%kxc\%hŅ^[7V=&O*xȅ\i32ƒ{{ }[xʴ%6Ow3Gc J> cJw)%c`c=~myqqduA*0&㉼Ow.Z"l ޾}Kq-2AB7tj!u0Ģ0v!/oT2?tSMP3(COd4Ìb,3jHfb : qh[ ޽޿:1{9D+󒍡#Rm<Șҝnʇh iߞ~=G̚X&1Oe"51dc`d3mooz,Y51mX'XЅs#AƼudc۷o/O%c!AƔtS>Dc3VqoqT:Vz|W_x=WPngd<`[2ZCuuo}{;q_XJ1 '1Ƽudc`T2ָWcKB[MLƠ󭵪pl1pc8"E0٢Wmw qcߑc.nj1駟LwۇdX}.|?_)  g"ҳ?ؒ39ߘȘ-!ƪi 3!di \ 6 `,\Lc [CMȇT2Q|_LgΜtxf!c0 1ܽjyG66}E[17a}|-h(葲]&č4IMIre|{a2 ;2Vdt6 A,[QXykН5t#A<4v.vc@,]}e)f9glTcRcP*B Q>½T-T-bT}1 Xc HpO("-@jLbЖ#FYcpOp4n `Lȱ)cʖ5ݟ՞`1yb1‰l11Y*s~#Q#a]8$ck1 ؆L5&MLct|[_cW)7J>wWxj,ţR%3'Vc@L5Qљ1Zjlͦa4* +j#jlt/4H|4ƈTqNp 1?JfkdEgcMikD v}q20cf&h¬bోIz>]E@, ,NRb >daak6Pɷ|c0Wm{;6W;(m'Yk#&:Jk~M75_ff 8#t(j \׋sC971w%#M_(HʹKrcQ5Al-M/~`I|h2]Dg7 BBnj\B%;㮱 wǂ cM}c2nD*9DZB4i&bؗ Ba4ɴip9XcnK1 P`lK铙_|#ޖ##x"k[!lDXz[̐D2٘7Ҙp$<Z1 ƘH vc_\FeqgCt0A5е{PRur4!v'5`c9uͯF+Ʈ~kyc޸+Ac1gV͠[jiyČsqcc?y+j̻< ;ػ]PT!qYtܹ'H@(!G&;5*RUVUJ/D~ g>zm!y ] w^^1*hb!c,!hl/P{{TctNUTd龊>݌جs粦8ca.#Ħ6<^Kco@,cEn.ZOi8|t{cO`=(]1 $ sS~GfxH -=p-/Xc ԘCs0G5Yz;$/Zأq+!1/↟@25 w!*|t}?Rhǡ|vs0h9F [۲JlwJ-^OPf̤PTlCٝ6@.Սzd?< F)|xYXX.r!= %%W}(qh8|ҳv~m3RovC X`>jbB Mj,ų.OWNU 6mlؑ2BCXdd٨-7,S>gȿ;zzXrrBא1G6Χ/0GL5Yc ^wʞ:EU o れAV?>0F_zmjh*p My3?8ᆫC=#3箿Eg\h|}w<|v!K8.ƀwɜҀj~H.BJ>;;"h K6fX/xch_,̃m'g3=JՔ!W )An p6m؅)l$E-mD"UZv]JEP!H엥T+A%6(]~Q!+uP hQymy8Nu~vc'ȎO: ,]?Ʊs|5_c vM$cl7f?HStctYTt,cwƆ43vRFNmcU$ǜ$L@:U xlf6<])Bb.cDjW@I¥NYd=,$ӱ ~L2dl򱥎]HVcUv u)Հ*%$S-ewȈ+ZqHlG mH Y:vIc@}\2;t/M’%(\J'":Pc:&89p& EftL6MDzGtCS(6d+KbQ$];)g`:&c?VUb-b{(0(-d*B bO/h9vscUb1f46߱,L 6Lpgw^Rs2EǪxO3;VcO7~ò/Ύc#-_.bR>:/=n.StzF..ض;ݮ>ic5C=f3%gѡKIl:V׊1mx862 1CTSB~. jʎñs˦cUqc[~gŅގYb,e*;LDZ}7VEΌ6xkGYt@}^}KĆ4g v_c  Ϡ=PבX@i@/=.Mw0zyHo[cEs')8fZ/]?q: VZO[/J.$?:86ױs3P̈ %?Ohto;f!1Aښ9vbt 3&c;6q0N,isDɎǰAU3&cyPO[ݱKɊqL?Zct, uKJt̮$zsE"wQӱ[>ű+DkpJ?5E੸+c.:1b:Vcˢ;or $+1JTX Ik\QJ1a:VW c Yq)c h4"΍IK 0+X cW&JrLyEM-;I)n1=X%dd}MM3FDo}?[cl [A`eAcArIȋY엣%1BTr)̱/ccw,c_cd>Z;? =y0;a0jD8fXpjUX8l+cg#ȱ;mc]pcfoj;&phiz8C?HO;JvH1͈SZ+*c ,Z;K1?Vb'*? Sslxtc'tr $3cX^p~0:x+; "H{hR 8OC᭗_89o:FDZts%ѱm+"gIr.ˮ_l<{ŹgH?|q☴OCh4 Qql]X3-Ŝ~12,n%q{(atto$4S.1|u{H9Pd+? 1ls (m/6H;إ{*#?zWoʸMT.cvw>8N#l1=5>s|N&࿗WqQrd:׶AL+11w߆[͏96 ,Ϡwa☴OCI[e 9`++c@Ycbc.ҡRU2v *,A&XuLpXA.g씍3cF'5Ps3"g+ӱ*%ݱ.u4_61c J JXVBftHޱ,N)DR:3WAdfu0tf`1R 4cϑy9 xʙ?}ܱ8?1Yy~%V8ŋ?lϙ69gÉJt;:&?keS+[ОV8i"l6g61bϟu mރ_ɵ033~W~!s,`Jהf>X0OV@1&3HmXI!a1i?i~SHx~I%H8ssI?QH0.if>g<Nc{8q^]I$:%+(ꎥ =Ybگo>27;VHi?߬P$ı"sx1x?pl|SqFS;`7ulm( ޓ1KItu˞;=翧sS%[\ yЊYgA3I$0 MFUJHD5Eq Ýk\nnqY,WI\pU0:<\ywqgDcG{F~ԳaG.]xca1,oVzPv,t$$'^i?;+q8;p0qpQLAf1 s=C7\pT~KQfF=ӹ8lJ;|"ձgKvtϽ.Q0u Mm,H1MBOJ@ϻg[Xzy8q'>ӯe.w4~Zf=uRX@Ċ5ZKyT~2L1;`S4-{~Co1'^!%i?~X89 5$qA.] SO\p@ҝ߃oTcNnUDb96 %Y~[ִ^!.?װ cAC>~#?إq=4p?oȫk1 E 5 K^,{ۯW#[@ ]tii Zʱ~ &#ew୳z^+~^׊u?l zPi)Q1ms= %\p^@忯x#Hޮ=s̙QV2~U+J Qҥi.Њl.~-w }( t `'vwR앰igtvRM=2z4!sQw؊xCϠxAWcun g3 U@߾}z8e.8N 炣1۔%ՀUgjjRni[['#!-L H1UCt}0rlԘ[ T:ZBӓ&(TI4}=]klo1cogf{ji>]{gu*_fZ7]x0*P{VGL.UO* .][U=A /U{'l;iAk_L%L9r $X)T.)GbL=U1 hlTim_A}"k[ FkX:cfr WLP?OQWjBB|DuV5Ɗ0xPGT"hU1] `j~uDn enZC 2VMH~(bnZC(1_Ecn~jJc숈1ScGD\H1;"zGj;Rc4Ǝޑc<1vD>%UVU1Sedxs{~o;Rc-}-fɸ71wOW?6ct ]}G<a'BTzgx7'kG?{2y3?ĬIw v B5ƎDS?ÛIv/qffOǂl^QƮ-cΨ>QT@WTeLw j3ļibǟ(M/U= 1,Ȏ@?ˏc3+v({ 3Yҫpaݣx 9JQ:hV1PO.d1zDNb j0QƉ΀==D&dL oy1R}J{l^9ygN3mrlEMu+m_-+QĐTusD&!QX[A 4anO ڌ% o'ȓk|=K]۟­E!vK@Ʀ i݆?Y!dq(<~ˎc02C&(2x.S8;{w,aY/^(!dǼ"(b(dyXJc1X, Y^\X5t6Bf@ѯ\ȢUV-M̢2Us*5y'DD#E -ҧ1q›˘Ѩ1&89ٖ= / ic>Ƒ1 d1@˜'c%>,1cԼrrU7!;PB75zϘ0A0x&R1 ;؄ c<ŏa/ܹ@C %kIg0-~-݆t(B75zf FP22 168XjGV!Cʀ0`G}oaI( jI l16ҐI-{NK&cX$X0@-v+apƁ5M@ pbV8t6auLcJf6?cuF2HLB A{Px$E22Ai&R3V1GpuRNm 1ތQ%i]8\g3 0y־7 uxıPϵ}:@ZdA*rρP܎Oa2)1=[L`"B.:I(v4Pq,HEAe W"DPK^؂Łe{(ηN5w~u@pB.'Mx$Jؖ)V[g?뒯r )7VX*16~çLR$P:m;(f+?>NvAFqArdzM3xayWQ<[-_c>h[ڦ`W:0 iYuJ[|P*"e3cez̧2Dx Q j*XF a(Yz,p b}X¼Th;f Ϛ}ĥf_3z3 Xcm wE5ccR4E`췠:: @(#!f10+jB`ɪsRhĎglӏȓox"wcmNjwaƊ_'c~5"UUk8p Yg U1O^c|ƦfȆdvP2ZXrCfܬ`;QE׹)cG1clAFcu\Feag:g{g>b]g׭xt`3\Q4*EXdl m+{U ^I=f/1 6N8e|z-M@F.cIXoi2'cMᮨ|bpp]!swa Y1;20ܺvݵr'wWx6<[3>0Eaj[u_]ɧ~ߨz`<sqR_?LMK)a(hl,mmS+j:6몛S#ƻ׍?@/mvq-(xm%zbDZ#iEV74un'N'sXl;GD\\ݬ-k +4Ňcˆ-#2 Ӷ~T6c?ݘ+z62{?tFm+? ;\Q5U6c\E |&3ԍ0Ø/oG^122"Z.VcLoTMUʩcf=j0F u&-Vw) 9#?=3 F <^=OǤ1=g.h[1UQ536z19`N)>ƵģyH6gFD% yEw cŃX$ae}11c/'`" )gܤ"c@I0Encc _ƺ)c3vg;u&+11130vr2IUؕo#O1ʬƘX"aelT[ۢ1u._"]֏)U"csuvTM*MMiU"c~smx\=E.(Q3c$aBTX18NWHG*ڂlX]v 1C/Tf> hLBc >T1>hIҵ9BqaM7M 253 EeB-+ 2;-<ɹ*-+F;:!(\іBhSZ%4ۥI ,%A1dFG ҹ.1` 4Ǝc0,Ř c"Il49('\ \73͡f/?,0^xd93D|zG^{)xW_'JjOb̓c,1 4["-!F `\pW} &R8~͝.1Ǟ=~1m.Ϣ37-掠]|jO+ f 2C-(25+%ܸ'Vh.8~luNJ#c ƀ])gQ~2uyVyg6ړ4ClBL Ƴ+Te\pq [7Ǣ2`Cc#G1C}h|Kml'oÌ&&Cٌт4QĐ1VҶ4^"lHM22ZOcW JwT.s,bm{|EF n3;v~K|w/Dsy(HD Ӿ86sD c:c ԟg8B&OΈc)Nl&!ڼEi'WnJV{r;X 95gM%1H˳_^:/lo߹|&Ra] 3cırm[r},d>f2v06QƮ̲!]IӍYN\|.5Ac?TI)%'Ɗt ݢmHgSX1&EMg,1BXpk+q:fPRr]\p~<}KQ9cK1v0_c_Ec_W&@6cSInɩ, `7aH+13 ?12 ?ؿO7E ØM J7@Ԕ!ر1*iy2VƠZ\_6maqQ4;-YcWqs51Xx`ssk 6HRMU+!{u& GX:p9s;|d-R}2Zr?ZSUf)y-+:> 0; Q6o'VYK* .'[6&s#rY o "HZ-&6tPb6%IMj/_(no)lH!" DM4Z/ 5+ߌ_h?<3g ;;o};3gd#gؖkݷKKow_dtnc3aWJ0{WS?=J۶z\|mp%otF1c9Ș^IXɚ5XȔ~L_:5kJ3ZclkѦRȚecRƠ7 c SҦ: AC{2ˎFzC2댁{{ A籾I 2d`cc#LA!z) "˾r&1VҦm]*et)d@)S:4]nTȀ2 J;X|flkeȽ ce4U2& 8Z[yGXpdu,=7[[cm1(m5A}^]H9ɲoP0fc/;T2G қJ>f>ܡT@>JL' ,3"Eޔ}}X=rȆ"la :FbW RNe% (Bhۂ,}Kd Pg:edl{LЙcREZJVK;L"VThYdLi waw 9`LN%2](͍q%&-48 c^3 Ƥ͕cHER\ϋb,!/c] !kmR.Ǯ*a",4uTݗԦ)y0icZSX!PdZ!ౖf,ίU(e@`JEU-[^ki[RưXXVUaFRĶl=T fFc{b ;Y/u uLϘ~=Q"|x%39mu읩ڔd;Gi4od<QqWLd7Oooݗ=aZ:S1ڡjwS"|?tfϛw1TU`inKiߨ&5vbgxF31gG0NFhG>onh[i6(I[RFV~khB8  W^ uL*^x&z_d}bgxc~p7H0*vB͢U %-=3HlP3io}$cq߄a8#A6"^x~.Xjv'oS=ю`,T oYMp0+؊aL,O=. b19c .1ad*vz;>_\8O0/6Ppidx𻰆+-?/aCNAP0 J;0ÛJ| @԰Oert( c$G[fzlj^"Yro6D7cUG-z,`L˘o0cdWxX9ey&{F8mҥzoCs\#Փ ƲL1-cI^];=PSukbؐ{oұg,6c]hc ƲPv1MB‚I.˙NS YCNI7Md.V}[t3vcYx<=V@7VNrYwSrRhOo+z2,&c"_>ԭ:=fT ƲP0FV06 '9ca+',ݳR&]:&94uρm 2?%Tվ}A&FYe QLv\]1JquޛF&+.xW:De32?kd nǕ>_u:Ăg͘'b!MjcI3fOclqecFX0ь/"UYĺ}8wا:NS,`F( cWY5<# b3a\TKwP:;TcEG02oPc cpqm vBbp0)Riw,1ɷ++7jsa&iI4c!s`i֗v)GSW|HO&FL,Q[yzN{ֱ|%[*~!c7ܳur].\كGYf$-Go&u ^1=x`,&cRc14Ku>=mISWQЍNMһ3&9AF)׎l1ΐ]]r/ {h걁g16s}?>6򩌾HЍNMһ3&9AF)x=c:,R2 ޻61v;jcm}6ER,eP$cD&fܙ2icYܵDDu8:xec{bnə3n:6o@7&:51 FȌIi]cY.s/[gmcl}`Nn \-lݘ,4T#3&(xo;.wPy1˽Y|f:r뿮+y>:b q'p\ f%w2!~ύnLK!&KcuW/Mg3FW%OY fmɍiKz0FNJ8 X:s.3nUOA ĘZhG =pQ_1lcd?Nx0:%cGe[ylO`/_9Cni3)3=vmŘ)O`,sz#GyF1 ߠO˾A cl61mFtɌ/TT)ܓp/2\0f 쑝R%}(K!E4QD3~ ;b>GVBτz5;.X*cF1X*g`̣iLu\"clb cecfMLW#qIVs`b|rl3`,G96љKyPvKK0f$* ㊔Ci90Dg&.cNɗ\{T)[_`,-+[C;$I5 ۚ tjڿ!T1{. -ERvȄ.G{#Pw*b&AV}X6,QTQ$IX2`Iq`!SS YHfg(]m=pL[=pVQ#IǘfE .#~60zcO!Re!e1Gq21s-.@_tFmJK?;Id[w\fz 1fq.8H{2[wV0rŞB*f(miH=ClZ;:ljlIyj  HE^8p6aBbٵ/Ґ HK4I"tmTUj_ݫ{տ16 ^2_30|2ٝFJtSErJmC|ǯT`p,8L*Eb%ݠdq"gn񷠾> rU_T˘)Pa_1ٱĔ0HHsϚy.קB~*c`ZAB0fIY."S"$Wɕ&o+%fL~,,H e,xd csrg y}*ci|i!dY-oG"oެD")W _>Sߒ߿"m1ʼn <&+VctfljPg_^e[7 b5#df11l~r{E~Q n+Xp~'EyP@^J?#NݸvhR/Ls{a"9~ '{ ~ƪ]8s:r2mҨ#)` I{{5 I*ƂoSl/eȧO pm1CSyϽ)hطu.:ɹk}!`7Dy4/^RV[ZTTSl/e7ܞxE_Фb3LHb[Zа1uDvնMzx4fjux0v FDrO?{y5+MG+TkݽGcHufl3`@0Kd KhvHw+M1MK0V38XU FQ.|XU58X׊RiS#/uu55g:;,355uu1X9F:RG(g(H_q%ekpuytM~\]}ҟtRuǭ.glY8n?d(;+kբ.%Z׶O̜2V8n%bڊ>+0ݶUZ췂ޔZ8cy!/ƉbѸg`&ňsr+7C~xXPo+M 1X.cfS@ YMn0v%g,q3)#Q &uCfޜ.ROla08tF)g,q3P]"{bIM #Kɓ]b7FtXΈ,7C~x w˵v_J5>|r{wnj?3"8WK n=7g,gD:25\jx3~h"M e\ -b,?^Qs#R{=j(y7 yd1;6$]K n|C#R{=j(u"/fX,I þڽFzPoCCX7X:3M /,Q#)G"wN̈^eSiG1H3#R{=iDgL#̈^8cfFzӈ43"#ΘFq4"͌H3ifDjG1H3#R{=iDQw޷g[Ԉ^JXvE 8c\x83Jld$\d1/c^%\j2f'>S5wNsU[N(cZɉW86qu9dN=_d'ӤI'Ό2t*;ᴩT3ՔmgF_LR:k+7'^Y}L)(CGccd b,;o#P'1f:38c*ηb׏8c\lRƚ:?) |W1DcG gLyƚArklhL3 8=)ce0vpJI:9Gc5G睮hÎ9fͫp 2odXBḫc 6]DVAb*0UjEٶ;|N5ƚ~ 5\=x ۞^$zs_|NOb>:3Yں "#nF(Fg,?[tVC#2+71e:|pN3Lݭh 8Lꇷ%ꚗxzl$ ]IH@mۉ{7`mb{GPa5&5wWX*@X A*G,Y'd]]d{Hْ)[rS/$q::Cw6 NB?./6?&[CU#MaUm\cE3߄X41kEDɍ֝X&\be\ n9{uHw3ưmݢgy-xIjq& * _X;So^<rGq+8>vqb|B]{lYj%X5e(VXJ3"zS"Ƃ5Cc)M'~}3N}>IL9ЧW.cx>EH'襳^8]kmUA՘$K8U`>*]R){b>H7i $VcҌxoĂ2:2 e?{g hbC=Dǀ"tX}.=!՗&'Z74#@^_ͮge:nv7߇O#{2c:fש4u\oc?18cYpoL\o\+QQWRLgVW"piLZ ,ef18cYp'Yp~cpaǖGop Uحkw6c9p8]õ]y.p 118kE18]cvcp' FH1'3HxkfBJ1َ''Nxn(%Epnjb\' E)o.DŽ;fE:-ihM8֍)'PuEp$ 1?3Nx} o8֍\?CeNu6UL17n01wX7UgvɱoܖUc>:fV{ÎqCsys<|zɱo-ul%c^:fưo?1wTLZ+Աoܖ:kE8cF o݃s oWX72&&rHs"qcyAT?ooq8֍L1^[E}㶤78"3Nx ԦިƐ&}ญE-9 oc>: cvcp ec58& :x|X4T֞ ;ݠȗ}kjPuc, 8]vceXGܱ>ǀp]vc`8nϿ|1cǜ9[ -86ЪWNjO34'bpbM^Lf1wlcx\o&&3Rlrǀ;6>ma+<'e${3 c@&f<'i>y7aBcm^f<'e{ǀ(;6ad3K?'gVXӓx,O$ӷcɞ<;T7dX2HL^L{ ÓN/;ٌǒD9{p NJ=5,L6d< q1 eߧ/{8}gc5 ġbP(tʅΡbxAPLŸqњ:V.6O DѨ)bww$FYh$22+=h4 ^•?I`1no9s;Ljsx[6p?,1Y1ccd^gr[cqͱ)=±ٻ&0㋛^$ {3lғݸfG݃ԤPDhb3!Zعڪu즛bΥpֶ2SR9'}gޖW[H7PizV::&YNdch,\*1>= 4ʘb쵒lZq 8md5<ېe}I0ROlcfPC: Z<(Z[fcelNxppDVhf;~O?ק3cNoLbXjηֱ=ֱmO?:q{OdY87yE9zk6F_<>ѻ1ZV:cdQu'`+Ҿ"mv6}b[oMMumkM=t0y0W0v1;W 1+g$m]I0&V0k0&\0&}mLËwa$%~cgϘŬ:N0z cYu,0}/52Kk?^ ;*  aJZ X|k+n0zmƦԙREgD8qcc,L*>o%R3#uW|`h>2Ī0}U~3ڮb_ڌٕ'cCb]yXdo%fZI6c/WG0c끡ur{XXvnmEylC^f,߄xxLSbr#W5 cnfLd+XoXak.0+:|^Qp#1c  72l`0&`Lp#1c컌ݦ`N26酱Ԙwh`̥^0iMpfW^Qp#Þ`1Fc Ƅ 72c $s;$=5l`mL19Ht)L`YtCaCg$ 0&@viJ23L{[Fze>:drZqe91kL-.Dl;~:Fr8c.fSDwөMal#dT-f cubty)X!]wJ 2]t`#d]Zλp);s1!cW$l[zé#0qm<66::1k5Vn5V˷'cDS8|6˨XY XjWg;+2c9;Ƭ1IKlyv)2hσb,Q0޻RbNk1?ūl_N41;޻mE3ZtKKb (f8σ`c  72l`0&`Lp#1c  72l`8'X`smtQ|sz7OWov]d`0crjcw~Ac0{gӶqIZUJ/;KUU*R)+ZO\Xjr8UY4AW\iu-H~ylCIH{>:Bs186j͛xCɆ188X{^(,D"c7EM'A(,Yy4$vm:=0N0;&ƈ]Ors!T hG%K;)Gc1ǔ:2'N|Y[UM;:-I'Fr^fx>t0Biˆ]۱NX~ 2G:gJXt1۵B۶yv,Uҍ83u!p춏a6֨i ˆ]۱N꘳z٣ V5:‹AU(=SBqI#"8ji|\swTy\hVk٫=EcM} f.N꘺o7]7U.&/lc?wE:V;9mca`8v3u3p,_\Tpciv11,S=Gi\%rِlصC&:t+ۘ%r nlJ+p 118 cpL+p 1\ݱ cT؋;N%rla1ڜ8?ЯRt:6]+3)tvX;NqZ31ܧ_3]c(L$`4$ǩt @/p 1 @/p 1Kױ{9_1W0!8^*BȕX)x èȯ(KHRH Pzq\kkm}5IqV0[9ִaLQku>ؑ`Աy7P~n SL`.lڛ8TLoRuNϯ z6Ur4i۩>an@0xcѩηkǼ^ǻ}Kwp =1sՃhX 7Oo71C:4%" t,:UzO陶gx/KsȥBu켧1̔,XtcFΑ.w48w십zm:_>=Yzkncv4YR>V[9ض'?{H"N\`ԛ~Rw̬U6T}ǃ~t>&JGڭhLCP^G-׃zWufco-8Ɵ+8ApS1 @/p 1 @/cAt?ݜ-:IENDB`awf-extended-4.2.0/images/gtk4-rtl.png000066400000000000000000001311331522325530000175120ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ȹʫ崢iL?w̿ocXڋ]I^IʾڭͿ¶\H؍n`yiaKꢏ~׏_JŵȆ]K]E;fPƒ\Koa˽ZHgMijgPF71mPzfdL‡[HyfdLcL\HeMՁZIcLwdbLϕbKyfeOɻ"!!Ƚ/.-)((GECĹɺy÷>=<Ƽtc665üӘ~Ľpbvtqŧ{hOMKbQţL<5USRnmjj[}zvtTEifcŸYXWܯ|kVgZϒx⨢Ǹba`u]Q۷cI>`]Z5MYൠة7hԡNv+X(Iuǒvm׭ۏxɷ{褄d3mR*iBGRϻP {9<9虰էi,`nso6񦆄۾q;׫_Pb^dѭeu$뉏RLtIDATxle6J!KMc $7Tu|id-R\d* \" $JvWr[\몇enT[IKKcHe?V!$:9c;qp -Ǔy>3?:_= ISy"SyXg9N!lfD"aNZ\2z\lOs8@V`fUr9p8ֈmWSO= D?]35bʕPAKgd[3c1b?XX8)nwudSQd( `"hQsvҥҲfEٮCLpa{1]#' jdzvoACAc!NI\qA @c%V {2hQ&]&b쨄kb*"ecb\Cb6iH ڷ =6$qdѸHH ǝ8}&̜btv2uvߔ;.* |vO![u :i]f!8xFq<[R\B* b$[\J \@W% ") itsH*<N+io5MVÑv[ph5LG~y. &U49w+AI Dj)NhF'$W硊"+lG;6F~HXIE;t"ʉRuBˣS DElo*;7j|RFlz߸"ˋv"BlTNk@0[7jW4):Z95rP"V[yVκƉJG)ʍrq8%>ZVTcv~4oh6p8wcκB<cylY4Us8@FRѫ ZڡFLUK ^A~3E{Fe<ƊU*T?c cJ5R決\=j$R.N%#1.h.QcDic*+V4R]9kJ`Yk2A2[TWqVQRضmdن׌:vqx S`Tn.F~3 xSu5,R c+wK'1Hxy2jvQ«A'bk8'6qn3$ڰHcҪ'H\^˞*߹V=dBsyfS Yj 耾]߄_tk$.[zoߘT 89 ԓMc( DPStoh̸T;G7\L`c {R Qs4V^?NCuT]"[)gGz<=ņsB*hfHZsa?:H^h|-h;~ pDJ𲚯 zIDGa=z^bi!TUb٨nAZnLwwICu ֫V{=p饧91Tm}nyX_aLꀬ9 Ĩ|Z&naH} 8=Rcc9ˠ(냤=nFWJm`).zNh9֌ 䮯wgViD`Lk#m`JOHUV*o׍AB!bm>;VOĂ*^\{z).vNn[c)V_+:<䚤N /сWc}p=9p"ƫBavo~uUhgGz<=E `m5c]'pDG kC[Nl鍑Q8MIDHDG+cá;Cïmr">ݛsZʰ `9O-q$4T` m5{ʐS\*hkfHZS572벻py$?Iށ1 &VU\&A7|F l^޽{x t!h)igF^x_[[^ܽ{0PAtÉsG~=Ś6Lx8_t@./:X1)K(cR$[ҕ*+c[7Hekι#T& {8EVpq8G^\EeEJQshο4pcp8z=1P%^N0PS %8o#``{nʋ57<^36з*0V:Ծ^<|S>Y%oqspsC8Njx`f {G5Y耾]߁_tRGXmՍ_URvuP6C[u^O8x~YHK'[&7QchC˚SDUta mӥ1Z+ xSTq mkxdE)}1O.,3{Eg=PXgtb0 `:\cuދ@ >Ie汷>j%q$p?^o(4]rAS05MM]mvf333clxY{} ׿~jgbXl^K,h؝G&k!+c?<|o=6sNVXpƗ7o@ݸ卷g$aK=`s NJY9/c ._AU~{j _[CP}Ӣ/Q~ꯒs|^;*%Ǿw7?&=2=o߾ؾlFŶrB Ff2!2vI4jhjWah{4><Nq.v16>sCJG$߱GQ1VdVc{5#̸_O;gr`ߏͻg≠#!QeUٲz|Oc8I`g2+XuFs 2>T䍻/~`HCcaA1U550;ah~_1@ߑIaiSnVUݥKO'.qwLKd oӈ)N#1?tDcn-(ˁݲ۱d@9yI4h0v v1Xuwca]?]$Å1 vf)AY/UEŢ1rGf*еw\TZQ|Wnǔ߼W{tg.8Ӱ q2tv.#eh*/R[o6=WPߍ ހSc0{5[e{ }ް0":_Ǧ@ >رy坟|[#s-=/F&iG,VU*XXUw7xry_Q]Nvc5nǚ^ih<944t҈&Or,3lgBfm$?YdGUˬFdS#TC(0:7q/8!I,:؍r0l ;0[]&O<wtI/gӵ V}_O08VseƋ~`=wڸ*tqKH:}ȳZ $22!(Af#rweAX,ضA8`ju>{4 ZyW֖I`y1\qc5;]Q8IyuVAc6k7eޯ,م |o ;v\ҳWA V9.yASowx 9AuL%c ] wWuqꍖq3>b@_$#O 藜 h bYq2 !In)cVdvlJ2 )4 Ci#Rx8$Jƣ:(mDJXꣴ)mJƣ:(mDJXꣴ)mJ#In.IMA/-Srd䌇ViS"ӧbHCO Ń"ǤMk2C*EwnIj[wc=>nH)|~sx|+v1i^O99!UƝ(V4bɒPYs S dĠxj~\ ݐMj.yi%ΖZ\K27h820m;xfGPYFZcHS^9WK|%YY0vq 'cV&Yu&F+KJ*䌅 Q :Èb0Q w̪ ˲O=]V s-!]T3$O{T6Aꓵ&:I&ᘎud S^bB}{?;30G7hs:j#)T*RX>@/)VC@Ť9QY\֕|UV\yFccy:<]m c,w<PD.\" F=J2l^uɰ Ŏc"u,c#ȭ>&ϿұJ믵3~8@ C%ݱ ?@X#q9,: q H9'UxQ8n(9,$`ѾP7TMu diJcS !,gH+pfe1APr|xJH#p: +;fޕ,p(6t?W|ǒ" reb?CΡ0:Q(>hbKah9v!l\c]qe݆U.+L^|$.( X}"BbمrHE5±Pw:mPo:^,ux@Ҹ0Y\8/XyA&U(\6Y|g2[ E d2;V~=:1W4~h ! 0;3ik|O x acC3B+y9V`PO=vc(s5i>{yH+1aN"R28d-'4a#ЉO6tZ(Kf䑞h]C8kc9fɈr2&@u 䌇Ti=vL ձMHIw9Zlc2͌MWSJ Ƕ1c~#Giѓ,ŪcBi{^u tqsG_Wc[A^Q`=E=X_{{_c (hͤ1icg{?2;,IcNs̖aSUt^xhzbXtLݵ1EDOya?(LOGU,\iʡ*ZKkN j^ѣx:d:FEU ؽ.u 'ޱ3’˿iH""d^X 7c5J= M pPcM\]ǎ hHKb$2*Xէ?9#˾ħUa *&8WcYMVǪػhtlDıF6)vpO9 FP>')q9MTGU\EmpkFлhAERl !S $=+I;&@-(۱ #wbMy^N3¶ʱJcp[O; {HZ0Dz2ak7|^1E-7.Y=~&Oc UlڔGCѨvuG9V+8p0we}>F"w"ww"\lϠGA~>v,Yȱ(RF± [ >5 K*XR+zxG/nw<ߞI3L|V;Ό~{:ݭC8mf&q9w&KK'RYKe>u.wαldq!MY7N ]55rVNwK ;jq8Ap9sF9Kpلslݾ8;e]#PT2"DZ`_V^lzRS#꣎ec{z8V"n6c#hw+$nI c4z9Qp2 6q1Fk~ufLf+^lh&I |[p儻15d'7dA6S/C8+ݦ~vَesȤߏ_|O> 8Vִ8G Fll-_7 CƮYhz%", Ǡ&ca2gv,90$]f!Yڻ@2X&aNb;E`QUY]@ ~$I]pqژ%vL W A8&34nL SbK[,s,o:?!u_8/o<՚cJ1Xr@xn:FV$ypK~6cm ^N񨘶 t)o1k9YfagY>^7b,cK=5Qz?1TK5Fq50F#1rT,_['rɜOLtl2Ʊ4 DϛX{@9vXȍ|&Vw4̯؞ ؗVKrbc/=$; G 7@~(PܲvlrC۳c'/'9mnmd[>UIs{s-2S*=I9c͑'iW'njoNƹ4Aqlw~nyN67yǦc<-29OikN%v Ru EsR3ckZ04ΥMQŽ;omm4ӟ~SerNɤǰcA( !|v$_+VW ?s޺|1bƱ%R{؞'X/v96Ǭ%ǥ(؀; ؾc{LA"q+rڥV1E<}qsgcW{dp44ǜݱ)~70ےvj8#;~r(Ϡ3hKJ{r,ۃ[smX=10XH<_cmO{z?Y=x?KNKsOu,c3θ&OoO~Y~r={IҎ}ɾc3/imoo O Ÿ%D;< 7VɖYxMMcؤcX{c1c_{otΥAY )H8k;>F3Ju#1Pl?c$s< H6Ҩ9&kN 1)Klb^1fu,(TcKHw,OX%Eho'Χ'ݱAX&K>|J)\,W>Ѳ JM1CT)Q dqtˤSWW#`X]ףJ)\fP\Jmh+9l+\̱[1MD5 DY\whs$'en@x"._gBLjdNE#YԲ8.q56|ZQ] uA04pZߎZሶoGkkGzGFa*1&cjcI85` s;3v-g&l߼ m|dž/ 29ѷk6XFG-6s{VoL(-`%!d:\(a$Cd,1!:$azdR~U6v@?n8V`z!.]=g8It?g9V1co<=̹24}ҵ7J+[ ݎyW7ˀC:ΣƥW]\ YV`b,pz@~E"i3!FL#!胈iㅿ]ۉ ._s ACb|y^]9V||suVT?U B$]o毣@Y WC\`nxǦ(M>rNW߬[ڣp|ϣ8+Qu0n̉˺Ϸna4D BrD~:F̂wd*LNKQ~]fM UAMfI6RXWa[@uaAicVKQ.8%N+XuSGBtƉPnCK >C$_G1^=xzm9/r'Wﭣ;'ciocllŲD>UN@ı6L戁 Rpôa OcǜYcD1@=v:g{5} =OBcQGiSgSgДRz#Rmˣ~'AԱ,m1h"-F#Z:x"gb(` ˜Ĝ9oEPtGΝTVRey:X:iME;q s./ *8 paNJ_I+&v^cp# ~Gɭs S,b|W%y"IM\L$0%s;3p+9.RW4on>a1|PB@"%E3YcsqS|#ߏe;ڋe]Hޏž69K ɴ;B+c۟_qiwiCwu8hc <cEǃ;Vos;X86$Qu[ gJ{3).s(fذ~~K3횦xNy"4eAZܱbŔw,Z;…eRȲυ02/H'+9'g?U1Ys?u߱c*|R'|WU>a\u -ku2;?ĵǜ,dTogY>^7b,)53\ȱ2 R8&sztR0$HC 86A~i+8&XU'ؕ`ѻw##7Vb#b[ߕcsT XULc*T'zE 7'X=X1r?相cWC=sڱWjLBTN2k׍_Nr6n}+~Iᵑȳ!yi$҃$pl;6M1swg 77'Vc]z0:6;?/nyN67yco"?k#ջRP%%☰RIpI,,4ǘdQo9pla{Bƺ:plvlykk+蓮|f*c%͊"69V͐U5n8)Ɖ 55*&Y5UƫD)c89n|\wy h]/XWyƈ$8v>gQf#^\1j5G3gtdr]MxDNqP ׼t\4n7-M8A(_n4*%/Y,Jqd`eVoGZI j/{ofDSjmɑV <"BeFʌ#WWM7X!r˝8FbLd-1䓻KT#', $_׳oot#' n65$,2‚8FM޶6oӪqY%h- WVԔ?EMbɚmDX+~JѯgEҢ1]*dJckSZ[ݱ+xcoFWT26d> xoW_XKʋrvS6 m" ݍ3sւq!#8vx*-o xArIõo64asۼro \hj**^ƊsLʕT?V1P,6(,Zj^m3\syè e7%J(bZ'Njݹ"=bj7*dBS%Dk+Gß]Qg;!D:%c%JU/>aƋxrNc6Jۗ0ZlFMb6z;7wDivClE'4/^2_QT,`U:Kوr-q°-(SM mp}`^Lcz bepnhb܁ CX,(Hv,_q.t# ,|Gr]y(7c^:p]\R('Mb)a_m`wV^[Uʵe6[܆ij,Ax<w,E $}}{m;GDuA@XDߓcԤoc '_òwx-^K51y7zma]cau[Nr}D!+cۨ-ޘn2&d9fGeFD]r\8ڿ䍵Z_ɾp1o@McH1d%ٱQEGqqGZZoGQmi%!N#f˭>å!hIR㮹Įqlˮ? U %:ΪPx{b 3D.W,1ӳwD y cSO @sh\<"q=;vOslAݤ ,hd)_k,#'>kd@/:MkH0Q@֑^٫]+"qvF!KA[C6uzZb `5hJl }z7bO: Px5Op>Q8藯<{/Ա^OҷcQToEϥo\ݼwD;p X.5yE+K)MJ(BMsL/UCcI/'۱M6'8}$1[(FձϾ g5:F#bRUӕ! KqSK\ͯX5bKlc*)5 28FU H8,UOcǪXUUƱL>'ޱc@ƱL^*!wKбgRr,q,_Q;z;qlaf8Nc4Lsg0q'~:VSS#%J1ft(99Nz :f?"б9VS#ygc&<4 sSpFnpmwgq'~:V/8$}ý.Fb,o[_^:}lx~J %ǔ-Ip<^ckP7P@x|/P> Eo޼ >,/|c\_c,b"kByP1ǖ} ;TŐW1x߱~΃E_"ma9|޽{?P<^W[1q,Hu6cvJֱ8,LX߇( =5;5;ᒫ垘867._7/~zg81M{a~=?,`x"cjc Rr,z&إQ{{уq7|;׎c'>s$% w8߼2}wcW X0 g} Vq R6Hɱs_<-ǜxy!]mſmg%!ͻñp.8;OSs Xc+*:6[N<`oa_7'O0;vh)WRUc$1rCX}.յ(ʱ ;Xd# wŒCHբ~c ϤI|^* T9&9b;c1L]ہk;(lZ8VCrhNCc92A.A vS#HsE&j#I ˙عnc[icui9io\c3%m62<㘐93kplƞ~-Y vɅK=WXcw6a,xlbq#j ՏfJ å ]W{gmeCףKw .J6;v{n8tlɑ]eؕGǂXpu4IC(-++YRE;quL}}%n6jud:/vl'ltÁ1J`{78#x5V80a &b!̻☖FljkkO9Skk >Fs.`smmss.rNkwar =@Q5);F?¯Ǟr}}!2(&1ҵRs:c-6cCctǰ`ر]] WT@-սfu5k<@Wy BOsޕ^0/1ߏF8VHTko+9vYgG+Ʀq,xfϹq ;ۮR+c!B:.uz( A=R[:ốήr]\3h4Rz`ŭWnPU8,M#mǼM"A[MX1G$(V)yEX Ry3xPyfQ0fϩpOقNv[Loo@]Rb䈦c"k}˯t̾#ޘX~d=2?$1eL,LTu^jŇxK:Ub䈪cKw $ ݱ=;Dcƒ|IMJzA2َ`}Euqu.Y&TK uw$;Fc)L?Լ65~LJqcHݖu"vHzy8FMt,ŋn,Hޟ'ǰ_N=S\c!ܡPkh>=P翃c1|-ORtLmtBw ,C`Ʉ`w }c'):+on:FLMh#Kt9ݡI<:0KBxR#eǎI1EԵ1i1y]1nH4A#eޓñc~3Xgه\{^yT29vpc1ӘcژgrOt1)+K"??UHsI ]w*Um'ϞsmhXX8Ǯ+s6۷KbH3ϟ߳9PrlAg[ 9ï+߮:ּC̜.*mƤ9v?|?{8;;w?^8+QᱯϞ=U ysp؁ab?@3SksgQ/2ɨTz:v`Lc YE|"X 9jhջsFtr+nZf%xм՟/k$BޱwƤ8 ^;$mtcȱ98U6 \;6jq̹ӰwW{$LXw,P5<8c8vTc cB(ccȱ<6j9`jh]O/i_o&eǏN+犡96ɻ\da9&T˿VBIRwN0gOE)ǐc3?|녛s+3ڨayt-< X>+QЁBH&1Y1LܾsVBn1ؙseevn@5;>5wEP ${82 cGqO-?$Xrbiה-+9 *d8O8d&?F^xm1UnAePLq,k 0[Odo,ر˵%%'V{qKɓ!X } 1ެY`@2 vmJ%ı6']xc^1Pm4r|zǖc^I_^?x\8VؖfNKk&'[aN [i䞍?cQkVH pG1pffmnnmȈMqI2\Gcm$u^UH Q(BDY]1YUnhm+.vX?y2 99X"R,qpvdv1zv4?ctcvCaK%iwA˱*:cp $}y5MF:]U=fd Ez6pu\kwB1qǀmڍ5marlacsA{ UX9/֧/'c;cI5:F.I˃wg N9M߯H'ͱScJmdvp Ek`ώvLmnK!SnqG=:X|؛9,9б; Y+ZPD D荑ܳ|,s8o/TD@id]n|AϏpKrdK7o.g85z?1'@Sc,Y1fMa6<8VHH+T !#)cdOkl[:_m;?˻;ɷ&x //fq.Ѭ Vӑƅt4C(Ѐ67 wX_eȟhEqL2Ӱr'6V@E^!#yȷ&PFLs D^4[.@~zQ +X8`gadovo2Ǫp%@o´$L|~rYs%?_*P]D.Ց]tHNǬlϦw HzgHEl jr$RI@R3Yg8IG$Bs}犎/:6bxݏMJ}ZJJS)|55TAy Iy'L?M`+Bq"pgG|A3-{{_ V$`ˆ3VH*Xy/ݵRd^؞Ϣ_1Q@?4i"']( `CAJ76&g/&fŮ嶠Z/ʢY*{U\gsΜNہveN|̤/?gΜsަjd3 <42 ,x=OIcc3I",q)B!1]du 2s(=?/s[v1~vƔ}4AlgYcihΘPѷH圾'iiMڊ?rxU3G5є|4 1A;#ޘ_cOuՎ>1VJ د_*0\xhAٓ1^OtyN)iX)R.dKfG^ddIƘ_T"ḁ]WJ&c&cKr.Wߦǖ$ a" 66^GduH*wuc¬0 ciAA ig&.cgPy2{ې1YM<&G %2Ȋf|`V'^\+7[yK}xƞD؇$5x06%:F9śPf/J2dѯ3c2r X8\ c ZI 2E51F&rD%F: HQ ^N!pyEmAܹ!(k&+ob7s&ڊ.heWqXkeL0f2#9\*``,R]UuM!p#ݏ tٽY\33ތDF hӍ1~?X̵zBpƆa:;@.-k5k z4>&/O3Cn*q 4Y. Dѡ~!0Y8c`kKF7.k7VG1=cCw: fY䌑ί6Θ??1ڪc u_멽੭[V Vtk;O " ĝqɘь+W4h<tfY7dVӍ1<=!1hьLw]gB!P8c]by}ֲz ɘ጑PO*q9cIu!2ǓUz0&͐56 cyz=Av4X#BFw9k]Ji1F[e5#"g,| סˍ6V><漡dXFk'%|Sn'- /P3Z c JGc\ƭh2V0c6T`+*q,ưt4Ҙ{ua'G`HҘʢٔtV*RCݥLƊ`  X*q,ƲYԝta~dthnOQۣ;cg! =2tnՌ81dk` (0YƠ #dl <}F0ۛ7UVވO1V[TUV3,P!bvƤb!eH"&K-|>m2&glȚ!(gO:x5#"g!㙌5M:!b5z *_6`PʲP3e2f2c43,2HcDzXM>LF:>ͤe111ڊ(mEv`m |"V3cЧ,,uاɘQNS&1{bz0L02vrP,43ɀ2{9l]*sG3MelhYx*ݝzplG$VO3ӛfߋU4F1vAۻ8~&=N0C5GאѬ]jk: ca0,t SE0$v*DV.X.cQsPT ƊYdh T$?&1DSe 뤩 >3* ;;h<7o554:Rjj'Z c#2UIÁ,Xt\'TUPI >_6:Rؓ8D$J%Q|P['`{+T]-,"|=wj-bXl{j,[PuBcKXѳR9K'U6kIV:R؇%qH@|+>X`X|l9ϞmX kDWkXƎ\w'IH>#b^>mؒ3VJ}΢'::j@^Ĺk~][ן R^{oR}EU*_[B /xAaO<%~ˏH<Aؒ3V*EOt0t>O-P"nJL< CtZ}m8b-^F*\}qw$`̏-9cův;~ UǛHuc"*&%3,/yef{#ubD@!jb15'|Obʎ53e[(c-WYb c]Xa₯0n 1#>cc;/}'r{z=0R[L*߽#cM D@YFgokc!:+ssYr4M1qon0v+i} KFQ/W ֟۝(d4P81ЧMX"Y"c}r3hwزc c?cG[I)WoYDGR&]vƔ$ΪaK_}fjYYS)`u} `̘༉(@Yz4G/m}R7~7DI51; xt|/"gŴ0cWT3XV$VEdcr۽ݫXwJ^(/_-YQ_%MDQlZ:['A":0f!}sYbJ5c;<{.P[Q?ǘZYEӸxN^Hxe7̉HAL n[`t2dW|1C,zMr-w{,g/{2?QfJŋWuʘ9L<42,1{ء{?v#ꄬ0RcE][qsMyl>-c1 06e2~F2fwu褮an[g*rr7@ n~ {ff4;ʫy7mc C~4uȀ}+JXiڊP>"vq_vPUyzsomv~"[1{k-soEcŇ6o_("u>L? c^nTW4\DS=g ,&cTsv:3P&d]VAQew:*.!֟!d}( 0izX`GLJAA cQvC)hۅ1S wqgD s \STO&cG6#L1cջ2&b'0.Bu@eeLHξ`0aL} _BR5i89|2928ccz0m%h掶&c}l,ػwfLq,\慨~H^~e|2b2d tcrĐ/ 3܎aE$L] ,i% L,xL0&C,2v6`̏"gD(B^-q1lOu ]R$1nhhtvI ]-B㖶}.`c|fn< L/H]Vg{wSDr Q9kflKt?19c4c '> @rgee|:_ ] a c1hfMu?1~CFk1͌xr3o&c&c|n=i=\(cQ[%MVY*m=M$16Cڀ(Kp]vץ._5;kd3_ScBX1om[,kvmm,fGkПtz@{{=mfo4\jFe.U] d?[?BcSܖw~M\Y aX) - )"]H;(UDTݪ<hCFI%iR.BaH[['ԗ=ڞxl߱x˴tfsδbq{n1eΪ`MXmvV%#>]}KʌEkFhКjk*ꫣn$Z70/zIdw=4K%210#?cvfL5%0V70Npc1\ʵ_nWmgD 2W԰YfѶW]yY0/d0fٸ&ڙޡ7=8ɕ1-C`1bsa =@tz1`ҼT}bLi^*Q?>9ٯA ްԝ ]zd>ǃ?sdb0؜*xn(.b.0\Gee^^Qe^*1+?Od&*Y*)zأ!hOL%4y2;y3xS4DxØi* O6+\g% p rs'7rea^O叛P*:ygrhr<*YR%"cX8#T;A%4Mx"qØe Ʉ+cZ6‰ /VQ5cfUqWo2y7Ī8b1 R-r%{楊Bsρlb4%FU  ciPBc'G' ;iu^Sg ̇~܉1/V4c]FSu,Wơq-zŸwЖ Ad'5@,1q4<vؐ;ڇIg矱 '7  +2_ >(E%~u)ݾQ2` 1`C8u'gk^{5*(gVLLcɌO̢xg[8r62;Ge';C3T /w0Opw+XS~oX/i+=Y<uDu=x?;*z zD3͍"j_=M^Qi]"Օ$CE's9LeyE2'+&3F1q2c]ѢWԴeVlYfZ)\ hW ^(d+dPSaHe+d\ad+dSHe+8jvEv+kƦv=&⌽-ʘ=.=߉vƦfb^c fʘn1cØf+-/Sh`ʏ}_az9 :w?4Tz祂AR]\Z:,-mXb_xXεkƊ@v" RT0HR^*- j=|ң3Ip`MכiFY~~/N x t2QMqLFKalzʒT}y@䥂A0F3l ^p4Mb ՓR('FY}E5cPjoR7)9MOYu@\{\R Ę${S3Fa0tEYY5tD t&Eh^7'KXנB6,Sf0 /;Gq9st.y ĘΕ2f&aFr('FY}-2a2,ȉ7)BA'?Yzߗ[́v@+)sØTS Q>cWul8u>(1/Hq^*19x?]6x(l)+(KZЄɠJ'joФy+|=Y{7N$ Za唗߻֬K%Q8w}AI<0e~5fo1cҾE1W^*|=cZrc. BbWҾ:]nc^DƔ}YbRU6JFhC#cFpUV` 2}b`h~g؜t:[H`bj"U|h1Ve;艀eؑ1phI7oZv cI|hc17e1_|?zkm)E&;QcfJW-E͢}XU}tue1ݧO`ǿB#ocOy0<U0՗gZnmsې12ظe;3=u?1fz(*M8eKS)nUsjS0=xIƈO'vWl6a,S?f!ˆ1)^KӺu8Ų=ؒ1c D?vWS11i#UǰDEhOe}]&>F'[4Ǟ< Ʀd p=:c)ԙ(1qEZJjlRL&a&r-<ØKb 2ѽgM{8sCQjGɘz1ƕBF ǿ.+:Mؙ<|v&~Iζ?2`Fcb&YљTc9AhF&88C4%bcOSB5L2vNycphLp!+9:jlR 'ǃ6<Ec3'7ӦƝ==;7xu2ιQuώ#C~PA2ch%Gg. 3ل@lc_x=C)~Mf/ѻmj26/t1A:'_3;س9 $?v=y1яTJQLɌLugJdZ-f5I;E=YGfrh1c2w!=37K ">Q\%kFcb&ZA@cA3Ʉl12LC~ 5X5sc?\:y4=Zi , 4mu碆/Գ 8Hm׉2$l{s Ҁ{Ջq ;)Ɋ*e(fdBwqNo|tm-^\nv$ƺulV񕲱AM3+~_&/QO?U&m|;Ѷ74m̯շ72(el ]2qex1Z[)aɷT6k%b` ~%X2q}SAav&fmMIm[S=.CK?H^tW S5c|) љXJ~[=nbg~%{ Jd,AlZ8;.CK;H~54z ј}rataGcc?\o!5`vE^1\%v`tނ΄8pxq y`Xe؇1ؓØ:ƴi``%` ~I+B~ ֖J9jQ:fۻ}X<24S8%2:* aLR1­=f` ~I+آu4w/4ko(_YO B}SW#dQ:w?ݔ "l)cīEVҲ}kX[e~)>,v/wШf~Z|2FV6R3oݜ kF[icte36VR&ʭ3w^Ti~k$`2fzXq#P]yMYvˏ-azƦvEv51"fc51dFXYLhbS&Ffa1ɷ%3$ƒRE`#{L:Av513I$3Dƒ "0cdO[1;nף&FSmdD/i&=Elbd&n ]Mb5Hfq f(b#3ayE])דeIT`&=8E\cf"01ȓ)b#3q0f\a_ 5e@h&LҼd&fuZ:vP1u9y^E`Ø"ޭMLQ~SC;vny1c"S 벴6RJGSk)cy *4ERT4jmE̘T!)D6FL1R(f1>~\")Kdu^*DmikW̌cG<} #fU08^/ʼnu圗 yͦ祒57sJyL R:ҧ 7b*c^앨.`VCTK {JR5u&yAkCv`bPbb,]@Z#PsaK)K`lGӦС3'x~RiHcIlN(u퓌cSY%x {xXrB 0')$$R骊i7z ΏgYwFU1st:W7.H$07Ͱ:2z~e]RI rSq!/eQ&ȇ\X|-b7ĥB29j7׾_[t/Go&gGV~ "A)c ty%e|MIKZHٽ3f,6n sv$?m N$Zyulfх"NkE1@yf}^vge]EQzǔ$4d;cLa@6E7Tq;1UcO^Ng0v^_91@-9G1 0dm1bhÌQ9`{y4*=f2kB鑕,rW4 \1͕Wk{θͣZ3;vHs_k>1Ttl)c ʥ8f? Jt|?Ԅ2#ؤY,$ǂ0c0FTރw 1S|gPOɏ>S GǓlmkB鑕@9]].WWÁc O70gDhNc38AkWKncޓŅ:;Vl/cKeFUAV^㺾6[ZiT͘| 54}0mC=Vb]=. НǥHRoqf(:i[Tc76.ΘL 5Z1ͥz\އ VR9.*Z1k0ԓqi>;Yn\*  cL&n1z\ҝŪTNAƥvD?c2q3x7c-ؕRe`Cp0n\J'3L 5t?1j^'ЗK R7.UvH P'FG_-McWK5׻T;r\*6aw,w (Js፤&MʘG;06=0qeƸgf?\҃gR)`o$5nR =ʕ11NL<|ƶ31^nf {3F O " Id1iu)޷|ث{C2=jW16PZ`M *A[y1id̈́qz&1d#3L/S< uAL`3֞Lq 2wFٷmgUߎ>CaOH9m4g4qG_f6¨+u!cLwzzCO;hC2=j}qU}do rnǷbaZNA4ƣU~H7@u#]PX >roە<:0w tWy MUPi^*z`=p+FWgLU56c!٭ֶ &Ei!AM `W[m㞿q>nտ~1ol^ĢE)cKYEC]ﰻ0" C%t$ŬC0P@ri@B{Φq&i~?w|y]籟ֱV"KA*0>=Qxu5gܪɺ1g5Ëȫe8vcufڤu;^j2i:Ы+#b妬﬒t隇4^;U?trǖXcmfrsƵ7S;t#^Q>i˺qgvc;WҸS{8Xٿ2<yŁA^>߫n㯛!]Y7,8S|4h|vXcsp,t.,[#^ !qE*MMqq"^Q6dسl< KAݚNg죦c e8plǼ# skAР隣$[MY7Ϻ~Zx6#:ӛӂ33Udzp[r̶.MHYFq۳v~^=յ5Y7dqlI"襻SW8&Kc~l`b;fSF i($[p,iBV}E!)ñ3sWL<,08.28,08.28,08.28,08.28,08.28,08.r+Qc>ެC\V`&:p#p,! x2 zdE=f1v1f1va,08.2cK1ǒ&ce8U1k`7L_tO1x %u0=c Xo] 0m|>6X ѕwH15gܪ1Du̵LBt%cYCW/Sw*yecyf} MzF:p,A1CWߔ(P'nAe{vgtCЏɱa84X<)v1o/Ы± DZ3c&K1! s M8ab/;f2{<-ydqfZ}'ѵFe2ҭ+>*OXq2ҭ+,?2K8o{gEFA 4Vy'@0>Ѐ DEe݄(!XF$ B5HJ|C&W};f4Z+8R@7oMpFucf]۱g%08=up }UuY`Z&:}VٯL18fUp2dn';cU=L3G,ccg'Xw,8F\,*K3|b]HW'FYĸ!՜|8:vcX cOظOi%h%,xR<)'t O.ꈨk4KEI(8 R*Z%ٰL}uǜS|n>cI~VNJK^1Fb_,6'( >~ ޯcq`8v;}3pLFiA>=RՉż.a"60zCcdDtwcI6ƎOmi`Wq毛rV1mTit18f8YWcOup }UcfcplI),::V}\5ZWڸs=[fcbs:<ءok\Mpӹxd ^V;Nwl)-:;E;i:?YFmi֖dqcS10 ,p 10 ,p 1r] .0~V4p 1,sYo08]:1Cb*wT쳮euhK RJ Q`Yvn\`ǘ twU,˿gY'6Ʈe~s2t☈Ni]^\R?z|vX41p~sMw,,k>_rl!jitrǕ'tLxi>c`#ZĝW/z.MQא@ZsL*JuߏX:1p\XϞʍ>}M~N88%UoAlz갶VS9&8=ܮ7Rs.^?M8 zg'1y8^Zi2Jӆjqrǒ[ۧ<ԓ7g ;培;V./-p `8Yfc`8Yf090L;qMGIENDB`awf-extended-4.2.0/images/gtk4.png000066400000000000000000001342311522325530000167150ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ȹЫ索wiL?Ȍ]I̿މ\HocXͿحݏ_J˿ZHםeMdL¶[JfPɾbKyi]K~]E;đpayfijŵ§zgʿF71mPoa[HyfgPcLcL˼n`aKŹaKɺǽСwd-,+Ǟy#""ʼ211998tcHFD̾û(('Ә~žbQȟA?>õzws}{~VVUhQL<5SPNMKJ}VEŸjgdΒx֌j[ca_sro☐][YkUpUHmlj’hUcI>ƶl`z`RmPC6NYتߴ9hn֟-Z$OzGusoiͺ׀ɌmR*餉b'ĔՐv9JU֎taP Byt<9=i,Ĩxٱ! `n:G,Dx\(g6˫O!0_c`P?Юޭau$߆idLpTIDATxlg n!fIH[q#:ÂTۢZYnBPpxH,xZ*`aӬ[65R~HS{jtm?sj?Uժ?f^68HHG|q Ҙ¢X%3JS*H%ZD9DTd&8i1F,J֭g4z{lAM=&EBDγK/ư!X3J|w츄lh;Ѳ-ov,1bgtohHol+itc_p'J"H(jn!f;D< D:ωqPn+2qP Q uB߆Rh E=TT] &Sddv\Bn T#bkEd)*Ɋy;eˎ*Gf2R &8a [ihG@!!h { 6}Ph)9EڭiaNx` uZ摌:Rӆ`,T᭹5 Ec=ւv>Ǒs\Ic2V1!ߥ\!)M$"ghu˥k>/CefXهeMh ^ǦSLpFJ0(#{~,?:~z/3h%s\w?&ics=4 H 1f3sEz,EDc)>3)DWxuoVM-$ >8j ;[vyK{L GU7o.=Ԛ9>ٮ  ݎ"G[X*,ĚdJhXFz)D Rƽ!vEЊZEx6}R|c)-j{l4,IPi~`h|[J^ v{)ҽbtD!|[,,0+9=-5i ÒLWDjt ǼR{;8ZMtWG[[EokVx[[[&@+ }CSmk@hiDi K)u((2E::@P>3\^ڊ*hs!@ׅcntDh{l lv#BtP459D Fyڐ(S e99%U޳UD|۰jUwt. 5^] 2pbҵuU tI-3GgV`Y`YGw]2Mr=}U'|%$dXw^jo!CX-#޿m[82prOm"t G߇ƫHЉ`ޡGa{.4Z~:<:{5I>+7Xp'm;1Χ+R)PtmFbz{<~rޅ Ǽ%{;8A\\\)vp.h[n]V"i֡Aߪ]_G}+վ0+tD]LeQU(K+mh[q!Drʇ0th!:'^S ˥W rXVPg+ua VLe79ªpt nzF$ծ#^ۏ6T?BM]=v5!lr &px ~A<,<GvvIΧ1/4&9;bt2_މPbBֻ^$Qu3kI;yǞ籧acZl8Ew[>؍w_{>ٻ};mz-Pȇ{8b?lo,Xf6=bϿm2k, "Uj,-rn 3:q8/x ڷoߞ=_|8.d OV|E&Vqy=vA˨_J#Gq gKڣDcy,Kc=z '=RtAySry3bS_/S!!-h[<b2b1MsSn3΋{lHmhhbΝ/7 WbzP qbEz ~Nvv1?8l܎"~F ;@۷#6Yv4q-Er:fO6)g~g*h(;_|ȕSuOfCQъ˿vz]ƼZiZwOO-[3޹ \66 N6 aCJ "bX^wB; L}39knuPROu/Ͽ|L ϐ׫:v"IxQǴeARɅO¡g1Μ9c6:Į_[8~L]p_`1>t3B1w3HKziwX{?[-.]bs8=~@8-[T2OZdLRcHKb" ~?7 \e|6hE;;g42 =Z|HB-o/<1z:鋌4C31u/VqL]^8.u---X!;FWuLf0{dN#E2!(/{lHm8V 繭ٻWGqpo *))1Y^ ϓO_$b-4%fVCg1??L}C{Gk0rC<ȓ86 lt@Zo;-Six<}K#mNQjҒ1I9bHKbc8vw?c.wb@zEtWM sQX {i3m7vٌg{oϱ!}[ܱc)Rm-fX3E =]Nh7ƴ˷XN¬cR1I9cHހH8bXPMU\9֘"Ex9"Ex:ڗT$$r,HI-J9$$Klm{qR%6ɶ=ɸE)d۞dܢcMmO2nQʱ&ٶ'(Xblۓ[r,II-Z1Õ8lxLòLyb#ӛ{dKɿ d2 /|ƅ8nXETr H:"_؊ Rc«E D=?lOޭs=k̭ 3qE,mXܒM^d=_ؿ`QU(9x44sroAEmֺEI9fO-r&m+7nS~cm\%k{!7'o`(^81gת00+3SjARD$c{xJm2sl"SeL1&@X i0"BwBi*JW !vm*,$hz~ڭEM;hg OLc}>u)@ZL)ӋgQgn~^ 03S{J{۬c\{U/WݛP%rb*ZzN;/_VFzjGz串kfا`(ڨYv9}dXϊRT_02i1,zu~ u}33}03Y240WV&'Bfӎ,o`<ؿۘ!Z!ϣ{v&Q,yQxq)#]#z*cV d1 m}M}4$fnOKfcg'n@QՏ *nci5n<筝uԮ<*5i++:("|+A)>kjʞ@SV|ccg zOZiY?Z%ߣB}wM @Pjjo߮TBUG<Б_{^ [^ȝ]ᙼy{zQ2Zy5H#,ݬc{q+w-,tиYѸI߬ɟB -8;TY9r6$kUס~鵒ᦠU2{b:z9Vɪ$~Ų*ci5OD%t4T2]Yy]!')Nc^(b1ĠAwR>^(-M^^~ݝSFn}"/⡖fB Ԯ X^{8:6FҶ莪um]]+ǫXZ9֘A57}:iڧ tY:@tHu3s FF#;?=៖ؗ1/@22N#.a8BJȸS-_im4jT#q+MM'h'ַ!q i(d45:JK;&0[?cRc|PÞjuʎ8&:1pTfR"Lc}c^UuVp/?PsCbu (`Y8X1+&UAɱ " U`OO԰n>r1|߽/7ltB'Oچnk鵕vUG;jІg! (d'웨h?8x#VWKؓ'Z!fG cOg_.;j>=oޱ дl#m]ch3Ќ 4㦉-|PS21Z^>:i9a~07 F=%bP"86K`ï 0Q̨ =e(Pv)d\k x5MLL,=ppk@Omɟwj[ #>_ pȽP gxEWe :>c}E{qB6CzlLćbZͱia!:5E_zCp2]k\8cYYڞ;Ji-CZW^#4Kb(8E1pIn1l ܱ)Mork`m]ċex@3# O,+#!Y EuqG YxdmZ7=qc\MwM Y:a)r]^f r9}lF+fPAͱ=eI4EAٞ=4U~^•!0M[_U`i(㻍6[KK{7<^f-c$ @kPMZpj1ܱ)MI/ 8 x j^oyݻPF" *+VBEʰxnAAxfkio1Ҳp o7t (fQE׊%ļ8;?>c٦e8^ GH`D!m(i)t8xJ%ÑMy5;8etJp "([SG8E8pPLbMtgf]ZbW!+w:]bă(sX\N' "&_S>XZ0Ԏe(yl"Nm-䒠"85]oEsv%VNAsG  Y+=敄Cx}fOEdޑ)&+Sq,; yX:f;'3EicW/ ر}[d۞;6b7<ˌ{d۞8$>lcM7qnfuLڟ=kwMcIK[ܯ $owY}pUUcHs4{;8טutԈK&=I8.5qៜLǎjR?}%+"a@dB|,cΝMN,>-ۇ&=HI8\?8/Ξv cT,-)p=PS\\Pj߿ݛ]dRqE̩Fܦ# qn  ;{ګTUvIZf7XZ"vh,#hqbhuBx#b׎Ƌ_[8L2(Kv03;&.?/Iq+i i接J?nf+N|/w܂c#&86"$*[eoctgw%[G嘵0.Y/?/I3x>v08V +g1pj~証3pf 7=G~^x]~P\㩾[|_,vWr9Fv, ^Xup,X-A:3 zD Z:c$R&>k{U֍9yic}LqrT}OWPC$`YJEZ˼tI/IubeT YjL!R;@R./Md4*tEQ/a?}xgxxxl̙9>cZ[f f/WPhgW„ Hc۔)rLLܗ!R=TʺJXŠm^c@cN$NSh_usq,؋r助=Bm}El65gؑ4Opȱ.$%,볳 D eU޳L^*c ]Cb^+i^fg,go1>-FEELd5#4:Hۋp@NN:#vRWW kR64erǾ#HX*دYJ86[NZ GslakFuMXu'@, nYXnI3c9kg9`&CC_-1^"wYÚd% _RqcfbNTW{ qLb"8iz#͡R4%}!y*}1ֱscJ<[UP#Jx _/Ⱥɼfac(mpXU +E볖Xryr\ *%5ǎQ`CEUu2rxMv69x,yjF!Xe }( ~/gq,ޱH猊8fƴ dݤ=ͰmD1hKyX%tzrLY_*z5Z|f_Eo=a(v5Y|a2EǴ,Kv 151ǰcXӬ_#y;VɚiԄs%wL3R4!y٧ 1a`[cLTA+Dl'V,3KƯ;I>%;֯18XqKX$##2),h=-v4Fgem8K b$(b74Lk4kgFE{$''c"{Wؓ5E7#iRy{c=>+bW,釺.n*ǷcUzl l0!+@w{nr2ҡXI<vxeaoW8bAfTC[JHc11d%LNJ9+Sc!,Jc H >Ѩc" $ruԩSZgSp:||XPVTrb)vl$K# 9v}9gȦRcR&*Ic]4H,)͸ P1 cyupƍ!I±u.a D*!aC]Gi'x/:VdUX)E"? .Mc;"m86s1ϣx./\5jw|-tZDA1reqXN:Ýa[wGCGc?͵1~}ױuM-X\. u}r$4INhH˥z~^))>,\0+86Wq5:=OB1)aE=OVNt2DzƱ $mhC(}J$ ~Ȧ7oV(qxhsSlN#fa ޾[ |:6p}]IcmJ3\ѥ t5Rd4QIsU lsc擿˰І7n N`h`qyǗ|@Dzt0i1NT`퓍8N0<ű+3X46=Z!{:=iwٱt?f,4S!i}I =yf66fkCR'}-UcYJDsYK*f2(G6+t ?ȿKemdIrqG~6x}l9}3;vNcyNդZG cye~L:jE:~{cW5L9.+N2TYhdIe5?$]/c)cBK +U+9E@uQ`=@6'XE(Ѥ miM11**bǚ9C(%)]vnYZCR:cس:m;ivӱ# \:Qcؚc"E"ՒؕRKH"X_TyPڮ:vo/ MKe_]IHl$Q蠌tX8cmc(I%}BnV}N|jnGێ"ؒcbId2@)GFw,;TTaW0-y;m 9v 3Y-Z}"#rŋ91έSw< ҇|)Ql>Uє#mKX2dܲn[7aԨxԱo5j/`SֱZU[JܑieGӛXFݚ8DVՉ%%qtndUy3fZ2d kj+tci;Fa7:'! NYV>"2X)bUacZmҖ}:c];>|πVO{C^'F f= W]>y9\{Tg3u`:3٩D> -7t4m9d {,]4˚R8n nـzT7.Kݶp3Y 4OFz&ȟW[٬_jְ e)ffnd5mDZ6UjvgCޱ^F*xFlP9r1OM BN%&gfBû:1@xg18hll=~֭.oeږjq`}cK[ܓ]ec63:Bmk|eȜs]CFYl|EF6tvEpyma4Ff4@FрYT4~xņiGkRܵhBu/s+6. O?AH;hcPs:d_BT ,\0pmadk?I= # sXѻ3>fՖdq\0Z*UmnvWq4m*?Cgǎno˱(7t;16 n6pP`3̻asnlt*=` II#L/pcnݍ;zP#cljgLps56+jjkbKb`8c@@KlLW @lK@[Lcs <0GcH,acYM-ZM=ySuŎ]Î߽=4}(U6':6Z^>hh6@C@s8ؘ݁.pVm_ y0ۅHH=Y086Ȏ|`'r?[0e 87lB"7Cldk"~01 um?;x&Ċw(;&0_Un;¨؁7D{8ű8o&=z ^O y$c_IXcB:nw\&dv.2$x5'W- j}|]Bu`ga_4C:<0"7L z^'98_;ZrK}JH^֍ 7!%X+#GJYK!+n˔[lӤNRLǠ=97'|,Sc%g:r(q2GҸOإAX8Y8;AOkOOO+_]䭘AsY&c={~='}pPx/՗`גw 2͋ c*\ G8N$7!m'5t L.Xôb$@k`:}_0|hQAנW'GWYߖ6d>g$1²Og 1F. T" 'C8~2Qcd >Ms0o=eQNy%8hQ8}/ٳQ (f< Ot"r)ਇ)Uq Bx}1 9hD?hW<[ώbc~Kj췌cqX<qFdU̖N#2( Q__O:3 +kCRX\^^c0mv Џc<8rt{Œ;b,n`vO%8(mɌccX19ǒHzIK'󎉩"Pigno~{?{ݱd~{?b|Eбc{X4Uc8vRv.hkصe; ?-u*~rk\ZMTY˒wߣ}pLXSFCGc?͵ru?$c9vN/e~o8<[W<xa췑ccKcnW)Uy'gpc)΍cco7@͍O/C@1:/q_6ƅ7:aX,8lSᘜLM}uɩԱJ+HMSS[y2 [jGCo0ۡG+cO^=_g:?mԸQ1B11˃Ǻ:RFi'֐T/Q9cmXe]+­/Xα%VmȍT)$sl$ccŸE:؛^Ien{_ƻ`sbz`Qc ^I)œΡ9JKS[fʕ+K e lZśv8f)giTn$m. k|Xı1'PcEn7xy*riGc8jOc<[U8FET ]@nrŅa%wE^ j'gg'P [;8GOC(KF39تbYRɺ[a)cǿ!^ pL9WL d+bˊccqcT1έpzOqLؤ ~e29R +{1c'uuظnHTv1umjnHQ6d6q8&IKKy87~ z;F'cSox zh c96u*nkŨSeG,wH o{_͸(϶0%vlE66 z*%5ǎANF]b&F)[1 mgIa:n4n=%5h5kD{엧kַU x$$"NCK+OX&KW)l;CrЪ-v W6g:̙Bw &a?dP]Q;3BPh+qm2fwtM؊N6!n`c)E5h3bD);8ľTպ/CccJcYOq"ה8 %κ,v8l^]pꊊ#ft)Ղ8,:(LjITVr 1yHbA!\Ą] c9XǘDc5`$+S;&t$ pt&&eCpn*UKiJ%P5+h hp#2€!J(A[8cp}tt:t<&ݝ}}7'hȿ0ǚǾ87j|mGYT(ZBU Ff@kmnMF]:FϷt/D1_蘾IHo9jlrxLol P笗uApn$!:(Aiؗ0sԷ I݁:U`ǰZGrm0kXfթP[=aQi;@=L0a}Xtdhm T.Uk W/B?}2E-jag) , cŢ;veF+<e`zEG1;U~l*/Xe6lej5,K%m܇ ~iFVrh02[pHo;yٷל,=YO&&gKe C'cXtjA ;TYPxj`,((v ڳh:`1+Pw:X]=x+6Ϭ;sM^ՁرhɱL&^r1EĐdLJ^SulCBtd]Ώ3HPHoB_4'ГlB˖;ZOly~S*D}c%u2%AGdAǢc|¯ \F4Xʠ_laf-S7 ͠>2yЈPԝ۱jD <& | rLct~͓~J tǚ|iH~’Fh:sUrg_kN.I7| G/-Zddٟ$( "SEYvб|CSKHF>|)g{`_Z)|.QhιulDP,aǪe8:OiH#Fp_N)9NgN;s5sx)xJgG^:? Ujޤ%cabu YG9WF'j݂K6x12:@\O"DC eGF.xº}"9ffR&:؍ \nf 7'P,QނTcbde}qcH&F5ߚW>#C!b19&!K_vIc[uo&V\SI؞EWl/[1Y8/"OQX_ctp0ocʉeDK11Чiev11&iofGű{y3|Dlq1nWKK[3c4-BbW_e#9?m,Hm<)Hg|M :I:q?{|e򭗼>ԝ̾" 6Knv)ڨqDֱz-Z6"f1c?r 6G>M~{ Ӊio {\ W(?=5\ʋe1\]/y <1n?u>w wiÃq9&KvlS :VRDq)a4y%9O[HpQWn`0Ō;/u|%۱oG (=9{5~|J+ߓK[SP-NǞ +Ȼq\XP+J<}~ @MDEqLcXcإ< Ι*ǖEb/6Xacx:1Y &*8rv1bYbrh(cyvбj"+vu,cFx8t"'*2ϱqspR/eD|EpԮtb1Qql^&:V3YN2:S ,sbv K1LCc!wliujeE/pŊRkbrL v K1HӎPޖ%1*,fGI JvcR.@Du8v1c?'1<E` <LɽԲq9]B}GqR;]sc!RK]drL?yZ{{\19O<ˀs'#b1@yR)t (V"Oű3ea0(cX=N<ω8󶨚;i1Pb1J`cݔۦxc{ %f)ulxkgB#v ے!XoxUsZ{c1sRܱBs>3A[6'fNFW*/;U:m:KS9"8&=Ue)DBC>hcHt8xs,vcD>3A&d>hckgt^ޖ~Վ#t+XyKBXqt)H]Oci51U rzIUo۱jNu4*cR"wQ[;y9ׁМI o1+Z%;W-)7 E=1 A>;WtࠌR&:؍ \nf 7wx>%ޅɨNŌL w!'y4Cb61yּ*OuiΗ~퟾:aǬf ܚ1u%1VtĈR;Q 91OJhݱVߪF4rRN2iw-s Y&ñ}{T"阗BՊՇQg{ye,'}h4LI:21^б[R-<ɣv661:v? a±6ǔkyf"ԥ\m-ۅ g Y $c*Xx/I~X4XB_a]c t4hyJqSevM-঍cLccQܻ]aI,'\[~ 8v+_MChVuJcdb~`PN𝆆eW>V Ws7G+W³BKx~䆇l1@s:'Uy4K<}E6lt7\Z^RrcMT@7XL=0(IݹFM=-afqh.Y `0$@ʙGs&1b189RqL|>\{Oa6` 8V/cRﱉG03K3]#RMQ{f9 OEUt6ȥ0 M> f L sb%J18V#% 8F'y ;4l6fҫ4j5ܐh{8h`4.6u*v!l-qA#?$LjFp߻c;W8ƑOkƀ5~tGvgaV/3Q(`D-t>Wjj|=?:;44 2 If`Tp7v0­Gcܷ_Y, ΄t&Gxkֳc֒SAJ0ck_2Lin^m}Wk0s.B4҅^f# ( ϳW4̘'֊m|j}Y A* @a̎TA>#|<1وwL?{T/;JħO HPC2J6,K&3l4_eqR-/#3y_#e71g;,O !ƌ&dܶmo˹-Qio9es{{{>ŽZckd9InO6Cr&{N[[w>$G 18BDz(}O" DXH Al}="HP KPew1)A%cί4xMOiwl<[l CT{9ΝJpKl"9T_(:ƝlEi-E8s؞#Gpɑ#zKv3΁n1ޘ996 Jd4( j46y`פEa}|A6 TScyHOl 6o(md5X. olp[s5(ڱ?X`qAqņU $ ]h5ZXT hbE`І/jkw{1ky$ck\7>ٱ`w \خp`ЬqPk8$yvܱC<^!ep1?1}6 c/D8V5OIɉ%%,kݱP:ـTZhܷ;a*mc15{MiȜ 1L"Ƕ:#rr,W jң/y4~4j2#G'$rCK3OMbű=S;{#9ēq7;9aXM\1eгgSx:k H2 +~1ʏPp|\~cر菉u $ƱXkk`'~xc6釷IL1QUw:F%.-= gTڱ_߫Wʵde˩VILcplW7Qt,<ޣׯ_Qi~dKcߟ 7 vyX[.EBxZ!엢[L?|rwc=rߧy¤?c{ۼplWH@cplWZ{=|u^Z~;d18 smoıU8s NhI_u^[o20c]]n_[X1Jd/Ʊ|ww99vkpo~Luׯ)8vf|71vOXۙ茰s;ٱ]|w?&pgX 8[ku&|軪|j fw,Ic|<WV?#(Er;&bݏ]|w9>.K]+yyfϺ~v8v( ["j#]?F $=r(:6qǺ@ss{c@}xvefffbllbyfe7v̗km3bs!ǒ1w9Fѱ6j8Gq^?{x1mۍW󺕁c$Yt9R sӢ{ :dC뵵UZRd8=",Ͳ$s9MP|]rh9fO=c /\6?es ۔gsh2 ,s-4 #|9QPێ\3}w.XEtԭhSd%=]@~Y4?ՌcmbPD/?ټR*񥕕Mބ[E (uۡKJmڤj =]%)L iw؝|ƅZ?8,mY|wp 6Xb*b.B<*&/c Jt4ѡC?/ \mȂjESS(t;w[<$X~c WD?`*~+1)cjb*BI?=_XXR鑼5:]تc[g, qhjuVlݵ;Q 2 =`{DR]n%sL,H1-B['[,`=sodo l6!ۍfi[q6 y(X)Uر u&XqT7&{ S0-MSmbdY&'5'n0,{NJ{b%ǘR͞`GӞ qK>X Y,c2e9?٨h2 LUrc*[h;(Y5m 1zM~.og1=c٥BeŽEPP,ֻmQhJ9Z{9nRsYoӺu#L:v ?;/W0/¹?1ZM`)txr\u`a!5osf+AA$2LıHL\fЮ~C jF^)n^Paja[cm }Gu#yAEcZy%c%HF۱z>9;)nz?]"yl U9I?MvE|ljzzjLq ǐd\s>CñnY Ɔo_3[ X8F*V|c뿰-F{\Iީ`Y3cpc4)Ǜ͉cXHD#±٧ڞi--+SH>}1p^ 9>cz F=b֗1ꌖcfdr6![!"R/_?;fG:;94hE5`Gݯg#ƧƯF~ubl;&+=j/2/{# {DbK,2 99fZpocJ'+&@pg"K B Ƅ8:;:#i1M |hu,> bzҵ X;B z890:;%%p0[r zzP'\DvQws8̸v vg': :^ ɦ VB:mwKĥ:/\+!\q,p 3azm7FkfFH3qՃcYu?&wR| +sK1^N{CH,o޿Gf'g&C`56DzeL) &k7:[;FEh~A i?@mGNiYsCz>5i8vettrLL )d0_2t~1\^+R7Aϱrshahs2FZy|^fv:aZ;<'piq~_50JU wR{ vsM8ϑ0t ;E@1DcL1(p&~?Fh<1bHhֶsV]N i?ž_Y7Lr ߩgB1M̃c 1q%z&W)5Vh4.h`7 [@2iw=QFϵRu29 l{jDH[VP赊5gdz& n,5zUe?g!拶mz@尘)ɥ(B<"39CY)%f$<Q$%էӍY:ϥmi?O\=e*vf_5_8Ɲ2i;X $X\mqwRLSO αim]yt1Zqx.Jzt\*uf_*t@i[aҪԖ֭8˥v"Xxm:540Eϓc>' K> K OFe]G&Aä1&:|bW,;i2R44KaQh8_LeAڏVl*ܿk%KEώ} l"n&(O4C|Zh=Ge띎eQY$;P$"NpQ@/#~J}>헊@2}X+}}RuX`w 3ˎ7 FMC*.f$$ܺ-Ր@ ]ö!~;? ,*1-,cٚ@;b8DŽ~X6,dZ5DW݁"rS 3nkr_qtQC Ŏ`^AB+4o٥6 1ty/.GGo(.F4qO%1r+ d^bND@%3 o3;z>pjq1K& H P=J94q,c̎^f5ѱ6sĄl3&M1#8gw?m\؋=į86Q& cB굶ju$2t)Z8uR !B 4iV4jCg^8`<_Qs33mG3qUͥj#dt.UyLhc1beO씚)IZX,cD%2F/)l؜`lٱ9{Nô}ddlwI?c|viWkjGp(I5`2f2Tc`$W[m,j2#rDhjQ g !EtMBErx}u@}= 1D1 ;O#p Us$Z偡!03ERbY 1s)GvuB!,9偡!e"3`~SA< qU`L AK@T?cQ$XYjh@9'5hv_!SidUcH('hgW%PcѶ/'ձ/BFq3~J[]|j 3f+I@]MH4pD}| T1l/|$zXb%@f$c%XmF8fbY`c1KBd8G,1r $Rjv)(c2D26*=MC{q,2ko,$ ԞR x3gЄ'1XVXXndeXT>HS2Fj1Lak[br}eB9O[R[;l=Kxju5*:Sj}2fq12Fmnc1D,Dj2@c FvgIi I2W g*rOHZ ,1D %g^J}gEUFy-~ǬgNicVq@ٌ18P?|h:Xa48nCP[0` (&ݴc^C}M7Vjɘ@_ѫuƯEU.c ms`-osa8@'NC5AԋA[ h'cG 2vXk8݅ȯVia quSG}TrLuzGH'%@tlEXɰG c+DG~Jd^+c- 02 _^@ lbcr#3Yz6V=vg!:U.Lƶc\dd Y3# Ĝ-n#v:Y7F] kŒ)'*qB'Oo6G&crlZ2KiF&c%R,K c8c?*Xc8H~(ci/DG~JܥIDnQ~"jż\DAo73bNpN b8P1$?+BG~JܥPu2v֖&cKD'ÎRF0lZCĖbS?cLj0UJ ( —0ЀE9IЪxHO[/4ۊ&cb,'㛋ʬPKō`7]he\|CZWC}ld,o_*S1h.VF&7ͼAC1ḍ:|heF|յN߽6"~Fط)>~ (y|v_?aX!\halM&P7H 3LZЀөjf dA0*XG8oNc @V:txM eQWLq20L ,A,w\* /Q,1"cnOp*̸}㝶Z3v'{#{G'cÝdL_pGv9Bacjem Qv5ʾ`,0+2ވ'Xi';!:f2q7Yy UgH02pX φk4y6w7Y ƒ8n>x Ǘ߼Zf,=e'/bpl<`_σM>}B)y5^om/6j`3!̈Y5{]G"u] 3ּ&5^;Ucʪ&kڬS^X.H'U9c«}<Z /X{=ZB"iXGH-K"K˽js}c~HL$} + Z(' + $co}!9ɷS}ɘ)S T(c-?x# ]cFd}k$:$d̂k/M1%oXc'nta8tO01v╡>+e/1ah}mEf*톛~;gVvd&˓0HW#*1zɘv.\^83V_fk Um)=F Z+o O"C%Ru@qm,XùS?D%2F/4Տ])^9>фO~ElQ7 .pypDAw\;39>g~E-OP_9;>!ld@&,8Ã#⊏sCSdh.uYLO\X +9WHQƎc#1cІͭf kYضilh.&r2! ho3v_{sN14e,I%AvE-:PW1> -LVSb,v0Fc<C; ;dPA+c^-Q"e%22ۭ1V噞Abgl71 e"f2=c0&Mp7^}A A&ŵBOI~ReP ]E#yr;()2%>6{"[ pbE2 p>R]iDHeLD KU1X.d&c|t&bER ܁MA BjOC%0F3~EInc~gݒSdSȦ*v̙)1.T"t% l>fºR]iD>?Fj1ȈxS}[PKM ʘ.]F]2EBc/XLXW,=cMS11{&][1XA]]iƒ/$"L,SZs )"՞JؠɘVdu?px,h+rK˜-`4J~r26tfC;7J i⢰.eta3&cmȰ(1&\""%1&72dϘb@#;؇+ʡ1fܞ9;/ lçᐿSHHdicBV̎OmH#j lL($מؑdmy|R<_2vޫcM?mnzRy[HNF_~[l]빑khel`@Kk+ʓ,A[ hCsy`'ۊdϜZ`_/?R_7^_}׸R'0]lWǧ8q/ h v"K0ۮAAUŖ*U""|(4uՐRZ5Pچ ЖJⵯ OǕx3{RAERj1QDžE1ud0, 1rcȘF]Q]3wo3V8c8Dޝ JdZKK[_bPOW|-y&O#/&zN}>>:I0?3^<@vo䝗JT޿|K__o Sj;DDt*y@Vcl ,lZՒa 1&(HYM'c^?=:T},>Q;uypCƠ8&@.Aߢ(bP&cX<44y1,l6cW3p&r+i$=0&?-~p9/չs1ypcw* '>+;/c*w!bʝⳕ6cKcFe5QO]X'S-^K%:;ݽ"ǼT8BF^b `ի^ްC#V5z6c&3'<},svh&cObf^*6IO{)bQ*q>sTxVR5iI؏"]"H @˛7G&f4eyf'UQMљnuFi#cwQT*Ax祂,}MZ|ҭ B46 C3G (˟&ET* Iߦ_k-1qK~=QRI#XԞϞ4}pm&4fMOM*<;zyjbTޤ138h㜗Jhܹ[令VnKcj$6po'm('EYNO|'d2.ȉ7sΖ̘|;/_LW䛗 G(jtbsr3y,7?iHIQGĸ '48NO;[2cLRG_URykb+]K68eOĨJ' koox\:u-1ew^OAUR1R*@ѡEX<Iı)&1 y鑁ɡe "*(ФyũD,oR뻤}Ԣq>7TE^O:22::1%YJXQJ%qs8-3c3n Jǘ~Ǐ< 3c#+-E#y[|e*c>2&ϺL22FXs>a3* DlX E~lЯra,ꄍ>i+޶6cyZVf±KxUk*ٌeelV$W{GW2TrD[3l ɇC!o"0Wl+1Ajk}mlƞc BFp` sc e dx9^`Dq>ߵ&TIKpϱU.M[%5qGƔ#5U+ Ψ&r,لk) :"6wߚ㟸g%r+"UjEcHMJΤȉB3 ȽclggΪV_&ݽw#:]T*OTƦv]2E_OkCKD&R\1ddI56)fZ{XgG@:6Ǣ =92fmkFϦڕ+[yv껦I9`kjgԐkb$`(DRTWe1Y&Y%Ggbz DY *cbZvBmТӛFǦ u'^ yK_V;=cg ZrsP1)R(:Sc$ŏ];QfnpMc(nguq&zc5 2!|"IY߼Q!`w k+:X(<(EXGgjh.AC7+1xMءhLIVPirT32Iye,9$mhX,| f}Bӱ`eB2HGzkYn c|n|k{a-+br#ca_Eyv/2]}+E،bo$c?LerʥW1UR&P4XQ@1 t)fdBw֛ h]PyB)dL%lX+5;YNz/ o. AQdˊ1Zbu"bTd+ŸzũaCgLxY65lzŴ~yк(N,72-Dh[NK=3/vDhQr3B"ȓ]ј є8Dj[H`eBhJZM{(xt{G`ˊ?ze1.'қ*l"n hL>p1m+z4ia!2"@}g"iߚ~C+.Г%F`3C׵ Иc[sѨD4Ip 5[&+Eum{</^IԬocndeW%AN3ֹuVޱ}ǖƏ;߼f 42gRqFX:@(ͮg]v[S*e۷o,okq pza1>oKV]ؖERRV 扭̕ w9 B;s-=LPfc֒5tl!ɕ13г6c1fߠd{ekj9FS3'3m%1Ff{@=ElRd&ڌ5iI1(әTS&EfX\V;l13I1.LqIĘbO)omƊ嚴dLv Ɍ".'d7)b"3fdG7J:B_"Ua]vX撵ؖPcWuc^ SRf4Tn; HxI{>;|tJ3˳Uaս5X撕'cB0vybHP^Vw߼T-נּ1^آ|̖1]}5ER+´dBQꃀX֭^yZĠCKuh覆C\R蒐Ic#VVVwY+a^6zd3+8c`SWgk^ ]jMnyh,w tJǘS"ldF#H1FJe=fOW[R[^YZj!yKVA* E`]vjHVj.DhDyUvv?g9cxΜ=?=c{ݾ۸THȖ HcLR;}%(I)[6Z4,MaSGX=X)c^ly}{mR 8>).gw3KE[XWSPrI\c3&Lwb=}Zߵ׵t prKkq>?cPű;y~nI-rh~%+(6Z Y<7vϵvRͱ0yl f>)c]0.R{'<PűO_|}z}~e$vRt:RŎɊDdn7˱)w$3*h.M4r,Lj11!.oc*426T3.mc?\_-Oti=KcHccƚځ3H`ڹ%6Yٱ0B磻Gf_eXA$)r5RNzɕPu=.޷>NpTJNszcw 0&Sq\> 6PhycFԚY3;f\*+^QoDqǥJlAׯƣ\Tƣ[G#⎵6zGkm6=;m0X3Xž.NNrPɱuXSzIs]Z9:r.(qh4>ǠN~"v{J5;$'WUǚ 8FŎD}\c :F1`K# @jkk7VkÓqgf]5#ZP"NKnoͬbm(.<3(`%Ǵ쎘\hoLL_5Ӵb5vVWi>ZғŎf2NX_?ygNuoGfGӸs 3˅Lp!u>3Bw jYӰ/*} D_(̶wΆ) 9&⋇wqq`){B̵fhbO(lB;K@aǫ w-5%Ǵ쎘,;F֤_ӴR5ݥ1BGPzB1lUL0x3Y\| b@p a&.~fvȝ>43cM7 r50ko3 W!U jˁ-4yl )\ *ql9;gمq˅׮eG j^ ;XYr\MT'Zf6 ϗ-n}x(ߕ":i%RAk)9?-گiK;caw&"> "W+.8&*{o>rsy1/arK+i1Ӣ11->+i1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ11-1Ӣ1h5XXdpٰcLcU NZ/,¦1{1,ҎdBcZ4hEcZ4hEcy{/h34 ym6:` nݲLRjŸql{=Jhy EɐyL8ѝhrZ\˒>.m' +c*Yrju(_{*hmڍ?Qmh'Mjvv Ů]sFїŸ2 9)IƎktegܣcsx]vyy"u,)dLdwؑ{{TB6%MIy8sXvDж] !zju-y$Ês-i75>(b.N-w4eqp Ej>LJm9{ͬn-Hm9c.IPtrO}QB8۸83Zuw厽7AFܨ%w{Gu&S+v|j|7 =U+öVݼkMwcܱWAfhj7t:">%bq1cJźvX=^ZEQݭR|}԰Ikz1vMq1"cc!co_tl<ҕ@m}=VAsKAwE;Gdp;cQ9%NXTc2ZtWxDc/0ǢœrlaAww?׎M"cw9>h]c>ha+1ExecaO)"ю~M33!-4AKk<;Щvθ9afFcq8.28,08.28,08.28,08.2Վ 8-#pp,1vce1) /S΍cXl/@yL *ݯ_ pL9yL~^8Ɓݔw%Ǭb^+~Zc9֡3ߘ# hZ1Zq0c1#ckA]юcwFm[QXhu&Bi_> #c%1}@aYT'ZArxACaq`0ϴ{W7.7(G{I_ո8%{YnK9MJjJoK!p,c v*%uup,%{X)gp,[G(Q.p; h{=xK1)>̯#X_]1&>7@x=VOpA}v1%,;_[7\|Ww~<-zI4_G;_]9ƲQ}o%5\>-pG?)8I;|(cǑhKEuۋ[αqO8>ZQk([>O9p<S\sZOsf3ۯ/NC2o ZRvJ YkEuplEo X7lz+_䰢EI81tX4ocoEѢH,U(Scg|'X+c؊ ~at\Owv~ұPRSzX cp 188vcq6("w՜ֺr̿`?vp[񀾀4-%K5n\H;t;r?߱`>6#z6n_W8@/p 1 @/p 1 @/cw:tl[11]O8#cI#Hn8خ̙NP0 +s#v {ڕ7: c~Ÿso[9;αiZp/r4?2ms85cdquNp=][Y}lHGERQOݮȈ_Lї}ΎzwtɾM<4jigpmjfcasrpѥ؛zmƾ瘗~WEb_]gM̺꾱iYp`{lrRC6NYdJ:tan[qZPإܰóhZgRHqcO8hb1Ev/^k"LwcZ(U:\@y*{Xr5 d#ԫὯyu.0hѶ00vX3*Z۷66\&&iq^^W IDATx_hǭS.'z%$$b!`&Q`e8a ͑d7+T]=$8cPS/4N,s'0K`=0/KUw|ݍ QNp8TpQ 9N96CS;~pTZF5H'n>$~I0Nmjs'L}IC M Ԧ1xkkyuS+V"B_SXm汳]=[6^=g9AX+c7Q2Av2t~3<22:W DM۸ӘDNL,XB[k8@#\F:b?b%SR?h\g#YD >Gh0j)[|56]u(nP/Bj [e^oMQ!q冢̓sK=9ثc`vZ127Aq@lA&d:WКny|bh]֡(M[%.gJd~tS%+U4MYji9Drv厏`I&S \^0U0lgfxLbe(eylm(g I4 TZ`}($ґ "aQD1|`%beaut>ǎ$Z*MEtiby, sǵ@5O_eNzչpj0)sTzVL5ckc#,_0ͣh1~FH&ًc+=EnyHYh.jJsϢ];f*teNu(:_7DQVjU盇cX0:ZxZ8a:Þ~} X4Y@)xb!>݈Пcie/NG(wܪ-+7D{WsdkM,x,TW?)LM5<&RcyLTGZs"XmIurEŞE1_QD^4bg)_8n}p6؅hB;.}vI[,F[vOh׎Nb{' ?V]+AvJz5twΤC|['.B/+~.Y>I|'qV,uW~|~^h37G`39ϘZ'2Wo}gJ$ۑ+L(eF* pdB zt9SۑGW!ĺu*9l~s"/>C/}>Zr%kMZ".vbhKlCq(- gj&- L'W_;gngo=ʵGtshĎ MܬefRB p4 %o 'n  ֥lFv{08Eæx=伕F;Iks^BTKAmtouiQ ^|ig2pFlkDW:0e{CG<|H+th)GpȻ)FY$ݎgOtὄL3Jmm 1GuW68]nQ#w2֤]w)3]1xdEު]i[vq bmܮa n(D?˞sڞ(9<ӧ?r'#.(SǾzeuEچne3km&ȽLo+Γ٬ڋn!vt#vWD213|}XqFH lǶI%DLJ1qq1Ֆ{;\RU1nU \CER_^p1r/SۊdߍnIHjG7j'|ԷSܭh8tfII%%8n fk;';#8={iRx c.tl seLVop=t!OC^[s/yĂcuz̗ 8{v=q9n2db'c" B˱pv '9ȏo8r n'9xÿcr 0A֛*8F/NM0\܄cwd}>q\XL+77_Du@8' 3.pLLNN6m8lcd_qqΜۄ|_b,vOku7Reմc~ 5)=8XVeĄchwaǒkJ ffoQ|)=?2U$qo2_b{HeLx8pǮ M2@Y5Uby~`wM 12,rLl'78+'f db`G8cM^71YWENm[&aR-cTY]q)=٬ 5 pFtc99ɡ덞Y˪ñ幹ewǂLeQY:$d cvM Ʊ)Ǩ8r;{p y0t3ps3爃swSvAN1[M쪱h&e;~ك6974~cGco'~crbQGdQ2fma;$pfF({§9vR9L6c숃s֭^\*27//`A.9@5ցn5X!fmai|ܔlV#u e>iQض xNKb; ثw{;vleYرE'".Td<8fTPs+bA8fm2! i2cl%(?=fl#[W(t@wc1P,,P1ͱ,,m% eXL;vWpxcv|1ke]Ub 1N \V8aWbycL˶xt,gs3_Ŵ@s +12u"ddYc*qd|8ٻ|86MSL Hzcir.iŠGǨ Yl;x犑_YyRp@qL5F]'$Řu, 9}^I䘪J_7dɤhYBHVfd8aSYzҀ1@D1ˍhggcYfxjm´b1qtw7Kct=1y~V.>^$7ǢZVC,,6qϊӠE84hjС"]q$!dfJV2ŭ]wlkVJuf̀]crZpqǗcL+<<=m^iz0S$'mPfH`^ƤcrpvV\*5ZV3>ͩARQ[)8 tlS"Zqc O1 Nlc8)X9gQwx`uV=hm!.̥Hc186b6HS"1o;&;f:r"\BP^x6j'o}9α^,ݫ4TM1W>Q*aVeq`#rBVkqVol}oR8Q{sccLp eFߊ}PksLQC!HD'g"jT*V5zUag;ǘ&XP Xc8VCgszRKv<1M1Xc;?CA'SÜk&yctcc;8H]WL䞏%+ycv}xQM"±J\%{l/^u]8c̎RF^Whg0+<cDc N#;:V"HxF8cHpl펉11p 1838c83yF8o1,8!tc8i8%r,B#VqūƧc#}I1zr9#Dؑ 96ׯ~mzHC#Lȱcѣ6ұ$%|Ż3` ڱcgBX*U>"dMAF56},[GcƱ*&|DA]p;qb5 ^"rK-i><$GՎ2˱U>㘺]c}J8ƽX5溺桩gt[Z_^7cQt{Bkqt>Rwɫ M}똺̯c^~{ivh\9 1oښ:Nna+1#8(.Dzl^*CStr )fђwٳ>{ƹ|?|| ƊlQvyQ$cUW뤶 #8vE@1>G8vD5}HP]hrlζu;۟&4M6չpr/mfIk‡%?]ž}ŖvB_4P [B.">\5q~3wG7?bϙNvZ:}'9Ϝ̙,1?ӧ_}j8 a@W{t:c︸v Q _}QƒfbebL~pTFJ.=qW  P=h2c×ϟ|0߮4;G\ˆaz<f C1Fq}_}uv2LS '-+:bebFQLO[+=_y(&f?FAB7 o/D5hLAsAJ5Q6f`?>vc}4h/c"aB3qqNJ8L _Lu.['D+^e B^u^˔{5eV,cp0 nlwFI' N}ZTix3} 9t[1lڼcg b,,K&reE-iuYD:m^ӋGp,S{E+=;89LSci]3}0)X1oĮ EL8Ӯ5v2!?a0F ',ִ'.S;>N_B MiAp zpzEEv!OCdRPh6 ] ?cl U'BB쿇Z`jc Q! ɽѮ)=~' @~r/K覡n/?c**+1,\ǜ(t E)cV0!c;&B{46* K36ޮh(1 G$;`L".ڎ14bHp#S X?\ذsD~B[sd;Pbλw1ptn+3X~dnj kw J JbN+=c"!V&8gWQ6;T#Gn%ғgkt,ֱCV.lSx: +UwOCׯݼ=1#1Bc楶Q mm뢓T!qmlXCr42ݺb-0V˜hU cχ,MmYgL0ALvtH؟+Q21 ],>ЄX3n[ bPdCl<<$jKuڤ097.D=cJ%ʷ_>y_#PGbdh~ al7WVU\Ʒ`qI^VKaLE(0Ie9?cNX 8 1V6ƄΓ1$ g#\y<ޚJ_W(}^b,NŝcaGya2ƻVWnJǘHד\<<C<0YM%kY9]zQat7zטosF> E:IbLbLcFd!0 @9vlžMmkFA<ƀ:KӇHc&j?Ҳy8^񌭮FHbbjB" 6+?a>3&1VO5PQՍ4T|*oಪ v'RfC Xo$cY}$=F)uWh7ƔJ%?vEHuwzLxJ$T{*Zn1C<2U8Ѻh '=k.$Xo8SL5n.<c㼈 nP/Sڱ8CJZ3c!ԉՑGar|5֥-^6ظmdb7cb";vGE F@Q&6*tim_~+d-F,<|:KGl71F6sg,i}X;c~ҕ?~̄Ɛ-{Zay||N>7/SNu{byau'UfJØ<L+Ԏcc(ƊnD`,ۜ+IeEd@LbLb X-~;w{4rErGG{Rr^QbLb X-YWcO<<Ϡ=<Ϡ9X<"kWˣZe9ǨE>&1UN)MP4:qd2g$G[2KJb,;cw-Bk:ȃ5LgQ{q!cտ&Xb,c eقvJ7'&6ofE]#21lv@S~إKpKwZCl؏Э{1ةQo IDAT3d0։G8d[`Lc3VJ8 b/mt78&1&cbYC<%dl j1, dg¾1|TDfl,$W1,d2`v|dgެ`Ѝsp"3F ]1Œ1k&*kۅ ~RtWol8:ޛM8_| _YX[_čzj侜(ȶ)ZW~ru1Ɓ#ˀCΩSeLԸT"ƥ:5V[Ħ8G78~_)W9o-Ŵ ^c] ,n80vSEtƜuHi!#5 ؿŇ@-80&*SB/^/]:J5>(RWF4Ͱ3Oوg&P \HB7qaEDxt$ҴZ)7`Bq=ƾv7?:>~d9҂Ǚ#,}IQGߏ=n*l"pI3yR'.d,A-Q)+vr isL )yH[tY|E#ޑ1V'CJ@'˃v9c*9.=E)K`G+ c ؞g9JrlgENޟA#R$)1d2pA΃W8$5yqiq%iGʌd 2vxv'IYXM^mA$C։<~^Aƺ1VA9cAWX5FwAX)cKi$#$DiG\H`l^;=cg/}K%;՞T b#=x6LB:8'A 2!c_.C:d3ds c2O#cc#1dByt c׌hz2vʌ͌KeQܽ@Έ'cԗ2M.W_Lƾ2ɘv3c=+szr%U~Bqcg4=NOz0xxLXc*9\™^DwTv˦s2=c.w_ji薌հ0vږ׶:kݤgSTp=~Za_FnclۖOcܽzLcma3-͚Ilj،>\ ;/a\c5CuA `K{ &͙N=/I!<] /BcbcR!dԌ6uНK"6y]4 29 b1 x$cb1 3N0yX׏A4`\ݑЏF4ghoGG1dzl~2zƚӥZ26XAJB!I=:Y c]Ø<)U5XPc1ȘueXb+>J'ť*,Yd}3 6"X 2&׻Fned0h d2ާq_H;Vu3njPE#(%TG>}"o ۈ2,*v)¥qS ͎LP3=s #GPځǠSc bgd,0/fwj cLNv)yL[~,KVt:'˱D7G.=~&lze6hJnO`m$#F򅐺TrB`'v;':+؁H8^Ȥ7$%෥0VEg~oK!fևSQocKcl-K/ioٛJT*:Y Uwȋ~#xLNXS/giBƘZz>čM=ngm$K* ŗ>nҢRo"N7 h*=U[VH=4M g68)f8L^I]iצm)@?WAJm}6(*=:׎8!.k_ļX5̍OMfb%gS0 S05N]OE.w@l9AѴ5C+&21&S ΍dhcĠjs %W͌,f$0t 1hl7JMSDwn<^ύK'Op{zn!w~ u̩1sGǠy<8 ?ʥX:mҗg𒗦tlLm~L&E.!eMAcjr+2m}VVNZ `jwp>8'AcҼ{7s[o_/\~O6 XڛЯl?D|D27M?Lkޖ"#sR5yٗ@<\1P\crj_D7p7NHՑnԆ:VK6?Ҕ}[}kT'~ .Ɛ|KUCr$ u;. Qc"cp1jSgl4V0MaSgc[[^_]<"Suע^IoYxBW:v? uMtdLMu'tʹڙS9a;&v?VLLD^D1Yln>u[ul@:Dk1?VH1=4c!ƀ5AyQ2l%WG 6_ BWZx|o 634\֜ 8cAqX [{g}+R9eRєP*4&&:c)\%=Œ+z7"qgք56'NǸ9)p$d1srr'|\V<17ϕkLsv^lnlۊ%_G'ef;)XLXL^ٖ W/,ԝ17{TRL~gˡō +|"gvS&C#+a+2ocNji+Q9j oԷ {:vBMZgT>v蔍41cyfu /H,%eZ10XGRcZM"K1= )ؽ?6ֽh;=vcK@UĘGٍFMՀ[Q* )| ra46A+gm%zY]2_8cľj\Qj&Vu-2w11XkLVXbИƔAcc5_!ie  R]c<1X4cE3 zǠ1c{ 4f<ܗ^XfBڇ?v&r DNR'Иarb Bir)I=u5[,E?3f0V+H6}'9s'|bGM6OxL|b9ļ2¬Ka舰7&0DKcg1#H4&ΘRq+VFZ])cUX`bIE)}zb6e[? U1Xj%"|$p+oJfV'k >iVzvlnƀ`{n }yt:c7~kޖTϷQąj4=m%$ySj]xHt1ɧ̮鐗_I ֱ=c;5FJ!k@o $Ƥun?dMT۟V2M QD+4!<픱`hg?[3qP*4seQje&f*cԜLs 9׫bLJL[0A%q!k@H.Y1Hb7mu `E'?xov{0¬vE}ވhl!Vs:(S_rĆeg|#@*csٱ؂8Ả6DX7GVߨǦh%VkƖؤBaiYb=(66DlTg?[…mY$}WT~32\!F(pO /b/?IE-Xf֚'g&yRD'0Vٺs9`^jOR۷ǔLk?o=2 V7~ m!Ūh;s8UD<9IYQ`IF%bÃ9"v`)ccأ&f&3 1Ҙ#r\̷K9Ēպ X|L!l[E?Rg,5ޘxV!hLHb5` #,;B!PkLs$@K7cJ*cYkYֱ_뱕m"Vōd"z%2Vl̃HÈxڝ,1vW9jqޣi.c406.{ʿ/cclG:~`ؗ7r2VH̽:XV1X AF 5X{#L1ΘL x4AcaU1XTke݅jXrqĚ5Z+UlL:)O X1bX{S0&ki{XQbИi7} XXQbИYs#Ac hl44f\*520V+fk8"Bf[ybИrSwk)1skA2>ƪwy( bd!fc5oKokZZ!rM룲nؼ>OW٘d )VIJuҔvo[@clKmX mn03 ٤ɷŢv&j%E Sto|eؽ.+r۽ ?O{E*R~ҶMd% c+MkMVHNzv-QkԘZ'xsƊ:(bS)K1O6sݡjJ=R1H3[m3:31zLe78*g7qGiB4n)T4R*g:o'cӧm+ sod/1?fXVf-;NcE n_K?ëܾ^a1+.?c ~bA Ɩ7|`̸' dd'|0?M?͗*K/IƄNV(eqE0m)YC&dHug9c4_<;.j}X=cQˆd7zm2FǶN d9>Jwt~M̠UیHXcɳjƒrY ǣ4aoMx'xB bC!gB{'W sX"zal;ܟhz46MGR3+Ebi[ɍC4τc) `ua/VI>X80=Ķ@  ZϘx(:DLQ0f1û>ƿT,74p&jmL@!]Hl}<^٦:DLho֘Íb!%ҲP n~,Iˌ:]ŸU0V.KL6DrVlE!И]i D^^tt<Z8ڋvKu_*s#UEGr/l4˗u?JOdÍm/B&~[\m~s7ucvDkrf;w0]̙3joƶcssa\ozE~BEEM(PUT"1HZ̟u3io☰zcF/[:cG6턼?Ɍ1lq{bC>ss%o 4?hcL\ގ1L֐#z"p.׎ oWoXc{ƌalkƂ csXˊ׻Z0[=gB33ۖԤsa=כc?6dL6vb3&7 /-R-Yc'Q~M6m$iK/iU7RD9IoOҭOKOwUk U$lPBAԕv_O:xخ*=Τwf<7(@Ѿ.0 <}1M106$5F3.Y)c&|J[y9E; Ѿ.02<>ŘsƊ@IRc*z @Fp\1)kdM~[h^*W2#`10V S1K|*=IK{]G'{p@RcjH^cs%\DآlZƘkGm%1c"&lc1;h/c$^*o28mɘ{1ǿgc1c1c1c1c1c1c1ܞ&&>~ c}Y k1cӫ_;|:<оVy?>cŌMt?La̘a#j,иfp3v-e1rߦDrlf6` cF}a7[@Ex[HP:\{RR~>ZX7c̳"K/U@RD *gO)I쯪֤> >ع>ce̐@õ4rV#5<TΔ Ra &o[z^t1v[vaHზ7a|Z2#JT"kΔ Rcv[2ɓou1)0ƀw!-჆7~0k| 5cvy/ao0D1R ~KL-cހ xajςED zt ~˘oّ/oФqqN鳙(D  ڕ/n3f2Ynp-etZX+{oO0c1c2c1֦q)2(1$ztz!St0pjpÐ11Cu~d%$q br'IZյŬiŠ.GB.$?#}{׮EK1͖'8R;؍Dv`| ߠ zy쇧7t߽1kZ1(0/0Ɓ0ǩBlC>؄{"Ou&c̎u0\*e$D͵ݰicw݌1P 'A2\A'[}8NࣇJmR>+gB"0)B l4 ̘˄5cv0v |5"r,o0&uv3CC ~CCJA.Z.TɳI* *3*u6C`r<{TXZWDRuIjj3V(cٳ_\)#Xgyq]QOC?MF_~*c/V&;Wu'_[Ę~3vQb5NJ"fe0v28 }{cIE>49a 8e2{4ya@ ] UUWlI.JpThn4J1gڶXʘ<|;0& O][~5B!+u8JhDJFCQd301)W7RIq-ѥ+BK +<,cw2Çҵ^[xYbTlzYk}OG>X3v5Bh 5!S'αA1VKT5kd}[3&s=lt0} q= %ģb811tziU؅We(:'Q)U4Z"x]iߠ}NOl43b6דW2בC@"An؀+c@QldŘɤXj^*1ʮύ]"fM+t3dx][i|/Pb#oO΍5w 鞏گKnl-ZTa1c*T+*=/ JTa1cDWTBt ]|#]LEec1QN~E)늑 b"E7բ c1k^cjƬdP1cD 4(cy1K"1Ƙ"rA1Xqc|!7P =CD3}9jcEUv*~e!̊T![`&%0U/Ё}+ύ~_n?Gzs2c"bo ȼ˘X-bȪ"$Ϡ` B1\Dfn2'˜7*nq7'3VDK^fLFjCVBpuyx>F1>ͺZ%ľV~s E"3b/WIyK72cr4*bX(1"D aTY(![ SVOT9i2X7wDf_Oზ]XѾ.0V̉x~N}QzEB!*4 Ř:d Gc2#jaH1V0v;"bzF|WTh_ouƊ0R;6,d{:"$e!%h`OI-=a`!q#Y؉qd%2ؒ8C6a<فԪUUm%8RuEP}NUZ]\;`gǬY~իOץ׆۳uϼBQ4ӗ;j.H0:]s1MYy̓ݬifwtE\c+d;~c.ՉqLze^ @۲uw~?X9c{Ճ:^WcXo15m`c}c ϠDbvRc~T"ذVyQ-u0/* k!+ O'Gc.1Sw `@TgY"<" =<`,sHsb FTVg{Ʊ0` .3o 2cL}bNf`rujLfsD<')@1QE;ξOaHs[|ʭ0$P8Q'/` Eʋ{ߏm7Vk#nq<7)N0c`,RuhY)@aq10$P1Sҫ" cW eMلvp`1o*IS11KCSy)L0`s`n1nKs *ۛx=PtƘ[8߱]LFG0W[=[Z%0?TGdlEq7;];+Lƾ~姶yxQ F޽Gbn ;cmx=≇[@uY= 6ږ@k׾ţ\<S\{ -nA?!xg}>1f cyݦWPrsW,POPT܅/,cV{lY 1f8{1T-c;Yaԏfa5WoI$5w*/_7OPg sE06MI8&WN'܌a#B]JWYCũWf(͊YR,%{B"u1ARĐEӴ\5`mtkw~yi5ߏ;[c,rOP}Ʊc':?j8W,Yza'}haq\e) k# )b(ȭkؙo/?]Wyi(o^{zĺ31v`})QaW<fㆹZ67>N\Q^(:&+" ~ln7*geYk ӾZBfL^HCAnL5rذ0eb,` gq̟[:/UL  Ļr~(> w?6Ę}~oNEj);8c`l1oΔ0eo1') {bKpߏ~37~019f=ZKh1yḟ[a)ǘƘp.MYpX$;8bc8~2my&8v?&Lߛ\W˹Lg58bx ƆNsJȥc` 9"qF` c` 10 Hc` 1\` 1c`,r~30"ݮc_Vذ3+iD#?1bx|atn\n9dr)s^`w-M2֌_W{pk[OEPD,z S|%oQ/mKo.$ii^jk:ֺqSBW'L:IfL_$9s3ssΙsW)Z.Sү8vJie=oʓh1=5SOw4-N&ӂ1g:Ke{n>߷5e'kEhh&P Щ iZ`oX:ʖdJ0wu cŨV,4|{ ]SBz >2v: cL[|ߤws|cՔj&yo1f1R;AޥMkZMOzn&X[+zbuLЖE{INDDtS ? "YK9Z2<3_f]G?h9~\:;?}dqUۀ:2 /Jn^MU5[I[ftg`nUBOl[K?ER vn*-Pcu0@J!J4"\ۺ (# Y\(3J]%.S2Q1&O5!s#?ҝ|1!-h}|eمvc#렌-?vm2)7U%0v۹3e{"d"wy \ML=ףvۑk"M5l?Tny6)L҈bL^d/cc7[c+]{Kdy9YC$+71\9{8C(oe8Yr1"X!~Ձ uLPTMd; cPh5X Zm!]y9y\b.Q{>I (pVJӀ: 0I#.B31[pc1*Eks{kdP4lb}<̅"ac~qU_uFªB N 8nI_}#&a:&EJlZq8m㪐Iv$guR]L*#ʀB1FҦ~pC~,v^8?F_#k{IcN$nќp0P\nބ}\r:(#5~uSy>!w܌s {r\~D~|@c4cq <<~o$.3[pc`t,X&V|v4o48?C cWʿ9MzCɘ*Ye_N kZMkn2s'ck p-cciEi ||_wڥ K~]1zXc`ʘoCW |70Xoc19 zc?5-0 A0x˱x<[c1( FThз7c-e, r sXKނn+;_tmHL|p[MucG0jʹcX[Muce,v chwn+k+c1}XڝTW0cu~ 10C_10? 0ŘoQ;cc`,`})$^>>c>1voIZqtb~W_yJf~kcm}4c15ۨ3&⽩*y$jxF%B{pp2HlG0ccQ5v7_@eWP63[v88˨yFm.ƒ2RH-;%˂10~c7mT ۪}E x*][v88f}E01/:́ۏU}֙^290ٌy6[Β;rw2{~_'G51^Z*d[cZ̃1(}Ϡ?5|V녩|z>W&kXLj$9!9} c [q5c0v&@:_կB/2$4u֙@3+uK9y-Ey]wc` 10c` 10c` 2dIׯw?>c` 0+8cK߾_Vv7ٻ4;m6j}kVd zZSZCT>TiުԱmw. mh=Un^"͇*R}ya^af4yzcclLj֎ k?<h"zY;clid}1سozk2 b+uN^91؄+ec-mng;叉`l22_^\^a:7dɼ&1c&J R͘0cfl4:c{؍cHގ{ c06qƾ.hvDc=m`l,J2V/\\O cs}1~&)gflyƪ^]3}C빹7_u9_u=@cx7,\6^QL߸c06(_߽:gaf6ءj,#`K>섃1ca &яSSsWILe_>ba ol٪K)!|a nu׳m1hm36t`lB65oM( YQPalL;tځ+=!!Cɘq1۟)M1c111όim3&\~ Ƽ2e}z;`l1ێ|# c0c0c0c0c9es7 օ1]ƈ+cĕ21c0c0c0SvF+?y_~ߘv{R&# [5[ ^.M1FoWX(v'K : VU=j9Y¯Ƙv:`̋vLko]c5gvߋM:Y+$BjH(-utR+QR)wkzT+hχk-T+lLjڎ5c`;cۢq=S#xͫ!"O'yG'++ESv'K–uɘ}]y;h6ֻ@Rek{}sXjw1 5dcYB):.s,*TɊJ[Կg#-Ve6]]nn2(SB cWzF_^2c{h?c҃/VUz,WˇZ2;۽ η?51S#x6qOwq"'/(NKCmU׵,ʃ4Z_q}Ec=5gX=&%flQVcRT(β͉})|*16c+b(*c:0ḢSjod&G|uVl\֎:}gLLϚQ#k8C]y$cՖt c^w5vM"wHT0c0c0c0c0c0c0c0f?ep1DƦ4w[3,~>nS'AOccc 0 0 0 ~ 8v AWDC&15q9#0cl#XIA=:eu>׀YC[^jܿ` ĄX̴mZMEX6-xqӟ6h[#Xu>s/I۴0}q>Ɗ{5/^H 8 әɬ11:ejlxVde1\\i(mm\uqiz1zuQx}l̼feRQi11?F˜[c>ߎVXZ10FӎmDh?qQ0V?F`9U|kkǴX67/hd7-?)1iҷv "-_ b{ b\Q@J̴vchܵ|5%ic-"7Qt+]'m ֢~te>DmLTNƤgzӋM1Z5mY cȤWDī!va77zL9DQE^4ƀ0IENDB`awf-extended-4.2.0/images/qt5-rtl-menu.png000066400000000000000000001003421522325530000203120ustar00rootroot00000000000000PNG  IHDRcZPLTEш\H¶ϫɹocXʹ˿bKĴdL]I^IĸhS`M_JaO]E;Ţ~oǸyk̾iL?ZH]IbLɿaKzl߰mPF71dL[H[HeMcLcLƺhK?²ŵʾxin#""ƷgRȺq)('Ǽ211y`Kɻµ.-,ķxi877VUTȼ>=<\ZXCB@HFDM<5NJײjigecb¹ePϧ}yӘRPOKIHtrpƾOMKa_]}yu¸~iYomkgMyxvWE¼񔐋tfp\sRD{j옗6NYdJ:o^ucr[PhZܰئrmhLMMgRHɑx6g.46O Gwb1,Y#Mkl/7@x,cY ݫ0/ԫs޸ 1z/͉OLz`'*Z\Fϫa10W}IDATxolga8V}vJ$!5vRvm0ڣm77-NXap)K\ (8&D'uȊBJժV;Iv8hs˾ۮPJHCWLAJajt] ѢԊpEeA# iהF޼eQ) iꭷ59QR bYCԴ|ą9B"1:;+H\A*TK';۶%vٍ̱B뎕 3@EmGK$A*DhJ^J$ARp\6 K,k -! Td|.تa?*2f!QiH#p:Tc欸bg"/-acOexd<{؎|ģSdJK2}x Sz4~#?R Gb)5Kj?TL4UO:hG$[EY'4 Wp0yХf s~myԬ/ٱoBfݭ\mC"Cbi+IR}ȉXD$Z &>Jϸ8cZ,փ5iK) }Bp{[ (Ĝ>gܓM! ; Vnj4c4auJb(fqEi_~8a  ݐG$M D1\b?)x !$!!_d*JrW/A1U0 &H?'剓;Sh#>BNS&!}Ÿֹ4`rB˂\)#$9ܧhD (A.'S"Od !DֈŞ;""eiI@ %Dbdlx24^A~>*ؠe+`WYI{(Y':xajF.^._$'ʕ,W!{K$F)ˈ_N@ >e~ӆJ7(džޢyRJ}.sɌ/8 w}zVΚ5y昗?kpDJi~GKdoy]<b]EadS:)]A-U*(+?.^I+⒩x+Tt+i/ 8ɜ$^zc<>cLwG2#^xE'P“0^HJ4NBCÕ~):>LPj#twZ>P[Hw4Hc$Fov%̬ ׾/,*W$c SU/Yfٓ tlF Q6 /( E8rQ0J5; GHOohE/ U~xh ks5a,l z,sjqIpgF"mJ@e!ܞ[3k*!<5 MxHP٤J&A_C.Yͱ*dEj*dp|\̱mLo_YA+; g+8}ARdt$?L H*/?1XC~{ATvYݱ#p4t7}^X~ֱrȩ¨cG  ?>i?e)_g8[-ZS?6^}x9%)\hi]MEvՏ27mf9;N)Ǒ⑑]} _oy*e0ю-pl*v{cnY(a1cZ!AN5êcmT-knXMא1GG`ߚT;{A~=\GԾi5XQnñݰ_<Rۃ,HlB={Vץ6 i9Ezc.k'S*>mW6vmFNMQ>|aϞ-]j_~ 2X i{YMcDm_76 j:j(:ZXm\OMM_;-eFȴICz6GԼi7X.V&nj}RݱuNJMt]a'M_wuZWTVQt>"Z<8'zYH_?WTtՎjy1F)g:ȫ e;Yi7؝כ+F##`?ccol.39V; ƺC,u.}^x$?wcUxe4xR_NWW^BLԡ^;turRBkKu]Mtm"7}f9q͕99M(D#yt{RQ2/;ݿ0g<8vKG0'V@Њ/ iFc3, 7_ Rm6D+Rc3 7,FkWEOͩ>Xu6]%C#8{_xL 52qg|lrq }f!sfٻY^AȆkd+>PL1V횂S]䵢c!NJ=\{jM#8$ \/v]F0LڱN1-phS2."h"bF0h%:&LpZw\E!G's:vC! {keXpNc!;91,k B&5;vN.XEK% +Z ЯjY{,ޮŒt.)g#RbW*qL$A8{F/ nhF%Aot4&%116E1=r 5Mwl#87g]׍ ; d`X-)/169*q,ѮzaBjo9QcUuuk] 8A D%u_&9oǒt8ƦH8XAsݒCgǰrx}+6eXWIq'b-gcS$+Ai ZX5rLhc1M3B!4Hu F!ǐcFgCi r 9i4pF1䘦!D(4cgJTrL1\UTzH9.)Gm )N~9cnhT)ءݟc>R9v;P!^*Gf !O\̱CJrI1Ν1Ո<NƎHi!䉓ñ+bA4 8ޖ$vZ2Ezy$pL*VuƛE$65qew,04/QIb%S'Ndbbը 烡Ԏ 6,0Ǖ۱/Y$LB8 9Q,X=YX^r:;i6,:C.]1x(HMU8&ks̠F2p쏯^DXRkw\O&0?៼?P_^{^%CNOa! A'(2Dq;'PL TՐ<"X}1K8nЂ, Xs0l;Ozrn^Y%9i'DrDdx3FnDŽ}΅>;_yί=w>#&/S7yv4b_H 6 A09b~F{,ٜ.'ώɮcG8z&ݓdr?6X3*,/unLM7f0Oyzg#Kd"1pՄ~!5!>-&>k0f@ >dx>0 >ONTZ _[A\@ȂټpOlֶ~EX{~|Ž [sX ?V Nrpl W+$ʈXVYgG(> _ۖD ŝLǜ3F-r:b*xh08M׈X@oA2׊cnBбvyk5q: Xq 6$# vL$NhP=n X i̙3{H*c,!+ ǭkXk"cxS)Jw},csQ\7Hxz, q ScŠ}]=e3^F$8f4;E>iCұO/~t/Zh,j(vZ=p쉰+UnBp čfs|XcCΣc U11Ne u;61rT'ԩnv!yOBC[XڎݒzRULI9cQ$b1c'$_?%0> Ǫh6'1U6L&Cc)>vίr *F%CfHȆgSIz*:>`fችqk>נJ~*9"hxs"XUݏ~MߜwcJC`=~n7̴m)GOC1`c9Ueʄ/z]$}9qcRu̮۝‡T/3cJC*n ^scw]&?[vuб҅xN 1mՄewlTҞ*!ʱk%jDt8|9V$ϘxǸ@ac+îǁPk{/ #rLJC~,m\qAטL5kЮנ3"8X%C!hr\OW]m٭R&J(\: T*|RD"+Nx-%8ĮC Sl2Z2h7SY ?b}{f<<gNXʣ3g<2>KXTe/cR|gw =-|~c|;u{&U Y@2t\Ln=^hX1"#g Yag{1x"û {{x˳uS1)cr~vg|ja7v]>u5V^m:g;&c{&kvF>ɴ1&ӱZdz]|;&cf5Rc04Q}>mÎcs&9sc'cfXwMpбZ߻"ՆcIa>j2}΁۰׍􂟏 b9V%ߏb8fvƦ%LkuL. kbx_wLqƲqKwL>4,HX̑;u=~:6O21$ߙZdXUcom>q<M'̎d$gYxlyt|&R,F~7䳻I5'_ooo. 1k_. cI;&c9?e ?fPăhJ8=)"L&y)6ae}#d<w8n`XӀ뉓lM1X0Ȅj@ io(c}"˂׊ԿvpFm x퉸q=-fb6ުL,V+@F&.8[[ێ$iOǶr/Pby̱?T,mzá9&j,EĎQvKcdJR*̒q;F}-[m9UQNy&y@ZǴnc&:vXjr)4!c7nt-qRNn=޼阨cp^n:}ŒƱT Ga70$wa6YR{>SIĶUݱa>"yAwizxnx4u4Uty0?#VY*EW-44HTcF,*DwLBVtǔF" 1&oF>{5;VY{OjDwz3sq=fZ\ Tؑ<"dEwjDw{Kتڱ+'8!BYYǴw/5' 1ɊбoȞrPc@%Xu1[E^t:쾐1i)RjY*o?b,qLϋlϚ/ 2:FݜnU&#J;6 0CN@Ŏ,F~gw&ֳUkmnjLZcI5,bYbb퓔N.^y""mU.ǬAF?з#cK%3|oORvtVau7:~>6,6!Z D:cI#Hؾ;"vqD'qn樘c-j `w 0(81& س83j0O7_l͔G[yَ\*8vꔤyk-u|u y8=8:=Ďn2 ?:\ìc| [> sl:ٟxl ÓSb[[v,>,؁4c؀9V@D c4+cvh}eUˁAgҎe7ܓ8ގ9=QNdRrw,4׽k.p$]I1ǶEn.(~_XWn`׀#RWq-Y=LyC%"YP c8$s,?&*6cs`{\sd| [17Rqߏ9V`-pUWη rcP~k7 }=JX~. )c33L2-',׊0Sz-IV$wAg]`d:,vABz_EV}=roPPpLW uxÒ9KeCk kfאF2=JEj>:j筶Jx5\q7H E%EXYo47 6A{-CC%9T@*X!$2'it8s4o4bhb;xՈ[mm6'w(^ c(:!y茷 ؁ A[6 RcPry)i-1ȥRs,5Y4/s\⎵e.3;P,;o9H`cDveՄ-Y 1kEx .;eLQ6:_' f%9TTE ,3$xy{9.z7vplm;=^mNKg@1:4cVJFF&hEƱ=x5c',4,\ƛv5cgoe;꾶71K% B\*#S.nq;F}匍@U~>VHߩ`c3cZj0d0}s_cc"(~\_v77͏Kq Rِbqe7[~v%G>y*]iqls2;)# 1)?c<@܄ l0m¼1z2Z\,1KeC!cK1AMZ.yM1Q*pXHߪ~"s렓(t,`ոpNAr+vXYo_Ddo0H6]}E~Cwl#zƑeM%);q ={>SIĶsHFZ0u[K,xKrF?kO]k%[l,ͱ| )yż;4=m7ߏU6Rx:pѭ؉sb]☞5gk#mTiE뉺4Ny8 "K%D!GZC,_U;3ىBk( qhDs4 Hy+/-V~]x8&wfǓa73 P :Ԓ?smۢ_m13๑:MBY.Y)c2#Ei΍DdZ@$Yac8cD47Rr9VY>}wϞ[ ]~̍cX?*Q(cCoD~+3|EcvJBlnvWM)7B}[f2s28%f_'¶?1T5U1-= 5+@ngU9 o2v\Ώo?=z1rc؜w8tQ]0bqcTb OƜ~Ӿ߽*al;HL:'=vg!8W촁[璃@p~tS<~ѣ*1В۽$FZIPԂ< " !I]Ϙ([ӦdrQCĥH>!6BFk&!c7Ʌ?ıgG)cUE $x70s| Ҙ ǰ1:l4(zO˜d4lh;#BCn ѵ8q&Ǫr1fLKs$cN1 (c_qyN3ooug210nB=ǐ0~t~['l}E>;.hjTSkjq}y4֎Fǘc1N2h;G3sm=4#c7Ʌa?oԟcrr뱰Fi˹5ghjdt Q*ݻwa뱮V-iYלJ}ubz*bl#y=芚 4(xプçUZ= JM_6 ~}8p(qr>KUk1d{Gx׃'URZ{ʪE鐱 ~%, EL LxUG2ܭUhQ:dLŘ,b 1ude2198:cqL2*??16 Eb>?.  _{0SM\Q(dRѼ&Z0,/*'2柅ŕ>g&%wLowcƶ2VZίb?oиX-Xq`colۨFfCNڝvېl @1Go |ℋB#1Z|ӧWQ;Ξf>=^f;'&a1WV3Ve y_܌by0v@R#NMϜ|DZ"/ښƎߠQL1 _uSi,=@,5Ws<:,0VaK cp_}x;;R5(wWUQ $m,7ehsV siO{<+Xиd93Bn4[C5_4xq&J/`¿-=g[t~hޖO؛`d]jݷ: C= &د(ByHk)PŌ?! BWVV%?K !cޔ1Xg 1@lԢf[K)F1@L=Hb&c:"bHcj2mZɘrbf u dA 1ce2fRaLD m>B鯸#ʇ@W1+`+R;!3v1F&c$m1afq1} ̼-0v(=a)PØ+c)Pb*1#W` c Ѡ^ ؑIvQMQKTV?41z(ֆNR.sZScM\w\ǼNÉ5z `Ly4uxO{fqA=,bqٸe..۳"_^,Mo-, 'M2Vq􏘅0f\܉{F)c^쬻7 >8%$3*:eU0Zt11c1 fO8-]$8 phDLcd1!i̎b.cNǩpꊄ%,boU ܴcɘvD[G,ס8/Y,~?b2@ @B1)cZpgARߑɘ8]4)˷sa51@,DM+Zl;k2ii pvbƀ@ PߤTHrq~z3'W]u|㘯GQN&d'm-CyX,}>$Y@6{ E\j1#auRel2&c7 :c\=>4jJz,:)4D[4E2 eH~=05Ak)}ytE q,1@Tͭd:7AcCЉH,#Zs.?m/bԜ-ES1p+ݻd]S!W` #G@*MzSmR1Bʋ11<tEMM}yHH\o*|*={^o~\*;{4|*M@BWqT9׉2Xg* s[lP#-#A5̄JZ՚L9wTW{Ѽ >z~T;阱L"T4ʣ) m=ǟ%.Iό ,WekHn$H'֟~TpJs4я]\HF؎oXrBH҄Bj2f2QƤSsv1șJ3a*M(h6`2e7i1-ʍ&JN T4$ŧP]nDn$*Mg~_8ς.+ز{m}4틊.Hp_R]ʾhKQ YY?ІT *nEXR 393D'M&sfrN|!yS?=8Ɯ ؅!\ Cc^y<73.1@V1?&`x56w qc:ych6jll#$1@Vژ:icV|XcYhLc@Y JBO;sXў^2ލ" ՠA cgc5AL3vO=IQ7L9c"+fE03zjfTm$ [cy|D=Y0kjӌ7IR {XPcQ!GuaF"^oƜI%DZ.Vj6%Ys1y"E<f8~Yg?5,IҒp)Q]`x~`bc~o,ֻ$is&z"" q ꌱ1xDw[7wOzfLʈƮ?.ߘ~~o+0 g W|yYe 19c!+ uq>ncvf"7:e $H1Ѫ}87vIJ1ٙ 쿓/v0ދ%Cc֐j1[{~ ``t]~~!hɴe gg=;RJms##(1ijw{< NJlz Iz?==ȈgǢ@H7+GWB4ƿ83mmɌm?T?.0 Ru4O)c YԷQG{EԶW*<چD6Xe-2Tg9+.'2x d֞g}Jjh&O)~%rZ)M%|l 0"lLc m6p;^$;@0zTW5f=_008TƍaO MaИбAchL1a &hLXb{:Ʈ^Q%s L{E4d[TlۄZ~#-h գ޲[U?~OַJkDo/mGKik?z$W }j_oyHoB@R {--{ٖ~֗h:dBKKmK$8fz-8~8e4~Se<6e{h#+o;clp׃Nu?68nTΘOC@Է@ύ=}mD -h~6ɕá+-^7ZpL~KFE0&/qg?:Tmlxc,Zi9|$z9z1kMFRZp,~K>mXo+cK[*O/%qzxxh<3h`[2^Q3g-Zp~.*FW7~cE5h mLOLLT־Vc'7*Cc*o-8k-ɴHxO>Ge+nL^ؕ jZr(kk7vrX2r-Y?0ׂc[|Ƅ~  :5VεD92WuJH׌ɫU`SE<4cTqq\̡q1K L҅ڃ4Uwȕ=#RlCt#|s X&sL/g5;ZHkͮV|wv}f;hvfwqBma':ydnh0֭6I]}_1&kq1:1WzmX[z1GyM˽5`>8X;~1-`?}(klfB )_#c\uc͕Y6tevuxIZ0ݻTVc\w¿%?n~F=,s1c/cE 43_;˘ot1ḿpc_^ݴ{ 16ڂj!^pҸ>e-^,xH"c4M\x^Χï^#-bWu1vVK${3:iW\,%챯@/4~(Ô`;qQMs;}bd,tJ Tѯ`^<c\+N0vog_a7dL.Al'4CJ <@/0%s)cu5->38{~_Hcqa,'ag?Wfoߥ:X~qe kKzI0|d"&!Hu$bcu1fg,3 iU7^cu+J~h?-]@؞ @#gt"XMe샥Lx)FƮzL>{p1FȭPh1RNl~X8qP=(7(V;ndliݸ4o[jS]70!cPko[eb0Z%]Mi:=98@ XeF'øRER0ժI}+1愜aӷ;1rm>27n7-.>c;40]xnǖF<1oLAg9eG,FIh8d@,/:,P'6'"tfɖBgW 1[n{:Xp?L|K,o<hobʂޣ2NlN Eȸd M2&Јq5w3֑t`B,lm<hV0K:tvLX28 IRۜ1@ s5łm>.tjX L;VU|t1 BKfRh6^y γ~ũmSp M 1t `hbWFNn^^ZǒO'Is}7`ڧ0f-\Oco7Czctm QcA':-R56Cr|9N5ĸb{IdXNjmjcb]]Xp~X8qE&~|_dP e5ߛƮ}y,J䒃^?+TEFȬm^$6cyf,a1F]L `_nQ˳JhƔ+bֵ/Rwz.ꧣ; *EAFKDX쌩 %b`>Q}|f,o!K%q֙Es2+zK֊b_<Ҵv>NWL& ''M2|[ Yu*vLXWS;4JG2cd\ceM+Կ|zi[Ɔb쵱bXq3\΃ͣml<< Z)YQD,Xa@+RTߌX 0j zȘTrS?MIJNB/ v(Ǝ RYfZ~;Ja]jU~!S9MdF, =dLj|+K$@ VN.iuq{EZJ6g a8ەфߦc`3nȌX 0j zɘI>ղC]9XjԈFF̓xqC ]MpCfbQKӋz˘V|%MlaǍFKmNzMPylZ3>xasYmZ=A_Y b11_`nb^J3,A(/,= vG^_,YU;h1X-`ʀ ڱ`^s'33 Iwy#R7lqS\ ̈ ;'Q N0PRzx,f,*bg?<7bƢ"fl|ƪn՗,qSCXTČ݂1 D wΌ1cqxjuIiQj f"b̻WjGgƘPp#acƦI2v7{W=f<P "覐b)sưQE N0c:#f<ɇ0ЋB)jbkxd 33b\2vVj-ttm^Z!ư]%(f,Vg1Fւ [ ŌEDcZp!~ccւCV8 Y!26^-JhIªg1c!+Tƫ'mz'l`ƦA18PU TTyRKGCJK+ }pSJ^|0^$P|RA!n2AKC!V1W1x+ !O?,f,9w~O̙/S/ Hdu.Zb̓o)P)Q.ry=cVH}YX 1w~M8rybq +*5#12\9 P.8OrW-+,ZWjF2ce.ȍv߬zq\uR3 V~8)0#/"띘1E@D3cƔ1c̘R "fSZ DČ1cJK1fLi)3ƌ)-"bƘ1@D3cƔXoފWTfF^D1-[#^w̘3r"=cnsN>sy:ڕ2cjx:)x_3cj\x8vD0[3S6*dphլԊ9fL9x˜o'SyeC´od}g15fEcnsfw44ߚ}C+fL9xo6нmҲМkF}#+{EfEc]ru~{;cmVf7RWv7=fEc.rkcrc ͱZvdUa7J63ƌ|b{LzkuCs>ZϬs^(ZJ~ЌzϘ9[*gEԟ/fLQ)3ƌ)-"bƘ1@D3cƔ1c̘R "fSZ DČ1cJK1fLi)3ƌ)-"bƘ1@D3fhw*^oO*qfL9x-a fc0  ˹cZe5c,1M6\ A+s1dX,/+cCS+#-S0i+&t})IlKn`6_V/8TiQ8۵4.taWdF2v]%>}iҫW%N2ɘp2VY㥝T(PVիXKh&?дBHӆlbЍUXL7da1i1-j)3 H>2%܀%*@ PxIнbó hHQu CApc#?ӴWC? WJcͥ_.4A`σc#V&5Y1\=\C#S!/*^B ^-ı{f|fZ;+O+ReB20 s$g/ 㪣 6ki0f%[*oRS3柘1VČ1cފcX3ƌz+f). g=Uv;(͈`t|޺8멲X f,xƆ'2\AJaVKY1ca̐ri;_:D+/+E\^wC+Wwpz)QD {Vel"}e]7:'q*Y^ f1ftseȶa,\|N88 aXĠ+9Љ|,%6tB'`cͥILx}JGD-vRBy9*٬/9yac= E.e<NrepMv"]8~^HBө2:6t69EʌXiT,<1K#C3 !M.<:-56 ym,ø5Ez`3G:6rB'Ș}A"d\ l<b~mFv=Myk>n[_ć(N=]AN,?lCĘ Eʌ1#U[Ȱ`C Mw2}.v$  W"^qQIB39v 69vCnHY|q 2 ?v0.Nr`wϰzqJ䏠@;Xj c)c"KƺS%AjC5[ӱ)mJf,In-袐7`ENǶ-ƞ+5u7[kr*:dh@b厰:ep猰bhS%~lȁTbHsXloo3VHN`urc˵N6:usr@똽pZF<,tv{-6e?S;ucޒVֱA;cyi?ywV21G7O`LOG*ǥPػ/}@Q15KiENLF9cxy#NE9},cy}tعg{" 1wW_T0\r$\6cmC&/Pv3u- VoҊdMiT9=y㦟#trSYjw}S㊭/~]t"k~ GB#84cθrvc猵H|^v}FCaXڱ(;|ֱ<`l0yaZV$KI8R c@K;|J^6) uNd>-KF+Mi?~phaiǸ;؟'{=f5yô"K."$±p hckɑ5&{w :/tY2G\c1}O^vnc,Yc}E_ {{-^-KF+Gߓ{=841۱O\1y^"-KF+G3#<:=*ǀ*'rua\I sUq)>,14kEƱBl&_ӎɗt_s` cp_Y־&2YbS$ߋϞ-X1!1Vc=BV|aL`Lp(WyB w$r!~}prrcc*rgcO}{[WV%r{vzd+˜X{њLя U>c|T'rMZ~<>:0DS r䅻9^N$rk]ǖ3'GG!edfLfJvoN9|Gc d@d3 ~cBcƤrH9|{uG/Ƅ܂c1JMƄiEٖ|# 0&D0v*֣n" M}oƆO-qKmm`08Uz`%҈7feG1%q nF0_0v31Ɛu7vSdˌ0>?c6!3!%:c^m0Ʊ1:ܘyM˜W(:0׶`cnCRWÕ'_jƼ5+C2χצlgqwcs7*2&>0歱9cZNh30ƱK*1"Ø̪ ҕYLz7KX0D }E02LbK+wcn-?J6@UnYJ yֻ1{afycSMc[籼cLXnNS3rij<5֘<3]/V%cgcx^ѷ"yag32?/a-vd}c<:^cV7?/a7?c60c72/ZQ`0uL``3&`L1nuįLccXnmb0&c$H#۷ :ˮ1gs朹81KcL\7X&׶Y%v ܘAgAjF:&^'aaWs.sMjd,O|Xb<cJ37u1k76YLq0og!vX)E̍z0VhL* ft0FgˎfaQ˥Ojl 0 ׊t;_+ 265::F s94{ay8p 1u{>6g{l7Yc0ƨ.hjty_q7n~]=o̠I̍`Q>K?KcccFccFccFccFccFccFc1{<)X?h@l̜c\;t>ke8v͵ ?Xf ;aD&woAY>p&YK{*WE  vG)5/͋}wqp̵_±8v͵#] s*Fܢɸ6鴻Ŏi5/aǢQ;tDCʦfɓvG.A~zQǼL9Ls;arx6+xb#p|I^]dmrQ%$n$"k_Q53_[Xe;8TcUXaL5}I(\)Y6،&"*o};&{Sq=c>i9uyU ybU6t5Q"I8Y꫆F$[1׾X}w,]W?c߱#U1bZؓFޱkt jnh[rU}հc(p91E|-1_=kǭcگIK5Zc6'ݓ%ay킙slԒn R1T1jwpJRˆckw|.c18f8Ycfcp :H1B :"V}GٔE5XZ98b/1f+^%c 6Hdžy\O&bCwGcph{Xbd 5ZV5űO# tL=ZrDc /'5opA,AcRiZ'8$͙YW9"]It/J`cЀu$A j Sr5h:?Ymu{E#|4d&I}u+oq8(tإmcP]#H~vmgڱc},U}"1Ȣ&Cf~"X "R {SwiǬJjuLc-m]_&7Q݆f0Mӎ5}415ȱ)z/S>+;M$:j>T{El0^E "f+b&.`0 ,p }090X8fIENDB`awf-extended-4.2.0/images/qt5-rtl.png000066400000000000000000000762461522325530000173670ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ܫɹȼĸ´ocXyi`NʿdL[HeMbK]IǸijaK괢]E;ߨo~iL?ȅZHhRykοF71mPњzk˿ȼ̙cL\Hŵ\HcLĴ_J²aPʾ]Ǐ]I^IƷn̽fQ+))ۻiT##"Źƺµķym0/.;::IGE{mDA?ƽʻ544»Ә~OMK̾whۨ͑wecaĹ˨M<4{wr~ǗƺtspTRQ\ZXWVU}x¿ѠgMWEĶa^\r_yyxcI>rRDigdqiY|j˯تsniqZN6NYpankgk^(U߳ȿ ۅa)8EfG֔βUށ9A!5YTiSag ![BMMXYށ8~NMX;;9(6'ZÐAc+NCQ@!lIsBIkmYK[Y8d}o7ܸz`e{#RRL"d |y$!F65܆N]ADDiIEȍH$֌E" ٣Bz Bc4'L2V1;76MVX„y{d(쁘8@`%LDЫ 4GU0o$brS 9a>_+RX-JV+M9#C%0#tC6tPh"YK5!Iqz6 deA=vjDbk|(%b+FqGˍƲ:bW'f!AVk4fYr$ҴA I:h5 L"=أMyfӜ1{j1dx2FAW+z`Gxԙd\tHB!dG KX,"vEL, ėY\NK[F2#}"ќ4'NoiYK!H0vnϊf~6i1Ep]5 Yˢy%^V4*1rf!1 sc<]M<5+~%&xN:~YiΉS톢nY{=ͺ<1Ez<FANq\4aEWrڷ3cl})BKUk‹,Ya̙1pc|&/_@LZ87Խ,x+΅Da$Dǜ9a@m+3|ګtׯʓψp.$oê =ՀVg̓/ DgA^cc|b۶ D\4'9bX Z89'#;l+0`@a ni^{ lZ^SM)*ː1t]Z:EaN‰.CLvo9=C\nܙC̼L*$Ylr#BSgHr9P D[7/ƪ[hcſ]s\q J$3EӓbRה7X`% t !bd*׋;sL>=zz rLg2 y)8'x Bzt tqLU)1SP%$T5փcWV^_hzcdv>$i/, 5Xز&Myk>yNtzɰ[Lfff3$-A%DLxɠC4E\k_F>]c$S⟎6ɬ kDhi0w {s+-酕JS"qp%@`*⣵:ekkOϧ26R`ʺh|VX0|}11Z~e;bw "G$ 6M!cGϺ#=ϱ;w,;ı&p1 VlT^)[XZ_[sD9Ad(:& MK^#e1,C)q8cϟWmǪϟUA@K9ak-diG2fBFh^ ʢ^}AJk%Grc)$ TF"ؠ:qHD}4Ww86czٳ/6mW5 JXͱu#Yb^ֱ`,C vqkP,8"Z:My7ɩ(Ll!tD3\4Ls`*:WMSABbd9FZNtqG{=nXK@1:6#AxcExKҪ1Z>AVc#éH;8U4F\i{{ıqh? Ӂx,tqh@%FIǨ}Yn؈&A:f DZ̜bV.^bF\CݣK(3Eh(62H2M{ xͪL8;!3hFٔ-+!٫\͎65;=5qꒅݸ1vp35ɀĚt힦R|{,+s~oF;rG|8YO$1oibl* hف`&jvM<<[\…* ^lLє˱|LþZo.+o6+qcu,pϖܜ˽ssbS`MY6%e.y[6#I0dQb2*j]Ő[8tܻ|ŏ޹qqխC֪@0v_ys!V\{&ƔD`b9"&uVtEkU0tf'7*) (cZaEʋp_*nܬWbUȵS qLX١|%V\;X!X*O1Y,0b, XƪT)|ʋ1$SYSJ v+=cE %Mm%gl2NZfBi)"J1fBRX )8&1Aj|Uu$U!n?rI,qJX zS'd;{)Ǩsc>39H໚L&%+ e%4⩙М5[|ͲfM݆F@ML%ԗ >`+39QcV?Č {L:u DDe'ꤦ(؜u~|㛕b2&7؛7MoEii40TrgP3sV}4t5clQ13v1z/\gȞ_OO"AMQEcH1`|ۜ-e1((f!cVlWCɍ4 B۫)`z72/z.@ X&Ӕ˴ [7ǘ>@Ă^zY'לTFfHMH$+ߙ=Z}49Oty2b+VWwG>by V+3x_{YVS9Q/9%XFm𳼔o~uY`X2j;Z|D8qN߳:pFjrb"Y K%,*M8o/ 10vb݇#U1,O߅%0'XeibYj0Ika+hV'$XaFC[a.elLzi\b2#!)'HLcl%)n  "VjƤ#vA:b*u_+vV4Ƹ8FR? fbbFڜj5z^qzN=k ޥؑw8mua[8>Pp131] 'cr{y6yvUX#k鈝P16 XiþKg☀1`1-˂j1dvLbmo}e0_y`̼f7 jMn0UkFU VVkZ%iS^d)Œyvmf[oLLv 1VDp_ZMele||76 m^7G=n`fuj4}#w>O2vN1cɮBXBƔB,cy6`[{Zpc&|$vO{Z|ǖ+ ~_=bb칛,>o6qنxd=!ˉ15bLc! cQIˊe܌ Ʋ3b"3rXkV}њĪkTƔC,c5N?EezEĘ<~}b'2!b|~eTTnRՉIu᪓bL_~E9UJ'ߟ2gLuVc}jDl-H93/=kUc}FĚo.R&e|+cU'l"MX׈1#9}nuL\{ĺ*1OE0j1w4d/N6 Ɛ?ϘyUFF[{[޶\`~]8)Ñ?e?_2Z lvbٛ}{ůLw=iA}1E"M\& iogy Ʊ_wr+֭V6 q.rO ]-cL6IBLrWs`3 ÷M ˔RJ_j>%7%& T㬡xI<@[Ov X2]6 N}Y?iZe3ch.cl&TƺDz$8V. rcL&~+ }(p$C!`ޞ cL6G<6!cEcL6Gn޻׊ܻ?cIb 1;+Ѷ#d_F[{>y2!cŽ?ߥ2,zggGNL14IvwD$ IDAT^_ cg>rcLw[R9>NHa/aF S+c}]*c'ovtfST# _.&crC!b,Wv@^ckɁc1`տUE`lOSYkl0ok54l5a;4餕 ie)N RtV0!T,$2jMAaFw=@˥o{~|s쁔98w+VM5HIl-&AI&HV'G t+d26֪b ̩`a a81#x?f1?o)vzNe`ȳ;w)2^nOuM|jƊ 5c~ a㙽!3y%aX0v>deDʘ8-U@]u:9111aXhb\#=mƪ4-URS/4;edhrϦR4|e s} pP5YW,9"D,ŏ~;C eU*m9rcj܄dlFNٗqgp?&Nȵv_RYW,1cX cB[]hcl{EK :Wi9> W)b6HhVV^8]4X~$ǼT-K0V$N6XdfzkX=5 fi ؇5Z"pl-u1_C8WP3cm0~+W҅ (+[WMĈϋhĸ~cqD<ЧX8">LrSǘT`/fIs&3x ښyw >eӛ}JyeT-7a9= \[f Pz;Տj@HWk |b,ٯREv2c17:~9F] i{ur>qE|^ K0CƆ Xn*?(A.kRO2X]g2^(IXq3ccLp1'x4RYn)m%cdy~Ix..2F!fcLsKi+dX(:ƴ2U+Ҝ9EǮb)ۅ2bhr!cW+/sX(JN?њn&'f^}6. )2X3B3V(+4m)~,׌+E2vKӥisT~A7HMHƿȘ[U1Vt@D)0$70=>kc?F\pGYcRTft!JjݽU[UXghԻc<80n^@ #.$Oywȹn9{Nm۟1bȡl1ЖHu&D\O"ӽ#4 볰HФ\?Ʋ嘱1֘tawt_c65.D 0N:<)9Ocژq]161{ =mmKHS$| lO_1I^*&7Mй" a1]0 Ď9۳Of M"ֳ.b0VHV?fN:w;fwOM7N% ymYkcnLfg]7yO$]vN"`qo)T{UaL,D Xt_JoG>=6b̿;7`[t#ƪ l6jSxOd!co 'Xx"rENh']jЮ~7pF dĘ4/Y1woi" QcSpj~gd_WK늵I~cv gm_[-ʏjVȢDLḴ;[X#Q)=1i^*&&=<cR6ØT<&ẻ` zltKc[̘5; Z=ӱzC,Y!¨cZ0'b#1{B<%fs$dZh*P_Yy.A=YYF7p͟i =̏!{tԺx阃^+[+FCxv4wut=woRX!cTf!b?j;}D܃VރfɋXJalc0!S)1&k}0Ʃ)!AcRV JNԪUjik#dJ1\mcؼTfbx̰e͐bw"j;5Y%D<öXreȈ1./8!USzH]m>ǧA*Es\ Hz@/.kk,b@1_.v`q1ƒyĐGf4qٛ{%jFD~&_nHHHZM;Kmiim(PuyI\d/ T??gާ 03Iz̙ӓ39ga}g}ۡd=A'Cץ6T, EcZ;?0&䥲 eKGHk0&aه`l=A8j_6o|)yd\i#L̰ yR 16/Rr p*>&26nj|vĜP?:Įz鴇xcqג!;ďI56 ˘.vόcT36FucDo$#^؜GhX{ŝFҙa+JcAÆo[ՎX01w s 79jc ʖm $JFҙRes*_1c %A3ݹ¢*0ƮdKp}3r1E"% B!oM1%v c<۔c!sRmiE2H⋜|aWdҥM+3Vu16cY9'Xq?&tEȜ,d.blB`6hquگp 4&bMv]EdF,M#el#@<i߂r3vGeUcM̸;cƮ1b~X<6f{z^qihz#]b?@mܽ 2wM``&Dzb1<~uFOk&VyTߔIsZ0n϶@>QqB{vx*a *nf)vXpkT-_\|"s&͌f  .+7\&ctv+'OhҠcf,b~1 0?VII[ˁc2h2Q?c,bҺ7sqiPNo'7Kc0,c(N1&$F~L猡<;Ę/_YƬbE)XD0uĘI$)caL1#kJ|yuT_IUʊ15A 1>`wcGz"Y)a[%7c`p#1&bLϋB'w$HO,ܱX~mX}Nf{[%Y <vDs+nLzcZo{%pxl5 < IiC,JRḬ󒌫yb*0FqEA>#JDS_cUWGafG.O58bP:FgxE<biP ꓡRRIY*I] I8c b*0op/xOd 52B:I׉E8Psw^iUc-d _e/se#@W5h^jk?b{hqb#Ծ(i_D%S1"d}LWXb=7}TZjO@q$N灆ҋs-< ĤIiՂ0ƘT0lާyŗ~nwC "pm̏e2 T2I);ďI4cbj0k,xφKcV}2o[Ϗ3<ӞY K/%C0":a cˆb,Xӝxx{f릚1#zN=^؜Gh1Ar b 2txL@ a^7-}`&p 2wns*nWx< Pƾ֤m1<0k-cD0?yX5hƽ;t*1bL{r"TcF Mb싌I=2 3cicj2"g쯚4 #qAs4ih.S:ȯh c(N1#e쟫ZDٻߘ6;ORADPEdo[G&ҤH$yԌDA1q r b$dXA2ij/xxMwgwl==<\e'{;?_ݿpXJ"Dѣܖz.10+fX1cxubl):Q߁cl-ư2&vNH䶤ZC. TĠEL1ctoF9Ec0pB1K0(%J%$ j7FfӃWt=y?cz-D53s(d3י2>N/1iƌsW6` m_E5^h 1sgfz㧸::A~:&&X^NJrܘ{F[Dw7t9+lCmcbG\cq'10FX0˙Kp81QcsxahaѰ0ij4}SF`=x!p>]G1 Ģ  n꿶m.%w[1],G 9cMeטd1nՍԌwSetG(sgMrc 6,y!ӗ{#:4lM=cJRST #_䶀$֟Cm֔EhwŞzƺo|`l/i]+Yi8 I8V|Im!TT?h~djNJf'BSR㍺4FU20&zr`]ԌU<z?ٹvy6v[xZ(G B.QL%ce#UabQ:U7/u,Tǎa8_Ngg uXN(hxGE+mcg4D c?#4ܴ$uc?XcQdAc>IncA1-c)60[\q]1R1_TƴeFK020&f)0䴍cQȾ݈vh$֜#Xc-}d crZƇmpC:W[Xc-g&V+?cljG10W[Iph/ X_Q^I2#}}+yHccޟccc!S&}1OtZj.RV:cRawC18r2m ԡ~y桎10&՘sƼI$0!og> ބcļ.$xX"%afL9l}ۅ]U$3z]c.)Z7FS1 "Mu"sǒsE'S>MnJveGc16q&2cf߾}5x5IƄ)5FP;`01I?{g6p-v{ÛCQiC/}{%Oǭz8bgN4i&['l6,l ??FHKlK|4$ofoͩhLTQeՐI)cEO0ƈ` =c / d~H},p3F̯8 jN湧%؀#ЗӛAeXVG|Øe+:[M4R%*f OaJo^3cV)vToT C`BS.e=0Uی ؀3Swق[Jct~Ld, ˜%cfiW쥓Z|!Uʲ꽮ŀ;[JMJI+!Ʋ)˜tÐ*XUؖ#tDVr{60Lc>ۋ#w<7XV1Ei1>V܊.7uUz'k0Z]˼tJ"ywP;nj!ըր.anWU93L+jqE1)3X ˜cƚ(=!c瘱1g~mNo c2al6ۼ|HsĎ1>B"XNyY&u1wO ~d욝Kc c1AF&Aa,ď 6@ίH# TvQ؅i((HJzMi\G$ƭ!($p !a cF?ce\*lo8!Fsgau~B32X*V0DJ8mBXcJci[A;;{*=c@:ƥZg3 'c´,f)~4[A;tciK7ϧo\"c_M@yup!*PݬrUE̪z alcFH:c{c+8Xz"E7ȫp/'('CTRsi\60ya߬Ɔ1ڐ:`TvV=V#O6NF;cT6~-:KR0֊1͌mE}ZV a}?3ScՏ78xF68>}\dB˜tȥa++~L{SRFƘZՙF̪O_A4,<ߪ,8z_tu˜,K5X0xS͞jTZ_qh&QrTSCE :JR0]=QkQAm$c* \g8d 110@ WO"=c̵( cAwFk;P[#[̅~lkY-ڊ??Dcŗ1}nӸt;gR;w[1FU0X]%~o11qEfË׏],Ҹ(9xJXȲ3vWj^2fs\ۢݼD-3xb8<_7+f4T7?S>⌤lqqEz6v1}9y3-$Mz9v}V2y s4=]OP P11(HƘE--a}egj׃ftr\8hw<ߥғ栨TdfbbBƔ-M-c x|=(Sp3>#kg~[QMVlx{] &` BȔ\fL06R|Θ4E%͙ux” 9}u˳9cwn?Qdy/15YEDI I%1 쐘L8oi"ҰM7G;8AM"&+fKS}mwDuRz>\ߟصk&dȘgIs@+,%gRh6q I+3Hf{2g5Ec4iVzB*FH͢1ŘW16cJO2$L1]sL)ޑbe&I7@#fS}L ǒ༢ܽfF2;0??0ޑbkj[>PL!cȘ-c͌V?{7 ń29cAc6ީ3ьz^R1EcA."2_v󗓿-Tsig!c%m>14d $21[Z>0E~0CR{1x?2 c;kCȸb4+Ϊ{`މbн5\5UMx(=3Dnp9T&,jVWԞg0\31qGc!1PI9`106UGRqўiV^ })ޢxӘE|V$P@%QdRy~KrXkD=㻮droh<y8:Iw=OU5離a#{p`!cXI0VC`[\QCj㰑T#VoSb-v&8j CԲ~zK?8jD:c4a VhX.,01r dt$X1Fq%W1ȋd\Q5gG`l0FBݿ,00]@dTc罟晶Nq>u_ Slt.4 Td1 0f]2 _=IDAT5h%5}Kb'Lѹt,"ŀ˜u"2渤K%p{2vrMSnܯ{SQՙ`J\1c,1 N&>A -'LsKix:3~}d S |oTn2V~IP~G:2!cӲLP23xGem1_8ыiR4RHeRXBDd 3qap em1_8ы[R +'q /bslA<}?Jٕ"hUBD/j*iY6 9U c^gD|fX d֗JPv˗Jl >[Y֌rAJ1T;FƐRc|r81Tb#:c5UU5{kwvm\i>!QJTN31YiFR U "n/bY²r"8o qp/^ƈ^_3GҌ'dh{yt9X ZKeV鐹yw/g̉c :c䥪L=8dÏTFΊ{W`(yv=XyƂX y?\ݷ'/ %/UZDH1QT^37o vseß-/#Q0GcD`A1"Gc0?0Fƈ u?= [ H^*ãռT"^O$ړȱU cxt⌵j$pm>'/c=s k)/Ր#4-YMãeTRi=a>5/ MS0Gk)/Ui$2Tն0|KlDe-ydk)/U>")˜y~TcG^M7c(XP4cÏTFX1B^*o,G)/T^*1~ƣ>T\0˂1<#0cD`A<11"G0F` ƈ 1C)cBPaP;\!1!cB1` !cBan1cu j7Nꛚqu{I|8oٞc/Nw'r0tl^}Hɘ#)Y1DƬݵ}fe7 +O;8& z,ג?o1M(c1ʾ8Sg|ybK11rW^~ow#B?ʆɗw$k<~^ԍ>Pc=xPdav%֐ypiQj@U`ȮD=j1mQzU~OJʉǥU6/OS2چ<,FgYYY4SV%jB6*P R|"H;4|ym`vK.o/sBdrWi#z%:/\yuay, yjTٍCG~,6j(]AE^;r@ /\3K#5}Wideh@SUA3j7]-Y_wK&R#񵸬 Q|#M,*1/Բh@Sc;}e}Ha3^Ƨ,V#_M"acY1^+L7+e!.8{ӛ"l=7^Ub%<P"c_njyoef̩V/_MLdk}&UlWFi9A('HXsUidh@U|q<꼧Nc~{އxHF?flgtq\11i2PF;W^1pފm|MlTrOqesY1[X8j=2>ySP4<|އx+tiZ}-~1eC/ZxA,쟍U%%Ɏ15jޏP4ߏmD-b4JfUhZ.lE#lBuY?gJ_o:F|@ ><'=jo{FBB0!c!C1!cn !1c` 1` !CB0!` !CB0P/2vs]x,{ܽ.`ߦrjR(t׆nZ۟uLƺ>}9.5;7;+.1Yeǟ`;j-"11111fLkjGbL0Y ˗~fl֣T?/0qL1Q4ފT׼%47'm [ROd Rn>mq `Cx"9)>{{hil>Z=\eqz{`1fO<6a Xq?٢d剓cr3ytM[N`V|͘Wu7c{53rs1 c0blr^nfr̪ܗ8ۂ1R97c[?^c[n3 y2DU&K^`ָR-ՄKx]J%,-h|t<* 5z{J]}aYWBPh9cBKiX0d}I">i8܌y{ؚ݌(WXJm廖;s&R{MX3fPҷ۪T|VoH7 ]ˬe~6T4-_~qzZMh01^3iXJ'Գ]Vl]Y64r]cNqf91U?RTBL?cVqU`l~c~1 ue[1U(g̹bV"ƮY֯tm+l+3 |VqCm|"CYm,ەϕͳ桑lcu.1}1`oo XRY>$:kkVrru6aQ;cs7%{6;؜kx/16{ c0c0c0c0c0c0c0c0%0cKmlc1\,NsyloG!c` A` A` ACCCI"sE1A` Y` 1CVMoi~N33Jœǁ-{tߩr_1dI7;*juR۲v+O<0|CcFI*w8MW(Rysl^=xVȻ(ݶ- ~xnȢ]֚ r<ך ƼM_oOYms\W>?n[96q?mLtZҼ_ {cZy<yyZCjS<8lvw8ϟ+!B߈7]X󽆹"4c9a6&;Dymk=|y`eǁ8L6a"mjȭS+hL0z;v<;άsqn՟~lMKIɾ糳M<4RPNΥGC@|wꎈgM|}}¿l\WEuTFtfqlUJA@>˰ƃl_{̼ت6NYȜo[߳qtaҁ`O֟6gzhiCCCHwg4+YnS*#M`J>{9P Zri,e6۾;,&ΑAvw28ϡ,Z*q =xCǯ-u1~&;{1ײX^s҈z(۪XH:LxҩH[8iuCxĭ$8"a\rh*S!9Mv!N,"鱴z=Ui 1z-XJp5J h`+2Z[K-t+[U=H iC)4; UݪYtBQ-hb[n-ꄱ3$C-%,7SV#T>S,5o.Ǯ *hˠ `٠3YoyاLht=vߟd}׎dSѲSE -]i yf:6t~c^Y1#w~>eK[s,L2% NNwc''+}rM٩ vA:((2n^z`>x"V v~ zܰTME:JB9}QDuޓuӉ4uʍ|lZ sM-(jBgylz,M89!c1N -[` G*L5A4B*"w|Ѷr|4URJtǨ<y1<*D`$d9uKM 7I4žM$G`g8Bl&^Nk^;<7@""1Êp?H= Ȼ\Ld=Xy=fc,v UMh)[1|T1K .O#2Gx*-U#If2 cUb1T6NF+ ^4/ފVctyFRe)ԎQX?]M,[+DRY+7{hvoI1pB[1Up9h 4tU` c򪛊Y0#Z[}5X њ1G+,~Wh~WRz`9].AIfvn=z74ow]̖W0bλb,.UcbjLj.~ [#)n Źj|y= X·t͋2>=&mvԘ7I&'<~%ϐMبٮ-J ofڎGGXɌ054;d2Yn(.Tmv$I %,g+= 8^6%ϐMXĦ-v3H."ҎH[J&<_ZD:X)qkGjD0Xv{Iamtŀ}^n$I gm"+OYVE"/A+~Fn">,//.N F"l e2OΜ{ |v[ՙ?F0Ml 2*CHIQ+Rn9H\,qjp EZ2xe)H&h܃EDg&d[&2exoߟù FrAҴtzNVW$a@!t]tVdO_u,ã@&s)馈8֛U!\,ۻ\sf 9̹\,b(lw9vGOy YbemҲe+Yb:"ܿtnii}}iI-C$kTJVݣfKp ª<Bc=\1[ܱpEqpmxjO1m4*Ce7>"]296b ?d~wէ:gH -eBT7bŞ2ڻ%Knj%kbpqoC\8  o1ID4Ǵ()TE/ٔ,sMu,3@S LgX4bӴP.m^ܒc_\[YYܿhѱ9XdwPPVsLڒ4~jS~?3QXԼrŊ}Rш$T $%Q䅚e24O[V&u,Fn8<86uƍ`ǼK9ߥ( 4NӲ{H/΍nرSub:4E811aoiI",E G5ZE-IbdIRh60Fֱ8>xH6ṯO>$y=Cj40w?Md{orl:!CC/7!\]BM&$>ll>޶\ -OS,6`]( ȃkXo=g:3iӇrI̜Ose ]V$c`H޽{f v~ݻ,k3[m4 {h%݄Vp޽{gVᵥia|j `zNZTR^ss~L$=oǺMǏYxDBԻYHwހמԵjiN?m/Umc?%3NS,*1od A?0潙L-~~9 ESd:kbB@YZL]bu'FG'@?0k1[Dh=򉄥jd/) cl;c;%/D|y'ZSo~:(H9/Q^uwz:;)Lz@/T5զ:ڻ8s8hZ,{$c@ann̳\A009\+,ŭखhNQ̔\7uǽY~Ř>!;>W,m/jŇj&Q5l>FITVl;_wgEV$w[ -)iCjuPAIt>m!vl˃_Ǟ$QьjP1 YZ3V%Qi;VÍvhd#i@7IGM;$yjCh2; vΗ1/tu5pIޮDP}o5搭x#"z~暈Itf !c6*U;z^ $dF IV_T=VD¸Y)76zTɍBs,1MyyCKi]14 B۝ "]3{k o=?ɰd<[hחb;W'R>buO'8laUؙ(b%b NK2SzK~ ԙxvWNgҬz'*h>09ɜ?hO1y3fc V MpHI"jh2eXXf@0 zKeuphL@ۂ`>JnM&+ `2]v%s 3X3FC!4xW  )rA;c` l ac`#cd#ismaˀC/;.Lhhov,ǜQ=,_ƨ@`۞@cc&F+whVj%d$mÎSdv㺦8IkEaK u96,DwnmV`ltt_;cƺ6 +F,㏒#V#cB3fPx`OI.&h$ғԐ1X) ,E,c7$~W-G +20&Ìe+ݖglnf dblEfeϘ9U_fKE ͘l^T@s8$+LpJh:)d}^!&&1ĎK 4y`ʋ1hƔ)>We\y>W0cXͯ++D $2KY ]cLq=Ø2WVh>2Ky#O17ʲ%XCEL{ۑsWQ<! nwsqW0cM^ƺjAݘ1c؏6SdƚN#M)>8+I=fLٌs}崀\vיrgNU|&QYZSFx((5gnN4vQOSFE[m<ʖc8 gi~x?cG:aLxW٬ir.F?SJeX"_ ."8q~Ϛdla<}0)݈w3 &/C[.ʥ Zf:kbeAjRlC\Q".3b˜iԤ%Z[k;=m*Fэxwcۚ?&>S;:+ˡsGvEZt~_ LRIäTk=(Bl.Y|2D { 'T#~VF0UɿrʼnNm~Oa193 B^*w/Ƅ rLc؎Ƙ]LFJbTLeGӺ> 1 2b2+V[lT츢Pa!Of )r!;K}8ǹ~c3kH?v=< IƴUUB1GX1~kZO+w|)19R}b*`A^x&j;"ⱨaϙ(}xА̗0V{sʒjkR \ޠ& YNr3`Q.c} D7, N b"D}x_̜b,RŊt1?@X"u1xȋ2TL9vX(E;QU]T4c6\#f4x~d*c*c1&k^yelo W$b>_2[c]'')UeH4 %uMORg~!ʼQ|LIݘ0Q| D˕1b+Ei>)vHi#&~=eec;IN2iޗb_I޿L΀$۱1NT(*#OpV$';(zHi 2f٬X<OĐLom&{~ ͋56K1EIw_]p^cpcĜֲHƐo?P?d=+<(⠂WF"M;㎅̌Yd.|/V7HO ֻRG o{t=+)b5穴ou@jf̈ K6njƱ^`6 *jď؆dSgL*'c)!:eՊ9ks>:SĽv'1`&H@mD=Xr'=7obQu#uZ?GL&{UXdkֻq,8.;c_~"&!cQ̿ @ƔKh cߣR bU#ij?]'Xde]AƠXn JꚄc0HrdC?/NJ1VMyЪ #cGW;"Ǡ6#5)h; \W11d,+ mE+*_X8]oizxx]މR11>> Bl0FRN$>ʿQ|GnHTD(0 jqǎpAƴP,[+mi۔4cx, .ݱo>)8621DW邌i6R֌6RF'p,A m8x=*fl68qiuz0n20!062?+>ꕹT61J4 seK[sf@{O14юOa#7 Z?/AwNu:rw+8r38s$7`sxYTĈ//o=5tߢ0svzH~#Y>K15ȘVv1kـc X% Hqj1\ #fAQ[-d,ݜ.&`̽L|I۶=yz cPS{}\ QǎӄČ9H3wWz/>GoX>I3 cJԥ9Ơ6+1dL:11?˶= d c{ے1X5 `5^PL]6 b15 ݫu\+0&D 2Vd)0~Eɯyל$8iL7!7ɮX0@>&@쿝1f*:10.5b j32W0dI2Fٷ_쒱"w2Vz+V_Lܬ #WDw,"γdA1 6͒ rCLx9 0>SD W cפ*L*= T>&fG DmS[TRt4cT>F.!cdܢ>slRm7 PB wqoD:.f!k4@@WҤRmsΑH[&7 XzMYd=w3EKS1򦦎2ȘV?֢J3|%f,f`+tƆ.)sܽ O;3}e9䜶v+ cۗwǚ^׫^.Jc)QU Jf{>%F]2zQ-$Si!ctP3VXk1V%+S16o35i15dLfƤVKV/V4AbL' (:eD`7A 2VJtR c^cI݉-TVdItJc[BS{&dU2/ =;Z=4on÷ddll)0V4ALx8u 2`t߮\ɝ1 GSΪ60Ol^]^C~&yBto0zOhy_glTi0W-is>FĎ'VBc21$MW^&:-cDZM]w&0=7ed@ Ʊ<1ћ1fCɅ`39ϸz,4tpǰ}3}^cCԎ4tc|ߛU1]~xf/ c7qy7o=~a|x軅 3A!NnNД1 b\l};Xs]Ĉ #XD';0IneCyKmȘ gÍ 21F#Vtl=A펅CQ^Uvgj O72917M2W1cUi1c֞ŻNbp' b\(#\x~7$ATGt"$jrci̹@ SƖϘs6͛!%bae;ց1M1Qѧ63'\`(cE[0+dƖP?cG@*c 1l{_pqU19EK kփQ%щ20&th)CmӪ^*- Ɩ4q5>]Ġn%%BHj_hȉ۽!&z#R(XQYVXHG {+5Ktè\b}sI$+_h|四L3moyy`ۙ%?<:k=hZ?XGBN_b߹}KI(|L[]ݞ{ ϐsfl 5|cŏn9|ڱ"[~1.cRCXH6hb85FOŚbcrk}2b˓Ұzci| Lf!tcE vWW?Jd,e^<2re9=#Tb<[.cԥ <51Y[H|믾'w%-;g-]̺xe!)X^u.cU!+KszP$We%1R%=sj}nMd (ת1X %F򠝵@81bpcrĈ1w̑#ۨdc̈́#=BcĈ1[泑1ycdƖOc(ե Sc sæb다a]#P~YbGlֻ7l!ΥF嶨vmrcUJc~,TئMccee,Y*k5\=M^Xb2omNga[[!c2hd1UƨXKp1Y扣~DX*z^P^ky}p9H EĞkHl(DŽ~XouU zYdin֘x.8h]7I,[my`iݘs=f,F cs=cEǐvR?&QT_7c`i+3͚G/YX&a&{>43Fi&ƅC/"K cϿlLnͣo}8reZdsI+5Ju~Kk[MFx]Q[^Qva&JM31ؽE!ׂm-1Θ'DƘUdi %KkW\5qҤ7cA9lf`$lԶDr;MƘL 1i8)a IDAT`P_q1_XaFc2pk6t'ƚz\4r`;~31b 1ecJ 5`NJ\xdcƔi"NlSI-'1Y1fc*)EPczj9~c ⾧AWf3&[58ev'D ɅN@vJ{C+CbLhL&< Ϡ4y41@؍ysz.UUz` 1$la7V]V𥉉ׯa?ޘT(;Ucm^_a?_f a v;mەׯ_VncZ91 ¢/^~Vil$Mxd. lSh$2E##Ơ2xr~xvj,w 2cZ4Bq18d\'ھ#}8djMUYv1-Wm#11|ZƘóiȺhtmmE)b0CFՏq7=_fTT.GkkW-;cE6wz.f@0Vdc˞?p_jHcET!Ad >4Xy1ת}t5BEӏA$GlT? #Ơų>>1k$Y]E"Slnj cc#6h>CF`Lµ2YFl5|޽M{!dW珩Ԍ3lvM=쳱Dc*i%2$Dܖj ydE^fǘd12!C˘]1$] 6d5zA3c,2,;\{`dlLOjdؗ,j5z޼j/WUÌNy7-tq;!b,'ƐFZFԘΖvzҥs<<{0c P?Iov9)2V{8+0KxJ Ȑ+7Л_E3-`X/Y@?}&|XVUЯX,i̤cHtŖ5 .k!S=(dbyeg]FǘZ(k獼n;k蚇)Wr ӏwsĘvc[FX}﮳c×. Wf[[>c⼪V 1bLC JAaoKk];H>  k!1{'C 1ch {?&̪! 1VADy3j<ȿ)OO\ř3Ɗ0xWE31!#ƈ1b,[Xd1?77CFcَKCpզ%&X"Y|lFvo#zVfc!ݞ8buj[MczRM:ok"c&|`K'<0#P6tƖK *Q5VIak:-^qzo1\^-;׼mSS?WLnM}<2bCf>Fm /7\öplAʂ# Lj117j<`1Fa` ,8meP ib_8˜s{K| bƼiM,|DtM} ;LjgC|0;׶<ÒVlA=RCޖ+׽A^ {fAY8:uMCvӤy4?>fFHcYcWv$e4wf|?3O#a7gAQ! ڂɡ^!ƚa'1_8;ʦmeXh? yh?M{qo4a0VC|nЁwѹ$VbLӣӗrhx"-fU%n*Һ:=_bcs qEb!֏BqتF;ŌZ ]җrh?iSOQUB!U7wldY? 3㯭b;^60au7R!mG1 ޿X}[gΜSb;Z0Ȳ'yzhKN3e vM.z`~nSBK9dVa>eoR{#Ƭ+``vO{1OZy,;7v3SOR1I1ئ++B3Z`ٶz&1;c-flk,9uqE5cF@X4HJI}z[˜SVMͯ,1#cԻy*_jZzƜ˜i~WsN[q(f1ABjZBF#5QX9be3VZ*LGl cV2#c?10L+f1HxTMBl-j6~-a.<Gӳ nΘ6Q[˜CXM2ěyx1$c`O3Fy+n'>(a*ThZryM/0FscL57ai]b a0F,cbc.gS;X!hMXqrvc5/0*F>wKwznFƤR==-k0Vbcb,t62)j8Csc}`1ap{;wxZ*¿3Vbcb|XI9ibl0Fs9cY> RTw|&c1XKWzv+|#06B!54n*]z6cup\./g0tΝ7s6j1˜9cv7ys<d cޣyh.SXCֶ6lƚI;Inl֎y[*bcv3P1}lrs a̕{o )-=a+soU׺5^CjC#G {LsI-.1wh^Ufxa/ԺȞXPʷ1jNB-$8P( a1BK lheųgLKk=.cXcʣ.%(#R ( cx)l9E 0l> pj^\Op}퟾;}Z'ƹ=GiP bp,Xl11cuHb:rJyXoHK|C8F11yTH¥yT1N+6P( 0yufȦ{61*KԆT' ? $7:t%RXS1=͘:e0>9~E~%?T)cNTcr`|*Sr2Mfn 9g|AfLR\Rr`+*1CWޑ0$9u\GͿHo*=360V1v]0˜bM>^Hk cN3!KDM>t&c1ӈЄ1gca!al b>[X{s| 6e!vmy/Q&}Ocna|fLqGAzX>:L)=QV ߊ*үN!cM{XjA5l;i+Zx~bzh[AQ躲 tG0FùYsհS4](+VԌ`/C-i{{ 1mf46̼Ӡv:Q4 JUucTs 2rp0r˚10F_NDvl yVj>2'{ȭe-qrc4X DҺ{·z\~ێY0dwx ]JjUj>2'5͈iǘ1vr碩`Va͌('Du\E~+ZRU9A*% >U?')3ge{Q4ȗЦк1 s ]1$c7?GQ_F;KlG5p˜;o9; h:MQsbV_E`~>Q5D<w~ 7GXm~R:hT:K1y5 caA5˜Xȇ {Z5oST`B-4ҐR&UzН'AO@kT͞H j1'D+m5>:ъ Ƃo5 UvlXH=( c 3fKըR?*tȎ%Ƥ̘!`V>x39dm;uXA&kbƅi!cN|2==',թ5Ĩ(8;MԘ1&(egCLLAgؤ7i{YlGY482Ō2Qc /cvLA}b=TwWSES}*mWu ɩ{?; tiD./C טr%|u?0Lcۿ~J6g5Yfǎ0liE76c6c~u +~O,e{Eߦ\;+l/Xږ%33x 2T66.6-8ajyp|۴@<~ASLl?7>91nƞns+xƸV`oY4X aP E l11M}{6Zw( 1F؛V1V5ed36!*UeaS 1$ [WĽF^^^ԱA^Ҟ_!ɲآVEl1#v Y2ݨ@{[ԥUa{PNlAy 12ٶ=+1,WJtnTZDz-$k&/d2۳cc M#~EoN~%3ݨ@"+?A Ycej<^wKZ74?VcΗbOc+wՊP?!d͂-[LcѶR2bʲl#,p!1fx{K I/14WR7i-e,NUg"bokQ$1Fc1c0;** J/1bR˘mO1cmr}4aۓ_-cS󩍅11V~eZۆwؓ= s9a/MRo{;T˺TrE3?_`и1FcE1XVcGbDf*Ҍu]?#y~#IWuyf͋=e栍po(wL%b {ϣT+_X$oSuDk~qFa{:<33 p-.dt3S;K%X&/6c]{]4ע!^D ?{* `@e쩹#\01dav*#0 yTj<2Ύf{ M,$zfQm]*@YrcGxV1kX<0L~?xDr1m*N/YӲRݏQ1.j Ѽ~ǎ2cĜ56avahN:$ T&y,lטGU2 u~q\cnRI cajqؠD=1/RwwUJj/HuVcָb W*VX 1m2&0 PQG5ca;cOJfs+P_Xcp1fVDLw0 PQG4T5#oT%ll{Y%X|ƂM\baoBa'BaNR݌͸dlibs}um^(lY< SJf(Fc}V#ƈR-&ƈ 3ǖV L1bX>$׏5I߇#ƈJ`l]:{+6fXYFU0kzbн"t.✪&ycX9Cz!3 4!a^@A{][]um\b:T.vKk7Lu0Y2w-w9.1c}.2:JM}kLmcg1{E :nCuĚ`/Ruj>[ثu]*b,=Q^P.go$QG&Ϋylñ^@#t.X1c.UOvs=]ե 1l(z,cYV [d"cbKB,c ե74ym]*Tۃ c/?684~F4+Cu&:$Yᨐp]u`^@A%alcե{(زZ󘋺Tb,y .a^4?tƬ1oRׇ5+mPe]*1F\e@ySJyS-cR1boñs'oƖ+zRJAe|s+KLUby.K]#<ԥ *18_R-.ncU]*b,iʖ19hϷMۛ4]X1R9\KE$1<蚤S.EMPiE"[x(\kC5YٌŬ}\YHi$oP0U!蚤{8[5,Bhk}5yE!XctMV6c j1+ [-yEd2U!蚬l@Ԃ&Ycy[$5 Rbf,q1ἂ-e.Lc1&+1"LWąiVW^!蚤1ekV7]}2Oz |;_ @Uc4+e؎[zG pŒ1b,Xږ_~IK2X1Do]XPݸ~P(v 4@1D+]薱-_[ٛrصS {7<411Vi1r =W3r*}A7U%7"ګ6I)$­\8P8GG1c\8cgѾ3}W\ mCHƲVhhLC留+MrCj *08HyM V"f/AIB,  2N"9.[/+m_;=c0=s̙ws&Č 7ֿGioT1q>X2 cډP6|8&a…aS[RM)Î7WQd]jR?WXKy0ۊRou1'/ 'c3XyK.T`,eg|ctT0t2H4܊73G1F^*;5l,fG11?xN0?xcD`A1"?xc0G0Fy8"7cT2F^*ȶej_Kb6cxԲ{溊TWz&Q,T` Z:oUOSo4cxҌZr1"/ޫʄsBuy< 4c1yHN4./ãp1"/U)b`ƘϼT` u"/Ր}1< TܧryKsE< cuUwRyJ"T` ZA+y}#/G$<1##c0?xcD`A1"?xc0G0Fƈ kj >C2c q=!` !CB0!c!CB0P8(m׎64T 8%OW,?c(k k'ktI!;qoẏ h#Sdu`i4%G|'J9_>5c<5jS * OȘ8c0Ys|6r}j>1eo?qM̘SBkK[Ƈ?vuDnbI.93Z$ʕf{jT$M()Zpovcp_n齊ـ44B=.K?7>,J/ +B\Sv.[X/ AQS`>/k`Tb`UtCŻ=zb@6 X6"0 A3bua#2B|jM~][2kd?W*-dۚ(Dv[(G)/)guVJƜF}>H#VcۙBŀ& (P]Ɗ}BoF#ƄH]]i,._7 |5TtiX|+.9~jUF}cŀ& rHƜN2w c0v5pE<*0+FikROb)W,fYcAѤC.r44BsZ9 Ez\[Yn`5z?n pۤS*:KAc_ZZyH.ѓ$׫d]VJ'WQϭD^T\M魳1ѤCuF8f.nxy(&E ❢^lJ,_K|=m8#V%DY0RإٹYLted bźXmFPG+A$4҈gj@P+L}qw5cלǔ:;5}1Wcrj@pcoޜE3K3c~!*ꎸͮόbf7'$vk#o+^gJkj4b]^U5 (ЁW3.v*w.˩O1ۓiXzi}=6%sU/{kK%#~mo.n߈S+ewKJSj"ΦV|1 2f)>H#VGU DD@ t5cӅҾ}U%:uc|l]VcN ^6S;Ŀ+J#Y/6 FKS/%/{N-S=jR!` !CB0!c@g(ɇNgPHxKmkl#іW$ Moeg ox wƲP( Qo6p2ÏH,D;{²(^J]h8BhsŰ6piq ` `q ` ƈ111#^0c0c ` `x311c0c0c0F` ` ƈ1y,yKE~`;K~E+'9cDvL{ݓ>|!!` !CB0!c!C1!C0c1cB01` !CB01` 3Pcjydž΂θ{GϜC0F4teAucv>ꡭS:u5f3vnWB𡂱W]VfFc0c0c0c0c0c0cM`Lk1!N4i0cmعi6T|Յ1 1VCc1L5cUcN*^ O?U89TVBY|={e~sb oە1gw=2089Isj˪vvhoŲ Nmo NroX3iƱ]mcso̼061c~]lDIz#b4=!9|&`l%0c06acQ^=c111nMߌMQc0c6v%3V_i6DJzBcc#PݜqcIo_A4?0ׁI4a!.zgB~6) m##0c0c01WnLeuba,.cYjc$85?eq#q̪ csa̩*Y>WLX,1o^ cNJDƌ&k,n j[fk ©l]1o^ cA!UT~EݥDbƆźcu6]Q 5&]|ZD8Va!b~^RXc,܏I?67Լ"XxE](KP7+>1|^` ` ` `  ` ` ` ƞa1c,zF>0".1\` ` 0W11c0c0c0cv71c03:3W 1]S1U fΘUYv?Ęvأ/l:ɚW 1Fϲx|),c8J'!޷ި068F0vm;]S{߮T.ͬ16W|BV~uy;q?616WL)؝+Tz`6yJ:k%ʰTL2̞5%ʰ1kU&b:5VdN倱8vTfҵ=`8QkRcL&xgY\qǎ8V=kWX~DZ{ccXqcB1~Lveb~|cVʾ1z}P56n}ؙؒ߃ƌ]EjluFḛ߃6`la W11\211\011\211\0112A d~g0=co$f`l%0c06acQ^=c111sBBmBMHGg0cl] $c0ccO9M1(vegm̬Hj8FBDZ co6?es3=kҮVe4f29y,cccsH?ncfF<[! \n+?Șl Bxt8*ˇz2I cjMX^oKF|k; cT;&N!;]>W9Ԙk:?ĘgP押7gYtyjϧӼ"1c\=k#kLG(?}NGCUÌ;?ĘgPk:0ߺo3k'5ߣd%%D8g}C:?l]7pČ{=1猏`,y,cgZ{бgF5"J/FX}Y*1111111_D MXzcil|s` F$ 0 0 0 !!!!2`Cy cdj#0c|#xm#e㺚LrϾk` yzmͷOկr2y[(입D0F_ל#ZJ2TIz1#4+s)h?5dYslCk{z1UQ.;O* ⼲ oLTx?:c 0v\hwQJۅmq^Gˇƒ}sJi#S{C4܇v9_ t8OWdKO IDATx_hǍLLWq`m=W0wB'n1gA5+єTAQZTY$'TkK2{T©^RfIwJ2˻3ofw̬4{8iY4aVj>7k|ܿ$Y( Zߚ 4-aL֐ V}v dDO/6XԦzPc0;%2A ui-qEmTb~ɔozO$dNQ%dV3 :QWUY)H&(I"$&Ms@VZ"0 `V(`ˆ̔,,ͣ^):"9B}:F3XVሑ[Xdm+=Qvraip|eeiZtS#hƤ9V@I% $:SKN :bQ+  wQ>cBD0Q?6~rZ 0 toWxɳ\Ѱ8YezA$N 6DEƱedw٦1`c.t=-`ysX])bCCا1w=_cڢx_7E֒Y7ji" OcqNy"> 4oN"e4'zlcf}WahGb0‹z,cZ洷cdV]{Jm͑զ\aUKFgLVf]௱A4&_fo54P6xhLᔇKQFhF,='t\QQbٴ:I;Cj`z0̇¼~rfmDl~W!B1ǐ^0ls /KXŭO2L+Ѭ-R\1&F*e̓UaKP66 lГa'KƘ]~+|1لSF'K " 7$\j_Cf0(n NZE)fM0 "N㈝.L* VEcSm%Mf< %6o1 SjBOJFM.FLÇ%kZKqv:8r22)jpʒ bv+՘pv И9![|؛^p8i݊ar84vg;>]1"Ap8q5Թ]쭟]'څ g7^ck5ަP7>El%NmhpUv9\9@uV([J6y(\#ξ,-} .J9<^WDh_9B]UP6DUX8TMۨŜWcQy}=ZUj]-pńܓoP[82 gG8+#!Īt}::r۩=~HV eFVœƜ=iz P><gjyȟ%A8 me4v}On×Lϡpu{X& tC8`vrvҝvṗTE:w= υs}~4܆Wak!e8ƺ] . h vA4OlO]u'#ݓc}}!zu ; ;z9F;\1}?NjU`hUTQ*[p^G\w5E]@F %1;qm{Fr@qM@肫wU^EDJˇ(K68QPqd5g0g.D^ )Vµ .H;﮽mX/xv<;kϏ?y9WlQ9<Nuy &,CIWNo-J$9--Tc!nS/rjJi^~uL{4DZ|{;PꞢm*{C~~o]rsv+pAvCe2K1tuܼ2\W7u+TW$хWm*V%璂,-.({IŇ" \d>8qWykqTN:u+f3~C2A)Ҍc[7mG RL&]]8}_gǫDSPBǭ~VWdc*+xǞ]501N 7[:sv,"2"<=t$@/A<*cfY}]Y C62rLqL1pqLYPJ"`;fǎIȱ5;@$!vf;@JBdLv HIȱ-)N0rLHo*)N0rg]tr|JXOn^:POEt|eGV ōS8"±9᰿cQ >nƎH3$?I!_s ر(;ѧXܬclŔc@BǻǎFą pFnc9?*Z֟F?DӀp{7`llܭyǀXM~k*QjZloEcԎebȀ ƀH~jm+ʉR{:qrʘ oq`Ư}gF퉓Q 212o#|D{|;٨ ՠw():ڱ-ؿdczTSNp=tTu%N"bуȘjco0T8#8/ JKeƧWia-.sYaaW08a]%c1jE<@5({~9/ k{uH=mԞ=٥Y^60`Woۦ^,tp۽{w Kr,cls7pl~ 8 nӮ&38)Sձ]cX"\.~WWmc[N=~p|:|ejO/s->'4X!ema|VTr8 =]&9q6qclw>?Mg '俪y@Uԁ*9.AsnJB)6X:C:V4dhhfib3c Ͳbxփtpldd:'(Hlc99+)D  Y;濛抑G-2i8^ Ñ<9 \1\Z\ Z>Ǽ ")m^wV48Kn chJ!#KAt81 j5h4~cqL`j:>+-`pbƟ8ORP 5 .Oy Ifgw4*X/5hbq YVe5[FŌnBD|@֠1h\)Ԩ/SsMpvåX'8cg#]@ڡSǘ$hncjJ1\+svb-zQ"K4Ǣb|ǀU:vl4JЉCNqǀqLűjcбYB:^莩C̎Y;ӊ(cڋs={Lb,rt8IWӨ%T- ~"eeЫADz8F`rdFyoZwӎ=ʪrqr)EYADzb{>U5ף9Vro`'2͙E&l*Ǖ(H"cX-cLdpLUeJ8#Y=`$('S$U:V1{?ƱL:{EpE8cHpl1pE8cHp  Wc8A1p,qhOc^zljbu~\)X-aطUz:Vxf[u(?C|$P[S21ǚU;'_' IA"B9vx;tz:K_~bttmcxZɏ̱v5 d^ױﲃk[eԱX1 $V=A Up\cݟ:RohnqVD$FǤ6˱J1Tq)FǞx;<k3 3(?1ڴ J@(kK1I$d4qCcMdQ{W/zZwגڱ/GeDd}fLnc CKǘ؛HLI;mcl&?b"R%ӧ_>?{gDpe^FPo1asᚐ, ]7$fwʶ&mvZ)KZ  wc6o&;Lt2O̙gNόxsΙ{:mzĮoEZnjGQt>cn*2ĕkǾD1~R!yk;y!g)T",cK/,eWo}LC 'dMx :ݢcS1 kLj.tl"V^R;C )LpD\a&'}PɤGS}Y U(q:E T6|xGHv5bmx GUep C`QO#czGqN?oɂ#&cu@P"sV/ZQq<%Vң/hDOVNMoӭie]VBWM<F6m;>m1*6.1:h 6B ϸb$f6 ~B״,_ȫ3_ʙWS +lYADN 3JO=Y=nj/SkSt`- LG!VO6xx2= דQ .]5 Qu1_ƶwXFY(F7̘:'S"ajS5ja.$=/Xjz(7<Ƭ bLճc32Iٱ,Sw(fju(c-y31HIZJ1GWrel43>5PO el4;oSGϬRU;Y1Zm^g J6Ǐ3&b21Flzd71lN,GSv䕣VyiΦE FªG<8X􋺦&OϏgϞysYa,-ctffՆ66NcYWmܯcL*dd,m߿>PEP0v; caLIØd cF ci cϘt)ebV*1ma9HU(U8c`eXI5yy.7Q˙TqzdKqI~@wEJʋX]pcD?R+n|ݚiwjwyUBl Ua6JQa̵]"k˟]0&cلΑ1T,pOm (sMQ㓙1zr*+RTX91HhW]}k?{x׃gfxIt?e%BA% cx6,tX t7zטof#:|HaLaLckdǘXoD&߼fI?-Ed 9l cXo &pmaZ3rC"d((~r* "]1mjb톖ho hОiR6v.@}qf)b,F2F\c:% Q ;FX ғ64?"m]=ԱP";_J)۶%Ɔ\֩ݿ7  PsnOa0*܎c[O$\d4vgc&sM(Fdl<Ϲ&c;=A6`c1 êO vfϊ1&%ba7 Khrx]x|Lw,߬_Ҫ<p ۾\(1S 2(fy=gc~E҇@v+{~H5p}ȆdaOgΎiy1x.MO>XqØK1c.|RZpͼC_1?&w[/;R%mD-KᖌR5RKu-[ں\[!R-B2vh X VXMGXF%5FGeH_G*A00Ύ=!c8; IDATv28{x\Kݓlb !,*15OV ~l~!;V=}ŏ/Cȁ#Zhgَ+‚@ ˇP'p;gx?aLT9[;rjw(1A&?cSuϏ@ 9oJR$=X #&9@+2Fo+cAV>h7X4T0,Q^: 2b !y1;7PBϥﺝ c1vU"/>q1SΞY ^3aߘxoiя$fW+JʘTLc)1a;ýGdgM 1D$cfYU@fט k$L'c:+a=8pt7#8ByEc|TIσ@9l'-^pu]|7ޅ+o\i.o;2Yo8p9ЇܖX2&i\1R zA#;_R\y:&Tp#48۾KŏG$1*;o1*BR?{6yX1,싇B p( ~(-,I%٢I鏱vfFdn1qj7ٔd[&M\iqҿeۺزDeHU@=W~OpJ`/#uCøKh38QEC 㘪/66L@Vu؍cKX}ūW1c%Ȫ]?DKc$9V|T7!9S m4d u1XdAy:pW|1_1=32qWǎ?XĈOQq8zZXH;fS K:' 3645T%cJ5|,yPy)a?/=A%yC|bb 1v[Z7U+^%Aq 1;*|̣q/bЊL, !cFa,Wa-uO#{9g>74o:gr?/5#cb h̻e^"L,sX$nsR> ~ c'g 8\*LRq a?^!:8'E 1"cWhcdA 1vbsXc*2w=cc1bLyѴd+Ma^#3.=C}GӒ1 cWͧ?GӒ1ۯf32c7O9H~☸51&c*،k[Doۘ;>Z:b;Vup'ei74N8}w[Z_ Z*A+qfTa6u-}ghŘc+2o+@9 <cB){*26Pǰ-Cq;FP6adGd=ТbeUn;_a*3v8VQsRCRS0?ʸED7IyuSSY[ƸQ%c$]"d0oOrPўWy۟+L|z+uKٻk;;,@n!'9 j8NdWy!^V'~М1jS]Ƭu c>3noZ}+]Et\ |\ &UX,qo'8Qg1uvָR2cӕ1FgWB+q)2os7=cڬ=c$C#0F.[KdcէVXGs Ľ>%Q[aL-sN4{`_6c?+Qʿ(5ct܉8Z=]e9`7|>269X|瑛?!c}sJƲK˖h):L1){J9'gl<<|p`pqc K8MKz++~=c8Wǔy0-C-PT `i(Q1.W̿$7c33cƳ :qLX-M0=׶$<(!V<ũ!ƸcOghX3Cf42C@j>ͪL>cC+(z3]51Mh"N+c R;hoMZmyib|ݲώ+fӖ,)д47 tA^I1M)֋;1cwhht'Rl<0 |dx4,G 1v65bCu 1crc*0vHǴc3v^\`m1CCϣLx13|bL: Ø!܍EI0"s+m=L65c1Ҁed0 `~9}1?'®U3tcPb-2Va${N 'sv'{RPf*ݙ#g̼@#G?X8""ca1',"o~V; 8aRsO5t[)LG/;ib תzUZZgl.S11ȉq9 (l" 22ch.sJ-1f 1TI59;ߧӲʚmaGEfrو7,ۗcAS~cQLćYtI.|Jo `L~16RЃW˯Ģb-~^zA %١ v)ƶR\l/MY^^Rp86R(IqlEv(q! f"sj- &)1fcū2b]7dg=JƼerVmbmo~f5&QMRBjN/{]dF暘SBsP;Rl S+'Ғ2\1ׇ1׋b %X'[v Gl?|&%\ id9qEcW3c{QT;l@oW2 \'L몠"eCG26ֱu_?N@uO_w(51'`YX1awrSƌ`,[j r,5_Rb̞cM1:شŷW[;$92'5rP_<kbN\+~79YsJ4(ac&0BJ93Q/Gا#aPh %>ca֋W?wp'r;] r`!&1)kNF1ՠ8l`ܤ?=Gc\)g{p>C??g:nhy&_c>c j~vTux^o7|k S j 9}ayRG*0meqޓ--: <_(>yCK:W2ڌ>.X&TJb*ౢGJK+T:Nŷ~QSֱFlZR=s]p{Zz)XI5z x;'F'sJcy˸SSMSԱ6j?WKVWWBy՛эu脖1{U)#ԢjtK:,bLf薤:fuc0bӪc8b&0!;6;h?61Cr¾L uvTHcj1ԱEelrh2ָdL+~#.1K2F~t>y`J>{t}PX9m|\_tU4+d[=1>[ە+z[嶘fjۡ˙GZFЈ:inccmluCӅ e7.1)L`mhSnl5ָ-Y262Xn#$jHǁo)=)ɘI>/VyW<ֆ~qXb`SܩX'4&Ajrf5 L?guie~=;8?O dvO-1c~U.cq/?1XQYjrf=V>SDm0?1:؂n8 _7 =O]kl,eso?|/E1$L}YYfh>!kPH!Us} ~`qL3.6[.o~Z I΂ d@b3JޠFV$m ΃k_ WZooO e buK{Ύfo=:Lc9tYo4f,"hh5XzTCTņ\uS&g= }ZyXc~*ƒol<69∝:/|lE]ۈI)j+W Pe 9P܇2&mSL9z19Iо~7掺V r Y{N9RNöm$0,)6#.I]hc&0 5c1ƠZY4r)m~ȒbC1췖%TR1Zj1tT!l̸ƒkL`PͥO96Dcy+ o# [RlHic]c7bK ٍ6=^De;ፈۇS@T|hhZG ƂNJ6F|m"2Crtj۶Wlt,(mȑX&1Rؘ`6v#f R~ ^c/Oq[4Ir$THuln4eL f c^KRke5`c0v)c"1;kǹ4716Vpcوac{7ћdMٍcYac1ZPXqXVbؘUc#acJlrּL䍭^1+Z1Dٻߦ<|rPb+;UDŶb}Q" RXNB:r;R)\6>@JOw!S71 ~3!|\rtH Yhe4~0jg d'yн0v>[cJdmFhm~\Oll6>cX!Ϸ6>ىߓX*AcbЎَUm+wѭ t:>e++,?H8햍Z2BUl8b˘Y~|4;$Mhc&d}c5.c%Rz՜~ T~Cxb5yg9;aϷʾR؝+XC$tաч}]s)݈F19?+xb57c3v06<,g˃ݴG;lv!kc OyQ쮪,2 5Ÿ˘p,W`hbsk,6n771Okvn]ƦsbQ/"U4l[1EGKw ܰe߃.vuڍ!b0xLRD}Xm~)RaiaY1X]knY#Fi~N90U)la?%9_ߑkTqc~c~;\e`ԦEi$LiEi(M\GiPB1x7>׵msvo7;n4oRv)-(pr%W?\ US\_;<"+{J c7a)d9b֟R~O}+\y_1e(7_s:ҒD}B\GiJ US FRF--7lZy_5n(MYi eN10Fz4م"<}xgLٙ|Xڙc`tcEi8Ja7N”\fK ć(MiN IDAT.)6QUU!WV+`^cd5V:O1 c7I7vojHoq\c`Ɗ"ݘq_oqL10HcE nlw#|E1Ke#bV0ۚ /&KovcfK4C?/&[^x6Xm]T"VXuc&# ;7+S11Ȭ?VXIu4r=؃ vBf1 ƪLG?/66y}>M~{ .,'#'9%H+NiZM~ackLun<4vc=liOab_\تhCcjsZ}`lvlIVFcv4D=h2=hzw4]\bq =},!?K5ظâp'x7~{b{Жlb-.8?g~RcڍU ew[؁E[*Lm_1˕tTTcwZ 1ڱ"2010PciGXC̈]cvK:q\z琁10f3c|8d` Wd.S[G/z[0sk/2j։)Ÿ>c+3ۼd K^ügUcpggW9Sfl>w+>{pCalb{+ "DQu Wlm:)@Z(귭O10j,i,r<~cF{γ6RQ)ijɌM"Ә۲gIc&'kjo pt;l8l=+zƂzl}i0cN&_1gӣIíctWF Kld̮c{2;q`QHUeoOQD17i6؝m>aUK}c^  2F'f:d9`hcIHfSB q+k'Ck1yV6#XjUcc4=> x8#%NBaQ=7 ͱgH1f1E6#ؘ7# f|1 g>ݢpff1](mn1P3 {7++a >9ƈ's}k/d134F_xgPûjƄC4IB1 n0V1#?-w5USnL84L9361"6ytB(7ofdƄCT$1,ya@ƟPZ?|׮JBwAY V'Jk54,/g4[/nt#^F\oy_KX&,h?ɽ˃h?0p4#Ug 4T+ bl2)]XZ-;Eb~-,]DodVbh?*Ǯr#D|1ys!?oϼMA7GkU0c<bsbemV1c1c1c1c1c1c1c1yƚ~'z#c1.Ơ\'1XW2fAmV"'Pstok1cb̂ƻ~vZcu1oHjyI)dvyq&q =UR3[a20c.Lb̚4v̈́T^R Yg[d^#  lc-ք]gŠ۽k>}2'0;9/c̒i` R0Ndߡ #_TZ wCliٛn\]nᏦ;1P,iq)~R4bfHv) {+Xiy<MmyS5cu1+oo&vLi.PBX<:݁?Jw03 cê[?h<(ƌ1Ad=R R,XXmctN 1 oLp)Ǎwи^%HRDR4Xiq[bLsTt29m cM_\5L0v&NJ3oMp'^+2cgұ.|I1 1s#cbJm1o cқo}#03>ʑ2uAq1:e}0gKꮘgE )j.FyAI*O`' n')tN.D.  'Oel 2~.ِ}1f r@_AQ.Zg8ރc/T/y3{jhf;Rw3)$XSz$l=C;Vt. +[|)4g>z!g7Ҹd{11Y\pnB.eu>[A+/P: fA/rr3{jhfbXpQm64jYjQ*}rB5YJgbB'0݇O3Z/6iS#cӝ4<&1A -oQ"uj¹/}`^]=NO>O̹M7fV3utOA'J1>3|dXŒMm-/vfbcWtLx<9IsډH*7|d1 vcأcѬcWtL4VRIo0cN`1c1c1cuc1!:d LѬGq3cf $a%~f c#҅lI&0&FXYozs8c=Θa{Ab C BIsvbl#]VUmKʣ>L7g3֗L6cZz1 .4P<^+bͪ͘>޵6t"ozs4c}II.cZBWx aG]h0S\OQ$cp)Njִ߸ϐ p֛S{Bֻi ^!;BPC"}kƫ3W-W?#9ƭ [h7'3v.x^K>Ar %{:"m# )."_a{Y A ނ67/=N@,Pi+mYvZ9 N۩IMWKREɤHI W<НXdP//`l:vFl,c"{4eh6Ǝx|3߱vƢ`쓟ǮZ}zxݒ]~KכXScaӶ9\goza]F3;cLut0Kvy4wGszl{#ol7qϠAQ׋qФ0$ƌ3zu?Js^~L}1-`,j֪Y{ې3B`S'\i?\cC_O\Vcc k~~] {#^:,9m_4QzOa[c늙5!\Qvh iN?s1)!2%,`ߌ0`lڽ"VF~>Ƅ+ cؽ*]9a2^sVwv~K/"دp0=$c=Kc#849%|v.Xoᔨ1"o07mKco~dw;aA 1cP 6[7eƈueǝsw ݿ,[FFXo'﷐X= v?f .no["zo&e7?y[{O('c11֝ f2_ - ~w'?=f&&\`P3Y(Rb`[KDzG*{!E \9uÕ&"ƺ~ $[Vm魭ΙYfvE/mm5Պ.$,nƄ1xtQ+~;g1co ch"O5v?Zr,6<'KmvVHY.s?DnI +uE|oSkOWp^'Kغbi6lˡ"2o4\ʲެR8^RPr0c{إ,*<Z,m.JN?)ub(%,.W13ь ޞ`06lD^Wc`l?9ʞg;E0XY=;oн10FDX3Bc`l3c10Џ10bHb"&y%o Uc`l#Q YYЄH+.y :2`1}e KXHBYYDW2-PX(`,iYY<Ûy%o UXcfɻ"&^іyExCIĀ106ڌ9yWdUdU"Cؼh3]IW\Yd^Q-j貢qbÚGϚWc`첌]Yc` ]4+` PƊж10cFDWz/R_)!c#ͅ[0c`̈#)R) +ͬcZcCϘ}4V1 F1'a S|+bHax,D ƴkؖ-uMkls|xoVȎkVfJv1lִ̼J?-؈2$lQӵWh_-QnECE#1qҷ;okڳ^3VvfTƲg-y8_l6MJ?g?T6axv*(B8A 󱔹;f1Vub,RfyZ߭dzf[#,$cJ?axr((Be>VЏpdu1"[֘  mvJkcőfLI'LcBCUbL ت~  oIDATUά0FfGacXYƔ-~Y `T! }լ= +w=AY0(f%o;VL.(BؼslCa2ٍi/R]x:f ?V~l4|lҼb|#cFXi5?;VҒL桗*+Ɗ=ib1CԎP:2s6ebϸ.ƼIL}AC}8l|Y(27ƊHz]]_rCjc` ~(%jg&NhX5#٬1p2yŮP_c\@NR09_B2ڽ_1Vx+,/W삗Za'U ,&>3cuE[Wl_<4 )miY?bFNvjɰƧTBꜛ׈sr$dzzԧOUM|/.yj@%^P-r3 Iɘ8)6?x\,E֎]&cܹDTv%Be*f,cluOqYUmFA>4 )w1$LYX"Sۏ Q1b<. 9+XP{eOf,gxiǤ0]#"g,dU yJoUfH 0#qsZsNEugYlgsw\yelP 32Vt>UʴZ 0|"X;. #oDbgFqFx!c4@YcJ -kJi~Xo; u~q"hk5]# cņ5GNjqY6H#u~,P4dkU~I1{q#cze#꟣d4:?sgj MMCDj>F.VȷUqU&n}(wX&3xׂ}8/wt?cP`>Vi*I| ظd,#oJIɓ)nK#f|,P4/q^XbMPH px6GcB|,d7]} |n=[^3v[cace,>caX1TwLGށXo EnE-;XB>5*JV~Xo` ~>moo auR10vw10c`Ec` ~ 10X110c` cE0c` 5>(|v.^<؀1v]7Kr"&c}b,d췸m~wt{20Xo֫&ߺX~ X mM⾉e29vgt2&"&c}c~?qq4// dU2R-/̥ P~cc2'GfJ-/2c`lXotZNjcE&djN[AL808 7|Xg=L+ [2\=cXcXoU=Ic,8ɬ Klꅃx"ذ3v}CPĻĤfɯF 5ߪ qfb10':QR10gcC}k+c` c喌Cs/}j+-c-ۿn]LץQcţrYfy>]X6_|ނK\V0vc+0 0Ơ!a,1V 1V 0 0 0 1610ƠN AwU<>c` >0'O^ZjzA'fy(F'pҜcР1V<8:8/ג ZX3FSNh/)MUˏA1;?Үבěz+yBEg2i9Aq~OG}aUaה[e]Qނ1h+ŏӒ^o^ G1niR.T\ ciX6cTWN:q#~X(x_|UXc:<-sTi:zqOLXpѮaKIzY a;pDj'|4֐" ;R@f&4)mV!(zq'H$v!ߧ8/r{ZjvyэgŒ>rCd{zt!4AoZގ2f 3 cd}`峻0x+"5f鯃1A=Ę]\c솇ro|nĝ;÷Y>ZÇ7<͘'C~èRzhܙv)` ` `̫c0c}Lj^li'WU1sXx^߲112Eɛ7OVB<0b"_ޜc 16YoƞRd}wjzr8e;A{ja 09LxflJLll$e[k/7r1 Ƽlls0;2Կ„cҌ%(m'ȡD{>5jR1C)~X{ c09cOc=1W3Bm2bc1ٯOإ/?jɫ6c0Acb1sO>$oTirwtt%K6c}yS"NP766XZ~/N0f1Qd/OOﱅXheKD/&3i;AZ{ c05c2?n|ORU{B=ƴ~󬱯ҳgBܸbȺc<c}7VJ o[` 0fzu_t F g,EULu_+Na `-c+*] X` `kŠD `.ˊY1sXNjd<*W1sX6=7O,XBD={De|7Lx{L>HhL] I%b+f0c01<c8e0c0c8a06b5kp:OPᄡ11kE$cP5UfLX?Wb~1\ha*ˆZLazz,V+c- +m1s`e2D٣j$heCcG25ckP3{*CCc9j,N"MJ0c09`tz:dV\׊E\+9nZc9yq룱wUwObˆZJU`l `̱bH>jѯX{ЕCv#lT cT"S 91#GLY -)%+0c0Vbyӧ/ c0c*ـTf(1shq O c0cnc X>rŵ"XB籗@ccjU{"K:90.4 Mzf,߃d` `7cx^p` ` p` ` p>1`,nN٘z =$c7;fqT`ƾ$0c0c0ac8܂`` z0f=x, p:|'Gea;Xfy6F:2F:rB#0veYxMpcrqN >`yܦ/oUc}i[9e>p^Y1eqj8!ڣo;od=VW?/M}05cKjHMpa2<Fïb&"n kXQ|7QWO*de4Jʅesc05cz4`[Icn+O5ynl,;$]Ԧk1wVG%昆lu0~ņzL[=H&xnĺvb,CˤHs 2&+fWy[ s1 KJbXݺ0yޘ67Ef=Hxž<]p?d2&Ӷ $lJY[y[!߄ ˮd-C*kQcJcnóT[ϗR;c< TsNPBӌoB#g2%fM@5` mLdr;c2&Ne 4;iJh²VZ#˯یM;~K 3vgvh7.1wí'[CB -f|.(˜pW qXhXNdL$>4ջ/P+crq}nkfip7?yH'Ge0fԯX0c01['%0ƺ115ƺX0c0ct%c0cΌY*SM'1>y:0v=]tU?a7AWccc 0 0 0 H?z Ap 0 e#}kz!eb{ڛS IMkοߤ{0\z4~=Y.7n/6_uCӐ74jKXahROVRH(k3l6e3ͮo3%[sFd=xߘZ)h^ P[cW뱡z+yߗeecMWmӷ9#{b~A./юi;--q׾mW[e$}JKj̺)=<} {b~A6CaCՌUN1[/kxR*)-څ-U+A%`C!Td< 11÷Ͻ4^N~^'Pk5?j9-23'V5T< KzfQ3߱h7{ :&QYK&yQlZmcJuT_IdۛH߱Eec|;1<тbWVt+L{>0:YU3'6XM蘜+ʲsEq n-+bwVk qP$+ ɊdEh,IENDB`awf-extended-4.2.0/images/qt6-rtl-menu.png000066400000000000000000001006521522325530000203170ustar00rootroot00000000000000PNG  IHDRcZPLTEՈ\H¶ѴϫɹocXĸέĴ]I^Iʾӊ`MьaO]E;ƶykѴ~Ǹ_J˿oZH]IbLaKiL?hRzlɿmPF71dL[H[HeMdLοۗcLeMѼcL̽˕bK²ƺgK?ȼµaKɧofQ`KiTyiȺq221*)(yɻ_J.-,$$#ķIHG988XWVOML"!!ECAwhޭ_][?>=}lTSQecajigM<4pmjƾأüӘzwu~}{xtrpÿ𓓑iY͠gM~yܹ~VEp`ꩢrRCq]6NYrZPئg[ܰvdfQGvmɑxqcO 8iHwc2/^k"L(Ul/lQ)7i@x,sݙԫxgPX000v_* z/޸i18OX*Z--M ]J\NN^KfsWfoQ IDATxk5\Lb,8ؘYqBvK-Z$+T[v2u,lՌzU"'x!F!ȋ.Bm>܇;WC땚*̹sݝrgF I0u wr8kƴrćܘS:p*5zAoD|Ix ƼZNΝ2'8E9&4=u4vd[?o|޳Y8B@51Y3&zlȏэgrw?6fޏ~ͪĢai) cɼcg4|L?%Ҧtr{sEu% ׊_uiuM燱QmN\ Ek{߅%L-oiL,3֘ĩ Fy]<& +Z Xص$짉\QR,?ݱghXyV=W#bKb*CKFcH-bM6d.%dG\<^+]DurJ*;ؖDuvncbeK͇l)n?cDclWb0l8 $4cW3;<'18uh>d11\>bSk lΣ[FN}E(}dntLc^}v6z4tmuX]Ejrm'Q=Zt18g:yN;˄ܨiT!}h^0)@cApv`Kp8g^p8!*SSc;j5+51.6GcG9f`sDqihCOlqNJDSN?;]ەe&U*ˮSgB#&>Խwˎ1>E[!5y+]ەբkĆr4bd/_vTbqeaJǪ4kGcm]|3բ,؟Mҥ?yy(/>\ϷqwLטҧ#YϼhMc|HiU(gdߤ}3SfYbfF%޻QD'$~A[BWZV%wQ?h,ٕԵ;\mOR ,dfg܂3cVhҘ́7kLh8՗DnoqiU(G~@Ɨv53*#-BNо}`O97h?ci]=onטE 0zL1;g@O-eN߸ۛNÉ^~JX%[cJYowzJDg7qL1}`zZ8N;E,Zts6q炆^p OF:En8_&5$ D2]꘤$MC kƉlLf hnY k/ݪiR%8 !}ޝ}88{}ϒy=ϡE;>` १ / k;#Q$1A[-W0a6KqTuǩϧІP0c 1i,w{ "ޑōtB>:?֮&0_RqbEǭ['qbˆة|v~>Ʊ|pL3'ϴu:)EuBh:Ўߞw.i(oo8pVKpsjuy9-mS㢈w$Fp 2KIٱI13fH'͌c N6̆1H+  )ZD}1 S`%XX6D1@kq%vZK꧞@(}Z܀c@Ae@HbvƎ}*V y1"ȱ|*V ұ^ol7H01!>NAմ݂ۭUtͭU I F>MXU$93p X~&v7;wqތܰ1O4ӿQEy  ណav⸍znx]-JET xl-91A҃S1H0repL˘#ZqNgʱq옺P~X_2|X/pQ;'nN!_1yP4T 25P RcT\M`Ǒ?_QUqlZchp*fqyyZchԮehg( ׮5ySĻNPq N FǾ~kƱC2tc2P$hhgiͲm/Ѣc c9X$W%+Uw/v͡Ďm cv/+YRhrl'cRXǶ㊑ q~oбxck1xEvLV^Wc8;^Q;1p w$"p 1p ޑ8+ǖձ"Kc1m(Xˇ5zd+YHn:daɒk\m9}Xw$a >2c,$7[ϣT[_%v!e[NY6>"l$=Vc={ݒ۔M"ׅvLV8v2}:VBlF$:_ʿPێ ҨBӌc{ Y-mM`I~\u _J1!}SE ,p,YLɱJ}nyǺ8>çw,qU96ϑ아}%UPێҪX.ݠB_ V %v{ϡցMLcK!ǹU'huu݀cbpغ =X1vrjʗh˫sg. s.*/$؍q~ Ƕ%瘁B,Bj۫W̱,2I!;AcXfEw|2;Фs4U,ug>(9˞c VQ$.۫-j۶Ҏ]~_$"E\<f!g:^"D H`8GzLE+3>h33 6:1H8~b{Y&Q*}JNdcmX*RT-NiRd"OR(p)M@3yL~[?uS!Ҳ2by+>}ۻH}9ccq\]IA^7^rƨz0k{~iyBd8$6"/=SM*,UTx'Tr[ I嚦N6Zqc >XTa-=oe 5[3\a# 7(`Wssxp1ܩOޑ[މlNc0n*KGS^d:c~61TX;c ?S^@Y&wdzGZbmd3V) dcL4pZ1m:'ASL_FL*v>9ST3bCؖ_d}z4ṋrrAee޽{wUWWI7uzH]MS]7P{T#pݦflOG2s.1;bBd2R\Ye!jb)w9{έBND22ƓebBc & _h ?%S/(/1;YjswtL>)<潽1]d3/X{:&glu*&%@])u*SUI<AG$/e"@ncИ 0`ץ'[]x r|k&͒R2ac`l;&|4?xL^ux1lpP҈%0Ttca̪ m ^n9Jr3olE2U{Ro(X"ieZ}=l}sjcHI1/ JIel#VF+OɎ vr+8a3Fm);LٿaV޸-tٍ0 S(H،(cWVVÞo5‰1 cV{he<{< ֋XG2=dٯu c*b,朥aorQIoZIe z%}bgݜ{"DTuLʘcm ,]XUX%m-e4f6Q=($1cD(W;;YNczc0|xiYu1Džc@\$A>}FЕ66=V]ƪY ~ n)u>9<:Rw, v~zEeSoREA{XRqZxd*Rg}Ǒ-c!ѷ/L.{|6v:0Yڻ*1mHC_biSϘHeOzx 0VtN;1@v'*1Q-T軁ǏΩGe[2*0Vt8uHk(†v SlQ[UmKWRǚzz./ҔM`茉+` 2ElU8cX@&cbGH~ΈDf+\S) _41YSW,ݘGouTc[LY Y%ch5z IDATƬct=p,|}wOn{wOl߁eGl5.;d̻9쮐σxlof~c{,x7*MaZo֙”_6Tbk{05g~0ѨV\Y +HiY7+B{e_DqEM$+[`#u<S⌨" "Xc[Mo0| `k1>p1?sμy>#Z"?!E1/ u]ѥemcR8``4e,*{Mi .<\c曂iz\NJRy>j(ǎ TrEYjY`#k,*IN3MW~~\[Z1  1/cPNdh)eHf?i(YK" 5q=] ]?˞$0@:{! ۂÌ9=]=~̘16~׃SY35Ɔb`:kŰaƺmؠ0/W03֏yL)fl<d|̯x'Kh8$+z3v3`m3cr=c6Hl [="z#5̧  OȘ(#叫x Ds<cf̻tlڮ2)h:^ 9w ]i1SLۗ_c,`Ҧ ~]c3ƍ$ 2G\̎Wŧ:3&nqDq틠Ș(&o3"cr=U:"otw<븢03Q`b,<ŽF5b|KB_4jW!QV^nq;MD-U+ZcD=1}j qWw^̭H<)1QM&wD[eT=[w!c#NqQ"C`crƨ ƨnZq<)Ÿ"(W%}䁆F=eXY׾bEXN Iۄ$9c>o⹾9xfW-;7k'c3v32c~bn/fLgEf 3Ҙ|rTÌa4bElAe{ c{``TcCL<zJуS11c‘LfqMyJH\8-aWX'0&y -x䫕P^YXFŌatS&R ?*y !#Klo !zz_ >3> ^$y5YZ3'S1~k֛căX긒)Uh< \zSYKɄW'M[97R?=K2V *3ոG񄎌`<kz~ jOa~b_0 {#51V]T+S(Ɲ~93:2+.r㊠8Pm>d1֩1!lḺy_=[3[wl=l1>cj HqԂiE qM&Oh`8 w:z# $c2[H3u0أ-f'`(dˁӁ19b (z>F`>L7؅f!;blݓ6}v=D!'9,Bn\e{IUTQ8eFVJكVo9颕J2A]ceeq002IH BķPDBJ-H=u=8c0y3~~~ޟO!u 2k7f?/XA?C_;rHb5rrn1;?"v/ZṬYFZFL3 }̿cr1%1(ct"fClIΫ8c|Хs'lX#Ҽ44Ԍ;ٻA:4oрX}X_ T2Fz5ǸDMf-1``Xؿ$&cwgLhbI. SZKwc(?v趺y$ʏ<[[Vآ*̏qTLىG cX(oKmJ>$rS~S66``X%2y, NJM[cǞ1[?V~lfO{r7us9?X;<]̾.ê` ,NfD4tC1X1 ,a#]2p8\*me.ޚرGwo*-;Xw?/&*Fj,Xc71w? ~XA2U[5c%ُvʥ1Vl<͝W+]+a ]o*+rLd >bNռ_P6Kb\wx6Z'9~@-\蘲̀T+vxcj蜽z/خ1Ai136jApeb}; ɹnF}Ck hW7bȏ霱KK8bP6N%X3X- F;;h0Xt{G)v˜-c&$a1{ɌAK Xݚ{nν&dqZ?EoOe帋7!AЮN{؆;6t9EsG*` eMJZܾ{!Zf+T`d M<}!q܉z <@)d}LjW'؋2S'͆xə3&Q1ވ\f\ď{L&vߘrO!a~,:1ܷom ~ hW^cF5tvm4bF- ފF79s/qVXFK1(c#&,Knqڎc/kX`Eclq:AوA i|sC_pb)ƀ=;!a%FCIGpSDE X;<[Nwպy_ c:\ި(i ^\֞1kXs459b]Fc LqUߜ q_hXOc4~S1 RpExLJ 6S1Q0p]hJ&4ݏsۍv+lЮdUmtnkknm&ue}~eV6'e_T c%5~SYb,-bY5瑷]'AU K V< bXneWpU|vl/lmLVTJjiKvx~)^NR#֓%׵a L~{X5P/` 90LJ׆AOCeR ;W sژZ%ԈN"ufJU8L.+0@Ԉ=DuDMzq[C_d"ҥ:b @c-'4j1Q7}=WRcG{J ˜K  pg[cdE /kNK%*f MCfQĐ*cbp^SX1cdG XgbLE&U[=Ġc 1 n: 1x~{({*]Nr@r+ɵxLD P0ւ ELُşDtmpdf"~,5'?&!eTCe<1(ct"fCl[/1vS(u+(*!FM눱gabL^#e,ZXмa>DXZO@=^_ T3 ({&FB1YZ+,b13%5Ktp1%iPcjغK?Ϻewo?mcy- tz"&bh Ra}H[UҮVDА: ,ENG[@b:yAǎ{|IrN;ql]\oHXQcni~ X6$f)rXbdfJ1FtH@`cv,XO~:6>g +Dk'vIT.(MRux-4 %Pg3v43W6v֘L|QH3`_Վq]3WV3b|GOJQxWC(M4r 10V2ШDL0h3V+X^cGi7ie 6kbcE4t -)n%vȂ:7fcc,{jƨc+7&-W5uYck-͓ |TJ1c/Y6,w# IDATo J56R cC 1;4FXߓ'`DcQZ%]!Nc=c%lT)h6Vl)}ƨ1NB\"f{WE.ڍ[G1jX _2Vdi7}( b{Cnf7ah}bK3QDMS-O/F|Sa4arҜGu5WS&xՌq-ɹ/,%cW O6Lރ6l{ŢjXMyLڭ?$4Ml9cc,#Tc }<-7,{ڬ`;sG3FH'̻$'ͼg[5/R]1Y,c9 Sc8mc}+uhc` Uטx;+`!c`dƍѝ?XՍȪӎnu"g10F1)c}T01&!l_q#olXO$m#Ddƍ(` exEA[A&&p:,>snVt<6ƨX"c1Xƨ+g FVJ{8 "c|pQnLEVce%=/K{2cSQ0FuW[ʟk-ǽQfCVr%ރދc):*+=hfzVf~ǰ޽rB,U]zy&U7jc` A;c` 10ƪd 2+ŎyP%䏁1+fdYϾ"cjb.10 8AP c0QDO7$f#~V\'n!jO gᒪl%gѦG)ƞnU-gXՔU0fQ; +Oٵki!~ֻ񢥅+m9R;3(3\E~H^WaV2[c_v ^T_.*"O䷚?ǎ1ZpY-|E40Ny ^T/{n.~<ՌS K)[)J%UIzRU9Q{Ս`w׮goGŌ9kCEzQ@VpBG|3^ՌYTUX . -]DZp~;J8Y26^kǐ7> 77O*oZUkyV]13~Mac%w Ј5ǘh^1үWݖTώݧ?T1}k֩hψ1gDnkr+6ll7GCA 0OZpk51k}$ĆX1vu5I|Ƹ #[5}Ekn{<+ƸM4GwmcY B`P23PQ04 k䇒.)䗥Pr'`G6<؉i A'mC34KߵW%[v%[v8ƒΕsn!ƞ>4 BSk܍Ud<~ Ԛob rUW obX n=UV䔷}F7&2x*ZCl0fm9l}gd4NX ~7clk{yEtLSk6cb0rY μ*c4iGS{dGv$c"X'ȫ_3-$0ֺcf6z`Gô4X9t`2D AF4ƛRҏ+-̌;AW.mɞN';:~́[__x#;tc20t:g\I;z2ccbL~u]t>c1:_XzGfWc66{Spw5z4̛&UjY]0ucw>ckfŵ/cФƚ^-MI+E]ajA(t([iN&3ZbWb'q+č Z#9alzb~}k c騍+w~e+MSJlHIeىr+#9a ?X}~, 㹍%Tf_6q%v ee+Mqi%6Vȉ %'崂_x 0愱/*Oy;S'|*|,ԈYHL SڃH =4PR v! ƾ,33~"1&NWIR\Vxj#&"$l1Ԁ/J;VR v)ƾkgz[esWBt/_uaIړ)e *j8cYT` 0fbZ\2oLFЭDHj nFPhcJ"cc&iyU`l`1Q eߘz~T-ݔEyuT+S I~˫v=c=T0D ťؤ/j6cLx@Sj<)[$bdw+zR4 J[ x3Wx0@ nh}?M\DQ ~t1&NVx Bh )59e @Q5#!13"e4SL73#!rƜiy$7X-g\>&dp2vx<+A3L λ>dlNKoc:×ha%-= r|Y9ӂE0cj4uܽl*\?{Ff9ć=[Z=Lr49q}yF+\ {1K3N؞88ښ+*U 4tC@Q<@*3~P1q }MVvc-g,{:w=&nZxF]ooý{u4_9-1;EgS7?ǸgO泎WtH3/8oW:NC3e%^m3Zʛq<cEؤ ڿH Nskb294~ 2XOs|ŮT^c4s~8c!Wl&͉_r`@eʲ:ފYE0ox1ed,qsZc91eG•-V?Qv*€~1>nZ-3a*-Ԝ9cO0aR}\c9ɯų{ TΖJe;TK & 9` ce6ծLLf$- &\Qu99+gw`HWֺ[z0bο0֎1 Bv}jl2>+]J` fu\2':XH-dc{{11;7o+lz$ u˯<o1ftƖ L0v?o^WL{y00uW7$A7<T?y:x{9.o10֡ۤ6&_%ǿZj\z]{ƒ>BDA`<5T+jeԬXU[,ʐ;QuHBҹ G 0:x?5&_%qrxhs@ٓAQc|*ѮRCgeAԬT_};̺_V$aqc{ , r`0`,2u666QG2y(AٓAQ=f,-QaW\f嬬%.jQ=$aq^+ eSSSg<Ƣ6VoiqHfz#(3&߂^-VjYR]+H=S/tZjž'cBB r`Ą`,j1q͂LL6M~wC ='c7bsn84+Ռ9[]C={1[`X4{M_10Vߌ Do3M~E^&5Tjk̽EáY92,RjEǸ׽RE1Oo m4_õ+ac^0c=ݥ<\2|~;JX;i)au1u/ =X<:l˥ys{1CNpmp^cݷ3Qm"t/` Ѷ10>ƌ4cwv 010cZy-HRE␷ԇ Uc`,ڌjTE M(GpT^q[PpUc` ׊oE UeB5W;҃y毌cg.H2EU܊,٢T^q[C*Fƀ3vc$jQ&Eǔ+šQT1v õb+*qQc*oqaUXȢ+EhV*5BQ1` aϣk X+ c`?c4+` 1h[4=m"#cac`쓶Xws2>{s1S뚱M/cX,-GGݝU- ƴ܋^k[8c  ck((BKo<XÙ~{ )N`=Z쵶P˵WD^=-QmECE#1&` 5ǩe\:=״b9xův(=vkM܏'_ɇڔִ=J-$zm1T{w_ECE#o>UACpTFA\+6?-n]Y `T! 7Qc`a=<nOnkh] &ߠ_/b6Z:P7h6c1d{scz#߹T 􉮟:0•6''鵒X LMmN}0BX r$ߺgr{o;cz :>o;F)c`,J4<(3t0xo j QD/l C4b1e!`@0fXFGIj QD/l^RhGe"sT0vjR1fWm UBc+1XDa'c*[bUKVma7 Y(U,NHb~-` 60Xc ͛_701^p~c`,ymWXW8Q[0cc3ߊDRc`,"X{/8OUoW c,La,ﷄXc k `,G/j\+晱WGFn\| ""/z ao /3 n&.\o<^p .v o` Gfƺi]{uKpDQc9` Gc` g$Cc8"0c8#qD` 10c8#qD` 10pF'7o?`,x+kȻc̘G3Fr-ǛّvpD`̛[">[@upD!a̳Ǜ`1&|(̦,,14Q|pD9x" &I7#@4Oqaʞ}(>9hc|s5v/W.I4-nJEbML.z?vь%;qa+KJwf}ۚije 2z'zAΘ,˺댄Y&ӂO j3ceq/4ג1t`l#SeL!k)AHʴWL̉\<'=~dK*Z|,\ip+'Y$椲1cWn}_̲ BAi7cU?Ú7QYpC7T~!a<xLIQ ,ٌE]cH<4x<-J+AcM#:afjSK8C]Wrӕ}Ơ(K%&dO~l-ǜYwXƦ{Sj+s`  ƄiA4{kX3{ić}XS)J.(Y'9bn3c`(X_+L5n]Ϡ⚒t1L bM;TvACX/]w 0w!0 1.jK[@ όՍ)K]PEr6.kVs7xQ~ [ l~ڌX5V nyzVO> cW#+c>3zS>Jǘ#cvgmmoW4 v+Mz o)c]=(ccV:_ؐ0&gE̫l(#Zc{ .+M4YT¤Y駊ɚb]HĬj GhEfvfD',1#ɬyRxkX+5}^{.Z77__WL<\)fw/McRDͪ&v+l## |Y-8 vQ<ʘ2>%DIqRO4k'_[jVq|.4p*ş>f9RɒXzx>Tq ̉N>4c3<(>#lAON|7GɢThAg K-1061o1b{mnv<^'c}}?1ƛ0ɇm;"uy֕ٶ='2 yfAx1\ϺcxطV0F11֤ o.c,9-%YlON7^&b:cc M\N>yEV'U{5 QG706ڌ"K !Iqk+c` 10UCp߅Kԟ]XݘQ$ISF}z+׫ёW^|`J c` c` c` `, 1c+B` AcccX(c` cc̘4d^1!4AS/ף.Ktk}~1hhlᆜ(2f<7Ɇh@^׌-PW$kvw#ǠdLs{/9]hc 2M?F:wӌPVX[C"zCaR6&LjiK~ƉŘ>!WOԍ"*^Qc?~4~111q!cn k<qC2^7fc7oi@C/MƞZ!Wll丼@C}sc汸-zA޲FCXd151vAvuy<<]+]w厽lCvȌDvO?]6<q?"j"m/*7&aSZslz<4fx#|1bcⲘ11U7qAi+NE` `+ch$rk` `˶bp=WƊQ: x׃_`3cVyL yŝ`;c|t{cx` <4VOOޯ411/yE11!16ku=dÁ C!C110mcڊ0CօV-όkC1.Il~@ҍi?=E8q ` 1wnݔ;Ϛ9a  υn~n$O><c0[G9Me~䁃a `WcmWcdx5c0c=׶bY*Pc(c0cy>YylXX`}X4(ic=c3vV =he7V_㥲گgL:aS@0EW]cgNQ ^` `뱺|wscm);'%1ϣփƦ5Vs51X؜tcdXq~1ۊ]f@-/0c0[G[`}&dMy `cұ;ƾ{XRUX_ZR݃KvcU~)1+5^ cc8d8;` nO{׽7MXM XƆbq gucx`(X3 ј>)cS` `1m<j"ڭ.y\סԽڂ C;d,1]=0^,rƜ救ɮ:/[ԍE0cj+*q;muWGJuR3IQR庮겑ɤKe1%O޳'/Iyhqۍ)woQR%}ӾIF2to.+L*;ե1[9(+Aoɍ(Km0c?X}ԯxwcq;ncÀ1C 0@cC ` @xlWb<@@1 {ECl!` wΖݟҤO=c[imVl%¶lLi*Lnѿ8p\eB/R2!}5(o/@~qf` m44)jL5:i<؋Řhla\&2|q sMl3Z6~cY>v<(c7VN17F|BSAP\.4\x'i _$d5^Do[BE٪춭XNs.yXT~E"2`b'x _1uS 3Ah' ճ eɄE !Dh"X@ҴKg@h~mH\U? [e0&`.a̱u=?jTkc=Vx(exc~oc"cvdb%rl~"wıJWlѾ֎B$SsS>s\UYeY`10Xf"qcc?slƨX+IENDB`awf-extended-4.2.0/images/qt6-rtl.png000066400000000000000000000772341522325530000173660ustar00rootroot00000000000000PNG  IHDRcZPLTE¶ϫȴɹ˼ĸocXyiĴ˿ZHo[H\HΖbK۔aK]E;â~yk`NiL?ߙhRŠgMzlοF71mPƺdLŵȼ²dLǷڗcLeMcLŽ_Jʾ]IЌaP]IƷō^I^JfQaNǸ̾iT#""Ⱥ˼q*((/.-ķµyö;::_LxiecaHFDû543VUTӘ~ƾDA?}lyuqnkh͑w][YºLKI͹}xQONڰM<4ŜrqnՌƺ{ywͰ~VE򭜌cI>r_ʑm]ꀀƾtflSGr[Oت6NYij߳fVrbrQA~hXԟvm7gj,Z#OGww9f5jO(qŴP F掋9y[-c^5k`l2䭀 db͝OaerY?4q y'?s]'`BЅ9 IDATxOhMߔ@$%lS6bN{!&--,ȅb XARFVC0X˜fcP=nɗz_K,'|۝w~3/OW@ ?]W:j̃[txXӅđ{t1<;@ 8Ec\y0P Pº:ޢcOLzOw? ;g >k!U}<ȄXpy$8 B.'^6"{j` 2@,r:ÂNh(qGC~8#AC-GgU6X'-8*BOKe4&;9:XʕHn! xp'݆,7voc? .U%l] h0IE0TOKW m(Jo X Ҕ6 )I)!QDI?yjW+v{lհk'Z]X.u犇Qc(m4鱨 1XT2ВGl`QR[Ec.Uϕ*P˨{5sc$ɑTU)UC9W!7#*jT@ޝȀ#j̑)wA+C.\WyO#d=vQx(@^)j^%2JLl%'ɻ]j|AKmlL׸=1xDB7(qDclo@CoUxShe{ƛ`rzCzZWBj͊$v(o;%VG>S !7@ ]BTŜ/G?b''gEģcqcqpq^+/>^ - \AXm@CVSA eWn2(걷8uf>MsnhQƙ Nd)^$+^*J+9y{`cDm4b&䙘l--E$}T3}^Ϩvb8rRZM,Iwl;4\] DE"7GD0DhyL3k{L>Ei0&;V9egEMh*AP ^Q3 Qk-컢Pf6rSf<߫\nfNn?6'GFnh؍A}(vaU<5G5Ǩ>( .c|!H/_@(BZs=s}R>ˀ*s͋trvׯjzu|.<&ʻD{lDp)Sur|+JNj.\ Mҭͬ79*JVNR2Q1u߭Db).Ok h{:Es3oNwh0y?<$7ef޶=.qF| l>VYQd:|%PgeHyL<$|=ݝmaʖ&4ʀkY׸hN[akWkWg:sgR+eKk"Kل3fė@x{nҴH-:y&c)ڊ{,xYQI\"mߤOXr+tv-y?@B xc<'__z4#>XQ60p-Im i+ Ѹ44nlM4Ԍk\A >Mmeu`9e<&O8iF| ǾvQ RԖp=YƶIsRE$TGvq'IqYZgh˳vz9yۖy}~NK9Lo$=\J$T-N"{a`aF0QbJ2tdIl~k]lMo?{=]O.$<2G}23y"T 2mZK32McMo%b[1Kxܷ cLE{FSJ:)>EU9ɦ,X렺xl,JвtOYy_̧r 8m9Omǒ~x}c~-ߐd8A4M8ոcSSS||oR- M(2κӝW577Uqiĝ`J8ƁmQ%a|J2O4-҂h C1_Xe.grX&4r !j(SXJG],go%Bǚ1q8zKFMs0Wqcl& .<~H8F%DPhL8FI1o7f#yۚ8昔NJd<,L]-H682t ˘.:07Gcc2e ZE2kvdkU&6X$J9sq)m1 ,}g;v4-M!`|s7+8sDɟdqR,*Y{Phbb"(Rԑ#KxMA;SZxk[[,ː溑V 8siZ S9&FqG48Mb˸Čb>s:XÆcmbóepߖ1 ;n077Vyɱ&njs><Fݼ`-*S! ohYj̴ "S8 JTF Qs*8*I$Łcޥ^XeHO{ [/K5dId5:XplȖ& Cjx\@7xEcXhTdN}wBk X1vsMgqC%Y7 X%Ywv3c @d<1b`!+qczr\lu(iu]cA*4`"8扵zj{8m?Y{dta+bQa1.b{\.CIX 8Y%`~9M"&F9s.,/ T!)"+ !Ho0L. OffF+֞>Y^{2Af<3^f81bxH]uV:vk,:슁7dƣd[ګ"[&dž "WuO{EjWTulԱkAcYEQҞ`bG8p~igoFȥ?HDIc@2[ ǔxбE{\1]y&uױ>$tef86 $]Ff1ō31.ZDZViʕWVj­LFͱD-eL*ַ~ͯ~cG1wU%9FQPԱrSD7j8fL,^X_zliݱИ( O{ob20;FDa/+#:K1xc-CwZ5dZTS0(p |2hC`P=em%FGGnl,PQ27p/3Q,LC* PjpRULM?MVz²?}Qc/N}p !mur n~ȃb"t9%xefad'Tcŧ^c##SScSS##{p,ױHc2X@,a9ܤŸ[cx\:l>(L4P Nm iw/{Fq6نTm1wg1ir?~5m&-f7ٻMSC(`b4&M?]ro30 0N:_>|yw7ӧnizn䞛cYru<UWn;dzt"J%7GK$f՞oߒ͋.LN"S ~9& ӧ֧`xQD8"ƪX 9:ԝn3RL'_F䔬wv{cMU O' <Ǥ8\^N'R϶ރ@>\10L%a"vg1h@cxҿ1sCbF] m)Z pltٞͰv;ÛHXgZJ^W3p-UCětƃ >w$:R*p ;Ćptd)y@`|x]m#b Ic[Z谅Ly%@h6]30I͑Ias˱ȹpC1I?"9®cHHSEžΧǘ/b 1&J9!!e0c:LCOyfg =)[=k[6qutE!e }ƟFk4b1$$2EBBC,cgX57("OCxcD!;"B PD(zc1P<11Ab ("lVj.Sä;}|]KGɯ4SIrSƌ0XibLNN#[#@{F_O3Yyj2\=iDU*tMjHi\Ωs0^Pη*.I ʇ c]zEJ%9R]\zpT u!ND0VF12&=jcq مzxBBI`a]H;V.dg J vR'":EJ#=b Jq!.KPRWyʋ++E*؞5V{kV.yj> 7Y<&2)LlN iHB.nKwŒы(b9ɘzSbu:0 v+ $NBs`w![.*ˎjucr vslfIN=SA/X9r\;81$P|oWxش'̸[YrW_3>J[uQsr3& v] <5(j:6lnv9|ыdrF@=QI5~ltb!oc!yӶ~,}_f͸,cQc!+1@ =3&ԅT{ 1J`ZwPL!#b0c!;f⇾2vzn.UB]H c!EJ#=ceLNOc'LL0Įxm2TTR5 ^|Fz<1e0V}5)x1=v3(uxHjfDFycV"bC(⓱b+T1V1>Sb`-P.Fe ƊaPk]8KG_=b5&_OvP<5Ϙ^Zkw߲د7*O7{P.m)!ۺcق$Ly읁2Sg,&s'?ӺuZƘ$tճ9hlXđbvt|}$mTf.nObm,1f11I%"L({!RfT?&q2KT3cbcLAFI+|S왬"cA\t [_# ]3q6t,Xxx:&=c,ȶpPkMӍT-iGϲD6Z1JӢE+2-$mmX L|֏V]f ^([إL0Epe#\Uv |XZ2^g.|%>Qт7"|xZh 4%×FmҽN/ƾяi<+ g <Ϙ8#SZAopw]\? c"F3f=ID+e+plzJm)Nгr Ż5c$(OϊA?6g\QϏJJN&sXC^ۛҟ.g &۷l bt)?bvcf"Wh31r-׏qlȩH Ny-M; %XoXd߽?vI:yGJ3\{|t(2=mXM$Yu˰YC?U^FT0|8l 47.IYתߏX&18E"I6cÕ>3ĈcRc ̸bIFIOٞ'M1VauYK1*|]D툏bpd7,[Ho 8.Iy%0C<;1?-cs>|8δ(ĂPlE1ywcDLeӴ523O1@=?ᕽsl6|^ 0X?1򼽻1&'S+#Ƭ+:yr'+5Zbf`~ p vu3lg#tĨΘKTYQ'3c< `̳ ϯq6K;{)q Eom?c׷C;1dg}^h<* K|zT9&CeƐPLr12^ Y蘀GۨłnGٌYB!˭ya_ťR+?Z aL?yL;e&Kk18 fBAX(bcܘw{3cPL`byfqT;f8gLr{V@i0?9A%DĢ_#v%{1AV=oVq ja=$Hy7݈a'8c,sރXC)98Յ1cO!;σ;vxM7z[|cLƻ/q;σX"|E;^\+%cj{ʜUKsęwޓj{@̥-=D+5eyOUʀc+OC{JWOM!UT? ^U) ֞Y YQel7+Rzh{| Ӳcv2fW˓1W,C?֤HʗR/ʓ#ʗ,Q1,G-[3vN*1N<&cCm6H>G~tr ϣvlX>GNvAk'cx2X"gTFM9Tcx6&bm6h>Im;1XڜAc?$+c7V4hYD ʘgr~<<+,,Ic\]ދ!Zچ&<Ǿ' 2 BHC$%%T$(Ƹ1n<1?6޿W^9ߙY%ڳ{.^jyՏ9 G=^п>O*;TΟD.T:cߍ=s~'CPþ|K%PFTlދt~B أ^26Q9+|R4M!a-EElcY⟛܋3Dė]8j`IqIe1k;a7wZB촮t2]6n(`2ҕ'84dGo;KyA<dW,R&xAbi!|Z_c2I#Ϩ > e+ 36gZg1γgwнT2_q3)^Df3&@hlL )"g2q#]IٶMRu`L]YZ ^kX1sԸT)15~1vL*ñ833'XelkQ(_2#&r{5b>ao(2#cb1fNfՏL^y֟2vY11ƨxd,~ МrJ๑VK;yc';S [Grr#esQ4q{N=tMjtf]JFc6M6i4YYrNZJ봽9 D@N9*+ {a7׶S[g>fʼysƄ~|J>#׳%|b(=ܣ(& cfpt_HЪ-p}q  c*wZEh^y8 uFs\vŰIUPZ<_GEab:c0f~}C0'lA X`萄0\_\QXE &WgL=̄|<5p|>',QÆ*7I'7T>O7 (uIz<30Ƅ|b^T<bW|+L(t3د?X12&p@!x$cҲIxVtP qĘ4˘ԏ"d, qCz&ӆ$CHCyV?RIvԦ?vay8 ɬ^>v/.]+.w*yykq ybtr-^QTtXe1kFScynnk#LLhmT?Yƶmm$i1l/XeME\۔^ZWFRo>EU qKgaRh߫1]";0z3IP3e?8m=Ø6<*x Vc Agj܂iô0عs?$3$uȜecm$<]e!;scU3gvbog[w&h: RvKu?I-db b2&ELa~DIVj+y$~5-5T>[a ~,AS ر=-?dM$ܟ7rag6S3'Kemmݖm3V `A;AGʳ3=m>iwzR)O+5z윕^8v:MŃEJۂ@[{!"ֱ#-H:c,cUOV߂³)iY_O Ն _g76f׸1p'nI%CŃEJZ[~4*ckibxKU)9*٩kŚ*4ҵLsD5 :ZR)Z㴑@PČ#oܖ2&@,~S ӧr=+~/!@iբZgNz:5hF1O D^A%-ZX)ce2 k(blGhsAʒ6}Fxldasʜ輪3҃:w[T ǬA;hznw^Xϓ|Hs_C10f66ghL=F#dlwĐ~ˎc{?#$`d$dNgLc;8v05՟x1&rC1m?-Eƈ3zЀxȕto>1pA^l~,3;8)Zl'=tq~H0 )gCl b[_;h1F  ԟjDrjcM64^q- %c:Xḑ33Dƌ#BcC0`ÑcCs]y fu1Ei1;Bc18M024qEA)Q]ª$@A!4$;҇BE&'cKmqEfEIg 1-'d t9cKmmm9MiH11bk0c b(ƌ)Ґ~l>tc0tX14c c(Ơ-ƟTGE 1"fO4$c11VGte<~CKDC5i2zE (C312@:ԏhhd*::/IaGLcjg 1$cGQ21L0%4!:r5o67n)cBCKDIjaL@Lf,bUD X2;53+lNdGGP[<$o"e LүJ[3˃]w 9y\E萄%xh(.gb?I8_nR@("~U-^ ۽~zl%|q o>' (?VΘA` y Qp _U0}-݃6&mꌕ%`vӂ@ X`%, 2,VyϰxER>BS(gBƼ^^-0r7dڐ$yIvl c!a>o-x^W sa]bIv;ݤd;:=v:9)mT_: Ğe}fcr|GƎ6 ^hJ`wXW\0&$8b cY ctkX`=t;.b,Sdjtc.U.1f82%Ycò4.zQc`ƌ4F1 c"ƤC0&C 1C1d}e.ՠu䈁1#Ĥ8{l2VOZ;YI"*P W_s)b"1kߵ6]b8O\&\MD"Ĥamc%cV=//d\2g$cd䏑ax˯$y/wQq<4lCIyeo,2毮Ub 141IcLn545CL ,ܗl񺊣C.ƖGc$8WZENbr:nR^_|bS۟`LrΏAcȃޭد5sj1v7ea{53*=r7[%g^ˡXg8;u[1IcZ'zEWxJ12cA!aޣ'V+=Z\Qz\ͬL=ocfc*ƺ'+<\1<ny/u4ݢ725u+f,z"-¹Ks"㱱RWW)5f2庱 gLjvL{\#)s$_Rj7n_Xh!V Rl_U#,/gc42>1JX-\1ˁ9o7%KXw=%oTlyEJ4&NЎn)1af۱xSdYc/Oc}3fkyKۨݶKA 4ReML?c)FiZ_Uν %ܶC4Icabv+.JsNNMeV/I) *D.SA.beމ3QEElf왉,*b4C(M]tE>٧W溰lэ:߶+"c2 01㌱t+6E:xSs$3Y\Fi[Gcȡ0` & ĪA1OReihraQ]ꌹK;W]8~Xv)c*CG#=3Q&:Di94j䲑1c-j21PR)K5J\i1<կ]]Ac<)~gM2#XnƒNi46,/776 3DiQ[(Mu)rh#uF7f3#Baw9> 6cpMp捽;|5p1Wڪal,R)cs9]>u`O,TrڮͧØC}毵aiڍ?wh76ޟG۰4&S1+5hbi IDAT+6/$,%[J@1r؉4;rO+2vcɖQg cWVƒ,A_1ư+&[T1cKۜ<-"]i>YdDnYK8~Xd3GkHG35cEo=؀O_ Օh7;c쩨蹆3%5E 23?B0xMo#TZIwQj}ťz:B[jGCcLKAcYƒY#>)u}7ɞvfZ\Py7 }֥iaS,܎6sڢF9: æv̉ےdlzW,5Ҙβƍ>E1XZP?cSiJ'Ěn9 ccS;c/sfl&W yأ~)ݷܼ"_ܦG}cgȲ7ɯ1c=Acj10dŐAcjCAcd, ֻ_e1p/e1c`0c 20&eѽ'` Ճhd?%V#xcξI 0T>N} ŐJ|#p{2XQ0~%?g,cF >gpƶ3jF1笳|6X;0nAa1Sfgq7m%g齇cJ-YʜKb:7p۶BnNC;RciT6DcB <c.Sc#,oOez:zbh_{E7|ۮ8`< 0aܬm}՜?p2cyms !dc`,;fmď0Wί$1.gkyE0aclfW364W6=;\6D1wv?mcY:6U4j3+m%W U+4h i>탽[0%NDlK@"Đ@Z Vy'#׾$'q'9G"ϵ}97ܳhL-82ce  fu"O Kc@myo硼+zjw~RKwj+NZ % ;w}'Ha҉:H!VQao"{Gv+ zJ?szj?fUuVSnyB$ )1Iw c@;E%̴[C_JֳZ9HGTjyb4 k%Fs]0*g|Qe#0cisS7`uշZj?Q%Sc,8.Ewxеk׆ZaZǼHGTQuuՒ$XO0c?\qc ~)cMIw~DU] c_=xĮ/!36tdeB^PWZdLOg.~1U~&cDVD~1սa._q# f_c3ؘ0Cc*cBedA3f0eǺOnf̉1z'KvPgdЈZcƚ+u3X ƦzVMLWG)cqX55` 󂱱Ǐsd~=1T.D:;WUU'}u3fe1xC${+ƪA?`̛{YcWD$Cij]0cލp݋cߺa hcu0:&0vy4zT1ȣ E{nˣ c~c-0Ch` ƀ1ٝ:Ӝ{%R'1`όNɅpmP."0ucM 16011F.ƺE ccX06֮y10-zfFk>`r10-m34=#n1cX0v `̖eŌY.FeY@T]w>ƪ{qQꎱ_hc MYO ƀ0vcW6;2r4KӋo}lC!1`wIr۷605afo\wX0c^j`5{tf X0!%v.c]~ ,,r(uq ٴwcZ3,lg2V4γߠY_jcLE dy-\E|AcTb1VUO,]8HN Izc)`팱>gwkg~Aa*ˤU**zt"/,|ߎSuVVeQvBK8efF8a*%6sX zY݊DEؖ2UVbP؈Xt%eeΊxVqGݐ7j"ω\]k^3vkvȥ=Qk(6997C?#QT<_2n\{,&3+H%e$O-B eJNZ/W,ZWEWA<1S)+c!nsX9< `Ɍ& 3$1խHcTU;!szTEokc'?Nd2&IcsXR*G0\ġ0'M%V}sռTOg )3 Q{}l5~(߀Ƅt2#xӴ6ٲ/瓄1RDƾ2 01aԜk;Vec-^_X0"xR cWd58nM/-K 0f+[x77 ĒqTcFHh1`Vi(fh, t_1q+;Ȟ}iE?2A.RD +Fe^ ap^j`kMF֊juNqk#K Mj?tV2D_6Mը]> NxTBgGVzWtdqGh:@p-A} 3iƋ[k:I{eJUΊQ1LYhXV;B^8o2c Q Ž%^ZX\4D@gL[ŭv L3q&Torw2VuFϤf۱Ҡר"x\*!ʨ h bvb%bd|XMv& 6vO; 쀈2 kPLXƇc=GSտvt쪮>MԽ|;{ۼqmf1"Ё{u"1V*3˛H/bib@$×l1>ȢGSB;3;;dt~DJKc/cL@Aظ>&}휷͜8xݾhZUx8@V`'A²ԈJX@/"&4#;;TXod2Ҭl,g=1x` tWdq^\_:fa^xe1eL屧F& FD %[Y.1FaVUTot,v_ޤADZ[̈PcckA:X%]6eLG 2df^4pel6|CUog1d +c/̅=sbњ'9EƐ1dĹ{>fmpjjpmjg-`(0ͶV..+;c|t{ -"c4D͊ WQVlk4 o3ֲՃ44dXX!|Vx1fRsj &HCʘ_4BͼTMVWVVedJSmJK՘)XFƺw%06x}<ڰsiП@ez1P* c{fݿǘOycm^.}{CяCRj4n_ ,oÏ0DSU0`nVEd59׬u'sl[KOԋ}xm?'J줓 gF X8cDMa&e");c GXGj)JB^*{^IrHR^*&A췿Qh@s{ T&{FS/egc11yԛtxZ0x-ss#CI|w)sd<6[ӟL&C*s'aj1Kۂbږ|1y~ F|tdc=oKalœW NE<9MƘ*ʌf!*Tso{+e<~m^j:XLB)m}L cpcz/+N/ PQfz 7F š"L;Rfk xU^o<+JK%t?+~%L\cDvTc3R8/Uz'mEИE|V$PĀJ=z6-okw,U+!/ KU]1Vn9 2E\ԋm.#/ K9-[j4t)}"^1o2:/Kq 䐬T8mUXU#c\䥺>n7#$:0[e$!cK>-g9$'/߉Θ7i!cX?6/^"crRT1cȘ񘫼T*YQJ^*Uϊ6cM^&UYЄKU^-٦Dl13"/͞AVRf^F^*s j1HU&4)M"[)\(,fy1mPX4-e )UYr+ %Wy o:Ϣ 2kαTҚX*P* Wnl*lSa62V+4@‰M$.Ǹ+EPpj!cf]aEWx ?cWxy oʍǘ 2y1Zw]%.DUy05 !AƐ1o3JxO"cn˥YAD3K=IaL+SR10!cxOJ_Gn}ɘd4d rJdlw }hEƐϗJl08QjzX_*|1$ 9oR[Nb#^r, ' 'l$Ș' Kn\f뮞vNփ'kM=?C%c|');KalۋWH\uK5b@ a#'?@ƼږMUmگXϊ]TW1 4"3>^N/A%c*]C'[uC Bs*`vt1(,9т-|{GDrpBw[D"z!y)i1v!Ԕ@̒&&.wk(PN7}l&;C?R{hg%uN3F ZrW(7Pۅŀp1Q!yd< R~LU[,ƚvbFۿIUw?`JðC~kY?վfRբ:)1{+b't3IDATLѹ1" /?@ƼZ՟גi-#qbM3R}/{~<1?F^~'H U-q[)6:ZY `x!i '?@<2;jSۻ4YΏ"Gq|Vd1L?\-q[)6:Z9Y `x!i '?@<˜wEM8g1xLOd͜GkyS$@eŤ1;dǚ/ՉtƤfxEd̉_˾1I5yÑT*rWPi_ۿ~ܽҗfcK]`98J]1dvRܽLBYj cX%f Zz+q D$()kαTZT@xq1<0lT_;!+HKQ-h1mȘ#bZM/XIC<ǘ2Wƒba_>FFCƐwv?m\in6.&J'BrA6hԋJHMlF,AT YV(J n"$j\u cl xhb9g~3sMpwH(9 c0cOWx\b,\7CySʈ%& n`e"Wxg cƱ]=:IS[c޺)EcuTVq;[` ?ؿ~8]+1.x5{g sǞ8 M/ƍ,M)1.^ /#cc1uNKgXG2T_}c0~U^*o#odž>c0K]Q^* ޖ?Mqc1`,P^*_GR37}}+KX'c* еpRytFSX ҆K1>1001n^*_#w̌NfrG3ƒ0q,P^*]W0F^*_#wϝHkvcjb~=$/3Js0Ryn`zz} )=R+J/K0sƂ*=_3F^*o#OrjTj%XTc{hRyxW|rj 73H^*'GR޸P^*QiT0#)~`Ap#0cDG1AQ頼T0ve,y-OмTrex~M^*o#M=ptKu91uu{&/c8jZ %=BKmdKQcR)ʆp> 5/ ` G1 *LnlؗJ=Uyh`S0cRU1JKmp y=a3ƹ"XTӸsa䥚+2灣1 /T鈈RyaGRM` G]燼T|"ac8A1"#cD`?0c1"##8~`` G1"c0:K(d3v!8WD1` !cB01` !CB0:1T4okn eRMS -/g w[gt&jgWHSC:x ƪjojJr|ٲ Økۃdjvxh2^xuzcd6 i,1m1suۖ]u5zm[䥛ijVHS~C:x-R2ԉ2z^D +?ck+KS~C:xe'|_T_e!NMT6z}h;{}~eOzUyeX[r֊N*1S7JΩ@6 +eU"k Cf,:Vfg_joKX+'o-~+HזsO]hhaU~r(hքxZ0]_Ƚ[NYuPrxPZ+ҖcC">:=c˳ܭ{)_˟ݸe[(.^^K |YLy8SyhnS 6Y.iJ،mgX-‚YI}>-VY,=zoQf^:/fijuXՑւQPVb4Z,8mqkP2SkdjTzX]Ce$V=CJXh}m@J&\%r>pXH\6FuqOc]&+0Lc!2f|զK*-:}Sf淪F TTݸ"O+@nȈc8Z+Ce8NG0qRhkR$O+^ 9eE!.+݄ GdrcacZ5NmzmQt]rIg vY Eț0P1%j5 +p8|XN͕>Ƥ X]#blx<818e!}trc=7fMDJ<㘯Y{36c_l͘1=}`亢^3)']ۭB[R<'6͂8k@Vxs;+%q#1]g,W>{욻1YHu=&%r"3 Jؠq=k@V3}QN`L;/#@i53&厠,Y&:CNssz׀SmT\UKi˱3wj&r~N+{UU]:$i2]&E2YPVkEϊvvY.Yy}3k.c˅b~[ܲ/KŹߜPja6o/kvԪdgVc9k@VQnʕO犅莻NX:~ٿ Vs\:T3vrNm-1voq3.ka `,PCn ja ƈ311c0c0F` `,} `11\ƈ/1a1111#^0c0c ` `x311c0c0F` ` ƈ1[Ly7cW ` Nd7|nzcIm`vNvC.W<=^#5dRIeۼtAuk0WvC.W=^1PϪEB01` !CB0!` !CA` 1C0` !C1!cB1!cu"c3x,;^y5+^}cotqS7 M;(3{J_GGK=މt{kkY|!f}Y5ciS}h kWƮ4"kq,mc0c0c0c0c0c0t+n4XiP郫B.[c/alղMg2keqd[l~t3欂1k{^YÇ® (E8Vsۅg&c olx cΘ%݌-{kSd痃=ݞh/g~^W8rAcɜ\:+U/ycId~^~ `lƲV脉g!dj_O6?elV֬4܀dN.D6BX_?Wi+y~8{11}|_oxN緟b6[ȭn'ɜ\ 76Ӫ&Nߦq d#r+76ʲ Xˑ͋ o7\N4VPnVn`2's񼤺r.cvwzHuNN:W0c/kr93dEQ=) JEl[236!X76'` olx}TzJX!1xԟÈ` "6y3M'` ` `l} M'RKa cOÖQ^1ߩ޾oUfs-6Oa {ͬ[[f}'zχO ?C1 8OOp1(1aOp11=` "2vK-b{;E8VLĘw1 ĦU*i"Mc01y:MX_5c-;}:Im|>c01v锅On_駣{01<Ǫcl?V0Z*EeS#+w` `,*cgg3f` `,ʱ"+M˦Z&%Eeh&G4Qú"XdڗW_W?'X1ΘoVX4YL+>1(0c0c0Cc0`,l_dׁ C?C~ ` p`l |c+jMzx1c0C64޾5n1XPW1[Ęn!vy1 Zo+-43csh[ƬSb{~ `,ܚQ86|c׽1f1 X!kk2+׺ÛbQ%ެQ` `,ܚ8h̓]cmc+jLtt;r:Fi#Ɩglz7O 4fқbƶsS qozScN=D"# 0c0i=nO?fצ*]kmX~.؏9scmMƄ͗is&]0cKZ`sXw0cϰvOqozܼuŧc5J}7]jY>y%rs݆7i3 ~cŻflvNN:W0c7f&Qm1cYFn",fE4-,7(K+ݹVKҺMͭD6+ٽw}#*մ=-e#Rآ>6M ۹ɜ\v&O.DK.Yڊlbњ䅟ּ'!Q;L1*M?vsz3Lm\v&VXLwfj޳~L`Xc3ƫi ʀ }:>ɜ\v&1N-jlp{魺ncEif[ɊdRZKcAɜ\v&1+S}ƆTjr׼wSnKѪ`N%U36XY2B c }t1Yel-|,?Ƃ<t16ֆ1tϺ"1E a `,5| ` `%<c0kcPŲ8ml.w1@ " C ` 1c!0@ ` 1D@ C 0c?` c0l--,H 1Wo?Nux3vV^l">]XMw RZ'!cvWRuDwbMV N1Ǧi0Lj3'|=m[)/w87&x)$yjwsVz;dgϵ3Rix3N&ژmSU6qߘ2bά|0xvcȤ/H}NmݔƵ4}tfiX~·l^|UD6NYr[N[[Zɑyo_ڨի_N߲6f֟Gwk޷d3`J+YmR)ykuv:"L>P Z杋9ci/;,&&Q򫱑vBb?Юtԫ_k*Zi"q y'^ Ē]I' RE IDATxOheJ}U/nXJ1༈WSL)I`YIQb 0H~ yqfH h|)N9RWye>73쮝+rG + `{̘'P{!yzV~Dg @ `mrgg4GЕ;skoN @H\Hޒs_Ew?]}_I`UD#Hs6¶Sh}汻x]+8V§_; G̉I01OjL@NL`1 {{K{G<6q,F=fj"Դ"NPc.%PqҶZӡry[YaS8~=GRlֿ:lc? 9l{ӳ2gnr`d1тu ڐ`XrtRE@UZRB1Dd՞I*ə [ ֺlg\ޝT!cyG {UI=S7MGr}` #'Q2; kQ}Bll,&[Ph uԚ'Yp#@GDkW9ɑ :ca seńxagu"&q1~xT Qq?)fpPdG28cÁ;5Du h])pj}ڧ6l{H7WQbk'HٱoLGmBx"CJrTn\FI 7ߗss@~J+"&qQsTf.gdb\1*BnrвS:)͔HuTr6󁛈e~Ą6*ز+ز*w+'eɫyZ8-e n `Q Y‰1ק' b#vZc2)c}!Z5k$jOF<ȤK7+ݝ;f\%%ujyNS6 ܰ)vm:똘!oz= bq 0vjϊ>a~A3G=~6~'GcȦs?18! IX)uá Vmxt\}Lȭl08~Y}LLrƜ_74M5r꾏Ur_XOp6CxxvPSi"n սiAĢaiI‹ 7>vi5NuGg&wVW䖓Yqtƿ+&e1CstZ5g%̢҂$xTNZҮ-w 5˸;fKQV[I Ƈy^}1?=yMB(#'Y 4'CU+| .dXD"\QswSGUd@0lcrJ #q%~-._qF \cgoE <&|&A \~K@MHrP=& /4օ_; E. seI7e|ʠ~xC/vNQ鋑XӯYh(*tMDVy^'Xy,rn^f2RFLb5(66+˵LfaȜMؔ;PI7? Ax^\J<=:x\Z,`OجǏO!9O:M[{/0o|SM7˼oIZ')%Xnƛ7vёXkMtQ āПe$c3tJxVo{\³rTΝJF<V}ㆱ,UHQ/8)<!2ߜNSKqcT9+>>xpПؤGQ[89)MONNW`OT-U&K+ϼ0Vn ?"\q@t;xIbcj"| kR3:<#kҍAjD.#b+ktIXV=`S;Ŧ֋h6n'^Pi)"\q@](x$ci"| fQёzAjQ]>pi\9}u\ |aj+ß^8ϔ(cgǢ?༿7B;N?˨Z 'dTPy\o>Bx! "%ǎY}l\%x1;]b/mC۰흍1c˱7vtp1-9%A  NPr@vc "o\!g Rϱȿ|\5w]7wxs̬o3BŽ-~ax[A|=3٧!sqCǠc>ozbqͲT͚< '@oOCwA)*5up#IEd87Wiwv4=n؎ t,%iǚMg56N\$ikP -/HR5է:LgHBD ld2Lw{cTL0́H4K;͝7gm@*rlssoΞْcnBv[A*M"I* Y'$m ""9[U[噙K4 9GilSL`_!IRZޚc kq<M[a=^sl)"CgT .Kʺ(E$OuԜ%l$"* )ʎն(yIyCЀ`MieB:B}sSPF\*&&'''LRjg0.L^S$v tT`6&yL/9y&"bɆ=>Kq`8qo%kKOӥ%'q_U1dti=ML} ND&:٭y[*;76sD&S`@`9ӱdVq,KhXkG1!Il6;arխ;Q>́cط6ٯyaǦ(U2U1 ܭ9g{Ʈl:+c=Zhpn0g#y "cH"e@u%GuS": ;&S5 6G88;@wOIkfB?$qSUL>^ڃn2@^uK~g{U&ay[JɎٲ:6 Zݸɱ[qjVI0|GEaXNqb`cDD2ű,햩ln>jw8yQars_ҷb[ؔim^kpHCӘ!xO 8Ȏ=0*c9db8&r/^X-ҮIQt\*%cr,9F5u8x%p1;V"tk׈KұKS+@J&*XyZW2yTl8r1;JVXc Tc1U2k4V-?[^~8iˆ@j3cQ>o4Q{`){fvLhezZ]?rl^ Z[d4ECvc---a=ă{UcX$%+m5cq VZ* W/-.ZO$]U.|üxq 7ލ;%0.I)jA@nJ5`ݝ1ш]tLB*dEk,kbƷV|)1 "GnVbXc:yi*epE0KsKI-qL3gRʱ)s‚D]Ŕo=/>d{DZyT7SޖE?fXֺG__\|zqwbc1"i0=~Z9V:v 7}12ұx%F8l8fAFu)9F |=r%aǨ #9ЮnP:6_: 2WWt4`d&!wu6p'QOdԒ±WD{=p{(vP( ޽+׹%]*4&lܘ$y ` }ɬHBMH\: 9S4`(Nj[XHy^G8V\8A*gQg-9v|phmB[Р!Z>Pe<|UPb<@0;\ u pm>N2HKq"hC2P֙rqH(}Ecqoh'x.|8Lmı/TC[sl<@xxӞm; 5=Wŵsf6 [DfOW:_ҷR&U]fmj\&K*^2Iܹۛ]g(i 0el}sYqWCO,ch>}cc|_E'gqUے;q8]SSSQUQUu=*^ji޵fS'8D r,ZB(cXKV}Wofq&ۿyolY{"<'o|Zk.4=9 XcnmmM={]<-1[ 5<Bitܬ"pa7olvRx_,7|s{: {3zGnY?&;VTO>~ZTsƊLganbpv<2nWhRh_#=tܻ[x|~`<Nt%5||j<`-O2O9ʺ*'ibeXlr | MB2®6 Ǔ[m;R'\ m㹌ڌmy1[bm-ܡbMhn2p'S)ghmqh44rniw 7Ak}9h2$mPl;Փc}[cku 6+,ŭ\6wk$2 s/۸I2(IRioj7v|?& 9ؓzhJl쌠N?CITH{ޟJ:D;^NP=R0v^:R5 FTDgj!sl?nj)1cPj4 _A,U-T{3&c eL+c h;Kc/@2vL1lA3vFX XV4$cVWc4c DJ* ҝ Ed{t2ϘA ?X^R]". *Y{P@,` ư26@@/&2 1v Nv?&Qt 5H2r.\8CX^1A~ ^/jc`TOdžBs)U~V"z ₛDىC1DDEoWWIXH mTƶۉ>%cB;&&m0c4cЉ'̅<s-) 1VD?BD2؁ۦ /X:h;񭅨SXGu#p6 ?($) +S~j8)#}4teǎ׻otY˲FRmS68EE-\P$[a Cpn{rcRM747]"eC4E ?Q׌^~}X ׇVZf7XO;r4m'*n]2h/f*/hfL+oWb#1ӕEm%R$SH m3\v۟Ew@v"5dH׿e1v,cEP\Ȟ#fNJSp>-Ye+ 1$?^›^ d, ۩Ptb>y 2UX@$($AlƜwww (*Ƙɱr-^QixȔa0 C6c:MA3hbьu$u`%-f4ds+"oJZDfk7 {1zL]v⤰*C]7"VS4*`&Ǭ.L``Hʜk[4fʀC'';[֌!:$~L)4eЌ^騟ށAf{.=\'_yTAXĘ% hE]:k Θ-Ha,s1~kGf" mC<]0*=$ cB #Mq^sES;Y(c@6׎LZș\Ƣv[2֪{J&:\An}bߖ߭;if2;5o,⹢%4c"EW:2p$LO?J'3ODX!^\˻^M/Csj}[ VT 5Y7V5NBBmLj:IeãЌt|OBV߿DW+^/|\glerd#396j+l]Kƙϸ8+?dfЌ5)vl L<ޗDs3܆'6HB'Y2yJ2&ዷRP c(kWЌ͋aa&窞1k+fUB3V6/V)n動^$QczXQ}'PJ*3-C{͘2;EaȼT)M5X7Jhƺƣ3"f!o 'YZc[Ycʙ_k.CY1t{jDT=Qc&elV!&A]}L3V~$L](cx{<=fT>ytBPP a0c؏a?$nO۟ Mps鱛J[xbƔ%KGDb/Q팵]W+@w4*}q_>ꓨ,U-*cy?cz6ǹ3~4eqPU~raOx IDAT w $*KUK=? OEt(fzoS a_{raL{jTT+ٞr"v]@ē|S 1l,(fAfFBc+1ӊ0Z2h??*:$Cg~Ʋ82"EDLiaTKD*&ag*<eXxiI PfkJAE&P~wjt>V<׿۱CHl'Jk8{sg$M2 %c#r܏)Ę dRdX@c89LA:#aʌ44ƤaLk{zcɮtFB͏iecR{2K63JƘ|9EX0&'˄1=='#2 lWCƤdu{Ώ%ΐD"sЬxN?d$$r2" ;g.i1Mf 2NF?!Hn0 K\SI̓ ,d{<j#J2OWa%TwKIaL!c{ ˁ{0K׊,;M}T wx#͸6:pʡVCn lr=.i#]t@f Z͔O^O)˜^c<bou1r cBԤ439Y[3̑/ݑU&rxd6Hv7ش_5Q]5}u`!69Q5[t}cPǯf O?yBeؚ_q?d`R+ck"BYp3gb뜥X~<V BdA|F܃gۅZ])ZIT׈**=9cd,dDD8oUwcI2͏vJf@42TrlfAaBl~j # c!&K|QVBI!Ky93tfb1&C>*1c{x6#TDV'ZbIb 1B;vV>ØyqŮC" XUx)ꊳ+vr$;qEwUs^ƔGhds2dVPjS KTcm1b.ȍqE@E+vEцWBN1w י!ķ>)GjeL>Øl׊J)͌Pcʨ#Z1ՌYZc3Cc͘Li~LNcL ,l 4^`X_ϿhiIǘ< (HnͿJ~R.Vҩw߿;11&c ʘj5)c#^3$_ш} J|{:bU΁~N1sFz>)KVK|rBFoDK{FMYJӏXj+~钆sb}RlFL|r1B˨c[AWPֆ+>Q+c!4<#\[XR >' y'0655 >s-A-Ip-{ D8\,Ex~ bRڋ. (Sm^*fIh~v$nUL &-c/HOB1v4RęVƌc11Dc ҏ5K/1l~쯪M<+19RA/q>Vd,-O,a,g+B)HPdmL؁]+)ڲZ*(cOP~3FQw#c0 gc,CyL^F/~PMjF5 +?u[c6~kO2?&'c[măͪcTφ=r2,+ދ^VCo)Ę% 0Ë!W*cFB<[`{ Crq9ϟv=ё`'pרzᘪ.N|YWM?UΤj53$1c2bLjc؏O ؇#x9BvP!FSqmw?kHvs혺d*b F`-iΎsT;L/*$1cXš"kg1cFRp-hDFH.PL#fCè6ʩ^{9V1BC!PQPX,+#*'cd÷ &FlLk7'Hx^xHc/˺&{*c1c<1VJs 1Bi)L~:/I3)Pbg)S'45A!:75AalBnGmsȅy3=U{OJ0 sbc89ႂ'7\$@+7.hwFY22v }^+R1%ɱ16bzО4+/qJo[%,SOFBK<؈{YcURt̳>x?vϨ7vωdžoMLzZ F :gg&JqԖƘc!D"sЬxqG „e_Kićt4]ixAOWՕWDKG&Ҏ6R$RbRP%}yj2byY0c,H(?A~HVc}31ws|8>w=_c9Ҿr!#֡:rf,jA3o&BU&?מ'c1XV~<ѓz!# c3F2ܓ =c~e|OƴϣAKe6sf{4X W]M*Ɣ,Jf wc@IE;sɨuk?!wO1 cb2vɥ/uIceOvʅ"hJ V c2֌~ h#i1Js=i{[ouN5UaF 0+JCIZ">q5tF&7&$^waŘώ`#1=JCixs,-D" -^5Ac>zBH6?"F1f]r|$VK%$dW~"֋1͎^ S?sl ec,[ `Lf<~,cvUпG{b=sOc5O>[x,q1.{c**[B%)͂:}&cMlv&<.feIv^g&\b>!g K+r 3Vc1yc1K~ƀX0vX-ߓ@ B1X= ǴXѵj3 'A{3h˜1XYޓM&2YwǑN^<~rj Υ >ce'0213~(DI0e)bL>;Q*`*:>(&gj݁?|d79<"dAi1sZ˓1S* {dy ?<Фgǜ{{*WDZc&ǖcr1 c~89״cMRߊZJjcNlӏ}ǎUG1䥪vd^I,yk%OJ`l+H1U/t {,}zs n[,G.=tMsa^($c7cZ,` tc9vj/x&UGveS{bǸ#vG?0o<׾Cp/pa^s_I?F/Tw)[cc->}e4㞂WcyVz ףz괓lNbVύyա,#co4VcےƂ1d 01jwz0)IM6 >w>ؔ:PySFNJD;5 cL_X]c*0S:C{o^|NŌռ,c$bOvʅ"hfDL G_e06=ic {za5Q-mW|^=ؽ!/а{g J1F!VYQIzwB cbĔc,D|W<ټ0  \B;O[v:oDa0=FÂj^&Xc˃92U AG5fި3߄57KFJc7m@JadL1cl%2q,-D" -^5Ac&CTZBH6?bp~,-NBRaQ-3x[Kb?NB!b(#숉ڜ%0Üc](c16wOi|Z9h c-<xfJdh'HHa I d M&lL*ؖ.P(8\Ū0q`u qdɼ˦aCD^/D}=z/}1-W+IZ~4+gꝾ.5D2Ƅc1j;U)xRal}}"1yɓsdoUz"rS:y9e)D~/}< ֚ F}ŏsȟwW)+rkѷ/іb(~;&Fb킲`oxBW'BcRsΫiġ(K1O$e,'5ؘƌ1P0 ?6;l/~~$0i^0u:.ƛng'"m&>]ti.U,Xb(]ƙ艼ٳݏb߃4Oof&LXV8|!!ch3V#AE8bHSx.U4K%xcH\X2~N$1l@!P`'ܘ1l@;,\Eƶcİ1͈@ŗKO;&I ӊ7_bcQ@n |SA.v ۏjk<C2+!}1İ1 F RyUabXֻOoH3Υ hV(\\65nRQc܎e[)+8z5ߎ!&!cϪU[qL6cch hئub3bLb7Y"c[*ʠ,l1S&69)`U7]-j=Fi$Lc䚉ҼFirrQw>4gXbHӥȭF/4~S/׎Z\__o29YYpZGn.]>4#BP!W!a;Ƥ<:r7]#4ئOjڊ^-1vnuyEuzIGis4Ca*U]bF ^t5jc!c n~9bc*l}[#l&prQoBmDbZt;]^1-1li_LxfjpX 6,ꊉ<{b11[pf|d/vqcfCp-j+ac͝Il IM?W5x6C,Lޘbc'W&02l 1ycril/O/+#1^l,1Yxc DZ-5F޽cҋWdՌX@t1Bk$~v,9O{X1 Mr==6mL"< 4{Ш+ՠ1@ЍݪX~!c 1DlA7V9Xۍ7C,L1PvЍX]2Sa쫹 (AW߼1+1KXl o^}!7X6*cadƤ.@J01Iac@#;l]W\Fzqzݶ;2\G,L2l ,c7^ m7oۊ_6|=?`5,=X-v)Ne;B5#gS6hx׸)=_YY^^^+6PXdXX o\2<=}E.̔XGO@_FnLt T36AK C,Ed ~dzcLKim4s5kΔQ_) cL#R?1%ƀYV~C9ڬ2 me98Ox,dx,--lL2I%&cusIWJnVWϻ7JI="1k1VmlfL 2VSK 2.)d#U`4fRfar0#S5,*=RA>"S8dhKESfݗ#-+BME}"~E1f 1zw ̜ѕ>N7TT= ?4G ̽TK$(d&+e#}ؐ|Mz5ֺ1l  ܼ1sb! `,k>r21l v,tA7j#6o<m, ҈ b+C;BgֶBVъ}aF(4N`GQB DA@c# P 5#kıcps\wϽ7gsƼ$c.W5}+'Y :썸OpT)l&0H;tYbFC׾MW"0Ve\Y˞WA$GYQƤ~1`c5fٻ\s(y`P0f'.l4Y`8ږE K~E^)QmKEov)Uz`"_p]$=9_[Ę U)&5@?,^~x]{4g,UQH#A}K+(0fE % [1+)JlXTuꎃxkb67wen,ΪUaL1h9N]KVfbCaU[r"Ɵ_>XmGW\ Y5c9Ưaʠ j3ץ1tHeL n`bl+Gھ5aU9wRՁ13R3Z;FUɗf`oX_!c l`Ir"g@fllRۘ{)0Gõ~!MRk&yzc1<$%1-c]\Lp]cP6PO 1os`&`l'%3e|Ǔ;% # c fo,1VK=m7TZ2c:[ƏjRhd B0vYy+Ɵ Xb{Pht[c[Ύt.1f[1xP? VsјG̘1c)9 (UƜdLDk(L4v&Zkcna[q4j_;u 0vIy,' ƚ1$c 0vIy,ۛ_Z1[q[1`̭e.no4@Yox106_EUcb1`mu.b̺(0y.1Vb1`k_[kw c.ƚ5˵z10Ԍ :˵ ~10Ԍ Iٔ+~10Nh˜|"Xtߍ~10V;FicaƆP1I,,$`|fk4 cGԿ !>8IMU9s^[b505n׾n%jcwOFr c=0yގ3fb~{ai`5`c7o6Ș{2桵bVݎڨ-h ZfvVcP m26&ڳcKv;eBI ω5&&dȆ`N[+DhBKl5oK~vK{+4IoC[[52Oy(F,@$v#TP8◽t ^ta1%cC;2qt>W 1\䜦GH5f4K~{J'JJX 39 Z]zVs5gR "Q&@H7܌mys,lm3gXh(\Z^n|ogV>&f\v66`"SX[HqƎ{rnɰ8T~(E-hsƄv^Vc1?&j鄪Q cp05T~JŵP&RbGKUfL(1"$` xSaqc+$cLHhhqEXxV-(  !&3圵"=1cai\W~CȜ7eU`'#i%AM?asJbyw5<<cBK;Zڊ+Ϣ^X^fl;a"m]Y9WF~C<=26 1hZ`1q |t`Nƶ#`[#YfIg-2Fcy.c41`I c0c {>ժI(x 2;cbCϫz2XVmR>UGkc^_t8c~45Um6(MO_Sӝg?D㱷sÈ.VBܜ9𥙾3sZB㱑Z:P~4b;GcXƸV`T& &A,L"l:rGeAQZTtܽ|~e~[>x/3>e{6zR|bh&(WځlXm˚-Xmq팽 }aUZ Ɗf41lVj36Y?S{7=_[ 6cT+Zcσ+=Bee'S#*--Z-X5?3@"+cH,4:cg[٪.bwa"cC,_K4.UF!-u:Yʿ?~e~K%:ck[.c xcJޜ$90_b[Y>Y=6uեJ  ] uƢh^x3,мbj W*,͉sweL`@bLY p3&k?ZccT]*7Hu6cors!͆b̹Oot+Z7ob :^Ǔ?Z*`#G۲~Nxy >R^oX1b,?ۼZ ]V16z`Jm5b"c&1Fcy*1Z5{8+ؙ"4+ʪ)wI0*{&a t/hӰ$bQ~xy|,4+ׇRwy+)1$` 1FŇMf<+B29j< DEVdP@p!ƈǞMSW;͊MbAp[=Ȍ1 (b Ht1l\QP9g9KҬ Lٿ29`(ؼrӽ"\&J6w]*bl+;,xߵ$°ر@V+bT]*b,EMPiE"[L#b6.՚{7=h:'1c j1 "&FʒW$y  Kĺ.UTtNnkEGl"&גW$y E ڌ] \Y|"[L#b1:'6cwEM|cy[$5 Rbɭ]+Xcy[p(bɭ]+X4+>,oX14n s>OX*iV1:'gfs>kEms>Ƭ:w!c]KV}9HǘYkͶޖ:2tL_ߙMKcX-X9cn_|t6X-)"w&ċwk9x܎7l%p1F5,cY}7mS}P CŦs{hBs?aCcq`J vA ! 7̘Y8ϔNڌJdD=ߏ:{'/IJI¶fsptg[˙wٶ^ZqD80 [py`FIDATxi VM!Y `1~#r{ރL߿qӜ=qcc[Yf ݊ߋs_A;߸l7:[|klqql-cqVt [p E ! c5߈d3,v)kMfCas `} C$iic, 1ƐaJpnb@0h<&+d62lһVz%86gE$?KƘҾg2q<`μbYCX\J>b+JSV[nW\!Wu챱a3c<{wy|ᜄ1fᕅuǟ+ܖ ++ a Z; =/{t=Bf"c`2W$GC;=F|f=cW2ڇA(<c5ce싥/AS[ˤM椔ASY,^9E9Ensf X˴c/|S[ˤ}ޜ"1KKK%o*oǜl1kӹPzjKsҋu֊dL~^[y_Q(\Θә-0cs=h^/I/DsRd8r䄗snf.cT]R_1֥c <~71֥*úTզ5!cŹ-91lփuYeúT5-c՞źT7BV̇u 1X*1r]` Wb]}EWRa ;źTS֮\17RMWģ0VeދuāRc]` \K?RqF⑿A#1<1"?0cG0Fa ƈ 1#G0cxcD`Ava ` BCz !CB0!` !CB0!]e"0n6&B-uc֊o#GN6|Bn/yjuZ+lp!H6Vḿ-#ux]g닸etxi[Lck[Uv]geqEȓC0\:En;n|XD͊ _{㘱նf-e>DcuD!iLVc,V'cb,j1_o<8kwW^mKl;N{}1y4=gNo{:nn""fWV۩wRjG]bCH:So~itcai_51=".]%YL/79e4ښ"lvl{&c>`1޹/H#Tol*7+_w(B )ku'5L^ Ob [ʀ>a}b@ͪ99g4MP(]2 cc7Kx=ꀱ55ܻAeNsɽ/)-㳫F˥L/碙9\&3Rl(FL/r)[[sd,fm3҈^ػFɀ' Ie+DWڇkC#JhdLGctHtj]xWK?t.e:~Ui T3"gFƮ^ }Ҁ0"3+9ǘU#?'Mj\d8fľ~'LZY5RYpgU|;kDm͍1`1 I#T1τMղyA23LZ5^#eJ Ia5 Izi`SӞ2w-"Kr\VvJeڹ˿)q;"q('Jo1ݎi$"R4>B'c˃1EŊ[2(҆of~I(*lH"tր4g2+ dHcB~3uUF|]3mofVsot~E}1k+7jfᘇmA)k* lꏐf+LZdiاviڎi g!n)cj?Zs,#k+qkehxu.~˾xx4G3_m嗹䚖i#A.* GcǕ͋Vd&rlzL< E:((^#cXEҀz,|0M'R*_?ϷSJeƂwzzC턬6fjHgu8vĘ>H#zGqŊx>JW2v>Wfqھ\Q?)헙^)!mX6$vn>ϱ#EKy ==Z4I +Ab;{UNzhhm׻6"!Kx:mƼ1;z7WeV:0c0$Ƣ@# = oxyn1c0c0F` ` ƈ1j1#fc0c0c0F+ю/11bF_`vx311c0c0F` ` ` ƈ11#f0c0c ` `/H ,ch c0FNB0(DT± T< Q2Aa,L{wv6cɽ\!>܊ d@j[l ሷQ<QhIfek( GmY` !CB0!c!C1!cc1c0` B0!` !CB0!` !C S;n{eC0k; nji~":1#kx㖦{zym΀=|h:8T=]]Տɇg뗫0ce;&ec~21uY}11юݧ (c[ElqqXlcaE;sDnJU]r=cΘ9tRXiΘgs6KNOK#ipY< "s,zq (a/i :j ZPXTJRmS!M(mQ{po켅}Fyꩲ$1e|SO;ln7` `,1c_Gnŀ+b Koxp"-11c0c0쩍Z)eKcǦnqtr'Q_i6)NII` `l9u!PƢIIƦĘW{uuO vp :ܳd8YZIƦg#!cugerB#0bp:0c0Ę|1r,+b_`lƤo̘v1̘d,_ZN/ %_mdХVu9>.BؤxÌݨ.Gcǰ1SUDŝ!$+ % 0cΏ2VTהpkd=%!Nr#4=oiu[xnyk34a,1 )0&NroO0Zty{1KXhyxa `,c}׃k$5u;hKoX2c8 ƞ-k؄:0:ȼԌaOF$ 0 0 0 !!!?"2`C+"!ks?!eΝ*vQ]%}y=1xzD]!uCHsM >BSTwk֕r1y{!U]jhgؘg3ԴȮ4mӐƎk%G7&)u;1Yƴr&c~!ƂMֺmtX>>We?wA//Q)7LK:0qOcϑHѝ \X)˭?FdC?̞Hg#K\cqq{^t >F(@CƱ`ӊs$==NQg#ԯy8$wXU*ڥZGOmQÌ1o۷o^Q^zY2+{y>aՋflUh"lju<3kfLX)跅ݹџd U"╌tE"]H[] c>gl {t*.zIENDB`awf-extended-4.2.0/images/thumbs/000077500000000000000000000000001522325530000166345ustar00rootroot00000000000000awf-extended-4.2.0/images/thumbs/gtk2-menu.png000066400000000000000000001115401522325530000211550ustar00rootroot00000000000000PNG  IHDR`PLTE÷ΩܘbK[Gō]IȐ_JȼʿUB]HaKۣhNxUFȼȾĺĹƻɺǷʾõYF`I|UD˽U=ŹeLdL˼½[ChO~{w٭~~{ſٛ뷨O;hZ²΋||J5xj㠠tN=xvspzws~r˯U?mjg~ZJrolfc`aRfN厈\YWdT왂wp_p⣍s^pC/OMK=BCishSsh9l!""a fwpkD{( Զ=@-:9`xỸ۱e0UqtLfLw~{Bx9(((#x\Z9knu޺vֵÿKAh[6 k]jŭ366SPTTK~~0+r) 6a)fx @tLhv fhs 5LAxڭptEg+8kmڵk./#6m\Q21ȹCnu:_WCzQ@GNQ_B;~n^ϙΡ: t;.؊.]~pO3N ޜ yQ^ 9Ρo::Z:n)?Y|nGoKAޖ'wvܔv<-7;rEESEapE7qIo;x|@8Tv)t pqI./(~C2ͷw̹y\unfaKS]eӁɡwO Lx:6qbG]Nuu5{~GCN47ݼ;m.'OON!‹22A/k~o͕᫊N/ vP{zPZU0162xDׁ,Ud`#am{d >?(<8#Ö)}2|^C ok.ou]KaG߾-= Kq1yܸ'CZu=@. ~P2F<E~ m^"@00 !O!r\/!Οg=6xQ(!AןS3 Tǰ4QmjM>+I!%@}{`qi9A%(ys֝V@LVjW@ *溊 n@\1 `!E,XW%FQ؏U`aĮ75qWuFJ#XZHa9*`B",ذ8pThz',A[ `* E )WyTrx<5ʻAmnEX&oxw8^1>n2^xS4Ɵx7A RSw&o,YT\ i{,+OV=~M*Kr5jS`xXq~:ݺ񃝓>r~`֙KSK!=5nYĹq<*QW-k=YJaTLdTvCv\jBC^n:^+j}/(1%NG|-$3*"cquvOﭞPǺY=.k15 R49`zf&׶bd#NFC*ԣ*&G٣WMT+QjZ5F;`q{rWh|EE_DowHTF*T=}ʉ({ݤ{hF!"Y L/YUѣt yh&c級{#+zJz+Ȟ,bd04Ǔ9ӏ/=yP4`f. ͙"#{C5QյQ|Es~T1W5=$i{}5nĄV+d j<+*窕!M)F{FK:qgZ/S鿸V=mh;?!òG[2VU<4]&2~1FEd'[g6>zP`ۣ陙G9SKV|DEԐmRGh-'M赪}b~xKFH>ͨhzJY#?fTڪ1X`j4Q|B}TuE>r4BUwNʚU2 MDOͨvH/߫࢝)ꈉjk=ŀ%"AId@z'EpM1XnOP=="6nd[lK}=aqHn mE^QQ/lMx<5#mge'.* bdz7A&{srOOK{n`'EA`L٠X) d=^ῡ\dX(݄&{Kq&2@2ư{E;?܄'(e{8)uQLT ,P@7ğ|^ϰbd GYz-]$ AVLn|g;/`GRGq}ղfXqd5q=Αkw.$.0Pܰg# ;Hܜ; 濺BDBp >:Af vz3:`qbcWg(3A/A+gh dTMS< K33;X!bbvQ`͢v QO:ʾ^3<*z40!vxpV"7swryӰE9ӏs.MNON;c:H@ p- ;x\|:{sBY%pz<9=9:yP5c2p~mIQ3$-?A^^xʨrk$ (iw5?x< ,3{=+BQXgoZ1Ab#3'|e;oG?L|睤\.Ķ u0/B0{S4=-uikiy7FgnA2r( Q(BcƱ+:{1b$Vb)H.Ko icff_?߻51Lla^|xzcI+LHLahL &0x L"I+$Fd۶ElkͥxX$HDJI]BI$ VdKG|ZZ(Naji$qC&ζ Hd !E,J<WRYh.o,T4xbYZY*vVvMӦ,,soLZM$Or\<<5 ̂;2 «ZUc5C2Nvt$' k%5B@{yF|CY$~+,d|,m^Sߣn/쑩eŷ*n+rVR/jkze|% A"^: տ;b ȧ(/LT:ш^PX?*c4mI:_"KohWV"H{k:_Xvb u`20_L@#%"i|=/ȯRϷͳEDdK{sz K~k{aAfd0Y`^x4"Ie'Dd- ĄhA|cȿ *;ey!Zn%30;&AdȚ7/Sx xSW&TP@d|!2LHؿMƛl~h!$t|A[h9` C<_ \N0ObJ,7˲X* ,deCG"jM 5 4&\"Ŏ!1uYbʲGzfAi[mzjK]VoK'\ʶd2d1pI*{ϖ*J_-)9euwY>qb2Ǔ+= $jT)˫{ڋ EoU5g/,+)ԵթCU[+  V)OVSY[X|K:w1ZA3Psa1\ 3TXFcyOdZwkϾGqJ(G^ާʪEڂ4d+%] c(>N`+ Bxg>mKW )u$n:?@zJ S$p6S_U1enٷ}< _(B$VmZE-k1`6kge2 8 d¶{/ ;!hpxaT<A?sjHyxZuj8wkh/owQWVt'*}gQըJjD:\ vKK @'a"h! (Ҏjk8 !v” `e;+t< l$KQ(N^2 ?hK~M\GUأt.+dh}&oy:^X!iu=)NuD,+uDJ,Dݳȑ!K soX;dڈSĹ CJŕj:N:EV]hI ur@7k2 *؂7ڬ~, \`$fX.eWyo` (Eo3#<ƫ 8eOl C`쿿8jm# s!LĖ~ŐWD41 ZKw!dy/rq:yŎy* WO+t`cC UfAl"4wV1PKlfذ,BVk qZ.宁XA<űdF) XلBz,zvԝ&XxN;W(v(XCQG2ff0%`!h3Ͳ\s[ZW;WÎyr$zöj s/8;||U4c(`6ǯiXȋmP!lM_"ZCìeq'kokF` ƒ%ق.~HS Xĥsq?x:d!-,@l'`AG_p 8j`qsbwZ u (_ E(Sl4XGH[ = u\gq✜˜66bJ3LὍHAޙѫ £Dz6>[纅 }lB&8{&8d'8|['Sg᐀,Dzgg.zi_;YHtB(6ށ/>(QS So0'wٹ.ʉiO8ȱkc dEٵko=2VfyBWm9 U8/.! L1L0,IfY@7Uj gYIr{ sLDÄ,p'8AL 2>$RI8"#I /rmu7r54 /AL͛۷o^_eRT4J{KSSS y܁Jyb=n>@֞mCcBhdBB[F&U%a}f7B;K׸J,[.D¤ D8B6o=gd*,v;W ,).oYYhf(tK`+ X&"Y+ʫ,ߪ+bCeշD ԕ`-˝NvXjnmH8?6읺2?.u 9 'zӎK>}%hDoo矟JKu?y"cҤW??N0d@-΃{/3!8Yȶ_&jQT)+uŵc ȒZnZNy;#ļ/o/@'vU[F>€%|͑-@[ .ۇ r7ڙoN$?;x˟|~.53 >(sOEw-[6١NźWz.V6ڪUmmY-F Q8e^.T/*41>cXq?a6Y Ǭ"KQc~:~TC4l,xß90SɄ|m@5deYֆ:֯HnVmn;|kh 0C|P;xkYi}~bΡZQ'PPjc$ĆAx^X2Ky08 u^RfNis04ǜMQ_ !J׉D׊`'ʕZ T x1LnGhz;]7nc}#g LBy[ĉc:Jb"d"/eO}Yߢ _ b:G܅{7Se1*egg+UedpeiJy554Rhm{H͚M>Kc#xTh>81b~wcvэ-{7-Bf9m䐕ebAy:vD3X1l6_Adc0TJwZ\[ljTLMuz EAIQ2__12Vkf(b'wMັPb<Zg r+oCpbvy*%e:QJM8<"g[?}5 qe%ΞJG/SLח N d8njwd!1hcGboOLJ__]>fO_zgp|ۆafA~%[XPED2ڳѣ͝X':pácӲ-ʲ?`ឦ1R:#^^y9xT'`!HuNN>0~T<  ,d֭w!qW4_p '8Bq\._:e7 k6}co{P(%?!/!8xQBb h57T,$1sj8 ĈS=^:~n]:ҥK9QUW54aB!C>A |;)&9zp_a4_tYUuȤ_P=XM>Y֝O;OEt͛7&a!vE(0^pV5I|`_spHH"qVɆoܿ`<aY]1y1"l T{BBl%ZP*6KHQ wbbq/Ž%g,Beg/*bϻλ&,!x|! ) r#T B\ʖJξZMȗ Rs^bz,*MsZ$ٵvp⢑\ς_v' LW<G_CHYHd/K̲81 r.Q6[)+U"IzUbb%)r,F'BX %W{lK UpCΝ2A|HEVk6vdlѵ!?կmk^66FU24Z%WZat>!FYϣ!u||;TU_CO'b ȇ[=o'20:G~t!7`v3ʷ5*tjkc[;:6vcW0UaKs:ŵLF'`҉bh˝FIAܝ'@QH"$H)ȵ6I :3jA(e]L n,Q٩Nώ{}ݳ 0~wJq~Ο8z]lhjRbcSZY^SS^œAdp(b>Op^5bTN27:Dvd^ZX*ɠa.tb.$iNp wȁ_Kih!@$$.ˁ 'lI|SCّVQ[[|,ds3,d!0#S?<99qG?0t3'ͣUǁRq֭16moAλwSqAlJE7R<I%op葤r"A_ RɦJjR°!,z^Jnvv^iMxr $D~ȿhAOԕ~B^! 2nz$onB׿_Qkelos'\Vu^шu-'-#v>8YlD"uK紐󈐿 Z u|ɠ^[߮h]ZnIfh7u6F&@LOaɤŃuº⅀yˢc!՝/ NH! (fY[;{.<{rف29"Y5| A9-05̳[U"YO(BU@R& )Nud@Z#*Rk@uNDOPdc19bp5C}ņMA Cd*v \LZ-`Bv5/HhSi8; & |vp@e%p×&6nñ@x%d6'hfTx<@d@0x dZ '|^gGOV;~rGٽO2/ i҉,B) xIC| oAWnƕ(ၒ Y3';o Y tHem۱m ;RXa"Jȡ*3#3#'HU S YQY8;n$x^bul.൏~>| ol |Hv oH&36+u%پc$r%d@D2˫l@2 (>/& ׯޙc%߃|vVJ#`c"v*R2 扇ݼyG@ ~e"9yu3 h!kL̵P q$.k޻ޑ:x$lB$".]RLʥALB~ ߈߾;F=*:e^uYyQڅNΏgG%Dɓ=ٵ-j+ vRO\GS5,DvW2LJtFGN}~|rg JjL­8\'[JeǏWBO7ELnu*l@c]. p&pʛBc4pxXҿ pe&d<ΝATϾ6^}f2N;՛.;7sDUaFDsp B'n6UgiQHZزB' x[cW H'&dr29LBٳg}5յ hD7/L%^:X=zٙ۷W{,dax_~%lHeS$i:$J}9C`@jE0B-!;O6YHu篯=v ظ.t/I:5~o,- 3 @s_HQ|~ ŊoO`!"N"$0 OH7g!BCBMh!`"pUP7^E1,h~b7Eտ~:HR C:5`CrJ#B>xe;ZgSk{*Hፊrz.W{3Cp{؃'9czI3%6[4Ėf>fK|p8h/;lP$r?dy!*C"౑Udfk(W[j!(2_YYW_oLeomjRwSUj93ڟ1vy1blxQ %9潡@) @ro|}Az==uYV(##e3NDiwd o齴zu=Eij@{h{hMԂ뻬:[dj.X})VY6#Fx |e,B'6z6{SH KdˡՓjeU2$>)%´w煓gӇ#=yt B ֕ rA]jVHfpgup|s /Mmc#m^0t: < -.ld"_ RcIj\^(hJ}):_oݲ-B> ED F8NP7q 3ܒyIG"ɓ"LM(!9@p̓H=MA{?-ze,}Utf~~|FA*~oG!726TAlUڧy%a!$2DLVdAȂ_DpB<`-ϴeMFvtBBZtcm {* xϴw<Ӫ5;ւ}=%OQl@s2 DzJ@|:ž1\#R v0ԬX }^B/lmbǐƞ |Og A4ˆT"e-@ȺpC(HﲈPXD0S ƞe$-(hJ&dw,RdA-X4>fxA!Kh:8 Ip1#$F.Ɛ,p'!iIã~87뚮ּDBH&uA\CpV|1O&t*B!'%BG 8A0x}G|ږ+Ejݲd15f"03-Ye[N6אS&`@-x,fǪo~ 2|A? z*"o,͏è~#9Y;RݵGZ7*o1n~lJf~MV) &$ڒE_!6!txDz;/y,Ybk(.XAoXOǿY3/!uwx oj1[mELJјC5YeYie`! EѢn& mv{(#O=v"`BcK,I3MFeC/-1(3i-:Q0B" bY,fFFd]=3wq]&֟0*fjb*mE7w[&i)U!dM{,,,}Aqka#oxݛWD7onF݇We (္p((WzEYpMm0bm<> #RBCըzKFe2j5Z5OK3ji_h !0Hąhh!!mGΌ-ua#Siiq8)F\_.bMDWEemJ_ hݖ&uy7L]-z5nqݎfnsZF%/6,t!{I>|02 ~rPBtfULջn0[VܒMziwZfkS*[S] tۅ/Bl+\,pnJ~z1c K6F.lY뛕nesV'`4VQ6 =apLm]VAnnolsY$K%G >y˂EZ $'_r#Ch|>%"[%|*n/8O,4i!6QaolwY2,B\ȷK F}!B0>jw> p兀L:2pG0rR Pmi鄠IHg.J=C?%,)2+LгׁXl SbHf "E`|n!tQ̭!Ha2Br/RTW^=ˊ/&g!hh 5p}ckBe1KscH~w m$T\2!ra-`0#x?? d A7C p-9SDd̮ qxXר^h-5/~_EcW$ BU8B@H>\@a?zxD @')EL ~5곗U59BF YHBa?\ gPJ9B6| 1PH0gsF E\&!6!!l|gkR(UD'!.7($f Ԅf!/Z i 2n KT=BCt:i4xByU(q.@5(&KFZd;xzS C47f͋ uspy @xB퇴mT^(6>9>!i/0RkÈFVBݍKR W,[ 4ET*򫀑+ 9<^jM❋LzPB圄e!YTŠ$bP֮7\'h&W#P3Y\*&\a0- qXł9枃:`@0ClaxPqKpb}ѠX[(¾,t"A=uvONeEPo 'B>'8q\)tR :$9z>.K@v&̐75ˢ}~LL!CbO1Z[oV,N;ADr*)&i**a5T\wJ%0)33>>3-kcB\cȜ |A]T==N3a&莡b60Ӯ´T Ηm['كN!aR9C;CR9]VX5 @^Z箏MSj2kYUq됴UV.B3J☢L&%!#G?g2Ȝ{Aciqz!^k;y@KC68nq\W;x#JioW5…X7SE w >. X"f2:K ~Iwϴ)ο9 :OOY.KK=m>U+MC=l6NedPO;tJG;r#,p>7"7dg!)9LCa!b1REL + ~xJ W$C xr&P@3PXtc}mm֦CMjSZVE)WZvT%ݭX mcKbMⶎagZ!Ւ vKZ3r hQr9&ALgEi>B}5o޷ƴlkqMh߸e$jK#7iad`#2M MǞ_F8aXt ʽ(c4?"t4s~Y&&M~.VUҝXU6wsNW=|4ۻ9?ͫƙa# ;@.ٱJ@=ILLG}K&*/[D Y1p(JA;Ȯ&*勶ElK]˖ _xGa-_0/w2vB*Ҥ:03ە{=j}c{ xs#K`{7:*kGgrn#w'pm$,;d&L#pv⽷ZE)BN~9JSUemdIML2[JyW RHZ(Z.!XN%UP˾T̩ՌJ5*=qTLB.M\0>*VJ{wc! 4I Wc2 7T$a*@؟OK؟0)Y<(1a+՟ɵ_9Rި@^UT+xnp}"V(+AC0Ty2e_tQ}"HJJ2*,FAC]T,(=<RĹJ͕4i4P)_BSʨv2iԥOe#x!;EGY\!_O>1 ȧ2F IYV Q2rLRfb! l4`gV< ;zFF9X&&sćGB{ Yʮ^ɉ+NJG$UjW#tldIFYY)CYq 0"FvKBY*Va甀TXVIَ0rA*xzrL\̈́lY,\b0%`ŒRZצ_8د$3(GSzʺ*c#'zUU9~8TgZԅkdills>SV#pN 뱔 &^f1l6 :V׌aup nh^CfU1֎Z߀o#Ǹ%<)M,Z[e)!ln 6g5Qߪ'U6U%63JKr$2J3y o~' \9NuY~Iafe/52^gQ) qFّ5DǻX8e甀(/a M;maA<< Qqzط9nzCOư-h d I>*i۔"HL~97(i1^ rEm'LRZHm )}@,J)!~ ^P_ Ufߌ#X3Ebq.Zr[i,tl9G!^+Z|Á` M!mu[?:6,,ű` x._&'IDmbUJ>IjMF˺G"UQ䲚d1&YI$mQmzI1FEf/H>NEy;IR<qAmAMpN+OgX;؋¾Dȹ^{= YKZRa8."D- q\Z%I@]MjI>+_Тnl{>zcXE@.cXQ!6Cvcx<AV@}Q'#'!qD7I_؜ZÒU_="]X3HB|`p#XK_<4ӀB]$r)< dygVk%%j6J')`U5Q"iж5qsxy ܢCQ8բF/ 5 Hٕ}l"NAth#cF@2a{kG|1y 1sL vfH^\QFdL'2,M˗]cFH1ղV%2Pja7%l#529{CIe1ܔ~5zStՠQhFx5wYꈮ!}^nwyòkNeȔ?'7x8L[Ln&eHTB-!U>)dUQJ$uZ$Tj1JU]Mzٯ9CmƤxCh(c].H>P]{!Ugi'v,aBѐ!6_tt=-!]x so2V6j~#B%_y*^!K-V&O-eMUYcxǐ<]c xi5-B z .ZO'#@FLKJ;fƐbg9 oYCpMdaA\q:rt\g%?::Ѓ%cQ![iҋTju[Pl7pPCÆkcxrN8u}ۻEcX,iDC)̱'~D{aɐMu<=2vciN \f̙I'fvbbsTG<NI8עMq ӜQ=Eƺ.7&O2C4MQ|!n,O\ns5Am?KP~.üvg8C޸S|۾C]?:È\3d8B3o&Յȉ:M]Of4<uЇ,:/,z ?h,opTTzԸȸ@`=-Nsro9ff3fC'*rO',uuˈӻHXlnؐy޶A 'PBG]XuЖU<6Nr}?Ft0C#RoFhD'5%Vk%Fāc%T+<ȍR#mqBGؔa%pNgSb񦊁3t9mGՌE-RZ/#+j( ^)II_(\(!! yR}(SJPFpLڟcl-_9LIku U(fktstu i)9R~A%QVR%(u0R&0W$E6H8mMZkGq;m\eQ@Ako@J2cNT !ɍrN vA,'%ذ㴾J Si71p9t)OVbJpERZJڮR•R&_n5M$O1+Ud7DY2hI%Ma z?@~<9 X'r;RA3P-"6s}A7; gGh FZA'>n-l}PSڦ&H%LUV g`M U-T6Y V"^;*UE,BDKM{^Ruxۗ GAp=l{k-`4-&iT$ 3ӆ%@b&O\ĹwN C&ÒMJ0PIsE8|&LAvz#{ugV&aC|O88 ؾ/ @pt56:ĦoF# Lpr3O%0,ݺD9]XK0ZX d bfyg1@Zx|^Kv #xL@5c`(;mxg0Pg>,&[-`♷}r"뢎(V!z ǂ DB;)"3 3!H/붂*P]8TEwU=@%7] v=SmBOFV9 Snn@ٮlURBPy  H;FCL`nNbUBբLe"HP4;q*RJg(,Ҳ᪖UQM BfZdqZ4VF:Zo ' BNPI y~b2?< ^ɵ6VMQFh+7w_5Uv⣵@Bc=ݚxZr͌ Kީ uS~,Kƍ AB;Pg#HӠ$0!I㔀<Lylocq_13Ӄw_;z>kw!7D}/ziWH&LFhs(H)bޠ"E#bupg/pWHK%u8 N$0[f};3cSdiн3].yKÛs+%Goxֹ}kDПF<@p?n>]csn~1}͙*#!NgNŕ%Dٳ%~.0`$x;}N_,3Xgi D UH 4&n!%L.Z2 {Xb|/C6h8KE;a;alnmAp)(:QZ -S_DoH !w`z=4/%\ɲcŵ{^9βb?;Rv5 Q@k3c/u;䄣I} cf|8>8AZ6q[nx0qq@}n4}\BpwZ͇==kC}%os~ݿ;i;_޺5.u{K%m@8^MD"a?Ry A<<)"`&`w͛oԉyO{7,~&ASܽq:SER{XvN{{#͉k޽; _ eWT2C,nm>g ?;܀s _ )3kpd, pDz#=网e>vABsfz,&gƦ;sҵ9ܽ}nTπKMHd:͝9y@o ʷvh@K4RJvx|Q6Zm8vrEx3"y"gnWӏEǜul~yLJz'{zD3eyh!y.3'‰#bL@Y8!yX8CV!$+mŹՄhYd@e%nn::_z& tǪu! &vPٻwp/6CK os /zѭj yph^].}Z(|=i˅UÄZ[OǍ &&+?EIJ_ 0bO|qbFL)gA#X|u?/@?6s!F@, SGCspI~\,0VkD*b2clIDΑ-.hnh${t_ضw@q-., $m2r#K:kb]I 8@蚄Vkk׎o1n\wK :YLP {=Ӄ抝5au/= AtZް95=z_ ogt[+;9 TFK%kbzb5\ZwYhk:<~.|Kt\ֱ:de_ofady9yp$y}{N 0=,DvF sM>X?&vHao}0ދJ>3~Lj.aFrLV:r>$}!$6HB0H_X!nIZ239B~;9yi.J:Jʘ(%[ q5pfWیT=߬_֤R\RLԤ6J,$4r4"M&(JƒZJ)74[,To$%g9" O_JIj|ݼΕpT:~ΤRRVu^JV2L٨2IlF>]O>t̷3{ǨT\Bd&(B0Lt_k'_?Q<)T |w[o)-G sGoMs?z2}:J+7% BQRQ.| }u-RPֶ( Ji@nhņ j?[\ҾMKq<.L+gCh@@LgLsqQmNMWgV=}OEϣ+'*R64^bz( &+^YuQCVިT\*%)5]RSYZ+ҏ,'+I **ɮRd%5=HU>`y@н+kCs/FbXcޙ駻O<]X޻gzv{Ψ92eo,it77LZBVTԥw(pᚪjnj*x7UORvUjUF˯R"Av 9QQ'(t4\2+ }1ߴ>b?[t 3?5잙q]+{{G+N?5= g׽2u߱8;8y4>]$gT}l0ҊkTF2-dMUҠ'I\{R2h4 ˠmTtY(8nTQhY_0*)V/ZZtֹxzʱ}Ane4G "9@J>Wڿ[y2utcO<o]^驫U3ٱOw *Wټ+jw}?d{R,&@ Sb-vMA1dD!#q5͐LOMz6; 71чC2͘3<o)TĶ8mҽ~SXU|C.{.Kn%򍄝}wנc{܈ xY+Ǹ5~.7Qנmb^\P FD;FY@Fe!:j?d6H:({&"Njmj=_a({"y1m1[ԨG`ys9X7wpQ|m|1X%N`:ԑQc$j܈ K]rWNdzI(eD}?b SȱLR5pB^\eȋx!wK~&, aV6hŠE W"樐#iB ڣlxSCZ_x4B3ǡ8d^`>iՌZ>'\kp rB-Kb%R亝qKAynqD2.kAv2^.j F)le8 _;TY6ɽWe|ԲO>SN?} z<'6īO8}r~tr1g ;Hu2rר ֗5>ZР:|u}K7:k#DFQirr҆ b\}U`2"I6F k oe Qb4"6DFQ*iLf%Qq*0 zT S+lEUXq1D D!˂Ab @RЏ 3T09bUJ _+*Ohyr@5 ':dP"P憐WNy%.A474RQ#=:>!h) 9~pRGސ0vWU}Z]z`xC)?aKIa27R! 6)JB2P21H"!BCxXN"eZLAs򐜓*,p!J֌rP|@Koڽ(oxt .MHS\=0&^Ued<}wm@ph0CS^^܍ȃ!7gA DsY.򺃔䲄`,ԚZB*: _ը?D(h 2y2TMdhdSZ#K5`k4BnqIg.LWi{B4:YHa5 N*PTH!8)t(HۦP32~D}W*BވDŽ`<9<y E׆ӄJkG a8}-Vd֌k[T_?N ׍K-2_hA^a,wQIvz Ik֑)+NWY:Jr49{vR:߶Hjr%}}ى.s!4NoʨB1#T 8 `FW=!Ob#ͮ/v2rZJ.Wg<9\LPv3RNfl3yVH - ם{&U{?9' ]"3"F`% q}10mnj@q Dx\:  nv '\+r{"p T"T=yMPXԴbO+:B0Od4l4H&ˆՁ(r*G%Vq@N)x_餀t4!Ӈ1Ъ}^vZ>0La^ߨœ*jr[!OI<2B"RՅ@9}3I 7j4(8JBoTBDT>BRWjuIB/ |xhx3g >!2GC A)>./!T߼T?HG7" ꇝ&O'?j\?yK1=זsR&&&'L$C E|rɎL"awb}Y O%\9vTY&Qw]ޗ%g|n:al,ڗ?~ӝKE5 Q#$v@LV5d2(""*!U'Rjh`x/҉ϗ≕Ԕ ǒJ8-K'ӟ5}d}Bf B[3ffa"ވb+("53tFn@~/ 0LuD2#)ZԘӪ,du%ց{Eﶪb@\Bώ/{.!a3YGȟ?.ˤ\~3I)z"&GwB$i'TfZ *veNsZ=@! +}ixA`ZȺ^̗_OS˪'c1dvzY/hyB=,44I qy~:C+ژݱx=C؏mdѡUHHIJg!htiυcpWvOoVg#>~$1FH+u49 hr9I_5( I$D7 ӅYw,ij=&.ߍWl PI!plxMP-,|P&gVu Jye5R؄x#Bڞu"F";NF|8޾ca. 'ymBJڳ4t|o5\I\We[ve :l< _yMBڊҳF|Ղ%D7Rfo䕫#DI&:`bkLzq 9PU%Dbd %uzG(:B#"ͯ D;9GB.pܨ"8Xic8ѫѻ8[`!8x $! #r?R?< Jv]^D!WٖwE Dw9iPՉ'V?[ @7 *!kxBogS ((QmQ[z-< Ao*RmNT{Y=n- X"Cgf>;˪ھ-څb67t2\l*Ұ Z}ʗ+tJpOM;ޅ^ֱVhC >5[ݜ5atC\yN$(r4RwW;O3Ϛzr#q q,Ξld΢Nѭ+ٍPϳTU'Mf^~{2YB/'1 1] +dgA2ɤ ۆ B,Ε/u!2pVfuㄩQ qzz6l_m/db_14+YEfT!Fe]!e dWj\[l Be)-եT<0Dceάe=3BuقW3 "P\. P AVTևlNp^AkS:fA6۰;U]pjk*]ݣPF0$& AS|fYlh@1ƉHZ 8e:݆`zHz tYb:Tg ,*uYv!Y]6ן࿼R]=tnL&bOTXK#< nxnzJ`Sw(;Ꮵ܏WG|ٹ'%}XbaU6A%nt]}w@Ha#Dȁ3 HJ"¬Q+G~3w֞OnW[˷|~nHZͮD'm+Ch\,JXP̦#ӹE~6y\JYB;67r 2Ο#C '\Lb4q$!FhwlIk2HzmXERY,蛼:̕xqF!X'EAqGv`V K(ps[3esSp@&^FK`v"etgTND #h$POtXԞPHp 6K(SZ c;EYBMNJ($$UC9G˒i %2$1}K^2\˨+x^U95R; U]00 o1I"r/ʗAy( ][GH@ ^V0q%BԬ"ZoU n".x(v`@S#nJ&h1TqrA{/ p^W?QBiZ|FԠ?B fu1YE⢠_Hfi>;UBŝ;8=ުkԩ|~Y,g&4;K Lvu667{T9>3O̬5R|egqe|8ۘ_ 47u֯AAaBƋ|y¾LQ!5O͋alp:_Urrf* no*mgHLmnΔ3{,UR|%7=V7}@W|5Q) 3kcyܬ/w]Ttqg59{N'1 >p":5;,q}z\v4Ot1Uo_mD$‹{EȲb߁EܬJpq`;:C` Ep"} 1kŭʱABַv-zHv% !,af 6=o=$P ctG(3p!Oyx5A}@3qH=ziCsk~c;/ݠa p~/IENDB`awf-extended-4.2.0/images/thumbs/gtk2-rtl-menu.png000066400000000000000000001121221522325530000217510ustar00rootroot00000000000000PNG  IHDR`PLTEҩ[G÷ʘbK¶_J]IྸUBȼʿދ]IaKxUFգhNʻȼǸ˽ɿʾ՞eMƻùȾ`IϞĹdLU=ôƼ騢ö|VE}zw~{~لZG¼àhOŹ|J5ſeV|ؓxkՑ[Cǝ;~Q=yur旗tM<䱮tqnwطսח~rƄWDT?j\浬oliigdƾoeb_]ZX^O͙^EfTrcTQOȭnB/p\{g}˱s^uGDB5?C9o]|%nP' ܿ+ZһK9`xZK{v㪵:8d07ҴzD֣IDATx{TS׾H#AyiHx*l $DB#0D"H Q<lD+*"T[nq8{8gqǸV^ƺ/|Xkιf"ߜk\!pO4\*gڤIIk߀"v@2"ϵk=ⵍ\hR~dfA坅Gj=o,`XZP4@Ij|dEM/VWzh1pgڱue"k~9HZtks<:S[ YNzmMX]} \\Hײkr#pRÛPw߭۟ޑ5kjҽ.HB_]@vM&ҋ&"B? DeқY_][Sswb~D?w i"gV΂#T< cmcmdNrG/_'"'U:]EV%+*0 bzFyz;>p(Ɏ:O?"c 0s_7\npPЈD?,:91<xR ]0|,( x n Q y6꿫X1X~cPۥ'Gu!UĞO5# B\^>ixן Ru@TDQqQM?Ċ#vX?뿂 FOO"C"BC#BGźb"8R\"Hz]cqcD]c@Ac Ş]PkWhqD`qh;&04*+kb.>d QŞk ;CP=ϥ A59`UCm>G1bR3QbWyQ?r(P0 ^? Q?x@ FaP#/b)Pv4zB CUC tnʚqX4?`!Npl,0$,5VCAVxp^^y\a!.l@&`yyr%)^.~+FR5- Ħ,*,Ů )s2V?B ՎUߗ+TBb ]bC {WR)4֥/vb YYc/TGY 7zzg%b|E(+4W1PG&E|r[VsW Ta=Yn*A0ܧ Xy ɮP0y+˅\@% GbQi!G--P(q^T}!h\/O"zBƞOO~>4سGϟgM=6 bǘxݒh뛚8WPؤl*e2buV8rcD)շdMy1x5 [;M^R X8xEOQ(TǕZM_+z\*zYMD\xsمcjѸÏƧ.<͉Y<JV)G2ܭ @/ 4JP*qb>G}}iz¥ 鰠okuO|DP >mV>$!Ҍv}E$6\1vJct8UT֫t kTmS.-qbprUM>O󇏞=|6o7O|ڴ˔u 0>ؚgLqu 9;R O s6V1[GcyAoغ5@:R ʾER);vd`+Ҽk/LCcjԤ&ks&Ex>TQgNNM^GVw蕴jyc }H흆_HNԙ8c A@?_~vǟy>}pbìɇtHKf^hj$8f2gO\Ш'}pA>t7`.RW10bƯZQ.`Fvh`z3|t3HN$lqrrv=>|;h10KF Iڡ,`xC Oϻh( 3#/a ]šUf"d! %N6BiG!'$e? q--IyI%xj"+tOgh <6͟ig|R[*ِcE=0Aݿۏ†ߘWF?!a䎨R]GFTƜD3HC߻{͛߼!z=㷦vwoC!K7B`r@,߰}g*~Kx3PYJӵ$ɿ{!{|1i,J~x"iA] 2۴IFa!d2G)ds{ v8AnEAD+ur1SD9d!Dt:H,"*"&7w΃d"|jQ෌i #272R6L&r<sv|yA Q mE0 l;1aosfhhv NBXIT*M!=4׊u9,!971KAl֮L'p;%𱂘u"(\|)Z.(tYurwg1y WJI͛ώe;'ҳ?Of<ORqY-F.LAc0qx]QS/UrT̙[A|uLvPɤgp+@qo9 Y0~F">|*I ][_ddeHJFt՝[^ǰ2Q(9ъ΄=tڔLbR[tD,;/\\,h$Z84 &AAȹG?MD"9D| IM!|SRM Jv2Э ,ժxjD+(|?4MD k߀z^Ӝn[[1 QJXʦvWܮl?IXtn%(J=Γ6:DdKD2{A0ED$|IY #6o UՖI qq81aW:o0h$=\*+nqvAO&'&+CM<M[m@Gsw&.K:n\!he#72(nNN<wѷQ_,mv?m-/OyA3diPOH4&W#C0! H甗2ԃ?غ<w d!a8#E/?G~hɖP۲28OGՙ▸$7ՙFZdpϰ?ů[*A&kh$ _쉯% @Oзhy#҅iOX \OGebM&)3|ˡ8t:NDd]T Tw#Bn^d4s6>)f;67%5O<Vf yVd*yQ([w 6 e0yy|4FT3a A\]?0jpKBٗe=[1f`eAx`+!FHh8D9Ǎ$ۗWqx$2}y :1tw>="J;S-H y-iuᄥu7q;z̖>n˛OCkT,5ǃA T:< "|zA\@'[?~%A/pu%?8TZ;擶؇-`-ֳٰ&7aQLEWs߉HESr Goូ](S [^Nit< !o:pVcrk m6m%$A>!x^uu%d!6 m@Lת͂-{gXlX mv" Uz:@ rY@~_p%ba}EiudP=(B0gy;M$|Ҋ:{,V>dǦl}6G/g1S[;hlxqga/mv⾬\'Wݘ>3~ Hx.6'L._w'_q rgka!9q\a@N"e !.HUT]wM6ȕ}ZA3ՠ+g IFa,-hXs &pӁCd\t$& #ٍk_a1ؙy!$ / cЌ0<| bXfM3I 5!`#c6I7=$=t2] ȑhokn=R_~HcNKCE+C0X, šF^L7J{!K-qÉ1ɒcKMnew0q'h[p8DĕꮶUs=0$Qj2Qy{򌨝G rGCdx s眶6W@Qv6궳v.i(,ڌZAB>2CL0ezvwPh]0OMx8omhhhe + Vq_]z*a4ɧe aD|KF$$R9ݘCT~Vl+}'B:dO@VReoz~n5 r~,ȏ-@z8cfBB@ &׉TG:ERurT! \-n) +7434Y^2f#`!'JG}ϧGUQq6lUÇ>mSkGoݮQ/lYhe&Β%n1у`~߰nk[vxdO'U:w"RTok%e_*˴d MsK%< 8\Bywn~cюֳ >%]{~XQ |Y0lYۛ&q㶐lZu.ݙ96Hg3IzJyFl~B " ,1doG\ig>G@>︬)uݽۥAEDvX 9sB[z `~}S\,VPQ.@{hCJNd<ZG'-|榙qӊ }HW0|O\gg}Q͙4*jAZXXC&z)P~ud=Tm/`'D‹H C4 滬}۬C[{oOO+j+AwYo[Z FYe͊io&xa3"{ϙyy>8~kjeF5X$,x o{/^̶"XYM;|Z_S79`[0*'q73ʌٍ;)Z:a \3?9g|r#ot 1wgf4c@@I X/zkz8-|"3vfDәXe>E/+oyyOPu,B;3 |0 {/ }cf58Bjgd,2ӄ6,ރ{LVJUokjLN&.+'ɢ/)sQh`p/;?hShW, =en7 ]yӸϵ/ܧn.ʅ튂z]| e9¢@C)/|ѝ+_|V=>v0.r(j5̩r3> %J}wdgf.p !R?Z_d{&QHe)4ik٤y}FAT8ͺc `!%`"JX\&<%Ul! GݷG5u{';a#K6#ZnTqDK"(B %XLLb04#XxZRz^vtv}Zߚf=޹! s~${?^>o]~z/ZzJf뺻åϊ['+|s ȡޯ:Q!~ (o{|sKmg1'uTȜ "B]{t}}]:z坈9S^ *@BJ I.p`rB޲Z%Mћon{ޅkZNT޺uBS)pP@wxHIe!e2 . ^5ϥC!ovXַsw\޳[pD33ˀ&Ĺ$h&?^lȄpfn~Vv: '$$hLO7ܟP w78@& Rq"bӨO{΋@$@K2zȀCrx=fI~h/Llj>d 0GGFp-G\|OK ! "=q:-9p B#@_t#.iܷ|cg~glD0^5=Fp .JmH5gcF0;mfm Cԧt IIoA*idY%N4-4%$nwROo=oĄJ}wfEA_:TAJ8E@ZP΍u-A>: cˊ1ڻx$ٟ) $0C`J5FڭNݢVuҧw 2٬}).!ϫ[!3(.Zڕk6v.Q>tѢCmxŔ:kp]a8-E}fJsAbc[;C}-sJdgniB!Bf/LZ[GgxU' \zI.ӻ2mn}H/j17fB;FJo;T*]ݪ3i%ڔz]א(#ҋoZ4vvvw`q #|F{n7_xrnCK˕Pkuμ3n*7'!JGZOr.;9 z{zz{k8ѬFFµ >"#Lˇkh?<* xa6xM%Dh-u =16_*D#gF`Ќ!TL to]BuSw8ňt'l ͩ<"ƜȤID!Y%9 ߁|[WSՔx2`>!«PX׈b(0{ G.i> i\VOaWtfG&ؤ&͔]Cw}Bll`U&A<RϹ~P克LJ/>||tBKnkh㽁+w+[@d:s #:_CCvS/]|-Ćs!BÿZO˰mGk7cjW61˃bkÅN}u~RpFNr95w'$R!H4E#^⅃nC MY3;yyHnǏw鶍#*Vb蔔ج4߇M20A**fww%V՝bAk;p 5Uk›xHfrSrѠ*2kb$zCmmrEoqۥB׫<2רuiuf)]ZNeU*Tʡ.S8?q,C|K#@ k )OKiH8}0x)i`WwCBط%q]ąT4.3^ZA5yHopI ʹ>Nb1,z&2Fʔ.F JX#.C!_v(,s?~N^Qw[zR2w?ZN4:Wp r ?DC C`#͏r6:I͏.@e0sQEU->GrŨ҄FfҨ#Öy"cOHm}K{Z$rH&rX|j;Ǡ: !wʆO~4CƫVƌΐROL:Ŝcb1Y|D{(N@)n/@yaiM3\-X1uHmvK>]5àܺq{׏B΀ọ$\'pjECZ#'a(oč~ƞta϶G|wdf0M,zo1Xb5(?  [-1i!L0wz6,D[ !{a}I)I}zGcDåNNԨo3aȡ%ŖS W*JH=ؒp;RF hgE+4DUewzyx+-?՛W{&~%@~X}ΎGրPردV`#&$ ѯn!w"BNvpy(D) Hfd@ $r tPEnCԙn {a)e <:vHFq3VC k"Pe@Y8M$x &g*,} \ Zz WL#k[(fBL/>zaF=i+!ȡq2G6;0S`3\mr" pPC@&\p))).9zi*!n)?)|7LC?~?h:9nݻq^eQpu`8]Y5.ÉڃqZ&G?;ٜ'՛n!%*i׻|v'&Z,$bNRtCF%;/?4]m}W?(؎07[_ksz]@Җ|Ɏo+izό)A1yc AX@t7s ^ Z { Uw>0)sTzSp꡸=?E@}~õo ?+r0!_vT' Ђ[_8qT])3k8RY ݝFl !<@`C! l[Q- DAql /HO\@s`MCN t5wQ!ΕňPaa#hP9@A$BVމ;wNU7q` 2*:Fd iIKgCPK^&VBS3 6A,,+{n<`# <$#߆pI!{df@*O˘h/N+fPnR?S\EQ'k >rb4ГHD Np_9T{(!Dz^ZBpN5@M0;=?Dxj 9uq G d;c vVϟ !Nh]%އ&gcA|-{a1psa9)!F;G8!e<@LVgN܄161hgFQnH*3ZbT"WYՄ[B'.}WI1+r|Za_{x8~  )hNo*| BL/̘ A> dT!Ib p/ BIdEQfG4R![e._kqH{tCeʕp!ݗJeC@YR8f a'#$ϫl^Z  p&{C %TY3KX1>K)7%]*55T$B ^/_W_~=ߜOw'0xJ[ p(>ZS2fzu >nWpa{q"= 0~SsBvl5qɾi=6̶!,ngvXhEn\e-^4 >WYj?Rw w@5|^oV2 x ]n dK+6za WXV(SϗI]1).rWVC6ڨQj!31hZ+\! !NxI:r f᭫͂x,x_0gɜϒg]fYp_ ϼaqLqsD~`WZ*'2>מerYQi0Dؙ+^(ꓻ]}FG|l@15 b/qFd/m-e894%`I $5Y[y. epɐ,;sqb6[5_‚j6Vc$دaR%Nj Ņe7曨[e@wغ YvESSVzbT8Չ6/)kP#>=y%!!}`F*Q#{ϖ݀-a7{yLⅼ84ye Q Kȫl %7/yɒUF]qX;d B*XV S3)n.*B N~Vl OSCT4A,^x dѤ=7 ,`!+";FTmiBK߰»$6+JB}&gA iϞ-&)Շ[`5ܴ iq#djʚ,Vtn>6lMx+q.6HlN6fTQļ )ٴK{@_C,(x奩ɬn6l|{P毬Z[SC \ZS!G K@X@O5܂8Mcǐ,8_qh`<n+k-i*jM\@N!ٯ Pl.G#|-i+8qbNL!͝e1{*f8tnˀE \i&JM{7cX~ӊ AWM@v~[Ax7H@ـ&n#ܙ!5 B3y. ibDj,*Qƭ}Gi02@:P,жp7zC0r  n067xuq$dU'&!DOڲLAcB." #$rn8IϦBN!]:v?^렀 ?lUJHf/GL#aϒ̐`.=ΈxU֤ /}w]#}yW< oذ٣9NIPƶ0HZ" 'y&=ڕr/c^!Wb8R"D05!y٩2>\%'o,k<@^zrmsKb\oj?!9rQA\޶hM=%ڛʋ!o45!~'Kk<4 +%. CKPonTTgUt6WUnږ_$'!e;Z֨/Ҷ75n&=w B~v믿 .k& }y/. ^1֜̆s3тXrHRd?RH{>=^ >"z\b6)NH$^ &?lF06,E,CL%Ȏlfmf*ʚZ OCYm&/nI!h)!BX{6*Ag2H&)r>+KhJᢽ>`EZdFk+6=.+fxԑრ!1iYl '$+'Vd|!Bh@izު MR)lz_QBiH&ZnV׵dnB8:!9·m> SW!,f% )"ĢS>]R@[쿈z&RG4$MB(xJdC*`O%ljIN&Zrd(`,+=/`}ȋ+mFʣtˌzo>9ɞ>!nsC&3B&ۥQYe"[tFs6dpT͉S>(Vgg"0&˰\'10 ZPCk"Ňl[8e;I׋1^_PNab$)1 ۽[Mc%s xQD:D)G E>ڜHx9 Ԉޛ(ڎ Ch!FB͑E4Z.(yÎu7|Ɣ9I>w`̜Xƃh($RB_=0 D^-]bnQBCE\vvi.失ix][O݄FZ: Ilٺ2=@ /s'~5*͉=$\9"/) -i 8\RBhҒV }*+<}9$h'vz%$ -zܪ*p`Ob9 IfW) J]^IE5Vl<$!eBBP%K,Y D{~6L6Ր(hZBRRʪtiYRu}&cG}jEH! m}ƒ W|f]NCD$S;,xz"-q WUoue. $z4jhj(k%m}>r /=ur ?uԬon>PΛV\8$&BW:2!}om[㡲L lvykHu(&S5貊\Lҹ=2^Qe1GLg`[Q=BSxHdBW vR7 ǃ0bǻ'5B-ø8dBǸ+B1z8dKl8'G> w 9b%fir8[ /'h?.A^9g)C^컿WqȻC#!4'*d1Co}@>ѴTb '%*wDIIEjؽ + 7!ENECO8*7:Ls{S{'ə{+?1vRN윜Cx  l%o|ڴzEHWV N.ʮnĴN[[G*J.NH'rhj?w@t>yeR3PMcR sBRL4zpZ71|jHS1HZ_ʯX̓^?KITժ]>c(ծI:Ҧm܃mFRǬWGWLZJ:d ߧӏsZ[M!M7~ !<7j׺j9ޙ'b"HruiU¶N@n2?+"~1'>j> `3gwēyi/@s_UoɂΤL>imj ]IJqBke֠Te*KxRT"Lڥye{*26C8ioluri5siKgu1mdٺ*'l٪I'DCLQBB1m8!l'?;ܡGЀ%vsmY'cF=}y8t~/G~H>ܵqHH;}nfaWj'(e^k?&ꋒz9' 4*MY(j|PUiI#@@C4O/yR'ZǼ-ѮfjZ;Zͣsynjֵ,^~ǘ,iNoE샎{sή?C{aA!CIAu W%Ϳ3?WS7/,HN~W\PШ.+S2y-7%c5pD[EW K|lytT܃)~`%jVPc,1=34,aPHT@]D͵ xQ >U`)Vo*̭+CRg3NΚu}%Rxe}%myQ+`:Ygus]UrY>™!vHofr4DY`Yݻ/{-%)JhkjRФh|-ZLXYɶN,amUW yoOeu2͝Yٓ 4dr9Y \.oY Q(WY'4dK^}AzF5N%ezuӥ/ˋ@^eyp(Sջ!ȶLlI+QP6}˜pB}~ӟ^H[ӂo.>§^~*NWpoe.]}%}ҧ[]q*K. 9]Vo,F0[>sh ȍ"h|fŴbopi@teE|$?<Γ|H4kr㞍|e2 MP5`_%r_vuBdbU9 UY p;s0t9h; -mv&p=Gxȭ?Q~SJ/un[K7<qLc8n#x[~$Tɏm5h+AkYHm.iHP28倲󕋜x˛Sk`{5D@R L">A(yO(2Hj}%$S|i FVC'TͻL4 =)zx!Kg]ax po 6J <% xLZf=|\4cxtsm& љ ÉgґTuP<;Hfi/xHxp1Pd.ȮǰNnPbYޱ޸52|J#P00Kjjkl u"X܈:d/ *$V$~!Gh!ȧI4dwà!X*7 mc q{1?ҐhjϿ= @@@c/iU1Dhv=/]q<4cSf*˸V%Fkl69M9'X%eZWNeGJ%sb ֥ޫ!G/Ldl"+R$zȶ@H1 .╎JrIjzǡ$<#ٜ_iL\^VW kYïg=SrHQNW^]b"{kFnVWuzP4vsF#K`)ǘ@]FZ.;c{l3 8avG6n:Dxr0 :$c}1, vEU~|>ᅢ; YZS-3 Og+4JhZ~X#)UUyٍ\wK_ѨȮ]+Ԑ/+;ͫdrl[?iQTJ Hzq _wӐB8F)̹qgE 1y 8cΗz ۏc&kJe3:ZT#KZZSa(U}NW;YS\EzQ \0SLe7]£hگ+ LBB4L;?\.uhdujXMQ(U/;F@jK>vȮ c1_TeU}<_q^LC_}pw'ܧ)1b%S}JX- 8Ʋ HXv2@:g >pp _]C/aX gPdO^pL ^PP7YMFt$l흇܃,f!+cYYRT|d[/ao:@y2 y҄q;%TƳqD'ohܻ#b(Y WF= JZ~/ |D]Pt~cxMcG:B N@?vz@]AG]Hgw?j8>Mmйm/:Jblmo3 $#v {$;CE6LC3CWRe ajAW -JkM`>d%^;Ae2+\o_Q]~vA*8.(T H76x1(iδb\DZb50: mZ2}7ZLP:t4v?wWWCtn 1`N w)AT@]H@(L@ ^cxw!FsFHO>Mܗg-I7<3%*R*NHg: s#uK"6EZ'Cv"LP_MMIB:LzOrܔQ:}Z;7i ԃunwNQZص) \k۝> } o4S cs9dlF{"_Ep> G5FB`d xj@tL~44}|D%xj™$_Y'xiѝ.]C{S'][_\tf^K\*Xv\%ިwbl@6~=<1\Iy7RoY HS,㇭yOjc% f$;~ܼUo7l Q9sш˜}#M6 tꇿ?RO7g @#8kQ-nA\lJɶ`: .V&W!? fg6ows@ueuq *0&{Y7!̫Uf8R(mKxJa݁//%3dT_ T )'yr^f=} ϭS8QAOA"+lw]v<;K{AthҀ K \A!lQbZ , B1pܸb'B@N"#`. J* 7A )0e !z։@xY[ %?eFSJ9+-4~74Du)+6mN\mZDw'2nd=Mb 5\Ii6{fif3:7Ũɗڹ7ϴ YuQ =sU7 -Nj"3w#2aL?Qzd9}$2䝙k4wz Xuε{=CCk]c 9<ޱΎ`oҐxh#Zq"եT[,z"d鿧J3GbC~w0<Z%Xl&Kd\Ym"H -}sí^ 5k?oҶz=Fnߵ,=ߵk~3 Hl3Q>dLEm=4𥱠7{Mx: {b)"ѕXr5[)O7}XG=˝jL(^fcm ÓRwexpfsxD4!"+b Iz7(iZ¡b zcjpQ͎'SLz8!:l]aѤ~Z=$MAN:=6:7@chSR!{ʍJSLf "zWd"Sjɑ:ܑ4y2QoզDzCsS:Mc,MVV+mR"Y -Bco\ RزCz?mlbbm@g@ #V@|Bw-背vh0p{私xt7  {H|?mboS iR)g;`}w6`*M[5du[o) F…ec_+yKþ2d@`{*Q`|5 ܂y-LQ%jQP) , 2?%с4(:c0pL!$@-  ̢xg9f nO* vg53? VFB0l,:YK!!|M1BxiVn:3=JP--yJvHe;1Du Lc3d5P3%888/ Ur5A |NLd:q8GJCmk|,c([=6jQ:7>G4wssLgd}X׼Z=؞@9 F>PQxOfJ2 ' *h#Vq~Afkўp$ǃ)x/i7r wvNN߅Yu]ãcͽ˹ឞTL?\ԕ'Ԏ{ N4K REG(hf8Ɠ닱 bq7|!Ctt,tu>NXUɎ*wa-ޖ{IzrT̃aiV%@1Q$Є^' `'&6XL&-46L_L@RJ7>4YI?@Xw;BaI:u7ֵ0c=Otu,zCrr tA~ngR_^d)zt|?? 1u/|+J?@$ TnNOcӭF+B2M/h֪}Ҭb[-DB, {Mf뺼ÑBMF! Y<QN RXh56خs7O9_(E@mmJ* E>\@(ZAwH+yA 8(vݦ(؇ B& nŔֹ·:oZi>R–{!!S3ZJKHBMzkR; a_L,qO.g[;$K}, ؀]Ǧ&Zf%uyh圕אD9n97Z<lRvͶPɉyxK]=3f;4[Y~OKO1ε< Clg{O\{GCubvآt<`ᮎ^@Q0y F;(ˎ~T_=9@懇{_ z;:-u&lm-QIPa3nͳىαN YY]zX3>' M /Ma lx|(7}nfvN?ԬA_e `Vp}X-/X)bf1-ESy,rb%,ӄJ zZ"oz/@% ҟr. w" C]MRei誄,!ޔg[OL/@Up r%Mw/ a@CEܿ(?wD?}4DwyGBQ>LDKТBQ0$ $eXP/yWe}rJ!圣Q*BFN sV S`5,iQQ0 hU~esWL:lS*M15WG5T>P*j(K(洁)V rvK)ch87zs ^@h|F{g;i([\_b.P v_ͼ4® &J9\V.rh)(V^梢I]uE94y,(BK1 `L 7Zs*$(ߝsHOZd/>m{ޥvɽrZsc5Bjk%ukӳŹR79YM s鵛9U*swuh{ʑֆu uʾ*s@sh{[;\҆1UT\w\b᷊s]߾8w~qm;m&hA$Anv䠑o8\aprpzqΫUvC5ΊΆ4qN9WC#l)˽aNsJiUqԩo3kkc=^nv4wy~81uy;z;;8;,>+۽w牢ق; 1i|H, U 'u!06h"J6 Akr  H qW$D&=i< /6l?uOb 6-o;72<_3|g>tGR[xXpBzN(F ):dX >ywBK'pE"1o=.}9{z+SX6;*Kݢ`7Ü\ap#RV#0E_6_3T}]V'<0RB;s- ^/uzǻ}cק'@Bp&w^ӓ`762(A|гT*GhYE:W,'XQO }P9$WbP.Gdʐby\.ǣCjv.vd-KՃ6,=ٽ\+zbfi0 yzjEFmY 6x#}H5 8j s!l16PW`L B5i8>5'T )yO 1$O0Ǔ{l#w'\yx<LrN֠ x0Ϯ(j:ݤOҚ (HLY1HwBci$8oUF$Fpx1Yyn*Y B5NZר7sgG.ScIaN3Q]L2Q H`HSk*6,AD9AqX.YTLP˅@҄(R!U3M&R^r nwkWߩnRktw#4Ki J"g.ǹXor" Aq;VCڡ;*4 x%M$YbX,@ r^r} ȧx@>Gy–3? ;`2dXqŠSmM=$MxiRr’O6t҇6]i"b1ģ+Uw"sQ  (ăgUIn4&NPIv0(q4gf dy.p T]>Gìc$*Ŵz/3Zsjr3 d 2" Nbx$7ȋ=3j5bpx"݃XOnZ:7U綻;RӯdDySdi]'w¤;oߏ6=G7Dj۪/VL64L(V L`@"n(UJo6A5Gf镕F 6|>9:555I~>ȸN1uהc *fDAf<8["=y.2WDFJߒ _r Ʋ,X2-i)XDˋ[rySNeʭ>kNv>M֣V\+SN>ܠBoP^fl@Rs6>t~KQ80ajܝM2Q.Mj-fj)!X=ב!I#۶QٝmU CߍȔ;up>[.#X2  m6@zc ͑ 7fYB35k NyHFdD.==L.o<0SB UГ ?Aϐrw K]@FyfX~r?ǵx o`=Q -<4޳jgf0w6 E̶(q#}f}8ɵ>c6{xm-!$J^L ('`ʥ/0+{FFD?p9WQEutS7i]yͻº5Ɓ:>pf@f qԶ,.?.˙E3Tl5{. Ov[>AB;:i~b2 i읝N5'wAbu)x{}:6^2 ,g^Xs8Y=ooӿ@ FD,'\#ia2o6&DŽEHK8 T.N Txs!,u3` j4.'_~ª4_7 t-]*u-!&nX,W"S]h)"}rib`ӈr5ʴ3bIPs{tDг@X2+h|[@\^ŕ*r1V~ m/0ǤMbB[JpV(3\iq U5q ]]]$a:Ŭk_ .t^j ᨇF 6ؿu <-ӱWo5tr^`N7D 7n(bCgyxm{QW-8h8R~ N9\:/Ypr8l054/Y&7 , tހa&zoJjJiQbX9bfsD,Ux-R9]s$u:|?!QDV$#h84fjz1SO" xUrVgIi 2m61Q916ajk F֞"QV돤2W^k2):±Wx! , x0rM_VLW"vC"pXr>t$ Z}xW;tGhJru+``g}܏gѦ,)S۲ز _)OQ0bD-@ fvƖj[a"5<dL{.ȉ- ڲOlYo\*޼>zoٜzt VTlYTzCA̼.0f5ζ,/eʂrRoHJ] ?4mƺ36WoB9|? xA9 ҰetPaEhXOl瀈lY-@W 4[;@.\nWݠ@ P()GyUB([Vsjvxݺ6?7= ENQ> +R~mqEìD-qdLbm8t\:GǕ0g6uM(=c_e<C3/Gqey#)Y>߭|Y 1|r]W+GyNwc^}abqU-D6O_f'揢1׍p5c1w?- fXR(aRu)GeO6R;Jxoq+uӟ+g"q;6)X.3sYdnX&rEywu6շ-Òrap'_c[!ei?01ږй͵HluqbR^/ItH2Z-^GSl>-y9bvch:T̫xοDž{Rf}¦wa@'H3;.odoLplY:$,E_i ԓ'*Q:ZګŬ%^KwƓx,̗cH0&Rᜤӌ2"⩗|ۅB5>qW-K$ {^{p5dޑu:~hf ];{ruCxC]%P7v%G늜 P|7J ! x}# <(dS8LM.زv z̨ ڲ_@3%wֻ"H=] )#]鴳%~f3׌ƺ;,cdidTKF3~ۖE۲T{3"9ntX\f~Ɩ3,[0aN SKwQAk!:09]$ÜXvuan{W0t'Q'5B0a$;#LO7<0L"7LYTg]w݆uuz}pi) ꈈIr$=׵wHo}9i5d&vqJ, V+dt"WR͔w|͐vG-#WoV{tCֳ-̝TD`jﱰ4cs|1>C:9n=w̃1y\[%%"RBcJ6mf0<];%_h/X~K}n!%Q;/qO{Ki-!K}x`+xDsw;9<).wnq8 -HpPM 4 5jc {Pu:D N>,a#!0RˑgkkAAzػmA.{bo]Zx{vՙjq[PθkfIF9m@T̬v|3!! `ϓTDƂP:}[҂\b-U}5|%IDATx}kTTɹ/J@ HfDD@7[rĀn:*8dL83q'f̏$+|$+ɟsΟﭽ 8b{WV[*'.06%b'w۽|?@9Y w%!ݻGP16U/'Q>:j>)8ȍL07'OF!Q wHȑݣwy{!|7H(???{׈[\|w4T/:x/꠶QKUQT77d?-Pc*MMs#qforPA,V T򋓻U*]UwCsuMwX08P^Ԫ Uj)P*4H5ņYuZZ]eSd4T˪7C13]U(C|DA{FK}Wժ|P205[5`*]j(/ {jjm(-=u뻚PKb4W+VwoU {oTw\TuKUCbҡ۪Y\[UjXXnhj"O@AꞪ^_6С*-|.A먪e~Z_QcO4S[x{ХPwv8K郁{ :GrPPaWQW<0T释g>!>̊5]A{7Z>H̕UC*Cx+lw*UuU퍁҆t='5UM7ҫ۫5YmykMNެ:-l-M t`"P+KK5ս^QՐXkP-5͙UCA͚ =LQ yt趼*Pӫ&oD%Y=W5KCߝg/›(A.y؇ƅ%2ƥ Q~\nE`($eFe(qe.B+\CMC{tWhyf6ȇ|{&pdB+*r8EHd%W">BTCQ(Ԣ U…DjQ,TV(r6na! b mqHfXRQp)-& D6 @b"wwL>Wq!,ϣ>_F%F_cx{m¥LZp-^^QFyym!,DD21XJZ;,[be;ȒՖOi))46`w! 4sဳRjv<<cIq[?. FCQ=ٓe, tn;?ET:PPaD["ߕBnJ_EjZI`Ǚ|1 xm]]ݗy.@^Z:Eۭ5fuB| g~C8pYo,G+οhӘ8,?_!w%gq$%ơ#QNtry2(7>5}/z{nE. ⃋7x;_ʘ|".Wg#B= >-G7-pnwuasZIZM+^%||f?R0R Mr[KdWB +# fm&?@q/v1ʔ}ke,>ٲG_{y {HRYNV&["q 2m[b9Z7_ℂE?/ZH1Ї>dd0ܿه6.C=r3ok%`pw>wŕnm7,Q?t[# ƒLח_7f74k4Zy pAϜiAP82rNJ!@|攲nCX2H,}9ka2T4tr/>h>&}V%?|E , d/_]n~o;"$3}>d^_XXج.MDI|VS\mR73쳤;-5\nZBeJQ9~\johwu& $/.^3oߑ*)qYWܞT{jy4pu^kiܸE[DMni9CY++*+?{p!JiD b;eW⮓%w/!i<`R@ld2.j VC2Qȝڪ/]Qšdqqqqq6)7AeX D`>V쐉n6ȣ/2P@y W0jD `( D  & @VjN~hj1; D-R\eYVo\ > UA1}2%poGײY-/8\7e ([ߝm%#Wu,s` ʞ{Q)\*ՑQ0i[=Ȧu0B087)I:QCYqP\":YV>@_/P-1H AE}bb$BkvtOs`$!pM4 Y^YlR,Bsb>c*AKxfjqISkE]3DHtP#$,dY!q'G Y( nC\IDЈ !'inMh@iGpS0!II; F㟌oyYȨ|,ړalUpu Vf^0B@iFe,:~(S&ğ&qH8V;BG'#cpJ"$s:A88&r r9T!'m&$1`a5~f[ Br̄k`)  ' 0kBLT(nswj DuxerB9{ln{ yyBi;mݹv9ׅ?ɠE"q, ۖːp`v'niO%dp3}|L|#yrBBH.x@p#h%3]K\事 :dB!$0KBP#pqhkABQ2Pܽ\4G/pѨ;?(+s8+@wPD q3.`W&`LȐt6? ѐ2PV },I֥9~JU\^z<>W穗:j^^U\0Bh'a2GQobYq< , \7hhiG؍f9; ={LsZ׻9  Y>X4TP1Y`M=a3`F^Ji˪Tۅ*M͟p%N%&&h#0 󰒃 =}8J={c/9\|jKK/]sn*΅ كw/\^Wꥋ=IG:BIIe"4c9# C-f2e< We|0 ;&a}Dɥ#[ڰcBF,`Q47iMr F!C ^(N*F_~u!G](lpr1sUb>=dC~"N.Pw[f.V:9N 9-q?n^U,oMt˗s^OȮ?>{N_Bh24.DׇVC3P~ay 9q). OeknEHa3cFXҹ O !))bdfdr5D!W<4Ϗ<*CЃ'345"q¬7*} :u0!0|]+ AL g`7/Brs ]xFPN4iֆg'ֈEFXZ\=X4ЯUVh#CaO2*Z tfhYثd&\s$s(J~9ȓY#k3m,k^׫Jޑ-&֠a7C+䓓zY2!3|ۋ'VH^ M +OCU?Fw6vl)/m5t TKJb'ENΝB،5cY`YQ>vz0wYYp>)0Wv8ھZ4$ufNAd)vTԂ UݙS{\k&NxL"\+o0aaqufZQ>^sQV%;k``$(C >3>8Fn>s#|!eT2}ax0 =XLn01iM7B"F?L}p){`?R;,©OO)_# ! 9?jCZ9 mܸ~F.X>㽵`$0qE&pCľX!Rtg#ˢRq;;|a;jD+``!> Ij[e$xn0[!f˱j^^78z|[GJR>D19~Jl5!O43@ekJr&@i@?yepx88`89FH80 MAh >[\;Л1:stV71Z;קt d (2 :vbQ;4@T6x 5*E)*J=}y~*ضZ !F0x" ٱ&&LT ؑ28s|׬85o3M೶+HB̞fm=A#!;sNMZ4rzR1l9R7t!GB!!T#%Ph'Uxd;fM>/3&`D;rqL66=Ц* eĉ•1FH̬]YA釳)q?9䚔7n;$p_I=d0*=!ș4C&SrӾ8zJK\9քYo9'҈ߑ/&pˋ@ 8ҏd d*b{px{%d3CR+ B@`Wk!}Cv+2#v&oM$ӕ'ӹvɴ$3еrߌ4-60ZpQ 3lr()A 7 {xT%(0ҕ]GU0NFq *`CYssɂx@'P(-,琐|d!c,dbh]BByly-dIHRT?Wٗg+!7D7!'702@p~ (Bf .,C}!<RpSьRrTvCqЎ ŧ94G̑O;tf(@%YJŰ!U'gˇ,:EJ)1c8/0Fp)dCЇLfXL 7 -)5owѩ9_.l#SPQsTZ3vg*ٱYmS6tm@$Hі _d4H+dsk}?' bi 3ƀ{X;Q3`IAVfkB<)2Ftg6 9;,6qc70dt 8:\`|!GKj-k̯r?<6~ԓS%UsIEŻ kB {RMr7-08OU YIkD"\Y دrLI):u/aOym:!>^Ņ"sXEY`!3q<Aqx-7ŞhSFLs*ëmw㝱3&g>@6:Sx Z`aVw;< ߙ$R>ψ:zU0Nk#"Y N(\my?x)\,8B1$FL?f٦ԝ&Bj'{.ZY:7[mL(fj1x2[X|͝`!ᗏwN) .Cf~Xᅳ= !\/D}fCF|SGRW/޹r^q5 ߔo~a!`gBf<2n!2Aud1N1OP ҃LHOZGA%NHGMwYsЩY;[ܹ3<;6tis&gg7.kMW|3Bx2+iq22UpM0ry!+!N/ז/_g qe+vfHlBLF^}6O4޴<˞~* ^ɘfrͦFDHpe5@ ҼR5¶#~ o˙\H}Ңyjf*#ufpG򨡬O7"=dm.'&xx q-68[Vt HPBe57zU $eu{(='?kkt[]%1ˊ]ݗmp޴mhq]8@0 !;tl:ZDUuGn50C-yo7%$++ 9Zs[!>xЅ\lG tJ$K'j9X[rKÉ8t&̥q̄B&9 wl K~]P`Bb=NsMZnuv;ypBkQA@U窇CnlHu}oo`TtfZBV4YdBĆ L8`A9Pkٹ[؝<ݙ߱-xr O9^p5,]R2!\%4؀- wZEl.-rxQQKc3׽f9?Ώ~|JRU$8=ʮ]JwjTu Q+ ʸ n`U[+n@V ,) P4L:x[<$ﴩMe1$+: |#BJ/ͥ,%5_/.V<>"AEъ9 l#2 XI$!Dg,0\}=hy>x_~y݇_=3ZshstxglMJ8 *s;. 'I!{,nϞud\pr`t3*X@68]ޚf0h+XyqQv >iQ  ъ5g;.~rG[Z.ʻks)5|ⶢSˠdA,Rdba!6Xv{5gO=/흽>[_\gG˓bߣa/+NduKBI"'Y ,d 6 O߽4G 㙘:…)e".Tud=ojql2$aPIM_5kzvͿʋ`aaBj;^མYe{xT4l2 oyP\z_⾞ -wK=&3x"w6o^E[Dci/c&jOȁVePt32"l ;'qF#Φ$t_ rxCMnN_+[k 9[nN|. $nK/y1& 6TATTZz0bXCS#8÷ۊw/x(s +$"B:B w{BFONliz222h9ɟ|p jn?FɀKAM]͛BF(mЇpvf"- hjnM_nڄqq~`= &$l] VsE' !Hh볔V@ADbPd߷NAZo10/W&P~,[AƎC@Z$CY;gb&Xb ?z,9D XH1՘ƌ!#wР3u|ހD|N`Ke\ARPK1{z*VOpϚ`lk|!ւ8qyfXq+r0_!yg{Pϗe>xH!zb2`ȾmΦaWR{BrÖyf[an1=1Lȃ.G~,4/c zӧOO#=S&tB3tYd@QmQ ݄.;f!P_&$yrYdGѸ'*X}*K)g#eu.Lc~jWoQce3u>{&R<ぱNS,9b(}x)R @cK#rhnD%z{ŵZ-9@?ԇQP|>q=V#F kqtAYvN_iD"榡&%ob2 `A殧{f b9 M%6>F&Y@!L(|pD'놂(! HLw*RjMTH]vJE#D-A,   ЩjQ%"Dرb)Rs $uU0MG(Nn>kz<>=7>{P2<}Yў=J-X˗{31+.?겄_}8nDYSC㣩%Ij2K#be/D]k6g؄9%E%X(|AB#!17!E|^;mH2wthb8mjhW"r,jX Àl5Z A(*iQTP `^Kr-&'=Xk9𿍱b<0=BPCda_u"4Zn!o1!ի|wi;H6ǖs/ȁ_0}9'$BL=u#&rwf\BocBB=WZ&Yƣ\L`#l_&xJ%-$l?;5 +Kp&79y -E%rij"BH6DXH$}@I+!aO©U /F{;C+8NdE-B3BW6C^)/?miO㻝.4i 9HSS"* K0. '#wZWyn Ɍ[`ɫ.!sR6Tٰo.X{\ch!GT1cy0QF,u4#}ޞ7L_CE>E%p2}7d[ Y @I-h$}WaMKB{Jc 9Bjx㧬=ֆGOR80M9Є  `! ?oa2u !l`Dw 7`ؙ.r*riH\l^jp^,~g붌߼7oLF\AB^]}9n"G"$j(05iiCD6C,t@.!rlȑ2dK$:߸Ėo\!d\gC덃nOȵ?݄Dm"1CI + v > yk9VhP4-!!"tq8*LHVnM=k!!`r`n+0!Wr#6!Fh`vPM>|rpw&{Ky"mĭ`r[믯}G,VRc&GnM_ɹɂ;C ş~xa(}lq[ȃW~MCMV['RPN'*,~ ]ȱ!D/6 d9>l}ecoayx5`K{.r0tkpcwUB<.%`W'KAz<`Ùy;|PU2 &chl`?xsȍp8K{\A_8lɀJGGW圳W|z;,4w2ȅDžn4h2ލ2h5@=- z/ڪQ,hviezEnMv1 ݗeԇq}Y~W^#>U'1&hG<A˦`P̨N-PB`uTp/KaUH)ٸmwmM}SS҄@b\CMhB1CV俿{m:S4ݸΧ`Y!ahbpPL3^YjHlˢn[> T8詐h%KC,Yr\+"9%ŜRhw`|syTJuR|WEo(9sdw}E23=Սn)6=#5VWE v3Qh(RuT_U鴬-e ھ~|]4!6y b'Ա \#J9SN']w{_|Yz>)7o4K'GФh6 ~Y}. \Bݵ ZQBRI_^[ E$R)5z9\ k!Lp_꽯ƳZLhe!/e;{;;GᗦtJAHjhukCDىf%V0N5ҋF$Tx5EEj'&F{ 肆W"ͼq2яFq$=׋=>RU[T0EU▖}5OU+"+K!yx.p!V`B?I jqB9"?Kq d7uuJAkW:< @V!)*Ȗ|b%b!}#2:MBo|ЫP,ρ l)?o\۠__'Wu6b.e3` ,D!#"$HRbi]W)T;cT|'|~(8i%VqВ-:O_.<.Z Mwqñh^:pVRR;fS)Zޔ/ YLXO?΍?2WnAøtB(Co^ B{[!2„}vW_oQϨlzD7۲磎(03 DƩJo1}??qir`Do_?8KS&CA9bחΗoI~gOG'K*/Ex޹Fj^kΝ--g*t?HI7>d|F m*pR(K7݋Bnļ0GE_t/eaӱNa VV7tt?{+fvoWJo͋#+x|I`[ZBd8L1P#Iڊ amVmrr^'gwy, )Tׯg%7/{7b GpوIwj5mZvh{ 4O4R4}kxK,)Bޔ(n}.$tDH)2hcgoSAgZv Nl,.#d5HG!ʕ|`xyy{[aݧc շ5W_xxjiFKw_[1dJtsl.9}.3$h͖J0GUlDMÃ_r,d׮E lV Dڽ 6JtXRu]+~+pW)ݿX~cbx'BUUN`m^gW g!R3 !Z}]RIOKwY{j?h޻WH^.]h!VoC}"szGXrwW'ǻO ' 55uК* L.R IRYAmFe*j*:*Zz7WuC}r̥fB dVsbfY!Zɩ,F*RBhP;lľCF, =RpuwXBs!h/ 0ƅ" u)kS D˟d]2!7ƍ-ҕ1L@ۥ/XlDHͫـlFpҾ>ظ3#:sRB*!Ϟr)VkVx]noD/_,V,;А/ޓգwgNC`ES˥zon eM](1a~z]8G ]W+ޫ.kbVJ =9 vpߪWo{+q<بBz, V8/3(V9̳PGѻG y |S^K%>58KI1(x49\fl;X궖↾;R;O`MfBȃ|}3Z|qy,FƩI v ~B@ӱ%QxbqCo˗$4![&…jp_A%`n N>QU&{QYw+{r^hi瓚S5;zZe`8`b _+#moL L+X2! u~B .> }pO&$!t.! QvB.^sհȍD4'4)+}yscQzu[[j}U_,ߏB] +Xj\`'z61[![a!L\BKB ut;mw=~_l{j!$Zj]lLcK&b?+E+XBPPZUwpɄa!|ABg@v] AJ+٫ {pGnpY\;%M {,N3\cG?} 2fa  Ywِw:6%`,5 R{1q+d'{򶪮 ,XBRTj [I!$ d $RINɪBH]zۅ[8 xlusQzu9FpZ?97wɮ\Aһ,썃BcN$\FHObR;PjorndBh,b! ieEt+ L@ AoIY'%443DW^Ao]A2=&")>J<rB*MMlv"~菃jgh,1CY6_w:E\*nUSrN *y^,_/4,*Kljex`w m. Ez ӈL=vR3=[Զ4`]|}5;V35³x{Q)sL:\FnUw<'SmXn \?4Y ޚR߬"{/O‰;r"M*=7z^5 VDIIF1)>͓.YgmR!* %6Y/vq~fzzz .O?jŇ r-/ͣS,)֫R4'])eh0ŸO\Zyb3 DVf'r$ɖ} >2.#M L@.#ӚGFBzi2'm$i P` DT yl^q0))NLtՏdaZs B` 8 +x.ո\LW _o֮DZ,_[S->a8[-Ŀ"oaio/,Fۉ:aGW_?&ctP ѦHB+IJJ D U1htSY 'eSzC@/,~*z!baMwY?L:xYQJ44}m+xGFO"|WOlB #qXjF!oya%`FtY" mi2cpxp OwY>Y);uWcp8zqqpQ(1%Ђ Ypg tyg{.W*+b6uVm D 1!xZ/1 KC>oݺ {->_\;I* B[{U]e5GAõJy:h*, xP.҅셊Aޓ8p<";Jo1ij.$4SВ6%R@E, ]V%J">cF,~?|) }`ܷXB) bO"Ih|_0Wjt 16uck#{?a DEQ=2+fU8MA[!MA4+LiKO^g\p~9K `hɢ]'6;!P'wu-@㧯g?O60j!xAͯ_qj`![1@e `@ 7Jz.._Wo.w(i 'CdMjP}yt224d}uW'uth )s;_B)?V!Z>(kW['칅OdVBL[o Ǭ/2UYթkCkG>h_k$ӱ0MinKF^[X\^:zq26pB\ -<o}9@>_i/عI:o;4%2OF򀠴Bl'@WYKr'@_d پ[5'ßȴ1kݩkwX>z luj\.߃,C~8ڽ2=30vwaoz`lfG@aoQ'akgG,q^{%oSK2"֝Nh7j6MNl-#DKex5@.-<@Ty8*<4=I1@>j_Z65ӱ6 ՋsWFU$6c EL2SktysGߛ05q~Hg-gۿ)m&q϶o <{y~/z)‡&^CV5&}N6*]΀K~c(`HHrBg " Vq!b Kc(Z8MJ1+ Iz~RiaϹAEjC32^&%n%io: Ej[?R^՚$ PC7C1A$bFM_l 6 38#>`@r61B A$11 y!e F 0VQ)1 sC]BC;8Ôlp I$$@l D5@ hMox7|` mIh![`w۳C :B v81 /_RRS!c(a .a c@ፃo|3WYo1zʇtNyձ*}e UY lG%=`uxԠljIj;dgѠ41[GA\UC/kX2/?j;)|lxXNta9ɇ3w;sWk!E]IvD)5Lb^6JmJϚa4 鹫}8pIf {]xC_O>lijbpZ*>@ʖWz$}ӌڱ ^C 24A߯5.894+?|wSL{ל{l$F|0BMĺ;F𣱈7|or8F8'r!C`th1c˚=pl'}Der)JK%Sbsd#%>  [LDoƶ[n~`IgZ$"mc8Ae|@_r&YPY:bE|)C!Yzɹ\qC47'f mo@;vlh*]Fu Pnj/=MhVU;hD5kX%pMܣPї9Eq,lq'^IkOɕ%$nujkFz"uΘQ/1}48N>my<_mOK}w)fCڶQlߍc]II/DIcRA#$AQhv^5P$qG0-2ɮJ #)b \\s'QAAOsgJt,h+BH6P)_axpd,翫JU&K˯1Dpr^hF&PBav"]mȩ)~!ΐK&IDə{;u;oIs9kcc$Ivn,Dl>:KD7>G  zNb=ꅩj n5 s㏏PxѳkHX\V=CIFV2Vuh1D\'Z%끑;[o2[T3VijZWQ=8ѱ3lSaDϟ>*''f֎]0]W)zCSCcc<\ΣO>;$?PN.F^/tYn|ħ%6LK ŌIpoǀ A[0f!|7-n3y7~7_S&'e άcցk j;&p^b^>X _vmku! ʕ{K||^{Մ!?=!B?{FyIo,C Ж?F-)^ bM'.k=a 3k~i ?I{2p2ax_ER_KY wV?fk.Oן?}`b>B?kUW+ )ku7uJ_"uSnc&AܺZ?U 0)849(1xgo~|6w_cm &#sd徆zpe@Ѥs= ^lT-ZS5}Kl XarUY 8 Lv359'Kv}IJp hFR"8WLH\]Z!I֋y;Rp4Iïwyh6؈^Fe-M(iA 'G(W6J*1A=EZQ=5` EJE(玞`pl1ȵ\H3*9fGipr,faj%07j}ߠ1+ey}Oz㶇ϾyշϞ=滯W h'XrJF!w& !/bgʡzU wu% 9oM<>`I<-Nc828[ a$sC06Mz&ϸ _ dQ7]>P ȳ/~Bx8ox< q˷#!L;YLp/i# %,PP#0߸wgxiyg57F$9u{7IX@B)]Y)FTh=`VۊTcݷ_={ oA'>~U> h€H,Uș-&$ä$d:$/$."x.^ug@"MG7Dg(k`H0znYP4yp{cͷi!^9ۨn6ZfUm :[=Խo믿~o<+R^. 9C AD}&rݖx"t9n. a@M#ϥ@lv$# RzaqT 1@rA)N ϛf= n~00R8W8pM{BQXn6c'4MB)Ϊ4mf (h0QêtzQ-h\9VUaTHȝ>#=\8YM L$^ +lؔBx5ICkRiM@4tcd}9Ec !Pb@*}ǥi6!JĶnq䒋]j1H!Οԟu8ezy#C vS(ʠwm]Z-U=kLznVN"3f?ǵٰECBLRѧҫJb4@* "ybE8M&N[PDn %eGHuR[ 0UU^R{T/%"ˀ?s|ppę6FAKВ;I"@3񉛉mg$BQ"p#~6S>gxn! R$ ,}$qNm\c0+*H"#pSr:s-I7O`$|q.a NMDd#$,~1 o,DdSM&bAw=r$B &>/ ((˩Ov%:kZpQ9tmK )ɦۻۆ09 qI7NlBxF'"#@Qmwz ضƻcMi9̾/q@&SW8o7*ufX6T+m@gM*ɲ խf>승Jl3Y3K\b; 7-?vH9@ a;ϯ%IșzV(6Ix9ayt]Gsn<غVg x݅}.YI6krWoQR .à6K72}M#m:VtTPVPUnW 6mkTK]W 2so*=gcvaR\γ!nyG d/uo{|~8ޤx&b?g@0cvҦc2ZϞMy^dh*p7 1kR I1RLBE'8KJ I]7Ky/Xb!%a$Gq3ƴh xC~ dĽTzo1|fojjif v0 :S(XQr!EbԊ$&f(\(.|yR ֹŃ`3NY֮PKeLVii-Dt݂!M܂]K0œ31hxM9-jog6aGN$AųS-.E*N@yS/>^VR|THD*xƾ_8&qC P܀nJp337`mds ʹeʥnx5_ { H ÜP^a:n@t}`') +t<=4a$qbZY ґy:H2ϗ3[ {6_K |/L-u?Г gS4~7|L$tf#IJS*%[9T)yy-)lh!{pF̐~0x(*SJkH,;z\*%!ZeÔ@`W8-Ř!rdJH:zxaG~~MM8FY/'Du@cHu)(Ɔ1LrTxL ^F&)ޡCzYuaRcSal`;ÿJ۬^lnSnGDӫ7KZFqYv~ĩWR*Gs@CCr ~!]oГ0UjT8Nu.KN\Ѫ^a:W=xm 1JxjCq51D+N5%kHpv\!Qh ɐMwHN8L$L|1&/s>a{DUkU*㪪[kVN+ˋJ\;M%RuVSoin{K<\ F:7௝⬦PBnzҠ@{YuFS!+NH9y@4|T]_&_G=yrvwur [jF2Ɛޞt3-Eo I,^6Y_X,pܱL솙]YԫkfD+kvuu2|U>Wݪ:]LhWຘ\=98INV+=y; "Gs F]Xz;MA"\*3莰KuL/Wͅr:v;N\f"Ep:!8ERUtfl]SKE p?EAd-W8}$ f>hsY.n b^Q'Lq:L 'xjV&O?ΎݳUcӰ-D k'Aa:UXԯ Z U: PDW}aL (]z/Q*Ca`e7ANg0 Sls@r`ϖ\B;Ͽ `6aN6Һ }K0E@˺v9|I[eXy⣈K/7Y]H*x@o|0Cܨ)]/(ӻ0"Gԭ$ -Cjnʼn%(!K3z~žЯVav =ӣ-ԍ 1WDlOf4 nڸ[]} Ye~ m;=M̰w@ޤA &G49b~n (,±v^ZFѱd\/qyFA߷D cل+#7ذw>9$W^d3 p:=N7p淋P,xR\^,9G#L,(D@$G !Lf:Q})yu^Gl,)}io6m2sI`<%DΧsb,Kۺ 4t Y%@/m.-"' t,5x eMF$m}eoZk1M0({buD힘X30cyښ}txJ=GPgtbxl[7k6Fqibƕf7"@L% 8Lȥ Ù\$ #l>/;.&dqYJX`6 :?HKR0n@H8< +ERF(f\,= B P3Gn h$% (jִf ,F+4M4 h4Abf-H3B=$U~tvoXҹ\pQZ'YxV^yZWs.d?C1rڴd53|мAqF݅Af8a#JE rĸ!a[}igEq,1QȅQQ8'FM::l,5ܸBHU;BVcUT~a0<<@`G#ߍT#˞,Q,!;mc0'"SQbU,Ξy!TU -6;XѯZa,^Y$ kbi[NPr"!<>Why[FQ,@R30S('@nP5?m=Uǧs!Yj͐+ ͪMsՈ+Ru4@ R{H,)1>_'@*+'%DuN?  ~P@L i|8@*Cl0H;JH#=yBNz  4{5@--, d%;ė E/ ZmD5^0aHwhZE5!2iٽ /p.K?&74x퐶/w^P]t0ЭJ:UQ'_P ONWd4! S}<~FPtw,}NsKVgcSԫ%qܠS~y!L] [0Zzs Y6z,QiznzFv;"Y6ɞjG-$ ~g.io5/EkYMj}!.qD3}]MMM333O륙O뤙33|5mGY#b2lzeA%[ ZasBm |U&?nǙ ;|zQww uK}3JSW7ݭZ~}z<$:BLԴm3!%E)*JBR QJS4BJ )zr_ԫ?g V ?ig8e$/%IGRuz7\PR?^X .1Z[qiNOܹ}>&5|ۭKۯHAdyxˇ3f-Թ#׃@l<{͆7Ψ . {B.MwҞ4p='b u,J|^ D>htQ=Uٍo|h_2m'>ZsR.I+B0GI(#{ {,F/aB?>cl)XL~}{B_J_>})I_W}G^p#ˆ91d)z:f77. yf^I-/ŎE.6¿ ~@{{G_?ݐ>6a~L>Vc h:`֗\d| c]oя(rk>@倁 G\g λuH67‹\b{ 5酻h!KHӘ';::2YVO(>ta$#}Q]v_Ӱ%ģg⁀hvRX=yz_DJ7":4ajh z/IEd83k@hs8 T^%D'{Nj\Q G怐Xj;')M8T;ȋoEфd^Y.hZUA}%10i謘b[aX* 8V u%Īw~%'Y@Y fb8|ٙYpFt|@46yǓLH14y-UK -k108\h,#cj^Ufm:ܠMjqxRX m_#oI9=k.dTV)R} %DS~e|4̦tCCOJ _.Kfa^:jo) {ܷɉa]Ʃ-b}#C7(UG%cq.S$ŒC|K5u,/]d4;#yn?i\ .1.^_ UfUiՕ 02HX 蝖g3F#z킷fuFnw/ U[ֻmb-{?40[V+9̒|S1_&90^Ћ^a,͎0Z2)x GsހڲΣߋƶʶEi˹"I O\eBp^S ywibC~)rc 1 ~V\Sߞu9Ng>JS[CtKȉ- ZmtmHU ګ35ɝǝJgֱe!KΪicxIRJe#VaSJHՖ5mmu^(54eq;ä\,vb6VԧR)6b7C7|ŚERȗ +mGE(&! նkR ~ܤJWmNl0OdXlY;[V㉾҄ `{}tn˒M'J'FBJՎUAb؇B>lVD!ZͣH0 :vdJ7LF}vtk:e|'MVWٲS[K ],![xsN'[M;هB,|k* UiN +6קY:Bo. E12Q+) (;*VMYhH >T^JI~aE0Q=R³BnC!sٟ9rl|3iDӄ;].$ҫ Q WY3Ů.f W 7"st.Ƚ$X&Xv!7N{~sQD<N^‡iI\ö^ (L˅`1fl˷7/e>L /%6(I>SR9@x%iW&&uxάa:]p |bο`6SžTgrqX8)sY[>0LǕ0"|"&R>m̦#n/oT4KْX6%~. f p@7}3g#ISSc֡sA}I`4?=>:sfݘf/s'=295=SSRjϝ^lC>I|L h'NO }Ι;흘αvXɝ>=26ai{9960*rULHh\5OnsjHI!5<>6S5 &4VjD8O$y_;r4r\W<9ז@\S(N6.!F\~S" rAPkPZ؍NP(*Z+e6sρ<^DC # W+*,rMOQbsg@Ӻk 9J,Ž,F[[T.N.7_h|ڐ. p 78IOk͝=ueuk#,=]q8Ӣ+J-#R}EK
  • J ! Yo Y'a7m$<{o``˯5 :%C*|FdS@ # imG*RiX\H2 E_M* EQʗ@ȑ ~~+l?`E$dƨ{5"1Nt!]|90}Qe>G.Ts|Q5h OX?;jzQ y4f؝oP\f2<>o5pp_(O?nRҋU4ǣ[DHrբJ*c2L&H} zdb|4#!%S=A0ю$&LQPaxH~@6 ^i5m:)90Y,#?\ot\ӟ$>%ri"o/h[O#~qk7/h9LPۇ]Tk[ۓXBҞޛNۛx0^_x8CTE6[o%fY)=W=qX & b=onࡃ Ǎ qO8eqCv9azN 5DBm 2H_:BDpJea"@9B;_#r)1hMհ -MLu@ ~% [)\ND"* ϲ) f Я]GnD+nH֙<<`q@;] swϏ NfQP$ZD94l6 @ K%GE]Hde? T ~ڪ]|]%0lh`p3cS!L`ળ'l& Zr$j}@sAZ(Unۃ4oˏN >>˖>g %$ JhwTiC>O,yXsQ'|||  p颟%]*;.GdqDynԍQάD8lٲ(8߽;AVK'NDHXJ&)P,q$B蝪(Ϲ;Nl'.4h9:V t<=$D/ph Zp te>G 6<<||`ƍ#6lh8 pJG\Aj96{/OBӻ채=y'Ȼ)Q'Zo3J^3?n=ݢI[djNXj.꺚A?wlOFR];Νk(8u~6ۃ}QYv̕Ch΍}p3k_N>%[&6{GA)$E0[BCٍ4~_]ƍ ‡O$) YXb.1^5^=@(.yJ[i+K W[ߗorrAt޺E$֭reү?[w~vQju0c-$?:B)2j hp +jx^*ܲ'_ ]TIsmGqeG41-qNuP s'Mh%a+η@ U. Le'<~}SJS|s_ҔBZ7˚˞ܰH@ /2xfebf^Aݎ'0 rb_G{\Y>f=G[Ǻ:vk뷬=ip /76 i< 0z4h"F;oZ%ŖΫ7H 4-ʸjLQvwAbS%l l4(8eA]7 ō O;[?U4BmP&#҃-6%TKy*:sh1\T-H \|R6~\|gn. J9vaGM}JOXFϯ-kvG[rcATX\,A7Gs#Hkifbqqoሹ\jL(57* `ؚ{0EͨtOZ:p C.)"=sjűo&KI<fJfHć)^Dȹå^|w+X '2( J;wo:~:wlA N x5B6S=>JA|0#Lp0Or!qGnr6;ErűɛdK;ݎ[7|ˎȹ_YJ6un>5Ov敢ql~vּs"{R}" GTJpqY9Ǜ휏+zi\\i +b*px {_h];{{Y¢-q+O.ΎϦ(I;H㜏+:9Ӎ"d!{g .;ՅB!q!w>~#s~XF$">4'-">?qQ 'vލ^kmX:6Á`?,d| Q-p텽pK4!1,-MCG'$" ;6&;^u5-c 0i\A*%No:0Ok\WEB/' ju "AmPbB(XSG͔޳;w' :,r ѕo%@+_GQ]"Y[]WZϞD. 1zwŧ>0XP_ah,9@q#A,0.eɨ~vxu%_\xc B&P/: ėM%}֓`Ut|x/!]A;!]wf g4t_&3@W'OoCKFsYKddpT LB*}ѝz"'z&A=$fAy/GЋ3]o&\e;[Ty%:qԇ%f)Iqn m7A]\վ5H$DUŠnz` ENJBC) ب8q- ,G.T=rrB][}qx/zιs@N~Vn-,v[$!w|9Rp5SNBpߝɰ1"B-_@I"; _ nY$uBU;cASPQ]8KXl ygQPB6n#shKt 68mo nШE(XEh~<=-, sҜMeep:tnX~Bឝ܂#T F΂{ # ;r˖SӓN< %  ^})B=>tqEDp$3=6%JsQ'.TS+XHd2@gWj8if_CB췽5pjq<&*e!D$)})k/d]]kVD vɱr ,;3׮,yڛɖ3Dd0'뒛 ~ӓF24:#:1Ň#rb E1T 2MJNr]={F;yig 4 =\+X8UbNoSY҂{"۳s')\%Q <;="˽XB4LIn,_AÀ& 3qqcwi;Ӄ%\? C _]Ovyw 1x:q$ÚWm'/?^WʣZNpɾM ^U,$Y5Ru ѱ4Z.Y~lhK[t f=Xn=0,,TfOąDOj&3Cdg0eLهL]2,< l{QKn5^zK\D:FRXkZ ja]ow燺X繜[ dm/YBtnr0WBP[Gd,pۻ<ǣڎu$ |4 \o:&lԚw5;nP Yà=Qpet+poepo b?wcDp6khAuR^A_K[=SV^Nwg9p=e4 煆~!}}\/-KK;{1 +# S(BW{ƆO ~&`WR4Nι9Yr|h벐j?TОBt Jj΂ddd32vC<ט?nu[J(X WOHϮ.P3;-(>'; =;'> (qe}-)di 0XX 6:N!L(Ġ. f.f+\fGtsA5'T[9-?qovM('?/l{ J,`S>/3ajX9BP8.nmVE -犱cZ;W+졎Yr8JZKE]iBL񪧬7'<3?/'{)Cl }IeV QZ|8 |0q]CQ>0Vu"XwY+칂bfǎLox 7#_b0f *(/YA?EBuC`]{~d" ee XC G߹;vݙG5qΐL&A$ !P!Z>mUl!a T,lQTĂ|j,ZWuwYZw{n^={?{ݿ}'LB"#3y睏}g7ϼԗoJ?FG4 ^gOƠٍoV|vްK6kIE.ZBPCڭf¾$ }*/p$&1{]`VV;!R„ւH OɕG9YI7 Bo&r佽F E\@Wȴ .@Ȏٙc 3'+̎C_;Q^[<:>]K*B%le%4'D  !˳0dxZb%z{gY'pt ELș|*nwP5PQ,C2UP],Q}{߽;1cL="EAkP%^9au.`m* DDn!Bn \.9 $dT^[<}H@lR60Ӂ LM w,p,A0onk**J!)UL1Bp(4!@ 5 ZsP "`0PA9g Cx5KV, HkOQC=nbǯW[# 'w` (oBLĭsqNř?3VFz\%\uK-ua]pS5Q@:݇:Iʴ4\0;腠 6W i#@Z@-Xkb 9)(񙼨bRwRR 0V-)FHJǶ< ;Wo9< MH3߲wohjxsL{ƌNPݷBfSeEF0#!V'u.:gva5iU8fY ga.BhB,[~ J2k;}iAi6IIltag?tYp^:mӢV0A(-Io>'qzF%o!ן$%^Ds3-ό:8 +58هu[|X ʶ8YEק%JrX|*K,e6ȣ#ل(`!Y4!-@!jvqLHHXKZ{F 6`rEs#;5G4]JbdEH@ n!y !Bv/ sh#x,dJ 2 '3 oh0š@X_9a5=0Uu@:z'V~e1~щ`:,(/WGV C[ӓuPIzBBB Î;"!qL$A,#$"^$1D'pVDe&Gi\C,: 6I(ChvqPGnOYA:1 2ǎH^Y RS.Z2,p^*,e(1!6uG,5!1p%w$/07*m}N|x$$̖ާ(\s 0D o5C F'hAlL$3"A],C:#$67LϖE0FƤd3X +vqHȴ4CŸe@~F *0bԺ c7%#DK'C"r)3>rP\ !s&K]RTXDEgX/EEkY$JbY72a44 -cI'ex5V1!5?A~TH*hMKN-)˂"60ѣbwU$"ܖkd r CSuRJz{W΁o4r")8v 5($,!xf֙-7-T_V{47 ):yV@O|Vf&),X͉ÙS;ive優V98mU/loJ1 s0އ0׉ 'Z:8BM^)Dl'׈"> h}cRQ`H1~\|Y]'=,$ }c#bW="mJ\'}N6gEޱSkL{A䐉Eh 1hw^4Q?|ciF9aB!/v}!XRgyAבƧ"_AxgpYod'zRk@u,esɡbWU}"j͗?RNOZ!(Ť ո R0venmSD}!hqtCXB+!!N^#7RtVS÷ vM.k9Kqxؤl}ِeSBIWƭ)uqA+u6%4;!Ak][~UX-!}x13Qg$:"/+(;N~MH85U&bн;I7! By FNpBkJ8OAxRm5/gҗ""-P\(EB^iÚׯ)떐ƸDSS!irU~h| +H@w9B6!9?WQahs9ݹ/@,X 8SM+c2?_BFGIov Aqt%,$->O/:qaM.$sxf20zen!~ޓ)#GOg8@ߍ;eW怨щ1p.'zk[(]󟿠"&++rsc W$LN{wB֬ ! :25`So|r !njtnlpxzJqzfx'=!ûk!p`޵;~7VT!_>`}qju9gz`΄{+5 L=џ/9Rk@x}u˗#J@U, e{Y/euYc|~>mDdR#&yBEcȚ%d#GQoęX{a O,(Ȋp ui!DpAjZ`"$DALH[*Hc, :xERBCOu0m`C܀E ,,GCW@PQN2bmwAjc g+|CB[?Z;Ne<M"Aϭu&oˊΖm?LzʣD&bB+"B8? z'hcfq n! "S!ՁCaGZ8bACDFgǙQوC72oa#2' YGZZ̆RXA*88x5Hэ>j31ěwkBB{oe )nާ1uӞI^dn"Eù5^at*c <}13c7@L}OFtY4 |b0L:?~? w5fgܝ>;6b&*E]M,|!8@rYaS-xP*N߀HH&=-W+;2oXF˭`Bhф]'(ǿb-E1 -8)k9)6px[YC!QvDX=y4<|Hﱚ#7 =|5G9ֵ4 T:G5ǫDH.D'SX@H 7&ԏNW0la|r9yCЯ,% 8YȐ2 +6SV̑\VFx#{hv;[NOJ xD5J y`3<61XOD-Y6l|eAl ! +A`;Kڞ9Yt4@[II\x`Rg() -M.XUQHQ+Iv %[X  _ pH5G[ <!iUO  kE||)cp R =oM8BC%f4oB[\vq|.832#z+uMI) cȪ/׆/9a( 3C3S!\?^_~=!gKBa,әٗ[v)Nc7`Pz ~MErIvBxmd(N#HۄD䂅t_|6mwhSW/!11T{gBi^k>/!7׮}kc0T!1{̙3CSj)OA$B_Je-SNA yݵo=B|}x6z &3au.>_E^?)so#87Hr=m:߿E`L?8JIiM J-JO (xɠB^<ņk0WJ ۲\IjtCܕJEtx19hЋǟ~YJJ( \y3vg/32¤^)^.˳y W!7I\A+!8 !2͍^Z97ňO$EFñ:HuƞNww~p][嘟dn̼Hyۄ@!W4ɡqtu21juo(%<"D/B[8ho2_.}tA(%6p[Lss $:Sw>IX|=ѿ@ `M12\3~/矿;?}RB VUB5t zJm<]$7?J"-a%갡"eR*/1D= 8\|+ hA*7?}B$**lCb;}Ւ¨zyK yo бÍƖ']M C#tszVC<@agB{ll. U911J_D/\C7sh Wcc^6pz{N4?n9|t]I119 9WU8TR\ڞƒՅBpA]x X+'ĸA*eB]{kJ֚=mcu Km. ARɒHJ)+lZAEH6=`kͽDD[PܕŸY 8@@K(Wܜe1 ‚֍sa 1лy@B@ !Z'rIfrZH-u |d!(PF‹ u@tk+-qG!SG[_9NBBd? qjxB$E*/HI KwbA"to? فhi2 ""@&% Xd~@u"SҠt49:fε"^e4TFg6+rdZi8%d?"h9I%  bɲ䋱F';%Bp΢kck}YFS<oJN!%CͥigϔnS×[2Rn|H6s'% ;^pix @ZÃŀy;k(J,iMx[!ԏ?cI/(Q>U-}YRɡ<;Chk^W(`JaٙK+ME|dرz-pnuY8!$:mY9]!Dy\~$s P!4<< tdvX 'Ǡxu"aa _,qoQrsxG~w"\H a~(U26QR2\qktmFB ;;[W$3qf֊ S|8gF;w+7d(ǹɅKo%7+Y;) TB(|ݏ?S)IbY%#CMN:i3jzfڻ>`.!КMD\h!k j*E@Zx՞ӗ$Ynu1ª}Kz@'`}Yx@_. gW\qt]cj[K涙Tup[u~:W%F5;rҡ\ߊk6 Occ'ONg/֕Ñ̻oK%% JJ6 A^D?'j/v7WhS{hKcCr`) oϱPF|W9zl};!| IVl2\!𚖺K_/:,K`JBS$5־^Z?EKĩtM/ WgXY&`տO2'''ƑI!!BB6%> Oz/N¾uYDV\wcqg{ B˃헧R"h ?.'Ac?.yBtEJí X$ps:'>~gY+  Ty*;X ~eŪ_%$&cWHeDj9BH ="WB1ԋ\OVr.";vhd-DE 7U\:\Tഗse!b;=dDB/A-&]o7]^rdBBz$J 4j!ڮ7"iņ,dk  w +ܮY@fK&.r^FDk=8&5I <$1jBL :-B8,,sbq5.BʒB E5!vBV_&H,DedvmkDŽrIRzR\g"!~&kG)i齼hJU{ؔ,oGU˗/cdgC /q:A#@C^jy:-h7,O3Nk`BJ) $h,2' #&,lܞe)Un,$A_@tr1m8RN6dxF5h!If:z5-`"Ք]vP"QK;¡I2'( PbE-CR%n+AyI߸p( ixRti],Ns8Br'z:`,&ST˔cW.Cέ;itj $Q)& ܆rݱ:Db ω- 7&BHE4?t;b;z|Q'dSmW#<𸵵{R7 ImlnOUaI#! `!ÑLfy'e##|@63(%(8ꬸ%0!XAKXSBp2yt{ں,_ձ룴ApPZNtVlj}O[W99lc1u \+7kbW.F+fp)$.E 3a&zdL?r%l U{M+u^$՝{᭽F %ә\M9͗aG[s!&~< 6p`t8}˒@7BT4̭hb띷\o^{ȍ3Fqך㤲:LJJEbVXJu Te?B +_ u8) $958d|yV%buF@6&Ks)jlb$ȿ j?6~;H!BrBsMc3< gD:z?/W\7/h@{{[w-JjXm-w&BtCqEz^q rhȢ'M 8 MבCmN"(M=䌍 1ܠ6D/"_*&bup; C W^9Qv&j(\281lhzw+Z((Y['vEa;YupE DT7202=:p\wŠ7޽MyY )RhvOv:ihUȤ:;UdMPuޒkG=@̶iU4[9,P%_etuTW SuU((?݇*;Uj]wN:f ѻRrpR&[8YU-"qS٥o !*IBqGBU&* 1ف';`3HD#D,D~N[8_YvKkX&Z5 *EU+K%(_54Sqc*H/;]R^N/N Y>!&XCBOZ!\H3a OdɱkBAUtוdNsH@ʭT^%;z.]#5|ˌ/ \T3zhpv*@fi:.@T{O5";q7H1CAJ9B22ZH) KVA^_{4]١>mΈ CׇHvu#I hTyu'>Zeuj}x3G7y>w&)hߩ|?,Lk~26OD5xT8's nZ ԎL;q&Mb\ѠNr&Z}8qDǚ:/L8$ lP[R} T+Կ[T΁Ibij "#b9|Q|00q>KϚP!i,?ݵcXhŚCND5K >rAy@*;_Ϫ_> 7j8nvFsw皗'\[#QR445Nz34񑩑ʀk>knxak55<:{zb@ m&Yc#胁ՏV?_XoZh=$y@574,8stt!:|s|BTf84LHr5?UT?D9͵RnP"ֈRM<ÑmesE^ 4b7Rcxf`pljuá5Z;pyDz"͌9W\G:ƸQXcls|Zp7bưH9^[ a1$ ϡm|f_ N75PLl(Ϣ61ÎH~hHC}j[J@-P{|Y@.?QfQ(: MهF4" s6f'D<7iHX2rAeBxh,Lc./@KxWH1؟1=a eH>A.=pAN0^D?)W2 b: {7Pp 3рS?`&1P< ?xN 49 j@xFc)Lqn;vnj6A1c(.` [o2J` !Ì~ |޲?0H0\TĻ $@0ӸS8Ԋ77ք` a{b 槛G|=}bX3GË^ֵ׮ў9O1"1X\C͑1F)M< u;iIxo">?!\/5*J̛u,\d!9@HX~Rg=W6,I6v[wr:b oM}a8kưCr"NyWɊ[rQMߢMmQ>sEBBj"L>>faesn*1Q-jh n 606x e1|ͣ\ sH$  H{A0/%3JF$C57Ga0G&?]Z ڰ 1cxkbi.` ,o)[e%3j9TJWp W' Cbp3vyv‰;{Í͡2U3FrͲv1śhn˨i\jL97F {KW~S#];05[7^mY|qx9/;3K~$m|਻{0pNi5򹁹` Kîc&b 0la+f Jb j1~կ?q=>zFW])װpݵ1<=u}q^iúG.4.4Kk{'ig--{*/d k&]qQ Z(chP015Ո1s&w {W;Kl{~vVIJZ9hT*Iq<#ߐvN̪6$"JcHIGʫ',Hνg9?2ߕSHa~{bw9BcwsKX;CeLd*Rɨ@Nڒ m F0`(Vxr9SW*++ϓ"@wpP%P 45%IiGBhl-\ڭXI-Mk1$1< X1YdNKE_Y!, .EAS_`!߷;UnhdQ46͛`Ǔ+[LךgP 90<CSRi TQӼŃc.f ϳyMjOsq|/q1S],=@PQU0/-@WQ`f 9+d qpּ&F~]q搎cSgaK=}s`kY~6qP]cu=rr/ S ,9%[Ľ-? IceB~@Bp#K,-`GȠ5=#ջY,i\R ulLJ!Ǡ4v%=Ա:[\K4m=k4Hl" t)||ol 6U X͜JI9wZeDN*Ī^[ >HFuqmB3d?b !HNkTGrdc4Cv"ި9W@M 4Uqa*ီBCߐRP)I-Kͳq%7O>dO V;OM۽Y(a"-!;e7iXHVQJWj!w5ZF%*esV>EeuT.lH9)%eQ' \Z(pRZԑ.\A(o/ٳ'wP>;h@*j 1Fxxw;4oluzu;L|7Ĥ-|ym;񆂁C@5{?pC GxKEA>yM??@=3w\sR#,WDRsqCa|Wk+[qUI0}M%XZLL%.$C-KB p(@@݅ ! ^ 0F% c<z={/'Ϟ}=RV/[*Tc՜!.SgdR]otb}I3vl iO 1%S}@MAI{!KzD*Y4rH 9_Y"%I d@2<لYRjjkW4j*9X*(^y !O|w_byݗOHݗ=A/ȳuC٥tW]]ver^긴TJ-Q@4BCC{@FftF^PAƙosbgdqTd W95~B^'lxw(A%%hH^?$T%e~y@$,,ki}Sc`t2eЮi6]GԔ02feBh'^Mso_ԝ߰tiqBZIhy!ы$J A_O|z%;<K(p^jn*+!ϭ>?)w](;:,}حIXj.u] $+$HiGIRt0mVK]ȽZoe[k˻, եYyjv ;Tphy(u_g!?RVcN}[o+|Z%5FR5I"";핧/[;dN*.Wدd*^RỚ?rHCJۅ$^,>Z}*g)ƙIiB:IQːIa\L!%6Z)$Ǚ{-c02L{{u7Ze*8՟Lݲ`fRYYD-F?8XjXElh`l\5p;G]$)$rNF-?ZH&qRq*YRHd: pO .mi3<}OOXH2w? lӰ CN(L҂T_@F˲:9u(%rEaShW̩Զ7vg|! fNʶ :0O?%Վ~&@v4DI1sZnPHT5E{I&?I5Z)Sl-8t NSS-I9xRɎ+%$[]t3M]*CU0֏sf$24pkN&D%%S?rZC퓓WF u5@wsw5[t]vժe7/ʰ^TY4 #Werzp]>46*wtJ?Z8HrO**7\[g7YjEaQ'nRX8=I#gy (5B/M|"RDd>0'<\vB>66kMkĘ Q L|k`P 3FNԯ4fփyK$>10[qwЮ/ BA{`'83IoF%<>L`A0X{;,C:Dx0=|&UJ>,3%!@v lHfAaC2i`( i .-Bzy\聬 RJ`]!{cS?k4u{\D(1Fڄ߸B|wF-7JiNH24<ߏEřS?kvșᒐKBDŽg9Cn,!rw%Btșӎ Dw8=P3.&0R@kmqBj%e]#~ɋ&'_ki3m)|`_ɿ{"oNI'|rri[}Xkx%Ĉw& +VSW!{DM }Dcf y1xyI |œvw""#*]]j691 .' K~;El# F (䑜Ku;LIhlYRCq/,' R6qx5THq#t|$PӌLqō$i L`3U048f!NTzI֞ݔB@wCFa#Y\ƱiHNe؃ߕ4c 8ȭaYAɰD%' §= e32.Bz @F= 2{b`9ʲg>v+]~Aa! jWJQ5= *Er&I¬fAN)8rmAA~/!2;HDlXL(DE"ݥ$eF3""2Q1ͦJ63P#QrCyvxud <%kOq6!rhXKYB?`J|Q_ Rb),">)Uȓh)G'Er&F|@X:a)bV‰y 9d /F+bcc9nrW9ו=*Y;LO#[Dr: %:REZL6&_0TR4p"^E![LDK5P,9Z,F.4}YdB77g\6eH*F` zG!`*bX"^Z>%$l`odfoCT˱ Fl|]뷾1XЍ.aab~'%^V=}a [žo{Q+x׀jm!\$,RLǽHs^^fXw /&{iirセ\ $һ J,^)SPI۳t[Ӏ8^T&ĶjַB621LU҇Xeh"UY|/eܢr#2*lϋ{^n/lq$ˤ` BfF#7u'8Z[NW4,bqỷeƖNgSi<N(Zaɝd0Xw&0@:3pҩ- MFB:0Cڞ rG0h#2!%`! "T/H Gk>% 'u 8%nILbr ;CK ))gsy^U $B'n`4@Y(9|<x&!HJDL-\#nF0ES ؈A@ t.$ѭ@ HC DI nǻݸ,ơæy} !6=p;\/“3O@*#X(^ <Ѱ٬A٤A(5A2!V#Db:ŒJob$EG ۔_c?9/>4͊p s-ÉXͦy"uGPoxnJ=M="`Ku J'JBj9k L/Kiup4艴]1 !qBȧ ! 9ٓ K|tb\Vݗ!KBڊe i'BOU !e i+B\rI%!gK*j6._6"*bt=`<2H cJ/S8 ħCaw:pE#CT}X1G%@`FBM~`5_p}]xÚ KFLA9*3ЁVYh ) Uz*0._σ359 y/)_ht$V\O9.i;s-0$PYn9 (Su {{Zzo)GSx>,BW UXfH9mA}RjhʶzY':!unal8=pr|׵X`}~tBnEUV}eƆA-]j4xڌUg*\P?tZu .QM]+7[m8YZ+=ruunf022my*}sX]]Zр}s)q llC~v*PÕ:\*U+)N$̤7t8Cn $:!gMYaM@1|VgOWV4Aۇ[KC̍Vk#W\=Mtws7~^4|m"př$J6_tf(Nm6v$'iIN}$A-ZfJ5DH銄㿎Fe:]i nH̵kPC˯c6ViԤE<%~0~d}l,0W }J|1*Fϓ+ fp/nlؾ^}/B&whߤc ݹs;4}o5Zw}5k(d2_pCF}i6xLVU( $Hiw0 ޮ+QI?cӄ(aaY :L~Q!+ ,\[2I =Wrk&qSw jĕwMPӂ,B_UL>/,;!0.)!X-V}CZTj'jy֣kDqS\\tr+0Ifm6Ry$uDbƭxiaҷmMHhzC5Jpt2_o&b=3i.Iž/k3/!WLvC'_YںɲX^%)ɛ#Ħ5YZVTq{1y 1`4d-Ũ!dBtNDGuMzᰶw Zd^3Zw1j!\C̤Z=ҪYdY0RА W1Yp1i)Lꓝ |S@[$6$_RK[aU"2]8i G6jSӉ53 JyQZicGǠ*;\I7yKU(sg;s9!J)iZĬSQM-?$Ya4Uj4[B4Yf˺mtK2nmo-Xp{+TN {UUتH;;2ޒ۷|=V|M1 :EetwA?Nj,}/Xڗoܦc,eEOn ԍlFJkkÔm,,-k$#x,G/;t!:!1(A/7C"BBl|cf]P^, njZjIpfvWDP0'kuj6jLAY&T#f [VkQ@J]F- I dxjsh`<3rq3)팎Nb0 pDjimlݍ㨜UNEQ=@["Dt]d˂rs%XkH-Ɏr@<|l"O0tXM?=꠭ (dbaK,LJ߳(`niiʕV(4~5YI&I(ym|:_GfL>Y$AO:'~Y2d{뺫Ex0wP. زx~g"mݜE= E7?xr(ժT*d= !pz6u֜-Aӥ@qQ^CKQIq_@ !̍ wӻ䧖E?0 "5Dj}Cݵ3T:AU3@it9]ֵ5+NQ(.OQ(٤P CWXn˒ #܁ ^@KpP$^lkt͊9ĿDcۊTr/KIxR& rU#q(A|0F̰1$txHC3_fr gQ],p,F0xe,WNV!Fh|OZXNҾr6L Y0&XUwe|v#_N{uXtZ h|jM C8t֗bT! (kLj\'trOW>Aآfx82COfz9oK3w`?V !Ks뼰q&}{f6fj!Xg՘TMd=%SPtG{|>Ҍ7{!tip->(V|9x#[ڹ&pr1+;B|y&^2]R&J%%@ƆHkn큩b 7#K&bL> 뛍^{^q y` 7qy[͛ G8 K:{]EYt@ {pΡ @!d^܎Rlݥ0v@2RPTJm1K\!Α89ItQxHtB9 ӇNx|([ș@^9?䄗~TJ_K|qG"7۟.6|1EYeIENDB`awf-extended-4.2.0/images/thumbs/gtk3-csd.png000066400000000000000000001220321522325530000207610ustar00rootroot00000000000000PNG  IHDR`PLTE÷ȽƷʼĹʻɿ[GȺøxUE˾WEžοƻǽwǹŌ]IܖaJfMǘcKž^Ln`֣xe_JfOǼ~yu~۠»΂~zǿȓrbƿvO>eV岒Ķûpli׷yso`N|ifc`tdьhXzYBlXYGdI=r{^EcOiVzlV@ôZWTءr^M7ʱtrt饥V?5ŭmsssƮDEDr^SНBoٷ(('ŋm]~zuጆҶŮHEie✖߰܆窏؝@T%9qY1m1vȘ_ȆgxTPIDATxyTSwܐ,K$EdQYYJQ ID"`D3*BQ`eVmQy"ULϙy9Ys?l:3Wn{o(}}}}$>$R!P_#%qÆ r7$G? HCS\HYPC"!B؆ a D7lH$f_7Us !HvO`.$7m ('UPl:I\+DS=N  bC!o -CA[G!bH]725fe5n[L")H)rT*jrK&'۳/ B3P2D@w!ч ON|%?aL=cn <\ fdnz=t{ѣށKp{h0\T\lξ4HvDY61^1w΀e4W5:]S! X Sc`f %IAb =;=R`or/2BOL^ߪ{!!HYKEK_^`q@KPңiu`rR@OIvOs@ ࣁYHi=Г;hw3E%nEEEےޙKǚŐޞ417wjuF,ٙDQŲrKJ` }RW_D &O 1m0T1rYDzog%̶f)fZ]]p&]M[fφ׍7;36=449i-XeYU"du֤wY2396d=60+MژU$ K2C"H2tv6z> ,lhfvlhouux3=3{yvФlVo>_웯 #Ehޅ݂,A 1Бkm+?0$H☘b HD$FP5m"Ex}73Y  |dFkjm 9>="9+2͊ .C{<R%gmYh ȷ=2`D1FQ@_Xbcj샭119ōʓ*"<\ yfTc* jh(S&P02:A&EA6#Vʕ2(43 ı(d6ZQcԣ!jBIl`RpJ(PQG) f./l(j*&4q o T^Ƴ'9 <^PFQ%aaT|AFmM u7J<:a.WhAN)aY{BbaVpr$[&jt9zyYWNŅzLTaQKk#l1]uByixR`h=b {u5LW G4-e:ukC^VOZckk+;B[i٪ |Z#u[W'wVZZR6-ee;/45ƚ IT9X' Y bdT*mrv1lʖ\M)9"J e\P|( A\Rv[j@*uDA0-L-k:J{$gt.nÖ~E&fHFd ^:A|We~g_ qYs`{pg10%z/o]:熉1.1h׶9)L/ !wcsyyȂD%ǠbJ#')U0vGNP!ޖO@$Q}zw'tV w*D}JKnZkj+:rh?}whWPy>g@h@! =:_O`iXJDL, ^Ɂ1=f#N l 9Zxy3Lr@@$)ݖÏhCTIIe9d焘9%0KeEzzLjd,ӜoB ᫿!h[_&3acƂ\^%\߽`?&,vk\ `g*.*!& )t?Ͽ]bBk4+wLk( ïmP ,՟-5HO6hh5 ,/ͼQ'{yGl@[`$8$$<88xIjx*FZTR-MsX\MA~ˤ^۽eXq4)' Q} & o~vnkr-: =Ik ~!߃d3} [ɇ(  !"mDHr[WOŤlݯWK<:Rֶtv,!):NlhSw%$D}M]FD%_Zm rLhu$@\Kwm޽wvncyoUg((Nkwn@A*"'/զHRSEE)e~rBPwJrDw|Ŷ!x|~MAj9E.zՀ1' ˶v0, i=VsjBsDMUmUUƭlʃrn3ƪ*`񓢣3rGcMOFl$ #I3 \E!TAA.m Z<ƑN )} mK "qvםy]E"#6.X"],A!͵Ϗ";. ^+Hv*nnid]K|nǗxc}SmƻKW/\=5P/{$[ZK#B۟.о}iy0<΁6qhKS@(N9X- 7 ^K/]9Dn8l}^m_eL۸nmŔaȍvss5]" C\6AR5E ]һ]-Smts[Llٸ^[y|" Z㞚;_ޭjnKkʎmw_^G"?y2G596A;i4A"~WeUcj_ud܈ F˗%O{aikqmLn^hvE.:R[U W_fЛ*`K.;7h_q؍m4N%/iU]m0Eӟю]+]Fkv&Gg g[[eD)APp'BLn)|#*ҹB?;=-MKZa?m wk$uw!: qtJ!J3`xX 3d.vf|gwvl< Ϋʊ7%]q欪+iB8TA%1U=x]*8۹ T)Q2amuxsGb}~sw]=ƩݹxصkW7p8mn\=i;w<8d@CE,w uUV/+S6C/^ˏ9=^;@z䵃|8o8Dx UNvA`zp W$G7zєa2ƪN}Ka+[*GH%v] G؎Bb~|Ư@ar> 9$`qdD ;t@$  ^?1ZEBO? S%$><7uϔс m,&@Ϡײo:/;7W <;\^9IqpZ!cs2{ d`^r),Fzӝ3=Eqj+Opd_\oY 'DW{yA]<erMii~~)I~)Akħ5NR2-'),:A0o(VIJ<]Y 0ÎBSjMyVloKt[Gh'=1gYKnǓ~8Z’,Mps_IC_a_]p^y`Q¦D.;t"`3)O)Âস;r \!:p=<܅B\!r %,BHCUP/Y>mGsB:/d +ihLXܑǁ3/?#whm4-Z^< !k Ɗe@X[L8w)T*\),y*~pDQR!BS@: T9PLA!)4Xv$+B%*A1 ]j5x ]t~IHF]%Xz?gL:YN]_Vlg%'Y}Si{>Xȯѥ9p1CJ]YF3{S 4{Yb sgk/Ϗ-?i[D,?sWF&456Nޖ{>B-60 I*dV S\ 3)y9㖒H \+:vLhR_vM . Q)?UX? Mu!iu B_Y^-Vp6q0:,7zOi{&B(Y{){=$, Xd({WŮI^Wx8ݖ# 7E|0)4X_8 \)R)hx<]: 'xcz՚Pꈴ4P+ı.Tz$/HzC蔒_mtZ{wmsjuA)ȼ^PGe=ѨzR?`L'=ޱ0IbW0 RϧR<&?ajf w,1q;[Agt`#o:g{|bҩ`b%v鞖+!X mDȑnz^r wXh;~$C?a…l~F!wsOZBBp"aGy=X*P.4i@A&-',Ӟ8$bJmgiU 0C}qæGk3}=u\~/wz~zMW>K'Mvmi[ٌ2|dA%i A(Z`@re၂MÚIb h/B(DdDJ`X "(IA * lZ^(آ#RiesN뜙q199=]{N臝׾w#p/& P&D?$h*ݗ<n!˿E?wм5n.D,l+q8K$VSb{%1-&zWt^J7lM[߻2m \~/ku.SЬdHA|YY-r8#:ǃwR$E؈gp(w,X`׭G[S ? 4Ț6YN?6Ztϟ4@jatfq^]eB@jS_NIAg I>FYؕ .A j&{2O?0N9?{rFCBBRշ-QVa֓W( kע2 DVBvF)-w`v-(ElY![[lAf T5hiĠ׀M z&OcmeAAmke}ZYE92>h$2L3 y&!m+0 e=An$]t 70i$Lv}@mu}H* }{G6FG&GuZ6D1*HtEr⌫'HEˠvsJ` 1ЎPRnt1 \B .B8xW H$a3qz{9]tSI] ^ $ɝ tq ek XF)fXg0 A PkY" Ԡ#2'q3m޵ Bё+6T&A .`E,Q43343Bqˁщ =9H ^E.% -DN%ȞM0YJgg%Cw3@z:GSYCECDBʞɜBҦwn$?뫬lY֬AkwTٹՕUZ0; Bq`9Q},:jgImڨeI%^TAPz y(Y“9!#ȡUܽg2#`DUB7߽p7͝jjkh߲}UZ:>OE|JiB`3:S0'Ac2:j*ɈW7~~2 tG"8~B-E'--k9)yrkLy`SP qࠞYʹŌDcZLk E@^^SNMÇ3<Nbno_/wV՘v5?z*SHBt퉪B ""rJ64=pD(QdɕʊTϕkW_Ŝ̈́i99p:< YܜM+VHEna2|.a p7i? ݹycXlFFnޜǛF-ȡ !AϪDDXkomnif}PMjS{JŭꪪzӠL|w==;@֞ D5F MͱqqAJC Fκom{xJEշ5݉7 R ")_M@,,^H΅PuI x91'At VA7L"AЧ)Y=pۏ?za5a|c2l*Z//fGAUS^.XGKͦ[illͱ7jutǪ+hA[) FDr""DZC|YPPxe ŷrWM;-:J4> "aV6E|$cD!WqM(Dv@ 4ʘ_UVaٹu*|]2 @.)@&Ov "!r%' Guo`KЫHMn'01g]_N<ҙࡎ.K}&ɓ'S8՗Em ~ 60am??( 4B!k\OG }8 RTK^Fܶ%ƒK +ܡxe`/{NV#-"wypS #M/y'?QB9|=(0t:@73p'Rj*Kꉋ׭9EH# HH`XҶ隐=#h>\&A RBкJ\ RΞpW~/ +okO5rbpu]G_Gq}Y!pΫʧf{SߌP:-/ƅi{ciw\HB pt!a…X|┰[al'`]"ő,P{A.\+c/^ ‹%iH=ь!SNlưٳx{ s kqAap΅UI&Čɱv {9ֻJ@;$G!bb"( {._@Zp~67VqqCD۲mZdbT o9@vC(a/=`1X 景NOhFzZ5:CW:k-~m5~b1D?,t..W,ڃЉ5h1%h_KEN߉X[,qlxq|xMLJ1nq:h}Q2 d3/ZHo#=ȡW钙 rE9@O{#W]]ũ3éFr (%:F\QDdeaYBqq.֨e .)Rh"jە >v@7W .!b+tEABʎ+sRTS :;暴/뿍ܰtX'$O$?w (a@#_uw[(A^#XH+/ 0=;S<4oX5k- DH욪ȈZEMw'$G1xBnL(F(!"隘ht B&=^c$B\raL,H > ( yYY"aVR+SE*L 6 0J1˒\N~v3+(Q+/u;  P./4.\M =13|O3oݳ9CzN3 %uPw.5bY*?6Wc*914'+;^<),LHTqřx+[EO`Xlmq291ɹl9d'k2CŶOj&W,\yڈQaNDV k[;!=w~\ W q9M5B;SCtB`<N%'/v: UV`[&GkUYteb4'B[LWOҹ\z?aH@`9 #,.Ebcwۛ.)d`Y"q.Su`bJ(`4X,Z`>(,Zlp3<}d@bm;bZ.$.~ELgAh\<"3+4 lB \vGa*#jsp.ph2震 c'A0 @~WsY\5^!BLYBBDǓHWfNr bx@B&UL3<JeafI]&ZyG`X૊ 6Dޭ]=I UGB #@s)B>ÖHtݭ[%32SG8@; jv)x<}"KL֧%`KwKA4y**!|yA g{a@s̓xDAonn,Ō/͐zxF~}؇RP!Y^!Hfѯ|ʣ(L!d#B iQE !AQhQB;`!IYQ!A*<|gAX_B9#tj*LBtEa^`!!wp+|gAth9-ǘWXA(: uY.}xQ&Az?Y ,ܘҘڷZУI5{|p9茚i0>K5l$-D:ykx[{QAO୆(0} "Xy QH潅@zi! rx]#űSBaxK݈w|Q3ak0 +yt"yUS~A.|Az-B I k0c+H7 (#9@f4|{00??k6Ⱥz ^fhbS$_CMwY "q2}Lʳ?.\5k[h3Q#Cgx]cyHyyK; DCE2&{FqOWm2l%H8ޑYc1\^~'0@TJh[!%~2v?|O+1'f.=$DŤABz|C<9If)z?4u,Hp55>ؽAbZ(?FibiIܨWjy;L05dְ;Ac oEfܭ1+\ߎCr,GFpqfBMFs.Q0*4Eo͐fJXDŽLAc`Ԣ҇ù2vj%`L$J,w Fs K:l:yrb=Ltv-1Wu7X궡4WA7EҠ(:qE< /k^24}CxSxy3Oׄ=}^*f[̧aC<坫kbe0xqÃD%:+C%{_A@'?&L˗'! Q@C{T@Q- F#*bF㮞h 0 [ Lj ן䭶\ r[, ]_W! spE~"9 #εyelw{ՙԘ=_DWoZ[ԭg+餁wacIuէǪSBE+߭zZ"9^*t/*XxIE\Vx$lyؕ " \ D/؂7nݵ>*42^yk><.󠭜; D Xհ6+McbaC󙘐ƥmrdѻpDqKuCkuuߙvXu5ݚ35ϴUV4|s,vlBVrrӳV4ڐ]LCqL-c`0Ļ>2Ax<;:@Go9r)LrAvm SA=A?\q[fgm޵yh+$dͳј$u>x\@އ8}pUQ"-i䈤1If1XL@TW4oH)1ML Y((t$MxZi1)Ȼs xm i#-52 /}N0|= ;A 2:vQU0k:,5.]UEa[dR2:d gf ++JcLl A;q  $/vZL=2E :Ƀ<?>R~K?ᇟ5-26>P͆<@b=ess1IKZt .$wl\N M h`]t6̽S00@x=2[ fxv&(|~>J.ˈ0e+/+M" E8h#G,0s:z %A]쮂~} '7.k!|I_@z,!|W?Aenj~,]ޖPV肊ǚA #ɐŬOo7?=K Rv~9Y*Xٲ7/x:!Ę}0Θg o< me>̌̇LeD3t{.),.tѯF_^2 лר#V6Xؒ2dyf ?1k ?7t^@Pٟ~~%c/URê[ªτ՘N8Qu7A]n*,LR>XVe.) ZܥClJ@>WVDVx-PdWzDkٚ-vWWS.C}$)C*(bVcaLP݄=JQ7 YZ OFRmsiAL0xI˛mKۃLإ"dkLlIb^ZH@`ASo=Y$p}ݙւ!iu;8hj1̆u>FAoCH~7N~w=ٗ5vu<Ɨp뛬֙e$oV6bZ[Hx`.JiLM]R=L@(8)LZpxc8" +bAt-)7 wwN"AV|c}'j4TtW֘Bw OVuY9Jv]%ĕ!^! EE;W;v.wg}k׆ߟMf߭AAi@@B2 R~Aʼttn#8 wS 7"fVHRNY E-yQd`}08j ۉp"GI'(t}0A{s”7UwRռM;[ݺ ̘E1BZn.@Hyc!W6 a|NBgo/I$ʍz/+o_Xo^ G}qC+K&e8S,s!ýje&@m )-a~.|HTL3LiTAVnԅ{~(v;Oީ A!l)7ha!>AsE{5݇@:RN|M<‡^cC0EW$Ii 5ClyO!Io#c>uaRRv C|g|*d'Afz&-%X_>GGUmf! d& |aTNဵk4ʍ5aX  p"O,3 R&3-^m\3FdA0- Á"8bʺL-r[@!!L6%j&gM ^@cް 9$:^g4]vl3zMΏў0?}o ⣵&֙$n n|\ jP4 84 Tv9l, ֚ 0vtAn5 EB;R7|SLE^N\FoR7e+?mPr§7#}{BKeeƎ QƳb| EG8$#|B]\dh9T) aC)le|_Sq<"[[,M?_ӐO?B(g(Iv [.8m\V(f3$mxYȇ7ڳ#%1\ACpFbI|2PΧ"ۿ~ ܖ0I޴TIәo{yz{߹G@ƣ̞?:;XL޺0tTq}w Z9{ss@^tp#!]'Ab77mp%OwO5*>{{4R7~ l$t}* `ڠ/ƟiyeRmp}~^Wvs#30³#?[+ШB^Ż| /'נipQC}whGj/%Q&vY QPO .N:xǩZyd JUCCH{3=p(Mzh04S+#m =2ao 9%̶Σ [Y/&0^x ;Gg&$$nO!8֞?.W19dI'`x߾н"4j*izKR9Ohwܻ/1q8| qP A`  X201¨3F;8= `X©B4 AE TM~%ЖGےNC6#)!]\#~ءv? z+Tm$!+"G0"vcA@6D(VoLGj"s+9BdT~yK!X4CM8Q*[XByzg|Ga6w%\̎#g}]fAs>۳ By"BԻ( )LK-IDT㫼8 Yj1<{ -GH0<B(y=;2|JeTw(sBgWuMLEàW--ݜl,1ש&|Bp UsIZZIeћW^yGDǹ`d B#DE>$>΃I+Dzg~m0{/SǍ(t@㐹hn~goHmЅ2dE6U T/)D#mu cT6!?6LP' I@ A棢7wI%Urzo##R-UNS@H8Poou[{[0;#dG+!,ҊV2CCLI_Ϥ9I %{\;eDvR;M֑' 5Y٪Sm$oDEsA?"ceəRAWFr F!'3jXyF3o|fƋM^tC^4'nX9v4{$L*sGGJ2OfKŸ,!0w YTBIb4D;BᥙL`L%*0i _S6婂`<_`aK/g|0)4b訍@ BP& !d]S (L*jqD,CxB8 RBX$QI3Rq9w+() R8N'Ia%Wq !Ef+[c_^I#pGhHHI,o̴Vnݩ_Smp.4B:Bh |Qt,JC屄@ !v%d$,/Z\7mScIÄ/<-5y4?Y-]d#d&EOs>!;i;٨ dIʉ0&d V׈ ʴB֟#2 ok4WJT I$ T%QvER&l4 ) };~,ƛ'R¾$bMDu5"`r /:C54#0XWD?a"6 @R",T0:&6! e6%S_q$yto޾J̼&uQHOʉO8T& "8^<+( !GtN_!̲IMLEjMjnwq~f,V-,:!ܰ33 !D"$I'D S4^VZ-\@ƴ0KCSkr3*;JG&GBa>(^XR; j "pte[¸?Qb19#465hp.ܩМH +$a– қ.蓹V1B(kv?avfj,5V kw͍[j{mΛͶqJE9^1$n%T@"-F pOHZ-P%)4@ŗ@6Q۵{88{:/f"PDw.}jrh=Ny|4pkQJg8_r#񱆆fpkhi鱿_b`Z|euzk"Hf807RM6J"}9mJ?ֵOHX>CNS s"\a͂lHC58 ^9X!y"dž m\on;C320U?dm:BvXSqe]@m]CvkOyK_vn4ukۦڠ2K 57$xXC]Hڿ!p[bm ;fVae".Cѫ U*  ኷pT ir&eajİKs!@HBHl.p,JdGΫV QjZE)ifiI.-F4ZhǘVQ*Ԩ:ڎ\I+E 2ZF:!@'qRL2:I,ܜ(6'CM+^Y\ͭ/;6DҪ3-Ϯ:Yog`ObҭA؂S!x 8k]_v_!Nܬo~~^[XMB0;>;G=nI~Y$< #dBpd8 "G܋ss+D`ʣ;&%gT{57ZqA!nn 217KVEL{ַs!!7u:mFȞP !0忑qB8& :: CI &b?&*0Wg6- ^" }#L5 B 474YYUZ~o(W!Zi`? jfsfGfp2bhEBv)9eHCT+SfȽDr!iT iN=PUdK'yއ赃}ț u1׀,:!p}o͆ #$ Oo'6y`Xh\Q3iU-|b_A@ch'ah%X`b8VY*\,s2!i*/@H(q4!baXd\!y[yȯA:=4N1#C p!P.07O3CKȉP7>G\`]&Fbv@VnXao&z9<+Z:ەj4GGFt-DD܌20SR)N!{;荄'k%&qMdKI4)!: &$̄b¿mN6\d0\T3\^Nrrք}og1 yh7_[ȃ}f+}nIzwSܚ5bV5ػ} 6lǬC掩6kKOI!qB>(TBY9~}qCYn$D+b)ŵWs:SN6'}ĪpMyҬY]yfAe}ĠK86 6tD5~gU?|~ݤwîyh&|p;\H!L#:Vd]CcC4>:fX{ZZ>fgx‹~B ~Nd҃u8 +5d:Qъ$Q-K憽@*oػDUE&k\﫚]&, TN N\ׁ:s*PÌkݡӹuormU5, lԐ}{:a(PgGu2YƁ;JϞo Tcmk[VEkjPF{GPƔSW#$IV`Q%C0I%kũJIH~Yb@Qq9q$'w6|! · msTΉ&?p-/̀5qX4~8&a%*Fx֖&g|˄{7>?2B 6{_k |TF#JQŭFqT,楗?x+I 3|֪<UӣjUm׫{[FjF-rX d Zs(}gZIUW ]i>IgRrr0Q (^N#_w {D.1qmcp h-\zڹh5kD݌avYX'Y'8B26C7'[a9 I1 \C%hYR b_?*U FE3RNb,XX-:Qa6o@ <[ߠ!_R9q&k`ӋM{$|B$a/5&bȄ $7A/"SDĀVCCTX Sz!Hx\& `"3E=%4RZ*X.Pʨ6!."N0OЬ`뉙@ ?/_h4䥫W^Bl)k9膥ub0%#L!FYܛ3rH 3`"09\&eFLҐ YTڞ?tɡcʻYL:,T/̋%Vu"ﰡzzB4-suz$kb/rMNp\tq< T6i9Y)㐬bZXk+kvHhcXՆQcIT6!"zC>򘑪LUƆT/P-V;ז{ʷ>4xV=~0a87\z¼}vON~Osbg_;AݗXFS{9OH~\KgzXmN4YkabAC/RԘkDbt 99'cCkBpg ĄsF0zh-Ιߺ.z3eUDCW{A zp+p}H[ޝ*σmz~`>qĬV?>sEv^w\x3Q:F[:}1 7b] Վ $[ARd~,&8"k+ # eK?BbD)l~X:)Q"| \ORCM H&DMڡy-aWW)ǵBJZ1]ӴEŵ }9`܋$ DVZCpXGDǕ&֣?t=[w?x E~}O{>֏g%e%qF_)!%0Ϡ{eJ.IB~aB__pɋ?a ~o/ ؛*4r !ul^&(DքN((FpQR<Q>Գr,+ظSl=o0!x_|_?uw_|_|խ_}5\= {kJ=ݫ(,*(!ތx=q!RIFx]z}+1>,ةgVq1*] qAw.,%Ó< |Y>Zx[8p y_|zK]АG{>|уCz i͞ܒK%ڄEygG5$e=f01C&{} &nvs/閜UabQ3oָ.lOC,$g2l 8Bk GdkqX>4t>@%<\~@-^% \}Q9OwcyF#1ʢbL>T KYiqYWple?lLm³60383>[R ŚF$Hn0H'՜N9$*RV5peJRq)\#G>/p|/ 1X81xzEu>zAťޗݨ R\*dž w6 w 6v3se9 jgˮ½[q] ض+y ,eF2$UX^<'522-4Bٵ/ J&NH1xK ri Ө1U{Q@=ްGwwaPun}t ]-{RRpׇ=L6&ED%Zתc O u~L#tǪaV7l~4chФ|O4k8] &%3bFC)Ҁv\gYEyIiQܨ(ʻhdX*82xߗˋ Ks}erƅ\iQE)&tW@&\AE {oݺ\)x~q=Ũ,Լ4BP$( %}.)MEHDO=>Y d0Agg@n#?<sx㙟>埢2$(o!Lq (58 㡬$DFpL'5)9sZ{vbYApm0jrcZq13[ff95Xu+eB,eZn+os | :ҶF.g=_K{hNX<=,?KA|'[ee:t'6;peGY4FI`23q R Z~YjUxrpz{ GǯL-p|ŷG~Ty앩~h|L @dL]/\lED[m>@ _#Ε{7/?ũ{S+Gwͻ'٩ʩS0qǃ'ǗB7*??{.WK۷?iBV/VlyVSP|K-*ֈ tA_ ;޾8:~ny7Gw/>Xa ooÜ/=;n_,w\wqos-| HV˗b ѳ S@EQb !\BuԴBѾgt W.LYg+/cG啠 ޼r,XWV|9R+gW^,x.ܹ}ϟg%'S#)\j'^U6xpHsWG22 QJRpi%eb (H]Pu!ŷslX X"%D/ _>㤐ŝ ճXn,Ng@c1X "ւVU&>{ Ys@EZ}Z[ Zcv1$@芜бt[ ~f)//Lcg Bpa~Y_dPks;oBrŹ@aБdC5X=\V7b6Xq]:mj'-_SVCcuQ#@fLN%htqWv~"'X85&4uhBH6pAП;?Y#Rr苢\tJhz|$ECvKg?"">vK-KBfH;JϚCu|czԯ29n"UnVS?7;[V)L tE~Y^,2e`$obgX!ClUVoͩOi}yU}SՋI_4biKW*+?-/?y`+y[}rȀ#oC˧@ryjY-D;CT3VuZnF :mutk -V*irmL ixbdX5S!/J;>*dLLV٭x+;MBS___~{zHSjzQgZpt;xR߻|#^BoY }(8`]9ygSAi>?ceY4*!v,M=6(;(mS)'H8_%d`=$:9& :mf!éAf6`+K_\2yxo@P 9+k!d'p?~{/Alc3ɃË.<yRy%|N9*r',nr#vyyȜ9m$:1.^uH&Dpq Z{nS 6 H80^]-:NVg~ɍkg` 8 t9ƪ۷C"%y xm^ ^u25ty/Fo=rrwo\>Ryc uuewnʓ#ω(=gQ϶hL]Y9xkekAɘ:H؅?y񡁡1[~"*)?~/ ϝ o/{~Eoo :ix4uezu59Ieb&@"$k4~D_cWwD 8>vB )$j.w#n9!k< * ڝZF޹zOښZ+˛@ ]TۋFz6Alx}QEz,r`lY8&@z-1{UpHXP.& &ZY7LG`eC1Kh  `Zp7!Q6 !0 8ٗDP=:*UWmP &nAl g;-G5x?s7UBз2(~yl CDH~/[R Hw ֦2? X mcEVc4&J iI_;}sb;pf+oW/WМxȎ,j [čN0\ 9Xxb;@SVX4 h8uu,Fnad[gis=8GUɾ6[t[2.BLLxֈES_~EE#(SU79d^Yaf?#HT6K29 #9+M:aNSΘmzF & =f=0V]U6տLzȩO* ɷXu-]'0X= K`¼jnv1Z+!H=`L Pk v=mrom_w: ~">HNğMr ǂL243fi9(P[%&QQSfvX6a:"fα[zXz,6{/(-&8t(uM w{CthWClqŹ<9Qԫ\Ln uI}H3#`:(X_W q>x#Qݵ1uJ_"nuD}H]_X2yԵ Pkϕ' kbw\^x[v-3dEZ³ yno<Ηt4!a a! !.8%EN"K#GqY?0b; v8"ΣSw9 neoY v[3,Ha֋װZ+ ߐ~}~,ӹv _"W:V}׳sܲq[F@oCokMi^!ul_~@ []]!'F(2$Y s'$&G/ 5P9oP^$+K48*nI,.ςF# )Z gOUbpϣX`ͣy!K)zꁄ7bj-ǍX':Ik!hc. j.­i\7YNDk9/Ix 5D9Ej7 Xi.9/C E!2 Al;)YZ=xtc=GV挋FT9 dz ϜjFb*48&oA'ˀs0CSHAz!r8 B"ЋI8Gyŭx"띈cP2dН4FƢCW4?A)9ĚƼa٥XpՐB  DYl TA^<𬸓Q+k&LDDLLAd8JIi q_k58f$+sd(9nXnt(*faQˮq:]n;@(z^PNdIM 9;B/Tಏ1[,ዧPtܾt(503r=O8w+cI`hd>q'!@ra3XĕN]./jO➠'!!$w b+ t*94?v&P"悽H/,!"1"aO]r|to(=y\tĝIŠ /rg%^9>Y sN.9Y{bXaj0l c9f1YB: +wY vFK\Թ?BT Q$+B5A pP3 {;r5TqygaP@۝"wsw`Dg" 51'H%zs?#O`8w&p iDvCgxXР4mWMLsljcHMV `e:hc60C_|>k0,E$h&qڟ_( ;R{2=Vb7LL} $#$l]S߄mbPZBl'd_BX4-C^"Ĭ!d/~CȞ"0w1pWgpAxCB!>h`Ŏ_{}0Fm hERxyH SuzAp Z&qؿXBB\}pDBBD6e`ÅMA,O% x u OQ4 @bz)-uDp!dCZh~P cqKְȎDL"/ /tz+P^/_C.Niq.zi_ !8!?+ChSC/ѕ! BOWe╿cv(C6v gZ.}F"߀Ҝx'+b CZ>tm~B=mtƮ'!n5GB8RFMfj7C>SGxjm~`a0; af)jt*#[kgP[zJͺl|4ڼ ]%-4W5^q;iR8lef`T˱meKaJT=9FXp7l.kZ֯ysz}#B}ͰZD?gTزyHڬDjufl1rB(]TjJ!_Sr46ܵ"_>8aqKnAƚRD)KX_K #jbF__Hi߉O>|z:wZ od ,JdT() V"a۝Jj 5KZUQ:X4WD-Kqcu@z\XRj!{ wyBR'3~Be,Xx:le2ɸKtW̨sZ\P4Vzӡ@B^8R֡@ xp߱UB%2wW\2BX zD0ܗrajޟ ԬS䴥H<\.o* U]B̼+Iмɸ#6u.9hů!ܐL kg&&~Hhfl 1 ;&79Uf}0HD.9#i Df$ iHMwnBob 9<|cؙWqw&<_,߷eE|*ʩVuu9ۦ.Ijۦvi!t‹r 'Rrvխܟ{%6֡~!NOoNo?"(rh_f9a ݙUHB2k9H܍c 8\T\RBrZ!4Ẻf)* mPv7-BlPts;O7nQZbqK%%ZH?5xPJ-ALيbBQ ss;OΥ6*}r`83VakGm5|&Zz _Mqc ۄB?R]Ò=ۄk"pkD1! LPbֱؔ7]U(/hu״IHנ4M ŦHr#!%}!d```P&=ݵ;)u#mOiY"vu4!*/"˱dʾLv(WcD8N=M⟆@O?n u^{Z22TW{t޾emؚ:>{*޲Fz!WҕY+n-n䶥\?!I*yMZHέ%GK*p|کS n!ȊlS 1ڲD&  G-(^efWՠٿ^LSXBiV#V{pvȾg*#y`׀SBUbUMY ۛTװ+VA7y!jM>F=w+Y *Cɦ+^Bor,Xyrݰ3N OuY˒䁿,\KzYوα)0Y(ٻ`T̵Hx|5e僵L& ȇBN]G=BnYyՓpmX` :raLҷbi R-LsRd/w{?t=0D|޴{q7tE.][Äl)Z1ǻ0`zMW&ҁtv#~b޲! D Z.D "ms½w!HSDNm̯b,< .ϐU"KL]z E{TipZ0`WoY;06."OQl6G0^ زY_*5- ^k8hn7ٲTزT+n&eaIW ̖u-9lxYc6575 o:X((9>Ͼ{lY*beIt˺P]c#k64V8`E٩Ftj[\\%޲98IX- B`x nZjehHC+Ɂǎ}(a0hSLB[V+V8E V@K#0ǚN#Ѳmj do۲ cD]+I0oF 6b24q7@AEU@"Lp"Ep:ρù*a!D]u[KST`h1UMUyucYZ1*Q! .jYUkE%Akுm3u1Q,"Ҡ8 %J8^ =17#BoG!BZŸG{pp<6 1BЭ_(eWWC@Բ^".d7[Jq2?Njyq/I[0ڛs$q;e 2'QJJ$$@VMEpIVt#[,%7jdcޙHǢD532KEI$2H$J5CyIh4C3,)j>i4^En`Waj;?@d7Z{{\?@-\+<߅DZ2||R3GHgLAAYu)nU 3_3g!|xʡH=!0r EM_E-ϏbM-vUNc(TJn,*˽(i ΔM+Oi"Ϻ>\ gf]M6/1J *g9։aVy^H}]? %?G,>̟+p&Jʝ%"SY+CZg t| dj;~È#L=4teW\C(>HoL ^%l4QKO)!B>ZȊrt%L[$GQ4BcX{`@xm5/Ga5` ˣЗBY06F,!0YXь~'[ k# vƀGfmtW8pwMu7ÅaR|2?Z=q7'ӢѧIENDB`awf-extended-4.2.0/images/thumbs/gtk3-menu.png000066400000000000000000001170001522325530000211530ustar00rootroot00000000000000PNG  IHDR`PLTEĸ¶ɻϩȽ[GƷ]IրUBӐ_JaJbLŘbKxUFƼʿhN˼eNɼՄ\J¸Ǹ}WFzg˿n`pa̾ŽӛvbܪǼhWS<´ZB_Q~zwƿӍ^IbOyQ@~{ڙhReM|ofXʙuyvs~wtqnýݘtdᡡxM:楦ºڜmYƹϪifcwyolivhԵa^\ƽr䬀nYVTtnF5ǯLLKĦ;?@jQ؟l͓x9lȸ_ vq,G}߄;=ŀh]Z㘒Զ9`xVEYhӰe0UҦѴ+˄IDATx{XSWC$kHKrP ׊4\ 4"M@.JJ(2j[Q)XjtmҙvL<}y<޹y-q=ooW`k9h5}~[+c<?P`]oM+۷tto܁l 껳Qۄ--[d!{K7;+{|;x& =`CAw<,WKrwG RBavf/C0ޝ\o?oJ~l"h<ۢ=AWwK]BLhBrB{4u8 A,c=}m=}- =$u^_1n~asE 1E1۶/:}]V+,/gḴfifxmm3Ѫ,34hf]ei.^?UTK_s±c ?Ϙь ܹS ;tn$ն+&AshꚦnV?0`eFTEтZpZK)ycԝY}Q'ZܙiZX깶ְ4S6zJy8tI_gLkc3KK=TC\%nA_~?燾b TF̣SL՟]Z{|rQڵg4mrپEK,4L5 Hz;QdNsh[}O^kKy3/\{NOLGhaLSEr 1k)L?3Ҭ?/ 0qi;T$ {AHŠ'Ia'"G@9 %'w% uh'$ |ҐFnF(#ް/H b2e$BI;Li ΗgFFFhV;Ð'id$yViče_PjU75?/EP"d|(n壈F 7eɸ)t=Fkqi#"d.HVݽ-v/ڛw8 ȝD"薜6YjPš_* :G;IQ)yZȢ (T2զwRie9])M+Wf 2=͠m SN6E@&|zO _('L픷fPL}==!ӇxIIU.VO)Yɪ[,)^\\^zXXp/M8Q4`AjC:Y|`H)9ZJeԭZ|牑Ŵ4l`_uKfPx -E_+BfwD餪Β|NL/ZЩONey5_~dH!φWKp-,/-^ bubr1 / )崩p_Z*ɜR:ߑN$rT.RDndd|;:JgH/9C@T9EȦ%|)OId-OȔٗRq?D"}bk;ՀhK]75  8<|z}bЌVN؀|n@k:sR>u75eZClS6) pU\/885MҡɩN2AywS"I\$Xҁ !(k7.؛CAP~3"҃½JsBapN,HXX1k qbaO鑑t: Hc\=z`d+GGHH:j+ ]'Z– 0A @{`:g3[7^\|x"hP(^9 k4]]*^Lfyo&t`[ac?A5$$iw,*Ep3>[,v).F-zN7 8F a& K(+TgA&h`O`8?"~G>[4<\y aw-.>PKث(n ?_ƉKc|GH .G4\0y-OuNm+|,O A7Bm!![{|a\ ~`V nʹX$vA=Q㼝B2!Nm'^!hAzƉ Bd&Z`z#y0*AZ0bGzy]];뽼$azQH/pz !w!Ln =Hn0dB^#Wd/`xiy+nn8m`+5,TN2IL'HDODODbR^ K+%^' 7r\@ի"A(x3`c % kAUsһrDMTs0$L*#msn^}]ciCTɦ"HǭK3[`+$HǦeU1_bdhS kx$d뺫;-x'oفՐ^-ăj]~٠LPy%ayRV/VXSj퀲qbU!0#ՐػpÅx`d䨬G 2T Rm V*ōƆJJZM:;coype4 ƱA!5 C(OFUPdFQU~$`&Mۓ\I6]|LG$Jbh&}݊cxknjcm̈́c50GvD0% *vCMeATƻY@z|AmTܧ B8R(Pkkr-aPUjxFsaJ8&66YDD˓sLQ CRݪƍDnb I"Hy0PƓ^L/16iw*Dv_Os? IdiK6:)zjD/9E&Z.~9Ojд $Q'*VS :Uf0!LdeRV}Yf)Ud3 rvvusttط &h|1RruErL@c.ы bkdr_<]陇'^e8ڒO6MJKd(5~Ϲ:n#N8)y\ih~| '>K$i`OvGnpG"rGꖼ. A/I~?jJm˨#DX&j;7mptɗ0O3X| qYf2vE` @2KxD^vAgglvx{LaIX|p@// 2^Uy[yԇ 1ժA~LD.^/ɹa+vؘqۛI6KJNQ)A~h p D}rыRV[+;wq&!J=$L\VQ3a3Epvrfy"7LJJݻws}R/d&&K@DHl 7/]XwG;n! -bu-ثn$ n_WzpM>䠇 ~q]]V.1l QX8dS oRAtt||t|tP.OI<of٥J} ->>Jn8yNS_(c/~0` jvxZY^}{ HxLM c*'bkYxg:~ 9~ǪOqR e>>:]aî8sݡKg/%/nI3$0A**t7خW{D"wa&F1|]+g찾J/ᵗĊ0%%63=TÞXul I7#;VˡJ0Um"˔Řp废E2 yFA΀)I) aEJ}e}]‡pthq!qAߑgp7;zD4gn.%Uo L& N0I.ߗF߈,;;KSw_Gl6[q?fE |=2;M\2%[ Rr(HiC+sSffOnJJ{gO/#A.&!5Y"Avoܽjݩ9`"1'4$@zzgP6֩37\ٮl3|ql(WWW.cZmUCЩxާ嫟}D^nkt4R5$=>N<}:&WyOJAgŧg.M|W?ɣ5-o2$V珁 Bzzg/΅~ﴣ_i_6t~_ֽ:I-x?RCV21*bqjkE$`dT$IORT |Uz&ArR4g$%E)I &Yx.[MwGkAŽoxZ #NPwӏ7G%Oc OPIy8ڌ׼cp { Z[1ABπS)x$ Gm+(,XrƑky}(B|mXB$xzTKpEʎ+HԑS&Ly,ԐwhTCr唡"/:kk/ޭh-hɿWh_Vf8w& iwv/)QݩꔗTW襽AIfoC ik/{/cCŗecRl|aL|S!dKryE]?i!ѹF\ܩقK_ZK}qEų%rtGbjkKw~ f[\T=DŽl>ܜsYh02+Xa[1+ڄʵ4Y=i!G| *ᄑw5/ݼ%Go[p<^%gssK&댡"(LO 5Z*1S@WMxV0W"lD<M64/2Ζ;}QrяtV`}&l A,6X {?X}W$&jw2d8~8l^A+t0j s*h>ʂqCi5F,VCdQ !bsaKG&22OsAVs}evXQvYhlBC QlQ`y {(rjzVoTS\H$AQcE<Q4nk\p(?C}6=knV2S?nh;UC,iPf&Ro2UU/Kەa;jȎ._AzsW_moBRxLGiHAO T+-̐t۟e-Z _*輲`}xd{ kȎ7=SĠT}Ya`Bm%an%%JjcC)_Sl z3_>0t0j-,A07& ޛ[{V0ފh+oonEn\hr&G#"L+]_Ak3!2 9YZ d`pvu~T8, !A2޼1)KQ׉tӼC&J3OgV*3gIg+ ,Iң[< ٺ `Nݎ ͹ׇ5u$H"AH1@ehRǎ(A0&!&"҄#|P$T*(EQ񌊶gxfZ>sͧϫ/]*q7WŒ᳼@f^6陻݁%YɊRde",7u@H]wǧKWY<2Z{;&BnklZ !{>ҩtS' 53'!U}@ZP`uQ|:o9x=ܛø}@9:YR[ d3o*7m|8%nC&4/ѭtAĥ--K8dˤF[ 9IOﵪUW Oq%6"=]="Ɂ8zZH5lyP<,aB9J 2@5W@pD,9(Q 4Cp'RIhNJn;?PA/]~BcbZńk[v{A$$DȎqGD9:h舟G^I8D>]eu^pXH9edG^OZp)&]<=8FꝍG!M߼8 <.ޥ1N%@(NJ筌H l!zVE*#4ob,hF:;Gڈ* it82hظ0hs4,[~ {jĉT^/»6PF-rt2]",= S_w@x"EYmilcR,תg#7}ӂભ vQ!%"s`@d < ٯ&KFy96 Tz='![ x~%lA LOxKņԃ~r/FNz<҆FC%!+4Zo[-^Clux&0L?ۯR1&͔Fil([kl.a\jzXjsk4&KLi40LI )H6ķ/mIfy `=yȖwvz9t: ~pIE7 U7l#WHJEA-nf̢W*fήkZ .lm0٪S &NqA8H "YV텧u\ݙ%=_,;}͢ݕ,D56۲ +P^"Rw,"OB7qևhZu ,ا5,GLiͭ5+ce`t(5vd*&U_k5M$*jH#@\\'"]AC%1۶Y_^~]r?7Wn5^Rި6)R+o^&D;`Nȼ߿ZU- 鲀+oXt 7hkK#RZ VVJ=;cc+z[fM}bl7gg+-bD"Y5<.8P8X(7!"eNd`-Q<,gť6O?x_K:7Dvg&v ڞW*+g*3ۺ3|c4`!i [Fw $#L.Eޠ1,yVr+_C0}YM[,lA,Uzͤ^c@D &"_\P21XB:GP 9p",d.pZXKܗ8O 4tCp+`aD0D}kzzauw捡69r9v~.E腄Є9JA `9kљƛwBÀػ`m svM8v9.?hr^uM`cLH >O Cdört=Bڴjq5Xwm/ cL$0ޮea/x$L4,aa`~ż 3PR| §B>zL0>dG r~4GM z]es=\Ң ^ޛ\;_ƀSm! C|}<r%G?i\[ۍʻ=wۆ.`G)e\ TD$Wo 70~.!'c {R@\_10EP/_:[Xz%G@p5ބڳ acGʚč1kҶg7:'!]"N0VmJ$%lv>i!A~23.J'N)>`O\Jgfxh}lWֲɘDݫ&22)2Wh3,$ʱ P9"&FRxLBP@ O75 Loz p+RR#uܹ-6;M;!KnrI(翆*G 6o?߬`pE&hĬ`VtJZ,>6yjY\kl9 i7`ΙDFf5R.3N$Drgӷ:kg}vSX +(2-xd ԥY]MjF:vهalՌBwBj}eU$UH^uA+0YY=+QVB~IB27}H^^*Lrv^Y d@"HqB8y+ed:EgCũ- GH$z:yk$d#m3C >Գ -qe;o\hͬae#*&DY@|'?=$|1BF 1IBƖXMHk4Gn1̵4 o3#KKp0mnlc.[O.pF넑2Zd0pw :N?!ඦX_y9:> Wܳ|36c< D  O6gR^ TB%T4zD>}bXɑL\@01I-ͶH-v%kb3F#~^Do Dݶby)x{:ÝޞDzQU9Μ~Kk{8b}dٶ zx-lGY^p%BY^\n/50{Ǡ\I$ٛϠ/{~tAH0EGR28_;v[{8<'9* y44UB&P[Y^)8-q,6nc`[u|w6IK[y>۷d<]'p,OBP Ǯ1!kq'#B  PV& YY~"*qʑv7+ *qAaN<HbX^3Ldd&p*/?b >%d8a!iNBm$r*.˅YfC#;d$ɬws}/WYᆻiť)`}.D!r6,X0R:H"vy!v#nB:&!V@Ӎ Y%聶hm}K3,[ѷZ-lR gAn!k8 k4̑ BeBެ_=rW }ygB @Hi7m([T$\!n.3IS7֚*cqbvXisێ؋ jiFh5r$-Z#u T7,k;UE:4*ov¹9~=0zGnݓ0dQC!rJ$2G$bz}^[* ݽJGv,Y&QZc`_e}q!vJo]ߟ :"B :T'e5t؞<}ѶGY0Rb !bgꤎ L;th!BWy}7|Ԯ6KZW*Hve-G@:8}Vl{ &51P8Y9xOB~ L Jj)[̩+o8-SǟNhn`0 RXIñʱ%#B|C{'}0"2[$v,g4r^sQjXYf 6g$M8!s_b!Ζ X!:ù;?:[CDr@"^};|tiqf$SO@-&DMΝOݢz#~15jH")uzL!hj/! R(15o2=s9JUe},鄩ׇ~|Y uqjhNpfeloCl0FMo_ʫHa AF$\wsC EN ;22'+A:z'_E 7^e 5(U':2 'z1+PR1vqm.6Qr~[tXHI`,F-L&Jv.l@d30r%6" zzi`~ҳ Y2*)wN YguYDA-̅-r w= dBy{N. b@FFP18dɻZ_AK̇h#@B@%tWB` }w.ir!НZ8200PHgBX튮؎zDjQ-d?(HhN=/ykss~VHQ~k>*BoǍc}e}W'V\p.#%g;..Q h,>mz.''y'ۮ|VH]"NCw*VBBUmapރaI$"p#|tۗx~pl!n!!'4 /y}AǸvzu'D!q~nNe њj uk`EuPO޶G˳βP%#W.%\V{Ϻam$]IiwBKJ[_V)rJ"Y,EeJiK 9L_$0s$c0uRg$|o_c‹) btc*bԮ"Zj5oyG\5Pe!b.MZ%"ZF9"eDbk7@M6bbV#RѨq<=IH\4lՖ dD]MeC۠~UBV8m{MN LHeumא넑>.BLUi٩s}ƾ 3kf8؝zU'EvvyFyf٠Q9&1>I'f8j3o w?>[֯MR !B'M;,$:-"wBĖuiPfTUE@ZoeoS7#Pz)̺ :}vm^. ˧'-Zɂ.-Ȥi%d ^0=vYݽ*K9Xa2 M  oyx/D]CguuW!SrIz4}@HPptJҺq+&vLX5T@VKPkʬoTke;@٭w'|un/j2g6@gOU}rMF7T5Uð%ݱ,S.*DW=/o#Ž[aTz[N!Q<ƍ߻uĪ{^%% a~~QհC[nMt) R(1 8S\۱! 2ܽm||xcŰժ{XSK@BU%8ȋWMnB(II>C\ +ss| IG'q&~|HtKJ>zCrpRCnM@@P'nLO2⌰xFJjU⍑ͩԍH^\ ظ1>>8[bB^aaTjёMrBh4 ү\tNB# S19u)@\| Q>o9u 6w0c;'Lh֫iC'M M K>14!ocB֯Y>~S(?5F*  tqh $( Oξa!k#|epxTto2`= ?c/Z 4 |0Rޯ %D\(o)(*LޒF9 Hx)~!~UYȵ !} .g,k!'DLRچ P!D>FҴ>z9B&zDʶ8;8Njp7Q&]_BP@A "b3$Z2pe٦mhKB߇^khr@fz#xbV~)$n*&AN@P@ !o`sA0BJ#pŅlBtzz鱧%|Y|#ʺs)e-j:Oת"w%Rg[H$ r AԀ0W#9)F\Yc, '֫-Y =(89E[@6Ǧayq?wF.Ek>"Hm`UԑN9jq.U$8ߐID^n8iiJRmҢR d[HYl-M!KmD)A7{C/ "5v >\D><[vNY+[XPk J~jT.RW=P"HpQ㝐B~@JNrN!5 j41;!d``L!-v|G&,0t3$`~20P‷+~_5IikQKX~?>K4uUu_M4(@:%S()k% cjmQj}'nk16'$mP 5* Ko״Hb^N4*%ͪX["&i:N&d= Kdؔ_,Xz>!NAHC8C=eFc*TV7jDŔJ7G6o) HJDB0hXjW `4\i ci+fݨ [, U5 hL"E!jjWIG>{qYbBވ'rί!4K_u1ө/F>w#ɡx`.H@(̏cFoWY) bBkz85vB7`2ޯhWcW 挢_?VY 8“nx&d-& 8DPQ7LZ,XdBȀ3НxI -C%Tyjðe^Bj"eNVU&Z&cء0?Rnw\Eb;6cHpܾK(e]ێ8عuo-> qKmlJ%mmQrcXl);DbZR+Dbe<`W+q@e]e]x-q4p)#mG.>Ex~ =EBZ:|C)SwEJlʡ֎Jz(K`G$Q-!l׳ZmE0$Å{񢝍:Prv㻀{"#O'6_st|!ňN,ł,h=  } FX,\/!|Ebl'<;"COW8:*@#3T8B,w.2g[hE\@J\wH(YlQiZ1An7"{&L.2ʻiw6N>0ۑ>a!AG^%dBC(9',DU3W#Ҡe*>xmdB 9+%9m%}v&<{hTTlj.OaMv0J1T8 \rvZ@tHyN-7ܿ[p@V1L;8wOX:Y.B>wHxQphq0Z!+58s뱢!慓y0MN ʾ;&M\R'*7)kMsFsڛmBov x@2h?ǑoAߖeBIRG7^JHSG CG! x ]bna!tնCJ1W;3dT>:B<3gP\ss+#+%+ŵW Ia+;Q<'e/|?)=8#T_Ŏ9h]%Gb W<0`٘4/MCze#h|'Uqxt;0kzS;Mg*Ma.ddG JI_o^v>}3KC1>DHscwѦk&1ɿ6"?6ܷ*~8ZCjz6J\I<ʇ. ]8^B!IȹޤVlix1zI sk ׆W{k%'~mS:|67>Ln\un]_K_ltwiVG aop2!B';DgMLYf=0{E9=ɨT(X_00HvxiKFkD Wr.֢"jǧG{{=.:\:a$J<ޮU84!;?BfC /*I_ ikcS=(*:o}uE_sk9#FXɎ!k,r?51|ɱ.x\kݜ\]]Yꚻ9Ma41AO'ӚCZ Nr9 KbCV/(wVPp2h NvQWGWX,χ!,+_pd \-4? b<.SG>w*l~g Y\`D" AբK~8vHr^6%N Ijo_Vť/nY~e'a9b"ܒ9)97#Vr^pR]V/}k䰳 9hRtXBE=_/.~cK=m&ƞ k'#/y!eqԾtCZ.m0d Cp[ _Urmj.Ƞ%H wlTeM|H# VJE s*s~?טqMNcb6--*$Q'pKi9XK׸xLT̾tRip6#U3 Aٙ m9s^,"$Wa (I P R_$y_]]+9>?B ? y!C dII\Π8\}Qa.6dMJaeªSȂTh'!J~aGG|.h/#DI*NA.1ݩ<,: qMNO^kRV{ͯN׶r{vv/:umkhh턌 11wBU!櫕FAQق;PQ[3j0,e]a\Alnԃ\􂆣EFMCPVZn|ސEWqeXCG.Tf] ٙ'E,;I3C3G!KmUy"amW#:L&v:̣2ù ဳpސ,C+V `/!eB~# * P^\&)q!gyzBca 'THjtF,@,9[)V4T6*ϧ=SyQeG N9%v$OGEZ*=WPaŋU ۝VЩ 8=$<s9/h°YNC$%`D !UB /4*&i!;g%V}~@HdnU z3V3ü s{f U^ {Xk\vk^!bIR2aBIvNj@YW)"SWYu{?Pv9f*d% `_͹lh$%I:ћ c5.$?0=FѿNIP-FȻ']^Yu(o-}! Enu^%wHȡ҂:A([3k2b@ȃ_"B)(>\WE^NJTB(#!zVLK3 >Ydo{TprѽG@H*CpFLƄ2$t^eгg$x odp8ȔE; B%%$Cr1I՘@>f'jJ,CW N^w5 •|4j:ϐPCa#i ^[\VQN{( =u{; x+9! yY{+ dCl&40Ug:~gXs u™j̾&3fh^ 4tkv1UP4Uv+E7„O9s!r(B\4n>m ~ qFe __tEC{,tNy*Y8-q-@rBУ[&]5@x|+Ea7[<pzpڧr&ew;<-I݋' pNBLX!hpB,2D/bB&cQijįLH)yg%r%PAbQYѶ' P؇{‿t_xAxØV<.! 9mWrCN?L*bk6T킓vB/F)!ɗ4D}-e g0̂>ATchRL4F0wuȍ5FC@4Ͽv0g*e'!"J2":䘀K 9dwG"; LV-ĜAդ< q!]X."! jM+5D^$r^Bpű\{W"&N4EvemݠqtKCM}9ym7j nZ U$#EIxD2%$[n[녳$1M5#cPܝXk uXo/f3zu0T>0cVfC0`:J $`!ryi&Xj04.Ȥz^^ < #BxA4jrqD,4ȻY,Z^qb>O/8{ ad"lɄܗPa!](͖r^B C%]C 7 ݤD 't´oߣ`QT$'ƌ5Tr?K.)g(*3J*q=E b3U Jx%^zCH  rEp(ه(B6\)@rmxBNl$UBTŴD<>jWMҥB: *#ͣjc5"CȨiDLL@nC#!* 831_uJd^-7 Y~HJCLHvGuڽvkЩB$~]:!f`3dO! lv 0qgB(/|3Hv5<3Tz W%$<5YhhVMd|+HGɓx:8!_oa^3f` b&}!)"Tnl "A'Ϙ[6m"*Y,vbv٭&%$I;3/B* TllEe/.{a*o3d&VZy%Â[atPl򯨠;`:AúhS\pļ1oas8:\PG~4:dsM?$޹99;(1`#[9¤޼!@q<0E٣`>0{,`:ө^WS나);In;hՅ]beobz|Hj%Xè !)* R-MGޅqB.oCB;AmЧN5܁ ʋ^ZB}ՎeR!&I*Kӌ9!!*ljbt،bV CAa"[Aw`-@X̶EO`@&L\U.n,+Ata9m|5Pe0DYXԮ(tlYd17!x@.d&ز{rBD H8xh~WN$hQ^093:$ ,ዩ:: $3S<:uTX=&4u&0\Q "^㦁%ҔᲖ}s F>[( "Q5 Cp5rnQH3ӷeEdgR$[< ]%)[O ib'G$ٽ96.!Gs5\pG;4+ rE?7`:yVV_hkx|͝A֒en Cm_0C^ f[1IjQ'j{/ R?tBRpHat(?(|IL2P 5iPQhhe8CPi5EzB}#P٘ ZPptY#$/~ ' Zz5vՁ{IV+V:L="Au7. Vo^L6d=PYS#53 JQywo$X $e^&g.$kHuQwxX<#K]6cOXB_IoZ] B:Hgwf0ϖ3á,Zkjyt:ȯtRg43TCJ-K0 pq pőD;.xt8eQB8Dv,B-m 9}+^%m'@^x!t~1`ux6(!ޝ-ܪ D<"T(_(Sf |TDL*pNSkb^b|m[#gT#n>|EqG|>C.zB7ęzGo;̭P*p DG:*9!Cjb0 !lѯ߿?p#hvzѧB%'f*syfߚ+WW گ-tL&gsAd{Ƶium]5g=VٺVKxX\@:$ 쉄q^ӽ7(O$> o'D?}p,7Ehؤ,[tjjيvS  C"*PCaB\UqUqV"!咚'j |2N2N×&N@a E [{onA76~AQ"K" t(R42#|6 ꫭVHLR0}; |Yf&DeY2VQ"cg6D(Jey ;+?_R81Q՟Eڿ~v UTqB:HԥT9b"[UV HBF$#p!B=i**)BiϾ }o>&gTL[-GZrr[ 5o& NpHj8)r[)kl2YiaoO˨C$!P&'􊙺 _廆8+fI^7]R4K. Q(c^;)C2x,9\^@[wU`ߪTջ\V9>qFHb5K動L@~O@1 |JAN_IHC}=̅ FG# Ļg .4nl&)]Nq0#語9uhA@؈EC6b"p:;r9mUK `k@M5U8; ڧGE\2FFۙ tc{~׿~4Eί{4a,5^l0aau W P0L4 HO giBl.,؋]S \رNJ汆0W;.cŞ~ OuM;8cN aH_2gbh "⹁IH<\6 }NnǪWzDR%AgJJsr$")OR"A~Hx7vvhcTU*H@ioYޙ܅l[ ހ02}^0ޯvˆ4۝^ $ O84,#JbqL+Xc닃K=MpXK$(m0K"iw h]I| e*+6=]H̎Er*/nMo 18=DL?EXƁqH 7pם/Vs#!˖ґ$ pOǟO~ɇ1ݑS ,#$CnJ,(g7RjK PRBz빹bY+&BdRr+"sI55N../ݴ^ꟄLNcV`z˻|2ե{ˍ_Pq&4 kfQTGjJSQхdڋ!>(aoF61-/43$#&>LڦQQrusdtZ:7=$~pn|ZRp25\_¹(PhBxX k upE f2" ]zJ6ԎT|D:0*ṣy1B!i|%Sm3b eߓΩ)lO)|ŧ?+(wk"noGsvtAxz=N8avxf̮ ^-^\Xo4B#/ʜ,bPDDHAϘ~ȒY'$i!p+LTDJuT!zwh;V#𫉙m#mC"x&Lh2M8:y&7 ֻl߾–[ ׿xCDYb,]O''rJ؎ Gnµ‚suaH7XCm?dج]&|S^N@7zC!*bPۦ^k(@eI.]o(ȏ|:y{iގ Ev0- %~Xw6a$UXnx_vSuaߛ*Q=pjIhMyp燘3LRG}|)>A} .Y=!H7ѥNMgʑJwe$Sxpd۟I=i:Go=b|h'H>< ÛwPSb)K%y钶9^ &|t?Og@Rc$?oTrYt hRlVh%P(h\=&+hFV:n} !`7!M}}}L$kR]sNhD3E#C#}='oM-rM7۹LHKHZ"TK6g ?ƣs ɏon\Ͻ|8Zz$&L&>z =BbXaۚ<}{HqU^dJ;ׁeY3-HƻO{AiFNɹ8\\\y,{8 zuBd폿}ŷ#Dh/=!~/~rc  CUiLNX:0X­uA2Ul^H-1SMuBG$Ozo%C妮AB2rڴL' F|9ox4jy|ԲٓEC1xy75RK>{Ͻۗ.]p=6@xҥ'4oOŃDb ?U-c ?^Du`@f ZW.O9R&mf\7q`E')֘I E{FZJȤ$Lvo [,U!-2?vj!H Dq N|٥>K>6]8nOuC"9'X8kh ZÖÐo7.:;_j; ai T@:ݍ9 )6.Fqwzt@e#`֑̉&*룖. !1T5D Hר@Yb(wp$ :"`ļmS\~O &m[PAC?Ys5¿VQΓxz *q$sQ)\R'O@ ׾UVKvl}}}WaQ<8HPó6ShT$pdz G(w=_=lG}j8ZGrkw3pý!GϞ0#kDGb/*23\"+vGQv500{(%Ŗ# ?t1O'?`Jg'?L^yRX]pb6/]Y;99N,zTU>Ldld*>zZ,!n6ƻӈ]lC/Sg۟HB1cG0g$<e10d Pb>hniqeblcx1 fv/1bH8~sO{RI!'gayly1lτ ^&"x*p>jm$*ZN$@ii :\t:*O"I`[<,k|܇lZTn>6,}5CQ3(764-Ym!ddr9oifxyrftئ d268׶|(")7VaגXH =. 7Pc>&| ,pjVV` %s! 5rrX' _АN#'ޱCe2W]`w+Xa[\x]p}ɡwSFץ!쏇#jrt(:<q= XP/Eu!Ɲi4r} ]`vZ z!u:MՐZ"":"hBe-7tbfz \QqԄH#m9!AKEzd#7IV/ r9<wۋblTQ5o.N-wV;B99pH!l(#d %]d^C*+asз=l*rO*xG1{c!7bR÷89XΪjo`)J%. 7Ɍ4Բ2s@N#I\YOuI8\'&ؕwƔ݇B*2RVCf:yT(ѤT&bI\*ₒ3}}:2&!6 ,pb 3/$M{bg)(CZ#A0N 8zC!Tȁ Dh'0k$xK, \ՙx-N4E2hh3 B|"\]LL|o#_M-Ge_9Vތ3Y p(b4[J{9ohszgizya<50vt&3Ϻtߪ AIOMBH!^'$Y x w{,ș6(r\!)hA;ɂ1`y]4;dpxg$%w#X)lc'#B>dh82I N(oEx8G I(,CjP6> Z;5i508~\gd0Bկj?^v]Ϝ"{ةdi'j '_z) CŠ'LZMgͤi$  VAi9xP2x&%uYBTNщR" Dp)?[F [JBPn1XN픣aea`fsr,bV;2"J.Kdö@<6] lt;߯m~iӍuyAf|w)fDe-МCs:zW*~hq2٦Pe ico^oÔEsڷݟn!z~$BSͼ<;ň >v{RhUOruPtHg5B.:W>Z [å|e3,Ț01"wWF/M5)i8m99p*-΅'M2 *Fh! k~{"'"EBD O̍(]WC/Ch=i{q}/"DȦ1O+`Q4Xjb0R3AYQO4p,!Cϔܣ!W)򜹕~*EHVQG㌾.84LN4U=j/6Us'_|4!aGe(t%K s?6h5*U4f ZM뿇hVҍ:E7_!>ڣx6L8vKp(R ]G(TG;^ Z8H4!2j'^$E)C`srj #%aN!A咫AHEC,# zrS'UK]TѬPř0\ ]".=9$߯i%-#̐2 -!g2NDQrNo 9Kqą:9@ D 'k3@ׅ =[BNfG@FN̳d"Q<ʭT@kQiK@Zݑ"ҪD4ɹ`lRPDcȅk T0ncNq' #q8V%QR"N&Y")  .!VC",hZPIilf&9&9jP' 1ȅ0gAԫ[18nƣϸAf8!T#`Q;rr\LI"86w;tǝBAhJztY\txԉRT4D Z?$ L8@qjF1`Nizm:e۩sۃ4M1V▐?QRp,"BTHNGe-*TYS8"[R˳V"eH҉ `,!ѹ$B{YJ;E07 v ͔TpRzVN +vE:Yא.!صyw$69VpR5 c6\=榶{mCpoR*n c6K-FKz i9IȵPSǸkSZʆsFqB( w-߭!N@Kb:u}ڐK:[Ì6Wqiklj6Ȏ{Xb}H8 *K{cܖgFHu!E"x M>Ю<>p.Ma#UT$PHΥkSU ̇+s0Ё/PB[e;fـJԉO*- *PIՓ)W2ʓ,dYsuUZo̝ \[X[YU~։"_/V w֪:DjiwX$ Q_!|O1"ظhHyy(%UjJFVG$URmR8ߧZQJxK4!uQ?X4FKۆa'4x*0S ]/{BݦSكv%hLyS=G<|;`UYzIp1 8'͕HP7dBb]MKUtl?$|cB4Fyy!' Qma.@D[[%\.o ZP1r5M\0.H`UBƫT' 9߉6H[#I_Fl.o|~`fj(kQIX!j=AȊzw27Wo)2Y~D^8J2H/kn[`.& k!juG^~?_-b\tWgBx㶙YNXJ5N̼VCȮ-> BD6mˏs.߫KT2n$a&5:|VXqzGC쾵y5|MĒzg o_D!*]Zˏԙ-ǗeZXVwYB|jVs MHQN|lwz$7@>™qB׻W(NP[eRzcԗ*\._{ tyYy%Ĉ<݆`3E7QCwy`V3{F.iS: CQG>7_1!=pTRwduO~Lp{5l>AùN]Wsx!DKBl3RfTԍ&D'1"vV$ zT<^z>߄3X!/L!] P(:H??Btj2.ZCNHO9ZHmmX@C" 3fBrvBfH&RϩҠn[RCkH@=o7ȴ `lSBUǠGgo4!`nҠZ]7hg@7hO|Ѽe0S7+ܩ U<-ӯ9N*=3/!hm#UiV6ݫAkcpͺ{U4i}4Vuvw\C764zhDnroЦt*ϡºj/Wv-}!~ްF]wz~mVˇܕϤ@,K2-i4_97)d1 bst(6ɐ0_Lho.cMbτ_/!)w,UFT1?K޹o"h0_fuEr~.o:䁡~j@dK&8yik nG۫\sO< 6L'eېA?GLMϦ 92.xQ+ӃHupnW`"mnVY~I8!RtQ nrzC3WUVYgyii 9i|z,ذW3RoшNkH;!}^UglY-aëe81ZÍh}$]TIjx*3Ȉ[=ز􈝛uXS5e- ~ЦlY-Nx'jph\ {@Y1oд PW`nle[OpG8AHK7nnlBc[Vͭˇ{R[x1tZYR#2L+ӳִ5wBAک֩Tn.ja7\wLB8?6 =0{{YpouydalY-N@f'009L7^ԭS4h2p@ot1.ՄdAY|iS{&sp!]|vrg#QJp=zi4Id[iZzẹ زBW6lH$ɬ.$F\mw!w6N Zһx/ '__Bԝ^&  L~j$<8K~o?V7R!͹nk[Sjm|7e̖; _Db4guN}_8΄7Bb~/qS-Fl~n#`H~n4|& ^(*oKuӄ+)b,zJ[L-eL~sx3Z:dq.'77C^wS.6ډmFVXI&K }|z'*DʹkݜY~fqCYBȖC/j;m]+e!>rf|6J$4۴IO{IF9^ ܛۋqmkF㯶͆\tI6,! sAD=x۲-ß{-kdmmⲏScc]kw5:!bQhžnX]CxoV&`"QvjU֡\V4g1e UB󄪎r=T\[]^F-*W P=rE'qK-Dy 3Z0-^dK0a"=:cf{hHR P!5[WWӇU 뉾띶,05N}7u ФzɑASq XDY#"ed~#Unf4S㩕{Fʮ48Z V*>^ԀktZȥ< %[$<hX&  _(~|{ZV+Lҍu“w򬭠 A{6"Dnh~?zz iŹj;atZ,g~[UQ** 4  Ln@ 96q'r?W@sp8wo eDW6fx?*mH{Fp fq$cO`fja'L}J\ PqL =ldVp++`RbE R,M}shr?+rSlSx"]]LX,0>Gq6H]Ȥ"l9d􁇠8Y>sBj(gS;/s$\,Y>,Jl8x'B.JR2Ȉ)R!Mn61؆#X,Rl@*~ad&%7`viD/ٷ8/!|n!Vwr"ࢭ-##LP˲' x6LW3LF1~(k$6cPۂlʛʅL2XA/2r^B@[$ê쎍`PL^ UA4M =qų8'scelOM̆LxrdXXs[C}%_d^1.ޟR/VP`NCkݯN>@s]bH}b$RQ,v4oTċ ~ >yT5xhŒf(13/#`8H8\ Bm% aҊD|B?-nF,1IENDB`awf-extended-4.2.0/images/thumbs/gtk3-plus.png000066400000000000000000001205761522325530000212060ustar00rootroot00000000000000PNG  IHDRPJPLTE·Ƚƻĸʩ٘bKь]ITBƸʼȹľǼwTEŶ_JhN\HwǸ[Gɾ̾aK˼ĺʾóˏpaºޫùžȻ{wĺfOü񿯠ǿxd{pud؉j[`O{ws㝝շǪ퍇[Ivspqy|iɠrokzN;V@lif͆訛ŹԺiXaSxlfc`pJ8[Bp\TQOdP_\ZkU½BCCڼƿ̿kћ222ƍoDv{ޕ7ZYr״嫏}/.餞ojo?\Xբ؈:ǠxK˝j~HYe+fmNS9IDATx|}TW$!c$ A@(/Mуy a%E1a-` Uтe+ Z.ٞnٳ{l?۳/}{g=};wf8cMnܸ1p t'm8DKi7%RƐ8Ɲ?ƍفܻ}h 'e2p߾} L ?Js6"&lK h I܈Jq&-mHCC}_CPe zgZw#{fƦҦ &fϬ霙..3rog6^Dډ}ىA)!!3A!iJID2x/Ĕ/l4t v')XS9SּXd،&D[Di"$bt\EH邸¡C#Cm !/Sӆ֜?= : εۄ YlDHO~_ÔiÝٶMͬ9b[ FIHE@h)db$'d@̹ hZveÝ鉙LH"dtx"$-dzd$ $mzhbMHO>B6dAP M T?{8dhS쀐M!CihbΆAA5( ebMA)"($1dfffbh&h(qh0,B@JaL %RJ{ڔAp:*FORJ: 4}) [ 2*{!mkcLHPX 6Cbf1Bcg=8?qG6M} P4Wv{槂m?DfX6r[NOvF\. *I  ЩVT*qC'qpBLIT$*$*>ϒ(Y2ȈOk%228;JN Tp8Ч`WUC\tJWeJHH\pk)~IR~/@z!?mhZR>~1U%`󧪦t)]VR6LoMfIU|Vz0Jbhw^'*vzQ%Sә+%)48]"bH@ꫪcdtvޚU)XYS}*>~f@V" :E̪)Ap.\[eu(Id+"PsYjWV -$IՔfR Շ 6HL-}LТ U JO,4[uz đ&~Fr:.55`mB7`J-".@Ch.Sm` -zN~&K7iԷܭ166͍zc`SRA4;̦ݰ銾UPo6-qMMM=w[ 1^?p><%;R_e4u ^7Ww;5u| ̺#u'N9Bjׇk,w-ASzs'SMoI!Zg>戙$P)@]:A[!bBט͍+FYUPo1O)"##dh`~Nll*:$NM&_7h"L$1yW {Z,5dMg]OOCg( D(z`^cԙ[d~~ɚ&Nwb\?Y?Ձ̅2Cѧcd~d6(B"WOi"UO+X#V X$Tx BH,5ѸR$դ*4W'G <:T(GhBIF$ƅ"+*F*(BAFIEbXHV'b$U>4bfO!^@m%EJb<*ZH.^ɏlŠQ@mpO !! 9ؒ R,&XE^ 9!/<rF+D5GxFIA%rDeRDJ !4xϧ%M"%{n)Bx44r ' d,9#s@X_~jǗmQ^.%XXECBB3'י'3$J>χ[=$qd0 9dJ2CF+*ߓoWr@WvWr>{å> T/>d+nY$³^,nL WB@TwDV֮]ׯW12FO^TQ#ސ=zfVF2ku&N Lۏ67'|X@F!RW2gjx2Iҩu幅.p@ ,[hز" If¡+涶;C\yS~DNɲ IA6Q4|oߘie+U>٧>3ɨ,CNg T?Ә yB'#BTP,itYNB첥B"gWWH 8gJs?8It$o<-ovi.w !yHVVCS ! *|6]V^Dc%ӟ1Rr2 ~O+>+dwW_}u[ARVj -_,! bq|1"dqxЄ8'ał]Hj2'_[!IlWm)zyo?3pD]Ns,d E^ Dg1(t:CؚoPgI!8/(ن?'8 Bv/09YL.%! <10nWٖK3 ૿@V \|"I ѝ)L[**K_w&N+/R .j@@PH9x?|?| ,mM' tXu[Ȅ7W- ! ^;.~Co^~7x!AB\U8%"(DصW 2Ayo||3EQ^TjK- ---q0JqkJCcHD'Ea5@2>i;_Ig-".]JBϟ_s#[I,7D211P>>7lؐG:!!IűOAB!^B ikhXpcRz,ʭy=ťqb@)BVwBnDpr.tёLPsݨY4V!BhLM ŜsCmF!"tD_]DYp"؅S_8m TcjzĠtpbDRiagWTR@,R."DAʃJ% 5iy(J-ٽm8\7lEb2+! 0t P8DѢyDhˇ]~[c4Jtb^?` CIR{Jhnӧuo0 ʒ)~w Q,2OjŐN#a7g=<đצ֯|l~:*@| <s. )p\oP!b@ey29bn|K/ . xHt]A $/E5ŋn !^7z|W`",DpRE>8E/4+CHpX/r6 7 gg0_`p-gpS! |` _lLɂl14V~.K972 D% Ku,(_WQ< K9%RFKd3H"teZ +O߄wO\[˭g:TN0(`"XDO=tAIkmreRk-sUt´Z 8D;_fxB!ktIO"m [|pn+|"aΝ+D̑#u5}M;A F撟i_6hEJ,۰f#V3]vmݫsvAک]b7I%rg=Ì_;:T%*O@]NaC]|5:vԅP] pquƣ4x&j9k ;!w**opxhS moRCI%52 m҂ 2 U^;Ug\qa&$ FO'=NJ"OerI&aaI&.)|*!;} p0lxbWsoW5v߼x 9v{m[s].|>!<S~Ĕxfx!$zN@=ˌG7.G,uÕ}cOs|~K Gы,S8߉CPkCeΝڱ,Xh~cu`xt8.L)C}hSK\]j*܃K~Q[ᖾaQ} J.nŰScX{xni)isiX]hV' ACZ΄Zi@ OZfut 4 ^mrNFǠDTdO`siC|F m 7^]|<yNԊBxMY%|? O8沼lP9&D;Ao!:ϜDJxQ{4;Yd8kpgX%2hX6ˑ-0X0b;Mu6q9W VaE8!I>,%_ qZ:XNowђeE?l/{=NlkP9 ;cPK>nvZx]Vs*NJ=j'](z fHsBB=O|:lrv<^g|{G=`4Xq{A3,= aGQbNQԽaargB6x$8?V$?>vwB؞^쥂pB'voW4ҹg6@LoӅ:jo$mKBζQVV0>HKT/_6JNHqނ@\>՘zGޏO_pu n{^Xo.E:'Bo51%% & IΠ pJ2"t] ྜbXBBS  +lmeX~+X,HXr8@f#D:*{_?2U_KȪgBB)BK^=ֽ~iB?e+2׻̵6KC[bMlp&XHdu. +# j2$(qE0wC&B;w[Fu %/Ļ@fttDBV?K'\z-ד^ NT?O_أcj{v:5Y;saˋ) x_mlk`rV=Ɋ-PTDIJˮ\%3 ( $.\fhL.0bnK)rĕ1"' C->F׷<<(+^*n(Ë;1.Ig@zXkKg12N}G_yyt<5Gjey@.|XCZ܆hnmXu(N]Uyk+yp`f>*VX6\ZA7Iy,ykW"dj`-DBk}\΄la- VݖI7k>{kWvWWؚ9 : gB< O wڛU}ě6l69xͩɂa6]gD`kЂ Ԫl{\In=2`'ݒVGTGTnbsI^VU% +<"V ?][ƒs[@& PgBx&9>>5 Cj;CNڻ67DA*gГiyqP\0;_^;CfÛ6՛DHu1a1fێq,Qч6V+<_)e̵ڕҽkckX]* FyTYZ<ڕyyh|pZĚo!%|xwj̙TǿA} ]<5,6>`!Br\d/ޕ˒ 0l8 ۼG`[SFq"D\¡ |+Xra3 xbL S_bA ?cKm-Npe{^ƾgmln#gϻqRPz&hA)BAiqq)8inLf5rU~Rg[ay$M-dk0ޕ}pqv$]6z𻲃HE-QQBBJ|+NdXr*2C@+37-J! A‚7\9p܆p7!>@][}ti,SS]I'<JZn|뉄@R!eG;kưO ^,h ?矕6@1o,Շ\nL׷0>|tL1m!d j!&Oϼ%|d&T T K*ZWSjC>g9hh0gg 6~ ǎs{~\z15m!w( A`7ލY;oI~:%wuX,cUY8~>BCsu6k{h<`SBat Q~(t "{d2s b `6`os'gWb"q|K sCVںvF7u7 }|S5 (>1,VTѪ/ut o>4yf_jjh8=_շ lWlˆaX0* D0@";*A &\]=T{+@Xkd>ؐ,)ZLpܿWwmZQO̞ӼSJ'4H$buHt&-גrOY!٠>$zvu|FRO}aD+-(?rէЅ[Z:lmW ώmRT"Thk^oX0bjmh khR`#GE{jy"LGChd@Z2@AZ$#ӵ ~L - HPK~pѮδ;;*cig{꩹%O6~!IAy[ȑ]vrxyh { ) Q(2rAfu98{hPc+e⭕]3DG .뎖I+Yc m :!!PKH񑤰 fђ@8.VA[АBWSSR~E)RK8}Dl X0$۳sȋ7(CyDeY d G {+WGgDA@ Pd=m/!C"nXC%%AͫȞ"`( /l aV7-:)!0m@+ ! Ng IO [̀J´VL5 ۧ˙`ʋ^fqa`G9Q64Q'u' iP‡A( @!p9 P"8۪H'e! TJ0pdLQ߂[/k ?;V]w|M' qYn6rVniFF`" LANE֖MLB(<66]¥%#޶w? HiC݀0bDԽ z;{A0w! |k%z]AZ[zĹqek\< Q# T0DoW3r(]up4Td8X`E%65Oad;r͚["ps0= SכRʼrh~//9+W|Zok~/Z&j`B !u9BO0\ .Yez" ]kv,rYl.6!Cxw)捀J.<~C"":^Uet>ېSjB?kQ wFЧNyO W4D( Bu<8<+q !8;@EG$.OMϥ Kb8[,֊Cr|]|>b9 F,.\!볽/0Sc}=Ern]/?|o+KOqX0@a!/ S'Pb^!XHTpX/?G OF6' ݒo^_9'EPMp2Ae%qxZJtz !}3~ȡߘS~m@+%!ԣ< 3tmP; px1R.W:L"|`ؗAH XB; x\XD;Z6KGO]1N6F|"n0( RS Wsqo>;=9$] 1"Ba Mgӆk7h@ݵv \B!ϱ"}, }.@QD9`= 䋙@XTozxczZvb=`;qr5.sTzOFRPaKByE)N@,F(#1,: Fo 2 GnCx{2r|25"u <F!Il;dV@(UDڤEƢ_Na['{(Ia:1t^?Of 8 rހzGwO^yz|poPF~_=EvM5ҼBY#'ZAV8*p>1 HUTPNj."S8HDR2P5Vy(ڿ890bFH?ePzw !kLm;t SW7x m|-lu`&zvTk>#fϟS5L[g޹wo5Ò?%k&/%" q' :r>C8.@|g 1uQ94#IL >tcHX҇;oGE^xBv5<;Hh ĥ),lyn=S4+I 9a0 *+j@v]f@{(=2*e^=Z<|x Nq26։}l~pg}̡>)25+̏MLR$5%Ao˽5Ġd@S k dn!``9aLj2դו'C6j߽@ ~ у rzcx\VS^_7h@@$5v2A)K\b«2]k!A>_B|}؂MlB}g_lzn2P1ɽ&G 7/ :c> ?p3(#MRɸ,Srm MF]r+Eq!TD9y> /gN9ĝC9' Tk ZFK4L;7-z'o{Q|mv2.y^E ZC^>[>^#2M #AF:ýOpof&ƫ́A+ޘ 9#@ i@xde@ٕkXk^ B t#v\{% svK,QJaq`k&-98;;!fׁ/8;=S5D?z(5,^7j6WzY,7Ro0tZzGK 篑aur×ospڈ/MfzcxJ=]֣o^9oD=;}az뀔޿q֧>y> 7\Q3!#i0rX8pGg߶<ܹei#,G𦓗/~kueC`ܬ20eW5(#xk=8&dwm^n<}u`p>4|7DF7.c ah3r-V5-r!6֩ s“D{'V p_ ]zRy, ǾվӥPչ!C+}Xwj@]hw 6 }Sǎh@~#D7 vhZY"AD؆ɰ h'I 8ywYb-} _ؒcԂR ^9R8qph@ޡw;Ї#^ !!!\O?qlB1"j8!EڇKG \v|5$>^0>N0(YTNqxSawVZҥL&%Ȩ}:Tcdȝ5oDp5n TF#,M>6#d|rHC&!=텡 @`jC(`; Dzl@xY_Vj?U,!W$V8̬Y{Yyc ᬘ}_s^cc,&cLT&1@d@`kںo|gGH栁6<w1mU^4aLrMnf{RkQK>jU@tT©hqKs\\:{ nt}tE9R@PtyT ~yȡîb2g$OD}HpѹKO Vv=ݓXd+$|S%M/ŰbWq WM.k|Pn^:=]6uB̕nC!+2y*kћ+VYIZ`,x@`Hד.onLת񭬍,}ѶqvM^hN{qMM&l W>5u!-i۟XI ec]']슈87\2W׸b22{s,HFʓC) !hRH* LJ|/w楪dHPkRs&81=\$ -ʌ e{L$Bˑn6$ ||PAUߎ_y\w|Ӻڎ 9DVk7̬ܙ SZ赶"ssmߴm۪,GM#L]'.6 ]|(Epw}kHVT` sJ*Y||9QSXw2lCt~C&Hk-2(2"t41}f34dIUBu!H2% "օn {'9Dϑ~b4*jjfGmsD]dͪm]mhh[5֖I] !zU?Tp}jXKM,9y_{Ec^_8p, o8?V1>66v2\18ia>h6=Z~Ԃh`kā׵ſ_RRQE$ho'a EY@j 7wM.%9QL!@elw]kn5Zx(|" $!&xp=_AM,WTLxϣꞦT>mz_Kv}9vX?aJ ivW_va$̟C8/,^(bUuض$XІ۹enY0wbрA WCġ-QQ6ZTZ6TvD;\Z^u~4Cn+ L*N; XN 5M|bVԒ4*.ؐ҆K۪g駶m;alS9Ov.HV\H!}Jm7CE`^8˗ $$Pt![\*T,IeBIS_..gB>^r?P¿uk[23[h~Y)KE)s~Ys0-K \ֳӓ@">$l W1b]-0QW'Pp<<2>hn+XHDi5(Ԥhd4@ʇ(4rѭD6 R4/E'KҀ(E+Z(o)$CT+ <:10hYANuWxJutF mQft9x[/u󩈢x.%YI89K1"9\]5.PT]%x(&sPBm<@k"*ӽ.?)%+Ddg"_Ikj!Lm"T 'WeNUY-Vף*Z{:WR/X;7 |% xD5cG{ sUd>zR H*7<}Zq%X"Qأy5_#40pT=41B- (^I짎xB΀OK\QgEUՌ U$=7WuNog9Es4#`i%!Qd; ! "N@!3U@P"&4MT-h.d3B}?4U?V',e7P$jʭdlDmmt(D6j˄,r#m_BҶv:T($)74x!F:-GGf>/R(,63TZ{tuxj#OʤHw2O.&R<8V^A\DiGNE'N@ڱe0Y{(9a~m!y8Ptyda?" { o%<$;Q+ys.Dj 2}g6lP2|="Y9@|9M<~<; ?3s F1^X< s&]ӏˏ?EJpvSM9Q;WɇG>cS  . HC21<=8Z_}blr>+?$J$ "'d༥'k!lߏ2@%%NF#=l1&fq΂c +@g4y3 ; &ŀ }$?nYD1$[ƎNq7o;#ݘZD/x'v |\遯kٱ%MpQ lYŮ]Y#"NC3u{fMl1n+d0E,43{a#NrPdсڎtzpsMS_p}i `ê8p@;2R8#}@. @KG@U9 $zKaƪ#כ\řDX\Q`\ZcҖ|Ah<ϓ"O?;E~*2餆nۻxd80@ _( ݀kohif$bb}gk 2D|\p`\ ihdew $l58[Rj2i5Ud0O`ܸ-[mq$#3h魽PD&J@"P/'V"f]@p\a^vf )kg@"t@v8qCj;1:wtc#kgTcEDz)]j3& YJw'Ե! DM4)^׋V06by + ɝu]}{v\jh7\ W[a2#b،8'9IUSz] ak2ү-rtDȼ`.͎f q![vsfna`&34<G΃ %C47B%-J?15ZJ\BL 6J;YKas"lt!p 0ad{"},aN)!ݽ~۟SGXs+\@{9/Sz!zw\n"+-8;.9DV]Ϊۧ:y{aнNW`#֩>h _o!ܠvJ[I 4 A4`g(K##iUg4?,QE!ql6握7~E ;ќyca7eA@ 2 c$)68#*,fp8 &%I`6z믿8XV֨ŖRBƆ}owL~o̥u4lХym7lހ\(jLw9A8bx@)!lկ1QlZI&^Ů7!S_N,;cL80p+|-tC.AMր$H|}2qeFDaޯ~D|i\ cED8 ӟ~9* 9:䁡S 7aM AQw"VH8 s}v$\eiX}|^8,.8 N6@~gU8;+^/Id' 㭈6M]8:\99@wǫX˫}\t73^ Hڛ2iEO4bS+  V7@l( gjQ u7}mT׹G3ƘB6FYP*5p-I0PزA(+>B8 $ !$aT(G@Z^=&\nzyu]qʯ{fЌ<3#hoȠ|ՌK0ݱ.nꠟJbLB(f[[_xpمΤ$a/K"B\ ̆j}}ip_omw7/!Fx&H8UHin|Hl~NFQ$5;*!c1S;y֮ 4Tby|% \FV5!W-~qn:i. [ʩ ޢlǧZ(m%ng 8 KǁHB.𻲥!{⑄IMe=xkY"BȎ e4YT\2B&-qhVJ`BDn *nE. JJIt`JH"$$6!^PL\ق!UVVq \/IW56*JpC &av_y!`d)`* VN]WX_x&3<{y 7%:#BeS"TU1dx2̡WB&ėlMU Bp[j[jS+GG(dhcWqͣhp>wgف2lx~eFȷ65Y"RonǦ&+1,Ṷy8ņdA% eYvVե0M #eCBHq}Y:&$DTᯣwz3!*Iж,x#;L' Uahh)/Pp!2r/oW|8(r%s?0‡2)k6)!w ndscNG U)F=%wp|%ȡ>1R yZm+!i\(|=C,:!7Ғ. ؄YD`}!-~n`T@KWN&a/ð⤒#Db$Hj1ȫ%>4E(!DS̈́(?1qrxb{BbЧ%+% wj&&qxAƶ{n>O>ڳ*D8oĎ Zg $'M*=X~PTJԎ pRz& 'Ͳֹx8"k |g3*¢w6…h?APguO=dѐ".:y)w2 x .}h1i;@\d1ʢn;tc)|SG2*W&$aa4ے&"JCf݋B:%㯀&w}? Xє@BΩAegy1B|kX kۭ$ax0هcǗUFe}es2,}fB8t(xQbB Dcmsѽi)QT5pH%XGo,>#m2۶15CC+}yZB"=#"0,,S8}| 2B(C;~/yf|5]0uO ! ݺ^U4e ׳?Iw3b!06dW=jINfolO1`7I$ o6z=dHB@1Ruh`Q2oKyVǠb *QQG(UJoZ˩a)@Lߒ J%&GYz-.9,;T->IBJp-:s)TBBz)7v~N{HȎM~9HB0H*_tCŻpM=wAɣ'J+U1,Llw;5knnoJ-SɯPB6!w` K(;@ٸ"I@b9< *$ h#ĶH@HH&Bd"$!j }PBi({\G^,ߥ߅`x 䢣,[Hu̔u/&'bsqѳk"# {so( s6'UkoamV9!ve9SwifBl%rrW%],3?y$4b7SeI$d!X'0|'{0$!d澧p5;&锖J?&cCS/ڱI8 Fk)*C贈 X˥h_"zy`^Xub0ud8O' QK9P%/AU"$몓%%T,.:\ߐӔB ljT-Kyx ~dCZJyD|BBTl"&Ա/cOۓS8gX2dɐ? pIl` MLfЂum †##(DM\$):=K(fBXׯtRR]BI58qHIGmՈ DyDޞjj ^TsK<!'yy, QK.cP'Dc<_u(NS"#eZIv aN#%`b))M\rr! }?IJ@kHBrBy6pLK̓;ڟ.e7OקjT=dY ezuZJ\|Qj:j. ;r[m+F]BBKm ?9^ GO안Cɖ1{wҲ4=ue67(54+TE>nƻlۭ+7n_Z|5"YgbWrJ",8I8vpN0]F .]kC1 a6DkG`q7(M)ł ȡM*(zYFtSX* 8 $!Gg,k~i6^FQ5H׉2^jÐkCKjR ,]֙]nѐ9k4kwʜ -!Xz28H B #D4023H6%C&Q0t*ק&qn`K&MYh4(% o8 ǹKЉx,@ޜ*!`w./OMOwod<:f!\ͤ#]R#]7l3n{s u9.|A<1Ԝ&wTa!M=h); ə&Q{{mSqXD'&ĔD'8xj|!!Щ.{5#V_{}˾QOpu. >|܊ zrϊi8f5zzi{g.H-4,J/3~XY.z(jȻNYubݺk~op~f!jÝ>5OԠN: ="dkp"LM IQ;)ǘ]jn)zÐEנfB0C"`&UBj0-G0BAFGV@E'fXꭹqW 1JPH1vy!!˥dz$ r'졳Y X^蔗7V|!zLZb:XK5u0ܻ{2},dBqODC”'Un:HB8m@Gw+F̈́GmbgTQxbRiѧ~ !CƍpeIƹQc炩Xbtq|)((APDH: )w.ut D3hl&e%_G[>|?X-k@Y~SFimFL3ѵ`]0{; o,!H}S9Fzf[÷G36uU}{dB17ZHHוiOYն>7t;ʡV\dLNICG)+ @)# Rc¸bI~؅\.I)EIZZ->H˂T߿p85Zŕ\D;Y2Xh Neaa¶emB TBAxϤjղJa()^ؔyDHfSp}g(~6bH.hgQEpQb82 ]GA,65<4YEteay8g4pCbj3  ggRH0qv5 r @/ KD1xT59Ah!BNA(1dJ&R1P% .7Q>"ptC5P2QB d_4MU\*ԩ /㖇 iт+!-rSncC+H$yb %7$Y2(FyT %ץ y6$LFajE4! xHi AjTALŝͶ҃r%eiACe<1*WD)y%|&@ _9A4%JY;SD]!&!-"dXDSX6*6>V ֲ ,d'ZJ- BRZřqVB)-QM* zMDMC"DM~8ZZ`  pdY>xضZ[K55¶,!qfO;?{}6M:72}ӭ6k("&i\)z)~mB)5aXUB1gh@q&1-)r6 !8ƅ[F_F- #!=FѸ g!೎.xjk+`/L5߼uEn’5=(,!ϝm~ C~*PWsޒNOJ&ܴaff`Q6SmZpkb>6٭N^=0q. G룩1[D9ՋѮu"WXÌ-xrv>hFw}gxY v{/[bϳݷ:DDZk~޳"(2I.qۏ>fv]s!!aw[[0؄Pt~#{ŏ8@6t Q|=; B`.z^ɷf$V(HH73ϯ kj7oI(. ax\7~x |6wWv3ei,1.M7xs7;l3cӎnצpOt-]guqL'2o!wRU6;ƽA2.Ȅ(DHC}{o|y쿡7.vv!R\h,]DA&M-6E*kw͢]BoM01Ƭks5 &b=1o%"DR?<~qsWwhnu'G&3qU=~_jP3uj׺mJ{NONO乵d_PBVUխ&?DKe_~lxf n5C Dh58 N !_|#Y@\Cy1s-aZ>{LkR#pr>؊p3#gdl/Մf'#94h IqˀVRC~R3 AX qk#*ob.e_O  bWoݺa^a?}0&Sh3{oW@DFa O$3!By[,}Ww8#S;GLț)Bvn(ǪRLoH3H/!1b[;:R iR^S-6U::A"ųYMyB>}?yxr=?_|xFEzjg~< UD)Iem˩:./Ưu_x9ea?/{mk(+T>~^ PB B850{ײy# T-HѢWqՂ3<çO>?}?}*'-Qy@s̱:TR-#Sr Hf^,wu [ 0"I%"![hiC A&+S8Z%F $L5ڹထA) j4l-7AnD7ݸoA_%BELцj4 yӇ޿?tI>}zO!tx}AVfL]>^Q"9l|DsFЏp"QcYKAǨճ97wޅNqӷY =^פ% A7 /GjXGGĀNBSi ;Pd1ͬG%0!(="e28,?ya?>'_|'O@^_|ٓϞBœ'_Ko]okp7/f^tMf/7e6+:-C%$FMxk ޭL]^^n0@5wzo MKKH‘]IB|ue0CH4$%)bSvY#"Jܢ&I"EiD1sL  E5L TZ:NW]54xU42NՔ 9 ʧ4b5y Xq,Ce=o׃ -:PZ_@ٗoįIʤsp 岲LoaA9y|uYj^(h*`I`SW#;*aB9FȔ]//ȯ` `{_aXV#amѭ\_va8a)B=UJ oHvp6/MhGmi-jMYwբ ["fdlB*,^ kpP*SfS*eY}ő=duEű"zRE)pry3?S!訓i apZ~,Om$iJ4/*B$cu 1aa&'EbV,,ǎŒ0ņĘcf/03p8|^o/{T?RfVVy|4~um4!)ԩͩ5N3+(K,-[&u֮CȓBrTDTb}ɦk[Re)ןﶶ6:i'MO:n΢)l4),9d.9꼡wܖ!k7,MQRTK,$d1܅ 1{Nӄc_~$?#aZ>9=wXQUz~ :gSV=ȭTjP83'h-nS*]ɸyViNkm3*9.ߑdv(Q?O:l;q#=7LBKnܹ&g$ouP& _~(9Ƅ'MB%#a^V,$&lZ-NsK^#8P8BsQIB6YyknܼqS/]yqއ^Hn&'A;ui8,XWًOJF/޹G>W;KIbb2wĪ陙D'ĬNla@TKK׿vקn> S!D9{Dr;נz䵩S/5(x[ \=9R3@:Ә@m 4TCPj0ZfmB LրrSM荛`1`$S.߇fkM^:zk>:9uS`u4Y)y; ^ԡ (/#:8y Tsp@IG  Lǒ3ԙ [!oLش&4l"s5IA6y{19zLKHcG+8`Tǵp/e tv蔹DRg9!H < &!vsix--S(HkR=4ýz:jYf ܹC, 9PIŸwO6V&;|$ a:1Ժ!p8)|x(=O̩׮C~647wtHnw3# $`NmR``{$.ª?G%?y]ra ~wξ>~+& ?;finɲ‚;g_woͩ_Vr/I$ީ[K>sƽS޿p,Lܟwa9~8\^>LaԁLN7Zbm0EiUt%xEĵf"Zf`i">s>*floMޒHnNM޺fqg?lr2u]0;X-^_0$Q*R'g]ˁ'晩V?+!Vӣ!;,n$!B†!c:'ȔǾ};qb|I:q9 ]Oa!`N.kM@-z1PeHϩ)Wҙ3FGo؄SeQYLoe5a n75QzYr%// I›KI'ׁz@@KnED^+Á*gĶHP.Hv)ّ 2",sN]4$ (,{- ~~K5*,W)ծtB2%/7Շ =8AM_(#!-I;X_706Xuv,Fe&Y L;P7 ,6]2pdVWQrlڨN!"# u :ߜA&KVjm|sίV%@+Q0ܜCޛ}U ێ65_ԉpL4QlC*sqg)W{ibdRޡ!iQuFZL&jgyfkv86e\g\Fmzrsh,;? 7W'g wpBGD&!*"2rWSk,Yf?u*T\ާ<}v:7YצչuVo됓Oquuv+Lʻ\N,Km/Johw| Nv=/W_A4#cHBz+sЅ;ҫhT-؎%QSe[qIU7rهvnz] 97Rx5]~MkAV3CkQyBZ " uݹ+ $Iw0I]V#*HViUg6L{VS^B૰Smq(٪d~MUQ C֜:U^ҲY[JgM!r%Pa9#ed Wl%2"r)" rɀ pɎJaRE*ni8VjZnIf)*-єY"dH$a}nZ90NvUH8&)h"NQ<D wv&=6yjs Bvo !hhA] 㙝3FέBRz'0H S8TbUB(TAB 1W8b !}W"N}wo99ION p4! NpD#7o318_y!G4/wiT?GᄉAYyZ*lh±C\7ګA&+c.7Ԉ2rwqZȪ~fY`]X'"DMbX]X^ O'%xdz: rrpt%4Tc gt İodxe8ػIYl m[У\|B Q5wfB55Eq|t3 ahLo` Y(ۂ&biu{PES`e<7NKVBF:]WW>ugVo ӭ0ۭr׫gt5jml+,H&!B5[GzBMt`p8\!ޙ@x`y>#p8X(sʛuyq](h$I'|QJzm DcÁh|a"y|Q\ ,Eblh F{o.0< $茩onb4#}rd`O$Y@V{,bp௰tNs6ڭ˵hFERx9{VL+xݺ"gRVH㐦.CM&}=a?uXfcAxp57Y B 2L 8p"]$Bq{]L.֩XłR1:= M e N'K@ `b)ӑD$80[2*ѹ#ŅGx<4R}sjny>_ ,;Q6C鑈mb!Y B\OnoJ,.-UOCo@JkmyNnk78uzS``RyV_/Ύf}tt0 '@tT}}uXUt*`0c2{ڠ2N ^Ph`ʳqՌt.>]N.UX/+bVUJͪjS IoY QhPA C5͏)@8c-M1!,x.QY@QDqPLP iP!(ēakc&.ds,]Q8O>r[Pql 9(i~0qLiWaͲH!eY2R5p,E0D&"0GӬEp)TaCYݾt!"(u3\!u$iQFNR! r)-ߨ"js%c)"sj\C#I$wTRس@b~8E1@2QԒ#@2ʤRg1M&])1^k{UfY 0 !E2"CaBІ"AʚFliBJb-qB-Ž_UBJJJWN[B^!B: !W֐WzK[B"Bo ]:\D LBh@BwJx5^n7l/0uМnUѲ-%S{z5!ͥ`0rkB*E3ў,0 5,siyQټTOwfO``R V{ө:3 JN+_`i{6sNmE(Jb!Io9Hlzǫ@$B&Zߣ蔢u|$c]GORճ7֥|F6X3F_x0[c_9̱=!RZLg[OEքR' +rvwIꪓ_Z?p㋮|\1רK6`ǦOmq P;W"K?#{Jp+_#w$t4$j#&fۄ}]+^֐%Ѫ/(s~naѺ5P4#UI΀xxѫݤKITfڰmBxB'}c rss'u*)V`!mQ4d͑X5I5]z^ <]z󄬕ˌ2 o!z #C3Zڬ]w "[h E] p08z4FV)t1N"8,b.湡7C'xgVs$)\Ι9"Vꮆ5+@Q/,uBPYg]ΛC~iXAYfN]KhIU-yCJ|#bְ&Ќ(jB)..Br=IWTi'U^0Y HU"Ǩ8(r_ڪ|ࡣeF_UU}Jė"Ttrnbq=ħgm쐴Vկb"jHEiVbWUPT3 յR@ш9 Nf !"a\oD&_QU@mb{E@w^ϥ"V T < ޼s|}BR5c*>_[BJ*Had߅)BLRU2Ro[$$E՞AUon h"҃G_!UظBUt' iT2 |?pKHsW{^!WaJгI8$}_W*jXBjk;N]8|5@:z=T<ʺz2 Cˀq+zi;QVU՛EV&$meF'@C!&tfUyL`@j4Dg$ #1y;(C;E6) kI9P H|sqݪ({E( cam6UoN IsYN6=Յ۩!Y<:@4UՃWj] 49ʼC̜<ӲU/3ڝ_GZ7@-Bvv x|WMƻ9߬>A䓥q0dM18%0 a_&c;`NNK9I0,ѻ IU:ES0:& a*>Ɛ؛6cbLV nPB=%UDqW,t)v$H=cѴySpB}̡ٴ6j|vC0~eۃDR[ը6pYFiKz7 C B6'm.TКy<׵;>yOcO=} >!C X~vcφ=\Iǎ5$/>Coq]^`d>r6EnC4m  |m9@ R PC@ RM!| iF45rV$$ב!~CʔT9:諺;DwNyP)<~u]?Pg "! 2rzjENOOp4yBB+ Fn6ob~;{V_׉}GqBQFHua,XV`=x&! Z/p}6%Ήb3~ - KA;!4d)Biګ >^s4 `RCk0 ko24M$$kf!Hbxr;İm8@ư7{P"e5 MVYHΓa옉29a c$Ir>9#,M!gHPtBfht48c@G=^s̍E"OB@pj|K!ɶt7:1s.N3+#\w.c<<4ab( : _Bdc|5=? D'mYf.F'0u7!d鷍VPC\,18b.fbwb&*9!Cx:'nc}h;yE`#nb5^;Z[ZkDf#sނAyx1F R*HB BAQi!Γ,FD-rzڶ ၐb39 'T?-^23} IENDB`awf-extended-4.2.0/images/thumbs/gtk3.png000066400000000000000000001213571522325530000202230ustar00rootroot00000000000000PNG  IHDR`PLTE¶ĸȽƷދ]IʼbKɻUBǸȺɿʿŻؾĐ_JxUF˾ȣhNwÈ[Gο˻ǽ`Jž݈\H]K׎o`Ⱦ}fO{wùգxe¸rbwP>ûôƺ{ws췰▖|oݩ`QeW{hYHufעgUˢԥıYB}wwrnk\reOqmikheŜmXrt`\Ys^~N8jW|fb_VSPqqpկkBCCoF5МsnኅٷŊo&&&?mĮT}gyچ窏ز=RB?֚6SP1;m1l~qcȘgo끙 -IDATx|{PW jf53" ~Y`3yWD^KDQ!@01fOݕEYQLfR[ݪ[}?鞞@׽~|ϣϧ}݊ſ#{ٹcAQ(1I{$U=7ҺLۓ_ӔtH,dJR4dVlN&)ş*AE4}=o};WtN#m i8ЛKwޜB2;Ôsmd|:m &ʹsm33ڦ+g™s)(=39\0`OU;t")Iqxb"f*rOMѕoB٥ՙٙsK}I;w,i^մM=8wnivhp 3]ۦSf,,UܜnNyY}?}l:&)oz11ǿۿI~H9lizzFW6`jRW6^]?XΙl-k@P=;:vV6}sjuL7VDG߬][1%;͛IVWۢTUǤ(bv!whE^*EݜSveXل~v螯TD+fW-7ZVbyf2I13_5zZږ:&tyU/1I};N*EW$DbDZc} E "? EbaWn!I00cju#ryw[G]TY-rU_k9ӥ[.W# `$N{TWK 7.έa\!]=%..=g;IVʖr\zLJpC"JEllP;27.ea Qq wap%NP]OtP&NN奀 A:9og p.2P1iGDzJmB$NN\Rą!!T KqS.(v%TNn5=N!~ $&9%†a5n =ndjZ!_WL~cL2E”;:u0$q$ BAx*!s9\~Gd!gxk{Q`MJ8ܭы!&ڛ׈4Yg(,p8>pp i֏ “!a(CetfNELz:]f I"3Q3~tpB=rsԫ:=ց 6ÒcB.H(qXR-U]1" 2FT CcT$~G/#$!}ֳG&<^!gHِϺ@b21],nxdպ@PKHkXѕ!ɮ!g#DBP\L{vt'_~e"v!~r76a8GlCo߾Sg  JZ$/*91SM&j('Ν1\&Sp=pdP+t2V.%~ !' (l[ƹ<Ev;'BOhqfqqqm" #w˃#a EHfL.gV\҇!U2THTpo0 @,WD+?C'd D-D9ZUSeKt.!ݷF|1 CJ"(&m;~Cz"DHDae?_qaRCN.Ds`h䊊Bѡ/e L!4NbrT#7.rU =\|B\g \@# C:)r8e=zh;? ?I8b1籆"1?N(1Rww^! V3uB usYnX5Ck*0""%QįA׉>qVܢϾ5YNBq1erUu'灪/={ѯD&^*^q;`1`~qHH|}j!v* 6=<݊tH%`˚WGIVkD2ۍ%{Ihg,M*;(U`/wG?|/#9 N׷vtQlk]ݕ )p{MW9,fc"r2ApJF^A!$;q@ȮoZOdKG s)?N~DHp,X BQDU2җcR!Ǐuw/,tẅ́=Nzz%(uqkgkprp" e ̙55rU9Z`d.]ghhpm,I*? E9 el6'B>x48֏.$( (7V­(.)o: Ml++0wkt* i.\ C==! =+ryQ|8- e 2b4  fؖ Gc-ñ gOlH2eOCԧ'DiKB$QIaajɳvnYւiO"^:4NJ{9, kC搷,8}H|rSܠ4;oXk6K:ue݈^TĔdҤ:PmՓW{{=`0  3㬼RS!3)BD^ yzuY}0!?;&7)0Ewm^3#$8TXyr\/GJc;|v.㫎pEY QB<(s4Bt|~|>B`_$U @CКz!ipnGZBC57/ O-@m$ B` H9!N|D !L||QB{o@XpY[8^[8,/X Qi`gYeǗC"s,n/tB-[Yֽ,V> ,``+|  Uv{AGtXw6$ޚ[ןýEûw|n e/2 d5cP |!&>(|1lDu߾|[nm;AoEM-Oyv8:9fYxhbۑ󮪧r>w珷=<>㋽'. 2WZ/5~Rкȸ3[l,r'ʖSJXAv6"F ;=qqxn | 򆷩??%\ *)vmeYx];+H{aئ1?[ErΨKɜ~]]I>qʕV6ʕW.23N\8~ Lُ/e_ke.:$ 27fXEO&d7G oDiV [K[ /77wëu 3,Wp{h{*ܢ\d[ +&-` CfTGa FչJnag U]R=wKzlx䞻W-gjJtw9o,zAFSri|vh,H3,yET xRމ 珟X^hlrv~+'O\1= wvݖi̠AV4r}a!BsB@bƇ6uϴfZER:V8dMq<]];+#M9"]]DNs̠} ]A,8f8`v|Df/'ʪ>l('QJ{!5Aȑ#+p_^d:Q88˕yM J~ "C.{l$a+ 3,D*.jHfd`dlk7 uְk5֑% h"H*\B}},Tuɛ|ʲ7'$X"U}ۅRuUx[g";wH @tT\xp:I&V!u6vitbjV>-Z! d2zBT*GkNH(f5Q Va{{7Zh]Je(XpffTQeuu}Um p!U]#Tкp!$`,"57Z [j3`"Q7Z4 d=9 `lk$Ro!hVF0A[  `ب2B/m*j%^߷{hPo =*1ҩ^զgwq? Gcsx2l Mź) Aj@S,GQ,ш\ t<˗4$!MMgH㬢t~/4xx/KǠBb{88Y@5g)3^A5Ύ^X^9!h ~c 'bus:?u,-BT)y#PL-+3dm6#>жQ“ш$$xtjxQ[A|:??rk- MyGP.7GǤX@{gZB,] g#eN5(" JP B[2t2I5H(&> "T#q4Fɖn!n_y')ߠpR4(>e$Do=Mr{`/1ad{04'[/^2 &-H[G!=ì [iEsq7RkmS:S1$7f h=b O P3X6 g<<.\x"w׮1zǁtZKH ```l4 X/:Hp C:fkIA(\pրn [\KK[3Bx5(krG Ks " QZBvm N;E|h"ߓ3 -vl!٩0㚷ޏYo5z0F._<~y1đ+k ^@x̳oYQ񵡡 k-$9U3b7))XJ K36IIHy;hgBqc^q8/Ƿ-c! =P0Pis!u(Utf5مپ !i|>)&߃or6q7hTtDa_ ݲݳ"Mm{D+Rp$DQq>k@m-+9$3ړ~ YR`{ Y}2,$4o''14z޴?  a,y dU =3xO\m|S .g;*O' 'A&Tg~!}}S0cDH=ń#Na@Y+2G" Yߩij8M?!YdCOm>$2; fub? &qsB^!X!$;Hf1U;IbYE ,'9*ca m*Sl4`gPuuSOYpB0if7.%+^ FMD ĦY ?aa|!,P%щʒb P h,%+S. \ffc+8/( # B1YD! ؄i,.2+?B*̌۷`D˨2ڶ-$3/odP¡h}[_[͵}[tbf##BBС'uw ByXKs$[xfs{rVo>gkmf!-`ם;?ogM}qW_Pa^SCwaέk|-#YMX=jDG4Խ#F#9ƽAt=!A^2BqRIc)iP*a 2̻;c{z)Tv=dp=)y5M{y $AhxY]qa{jkkV{}wOiGqVV6v/̜3kE_~k}sΪS@-!d=BRoc){0NĞU>4B~n, uy&QPҜwoM3< o"cg14>*,eK7ž=~jv B2.f'Ye\'7!\H-a&XS$k@3{!_Dr^i#(J"M/#TyH% İwo=B$5RiDž{Fo֯)9{eSqoyq$~"X pB1%'Hl/YLƦ?ۓ6lFw$]冂OfaU?p#i0_JąroYGLq:(sYR0vSd-.GCCYmmTLc0CqiBZɣ)%u35x'7w=(oM{f-~a4مP@@A1ǎ[QPz|A r'bk+!"2 a!f]w]klt%DBr 9u-=)ap%K?/5 rzn@֜Tɐ\{z /̧{ ,¹di<aI%i/@|OϘFs~e,E;8}U+/ݻ+d&$EÆ7-,%;6qfw<$ @OPjjG7YṹDdҜX4S_z^ݍ=/֤-O<~vŸillB R>B-4)D&;'׆ƳSLLfyվ5CZ- @pu*F*Y (Ba#|j_I`!$!n'dzZ7n {#ڿsvSbIUk7$nt@p(h{EVB֦psdRM]RJ`K/5TPRn/7-CBH3Z-#:BnLpANܔEuՆk9x&)EW -r)z!tJ+x偐ԤWUU-ofQlBE+Wyƒ*JOEJOs9hGw"ypg7L֤؄%Xjfwuve`1$]I֭]K{Db<Y-Ip=$!%v+!F]D.EnȀl2ixÆݺ5vq !+Ƌv|LFjwR; :LH|~pvt6Z.Y^S"E;mpDA;dM'xE'*K9z !q{G}ˋ-d]gBΚ& `2H>.^p Sa'BڸR9/tKpu# _ECoqDPR 푝#HJGU4FvkC BfG I(o3aN| oƓ?7Ð0|Es$b,v*rΧm1rK[eݤK"&!1 K r8σw^{21u l%V~j) $/@@ %|.=_  P90h%|#fKG_omD[C%YroEL14t\ KBdޯ44Z4i6ިjRۊ(BšH$prwd"GHdԑ,fC5b_JV$*9ԌYe%6{vW5MHEaٿ7  c}{*o w7]5p1rs`hS7QPOOsr}o$T!.Ʉ bџOj(3ݬj*S/2SH&SZK04F5QB /C6`衸ZNqSy-퓫1oR5B HH?%Syh/uN`@,K!sxM rv~N\$ _?BThVd (Q G>HԑGJQa|t(VX+5DK)i c՝V=I5#f2L"w _{>-rMH@MP9TqP)B,B0g7&>sd_YmDm2&HVSDI 0 )259~t}B<l}a2@nXdb~乐O%V[!eu"d " 3C*Gtv]43"h^; qhd4%$bF},X:[JJ:5W[Bf$ ,e$υTjCZ'x U ԘK@L(O;BQEe$xOP1ױ*?0 ^"(<^_E/~vV53hx#ȡhe7^ݾv !5勂~w';rzLSKġZiReJ[ԤO|̔BʞL"?Ny2$E}H)FB ^:-47ξ]ψA5م@.#r0"JF\⑥oп4`Zj\2']uq̫0kZ@SfV&&7w:rəDpoqDD1!g2DbĠUL;q~v :9yzJB@pdR.!1^᷋ uek Y֝ $0_3Ī|GGO =D_ _ٲee5"vLHNM7d@P.nݪ*AcdՂ oym I-/K!ås,A˧C<x/  ! +mȆ~̝5oj16uYѝ"Α˗u>a\"D:j-*"'%r 9d+r: `p:^$ŪC" !1?{!XJ.!cr쀀Dȡ9T,0fЈE]5^TMja_]>!^R: ԉԷ. fE=B&h~z&!AW?fA x+2 GEQK4(<^iXd_OŞ! rY\xͼd-6!3/YӯI;/$dӄXE `,&F3F V#[ ؊~w1Cq«X:sDEMHEA$Is?N}Ws~uug a݉u<#MM"D%;`@9~PYд,dbw^'ZxZlBmRWsLBWV>w>T~x\c<ڷ4?̐)rdógMES'98YrV :aDoq222\y^sm%k#. Cȉ= d yqEIcaooxJ#D= WvN3hj9kj4e@G rʡ3v-$!j,D4~X$N0-,TUx8^sGo*rov M srxְub|tm9T_}lK@$:. W >7t6Epxۡ+W%v uIYعqѰ6 tM3tP)S`@>a.} w&!6EȆt'E"GK(eCKzYxT5Vr 퍑12#;}{/ǿ($0^eˠfr srlBk .}4vn0(IYBA %8dAQzU}ZΈ)'lm,"D_,B獡dZڙnlP,d+M~wfXzв%c^2t|k7*sсm,d !wuRmEISĀgɑiHS>qLj><}TS'ke9@ >ZHd]ޝ°7_* 5gLȅ),HR}dk(2a*\b9$y^beyy| 1ɡԝv bYɡ9-0}Z`Hjxv2NxJG[q@XDx™H#%|y@8,aa܏"|e.Q]ejZٚ ш\kE,> Ziv\~ҀuXHuTWIE`x筆ɝAP92uG^{mܩcOd'/ %BaiR DQ;mm5*?hGllމĉHF.\!Qi@@L:ڊ/A_4S:oBֶ8mC[;=6F'&jLuwlP?J㧢yk-9*wb6l 8#H( `PFL L eFi3$Ç-!I*\zUdn=Nv/k[xӧZ[ ;[;RS>&>'{0MG;J">W8 @8̕틐9y2.DԺ؉0flV A{[Oݖ|#Z8js`h`e1ܸ[BȜ>+9 7|!4͎򺓥z-U奂y{Ko]<2A% )qFo=p2<.W@DTD._,d`K"|u WW|;j^gvʲ??8ZkLGeƺxWVPe;ʌ(AN]Bj2,Kċ6!)"jU%VW֒}qp(WU_yJϊSE+Mt4\-pŌfg4l45񇈌v RGB|%J]OBR9inqU> s5 #ͺ̥Ɨ[CX]DIX~f\ UčdkP*j\E"7JnlFH0~nnˬF`e-zXB]̈́! [gk!)|eE- 1kɬKf@e+CtB{E-EAʷi؇\ȊT'&fBNb]AB >>!q(PL;VYe2PƵ`q]B (^EJRsHIpzw.BB"(jd9m`*h\4$6'66e-/,:<񳞓(;#drnQKdK$敛QdP55KVi|%k~g? J`]7,yё\ζrw6BC2iyh M:Q>n9UT/͟wOTQZ6/ I)~!1A2dX46$yuua^)oH Of>6VͲp'6Ooy vf$mʾ<幄2 َ;u6!^?a΀89)@x<91_Ǭ#^=z d $rO}y;Yb۞~V,>^:Xg|;*w<ձ W.G#K@[vK2L wk.&L'ER4!O8|ҫr*Ba?We!iP򶎓8U/k]HMfxMI$$`3|Ն+Kn>qIVI+tM ,d) 0HNZ߾?`tj\\*jcؑEUl*гeSxн֓u˻o&!+QSAڐ]"{۱UOz-_=ǗuWfBo!*١D%87/XY{tg'|zZ-D$_(ԥJ8|:3 a9)e!M;?imͺ05c<~ =( ,H\K/=y`u',D?y67hңUk:-q|᎚8{LA\PoLɒp',DTܩS[O),8FWhfѧnE\g4H."P (ջ-2/%ڷa6gq흞}\άN}ڙCBH˃7{ˏߨ9WWkT'JK3Ͷ>T d;чzAg ~AAM Np/&%w+{ s XKM qu~k Bucr!oBufgM-S{3M.!Iؿ, DVU@DŽF^$|N}u;BmxMZނ`{95}kHc }s|cwu ݧOomKWs=LG?A*l*̖r9Xe/ K !R̰9v}B=+dka{{_lv0\Lb:AZcט%pc/C&9b^rjėC6džP! TTRXkņBaμ}oX.aBǬ9x2Eℾ4!ׯ;uZ( O^2U =vp ɑƹ sRow(C,,_zq3*r[t\KL="̼5պb5܇@t;p23_Ҵvm150}ydI֭M.QG/o bol:_C@ߟloZfܟNlfN8Fr0KiPIbȀ$8!FPq:C^!U͕!$:D| jU'zoJW;rT.Ά1V pʛ$ybU-z5Joc>oD0+$ʒ23ˢ"1 msj{-!N<-5G ޜ-<+A>PN2CAXu(Z! ?IL>'0Y雑K㧷 ۵omq2#3$dccJּPҶ%Q7z?۶Ɖϝ KC);D| $a Qɞ9abΡl7_7g4a,;%}1ל Chgϗw7 +,yQnؚʑr$6B5պzŭVCH}?X. Ec\b|:_S2G_S$CfH&$"X*aw H l?fR;9sяʁL(LЯY y;uIX"|H"@V )<6W$; @ L1>X[gMeZ!j ~ @SG* yf2;9Fm芺Pdf%!.R+kqq4񺮡c5$$~SVLُ!/ W„ N#_dET"ͣHM/"}$pq4殎i;fec9i$Z>DY 5|0LKJo^"J=P|,BK]_R]cJY;p^Cdr L@T>M.xvn]G ژ/%EєpFE|G䥕; P|RcN{~}vA>4CYRYf' )TmM #0j*5O5B;?؁"$+H/ei@ 7^x1ppe Yx4rEaPd F-G,$GEtzFv5)O)pR^\54(PD>e=I [FC#mTɃ!hASI[KbOmLibnڧk!lnM$II+оa"5KP޻ۤD!hȌ9룑fROZndZY}N,>U|Z/?wafI#ňu^M_[R^Gg+h !ޯۛcܫ拋DB5큏iii}**El"?K 0B'V&Й &hCCkZelU-K5lU0( RrC[{cۿ坬׻hHInsQ᫿do''ӳ2Q08Jr!$-HNJbR4!Fj9DJL/{Bh-秮]QnE:=1van;{4an\GrhLBsUrǪd">qBؚZ"t_`Քr&5Qo>xX595(%W!HCT|ڱnhBHb"N&m {]2*K(K?ֳ2L{Cff! %E4}@2Ӄ!>.Q Ѳ BDf[V1YV{*SRIL4ІH` ..= 4!fWS!( O^! |dctcrw6ĕ&>~E|$-!$%5LHg%RB֤fS3T#+c8>&`qY aͮr"DE"INfpOK'lPLC7>! Z0Beh㱦\#M# OΌ( Po3Y ILpe!"u*]Tcꧦl͍ K[AfT0cㄝD6KNU`-Q.Ek~fŠPϞ{UnH+Y/VQm5Rcxg rr6e^ݐdO!"*|O4Fęa /ؒ/D@ƲzL5V8!EC} B$*BH^3p黪7G$]rῖ~{o޶a$5"6B Alcln>h ӈ= ]ցMTmj5RynB %6Bx)RFep4iAo81Sy%30~" N،?LjS"d?%P. !nVG'ʗB;b e#JV$!~CTHbeMuta 0Ful3h Nӭ-]>{q9m<;n;ø]!,,ոTC{*KH!4_rgU2jBV;193Ac(未*+>P +:jF*VW1$a1)/K5[*QI/~&OJzP<VnmTOwZC 1E3^^ո<>xlV_9N1+>R69NSxq:75xr~Dy4VPkϏp/c>dD1#5j>Zjfk,؅c9ZS|ЫJ;UG لբ$/^N.I$C#KDvJE8=? }p )9w+L& !oW?P^9niG/u]4rw*0)y2a89chϚ8ԥi_2xv%%,DJ¥|ABHvny"OJ["*(KEFF8YI% k$M}'wuK  WtܰσǮL3ʳg>bn9=ӗΗln9v쩒k-UGp:U7d}uUqAYfeeE#$zEB}ևX]ib[0(p(%nN5T@G4/AŇ8b1"1TQ5jY4@'9G|ړW %d)||HQ)4= HPD^C;0,0~u]]Bs.ls> cGL~!@`,2B 'xQGax$|2i/RCq iY:^AyF yuZi!)B\'D`p{E:{U i6i:rwmV\_6h׽ 6T+0 V $ /Cw1."89r::"Tx+}V"|( LǧtSSlc@UtuXSbTCLG?2M0 zfmN?ѥ aZ634REV+qB@u D KIQ +9= FZ!N`d!ӪDr~NS^&A#kfRBp5Hb"@ SrYU!Ͼ>X[CU^aG^!tD/!kHo?MI<\#SVZk%7fk?/u.(FqSvf*eD S<,Btz9A?m!BF^JHRBhMڗ$Y\q!B*T=퐽ᅥۏ+!D밷UEZ3dTh" R|M8P+t)!Ho_xr}RClH4,w =E.ɨe~=-"VBw:O|<0>Xt6tm0:D):}ӿtrG1+1BH/ŵܔbˌ24rljO_2dRW-}/Nt v\-]3][z>ii[=!dk|r)0ViBЉ5Mm<%Id>dkB/L|DZiEBPWOƙE' Ln :vJgz,pT &c}ΚcpbMNN%=[3tgd] 2>ybJ,AUW2[BHV>=ID1#]&%Nʄ,yd63ЫcZ'ī>>nq[ڠ.HNgwXv9[nkV=S笇ow}ZiL`&=V;Ӑ9.;gYEe҈aάPИIVVuBzVȥ$F {!K8a^"&ι`t:<\3C<нpE:j[XZX1ͮ)N56vuw~g30q_גJZC,+MNIWj*$KBwR? !ГJSNR,CƓFR5b Zkk4 ˰^N}}dj/ 2!]2Qx )!$a/S&Gӈ` D`܄Tܣhx֥WH:գouȐBsnҩ?RB-uđH,u"x8FBb"ѫu?!"Vo+֤-uq<M r=$˼OHk#4P$  <54A "BKN,W3ǐ`uC \B7HfJ%:OG#8B 0UA 5{TmEBL]Zaɐ*SsP-NHC'mL)"DȪ!"!J~2/Ȅ$8ƒȸ+T9 ai@>!h+IVs]9:z ue7Ii&pj&Y]Ҳc8 SCu@}~ kȏy\[]>s-.`QW5?TջNUcnQ5M?:9sSfHlef/r:T'x듢O޽Z1Zkg} x_P'ڧoʛLϊB{V*"|boĶ8o}~ӺqHKUOƷ55:1dq"Y>>41AU!WsZYV3Ĥ̊1 ǙZ|9E~aS։*4ՔЈ$f)̭W>o߻1 ~sܹs7sG={snע0$QF:/./fo0feF V}dIQ^KxMK!o1{Sz> g=/Cf$D OBXPz!$ǤőR:ʂJTp'"[Q_hȹo޽{}; ܝp=d'i 2 U Er+'w(/M0"B ?b4J*ۄF.T;#©VU #QCx4_Vh*("I 7߻sАo!w?8 [R i'+7f7֬魨hxT]kXcӄ g阱d#^e_d~cJs{]29Z{SmN_=M !BŽI7*U> c |-)˷2"|Dkэ^Cܿw;ߙ ,Cr[L^SiC`ēY{o8PTQ^VT(ό沘qkd+x`_~[.8q0w-ssq/ JC-E)m2f*|cëc'Tֈ9>lMJJ6D4Qst7Ga(nsM'>=" Piu66J`<F3˵$Ye;܌AM̔}$Znτ8_{.?@R>4g m0Lr%+ :Qrd.oͦwbxBB%p$9eJ{vKg .4cEFCI|_߀'ed_VE?" ) BV7=پÿw埊_> J_lw-1|ԟ~8;@7nxhF+ /Aw8W!zY; '5]yAMIܥ 5w JE3[Un+1kzI!!.3+AS,䐾A8d6 jo44Vi '>gsO[s EBuw&&&tԝg z7-ჷT}ogf ŭ"5s?_ݼōz}ו+? \n~p r7WJI%鱝5Δh$M1 :Rы1 Sb.) &.o L€&CD7BvbĠ 1L>`by_D\ jejeyyy}5w̯TVA3{ ݍoɗ_|/N}5t{;70 Ͽy問rW`C 5AH1F7vi32.D@Y9<-!}8/t 胕:> w{{qfxaː@ȠR)w"ٻB Ocp0AyѰJ^_~yo}+~W_ݛʍ/^}ƕv] }__f:[8O!|m՘t$-M]+U {ʘ:HſDZ0$G=H$XEHiԲ,+,!A{Ƕ"o;S_BS73ɇ_O/}W 0g8:yzE|^)-㕒ix`ѕdS!)k#<dVUjlicX;7ם8yh"Q_ݭÎH߭;NuRRӒzl;jFT eM퓶Vr6l@ ^ۋS^^$a!}>8{lKgKh֎V Zvn9[cyoII"I') A**,.uRB$5FEhS Ϩ*gѣ@0CF`M)+Ķz lr`=ՊQ)%;K$/4p {HpNUX&~-G[ht]̕X6mV+,!Q1QCG+-&Imzu 1 4)` *CI^FNŮ { ۿ?RO~{]4r aæfas CGHrˮۭ̠Bٔ`BAF;Mo!v Z1e |%6!v7@mF{ i_#Vh/*GE`s7CV{c KV<7Kf|]4ug]$-QO`t+J:4uo`w V`{dUTFî{Ĭ7ȩ'%ࣷުec꤃ ^'PCzWa.ҬvF !ۥ\04u9ynYmCon `f7*ΐF m̙=B?uY7r V(gǾ@qONr 57b[6sIbYig8&xLM;e.91\>6@nQt]Y)#{CQ"UDn ٸ4uPqpIa L; H3. p͆46d}h Lvژ:V{ͫA5o,YԼOjꪲ­K 5u^3b TUxB/ F`+?Iq#~%OpDpXs\HnYV j'ˁw+~Ch/|Up0nko/oJ@9OP)da2(Ϸq+d)mk0w $tm !^@(=xpH"ሣ+MdA$cBxAFLd౧0WU RbśEr‹dF~Tp?Nb}| I$4֭)/^dfopxD“np0Um !T-,t.}rQCp84O ,x:@1j8OI[[L G`89]ɭGq4?.+ӱ5ʺV,!t%%DͰdP5xܑiy@3Gj$2Gb<?$h!<#6p#"8Q޻bx6[;!k[OİQ1:r OGIqa0L:L|Hn$`Fߺwk/8hGw' yy0:dy#sgh޹螄b.EL4TvA PKD%80\*/,SkH*\Ls??9O&KXB8GL<~9‚_ J(=ذ7Бr{x`ҪWW#>d x.@^d1gr;wPפt}S dzOf;N?L9stP6A trSHvR(惉q[IC%\r)PpC p0Lr 0D/T$&rBL܉PEEf!io!2`: GW+qzEDt䝫qz!'K`RP8N]p"Z܏"K.&eRs9HTft?.Z/&Lh02!g|v"PÚ!l !Eb2]vAjdr~.*Nb Q7 ^/vZ'p6Zbs:\*bStL(h4@ C%T/aK%[͡W03*;ٜ e*0tv? VGjөa,OEGhDQ(R4oHçr "WJ4| l\(i 3>K_d1XHNUM:10hh`mu r;gì S"ljYYɶAZ)!ss:^ L$ 7.`ܝw/34I`rSR"vq*! S  0 {íFK!xɃdTv;h" 2:χV[Qx \mjaX3K r[Le`]q0ÌN6+`jF ?Fo"NX CC&10ysl+H@,hĤOʧ I/Lކc%kE $%s$ Hvc;QVW#A%-Ĩ PLI#8HV E zc2Xuz9Ö pɻhѫ 17΁$%A)oySoDb{*WA]3m(kF'/Tʑ!kB&À*/e8At.I15o B8PG7BU2r'!00: !GZzBȑ"DrBQ"fbrt1dA8!ဓrA8!䄐BN9BC\IlY/G$lY$P 55>0v\ȀyH/^vఛ;6L]V/dhJB&ɋ`oj.D^D ;t(aퟪՀ4/Xj#P\BS'^ Zm3r +&+݀^ԠPB-n~qS_؁"a9>_Pr4U '?!?xT!;QYGډ;L吾Bw6 >4T1R f]iOD~Tp&D5XnSh GJhSJlePQ^ҔOVMXbaQʦ8q?{0pˌ7mBmP(t:uo`c:F;+.j+}Vam{^4$gYu&O˨kMH. jpqu-]5|y>wyzpFjm{"&ӛaX߾ΕZUR)챵:LK[A.ePJUt¦9sJB @ĝ;w:8bV [ BjW\0™5w2Br\k}&t,Gt~VXqPX>K(g$5\z6da%_t{[yT! 'aS#ԽMBjC)j~x!G}qo"_Vg.j͐ 6 d] ud(fS8٤݁+\3ǒdzِ'ŵSgvߙz ݢN'BW"GzO;ZN1zkmmYr(^^ڨݸ+X\m!*잎\He"!?B:;tq&AeE.KAo_6[)o\–Mm-(V*٫9G=+EiJxZ w%u_Q7&!}o\<{l|pkuFsP1),./0ۣzcC YKaM z]ϥ~.pY\RҾs!E^oJE-PG=JmiR::n2KPBLE}-iB$h֭z<άs!kIgvɻ( GhȽT*xdGZ_ iQPAT]J~dzsY k82crN+ /eB=G@s2hwv%-ǤZJHYS6ZiW Gbx뺔 Bk2:4`C֝#M^AJJ@u,Z-uLf+Yَ,!@+D+\)lvQ$ DۨS!.ގL72!Pf5Bئ&]JMIg\:ЦM?BJ܆# 6 dZYY #k.&W)~Y,Dru}Dn 2$ 5GQiDbz,iJz`lX]Iز"Ă(vB@:ڶ,Bj ^i<^SGٲ$?@[!iꊎ7mT"˔ALlYزAhknF>x [kƲSX 3!۳%زpMe-Kd'!_VQsÚ; PkQV6xoJ 6FBœ-fٖuM'Cedh͒©γ#ߛ4Y|=6#Q+,=E~\06 tA$H,0m{" &ui+Ud eBz, 4vm2 oPd \+{0}~9rQ[Y[=q.Dv/u7a%"ՇJN&mPjK!U5DWMGٖآ$MٲDܳZ&V\Ӱ7ƿWˮ-=Fp|C3nFaIGoJᒅE{.JuvB"k&7 5hˊ"Q(MഴhUCeo>C%Bxtze8.I̕#5}wn7]^ U t ]7ܸDU:}oe)l-AaD,ٲ_J-}^^{/za{|x9+qCsr0)W7VژqYW]K卺RX*I=ȈʣoB B+gJՖeq~;׼w>U4y2wa:u䎫D?]gI'=x&QUk6|띄ː[y[0cS{ z e&ֆ=J5&=zh)C T4KJ:ayF,U~1*:jmRRI,VUQqUۄ݀` n;QWڲj!C%G9IꉭMd: B:`us}}i^߆aS*ȤpÙ 6H!Iћ /&fj!E{ [V隠R:!z]q_۳lYp@_QwY!24J|h0*P *):ųRz/!C^?WW5r }5*ĠD4*5l-A!FF)w2v-Bzb _  :[P#XW鶍YdnRAjc|rE r hQ̀a 2V m$T~0uQ-"`{*jpv7{*\OpDP"$NpD!BMGoonaN 6cGX`l5`"P2*@*'lOD5{sYX0R+&Z-o;p"8AiŤHBdhT&݌2cy`+[\cR,GgEe`Ǚj>FM:x$Niɳ{EH:"i,9<&Lit.6'61X0kc-yXK'Sl.8F26I=*h--b*gsɼwE(y.Ӂ)W sAs^D8N-Ӛ,\~́d'& S( Df2ME~4O6 4Y@$4=7|REv_CdƵE<Lx1ab <2W:,%Y-Řd8OX $-jt-b($dmv[8(LI&8HRq, !H"qxeLd*f֐* A`bw#c5,k'8:B9EB!IENDB`awf-extended-4.2.0/images/thumbs/gtk4-menu.png000066400000000000000000001213501522325530000211570ustar00rootroot00000000000000PNG  IHDR`PLTE¶ʼbKͩøŒ]I[GȽɻŹƼƷ˾UA۾xTEaKĵȐ_JοףhNeOwǹ݄\Kyeʿqb|yꉅn`ù_J¼ueñ{ws}VEŠؙthV{O/PM᧏⯐Y8޾e0Uޫ˄so'' T} {>;'}>$ӭs:ڜTݽgϞ K=313(gW fMcb\K!CDzz u%&&"K"vĭ; hKԇ` {n1a֍Z_;1,n=?G奃K̏_ZƶO?DLXgR%ṋgnmڠx:=NwBxEg7VOK]N9ztg[Уf[\hWhk%.1&a Ih -kԳTd)-. ҝڹ66VyjӧG C'>={rsD쉶O_?qDXbwxޫU_8t3ձ 'j&^gtLNL%4zyAfO~6٘#%ļ/b*^/qm6^oUW6>8T<)h*mvwTUYڙvS1:_{󸮩ֳԼ!]mxo[\wao֦:⃶JE\gB[[k[γdNY覓&nj5"Ab*~$xf*&Zf__啦mTVvI4|SW:9^zzh5sЫffnd*~=׫yP?bBS'Uo<=[:xah >?|ziwԫufSS=ѧU'&FgNU@hдƉݥmmp'uMju#+@诏G/t6+:#=_/^ R$L*i!R^^^xFδzFFzFDV_ܿ+rRxl &(1[=p ~Lg 2zxAƫlt:O3˂ , hC*cbbt11^OX/Ua~ˆ؋XLUCKQ' ` 5q檑q:uӪ{^ ]!gg`1MC:ReᛣO#~ ^O6w̨0vz°8䨍;OKx Y!7αDx É |6[N6!t*yG<0v0N z6 Eq]iQ>XJ,_ؖb 6>쥎dH7Vr:20wo$ EtvōkHq.q` 3[M˦ʳɻSRlwo1sCt~nmn(m~|[[}TEmy[E-#ݦRRvo3NcWݥM!Ζۂ p.KS۲m<%C oM|CaI{0%q86252([1T7[O؎z&wY?ԖLp=#=Z)bIgٱ$z =)EӕiPT;ǁ?yɽbaRS*m&TB<ݚ +`|tYq2aCA˦ZZ6,..N 7,,-)k87lp'KԓsCMGѡ,Ж؆.Nu >)*,H{v{sIC7H39}C{wYP9pHr;'w u#EEx%ӓpZ6J_u}a39% R ,>[ /X+[ZZl]!-$]~V58g!^dmiJ/gjRڻ}%rm|{PPPr[РfBGtmӐfnZ4Y<9}oG_PAZ{ WG?BG&投%fG;JUY4woabRQ= ڐh$.~CCKoÝ Ǣ-Z;GvbJFX]ӮqzK+RNwՍNnMMK4"uHH[*MQ\HeQJ{l-./LV4 oAbH=2¤jN9',kidC~cnd:DyWGyIIM!ozA**<+>_VPܡ =+* < rO)H$XㄈPhHGxtbN71MLAwH M';tZ[ PgɝǕ;m:a\n\0)ࣼ0A #Ap&BT7`W!J:];5 A!\&V8ǜ Jy99ANp.G:NBN};ToZ`0j[#q`^Co,wDDoY a bc<-No kʶ{:oou83ْ-W&P2{ꃧsi,` ";q8@֣5ĖitzllA]۫u#jA6=pqϖ0+ɿ2 a7~]Xqcqț`zqS@wKs Q n|w_ f2З@qKCgi[[w8c2ͬx^h ZI?vnm &o97q0#4'L!D"\$:{h]Xb9|xa_ / HEB؁;?j90vh%LEx?hbKwTp Ar#o* YD "_oE"ua6'\2 r@+~AD/k:DiӲllq yOP) n27 %w/+{2Ν֩n$HuY;hjdȚ,Xoٷ!v v ǡ뱐;`C)lX,S҆ylniA-b># njsfe\YȥmUzPM-?˟o0QHC~77bdͅ |M6SR!U+7 LߑHt>=0bl]bBKӃZXa"lF_vtn[ņ+F=Q銑f.\uU_f!4 ߝ[õyі-9߿sǮCj\yi3 !VBN309#t<+`!JJn1U#;X}|]Two}߾¡;ru3M}7&LCe|~6ዀS1򦇲}e iV\Q`x2]ذ5oq~{(,C+vgBQ7DPFOkfFwQcGu1=(:JzS L$ۿUv[Ev sc =Ԋy)3sjޕjwUƎEy>|]ag~58,l{0+!zܻ櫥7c1FXq#54sΊR E+ c)f:aa^l!<l% H k[ϒkٝ ;l?EY&rt)T 9tyDxnjQ) ሴ&BzHÔ ’ =†0݉+!l=adi0.LMJ*JnPyLUJlwG|T)bx>C>f좘v(lax(A%Q{ł]|xτ;z L @*#b6[L!` 17-+jNyEy ff ؋WĎ=,l hqvqA ³"B_Yp=m XZb p) Bz@9QAV u@Ƙ YrY@3}'i YKaXq$F[ Ć{鄘Qi T&DhC5Lnf#[JD[ !e`EwbnE0#B R">A\' A8' L( ;WFȊ=ў/ D] eN. +h_ T.L s%k 3+!kS3d=Y XYYR-뫋*9J }镃Պd![PDM&kp޻$ȉ`1`ep @՛!= YK P3v9K`!+>Ƃ.|lxJ 3&*Ub 8`E _,P (/fc237?Eqx4Fw;Y/|"g'lVHt 5$b*8F|&%z(7 vh1_MfGEg3N=8bZʚtUt8s.Fr_:s},?Zn"mPn/Y@{sg*2"`M+o+SAM__fnזW9@[u69H4n5jY=U6_:f&bДY9YYGF}RhRyx< ,Is!abkl7cL-Kj⸺?R~FsJQr/M~w3da bA9nY6+EqFBȖd0da!ފ eo/OOP'`C0֕u%޼Vy&s{{P } xgd;qAW>TW]gȎթ՗e{Zmze.UՐA$Ԭ*A-ܗEvݞ}ED}k=(H7.ǣ/<^nn^pp>.d;~~ K5 9遆1))PWT$uʾJz|?Jڎ|_ܯ`TaEO' _-6 6>e+d O Mnd YII9I9I5I̿8Sxq+_ك?.bq7j PlEtt3 Kڒ˗3eG fQ`e^ctnH 8Y@ފRIA=%+ ;7[o~hDODOX JTO 5G-DMyAy /ݨs$-@tZ"vkߍ2mQ(OM-KAC4-$U L D $0#[,q&1Mj^4l~{E=un`]"Hƕgus qX}}#>K}x;Z֙'Ş>zWe5eWj6f韻}g|BAeh43$p E+@77J z wHv%!Y+(M$>7>3ޕ,uUz(GfE(gHler4.s6SEl7(zlG(Ϥ`|Zoĕ=6牂Pɗj5UJSd& K}9^GϪVUpAPʓXZN}oG@e wCv؀%"%/dJbNHE?~< @hF 4<ħe!`{zHTA$yő蒺{ԜqDqaן4> 3(7l91Pa> gF3CVtR=_"ʻR=_^-%̴vԐG/ጇf䟂?_5BGqTu9i[0ۜl 3Nx}۶]L2g"(?3^w&Ƒ"Ցc}Zuo V/1M96gS?,oаrO }䖕0A2׳dB!j!@ 9z M9 c2|q t}$!C'Ւ{A 1UEgjz.)/+:RWr.U5FuU=\'ɥЂO5tm!䈮`w|Gg &GP2l%RV3$54X RweCջ߱JԐ/kg=wcr|ݟǢO:>^М[W gibmQC4l} أ +4\|l|_Up%qzuܲJΤڐw;:]Oϊ|ek9W_jd cV5Ȼ,}\弜 K\'ٝhk>cJ<|Ӑ𢂘|Wx-+ˤ»9Gb3`lt2`[ubnX9^V([uGkv11A&Q `A?k1!/ ?!<޳_똭(9JQviX'fBjD)CnG/Xw&n%)NY,|øFwul,76 \R:O{R'w+yRV4?>=353sof3噲bq9 E}>z>_אCgMg(<:}:k`gj,|ElSL8c3[̂) ACOeH2z+#]~F_֮g")6KJ߯!U^-1>'k]; &*FfCl}kV/?w<8uzis0lr c$>dU)m$! $Xɮ.D(b\K_N?:xrY [ZZ0ĚPivLy<:g5VF!,..^ȧۇ7uן>]Ϗy:qey$Й 0VH_\4>9 !@0U{ޢbA t.~PԲ 5?>pkl`|)rU>rǏ._j˼uQ2>\xȇp9!:AJ RiUd!s^h\$,mnP1q[4Mؔ 4|7Ȓa2f_t6M1-7{M|h@O7qhUh|JlڰXy:da'kgEQd@-"2Q4c|yQm.AO=Af[qU٨/xiqʬF;t7LugXmgT٭~ONnI1 \./I[\n*.< B=qZu! V=h" PXB;ރ¾'n;S3,N:-Y4>h{!azrڼ:CG^lEj~dRn됷1-By>=h$A ; J9R@p֐m]ޒOb=f_~`T^:خB^ӫ&.e(ļ0GA© f_RzU'L<+Ͼdv{{m:1|3m:G<7`"V UAYk3iJ4c%.6iw !jJP.KIQKd\ >U4XG>%q p9v&'~Yg_X-gpB=d3oC½ϝafYWg'rG+ϾIՠz<ž2AEr D=XβjϞ%C>ފ$0u-!y^3T%ō|Ew nIcM\NH ҅t4BI+3ղtL/c )kNNY ӢATFRT_0B=dڕ+]=A𝗿tM"39(y^76-tyH".Jȑ';cׇySuW}N3{&MĽJ(x<~JO%?Ř|ǃѺ⁰ |>M&#+u d-4P *ei-/l9X֢>]\A/Re gI"'iQ㷅d!0!{#&~5VӃLK`ӧ~ W Nݳq]8BJ%O|^q@p))U5Ua4hkSi(a(A%r B 9 p|hd'ٰ™o% `^M[[ژ*im^jIZr9-VU1:[;s8t ׂ$;5#r8~^!ReOŢ)򵳗.9^}I\43WoC=u͋ .[Ǒʥ@㔖VfZiA"(4(Mv\FrH1[*frܴMWM"KaHW#a3 Ha>f&'".b-#[T.}4Q `T`x %@t!7:6>$؃&Z$`&@DX`{}I[*#ht67stQElKr^50"{8Ypgv g_ʂ~]=E|[#R"6)wǾCաM9Iob1A)A_G$ :2RS |I0 lHBbR;а79Y'\-lj=) Z ! g!C=$]8 XfCn0KaUc˖c IZ-|rJl MmAS^coTx&[zX $B! 'M~9 P1 @/8>+ꩣb J:/ *B<̈́Er^Qwqj)v{^RLJ ߋ]68h)$n}ﶩVɄw[5I0}MJP?dIh%D\dg2ԓ4̄Y -'/9v5zhqs)0։)ߤ|U&ck%Do`{zin<{|J0"H7EzH|9֣ d@I8!*-,Fd۶!y yp{&>NLSF lT6f-6;-6&*:9 C D@F!`v Y}BEh(&u+2 V=6-JUU4Tj5v9gC {qǍ{'D')8X:F|^MM;PBgY#YV)dn g%Zvpn2D=5)񱦺`Y5)NrMIJԡ5Q=X3uɡ gXS/SC]cο~ф=9!$@E!jqWa6gY}:OK=+ ESӈ4)TMT''&C0]+~rnt287{@9gYL(#`H!߿bÛvZPX61Y㷌TBEJ(Z 2Ʈi Cevdo)bTWE!!]a~ 3;p9OeW3^m]$`P>$;%3S!EN`^h))™c . (?WhxjXE\={G>HgSWkE%P)֫XPK[,?+g_;= :9mVCT!ť;7G$B%କJ%AKM! %e&OLښZJ$ ӒP\ hkԼL 7qcaqeؤ¼̭9@}g!̼,<ɠ **ʄ2ٴ eM4/9uѺ||xx?A¤n3 N!Ŀ.)`x6AH~yV@}E1EH|!9(]# ,|7!Vi Η-Q~R"d2CA;̸loe *Y!~NNIAk2E 3ϐ\Jx!! B2&Yi$! 94tDX3P6[  `$Ik~;O. |uH~CC`ʙj#M8zIBjKO()v!G"DAB #92 FCy1ZI Q>;%7L{nMTʭ5I}%MDָ@?[f{?Mȍ 0Yȡ)MP]X9ʾ>yzѫ  D'v;M K{]~Kf[7M Dm SlN<;${Ȯ]{!"`ϏC[{k7(lPj!ҋP+PSu|;U#"l3=xy=>W'LI:06B4?Y@szMV $Dn %ɮyyuB|~-*!R{lW@zVa>EQWY/F2Hp9,*#{dNɝ;TEPZ1xEA<#8xBpf 5-]5ӽ,PIz(!;..8 '_}9`~K!eީ[k'?UdQپPB-ΎBvβ5N7WbҘv4̦JcMJ=ZJߐ;Yq؋ 1_աᓿ< YZJPssX"m2HwQ2 Bt~_iDBʉgl[Ip4 &/w# L&jelzV+ 'd"<`yd$}곃h.xF ]ixLh>xv,9'}Rȡ!TO &4%oSoH9Q(6+ apBNO/ meE=BfzW@*4 B9dL1pu2L>qֳ˯nȄ@7NX[ lmF1!/PW j_݄ȡjv&0QS4t5Vp-mऀP.8pr~X7L>K\3b2K-l,B`Ĺq$E6{'gDeEeSDHvMIMi@&Pd:ɱn_p55X;+)%”2 D*5o90=sx y؎a9@IJEԊBAE^:a^Bęphofp?mH-5v&1B=⾹ =]{7@1:VL]v}1QRݎ߳F-Ԁ7rFز& >.}db~fQE`b&A5͖\@kDKX ?|ttb2ۍ)=3i`fCn-4{); *G)\*'rڡp1RLjU$2У6ʂzl2 p9ZzY({>{{~9BJbD&& Jf`Jpo  xLNH M9>=oN@@g׬/u 3Lcn+ZȺƓ'/l?=# 6ظQ@ D`KuI11be;B ɄVjVQ@]IB@8ٺN_/a2IB@D#bM+d%`]DyTB9Ou'wU&tHB4Qs)hUr8~ϼ`<ק3-L[[sP,;|$TҝWA2n@ȡF7$ "~Ɯ˗DHxZwgc8 ~ފF^UM_syںB~ͩrꑏ@"]bB$uʌq}B$Uc)x2&AXRŸ@w߂*yh'Yݻwh/#+WS_Ѻ{w6q~+mznTquHzhFŻ=#<`DQYm6mȆX-{\֋y !L&@[6@=4 `A?"I <%!& jPGȎ pBNlFC c@HHA *NP`RP)6-h2&V #On 3DP#BOpBve<ٻB~`).NLLB*R&Vn M)ixWWM) vX`$ tZyB9`:QÇZ͏b\o 1 /2Tۜe%m>mkz 5Y=`dnhY84>TQ}"zɇNN1%wZAw.&À3E!RUj A-p7 X~N7Ƴ;Vo)ETm9=/!Q;wޡwcj\P9za>5U-_1lAuG'?CYr9ͩlĘxQN C^o<| 9Aw6֍ }P2' }i~ád_rI$B2^AG #Jml?ә#Rc;" .zur9uRY!,1j@#_&nCIK&A3"ho3D:+jd'sWB=:ArR?`P*ЈG{E" R_xǐ"dİ䙺n=S#k3 ,g7ӋE\z\(0;mn7_N(1v0(R 8D.M¤n( #II׭[:> mv<P(&IBfuJ﬌~SGVhpA;F MV]$É!9[[ EksR91Y8!Hfvp\"I J]8G$rۍx΃r D"ЭH#o>Ry%$@0`,@9:H!GahmX|$o>Dcukk˻-1Ʊ7,C߄ [ci i !&8œֹ}z%&׈Oҫ&dCz¥Fy~hwVYEa7B}櫂^]]fW|U0G+KNSb1#{IVKuYCp&\XC\dQ;}j>;,S_e_:S}%W_eN ,=س Iហ<$/3-Ȣٺ*$d s 2|1+asC Vk&J؋KOyncjAҫ/ԯ2wx>GA`G瘽=e06%DnZ !;EcA䰃P yHVΝR}rhezꟿw컨7ư!~^/61=RR3%>' Me<^n965|D"3XA!Μ%JQNV'5ڍIC V$ی]MbY5ML{uuuA*QGSra-t:BF,DZDk&B%Pv4ȕ\.CCH}+"D8TxA(9 Je {X8#9es`OLGpJ8:P ǒsm|sBڬ DtaWx M71=Fu= 57uKO'K Ŧr$iGY|͋%L\^b:$C3MS7x*`R26Aw6;r' .P;bwp365w M2>Wrכ,AK ᷕi?|5QDBݸZ `^>2>fL.&BuLUS6>07dBȱDK5[̃(tS;~p/Gg}ej_NYGowKwJ0PUW#ޞ(&  H2z'y=go1-*6d.!!sʆdy]2;>44<Ԥ&T#+"\od%=[wNyʚ.[&M('C#{T#w'{Ʌ;#|xvYY}7抗wrVbU.VdIzB.C~F~4$ >;,i[Wߴw[=]s ǜG]E=?ҵO8`xQmmɘ6ІP-;#ً_9Uf|<2?|􀮷_79ݿЫܜ~]tdB9?y)D&'U=Y^~.AF:Bro]+!ݢEq{Os{#VwyZ4uWnGeL8r_=|{dTg7.gFHAG}v1ڲ%Cfe,W)c}-;N3H[ [Fi)T#B@)!˽ur5sr.)3!LXdЅY&{{gw< r3LC>kgd`3<99?au ܿ0"7@cR1=BLK 3 < D`Cb [fsf1IBdoid<,~ LK+DoC zqJz zuWDժaJ;30\=5ؕbx>$h[*=DBCRx%G#@DΝ߅ IVQNwBoK p],+Mt>Q@DŽ;S=-L\18u=L hwK@Ù:.ҩ Qd241[i8{9}R #4ɄO~Brۃw=d=u)>[K/S{4! r &|KSl4JO؉|ɢ$ɄEtv*Yˀ$AӉ"6v"AsB827 4 GYDIRuB" !1HjHE(#V@>iGLI,Ĩfw# !}lٯg@fW Y{ȋOȐ^PweDk[|5UnLȷTM@1<2`hrh=u#8否H{-D:Ifu-ݚ$'?=H&~vmOnC}7}ʅ3l ѦZ]EH`巌 tuMqv[^,ESß 4ЩwuCZ-ԑ! Uag9 ϥ$"Ѷysh>|_ z̾fRy A^gzpW !*=˲:M,ܼci^xjbT=ܼbf[߁?Ԝ<'qdMX|׷%m)",NM\Q.+CCMR &Kl2.Jw2oua iMCuEX؄1s,uKr=,t#hCWx c_Wt:)-/0vW 1ΗV|Xy>t>;=gOc1ڜG,WfʼnyZ't蝘,N&&Icʈ{ $ݖ.7!R)OAx_2Vh O/ь2"rIcl 4SL5Y\n6XTgP@I= cbvo/ݾhygM3ڝOvA0E08eC* 8zTDŽ"/1_1eD%@N//O? BpZjB޿~!2L`\+ ѯNAR$x^b"$v3/=;9G\?X~`}q.AT,<[H\UzSd:BNQBNEH5u085u_:d&.>Y$ɒrg,:";oH:'G,7N q_T)ʧi%0I!=M":@h.nAM~<%!OS 4D-mi(:!Y2;$liemɉKrq(\!͖CSY1 EQ.!^$E QfDjN  ҩ4zS i1 zj jWKĢ<\/C2gbrXI3ܛJq;$8հd0-=ZTοO"/pQ< $QCZ~*ؙkH ^+9VFGs EHgl6d b ‘]䘔*ĥLUATR@tQɇp5!12qO"Í017%p!)) At8j}*-zⰷ NB[HtR@б"8NH2k:oCgM0) "c+WJr i TM )+f삙*J)kqY^bkŸD!$ߧ)*pցB$)yp#p гxGzj{7Q&$2jQ/dD|}c#I>>^nV9 J7(CHvJEgM@!oV\T6[EM?M@ClL8ӦV ^9cR8o[u('gOo^'O5ƒ#gO֜7Ƥ}?uJGp/ W*QH *qBnPʇ'{*y[$pGڋ$I3Pڸ$ uO%9`vMH +}54|kh_V aKѺn#kk)pV]c]wQGm%!ANHSy1 M&;G1,:_z2m6^L9[5Bͺ&*\]wi\ޛaAֈfźj41W7jƖލTu[oN&$qO&Jw_Bedqb$;vXZzAEq Ld_Ȃ$$5Yp>4y38~ӳ$ltN*tB2Y(pEqd02z;_m<8l ʥ$U( +N'$o#:Eh֘1_#9HڝzϤO^-}[WO휩SaY8_% Zyjr}BZ`*2$dL=<'{^رS9`F8S MC8M٩5 %}FA`tx5$ ( %Qg'B/SLtoD32ąV„\+:&j4Ok(kĪ ):a)?[}2 V|n6\y8qbx@ށX5lՆn FJBRX읐rl2žx"B%B(^+)GvE\"%R$1Kxu^: q }F$8Tɡ˲4&aEr$(i.i6WJL9Ćs侇m G !h?tF#vK F*7 p V؆N<:\K5SU}V rmKTϱhaخnSl.mҦsWys͌yJ/P2Dy§!:Hw0~znۗ; Qۃ6\61:Ws aa]m;5;^k ;Knߺư8qBpr΄}{|^̔WUKl-8MnR'j:`l)Kk+P$^#-"v GglVjB$.CXrPp'$8kvW\Q7TFpbLbži2$NBbRYU2Q#ЗCULVUM#gy5"[\$(1dd!m x>!޵}_H&kS(NG,2:hQ˦4Ʉ<3<$.ɸS_ -ƍP}@V!hV=vs ڗP}c[W7Dqs3:*h(S DHQ"nkF G9lp9j[J2:{DH"pd`*."~HLRZ{6u_ʠ#H2'$[@NХSHT^!D4"n*r $Q*Qg hd)B􄘪ʨm.,gs;M5Yei2!RyV-%TO!P? zR$RNB@TCC qd i0,1%>z!b4P^X@RB[N KyˌldoyEBS7 ^JK&˂p?]^ԏ"XiA@OB+N3dJ_j'K& #2cfHcƂM jFzgn\TQ) Z zt`{8y؋v!= +džϥJM&|P=hafnh'.&o;lTF @R%P%M̗SvXt  RڵtNj;"D^c$[l.q7n'Թs<)0>sj@1\Qb'!Izd a5I2h^Z9]R?vwuéz+=xts4N8̰w~ӻ8KL @NchDJE6eFc.&$R$I%-G!.4>cA<}؅S9 (>q41l;zBK'$gmffm8%)j'~X#Ed>ZD#}ݏyC!b&$!bn,REt Ql1}c[ 4Sr1+h0.`BW.i"^݄oqR )f3\hJ=.%-zq+p$17іbQ$$AgIB~rXBkQoв †]ID^ZA$t`Fʵ ?&4x#vKxz}݈z1_z\?M]&%f97ҵ30S7j%3ٌi`*_LwU"l3J-uMòg֝q!.Ƹ76ͩͅ\!$jHƪa-Yow}+捍JW*\\B|&sVBu 4k@%&tm9 > x 0-+uCBgɖm965 Tx^ŝ.I%o6 eMajle)Ӧ7p`T أN?Y.,K-I?'E5aA!E%(BN}wBL5Y/6⯴TR,uJ:*CiKJ3xgEmUK^(31B2ö ЋB s)% A~bdaGAăxCI 9572 &."4֩]̱]"n(kqV$6rFY~#/VÃzx(Vެڝַ-ceX;\FR%]Bt_NMɫDu:\(4@C)_FNԋKB> pq BIz&T6)DC$5x6W*}o2`NR3cʕF,iucЁflv1Ò ̾F3i%}8!gӢ@$!!ay.$tHOM]҂zO֐g6JƯOdS`Hem`Qh0XՌnFV.}^n6?^xN{$Xt, kAC(j zAw_.3Ha'[/W^.WceFiz!f aE[k?iFa{4ը#WbMl GX(mF71l !gkⲘ} Apo$^\AO,PĕWwG_ ~Dfry !?oVksku[4zoF5ty-.[caPh8y/⋸cW`]BIjz z6Ґ7=Ǿϴ/XqźdžT"!DwzJJl".*&&'NDb?+^zOOw_:},CI 3")0%* :5tҠx_C=fK>ae`^hkm uh?cc i=|4>{=m|@tE6MЋE S# C 狸;]"o!?o~?b!CgK3CA m^ [*+x8QIlGv?xW/|/? /~'[;҆U҆IEmy5[ʜҢ3Ҹ5|1|C,?o `Ͼ CjY[W^v䕟|@VuAᩪ:M*+$\:[pę]Ʋ +I⑋N l~fx7*%|5a krdpiau,@x|!.P+%IYn!G=xWӴ"pOCӬCc7!iV$ =nөii}٧V{7^g7^{>ٍ{ֶQoZ52XD-3^έUe\TPFf1@a+/)d$L =k q!*6}hó.4^_x%pD\%fJ{)at,7ZGX@"ֽ7?7mm4|12](B)[;g(BJ yt_~Dw;{̾Xe~uB0b8kfߊs6b`r, QJaN͍dtx@`463X;ƆO虛 i5驞OA s; p{zoLAiHťcr?:B՟RGdqBЫe˅"'(Eb[+N=(K40-O@530uEE3'T-Ʃ~N쀨?8˴g]9\ xok{&Y,ItzEH̹8 l<@jc $R0{t*>S!S"Z'ljaᅭFqAi(hx$~/S!Gz<a@K[pxǦfQ~Id>7ذM/zT]8ЕlGC$&܈q8`p MW KKњZ49;3 vJk!H fIvEAqNwTQ(=ev$wJ\bשcI ,v~MCI8觞O@ܜz]NRt蘈::uZkzTJ0_ {G&>'(zZ3c#۷J C!e +!p/w]Caqɫ]#m( $d|lbxOi鞜bx<` T*M xgeڻG[v˗X NHvܩbYӋKcLҗra-n[#]Mϝ?a9 KLF;p>p8>%Ѷ]kkWCxo^0ROFRH8I >k\[ ʭIo3 {ֱT`vRKK?Fdm1;iSH`?O߆'cT_?/H~%?Gvr~q8 I`WZ'r6}ۯy}iy5Q/,&Ѩ{mn/~gM>\8=%yr`޳:5O!`߱A7߇_kC /%Lj ٽ,;w߻s+N|K~ PUk~/co]ß?7>ՉCjLc>lt%WХu( !"/SLjAZ6cn}6!N':!#fk0 8JW%Ѓ'AGN;}ݻ_]oo?/_70Dwo}~O?xׯ~(,r8^xX,")ǠڐάrA9K}zY**EtO"p3$1,QxdZ:Ǻ,HnkvF^|)ɬ 'L]P0bK)2Far2_'`QLrS h}۷ZFÛX(8721.`i}wf{iq75Y]OKC~7UGe߿ ?SŎg?S$db!1ٛ&Иs3aо%S!]j2:; KS@jp=NNF&nx3eч} 7}1 Dfnwtn$xwg<^~w@r~7)t7X(JQwJS4F\sT\rg R Tp٧ǐÖ:7Lbd2 &fF^Ӭc7Û=;3?92fCS _Kb[: L삎E?28O  b^ pŋMaC-ؠ$zlaéepNO hXCFe#PIa&䡰-Jx6<rr8=BgP)Ӫ!R .,\?I-~NPvr8=B ׁx/SKb)ܕSe6s 1pb.<!Һ%C8iDul5O :zayh'9s츂NtXwyq- JոCB;T8ԽC}Ѐ^F6QB8g±$Wx&=d P_E"UwA6_ߎ]?36ڸ&>` _uNY5Dhygy{&" q?vjlW?I?ʢ96#ُ"pQٝӛ  Cy*Asφ{N\C3vPxA"7vi>@w\f9ϐze: = (t{ռ jF Y>5 R[tTEm1Q! wP< "={ш2mAףz0.(:b)sCzCC08AU @9P-%d? 2KqKyG%S /̇:)l] %12V54D O a3|~ǞRȑW>L ^:Bn2^X ÀT70r(oD\tB2Cqhdj"ʌш;\Tج1+D5)EF m&NE3wťwXl($6/]ŇH.*CaPUb\SBfCQ3UVkκ̭X[e.Yڝ8Bad27ce-gVFmFȰ:sޮ9.s9ú2z3ZpiePr형e) ̡D5ںF2C@ ։;Z:T B*De~k1 nC?Zz`D-dNc׳jfī۾8^ՕCHCT"YU5vo֩ۚ }F2GDNĹ˄2Y9'6L6mJhTk gg@Vr)z#`KfXRTVo5g)Ք݁.8Hr\¸xI'j&j!J蠱EGTCQYQG/hQ`dzMPk>z?!EA$>#b!ao(L6tBž\!mlR|T^s2D^BR`>^O=L7s97ں''E>ǀAsbÛIpf^=B`!jf NS([V$坃}5$Yݚ 7X!-Kr۝dA_*yzZSl6[ݚ75`5'@O@<Է*U~r=SFt씵koh]*8qh##f*I8Uy9|0hrmG ~D5L^+OpHF>¥sgP &3^;iT;!+leWRV)7 \0]\վ$Z6ߚFV,k t5WfZHIi(雉PJWrœv2l:%ZPCN4PG ~].(NC0fQen֎H!j-D#lDŚYjVHSu#״fĠy kCj` <gb _BQ]~bDut'eۍĜR3]((Jtvф3fv:=(XHy:ؒ/)4 4PE%p80vmc=' @N2rBqXB.]dcҘ}A8&*@c ia^0FRڇWP8IbP C+F12H wtBt8YCD.$P8st~;vSC"NBbA;EX$!%9RS4-V5/fYpN 0`J)Z}hBj]CXCNjn0="ʳupK) NJ˥uU"HǕWe=:G{oHW"I_;`JMɓ96!r+B cR2}h4j&KgHDLByY€EYfAbm 1ki J"$dg& 1c/(f.KJ5@D{a%(6,&Hz9~!:U ;\6MN-zEz0rPjaov bs̖&ťt" !}FטjOXvZ72aqu{?aO~]c}~hZwpJTP(v$,@èqVF?]u^"n'. +B*G(U0֋i<ǰ0pwyjaVjs/.V )+X)駁3HHK© anB V,/%RxqprCnqGE{pFŃƂ)\ETPLOu䶬:!7|[qBR^.V DLM+/ qHڞm>ʎN p6)ۓnd0 HxfH2#'1 &O]QNŇg8eg .i+E_v)kKy$!ti‹|!\Z4VQ9QB#*>N°:$@J3tFR(!hZ&}jk#ޗ3z䤗w >,KK\ı N=?LwZu٧Wϭ?O_5ng^mCG1 ΏM5=G>{+ٙѢ_W``tsfrq``|4d{,cUGzygs;NƸtmssXKH7֭䦗7969;[cD`]",]-j!00|N瀡!96q& Pw7Hbj]"]Q/8Ʀ!cdev60nWS˺dž) !^&I$ ͖Jٍ7*u%Bӟ?z`g`x0:~r"@P("WVwCw,ET" ʨWBHvN,x ^`Mc!M+*RѨ|BWf GVބH&hj\6b+'.TG=ABoZ[E r#hSUgqRsqev: DŽ Y%U~YyO"7%[nWVL9NYB9_ѣa'&W݄HR8lX##w h͗GgF:%@9,C&vz¨bB}"|,oqBF[B!;宩|XWV[8-ghZΔ8c{nŸʅ|7|Y'Zk9vlcԐL6꽆&zF!S(gLz\Fkf엂4gN֐r\3`|L2F "l\! xPЪ!UO ¨P^26/| D#/R}٠,"|JyPL15qhJԜMAYб e!redё&>Rg r!p9߻]TJ,:lD.kFS*Ňș&q<~{*z9mKRXݹYQDqf asD!}, M K_BhЕ F2vV4 Y!2M=? "-PCvkSyng#n.)-4ʳK\)ܾBV?~mx)! f }+V? .$f#gy`('bU{Vj_x4d5{]j"&d}l~/+mr./F6_gcnrjS:tOl~pU0Mu` K,=T `(Dy,#٠i~ MKtYr0eH5Z>;C#bftYoe=AZ$lxKsxx.<#5GGyw>0Uh<05۶٭H,,5} L$rC )겢gȕ ՑXIPeN`zQ5DL{}[ ;oZ|_([M]&aqdk#h gmG 2U!ҫoM, 8\Ӡ!z}],=:,f$|暻pOuYJGGY][ssխ@"Z+SE%]nXYl\}/LW)d=Dε[+|CI9 { @qZ8!{ľ$_. LL`jtBY=7dSΩ- (ǛU{*[elpXZ-o qg6pΦ0 K>^ՉmM6I3zYn49#uYuI_?ș蟛x{ )Pܦ{a\% d{9s =į!p4#M|RmL~ohTv*U ƫǡ@o䩺,uenlȐ{ "TZ%K| qRpå6oXS*Cr*`p[]ep$B'e)I\T]fQqP8J1a߃ pd*JSK:ve5*KZ'@vBhۈJq,K,%ii{Gr r#؋F=N6(w*}1kSm+ !ʃ͇XҶ¶f#]̤Ue h!6B`ӑT!%] !'?F+T^? oQ! =Ց W8#@$! g4Xe$_pTCi e@CCW PP:@k-b K+gHbA!]  i’!BGiUZ"- hd:AّNZ&.D .B{C)6Y g&J uuz * B wvJ:Ԧw&,EQ N[Hla@҉F1kw[W8,!dڊiD.7.6'ܒtWkĺ雋nN_s}aQ eBD!"Lc9w'ҩ$gͯ̅0vG龵peq~6d"VaKDY+jFW[DWe1W4e@Yy#_7i &g%#u3ngԝܒDp6! g^YG DVGʥQn0"LWMv*7I}Qw~5u#Ѩo+"sJp-RȄ3l̷7y|qn4w"DW}$e}a XI ]`J\):xfײ)^f"ׄx|8N3un Ms Mq&L &葈YOC*r,ӭ+3cEVZ-7 3h>,."q魭(҄r-D̴pZ:e]ƅStZ[ak2E^D<#u+@H.%3Rv`eT4L^(Kxn]pBJʭJD CWpzXVg'k|Xy~${p7-ن u`èIENDB`awf-extended-4.2.0/images/thumbs/gtk4-rtl-menu.png000066400000000000000000001212031522325530000217530ustar00rootroot00000000000000PNG  IHDR`PLTE·ø詜[GĹʼɾȺǸ澸͐_JĀUB͌]IɼaKbLbKhNxUFƷ˽]IfPǼޤyfpaɄ\K˾¼۴żw}WF엕ǾϝþdMtbPʂaRގYBſѕte|oyP?SCEuq###֝ӵZ|p8ngTܗFCz_\+2Kӫzd08^RLzk">IDATx} TSY! EQ&A *2(J 4 Q``AT sӵRJ/ʪu_wZ}z>'' ֵs!ayW$*{Ze}ӑCWbWO[r*@PS(խG9SrT%̈qz֭A>X4|Xl/Z|rEf B>溱?ӏA?,bCnk^->ꠄwHԓ5 ):(ʈij+T"afT}SLLӀ[LLb@U=pqx@'kWcX Bz^V! -F#N}"C# 0=<1'|GGҢE$  [mN4PqӜdhӎ}־Iv45|xo18ͦ|2Z1d6 qvd5gtȴ>OC dálͰsc9AV:&3iH6VTp8P~8).iXBUUv B~Lg"wغ&2!41 .d(eDSKLm ʷiwkaudDi:ö|VXZ`Gm-Ӗmɶ}[ɺRA6ѭ}tP>[>oQokO cIedk϶8G'/,Z U/mlY,Cwv/6n,3Apl$"āOK뤫[{#Z "q*~ q"lHm˪/e;%"_nmUIC#%/$C;[+P!* Zk>ʼK]-8]-.kgJ$]Q%zF۩~v$iF57oK72<66hd$qX*$#K/HۿĜ )y׷k}2Z&wꔊzBoB,](=J$1xﺾU?+VeJPTqkYkqVT(>Wy_O#e.][%P^Z)f.K3vW3hL36ro{wǻǚ5I!̏toL&͔=qiWITtvkjEY"TX(SHT]ʭ =wNU+ING=v*^ת8] ;CPnNT~, CVU?Y)SDe^Pf+eJD^IYeb i5(e$e|x?#͚XM=F!!!|w1aY{A/erB|Md4HB`f9CD,G6 5L,)f.,#2Gҝ A]db!VGbN;?$ %5}3Ht^N{ǃ&'$8D 1q̐f0,t A-L 9|f0 7.'G 9H V!%CyT)3.-f{ \Gn!3CA!]l>+ .O&J!C,qpE zFMˆ1 ?!>6ؼ/ʅpO5Q~.oLfdžoGa[!YXY + mLyxT e5)bk\~bX3q1:['M*`3/m"lb I9pxg;|ژ1DkNQ^5`&ظ*Au*aUI؉"8^\RŨE7wMP;Q~$>+fHg@da Â2<뎋}(.6n# 2dAE`o4ijx8!w Δ4_/̍> `NƊ)ʖ>aQq8R2 k #I5u7 ])#hRjl( .B`#qkKF7r<747}'C`b9 FaYQN'${1@o:*-*֟{E!{!cPuoX q> ?>9"kOkx!~O.8/H{I#IxWAA<4hYK1M\## N4މ9 v (?%*o3-/i2De֐br@ݶ"9txLN)͚ئ&Fjbg #Ac))͚ >X=!hmY6Gّ_s|?`FI^dDcBkЖ5dZrn!q6&&)(^ ML3Ksv>+v',q/6D~OCbqEbLo:xK\ c3"꫊P>^_[3,NnGވaCHБ#@> 5^"M!dj{NM|g[G2=TƵ$096ZV[-Om>EAv߂KU_o^/ f37JDRZDm >8Z4h|tx!+8bF Na?ald W_ѕ*Vm [E(~a"d 1L]C>pt>@$r\C_sb`B̸zVqBV2"~B† vmzCW yB!Ou9-u'8It ضB NCmod {EĻ]9 ޶-sՙ דs>.66KӜL,n $1 bQ"Y{Hj $ +/^]n-6lQiNK#2ʥrY\Kb.JB`-;r-ժ5z醢tجǂƸdl}R;iKZVr2n:=~\r̴KVm3#e\!.S=.!xYm4c廲DC(a/Z#7:qol 'G[3#3זFϳ*.f:mlSmw2a=}7L_CfMZ2#eFZ]e:Efgm z\ۥ9g^k uο- lE?'84 rO{>ILqbgW43%{<(Tj`h@rڶ{&xy[e;&S P)"BLH??Z~NИ^?˂Qɕpra8Q)N\j_KuXKrb\vkG3Up99#ڛl%"dڌi @.(x{+5'ĜF2#@baE3i6o0V b>l1iL4؛"!4J9 o悥si$\CP tHhGig=L9x!! !V!5Ŧf2AK bma#:>h&4qW g qvǁD#Yon/|! \'# h >W\=BrpAC,懘Щs u)))@ Av=jk V'/VZm7N.tHCt%*R-'(3gѢwއȢcE0Tu! e圢҈uKN"`!#d YDL%`9k9+ ],^5xyYP}]!\hɧ:/Z|fJH@tl\"L)o&tNai:릇8#qSIpF& \ 'y1NxyDPNR="<"qOR` 1 P(zjpBXje|@t^!Qjyv2sBdRB.'_7Et@Hʽw22"5?F<2<\jbDG5^Й]v-ETOIf_S}OiA(E!0%xJIWi~|r?҇ 'F=]G@ZcB'Qz`X ϠvIxŭ_gެ`b^nƄHD &>h}|BLsc(/H/DBt8#gExJ"{DZ|r<~Tȃ/;jmXka@aa8s[W|BՙNa?712iڋ)Ʉb9 Ø öFd4ˊѨXOE&:N # }}AsW/L~͖udw}v؁wƏ906 G8,I$BاPкjy|myP!=$\O~BC0NjC ؑd<iSx)T>; DuYp,D$PQVbK?c,p'j' :sCNKcLGCtd Ӽ# B~y7 .i`B<ܙXJDe+B pU ]) +G~乹59Q qXm.0 PkmܼѩSHypP:JJ֯6X{ƴAX{mtߜci%ZNBu l*R7>4;>#"㲜j֨n*>4MaٚYpwo) T$=s[{I4}ɅeNGgbmbULfe;rt\5^YX}<QR]\!Kw\'_N& &KEayӐ|P˙HCL]C)4؛P 3ae=V8!Z::+ qپ=2KjT pugjZJY*`};3i,2oKf F!\?-/,5G0M<З酖/[?~4אºFccyO 7aw#Bz~BaӉk埰`dY ѭΑ3Q#1>1RщtcҞ 970zR!뷏" a[{Ns + ;u5 3fFN((lGP}H{^i0L%dj $Wu\԰siʎu7KJ뺞˹hHV?C)C9<9UcDs#ޑvB}lY\)>>TD%+ LIauP?J%4zz N(kʹmRxݻBe[nϣ3RyvaPאs}[{Z`B՟JnH-.Hy;!KW=|iתoWY_"4BȁUazVaaa̴ rв#/ͲJ I_YLÈYVGǙ3$d¾ބ s/tӉS d77- V$u-;0t`,ԁ!롯L:$$-Y$b!1BLcf$a C:`PY)8݄FVȩ'_O VGVIl>a>٘D'.$LIBl G"~]p J8q:./I+FH[s{%o8m`!- o`u-<Ãn7; !naػ=Lfx%:a}JOwe.G`@U '_nSE w%XAyd!.I)q) ̾(LG<Y{ҍ9YWkzx7?6:!-izB0h΂Oll<<"zxbqHXtT>@3i8!Dr[YwYWe{ZDUI|#p<݄o;{3>y}m O=xGXna b-+ mk_#C:%nj qG]]iǕfd ?#\j$@;葼D1S ͜;B%xV>HSܯ=k.lma][A%޹H"Sv @IK'Ӟ$JIe{E׾; + oؚ0V=:IiHցW s M-֘_WW׵D:.hiz(2Tc&+;bn{=Q?2a\=~,ebeCXXi?=mW,땥 $)Eu/JD5`T\&'-kc KYLY,J?sԕkB$y h*D*GJ #B H"H` 輹 BD(Zκ}guM?ûӽ_!]}1$KrοOo%b!wn\K ބ?yہ0W0Dh"Bb`5 BP!`%O&_iCB!D- jy"r) p{!`ś7Ҍ4NI!)?n}m[ۍ8"$l)Y($y* /< #C!TC4 " K̄OXiJiiX^ U7.899MabAu ȅ4c)B^Ifq/K*+?탰)/9^X^ĈК+{ed]iBI@ŧD:k# H6GVtC8B^Ϳh#a!wL{zosg S}رOTYL=&!S(YR2'DI25z: /Jh;hKE,/F`6|pW0:0zp.BE @% k` +9BB<5|i'߸ҪD>Tq!\'(FC,L\NH\K6qt'HgfD95|>ao%I9P$M~$f[”ˆ׏=#gM'Qw7Myoo9+Kd]%o/ֆ$=M ,#kLN 2Wv'#|.GK|F4&q|'zB*<)Oa6뛐m!_?"P4ثk o1?R %5o9%;bZ=wV9"z{I?4#r & Y佶2 W؝M8:C%Feuv,$Di+,sˀQ5U-qD0viUnߪk{Mǟh: CKKscugIygUcg]OSc:{;~*.+i1D9=F[@P.?l##qlWhl-jxd ͐UlD* !23U*I56BIˈZk3EU)ygܤ7 9 Խ`Uۯ_0||`?^ǔuᚾghy69!1"H^ԡ;i x A`?iV! !2 BB!+0.[qѪqt!sH&Yܯr֫+4J'!Pi7d7m F@k=5ߧrmjPjO_=>9YT24ykyYv}H "kR"4~BhDK7^ ɤ|?\Q`F^YBq9ƌ]QLd`>[c 'O %0Jb¤h7.Se!rqsY풛 \}.792Ubpޒ h,YpkK DϚAuR\g>`U1o?N З_͏c2O N~,9>ݏWp0.S!(X|pfyBT%a:Zfu˧,^>U\#)I)bp< ՠ/j1Ȁə"9YFlGTֻ8H9τuPW6p">".1a#p->|rj֛>1N?):?M)!?uM=>CZ|kӆߘz*wbvb.(!ݻ"fTi=Y9{[Whr^9m7/#>Fr:+HU]0%p =@&B6 j~3QFo𵮎c!&ȡn_1+#%nYd!%:c]9$Ubvt0L !RmH^0H$@},t 1;~4vȲ@eZ{5)Bvtaf@ˌhZ4y:;d)l Sw!5O b]b y+Nvt׻IQm^95[["D09O;a"q)4*<Be7 y13xޜ”ZaVlN"P)7A{;.A I HAI(M$d_cn]rra+ƍJ0exR( V&rP}+$BX9P  l M5Є6<;y)) NI =LwSPaΏĀ[7`8COHR½H~6mYQSGXŚ*_ԁQ%~ OtaAI ̓%]6Dn}:VhC/cJN*0NS+D2+q2Ħݬ }|}aB_>&O>۟5Hv:*;s6H/ ̋yX\27&f];'V.C*֍WLDrĸ+p8f09.8"}oRN6I\cn1Kϸ&- k ++aS Idծ+GJ-G >V [YD`vT) gx !no/a5CbNW0q D#VqYWaW6kƘ3X2҇Ze ؚ'ڛZ[Q?Xđ4D5M`o顷 Okz[ΡI@ԅD"ɞ+ BG-K@F{6$H@!# Ow#=C"MZsND&*Ep9-֘\F+nj,ɐ(>ZȐҢ6 7:ok5h6$6sA! TT>=Y m~,`!!u{ q@& E{Ӻe- R 9X >ܰ($B)rSb$ޡL$X3Bs}bB,G(n/ŅutIK 4;eBs(:K['9G=--@Ź'ϗY;icvyA ◰zwvkG,Dxte<r)LBKayBgE(< h>! $QB29BZp̬9Z$˜@hx&6rr{Ơ,$l+`0$:LuK "c]g#,Gp=H!ڐѳbM y+i! YctT"prb|1뤊)S*2Y4M6铐ףE^oR!aچrbmzh*ooy #|UT$ )~|"LOȆ_cBv "ǻ]'GK}FaȍVeJp夳ZߤQ,捓'[{abLcj6_Ü:x&E+f_9E?Mi@u\{;F`s* >15">Y#>WY$!rM d@ utD`XpYEkDW끑,> ag|}>MA> zϗV=koYU tp̳"7JB9fXhs.B׮h7!R;NNIbVpZ@&b20T_+1gވ$ߙ?:>8R箲*j ZZ|^^2RZH#!r{/i97=ټ an_,!쿻 9q#CHk&RoG.C'3D:,[ špd39jiYOw3!qH¦R:HPyūGuӓ!O6lA;_'a!_v@RyB~smbvCHRj."5lUt{JaeRo- WJ^~.ҋ2^pP"}6zp󯚈h@vtw9QT43yF  98!׊;?~w/Ze/[o(X<)pM8Eꮀ W ֍D#>}^רD:M\['U+`⋐ˋr؋-=0eYzGɑ[/aq`8d"K$`=a:Av!x]:&z*ANJz`T.By~`.!ϻ:%$."wQp+ vX̬ ";7 o qc61wo:(ʁ!_Gȑ9#Yw!'σ/[=ؤ{-=Rk6tYر%PSwu?pdu8!Es a(]sDIo||T!Ef^Ճ#эOot@M5?-lJJِ%r褜+q.>yp< u*M.#*-hC8"շ"!L(J1.c! ;)w$^ITWÑd;2YJɁWZBnܽq=$/Bd(8Ej@Lt` c_3]L(=5冄+eaFV] #r~V5sQd@/> HM^e`GchyK%9O,a*!bG\()D0oWb!q9ƚKH^VN_BB` e |Ye`%+a$3JD #tSAPEk!F9o^ W3_579&C m@"Ǥ|؜;_O}M{.z--!5ՕuMU5=|TIЄdPSI9۵V@HL>-=h!ſ\9W ~Na΢R'.a!9pJ4_4$Z'B L:)La%߼0ߢ2ԮIEoqE4p#.,BP"$?}०g%pynPRG/pw{MP}7\h Uc zh,#)_!aaB rs`N! tGf pBA)Qƛ"qU\LiTC03M!24W(h7(͸bBcB:)I4S9E.!дc:)Z:x$@ѻgn".>&uU8Ư4LeqQR9ud2ZR ۽!$Ъ _9!ApakXH_ҷtr5 mȃQW~/ IVAљ &ko't3i |զM,:A/Դؘ*xR! Bm"LqJυu" a)o߸%;OZ 8t?t/%Emڸ? lw$ tPRr > 1vEFR=!,¢>IڼIgʾ7}n8.ܱQׇ@`_ojuR=jfSY][5;ل=|jU*A\8& t+)߄$$l=xm.Il޻6r;KD[ؐYPٳR֊ #Υ)ay[ %ǖxqSch[w|%$Cz5H}PЦD}\j1Fp\o]͒UZ'nځ38}rKe^ٳ]@1m$ BX"a&p` ~\4z#F BQts7r'׍6kۻzS+H";Rܝ! YA;v@X;hѭd7Q-?3=[=$+ |8XdA׉hހጛ{+ B2rc54h! !?/'IHft[Mxmذ% <<>{c}Æ"7odh7@L47DWĕR̥ ߎ>zɳ+"X+ԖK܈A!Ii["s,dyD!`!t,JH[XQ"X#KfgdSe]@,c}KhHF`X'*#Dıu"A̅ ~%|N`Xg٢t,,YQ?|BNtdcsȇRnt}ܬE|~RɃ`|Lc aH1 /5auc?; a'+AEhALh$wPbeq;ZG |.!!؉BR@~w ~bO4e~U˄Fk26UlR(̅KЕ~"!dc! *$u '7=v>:rѪ,e ml1\_S\Zʀeѱd;"A Wit@sل̅[ff|fi)8h~ٸ@;! ?aRi4hb3nMSQl|3sn} n?Og}臅l?%-\'Y ?EHU?S4zstW6s*N|`xcBF?Xxҿ?tAthVtBjjBvFFci48y3&n;ޑ1T/b) SΘ}y (8lC]A5 83g:? )'[^O[#z G꣡ ,m!~G'&>M%YAb lSP)&!l@!j!;28Rh|G#bqr4tĨڽ! 7'֞EkfV쟊ZAO]"o-IHm9ei"@Ҁ@KY6LIPj::y[2P J|_Fߴ`[fqRϳ nvBȤqij6%4 &[oSF{R" DqP-F|h9(lL@ #X119AWi9(G$dC~DDsh 7-%%c>YBȸ kH58!R!Tתp2CXbWC-FC3ɸjB5pUepLl> ٱ~o /gC/Ƒ49d%!Y%ǾG;$rT05G0x{֑qYyU`JdfhVI*DZfupfDZ@#~D?y(ܴ$aw_h YZ țw_JynͺSwnC,zFnP sZRd&8Ь1  +~\lWZ*&Quh]\;BPr|f* mWjX:znB l84bA OPgb/m}ezY2Fbف)uzY20~-"EL)S.@_,ˠ0+S2 ! GGec`>H" YwY()xg ~zB"ٻt7Us1?aں8\/(Pv##|(N |BXh>1M$-7Be)B`qu gr8Ar18,IfS@B{lǕr]+]1RJv/z@(HʐE9x{ z:O7T@{HƔI1v {W"rLɔ#PvҕPdy* a|9v0`|:Fju¢isF_w$ַpբJWC.J'TrBc)_;*2SVYb;)]LJ>W |0l1*ڑL=իZ6 {p:k-e(^,g2/;jӡ@%{u5~UUkutgK<9տ20)sS;_:ffH6tHPuK#] vH-Nk5]Ƒccizt/;D:[\^m$6nBxRC{#DI b!]GM@W][$pkD>y|Z82є AD,T}vgfB{b8&lÝK#-B=iK 6swFn?2ܝw,==V^j?'WY½ipeC9"LI; EpOp.9wi;3PeiBFv_Q.)<{~<J]Аls2j5::=Dgk(+CFcĨ2 g4u59zNl曓ZNI{V}Y'0]+2gv!Y'$Iq Ib$FCt,&&3~ymS,S!-GZ47ĭ=ʩ0M'Gb]{ٲPr5'[ɓvkOKmD|0<[K֡+Cf׼ Au NCGk|!X=`k'U^XnJXg5wDf:0|E:5WPR? ^xPԩaّ$1@ɐl(8QKDގp,X  zKT^tipP #MH@zSoN4LDCv!'}D,t+g,z^"XA{|YzF@y#B?2*DRs eJ?ڐFH,! ZЃN7h$8 ^"%Qe7zwpB#&?/! A؈R"GѤ&ec}F.,O2-DnXQ׉h[bb LvY6H U9|F!Ĕ%.U!N2)W&S™F"nL*ElH""B\$dE2T!"%x$_UjQfߨ%BŁL H3 x 7%$.d6sp U RB#8$.!O7뷍oq(+1/!BJET=B IHHB$jnnHaʄDCgqt),]C0'+$`0 t:v'}HBDG8^󑋿u߰lqq>½HxMC|~ȴo۽NCBܔpY%%r$yگ~%X!=V{\ k @0 Ƞ.CGS4ԮWUYiSW& NM2U3ƌ2nM\e%7lOlc!@#k*? Ϟn! !琸ǥP]x% mQP)2፣Fv2*yV^/+էK%-թv p.ÜK!K$xXU)OOl$K=)1lJãh)p}`omDjsXAgk;|b`-wX}Ny lLHt$+8b24K>+wm65L/ AEz}4SVyGȘ.P`*<&#O3d $dJ ȸ{Ru\>h)(SԘqPUTᑪR鲚ANG%4W"HNuB^wt0_ Cz f -_[^FĒۼLzw h! B6 Di7iH$!WeRBnT7+ZF%8U,ɀ체2ujR**=y~)$ 2vkvZ^v+D8ظ/`r0u͆/TC}BKChB{CMeiD`P/7CBT0bt,P 4z$\6{txYŪrŀ<8]ìqӞ{4gpc'0MKhit& 5{*+$nD9}x$$+btI1;)t5EQF'Y=P}>DԽ lGzWu L*".8\<J& ~2J2.<% FJA>>lw1u#bRG8f Χ*IB$,&Ry21ݪ m5i djt-C4VH9 3 8wn00ChX F+Lxŷ29zdO Ileeo8}2X m0^eV[G@A-{Φa x:!+"0"dEŮ ҂hIU'3%b:sĢe~g.m둳AXťw|zK^xiGp&AK99LP*9KD& Q6==)"Oq5$K#,F%xi!ts~߭i2]@hXmFL0:mz#6/6N=වJذ}Ƿ>%gFDlhh MHI-bH8MsC 8W؉(JSr!;Nl!@KY:;K4ET`s5ug+$yWhȞbԅ +÷8굆־`u>@Aϸ LF#|7GlHC6 x x'߁/}tᵔ5{GR"4%u.fm&0)׸e1S}qlC J.bE7sN- N7L)N)^*/^+%:i3~Cėw- `ӏa.Xϰб vcmʅ^ 0ucehݮ8#iH`V1 ؈!Lk6`\~&UbV8.LHsӚz[^)x\:F[g!qete}1z\aQC'ác WCT.M ɥS l Љd.j"%AcTRՔ Yh\_z˂-nwi,H>bk \ت9Vo;!2z >.ܫM sx'އ kt{3Bxug wtuKB^ۧHO%=Zm a]W߱':F ł@`qdt9-68?_(B;Rgx?%e)_)7BB/8<b"*~9k@?*ؙttY7\w< -Ul[uΎYܦCw54E,px?ހưqՆEOk&=ۿ~X 9>=A'ۛ]Tˮ>~Ǩ`&eVDk=v'OuϞL&N{g?}](g? G "$jVӏ0%W^kyb=YrJpRwF iFđ[N>2f 0i0W Ͷͯpb}}h6 ؏v`ouqaak Na1 #0y5e5Ғ.)>U[}l{9sBxS̟=B'HC~xwO"xz JzFY`JN.Xu:TU{Ev -.zv%u ,fC5%V!$X 1cau~/&J(wX!8 q4HI@ !|rfS[RS2i4z\ s%sH։)j )+e"8lѓܐEuJ zm=p$u.qԽ}6Ap m,>׬1h8}0Hk9ywhEx.`4~Ɩ@(v>CISS|R.;31LȲ+G(+πۯeZ2lZE 11~ C,{|ܵ^}{ʨawtbomB9RĕZHhU"؀ם~~:cb1p yzB o#|aĩ~v6QPB"ȟ4&T'% .T/znjJ\ Y _$d{cb#%"ޮkTvk%Lî{8cim|Wb!Lvcz,`cg {1 1=\nr'~zx7Fԡ9e¿oh+?PՋoI*+AW E(Bw|!l;%[Z D|$lØY}f{Z;Rs'B0:f\_1/-o2їȐ{/W?j_R6>yP'1T7 1^ZCꆚW CkDhZaZi*s 97l#Kww6kh_[YY&2a c)Q74 @AzA\h#!q+lAo!koų X$-{#7ONL]1B}UvW&xtԄGyr`䶊7ơQ:!ne_'";z^w n0QRkHw)Djmaqb(=Gjz*Wkb\KEuZXՊoi!NʖjElH]'sʴb)PQš^FzH=]בpf\u7'kVr}.nS%4׎Da} !`$sBɽK!A*"8&t* :?TykoY46XC!YE/ff5ABǂ\NwւXR}0ض@-1bEX]FoTRގ\u_:\B1PeTĩ@9‹"8- 9Y, }K%$1~G c6)fQp wXΛ`k 3$ސ%l Α 9BFlZ@#yCdd/=>j`U/(q5b4/,ג}❹pȕ@&9 r߆TBN̷38N܅HU1s B0-:t``_go}W|ק5w~oӯ>G!ꕷƅ_Hg gH~@9H28aOloM@rq!%qIw/>|?Bh:yз 7tPOq]]HsI_:v+%gfu;O ^6B? !?o>̇&oſ_}Eb2%}?~՝_|?ps_c9v[. >$hjWLIx5f/k&; <R$Q쉌iH= c/k279_%ؘ>͗קCxnq! >} ȁa} BL h4:SY'EGVۙqBb?0Xh+`D9J@$Jr/:;;a::]UةWj$H&;Nut껔 *]" ]啔ůR Խ J˂2 !sԨKab)|fks + x^je\xڅM#Bw!9oM (IahAy#= 0r i=л3ssmȲyy5 A5m\=(8HGr?d?icL`*07Z?*ۂӌt;j%mò5 Yj^IH] %1J%bX9C|xoR_8.d \:^yRq:,byA8oKWB0R;-b3?W`ݴ(A]#Ԗ. M<%ӺU{垥K%0P%?${DN,yb߇b$& o~[)_WiuuTLH %3(MuA`n9ʽ;d7uAOgCh]O"]  tovK /mc]ߘn\x c (Xh6;ͨ' K<ٕOVfVP@ws1ތrNPpUmhJ!>u|vef}Vaff2{j&ǺxM&Wg<3^r);K{o%n0tC.;6"LR)Do : ,wb肯SfxRNN'&9-6{?4M,lR_ 1m$̪5Bex? \~Hia(B8ljxʱ!"ТÈs)d$!UuB ?|Z )w%QTaa@AپvHT}@F% x;"dBbԐ*RDyVe[u@!j 7HK3]1CsbIUJe0m/ q:}5DAdYJ'PobK ݵ"G}JJqi>Z}j¯~6jG&E2RR?ȱ~Y*&4~1k>(>Acaj}MnxtIP 'x-ԍ2k wMjFR#e>eP!~#ˑo6J .MĠGׄ)| !8G?Pu r񏅧bT)57Z-~Hِsw|lwt v:%'=ufW񦷬>ebʚZ Y_E_?Ή8#.JsFÍ<ʕ4 `( q:z{f:Qp9W,5oԝ#4t&St15g,g]MB}t qJ{5c/ckoPgR>@%Ά!.j'RBN2(o;fnsg9!S 3ͪ5y2'JX H}wLH &(B P)T!mȅ3h)ǢBk ѡLRHWP im'&SԛΦ}QnZg[OBw EO :SVH7 Nc eƯ4Уhjvc:LmFd*Xd#2̤QT`?zm (e٩=ԅm5o #µkxPCWb5ngc5ͮvUE(S uͯ״s Dēi XMJ=zj}.ofl6s۽7,Emc)浃vӛ-bc1l)یvMm{)>w|湚<־ɣMcVHd~7aI {SGJ#Z *dFgkTZ1`ƁZ AItA)2X#LlFg+kUV˾Ȯ)>@ @̭R7nV<'l\$s^ַ/C22-EzZe${!m7ut+n #m xͥFH ӅƈU]Fel*炑;Xt=pAGuaդBDbLT$#s['L28u[;)d|r"C/ xL&d@(ĖgD>SwrIy$d&Z:}6V D%b9|Ѡ\ WOa8cN@n8}:!Z)uqw\ga1R \|j\\bS"/U#UNS5'dϑK3V0#[dH ŤXV7yBh,H|a= mKs8f7MY"ú%N'Ѭhy3tC%! }TDwQg7ZL#rH10߯QA;!l܀ݕ2W_ed) pAJ5vߨ-+R[S>\|A}C!/-[?wE -y̓B+ygCh"73N̖xV$1dx!c<eb^Ox|c%!$Dsd 4DCPFj|#EnHa sd0BaRRRLXF/.:&i༔;F&ݱ!CtR-!] t 4AЍm^E8k;^`cD&6J)ϦY45J1  ;yM1TŌR Za{``  K# ȓ.2(a [8qHg!:=C1?;F~^~LIְj5Ô7)KJ‘T\Z\ưfpNh}]oO̖W@)E{@ RSZ<1a1tw/>g~Bl22S։Ф.bGi ;S8K>^jCm85(NC5uRpiEb14rAp,C1c!LBN( 1`BSyԈB!TVXB𖖝!Ah6Xʩc92I !D(V}Arg~jR?!DMCj PGB$9!5义I9B3,Vj NjH!4TXc hz&Z"'DFRA<%  NjnB`8x 7b'nbX L&1DFj'Ŧ9al!˧p BN:Q8xTD.H#T*=@M`̉Lt[' VoRCXl\K !U$d%#7>fV.tSa;1h./68 V®EcG,'Tcݔy? 8MFJΤn Fz-.ĠM]hG `L.0W PuoouCĤү "XMXՂI&[i-qq?_?D#Aڨm5 VbS`ۋ>9(MdaAbUG,b>`t ے)~k/M-b=DZL=zke )j.!U;)+硥̡\ EG EO[=ƭW`c:Z_ Ơ*4q;3-ˢ46 R weH𼆼#EȘ ʄC[Jv?Ts$Q@rLX٪D38;p2ܥ#!p_1M;0cǞR/rPvO R&}"7˄?~'D'^dhJ'=JL$l]ЄT'yݝGrH"!-rݲhe R "Z۔XrR[|$zغhp'X@<Kޡ.:d-U |`*V`0[AD*Lgr^7e1Lۇa3\(_}㛕LEn~?ִig/X~脀ӾwbB[H!f>ΡwշPܜL[vg-/"M|(n1ұ9;7v5n ΍)7o[3BܟyE=ivn5dap|qԐPlH,_CCIRm L{gCcTX4pzyML ќӾ{b雵=n]@qުoNp$u'=wvxdݟ|}L"#o zdn?/rK]ޞچFY|=SFO[P3dy=LB㻳ٕuޔs3([CoO>߉ǓsPrnlC8!(j'":ĩD3--Άً:FTKXEQT}BBgC/]W>5 EuBͦi J&J_L0ReBV*_Htv9C!#bg hSmg Se*VZ]K0LHym|W9 JO\=--C%9eB0I{T*V*γ*7VfJ(ZkD?4t~n# x~&~n(X.7`ZmkZ-f:5Dy.G5U*&ldP!Z/ts8ҞΪM۶PȝeZ> .3! ~PnJ<B?^D!ꐫ[5nBX3+f>OW M/{7QoxX@ y&iWILY!Ɯ2,u.dcM<2Ҿv.4!w㎦ή81,a/d2 dY&D+[qdOPSFzW%T& ~򲪭*d fӟlﲺ_ YZ3v٤PݨC|zB|P;Z;djH} LWG4mGaǝfsT  hmBj)?J|V FS4ke i6hvm=k0\*axNW_*pVS_$fzj4UI{֐"(Nj'-ܦz0&&;=u2uR, # k\BꨵЂԚ*>uF-!*jiB[xzHkԆltiYbs^m"Ƚ3AO6L-*QOxˢE=k9xRP6zID\V=u6!JjHc7t g+࣍K |H 2}SX6ykw'Kmp05]܎C 23}& SSǡX]X $8܆$UdcրoTHiY2S/dGk׎sTzrR.RB UaS!=֚c8Ֆz"˂@`fVO!2T $. 0j*[^w8*B.KK?]a.lsBDmYio+R 5?"BZ*x AˏG}*^;erkySmsKe; = GCHQE¦vò.KVWWǂ v? %3dy#SiegdCrTlZ[`yQ4b(d/v)G ю2Xڌ&U2 a zY}|MභЇQ6dpM5l \ZӺZ]6ӵ>Tzν3}rt1iτ"ҮkYhsxnZ`kݛl1"SxxR0t_N/í^=28d@B%䓭OR)JJ֚]e]ˏHv-I|"ho!HutYԁiOVkǚj^fxPJ};Q k6wi卍ɻB>Mrl{k%hK}viޔLf 'iolޠstxzduY͵=ֱkBvtYЌ4$(]_Iܧ #w!BO@:v}zl>z >hmkp -&1wtV:N޼>%gYNME4شcMȎ. 2r;%@5\Is6VBP6No h4&BinFl%ɬ?ָuMz|rs[/j.J}Hߎ?JeD)[\SG,lT$fȒՂIYpN:)yV͎yGG3]Sl!ܪT;"DOk vu,s3!f̪֨3xu\3V2׍ (Kc=ȍ6,E!uAkrmZn,-ǖKwEB{.{!U$R5#eb.l4]V!*/d^YEw>đDXTȀf!9Bؙ;L:}bHXRu0_e YE NPGTJyM~ Cenk;ס}EV@}7>ԃJ'a݄0(*!GI{\z*\rV+uׅ7b Hs8YG%8mx+j?d jÞ൬YgU3 2jv^<6_B8aDs0?{j. 4V5:^n].;M>\r'8&(Ri՟:0VITIBN/hPh4-g ] D lF|$14g)"Rh%<lr| (m`JVJ0JB5㹀UB9!dt`¶?ӭX wi5(|?a )H`KHR OHDa"C4,o=yHXIxv?Ea !'˓Bak{gQkMCyj.d(ܭ,Lg9c0d2l sǑ,LB+qj 7ٝybNyBb|>7#И.ُoʊ]Rp7|k: g~7gVۑ'LE,%Mº;KKC %#Wn#*n'8 4t& Wݡ@("pblfҤ.vK 'c`d Ɵf6p"ԭDCd zXB߆1DR@?AIHРtT1< g"x@d#2먅B̃%X'y:>ϳH%rsě@%0KTK~ߖ<DcxiJ ( 8//1$ ۋ b wlŒf*:OOSr *)T*$Z,YLK;1pS/>8A&IENDB`awf-extended-4.2.0/images/thumbs/gtk4-rtl.png000066400000000000000000001176071522325530000210260ustar00rootroot00000000000000PNG  IHDR`PLTE¶øʿŹȽʋ]ILj[GϘbKɻƷʼ܀UBȻǹྸxUF˽_J̿hNwǽaJpbݾƶ݅]KƻǼſxeüôufP齭|eS–ûˊ~zuue|ogX厉yuqڜ~P<|huN>ӡm_tpm`R}{lZϑfN֏ZCa\Yԫдچr^gdankhkVĈtr}YHؾԮ{XFUROV@հlٹoE2>BCrmћ߽ƌmŮ&&%{fIF8nݚVp檐@TBٵӂOLҹIѭnb-~x8z'zۙHIDATx P[G%$$!MHl!]f7cLc% bߑ1YY=;6`Ǔ;f&eR2IMݚu'SwܺW>6HL2:3?ӧ_}Q(`:F)S_O \ 0 ۀw9LcM1wsG:Xo`'>{K=fLmE1j?Gj :N7&P(052cلi ,:Q30VPN75% 1aP CaqBIg]"#0R>_(Q"P$bEF#)bDx|P΅*Rb)! qLELB>XD Fx!>'Z9 &VidC%\#>DE .X3q01$DL]K] 2)Lp#ִGѱS[9t&wPQe>, qMEeLc)ufyLj%ϔ+6m31\1c bP<5oPA󘌼}B)2EܴY(kn mUv[b-޶NMPS*l-1nEx:p1DH" h7DLL&HE:5@8<ƙᡡ~>\ëi3ܚFí j:s[<vW$[u[CC[sCCa**kes6L{mAFxrPk[sޛͰ{yh!&iW~seeAO{msH N٘ +E9S0zQ91Ƕ`~eomoKlbp\BkߚfmkkCy-52$^rZEڶJփC`\l{{cookZW6*ۋ\>5Aygc\V^+õ G]Cدº эrΡ!ArlM(|\Y96[z-8!lhMtַ.͵1֘ ֯nnGm? Pd&{pU,Z"*š` b(,x[.( qlHrSg )@6S:a[c3plIB$l8(P-8q\CLrdAa,X+(D3LW7ɂڭ`A а-%n[(!9 l7 f7dJX9 /1S 75,*Ƚ9U;653K !kG^ bˑVVU ecR+UJ+QI{cSm)l/2U() "հz^c3M<}E[1Zr@×6E\`Rf+4PLOrqI ubkI =7åf;v&9PMw.Tc WģR]ToQm<<}\ˎ/iE+d6`g VggXĪ8 \Je]< 0T1Cu">Rl_BJmÅ@q<4G~ϲ|LWcWwc yB.S-O %͏=bn Sabbb^^̊dE a4W?܃.oWVx ԘBP:¬/~8.H@‚-l^8ZQ@A[uMuu$PEi2PGS/..2+{$-b )~标I͑ nT1d1'VBWdEu`BW'%-q;0Cȋ?' Rj~~~R,q³#';;~qG Ib6˿e1VG(*e27.V*wvk\ BLtM|瑕X(d*( }TG%/pLW+*=5ExZ_"~ppUѣ_G24(jρbB__P)lkJ~Zd<W##wQUY~sv,X^.NNj<ig ~WÞ=y!9 b,VH$ m%8~7~ͷ%ξTpZrIOO%12Nʸ:Y /acgh0 4dZ s0AOLd?kwb7u\Q|U'hGVTT~`dJq7Bv.Ll#(Z[+8^[Тű% ߍU2Br?qieJ+2]ͥqOfzZ;v3&~l=*st`UD]?`Q.GG!& C? x}hڥ:,ZZ:bJFB;VXJ_ʵGw;mGb?|H;_\śO>BDHv4HTmfuZgetă0IurX } AJN_*Z G&KVpIݰwL,kzŽ啤GBkH[G3!\xxoym1{Z]lS!R&l >}toR :cJK}38:YgO{0֛<C?6ЂJx1U _5'#D'\h W쨉w[.0;"SRJy⪊nRb&ܻYt6u(eKmJ۶Ua8UԸ?{P1QY NvdrTy֜5BVqa`qfC W"]Ma\ X*=+66PY}-dZ39mFQ<'_h؃!GU B7GwP,;ssTKzHVH_TFIX؞*8X*g;h l*#2D/0xq0'hS!L&=skfy^/ p-x>.ʀ'Y1&T BxHv W_ÖAs0p] *nwPB ;=΁AA]}0* tp I`׸Q ?7\?A1FR>XĘ/ϿS#{=tW\M'26J bx{ڿc#SPBmω㒂ZZ-S3))i'BBB}cpehnH\C |Tprgp2w+,4t#sNxgNHXbu])0'i6ه:B989.gƳRukj`1ݲZzѣh{ zZo;>Q>.jnG_OC9z^z9gsyyrBMQ\Bi"AAm<ʺSYp*_U2z즃9W:5E!)׹⁳;[Su\ZC暂 Ε{x9 :b͏.=hhYM mr"xOh{)bzݾB ~; XIS5$z4ӑᐊrKB~xJijʡh RP }9 / .H*֣Ԫʤѻ]wN~z66ye r4Vdݥ[7M`K?{ANO K)̄OHO_8emll,,mxjz̃nZշ7 )<_C`an3NCBڟ?Mhvk%@2OM*i}wFiKP/ݽDLBd +6'OOJ'Rd 7YGp{O0m -h4t^ɺ" li;~HLDJR$ d}&]-qljAYF'w8e -M^=@5q{K˗ LLNXwn KTV ^ ~vˊ Q)ңT%~B@Ʒk54IV@gesVC[gq`oSQlksӯ PxK@0Tkxد)K$pb [ۏh+]+N2nEhwn ou@۹#{}01h X1v:i=F=$HUu4hͳ~..?:?7= ujXCט؄w\Xh)CoyIs lsdpe b2XNVöQ%s2J}Aoe|1dxDk^e*Ul5RR 9FLN/wW)\\$#"4jpc4zH)G5Pi[LfmkDb uuu:k.zё=‘!} 269MXiWXhuЮo.N㤮PQ ҆yY Nw1v~'nJ9 Q SRv(Du Lh/ kOS zK"\g\.DeTx4.Ug&B9P$7{XH)'"x*Ax<hv ӽGC*F{CNT 6ӱtUcp ^^KE86kU[B;NC1J O~GJ9yQ8r/)o6[0M%{D׿w b)W=GXn1۹}{&Ga|k *hijiPG$tͬP ³TK|Oz۞c~jg;vB)HtnPC|=IXt)#HV]bK l1-NSp7D&.i ){OA_Į)-H OR20-$8(86qCU䇡ڂaØ5JS ASX܁X*iuR:eBIFŨ4Еdr"_-Sp9CH} ΖwZWۘب0[x X-lHJ1 ՂX3B+Z\ V},*jO7D` 7ޙVpI bbՐQ֝ѵGF]Ռ[m(gg[W~Z~HH-Av? r.=4&Nl q Nk^<=I.v߱`ll%:آ  X *]hϤT Ag1Y ERb")T0Tpo(l·ڵ > U1Fr!g%@IUܪ$+~nyэq|8<>bUIzO@]>!2YUo]m@ ;Te sx2HA&-s446s$+Td"RtrA_l)5.‘L# ݵp +f/3|DyU@š?0c<mǮLArL ?ر YxL R͎b%Hk"x_-c Ѧ {lR`_W11 LР5D.B_Mi@$҃`gsi$ z#H=kcj}С4NFPwҷ¬8XVn~q~̟U]jb lcj I0DChJ )NMvtLlef,/Hdt lL-N}1+_pg)9[@;Bg8-=B=!vt`K RA1 >Mwf7(I'N`C 8IX#"G&EuE&a`U+#dP) !~:|ڤm@V]ECCc@{`-lc`'' T|, 0]ɉr  %;]9Ft3c:K>Ȋc"2BM^Ca3EDq1T~ V&yF7$tO? B@DzxmoD K]vAAחQ!!8S$=gcc|=dcf!}£&n%-PQMvRsjz$hwxSŒn{Px } jGwt$13#8`C\cL񽎋W{#ѵ9RT[{U+K}kw`;|/ ҿϦ>NZuV׈JY)=;*}wEp𻃋) Q;b!(D[ "BՙJuʢԞ8g?]DӀjzcde 7eYC!' s1"FT^Z~4vsipb֥ܻII}?ɗs)I]D7qe Qe$$'PU6hC:;cYVV?h &PV"V= 9 QzH$(2437sq'/MGFWrrG>ZJW|'Oo.=ddޒ) vɏEƆ _?Q6T vޙ a9pUw&oM+# WfN]矟yzE͛DYQ{C/&N{E!EWي9+5$y*}!wrWn?[]^}teiuyuh!\C3>xy O],괪tݕ/{ȋCCoo`W8=OMA~:[tKm=`wY&6sp=q>|n$P(a8sU;?,=QzRS?ǟqgɟH-!QG` `|z; 大Xbc`lGAJ+fBp Ͳb 6iZsq,C))/?eWd&01TI}uP㙺KhGNI&GVG\a{^Ud,ڂ탶ӋҙX} )+z>ٗc|6d^>=%9IUȥd1Szw&j.?D0)ho."̍<E#ϥU~~ys68;`[5U%HiuЙdvy?LYhY13ps=V:THWֻ?QM9>&z'\Qmޕx}\RW^r]C#!UI$px鳫hOWUWLT׹ <f 44%R!UIZ*"GD>=Sōj|@2HƒťAsZە3Ƨ7ڬ] dCnZ*MiGlA?): ]rMC 5O2r)>.$OaڪL捑QшaVb ۆ!g?UBe|dFm@ Tpøb/֞IRˠ"8$RIIЮTkoY[gKNk&%v7w#ʐ-G&4~JxWX}_ps 25 PdT.6<4k+mmW6|9Wslyb=6NAf )oWk؜SshLR!7\\iP%Ռܲ-A"L$r' r9DmXI;]Fm/2o u%XF.'$_H9(Vɖs+ +sm A~?is#剓I>(Bh5re|.+4-hx&]rV޹4s; dlmnkl6q7;\aSY͟Wz T=Ƶw@~$Yw33K HDh*59@dKN[NH8|9 a!t~4ko{A0թO L;?ǐ\\D<G~~b%y1<3c}U*8Ѫ)sĶhʊKWxY[+k4T78B`0dgܺuw){| #+K[bfe=(T’LzQU3mky$֞'$FN$G$I)U*~/ B"sp@ n &TX M^Ư C,8 S\ {ށ>?0yBjYŧKTe 5IPBS|J>Jzm?jL_f]D:ɞzUX(p= ??(Ô݅ )NG "! HxuZ{3Cp<5pa3bD'hR):ҨQ'0NG?/ Tl7B\uq}5a 8Á_yB 4`N|^=8KLE"pJ#+SGT't %?! 6+cֹIyAXI(_DGI \G JzzT]P^l>;xFzv{rf s.I?bMM h"t @PN_ٔsGkCݶ ݃y0C&ar>\qr֛Wё/ =/lHo1> *ۄ̎oMz4I~xiCӑgjB0ݳԪuɲ_J?>5{J~AuM9&gC;b,BqɰJ1[tb`W{ExMKHlW&NL f1ȀΖkIB!0@|R&߯9|s'd&kN"c_ؒ_{2u2n4*+!Pa ra2W.&aqˀ !n:S;\1c!a]Pl~¡{tJ5/0\@94,)!UWhrv8vO!\jvpv|jlAۑQUK dd|BvOYeymmwwmeSX|%Ļ?'d]NTJ!rĢ0P!w|*0ˍx|(66ĉ)2`1-g:( %R"1Pdg3f?Us>kYHB>y}Oi¹ɛ] r.!|ruޠv$:2cA ˋ01##I&wm$BP& ,Ђk!uKeFF M>: e9)L\e \LU.'5M ڐ#XLp9?}bϣf}a rHx~ÅL]-ucugNsRĹ_E",*KHK3ƒĔKEIE=}H=CD#ɯTmVYQ@DrFpQH&GW6A M>Cĕy8aLqu 3l",E.gsɑ&O]Xo- 9p )r98F̧ ꃄȡt$Urq>!AYt tȁy ae4]XRMtg<,.'YsukR'dHRx<'4$ $)\n笫_8 /KF³cRќɈT&ý˸\2%jLHdmHc~> 7b >l=! kӿBq'tAx\Si?0mLƗ r\Ǝ`C_R0⤳OڐP )1|W+d]Y1^hJH^S~)!iMK;pvrUU6 \Ѽ ٝ LdhPט́„>v9=t6S嫠"}@ȏ\dxQXu^%5 #&3h [4ѬT4CmJ ѳs`{ |xf-S?ѰєIĦJHBĤdτo7#0d@bFXoĝu5 ;ހ7{t8Ї"2̻g9znd@qi=k ] xݙ:h8@+Bz+T\}# bF 9)_nHmy\ !^?L>HQOoݿq&ێk!s$II1m/A#ca<,apޜy Ap)$6/;ù/Np{j܂9"ׇ^<;73[eE\>c`R؂vvmB]&S}>+k.:ɌKLa"Iēr׭Bi9 Åi=yxcF(wGSBHt±EDľy)6I><)kOUE!7x>f:f(]sE>oed ePeM[9p'[thG/II&rN,=B$BDD1(dCVDU)G0w MӘ}+6S?N,"j6}2[!r@H%:Bf(BhB!$ d!"En'~\' - d!L[xgATRR~q %C&qXK_% B.zs!uN҄Ӑ{obS{z#B #wt WxTQB93VSɄip=f@%Ds^:B~kB_GȮm'Bhږ٥kb'D`ы+5$gϱ8w7C#cO8SGOH‡7nB k>}٨zly:slR!!UBG ZzpQH4==U'dW!ЩRHNw]WPQrkUA<>f!Mu4Gh qBw^?p(8s#Bv?;ßS ,ՠv^{d Y#FO3GACAp3Vf,cIl MT՗V;Ѩ3  v:?~U̯97Hys} BAD7!6YB6n9P {eD}GVE׳7u!f6&J`BE!t^0NGvf^E _\t୙^[Ԁ9|$ipը >= "5R uTd D]'1!G_C!#BvCt^M|wc q .#^)u>[ch=!sL9Bv&4b t"bt¤Aa0%!̓|lm&{jb1!qe6Cp9(T6߆=w(|+%7x 6*-(Wt"OYuH~(NIމoF{Tw𘐸w#Yth hr{1q%@ȓĸ( 4@VXZrJa!)!"Er a#Ka]1!611ѣH76o@?˲wڮ9ZH{fo,!iG?λs:9J0xgrR1mG rSD MOH T'{T`!mf,7/YCZ _|Wr wcTvW$Â@X2"8!؃1bMX&ÎAq!\l;3XoByI{@ MxŔ74@HÈȍ57`~mjz< Hw٢"h 8R䐥N'e&+pB3ˢ yl)}TT:! m[\Wj]31\ViӽV K>i\Zڌ( Bp0֞0E=OvZOZ?:u᛺EMf1 0'fOێ$^AT% Pej i t4TY0'Pd!U(tP$ 妄;N-tC9E@\{Ss밦9e⬥DC$)J6)X\<$I646!~n1o}ዓ@H $׹{ }8K7\2eyIilXveZmsCDK{Her1$Z( !`!Lj')VN1&xwGv9;XWu'Q\un%ޮ vw0}[ 9̤u )`%IcT -QeHrGTqAKs`ui-f{[E֫!w@y LE@kr\(RoWQT$8@(VY{q6\byy{;ػn a !i P|a?NnA1~zg޺T1FG1!.qN⹞^'Vۚ'jJO7vuj4sͱ+sͳH R\rUKap Vp1RytUqU>дmhhժl,(+1`2>|qeac* D+0K\]xǒKf怀ڶ* XppC詛!ß["npBy sq.`;TClgς)z;\8Kɑp byöB"v黮ww/.‚2'>6&i 5풁R 8iB/w}[!į3M&v`c^?`FRR/ڳ,nP_7)6C8R&w{b03$dۦEex( h][[f+p~7hC뗿f!aAv"?ickAyW^#|+:u9')82#?}9yc`lh ^" `}پ+ie݋-7c'*?LؽzsVWKkͻi))t!V$~`!d `\SU<9xb*GCek"y{B9[{9*+0.*^;>pTVv7vV~Ѵ5֢-kK8מl+1!u}3Ԩ!RhDO@ aCCd^}me<e,qGb7%#xl)^U`(G\!=QZZŭbI_ZuDsvmLmldËYq_K[-+ ZAZPs@gy `paKD6PJKc3>&%?;%g北+!?^[ZʷBNbI\s ǘ_  A4NOwN kW'Z'[f&dWO~P[vn9NjFI<\Ð5>I>~ ??f\ lY;<! $)oΉI)!SB);xπ8)5EF8k#2dM^܂8QD.>\>O$r$ Dž3 @A4! G*.=-J27 k؛'KJZ=!!sֽsQ$ gĀW O`!pGR8"(5톏t1TJ$v=NTV[qRp88:0BL, )M;uP S1t" ̶Lmc S!aֿll}7O<rS:+>牞*l(#*B!Д0w\Weml=Znw+BVX01 ! 0%B/8`cDI< {]|ts3HK55^V!Sq[b*/%BZg[~b"M \JrM} K[D hB,H "oFi;H:{3v[z ޯB.d958y39[HGN#iJג@fpXeu KD`:b.o0FmE896B ~B0&%.sO_*;$}B|[nOߡ{w?8U%AX[߆&w\ڧeUUӠ݇yLO'1k yS !DJHvn6DXV%{A. V|p]8 N}73߼D!%Iպ*h%;U)%5@HBEEӐC{/C [(tMCRď?q1(Vȫ)}IY4&o]64honѣulɧѯߐ`ڬ-iN=T`_~ G %DpSh׃h(vNz)6$fo.BkmIȟ=fdwfs)dFtwkҮx S5zV`&ͽ~jtZfp`p+4Z~9T=utn,JA?1N_MV|q||U!]QKh{& &#KW"@Q$KK5@¶ۙ(H߾I !D!dցwNbY1DЇ]%1h9$q: PBqWKZRR!GF'$66z.QQQnW 5:t߃ r#AB(`n9$~u%b#;V HB$+5p&_#"GPBv"F06! "LPֈrKc)Axyan uFqPžPݢԐ]%6AC I$؇`uhx* R{Eü:;[_~tNr3ˠcM=$g60yRk(_LAx,F )BE3.z%~źhpz<"C^_:& 6bI$ToѢ*IBlٝVR$$}P I>/K<K7\PKՕGJ.C/B-Å^p+E|8od!Ij#<>`1/տlk|%].K+2ˊmӄ Gt^GHAeR1 qd#0;9Ř!+n.QD8EB qK(0TS>@ i'+!l{R :M|nu6e7X+:6qMS+ո:D.7n"|SGl{2>! Z-CǑjYi}R$3gk&NܗPMs21 NnVl#!:0585Eɘɯ3GtaSo^l> $ Y9Squ/ep!:onG0:V.<';?mpۖ+78dDmq P%4br%#dfP DZuwzl>?:V(&M SY+Cwf6]04_ u^h7w\F;^yox;g'%lzѫoj/Άnn[f5!dZ/LP kC p4Ȋ'wGdFM#S#/5oui5y F-e^\̮ wͦ;'a0=IHrP ,'paz-Ǩ(|\TBOဨ.Ȫ^%Gn Fu><ߙ4xTt|GWA3ުO% v|i~CS|n}lbN󵹽'(le *\hX=K^ TLkjkH~0&$aXbipy |LZU\b elܱxzɪ?4?xw5>몚,3u{{$oBIc%!+`߄у#WL䃦Ρ #wG 'Ϟ#oh@S;:df oL# 2 m3.ZgV;s5h3.}hcy얊;+5I AX!6搊[íQ©B`2lLFN!C~Wer*! ;%!ܶbzn)(JJ0r ^tMSIty\s[2ږ]Ve߼lvNH4!%K3awY>!58Gh65QW!n (9U!(-kXqL("W?.udih&| nr`JX^bw,8 kk=~+?Bp֥JqD4[#|-!LK`ă Bsp ')ꦅ`!:Eqݜ6| bxʱ4^heqQ4S眷X ђ-o=DʲȾLE3+k#A>k5%IH }{j# Wߺ~-G@ hȻJ=Aa[ 6Yd ß!i) +0M2:6iRPl t(ߣD&`vJ4 B+SwNKÊ"Bڄ<~ !AB*3RXY1P)8rōbڽ]kNkSJb* PO# Z0GIID{ҖIjYlf<+CjV~J0'ۯ&(:OH $q$rZ#s_|vVHBti3ȩeQ9# 0kDc2]pB? ߥ_j]IlzmFO8lٗeӧɍSŒU USC2g+4 GKc-UMNw$e&J=9=anQ]=QApL~elzlB҉ύnqzlR-o|&'z}%9л89s!a,|v!zJ!Bg"$*Q._C|sei< 6T\PBf/L]uL{#nH?2k>և/ndAWtщ \[/MNNiOǃ[~>,p `xM^A]dޗ/GY )_Cl-GJL\lz|!‰oa7[SSCScM}LCS9&oi8O%^p4d=kp(y;wTIg3,xef\X3^VI؜3N>+TL=>a ->*mburoN8EH$0b J]'e1e9CaxBQP<*buC4w Ɏ8Y{ ǫb$h NV")2ܓONKpda7|@)vR(p@a:h|OSƃOޯFw0Fc*_Y:Q^w9fm=6kB"cg/.bhr-0 9ёu%0qХ(~KP\T nàK cՂ%hlRβ4BNb8pI-eC,&( &a05 -Z&H$l=$;*F%D)e\$Z{~>3+u ah  P-uDbQCgm %{ R:cK 0{5k |n H4J4^ Gw "6DDD肐 fE)Kft= WEH~(4 |^8B,u~l$|^B 82HBv&Aą.y>-X) ^KH*!FK'o`$W|Bd;DG<JD N51\ѮM t7omA {YimN \<;^Qx `?B" r-㦂za7xH~ڡ|Ma pzY7Owz oaqYdw!"dPZy'q:25RP{tvitq,%g0c0Xڌnn,x5\7,XD>B-#1^ABk7B_!n 906 4ZfY^H[MNvN2O^8d+2c΂nj'GfyZկ^xΪʼn["&*lfک*5X][p--yQ¨uajVFn; fw;+D k۩"4 Yyp`ptCb{`/.4]j;>yO.>64::zv41v`+#+-L) rHBCa67~ XP23p}4lVR9 >m3,*%6 3سw:^.Bc %*:1oy3DxCȿo@ƙ*j8иA|*$t]8'RoטvMcZ|v͙W]`?5=K}>\s)9tӧtORQCIEN1|uw𭿸dXyGۨc +؅6n"~C_glk%,jVdmO?8i>H#͜;J^0:>փ H~;q5xsppve=4\qu΍j$6{|%?81paxhp=!滦N׵N0홡ahe(OR{ =Q[k" T8QG{z۞Vf75oEhoÂx@y, f$emUl[s?} ֞y} ʿnp )KfYhGi2rx}c^1d8XY`=z`@s.vJ#o/t_SbGW:e8XN~rf#tݗ4}{rl v6uh: Iz€QzPG%DL539k!+& #$vp||FEBcLy0u|"ÆjP9v;m_|~ncn?z"zI^Ⱀx`}>yH&я I н$TB D44Fay$"ΰ RPo6< 2%AV   (a@\ IUl [~a/HHDcNRstZ: URg^疧&IՅNn|O?wϟL=g?3HoB8gdC>'X]ɤ`VP\HC1a #!@.;nk+GoRkO8D-uڼa6 τi{u75]Wܢ+1pB yw?< y?׳4Xz`*Gac5Y HTT ׁc=KfbSG@1kݝ#.֍/utyf\XYr, = mo_\@b}:y kb6#RDH-.ZuzQjuRW|LGxۨΟ4ُ?=3w4@o$h% ܜ DA (c>@C2!5h5yٱdu/O!B0arZǭ֕er+mY1>RX8`XD} _cZl#d˧ErmQjjHjHץ h?~@d`!}OG+JX-]F߻Z5r($7# )4OIRp=4…Ց鐊!u1 <˺2_uC Ms8fHxg5waiy>o!Z!8Mv[,rȡ|rHLƀ"^wRv}RRTT.9PJٲ#Ev`˗?}{ًAF/!C#9% NxaȸDLjbӬO?y{Ar ";uI4 ji2Lrr] ĚM/meE`ܮq1cEbA4v9mHV^ DͶY,ڦ Di%|7~7p#J=$j)h崛JFAw{.1߾Õ6dBt|635ҕLH*/V˻GtP 5NKɌ4Y L R.˕YGՕh6DNF'p+Ax+`=DE̟DV(,.CʬCON?9Vꄐ773Sn ]1?ڨߴ/Vޥ֪dvfek麌]Y+RRv_Iae4&*8+KY}cb#=Uq\IO-f%!cZ}=  n[S/I}E3!#,dZõT>g;>H6c[7c:Kjwi ]Y :u$BѧKЩ`1WU)M 6hՙԾxuuZ[[U榪v@-^B!n}Q5ס)h%X Bx WD!}_?~cx?ffFK=_"Ji8QӧQRMNUBր+@%o!%9igV5b%g$URr<²![Tc(.*EDE'e$lBL i 9uT\.TʝSΩ)h8ps>be,oaf:;?$`/\HBˬ4Eh5n@hs8j#2CJ|Hgޜp16!L:.X!uk.Y=N3s8.2.;@H72V5[qxDmS ?cۅ9PLmŸl[Emk&U;T, .H6dAMQ~0e"\dB_8tsͷP4jF"KS]tX49 <>V(6}{>!wCpxk{1h  F9C+EQ&XyƹzsZI&K gT`#eݳarm3F FJ-g`HHbWWcmeOm5(%T@JoehDU; ;)7bMAt"3ꇢȤ^:Eտs_&W%Y>$^ ¨B Cb.|N%Ŗۊ(L֜HdBVJm5(KٗYN sipȳɔ29@C4…`]`wsYťőKvDLaCjVק',n;!83$諧3KN0FؖV2ye1PK=HVUٕH)K]YJRgk4Lyv9d_}2=`MLfu(3k X٠! [1ڪ F,Tc+ vj}eևjkĒfmg kP4:!G.>O?,>UMœ:aW !U{7a,޷Vј01 ĔeWd;la2In34.ථz6xgo}돟_?כO?|5d !'}/׵z?l@(KM{- ?Xb.`zSo_}k%gR;P"ZWJR^bّlJTI(RQp$Q:H 0rMEk,8Ý?jA?O>Y?~ ~|uNAOaO菟o1՗ =(?>hF9ӑ >Tx< e?Z+;2DՀ%n}#5nxF0#Ǝ^'Fjm/7ZV4u.( a*Opp0 _}9sDK@ XFbX,* E@oꏬd*4GKԧp$Ekv` ٧6Yp, !r 8 J`Vn =~ 0>xxo]{`uc7 n]nܺ [qeVҋd;.vG//8*!R_Yf4,!(dT{o̟X>Rwhΐߡ#<>XCMJV8잍@vhJ({OF52apm֐~{, ϝiDWFATa7s`q Hd44m;1ݪ4uNp8N73[]v] uϫB :Ց^^t[tbh& YS-&'8jNtZnk5U:ضqz਄IjSul͹Qn_w?j~#;_cGB cؿޫ6@)@#F J XM}F(`\dzmEJ䐛]Prk/:=ڏ"!(be^9M{y`@j.:']Rq{(*[*ܧݺn=3t2PMn^{S9z"eF4Q*'Fnv/lF'l1&[@4* Dw_U˟?$ӾZԐ!{ T%2q&K{}KjC,Lc1GYT}yrlDy:+3 z''/u+OU_\#rkվqkUKԴt{<`\4kaClry%Q8#wM Mh0FHL'ЧNo~#Z'SFI1ؐ6DiU.z*,pwFd2Rfsq#fWk>uKu|z੭BJ Sr{S{ ^YQv5BQ;0bK`z ‘(#2\~GD#C9\A(&DH>rAi'0l24 m9yBjl^mp5uE-0^wCQ5gԛl'pB @ǦbVuFj!j"8#$z|@.!ou4#'ձ8wu,!IN &l V푥CpJpbm):z)Q'>4h@iy Bp`r3Ұ]Ay8m}nu=ȃ`_8{Hou%M(Z8ތz⃓!CE!aSa1e9nPoiͬrjTǠEF{5;TTAe]EՈuU{IF:;fI[?h!kgOs-lbld)؍fe4dslD.Gɡ  4 4 U`*'לJLD5 a X3F ̚EM޲ BzhƆaBR{xmb^BTR=h^kW4^`_+28hkQvb{ޕtB4ﶪRztDvNv<2L .}|%!F ϳ.dC!b)ۏAϴH/SJ9XDC@NOW#n:S5NTc g4>]>b 6)U+! &$%#a|jO>r*,a>3_C<]iV T&#FULUt7fBφ*m٧Ց}BªǝYz0n/_; %R1cWpD"$8pٓ Wȝ!fa*!O̓RՠRYo^*Zϛ(eFLi4TCK=2QLN!bKԸ@C 'rC@YIR&,1cQ_+R "Tё\TKaRdOjўFR7> b=BUCx,LqĪT+RWKkѠT-b$9U%}0vgKIERL ipq`(8HC' `9k(Wz$y7'ߏj2&ſQn-L=I%$1m%Ռz={aG-[ǖFܒaCd%*ڟ`&XDؒ}3bl s/Έ<>P_{,ema^YI'7T&KBxVJ):K3L9ܸmT{ozƱqG6Uˑv]B''қވLHyfq{OKOCg2 B? $c#X"-|Zxe6!/OVC`rB,'J&sOBSgCdjnJj4eK|#$أ OP|0FdcOsD<˅r$KKO&:SMBVS@ =JhPgEL{ чX5-~/N ?!&Ow.G}^m+Y=,3ћ.=7z-PܤZ6 wAjlBBshB?Qe 1Dz™Rȑ[/&|B!Omɲ̮eQU!ZLr\a6fKY{&^mHGh/KX6V\7ח /, d`惡IH~1,]ۚ{4pP$aLX})"PrMvۣ*E2B25$ 䙄MM3|/~j8@?ׁgD h&Q"TqE(u7UZVRI#x4Ƌ\pnveS" xv3*a(گ=P׳7/!dJxu |5];QBx^'Iن|#& dK^Je~];t M+;Sdh+-T!T;-}GIۡkأzԐ)Nu<`Qx4* E֣59Kh6rDy3mj4H]~36ο'ezم*S*hp͒9 xu {|a|ei| YMRI:ݕwVNX 2ΕgyWFw1bN'<=-]q7eL\J$RsHx}x)_h6*O+#׮2^kG=_"3QSRhWΫfPhZ+hZJ)0 椮I2rR5Uʼt w7Rv =xZj'D=kޫC"&UW ]aBw`U n`UmjAZ륛 6R@C l ƒtǻ@:7>>j }9愷n6% 9աV R+I3í[p}W'D7v`.~ ._'46$[Kk% R uWu+^.tBm^^7!76y- {J%Sr'-e烺w: 7OFhG;!rm|MܿVC /oS)V)RËJekkkzZVD4'AdXd Q\})Hjk/%Ub1;ɧH"Ă!Dr,z+Tģ`*L˲M7NV I1c7OT2 }+):ՄPZJϕlÆ7]LRD|>,-{R'ќ$Ke73Hj= қ[zO{ so>nyco^ Y Tl!֜fIyʹk֛xG#j5m&[xb1AP proYY,tuz7Ovi%cvk&fR"ak42 1(}LvwOdnQ뛠!R غ^)!nmm]x/j &Eu 6' ~NK6CX3.(OMp=8z7O,V(:$5%}!^ϒkgIud+ވV㏺2ь8=̷u[YRoD%5f fO3` %dRlFKT'C%Z4-5ЪSk<]iWd<L?ub>EN'Zزh 8ְeMڧ lyS`n~il ZjjXZs6s׹k] ՐZN ܛ^7{v]X]IcGHOe27蜞f]mM0jBI{cjWYdz]])}5^`S̾w!V#$5(.fRO wnNqe Dzf0#Dm2ڕrl#[+PNVnC59$͉ͭ[&-LT*y“{e#)q痌K}+-+.+ l9z ٲ>]qdjͥxQ0wo +)gظp2K4 cj6Rwq5Ngj-J& ]xGclB/N-O v zz iزOX9 w vJ$7;L2( [-H[hnb+^Y(R1B鎤lv"I=MGRKS`rϢsoKamYQB)p)}u ꓬ- 2|t}2b1)a\$8m wr'H˜N (3 ,!3& }[fΪ0[Cp)xNшLq`_1f 6!Ff7efQ^WÛBBB֒I!!AGE( 3a. Ol+L ߘƏ(Bչ9^-iF X/ISr@<7l1n&^!B!< Sr% sJ_QBz `Ձ `FtFsFcTMƷc)(^\rt4p4(E˩Xa M)b ,2f9%cvp)30%⌐W!d1QF0zjWUh5Q̔pɓ 9Y0ƘX46BT9[lRb&Jh  \&'JCXs3"3B (Vv&T|Bّ19#:pQW Q{Lfci =X.6 f2T-8L"s\"9bɴÿCD.cEd$%y<+B" #yh$P!yhQƞb < 2T|D#2 <ĕpx6`PH$Njz H&%!fB!d! >)A;g8=o*IENDB`awf-extended-4.2.0/images/thumbs/gtk4.png000066400000000000000000001207411522325530000202200ustar00rootroot00000000000000PNG  IHDR`PLTEʿ¶ƷᩜʼøĹČ]IȽĘbKȺʻxTEUBƾ_Jƻ˾Ǹw݈[GhN֕aJǼ\HpayfȾ]KƿǾûݽô÷–ue~yu˘veO|O<̾ǻ§sXGbPĽyurhVՄ|կ}zўgXtqmӁbTYB|p}՚hRm_ʙta󅅆jgdnYeMѬkc`]oliqI8{}m]YVlZTQNМۿDEEطŊojP344ݘyt᭩ۇ>qa|ȺHEܰie}v窏ވ%ךy:ŵ9SI`9rd.u4{Rgs}IDATx{TSWrO '$B(BrV.EH&V*ufj[[Ngm׻fou{99my?I>q.up2FɟǽWh]R&RKz7$hbܳm nkk ۻ7.\ukͿnML"{kȉ[{En2@5$FɭųVpq[^{/h![(ufw>g͑e7GN\7==nu7eOFLɉ[Dn2ɩꓓIՑ c'ʦ&㙲Vp-HXФ!qq!C5RoAO'^9iSSeYP3Y W'&^<=?U=z!bЅj0uv\z:I_U]y912$_wq~"8.mt!@͑W._wi}Ĕ~fz]P~Z;>44{y:nPhBv:w6{z8fr̿Rqrڸ^g,˨ yu"IwA3;YW74m4.=u S?$_ƿFb,Nl3_ݿ~gMIw.֠l0&toj֯0_[jlqZ0;d"C&BFS~Ƌ K.?nvz:eBt].mpT٪8$HK m!! ?DL )?8ӽV6g\x%R[TdTۥ6J?1uP?V21ZRzt,˜>$2.4PD伡|2"djjz 699 9$.n꣺`R?aϚ8xWFu k 9JBڐGฐqu:Cq52m<3&mFg\\ml4R"ڂq= ؐqh;4y DS8'hQo,CWChc^$shFxbR-Wv5F`d%H~%Oͻd~-X,u%-ݾt M.9:#ٰm LKi,(tS-.G&PzzJb؇U -YlL0 STY*Wب cCm4E=\&al LdRUà^%jC>h<<̳(TYqY%јB0CBBYhh\NW,mF_ XKAa,?3Ppˡ@PЯZ.nRY/]/ܽM~XP*-, t*dAS(ZufT^/-d)JU#1[PZ[]-XxsBXjg aINB,eV),pPdK$x&WK"2?=5p؇ "xS(*"vl[׏w7뛫ofws;UmKv66I-s-ҵTWli𻴒%U]*!]+_oLx37E=›z-.C!7(Ri +%5]qPb79!˿.0,Tv,.o+*+Ή 6&/**r{[cUcxs*;j?h87<0^Ptd`AnM]ȧݮMz{;jf)wI** ֮]Í57WV5n?6n]9[ԺAgf" A$Pk}@@OcU5ܠ/7V0 8ܱ5-|݃qpO{ :o6wU48Ќ_a8W_qvkqS[*}c=ȧF2acN}k8/鯩J>ofWVzP\TÊނ⪪z+o7&Us~"0Y3S 8s s A P-LuLSI,W"+ EAovLu0pB--H@m=BSKCLQ\XMZeWMJ<,DޔS*ϻ@k͞J0:!kJG+R0,i$DCKS']M h(.k]~ӇoOya-{_/e}\{ĚhGu/Jf,%hB%']mxl_n&QHʟdR% 6RX2d!;/x.e\*3XI57SxSr1i\=-T6yH鮅l$9XO {ѣ]oHI@RYrXr[#Kr6Ȱr,=."UR va^fR\@WWdH6 U=n~“_ /H4.HPow>ea8Mb*>y/e21?Z,C9bwe 7KkՄA&=<244ҍIQQv&\!&~Tr-/} |X*"^KAL4aqۺod JL#~)]Ӱ]Rh&j' ttl7,5kƂPGn `a@"g` 0Е@^#-ч%r(&ۊIfQ ecccm._PDNeǏ+*e"5t|sbTtQHQ;[?;ȍh6h_?eCEY*O.r=>/ !,O?q A+e?H:j3\` P܋.LUJR l,4 4s(08Eƌ6Y"Cd//nSE{_7xxlsw}"= ?X =jh0%LB)[J=rיn㕹(d`k3J܈To+ n{.?䲚MB͔(ڸsW||զQQNާ_}44C?G8DF$%h/r1x %\=< 3՘]#9 7alK ٰ^WSYCV,yC7YPUv};B}Eq.ڬj%0Sk֖Mc[;,u{w" wdhn04Qη/ԜW %{{~!M-#4x5ԫ >a>wݰ& b6.@9נksABG/]zmz 5;wl 견 s>0]C+x솹ڎ3lT#jt:^&0ɪ=q^pqg†=0+|ݲ5j˖(Qk! %(oL,e9o]Aai[҃/pDž'Q|kmmS߂ EQo;`ܻ{( "n__5ȗ%Ins55" dkLrlOT@QGU/'|s RxsE @bL΃ڂa0%DЙP2ay [&|-Q)iÞ-+)/[䴏:dab!C<|} Bo'TC7+-MfF3~cl{M0Y;G|/i؉&A^;m7q^M6^,ٲfed7ږ ў4*bQV\X8!:y{{zCf:! "]AÂ@xD"HiiܐE$K *J 1<=[o%#vf G4-;kfs!램ތ*@ /;8YFIv9x-NooFbbc X! L»o+2kfwM9*4ϴvuvVʋo|"A S1iw ܹsvν+4 ڵGi婷a(q(lڕ3g`p]>BBsXBB!>j2`X;]ʖ7*Nt6_?yq7l.\;PQHA6\HJ:y$dl:m6% A\O066+hT6CuGoR龹U]w.4.22uAcwg~tBkWbk>֜{vdv왻"W9:wh;gDW6 )#cn1.s_,EHQ 4MyM"e1d1AP/yzOOCLJ&3zeփ%+g'12 >:m$HmmuQc{V±-1fAr06, E%j*GE'ʑɈZ&E g3!6 Dn93 K?(vv3z tc'N򨑋)C@{Ǭ3SMr{ vddAtRD" \Eg>حU{sD~> T\3SWq0n2loY2O#D7 R/7b55K Pz/_:իo'y*ɛiۄXY )MIТMSDn"-ѲhYghWV;6 )VzʵAh'.!~S. T@jd(I+}َ[L(79+p"璂|G/ Aj$m ؓ okc-HkVĖ'fQj+۩lr%:)ͬQhkޥ]ccZ{*.V| Ŵ=}6$s+&*ѹ _^T,& x]D_ ,)7dR>5O@'Bho#67V`8 =}Ȫz[;ٌpA\^޲"ltziXޢi"T!~)A^d D9~&Jsu\K=zvLƕ;pM1wӗw\(ܧtt$?yTn!bL5/Gu/?{\&eYzddɆkrt;R)[ܹ f B\>!p٘+u!)؋XeQ Ap+ '}$@8CfA6\z޻}pNSoNGVFZ7qgRkOk#. 7zH?ЃZpV*ǗV<.co8Z?۫^mPhB\8tC6lWqk@ߟ 5 7h4|/Ui}w5+[A+sdk{&Sޯ8BC.$͚Uc>cac~Ƕ'[n?A'pT Y2::LW> 88d~&+eeIUJ_{V;ndg:ҍuEs{ڶe:y mEL<>v"@V8!~3Glq~2lob_W<:/H/>@lj/>L!5Ϧ`-Ia!A  )8uR P<];|gBDNHzx#MfRe !rK _F`U`Gk"Ŋ mb:=gu]fV@pb;ϾŰg?统-G4pЛ! @$r(fKR$+LֺgZZ<*qsX&i@D[FLɏ riVR/Ӥ4@9RU)AɠdeH"0K邔m3S? Y;L7ow |c{ X¸,hD1p6&A3"T heUsz`Yj%\1~c, W[9iQ~\M9 x&#$̊ um ttݰ>^9*ֳ|hZO]x#Js&t+Ue҂DA9pѣ)9ꓝ9hbq;seg}zg-%HFG OgGpZWd(l/D$ӎBY9/AWW9o2[cl R'XFjGgk/y#LJfut,KE ~YC;qQz\& $P]0;Ν#wP;{|uY5r|1T^ %^!!Ie!P!~NDV_U&&ڇH!6e #[i:ƕAY0:.0hhnܘ{ wivicx sbTTf!SSS`z0BKw $lnkPyZV0rNWyqwyG<~W[~PMmuyQ妟6-5j\BPĩswr9*L1*9.C-vfϵ ƖWɫ, A.%79xop NI |Nivee *g0Nfږ uPK]q5~.V!Ur2 /"nDiphX9V0hDėځo =,O+0A #fAJں͚n'Ugtl/5ԔG39\~>Z4PLm}to"h&tcRv'\wO|<#Y$-R p|/"FbA`os܊Q)*ePUSDQ ~llSTUf6.90钠uV+r>o_=A[*/l&i}ꓗ<4R"4WW Í;M:-ht_֧i(*yj!2B es *oHoO-[ExA';~a~XFoYHDlTF<]ΗSw6;]qɧa,) ^Z(ϕ[">*Bt3`Cw$@*4Nf}p5-sw[2 ݔn.9p@(=̏:eeSKت)e~X‰~8RDx$z)V}i,.kM",]ˑ rR'v#lZlR¬z:0L86[7H _JQ5R$i xc uU~B䶴w4PBh5KhAt`Aղfnw3yXA<*B*VFīdRt0.Oڞ|5[*HeAϹp;BA3{ &iAώbʊꔃ{8iK`~ Zd"0U}-O6cs+4 `UC LZ0 ^ -AQfON|G";,==P23PRW'+>]%Mda2J| uce!tq&Ý8Xp'|d XLrլ+֒hRo{1ч:2B&U@XyUh 'n&p6<BG3Jq 3᫊Ģ2y\7SđBV3~̲$l rPq 7ֿd7܄F(se1Pq `Wϓ"9\Zw<63alۛ< 7%>0 ʬ((Aw3y.;$kӻ~lIxOnL!2éYnz)|{yk*@8XehCBNN֍O&t __}M>SA!2 RraHρȨBW A1V`cHWMޝC,qrq+ l4[|ǃ:Ph֛f_0D)zYOBrrۢgBXGwiudo`@(bs|` ֓_> Scc&t[C >ZƋ7<#iF[,MV_F"x(=wnI6@m#*nsm=eSD :orms}t_"X[?0R&͡SȩxJC2O}Qx0rIi[h8F-̬ŢdPk.|E,6/4QBX想N\=#@%1(v%}6Û)5799FElCAB}_Tх1mtZtbyHP#˶y\'dr09Fi@ }M0!ڸ !YYYwF0'nOjz4(|R:yi-{ Ԁ-bxϻE?!.!*u \; &A%9{ݞrn{0~\Adrx/߃&͂~񍩱M}` g̼|G/|&>81 vk&ˆy]߻~F7Bzg}{R!Bt ߾>LS¿ tPH!dr04O8vuAx^oߺgV6njGw,yXzOKA`$,[ivE5 C&M{//l@ڼk0СpǦ 6M6 Z|A5NƳ* i?dh 5uPIT!kd="#U"d岙 $v*er8M=v{sgaxTLjX^S7)ć}]8-bQ^4GRte`fgSG,Tڈr9Co*t: 36D{\ha '/_ε! B0Q_xXr A bOd`!h tBq*ŠPL]^AjG̢G'Ws/l$u ӈs(9Ft ķ)m2`BLc$UXc]Pn6KM;e #v -w_rѢtKpZQ( Ĕ\)W' lȀbxQɔ` 4Y$MCg**N4`x,LHJq/dH bٺnoUE!arMWəHx@Hy$<5?\'ah)/Hc \,qq` Ĕ\dEXfTóa=[A$.N4vqJmr~r>:~d` u_`tF"$@iwAG+=|K<̈́b~aIb:{ MЧ~QGde `*wMTM~4)'-M0U?~Jvʅ˻OvAъ!S|a֍ 1"gkwNOM/OaʚNXn/K(t~% u-/'*]xϾ#kǎ\7VG:Q`y=#x `.=F wL X<;[S.X*/._\~|^\U>]s16 ٟb1ӓ>? r q^\6 @ܕkWJ@Ђ=wU };|y~]7;o<}g+P pޮ$cUV(`ax&WagA M XICRs< B?]oo:{6dfh6p:/GpMۺɏ䍠,= "u?PoF…7.bfp%%'@JmT(Јx 4@ "z}Cx  9,ݵl<m&A0UVY :9Vn\( a8]FT"e >RqvщJ#̓]]B'JnGmLo(˅ 6>[\d>&@UG6 BIN@L@ 'ÚX n1!!q\cO]a:ߵ62Id ue;B{Ě +wYe#~Fr9?'VJr@E?yH7b&,>߿߅4 70㰭+0pwgE{!d̒5ANk m D)j"Ͱ!obaFx'T\-3 -OiHCvDfyOVB}$-KANZG#얰݁m ;zƧ- `~4k6Lǿ>e~^3Obqqqp u8V3f͇nu.+QRV@5#LAT`3ArA]tDnKz=̳sE_}s7L)ճb|d=uR⢴g|?T<ӳ*BT V9 C /v`J%9`?ll=`^\DŽ7 zrC; }\zξwN=͠ߍwZB}srlMB\oŚ5ӣ=7ƕ]/6 7/%! r꤅ 'Zpv;Rx+@B{fUTaK=ϣ߾ =Bd> 's,6[2gUs?'`w80肄lB ;.S g{#e! ǯۓ:as80R t?F[Kj lq17wcðL1X~ILHZIcE WЅ ' CJYkk:! qGGF{#ANtYl&]F?q14g"Y㳦oIs0#&6Qw&OI  v݇9͂Ugt`w 6zYh6yQ;3ŋu NaeRbXlXog좦X6 qj> SKр0Z=xE$"" NmtKpTfdT͍fRK#Ұ >aW>0gEofӝNK5|{ŀH] [{(߾RqOQH]:=zqvE;HdJ[͗س~,6 Ӄ%% !~I.$@-AYDqg> ^~OCwS=>Yޝ64:?8'2̅T|>mtqyq~z~qL|NmJr|}Ub_?<\IJ'H%/Bx?77+se 缬p{:cmyyTz/o.[\_^|Qwqnp.~tcxt|gy(y>c8֘|L@dZ.A5g>A@5 sy"$ 5$ǀB!bM uʀ3ٺwC#ONuu5qD,C.UE+qfXY,Xiu%ľa|Kh:w2<s\f /hh*YMfTcfw" D]41瞭/ٝ׽\=|yOM]yzA$A"_v!!KQ"CPAm%.!E D`JҤϔn֧at:|yZluZv:O|\r@k2ܜ'9sC{\^:tczٮ(ї}p]uRaǩ꣼5L!e_ Ǐ~mB~A/Gi${W-`ooy{;}nݳA38. ;Ή$nN(Q'•G W"!lX|jm,9MOPc _Bnd']%?hxã!k2rk \ 6Rv@ !BPôWCV!xjy ) %$Y_,3Se| B;g^>{ٱ5!~" $]$_*ȈUجs"PpB."(:mNl䬺)~7ꂍd|q2XN;5|i @ENj YW0*a )1S3:S&˖=OǤ`O|BHHnǏ${ %9"TDC/IMNe×q"3% x%B ?I?b|drA`A qnMHF!2נEsY\+M%;iǑ!{_#NQiP! 󈨫f&K)5߾5BO+j<`I$N:xGJ̈́ "́L4y :6C9(M:eX$.+Q6'!B~iT!B!2IL c&S:@b`( .MAϙIB\~JH#$\d5) +MHLˍP+ݶXF w=-̈́Ԩ?y0qdivΜM|r֒dLH80PKI<"j=7s$420JԐrc7zOʉe$'&Ҥ'{׏>` dFS@23  yc.|KBF 38&޴6bֹ[.()&Ds0s=~\'z5N}#lC ( ݕ/7-4:F&koWz'g cZ;{#v-G("z|v8n}ɮ/}y9^2yq;&bμI^ AaĚ ).?^ $>3$m=}c0ۄzl  LG= mYocD @C:E+e1e(2R/% ]'g~4D!yroiXt.[pX^4,gVܵ^h_wp V$wZ[WBy%NĴ~3v2~l8tP3et|9<֣mnP8G%\Tc=cCYlz˾h*5d :ǣG c+kxW!J@>Heb!/wzVǴiѧw8 ļCiMplӡ_X链e{[# ٭Z}gyOLJCT6mօug:v _Xo\4ˠFݮݥK]:ϥA|n~a~#T(x ! O?"@X!gFHFAX Pb>w=WΜf 1Kμrfs18:;\.9dk/y R?z$sy*g;w][_z`Bm1u]`.N%s]]Ń!ɔs9k1eiv*R p6*\{7eل$ErV͠nsA=&7Q(QPv@͑VzdN,\C>%f֢K=]=6K̰yP;ybEc@-X']C7.vۺfT]7<NJT͟5Wڒ۲5nf '^`{F@D[C$cf^`E=tt'%^[p[(RVp"9nxlNv%֦f ڦN!NS20 |$5kCQ;u:݉9 RIwϾ'WvT'5X z'8rkBؚtq4 CЋ(޵șd12MSTM"X7'`* {_C!>IܞB#܎]4lL9H.C>@Q"Y@SqBBpXmQm/p`PR5!=!7`b>lǂq}Abw~Z^ 'ܮ ;r#/{X* ~q?=u'82W}AA:h ~BYvLQ{dƾd_p{( V!(p;sqtY"rӸwA/'xKB/k"R8$APƦJZ[Q2]m!p9n;yQ ά&O`mz50iˣ#$ xhIVRz~04:5\03̰GJ{17|bdSp\ f!oAOHtYB^,!/;}ǐ +!{ЪB4; y1̳G! Nkyar;.^ݤ\$iJ 5!7kHs/4'l ,mힱc$x>NB FB n,˜}c 4UD&0^qOM g*pJ,ݓPUEKInX@h.@,:7.HHjf;Bb ?RHe x_G9omL9!7lENHk!_iy7vڛ]=x8i 6ߚmiVMZ]FSh}*]= _QKNQj|AyKg_j] 䙘xt}|wf3! 8l)@e'`[S`* ܀V!?e %,lҐ̈́_}D{&䭮AOw@g,Zps1nTύ~_4+&ۇ/]{ot[qװ5~nxf֎BNI!!1ta7SN&;i0l3!%%it!(+JJܠ% nDI}M9P5JM{ PPH`4(ij$rڋuBmee5MD[?By&7k;ayӱvҙ$pǴIH& 9}͇u1pkaf ,3ū䥞;zHD~pqR.jºi ;{E:9I 6rg_{b8!;7p֑$jpIC#?z޺டzK v;k_i7e`azerhاC[x=^'LŔeᢪo ZNo̤Եt_iH-6CXteSdo {Pm6b_j3v6LC5!hia|Ů*U1aMF"ahŸ8H1%B@J!9!IP,kiaIϭ;M$7'֗$H8yuNKV,YX_ghȃY3:^Bm6mSAd<-hsgŨ5H(Mmda]6J'1TO7y;I>Zm$d>ЅD ЗG[uPK^:| C$xvv>gv#{= ֹv{ʓ֕5;a#}fieķ^X"ᮓ,#:g •Hg/\<>`JyݺPDAf NI+PԮ[ K#M&Rim%1?Z+s$r bm= ;y}&=1Hȧ׽J=Dæ/kxBK .\K/l4?CLGrP%ݤP(v$6y[D]?yB8ofKXRSAU}W@2dSU44~1jf, i *B! IC)rAB@ج%Bx;*s^A*\@ DHs!eՄkȩ?3a7V EqNua-\Lu6ؐԇyR>ޖNی83wƠ0=^ @l4 vBP-1'(X7J==i tZr]`£p7.j5(țWwƇ!_|73^lvͤq<0flÌC_ a3[c&:54G:/u1zB =44@jM!VhAE!|ӗP8QIz|btT~R 7"9٫$杵N}#dLiQ;&r7q1U/avHͯ>y뛫Ildn wZ=f.XN|cƘ/?[txn]ꢆ;kga}:rKBD!r<'Ph(o <*I$:TF0Z!܁Jy9vG߱XuY}+ 7F=~ݹLa/]]+}0w//,{DT!SISm9 q,vRKlKc'ƮQͯ{f1X3݃0K,utcc1wyЁ@†*nAHnқ}Oso{}5#JT ;(˨ Jؗ}^;wO;ܓwZ;X'ڌ)'vúcmȹ,@\!ZKjvM L pW\G{&/]7T\W39r3kPלnK/550 ̃Ҁ<$7p|U45;K }mZ:m=j=lih错˦ȆI4dݩww1 Sw1.%!!rU118fh'6mQ@pO/sSV~vD]J0绝^2@`7Bܨݫl2)ӍEB9|<:z вh7MM#ms{T6F,UaT vD\8X1Y}9 8x#S wdR**6yE tY׾iԴ?_{_~wyp'CX?HQHJcq,Ll&CF)L|? (]p6UQj%z>`o7|BC%dkL=l|PxpG`LtLwH} ݃HH?ý{O??pn )-BҜdRZ睯NZ%)(m0! T7F+I M{*dB XA˄FJM{$PO=!^:T/˵z (}W Di.hȷ{7epmV&iʏI JKO.vhOkNm*qdkN'0]~McpU2-H۴2Xl[BgFxW Ừ!9pc 5l-~ meDp`א@>iȽ{?ݟ{?EPWf*DG*$Jn=к;@\ 3Qކ'Yؔg 8EB@IhKb-'JI4Lrh6ҫ]K]eX "ag5iix)ZjXkU8Y 7(QsrxKYBZ C!Z9UyS$P6[~矿O5OP CIPVmfWks*VkOeV.m-mՈ`Ѣus]E7$ZO/=+\n!@~`㛿N/zaָTwW^뱏GVNgu`BpVNJA%h%L%ĉ,q gC5*\3.9 UL,\~THeVJb;hC=Œ ޽;o Ee4 VKJۓXR'⽉pD7DA[u:j\u@E0\ZXp 1,} 24wAC>%ހM^_>Q!@z!P)qJ4jjm6MUH./"UWu dVߙy \ZZ|<j$竏QT۪YUN$Uu^vMp2T].+V]4Z. \8VGmz x:*n%7XqJ7V| bip +DޮDu Krb_i۝˽@\ ynOSd6IW+=QWӹGaYeUĞ.ˑidIdWl$'=7#c\UgPEgR?|oQ-r 8pR5ۖ?)/ \^r>Ie7$P:uM<\CH ImN 1LW)ФjLU]S .HemRlDD&!f\[՚])m)-,Xy`PB^nU@7 x,+VTDBjJ[YL)T<D&q4ƒ.CCR HJA 94_sEvƙp8_B/(v>zk~F!Hj5(;*pLe=cΏ ch4$X-HQeJ18&=̗ &$'Mhf f ڬ`A8 )]K$e6 6oacBDAH>V6uTC!\^u;n} Fu10 A=;Q;=0\Chѵ+Iל e/?7Vv '!YI(#W$K;]M7YNuOu,tènt!pm(Dvk@}_T!͗^o/e7?yomM/>&zj7 n8Svߙa@^a2ˢ_LoeIlm7dF5&0W^Z+bqa%+l%lx^aPI'*6MttA q(P269瀦n3 Kƅz-"6ZX E6!;=^Ƥ*ZsO_3~ L^M$hBБN!l*H|铏~V?~K?x_ILմhP> O/Iޙ·Z{F :03{"3:q۰b ZkpF،wA A b&6v>) BŰ 9qd@ L0>/m܅[7(0°Fv@'|2>n~Uvo#|{7g7N7^?ށ>_{O_~=ŗ?OϾrw}Ͽ?3k~~̧|!}߽%ϵ3cE9aD;4.BV MI%jLr_ϝz39뚚GiBZg#h42;!QBJ9\z+o~XG+?-n_OwjDC#[ihD |{P[=۰*σiI{V%0KE.߽:vUpˎ.$_+`{Mn/9/,&cFYhB4R"C-Dcf([jpV;1gbH'TU0704d="HN7/j5"ީ1oƨOFT!^ S13\˲G(}XU5pmrE\! {sܛ{[Ouj|jC/.6NǸp ?N-([;gad42 "$a@ފtRq s;&|l=w(z¿? s[<r(!աC),bvLtjėtXi0n_;=z]:kb8,cJ=iiqr|MI8!z*8e4O1|M%_q?U~Èo F]OkHq/+I|EajuZHU93IE۴hY^@SQ4qBaV{Jhrr`#/M?K/?~ѯ>eExicyxhOhRYm*99Ihf Z(Q[Z8rC zPUۡ3zx=@SZշCt#9u| :S/U ( 8p 4i4jV0L0IՃ%~Xa IbJ"fU>>j;D0Yanjc>wlFVkd ,'G!=bP4#LtÐJ0 ] >1N?C Փ.%S8zU 5FJFBy=8Fs{8,awj'[ ?n H%f^:T-Ъ*d0 H$2RݴJ:) D'j;/ki9d2s Y,hyJɬMƚdN@x&~(I%o;._rzU\dzҨF%,ccmU ˔Te= %79bz|RHUEo %hw^t6%m1NI #AhE^C:)< yf>y< ,Osm0g^ˁLa3RV.RiIoYJRV R b-;G*YGb*oH"UV& \_ݥsXCUn58JnK5/t\2vwRDĆ]l)nA9wܝ˵Npn!lRrN9gXGDFg"1V⹒/_HݷIlZ'jgc9GЍf}k܆nYKEfsR"[˂x,:(\0}5 \ń6Q6rl 8p @M3j raf`՘:o!A6o){4&"S3L̼{*wÞzIwb)F45K:`+X$:S%4̦bqw2"+%DW:DtN$P_%DRJ]tj fQt*\F2" )]4D~nCLa-d08 }`Kp7dh,[Ķ9\lmm2a0&T+y&AQ 1WqfyVQtXK IfZofRCRUlx:P1RoU\Z‘~)B̻E|KL%dD|y_x P)*5UאR)T!,CĠtn>$17Ñ)~ᆟԐڼo+ߌsqG֕'!`/MfXT*2,KfӚ%+ԟQdHDcx·5MiT Bk6DㄱgXU{=W+zvl\cAQG=2}^c9=$Q]!z` 2z1Mq@h#%XE2g`gz!xJ ;5*[@ PBpQ *XCM0\HH ԷE%e€ (1è*eI49uFj~ qp8q igX,G68B>E\M 2]q"}8 O̶4h;!Z^ )(BН `pAȮRS…%\-\FT(A!e9c,*kdD7:CA0:Je P1(~C nl-Hk+*8$A޻5JBR|Ty@)B JGRXYtJ-Et2u P| h $tWW̓rPT982!D$k0+rCBd7cDCr+''BZ !LjwUcCNj1" !'rBVlYB4u }!}Hpp(B$@-!*@}`pFSG'ƭ!Am3i!g=x͘:*O59A|Sc"9̼^Z'IBITou%-4O"01Ğ %<`PVL'(ɧ{@H=|iP“Kx^ŀ#vwFS3CP1;ȳC QY 'XE!?!4y>9B}=$ (rZFպ^CAC #a(~Ekc6X-]~S(XWHX]7>qfz.3vJinr@Z<\U1ARhi(6^|F֫afNHR笥0l%j{S[s5xRko"gJŏJ1CsZEŁZPOu6^:5>N뗇,H0447sR\o 5ksanar/U\]K1tE”Ae0"A䃃.JdA9Z:±۔NlKFB=.X'`VDx>yJ)ק0 ՏPu.c &Dyqv텹/>_uud::00=(.0e+ >IG,tMsVDrfW-^Vr8%qdg,y3+)@zU [nM^T}~v d>tRcgc'lzsa|k i߸skL⃡/z$9'?uAO'ܙ0+틼-ʵ'jvny7;20_?(C[cM2!3;[~߿`mֲ5$=F#'RpgR!ɾ3/*wh)['t)Kei q\{IzL%a+#Cp>庝>1E_zx=w/M,LFzé|ƆkeK]Kܔ`8/{GC&ڇRyͼ8Wp&4PBqb=-bCyWu3}#TmQowXm|}?xf3 Bצ?+Nd=:EQ2fHin5 o>|$h4Dz>'&/f'!UX˺T VP/鶷M:>'Qru9n$wa=nGԐΉvVUAV&oz=JZ{nKw[JXX#GuZRt K*z J[3B9q, tYH (p;ﮭ<:^x̩΋#*W\ٳDZ T U*;%NQԐ.,5 v\t 4cISY+-kkwە5PF5zX6< !9Bf%8("3Uur>C>h_q:{Ȯim+N4eި\[Ga] i^93}SY9q9~bA=,7Cs y؄Pn2ƺPIH)vX_3!s^1ݰt.\J]卢Bg!h2"۽"cɖŤb{[iq%&m"Ѣ{QbN-!.36!f$r_acK[7GW.ϰ"bJ5BbNQe8kBJr6H/VR}E*g뉼/ah&{zz;C݁%^WCX+Gz_\J&Z_o \||7a!n9d=͂~FjHwL)/$mT!vB*:X*B$+r٠ rͱ:SDi zcMH]6IYNL93%By @ӬǖE ;<h4!-JziP7uKp6PuW@B:ю(_MJS=$Y}BݬrJ$̮ffànH1nbgǐ},TB{Y|x>T >s&I,VvŃR|j& Q|\ 4T(̑H!pȵxl;k[J'Q,Hi4}'ukH›6%B ÙL8< ;&> Ǘ1O*t(a}hp&!!X$}~;PXNE*)k}j6m_V3Ri"卆32LϨ>$Ӝ3 y`\dHVD]ns͢Fu!0@EהW2l^in^biu gOasH !& s[V7RAiڲζ=9Zv k҂j>M[ !^V#`4>*e+۲^`f! ow N)J^/i{IDFSn<݀k6HQxGCt)!,0˻:P'pY5`R&;C ɹTJ8GJMdFBoM Uqgy;!GS6 2y˛_7ϋm޷lfB!DX.[pٖxbWHmY|ff"IbZ$%P6%76 n(̓SL(U>mԝ/SF_o{ ؚ]!<~!ߖ%7blElP˷JA>m Y@81Z-@u2sQ>]_)R\K-Xxѷ|=oy7]@J7:'4O=nuhE# -*l(ϖFl-=h*- OI8Dg72뾌!8XSbT7⛾b:MŒov˻;EB_Gw}mYݺk\ٲչwx0' vMhf%bɩԼ((>%L% D@6dVT,ϮDSDK 9|kB@bE,[ظU, ز8ڲ;\{ݹ kgHzdѽ"wr\3"sfHń%_܋G,#&eQ7a=Hđhtj[V@~>w&C单mY&ztR:4D?:s$74L® yzЌ!2 iLR()fhy{ 1" ʖx.hlWl*E=Җj;N]/-ëL>*V([ 9B&%*UڬPVv7(@X`lki)^++s'uYQ3A&4EBzE $n@ Nt5W@~Ac" WG:^N G՚ E;1BՐF ^V[Z[UCb"X@r"Bz- ½9ZT [~48Vf"e^4{ N/r`Hi7;tt3:@ߞ]̝2;_2E$xg`K1%&rW03 {{y3Ƥ݉cS]'Ƨ::(S҈vnH:-%uO]tLĎFJG72sw΀cߛ!|]]ص d$Dɇ2hK^f_?D3{Ǜ:*2A ^%{aZ΍=#nN6i.{h>y$0Lws~|(<>;^950u3?#I/Anh)3[}#"^|?~//1I=z8IjˏĎŵܮᆟhb$b͝8<:cyb@ )0h)ir41h?_d~a"ᩱ) "yIHBzG'O#D$Q\#SV874o5y2#+r;ǮKe"dq~XP~1iDɤ]Qu#?|<{fcJJA("iW"v4y@ySD ɓbi?]+yzSFaLhS")(?̀mRcðI#Ep8I)D/IQE >,)LD(22re2ABȋDBBIF4]e$S(,4)_|D/^",yI<@S0=| |lngo '[vFͦ[AFv{\Jn h6o `dd߬%C߼n$YV55 ' Ar(TydeYh@,1g5OߨG v& 3tíbȾR9D9 .dz;M3*|7hZ&3l#84UMIm\;iR&[/ka%51JZ26ЀV9!k0~CKe|EP",Ϋi!UJ-*Ųd~qrl*ڸEyUӏ 7?|?BZ0Rڂ4{%~ƥI̒OR K$ ;F>¨+/[T+.d'KԖʊ3{맫Jj%UҦڢʢRYJ{5 VUI&ŃӒʑǁZnx<~C)Y¼~qDV]oi-]Isඬy򻢶鼚ҢZ~YiՄބ6Cb]4_Y+40*ʪx<벁$A =CLrT"~dXj2Q\5PUKO*oW1⊪ڪ+Ca*^di`P%XeqĞR֙9~#{1FC軌kk3o2IYY@YQ)ꪤ25m5 xֵp&zR3CR+,*N0hP̛H:T Lq3v$+n1 8K&3jjpdw-5m%}z JA2noK ܾ8ot@Zk:FU,:] yE@NB( DI0|ZN7SmUcIOPa#h n]6~wh6@q  !h/L@g(4f( 8(y1r if!J7n7L.HY;ޞ$1)Pp2^KE~~44B9g^|277$%!3sxȲexen!˔2NH,`>BYC7Гͮx,4~{=DSSx e"ft- I&iS(?RRϿ$?~gƬxNZ%!Ә0tc񶴂L|>NU3iG}p$ۜ;oUn^+J^KN2<~Ď[gBP ) |ɴo~? ^;?nl|>nTot66>nd߯(x>>r!ʉ7tldo?s/owsL O@ / y`Xʲgvv>~ l;ꂆ+ p/}y ;].Y{,~U㩃`LBPA@,v`V " _v>/r Xj5yYt: ʽ &34PA\ Cb؁,ӧO {DQeJz^d jD*|*'T]]l[+E 1 [Mv16N*+_AK^!. A*bu8D]]1pD,,ZXt"1*)vَX]`9gF Ȇ j[\ȿ3d0XG9(۱ۄZ;)ZV#Ɋ'dɋMJ}SE`.iil Ӣ]~o8)Y:TzV$WvcžVh f#դ͵g5qpO֤2՟:kTJd=vN;P1`B\WL:g-u %|kXy;w; MrKwd9噸ۓ@+mm=3Y1tj;X=&֭JحEXǡⰟ&}# M%~VGU`F@ w2x-b}Xg@H'RXDj&Hz.]:N DŽu[] uӠ(<} +XS!AEO<1l ½wCx}{3[]}'`j[K@r^"nzlQ%l*AWXB=;,*8U뭣?x\d[.'JIu3mw(8B~wL2( '߭-*e]sy&!LнC?}Db A*ˆ(UЭQQeTȶ3c>N!&Cܸ*+]me7C8za8D zA+R݉tJA?$FSOXlr[mKc@{@sd!Hm_$!A8elIղ ʴ*IkLRUV͒UEcOb99 ξ`e2 9PW7#rYNU$`X6HV ɱX%rPSjAvld勾|VAVV%V(۷`&p_(&_(y| }`^/ A>YXM' yg.TA<er+O3h5Cb}o7jw%|p6ZgF6DzM;g rlzCY"pbYᡖ ZX+j l`I[f Y6|J?r&VQ_KK} g_|jPw<Л S(>xvM&'&sVYj,:;<趀Z;66\Z3onz-V Rp@d7ę_|([O=Wp.O?v._|r]-no%?^|n_r'5շĂY Afc۔?7r|큥ż\:ulp*[urfB9s ݖ]-^jo~isޥ>BQddhN!HwDW4n^ ꫬZQ?;jF6omƑõf򤱞Z"I~TJ|5$U2f4Q9lSTݟ"H%<ܡ܉', 7fW,y'Βpf d&TbaIÒުZ^Z퀤tbztPQl6e #bq`<3\Vg _S4bAFjj$ڢ3tD>I;YwN>vfe!g0wCް$ZX̊d4QmLob=qV}%4hn^UTTsApxE>f<˜5AK]@%==kCÖɖ3Ӣݸ0cK4By 5Pa8(2rҸ<2AX 2iѵpG&'GC$M'9.n 3釨2#gLv0&k Q`5t  IC<dXf1m;FLADqnZXNU6K`CGYHg/MvAzr@CFdH;Y6%CmCb[IctoÅ.P%C{GuAOG lALrO5\̽KP=<\w}5XPY9,}M vМmpX&\Eט6-R RAJyюrѸMh6 XS/p«C'us}t+oȮ/8 VdpKcfr^BwX'hh0 s.^or9Yq+?w?xN]$9٫ +MffC>};,c-DYvJ";%MvjA}RSP|nMLtS|¼u19f0Xс,PDD-6 qYl16~^;x~$AJbluF}-1saUbYkt*c-BNjSf$׶ݻxx{]~ɺ+sQgIEb bKlT_49=ͽ^ns-(-*dVfX\^R~|&Ker<ČfV01@Ue-zbD*eOTѥb;MA> R-DaONwlNwW|s:(p<˽T b3_j '1K,'S_s ه˟T !T_ŅpgkͰ*eؐ==CJz`*L{d uw"踦 ۓ'5κot"tl//sܻsGg Fܢ?xpٹP Dw:tw:uI=v,}|&1m+ԩDvq0 8 셜l|v،X1BOG awvE<$=U'%Lg$))aa ޽wQ:uM'%EE)Ȗjk9 睎 ,P!&竏 E.A '.Pl3!xZu7S}SWWu}t>?˧/vSF$VSz=|$A@I(v4c'yqkV /3<ƆV&'A+byC\[ouQQbu@}tIjd Y??M9~X]hYŽͬ^?C@:,?GXb,CvX CSfL,1a{d 1 %] ulдK;5@j,D+퍜m40 .D.O5F}7o:wy6R. G\"D"(H  NrX漜!&ge>y꘱4Q:QG " $+@RHR)2a Bn<Ą(3j*SR=r2YY^&=c6cWBLpǖeV '߽%&.JWQ-{w{/>_Z^IןXl8 KAs6H{K6Zb],HadԬI="h}?{_|5Bo[~ug/F|6dL.F@ޙ<ۛC;Ct@8XCtE,ui{ns^hF{~{O!S?mRs{)[Hy nzp6"wJJnC{Pѡ25B]uvv nz+Ck6QeU?`jCA.Ǧ."\p>ߵk_D?}{WJ r ![*v{2a o[/r'*+L} l_[*66ZuTd0+%,2a)ޤ!OU\ev^BH ,Do|j+YA+96g HG!FFr},/jt;: CݭxQ莋되= Sb@w;X #@e!Aܶ3+UmU 4A0nq#F#C9伤d?~8^`T(gS4q]>z/.fƻS$fLvl3 Ɵ?vf> 8 @3*|6_GC8; @e∊䌈ʮe݉Anϲ x|9lyR]_XV^K 8'n: Ԇ8389vfUgcVǸLN=jA`XgJSϳgDKdVW8vT?hoJj ˣGR<덀`f**К_*W[^X/<-8 ]E&9釪B9 ^eh|އ%Y/^?,}f*7 v[w7vS7*hWR؝EpB E)[Q(Cy{!BWIs܊>~:P3p%N?pz鴠ֳUkT}ņNXg v=- MfMNޙ.fŰ_OVلdgSLil0:1W-6Ķ[:[SqT14q=Ct gixЗ` W}͆)|\c MU邗T:+g@u/;  JⱯPX,iq~RD/3Y{ov2m?v7&mHxl'T iYQUXE1[g^eAXJ1 '$u0'B]@Ż_||5ﰔϞ>rppi/k. [QOptc&Ch,FC,22ԺMԲٵYSSinS1;$i9}e-x*'oź5{*=jE PI~[w:ɡ,/)Fo*v7*jZ(I r9AMeށ LbHwF1[I;z0- VC&k* $Ę i@(v+ Cf|\GUWͭOHxIp~IYgMݿ^{?sҢ dvA7|NYYΎe;vc07vǿ !Q唆F`aڭo(Qہ[p.QgTw;t_NG,B"cM$$P !sf{ a>._!eg.z;u['C]݇q+7jQ QktG ^R\֧GR9mms!4@ a:,-hA9|F_E|z ȁr`r( r(>6)|I/9Cnl!`EO(8eBF߁YPޓ%ȋ;Z0Lxpsz>5Q~#N'X0=)( \'793zg\8KFN3'0Pr4r + 9xﻒF%$uRu@H ΋/hĂǎ Aù<: Qm^w񙻟m,L-8;އ=c+̩{8iD Yfҁh.z˴zA%l*Ua$*^9×-bIfRr33b׋2Mg.o^.xjn|0 ?A1ĥ$4y ^YS=cZa@5曧? zAYZڼc RΩ3 Yq>>J2!JTϕKxKvcoTi" ׊^!ҋē}n\dYq>[?mQzU 2Wq,}es#Cn~3"$!Ju_4-3Bz9!*q2WN b<'\sih]5 %ࢿiЇ&K *Y e}X{> DNYx@Ķks>|Su(Aֆ!݆<B%!ٍGCZT"ׇQ2fai0 1P]#EpNO &q1o]>/kc7,=vѱG7KO|?rs ٟѳ];{W]rd)$>ԩݥ Ē@,5'=-YIY$më[ 3{4>xEwz|[g. jp@OIFmn1#^y,{2SLF!4n9r B#Kb E vsA'b%zKKCC:aB;5gJ{ce !g&''I@1&%d ȳiVዐ; d|~`>&J=jcq,T{`Q'.pA T !}]-N󪐝OGkfZ@U]L1.8;t2),$XJfҸ W1' %ʵtY h}Y#u7]J^HuԂM'j;!<r/R* K?8sEmvbqb̆)Tr"pvDYI0oZ;ȓ.mkDo B;9z{s z.!ȣR0r? ZMtvX%nD&;.vijX"`:=I0DLO 9ddMX4:$caF^? 4eD:ZEv Eğx55phߋ`N=wڕ*6.Kjrݩ:TFΘ^$.M-\hU-ך$a[jR&9*C :l$p^AKpB{gQ_@ԂYlbkqCߺ[p2Sg!~>|;#]bjxf$$eJ:ާk7iG -"CLEedE]+2ׄb-4Y}bl%>$\~᱐Ή=^BQhNͩ7Ah qB[㗻oM],>:z& lfJ#B  doHB#Mi_F7x Ȃ$'N&lvK GLb( Ex}tði" q٨ J5NyDǖԬU&k5;weh>vC~?vƆF C-Trymu5Ql .\n?;~•3QQ㚻։39uG_=&\߼mUf 58ācqI0}ߚW51g!rq}3?&Br/,k (8VW: =j{_l}3QN_V&Υ7A>`iiJ+ē!!N~7yD@<. ASM ɡOh@PD'C:r/PVOYt b:ٓflY@7""K|Cfٽˋ|6Jb KD.{KII$~$JrhvD '_UDDw|8KCz{YNOJ"WE 3 Wq[friS-C[Z(qȤ%%BWr^_5Kwe’H~ z™8~%$C!X ܍;B"`w>ߝ`qF-JVs"3K؛T"֘r(< ^C`7F߱kBu´NieŷV>_oKM~c.rqKM֡+KHBAD&ivZi^l;ڸ19K_11M)I8}Ӑ=}`cMp-(`B~{h )drG~.Ϋ`X9:rΚ+c<`d|I&jVZW&"+d8ǭJ5i+;9.•AܝBvM! DYc>oJKDO2?OK|$1&'OML$4M&(=!اrWQw9pyӋPCɂo M_N O]b$* GL=dQ8KC3S!f)rBDǀl p۴ Np#]V\_éϿ;FN PNsz.L1Fk;^ԙ0 :9|퐄@t@5B0Who [/>V\Yl@s( (dׂv[j޽P ـxF3v! $N1*X2(Wk(H$$$1:GOKE<F[:^ ȮӚ[q5<;^\ ^GRTE"rqH$$܁$K|ˢQm7PXA ;=z/@d1rX"yss!P9E+D H=E_6q3;7V@V@pa0R ' "D0:L衵+@HkUcjfU~gQS7Ӈṡ`B?z,#/HDEp> #b{*{OЄ1d2:v+"/{h?pɰn{D8G! CI80ZYBrChV 29To'jcE!1 , .1(|iBzaɵa&itlD08-| RgŁ!:9yFB;9.p"8w1 if#`Csq-zb&rdٞEUG<E>prAOK@_!{H59!lG!qK$OiV '#dپCad(eM jdHXȔC%ޡ^Ea ;x/͇rn\'GkZ=sQQ68d"dv93: lWTk:[N-S+@i@Bbk $]j9ŴrpYx 5VH 7|HjnSk׊2+S,cHU.$|戾Dfs ,LB:pc/X9↻=5ń&֡_ކ(ԤEb /uiqUnwJq~_~{[6Q7?nL NP`u3in(d9B!?ZFКc]Q7 m1r JgͶfBA`XQg8xpYdqhR~Nj_*ykvx akBqzbt{ Q5 ['{\?P.^@6P>[7x&Vyhijk%`S̄ޖo8ZNK>jrv "{EDHNDp!%$O#pLKˌ L~WMuPDymAl/ s}/ucі'-Ǖ]m-M)'c3ܖT%F RIZ?r όȰu|om %zJ{'}?7$!!) ؘ)!1&&|17%%d#NHC7ovJ1]SOǒ@ZW%o鱐h[{ :{o\8'Z r>B4M`uޅSZ"\~&I.x'N~!*!.:txf.9IV"𒪷{oAYPoR(o)o|4F㷽‚zAM "g°Rc UKC-C-ٱł+퇽; +邈T^:r].hµt\'p^`GB&ʹX/ RQ *ʏ]WZǢQA@vH}en[uNBVx I*F܍ĩuآ a]EXHc4Wi^ /Bh?!]6CnwPx-$q8h&DbzMhBR,?Z}H>Q7"Ƒ=8%&կKb |(oke1oUBIeEyC%.M;b'qQ{VڳCY:N Q@@tdfk@ZX3J͋0>/E\yN(jC\Qw^lLr\%2io,Ttm-I*KٶB"eH؛B"58)^"}OSWKO-u'ZMRO8 m_ c[Ks2c.(-[5BbwvvwM%hA͌8dPƥ#n7kv,.2&EIAl28ERZ2ݮhɵ%/m& Ľt KuJ-O6cnw=|51Vyvh<93 Y `BvAi Фϫ u7gG[CkĖ[G!ʉI,ZYXv"TLqBE5&;)BeE5"qZLQ\k}5B2B>fs»1)i)1ibRRْwSb!3sS%\{&frn7!"lV/ F!S~m&tFRE`z;;,3#3;zRm  0vJ<]dٮ Z$Z}gqD'!1% N@hѧ%D6f1l5ɋ&<ISh:c,$bkJa0\ls,Q$ܰs괚LЫn01"vr^]E)b(POI˫4>P@^ =j~z鱯upޗqrLQZ.]!q9VGa@ gZ%b-ZXXf}B;O\l㐺_ԗc؊R/2"zuppCA/`O}! G`~ɢ0sB{%%6LU{B2&2`rJ vFrb_ m){*}(ؕLȆ;#MXFꈐ{;AEĪ’> k79G glvnҋ.M֚&NɬYd1Vj%X]J;!)gUpƹ*}OZٺ7P6N)nTa;t BT#-Bcٖ$8 2HLKQLP r^r/7V4d&s9?}_d^{g-Pׇgyeȫ![ѱ\h ! ,,,ǸZ !G+3?LyLe0O|>yol,vг,5B4$hpRhJS \k{ 9Pq(ʐlBYj%Y8S.Η)!VH8 MrK`W3MiJ|'u o܋7:jnlk;[%qndR_or8e9 8w8L#E|I(O~io S,{%Ĥy/-ʚl]QTRhf36ē0xr>%LWQ\޺rrۿ7W |\\O OBx%a)(ZW&YŒh wVzI<:B2 Fa+4GZ3ò`P ch3s$ph!r2iY:EBEç>4 N7TQӦkn)6_a`S,"tߙıD"A|!;ı0:Gnѳ)cuF~k^8/cX ˀ7_&r%Y |w ?8/?ͨ$ g06IQ?KsW#T\둅կ"&c_##_%//-|$9 A"q^fgq y:)ב?E& '$ $ԛAQj"H|?]̄WWN1p F۷?OM|V|P;g K9׾=! Hl-㿂'|,q'Bzė{u$zhW\ `g dkYY}0L# ANp:hx3 brMG:„$cQ̗;$_=C%T퀰wRl/9#PckL3BXj޾VR!\Z6ʶ"8/u'!c*k&ZRzW+ajݤEA@ pґl^krw@EfGVUri[ɷC=R˗ZˊUí{axd u./_!4FA Gb1rxK.(T WG%rC;o> 3Xˤ tGM&MLYca~_=)1U%%wIxYW^/ąqH &T.- RX-< j{?U}"(u9Sbxfs AvtaGV`{tv}zAn(ȟӽa}Ut*PF/y*mjEtWi]@a]^WstuF^ FmrAHs-,8% 19ETSAc&p 8{2Y|DHHLR# Rp6M@K$ ͶUQISLyUV akfzZ ^ubi:VW3MjH.h;k֙S,pރVJt~p>#YYw,na, EbQj5b僩Pb=@c'I6}0rʹH.䁱DRkF9,lK<9!!dζ7mX)ߊ9Ic\`?at(0_% W2EO>i_WR+PϵbXE+(eCn̍M1ܱ{Ayx;ߪ?+)?2 $4hK33a@2*j KLK 9o:B5>ꁝAuUl3r7tq tzސ?,\;嵾.Jy|>rE2}C ce5Q^8wptBupa^r0u#]cB^`o% uudRR@t#Y\$jPVP>AafspXvYRXϡ.S(@g e|9XBbh1Ԥ[6 B$狭&Mt:WTX{y*V8`#QUX\؍JB9E\4:A*,@o`aX"=m Nurz 2;aZ] CĕP&}(ͮg|xײ }lZ֑84l$aJ#% <5K` RRKǫ:tX*:W!1=$&=e4/ D;co޽I'kL~%B@"$@ʞrtJ0Jh KLKGN6揯rX}#`5MrW* zPYFA#Cq zG(C2b#m}nm4Ÿ\hcq@A$ע{(˷$W#-Dj1ecnSp1cl/˥9T%(,.i-AcyZ~ bcsP"i(6 I ¡F?Π.ZA0=[:T "8{9/Jg">;_[\9@X8|葵^j,eٴO6"ah3dmL6)˛btbow'U*X\m.@+"c_:Hҫ6VH/X[dj/qSaIsG.t1|u.a@ Cw â:*}a?⋿B4w S+ؤlGz$ ք'PB&x<(Knد: 4:"YYҎL,i.ABj=Rb(4Sq-:P +Aed Y ؠ'_|lP(2 Y -ΆIn!$~uu,d4xD;2͏!}͎Q@MdVO/g/ީMgKz8H/e->!/wgqrI$V3/FVXr- ׯ(e{r⾀ p9vDVV\ 5 m( O1U"cbvc@no{dj}{WU.:|@ܔ#b#E_(E||,ɬ) %7nI#$V/ɪdas]R.GڻCJ@Lp MIn'Ȕjul/X~ܥC5[%CSyh7B͟MVN#p3LeֲbAl:dЀHBEӓîcїZeQ"D H4x ءiE_,Qw˺R\7?. 0"G-A]м`PxEMa#r 09 ե 2rM U.QwfIev e{Tu& H"Ovsz9)fzkSP>n Հ#BpL4p/ՙ 8Ks2-ab5X~{Ԯ eb&{_4=OփH"KD0eteX>&CTZ3ZHqCg[0C׉lw4X'R/=L-kL-"( v9dC|*C`la9;o)=G*1;9ȲPbP>ӀJ"3>, HFy\dPe #ټbIFx a΃0K7~%cKX2d*X+Li2g50 %YXtPtD!Z ,;,\U>7.!04dx7s܄ƑjєJ46hҘ/ EeXx1*C~T_- 2ƾbT²$L7 "6%5BMee&WR X< ^:PY?t"uvNnGFɍub`3A3QF3#Nj "R@X4[ir0ɨ{2IRQ84Lgv;s?5gls}ҷ4w}#9`tpf&q5eGҹɕ~ˊM.U:ChPmfgn9Vf,i|Syk$$H.s}iK%1Su}zviGp7@&&ڞ̍m6eR9?qݔ4m6lݸ}ۏӏ^ PC!h{CĢ;\u3I4YOFSa_.uly^eA["!0_,*ׁ|#ՉQYEhʮCOp`&% AY )ߴ7}h@כɚLB3B ّP&,۹KbgZ4v'5! m$x&ϕ8Ag$ҡ>?G0ɷGBX/ᅬ#@>Mɬ/b<'#:~IoGrGv?ekG^Rue➩f=Wy{߻J; zuWigN_i]_ PqPyi{r:ɢ;VY\Q Z3<9AI25a˽GSSlbn-X,PR ,\(Rf7 #8 [-/,sS:р 1՞!Hyov/'l{tѽU+qz\ ZV,{v~efmpu˟/%ӽ}?tL~w5|KޒY.Ҳh;RF[ΤTBBN.-!x<(Zo:y}W@;xԼ5:v@=Y,nEoG7 uSy"QR(q^8\Zd[*& ky@+8D?3wH^T?{OD|H .#P_*0@+D73){IdG*ͽt}'y ,rt彤J))!sWnԽ`sJ=\pWr#mof?5w28e18|4oj}BiyL|6o{iw=RgQdz١{Q3xl8&xpmOhWffwy{'3+NJ*w8&lCG }n&,6c`QmQ#UB(g?.L8{=޴YMYfz{v&Zֹ鉁ډꉙy{bB+}`062oP/r SɆݪ!-(p9> laZ%>D@i#fvn <(! k D1*~ )}ajB p WQ[V^7eӛ6Ỳh6NPmy+~ 2DcnՖ@;5Ϋ!U}Ty@^f"HZ Uͮ6QH 1\QusPNk * Q-PUs~vJIE  sȜdփB`٣fP n&N|{̀$|2nv[W3铁}ps/lIh30_OMiE7us7n5 6oTksU ª*Ak~rFejWUԴ7Dn.u[g?ݺj3l8 5Ԣc F1R{$vXDN82*ImYOxv<_N&T9I6=9\'=♴6ʯ ?xmY× _z,oǛXz_ڠ^h'&l̽ ,δ76j𞽥eڄ*a{DFQM%Tu j\Ӫ.ڵgD]gB*nw5Q.}EVn.NVP wF^ 1kgJJ;'puubGܼpA;` ^+zfO{9sqY[QgeU0W@s:]-jYP Ep:pT:Ki< r?|UNZzӨ3P :Sv7I46vjԹ V7ᕒ*@ʋ % TERteVU7k%5fU`@Q%QQǁ» .po̡nT`mpC 0V>>*ںJTK}"dwG̩U\ThbfKZEPFhD~BRAꛍ^56jI\|_4LJ bPC\{Sw caW]A+g^GWVhP}tsA{42#ehME? Iڭ"%>12@lq[T&G\ZѯD7;7˶A?h{[-婖l8& +@?nwi+V]'v4郉"@hU#@ otqvF~km9|[#%A@W !~:-PPE#F_3~aabU1'ۉM`3 T}Qt oCx;$^TCtUdz]o  %dڻۻDlO %vSH?\X@F}&1(Y "!6kzH1h%3ݛl6^if2y؝}/;~2 ͸*n[>u=Թ ("ATr b,Z(Zsr̓R31H5$DHqO'!hmrXzlBvhn {Gzlm=#*ՄMgA10ܿV !V?L'>orr^2#sb06֡4V#q6 461myOH q:9ׁC, D ãv˄l>Dh}n/vU!PTǹ5Y0!4{b+fF>hFGBO'zDž g1(թW\}6^JsOIlU+^J 2 OCB8@CBdW^ !wbye *ql^ 1 G|stedgXdh`^k!uآy-# T FK?TB ɢC+5= Ѫa1 ^?Qi>TN&h'Ƽ#?/|w݇TٚSm9!džB>Itbq*^¤B*e֚ ݾha")VH9;Hd¬sF8& g HIoXM֟_RB-*6PoڥG`x?t ^R_`|"3'[h\vh60lƝL:cz%ǚ]x!C1,JEu7 G_h0rEb'^{τM}Ӱ xMޢF5}T X,̺/BC\1t2L, ol&ix a3~NeO@, +(Z VuE]ZڸhNuK FK; UW-PR3S`dtzrIqv|t%L)A8!ݮ`l 杬7fh[x g">ֽdҧhˀ@h<5ڥg&I: |H[ԸU-INjZudG;J4I+{N0y..$eau2H u B6&)CZ.Ik(: )AYmWϞeu{cRB;++L*<[a-}K %nAQJ2 {!FۃQwi0znfc&HKy`hA3@MP#ص{ANP4K7H$P2 dMC|C!Ζf&Aޞ Uٕ5k 6 G4wg_A/ӿ}KVV :1ݘ-]3SwY2ѫ3bWZf$D'3]0!gg{O^E˯~wa3+~N?޾ z\w>:O"D f7j+ ݽ*B>?{3\{ e6̺ήdzDS!ߛYy S[.U|?s:r%^_o%!f{o/2JNMǢsj[?1X-b66v- ^AO?<+lo̮.b Ip55Oz[ZƖJ}H$)ɒW)wzu Q{B1tg^t|p9Zִp Rju:[ӤNB u ƀ \HxtYg#tdն1&\mGzlonJ`8" O0=%D%e~}|_s a a-vR^2[/0Y v% ]5'/ Hea ؅ %q%jCơ}IQAB8C-=]8TP!='dp$=] $!d.mxTЍ%\W  h/"pͻ*bW$!]?ݏ|4&Kȅ%$uGO\L|i{MQM%;Leybc%Ez4l'D;QGmJ^&َvLBz sC %X5It \9e2A/!@ P81cS()ԨKA Ǡ(VP{/ !=QSs򜰺3"'"d`RTBDsZ7(/!ID»E\~FOK!jt.M Fڅ 4뛚OLcM,* u `xEn*szt!ڡQEj*&KCA8MVa!4cq|UC3 FT{)RtPCd e+Jax9ϡ~PcBFa4'#˨~GS zq"-g1RL">P²[Ycvr`F'7r&7|v^$ )Weؖaםp`@)0&4:Աē`ryɰ I˹s&eepSkM\pzl?C.TuLәI[I^>$y25d)UDdp;jCvCN d\RBP5YJ3 `A`cʫ /N.]C}G=([VZe(Jnhѓsd>.:*6!`Btf%2l\CvhXIzh͸ IQ|A ʞ'8;ƃ>JRCR}e`RjYjk~'N5[9\K1y(x#Sa$ine-FhHȔ<.IGD}*^R.cAX^X]]viQOѝN1D?jL_$oV4GM4N A}SAIu*y};u4+GK|_y:[#@"%haay9D 6Amp (YuX'fs:HG:h,:b:Cu}L?esB0>Ė{q%K^ PGWFnOC>xq"xQeFo+ڛK,N>剓=f@R1;f(['T9[֠Qn?â?I)%B7%tI^.I}='2ڲ.KmY4v^@h+JWa'`9z\JFzSiDNpL pe>-xfWP.: 1z"d$z(ݛ;z) i<fyEͮ N6d`W)=rwp@44zǸ+#H0og }E[)B4.uF;c4NPkcw+bn%3A=ts B dF t6:ą;Ƈް׿t5)jYt~j7抦YcUwc8n.a;MP|v|H6ݾqVcc0"NGZ>_#7Oe5,yHeeScȦLY6yMؓ%;\V֓K$œx"Mnx.X D)+In |n"ޑ]S˫6CbgݝnG.EBͰ?XX,k6׷ ۮͩvgds]ȆgǕc|w gr[D6bƃ W]ܼg+xlV:=~6Q$CoӆTj}=1w/Fql<6D=͙gd&NZ+ oF4a+u-܉'4"wk: :'#)o]uӹc\zTfxLnOFh1pͬf-g*7 8e3?ncr{>777M>m3udӜnz1yc+On.椳z94>-s;ݭt+7;e,v7镳\D!cG88F5@LhcqHPʁBEe$<G'׀$u{d!xShMoޣfGsPIENDB`awf-extended-4.2.0/images/thumbs/qt5-rtl-menu.png000066400000000000000000001076071522325530000216270ustar00rootroot00000000000000PNG  IHDR`PLTE¶و[Gɽʌ]IbKĸʿŹyUEрUBͿ˾ǹaKǼ_IĵƺhNǷ²`N̼¸ɻݼٹǽngQ¶Փo^\H|mٱýxjyvrRH("d*~SLk_r̗0/C_{6d,7a%$84$ay!=kzzB6s=9<8<=6s?8wl *  Y_Dc4i2HH@I |_{Fp^jio,=vdC1)#=}m;m=hIXnX[cPPiHPn^m4)+mXi/_!F{vg~ё3*&ǭjGxV<^ ǃe}CSryc#3ؤ\'h(Ϫ-7`OېcGm>Ԕ8a\ ,GO[]UmcwψKcթ3+.KnN mlri3>:Y1Ul_[?"2C<'+JZGymV.2Qc[qyUχ#]ёVޫz<#2H~Jla#dj ey5:gz`` yp ÇP@Z5o\'%c0$^?PQ _s^m!= V t]e]C<`o",R?8"z0]oCowːf @ T ,(B1x{etAoPS)t@f2[vBP`KP%ZEH @  0LI*m@N2_C[gds5ޕY=hǰ:ɦw br ;k ^ W)rRsG]4CN36~i ҋ/mhW6q{J>K\K%]5 74gKt (=˔UUMRjk{Fw=t'O~:!flҗ%]RqT^%hw"_b^._,xAQI0U_wRL M~BS;wU #FrX"K$9{RanzM:W"|ޡ7v=K1__ʻU TuuҎ~ickF)Vijف>8zdO{Jr>aFw+!S94 ~+'@FѺZ%Ooa]s^彮.y E\?/t HtT&I䜪*\X':HJo3J@rTaRIyv1.(QGW|wJn?BHs 58iވҳՄk-vUJ$bH3SQRs02ݜJӢ"_J-,lMɠœ[_N7I5`Q7RT$OO טSJ RiUUE]aZ@NB56МI y4*u`zB&3SxЈj155!Sdy :,GDtLG D65H(Y #9E*c&ޔHஈҌZ]GjCA,$>S* dl`@⯨6eKM\]7@#4̣5LP.k)fB`vD1YL>R$';K8?yAF+_,/$P`714u5, kLv -ĭ!; pDΆLZ8zTJ? 0[]g`m)3S'? cHB ٟ- T?p&el!h0_>bq={J@:2jx_tcHxܳUzu-=JAX~tww-C .Gx n\`v$"cltѲݞ~~$5oi_?<㞥b<x|lb6ɓh۞18DEp9½,"mBA@A7l#+x]DܡZi:lvw?:tw{'OJ{Qšف'O'>΋~uH=ھn9y{_9\YJs^n,QNΣGrA͛I5Gjkwxھ{i<;:ݗuo_(8chTln09;(,n ,E>GewY.e3?xp2,)5zEEtl׸{;wi񒷝6G>赚콟$dC }YWZFVdW޽'NO? DTCTR> g dK3ާQO{Se}yja{V!d9B1/>~!s"o^wtA\PTAT!ASwIkP;RݥjKEtmtt.\V֍c2zU_~_0/?~fYJB `$ ܟQQ6_ kۚA);^^^t̓8? d(!@tjTThEA~ap&H1CZ)r $ ҟ(!XEDw ɉX%! X@i !%c5 ,cC2CN 5 aKoҩA).Op@0Kʓ) ""QWPТot`~.D`9"X8 A""Dׁqqt:+$ĂJhjh62fG=惴ʇGNM':l!=olqJ_frKwrog5;sټ-mu[kg.ayvCa~Nq&PNzbbMgoS^\XSO{^hn),d?"6́D;XQ;DropO|_b'qM:B–88Q7=#WET[V/1dHx0t/ԇY>&q'H^tbUzzMB}./qD77d9uf5YzXtPRg9B7{!X`$I'k'bd `I$ԉa,FĒ 58]< ;1Xi1zw`WCczd׭Sf"E Ԅ`0x;;%n(eoƭVbEg`"'a4WSy,p*<\mؒq8D>1E23CC/\ԩ &Y7BEW.XZ|.=1tLbŬaf!:*O98d_6uVh:oҋaaA-Dm} h0t\t?$ǝ;9;6r1qڣ3[ˈ}^Bb+G$Dy!:Th[ [6# >1ڰ{[F6Yj&$آ֖^{HP.C+-%% -%{c;xBay@ZY|[/(sn.G۫>eQd{jyB5W ŝF/^~c{榟Eh&U@ *Unih!N܌Oy^/͕'IĬ=F{89۳}&ʔvI4Y32Rؔ̒+-ϲ ,cכ,HC/I%>%tWޭ>k=u RbzxpSoڐojn쟞S-,J`?Y|*ѧ$jB6oxP})鬒wHªZfRKF0Co6i#RVvneqιses,D?NtU<> ] w ٰ6Kx <)ZLk&ͻa-ԟO+MjDŽlB,ނ{|i=nu&P;-ڟ8;`i {91& LHmݱEAEeE<^I\BnJD5RQz]fn*47&C)0!Y)Qh҅TSoUĥbګ65*DSC vIqU][3 ڹ..ѿ_^Ze1Bfy'q@I,DLb9bbbca7B D~YT{@ÛZ@ m2>ueѩ+W#c>V5Y::<1:JE*;͛7u10❱xNkRUri/k^ʡ~A WٜɽR,>uX\T7BHvx"WQB}QtfgG![}2>>8ネEք''"O TOP0ykryh;jZ?vK H+<\j!Lg,L Ҁ͵zI%#l-QU Lx \> [SjoV0Efx5!h]rT/hp1u(!А%,#O';Y^NV7Y&n߾}#DJ`YB 8F$pHDI >^^YǼğE I>eyjܩ8k.ܹzuSO!6}N=97pɇi >E;u5!/rSjc =4C of7>x _UorP,W!X‰D$@BS7 DS*Y@lUYY'"-iJqcIBC2*FbQd;D8g:!L6{DJ!̢.01ԱSQiW(/pD p\hQ*Zuu2εzT}|R!( [[SmR# M=QW[`b4+AB%9lgqJʦ% TBR0& ФI !n嗪~#D׸󩮡DjDE"&.̙Y>$" {Yc&bʋ0qsEIk,P-C7`gjć#% O0vd#n< ]'׊2ؚP+6Ƥ(JH銊ConHA$xF^ʹ{>LH?}*>h:d.$v'/R)JU%e}ں OP|R~v[[X+l4pb;QUW#BKʖ1Z$[OU 뤣~PWAH-!.wN_k>Z}^5Bsx|uaS@K z+'W}Yxh5գ*nXئwE kwMy0lR.ak8eC 6bQldKۛ#rt2.KکsAǏ%ohn=UpM.: &g9|n¼0{;,>5Ab5Y&i0VNMDLlC:mm.JFGD"dIŋ`UUJ$h<&k#A@(Eթ?,Pn@7[/:AV!4 #|dIu 7i}tgўABRBC D!H2."PɑIȰ7 \dêN.}Yav[TB0|63"mr>A_V?>\/ 6@H*hdBj_FFN4kMv/ZX;A"Bo`Ma5&?]vm!u%=\ӲD}Lq@Rjd=v0ū>>1B. JW̽hbĐ `,<8"mFo1 ¶REs嚺ʽ8C%Rx &K͋OI'Gk2̀?vj5{-X}^nܼR鑸c^Ģ0L^g22+LK-|PRt$ Tsš}Ymٖ(_/CI]&\nT aM +2rB?&aKKL$/ \#dg9c#{}8> 1blB6/-V$]O{lvŽ<IԊ79|mlګ8wƱJN務)I {Ӹx\dmx5 QkeVZ!k8֢sIpPi}w~83wZYjBܝWF\%d*1dn*E =̚zTĂEJ UI%X\|YxWDjjƈي 69҇0bxLR}FFf}KkI!ɭ>^IȾ3o:Ij]Cp"q$U*KtB@EsRz -bz QRgdQGw@}}/Y_P vIKuH66HRhW&>-5*b앝Y^J*\lrKOg};ċaPGC㠮YS.FgmHڥ/TlrJv.2wpq'\.EPw2Y5),r5i/c)E "b=oN,BBBfi{bՃIC$ADdٗi@#XH@+)Jҟ%d60w5xf+-$vz58>te2 ɖ"ax8dqI>0!dS5@MyDP6V *l"7`(BFF; %T> $&DlbM+I!h"_FTP/-jV^;;wvg;sB$DwGrvC80nN*_ Z25_"M[^!QQ;wuiع=Z;PaU~XȽ xέ}3\ Ss",sz[s>ه+881U]l}( `Hoh(J "$ 3DzWV qLD`C!Ţ0c pp@J@ ] v 7r'1FfUrV'{p?SNhV4@&Ooz2"SA[1gw%!xa( .%£"Eb8E!P6 *1P]Le+ BC#V$8,n5:q9V1cg˛Τv{U__Q߃㟿 aMb%Xb,VB3^:0m/f7 OmFmKiU#_46ŦyTzèS+$vA#?Y}FBZ uÖ|k>y'g<n\;1|('#°"U~*2}֖/߄{!.`a|ۻ0dҖϽj*BvlV5Ul Gj)<Qjo/!624 sCmv4[שVMjΐBz/u! 6Sy=;H}Ssē㭜ftb99MOO|[E86TCcJ}76+Ȱ' lTiB5CcH;< JlC Rìwz DhD&k5Ơ8cie! ˓̙wnB&\k^Iȅeȁ?>wC߅kU3uY37j~$-lCC?6i m\$e__P|=JL%2~I(P&I7(ԂJu;Axn8JA_.H駊M g/\GB¡\N9 \BMzMV?4ddqd _݇9>65@?4pfpi=ڶw^3 XZ w?@ŇW߀nV xrﶽGkeCB5^c¥bQB}S(b**.rL&St0˂eGojr^AyP2D=@菝p Bkp_z wE*#* L#Hy\TKEwnY]!F[.W5b8mm-(Jjkwer7xoBl|¢Ա*qA$TAMDbUpΕsy( I~=Ӛ7@,|, BT'JQvzz F4@p;XkO!O-v±xSkSa!BJG.:CO@WJyD勴ydeE?z˂5@S#&!9 5La4p)/QDe,$>C%RHHQ>|EX RkfPG<` x+uZԴ8, nzQz7#B))/Ɂx "C܄}V=(+"GN2xᘬ?EIpÕ:_"ؘi@ bLJ#pxb5A)V`;\1j"j|aݼA.udEP' t9 tp*Po-}pc3"e?6<8d5#fCfS'@gy*zᵌPj0DJG%Du&/%ٿ7uHGV YHp̟8 x7Hc.i{YG#AaeD7(:4^[eܪ&yӪ TMyqF٤Қ ~wX9H6֥۫wjS R/?[1"q@Fpo4b/q@UCti i>1 @(̈́}:e-9i:EyB<Oy)R^ldUO3 2uMYnGJBdN$_?R/䅙e=yt՟ B$hlqaKS^088 90tL&3hg#K ?mIJڹ^0{jDm^;lԨMZj`?s_XH<7!+a:05d[0=nZ;dHN߿8;_%NN88 5X‘.+2;Q<Zg.[:v^@tud xq*YBPh\Dp[CtV lS6IϠ,${)zA<{/8Є} y뎾|Dd)2OpD8-6mZ-7v #珜G֛EKC@Sa+6*/%(t! XC "SftAG]?7ϞGzYV|HHP& !PBEs"$!粶b|n=zӄYq͍@0TK*9? ̋xW 21Mt!f|.Wzl !ӄlܾo$fUI5͏c;p~^l~:"xx*E:?ϱP bG/ 3mp= N_;,, @D !AYFe v$~Ct斲x8ǥa;|Pk 3( uH1j ǿOpp(j'T"`̨/ }QBrg &?|sk/-,%礖KquAY/q @Pk03nAEBo1D<82DTtk2QH uxךv4w`T5}yf.!CөSqQs='R,Bgž58[Yu`mdװ4/Sti|ILoj>$-eJjV[&0 ^BGz!o6-r9q'!}ŹlbM訯]kǛ2&0TkbF?ΏG^v5:!!6gчs_+]KnkT]]^Eq"Ve5d|2b ᕘl5'XGϵ+7~}?O$8^?0pCM5xGC+~',Nh܏Ok DFkD<gr c~BmFۜ }^J˺|vmTv]Ssb 72 ƻ6ViBSUI.>~ls?1!D9o!5@Džy9Λ'>Ydrvڄ3s.= a% $3ˮ==)=/3S\i/ou'*/+=]]M9 !DTI-0zM ̕~!CHnhU%"c_~"BҰ!^uc\ys{Nj!689|Ţ?89Ywr+ BfZLZn43zCDטiwsM ВrNA*I- f<.xE'c:X&1**4mvq?a/44w5Vu`cusH0CM l@n:y{;W 'ȑ`BgaC s3-p6$B WaFJİC1"/L`P N!0,㩩0?Y$z6"2|6Ɍ i% >Tq"R"GA\:cp_WwP.99@ ;TT@sP.3 _t0mD w,;wS9Y$jp" (ҜKu`0!)lSm|yJ1~@CS>#!E1Vp+¢[ᓏz8?^fMrPC*,uə7P$9N{|JfR&Crnpǝ۸Y5ט5\=_;}!$} o?~>@B8!䱛cn>$f gr }1pyurA 5$\GWNtBgz3{c=AR>C^C{.1lADdAM?<|fv];#!u#1>/1-;V"dr`kZ!&! &ȟ!yڄ[sByd܀frlBn#{Dqqo*c'6+U[NWB=] 5()b&޿Q# Xy{Њ9:r۠BKH>$|{|za26r@{O/Lo\S^pcMkkArZ|5/W/aGgU^5hTIM:I /NB bXx#.ǎMy 11͓#Ob9Sua8 r?&T4l7 Ej ~Mo;F~}; dݣ1ʍ:u/1 Ƥfr5_Ś!\*5d~3- #/b@Ŵ/p;c`lfqdžH~O]~lgNوFYp秺!WO[ۺ^hJZWTף*mzզM>;ܝR0CNN`GP(^~'55;$_AljL6 mNm/3:>+g,1Y-Z7d8zρhP9$vН,"ÏMץ WOɆI"BHu>PB̺^"j9+2) k$&T J~N_}y)J .yؘT1eHL\"LǷ·%$jG8$Na6wzG<;W*(O( 敐'8BA'V@e&Xύ!QXB`;{pg#>후TT49gWB+l`BxNՄo7ns~$ү?=!Q4c,#>x1BƊ ʥ{$7 ;6j֖!ɦHI _%\|A\e92KmNFB%]MF܅:hmh,̲0BGs?Zvd/# Gx U+gٞB>*zH YY&; I޶dm Ѻ- H(qBFࣹ$~mA=]y'>YPWry`D3[:x2?oٺHH!?,'KAlBeWٳm姇>Ώ]sYDkQWH ZY!>cڻC!;1oꗰ%q>ħ@YG 0B<}I(%ЄU+< 6F nD>;ˆC~RS !ai.  ߗ@;#L; {jM9N"_kԩ^eK^5_`WKEٍ lѼLXLÛ`XV'!]&H4Q>DFwqBsN*i.Rv^q _t\kz헻S=wSY'baӢVTgJmc_.d9E ȲOGMcNN{cWߣcZVFJBz'!s>\hV5ݙ٦uu9/O'=_GKW9X#,Yg] h*vVrcwį EȘ=?Yᴨ LN>}L-"4.ճLj(] ]msU]=))G]]=%7]QEޜ= 3B6GڝweHB(B..P^fث* 1 9wl`䵴SӢRLLKy- m.D(DUL۠PFi_HIB$dǫGkvYXb] 9sCNw/vic+XnmBfY|M L<ᅽ} huM$dQ;Kɛ:O@B:eX<V)"{bq!sN+gmN*#~(Vf嶴,]jJikWRWZ eQ$V2w&, I;T*LPPHbR`Pɞy ?2(`e2(W:*BWLODzwDzQQy,mq X§c>Y wb,b^!3UKn"*CkuJC%UykFآk,jEd0 j)YE,Nk縶SdUO- Bmm ekui8H,#;D#AۊeIsOȦ_xdn%і|E"S6t-'O*+*Z߭5vcS8(ۆ-䤺KqX@Tb@Nk}|.r藷o߾j;H)!7O-ћR|w&oZކ![.sYs\mJծRY\mjz޼h[:m-_R$x.)AGԤtL D I^rg S4=P4残N?&fB33SВ|"7u>Fݚnm+gd\ ƘT9njr?|pG*W#x:!/b,>c* 2tu9{]Պ^ҽޡXZ9r$ !`Bf3`9p8>Ӎs2H`ya$|!&~4.tI/LBu@Z :BT! P,҅Pz;:)L^Pq8^R焖%!@ұ`B"M2l<S#VzW2QD%RB [^!kP,XB`ib.  xQqy#OީtHD&XvE,{E2!/rldҊe_4=pV$0B˱I{=- VPݰRiiHF3}nUXPj2Z*1*IEM P/XDk)%!d3~{d пZhAMlsW ݱPBD2GVY9< ! *L?$56AQ0uJ9]mR?{ƙ/6;K6d#Z&qZ~[!L5Nue r|/Rۛ@q}bW%q "zU=30mbNmr 3s<9yIg] 4ߟF'''w/Yk#'nGS!EAX[Vٖ ]>,QL3~i{n XV1L щկu+`GIȈy~z=s-{,Ϳs{vl}FR(o%JerIzd!"B.AS"d/s"1 l7Cل "+j|I<=d:쟎_뜆`{\<Ëձkӣc'6V)LKo6h5K:*|7f-'Pig*. 8A  Q.`SeSwYQ`XEi RpU|@3 (NΖFbBERc8L1BI #p5F!G1( 7b8fSFpa9 H>ui _/(EZq(卢2o#N;K!_p )Nu]6e6q+8ַ[Mj4 :ɵJtE.K} j)AF!WM37Z>DTIB\`!*zf/-d|6### I?z3i8A>$ؑ eDb@4:ni?m8X];VGj%f3g#K|`~PuB>DT8Gio0ԥgGn+D<KS\3ao5ABBgf}N0V2PG :]Ѻ ؟7nXpĕ_{ԩLJL&FR5ՏtaVik󀼵mg%C\9^ 痓2&HuZ2x']H'!<S+82~n8V"/B 8joRWэ+SoL^6K|%yQmިvЩX`crKl}3K(!F"qa]Q x " ^>FP& %j/Q(wH*7X.72x[KZlkz 6 DZDކD K6Gڴ&edi\E HmD :nS~anBẻ/^ pZf-q9db92pkҔorH i- HK!Yֲe9V 4,}x|taO9ܘMbsh*MLD=1}hTz֑Z Rn5ˆ3^]5Lm6+z(@eW7;s>OS:9lf! @qw3v\fõ|J %` uś/ `-ČR 5ƿggμ}3E~[ ]>Dyȋ%Lb"k"u݋YPc ,+9_[8gv\s ۧ*ʒU8؄Mbnģ" k9wo&KEC|.s/r0!kG"j^Zu꜡pNHo֙u !naC>oʄ%nVtw7  @l+Q%ųXlls ẈphI9Q2_ !3 e)x`rx5L_&fTCe bb5D R;w%)d#MbYB46ǘnN4&w{قd>׭ %FbN+gQI0dI3qj SkT>Us\.Mg)/R](ěB;= Zp9< IeH4LFWa$0u虩* TaY=[4XL#2-5,FtB's:=֠"u-Zea޽b3W!x;B2͸H!@6 e2<<"PpT1H|Eļds00q$DLJBٗz%$2Y>s?pl!HG[S1 f:oR  91Ư M^ءwێ!xoWJ^`T ƫҨKq SPU &L. Dw( <¦Aqr֎i?Z)z- Ѧ4)["ǜFEC 0.|U/*mîA|\23 ԞD/C4LwpO0~p SP U]2+1.EZU)a\MU$1"@QI35Z‘HΚȹ)+ \>I wzWƓrȒс,PsKh;۲X@ S+~*D dB*Tv-XYr5IGbv> KsFƔ3Ga9W {ok:NuNjѨ'[ňgxX?^+@t GZ#snZ:*PI J]B R6hڴA9@iK[eYt~.KWi{ޭU[@ۋnk+.cLu^͇7]4GMxkAL'@rټ@Y*6u،*1fT&^ lKYi4i`g)Mż:Ve@\iN{LSL;0h{U~d2(%V>6sʀ M<;;е՘K&tE' \3Mi ߦѶ4d+DdWXK "=C"pԗCFż+&~_E%V2L 2x.C]J3vug_Gb3hf6QÜ-C!mLc2lGQaRYLdzFD/i8L-K-*d T %B໛JKQg8xfW,78Rnj6x$FAdّ~I@1E%bM.iܖ! %7D14#MIc3rsjnfR7m=sBE*5\bck1koPIg(Hgp&e>W a_:K hD5ֲ8MK8NYaA3$av GzCCd2/.gt^0\/D# {:puCRU]Hb(9-h*‰a2MR]v7xK\oTq%-Z@P/CzU6 ]4#a_;b.7nlf}sPmRljEs)EzB{ټ^ F-K;ܣxuHH\Pag@\Y'dx1 yr !aWGsָ/ZB$8~%4(yꣿUzd‹aK喳H(K!~2rnB0Ãm8#dʙ-.W!_Er_;ùlЗ OB~r!ʹ&¹B#i"u/l^ AeQ^*kY%pʛ}z;rH2˽ȑ[!k bUz/{1L.UK%j{NLޜB9~+6\|y#;(-hss? C=e_鍉kqݮ$v?񆓮vz[Cm/{K~Dt"pb=b4'ؘa(LWzp^"H<^Lhszk5grvB뺗Z{}^7~ q1"c0 /G}HG|d k~sRNfvjݽ\ x8Y+@߈;~-ּ~cE@tV{;+Fq4(}Z SjwID?/"Q;#wdu1/|?i3}^o/x#~8G뵋9?xsZ'ڣKx"qŽvs *~Iw4::Q{H[qYiQ\{V ްG'ӕY5gt;ipd2nW ()n'+(,TIel(GDtF]y%GOy&|G]_O\F n tBz *g./b[/̭ys^A`4HE?| /K0a%ZCed9: 2:@Xu|xJq3obx8}c?6'޲/7j>CaOv[VlLŦ~Ϣg/{N.L+n;0:vFYś -o?  ~K!udr4:v> 1aL'j:LN~ξ0 'F9@Z$/- ºf<0HtMdm83xuu;>:a6yɍi=On~dUI$/_@Ah1.@_wcWCR#h$c(3mIJʒҮ4TN+  ]j c=79LB&+ 6ravFBd H)xT_  }Y{IZq9(%S g̷΋Ӝ͇7q G|#.񼑐rs߄!j;:qa#:W3AF Ө0.@ɑft܎{ҁvm>9<]Fn]>[n\zA[GÄľqc't{|%npވZ5LO 9 VW#~{??}>3^^483V7D5uo|<6cc);7qODcč摫cvophwMt5_{3$ % COa*?'z㡋@k] tbbf]x?OIQ{LXYTCp&xKѾ@P%8]4iq%7=Ĉj< "195jUغZƨBULt6:A5GOTotX,+Mӓ1.) MߢP>yIqHMYk!E,xCYBlziJdS`KbcWL+ƴ@-bie%F4i4>)w:ɘ#xYD؎4Y ~ Cmxn-5 m&c1A%ٸ%kT&qSخKVobVJAz%wLN JVjnj>CИ )g:1dmUxT [ L9`9#om"\pc+Ápؙ LЪ/ťR&ra,Py+L3^@#U]ũ9Pc01a圀 Q#s>Y #LU PH@uq [d/[w )FλVw Qi?= erL._U\hI@& Ȫ@$dt4/VU/g*$w}xQmՃG>rL8vPrOdUUZ΃#ZA- VG-Y턧ǑOoM|\ fF_qPW}k< ͋?QdBX/zbD92 A{au; 㚆sc'Yb2ikYt?=}NW-Y7]ֽV ZdiGZh$o 68p$=ͩ_~5?z:cCȓ[G3|xۉgÉ_|}30Ov, fyT}<3_z:#\_~X_G9 &x &"%sX ln5& $i\]+ !x%^pV7?:@?w,'Y&͕OI^1 HNgjM7")ۄG ϑ:AI@ӑGܞ޵ߞvKk࠵ o=Oggx?|}':<@3Sw_(!Sp-Z{ Qq%7pycV Pn KJPt%1Ev+!:ѻmO7Uk޳V gMmH:mm˄& y; !}CM&<Ԧ//P;1D&?5_.xq~22e;nKnGćO{[zA&r_<ܶ |mݙ/j+!Gb'|k:ͬ~yV?@ L'MԏT:-A$&1JxM9Msb+Uʡu*[Jkԟ)ٵ VUVCIv潪E,G%?3(>i9 j[ jʚ(<P ~U*ѰE{_ůV(k9"7UTń*CPPʪ$BAE@]K\ CT1KVLN9\;YHqB2T鄇p~ȋsB%P ,ժ*fR|V~JEdtTGşrd2G&RoNpdL+TtANٵeYtD-&8Zga"s(- m#_ඌ2kDyw {w}}3;Y,}Ή-{BJƪ1^[jj&f U _Y4MF!?y bIejYTh G:s>D`E+80E(P󆠹It#K8"UZWD-qf.vM1%ɁI>/! UPEH@>2l{\ZM@]L%D^ )_j技_f7{Ձ^? Bɸ3 W@E@Db" >g+ ll}1o9+$A6z@`1Hr¨&9ŐDżWNg juKzqTRRrP8Od`9JͅVoJ=Y=l` P0wuHW) ՘j4"NDid ژ6?e9ݶ z|wj97S@6u'aoC .'h(iC`CW1kMNFUjmXCϬX#~sY0̶Ι]Th g=>_{S,$]oG WUX۽a0;dx&CQg`u@ nT6`Ԉkp[|ȲZnҗH4ZvCwں=4]=IK3ˑV`φ9qn_XS&֪ iCp Wq9j/qDBAť{cFapawBE"pUd6a~wƇYh MOנ:9hں$PLv7IoX:54,Q.f gEhAMڥ[y D;o֠RsTn6~eƥVX]4 "+yACϻ'zu#0:On ݴb}:D}C'|nhiW ӥӹ {Sf[Ӯ}O"`ާhI {BvFhduNB…v$jn7. N+6|? pՈ ШsUAc?f*$V7(\se|7ؾ_'C=ݝoZz-l*L}v8YWD/ N  V[jgݪЬČ4|nih=_w+o{.ULZvz<-_ϲtVzBj_uϴfA,d8M'Ɲ 0x` | L Qv`u QІ_yqYd w]-B}\i x/ϸob6՘sɩtUI! TQU2H$:Bƈ7 H DKBDMXVLdM[E59s:e2e]骈UZ "᫙SyׯwIwHN#u`\NaS&oilD:T},xW?<yuo3A 1Uy ZKgZ)aCx8G^vѣjrWiXHIlY wT3Ì) s4 v`8}|<|֋GZ1q߯8?_?9櫻k>}:it/Ͽ^[}gSe 8$>Q!p.??Y70rܖkh^圉wM+jl~j&՟8?$l>\|,Ixd?~&.Crx9cD5ijE;0 .JQ+#ݻ>|<\{}PŕĢwroKo!e^\4& ьiA ^nkZw@x1v >>l0"x7o뷛O9g讷K.oGPr}B }'渝tr]E8ci{ٔۧCC`"z>DZǡuV/GS"uH Mk 0M[UF5 c4f龃LcDȉ 39Y,a}9Hd6Wx<,h t!YD]^'i `ڀCSع:hJIu RI a0% bUޜTUt"RGUGZ N^@&1%V273j^ADrdt7NR lTrڿW+V<\p!7ݷQ,~?j5\ %kma^F%WFlT &5MJTM҂@tf_n7+m&B4(X lT0-2>Y \*Z$5'd- DYHwӻ  P5 2[@ؖb1] ⼵H,Ds/\\PG ,Kv׶𗙬%SkϬe_] O?74?*"ܒ)J]u9TsRF] h4U h4H~9L! &mveRXJ*FW+1̄x^'` H!LDteRldDr*cݺuuGA@:@'q D:@P!T['8'$.W١!qH~B!pJTiBixR‚*P0$  K'(:wxTjW^xX{Gc,E_) ? ,4XP)I>]'*Y`4 lT߯N- ߘ(]m)|71j@̥uf|Mp0d\!5r,E/ڠ$:š eh `U-K p,im Q^DGNnJ̧.4l8B_ZpX$iL _:4d BpJ_QAu. EHZMJx @HiEjUy[-s/-/$Jg7~Ou |T&A:7[S}=[Otp>{->J} ݬO?nimMvlIg]W.7oK_[ľg>R%->.`Gd O"Iܝu}_`ל^LPz<reKtN"Ngŗ.fY^tV>k#Rb![x]m]5Sn*X,{ ͜ DdYC<^RNwEZC({pdrTjB/#kOs(OQT|)Ԗ?IrbM)5JKx6qT ^r7kR0"??6P'ʐoai?iK.<_˷Z  Y,A %~1eΉ厊(_dS𺭯Sqa x:)tȧG- Dϊi4 o1'K4_CXzV*#yH H2GBN bR1QϲE-[;<~_~ AC-)ZhU9t-e%- A}(JaoQN%,dP`k:)(Uo9D\P | OF]pA  32L:j3ꕣ@)>itP,^GuB'P!Љ_iEAX2=DB+ Ou %)p XpQYoN- ^0br<\۶,"Ч-0<gLfp:ši֎RaCƊ<<^qMk˒˺vW}LPWnF֖eAE %"uߍf J z*=Ղ+ f6@ jXHM)QF-Q)A}ߙzK6*j5!s.H A|L;)b`d-b8 ÷`!g3r[iHE B>v /Lj59RSa?fRD*-jMzbP,):UDTrn&-6bx*b|ВμNS&[_Fb*RN u6[,(RN5Ҡ2MsL;_ub-GRĄ|/޽<(#n$7JA~/S堸h(d T ,G"a#Y,P)')dgGo4WL ~d/aeKS/oHVKLu( i-,a!m{y0AOp< *Bq0o_xT)%O?u?xzDs+IENDB`awf-extended-4.2.0/images/thumbs/qt5-rtl.png000066400000000000000000001057351522325530000206650ustar00rootroot00000000000000PNG  IHDR`PLTE¶ɾƻǩʿݘbKĹ]IźڀUBͿ¶xUEȹŶУhNǸ[G˾ɻʽøaJ\H_JĴ²`Nyk»ƿ쌆Ɇ{ogQ̼́|w·Ⱦڬǿ˗˓n]ᘘ|xtźp徽ťǮiYüytptpmzeS߁P;Υ{hjU׏rdɄc`]~ZIϬtpK:iebplite_YUџtaURO}}}WBoidطY@HC@ԛ۽ԇ{rɱyŊp=o`X9+}f橏"-GRѭY3s`tAt޵ĚE@{ׅ%mqD@<2)@{W%%1ZΈIGp1~Ǐ(Ӳe6)0-pV<8H[ْr~#9$JJR҄*qDcj֔9臆F}a#HuHɹGGQY)RGGSHS}RN&n̚ (] ߳ 4'+b; sߜ\X_Ț=5 MBdύ^H27겵tL zeN_Yu/Q\_ϖ#G7!qY-bO$x>[!)B"R~x$M =ԧLT%ǟTO$ӧ:NO$M ML֝.YxjvcKƅYIs &t QZZ!RΥ,L llI2111e'p7OR![f<"BRR׿_?G\Zݩ≸IIqњ|k>v8N?5PlMlVƉUp򛡅)>YW"Sfk&fOn\ 4'pWIBB"$pc'!B|?rĂ*2{hgZ;e6";A=ژtDC`ƍ:hKvneT51Q2rOeUGML>)ԵLvg8]B⦿yd279=;Zi$@7 ȹ@t R_qGH0 GU>`˂qYMoA8wG'ggg'g}j&p)I  B#qLp68@w|Aq';<p_ӋJpsv?΢ƞ;h||f#ga B % 7\4%Y]SVG-OzS[H!uT rt~QgXˁA!z͹^pq|޸&b|#@f-DbQ MdwDG3Eb (Ԃ$0"` I/E"ؘԵMUDg ^TN @Rg!|wx̀&a[0:D #8#mMٔ@^jϱG{1m{-DhohkܝQ؈2JεZ0t Q&@DDd =Ӌh4}Lz{"fɎkLO!|~tU莁0@Q-2{bACLMOGDA^iO knoniȹ?4 '* a o44+:F bk>tV|^i)TVݎ`z5bN<[Q*[nT ;3vt{ՙyDu˸=1\PS4R|WuElneY({EG"9u4ifߨjJ Jŧ=PZqsQ/~Fs G GP|1'!z3V+ U" %K|RT_yI w { #8+բHİ驻ZU{mz+ۋ¢f |U =͹3RTPTrPڮ,.zCP^>S:hQ^X(TQlbC.~(NZUPxUTil'`[TW¡R(ԝPLK힞N9iCHDЧ)E PꪊruBoQ\\SΝa ?Vw MY32,8[筜ilwaN2 g]XXPV 71)YTtvXUQ<p;X8!7ؽf%#V qC!v ńL*ē~~ !c;6Cy~3!ꇻ74\ R.f0CQ t yQ( {n=7pAbDmK4F뚇LAT5CJX14rxSa9bR!&p-` v5 j- B)h wEn6~p0@Da#20BC;BA" +)?*8P^sO@IX8!ћ]h-ֽb Wi??Wg x 9!/ y\W"< LWϺ,ExALt褟-RMeB^f2{kl?_uވO^(G]yA5^NN!^Nr"d,O= D1!PIKٷCH?~{gFߊUDBi[N  (×kM1j:DT&ѧd\&CO=!z=yݺud EI"xυd&I컎+rb>g=Vt؞QxdK&n;uS^P$N}]96Pa]yfM)/&$G JvSn%9{8)^LK i<;??߃I#L7N ߜ\_"ʹ!.wmT={}7=T ym:y#>5H!c}mOuukDd!4E SGu rtEhr"Q0w޿=y)5/xO;Wֆ8 S L|\P)u&{!̩Sz_95CZצVLx154mZD))Fړ@&IƄb~_uE5<'cc*ؚaoGMbިhRݺnXDO}{&֎R>Rw߶ 2o:]kӟOz!Ǻ+.&vU"P8Hc6hB<*&i?褆kf%ט_]$I /q5n'~t`Xy?C]F)[Ƙ佮_Ez_golpb#4us#7|ml-'S[gVLU92|k!ƛHI^n<42UYrv;(FćX\gNWu:Oh6xd,zළ;&Eդ^<μO!-)5h?Í=UyL&v vUxѵjmSuY\ u (E?M7& Lдuwtc]L:)&N/>˟Ho"mչ9}m-C+AB+ yx90qq?qhL[^#&r {+`pfΘd\{[Ä_GfH&Kkc'`:!PWc:"}pVy'FBۢhƖa@2=55ԟ`JEq?1(%u.Rz`'BHD-:Xc3j93/B9`50˪(W1@gl~ <ƛ рgMbYG=yc;P ؂@b L`[j5*=J1QXvtiW=]]^@(:ȎK BxOԨE}hfm c!{;Zm2'B)3$ %2BP8T|R&#fޕ UӃ4xjy٘yyq`%9yh\<0~ra2({g1o_.l"fO]a? .|X,+*>XPU Zxi| wK͟yƼ |_spT/*-@YFwG}mxAK J>XS)l/ꡬԕ~*LTX]mPQkc*VkL ۾Հĥx:b J\18nĘRޢr(U!D|v^=xU ^ȷ[xˈf)b mݾuepYCBw 4j.C"#Q LJ:`RڷhrV JgqI̤_ u/t2\)0dA5.{V6f'u!0dVk7{㷙 wiǀ%iӵ4;N6ڂNws/};8t?#fn,H/\:/~G`b$ ' \g?ʔeA#v4V `,)B<pmϫ;> K̶os6i6\y\5Wiv:!{pB^ӄXȧ/]<;yzCG-cCr0@G9!4Z&͎Fch,ͮ hs!nC2Ͱ!m&tAK 5`e[nDWpء~5Kmծ k n\C޿ i=ڏU۟uco ]u_} yvzg _ E;6 mp< /m !tc.q9[u4h2hv5%iHYH=l49V!G{аXFjTݪ EOOؼtrgMjPP4Đp3ɦ~ * 46lWG){r';>ˈ;\0.+!} =_E|UpHYD_y!QZ'<]~ NW,ZكFTVt]*ou5 V@QQQ;;ϕg*4u\yK`{n~sNaKg!S2korgP߃;f>곟dzP^UE7mgmTgEU3BuL˽𞼰辣+osػdbS_ɾFZuW54(ѵCj?hӎWWӪj-R)_$kw4xW) J Gt ]'Xcd@b!0-|Z<*wOQ= Y!w]( FGUJEOcw !\W dQ4V]k6=hkV΢~*OV_Vn*2:Gf2B*S=d#[)& ڇ΄2Ll)!dsT`q- oOTa  aP,kEUv Kޮ(յm40Zg~U*?J{+oo5FOvrvn'd D~3ͮ K:Y1"BĞdY'-boREϵd )_$ƜMf-KAbl)_+C~3IQu~Ҁń23{<Tz;sUW.oL%|y!@jVڌ+^]4;id%$.Y#`h > 1Mf 3/ H]V ۇ٭bjL'YR_!AU~ j!s d/*=wMUd7&9ܒʺh2VӔ+1bz4% s۵K~(Y<.OK3Y 8 cij*WX4׆rW𻗩|[B^elYki@&5 dǎYG/ARH{I]k:_|_y% 8|cB1Y^[~a|)ڻnt:ڋaLXa}$O鹄gȋ{ '^vDTSyiq zЎp&#|-9tS| ~'BFgu=+}4ByNJKT_Pr'E +h*Ӵw;Kw(Pu*􅝩j$skO!l^Kf=Dkk?I6Aլd0?OKa} țQ1"OLq]!!˯Si'¡Z`uʱ&QAyQ.%@cfPhB;[qH QDbM_(0␬`>@F o3,CH'/&ӎxIԘ̄l_ B,RL̥LI;E$v2C3#<Ȗ^!`HO/mGq1EHzB(ncQ tFr1gNWl-P|Q8l)iigr@})[9.dt Pӹ{yK((EgZ!K5N=D *TVdžqQ!aCJV"+R{\f =k!k=G' ?h ¶F ٯx{$x$xpDd+ E 켰xİ QTz,54,~GaF H\9!rRb)Gw PmmAC4OT( %$zȡC&BZZMdCHei}bqT,>z7~g!+z="EF:0tC "z0g^Լy[pT%+!k| k 4xۆKd2ċ{Z2 Dma~S\;(w^ @"$HZY&BWHV}.LS`bTMZay$IxqC_<dC֑0(H촖)!™mC(n9D̄"!M q !^1sD_tX%ɇ2u%'+jt$- Cщ_>pIR.*^^0/6ǀfF :+}ehs$h+hd!'=C sɴwNkC`LX!H'*50RKKINT4[=h@%C[904}Wm򦦊jYdI\rErg||/^$q25~< x^w3߄gu Wszc第`ag@l&/!{XىB|GC$ p@,U4 !0$bEԃMe'ijYV_ɵۯ We'uZSX*Eޅ $t kh~/qW!ko.:8Wr‘d\&o*oBm+Wdɝ@Ww>\)~u]]ۉCmXޯW+"yEhŢw{.<%74d[&~*LCGs">TQmsnkFGM#$_ՂHTcmiȢ$P=W֋V;pzX>C8;*k$ 6=Y.]rr8̲r;Ljc i!+\`Va*jo~*~!LgE栧 4HK#C'BGɇдP:980L{Á$ЛzʰxzUBvF_]Zm'n5{`]k.]t<_\>.q7߉C+ihfie#yȲL_m8n YъdIʰkL E Kg4lcH#,D!tDyPDaheGO\=:Ws{5Ct|RyBb[#U]U!_jn.uc?=\w{R~'ıWO?s17f.d>@Wk6w-z?hkkyY?hr%!ٺMɨV2* #%Xr}z1]_54.F,>7mY#11AA bű- z4Wrˁbw(?>8)zcp;][/ʄY7;9ZWw*4s ]YjZ*fԟ|t_䆐}ؚ]x"-R0.1E-7Utjyҁ,u鶥c wɖEGrw;$fh#!yP\TL{Ӈ'~*KEUQq[!x^sBR <2zhOo2dvPG0/~ɗ`Nq !`^ 505d}qk eIu[bX$!HJ Bd`Hd )MG{'㱢y{srx!+y$2>Y J8g>?}N&{ 14С׏I',)6jY{s t#oF_=nnQ, g K"Nh 6ł \>!い끐"k7`v{!)XH QaBCޙ-{x!6BBMν{`nӧN*3[ +z$ Q3h= ,^e8]BDP\#$n7#yAnS_/H*y+8uW>uIqu`a,j((&ਫ`QTQ`3.!H_R x?!MY/t\'%f3{AC!_Fjz|\gႊ΃ ~`~ Q^~z] i\$#wֆdQ B%hk -bj{8?2a<%?5FE--Lj鮚 LOo[5D2w;4tM{Y5o! a\Y.M BrT@%!0s{qHdͰ@ T-|GPC;7w?^m$ArT AZp:d=b L+t3!@' VpF90<]PA7(B/H*! 1dڵ|M+%2yocƳ6bK`zQWTY1O<+e΄|z͇zLJ /[nF ~ "aJF:#;BR6" E =!e8m{ xE*w 5@Ok86#!NK! dhG_ztxĥz`bxi\ dKggUZi7WU,+.R4s 9*Ƀ 97#lTpp. (K #R(cDGj+a7fgثȢ֞EdhG_ԼD^ B_<4yYe%2bfvv+aJE|^J'Ȑz*0F=*iU[Wu(UHm􊣌c$ACE(>q8Ni3=lEykX{4׍:R$OH)*>,C2#ܸlBŲL%dtQ:]#a$[bd)mXjs} $$Qhw6R}7Ͼc-x\=-#8dd=7ዠ!<%CitB<4p[f~rR2qDth(8[ Xk6԰l>yաwfBҢb3Ve*),a:u!S{Y78$; R[C:3Ё DOϟ>8K P {q sp٨<ŊoaIUPKFNe+JӢ۩V}gJPȉBN > $5AZgBR̃1Al%RS:!%!'G `>*$ЩtpsU@#j*0_@lA't{]աĬ@Om)l9z02(Tq:zn[[(jn=p:f^-*̕u,BV\p5diҍ:G cXK B<͍V:>ʒ8qysĤ3 Haއd`EE½zfvp;eXc[ UJBn<󕄠޹G{~\7YIh:[;4;>Wsvkk5g+s i2 .6t[,JT-!Һ_n؟aKiZoo{hH srh7S?Ӄ?}hsJzF$D."d B\^zxڪZmokp՜uVH긣}*JlNjY TH3./\'hij9:I1!Qb7ݻ2;Uw0EY=TQriGBBkwP5_G3{YI,=,]TXQRBnEX[3ʕ䔴CxsF9st{@j'(TسeY/(gk/Q듵L;X{;;*ysQ Q^ӉÑ|{2!Z$Dje+~93l[ՃfX]2m *XU֓3NOS iȮjaf!Rj'DOR?8m629 l,w(HudX@SK)Аl%!޾ܙ#&iWG&ۤ*Foab-6InX:K0USp N#u XI]9D@RSGQsӳ,)l|!jsnyX6ȀZzXRm&~{jHu tLmI8|uc!E|+T+S* S-%W ٛ&4:H$K,w ~~ 'UX퉱~œ2`6p:]0(ǤԄ1 $Zs0lj2JՆvuB(BkaS\FPSCM 㢕O.{;Zp# a`̤ 95k۶ g  c+s}h򢰌EQ#:؏FVbOltu[H DaiЀ]PDLtЦ/"&WTPՆd|V.x AAUoN^?zrl],,pjZ;839˫.?=/^}{L!b2AxU4Sv !0 r:o?lw> AŽ p< qZ~~sʻw#ӧ@c9EŰsÍ|hX{+uVҖ{Gk깲 ZMՠ^{e9gIC2R8 -blo`PDЂʂ/7l` Åm&Q3 C'!+3/@K-8`L'T;ϫekvGzKֳ ZhTr؆Û#dhw QECCF̂m)-䯍r!+ BhCߞ>G߼ VqF*p!UՕ]59Rվllk4u?TUsgi6&qW_NZ{,#tXyY~4V>34hv& Ȩ\q̓Q?L{Ǣԣ3G2^2W vwDQnrVND|µC&,0x1jܮ!,0rT\Yx Tz-0 n)PJJB,* !.'B;V߱ p(yM y`g Ah[MT #u7  +^#e.'K* ,OSMșn "vB}b5QFuB]ׄ}}r[9\c^(f.Sڠ9zyIHސ](*n!M287G5ڮgg5sU}[f(ӐGMsG`gN^R?9IߟKq;.v FҲ'O?~jߏ!w'yaʢln.l}/Y&M<6MPAnx}7@CXSGQ<%e;؈|Y#?A>K g )fa G_Q\ȧ("_p+ 4B˒N 8f?bB'B'"4lv<jjoOl$!qJ\r'+8B!4NW`-9+n:"omV3\=} ǚͽz6l2x~1]iy8B , "A"s0L(& ASh<5p+3ߺu+RCc ?t "^*=g!.G pwi^V)Gg{ZMGre㮡=ke;`!ٱanVHѩ"\MkSěXcxb\E4!~cq!9rf%!ߒO~-HNLNHN8wO)1?9O⊒ 8B'2TrK<]̴H_FWiniz;88iq]E|H `#ü0A,g( (eL:˹uxYUUMo^)dE/:2 4Ls;_7|r`yԋa&5l׿K6 !e4{3`of&]ow7Twִ[|}Ӑ>hii᣾+BpE*G@7v,0V]؆@m@?wnç[.͗3 !FM(;I^/p ]COw!tp'Rps]b="3 16hRI`N|["""Ͻ+ Aקu DW\# R!婴0lXXS>S>)"b; ۃ]>w˷2p'le7HgX*CLO 7z>D3BtX$ !ڎ ̷GV bs+/y^:LW+'d7B'f,>q>>(Gw>|f%SW)SZf= ^e1}PBcBPx0`? L $uu#é$ +be~KK t+I9`&D"$'LA}`rgAy5Xv\\RCsIJlJ .IP겯wi1?xl&VKj{ R,  VBnVUc}4{ˆo֕e Јx {2n&is:itA@b["w pGH*e2bPGg J;bڄ~ qrGhehi.'MˋД+Xez}m DD |׮1ŝ~MUM%ze힟;[t9Y > :g}gm.=C '/rC@$G!_ )@B~ˉ]o¥?%i`ZaC,A"Q'E;EbE )9>2 ^9&ڤ%.́za+0i Y@d!>TߔcሖEu7% ?7|q?J AX:`% _4d慦F040< d%NnIr$T> a{|V=5xCpdC?~|pSqS8 r1T_. 6']+sT{\;&J)fc$B TO=+ϭ0'Z?_|_Jd<Բ8CQ_:GbS!5FUYb#~ژ91 pE!4= ÂP:];M-:]ܹa{DLŃX'N+/0\!<˩~S ,W n1!E)O`ă{a`(B 󍰾E,Ԍ, 0IL fD2PGiw* h@8x{h* #^xx w,r(7I9{rn-1΋ȅGWpNo7W6KNʪvp(!_0bu9ƶernYF,{)W$ J@?hپeJ,ߏ gkc+`s:f 7r̄B ʷpp" 3tT(=mس5 l<3T'}t1DSLI %ၖTcS0#-Ũ@+z'ӷRb(=R% SKj(:$\Sh* <!o̳IAOkwkpzi7~DIB̈́oA~nqhh:WٚJ*b6_a[@Yu1Y[hUl3kCn Op{!Ö9ߠܑkŽJ{6zq iO*3\;F`051w$}Mѡh,:K_T cP0}-5#ws< "gtãu죜Ñza(+!OfO3?Md]SV7t4L=Aof:f $iB,0 gE=\<.,'rF8=S"˽5\k8Yr`^/@h o Px = F gL~J:4E{CߓrAOR,(I dPaS S KpUʶ @tz(HpFǂI+e~H'~/|zirNv?e07jR ]RgH:@BX =hwmt|]j&<˖R-]:mMNNH ͎-) įLdn|pk=v<@Oͥ G8w7eioJȆ=8X,ys[&eTbs>?1_On4 lYYlV z X&s 0w Ŭ+zկ}@4P& M=aKɄ@O<+0쉳Kg!zs'A/{#荗T@{*A|/q=.4H*{Nz @uRw`swqk9k}j]\^9f%&7?F%b/uam,O۬Nurn L{я?y ~h@g.XU Wp{dn6<(JV4 2SG Z'O΁or9PA,?;EG P%H3eւ9 mEJۦm$|K")Q&}g^8 dji$> 2BIsyUU{mH.o]ӔFk@ @eD~ $  h2'qx(ys<@D*P3[f#j"0W![\7fdeOju\MNuN=rOfQ}9?pU!GJPrBD탓PyԐkm^xl3Bf½nyv.~t jy%ĝc.{*w&NCxh'ꉺy yAXG/Q L)IEkCr;켖p õlf !!Y%)A1%YK(Mm tZfnR9 `(&DT`ї=[E?|]XsݱAU7ĺu @6 6 `@s Cf61x;0Y4%eJ`>=%\B^/f3}eK^x߬$|f>?7L$vï??[:7#fj3S rћQ?Aәk8uÙԔHOi2DitEY\:o}20 i)|Ѝ:V]K`\;n$.;:9"%//MvI2pݛt&Ad?@d:j9K`R7X!cZ34O)l[3]UK `Z%ns ^_/h􍀰WMkPq%`ݺ4H8 CheYe֜n }Ñɱp[G-Ne=u@d-:?-+%l@g]s:̋˚n:@s־=oq*e%/@I?5=Cy !v35sa=, ?T3dFZ&%fr2I'~t n߄_ld(ͤOcJ8di5dޖmwF6F~V~z^(pӱ+l3rLbE6]O<;td= 0 `HiBIW , m Pq)$| |$Sd7_R?nT*rӄOܰM{q}ÅY$ɽ(6bȵ,ua;;S!\n> HJ0My ht'tyh͓Fzaw*W @q3r}M9#gJHO,1(( ojVچWz+t"7fbxeevp >H3&,AKhustK9p`&T}"7 0E ~]e~>ݳ"7E EDl {ԋoE8A+&wCP)眈ܳQ {+Eg s@09ZB\($ $,\\kZVh|)06H1"5*IH\B/j`꺃׆)X=Y0=+;&LKhyzJ[{^w\ԟArQ|3*C!yw[R.4x n$qE^]}` u45˸;!X8 ?u͐gvE7B)wOo@pƆ~mjT/⪤H{USjQ$Sax;FQ}pHN՗%}Jt] P$e@JҚjT<ҮkyioC1_UcQb,/DrQ_Y)V<^^߫ҶKF d,cuV+޻DJ !P{yS^ǓXQe'+(M1A:^w|Xּ pλPۄHT7.eU,$(I J;"ĊbT~E &EQ"ARB$.+j)`1Mp4Kr $2tjXDk[k) rѥm~zs3D\XACaԳK1P0@~6&9-'Q Dޡ1.Dv0̯GD=O(͟PЙ PΨxY 4K:R#ålyo9&o!\q!bV"_aw_ՔN-@8ld}œP?U7{#dsopP$qQ3e@020@,MOx(ރPԕ'`DNKzV djǨTpٟjn>}@x8[ оG`|>g%%"ypS mP:HcT,F׆whû W(=O7DK/^/ԒՆ`_1.]CoI0\~XVGaU}Ļ.'@%4 H*d8bPP+cCwG:͉`7UᝂW; hË;XGL\Đ;wBHBޝNmßHHEAnʉ#@~l{\Iqh﯅`;{@¯'KvAgsP]WVŊ$TrubD=ÂsQ.Í1{`ݪBRccfRZ_.a p\|wթ*a^ pX]5T!?+2g0X퍬).V %m-uO^e7^|Pw?{.7tcXץ:y!Q,DVT]~PGI\]Qk=z UT TU\"!v ^u>0ՋHˍu-x5( ƾB6^ARtR+74^rJ'.S uJ]DĕAܫUw u2/2\XG 1f>) ݆P;RM7KcVN^]UTթʊ J2#&># 5Z>h{HSvyUoJ/wvQbQUok눦+*T&z[L=kPjT=gSDD+d; |,u! ߫ULEAq4qKͱ*W{Ҿ:zoSvwNI3 ]z0 nQ.Bn 9B,  IDgBKVzO?jpVZ{:+lUPyurL_+9B㤆3ǹ{u&xM#_|&&aYMYiCX/8$9N|q.]⹈9:){n㳃]*T,d3/rUoEeF_n$*`wqggۖBX[#V=~="{Rp'eoxS~'!N(!X.|Y?%O 1r>s XZl0sAw ;P)DPm ' ~iF()@F!f0)\g )@z6  ̶ W}=LELO[9L~ ׌N6#ٱ3p.NQٱF %,^I1Lrk2&I\P6`B9 ԧ [@!Cs(03 *$O$! bjjU76rWƢ>u4J+˔u^%eֱgr@uej{[&Bޚc2a춭ee+[{0"`ǒ撹hkaٱ[WFkA8m*k%dlAQsϲk1֑V{8c]|gZ3Vw둒i^D O.xZۮ.*kQK +ӊRո!*OlgpꆤFZY27k3v(`T1/YK%=}jٰ ibc }aùlW8f#ZdwmGw:`Vi[fcK[lZFQٰFv>SXVNPe*r{-E$FrxnU--m\M'M )hިCYScz*XƭRGdI$cNjI2K11rLK1 XٱxKheUώLn#YRq27L_#+L tU X5 NȲ RAS:B1%A&p0"̾YIOg)q&1> 4ϳ`b?k q5`I,S1#H ^r_ ٷ+ѱGǂ*>7&Hc%Agvlɚ w!l=a;)wӗ\oI7t#@KGan-Oaً&g,MtLB FJΈFxKd+pÎxzpr[Zr&{35%gCVfo(o&QMkaM4>宅ܬ) ΂xm JXkႪ"Rx D$oVZqjUd=╔a$ He")9ş{ 3 3Q8@~ ȩ+@@d\{ 7@΄8@h9-zjo|<.X5*l#+ h@&$Z&sIo6HYv`tT۽,7$Ke!/6+gDoN٧n"?Rx8Pu|9:ujY=髗 Aj=#:QH]@;ךH]yqFV؛:jgՉ굵:T Վ5uG--R/%zq:+jV^@˪T`u=ɓOk}>SC{9s`Uk:v`:RּJ?7G2)VF#H"oi0ͷUVRܵw/RB\jV 83RWB]cZQI1qz@ajgWƬ̛5S!9/K9y`Zi:G;Dv@%q0velid6ɱO?k? by]D_x- ~1ԥA@ fݽ>Ut|pTL) _e(Y aλw?'C|ƺ\]͗_n ~o{g]8>2ehhX{tM%̓wW 0ZozrAtީZzU,Ͱ!6#*.; aZmՌfp4a ?x7¦h8 /g~k뻻"(,W}7_y?]L o*dt8@Fz>z_,Fo?hn= 󯽞/R|wI;g5*ZꮅLM.//#vj~ H즦“ b)ȞRb0ZdKUߓ#!)96Y${6gunS$/Xo|.: 2oaDd|~a )/JI:X&d2#d{3C yPAБx4=ҰFy|?8  Eg*f<}:]O3Sߦ<} VIȸ ec}k L9O>|6,*a/  #4RŤ efuEi Ƞ9Y+;ٹ\=+YЎPh@/apjpXT-;;mpU?74'`k 4Y+;tQB4X,ɈR8g(=ɱ[=|?kP7S?Ag AqEJ{i>ހP vOft4" P|07eN&LYʢ6BXY@#7W=mH$\6WNB!I5wPSeqb4@TYwq*4ǂAQW!^ 54Ѫ,Yt=fz،` n1U\P-=OqgmpL(yX%XhtB]7%mdp$gg+U#6N SS繺Y?AmYp4!v+/P)@?!5>-&DidaG8 lٔoXw*Džy}(Ntv84p.C R)Lz`l(՗ C-ىAK,pQ*e1B͂16Blaz'̒y~]/ F{< `^S$ /Ð+y~E6QǴ(ga*HZHHP|v⫱r8çsq6wXaz~qkuK{Az#:[WAb ^̷5 P,s r :-LQd$q{Iig_CܪTfYwIoYx!Od3#\NrlIdWpP*6Іl|[Ajnw3p^P"C y0.+E~GMv;7҇K:MqE_xh9q9.%N;1$}OL&Dud`yoWV~ ˤV,l(YD}|ђ +|dEl=hwJ^+=?WioI+;CA Q<J>rTm@ aVc90&U 0{@;Z @H^T‹){t:-#}Bs>GsPUuU %7ԑ-9f_K6gR%Ǥ"}eҁaf d|Cׁd^^ "LaӁd`g !qKiN X6Bpm+LƸ5.eˑXm-x/ Y!Lo<+nKtNu$VĊe!H6 v7%"%Iӂ`sz\N#k# gbGFPnKK))A%o(IkXByĹ5PG4&~% BZBs}RJa| a>5C X(6Tܘ %LJ"uPhu>ˁ0@JDm(y-e6;]&{ i Ldڐv a$\!77pâb(^Yq|* B+2YX`,09 JIk8 J`LuƺΧ~ݔqz#HIENDB`awf-extended-4.2.0/images/thumbs/qt5.png000066400000000000000000001055301522325530000200570ustar00rootroot00000000000000PNG  IHDR`PLTE¶ϩ[GȽʋ]IbK˾οź̀UBɿ̾ŶǽxUFĹƻ·hNøǹ²aKʾ_Jzk˼Ջ`NĴpƸƺɻϦȹžĢytȷ~y÷ۇ|ۏ˯ytp縰ЖǟhStokºseǷ|ju͊ǿ皛fOb^Z~gVn^njgheaĽȂQ∹_/^\?ڑWh/35\V9r?&f&~t}t !3WQ*AP'" u,w ߿39 vtuvr1Wc*?#ch#wg˝7}C`w/+8 ;;fn-w>p{zsua#T3ʙΡѡGP;Aζ܎mK;{6dz{%a#%`Ut5uCCoU$&6~_]!1?<1Fc5jr:dgJt}q^za#f}9n8kJboceSSVL߮Z:w{A=|?'f#vzzzÏVV#-de%oN$6ΗNL|-kG<7rssd&TE%\>.yrivo&MM,M:Lɗ@Ko7Vb=VZgbWrV;Lտp/⻤Q":dP/ xy_AboC&<;zW|ʩG5!yڕ!}uSKCG3S3ޙiH>=T j_r]Sw_Aݸ.σc~u~awQm/\!] D{@u] z,@leyߕ8 `a=p-". ^ x l8UG/ŀ!,!vyb}WV`te訵._Lg-\F F,Pbax ِa4d6n= *yX Fģ~@IuFs|8`iD"2NH`cIl"1!6SԢI 0$q sزiD$-IlaؤYv(Brd."%Ij,|r6<4 'jCHdw`tcl,%qWvNl{^UˡFw".D.)A"AcPQ[)?w(a4Rt"VٖYs9ٖ⡖9MnZyȆ8V-VV-DR,$򤵒YF`kUO*lj!Aa} Rzhrr%dE-YE"ZAl!y~^~\IUM&Iyj\ٮR6)*NJvM;2TIE]yV}yloV^3= hEsBA^o`TӞ}q7_3+Ϫ<7oV-A22r{yҾ;r ۳&oR3)Y}DeD y[^\]*S&_h T0^C`^iJ%-VkՃyHLάT%%+K' qqazP~GNZuץfy~Ie%W^7\Vd*,$΄t82lȑ@ծ{YbUD;q!?"_Yj*+ͫ!ojQfF\WاdpPAx4UVMJVf k4( ե& jJU(kΩZ* ZT׳*c*ϪU IkE HU,&-̵P6pTEu,zXZׯl+Ue)K94TVPʪS 5Tګ+ ;y ͅREX,iYY&ڙ} >.R Vʾvb,YMR#TYbd~ci:OqJKeJ º 9ma *\ڞ[WLH*yY٥VYB˖N*˿RpįO^G"S), -bYLG'WPvD ƞ7J3 ~Y[!|~qlD'$%H vIg'ɓO faD @zHDAzDBәA4T;1V%v\ӁNvkI6MUS; `a?3|X% }ND/&uBKX= my#mcm#˫G/%%+'YC5TgU}I+e2 no;/!Y?N?1/ ^,kv7E}Wwkk'8H2p!kcduˈ2Cٰ!J59m  wu]XS @>ԩ)ٮL<A ,K+@1uqr UARث\|}r)o.[ps,E?{bxxX ڤqXm#cS2'Cb6Ee ;+>V^?(Ц/^qYf if$%e L &  XdP̫^ǡ7n߆g(\̓piT-bbl{jj{L&^~(E09]y:GbUu]n<0 M)"n:2_|u/3A"*VȲYX_@,|\D}JAbՆx A*&5DrQ 1DPK }$)d2BX՛4?LiBEC0C`LO"tJtS}"OOϵqosU(FPND"KaGFy@<`]>Vp>Izyw]VNǝoXKBl{+$=1{I[0#Ve,^4{ ')Ep,{,^8X.Ǿ@/4,jA=A+  y ?@Sxdo9W'8ɛM6 DE)[LoA $*GgXN֓PdVd嬞P=V6ߠ _ p#5L kF&-їUQ.Z"v㵂\x}E1gCϨxn?{st`RX ųF  xD\a e(=:Alzo1QfB(rϯwt\vu4|:try9Q1Vzy Sz9||>aAJˬkӹ{|>s \zk+v7VH'*BqsoCV bcC=gNA):fU D\>WQpld]_aǬ*qM@c~p*FSz]ꧺ^xL*H/ᐶD +.one2ʦFpS#.oŕTGp#A%ev*⡷jfX!ë4~&[SVU#tX>l zv~,,& *|,QEL6OP|"Ȣg`f6ɥbnun qq\lal!""h׺YOc 6aQK# >IO bu\x If:sRN-ʼnrՏea z6mwo2㘑Px:,sā87Vva5zk IA (&"k%t ާm/{%AAZqM°oBi A!fg-e}-8CEyMAl]jdbJ|G0J$aG(U$VG9P m> =T:;b|Cv"8Tބ7vY(poذb4Vo -.xVTߩSD9poֶHD pUvC Ėx6,1(5c,.`)Fs?i/L'> -%o!`7tt94)GSA_ `4"X$.x7FɌH;\:KkE^ 0wuZK-B1:6֘-- cL0K 2#?9JwY~ҥ1z~~IϏcu7wz 3Ku5md$[3EpָkUcvCh-g@H$T`jZH\GS1TwǗ߱nBkp\SDYO [<olCE*#{l0E#W319OΞ'f!3q?dY I 3XD9 bq>呉+"Ԧݺi*]`S:{Hd1ፖacY㮔W֗w 4Cl7Vym=X' jtZGg4 YTZʂ*O'Psx6JH 2x, C>m N g7C1Ć? M˅mfOPD $c_ OE$(DwRb0"a~ۻ<"WTp89>><@@[qb@ R<]2Ri.?29#*r/,Ba/*EV@ HI #lQ`1nn{A)$'/)it(<;",2sI;4m`AMq&#b.u:%G&.{臒x xtbO{jI+HP^ P(Vz8IxGuq9SgxEDN!{0uZo#cӎr\^>ze{ kAy]̆z[GjA &wzCT:F )Z/[J3*e'ZH ˆH3z'nt-`e9(R28԰4W`e؍.=L1D 1ܭkIԹa΍HɶmFB?^W ^'4Lž as& >V{Il,@1= :uRН8eT<_I$@U34 3&L s\ZH%4dpEWbx$Uk "k};<ݐZdG~0d,j1 v]  Q:^\vqk^a '`qC=0*cبtz n 7>>|rFn$j eR"˝;}oPٺ׹1t&~n/^Lj=WAhh B җi,xd)B0ݧ7nFeOٖҝM[HuTroKʆ~v%~X8JtTŧ&nA2y+B]kiq7\4;jƱ͂4򓘟g'i@o { em%,|x/x6_*2Hx݇NBP}zEh\aV!c 0Q0%E -FȂ|-Y66fA"[n:RBŝ;wAc%%՗{>(}e]vWt-d su5A :lM<[3^e!B!e}~/Um_d? x.746}ܖ]i,u[HuZ? d)e9h¼8LƲ> ӷs.`_߆~25r<{nl*9îֶO-sIl.Z*,J3A53-iY'.j 6$(Ykybd]bb"\iY'%&'['[rn_N^o.8/M$lЍ$9 AMCT"%!ȭ BV`F߇, ܐG,NnN܇PangcȓۖwZĀЦ0}‚?eݽQ`'x%f6ԟ=G\ϾS?u{_x^̭8Jw t$ ~PJoex_߽Ɵw7xI&=`3(F]Þa3!$}58n2~~!-}2_}n1mRo{o)|IE[ {wUq?~s ٢߾vu uׁ NHy'%uůQZ&O޹Oܽ'wO-T?N; ΜWH;^:A^HE_@\TH/݀}M7{lݍa!OIa"ǩ]Yo' kB euͽR{꜅fqn͗p6 Bf}.'& e8T|z@`ADt3 0" ^:i=ãSO<` Aeׂ !;ָyqǎD8#+ˮ<T v8|ȶdnG _Nfq*/.6?.n(|%]B@H[v]w.PݣWG͉G[k:KdWlbBHluQ(W_WO׭ՍWwnx} !RKLMBl2>t^x2n ĭ 2:R 䠁0Hd;xcʴhAmA!N#` 9w0!yIvyٗdăY>,c'5zxi4ҿK.󒚻.!֯kꪾ_]X{}ިYr AP@!'7iѮÁYG *"A{-(izdV}6@[IH80O%3roEAH0[[9mxvζx‡cbooر1>CXksӐ\ yyI6$a7 &~2enQ*5_jZZ0 fhY^Yba37F f4"6BZ~* & @] >d-$k& 2(DC}+s!DV[sBe}}W_MZG+Ԏ*<==ED.b(zAAԓxnj;VB@Aц0cuAUPiWs9(AA mkG>߾2 v&z Bʲ@'ch">b+$05g2M J; '/*^wAEq A0\`BP(U GdBxߊc--$ldXRp#GuVYeLB*cC @K<@Q>sPExbX <~zMrI~^Xt*a|w U\X U0Yo+G;?"bKH &d;{̰XQJ55yV cN|j%Eq^1 Js<֭E<'!,+@<)rTiYRٳ?߬Q?_vq~A*0Xj򀽯|cknwPH̃d 5pC7Ͽ9pq(UU\Ef oHuDB\*ڪ!U_}v7 hz29l\ydQ5# Ȟ| i`."m$u(2]"h$ n5 wB ΫȣH.B+@;|[" t?߲-տrvT;DP:! 1Iv9|jbe5V,'S;k Ͳę Å k|LD׿VV߄h(+ AO,G(hSx2 QE/N|.!_?z"BMv촋>$u]x2Po{lBwJA9MώƮ.LCļY9rJ^TzCo a%eCyr//%#hR]ǖ^s$د^Y?Y%xUsjMqR&$N ݷ݋6ѻPpn85<{G0C[qٟ8mHjҴ0bb6 i519:r9$!?!>nh%t%2F,-`"5med$r7U , =qNX!?W]}tլ=˅sJҸ#pr*@@21jA {SdA8eTUYp咉HhA 9b'6ᇐS(KJK%0/@,<M*uGJD@,Fo9!@;h+׫A7H Bʡ="" ND]A˧^e6@TA UD`=_vIdC*KuG%m2f鎚ȼX9%KcKpdl``~k,y5DB޵"Nm\S*ӆ9R{ F;za90ߍ:#2#r@C5"P0P80h9i~<bGvTVH8ᅱ< pė)6g#*`x# P[g/RFBGNBm!BkMP8+精%j8J," "W?&@οOOJHFr0j/E‚>XoML"<<1 %$Ȱ5* l/ V%.[{Nk/lCCyDCBfNla@X7+f8bZEESp0-@ӯ}`"ozx6;!7͎ QMfO]A9O]I.ɬq@=b\2[8E tfDrB`NӝMGp4>^X)نqIldTiXS0 CI]  lY[0=R`P-JGy׿E|`[aV.=RZlUVxZބih=]Db\r TadAW_`oVei i؝ YP8}_>{AcRC ^E2&9LTXUYjBC&E'l 3LNAb Z0Z Q!oPQbxu!e/QRrk}Cv4*xȕr}2ʦAh4\MLW*k /,lA^u$4w|`X8w9J(9TA^V槥ÙfTɇ DV>!1EiPFB>@CHBrƹ]CPg(fB"Mˇ.6i{'5Vv]u>ޭjjW--R~/V4^^AE{"'\TB8tB/ ]_~PKCcedVmha/zPsiUЧoo7>3oI;/K}5 c3<2B \$P{1E:=!OMkc3'iC9!Rlw5. ϵ6u?xԽ}jt|8!)$8e+!OI qY\\-<4*UbJUC Eb4NOG$dJh-f[^]KI6#D}~]շ^k_m~>%{0:X{h&RWAd--+6Ϟ=;P2;kmQ;yciIRh՚ Do  ڙe{_tBN~?cjC S+fl\]`TV AvmSbq{l)[|I=4$KdgN p%'odBc#WM<;ml6!$>60BHڵmՐyu# HŚ?QO)mA jٲ<650oY}2UsAj"_ƗC4F:","NB¶EP OB~0YT.]7P )ˌed@]5g8|ǽ%O)p0a7ޚGŬX'fr@A\/tASn:T=*j3̸2^uq O \6lqV!ŐWB$Sv.\mrZ'ۊr뮅D R9Q(V i|m+[A,x]Cvg$$)ɑQJ.)Ej^e=dB[U!s*Frrq^@7r_;(H.uY?ZRJ1JCwj7^!3 \=E'XeCRzZ*D{,GqgP(0 ]D[w3\Re7M(EA@Kpsyb%v$gQib8тo4#KSI7Y^|Hm4TIc{o R1g MKś:~GzcKjmgW+g{ v8%aJ+*#u;(qHٽW"i$P\R6 ն 56@N;'|߬;qqL ף TJ2 IF ?ZǥwBغ؛$mk4G_`+ouqgݣusÃ0z#܂b͆)"DN%FL0ZH$&! ro}DɆRLB@$* r`6N0<{Y\L+lU֫ oUwsex_ /9+{p)  ;^'ACӪ|lS_T *)/ 6Ϝoȉ$-'Yl|{%q)2=A&1aF &5qfe+fg'ߖ]|\E#)Sd~@HрY4$$D M ̍頀( ,n @MR`HB W e2a6Pl;ݶͶ;kco8r!$eWe%䦭U0“8*JԊ4FB,5ݺAHᰈl6$t>}(jW%/d ETOS_$NiNk/t+uQIN8*BsWH->$"  "> Kpwo:ꓐϟ^eid+8!QWF r^73yPw)%D UV'~Ҏ;%Ѩ'?n;|(RHݢm y)H|A7NzG aKip=:c=˶03!'p/d\Nt/(k'Y" "u8/@R[/(<0'!ȘBL `wY>J"Ot&"Jm(*mz_J1ש#\/@i 4rIEuY?ddĄ $<_?ʁ+!pZnOndFXKoH)+D\w:U [3͌ac&y10siݻA3{xQ=s"\`3s? CS4|E}7!`W%hA?H~7,XX+ɫ_w1Di14_h M C&M͗'n~!Gv^:beRF,uD>a7d?ؽ Y6 +jer!?YF](6Rqpt\nyk[[}Cu+aF:ߍN"5Ls46 ˨m|$:h&CH1zΠXS`o *0z1>hw7u՝4^Z'?8z5>y+)lYG-!hAf9ZAZH_Dsr.JgxJÂMGu}.YTIp /+מU[_?v.;!0]ZB:'W[C2bs{{BQ/pʌH8 Gd.!y'8$$Ix^ryDYNN6/; ىx(@yӟPLH\G`y 9>~YRd4LnG%8& !?0_$FGl/$A"V3c361?I-! }]jWFoc>]C*#%ՅyŧJؕ8#Z!p(X`r2x"#" GCSI:\W{}yDGS{P_g7o/W?L`t!%(SR~vA"/q¨4 "s!0TPb:୬bP*QuMnx_JwrQa|x_ݭ񫅣Ffo8=̍ N߅]^wc<\ׁO@Y|8 !-,X#[S,A&;%z[\Ɠ' e\F-?LT–% yTF< !7\~w 2b+#@ȣsZGkq  [X6-d #!L&%fCFx7b!PCGgW"*i!֨pG./+5Js* ΂+Ry ,", BK ?jDˉ{lqgW't:݅ I\`u!Bf 1AXngv#D ;~ JBmlThmMl_ !xLzHhhK(5hbcHL;!'0Z,,} :'n549W;DҔ 6;: eBC)-fGHHHQ;!hZH\BѸa4@ J("; on/ \'JK(⮄~=tmdTBP{vy#4čиCH; u%Rj&}yP,H ;nbӇen:BBhF[GP p@[3`)whdb'J7 Iih@,nxwRpHbP׏ %b\}ń  ʷ!"Ye k _v4$#tK_Ji/6@ ☒ PQ`..J$ƌjˈȢe ڂZkYZ6fgXM5|CC'!pEt$V^R2AR("$%%~QY0i5G9k1M/,KwLNpC,[f:p 2zcH݀xT8 %z", ${25`1L'q3f8_3M ##ئѲPNHῊvE, %^b~7!FƬe-z2=|c3dR͛$lD9fYY(Fylae wf'Y˕=Kߨ!`2<{k2eaa+ⲁČK3LyǴK kS !'ٰq'd͝w[{HLJlj4 h-&ˤ4**ƖcZ {尖̦#K3?6r!D(Y^NH`*$g/6D(-ݛ;fwBbxф@9e|f P0l?e$$ðfͽaaא3iLQ&Npx /!) Ѓ%3.0CHX),P@(#(UDқFJZaŴMBHBA= :"7 p&Z=SFwmtG/_yP1V=hWy;܏s=dXg0rGy2 l@ H7'B+n%E7I.RH"SđFwݓ8G~O @\.U8FHP\#$F n`D!C=πHRAB ` A$;͂uc۩4:xe^!D>ˁy٣Rnm%fpJpJҜӵ,ߢg"R$n]У!-Jb}ob3qLc&L۪ȍWSU7gsNdh1qxYgw_}4c!H͌a}C b'@L7q Si2>cSfnt.8gC$2VDXŷ@unFSCePOIA,l\:8KB|ВSq-}V,- Wކ ШsX;,F}p@*M'{Hj^VCXV{'_}-Ex}2ZL6{a}`]5:ˎ/tGǦg,ƱmԬuM1Ch~\Fx: Oe.,wOT罳ً %Nk_Co? {cK{񽭉 /"oBa$2?y ]?@-ZEjRm|U̪.\K٧}Ŭ ؖMv_9RcYYPξb-uk%:rIʆN,S<]grYE"F&Ľ{K}M(6bםy$@ݯ_}lWfCyl$fr6E6>ܦ/o-Ɗh\!نюmh04̈́E;+K}3WSj狋t|Y?$:3]'X$v.x7IV'CD ;~ӹDV)TWQ?Wpg!$RCmĐZ.qÍ/JMarW7(TsKxs K@咴8uـ+ \2LҾ`k?*,A -Fzס D儒-- 韘2!9"7(aLr`R \ 5Io4;aeguHXFg:6~[WN+bLa,̎v羲P@S{ z|$7--aM$0 e9TLX<°9J@ثgpN;:sJ3F2(F64'$=ޥS_WYmxz}KKN?2ƢR,);GB^xC`Gc4 ǂa m6C=*w[+1TM=$ n!Z :FxtMx9ؖZ _" m9؆=$(ޭbǷo~}`18  MHx٨ b$&qH>YPh-!P %SУ[!iJȥбWVu`Iz@-[X ^^(w"A|׼Dh } y8V~d-QCqNV֍|bs~^¨M6f;C_OmS\xup2Ә|0O2NbgSo`-G z« xzm^'}p\kyV~}ƺNI+GG,u̪&Z^tZnenaپsRe-r\Edmb_+!,1=8660>+4 Y iwZFq}yԸcugNqhMmQBVLhh\^Ve.Fx*e>_G|D-/sG(cR8vWaze/˂x@kP%(Ê]R69,= sdkר+So <S8I(`#zJN q@^]wpo`e<4"tu\ڏ 4{K^KzyzsM76B^k.1.s>AHaC&$S[)gp\M4"0lBݏNp8ҿ`пg̥q"mW) ^9REܼJJU$r\b bGb3?목pRa|zk'!ǔ^͆?=4{cvW|Z$@y7P&U˃j.8+i>8V>D,tsJsr#Ub/r hnl-j Q.56!3M<;wD\w+(iICοS?duQ(O%uAB@7?(Ii}~swRu hK>oo)\  F9k{m'RxVI9 OuyV\GV<SJ~_yQ)S qzTREu3C~̫HP4b@h-.>{߿Y+ z5>8Q8kQPz-^?g1<> +0NOC:6ԧB$ }vO+z NL@oaqoIG;;CdT&8ԏq (-i:P2=_?IˠdPJ>Y9]B2c:(vbM;rRG zZeh"]ݟOzA(" <]J j^{{1-Ns|ʖTj՞؆ojO=UūFRHhNC}m9bK>f_Xe`Y\rKQR$Թ|{Ќо-? fF's0'dD>q- \' F[1al6f+M}ݡ{<;R@K54SښB(pGZy3hhU-um%hڌ,F]iW$s%][.XMs]Ke.vqbE

    h.}ʩ,(* T臕R=^ U+pD":{ EeJYɪTJk!tOoS g'] _P)K-P~T V+U\TTf,(mQtqgTtWsZ%@=2tZ[", 8xJ^VAA* P`k-t)Ed:4EemAJu4T:^Y1Q]-TIC:VvF)U*WU*@W9X17 JKS&4B%,ZAQکVYpGèVV)0 PTV;JFם-RQ""TLʔ>s8K<%@aJ`k[jK" /pNheDADRdPҢs $AsB" GGOq_\fQKmeN x&r @gUq%s_*DxYpB>|/w䀈;B*=h8$xg"s"-iA1D,:=@-a jX|z ]+Z NBn-'9p(΃#x@A,<,},9,Z,ǂt>߁;qkbs aZ@K5i, b0qݡׯ:zkU/N# ȍBI x*K޽hC)4!92Y#8~bXCywXV5(;ZD/&17Paz{>N< \Pρm6ȵFStW;̸kC믿]Pݎ,̆?N l XF5aע'su7F}4]Z#]-h/ݼ_͛7oekt ,l5V)ZSFފb畗h9 !4E (ikijq4كvz87tbQd樶ܮƱ=[9\W0$6C8x8K _47s]3CO8R9cLn((-ȫV+0dzSEJ[.Hy]_~'#66 d(xE9r鳏>쳋g?BhTSFKEG9ї_>8~<Sx9P"E4eSXpiBa2FWskre0Q!^oZxB WM&Qg"ЙMzeGFF:/LO;/Hp;N;Iga a&R0Ia K9ww;9;Z\E}")9lG/!0Yq=1U"e_ pSLG>]w%ذxtDsV¦sF4{MuL_+^CvD@KeHVsH} C!.W )b6YOÚ5WRisYķ)\42N |o+6uՃ'BPWj7W4ՁAK"294+'@ /qxUX @C3Թ@ǁ}>}` Fўc63OŎϛOܶc 3>fؚn+H cy1{YwfSFck;xS[ghyzQ@O# !R n~3iU{27Y͚CGGyЂ?4k|?Dw\&+$f|fB(1+,~N?dO&dDj\~.􀷶`spY7{+wa0fct:VB Gy3>>D-i!$̟Ϙ pG$ FX!0m{m;k#WHV: Mtmx!+_w/\[ZCGk4l|п\"O{;ro+6irqC\qFaf]z=c|o0K * HNYB]:!B"‡bX #@2\LrE*W̆dyôH =OUR}.˕k5F43 akSTeo frdX2S{e;[hy?8;~LC fUTnayzco1[{=29'rsnwIPb+.&!)\Ba#IL: DXK7H5W3$m>4e=cJcZ?iڿ}?{̇7@[ӧ&9?\NOTXrŒKf0JNXCIUzX4iPu^UQ åHȟ{ ~0Ty qGcTqvكqԃ渫/]Nu]}e8v;Sɤ9Gv H! `K2NPG)pT^'Hq1,B%v~((?u,U~B`[ކJExR/RoCO QiZCt'ՐI5II]b)]k=WC&+Heʒr]X3W@]bT9ÏX3f̄^x2CW3ؒ~n6Y?7Z6 66D 6lx ᷠιE3GrLHu+BPf)GHk1L-g1pee@!D'H;:b:-$f q{_i% & X 5ՙ(@X{B,qBENq&dsX 64\9=!T Ev0[v#h\ Ԍc[ Fs XيiT0dJe&ODRS'1GHvg\?"'ky AIY^N"H8!&kef-&^"U?QVBBm bLd6eXQ\MW=*H X\]—~X_,Y, #¤YL| ؚ,{+gx $PzB5IEA:|ĂgPsګ0lnin$$ - O&EY٤Hw !-2Br@K8Ͱ<ܛ7[Esr3!kmlkN^`2srv#NO1h[$b8?§aj9\9 Dv4,%~*|Pn))2gDF:(Y!dKNl,k՛h&m'|B$@q#ZY\r0O2*H^>4cX=Ku4yف:eIwR>T ,P_ ȬtmMV#7o~b+7!#Ѣhsdf44z8|Z30lj+/o;Êd^H`(.=f'5Ym-uKͳ?ĀMpC9kui#|~Jo }ІkA93ˆP{kw9=hNaȆvxrrRetzBpd8sx/:u 8A%&(ǞDܸ"']+N.^Lx B|,HJGΆd8 &"# Ǹb3#e'Rx m*V !&6'9.8ᗶ+f={s%ihk%O攰9$m]gUdǶFHL 1+q5'FHps'<#/CD]]"'R hSkrKUl!N\#1A;lJKŬ^L@k?&!\: ^Z}Ӷf!|s ض-(.&i]rxk:O2uK0orOPUU&9>.<UԳG.ʒe }!3׏Mg{Egpa,龸f !׆ѩ49.s L;76]BB CYȾU QhaL. 8tg! !v LBȔ44y^:a΄eo"lT5jW\z#\/.+sk(,~'H,xVy;7$ZC҃߰1mFUۣ&Chw{pB(*LG#=gϽۻvJwZfO"' BDhHdΰз{-t^''/znө۷:=.>=ΝՔ/ŋ}??R.K.קg|s\,p,!uVt[nx+[ 6̃?-gΰrH`Bdh(.Oΰc<<`LAHy00*,3Dn&UXl8Zkke2w~ ՐO~Po "oC07lGFSoR/ h%5 (96:H_Нv\XC7y{df{̜Q.u:BȱZ'cFYƫquv];W,W&I?0 /?o[Ϝxser1$"@2p n/3bEJ$/&(dzĘhC'8 5\#e2.{MFbqncfC h2CH%6~@42`L~&#V>+,23en3ek'\ĎM|dYY2Hb2y=@j>ijë 7Eǖ,jSS*4 ͢y]?2![W mvUmufi+gQ u7P,>fKďYHSO2")^&Cw!^ts=^nsklMyyǦu뛋!^>hزǘ#_+<}R)+s,VywWbY)d!1rPRRRer1|b 9a?SP?xf^~x:-(g]tUROxmsxzxzX Y8ٲaWCJdB͂m-.8fCbM*8<[q_L[ --RlI%9^w^qX>^g lYY(ލM7k,׺η4ՐX]a ^@18βn!Wojs1njfo/uDJ E fHiiQɘ1 , @  47I""Eh:^ftz=Zg95oUB :I[.$d%N4B_|ɹkB|h6'wO~tJti~zcɵOT7:UYa׫5&T< lzat˔cs'E 溡Ɂ{529tޫ[)p}Eo FykT'/"HtWqaC/ [rig(Li:lIpsNiCZp-7xlt2_o6-g㽓Ƨ꼼iiy31b^~r|pӮ1P7(1&]A4Gۻ#oA _^P;WBx6AOce<(݊UV[BfG FeE}XdAcwl| 6үz8٤{䌾uRdc.%-cW@D?7>5j[z}_{|)a-BR~J46g(xV.٣WLF%*Z!SY!:Uc\V;$3.HH'7v=-}xkV㍝y]ynjt{Ț?QS4]mRùڥlIsշsw1ul^SC )nDD{D{{DJ>)%MZIm4 D&(4> ]@K`m{6NB3Γ'' }I!+c8"(g);! O!~ D lpa<SZ{|fʄ2:'$Р(6L' YeHCFG֙Nu^Hܢ18*(A4a X:V,DhᑆZKg֐#BcP {A3hitF7T2\jEWE[_EGOQew6҉ ˕o Թ@V2q_v~\rE*v 4DI2lhjlgOcTǰCEˏ}QZ/e:]086xM/ 8Kt͵렍터vy1 oRB9&c81xgobF6pۢlO.ȅ ox_fՐ;W! a˥ ?`l^5 >HB( Ѵ{FUcPei =}M!ӏP?>CBAQ9P` e5$Զmt"2r[)k$iEn"򎄜 0 ׾IHC {kh2(hkRӆR|U:5?`4#}m YSN}pQ;!HkIi}A`of$G6i{:Lиq pTkB"]] Abh ~K ';N0Lx&<3[<2g7.Kס̰·r\e#UL6 vdB(Bl@Bх +iW9飸?Ɋ?[FvgwLz$ʹ$vrn|EmZQ!4@s)aFԕ8$!B0D%{TkNwPw4]=C`o?k >94#yPA2,/vx~֚yX  MO_uD0#p(C敯ӸȂk%Ӎ`NHROƂ@/X5pQDUϑ ~†,a@ֵW14 ϸtZavRw6y pNT#5AC^L// t1Infu/n0'ݽzZU MZZ4e9)$5孷RSSSRC7ӊ`GTN N,pB",t2 NI~&-xMD;*+KM?L4U/+6u1}** J5* 04EUYD=_6*J /oQӌL{q4l d]fa#YfR(-4hlNкGDEMpOOO5{JPzurM`PP)VBg _<~NHhߞrў PӢMmP-)*>rԦDw]\DNGcUis:4ā—[GP K熈 ™ 1`h*ad@5lpLLh7  \/ťIF`qal[HX~b4neOữW7ѴA P;ôi 'BJ(Bj?\Ej>^`sE)\n&[ dbĥdr!.2[o tKDd.M'_T}/%.C EĝGW^ 'FpHŧS~SWg\}BGj9]2R*|IP&Ṫe!؇3FԥF> qm#gd 8 Y<5a /H%+BNkӢGaZTG{LhHw8h>tyܕU3ln0NV,KWbTIh~h9pTvB&fG{GF#mnO~6OJ`ӝ!ځ'#'@k~4 BGNPIIhAӢ7BC83M+]5fcGdkMo+ {k:zU\pغ4(ޏ릧Q wK$>Q٠Q+k( EWE%CM:E7BCX[?!.v$[:sTղc\TQ^BGP ?eGK*_j&WٙىQT{(m0|#tk:Fi AIEjݰۡڈ^kB>ʹY~r gy7r8 ߱L,%pV'[֏R!5!m?E% ,vEEq4vBjk YDcMS+u{ 'K8CqPzo/G]9حϺPZ9y Qpc, ! Pvka!Ab:9~3 ?;`NƓs<#TdTS1T=ceOy!JQ\̦!`F`gdǑFPPR+PqԔ%ոBCe -xJUY?8!D@nd![c8 ̴2eޤx;tB 1"j\6 T8jԣ ׶“+TDҨÃn_\ICΏAƞn1&b-şpӘiꡬ?D) KUm QmsA7N5u[dz"2ո-ȡ B{7 | ' qgd-_hoRrt'!;b01&`t=cweL=h,o:as2]Mě#\XED@!jkWG\0Of(7Л)-ƱŴ0B݆ WAi ݧ=z0W7E=*[ȩs[UB2 kr2&*R*N>{4@:O~9O.$A7nZBxZ$."=q⅟ 5=zm&0V']C|!Zk%vXłY=`1w7WMW[3ZM9׫z֮"X@ ͔h%XnlzV*4PP\ ͉Y5@>0C8$<1qu;bҖV]˦ǭK k))/0w%Tu~/]}rC.U_)N $!ʆhH\[@Yn}FtEC!w&~>FTGb1sO9SoE݊i=<]`4+-WTMZUUƪY{^%ĒL0+ i8 /uKsaa6)7[lMJ sk̹%m $CZ CI`= 0& -8NnZ [)Q.tg}WG !!r[?Bk!.Zo3|4!%/"9λ\;r?#5 {`+x-%{ 6 ;!>Y::%` -En9Gl#pt>L5e{#DQӨZz)_~pBLkB0nVn̍A X{ D|<'3.p_{dE*m&xhw\4#aHRH?H7F \ё7C^*|6 nmXՆf ;*\ A&Њ]lq\mΆ-w=($t%f|ޏ6=> 9m%CVwf8KE (B$N"#0.øH.BTca͵9z͝@rvo7dsɺ'Eɢ{,`2 z!gkGV]F|VQވM$O2DNJ|q& /]qY Z`mE諲CqB|!]-,68#dx 0'%n'_hO? OS}&Bk0,/8 l=EPDz`E$|l.4 ة {D) #{E0SaoxaG#kRH~DH`,opt*hӐAQHncK`Ӌ( 0:fB>wCHkUÅ.}sj9HykXQPjMsFHJP=t搁Õ~|pj' BW(>|c,(R鋱Aj.[%B;r;gz:"C+!o핻|sɆUzh'sjԁO! YT+atK-& r]1u%Ps~`!ԫ8:V|%<&BnݶƖ z+5-C&Hc@G\>Z1SsT4{CΕx~]"X%bR(m[B^.Jsw務(kB[R˻z-cISpgVBR]9l{5ԜXқ"; ] K]Fr}wRWFo.lmIv;SΕ'F,AR]jHZIIOC.~pB\ yw޼ !`i#Bᗢ7,e/m>\y{`ӧO:Nr+(_Kv vEHdwUyXUPJ=6 4{!pS] 9sٶI^ BA0| Ou,r|D0~ű^E9y1.fx3ӧtɏGӌxcXu<,b0@2%gcCP, [},rM/ 'ShF6`@m$ zCpo=2Ȣch?& \\t:EE`49`a۷5Fc&  8=e#h|AA>4c7jmX <ЀY0-I>m΀A! Af8pJW c(ҫ!e3)N鳬^9}OC⭴$! "& M̌aHb|`hp|BoέNbv&{-\١l(r?7Jzؑ[.c2uAR$14?H;̥l$!,,.p-k{8=l(ر!;X{)B) ѠADfe#ŌR 2_Bn}]D`/\$h5Kq!=e!S|fBKuVs-` #&bA`Ɇ)M۵9W )8&6B e0_d-R^xan5#aHz!lrkUE 7S+*U>2*Ȭ//\άj?UZ~!Sw;!IJDkç.(8qbo` V`&׽"csrr록%^^71/& r!alw:͕$(̮!ɑb m%y@b'7o>-2/Õ{8r>|oy@W@Հ[q%v|w1F'Ƀ ߟۛLw1s׫K[ʼn%Lu_KSؘ*+Iߔ$߭Wt JVIC+eM&%wwklhim0wMvU<(0Kw;[ʻٹ1Z`,R%XB=ޙޯFҢ}S_Mޜގ}=&B^xKX_t]4: ̻ D8ri%!3b8lp$$H6>q 1Y |, LXLl@ޘ<%VUVwb$\ona_&"[Mv%!O mN l` 1HNҒFu4;#>"4X.Bhi~Tp |!vo6Gӌl?ښ84.*z(L%P/PoR%%L؀E!פּ%선N$ir !/E̗6 0o&\ Ixyx@ ̥[h'%qt*+F`Py2_`%luGI?VhD_I#|t䃫 g`ti[VB~`w}`/tG~F.72GfMOwfB6ȯLJ p/ yj+Ë + O7^ ;Dz! 6tpӊNŅ1|J=#V6:(|v ~ym0! l>Ǯ {F93E9m 9s.p:'6x#!^TmWI.ARW"V7]IQ̩۫hOv|@-az߫嗠 M{Biǟ؎'˼j+N 9{c B:۲QdF^@V@Hy97!""dPYfCZ204B|Ty[Wxhu(Pg+3@P1L`Db`{IԵG8&璯V9|>ڌLtqJ6g^3P5$RemגUV0ܯuMwfɬ,JIy al8L5/)q!B0&T:ZMINƅ`'uEn%7 qtFDd Q"pfJ<}K)}w$$´i2VFp"!qup<^Tti)G&ڦfM;sBQ;sGX%>?iFzO.%'NGnui8 #%Hb'$DYP!q#g''7i:|>\>tC6625z;b)eFr :1:su v>c0hl}aj'D,r)Io?+"9Aiġ ;R[3 𰬃&Eឞa c#ChQ:2VjߝQxJ-ZeHO%xF O6QR&G#SWzFWζ yGs}Õwts##<6zX8up|UcRC^u3 &1iȕK "/AT )^)P(3O7Czu\R˗yIWpvziɼ6 $D:G3p:oqTJ>,Npjy! Mp &ʑŰf]8k|t}c{YهC JQZ6L͡nt$POL*Ja%uR_:&eYjOq$9 S}jt)ΡŰXnSaRW?/HVGc)Ʉyed=\C _|"+|++HʗkK|V_EHg dcڸrdjtH4jTҊOS;C3 &Q\ZzPCj~l6ȩ;z9 ا_>Ss9.;:TcZr,gX Ivx?7hmɈ?׺=2W싈A#1nmm{U#8;,yj-m*x4[ ? j2Lk*蠦۱e0haZ^ ';$¹Dƙ@)j@n~ }ICMC]C%R=v_8!SoqG\ mqLz{^6D̽F ~}eY68\˾9Վ}ƈo: gQn8\th+>Y ēxz7άr[r@\N<8z|"7ލJni·gr.HZ]n붌^YGlňgqm3/ >|u2DxW,,SJXTK"?}>hl6ހ8q6cj6lGG$\2 -Lmr0R ʐ1D*KA"*%_Qb:C%rNs╀|xɀ`{~xh.Ə,hJX*v@RR B yCH1(*k$JR)hh 'AԁڤɅwahh>@Pzm7Jd24ڥD* Kt k(̤E99̢Dtc.l$P =K ? u0yxZ;Y}`U֜MM` ;%t& e8s.> ;} c˟ n‘l X|9΃M t j1 CM:t ft+:MV[\8 } Cdkaii)\NIy+fHʓ1# :H=< mUH R| `rW|q-&csAOR- H6\9X'_? QtS3)xU6ˣ9g& 3Ѕ:RʜWtz>&^<-_/ȹc)K*7ǵr&wD7P nwX<cqxeː={TwϔzkGYq<؈Q*6ˎȼ}[|8@}o? Gr-ofTG4{ Cɮ%)0NT<H%/{1L>,6h-.~s|çq)Ʀ9Gl+N42E{?V![!ha t)i<@5=-j۵1Hg›1gC %)viV8M(''gį0x sbzquAuͿ_{<\E_w691 ,bBFo~Qܜ+ Y|rlҾиY61XYѷNs{gq))\qTE| ,3pzUTʮ8C$ q@E"QZAI $CM281Ќxg (=841GJ?bg?ryWϻyu|^C_t_CEc-xa9*]]' T4 sD+>Ū ‰KA(E25EH,="2a`Š._M,pClcY}cc;ۗr<$3΀ܤ~݄+9LB~/ Dav{1G4IQsf߃sh~:y^!5gŃ(VŎ?)*8{aJq:@~,4iIpN\9hv2\[KP" Ie]s~Rs) p8!ÜZ-Q0cꨋ@xN#-]H;7[kX6M3Ka4~&x2PsstߋRrnp8G4DdN˽G!N@<@" ꂯbppks{s6KhdptyVa }Ķ}rM}nxMݵM]>ӷ23>mt 8T|Z\^*OṳmK^nîM9V'a.k=55:ֽ`1zZ_Tވm6_x<597[XuMxȂݟo=jئ.ff2\: d6I%T*H2D.f}@hyb֘Q3*HqVDaɦ<0|3T=xQٍϙPmDqvu"8:Q 2b |巿a|7م- RrLRxi2omeBȾ"җ@ ` c3,d 8s;~ ~~ V+y=x|R͹jqh%ˠiqM]|L[ Wi @ޠ|o@75^̿Ď/G,_X[$r\L8{@^s 3P!>!ϜԲ\B5o,}Xi1tʰc|1#~s]& ޿^tuu"aeC$XfK$l-WW50=r+l_f܅ +<%]) 0Ы+ݫ=De{kj4BPuu>~$ә"I}w KwdLѽ2TRW2k&tuKI[X֭.~ViҩL@**Ty7yj7+MmA(ڢ2]_hij FL)ST^"Uoє(j5j卡*x}P4|Z= L-.V*~SUqOA4I j0?Vi.ZPQD-2l7 !Ulnt% tmx߫#I?M5 5}1'4NY_1{ͤ!+63IK3#-)" {ki p Ee3Ȳ⢒8)KpFHP5u@(z/6#Mňr账_IMy e^S'*8{BjMN)7O7FD?OoHKoIJ7[?izO#Tg=o$++|O$t1zzpδFYEs[NgMO.^׋w;Ib]Mⴓ:\ ~):o~2(sJk$܉yF\ʓNJY׋Gnu!kEY"qS%zQ|;ϢGmψ_a 80XRAu;f4 яH$UCk`Aa@81N: pUIxQܪ!(aM)H˜UB [%$ɔpH 2!HԒPVt54d/#lu(m =b_߆/C 4x:$;Ĺ6gxz ~F秪 {y,>աnLeo&I&IͶMVSb݊no+ ȦG;S=oFB|mojUx׷|R!*E6]MMug?ߜWYKPC2_֌+ؚb:d{DkHPUsa?xR& Id_`$[N یU?:"#obYBN є7Fq?_qmNvʦ[# gjvfA]#z[H#kvF5坨U ܬ4Ѐ>[[=68`wmFM< :,[ܳQ[G؈eaQUtkzL-IoWrԤ{k6uw4*X*b5:Se7Twit4u׺t&Xgϒ&FeȊήؿr{޹9~nuYYm); Ϣwr h@rgwfaI@'f`'=0rs*ybkjrs"o|A 4btu*jqՑgq!G^g\lOE|.ľ7"z4 /-zH,ִ4e..OqOWک*CU}:MV4>}wuk4}}d5>R|H"8L]{^d[~->cg8?a_AmoAW˾sv"T9⇺l;{~}IT5s]> TG&];9PBC, Tpag[Lsî}d}._u9v|6{u۴>9[ =,zі_,RW2[v^膊5[ [Z~U jvk.j])o]@Y{> ̀ov[p,m[S&7g#+e<("&\>eֻҺj(&#:ߛ\B]#97防޵G* A"U\L.4ηγyݻ:o/%.:vcb;ZzcjؽŕQ; GF&o,^D01e,ÓjqbS1H z(BsaE!!x! :3 b ?D $FU@ヤb\F+",@ Gih#X(~!U sz_ݯ!q]('ABu uPƨT,q6 XXڙ\D-B TaEEca2 ZX̨Gy1@`̧> A.#Ar;=,:ɥP)@|ЈBH 0 N IFr&*ѾBx pq/ Z[@!ـ@ѓ7I<7pGB|}U`4J@N72^B"Ѐ +pe rYuD "E@ s/!B&ȥ%T=-URPUt䲪\cwk׉$y,J,&@ݍiG؝̝hNb`B&B4UْMxp qI̦BzƐho/eBVGv45~-T}xNS 56) Q "oC+H)Cn,uc!7@n\7 U*}7@*2 9 H ":D^_)YH㼅,*Zz*R13x@6sHk4;|Z%͞bk >5Z9cg,DT-aqj ;U/zUAT!Ъ~؇_>AV8Ne}ΩvOp_iB*[ѵRVJRinR+B l'nԊPDA*v--H[pxKX*f:S^a= ЖLr8*&9ٺ6:VgSiJ' ȇG&7F$'pN޹s]GjnRZ^OQYPeV{+ 3ʥ7;Jtw(#'@H+P ?XV Ymf^~Z] _?SWWgUByBc]Huu?&N %n9r[ٕ4ZniH%Aץy.l¨Ni})5⧀Hc޹ZsγkΪUWBϠPP^~i=.s^{Өg\ z HB H z:PX?CBRo`hҡV& l lv@}}Z^^ZˏN%@nh=Bԁ\M}zE[%ݹӾ~{V8&ؿR)S@L2$3t:4;OJ:Yd'yͳŔ7cQHf%"b# EEPgz_Ĥwow%@ ]>cU87kaj``K.&3٠%C%ʬJmY0u֖ 2ބSȦoþ~y#&9|ڟ.vpG]@eD{h{Ŭ2@Z|`ҶTz^\2=>&UC0eo<=t.G>?fݾݻ HD7Zc]wr,Ƹ:F.Y&IoQ5D~z5yŘ ^|GIXsi%؉dzmɼ " p7T@7ٺTm 79CU^O4Ub `6#PҴ~gc(2P1C;m I\s o\!]mm}s=E%ƛ3AfDi5&ޒ1ޕJ#87:(6T{2)fz,ӭ,%(2Ovv<gH<d i T=fP> 6<r>>Y =iЁĂd )ͣ2Di3^qCٴ۴ǥ-:iZ@H2.b")5(foaDx 2f8' L۶=^vR5 D_bdLh'uIr9$.yɈS_@(^KL6t`V@ 7Y6M&~VCɵy9&+6f%iQ Ġ@2n=KFzN0/[Y# 2H$1j3[ ܶ$DpCR `-~Jb!^vtavP/44V?GnGO^455iZ̴2/BLj656v&''VhZ v,dk(0Ao;vt(e UY: rsb:8VR ^fGY 6]'4mvsRכT*P!a2\r: ]'Ik:y\ֹUX5(t, 3+`y@%M͋N_&[u AJ{4q ww^h!(SamX|3F+Btk"%)մ/KO+^zr{73931L1=<=(q^PRe tn6+  !Oaq$Ukt@ؔnk*Uq' )[Yh=uz[ ^ I<ʝRvx98c4] fđ)u&6>HF(oJl.˯8"~q$̥~^wӓ L"kTYkfM@|u״Kq&i Vc*`#\rx8P;l:wGy{ m³L^~.(4,T4= beC#PJ,q7],4ɳ@&G5ƨuzݹ 'uvYa{n'd40t~}н~aϘ|U/U:@hJ u-ik جSI9;2ET$ek/Y\wy.Mr_=.-mm&<her.B vٱwK˽/ib ٵ5ETʽ}5 Dh& `fНBKVi'X,nq~vrXd^M3Ly7s]A}Qa=\?5N3L~ھ}OkE=u 5w?<{0Ay A=Y94e $|C2tTr.D'Lh1V~9KrޗKK*7$3{H5KQ}yhN1El)"öD"Nj #zSN :fKL0$q(1*8~q9_ue:l7HZi}]^UK`!V8kE{ ޸a2ntFeDžy++[ʟXȒhuƗBwҵvC[hh4vU†ǯL論Pnjt?[57 gzw"{iiAUz*uc 2F5# (~M|XpbQnto)IX*/A"0- \ o ཛྷBH!IH(WY7\]lC h;PB5͌1%! Gh!MM= PX,L1=n {C].U_D"B=Bծhk'c]zw"D*nN-A4*Xh%pІz(UהEghG"6* "TaYq?Jeb…}ӼG!,$_$*RU,GDaaS#.~ ,+"]awBMmZ`5UT50n!"D0CE,c$DB$ KSyEAn%WN0l'C /)sķ/ϑ}~QBwU7IENDB`awf-extended-4.2.0/images/thumbs/qt6.png000066400000000000000000001067301522325530000200630ustar00rootroot00000000000000PNG  IHDR`PLTE¶Ӫƻ[GȽbK؋]IĹʿ̾ɿUB¶óxUE˽ǹɻhN¸ƷŹՕaKzkА_JŵŻ»ǽԊ`Nȹ{›~ƿ{vm˜gQ{vrquqm됊ûǟܵ˰㜜ƿԥo_ϋ̒teokhźcQՁXFڛvd`]jfbQ;jUȇiZЏhXsN=zyfɿ~ഓՂbRURO^ZWr_zzzXAʽض]E۽КEFF|sjbA3t]O:42;pɐo`婎8qۜ8xx{ϵX9`xi06ȘUcRn':nIDATxy\SgODBa KE! KI "XEK l:;L N֩k;3YlXũ׹$|O99'/ F/Ivb͚5,_f f`` "c7f0f~mݚ/S={c1i`aotcbrbrϤ·xQ/1,GbLNN.^31v ?AFM2% m#i~iiɴ m 'nOBMLtObP &LtOtLI^HC#;ƻ'_ţCq8;&~k$fq'ⴗnN##O\}|q;;,sA 4fv1xbi;ȁKw ɴ1 xQ?POĀ Η{b"1i/I^mk0@}K]]xvcjwUn7 iGk=)s֨sOs1'WMyp!mחCDڠĆ=mwFG{_?0-DڨDžǣ7 G}c&#PAF7lͷ?oOLή|08ѾOW_߭zvy^o譚۽FF;pyBĸކAkmWFG6mhìvr! DD ;xGhv:qq9;ƹ@tCĆAg瘶{Ƿozn @A{jCo̸JCchw@PK*c`11&AA<~~ǨGDĀG@LǕ=<Phz *ojʢ2eezJCjvSC@Q7hcz*Հ DҪ MJقBRVt(NU劸T*K/-rQͭU?PWt55TyФ騮QPW8VsB-PِKף8ȫQݨ` 7UG( *ԊS5EhH/*S7 /ʲ5 :UX2:ڠ( g!5)+ kj4O>ƦH1A\6+AiY&ZSVT՝+IR^WPQyF4lLc*ںت6nA100\WPQ]IQxuEcEꂱ<^UC }M*Zt .MQyĠhP a]MUr`hG3W[]Ũ*?S Ֆ)\+ DB*(( ]aGѺ<9XNO g \ݺh4)肭t x<$oÕe~%d<آ\ya9b8)F`,|T|HŜ+&HNߎb̌34$IeBQXᇄH¦! \Q`=!(sO-FBCe`s8RY8._B:xXqtOH$ZDU֜A1`ԇL&M;7pɲ,D" d٘L%2 β# SP"3vw[DfA7 kVƒ>Qޤ'.X8[MOS1Qʓ( KKX֭KBX ΋Ut ÎUXҘgKsy\4Ġ).m(]  M`s*3Oד2%eq8gG̥h=P٫>?ޕ?z= EQz].[kEiڶ6: I[r5q2zsGw6hzAL* V֣ P_tc\F mժUTU2~~5k]H羂 ;wwA .[h4hM=4cPS8\bk΋daIX+aemCOOG5ԕŠ Ԁm ö}܆ A\k`P 0+H&aOYrTe2_dF-\ L$@d‹̶C`'z xQ2L(A<ߠs +`iS/ o%?L27ȴ:J1NƝgt L龹wX(K_LK{0;_6H6 Y1{|4 Yn0nk4en,CѸ H@lډ%Ts:Fe.[A,,t)&o8E8Ngb56w^,~#34ܽtY$,TG/Bp^`Ih: qJ=s`%H-f8$3Hީ/„āM7 ϳ,8P(X,}[ܾLW`Y{w~pg+=eҍl$QH: )8'/E&=FSGrב) eG/W:R|#^mىp8%E^$s!]=(h[)]RBaj $_Tp6|S۝R}}V;:x }vvm i=Nc/* 8'ێ;N wئ2ԎT÷*պN|oYjOWWypeN˽yn,8"O RLv)Z},VhGEr7&Jʇ's:gnu^B[kA| g|a_uvnvr,SuPg'iA5SIx/uqߪ=k-۾<Ƃw7ј~v߰|kSXF-nG]\'ui=zo_Gh_9sCl߸ )ę'<~zrc HvTxit#̹摞j"pm__WZM͒>r5󈶮n=vzzȎ ; ;.꺰i$tTkS(+S`x%8_|?YRkPh!4pnu\AC_BY(P;^!rrte$7H??shWQ4)q ~Bx1 BaY` nT  U)~P|3'Ldd&?E0t7+iNWAq( qzʊ}%VY)5թ*R^8lݴ!'ZY>KgZN>]Bt[\/9MRꊦdɍ-1ւ$ȣ_\mTn( n(/4 Z(Ƭ f Gv"H&zXLpI {yEO"IczW÷Ռ)jt uhJ)cj=H6Of; n'l|_<+Kփ%wDjN^9WfAC8Lld֋'ν>_;'%D5 fՎ`^bɲȌ4@;W6y_yy2Ny2ɌLc`M]bly@켼+Y^de]yʇ2 ؈D"]6"+A".ILt7^k$'¹71EE%闓 dYBsߣ MK3(|%FQ|S@B@+cA˷ Ys(^pj^ñ`o͂$w! ߾=nVN3]" ~fVvk>8!jORD/_6L=`w[j1W7(Wcp v8(x0.9prfKwLCo 90룏>K3>pޟ4v}v6,Hy6LcQТp9rIqI-Nv8~st $LkArwgԙJ47@a5u2F/yqN7DWFyd c.~$q!Xm&>3R>O$ZQOg:Ej,i'&6vZ˷΋此[C | BJBq`ڢ C`cy(La-x BǛ L G!L0k8j G@FؑPP̞-'i}f+AM{W[a> 0d{wBѓɯfu %>>lwf`c[77))BɌO_I">5>>2$Z!.tܺUE?wA\IneM. .: VK]LNt[ RXhdspvىl ߘ`&*UdJ7#x:dPkWg8䭍] "׮^ɆOI>du]~?# ps shNIYaZʋn?kqNoԡs`$&P 5(1贱oEPHX,uɜCx bؠ690}.Gg!r-I:$vaQw`S)=,3҄'\C}9]Y;0-Җ-8q 'uI AEd |29!T>˞@aI6@JE`-OB` &`F1c}YCdd{8̅bᗘ=dZD|jk&e-W3VK?5-xyH{d qNW;"EDG'aek縺9fz[ LhRwYTt9%6iE+c4u,}3>cj~l]&>7wU o8T/j7 hfOJ/A{ ý|v#r$X:[YfWdz&f_ 7/QV[Un\_pnN~,RaN%$FRee|՗wrٍcWms%l̂~8>20hģ+B{Hf8 `M1b3])9tøerwuysj\t2&@!1!BHC j#(/4PC%@î@H rJܔK l,+kv9,:k[9grbZ'~̼L.3CmTW.[Uae 4~}S8 3]T,Xn݋& mK}@qMIˊc)/Bݼ?f%nJ_G}IZݾ&vH&[[tߑl{~IaNYFN(dc-Ylx !ީc!)&m'`SX:F':T*Lquņ yןAh%:W+4m-:̀nzImVӶ1qvVs_$76-A ,5G,=Ԥm޷p$D^یE"vs}Q-qzBQ˱=ˊP eU5|P k ; ՔTHN[C]Y?2n :2p6% }|bY+ct>=JsItÞ={HGdIdҎ=0Yc}6xbI, Uqqnc11bLf|sd}nzM_m>A@+ 2WEtC! } e ,"O V Ek%&a@_Jf~N`z#N$"1e8y9cW0b"1LCq N?ٹ3Al)B{,hj1VZj,A5 >3.AJ+čM?=.Jr3E0w$56Os1̨L>O6C_=|x)q[ =F`lz{ BEqȅyXN@,6a5)yOApv|[J6JaJ4F8j)"%:,r(] 'Aʪ pa܅v,JPpd$>*$:}O!BKޤ~Ȟj!(1;β ƽXU)TtJ} @ }ލ7'{$"Ȱ8A<b$kMA@?IEH^~m_Hksb"BJlW_h!n?ӅqӯqtKFA1$W(&\EF=@ A". Hglic\\ە9%P,hHFMٮ?}wO55Cۯw=R*C97^mhSր =@ڙD$rd;,MPwꥀ&\A6Yi֑=x}hEd{wؗH~"KFwwhp?XNYEJaSedW֌Um>a\Q|uhhgtMU*q)<'D@?Oh%\ 'Q68ˊ&Bj<o"  H\TvQT*M;%; {dYi{${$:"})GdTL`_oLY'"E3]JaR',_~t\W~w kSח)^q2br0J^y'Y\B)2H(܁$ ߱;t'-! GxYq]]4?z|P{YHQZ^XXSٛ:} ^YYE ke\ω;ƕQrxAlCRrC>6fBb O?EE|p-|ǟ!WysyzrxT(ԫ윿|}Jir=H}""ӕ iZD"K( )N͎`%˶АO$%,Bd"`I)s<@Hgeodx{8p4Y\& fipR asU76@~R Ù0Q4ޙκCICqtw[S_@D;,N!"DTDDu:= ((K9EXX ݽpӲe6ٰF -4#uiMM8CЧ BU~@\Υ )Hl^n\ׂ"Ն 8$ 2FEܧ(t^oo|M)2\yiHY9X_ݾNF<ra}$_ 5e) 6W,t93q몀 I ǟ$* r 0Bpht:O@x*ؚFfo/)THxX EzzD)4a1Aڪ.,PݐR@TC*6tDLeh­)ӟEGxXQaTb֭[gEM@KT^2РoSO%U0 J'>Y9zܙʄpL k`5)"A~ qz y4}4"` LZl >7n$, _nSoAߟ$ >m09޹8^|rxy2ZHC>tW~G\Mz `yqW>}z9 '7N 5s0 h1Qb TcߦXbˋ#6?=߿ЍU,=J&=CՌY- 4\i\IItecv 'Iq0CD#`ﵶ&@ԉk\Y]uJvU~u >|x2:7q끔ylQ4Q8 Ib)mH7ѻR?Q[ B@S"xW"NLц9ۺU €n7dSA`TRx7ۧ `*P b"'#[{nfpDv0!σl"'/1mV$∂aGA>% ~`!fI|! $կ\45Bweؠ. 2-p.:T+;qXʝ:qS 8- TN3ft?: ɰJzP .bfbRgM J;˕¡gy_N"1"m ka4_WWk3Kum7u-IuQ^y\^^^]myKN-^_Q\; qœXUBRNG꓊Pɵ72w>=B;_V.Cˎ?QյhOj5M.мսXmlk)Qh7$ւ8QABT ehޘ|dY9+, P+kJoM&}\;q?z72̥kF:ޡ!2J2x Ҷ8uV{s$hdbI=LheRL[D_KOo :xcz 8f`+?UR~onNl+)?Ү3%~.vmj{jtG;1 ,DCw,ٝB)}1-'ĥؠᅐsb7X[1ɇ? ž !ᇿʗ]~p(hYP_+G64LT6X z_YCorI  ,;c+ ~e#b"ve>0⯬@"gEcY-?Bn K}J Bѣ?xlͲ%aYj>۩k>Z+R; mꊣ"똞;sABNcVtUb1Jw 6,:?I}= $ aX 8 :LoS?˧w`,~ FGG;7,+T::*3o~p/ΒƷyY:q wV{˒( )|ڝΑ' Q]XfEA4h@E r^m0* ͻe ac!(;:JF(+;:` \<\DQbgHd0GFL BDVw (VDaRSB9oC0^ֻoYnhrCs AvmjnN@mug @:皚Յ"333ټ pWDڷz VADDVyu" C>8<`n@>¶ K35Y קi Q'Y*3B$1Zr!M` S1!!ǀ?~ TQQ??Ͽ yN,74-KNy3HîȊf>sQ֬Qiu}^םhkQzRiP|vJy:6Ԗ/|;_sxv#[HEoKoWWWa$K"u'ʒʪڒVJ333ī^"W<%B$ɒ]A]]A26!A2GAv|Ŀ _emKӘVseP7khR%-_j^lOr:ᱥ_=N =|`d3I۹1KדOt4&koXLjűp9;wzQ x ϲ84G 1Mֈ<Y6zfvR3Qv_Kfc:}~zVMaG&opч *0od _ywz#&LH acF7q{PpBSaC^r/ر Us}| R||rS ,>rsC(#\il"ąwUEC *a03NIt\eQ 6W꠪Fm@,ԥoY++|XzxE, |:Y㾱ւ1U E$"CpSi{%2(=r+W4a-|`gg&tEtoIo~2!Bd)H\\}W7d KdO.Cu!x{ByH22 f2܅۽60NgIx)RŴ:I࢈+>py4 59vzY}R\][wIwiUThۖ[b/A+ r<_%STprDu~FSlvA?tW,j2r09斅<]5X~JI%D;i hZ*JrKK'*"מ5o]/)iV '[ MaHqْ¸P$>yQ+:UUɇ^,G*Ơ)g7 =<15; ,}R9_\/m֔Lԗ g:ܭ$";:ʲda2?$l7,y_+ߝAẗWagA>Ȏ=Y^~A QK'4:qm}~}>~Ruɻ/[&NK%% d"nX!SЬn~WKv&S?&I/G\G^W{sН89e['xϐ " ,6KL.d:][ 3 ~8A4?hV~~NXp  =qd!c7\(GP6,(Vޏ@MjE, Qv-bAq !4J|<226ʦ6u⛸p{po#33|&8S"^򣬢N_ w^n1YG> G@1_<|Bh@F$w- @ WykQHE-pr3A:_!"&G K_b3̝/BfRfE)-y}8{ⶡ:2Dluy6G$p[dH|,3^-fEpe)p49zR)F d"pi e6;1/P$l=ĆwXn #8XH\BhM-MW,1Ꝕ `!UN؜m=DNwW4 A.c~oOp]G{mZ`s 3-cu3+G! !q;9ih ("9.%Q+.;=[ܝV}ZzsVt1+~/.ԟ3JEUo`k!(;rT䠁lÖk2!EgwڞpvPB B)h(/:=I;DpϥzͥufbWTy-1fQV_WZ:ŗV`gNBYΨ9Y4p}y~Őz.?<K_$P (I;) ޵C N kEjBKVԚɲzy]ܱjnePBԤ}Qvr%yZ25cJdK X:Zp/%]Lo+I<|yvAr$ɉ;EEᨵݎXz_ quKa2mIs]uJfRiY]ztRt7w[A|^̊ @_}8C{,; ț8د"HѨ4|DX}{Et. ;A%A,d$oWKv /4AoW*-)?S]*=UZ~ Iϼ0di=O N.qapy C 9oW]U^8JE%BAEC`Dr}&f0sOx1e$#h-ՓIIT/! BП3S !E"I'$RD۹SO9B <)ڙAĝ*kU);Г9<( l,$,y|w, iyyRu&A)G1ňdӺop.ux Tf`Α:q!j)T9!ga4[O6T}Sn?ܭ4u!ef-HanIv>d U$I[j( | &$S~Naˮ 4犂ܼHkAX@VI'hqzSMWb* S bA)T8Dq(w؏&'H!ڷhV0=ǖP,cװkū}}#CصEP;::G/@h[UuZAfb5>'asPNH#!Nѯw`q-Hĵ;N`K]Ut>kiy{"94Յ Ow3ۇ Vzc[ GAp?#H?{HvY)שӸ݀pk,4n es2kAcƌ0l̺MLhcgcb{XAKDH=\)?hhV`jl3|1UoY*ij{ Gp& n E=~d0yCІvX Gݼ |}K;# @ N /uPO8{ߟߌOx0TU΍&!<Q [ Y^e]Q>u#Sԏ~]38=_#! }gN; PN Ŝ.sy3J$x0C]Sx=^"M^PN(;NXmH+}оIX@uAo^?ΓJ?edh ȱ6LW#N0 fZ?$b]<@u<λ@Zˢ~! g~VzK o'ْ7H*B! G/R< @u~x M/ވE_F /M'ޕpo'xφ |ϧ P )1@Ä8$S Kq: |I?kkk$I*;XMsy/Ae9Lx 0dڋ6@}NlLn%HOMs>|[@3Uo?qƜd:IGaC@MuV+I}K"uOZ2,9xaO~,:s8)ΙRCyDw{Nv{O|?U ku [cc$P,l Նb98:) ŮfB'!TUNB/%~c:r+6!vjZvs8iN˭sp z[~DÀe8w9ye7nX #gDp;ި'WNaxI=W#N\&CcI;ꗔ qcbӪʻciLs%ygMKf0raD @!?=bϕa5yE)E9'>{7GlWxy= o.Է֨' bCA2[/('ff}ViZ;fv5Ԫ=mp+*+s5'eg&(m诲PlVRkdah`g"/)b~g}(,@" IsI|w*#aiΟ Mw2Oy sy|ϻ cfĨoT5jZ\_oڱUVʑ[Ʋ(9-o=tͪFIκjU)]QjeT=k]R79$!týeŇo!teXS8'9[BR.+ѕn$xImPhᕗ@)\pseH~]: 8Y5ҢٶX/LSFͧ^2+iZ@!lOjVcyZZKK3#%ft.Yr%eo**J+J!p|q@LUٜ)a}{g` (xRq_ [asu+ voNLDs2i :̺ߪ[M.j-.߶ayQdXMmC+9fftI,NT+9O}dZX$ :(9J(OnN^\xwMG  5q"&'Cvva'6( ad)Bxݕ/4k@cd oERTc$B8cX zt$JB6s P '2]' DjcRC4nk W]'==7wVԻrq{LJ6yuC=N/6xH";7PJoӻi,h!™h%NZډ!$2wy6K 5jw Ho=!pr"B$i~CCIŗ7% i?< 1%75`z:FK®f!]w`wj%[0:)^HҴu s}+Ħu#q.W|xāEsI2TmZ•0rG%uFQw垨Z.aBB򷐐gM | ?|׭o(zB{|;'$#ԇл *C?q_TE42=쏽P L>]JHR;f-h{ijEG$<᪛< oAd$aW{KH~A7hC'SFRRODU{~w7r+ۉֆ'N݀>CND?/ј mGGt*Ϡ5bWSÌy[mt%wϯtPMqԪUY.qz{Y=iԬgq*1@?(V<У2 hYiYi?y|S _Ȳㄇ =@"gZVw77pBg'N"u@Q5i-M/ceZ,fkK4jc^_*̥6a©*_-Y3N` PIGLҕv,=ōY=[s'1o 3LxZB6;D̔81 Gqgt A}?eLb3>qqdR3mZt_j fVW_}ŻYYרmBY vFM̺ig[K|td9xӞ9ݻ)YQZۮHgO8J0^LO/TDBx f&=JN8RCKJ:iJs2 袜7xw:a;e7DBCLD V*ga9,{D}$JZHCεɒX+ qG 8'.9[:z; 9 sB8mPd >,!Ѐ'!'|^LS}=9L\0[Xad`]797~wIl!1H .OR߭\o=Ȧs7Ȟ>Ԟ77WW};w;y7i.Ɩ;TV in:@>bb}r)tQ +C`+CD;.!b8ω;B<["v[•]!h¡9haxܟ󷱪Ăl3261vȤʷmqʱ&' $T4LfTQ-l蠮 x9gJυLD;xao|ǜzARQ3m,K÷3ATUYä,m2,uK,,ddDʹ>2G?A0NC%? |/|ޜŵ>dZ4&eiRل$?!ydT^-Ow_鲬TӳMS.R32^;4Q:P ]g*z{;_<|5F&cdA[ƔU64m?İj[kUEٱ8^ժPG4Ѫ!4_FunyB{D {\E@6ދ Բ`OOղޯD%88C\Ry6a|p&果J*E'@ ~!tLNF8lNB@%@CgzHz03WjPAr^ } 姺!;&z+8-~Bi3P7Gc8v5zL qH#k9S}QVRVzW֔y4K/2qIKKԅ^ݮ\SzpNB<ۻl$6ABsݥu΍3$tP̞a#А!#8]QK=kD66o~阜{sCe C=0db+a]nOmCOުˡSCS8"ꌒIh0GɜQRATJN8Y9z#܊Dss-7lm=񹹹\nߝ FWQE,8D+ fDI% -D!\Ҳ\H^8uCKR@I|ٰsҖ RtPp˙耰-廱4&+TX@',C$ҰI:{eӑWh{LAP PN#"9BA1ӗkJB5RϮf@ +.2$$Vqc~cHݨ`ԍ۽o`?R-)ݢ[lwKKM! CERv!E\Q $05%t$bxFFi5I{9Y.38z,k-!^ГF.HRUSZcCcgS6F!8{@.NGb%?-~.ԩ5L%vwc%TcT4ETZ~Q ]nᴥ^PPV&cɫeʶ EdWUlY$$IɚH-'%O{Yk%٢NU$ySyyeRϿ+jiy:(K]VvV$]-K]|{u,u)SBr$x~6%@u۔VcK6]PVϑrZ* ]*n~TT~u[RΗ #ZvuvH]6Q{?:01qDFB8icb KBYb"ԁq,˦:u," y,Xꐺ:vt~:#}oU/W]}\ _:1\"1\& e(u )RC˖<]>4 oW|O' @Nb^Y#-{ =|= 8v<[t̓gVb;yڙ t"`:(>@L.Jȓճ@_A @uˆ9i׃ĈޤpS*'w uJu/5hJ#uO-u33=KzF6~RhM27:.C/gd glĢ'ic 8X 'ȖEkpf8ŢϦI0fblo(l.#ȣ5YʪGY@܈mpk<=XGr/:(8l^Q:&:#[8lR@cNrB ֪nΔH_X}.8fšcLW~7Dxs cN uh+•㤴 R8_$S7Dُw6 !?=1q,k-<봛uTs_]-NiEM ǘ[^_\7hѴ$UmDj7Տ`.?"H "kZQK53Oi̚ 51"65Y\>MkM)X2F>g-[;X׌Dހ2a4~M;ow4Mq MvMcXXC92,?`yT)O-b;'&V5WWQJOokaͶ1jb²LYu9ms4 1ԋmjXպzVؙif815e,zfBKc}qquDcN'tfè5&&a)75ݤ̨5Kq<1ժ&F+kֺ3a. Zv[[]EڲV])JoH*zjE 2yW &tWjYHZ;X /lQ|Q%i7;>٤yi/ Ky&4V2bfT5Ej%aIziN ѥE˪eji\1jY;Eш4U?802Ydq ylڙmj5i;3fRpĢLSE,>`QlB%% "ithM^dMn.7c%|^{ Yӆ`eS?l4ibiZf ЊMD.93gřϜ3UfϺN>"o /gO?˻ǻ?á_ut@nqWFpWC/,Y:.)@%@f &7#JҽZt eSJ&4EtEIE[W0aL+AphɤOa^4I/A~ jǤծH!Qo kDqQT']3Y.3i!|Le3ZX{([@b#%pJp #;#O# p"K?\`,C4ļHբ4QAH/HϫsՄep|PH ܺNG\^ C+34 iW7=}TxT} |>&c= O/Hu41>7}bџ. ;or_PǁXXTR@PH֯e}(v+R5WmK@Y /׫< ؅t2@ ȀiH3QW.4]K þl!M)벅\i.*@s8 Uu2Yce xҜRǪ~ ܿ (mm ;[$@Em8*J$"92Zת~HfҠm '.P@@Xu4 U+[h{UYW zF{yCMTF7хR%8@i0+uq6,ÆA$)TŠ ri+ّS3ALRE  aY*zW djpLKbZJN%; ʄ\˻ـP*' *U}41uj-G󵼭1 V R|C,Fih.6"kƩE>fAcP7u.W vv}v潫DǠMuv]ݻwV*<\,T.+-@RPHPЯڲrU5$ lн~GJH 3KK"SXF@LYfM&Y(3TӌԀur!q?&NܸU5k9K=U(76v]k/v7^R'_<~-oRiroVq[.gk۲Gx1[ ~O,KȬ%:f}g;f=dvAZ4:U6ȊPxrgƽܘC~?O۟_>o)o֣v ͩ!,Y{>Oo"FdI:%Sɰ'>NRVi'nKÁWҋnrsk1_z~ REheH= B;Nҷ?b|~ei(SRuES#17g=Hd)oKffr-_B ż;`xK0FœyAdKV;ft&}B߄'g1s> }WɃ3u@멓j4\v55{7nu}80"FXvS7\h7@`W`(9Tr;й `cqwl8ͤZh o6B7nj 7o ,S66&6R7}2`Xaq):")o2+0xR Ba@ޘ/~zcցH}pM;=iA@g;"hFnkμ''%3+TNLB i;FKOZkbI;5g;zZ[٥X-*tSrӵMw5ޯtCS`Q'TW/: D۪VmD@# ,bN+,:@4ݺ٦2:^8\*'([aiw?B W b" YY}ER}MD:Pk75p|Mzș So$̈i1)3*()ȈB U:➝z^ E$g d2`dPa29Hܵ;}Vb@H7^f@hJ -w \\ -ļQoq6'0Yˊ#Ƴx3o@Ԝ@{8 Bތ 8^?̿Ќ`eqP6i: coC/rXXYI2_:BiDiK!I DQbe#L rOīv9>~4g@ 3{ak׺dk#y{h: 틹m1U4b.!mO=zw<9.Yـ(ڱdgR8J"k\'T v>xV؏f;T\'B!*H -3b@0wRs{dO7ԸN //EݫHli2 c U碠jcǨCb΅5ͼ˪4+Y_1eͱ ;:i$P{G{TZf;i:ɔdRlR;E3n'̤݃eb[S9۠FPnι8je@F:S'1=ҶF6`HN,0tG4ŋ`` t Vni u|qqL{ ]Qe* 򆴣4Z.=[ʗz,ZQe5*fַ<;mcCybnoFmcsWKծ>f{{sfd_fGJ0 5]M}Uhh x/q3r⚺K/KьE3C*V~x:L9g~a#Ad6})U޽g0#^k,KMn. ;a<=!Q#:8 h6a6] g{s%i?>YȚ鼷%fHxO({^-GԥwMGrܞmJoBc(EcϻnL]χ@dTP pȚW(K4[jN y6`uhDbT[HkJp)=fwYz<َy֖lg=7byyY񓌬U> T,C)@'{J5~bIDwIU a4Z 4%ڭȾV)e֨rv`+g=\Xё\9 -YYeϓ}0O 94eչxU?qJ@-N9X+UIݪBǣ!Rժ s2̂YA#%8-z">v%ul7g.<A,Gœ@msUvӦs(!b7Qlܻm 42U16{b}cmo2i#k d6"5P^Q`@&*/đPU$V}D PFP7*߾$Ek.벏ptj\^IT.L'ȡT)GAś/_v;dIF n  ,ff. >\kABʡJ({e-ת9YJ߆/4@p4-B  I 4H;%siQDAr DBq/HpAlE3AAӉiRZV=&nwyr`u5/b( FyhQ $dZc4Cq"8x4o4!(I /h>*XѾ |!+ 5+wqi:zJ.F̒+}]İuL,n{mEs\~| ͡"i3>Cm/}I{w.?㏇2Ѹ9- !ϙIDdm[c;{7W.ӏG;q˽hHȥ> ݉n.aof=廷&ۛ1Bp߆}'19[Vˠ yi v-X?؉P;]$Ax19D$p"l [Gц*!UH/Y0q.fFȰ a~,i #\f)XHvpo&%]1K8nhF%0Q-ZL;kd)@i`IA"H4x{XQ h[i d"$dCµ FaƦ߀!7(M HBa1C "! OrJ׉K}@A?$H.$Jo}DK53!qIENDB`awf-extended-4.2.0/scripts/000077500000000000000000000000001522325530000155545ustar00rootroot00000000000000awf-extended-4.2.0/scripts/alpine/000077500000000000000000000000001522325530000170245ustar00rootroot00000000000000awf-extended-4.2.0/scripts/alpine/APKBUILD.gtk2000066400000000000000000000015401522325530000210100ustar00rootroot00000000000000pkgname=awf-gtk2 pkgver=4.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 2" url="https://github.com/luigifab/awf-extended" license="GPL-3.0-or-later" arch="all" depends="gtk+2.0 libnotify hicolor-icon-theme" makedepends="autoconf automake desktop-file-utils hicolor-icon-theme gcc gettext gtk+2.0-dev libnotify-dev" subpackages="$pkgname-doc" source="awf-extended-$pkgver.tar.gz::https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz" builddir="$srcdir/awf-extended-$pkgver" build() { autoreconf -fi ./configure \ --host=$CHOST \ --build=$CBUILD \ --prefix=/usr \ --mandir=/usr/share/man \ --enable-only-gtk2 make -s } package() { make install DESTDIR="$pkgdir" install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/README.md #install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }awf-extended-4.2.0/scripts/alpine/APKBUILD.gtk3000066400000000000000000000015401522325530000210110ustar00rootroot00000000000000pkgname=awf-gtk3 pkgver=4.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 3" url="https://github.com/luigifab/awf-extended" license="GPL-3.0-or-later" arch="all" depends="gtk+3.0 libnotify hicolor-icon-theme" makedepends="autoconf automake desktop-file-utils hicolor-icon-theme gcc gettext gtk+3.0-dev libnotify-dev" subpackages="$pkgname-doc" source="awf-extended-$pkgver.tar.gz::https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz" builddir="$srcdir/awf-extended-$pkgver" build() { autoreconf -fi ./configure \ --host=$CHOST \ --build=$CBUILD \ --prefix=/usr \ --mandir=/usr/share/man \ --enable-only-gtk3 make -s } package() { make install DESTDIR="$pkgdir" install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/README.md #install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }awf-extended-4.2.0/scripts/alpine/APKBUILD.gtk4000066400000000000000000000015361522325530000210170ustar00rootroot00000000000000pkgname=awf-gtk4 pkgver=4.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 4" url="https://github.com/luigifab/awf-extended" license="GPL-3.0-or-later" arch="all" depends="gtk4.0 libnotify hicolor-icon-theme" makedepends="autoconf automake desktop-file-utils hicolor-icon-theme gcc gettext gtk4.0-dev libnotify-dev" subpackages="$pkgname-doc" source="awf-extended-$pkgver.tar.gz::https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz" builddir="$srcdir/awf-extended-$pkgver" build() { autoreconf -fi ./configure \ --host=$CHOST \ --build=$CBUILD \ --prefix=/usr \ --mandir=/usr/share/man \ --enable-only-gtk4 make -s } package() { make install DESTDIR="$pkgdir" install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/README.md #install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }awf-extended-4.2.0/scripts/alpine/APKBUILD.gtk5000066400000000000000000000015361522325530000210200ustar00rootroot00000000000000pkgname=awf-gtk5 pkgver=4.2.0 pkgrel=1 pkgdesc="Theme preview application for GTK 5" url="https://github.com/luigifab/awf-extended" license="GPL-3.0-or-later" arch="all" depends="gtk5.0 libnotify hicolor-icon-theme" makedepends="autoconf automake desktop-file-utils hicolor-icon-theme gcc gettext gtk5.0-dev libnotify-dev" subpackages="$pkgname-doc" source="awf-extended-$pkgver.tar.gz::https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz" builddir="$srcdir/awf-extended-$pkgver" build() { autoreconf -fi ./configure \ --host=$CHOST \ --build=$CBUILD \ --prefix=/usr \ --mandir=/usr/share/man \ --enable-only-gtk5 make -s } package() { make install DESTDIR="$pkgdir" install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/README.md #install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }awf-extended-4.2.0/scripts/alpine/APKBUILD.qt5000066400000000000000000000015431522325530000206550ustar00rootroot00000000000000pkgname=awf-qt5 pkgver=4.2.0 pkgrel=1 pkgdesc="Theme preview application for Qt 5" url="https://github.com/luigifab/awf-extended" license="GPL-3.0-or-later" arch="all" depends="qt5-qtbase libnotify hicolor-icon-theme" makedepends="autoconf automake desktop-file-utils hicolor-icon-theme gcc gettext qt5-qtbase-dev libnotify-dev" subpackages="$pkgname-doc" source="awf-extended-$pkgver.tar.gz::https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz" builddir="$srcdir/awf-extended-$pkgver" build() { autoreconf -fi ./configure \ --host=$CHOST \ --build=$CBUILD \ --prefix=/usr \ --mandir=/usr/share/man \ --enable-only-qt5 make -s } package() { make install DESTDIR="$pkgdir" install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/README.md #install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }awf-extended-4.2.0/scripts/alpine/APKBUILD.qt6000066400000000000000000000015431522325530000206560ustar00rootroot00000000000000pkgname=awf-qt6 pkgver=4.2.0 pkgrel=1 pkgdesc="Theme preview application for Qt 6" url="https://github.com/luigifab/awf-extended" license="GPL-3.0-or-later" arch="all" depends="qt6-qtbase libnotify hicolor-icon-theme" makedepends="autoconf automake desktop-file-utils hicolor-icon-theme gcc gettext qt6-qtbase-dev libnotify-dev" subpackages="$pkgname-doc" source="awf-extended-$pkgver.tar.gz::https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz" builddir="$srcdir/awf-extended-$pkgver" build() { autoreconf -fi ./configure \ --host=$CHOST \ --build=$CBUILD \ --prefix=/usr \ --mandir=/usr/share/man \ --enable-only-qt6 make -s } package() { make install DESTDIR="$pkgdir" install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/README.md #install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }awf-extended-4.2.0/scripts/alpine/APKBUILD.qt7000066400000000000000000000015431522325530000206570ustar00rootroot00000000000000pkgname=awf-qt7 pkgver=4.2.0 pkgrel=1 pkgdesc="Theme preview application for Qt 7" url="https://github.com/luigifab/awf-extended" license="GPL-3.0-or-later" arch="all" depends="qt7-qtbase libnotify hicolor-icon-theme" makedepends="autoconf automake desktop-file-utils hicolor-icon-theme gcc gettext qt7-qtbase-dev libnotify-dev" subpackages="$pkgname-doc" source="awf-extended-$pkgver.tar.gz::https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz" builddir="$srcdir/awf-extended-$pkgver" build() { autoreconf -fi ./configure \ --host=$CHOST \ --build=$CBUILD \ --prefix=/usr \ --mandir=/usr/share/man \ --enable-only-qt7 make -s } package() { make install DESTDIR="$pkgdir" install -Dm644 README.md "$pkgdir"/usr/share/doc/$pkgname/README.md #install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }awf-extended-4.2.0/scripts/archlinux/000077500000000000000000000000001522325530000175515ustar00rootroot00000000000000awf-extended-4.2.0/scripts/archlinux/PKGBUILD.gtk2000066400000000000000000000014761522325530000215530ustar00rootroot00000000000000pkgname=awf-gtk2 pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 2' url='https://github.com/luigifab/awf-extended' license=('GPL3') arch=('x86_64') depends=('gtk2>=2.24.0' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk2') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk2 make -s } package() { cd "$pkgname-$pkgver" make install DESTDIR="$pkgdir" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.2.0/scripts/archlinux/PKGBUILD.gtk3000066400000000000000000000014661522325530000215530ustar00rootroot00000000000000pkgname=awf-gtk3 pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 3' url='https://github.com/luigifab/awf-extended' license=('GPL3') arch=('x86_64') depends=('gtk3' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk3') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk3 make -s } package() { cd "$pkgname-$pkgver" make install DESTDIR="$pkgdir" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.2.0/scripts/archlinux/PKGBUILD.gtk4000066400000000000000000000014661522325530000215540ustar00rootroot00000000000000pkgname=awf-gtk4 pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 4' url='https://github.com/luigifab/awf-extended' license=('GPL3') arch=('x86_64') depends=('gtk4' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk4') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk4 make -s } package() { cd "$pkgname-$pkgver" make install DESTDIR="$pkgdir" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.2.0/scripts/archlinux/PKGBUILD.gtk5000066400000000000000000000014661522325530000215550ustar00rootroot00000000000000pkgname=awf-gtk5 pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 5' url='https://github.com/luigifab/awf-extended' license=('GPL3') arch=('x86_64') depends=('gtk5' 'libnotify>=0.7.0' 'hicolor-icon-theme') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk5') conflicts=('awf-git') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-gtk5 make -s } package() { cd "$pkgname-$pkgver" make install DESTDIR="$pkgdir" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.2.0/scripts/archlinux/PKGBUILD.qt5000066400000000000000000000015351522325530000214110ustar00rootroot00000000000000pkgname=awf-qt5 pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for Qt 5' url='https://github.com/luigifab/awf-extended' license=('GPL3') arch=('x86_64') depends=('qt5-base' 'desktop-file-utils' 'hicolor-icon-theme') optdepends=('qt5-style-globalqss: for theme support') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt5-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-qt5 make -s } package() { cd "$pkgname-$pkgver" make install DESTDIR="$pkgdir" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.2.0/scripts/archlinux/PKGBUILD.qt6000066400000000000000000000015351522325530000214120ustar00rootroot00000000000000pkgname=awf-qt6 pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for Qt 6' url='https://github.com/luigifab/awf-extended' license=('GPL3') arch=('x86_64') depends=('qt6-base' 'desktop-file-utils' 'hicolor-icon-theme') optdepends=('qt6-style-globalqss: for theme support') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt6-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-qt6 make -s } package() { cd "$pkgname-$pkgver" make install DESTDIR="$pkgdir" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.2.0/scripts/archlinux/PKGBUILD.qt7000066400000000000000000000015351522325530000214130ustar00rootroot00000000000000pkgname=awf-qt7 pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for Qt 7' url='https://github.com/luigifab/awf-extended' license=('GPL3') arch=('x86_64') depends=('qt7-base' 'desktop-file-utils' 'hicolor-icon-theme') optdepends=('qt7-style-globalqss: for theme support') #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt7-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { mv "awf-extended-$pkgver" "$pkgname-$pkgver" } build() { cd "$pkgname-$pkgver" autoreconf -fi ./configure --enable-only-qt7 make -s } package() { cd "$pkgname-$pkgver" make install DESTDIR="$pkgdir" install -Dpm 644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" #install -Dpm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" }awf-extended-4.2.0/scripts/debian-gtk/000077500000000000000000000000001522325530000175615ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-gtk/awf-gtk2.install000066400000000000000000000004651522325530000226000ustar00rootroot00000000000000usr/bin/awf-gtk2 usr/share/applications/awf-gtk2.desktop usr/share/bash-completion/completions/awf-gtk2 usr/share/icons/hicolor/*/apps/awf-gtk2.* usr/share/locale/*/LC_MESSAGES/awf-gtk2.mo usr/share/man/man1/awf-gtk2.1 usr/share/man/*/man1/awf-gtk2.1 debian/fr.luigifab.awfgtk2.metainfo.xml usr/share/metainfoawf-extended-4.2.0/scripts/debian-gtk/awf-gtk3.install000066400000000000000000000004651522325530000226010ustar00rootroot00000000000000usr/bin/awf-gtk3 usr/share/applications/awf-gtk3.desktop usr/share/bash-completion/completions/awf-gtk3 usr/share/icons/hicolor/*/apps/awf-gtk3.* usr/share/locale/*/LC_MESSAGES/awf-gtk3.mo usr/share/man/man1/awf-gtk3.1 usr/share/man/*/man1/awf-gtk3.1 debian/fr.luigifab.awfgtk3.metainfo.xml usr/share/metainfoawf-extended-4.2.0/scripts/debian-gtk/awf-gtk4.install000066400000000000000000000004651522325530000226020ustar00rootroot00000000000000usr/bin/awf-gtk4 usr/share/applications/awf-gtk4.desktop usr/share/bash-completion/completions/awf-gtk4 usr/share/icons/hicolor/*/apps/awf-gtk4.* usr/share/locale/*/LC_MESSAGES/awf-gtk4.mo usr/share/man/man1/awf-gtk4.1 usr/share/man/*/man1/awf-gtk4.1 debian/fr.luigifab.awfgtk4.metainfo.xml usr/share/metainfoawf-extended-4.2.0/scripts/debian-gtk/awf-gtk5.install000066400000000000000000000004651522325530000226030ustar00rootroot00000000000000usr/bin/awf-gtk5 usr/share/applications/awf-gtk5.desktop usr/share/bash-completion/completions/awf-gtk5 usr/share/icons/hicolor/*/apps/awf-gtk5.* usr/share/locale/*/LC_MESSAGES/awf-gtk5.mo usr/share/man/man1/awf-gtk5.1 usr/share/man/*/man1/awf-gtk5.1 debian/fr.luigifab.awfgtk5.metainfo.xml usr/share/metainfoawf-extended-4.2.0/scripts/debian-gtk/changelog000066400000000000000000000002411522325530000214300ustar00rootroot00000000000000awf-gtk (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #959434) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-gtk/changelog.debian000066400000000000000000000026771522325530000226700ustar00rootroot00000000000000awf-gtk (4.2.0-1) unstable; urgency=low * New upstream release * Use make install -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-gtk (4.1.0-1) unstable; urgency=low * New upstream release * Standards-Version: 4.7.4 (routine-update) * d/watch: update to version 5 -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk (4.0.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Tue, 03 Mar 2026 20:00:00 +0000 awf-gtk (3.2.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (2.9.0-1) unstable; urgency=low * New upstream release * Fix building error with GLIB 2.83 and/or with GCC 15 (Closes: #1096351) -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.0-1) unstable; urgency=low * New upstream release -- Fabrice Creuzot Fri, 02 Feb 2024 20:00:00 +0000 awf-gtk (2.6.0-1) experimental; urgency=low * New upstream release -- Fabrice Creuzot Thu, 09 Sep 2021 20:00:00 +0000 awf-gtk (2.5.0-5) experimental; urgency=low * Initial Debian package release (Closes: #959434) -- Fabrice Creuzot Wed, 07 Jul 2021 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-gtk/changelog.mx000066400000000000000000000023361522325530000220620ustar00rootroot00000000000000awf-gtk (4.2.0-1) mx; urgency=low * New upstream release * Use make install -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-gtk (4.1.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-gtk (4.0.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Tue, 03 Mar 2026 20:00:00 +0000 awf-gtk (3.2.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 10 Oct 2025 20:00:00 +0000 awf-gtk (3.1.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Fri, 08 Aug 2025 20:00:00 +0000 awf-gtk (3.0.0-1) mx; urgency=low * New upstream release * Add support for CSD window * Add --enable-only-gtkx and --disable-gtkx options -- Fabrice Creuzot Mon, 05 May 2025 20:00:00 +0000 awf-gtk (2.9.0-1) mx; urgency=low * New upstream release * Fix building error with GLIB 2.83 and/or with GCC 15 -- Fabrice Creuzot Fri, 04 Apr 2025 20:00:00 +0000 awf-gtk (2.8.1-1) mx; urgency=low * Initial MX Linux package release -- Fabrice Creuzot Mon, 03 Mar 2025 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-gtk/control.debian000066400000000000000000000021361522325530000224070ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev, libgtk-3-dev, libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 4. awf-extended-4.2.0/scripts/debian-gtk/control.mxo000066400000000000000000000022221522325530000217640ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0), libgtk-3-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 2. Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. awf-extended-4.2.0/scripts/debian-gtk/control.ubuntu000066400000000000000000000030241522325530000225040ustar00rootroot00000000000000Source: awf-gtk Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0), libgtk-3-dev, libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 2. Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 4. awf-extended-4.2.0/scripts/debian-gtk/copyright000066400000000000000000000047041522325530000215210ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: https://github.com/luigifab/awf-extended Upstream-Contact: Fabrice Creuzot Files: * Copyright: 2011-2016 Valère Monseur (valr) 2020-2026 Fabrice Creuzot (luigifab) License: GPL-3+ Files: */fr.luigifab.*.metainfo.xml */awf-*.bash */slackware/* Copyright: 2020-2026 Fabrice Creuzot (luigifab) License: Expat License: GPL-3+ 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 package 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 . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Comment: This license also known as "MIT" or "MIT X11" however FSF consider "MIT" labelling ambiguous and copyright-format specification recommend to mark such license as "Expat". awf-extended-4.2.0/scripts/debian-gtk/deb.sh000066400000000000000000000124471522325530000206570ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk2.0-dev libgtk-3-dev libgtk-4-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu and MX Linux for serie in experimental unstable stonking resolute questing noble jammy mx25 mx23 mx21; do printf "\n\n#################################################################### $serie ## awf-gtk\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-gtk rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-gtk/* debian/ rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ]; then mv debian/control.ubuntu debian/control # yes elif [ $serie = "unstable" ]; then mv debian/control.debian debian/control sed -i -e 's/ --disable-gtk5/ --disable-gtk2 --disable-gtk5/g' debian/rules elif [ $serie = "mx21" ]; then mv debian/control.mxo debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*gtk5* elif [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*gtk4* debian/*gtk5* elif [ $serie = "experimental" ]; then mv debian/changelog.debian debian/changelog rm debian/*gtk5* elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog rm debian/*gtk2* debian/*gtk5* sed -i '/Priority:/d;/Rules-Requires-Root:/d' debian/control else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog rm debian/*gtk5* fi rm -f debian/*.mx debian/*.mxo debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-gtk_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-gtk*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-gtk*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-gtk/fr.luigifab.awfgtk2.metainfo.xml000066400000000000000000000013021522325530000256340ustar00rootroot00000000000000 fr.luigifab.awfgtk2 awf-gtk2 GPL-3.0-or-later MIT

    Theme preview application for GTK 2

    A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

    https://github.com/luigifab/awf-extended awf-gtk2.desktop awf-gtk2 awf-extended-4.2.0/scripts/debian-gtk/fr.luigifab.awfgtk3.metainfo.xml000066400000000000000000000013021522325530000256350ustar00rootroot00000000000000 fr.luigifab.awfgtk3 awf-gtk3 GPL-3.0-or-later MIT Theme preview application for GTK 3

    A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

    https://github.com/luigifab/awf-extended awf-gtk3.desktop awf-gtk3
    awf-extended-4.2.0/scripts/debian-gtk/fr.luigifab.awfgtk4.metainfo.xml000066400000000000000000000013021522325530000256360ustar00rootroot00000000000000 fr.luigifab.awfgtk4 awf-gtk4 GPL-3.0-or-later MIT Theme preview application for GTK 4

    A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

    https://github.com/luigifab/awf-extended awf-gtk4.desktop awf-gtk4
    awf-extended-4.2.0/scripts/debian-gtk/fr.luigifab.awfgtk5.metainfo.xml000066400000000000000000000013021522325530000256370ustar00rootroot00000000000000 fr.luigifab.awfgtk5 awf-gtk5 GPL-3.0-or-later MIT Theme preview application for GTK 5

    A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

    https://github.com/luigifab/awf-extended awf-gtk5.desktop awf-gtk5
    awf-extended-4.2.0/scripts/debian-gtk/metadata000066400000000000000000000006301522325530000212630ustar00rootroot00000000000000Archive: GitHub Bug-Database: https://github.com/luigifab/awf-extended/issues/ Bug-Submit: https://github.com/luigifab/awf-extended/issues/new Documentation: https://github.com/luigifab/awf-extended Repository: https://github.com/luigifab/awf-extended.git Repository-Browse: https://github.com/luigifab/awf-extended Screenshots: https://raw.githubusercontent.com/luigifab/awf-extended/levelup/images/gtk3.pngawf-extended-4.2.0/scripts/debian-gtk/rules000066400000000000000000000002731522325530000206400ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --disable-gtk5 --disable-qt5 --disable-qt6 --disable-qt7 awf-extended-4.2.0/scripts/debian-gtk/watch000066400000000000000000000001131522325530000206050ustar00rootroot00000000000000Version: 5 Template: GitHub Dist: https://github.com/luigifab/awf-extendedawf-extended-4.2.0/scripts/debian-gtk2/000077500000000000000000000000001522325530000176435ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-gtk2/changelog000066400000000000000000000002421522325530000215130ustar00rootroot00000000000000awf-gtk2 (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #959434) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-gtk2/control000066400000000000000000000014211522325530000212440ustar00rootroot00000000000000Source: awf-gtk2 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk2.0-dev (>= 2.24.0) Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk2 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 2 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 2. awf-extended-4.2.0/scripts/debian-gtk2/deb.sh000066400000000000000000000115441522325530000207360ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk2.0-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" engine="gtk2" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental stonking resolute questing noble jammy focal bionic xenial trusty; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${engine}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-gtk2/rules000066400000000000000000000003421522325530000207170ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk2 override_dh_auto_install: # 1 binary dh_auto_install --destdir=debian/tmp awf-extended-4.2.0/scripts/debian-gtk3/000077500000000000000000000000001522325530000176445ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-gtk3/changelog000066400000000000000000000002421522325530000215140ustar00rootroot00000000000000awf-gtk3 (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #959434) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-gtk3/control000066400000000000000000000014041522325530000212460ustar00rootroot00000000000000Source: awf-gtk3 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-3-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk3 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 3 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 3. awf-extended-4.2.0/scripts/debian-gtk3/deb.sh000066400000000000000000000115431522325530000207360ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-3-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" engine="gtk3" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental stonking resolute questing noble jammy focal bionic xenial trusty; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${engine}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-gtk3/rules000066400000000000000000000003421522325530000207200ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk3 override_dh_auto_install: # 1 binary dh_auto_install --destdir=debian/tmp awf-extended-4.2.0/scripts/debian-gtk4/000077500000000000000000000000001522325530000176455ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-gtk4/changelog000066400000000000000000000002421522325530000215150ustar00rootroot00000000000000awf-gtk4 (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #959434) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-gtk4/control000066400000000000000000000014041522325530000212470ustar00rootroot00000000000000Source: awf-gtk4 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-4-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 4 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 4. awf-extended-4.2.0/scripts/debian-gtk4/deb.sh000066400000000000000000000115101522325530000207310ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-4-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" engine="gtk4" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental stonking resolute questing noble jammy; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${engine}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-gtk4/rules000066400000000000000000000003421522325530000207210ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk4 override_dh_auto_install: # 1 binary dh_auto_install --destdir=debian/tmp awf-extended-4.2.0/scripts/debian-gtk5/000077500000000000000000000000001522325530000176465ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-gtk5/changelog000066400000000000000000000002421522325530000215160ustar00rootroot00000000000000awf-gtk5 (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #959434) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-gtk5/control000066400000000000000000000014041522325530000212500ustar00rootroot00000000000000Source: awf-gtk5 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, libnotify-dev (>= 0.7.0), libgtk-5-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-gtk5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Replaces: awf Description: theme preview application for GTK 5 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for GTK 5. awf-extended-4.2.0/scripts/debian-gtk5/deb.sh000066400000000000000000000114521522325530000207370ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool libnotify-dev libgtk-5-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" engine="gtk5" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental stonking; do printf "\n\n################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-gtk/*$engine* scripts/debian-gtk/copyright scripts/debian-gtk/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${engine}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-gtk5/rules000066400000000000000000000003421522325530000207220ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --enable-only-gtk5 override_dh_auto_install: # 1 binary dh_auto_install --destdir=debian/tmp awf-extended-4.2.0/scripts/debian-qt/000077500000000000000000000000001522325530000174205ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-qt/awf-qt5.install000066400000000000000000000004551522325530000223000ustar00rootroot00000000000000usr/bin/awf-qt5 usr/share/applications/awf-qt5.desktop usr/share/bash-completion/completions/awf-qt5 usr/share/icons/hicolor/*/apps/awf-qt5.* usr/share/locale/*/LC_MESSAGES/awf-qt5.mo usr/share/man/man1/awf-qt5.1 usr/share/man/*/man1/awf-qt5.1 debian/fr.luigifab.awfqt5.metainfo.xml usr/share/metainfoawf-extended-4.2.0/scripts/debian-qt/awf-qt6.install000066400000000000000000000004551522325530000223010ustar00rootroot00000000000000usr/bin/awf-qt6 usr/share/applications/awf-qt6.desktop usr/share/bash-completion/completions/awf-qt6 usr/share/icons/hicolor/*/apps/awf-qt6.* usr/share/locale/*/LC_MESSAGES/awf-qt6.mo usr/share/man/man1/awf-qt6.1 usr/share/man/*/man1/awf-qt6.1 debian/fr.luigifab.awfqt6.metainfo.xml usr/share/metainfoawf-extended-4.2.0/scripts/debian-qt/awf-qt7.install000066400000000000000000000004551522325530000223020ustar00rootroot00000000000000usr/bin/awf-qt7 usr/share/applications/awf-qt7.desktop usr/share/bash-completion/completions/awf-qt7 usr/share/icons/hicolor/*/apps/awf-qt7.* usr/share/locale/*/LC_MESSAGES/awf-qt7.mo usr/share/man/man1/awf-qt7.1 usr/share/man/*/man1/awf-qt7.1 debian/fr.luigifab.awfqt7.metainfo.xml usr/share/metainfoawf-extended-4.2.0/scripts/debian-qt/changelog000066400000000000000000000002411522325530000212670ustar00rootroot00000000000000awf-qt (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #1129265) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-qt/changelog.mx000066400000000000000000000006571522325530000217250ustar00rootroot00000000000000awf-qt (4.2.0-1) mx; urgency=low * New upstream release * Use make install -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-qt (4.1.0-1) mx; urgency=low * New upstream release -- Fabrice Creuzot Tue, 05 May 2026 20:00:00 +0000 awf-qt (4.0.0-1) mx; urgency=low * Initial MX Linux package release -- Fabrice Creuzot Tue, 03 Mar 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-qt/control000066400000000000000000000024701522325530000210260ustar00rootroot00000000000000Source: awf-qt Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qtbase5-dev, qt6-base-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt5-gtk-platformtheme, qt5-style-globalqss, qttranslations5-l10n, libqt5svg5 Suggests: libnotify-bin Description: theme preview application for Qt 5 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 5. Package: awf-qt6 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt6-gtk-platformtheme, qt6-style-globalqss, qt6-translations-l10n, qt6-svg-plugins Suggests: libnotify-bin Description: theme preview application for Qt 6 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 6. awf-extended-4.2.0/scripts/debian-qt/control.mxo000066400000000000000000000015201522325530000216230ustar00rootroot00000000000000Source: awf-qt Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qtbase5-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt5-gtk-platformtheme, qt5-style-globalqss, qttranslations5-l10n, libqt5svg5 Suggests: libnotify-bin Description: theme preview application for Qt 5 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 5. awf-extended-4.2.0/scripts/debian-qt/copyright000066400000000000000000000047041522325530000213600ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: https://github.com/luigifab/awf-extended Upstream-Contact: Fabrice Creuzot Files: * Copyright: 2011-2016 Valère Monseur (valr) 2020-2026 Fabrice Creuzot (luigifab) License: GPL-3+ Files: */fr.luigifab.*.metainfo.xml */awf-*.bash */slackware/* Copyright: 2020-2026 Fabrice Creuzot (luigifab) License: Expat License: GPL-3+ 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 package 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 . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Comment: This license also known as "MIT" or "MIT X11" however FSF consider "MIT" labelling ambiguous and copyright-format specification recommend to mark such license as "Expat". awf-extended-4.2.0/scripts/debian-qt/deb.sh000066400000000000000000000125121522325530000205070ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qtbase5-dev qt6-base-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu and MX Linux for serie in experimental stonking resolute questing noble mx25 mx23 mx21; do printf "\n\n##################################################################### $serie ## awf-qt\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-qt rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-qt/* debian/ rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ]; then mv debian/control.ubuntu debian/control # yes elif [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then mv debian/control.mxo debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control sed -i -e 's/ --disable-qt7/ --disable-qt6 --disable-qt7/g' debian/rules printf '\noverride_dh_auto_install:\n\tdh_auto_install --destdir=debian/tmp\n' >> debian/rules # 1 binary elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*qt7* elif [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog rm debian/*qt6* debian/*qt7* elif [ $serie = "experimental" ]; then mv debian/changelog.debian debian/changelog rm debian/*qt7* elif [ $serie = "unstable" ]; then mv debian/changelog.debian debian/changelog sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i '/Priority:/d;/Rules-Requires-Root:/d' debian/control rm debian/*qt7* else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog rm debian/*qt7* fi rm -f debian/*.mx debian/*.mxo debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-qt_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-qt*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-qt*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-qt/fr.luigifab.awfqt5.metainfo.xml000066400000000000000000000012751522325530000253460ustar00rootroot00000000000000 fr.luigifab.awfqt5 awf-qt5 GPL-3.0-or-later MIT Theme preview application for Qt 5

    A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

    https://github.com/luigifab/awf-extended awf-qt5.desktop awf-qt5
    awf-extended-4.2.0/scripts/debian-qt/fr.luigifab.awfqt6.metainfo.xml000066400000000000000000000012751522325530000253470ustar00rootroot00000000000000 fr.luigifab.awfqt6 awf-qt6 GPL-3.0-or-later MIT Theme preview application for Qt 6

    A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

    https://github.com/luigifab/awf-extended awf-qt6.desktop awf-qt6
    awf-extended-4.2.0/scripts/debian-qt/fr.luigifab.awfqt7.metainfo.xml000066400000000000000000000012751522325530000253500ustar00rootroot00000000000000 fr.luigifab.awfqt7 awf-qt7 GPL-3.0-or-later MIT Theme preview application for Qt 7

    A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.

    https://github.com/luigifab/awf-extended awf-qt7.desktop awf-qt7
    awf-extended-4.2.0/scripts/debian-qt/metadata000066400000000000000000000006271522325530000211300ustar00rootroot00000000000000Archive: GitHub Bug-Database: https://github.com/luigifab/awf-extended/issues/ Bug-Submit: https://github.com/luigifab/awf-extended/issues/new Documentation: https://github.com/luigifab/awf-extended Repository: https://github.com/luigifab/awf-extended.git Repository-Browse: https://github.com/luigifab/awf-extended Screenshots: https://raw.githubusercontent.com/luigifab/awf-extended/levelup/images/qt5.pngawf-extended-4.2.0/scripts/debian-qt/rules000066400000000000000000000003141522325530000204730ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --disable-gtk2 --disable-gtk3 --disable-gtk4 --disable-gtk5 --disable-qt7 awf-extended-4.2.0/scripts/debian-qt5/000077500000000000000000000000001522325530000175055ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-qt5/changelog000066400000000000000000000002421522325530000213550ustar00rootroot00000000000000awf-qt5 (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #1129265) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-qt5/control000066400000000000000000000015211522325530000211070ustar00rootroot00000000000000Source: awf-qt5 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qtbase5-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt5 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt5-gtk-platformtheme, qt5-style-globalqss, qttranslations5-l10n, libqt5svg5 Suggests: libnotify-bin Description: theme preview application for Qt 5 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 5. awf-extended-4.2.0/scripts/debian-qt5/deb.sh000066400000000000000000000115031522325530000205730ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qtbase5-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" engine="qt5" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental stonking resolute questing noble jammy focal bionic; do printf "\n\n#################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-qt/*$engine* scripts/debian-qt/copyright scripts/debian-qt/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${engine}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-qt5/rules000066400000000000000000000003411522325530000205600ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --enable-only-qt5 override_dh_auto_install: # 1 binary dh_auto_install --destdir=debian/tmp awf-extended-4.2.0/scripts/debian-qt6/000077500000000000000000000000001522325530000175065ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-qt6/changelog000066400000000000000000000002421522325530000213560ustar00rootroot00000000000000awf-qt6 (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #1129265) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-qt6/control000066400000000000000000000015301522325530000211100ustar00rootroot00000000000000Source: awf-qt6 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qt6-base-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt6 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt6-gtk-platformtheme, qt6-style-globalqss, qt6-translations-l10n, qt6-svg-plugins Suggests: libnotify-bin Description: theme preview application for Qt 6 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 6. awf-extended-4.2.0/scripts/debian-qt6/deb.sh000066400000000000000000000114611522325530000205770ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qt6-base-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" engine="qt6" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental stonking resolute questing noble; do printf "\n\n#################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-qt/*$engine* scripts/debian-qt/copyright scripts/debian-qt/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${engine}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-qt6/rules000066400000000000000000000003411522325530000205610ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --enable-only-qt6 override_dh_auto_install: # 1 binary dh_auto_install --destdir=debian/tmp awf-extended-4.2.0/scripts/debian-qt7/000077500000000000000000000000001522325530000175075ustar00rootroot00000000000000awf-extended-4.2.0/scripts/debian-qt7/changelog000066400000000000000000000002421522325530000213570ustar00rootroot00000000000000awf-qt7 (4.2.0-1) experimental; urgency=low * New upstream release (Closes: #1129265) -- Fabrice Creuzot Tue, 07 Jul 2026 20:00:00 +0000 awf-extended-4.2.0/scripts/debian-qt7/control000066400000000000000000000015301522325530000211110ustar00rootroot00000000000000Source: awf-qt7 Section: x11 Priority: optional Maintainer: Fabrice Creuzot Build-Depends: debhelper-compat (= 13), bash-completion, pkgconf, qt7-base-dev Rules-Requires-Root: no Standards-Version: 4.7.4 Homepage: https://github.com/luigifab/awf-extended Vcs-Browser: https://github.com/luigifab/awf-extended Vcs-Git: https://github.com/luigifab/awf-extended.git Package: awf-qt7 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: qt7-gtk-platformtheme, qt7-style-globalqss, qt7-translations-l10n, qt7-svg-plugins Suggests: libnotify-bin Description: theme preview application for Qt 7 A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. . This package provides the program for Qt 7. awf-extended-4.2.0/scripts/debian-qt7/deb.sh000066400000000000000000000114311522325530000205750ustar00rootroot00000000000000#!/bin/bash # Debian: sudo apt install dpkg-dev devscripts build-essential dh-make dh-autoreconf intltool qt7-base-dev cd "$(dirname "$0")" || exit 1 export DH_QUIET=1 version="4.2.0" engine="qt7" mkdir -p builder rm -rf builder/* # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. fi # create packages for Debian and Ubuntu for serie in experimental stonking; do printf "\n\n#################################################################### $serie ## awf-$engine\n\n" if [ $serie = "experimental" ]; then # copy for Ubuntu cp -a builder/awf-extended-$version/ builder/awf-extended-$version+src/ cd builder/awf-extended-$version/ elif [ $serie = "unstable" ]; then rm -rf builder/awf-extended-$version/ cp -a builder/awf-extended-$version+src/ builder/awf-extended-$version/ cd builder/awf-extended-$version/ else cp -a builder/awf-extended-$version+src/ builder/awf-extended-$serie-$version/ cd builder/awf-extended-$serie-$version/ fi dh_make -s -y -f ../awf-extended-$version.tar.gz -p awf-$engine rm -rf debian/*/*ex debian/*ex debian/*EX debian/README* debian/*doc* cp scripts/debian-$engine/* debian/ cp scripts/debian-qt/*$engine* scripts/debian-qt/copyright scripts/debian-qt/metadata debian/ head -n -1 debian/*$engine*.install > debian/install ; rm debian/awf-$engine.install rm -f debian/*.sh mkdir debian/upstream ; mv debian/metadata debian/upstream/metadata # debhelper: experimental:13 focal/mx21:12 bionic:9 xenial:9 trusty:9 if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then mv debian/control.debian debian/control elif [ $serie = "mx21" ]; then sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "focal" ]; then mv debian/control.ubuntu debian/control sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 12)/g' debian/control elif [ $serie = "bionic" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper-compat (= 9), dh-autoreconf/g' debian/control elif [ $serie = "xenial" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_update_autotools_config:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat elif [ $serie = "trusty" ]; then mv debian/control.ubuntu debian/control sed -i 's/dh $@/dh $@ --with autotools_dev,autoreconf/g' debian/rules sed -i 's/execute_before_dh_install:/override_dh_autotools-dev_updateconfig:/g' debian/rules sed -i 's/debhelper-compat (= 13)/debhelper (>= 9), autotools-dev, dh-autoreconf/g' debian/control sed -i ':a;N;$!ba;s/Rules-Requires-Root: no\n//g' debian/control echo 9 > debian/compat else mv debian/control.ubuntu debian/control fi if [ $serie = "mx25" ] || [ $serie = "mx23" ] || [ $serie = "mx21" ]; then mv debian/changelog.mx debian/changelog sed -i 's/-1) /-1~'$serie'+1) /' debian/changelog sed -i 's/ experimental; / mx; /' debian/changelog sed -i 's/ unstable; / mx; /' debian/changelog elif [ $serie = "experimental" ] || [ $serie = "unstable" ]; then sed -i 's/ experimental; / '$serie'; /g' debian/changelog mv debian/changelog.debian debian/changelog else sed -i 's/ experimental; / '$serie'; /g' debian/changelog sed -i 's/-1) /-1+'$serie') /' debian/changelog fi rm -f debian/*.mx debian/*.debian debian/*.ubuntu if [ $serie = "experimental" ]; then echo "===================== build package ($serie) ==" dpkg-buildpackage -us -uc echo "=========================== lintian ($serie) ==" lintian -EviIL +pedantic ../awf-${engine}_$version*.changes rm ../*amd64.changes fi echo "============== build source package ($serie) ==" rm -f debian/*.sh dpkg-buildpackage -us -uc -ui -d -S cd .. if [ $serie = "experimental" ] || [ $serie = "unstable" ]; then echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version-*_source.changes else echo "=========================== debsign ($serie) ==" debsign awf-$engine*$version*$serie*source.changes fi cd .. done printf "\n\n" rm builder/*dbgsym*deb ls -dlth "$PWD"/builder/*.deb "$PWD"/builder/*.changes printf "\n" rm -rf builder/*/awf-extended-4.2.0/scripts/debian-qt7/rules000066400000000000000000000003411522325530000205620ustar00rootroot00000000000000#!/usr/bin/make -f export DEB_BUILD_MAINT_OPTIONS = hardening=+all %: dh $@ override_dh_auto_configure: dh_auto_configure -- --enable-only-qt7 override_dh_auto_install: # 1 binary dh_auto_install --destdir=debian/tmp awf-extended-4.2.0/scripts/fedora/000077500000000000000000000000001522325530000170145ustar00rootroot00000000000000awf-extended-4.2.0/scripts/fedora/awf-gtk2.spec000066400000000000000000000061651522325530000213220ustar00rootroot00000000000000Name: awf-gtk2 Version: 4.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 2.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - New upstream release * Wed Nov 11 2020 Fabrice Creuzot - 2.2.0-1 - Initial Fedora package release (Closes: rhbz#1893321) awf-extended-4.2.0/scripts/fedora/awf-gtk3.spec000066400000000000000000000061411522325530000213150ustar00rootroot00000000000000Name: awf-gtk3 Version: 4.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 3.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - New upstream release * Wed Nov 11 2020 Fabrice Creuzot - 2.2.0-1 - Initial Fedora package release (Closes: rhbz#1893323) awf-extended-4.2.0/scripts/fedora/awf-gtk4.spec000066400000000000000000000060151522325530000213160ustar00rootroot00000000000000Name: awf-gtk4 Version: 4.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 4.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial Fedora package release (Closes: rhbz#1946092) awf-extended-4.2.0/scripts/fedora/awf-gtk5.spec000066400000000000000000000033651522325530000213240ustar00rootroot00000000000000Name: awf-gtk5 Version: 4.2.0 Release: 1%{?dist} Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - Initial Fedora package release (Closes: rhbz#...) awf-extended-4.2.0/scripts/fedora/awf-qt5.spec000066400000000000000000000037771522325530000211720ustar00rootroot00000000000000Name: awf-qt5 Version: 4.2.0 Release: 1%{?dist} Summary: Theme preview application for Qt 5 Summary(fr): Application d'aperçu de thème pour Qt 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt5-qtbase-devel Requires: qt5-qtbase Requires: hicolor-icon-theme #ecommends: qt5-gtk-platformtheme = qt5-qtbase-gui Recommends: qt5-globalqss Recommends: qt5-qtsvg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial Fedora package release (Closes: rhbz#2428546) awf-extended-4.2.0/scripts/fedora/awf-qt6.spec000066400000000000000000000037771522325530000211730ustar00rootroot00000000000000Name: awf-qt6 Version: 4.2.0 Release: 1%{?dist} Summary: Theme preview application for Qt 6 Summary(fr): Application d'aperçu de thème pour Qt 6 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt6-qtbase-devel Requires: qt6-qtbase Requires: hicolor-icon-theme #ecommends: qt6-gtk-platformtheme = qt6-qtbase-gui Recommends: qt6-globalqss Recommends: qt6-qtsvg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 6.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 6.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt6 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial Fedora package release (Closes: rhbz#2428546) awf-extended-4.2.0/scripts/fedora/awf-qt7.spec000066400000000000000000000035011522325530000211550ustar00rootroot00000000000000Name: awf-qt7 Version: 4.2.0 Release: 1%{?dist} Summary: Theme preview application for Qt 7 Summary(fr): Application d'aperçu de thème pour Qt 7 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt7-qtbase-devel Requires: qt7-qtbase Requires: hicolor-icon-theme #ecommends: qt7-gtk-platformtheme = qt7-qtbase-gui Recommends: qt7-globalqss Recommends: qt7-qtsvg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 7.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 7.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt7 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{bash_completions_dir}/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - Initial Fedora package release (Closes: rhbz#...) awf-extended-4.2.0/scripts/fedora/rpm-gtk2.sh000066400000000000000000000035251522325530000210200ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk2-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" || exit 1 version="4.2.0" engine="gtk2" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.2.0/scripts/fedora/rpm-gtk3.sh000066400000000000000000000035251522325530000210210ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk3-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" || exit 1 version="4.2.0" engine="gtk3" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.2.0/scripts/fedora/rpm-gtk4.sh000066400000000000000000000035251522325530000210220ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk4-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" || exit 1 version="4.2.0" engine="gtk4" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.2.0/scripts/fedora/rpm-gtk5.sh000066400000000000000000000035251522325530000210230ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake libnotify-devel gtk5-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" || exit 1 version="4.2.0" engine="gtk5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################# awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.2.0/scripts/fedora/rpm-qt5.sh000066400000000000000000000035131522325530000206570ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake qt5-qtbase-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" || exit 1 version="4.2.0" engine="qt5" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.2.0/scripts/fedora/rpm-qt6.sh000066400000000000000000000035131522325530000206600ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake qt6-qtbase-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" || exit 1 version="4.2.0" engine="qt6" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.2.0/scripts/fedora/rpm-qt7.sh000066400000000000000000000035131522325530000206610ustar00rootroot00000000000000#!/bin/bash # Fedora: sudo dnf install rpmdevtools rpm-sign autoconf automake qt7-qtbase-devel desktop-file-utils aspell-fr enchant2-aspell # Fedora: configure: error: C compiler cannot create executables? remove and reinstall glibc-devel gcc cd "$(dirname "$0")" || exit 1 version="4.2.0" engine="qt7" mkdir -p builder ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} find builder/* ! -name "*$version*.rpm" ! -name "*$version*.gz" -exec rm -rf {} + 2>/dev/null rm -f ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz # copy to a tmp directory if [ true ]; then rm awf-$engine.spec wget https://raw.githubusercontent.com/luigifab/awf-extended/refs/tags/v$version/scripts/fedora/awf-$engine.spec chmod 644 awf-$engine.spec spectool -g -R awf-$engine.spec else temp=awf-extended-$version mkdir /tmp/$temp cp -r ../../* /tmp/$temp/ rm -rf /tmp/$temp/scripts/*/builder/ mv /tmp/$temp builder/ cp /usr/share/common-licenses/GPL*3 builder/$temp/LICENSE cd builder/ tar czf $temp.tar.gz $temp cd .. cp builder/$temp.tar.gz ~/rpmbuild/SOURCES/awf-$engine-$version.tar.gz chmod 644 awf-$engine.spec fi # create package (rpm sign https://access.redhat.com/articles/3359321) printf "\n############################################################################## awf-$engine\n" rpmbuild --quiet -ba awf-$engine.spec echo "=================================== rpm-sign ==" rpm --addsign ~/rpmbuild/RPMS/*/awf-$engine*.rpm rpm --addsign ~/rpmbuild/SRPMS/awf-$engine*.rpm mv ~/rpmbuild/RPMS/*/awf-$engine*.rpm builder/ mv ~/rpmbuild/SRPMS/awf-$engine*.rpm builder/ rpm --checksig builder/awf-$engine*.rpm echo "=================================== rpm-lint ==" rpmlint awf-$engine.spec builder/awf-$engine*.rpm | grep awf echo "===============================================" rm builder/*debug*rpm ls -dlth "$PWD"/builder/*.rpm # cleanup rm -rf builder/*/awf-extended-4.2.0/scripts/mageia/000077500000000000000000000000001522325530000167775ustar00rootroot00000000000000awf-extended-4.2.0/scripts/mageia/awf-gtk2.spec000066400000000000000000000050301522325530000212730ustar00rootroot00000000000000Name: awf-gtk2 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 2.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1.mga - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.2.0/scripts/mageia/awf-gtk3.spec000066400000000000000000000050041522325530000212750ustar00rootroot00000000000000Name: awf-gtk3 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 3.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1.mga - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.2.0/scripts/mageia/awf-gtk4.spec000066400000000000000000000050041522325530000212760ustar00rootroot00000000000000Name: awf-gtk4 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 4.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1.mga - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1.mga - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1.mga - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1.mga - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1.mga - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.2.0/scripts/mageia/awf-gtk5.spec000066400000000000000000000034371522325530000213070ustar00rootroot00000000000000Name: awf-gtk5 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.2.0/scripts/mageia/awf-qt5.spec000066400000000000000000000040151522325530000211370ustar00rootroot00000000000000Name: awf-qt5 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for Qt 5 Summary(fr): Application d'aperçu de thème pour Qt 5 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt5-devel Requires: qt5 Requires: hicolor-icon-theme #ecommends: qt5-gtk-platformtheme ? Recommends: qt5-globalqss Recommends: qtsvg5 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1.mga - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.2.0/scripts/mageia/awf-qt6.spec000066400000000000000000000040151522325530000211400ustar00rootroot00000000000000Name: awf-qt6 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for Qt 6 Summary(fr): Application d'aperçu de thème pour Qt 6 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt6-devel Requires: qt6 Requires: hicolor-icon-theme #ecommends: qt6-gtk-platformtheme ? Recommends: qt6-globalqss Recommends: qtsvg6 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 6.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 6.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt6 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1.mga - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1.mga - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.2.0/scripts/mageia/awf-qt7.spec000066400000000000000000000035131522325530000211430ustar00rootroot00000000000000Name: awf-qt7 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for Qt 7 Summary(fr): Application d'aperçu de thème pour Qt 7 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt7-devel Requires: qt7 Requires: hicolor-icon-theme #ecommends: qt7-gtk-platformtheme ? Recommends: qt7-globalqss Recommends: qtsvg7 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 7.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 7.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt7 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1.mga - Initial Mageia package release (Closes: mbz#32827) awf-extended-4.2.0/scripts/msys2/000077500000000000000000000000001522325530000166315ustar00rootroot00000000000000awf-extended-4.2.0/scripts/msys2/PKGBUILD.gtk2000066400000000000000000000030211522325530000206170ustar00rootroot00000000000000_realname=awf-gtk2 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 2 (mingw-w64)' url='https://github.com/luigifab/awf-extended' license=('spdx:GPL-3.0-or-later') arch=('any') depends=("${MINGW_PACKAGE_PREFIX}-gtk2>=2.24.0" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-gettext-tools") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk2') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk2 make -s cd .. } package() { cd "build-${MSYSTEM}" make install DESTDIR="$pkgdir" #install -Dpm 644 "../$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" install -Dpm 644 "../$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.2.0/scripts/msys2/PKGBUILD.gtk3000066400000000000000000000030111522325530000206170ustar00rootroot00000000000000_realname=awf-gtk3 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 3 (mingw-w64)' url='https://github.com/luigifab/awf-extended' license=('spdx:GPL-3.0-or-later') arch=('any') depends=("${MINGW_PACKAGE_PREFIX}-gtk3" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-gettext-tools") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk3') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk3 make -s cd .. } package() { cd "build-${MSYSTEM}" make install DESTDIR="$pkgdir" #install -Dpm 644 "../$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" install -Dpm 644 "../$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.2.0/scripts/msys2/PKGBUILD.gtk4000066400000000000000000000030111522325530000206200ustar00rootroot00000000000000_realname=awf-gtk4 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 4 (mingw-w64)' url='https://github.com/luigifab/awf-extended' license=('spdx:GPL-3.0-or-later') arch=('any') depends=("${MINGW_PACKAGE_PREFIX}-gtk4" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-gettext-tools") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk4') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk4 make -s cd .. } package() { cd "build-${MSYSTEM}" make install DESTDIR="$pkgdir" #install -Dpm 644 "../$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" install -Dpm 644 "../$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.2.0/scripts/msys2/PKGBUILD.gtk5000066400000000000000000000030111522325530000206210ustar00rootroot00000000000000_realname=awf-gtk5 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for GTK 5 (mingw-w64)' url='https://github.com/luigifab/awf-extended' license=('spdx:GPL-3.0-or-later') arch=('any') depends=("${MINGW_PACKAGE_PREFIX}-gtk5" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-gettext-tools") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'gtk5') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-gtk5 make -s cd .. } package() { cd "build-${MSYSTEM}" make install DESTDIR="$pkgdir" #install -Dpm 644 "../$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" install -Dpm 644 "../$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.2.0/scripts/msys2/PKGBUILD.qt5000066400000000000000000000030661522325530000204720ustar00rootroot00000000000000_realname=awf-qt5 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for Qt 5 (mingw-w64)' url='https://github.com/luigifab/awf-extended' license=('spdx:GPL-3.0-or-later') arch=('any') depends=("${MINGW_PACKAGE_PREFIX}-qt5-base" "${MINGW_PACKAGE_PREFIX}-qt5-winextras" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-gettext-tools") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt5-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-qt5 make -s cd .. } package() { cd "build-${MSYSTEM}" make install DESTDIR="$pkgdir" #install -Dpm 644 "../$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" install -Dpm 644 "../$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.2.0/scripts/msys2/PKGBUILD.qt6000066400000000000000000000030161522325530000204660ustar00rootroot00000000000000_realname=awf-qt6 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for Qt 6 (mingw-w64)' url='https://github.com/luigifab/awf-extended' license=('spdx:GPL-3.0-or-later') arch=('any') depends=("${MINGW_PACKAGE_PREFIX}-qt6-base" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-gettext-tools") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt6-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-qt6 make -s cd .. } package() { cd "build-${MSYSTEM}" make install DESTDIR="$pkgdir" #install -Dpm 644 "../$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" install -Dpm 644 "../$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.2.0/scripts/msys2/PKGBUILD.qt7000066400000000000000000000030161522325530000204670ustar00rootroot00000000000000_realname=awf-qt7 binname=$_realname mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') msys2_repository_url='https://github.com/luigifab/awf-extended' pkgbase=mingw-w64-$_realname pkgname=${MINGW_PACKAGE_PREFIX}-$_realname pkgver=4.2.0 pkgrel=1 pkgdesc='Theme preview application for Qt 7 (mingw-w64)' url='https://github.com/luigifab/awf-extended' license=('spdx:GPL-3.0-or-later') arch=('any') depends=("${MINGW_PACKAGE_PREFIX}-qt7-base" "${MINGW_PACKAGE_PREFIX}-hicolor-icon-theme") makedepends=("${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-gettext-tools") #makedepends=('autoconf' 'automake' 'desktop-file-utils' 'gcc' 'gettext' 'qt7-base') source=("https://github.com/luigifab/awf-extended/archive/v${pkgver}/awf-extended-${pkgver}.tar.gz") sha256sums=('SKIP') prepare() { if [ -d "awf-extended-$pkgver" ]; then mv "awf-extended-$pkgver" "$pkgname-$pkgver" fi } build() { cd "$pkgname-$pkgver" autoreconf -fi cd .. mkdir -p "build-${MSYSTEM}" && cd "build-${MSYSTEM}" ../$pkgname-$pkgver/configure LDFLAGS="-mwindows" \ --prefix="${MINGW_PREFIX}" \ --build="${MINGW_CHOST}" \ --host="${MINGW_CHOST}" \ --target="${MINGW_CHOST}" \ --enable-only-qt7 make -s cd .. } package() { cd "build-${MSYSTEM}" make install DESTDIR="$pkgdir" #install -Dpm 644 "../$pkgname-$pkgver/README.md" "$pkgdir/${MINGW_PREFIX}/share/doc/$binname/README.md" install -Dpm 644 "../$pkgname-$pkgver/LICENSE" "$pkgdir/${MINGW_PREFIX}/share/licenses/$binname/LICENSE" }awf-extended-4.2.0/scripts/opensuse/000077500000000000000000000000001522325530000174155ustar00rootroot00000000000000awf-extended-4.2.0/scripts/opensuse/awf-gtk2.spec000066400000000000000000000060241522325530000217150ustar00rootroot00000000000000Name: awf-gtk2 Version: 4.2.0 Release: 0 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 2.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 2.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-4.2.0/scripts/opensuse/awf-gtk3.spec000066400000000000000000000060001522325530000217100ustar00rootroot00000000000000Name: awf-gtk3 Version: 4.2.0 Release: 0 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 3.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 3.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-4.2.0/scripts/opensuse/awf-gtk4.spec000066400000000000000000000060001522325530000217110ustar00rootroot00000000000000Name: awf-gtk4 Version: 4.2.0 Release: 0 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 4.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 4.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - New upstream release * Fri Oct 10 2025 Fabrice Creuzot - 3.2.0-1 - New upstream release * Fri Aug 08 2025 Fabrice Creuzot - 3.1.0-1 - New upstream release - Add support for CSD dialog * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - New upstream release - Add support for CSD window - Add --enable-only-gtkx and --disable-gtkx options * Fri Apr 04 2025 Fabrice Creuzot - 2.9.0-1 - New upstream release * Mon Mar 03 2025 Fabrice Creuzot - 2.8.1-1 - New upstream release * Fri Feb 02 2024 Fabrice Creuzot - 2.8.0-1 - New upstream release * Fri Jun 16 2023 Fabrice Creuzot - 2.7.0-2 - Package spec update * Tue Jun 06 2023 Fabrice Creuzot - 2.7.0-1 - New upstream release * Thu Sep 09 2021 Fabrice Creuzot - 2.6.0-1 - New upstream release * Wed Jul 07 2021 Fabrice Creuzot - 2.5.0-1 - New upstream release * Wed May 05 2021 Fabrice Creuzot - 2.4.0-1 - New upstream release * Sun Apr 04 2021 Fabrice Creuzot - 2.3.0-1 - Initial openSUSE package release awf-extended-4.2.0/scripts/opensuse/awf-gtk5.spec000066400000000000000000000033541522325530000217230ustar00rootroot00000000000000Name: awf-gtk5 Version: 4.2.0 Release: 0 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - Initial openSUSE package release awf-extended-4.2.0/scripts/opensuse/awf-qt5.spec000066400000000000000000000040261522325530000215570ustar00rootroot00000000000000Name: awf-qt5 Version: 4.2.0 Release: 0 Summary: Theme preview application for Qt 5 Summary(fr): Application d'aperçu de thème pour Qt 5 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: hicolor-icon-theme BuildRequires: libqt5-qtbase-devel Requires: libqt5-qtbase Requires: hicolor-icon-theme Recommends: libqt5-qtbase-platformtheme-gtk3 Recommends: libqt5-qtsvg Recommends: qt5-globalqss Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 5.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial openSUSE package release awf-extended-4.2.0/scripts/opensuse/awf-qt6.spec000066400000000000000000000037751522325530000215720ustar00rootroot00000000000000Name: awf-qt6 Version: 4.2.0 Release: 0 Summary: Theme preview application for Qt 6 Summary(fr): Application d'aperçu de thème pour Qt 6 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: hicolor-icon-theme BuildRequires: qt6-base-devel Requires: qt6-base Requires: hicolor-icon-theme Recommends: qt6-platformtheme-gtk3 Recommends: qt6-globalqss Recommends: qt6-svg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 6.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 6.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt6 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Tue May 05 2026 Fabrice Creuzot - 4.1.0-1 - New upstream release * Tue Mar 03 2026 Fabrice Creuzot - 4.0.0-1 - Initial openSUSE package release awf-extended-4.2.0/scripts/opensuse/awf-qt7.spec000066400000000000000000000035031522325530000215600ustar00rootroot00000000000000Name: awf-qt7 Version: 4.2.0 Release: 0 Summary: Theme preview application for Qt 7 Summary(fr): Application d'aperçu de thème pour Qt 7 License: GPL-3.0-or-later URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: hicolor-icon-theme BuildRequires: qt7-base-devel Requires: qt7-base Requires: hicolor-icon-theme Recommends: qt7-platformtheme-gtk3 Recommends: qt7-globalqss Recommends: qt7-svg Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 7.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 7.} %prep %setup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt7 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - Initial openSUSE package release awf-extended-4.2.0/scripts/pclinuxos/000077500000000000000000000000001522325530000176005ustar00rootroot00000000000000awf-extended-4.2.0/scripts/pclinuxos/pclos-awf-gtk2.spec000066400000000000000000000036101522325530000232140ustar00rootroot00000000000000Name: awf-gtk2 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 2 Summary(fr): Application d'aperçu de thème pour GTK 2 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk2-devel >= 2.24.0 Requires: gtk2 >= 2.24.0 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 2.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 2.} %prep %autosetup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk2 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1 - New upstream release - Use make install * Mon May 05 2025 Fabrice Creuzot - 3.0.0-1 - Initial PCLinuxOS package release awf-extended-4.2.0/scripts/pclinuxos/pclos-awf-gtk3.spec000066400000000000000000000034271522325530000232230ustar00rootroot00000000000000Name: awf-gtk3 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 3 Summary(fr): Application d'aperçu de thème pour GTK 3 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk3-devel Requires: gtk3 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 3.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 3.} %prep %autosetup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk3 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1pclos2026 - Initial PCLinuxOS package release awf-extended-4.2.0/scripts/pclinuxos/pclos-awf-gtk4.spec000066400000000000000000000034271522325530000232240ustar00rootroot00000000000000Name: awf-gtk4 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 4 Summary(fr): Application d'aperçu de thème pour GTK 4 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk4-devel Requires: gtk4 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 4.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 4.} %prep %autosetup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk4 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1pclos2026 - Initial PCLinuxOS package release awf-extended-4.2.0/scripts/pclinuxos/pclos-awf-gtk5.spec000066400000000000000000000034271522325530000232250ustar00rootroot00000000000000Name: awf-gtk5 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for GTK 5 Summary(fr): Application d'aperçu de thème pour GTK 5 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: libnotify-devel >= 0.7.0 BuildRequires: gcc BuildRequires: gettext BuildRequires: gtk5-devel Requires: gtk5 Requires: hicolor-icon-theme Requires: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for GTK 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour GTK 5.} %prep %autosetup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-gtk5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1pclos2026 - Initial PCLinuxOS package release awf-extended-4.2.0/scripts/pclinuxos/pclos-awf-qt5.spec000066400000000000000000000035031522325530000230570ustar00rootroot00000000000000Name: awf-qt5 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for Qt 5 Summary(fr): Application d'aperçu de thème pour Qt 5 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt5-devel Requires: qt5 Requires: hicolor-icon-theme #ecommends: qt5-gtk-platformtheme ? Recommends: qt5-globalqss Recommends: qtsvg5 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 5.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 5.} %prep %autosetup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt5 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1pclos2026 - Initial PCLinuxOS package release awf-extended-4.2.0/scripts/pclinuxos/pclos-awf-qt6.spec000066400000000000000000000035031522325530000230600ustar00rootroot00000000000000Name: awf-qt6 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for Qt 6 Summary(fr): Application d'aperçu de thème pour Qt 6 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt6-devel Requires: qt6 Requires: hicolor-icon-theme #ecommends: qt6-gtk-platformtheme ? Recommends: qt6-globalqss Recommends: qtsvg6 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 6.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 6.} %prep %autosetup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt6 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1pclos2026 - Initial PCLinuxOS package release awf-extended-4.2.0/scripts/pclinuxos/pclos-awf-qt7.spec000066400000000000000000000035031522325530000230610ustar00rootroot00000000000000Name: awf-qt7 Version: 4.2.0 Release: %mkrel 1 Summary: Theme preview application for Qt 7 Summary(fr): Application d'aperçu de thème pour Qt 7 License: GPLv3+ Group: Development/Basic URL: https://github.com/luigifab/awf-extended Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz BuildRequires: aspell-fr BuildRequires: autoconf BuildRequires: automake BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: qt7-devel Requires: qt7 Requires: hicolor-icon-theme #ecommends: qt7-gtk-platformtheme ? Recommends: qt7-globalqss Recommends: qtsvg7 Suggests: libnotify >= 0.7.0 %description %{expand: A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme. This package provides the program for Qt 7.} %description -l fr %{expand: La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué. Ce paquet fournit le programme pour Qt 7.} %prep %autosetup -q -n awf-extended-%{version} %build autoreconf -fi %configure --enable-only-qt7 %make_build %install %make_install %find_lang %{name} --with-man %files -f %{name}.lang %license LICENSE %doc README.md %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/*/apps/%{name}.png %{_datadir}/icons/hicolor/scalable/apps/%{name}.svg %{_datadir}/bash-completion/completions/%{name} %{_mandir}/man1/%{name}.1* %changelog * Tue Jul 07 2026 Fabrice Creuzot - 4.2.0-1pclos2026 - Initial PCLinuxOS package release awf-extended-4.2.0/scripts/slackware/000077500000000000000000000000001522325530000175305ustar00rootroot00000000000000awf-extended-4.2.0/scripts/slackware/README000066400000000000000000000002571522325530000204140ustar00rootroot00000000000000A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.awf-extended-4.2.0/scripts/slackware/awf.SlackBuild000066400000000000000000000063701522325530000222520ustar00rootroot00000000000000#!/bin/bash # Slackware build script for awf # Copyright 2026 Fabrice Creuzot, France # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PRGNAM=awf VERSION=${VERSION:-4.2.0} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" exit 0 fi TMP=${TMP:-/tmp/SBo} PKG=$TMP/package-$PRGNAM OUTPUT=${OUTPUT:-/tmp} if [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP rm -rf $PRGNAM-extended-$VERSION tar xvf $CWD/$PRGNAM-extended-$VERSION.tar.gz cd $PRGNAM-extended-$VERSION chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; # action autoreconf -fiv ./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$PRGNAM-$VERSION \ --build=$ARCH-slackware-linux \ --disable-gtk5 \ --disable-qt7 make make install DESTDIR=$PKG rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true find $PKG/usr/man -type f -exec gzip -9 {} \; for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION cp -a \ README.md LICENSE \ $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/doinst.sh > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPEawf-extended-4.2.0/scripts/slackware/awf.info000066400000000000000000000004231522325530000211610ustar00rootroot00000000000000PRGNAM="awf" version="4.2.0" HOMEPAGE="https://github.com/luigifab/awf-extended" DOWNLOAD="https://github.com/luigifab/awf-extended/archive/v4.2.0/awf-extended-4.2.0.tar.gz" MD5SUM="..." DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" MAINTAINER="Fabrice Creuzot" EMAIL="..."awf-extended-4.2.0/scripts/slackware/doinst.sh000066400000000000000000000005021522325530000213610ustar00rootroot00000000000000if [ -x /usr/bin/update-desktop-database ]; then /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 fi if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then if [ -x /usr/bin/gtk-update-icon-cache ]; then /usr/bin/gtk-update-icon-cache -f usr/share/icons/hicolor >/dev/null 2>&1 fi fi awf-extended-4.2.0/scripts/slackware/slack-desc000066400000000000000000000014721522325530000214700ustar00rootroot00000000000000# HOW TO EDIT THIS FILE: # The "handy ruler" below makes it easier to edit a package description. # Line up the first '|' above the ':' following the base package name, and # the '|' on the right side marks the last column you can put a character in. # You must make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':' except on otherwise blank lines. |-----handy-ruler------------------------------------------------------| awf: awf (a widget factory) awf: awf: A widget factory is a theme preview application for GTK and Qt. It awf: displays the various widget types in a single window allowing to see awf: the visual effect of the applied theme. awf: awf: awf: awf: For: GTK 2.24, 3.x, 4.x & Qt 5.x, 6.x awf: Homepage: https://github.com/luigifab/awf-extended awf:awf-extended-4.2.0/scripts/windows/000077500000000000000000000000001522325530000172465ustar00rootroot00000000000000awf-extended-4.2.0/scripts/windows/build.yml000066400000000000000000000021271522325530000210720ustar00rootroot00000000000000name: Build Windows packages on: push: workflow_dispatch: jobs: build_msys2: if: true runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 update: true install: >- autoconf automake make pkgconf mingw-w64-x86_64-binutils mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-gettext mingw-w64-x86_64-gtk2 mingw-w64-x86_64-gtk3 mingw-w64-x86_64-gtk4 mingw-w64-x86_64-qt5-base mingw-w64-x86_64-qt5-winextras mingw-w64-x86_64-qt5-translations mingw-w64-x86_64-qt6-base mingw-w64-x86_64-qt6-translations mingw-w64-x86_64-nsis - name: Build AWF shell: msys2 {0} run: bash scripts/windows/zip.sh - name: Upload AWF uses: actions/upload-artifact@v4 with: name: windows-setups path: scripts/windows/builder/setup-*.exe awf-extended-4.2.0/scripts/windows/setup-awf-gtk2.nsi000066400000000000000000000172161522325530000225500ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "gtk2" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "GTK Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" File /r "${ENGINE}\lib" SetOutPath "$INSTDIR\share" File /r "${ENGINE}\share\themes" SectionEnd Section "GTK Translations" SecTranslations SetOutPath "$INSTDIR\share" File /r /x "awf*.mo" "${ENGINE}\share\locale" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.2.0/scripts/windows/setup-awf-gtk3.nsi000066400000000000000000000172301522325530000225450ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "gtk3" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "GTK Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" SetOutPath "$INSTDIR\share" File /r "${ENGINE}\share\schemas" File /r "${ENGINE}\share\themes" SectionEnd Section "GTK Translations" SecTranslations SetOutPath "$INSTDIR\share" File /r /x "awf*.mo" "${ENGINE}\share\locale" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.2.0/scripts/windows/setup-awf-gtk4.nsi000066400000000000000000000172301522325530000225460ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "gtk4" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "GTK Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" SetOutPath "$INSTDIR\share" File /r "${ENGINE}\share\schemas" File /r "${ENGINE}\share\themes" SectionEnd Section "GTK Translations" SecTranslations SetOutPath "$INSTDIR\share" File /r /x "awf*.mo" "${ENGINE}\share\locale" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.2.0/scripts/windows/setup-awf-gtk5.nsi000066400000000000000000000172301522325530000225470ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "gtk5" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "GTK Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" SetOutPath "$INSTDIR\share" File /r "${ENGINE}\share\schemas" File /r "${ENGINE}\share\themes" SectionEnd Section "GTK Translations" SecTranslations SetOutPath "$INSTDIR\share" File /r /x "awf*.mo" "${ENGINE}\share\locale" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.2.0/scripts/windows/setup-awf-qt5.nsi000066400000000000000000000171331522325530000224100ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "qt5" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "Qt Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" File /r "${ENGINE}\platforms" File /r "${ENGINE}\share" SectionEnd Section "Qt Translations" SecTranslations SetOutPath "$INSTDIR" File /r "${ENGINE}\translations" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.2.0/scripts/windows/setup-awf-qt6.nsi000066400000000000000000000171331522325530000224110ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "qt6" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "Qt Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" File /r "${ENGINE}\platforms" File /r "${ENGINE}\share" SectionEnd Section "Qt Translations" SecTranslations SetOutPath "$INSTDIR" File /r "${ENGINE}\translations" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.2.0/scripts/windows/setup-awf-qt7.nsi000066400000000000000000000171331522325530000224120ustar00rootroot00000000000000; NSIS installer (v3.11+) unicode true !include "MUI2.nsh" !include "FileFunc.nsh" !define ENGINE "qt7" !define ARCH ":ARCH:" !define ARCHNAME ":ARCHNAME:" !define VERSION ":AWFVERSION:" !define APPNAME "awf-${ENGINE}" VIProductVersion "${VERSION}.0" VIFileVersion "${VERSION}.0" VIAddVersionKey "FileDescription" "Setup for A widget factory" VIAddVersionKey "FileVersion" "${VERSION}" VIAddVersionKey "ProductName" "A widget factory" VIAddVersionKey "ProductVersion" "${VERSION}" VIAddVersionKey "CompanyName" "luigifab, nullsoft" VIAddVersionKey "LegalCopyright" "2026 Fabrice Creuzot (luigifab), GNU GPL v3" VIAddVersionKey "Info1" "https://github.com/luigifab/awf-extended" VIAddVersionKey "Info2" "https://www.luigifab.fr/gtkqt/awf-extended" VIAddVersionKey "Info3" "https://nsis.sourceforge.io/" VIAddVersionKey "InternalName" "setup-${APPNAME}" VIAddVersionKey "OriginalFilename" "setup-${APPNAME}-${VERSION}-${ARCH}.exe" Name "${APPNAME}" OutFile "setup-${APPNAME}-${VERSION}-${ARCH}.exe" InstallDir "$PROGRAMFILES\${APPNAME}" InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" RequestExecutionLevel admin !define MUI_ABORTWARNING !define MUI_LANGDLL_ALLLANGUAGES !define MUI_COMPONENTSPAGE_NODESC !define MUI_LICENSEPAGE_TEXT_TOP "" !define MUI_ICON "awf-extended-${VERSION}\data\awf.ico" !define MUI_UNICON "awf-extended-${VERSION}\data\awf.ico" ; Pages !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "awf-extended-${VERSION}\LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Afrikaans" !insertmacro MUI_LANGUAGE "Albanian" !insertmacro MUI_LANGUAGE "Arabic" !insertmacro MUI_LANGUAGE "Armenian" !insertmacro MUI_LANGUAGE "Asturian" !insertmacro MUI_LANGUAGE "Basque" !insertmacro MUI_LANGUAGE "Belarusian" !insertmacro MUI_LANGUAGE "Bosnian" !insertmacro MUI_LANGUAGE "Breton" !insertmacro MUI_LANGUAGE "Bulgarian" !insertmacro MUI_LANGUAGE "Catalan" !insertmacro MUI_LANGUAGE "Corsican" !insertmacro MUI_LANGUAGE "Croatian" !insertmacro MUI_LANGUAGE "Czech" !insertmacro MUI_LANGUAGE "Danish" !insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "Esperanto" !insertmacro MUI_LANGUAGE "Estonian" !insertmacro MUI_LANGUAGE "Farsi" !insertmacro MUI_LANGUAGE "Finnish" !insertmacro MUI_LANGUAGE "French" !insertmacro MUI_LANGUAGE "Galician" !insertmacro MUI_LANGUAGE "Georgian" !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Greek" !insertmacro MUI_LANGUAGE "Hebrew" !insertmacro MUI_LANGUAGE "Hindi" !insertmacro MUI_LANGUAGE "Hungarian" !insertmacro MUI_LANGUAGE "Icelandic" !insertmacro MUI_LANGUAGE "Indonesian" !insertmacro MUI_LANGUAGE "Irish" !insertmacro MUI_LANGUAGE "Italian" !insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Korean" !insertmacro MUI_LANGUAGE "Kurdish" !insertmacro MUI_LANGUAGE "Latvian" !insertmacro MUI_LANGUAGE "Lithuanian" !insertmacro MUI_LANGUAGE "Luxembourgish" !insertmacro MUI_LANGUAGE "Macedonian" !insertmacro MUI_LANGUAGE "Malay" !insertmacro MUI_LANGUAGE "Mongolian" !insertmacro MUI_LANGUAGE "Norwegian" !insertmacro MUI_LANGUAGE "NorwegianNynorsk" !insertmacro MUI_LANGUAGE "Pashto" !insertmacro MUI_LANGUAGE "Polish" !insertmacro MUI_LANGUAGE "Portuguese" !insertmacro MUI_LANGUAGE "PortugueseBR" !insertmacro MUI_LANGUAGE "Romanian" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "ScotsGaelic" !insertmacro MUI_LANGUAGE "Serbian" !insertmacro MUI_LANGUAGE "SerbianLatin" !insertmacro MUI_LANGUAGE "SimpChinese" !insertmacro MUI_LANGUAGE "Slovak" !insertmacro MUI_LANGUAGE "Slovenian" !insertmacro MUI_LANGUAGE "Spanish" !insertmacro MUI_LANGUAGE "SpanishInternational" !insertmacro MUI_LANGUAGE "Swedish" !insertmacro MUI_LANGUAGE "Tatar" !insertmacro MUI_LANGUAGE "Thai" !insertmacro MUI_LANGUAGE "TradChinese" !insertmacro MUI_LANGUAGE "Turkish" !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Uzbek" !insertmacro MUI_LANGUAGE "Vietnamese" !insertmacro MUI_LANGUAGE "Welsh" !insertmacro MUI_RESERVEFILE_LANGDLL ; Installer Function .onInit !insertmacro MUI_LANGDLL_DISPLAY System::Call 'kernel32::CreateMutex(p 0, i 0, t "${APPNAME}") p .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." Abort FunctionEnd Function .onVerifyInstDir FindFirst $0 $1 "$INSTDIR\*.*" loop: StrCmp $1 "" done StrCmp $1 "." next StrCmp $1 ".." next FindClose $0 Abort next: FindNext $0 $1 Goto loop done: FindClose $0 FunctionEnd Section "AWF - ${VERSION} - ${ARCH} ${ARCHNAME}" SecProgram SectionIn RO SetOutPath "$INSTDIR" File "${ENGINE}\${APPNAME}.exe" SetOutPath "$INSTDIR\share\locale\fr\LC_MESSAGES\" File /r "${ENGINE}\share\locale\fr\LC_MESSAGES\awf*.mo" WriteUninstaller "$INSTDIR\uninstall.exe" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$\"$INSTDIR\${APPNAME}.exe,0$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - A widget factory" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSION}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "HelpLink" "https://github.com/luigifab/awf-extended" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "Publisher" "luigifab" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" "$0" SectionEnd Section "Qt Core - :ENGINEVERSION: - ${ARCH} ${ARCHNAME}" SecEngine SetOutPath "$INSTDIR" File "${ENGINE}\*.dll" File /r "${ENGINE}\platforms" File /r "${ENGINE}\share" SectionEnd Section "Qt Translations" SecTranslations SetOutPath "$INSTDIR" File /r "${ENGINE}\translations" SectionEnd Section "Start menu shortcut" SecStartMenu SetOutPath "$INSTDIR" CreateShortcut "$SMPROGRAMS\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Section "Desktop shortcut" SecDesktop SetOutPath "$INSTDIR" CreateShortcut "$DESKTOP\${APPNAME}.lnk" "$INSTDIR\${APPNAME}.exe" SectionEnd Function .onSelChange SectionGetFlags ${SecEngine} $0 IntOp $0 $0 & ${SF_SELECTED} ${If} $0 == ${SF_SELECTED} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_RO} ${Else} !insertmacro ClearSectionFlag ${SecTranslations} ${SF_SELECTED} !insertmacro SetSectionFlag ${SecTranslations} ${SF_RO} ${EndIf} FunctionEnd ; Uninstaller Section "Uninstall" Delete "$SMPROGRAMS\${APPNAME}.lnk" Delete "$DESKTOP\${APPNAME}.lnk" ${If} ${FileExists} "$INSTDIR\${APPNAME}.exe" ${AndIf} ${FileExists} "$INSTDIR\uninstall.exe" RmDir /r "$INSTDIR" ${EndIf} DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" SectionEndawf-extended-4.2.0/scripts/windows/zip.sh000066400000000000000000000204061522325530000204060ustar00rootroot00000000000000#!/bin/bash # # Windows XP + mingw32 # # 1/ download mingw-get-setup.exe from https://sourceforge.net/projects/mingw/files/Installer/ (2013-10-04) # install in C:\MinGw # # 2/ run C:\MinGW\msys\1.0\msys.bat # then run: mingw-get.exe install mingw32-gcc-bin mingw32-gcc-g++-bin mingw32-make mingw32-gettext mingw32-gettext-dev msys-base msys-autoconf msys-automake msys-libtool or install them from MinGW GUI # # 3/ download pkg.m4 from https://raw.githubusercontent.com/pkgconf/pkgconf/refs/heads/master/pkg.m4 # put the file in C:\MinGW\msys\1.0\share\aclocal # # 4/ download gtk+-bundle_2.24.10-20120208_win32.zip from https://download.gnome.org/binaries/win32/gtk+/2.24/ # extract the archive in C:\GTK2 # # 5/ download gtk+-bundle_3.6.4-20130513_win32.zip from https://tarnyko.net/dl/gtk3.htm # extract the archive in C:\GTK3 # copy C:\GTK3\share\themes\Default to C:\GTK3\share\themes\gtk-win32-xp # # 6/ download qt-opensource-windows-x86-mingw482_opengl-5.3.2.exe from https://download.qt.io/new_archive/qt/5.3/5.3.2/ # install in C:\tempQT # move C:\tempQT\5.3\mingw482_32 to C:\QT5 # uninstall qt-opensource-windows-x86-mingw482_opengl-5.3.2.exe and remove C:\tempQT # # 7/ download pkg-config-lite-0.28-1_bin-win32.zip from https://sourceforge.net/projects/pkgconfiglite/files/0.28-1/ # extract the archive in C:\QT5 # # 8/ download and install NSIS from https://sourceforge.net/projects/nsis/files/ # # 9/ open My Computer → Properties → Advanced → Environment Variables, in PATH add # ;C:\MinGW\bin;C:\MinGW\msys\1.0\bin;C:\Program Files\NSIS # # # To manually build with GTK2 run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # export PATH=/c/GTK2/bin:$PATH # export PKG_CONFIG_PATH=/c/GTK2/lib/pkgconfig # bash build.sh LDFLAGS="-mwindows" --enable-only-gtk2 # # To manually build with GTK3 run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # export PATH=/c/GTK3/bin:$PATH # export PKG_CONFIG_PATH=/c/GTK3/lib/pkgconfig # bash build.sh LDFLAGS="-mwindows" --enable-only-gtk3 # # To manually build with QT5 run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # export PATH=/c/QT5/bin:$PATH # export PKG_CONFIG_PATH=/c/QT5/lib/pkgconfig # bash build.sh LDFLAGS="-mwindows -static-libstdc++" --enable-only-qt5 # # To build with GTK2/GTK3/QT5 with this script run: C:\MinGW\msys\1.0\msys.bat # cd /c/awf-gtk # bash scripts/windows/zip.sh cd "$(dirname "$0")" || exit 1 originalpath="$PATH" version="4.2.0" rm -rf builder/* mkdir -p builder # copy to a tmp directory if [ true ]; then cd builder wget https://github.com/luigifab/awf-extended/archive/v$version/awf-extended-$version.tar.gz tar xzf awf-extended-$version.tar.gz cd .. else mkdir builder/awf-extended-$version cp -r ../../* builder/awf-extended-$version/ fi # search things function copydeps { # 1=file 2=dest 3=root objdump.exe -p "$1" | grep -i 'DLL Name' | awk '{print $NF}' | grep -v -i '^\(libgcc\|libstdc++\)' | while read dll do if [ -f "$3/$dll" ] && [ ! -f "$2/$dll" ]; then echo " - $dll" cp -a "$3/$dll" "$2" copydeps "$3/$dll" "$2" "$3" fi done } if [ -d "/mingw64" ]; then host="--host=x86_64-w64-mingw32" else host="" fi arch=$(echo "$PROCESSOR_ARCHITECTURE" | tr '[:upper:]' '[:lower:]') [ "$arch" = "x86" ] && [ -n "$PROCESSOR_ARCHITEW6432" ] && arch=$(echo "$PROCESSOR_ARCHITEW6432" | tr '[:upper:]' '[:lower:]') case "$arch" in x86|i386|i486|i586|i686) arch="x86" archname="(32 bits)" ;; amd64|x86_64) arch="x86_64" archname="(64 bits)" ;; arm64|aarch64) arch="arm64" archname="(64 bits)" ;; *) arch=$(uname -m 2>/dev/null) case "$arch" in i386|i486|i586|i686) arch="x86" archname="(32 bits)" ;; x86_64|amd64) arch="x86_64" archname="(64 bits)" ;; aarch64|arm64) arch="arm64" archname="(64 bits)" ;; *) arch="unknown" archname="" ;; esac ;; esac # create packages cd builder/awf-extended-$version/ for engine in "2" "3" "4"; do printf "\n\n############################################################ awf-gtk$engine\n\n" if [ -d "/mingw64" ]; then ROOT=/mingw64 else ROOT=/c/GTK$engine if [ ! -d "$ROOT" ]; then echo "$ROOT not found, skipping..." continue fi fi export PATH=$ROOT/bin:$PATH export PKG_CONFIG_PATH=$ROOT/lib/pkgconfig export PKG_CONFIG_LIBDIR=$ROOT/lib/pkgconfig autoreconf -fi && ./configure $host LDFLAGS="-mwindows" CFLAGS="-O2 -DNDEBUG" --enable-only-gtk$engine && make -s result=$? if [ $result -eq 0 ]; then echo "Success..." echo " awf-gtk$engine.exe" mkdir ../gtk$engine mv src/awf-gtk$engine.exe ../gtk$engine/ copydeps ../gtk$engine/awf-gtk$engine.exe ../gtk$engine/ $ROOT/bin/ if [ $engine = "2" ]; then echo " - lib/engines" mkdir -p ../gtk$engine/share mkdir -p ../gtk$engine/lib/gtk-2.0/2.10.0/engines cp -a $ROOT/lib/gtk-2.0/2.10.0/engines/*.dll ../gtk$engine/lib/gtk-2.0/2.10.0/engines/ elif [ $engine = "3" ]; then echo " - share/schemas" mkdir -p ../gtk$engine/share/glib-2.0/schemas cp -a $ROOT/share/glib-2.0/schemas/gschemas.compiled ../gtk$engine/share/glib-2.0/schemas/ elif [ $engine = "4" ]; then echo " - share/schemas" mkdir -p ../gtk$engine/share/glib-2.0/schemas cp -a $ROOT/share/glib-2.0/schemas/gschemas.compiled ../gtk$engine/share/glib-2.0/schemas/ fi echo " - share/themes" cp -ar $ROOT/share/themes/ ../gtk$engine/share/ echo " - share/locale" cp -ar $ROOT/share/locale/ ../gtk$engine/share/ echo " - msgfmt" for file in src/po/*.po; do code=`basename "${file}" .po` mkdir -p ../gtk$engine/share/locale/$code/LC_MESSAGES msgfmt src/po/$code.po -o ../gtk$engine/share/locale/$code/LC_MESSAGES/awf-gtk$engine.mo done echo "Nsis..." cp ../../setup-awf-gtk$engine.nsi ../setup-awf-gtk$engine.nsi enginever=$(strings.exe -e l ../gtk$engine/libgtk*.dll | grep -A1 "ProductVersion" | tail -1) sed -i 's/:ENGINEVERSION:/'"$enginever"'/g' ../setup-awf-gtk$engine.nsi sed -i 's/:AWFVERSION:/'"$version"'/g' ../setup-awf-gtk$engine.nsi sed -i 's/:ARCHNAME:/'"$archname"'/g' ../setup-awf-gtk$engine.nsi sed -i 's/:ARCH:/'"$arch"'/g' ../setup-awf-gtk$engine.nsi makensis -V1 ../setup-awf-gtk$engine.nsi result=$? if [ $result -eq 0 ]; then rm ../setup-awf-gtk$engine.nsi echo " setup-awf-gtk$engine.exe" fi fi export PATH=$originalpath done for engine in "5" "6"; do printf "\n\n############################################################ awf-qt$engine\n\n" if [ -d "/mingw64" ]; then ROOT=/mingw64 ROOTRANS=$ROOT/share/qt5/ ROOTPLUG=$ROOT/share/qt5/ else ROOT=/c/QT$engine ROOTRANS=$ROOT/ ROOTPLUG=$ROOT/ if [ ! -d "$ROOT" ]; then echo "WARNING: $ROOT not found, skipping..." continue fi fi export PATH=$ROOT/bin:$PATH export PKG_CONFIG_PATH=$ROOT/lib/pkgconfig export PKG_CONFIG_LIBDIR=$ROOT/lib/pkgconfig autoreconf -fi && ./configure $host LDFLAGS="-mwindows -static-libstdc++" CXXFLAGS="-O2 -DNDEBUG" --enable-only-qt$engine && sed -i 's/-lQt5\([A-Za-z]*\)d\b/-lQt5\1/g' src/Makefile && make -s result=$? if [ $result -eq 0 ]; then echo "Success..." echo " awf-qt$engine.exe" mkdir ../qt$engine mv src/awf-qt$engine.exe ../qt$engine/ copydeps ../qt$engine/awf-qt$engine.exe ../qt$engine/ $ROOT/bin/ echo " - plugins/platforms" mkdir -p ../qt$engine/platforms cp -a $ROOTPLUG/plugins/platforms/qwindows.dll ../qt$engine/platforms/ echo " - translations" cp -ar $ROOTRANS/translations/ ../qt$engine/ echo " - msgfmt" for file in src/po/*.po; do code=`basename "${file}" .po` mkdir -p ../qt$engine/share/locale/$code/LC_MESSAGES msgfmt src/po/$code.po -o ../qt$engine/share/locale/$code/LC_MESSAGES/awf-qt$engine.mo done echo "Nsis..." cp ../../setup-awf-qt$engine.nsi ../setup-awf-qt$engine.nsi enginever=$(strings.exe -e l ../qt$engine/*Core*.dll | grep -A1 "ProductVersion" | tail -1) sed -i 's/:ENGINEVERSION:/'"$enginever"'/g' ../setup-awf-qt$engine.nsi sed -i 's/:AWFVERSION:/'"$version"'/g' ../setup-awf-qt$engine.nsi sed -i 's/:ARCHNAME:/'"$archname"'/g' ../setup-awf-qt$engine.nsi sed -i 's/:ARCH:/'"$arch"'/g' ../setup-awf-qt$engine.nsi makensis -V1 ../setup-awf-qt$engine.nsi result=$? if [ $result -eq 0 ]; then rm ../setup-awf-qt$engine.nsi echo " setup-awf-qt$engine.exe" fi fi export PATH=$originalpath done cd ../.. printf "\n\n" ls -dlth "$PWD"/builder/*.exe rm -rf builder/awf-extended-$version/awf-extended-4.2.0/src/000077500000000000000000000000001522325530000146545ustar00rootroot00000000000000awf-extended-4.2.0/src/Makefile.am000066400000000000000000000113451522325530000167140ustar00rootroot00000000000000# build bin_PROGRAMS = BUILT_SOURCES = CLEANFILES = $(BUILT_SOURCES) if GTK5 bin_PROGRAMS += awf-gtk5 awf_gtk5_SOURCES = awf-gtk5.c awf_gtk5_CPPFLAGS = $(GTK5_CFLAGS) $(LIBNOTIFY_CFLAGS) awf_gtk5_LDADD = $(GTK5_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk5_LDADD += awf-gtk5-res.o awf-gtk5-res.o: awf.rc $(WINDRES) -c 65001 -DENGINE=GTK5 $< -o $@ endif endif if GTK4 bin_PROGRAMS += awf-gtk4 awf_gtk4_SOURCES = awf-gtk4.c awf_gtk4_CPPFLAGS = $(GTK4_CFLAGS) $(LIBNOTIFY_CFLAGS) awf_gtk4_LDADD = $(GTK4_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk4_LDADD += awf-gtk4-res.o awf-gtk4-res.o: awf.rc $(WINDRES) -c 65001 -DENGINE=GTK4 $< -o $@ endif endif if GTK3 bin_PROGRAMS += awf-gtk3 awf_gtk3_SOURCES = awf-gtk3.c awf_gtk3_CPPFLAGS = $(GTK3_CFLAGS) $(LIBNOTIFY_CFLAGS) awf_gtk3_LDADD = $(GTK3_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk3_LDADD += awf-gtk3-res.o awf-gtk3-res.o: awf.rc $(WINDRES) -c 65001 -DENGINE=GTK3 $< -o $@ endif endif if GTK2 bin_PROGRAMS += awf-gtk2 awf_gtk2_SOURCES = awf-gtk2.c awf_gtk2_CPPFLAGS = $(GTK2_CFLAGS) $(LIBNOTIFY_CFLAGS) awf_gtk2_LDADD = $(GTK2_LIBS) $(LIBNOTIFY_LIBS) if WINDOWS awf_gtk2_LDADD += awf-gtk2-res.o awf-gtk2-res.o: awf.rc $(WINDRES) -c 65001 -DENGINE=GTK2 $< -o $@ endif endif if QT7 AM_CXXFLAGS = -fPIC -std=c++17 bin_PROGRAMS += awf-qt7 BUILT_SOURCES += awf-qt7.moc awf-qt7.moc: awf-qt7.cpp $(QT7_MOC) $(QT7_CFLAGS) $< -o $@ awf_qt7_SOURCES = awf-qt7.cpp awf_qt7_CPPFLAGS = $(QT7_CFLAGS) awf_qt7_LDADD = $(QT7_LIBS) if WINDOWS awf_qt7_LDADD += awf-qt7-res.o -lintl awf-qt7-res.o: awf.rc $(WINDRES) -c 65001 -DENGINE=QT7 $< -o $@ endif endif if QT6 AM_CXXFLAGS = -fPIC -std=c++17 bin_PROGRAMS += awf-qt6 BUILT_SOURCES += awf-qt6.moc awf-qt6.moc: awf-qt6.cpp $(QT6_MOC) $(QT6_CFLAGS) $< -o $@ awf_qt6_SOURCES = awf-qt6.cpp awf_qt6_CPPFLAGS = $(QT6_CFLAGS) awf_qt6_LDADD = $(QT6_LIBS) if WINDOWS awf_qt6_LDADD += awf-qt6-res.o -lintl awf-qt6-res.o: awf.rc $(WINDRES) -c 65001 -DENGINE=QT6 $< -o $@ endif endif if QT5 AM_CXXFLAGS = -fPIC -std=c++17 bin_PROGRAMS += awf-qt5 BUILT_SOURCES += awf-qt5.moc awf-qt5.moc: awf-qt5.cpp $(QT5_MOC) $(QT5_CFLAGS) $< -o $@ awf_qt5_SOURCES = awf-qt5.cpp awf_qt5_CPPFLAGS = $(QT5_CFLAGS) awf_qt5_LDADD = $(QT5_LIBS) if WINDOWS awf_qt5_LDADD += awf-qt5-res.o -lintl awf-qt5-res.o: awf.rc $(WINDRES) -c 65001 -DENGINE=QT5 $< -o $@ endif endif # install (desktop files) if !WINDOWS desktop_DATA = desktopdir = $(datadir)/applications if GTK5 desktop_DATA += $(srcdir)/../data/awf-gtk5.desktop endif if GTK4 desktop_DATA += $(srcdir)/../data/awf-gtk4.desktop endif if GTK3 desktop_DATA += $(srcdir)/../data/awf-gtk3.desktop endif if GTK2 desktop_DATA += $(srcdir)/../data/awf-gtk2.desktop endif if QT7 desktop_DATA += $(srcdir)/../data/awf-qt7.desktop endif if QT6 desktop_DATA += $(srcdir)/../data/awf-qt6.desktop endif if QT5 desktop_DATA += $(srcdir)/../data/awf-qt5.desktop endif endif # install (man pages) man_MANS = if GTK5 man_MANS += $(srcdir)/../data/awf-gtk5.1 endif if GTK4 man_MANS += $(srcdir)/../data/awf-gtk4.1 endif if GTK3 man_MANS += $(srcdir)/../data/awf-gtk3.1 endif if GTK2 man_MANS += $(srcdir)/../data/awf-gtk2.1 endif if QT7 man_MANS += $(srcdir)/../data/awf-qt7.1 endif if QT6 man_MANS += $(srcdir)/../data/awf-qt6.1 endif if QT5 man_MANS += $(srcdir)/../data/awf-qt5.1 endif # install (translated man pages/icons/locales/bash-completion) install-data-hook: for app in $(bin_PROGRAMS); do \ app=$${app%$(EXEEXT)}; \ install -Dpm 644 $(srcdir)/../data/$$app.fr.1 $(DESTDIR)$(mandir)/fr/man1/$$app.1; \ install -Dpm 644 $(srcdir)/../data/icons/scalable/apps/awf.svg $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps/$$app.svg; \ for size in 16x16 22x22 24x24 32x32 48x48 64x64 128x128; do \ install -Dpm 644 $(srcdir)/../data/icons/$$size/apps/awf.png $(DESTDIR)$(datadir)/icons/hicolor/$$size/apps/$$app.png; \ done; \ for file in $(srcdir)/po/*.po; do \ code=`basename $$file .po`; \ install -dm 755 $(DESTDIR)$(datadir)/locale/$$code/LC_MESSAGES/; \ $(MSGFMT) $$file -o $(DESTDIR)$(datadir)/locale/$$code/LC_MESSAGES/$$app.mo; \ done; \ install -Dpm 644 $(srcdir)/../data/$$app.bash $(DESTDIR)$(datadir)/bash-completion/completions/$$app; \ done # uninstall (translated man pages/icons/locales/bash-completion) uninstall-hook: for app in awf-gtk5 awf-gtk4 awf-gtk3 awf-gtk2 awf-qt7 awf-qt6 awf-qt5; do \ rm -f $(DESTDIR)$(mandir)/fr/man1/$$app.1; \ rm -f $(DESTDIR)$(datadir)/icons/hicolor/scalable/apps/$$app.svg; \ for size in 16x16 22x22 24x24 32x32 48x48 64x64 128x128; do \ rm -f $(DESTDIR)$(datadir)/icons/hicolor/$$size/apps/$$app.png; \ done; \ for file in $(srcdir)/po/*.po; do \ code=`basename $$file .po`; \ rm -f $(DESTDIR)$(datadir)/locale/$$code/LC_MESSAGES/$$app.mo; \ done; \ rm -f $(DESTDIR)$(datadir)/bash-completion/completions/$$app; \ done awf-extended-4.2.0/src/awf-gtk2.c000066400000000000000000003141111522325530000164430ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated J/02/07/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.22 + GLIB 2.88 + Pango 1.58 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.23 + GLIB 2.89 + Pango 1.57 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) GTK 2.24/3.24/4.22 + GLIB 2.87 + Pango 1.56 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.56 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 * Windows XP SP3 MinGW/msys (2048 MB) GTK 2.24 + GLIB 2.28 + Pango 1.29 & GTK 3.6 + GLIB 2.34 + Pango 1.30 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #if defined (G_OS_WIN32) #include #elif defined (G_OS_UNIX) #include #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GTK_DIRNAME "gtk-2.0" #define GETTEXT_PACKAGE "awf-gtk2" #define BOXH (gtk_hbox_new (FALSE, 0)) #define BOXV (gtk_vbox_new (FALSE, 0)) #define SEPH (gtk_hseparator_new ()) #define SEPV (gtk_vseparator_new ()) #define PANEH (gtk_hpaned_new ()) #define PANEV (gtk_vpaned_new ()) #define GDK_KEY_F1 0xffbe #define GDK_KEY_F2 0xffbf #define GDK_KEY_F3 0xffc0 #define GDK_KEY_F4 0xffc1 #define GDK_KEY_F5 0xffc2 #define GDK_KEY_F6 0xffc3 #define GDK_KEY_F7 0xffc4 #define GDK_KEY_F8 0xffc5 #define GDK_KEY_F9 0xffc6 #define GDK_KEY_F10 0xffc7 #define GDK_KEY_F11 0xffc8 #define GDK_KEY_F12 0xffc9 #define GDK_KEY_Delete 0xffff #define GDK_KEY_KP_Delete 0xff9f #define GDK_KEY_BackSpace 0xff08 #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Paste" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP "F12" #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) dgettext(GETTEXT_PACKAGE, x) #define _gtk(x) dgettext("gtk20", x) // global variables static gboolean awf_debug = FALSE; static gboolean awf_trace = FALSE; static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *menubar = NULL, *toolbar = NULL, *toolbarentry = NULL, *statusbar = NULL; static GtkWidget *button15 = NULL, *button16 = NULL; static GtkWidget *progress1 = NULL, *progress2 = NULL, *progress3 = NULL, *progress4 = NULL, *progress8 = NULL, *progress9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static GtkWidget *current_menuitem = NULL; static int current_direction = 0; // GTK_TEXT_DIR_NONE static gchar *current_theme = NULL; static gchar *opt_theme = NULL; static gchar *opt_screenshot = NULL; static gboolean allow_update_theme = TRUE; static gboolean allow_update_values = TRUE; static gboolean must_save_accels = FALSE; // global functions static void awf_load_theme(GHashTable* hashtable, gchar *directory); static inline int awf_compare_theme(gconstpointer a, gconstpointer b); static void notify_updated_gtktheme(GSettings *settings, gchar *key); static void update_text_direction(int direction); static void update_theme(gchar *newTheme); static void update_treeview_indicator_width(GtkWidget *view); static void update_statusbar(gchar *message); static void update_values(GtkRange *range); static void update_widgets(); static void update_marks(GtkScale *scale, gboolean value, int position); static void clear_entry(GtkEntry *entry); static void display_notification(); static void find_and_update_labels(GtkWidget *widget); static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search); static gboolean on_sighup(void *data); static gboolean take_screenshot(); static void create_window(gpointer app); static void create_widgets(GtkWidget *root); static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing); static void add_progressbar_and_entrybar(); static void create_toolbar(GtkWidget *root); static void create_combos_entries(GtkWidget *root); static void create_spinbuttons(GtkWidget *root); static void create_checkbuttons(GtkWidget *root); static void create_radiobuttons(GtkWidget *root); static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels(GtkWidget *root); static void create_spinners(GtkWidget *root); static void create_expander(GtkWidget *root); static void create_frames(GtkWidget *root1, GtkWidget *root2); static void create_notebooks(GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treeview(GtkWidget *root); static void create_scales(GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar(GtkWidget *root); static GtkWidget* create_menu(GtkWidget *root, gchar *text, GtkAccelGroup *accels); static GtkWidget* create_menuitem_tearoff(GtkWidget *menu); static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb); static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group); static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function); static void accels_load(); static void accels_select(GtkWidget *widget); static void accels_deselect(GtkWidget *widget); static gboolean accels_change(GtkWidget *widget, GdkEventKey *event); static void accels_save(); static void dialog_open(); static void dialog_recent(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_calendar(); static void dialog_scales(); // run run run int main(int argc, gchar **argv) { awf_debug = g_getenv("AWF_DEBUG") != NULL; awf_trace = g_getenv("AWF_TRACE") != NULL; if (awf_trace) g_printf("\033[36m[trace]\033[00m main()\n"); current_theme = g_strdup("auto"); opt_theme = g_strdup("auto"); int opt = 0, status = 0; hash_system_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); hash_user_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/share/themes) directory = gtk_rc_get_theme_dir(); awf_load_theme(hash_system_theme, directory); g_free(directory); g_hash_table_remove(hash_system_theme, "Default"); g_hash_table_remove(hash_system_theme, "Emacs"); list_system_theme = g_list_sort(g_hash_table_get_keys(hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.themes) directory = g_build_filename(g_get_home_dir(), ".themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); list_user_theme = g_list_sort(g_hash_table_get_keys(hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale(LC_ALL, ""); #if defined (G_OS_WIN32) directory = g_build_filename("share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, directory); g_free(directory); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, NULL, 'x'}, {"version", no_argument, NULL, 'v'}, {"list", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; gchar *cVersion, *t1, *t2, *t3, *t4; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf("%s\n", VERSION); return status; // --list -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup(hash_system_theme, optarg) || g_hash_table_lookup(hash_user_theme, optarg)) { g_free(opt_theme); opt_theme = g_strdup(optarg); } break; // --screenshot -s case 's': opt_screenshot = g_strdup(optarg); break; // --ltr case 'y': current_direction = 1; // GTK_TEXT_DIR_LTR break; // --rtl case 'z': current_direction = 2; // GTK_TEXT_DIR_RTL break; // --help (via GtkApplication) -h // --help/x not supported by GTK 2.x case 'x': case 'h': default: #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) cVersion = "C23"; else if (__STDC_VERSION__ >= 201710L) cVersion = "C17"; else if (__STDC_VERSION__ >= 201112L) cVersion = "C11"; else if (__STDC_VERSION__ >= 199901L) cVersion = "C99"; else if (__STDC_VERSION__ >= 199409L) cVersion = "C95"; else cVersion = "C (unknown)"; #else cVersion = "C89/C90"; #endif g_printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", t1 = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", t2 = g_strdup_printf(_app("Run and save a screenshot on %s (PNG)."), "SIGHUP"), "--ltr ", _app("Run with text from left to right (Left-To-Right)."), "--rtl ", _app("Run with text from right to left (Right-To-Left)."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), cVersion, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ); g_free(t1); g_free(t2); g_free(t3); g_free(t4); return status; } } // create and show window gtk_init(&argc, &argv); create_window(NULL); return status; } static void quit() { if (awf_trace) g_printf("\033[36m[trace]\033[00m quit()\n"); g_list_free(list_system_theme); g_list_free(list_user_theme); list_system_theme = NULL; list_user_theme = NULL; g_hash_table_destroy(hash_system_theme); g_hash_table_destroy(hash_user_theme); hash_system_theme = NULL; hash_user_theme = NULL; accels_save(); gtk_main_quit(); } static void awf_load_theme(GHashTable* hashtable, gchar *directory) { if (awf_trace) g_printf("\033[36m[trace]\033[00m awf_load_theme(%s)\n", directory); if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { if (awf_debug) g_printf("\033[33m[debug]\033[00m themes_dir: %s\n", directory); GDir *dir = g_dir_open(directory, 0, NULL); if (dir) { const gchar *theme; while ((theme = g_dir_read_name(dir)) != NULL) { gchar *themePath = g_build_filename(directory, theme, GTK_DIRNAME, NULL); if (g_file_test(themePath, G_FILE_TEST_IS_DIR)) g_hash_table_replace(hashtable, g_strdup(theme), g_strdup(theme)); g_free(themePath); } g_dir_close(dir); } } } static inline int awf_compare_theme(gconstpointer a, gconstpointer b) { return g_ascii_strcasecmp((gchar*) a, (gchar*) b); //g_strcmp0((gchar*) a, (gchar*) b); } static void notify_updated_gtktheme(GSettings *settings, gchar *key) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m notify_updated_gtktheme(%s)\n", key); gchar *newTheme = g_settings_get_string(settings, key); if (awf_debug) g_printf("\033[33m[debug]\033[00m SIGNAL_theme_update: %s\n", newTheme); find_and_check_menuradio(menubar, newTheme); g_free(newTheme); } static void update_text_direction(int direction) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (awf_trace) g_printf("\033[36m[trace]\033[00m update_text_direction()*\n"); if ((direction == 1) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); current_direction = 1; gtk_widget_set_default_direction(current_direction); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_RIGHT); } else if ((direction == 2) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_LEFT); current_direction = 2; gtk_widget_set_default_direction(current_direction); } } static void update_theme(gchar *newTheme) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme || !newTheme) return; // we can ignore the signal when the menuitem is deselected // @todo // return; if (awf_trace) g_printf("\033[36m[trace]\033[00m update_theme(%s)*\n", newTheme); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_before: %s » %s\n", current_theme, newTheme); if (strcmp(newTheme, "refresh") == 0) { g_object_set(gtk_settings_get_default(), "gtk-theme-name", "Default", NULL); g_usleep(G_USEC_PER_SEC / 2); g_object_set(gtk_settings_get_default(), "gtk-theme-name", current_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (opt_screenshot) { if (take_screenshot()) { gchar *text = g_strdup_printf(_app("Theme %s reloaded, then screenshot saved (%s)."), current_theme, opt_screenshot); update_statusbar(text); g_free(text); } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded (error saving screenshot)."), current_theme); update_statusbar(text); g_free(text); } } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded."), current_theme); update_statusbar(text); g_free(text); } if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after1: %s\n", current_theme); } else if (strcmp(newTheme, "auto") == 0) { g_free(current_theme); g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after2: %s\n", current_theme); } else if (strcmp(newTheme, current_theme) != 0) { g_free(current_theme); g_object_set(gtk_settings_get_default(), "gtk-theme-name", newTheme, NULL); // @todo? useless for notify_updated_gtktheme g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); while (gtk_events_pending()) gtk_main_iteration(); gtk_window_resize(GTK_WINDOW(window), 50, 50); gchar *text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after3: %s\n", current_theme); } } static void update_treeview_indicator_width(GtkWidget *view) { if (awf_trace) g_printf("\033[36m[trace]\033[00m update_treeview_indicator_width()*\n"); gint minwidth = 20; gtk_widget_style_get(view, "awf-indicator-width", &minwidth, NULL); if (awf_debug) g_printf("check/radio minwidth=%d\n", minwidth); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), 1), minwidth); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), 2), minwidth); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), 9), minwidth); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), 10), minwidth); } static void update_statusbar(gchar *message) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m update_statusbar(%s)\n", message); if (window && statusbar) { GDateTime *now = g_date_time_new_now_local(); gchar *buffer = g_date_time_format(now, "%H:%M:%S"); g_date_time_unref(now); gchar *text = g_strdup_printf("%s - %s", buffer, message); guint ctid = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "gné"); gtk_statusbar_remove_all(GTK_STATUSBAR(statusbar), ctid); gtk_statusbar_push(GTK_STATUSBAR(statusbar), ctid, text); g_free(text); g_free(buffer); } } static void update_values(GtkRange *range) { // ok if (allow_update_values) { allow_update_values = FALSE; double value = gtk_range_get_value(range); //if (awf_trace) // g_printf("\033[36m[trace]\033[00m update_values(%f)*\n", value); // range(0..1) gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), value / 100.0); // range(0..1) gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), value / 100.0); // range(0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale6), value); // text if (gtk_progress_bar_get_text(GTK_PROGRESS_BAR(progress1))) { gchar *text = g_strdup_printf("%i %%", (int) value); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress1), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress2), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress3), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress4), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress8), (value > 50) ? text : NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress9), (value > 50) ? text : NULL); g_free(text); } allow_update_values = TRUE; } } static void update_widgets() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_visible(toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0.0); gtk_widget_set_visible(progress8, TRUE); gtk_widget_set_visible(progress9, TRUE); gtk_widget_set_visible(toolbarentry, TRUE); } // enabled or not gtk_widget_set_sensitive(scale2, toggle); gtk_widget_set_sensitive(scale4, toggle); gtk_widget_set_sensitive(scale6, toggle); gtk_widget_set_sensitive(progress2, toggle); gtk_widget_set_sensitive(progress4, toggle); // text or not if (toggle) { gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress1), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress2), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress3), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress4), NULL); } else { gchar *text = g_strdup_printf("%i %%", (int) gtk_range_get_value(GTK_RANGE(scale1))); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress1), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress2), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress3), text); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress4), text); g_free(text); } gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress8), NULL); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress9), NULL); // marks gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), !toggle, GTK_POS_RIGHT); // scrollable or not gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), !toggle); gtk_window_resize(GTK_WINDOW(window), 50, 50); } static void update_marks(GtkScale *scale, gboolean value, int position) { if (awf_trace) g_printf("\033[36m[trace]\033[00m update_marks(%d)\n", position); if (value) { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, "25"); gtk_scale_add_mark(scale, 50, position, "50"); gtk_scale_add_mark(scale, 75, position, "75"); gtk_scale_add_mark(scale, 100, position, NULL); } else { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, NULL); gtk_scale_add_mark(scale, 50, position, NULL); gtk_scale_add_mark(scale, 75, position, NULL); gtk_scale_add_mark(scale, 100, position, NULL); } } static void clear_entry(GtkEntry *entry) { if (awf_trace) g_printf("\033[36m[trace]\033[00m clear_entry()\n"); gtk_entry_set_text(entry, ""); } static void display_notification() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m display_notification()\n"); #if defined (G_OS_UNIX) if (notify_init(GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new(GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action(notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_add_action(notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_set_timeout(notif, 50000); notify_notification_show(notif, NULL); g_object_unref(G_OBJECT(notif)); notify_uninit(); } #endif } static void find_and_update_labels(GtkWidget *widget) { // whynot if (GTK_IS_LABEL(widget)) { gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_CONTAINER(widget)) { GList *children = gtk_container_get_children(GTK_CONTAINER(widget)); GList *iter; for (iter = children; iter != NULL; iter = iter->next) find_and_update_labels(GTK_WIDGET(iter->data)); g_list_free(children); } } static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search) { // whynot if (awf_trace) g_printf("\033[36m[trace]\033[00m find_and_check_menuradio(%s)\n", search); GList *children = gtk_container_get_children(GTK_CONTAINER(menu)), *iter; GtkWidget *item; for (iter = children; iter != NULL; iter = g_list_next(iter)) { item = GTK_WIDGET(iter->data); if (GTK_IS_MENU_ITEM(item)) { GtkWidget *submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(item)); if (submenu) { // process submenu if (find_and_check_menuradio(submenu, search)) { g_list_free(children); return TRUE; } } else if (gtk_widget_get_sensitive(item)) { // check menuitem by label const gchar *value = gtk_menu_item_get_label(GTK_MENU_ITEM(item)); if (value && (g_strcmp0(value, search) == 0) && GTK_IS_CHECK_MENU_ITEM(item)) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE); // set state checked and activate action g_list_free(children); return TRUE; } } } } g_list_free(children); return FALSE; } static gboolean on_sighup(void *data) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m on_sighup()\n"); update_theme("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot() { // ok (without window borders) if (awf_trace) g_printf("\033[36m[trace]\033[00m take_screenshot()\n"); gboolean result = FALSE; int width = 0, height = 0; GdkWindow *root = gtk_widget_get_window(window); gtk_window_get_size(GTK_WINDOW(window), &width, &height); GdkPixbuf *image = gdk_pixbuf_get_from_drawable(NULL, root, gdk_colormap_get_system(), 0, 0, 0, 0, width, height); if (image) { GError *error = NULL; result = gdk_pixbuf_save(image, opt_screenshot, "png", &error, "compression", "9", NULL); if (!result) { g_printf("\033[1;31m[error]\033[00m screenshot %dx%d save error: %s\n", width, height, error->message); g_error_free(error); } g_object_unref(image); } else { g_printf("\033[1;31m[error]\033[00m screenshot error: width=%d height=%d image=%p\n", width, height, image); } return result; } // layout and widgets static void create_window(gpointer app) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_window()\n"); GtkWidget *vboxWindow, *widgets; gchar *text, *value; // to set width of radio and check columns in treeview (awf-indicator-width) gtk_widget_class_install_style_property(GTK_WIDGET_CLASS(g_type_class_ref(GTK_TYPE_TREE_VIEW)), g_param_spec_int( "awf-indicator-width", "awf-indicator-width", "awf-indicator-width", -1, G_MAXINT, 20, // min, max, default G_PARAM_READABLE)); // window window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_name(GTK_WIDGET(window), "AwfMainWindow"); gtk_window_set_icon_name(GTK_WINDOW(window), GETTEXT_PACKAGE); text = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(window), text); g_free(text); // theme auto or from command line if (strcmp(current_theme, opt_theme) != 0) update_theme(opt_theme); else update_theme(current_theme); if (current_direction == 0) current_direction = (gtk_widget_get_default_direction() == GTK_TEXT_DIR_LTR) ? 1 : 2; // layout vboxWindow = BOXV; gtk_container_add(GTK_CONTAINER(window), vboxWindow); menubar = gtk_menu_bar_new(); allow_update_theme = FALSE; create_traditional_menubar(menubar); add_to(vboxWindow, menubar, FALSE, FALSE, 0, 0); allow_update_theme = TRUE; toolbar = gtk_toolbar_new(); create_toolbar(toolbar); add_to(vboxWindow, toolbar, FALSE, FALSE, 0, 0); widgets = BOXV; add_to(vboxWindow, widgets, TRUE, TRUE, 0, 0); create_widgets(widgets); statusbar = gtk_statusbar_new(); add_to(vboxWindow, statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); // go go go update_text_direction(current_direction); g_signal_connect(window, "destroy", G_CALLBACK(quit), NULL); #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add(SIGHUP, on_sighup, NULL); #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); #endif #if defined (G_OS_WIN32) gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); #endif gtk_widget_show_all(window); add_progressbar_and_entrybar(); gtk_main(); } static void create_widgets(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_widgets()\n"); GtkWidget *hboxColumns = BOXH; GtkWidget *vboxColumn1 = BOXV, *vboxComboEntry = BOXV, *hboxSpin = BOXH, *hboxCheckRadio = BOXH, *vboxCheck = BOXV, *vboxRadio = BOXV; GtkWidget *vboxColumn2 = BOXV, *vboxButtons = BOXV, *hboxBtns1 = BOXH, *hboxBtns2 = BOXH, *hboxBtns3 = BOXH, *hboxBtns4 = BOXH; GtkWidget *vboxColumn3 = BOXV, *vboxProgress1 = BOXV, *vboxProgress2 = BOXV, *hboxProgress1 = BOXH, *hboxProgress2 = BOXH; GtkWidget *vboxColumn4 = BOXV, *vboxOthers = BOXV, *hboxLabel = BOXH, *hboxSpinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hboxFrame1 = BOXH, *hboxFrame2 = BOXH, *hboxNotebook1 = BOXH, *hboxNotebook2 = BOXH; // columns layout add_to(root, hboxColumns, TRUE, TRUE, 0, 0); // column 1 add_to(hboxColumns, vboxColumn1, TRUE, TRUE, 5, 0); add_to(vboxColumn1, vboxComboEntry, FALSE, TRUE, 5, 3); create_combos_entries(vboxComboEntry); add_to(vboxColumn1, hboxSpin, FALSE, FALSE, 5, 0); create_spinbuttons(hboxSpin); add_to(vboxColumn1, hboxCheckRadio, FALSE, TRUE, 5, 0); add_to(hboxCheckRadio, vboxCheck, TRUE, TRUE, 0, 0); create_checkbuttons(vboxCheck); add_to(hboxCheckRadio, vboxRadio, TRUE, TRUE, 0, 0); create_radiobuttons(vboxRadio); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 2 add_to(hboxColumns, vboxColumn2, TRUE, TRUE, 5, 0); add_to(vboxColumn2, vboxButtons, FALSE, TRUE, 5, 3); add_to(vboxColumn2, hboxBtns1, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns2, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns3, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns4, FALSE, FALSE, 5, 3); create_otherbuttons(vboxButtons, hboxBtns1, hboxBtns2, hboxBtns3, hboxBtns4); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 3 add_to(hboxColumns, vboxColumn3, TRUE, TRUE, 5, 0); add_to(vboxColumn3, vboxProgress1, FALSE, TRUE, 6, 10); add_to(vboxColumn3, hboxProgress1, FALSE, FALSE, 5, 10); add_to(vboxColumn3, hboxProgress2, FALSE, FALSE, 5, 10); add_to(vboxColumn3, vboxProgress2, FALSE, TRUE, 5, 10); create_progressbars(vboxProgress1, hboxProgress1, hboxProgress2, vboxProgress2); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 4 add_to(hboxColumns, vboxColumn4, TRUE, TRUE, 5, 0); add_to(vboxColumn4, vboxOthers, FALSE, TRUE, 5, 3); create_treeview(vboxOthers); add_to(vboxOthers, hboxLabel, FALSE, TRUE, 5, 0); create_labels(hboxLabel); add_to(vboxOthers, hboxSpinner, FALSE, TRUE, 5, 0); create_spinners(hboxSpinner); create_expander(vboxOthers); add_to(root, SEPH, FALSE, FALSE, 0, 0); // paned layout add_to(root, vpane, TRUE, TRUE, 0, 0); gtk_paned_pack1(GTK_PANED(vpane), hpane1, TRUE, FALSE); gtk_widget_set_size_request(hpane1, -1, 70); // The 70 gtk_box_set_homogeneous(GTK_BOX(hboxFrame1), TRUE); gtk_box_set_spacing(GTK_BOX(hboxFrame1), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxFrame1), 10); gtk_paned_add1(GTK_PANED(hpane1), hboxFrame1); gtk_box_set_homogeneous(GTK_BOX(hboxFrame2), TRUE); gtk_box_set_spacing(GTK_BOX(hboxFrame2), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxFrame2), 10); gtk_paned_add2(GTK_PANED(hpane1), hboxFrame2); create_frames(hboxFrame1, hboxFrame2); gtk_paned_pack2(GTK_PANED(vpane), hpane2, TRUE, FALSE); //gtk_widget_set_size_request(hpane2, -1, 119); // The 120 gtk_box_set_homogeneous(GTK_BOX(hboxNotebook1), TRUE); gtk_box_set_spacing(GTK_BOX(hboxNotebook1), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxNotebook1), 10); gtk_paned_add1(GTK_PANED(hpane2), hboxNotebook1); gtk_box_set_homogeneous(GTK_BOX(hboxNotebook2), TRUE); gtk_box_set_spacing(GTK_BOX(hboxNotebook2), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxNotebook2), 10); gtk_paned_add2(GTK_PANED(hpane2), hboxNotebook2); create_notebooks(hboxNotebook1, hboxNotebook2); } static void add_progressbar_and_entrybar() { if (awf_trace) g_printf("\033[36m[trace]\033[00m add_progressbar_and_entrybar()\n"); // entry toolbar (= 11) toolbarentry = gtk_entry_new(); gtk_widget_set_visible(toolbarentry, FALSE); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 11)), toolbarentry); // end left // progressbar toolbar (= 13) progress8 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress8), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_visible(progress8, FALSE); GtkWidget *alignment = gtk_alignment_new(0, 0.5, 0, 0); gtk_widget_set_size_request(alignment, -1, 20); gtk_container_add(GTK_CONTAINER(alignment), progress8); gtk_widget_set_visible(alignment, TRUE); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 13)), alignment); // end right // progressbar statusbar progress9 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress9), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_visible(progress9, FALSE); GtkStyle *style = gtk_widget_get_style(progress9); PangoFontDescription *desc = pango_font_description_copy(style->font_desc); pango_font_description_set_size(desc, 7.5 * PANGO_SCALE); gtk_widget_modify_font(progress9, desc); pango_font_description_free(desc); alignment = gtk_fixed_new(); gtk_widget_set_name(progress9, "progress9"); gtk_rc_parse_string("style \"progress9\"\n" "{\n" "GtkProgressBar::min-horizontal-bar-height = 15\n" "GtkProgressBar::yspacing = 0\n" "}\n" "widget \"*.progress9\" style \"progress9\""); gtk_fixed_put(GTK_FIXED(alignment), progress9, 0, 2); gtk_widget_set_visible(alignment, TRUE); gtk_box_pack_end(GTK_BOX(gtk_statusbar_get_message_area(GTK_STATUSBAR(statusbar))), alignment, FALSE, FALSE, 0); } static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing) { // ok if (GTK_IS_INFO_BAR(root)) root = gtk_info_bar_get_content_area(GTK_INFO_BAR(root)); if (GTK_IS_CONTAINER(widget) && (padding > 0)) gtk_container_set_border_width(GTK_CONTAINER(widget), padding); if (GTK_IS_BOX(widget) && (spacing > 0)) gtk_box_set_spacing(GTK_BOX(widget), spacing); gtk_box_pack_start(GTK_BOX(root), widget, expand, fill, 0); } static void create_toolbar(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_toolbar()\n"); GtkWidget *tool1, *menu, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9, *tool11, *tool12, *tool13; // @todo option command line? gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); // GTK_MENU_TOOL_BUTTON tool1 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool1), "document-open"); g_signal_connect(tool1, "clicked", G_CALLBACK(dialog_open), NULL); menu = gtk_menu_new(); create_menuitem(menu, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 3", FALSE, NULL, NULL, NULL); gtk_widget_show_all(menu); gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(tool1), menu); tool2 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool2), "document-open"); gtk_widget_set_sensitive(tool2, FALSE); // GTK_TOOL_BUTTON tool3 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool3), "document-save"); g_signal_connect(tool3, "clicked", G_CALLBACK(dialog_save), NULL); tool4 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool4), "view-refresh"); g_signal_connect_swapped(tool4, "clicked", G_CALLBACK(on_sighup), NULL); tool5 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool5), "camera-photo"); gtk_widget_set_sensitive(tool5, opt_screenshot ? TRUE : FALSE); g_signal_connect(tool5, "clicked", G_CALLBACK(take_screenshot), NULL); tool6 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool6), "dialog-information"); g_signal_connect(tool6, "clicked", G_CALLBACK(display_notification), NULL); #if defined (G_OS_WIN32) gtk_widget_set_sensitive(tool6, FALSE); #endif // GTK_TOGGLE_TOOL_BUTTON tool7 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool7), "list-add"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool7), TRUE); g_signal_connect(tool7, "clicked", G_CALLBACK(update_widgets), NULL); tool8 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool8), "list-remove"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool8), FALSE); g_signal_connect(tool8, "clicked", G_CALLBACK(update_widgets), NULL); tool9 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool9), "window-close"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool9), FALSE); gtk_widget_set_sensitive(tool9, FALSE); // placeholder & separators tool11 = GTK_WIDGET(gtk_tool_item_new()); tool12 = GTK_WIDGET(gtk_tool_item_new()); gtk_tool_item_set_expand(GTK_TOOL_ITEM(tool12), TRUE); tool13 = GTK_WIDGET(gtk_tool_item_new()); // layout gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool1), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool2), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool3), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool4), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool5), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool6), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool7), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool8), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool9), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool11), -1); // = 11 gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool12), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool13), -1); // = 13 } static void create_combos_entries(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_combos_entries()\n"); GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; // GTK_COMBO_BOX combo1 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo1), 0); combo2 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo2), 0); gtk_widget_set_sensitive(combo2, FALSE); combo3 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo3), 0); combo4 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo4), 0); gtk_widget_set_sensitive(combo4, FALSE); // GTK_ENTRY entry1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry1), "Entry"); entry2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry2), "Entry"); gtk_widget_set_sensitive(entry2, FALSE); entry3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry3), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_SECONDARY, "edit-find"); g_signal_connect(entry3, "icon-press", G_CALLBACK(clear_entry), NULL); entry4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry4), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_widget_set_sensitive(entry4, FALSE); // layout add_to(root, combo1, FALSE, FALSE, 0, 0); add_to(root, combo2, FALSE, FALSE, 0, 0); add_to(root, combo3, FALSE, FALSE, 0, 0); add_to(root, combo4, FALSE, FALSE, 0, 0); add_to(root, entry1, FALSE, FALSE, 0, 0); add_to(root, entry2, FALSE, FALSE, 0, 0); add_to(root, entry3, FALSE, FALSE, 0, 0); add_to(root, entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_spinbuttons()\n"); GtkWidget *spinbutton1, *spinbutton2; // GTK_SPIN_BUTTON spinbutton1 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton2), 1); gtk_widget_set_sensitive(spinbutton2, FALSE); // layout add_to(root, spinbutton1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinbutton2, FALSE, FALSE, 0, 0); } static void create_checkbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_checkbuttons()\n"); GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // GTK_CHECK_BUTTON checkbutton1 = gtk_check_button_new_with_label("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label("Check btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label("Check btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label("Check btn 4"); gtk_widget_set_sensitive(checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label("Check btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton5), TRUE); gtk_widget_set_sensitive(checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label("Check btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton6), TRUE); gtk_widget_set_sensitive(checkbutton6, FALSE); // layout add_to(root, checkbutton1, FALSE, FALSE, 0, 0); add_to(root, checkbutton2, FALSE, FALSE, 0, 0); add_to(root, checkbutton3, FALSE, FALSE, 0, 0); add_to(root, checkbutton4, FALSE, FALSE, 0, 0); add_to(root, checkbutton5, FALSE, FALSE, 0, 0); add_to(root, checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_radiobuttons()\n"); GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; // GTK_RADIO_BUTTON radiobutton1 = gtk_radio_button_new_with_label(NULL, "Radio btn 1"); radiobutton2 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton2), TRUE); radiobutton3 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton3), TRUE); radiobutton4 = gtk_radio_button_new_with_label(NULL, "Radio btn 4"); gtk_widget_set_sensitive(radiobutton4, FALSE); radiobutton5 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton5), TRUE); gtk_widget_set_sensitive(radiobutton5, FALSE); radiobutton6 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton6), TRUE); gtk_widget_set_sensitive(radiobutton6, FALSE); // layout add_to(root, radiobutton1, FALSE, FALSE, 0, 0); add_to(root, radiobutton2, FALSE, FALSE, 0, 0); add_to(root, radiobutton3, FALSE, FALSE, 0, 0); add_to(root, radiobutton4, FALSE, FALSE, 0, 0); add_to(root, radiobutton5, FALSE, FALSE, 0, 0); add_to(root, radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_otherbuttons()\n"); GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14; GtkWidget *combomenu1, *combomenu2, *combomenu3, *combomenu4; // GTK_BUTTON button1 = gtk_button_new_with_label("Button 1"); button2 = gtk_button_new_with_label("Button 2"); gtk_widget_set_sensitive(button2, FALSE); button3 = gtk_toggle_button_new_with_label("Button 3"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button3), TRUE); button4 = gtk_toggle_button_new_with_label("Button 4"); gtk_widget_set_sensitive(button4, FALSE); // GTK_COLOR_BUTTON GdkColor color; gdk_color_parse("#7796ba", &color); button5 = gtk_color_button_new_with_color(&color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); // GTK_FONT_BUTTON button6 = gtk_font_button_new(); find_and_update_labels(button6); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); // GTK_FILE_CHOOSER_BUTTON button7 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_OPEN); find_and_update_labels(button7); gtk_widget_set_size_request(button7, 180, -1); // The 186 gtk_widget_set_tooltip_text(button7, _app("Choose a file")); button8 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); find_and_update_labels(button8); gtk_widget_set_size_request(button8, 180, -1); // The 186 gtk_widget_set_tooltip_text(button8, _app("Choose a folder")); // @todo < 3.8 not null // GTK_OPTION_MENU combomenu1 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu1), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu1), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu1), gtk_menu_item_new_with_label("Option 3")); button9 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button9), combomenu1); combomenu2 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu2), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu2), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu2), gtk_menu_item_new_with_label("Option 3")); button10 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button10), combomenu2); gtk_widget_set_sensitive(button10, FALSE); combomenu3 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu3), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu3), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu3), gtk_menu_item_new_with_label("Option 3")); button11 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button11), combomenu3); combomenu4 = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu4), gtk_menu_item_new_with_label("Option 1")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu4), gtk_menu_item_new_with_label("Option 2")); gtk_menu_shell_append(GTK_MENU_SHELL(combomenu4), gtk_menu_item_new_with_label("Option 3")); button12 = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(button12), combomenu4); gtk_widget_set_sensitive(button12, FALSE); // GTK_LINK_BUTTON button13 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive(button14, FALSE); // GTK_VOLUME_BUTTON button15 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), 0.5); g_object_set((GObject*) button15, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu button16 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button16), 0); gtk_widget_set_sensitive(button16, FALSE); g_object_set((GObject*) button16, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu // layout add_to(root1, button1, FALSE, FALSE, 0, 0); add_to(root1, button2, FALSE, FALSE, 0, 0); add_to(root1, button3, FALSE, FALSE, 0, 0); add_to(root1, button4, FALSE, FALSE, 0, 0); add_to(root1, button5, FALSE, FALSE, 0, 0); add_to(root1, button6, FALSE, FALSE, 0, 0); add_to(root1, button7, FALSE, FALSE, 0, 0); add_to(root1, button8, FALSE, FALSE, 0, 0); add_to(root2, button9, FALSE, FALSE, 0, 0); add_to(root2, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root2, button10, FALSE, FALSE, 0, 0); add_to(root3, button11, FALSE, FALSE, 0, 0); add_to(root3, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root3, button12, FALSE, FALSE, 0, 0); add_to(root4, button13, FALSE, FALSE, 0, 0); add_to(root4, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root4, button14, FALSE, FALSE, 0, 0); add_to(root5, button15, FALSE, FALSE, 0, 0); add_to(root5, button16, FALSE, FALSE, 0, 0); } static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_progressbars()\n"); // GTK_PROGRESS_BAR progress1 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress1), GTK_PROGRESS_LEFT_TO_RIGHT); progress2 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress2), GTK_PROGRESS_RIGHT_TO_LEFT); progress3 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress3), GTK_PROGRESS_TOP_TO_BOTTOM); gtk_widget_set_size_request(progress3, -1, 100); // The 100 progress4 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), 0.5); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(progress4), GTK_PROGRESS_BOTTOM_TO_TOP); // GTK_SCALE scale1 = create_horizontal_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale1, "value_changed", G_CALLBACK(update_values), NULL); scale2 = create_horizontal_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale2, "value_changed", G_CALLBACK(update_values), NULL); scale3 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale3, "value_changed", G_CALLBACK(update_values), NULL); scale4 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale4, "value_changed", G_CALLBACK(update_values), NULL); scale5 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); update_marks(GTK_SCALE(scale5), FALSE, GTK_POS_LEFT); g_signal_connect(scale5, "value_changed", G_CALLBACK(update_values), NULL); scale6 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); update_marks(GTK_SCALE(scale6), FALSE, GTK_POS_RIGHT); g_signal_connect(scale6, "value_changed", G_CALLBACK(update_values), NULL); // layout add_to(root1, progress1, FALSE, FALSE, 0, 0); add_to(root1, progress2, FALSE, FALSE, 0, 0); add_to(root1, scale1, FALSE, FALSE, 0, 0); add_to(root1, scale2, FALSE, FALSE, 0, 0); add_to(root2, progress3, FALSE, FALSE, 0, 0); add_to(root2, progress4, FALSE, FALSE, 0, 0); add_to(root3, scale3, FALSE, FALSE, 0, 0); add_to(root3, scale5, FALSE, FALSE, 0, 0); add_to(root3, scale6, FALSE, FALSE, 0, 0); add_to(root3, scale4, FALSE, FALSE, 0, 0); } static void create_labels(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_labels()\n"); GtkWidget *label1, *label2; // GTK_LABEL label1 = gtk_label_new("Label 1"); label2 = gtk_label_new("Label 2"); gtk_widget_set_sensitive(label2, FALSE); // layout add_to(root, label1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, label2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_spinners()\n"); GtkWidget *spinner1, *spinner2; // GTK_SPINNER spinner1 = gtk_spinner_new(); gtk_widget_set_size_request(spinner1, 20, 20); spinner2 = gtk_spinner_new(); gtk_widget_set_size_request(spinner2, 20, 20); gtk_widget_set_sensitive(spinner2, FALSE); //gtk_spinner_start(GTK_SPINNER(spinner2)); // layout add_to(root, spinner1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinner2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_expander()\n"); GtkWidget *expander, *scrolledWindow, *tv; GtkTextBuffer *buffer; gchar *text; // GTK_EXPANDER expander = gtk_expander_new(_app("More...")); gtk_expander_set_expanded(GTK_EXPANDER(expander), TRUE); // GTK_SCROLLED_WINDOW scrolledWindow = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolledWindow, -1, 120); tv = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv), GTK_WRAP_WORD); text = g_strdup_printf("%s %s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer), text, -1); g_free(text); // layout gtk_container_add(GTK_CONTAINER(scrolledWindow), tv); gtk_container_add(GTK_CONTAINER(expander), scrolledWindow); add_to(root, expander, FALSE, FALSE, 0, 0); } static void create_frames(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_frames()\n"); GtkWidget *frame1, *frame2, *frame3, *frame4; // GTK_FRAME frame1 = gtk_frame_new("Frame (shadow in)"); gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_IN); frame2 = gtk_frame_new("Frame (shadow out)"); gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_OUT); frame3 = gtk_frame_new("Frame (shadow etched in)"); gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_IN); frame4 = gtk_frame_new("Frame (shadow etched out)"); gtk_frame_set_shadow_type(GTK_FRAME(frame4), GTK_SHADOW_ETCHED_OUT); gtk_widget_set_sensitive(frame4, FALSE); // layout add_to(root1, frame1, TRUE, TRUE, 0, 0); add_to(root1, frame2, TRUE, TRUE, 0, 0); add_to(root2, frame3, TRUE, TRUE, 0, 0); add_to(root2, frame4, TRUE, TRUE, 0, 0); } static void create_notebooks(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_notebooks()\n"); // GTK_NOTEBOOK notebook1 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook1)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook1), GTK_POS_TOP); create_notebook_tab(notebook1, "Tab1", NULL, FALSE); create_notebook_tab(notebook1, "Tab2", NULL, FALSE); create_notebook_tab(notebook1, "Tab3", NULL, TRUE); create_notebook_tab(notebook1, "Tab4", NULL, TRUE); notebook2 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook2)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook2), GTK_POS_BOTTOM); create_notebook_tab(notebook2, "Tab1", NULL, FALSE); create_notebook_tab(notebook2, "Tab2", NULL, FALSE); create_notebook_tab(notebook2, "Tab3", NULL, TRUE); create_notebook_tab(notebook2, "Tab4", NULL, TRUE); notebook3 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook3)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); create_notebook_tab(notebook3, "T1", NULL, FALSE); create_notebook_tab(notebook3, "Tab2", NULL, FALSE); create_notebook_tab(notebook3, "T3b", NULL, TRUE); create_notebook_tab(notebook3, "T4", NULL, TRUE); notebook4 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook4)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); create_notebook_tab(notebook4, "T1", NULL, FALSE); create_notebook_tab(notebook4, "Tab2", NULL, FALSE); create_notebook_tab(notebook4, "T3b", NULL, TRUE); create_notebook_tab(notebook4, "T4", NULL, TRUE); // layout add_to(root1, notebook1, TRUE, TRUE, 0, 0); add_to(root1, notebook2, TRUE, TRUE, 0, 0); add_to(root2, notebook3, TRUE, TRUE, 0, 0); add_to(root2, notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { // ok GtkWidget *headbtn = BOXH, *btn; add_to(headbtn, gtk_label_new(text), TRUE, TRUE, 0, 0); // GTK_BUTTON if (close) { btn = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(btn), gtk_image_new_from_icon_name("window-close", GTK_ICON_SIZE_MENU)); gtk_button_set_relief(GTK_BUTTON(btn), GTK_RELIEF_NONE); gtk_widget_set_name(btn, "close-button"); gtk_rc_parse_string("style \"close-button\"\n" "{\n" "GtkWidget::focus-padding = 0\n" "GtkWidget::focus-line-width = 0\n" "xthickness = 0\n" "ythickness = 0\n" "}\n" "widget \"*.close-button\" style \"close-button\""); gtk_button_set_focus_on_click(GTK_BUTTON(btn), FALSE); add_to(headbtn, btn, FALSE, FALSE, 0, 0); } if (!content) content = BOXV; gtk_widget_show_all(headbtn); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, headbtn); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(notebook), content, TRUE); } static void create_treeview(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_treeview()\n"); GtkWidget *scrolledWindow, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0, minwidth = 20; // data store = gtk_tree_store_new(11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "help-contents", 8, "help-contents", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_reorderable(GTK_TREE_VIEW(view), FALSE); // rows gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(view), FALSE); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(view), TRUE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 0, GTK_SORT_ASCENDING); g_object_unref(G_OBJECT(store)); idx = 0; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 1; renderer = gtk_cell_renderer_toggle_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), minwidth); idx = 2; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), minwidth); idx = 3; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 4; renderer = gtk_cell_renderer_progress_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), minwidth); idx = 10; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), minwidth); // colors for lines gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE); // scrolled window scrolledWindow = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolledWindow, 200, 200); // The 200 gtk_widget_set_size_request(view, 200, 200); // The 200 gtk_container_add(GTK_CONTAINER(scrolledWindow), view); add_to(root, scrolledWindow, FALSE, FALSE, 0, 0); g_signal_connect(view, "style-set", G_CALLBACK(update_treeview_indicator_width), NULL); } static void create_scales(GtkWidget *notebook, gchar *text, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_scales()\n"); GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value(GTK_RANGE(scale1)); gtk_container_set_border_width(GTK_CONTAINER(hbox), 12); // vertical scales scale1v = create_vertical_scale(value, FALSE, FALSE, position); scale2v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2v), FALSE, GTK_POS_LEFT); scale3v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3v), TRUE, GTK_POS_LEFT); scale4v = create_vertical_scale(value, TRUE, FALSE, position); scale5v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5v), FALSE, GTK_POS_LEFT); scale6v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6v), TRUE, GTK_POS_LEFT); scale7v = create_vertical_scale(value, FALSE, TRUE, position); scale8v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale(value, TRUE, TRUE, position); scale11v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale(value, FALSE, FALSE, position); scale2h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale(value, TRUE, FALSE, position); scale5h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale(value, FALSE, TRUE, position); scale8h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale(value, TRUE, TRUE, position); scale11h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to(hbox, vbox1, TRUE, TRUE, 5, 5); add_to(vbox1, scale1h, FALSE, FALSE, 5, 5); add_to(vbox1, scale2h, FALSE, FALSE, 5, 5); add_to(vbox1, scale3h, FALSE, FALSE, 5, 5); add_to(vbox1, scale4h, FALSE, FALSE, 5, 5); add_to(vbox1, scale5h, FALSE, FALSE, 5, 5); add_to(vbox1, scale6h, FALSE, FALSE, 5, 5); add_to(hbox, vbox2, TRUE, TRUE, 5, 5); add_to(vbox2, hboxa, TRUE, TRUE, 0, 0); add_to(hboxa, scale1v, FALSE, FALSE, 5, 5); add_to(hboxa, scale2v, FALSE, FALSE, 5, 5); add_to(hboxa, scale3v, FALSE, FALSE, 5, 5); add_to(hboxa, scale7v, FALSE, FALSE, 5, 5); add_to(hboxa, scale8v, FALSE, FALSE, 5, 5); add_to(hboxa, scale9v, FALSE, FALSE, 5, 5); add_to(vbox2, hboxb, TRUE, TRUE, 0, 0); add_to(hboxb, scale4v, FALSE, FALSE, 5, 5); add_to(hboxb, scale5v, FALSE, FALSE, 5, 5); add_to(hboxb, scale6v, FALSE, FALSE, 5, 5); add_to(hboxb, scale10v, FALSE, FALSE, 5, 5); add_to(hboxb, scale11v, FALSE, FALSE, 5, 5); add_to(hboxb, scale12v, FALSE, FALSE, 5, 5); add_to(hbox, vbox3, TRUE, TRUE, 5, 5); add_to(vbox3, scale7h, FALSE, FALSE, 5, 5); add_to(vbox3, scale8h, FALSE, FALSE, 5, 5); add_to(vbox3, scale9h, FALSE, FALSE, 5, 5); add_to(vbox3, scale10h, FALSE, FALSE, 5, 5); add_to(vbox3, scale11h, FALSE, FALSE, 5, 5); add_to(vbox3, scale12h, FALSE, FALSE, 5, 5); create_notebook_tab(notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_horizontal_scale()\n"); GtkWidget *scale; scale = gtk_hscale_new_with_range(0, 100, 1); gtk_range_set_value(GTK_RANGE(scale), value); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_widget_set_size_request(scale, 186, -1); // The 186 return scale; } static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_vertical_scale()\n"); GtkWidget *scale; scale = gtk_vscale_new_with_range(0, 100, 1); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_range_set_value(GTK_RANGE(scale), value); gtk_widget_set_size_request(scale, -1, 100); // The 100 return scale; } // traditional menu - common gtk2/3 except one line static void create_traditional_menubar(GtkWidget *root) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_traditional_menubar()\n"); GtkWidget *menu, *submenu, *menuitem, *base; GtkAccelGroup *accels = gtk_accel_group_new(); GSList *group = NULL; GList *iterator; gboolean ok; gtk_window_add_accel_group(GTK_WINDOW(window), accels); // options menu = create_menu(root, _app("_Options"), accels); // @todo option command line? if (g_getenv("AWF_TEAROFF") != NULL) create_menuitem_tearoff(menu); create_menuitem(menu, "gtk-open", FALSE, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, _app("Open recent file"), FALSE, AWF_ACCEL_RECE, AWF_RECE, dialog_recent); create_menuitem(menu, "gtk-save", FALSE, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, "gtk-refresh", FALSE, AWF_ACCEL_REFR, AWF_REFR, G_CALLBACK(on_sighup)); // G_CALLBACK(update_theme) create_menuitem(menu, _app("Calendar"), FALSE, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, "Scales", FALSE, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem(menu, "gtk-properties", FALSE, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, "gtk-page-setup", FALSE, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, "gtk-print", FALSE, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = create_menu(menu, _app("More..."), accels); create_menuitem(submenu, "gtk-cut", FALSE, AWF_ACCEL_MCUT, AWF_MCUT, NULL); create_menuitem(submenu, "gtk-copy", FALSE, AWF_ACCEL_MCOP, AWF_MCOP, NULL); create_menuitem(submenu, "gtk-paste", FALSE, AWF_ACCEL_MPAS, AWF_MPAS, NULL); submenu = create_menu(menu, _app("Less..."), NULL); gtk_widget_set_sensitive(gtk_menu_get_attach_widget(GTK_MENU(submenu)), FALSE); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE, NULL); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE, NULL); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem(menu, "gtk-close", TRUE, AWF_ACCEL_CLOS, AWF_CLOS, NULL); create_menuitem(menu, "gtk-quit", FALSE, AWF_ACCEL_QUIT, AWF_QUIT, quit); // system themes ok = FALSE; group = NULL; menu = create_menu(root, _app("_System themes"), NULL); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Orchis") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Orchis") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup(hash_user_theme, iterator->data)) { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, TRUE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } else { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } } if (!list_system_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // user themes ok = FALSE; menu = create_menu(root, _app("_User themes"), NULL); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Orchis") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Orchis") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } if (!list_user_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // text direction group = NULL; menu = create_menu(root, _app("_Text direction"), NULL); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 1) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_LTR)); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 2) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_RTL)); // help menu = create_menu(root, _app("_Help"), accels); gtk_widget_set_sensitive(create_menuitem(menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, NULL), FALSE); create_menuitem(menu, "gtk-about", FALSE, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); g_object_set(gtk_settings_get_default(), "gtk-can-change-accels", FALSE, NULL); g_object_unref(accels); } static GtkWidget* create_menu(GtkWidget *root, gchar *text, GtkAccelGroup *accels) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menu(%s)\n", text); GtkWidget *menu, *menuitem; menu = gtk_menu_new(); menuitem = gtk_menu_item_new_with_mnemonic(text); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); gtk_menu_shell_append(GTK_MENU_SHELL(root), menuitem); if (accels) { // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gtk_menu_set_accel_group(GTK_MENU(menu), accels); gtk_widget_set_events(menu, GDK_KEY_RELEASE_MASK); g_signal_connect(menu, "key-release-event", G_CALLBACK(accels_change), NULL); } return menu; } static GtkWidget* create_menuitem_tearoff(GtkWidget *menu) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem_tearoff()\n"); GtkWidget *menuitem; menuitem = gtk_tearoff_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem_check(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_check_menu_item_new_with_mnemonic(text); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem_radio(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_radio_menu_item_new_with_mnemonic(group, text); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem(%s)\n", text); GtkWidget *menuitem; GdkModifierType mods; guint key; if (g_str_has_prefix(text, "gtk-")) menuitem = gtk_image_menu_item_new_from_stock(text, NULL); else menuitem = gtk_image_menu_item_new_with_mnemonic(text); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_widget_set_sensitive(menuitem, !dsb); if (accel && kmp) { gtk_accelerator_parse(accel, &key, &mods); gtk_accel_map_add_entry(kmp, key, mods); } if (kmp) { gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), kmp); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x g_signal_connect(menuitem, "select", G_CALLBACK(accels_select), NULL); g_signal_connect(menuitem, "deselect", G_CALLBACK(accels_deselect), NULL); } if (function) g_signal_connect(menuitem, "activate", function, NULL); return menuitem; } static void accels_load() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_load()\n"); gchar *oldPath = g_build_filename(g_get_home_dir(), ".awf-gtk-accels", NULL); if (g_file_test(oldPath, G_FILE_TEST_EXISTS)) { gchar *newPath = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); g_rename(oldPath, newPath); g_free(newPath); } g_free(oldPath); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) gtk_accel_map_load(path); g_free(path); } static void accels_select(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x current_menuitem = widget; } static void accels_deselect(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (current_menuitem == widget) current_menuitem = NULL; } static gboolean accels_change(GtkWidget *widget, GdkEventKey *event) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_change()\n"); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://github.com/GNOME/gtk/commit/2d79334bb069224966b3dcd8456967c9800e8fd0 if (current_menuitem) { GtkMenuItem *menuitem = GTK_MENU_ITEM(current_menuitem); gchar *key = gdk_keyval_name(event->keyval); const gchar *acl = gtk_menu_item_get_accel_path(menuitem); if ( key && acl && (strcmp(key, "Control_L") != 0) && (strcmp(key, "Control_R") != 0) && (strcmp(key, "Shift_L") != 0) && (strcmp(key, "Shift_R") != 0) && (strcmp(key, "Super_L") != 0) && (strcmp(key, "Super_R") != 0) && (strcmp(key, "Meta_L") != 0) && (strcmp(key, "Meta_R") != 0) && (strcmp(key, "Alt_L") != 0) && (strcmp(key, "Alt_R") != 0) ) { gboolean del = (event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace); if ( del || // f1..12 ((event->keyval >= GDK_KEY_F1) && (event->keyval <= GDK_KEY_F12)) || // ctrl/shift/super/alt + ? (event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK) || (event->state & GDK_SUPER_MASK) || (event->state & GDK_META_MASK) ) { must_save_accels = TRUE; gtk_accel_map_change_entry( acl, del ? 0 : gdk_keyval_to_lower(event->keyval), del ? 0 : event->state & gtk_accelerator_get_default_mod_mask(), TRUE); if (awf_debug) g_printf("\033[33m[debug]\033[00m new_shortcut: %s\n", del ? "none" : gtk_accelerator_name(gdk_keyval_to_lower(event->keyval), event->state & gtk_accelerator_get_default_mod_mask())); return TRUE; } } } return FALSE; } static void accels_save() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_save()\n"); // gtk-can-change-accels for GTK 2.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (must_save_accels) { gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); gtk_accel_map_save(path); g_free(path); } } // dialogs static void dialog_open() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_open()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Open", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileChooserDialog:Open", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), g_get_home_dir()); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_recent() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_recent()\n"); GtkWidget *dialog = gtk_recent_chooser_dialog_new( "GtkRecentChooserDialog", GTK_WINDOW(window), "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkRecentChooserDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_save() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_save()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Save", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-save", GTK_RESPONSE_ACCEPT, NULL); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileChooserDialog:Save", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), g_get_home_dir()); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_message() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_message()\n"); GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkMessageDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_page_setup() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_page_setup()\n"); // PKG_CHECK_MODULES(GTK2, [gtk+-2.0 >= 2.24.0 gtk+-unix-print-2.0], ... //GtkWidget *dialog = gtk_page_setup_unix_dialog_new("GtkPageSetupUnixDialog", GTK_WINDOW(window)); //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPageSetup *setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(window), NULL, NULL); g_object_unref(setup); } static void dialog_print() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_print()\n"); //GtkWidget *dialog = gtk_print_unix_dialog_new("GtkPrintUnixDialog", GTK_WINDOW(window)); //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPrintOperation *op = gtk_print_operation_new(); gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL); g_object_unref(op); } static void dialog_about() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_about()\n"); GdkPixbuf *pixbuf = NULL; #if defined (G_OS_WIN32) extern GdkPixbuf *gdk_win32_icon_to_pixbuf_libgtk_only(HICON hicon); HICON hIcon = (HICON) LoadImage(GetModuleHandle(NULL), "IDI_ICON1", IMAGE_ICON, 48, 48, LR_DEFAULTSIZE); if (hIcon) pixbuf = gdk_win32_icon_to_pixbuf_libgtk_only(hIcon); #endif gchar *cVersion; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) cVersion = "C23"; else if (__STDC_VERSION__ >= 201710L) cVersion = "C17"; else if (__STDC_VERSION__ >= 201112L) cVersion = "C11"; else if (__STDC_VERSION__ >= 199901L) cVersion = "C99"; else if (__STDC_VERSION__ >= 199409L) cVersion = "C95"; else cVersion = "C (unknown)"; #else cVersion = "C89/C90"; #endif gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog(GTK_WINDOW(window), "version", VERSION, "comments", t1 = g_strdup_printf("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf(_app("Remove %s file"), "~/.awf-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), cVersion, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2026 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo-icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo", pixbuf, "license", _app("A widget factory 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."), "wrap-license", TRUE, NULL); g_free(t1); g_free(t2); g_free(t3); g_free(t4); #if defined (G_OS_WIN32) if (hIcon) { if (pixbuf) g_object_unref(pixbuf); DestroyIcon(hIcon); } #endif } static void dialog_calendar() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_calendar()\n"); GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); // info bars and calendar infobar = gtk_info_bar_new_with_buttons("gtk-ok", GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_INFO); label = gtk_label_new(_app("This is an info bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons(_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new(_app("This is a question bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_WARNING); label = gtk_label_new(_app("This is a warning bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_ERROR); label = gtk_label_new(_app("This is an error bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new(); gtk_calendar_set_display_options(GTK_CALENDAR(calendar), GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES | GTK_CALENDAR_SHOW_WEEK_NUMBERS); add_to(vbox, calendar, FALSE, FALSE, 0, 0); // dialog gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, vbox, TRUE, TRUE, 5, 5); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-close", GTK_RESPONSE_OK); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_set_size_request(dialog, 350, -1); gtk_widget_show_all(dialog); gtk_widget_grab_focus(GTK_WIDGET(btn)); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_scales() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_scales()\n"); GtkWidget *dialog, *notebook, *area, *btn; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); create_scales(notebook, "value top", GTK_POS_TOP); create_scales(notebook, "value right", GTK_POS_RIGHT); create_scales(notebook, "value bottom", GTK_POS_BOTTOM); create_scales(notebook, "value left", GTK_POS_LEFT); gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, notebook, TRUE, TRUE, 5, 5); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-close", GTK_RESPONSE_OK); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_show_all(dialog); gtk_widget_grab_focus(GTK_WIDGET(btn)); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } // yoloawf-extended-4.2.0/src/awf-gtk3.c000066400000000000000000003654251522325530000164620ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated D/21/06/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.22 + GLIB 2.88 + Pango 1.58 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.23 + GLIB 2.89 + Pango 1.57 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) GTK 2.24/3.24/4.22 + GLIB 2.87 + Pango 1.56 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.56 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 * Windows XP SP3 MinGW/msys (2048 MB) GTK 2.24 + GLIB 2.28 + Pango 1.29 & GTK 3.6 + GLIB 2.34 + Pango 1.30 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #if defined (G_OS_WIN32) #include #elif defined (G_OS_UNIX) #include #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GTK_DIRNAME "gtk-3.0" #define GETTEXT_PACKAGE "awf-gtk3" #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) #define SEPH (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) #define SEPV (gtk_separator_new (GTK_ORIENTATION_VERTICAL)) #define PANEH (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)) #define PANEV (gtk_paned_new (GTK_ORIENTATION_VERTICAL)) #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Paste" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP "F12" #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) dgettext(GETTEXT_PACKAGE, x) #define _gtk(x) dgettext("gtk30", x) // global variables static gboolean awf_debug = FALSE; static gboolean awf_trace = FALSE; static gboolean awf_csd = FALSE; static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *menubar = NULL, *toolbar = NULL, *toolbarentry = NULL, *statusbar = NULL; static GtkWidget *headbarCloseLeft = NULL, *headbarCloseRight = NULL, *button15 = NULL, *button16 = NULL; static GtkWidget *progress1 = NULL, *progress2 = NULL, *progress3 = NULL, *progress4 = NULL, *progress8 = NULL, *progress9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *levelbar1 = NULL, *levelbar2 = NULL, *levelbar3 = NULL, *levelbar4 = NULL; static GtkWidget *levelbar5 = NULL, *levelbar6 = NULL, *levelbar7 = NULL, *levelbar8 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static GtkWidget *current_menuitem = NULL; static int current_direction = 0; // GTK_TEXT_DIR_NONE static gchar *current_theme = NULL; static gchar *opt_theme = NULL; static gchar *opt_screenshot = NULL; static gboolean allow_update_theme = TRUE; static gboolean allow_update_values = TRUE; static gboolean must_save_accels = FALSE; // global functions static void awf_load_theme(GHashTable* hashtable, gchar *directory); static inline int awf_compare_theme(gconstpointer a, gconstpointer b); static void notify_updated_gtktheme(GSettings *settings, gchar *key); static void update_text_direction(int direction); static void update_theme(gchar *newTheme); static void update_statusbar(gchar *message); static void update_values(GtkRange *range); static void update_widgets(); static void update_marks(GtkScale *scale, gboolean value, int position); static void clear_entry(GtkEntry *entry); static void display_notification(); static void find_and_update_labels(GtkWidget *widget, gboolean special); static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search); static gboolean on_sighup(void *data); static gboolean take_screenshot(); static void create_window(gpointer app); static void create_widgets(GtkWidget *root); static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing); static void add_progressbar_and_entrybar(); static void create_toolbar(GtkWidget *root); static void create_combos_entries(GtkWidget *root); static void create_spinbuttons(GtkWidget *root); static void create_checkbuttons(GtkWidget *root); static void create_radiobuttons(GtkWidget *root); static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels(GtkWidget *root); static void create_spinners(GtkWidget *root); static void create_expander(GtkWidget *root); static void create_frames(GtkWidget *root1, GtkWidget *root2); static void create_notebooks(GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treeview(GtkWidget *root); static void create_scales(GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar(GtkWidget *root); static GtkWidget* create_menu(GtkWidget *root, gchar *text, GtkAccelGroup *accels); static GtkWidget* create_menuitem_tearoff(GtkWidget *menu); static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb); static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group); static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function); static void accels_load(); static void accels_select(GtkWidget *widget); static void accels_deselect(GtkWidget *widget); static gboolean accels_change(GtkWidget *widget, GdkEventKey *event); static void accels_save(); static void dialog_open(); static void dialog_recent(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_scales(); #if GTK_CHECK_VERSION (3,4,0) static gboolean on_scrolltabs(GtkWidget *widget, GdkEventScroll *event); #endif // run run run int main(int argc, gchar **argv) { awf_debug = g_getenv("AWF_DEBUG") != NULL; awf_trace = g_getenv("AWF_TRACE") != NULL; const gchar *config = g_getenv("GTK_CSD"); if (config && (strcmp(config, "1") == 0)) awf_csd = TRUE; if (awf_trace) g_printf("\033[36m[trace]\033[00m main()\n"); current_theme = g_strdup("auto"); opt_theme = g_strdup("auto"); int opt = 0, status = 0; hash_system_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); hash_user_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/local/share/themes && /usr/share/themes) const char *const *dirs = g_get_system_data_dirs(); for (opt = 0; dirs[opt]; opt++) { directory = g_build_filename(dirs[opt], "themes", NULL); awf_load_theme(hash_system_theme, directory); g_free(directory); } g_hash_table_remove(hash_system_theme, "Default"); g_hash_table_remove(hash_system_theme, "Emacs"); list_system_theme = g_list_sort(g_hash_table_get_keys(hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.local/share/themes && HOME/.themes) directory = g_build_filename(g_get_user_data_dir(), "themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); directory = g_build_filename(g_get_home_dir(), ".themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); list_user_theme = g_list_sort(g_hash_table_get_keys(hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale(LC_ALL, ""); #if defined (G_OS_WIN32) directory = g_build_filename("share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, directory); g_free(directory); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, NULL, 'x'}, {"version", no_argument, NULL, 'v'}, {"list", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; gchar *cVersion, *t1, *t2, *t3, *t4; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf("%s\n", VERSION); return status; // --list -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup(hash_system_theme, optarg) || g_hash_table_lookup(hash_user_theme, optarg)) { g_free(opt_theme); opt_theme = g_strdup(optarg); } break; // --screenshot -s case 's': opt_screenshot = g_strdup(optarg); break; // --ltr case 'y': current_direction = 1; // GTK_TEXT_DIR_LTR break; // --rtl case 'z': current_direction = 2; // GTK_TEXT_DIR_RTL break; // --help (via GtkApplication) -h // --help/x supported by GTK 3.4+ with GLIB 2.42+ case 'x': case 'h': default: if (opt == 'x') { #if GLIB_CHECK_VERSION (2,42,0) && GTK_CHECK_VERSION (3,4,0) break; #endif } #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) cVersion = "C23"; else if (__STDC_VERSION__ >= 201710L) cVersion = "C17"; else if (__STDC_VERSION__ >= 201112L) cVersion = "C11"; else if (__STDC_VERSION__ >= 199901L) cVersion = "C99"; else if (__STDC_VERSION__ >= 199409L) cVersion = "C95"; else cVersion = "C (unknown)"; #else cVersion = "C89/C90"; #endif g_printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", t1 = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", t2 = g_strdup_printf(_app("Run and save a screenshot on %s (PNG)."), "SIGHUP"), "--ltr ", _app("Run with text from left to right (Left-To-Right)."), "--rtl ", _app("Run with text from right to left (Right-To-Left)."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), cVersion, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_major_version, gtk_minor_version, gtk_micro_version, glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ); g_free(t1); g_free(t2); g_free(t3); g_free(t4); return status; } } // create and show window #if defined (G_OS_WIN32) g_setenv("GSETTINGS_SCHEMA_DIR", ".", TRUE); #endif #if GTK_CHECK_VERSION (3,4,0) // this application can not open files or unknown option -s with GTK 3.4..3.10 // so we are "removing" option from command line #if !GTK_CHECK_VERSION (3,12,0) int i, j, n; for (i = 1; i < argc; i++) { if ((strcmp(argv[i], "-s") == 0) || (strcmp(argv[i], "--screenshot") == 0)) { n = (i + 1 < argc) ? 2 : 1; for (j = i; j <= argc - n; j++) argv[j] = argv[j + n]; argc -= n; break; } } #endif GtkApplication *app = gtk_application_new("org.gtk.awf", G_APPLICATION_NON_UNIQUE); g_signal_connect(app, "activate", G_CALLBACK(create_window), NULL); #if GLIB_CHECK_VERSION (2,42,0) && GTK_CHECK_VERSION (3,4,0) // --version -v g_application_add_main_option(G_APPLICATION(app), "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Show version number."), NULL); // --list -l g_application_add_main_option(G_APPLICATION(app), "list", 'l', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("List available themes."), NULL); // --theme -t g_application_add_main_option(G_APPLICATION(app), "theme", 't', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, _app("Run with the specified theme."), ""); // --screenshot -s gchar *text = g_strdup_printf(_app("Run and save a screenshot on %s (PNG)."), "SIGHUP"); g_application_add_main_option(G_APPLICATION(app), "screenshot", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, text, ""); g_free(text); // --ltr g_application_add_main_option(G_APPLICATION(app), "ltr", 'y', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from left to right (Left-To-Right)."), NULL); // --rtl g_application_add_main_option(G_APPLICATION(app), "rtl", 'z', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from right to left (Right-To-Left)."), NULL); #endif g_application_register(G_APPLICATION(app), NULL, NULL); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); #else gtk_init(&argc, &argv); create_window(NULL); #endif return status; } static void quit() { if (awf_trace) g_printf("\033[36m[trace]\033[00m quit()\n"); g_list_free(list_system_theme); g_list_free(list_user_theme); list_system_theme = NULL; list_user_theme = NULL; g_hash_table_destroy(hash_system_theme); g_hash_table_destroy(hash_user_theme); hash_system_theme = NULL; hash_user_theme = NULL; accels_save(); #if GTK_CHECK_VERSION (3,4,0) g_application_quit(g_application_get_default()); #else gtk_main_quit(); #endif } static void awf_load_theme(GHashTable* hashtable, gchar *directory) { if (awf_trace) g_printf("\033[36m[trace]\033[00m awf_load_theme(%s)\n", directory); if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { if (awf_debug) g_printf("\033[33m[debug]\033[00m themes_dir: %s\n", directory); GDir *dir = g_dir_open(directory, 0, NULL); if (dir) { const gchar *theme; while ((theme = g_dir_read_name(dir)) != NULL) { gchar *themePath = g_build_filename(directory, theme, GTK_DIRNAME, NULL); if (g_file_test(themePath, G_FILE_TEST_IS_DIR)) g_hash_table_replace(hashtable, g_strdup(theme), g_strdup(theme)); g_free(themePath); } g_dir_close(dir); } } } static inline int awf_compare_theme(gconstpointer a, gconstpointer b) { return g_ascii_strcasecmp((gchar*) a, (gchar*) b); //g_strcmp0((gchar*) a, (gchar*) b); } static void notify_updated_gtktheme(GSettings *settings, gchar *key) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m notify_updated_gtktheme(%s)\n", key); if (g_strcmp0("gtk-theme", key) == 0) { gchar *newTheme = g_settings_get_string(settings, key); if (awf_debug) g_printf("\033[33m[debug]\033[00m SIGNAL_theme_update: %s\n", newTheme); find_and_check_menuradio(menubar, newTheme); g_free(newTheme); } else if (headbarCloseLeft && headbarCloseRight) { gboolean closeLeft = FALSE, closeRight = FALSE; // minimize, maximize, close, icon, menu gchar *tokens = g_settings_get_string(settings, key); if (tokens) { if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("\033[33m[debug]\033[00m headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); } gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } } static void update_text_direction(int direction) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme) return; if (awf_trace) g_printf("\033[36m[trace]\033[00m update_text_direction()*\n"); if ((direction == 1) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); current_direction = 1; gtk_widget_set_default_direction(current_direction); #if GTK_CHECK_VERSION (3,20,0) gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); #endif gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_RIGHT); } else if ((direction == 2) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); #if GTK_CHECK_VERSION (3,20,0) gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_RIGHT); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_LEFT); #endif gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_LEFT); current_direction = 2; gtk_widget_set_default_direction(current_direction); } } static void update_theme(gchar *newTheme) { // ok // we must ignore the activate signal when menubar is created if (!allow_update_theme || !newTheme) return; // we can ignore the signal when the menuitem is deselected // @todo // return; if (awf_trace) g_printf("\033[36m[trace]\033[00m update_theme(%s)*\n", newTheme); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_before: %s » %s\n", current_theme, newTheme); if (strcmp(newTheme, "refresh") == 0) { g_object_set(gtk_settings_get_default(), "gtk-theme-name", "Default", NULL); g_usleep(G_USEC_PER_SEC / 2); g_object_set(gtk_settings_get_default(), "gtk-theme-name", current_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (opt_screenshot) { if (take_screenshot()) { gchar *text = g_strdup_printf(_app("Theme %s reloaded, then screenshot saved (%s)."), current_theme, opt_screenshot); update_statusbar(text); g_free(text); } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded (error saving screenshot)."), current_theme); update_statusbar(text); g_free(text); } } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded."), current_theme); update_statusbar(text); g_free(text); } if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after1: %s\n", current_theme); } else if (strcmp(newTheme, "auto") == 0) { g_free(current_theme); g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); gtk_window_resize(GTK_WINDOW(window), 50, 50); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after2: %s\n", current_theme); } else if (strcmp(newTheme, current_theme) != 0) { g_free(current_theme); g_object_set(gtk_settings_get_default(), "gtk-theme-name", newTheme, NULL); // @todo? useless for notify_updated_gtktheme g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); #if GTK_CHECK_VERSION (3,4,0) while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); #else while (gtk_events_pending()) gtk_main_iteration(); #endif gtk_window_resize(GTK_WINDOW(window), 50, 50); gchar *text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after3: %s\n", current_theme); } } static void update_statusbar(gchar *message) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m update_statusbar(%s)\n", message); if (window && statusbar) { GDateTime *now = g_date_time_new_now_local(); gchar *buffer = g_date_time_format(now, "%H:%M:%S"); g_date_time_unref(now); gchar *text = g_strdup_printf("%s - %s", buffer, message); guint ctid = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "gné"); gtk_statusbar_remove_all(GTK_STATUSBAR(statusbar), ctid); gtk_statusbar_push(GTK_STATUSBAR(statusbar), ctid, text); g_free(text); g_free(buffer); GtkStyleContext *ctx = gtk_widget_get_style_context(statusbar); gtk_style_context_remove_class(ctx, "flash"); gtk_widget_queue_draw(statusbar); #if GTK_CHECK_VERSION (3,4,0) while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); #else while (gtk_events_pending()) gtk_main_iteration(); #endif gtk_style_context_add_class(ctx, "flash"); } } static void update_values(GtkRange *range) { // ok if (allow_update_values) { allow_update_values = FALSE; double value = gtk_range_get_value(range); //if (awf_trace) // g_printf("\033[36m[trace]\033[00m update_values(%f)*\n", value); // range(0..1) gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), value / 100.0); #if GTK_CHECK_VERSION (3,6,0) // range(0..1) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), value / 100.0); // range(0..5) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar3))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar4))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar7))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar8))); #endif // range(0..1) gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), value / 100.0); // range(0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale6), value); // text gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), value > 50); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), value > 50); allow_update_values = TRUE; } } static void update_widgets() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_visible(toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0.0); gtk_widget_set_visible(progress8, TRUE); gtk_widget_set_visible(progress9, TRUE); gtk_widget_set_visible(toolbarentry, TRUE); } // enabled or not gtk_widget_set_sensitive(scale2, toggle); gtk_widget_set_sensitive(scale4, toggle); gtk_widget_set_sensitive(scale6, toggle); gtk_widget_set_sensitive(progress2, toggle); gtk_widget_set_sensitive(progress4, toggle); #if GTK_CHECK_VERSION (3,6,0) gtk_widget_set_sensitive(levelbar2, toggle); gtk_widget_set_sensitive(levelbar4, toggle); gtk_widget_set_sensitive(levelbar6, toggle); gtk_widget_set_sensitive(levelbar8, toggle); #endif // text or not gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress1), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress2), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress3), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress4), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), FALSE); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), FALSE); // marks gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), !toggle, GTK_POS_RIGHT); // scrollable or not gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), !toggle); gtk_window_resize(GTK_WINDOW(window), 50, 50); } static void update_marks(GtkScale *scale, gboolean value, int position) { if (awf_trace) g_printf("\033[36m[trace]\033[00m update_marks(%d)\n", position); if (value) { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, "25"); gtk_scale_add_mark(scale, 50, position, "50"); gtk_scale_add_mark(scale, 75, position, "75"); gtk_scale_add_mark(scale, 100, position, NULL); } else { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, NULL); gtk_scale_add_mark(scale, 50, position, NULL); gtk_scale_add_mark(scale, 75, position, NULL); gtk_scale_add_mark(scale, 100, position, NULL); } } static void clear_entry(GtkEntry *entry) { if (awf_trace) g_printf("\033[36m[trace]\033[00m clear_entry()\n"); gtk_entry_set_text(entry, ""); } static void display_notification() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m display_notification()\n"); #if defined (G_OS_UNIX) if (notify_init(GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new(GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action(notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_add_action(notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_set_timeout(notif, 50000); notify_notification_show(notif, NULL); g_object_unref(G_OBJECT(notif)); notify_uninit(); } #endif } static void find_and_update_labels(GtkWidget *widget, gboolean special) { // whynot if (GTK_IS_LABEL(widget)) { gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_CELL_LAYOUT(widget)) { GList *cells = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(widget)); GList *iter; for (iter = cells; iter != NULL; iter = iter->next) { if (GTK_IS_CELL_RENDERER_TEXT(iter->data)) { if (special) { // @todo for button8 int width, height; PangoLayout *layout = gtk_widget_create_pango_layout(widget, "Test"); PangoFontDescription *desc = pango_font_description_copy(pango_context_get_font_description(gtk_widget_get_pango_context(widget))); pango_layout_set_font_description(layout, desc); pango_font_description_free(desc); pango_layout_get_pixel_size(layout, &width, &height); g_object_unref(layout); g_object_set(G_OBJECT(iter->data), "width-chars", 15, "max-width-chars", 15, "height", height + 4, NULL); } else { g_object_set(G_OBJECT(iter->data), "ellipsize", PANGO_ELLIPSIZE_END, "ellipsize-set", TRUE, NULL); } } } g_list_free(cells); } else if (GTK_IS_CONTAINER(widget)) { GList *children = gtk_container_get_children(GTK_CONTAINER(widget)); GList *iter; for (iter = children; iter != NULL; iter = iter->next) find_and_update_labels(GTK_WIDGET(iter->data), special); g_list_free(children); } } static gboolean find_and_check_menuradio(GtkWidget *menu, gchar *search) { // whynot if (awf_trace) g_printf("\033[36m[trace]\033[00m find_and_check_menuradio(%s)\n", search); GList *children = gtk_container_get_children(GTK_CONTAINER(menu)), *iter; GtkWidget *item; for (iter = children; iter != NULL; iter = g_list_next(iter)) { item = GTK_WIDGET(iter->data); if (GTK_IS_MENU_ITEM(item)) { GtkWidget *submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(item)); if (submenu) { // process submenu if (find_and_check_menuradio(submenu, search)) { g_list_free(children); return TRUE; } } else if (gtk_widget_get_sensitive(item)) { // check menuitem by label const gchar *value = gtk_menu_item_get_label(GTK_MENU_ITEM(item)); if (value && (g_strcmp0(value, search) == 0) && GTK_IS_CHECK_MENU_ITEM(item)) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE); // set state checked and activate action g_list_free(children); return TRUE; } } } } g_list_free(children); return FALSE; } static gboolean on_sighup(void *data) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m on_sighup()\n"); update_theme("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot() { // ok (without window borders) if (awf_trace) g_printf("\033[36m[trace]\033[00m take_screenshot()\n"); gboolean result = FALSE; int width = 0, height = 0; GdkWindow *root = gtk_widget_get_window(window); gtk_window_get_size(GTK_WINDOW(window), &width, &height); GdkPixbuf *image = gdk_pixbuf_get_from_window(root, 0, 0, width, height); if (image) { GError *error = NULL; result = gdk_pixbuf_save(image, opt_screenshot, "png", &error, "compression", "9", NULL); if (!result) { g_printf("\033[1;31m[error]\033[00m screenshot %dx%d save error: %s\n", width, height, error->message); g_error_free(error); } g_object_unref(image); } else { g_printf("\033[1;31m[error]\033[00m screenshot error: width=%d height=%d image=%p\n", width, height, image); } return result; } // layout and widgets static void create_window(gpointer app) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_window()\n"); if (window) { gtk_window_present(GTK_WINDOW(window)); return; } GtkWidget *vboxWindow, *widgets; gboolean closeLeft = FALSE, closeRight = FALSE; gchar *text, *value; // window #if GTK_CHECK_VERSION (3,4,0) window = gtk_application_window_new(GTK_APPLICATION(app)); #else window = gtk_window_new(GTK_WINDOW_TOPLEVEL); #endif gtk_widget_set_name(GTK_WIDGET(window), "AwfMainWindow"); gtk_window_set_icon_name(GTK_WINDOW(window), GETTEXT_PACKAGE); text = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(window), text); g_free(text); // theme auto or from command line if (strcmp(current_theme, opt_theme) != 0) update_theme(opt_theme); else update_theme(current_theme); if (current_direction == 0) current_direction = (gtk_widget_get_default_direction() == GTK_TEXT_DIR_LTR) ? 1 : 2; // layout vboxWindow = BOXV; gtk_container_add(GTK_CONTAINER(window), vboxWindow); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) { // enable CSD for dialogs // except for custom dialogs g_object_set(gtk_settings_get_default(), "gtk-dialogs-use-header", TRUE, NULL); gtk_window_set_decorated(GTK_WINDOW(window), TRUE); GtkWidget *button; GtkWidget *headerbar = gtk_header_bar_new(); gtk_header_bar_set_title(GTK_HEADER_BAR(headerbar), gtk_window_get_title(GTK_WINDOW(window))); gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(headerbar), FALSE); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(headerbar), TRUE); gchar *tokens; // minimize, maximize, close, icon, menu g_object_get(gtk_widget_get_settings(headerbar), "gtk-decoration-layout", &tokens, NULL); if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("\033[33m[debug]\033[00m headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); // left headbarCloseLeft = gtk_image_new_from_icon_name(GETTEXT_PACKAGE, GTK_ICON_SIZE_BUTTON); gtk_style_context_add_class(gtk_widget_get_style_context(headbarCloseLeft), "app-icon"); gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), headbarCloseLeft); button = gtk_menu_button_new(); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GtkWidget *menu1 = gtk_menu_new(); create_menuitem(menu1, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu1, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu1, "Menu item 3", FALSE, NULL, NULL, NULL); create_menuitem(menu1, "gtk-about", FALSE, NULL, NULL, dialog_about); create_menuitem(menu1, "gtk-quit", FALSE, NULL, NULL, quit); gtk_widget_show_all(menu1); gtk_menu_button_set_popup(GTK_MENU_BUTTON(button), menu1); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn1"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn3"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); // right headbarCloseRight = gtk_image_new_from_icon_name(GETTEXT_PACKAGE, GTK_ICON_SIZE_BUTTON); gtk_style_context_add_class(gtk_widget_get_style_context(headbarCloseRight), "app-icon"); gtk_widget_set_visible(headbarCloseRight, closeRight); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), headbarCloseRight); button = gtk_menu_button_new(); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GtkWidget *menu2 = gtk_menu_new(); create_menuitem(menu2, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu2, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu2, "Menu item 3", FALSE, NULL, NULL, NULL); create_menuitem(menu2, "gtk-about", FALSE, NULL, NULL, dialog_about); create_menuitem(menu2, "gtk-quit", FALSE, NULL, NULL, quit); gtk_widget_show_all(menu2); gtk_menu_button_set_popup(GTK_MENU_BUTTON(button), menu2); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn6"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn4"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); gtk_window_set_titlebar(GTK_WINDOW(window), headerbar); } #endif menubar = gtk_menu_bar_new(); allow_update_theme = FALSE; create_traditional_menubar(menubar); allow_update_theme = TRUE; add_to(vboxWindow, menubar, FALSE, FALSE, 0, 0); toolbar = gtk_toolbar_new(); gtk_style_context_add_class(gtk_widget_get_style_context(toolbar), "primary-toolbar"); create_toolbar(toolbar); //add_to(vboxWindow, toolbar, FALSE, FALSE, 0, 0); gtk_box_pack_start(GTK_BOX(vboxWindow), toolbar, FALSE, FALSE, 0); widgets = BOXV; add_to(vboxWindow, widgets, TRUE, TRUE, 0, 0); create_widgets(widgets); statusbar = gtk_statusbar_new(); #if GTK_CHECK_VERSION (3,20,0) GtkCssProvider *provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(provider, "@keyframes statusbarflash {" " 0% { background-color: yellow; }" " 100% { background-color: transparent; }" "}" "#AwfMainWindow statusbar.flash {" " animation: statusbarflash 1s ease-out forwards;" "}" , -1, NULL); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_FALLBACK); g_object_unref(provider); #endif add_to(vboxWindow, statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); // go go go update_text_direction(current_direction); g_signal_connect(window, "destroy", G_CALLBACK(quit), NULL); #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add(SIGHUP, on_sighup, NULL); #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.cinnamon.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.Marco.general", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-decoration-layout", G_CALLBACK(notify_updated_gtktheme), NULL); #endif #if defined (G_OS_WIN32) gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); #endif gtk_widget_show_all(window); if (headbarCloseLeft && headbarCloseRight) { gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } add_progressbar_and_entrybar(); #if !GTK_CHECK_VERSION (3,4,0) gtk_main(); #endif } static void create_widgets(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_widgets()\n"); GtkWidget *hboxColumns = BOXH; GtkWidget *vboxColumn1 = BOXV, *vboxComboEntry = BOXV, *hboxSpin = BOXH, *hboxCheckRadio = BOXH, *vboxCheck = BOXV, *vboxRadio = BOXV; GtkWidget *vboxColumn2 = BOXV, *vboxButtons = BOXV, *hboxBtns1 = BOXH, *hboxBtns2 = BOXH, *hboxBtns3 = BOXH, *hboxBtns4 = BOXH; GtkWidget *vboxColumn3 = BOXV, *vboxProgress1 = BOXV, *vboxProgress2 = BOXV, *hboxProgress1 = BOXH, *hboxProgress2 = BOXH; GtkWidget *vboxColumn4 = BOXV, *vboxOthers = BOXV, *hboxLabel = BOXH, *hboxSpinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hboxFrame1 = BOXH, *hboxFrame2 = BOXH, *hboxNotebook1 = BOXH, *hboxNotebook2 = BOXH; // columns layout add_to(root, hboxColumns, TRUE, TRUE, 0, 0); // column 1 add_to(hboxColumns, vboxColumn1, TRUE, TRUE, 5, 0); add_to(vboxColumn1, vboxComboEntry, FALSE, TRUE, 5, 3); create_combos_entries(vboxComboEntry); add_to(vboxColumn1, hboxSpin, FALSE, FALSE, 5, 0); create_spinbuttons(hboxSpin); add_to(vboxColumn1, hboxCheckRadio, FALSE, TRUE, 5, 0); add_to(hboxCheckRadio, vboxCheck, TRUE, TRUE, 0, 0); create_checkbuttons(vboxCheck); add_to(hboxCheckRadio, vboxRadio, TRUE, TRUE, 0, 0); create_radiobuttons(vboxRadio); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 2 add_to(hboxColumns, vboxColumn2, TRUE, TRUE, 5, 0); add_to(vboxColumn2, vboxButtons, FALSE, TRUE, 5, 3); add_to(vboxColumn2, hboxBtns1, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns2, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns3, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns4, FALSE, FALSE, 5, 3); create_otherbuttons(vboxButtons, hboxBtns1, hboxBtns2, hboxBtns3, hboxBtns4); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 3 add_to(hboxColumns, vboxColumn3, TRUE, TRUE, 5, 0); add_to(vboxColumn3, vboxProgress1, FALSE, TRUE, 6, 10); add_to(vboxColumn3, hboxProgress1, FALSE, FALSE, 5, 10); add_to(vboxColumn3, hboxProgress2, FALSE, FALSE, 5, 10); add_to(vboxColumn3, vboxProgress2, FALSE, TRUE, 5, 10); create_progressbars(vboxProgress1, hboxProgress1, hboxProgress2, vboxProgress2); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 4 add_to(hboxColumns, vboxColumn4, TRUE, TRUE, 5, 0); add_to(vboxColumn4, vboxOthers, FALSE, TRUE, 5, 3); create_treeview(vboxOthers); add_to(vboxOthers, hboxLabel, FALSE, TRUE, 5, 0); create_labels(hboxLabel); add_to(vboxOthers, hboxSpinner, FALSE, TRUE, 5, 0); create_spinners(hboxSpinner); create_expander(vboxOthers); add_to(root, SEPH, FALSE, FALSE, 0, 0); // paned layout add_to(root, vpane, TRUE, TRUE, 0, 0); gtk_paned_pack1(GTK_PANED(vpane), hpane1, TRUE, FALSE); gtk_widget_set_size_request(hpane1, -1, 70); // The 70 gtk_box_set_homogeneous(GTK_BOX(hboxFrame1), TRUE); gtk_box_set_spacing(GTK_BOX(hboxFrame1), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxFrame1), 10); gtk_paned_add1(GTK_PANED(hpane1), hboxFrame1); gtk_box_set_homogeneous(GTK_BOX(hboxFrame2), TRUE); gtk_box_set_spacing(GTK_BOX(hboxFrame2), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxFrame2), 10); gtk_paned_add2(GTK_PANED(hpane1), hboxFrame2); create_frames(hboxFrame1, hboxFrame2); gtk_paned_pack2(GTK_PANED(vpane), hpane2, TRUE, FALSE); //gtk_widget_set_size_request(hpane2, -1, 120); // The 120 gtk_box_set_homogeneous(GTK_BOX(hboxNotebook1), TRUE); gtk_box_set_spacing(GTK_BOX(hboxNotebook1), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxNotebook1), 10); gtk_paned_add1(GTK_PANED(hpane2), hboxNotebook1); gtk_box_set_homogeneous(GTK_BOX(hboxNotebook2), TRUE); gtk_box_set_spacing(GTK_BOX(hboxNotebook2), 3); gtk_container_set_border_width(GTK_CONTAINER(hboxNotebook2), 10); gtk_paned_add2(GTK_PANED(hpane2), hboxNotebook2); create_notebooks(hboxNotebook1, hboxNotebook2); } static void add_progressbar_and_entrybar() { if (awf_trace) g_printf("\033[36m[trace]\033[00m add_progressbar_and_entrybar()\n"); // entry toolbar (= 11) toolbarentry = gtk_entry_new(); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text(GTK_ENTRY(toolbarentry), "..."); #endif gtk_widget_set_visible(toolbarentry, FALSE); gtk_widget_set_vexpand(toolbarentry, FALSE); gtk_widget_set_valign(toolbarentry, GTK_ALIGN_CENTER); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 11)), toolbarentry); // end left // progressbar toolbar (= 13) progress8 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress8), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_vexpand(progress8, FALSE); gtk_widget_set_valign(progress8, GTK_ALIGN_CENTER); gtk_container_add(GTK_CONTAINER(gtk_toolbar_get_nth_item(GTK_TOOLBAR(toolbar), 13)), progress8); // end right // progressbar statusbar progress9 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress9), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_vexpand(progress9, FALSE); gtk_widget_set_valign(progress9, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(statusbar), progress9, FALSE, FALSE, 0); } static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing) { // ok if (GTK_IS_INFO_BAR(root)) root = gtk_info_bar_get_content_area(GTK_INFO_BAR(root)); if (GTK_IS_CONTAINER(widget) && (padding > 0)) gtk_container_set_border_width(GTK_CONTAINER(widget), padding); if (GTK_IS_BOX(widget) && (spacing > 0)) gtk_box_set_spacing(GTK_BOX(widget), spacing); if (GTK_IS_TOOLBAR(root)) gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(widget), -1); else gtk_box_pack_start(GTK_BOX(root), widget, expand, fill, 0); #if GTK_CHECK_VERSION (3,20,0) if (!GTK_IS_BOX(widget)) { GtkStyleContext *style = gtk_widget_get_style_context(widget); gchar *text = gtk_style_context_to_string(style, GTK_STYLE_CONTEXT_PRINT_RECURSE); // @todo remove [ ] g_strstrip(text); gtk_widget_set_tooltip_text(widget, text); g_free(text); } #endif } static void create_toolbar(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_toolbar()\n"); GtkWidget *tool1, *menu, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9, *tool11, *tool12, *tool13; // @todo option command line? gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS); // GTK_MENU_TOOL_BUTTON tool1 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool1), "document-open"); g_signal_connect(tool1, "clicked", G_CALLBACK(dialog_open), NULL); menu = gtk_menu_new(); create_menuitem(menu, "Menu item 1", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 2", FALSE, NULL, NULL, NULL); create_menuitem(menu, "Menu item 3", FALSE, NULL, NULL, NULL); gtk_widget_show_all(menu); gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(tool1), menu); tool2 = GTK_WIDGET(gtk_menu_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool2), "document-open"); gtk_widget_set_sensitive(tool2, FALSE); // GTK_TOOL_BUTTON tool3 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool3), "document-save"); g_signal_connect(tool3, "clicked", G_CALLBACK(dialog_save), NULL); tool4 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool4), "view-refresh"); g_signal_connect_swapped(tool4, "clicked", G_CALLBACK(on_sighup), NULL); tool5 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool5), "camera-photo"); gtk_widget_set_sensitive(tool5, opt_screenshot ? TRUE : FALSE); g_signal_connect(tool5, "clicked", G_CALLBACK(take_screenshot), NULL); tool6 = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool6), "dialog-information"); g_signal_connect(tool6, "clicked", G_CALLBACK(display_notification), NULL); #if defined (G_OS_WIN32) gtk_widget_set_sensitive(tool6, FALSE); #endif // GTK_TOGGLE_TOOL_BUTTON tool7 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool7), "list-add"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool7), TRUE); g_signal_connect(tool7, "clicked", G_CALLBACK(update_widgets), NULL); tool8 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool8), "list-remove"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool8), FALSE); g_signal_connect(tool8, "clicked", G_CALLBACK(update_widgets), NULL); tool9 = GTK_WIDGET(gtk_toggle_tool_button_new()); gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(tool9), "window-close"); gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(tool9), FALSE); gtk_widget_set_sensitive(tool9, FALSE); // placeholder & separators tool11 = GTK_WIDGET(gtk_tool_item_new()); tool12 = GTK_WIDGET(gtk_tool_item_new()); gtk_tool_item_set_expand(GTK_TOOL_ITEM(tool12), TRUE); tool13 = GTK_WIDGET(gtk_tool_item_new()); // layout add_to(root, tool1, FALSE, FALSE, 0, 0); add_to(root, tool2, FALSE, FALSE, 0, 0); add_to(root, tool3, FALSE, FALSE, 0, 0); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); add_to(root, tool4, FALSE, FALSE, 0, 0); add_to(root, tool5, FALSE, FALSE, 0, 0); add_to(root, tool6, FALSE, FALSE, 0, 0); gtk_toolbar_insert(GTK_TOOLBAR(root), gtk_separator_tool_item_new(), -1); add_to(root, tool7, FALSE, FALSE, 0, 0); add_to(root, tool8, FALSE, FALSE, 0, 0); add_to(root, tool9, FALSE, FALSE, 0, 0); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool11), -1); // = 11 gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool12), -1); gtk_toolbar_insert(GTK_TOOLBAR(root), GTK_TOOL_ITEM(tool13), -1); // = 13 } static void create_combos_entries(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_combos_entries()\n"); GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; // GTK_COMBO_BOX combo1 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo1), 0); combo2 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo2), 0); gtk_widget_set_sensitive(combo2, FALSE); combo3 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo3), 0); combo4 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo4), 0); gtk_widget_set_sensitive(combo4, FALSE); // GTK_ENTRY entry1 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry1), "Entry"); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text(GTK_ENTRY(entry1), "Placeholder"); #endif entry2 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry2), "Entry"); gtk_widget_set_sensitive(entry2, FALSE); entry3 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry3), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_SECONDARY, "edit-find"); g_signal_connect(entry3, "icon-press", G_CALLBACK(clear_entry), NULL); #if GTK_CHECK_VERSION (3,2,0) gtk_entry_set_placeholder_text(GTK_ENTRY(entry3), "Placeholder"); #endif entry4 = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry4), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_widget_set_sensitive(entry4, FALSE); // layout add_to(root, combo1, FALSE, FALSE, 0, 0); add_to(root, combo2, FALSE, FALSE, 0, 0); add_to(root, combo3, FALSE, FALSE, 0, 0); add_to(root, combo4, FALSE, FALSE, 0, 0); add_to(root, entry1, FALSE, FALSE, 0, 0); add_to(root, entry2, FALSE, FALSE, 0, 0); add_to(root, entry3, FALSE, FALSE, 0, 0); add_to(root, entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_spinbuttons()\n"); GtkWidget *spinbutton1, *spinbutton2; // GTK_SPIN_BUTTON spinbutton1 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton2), 1); gtk_widget_set_sensitive(spinbutton2, FALSE); // layout add_to(root, spinbutton1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinbutton2, FALSE, FALSE, 0, 0); } static void create_checkbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_checkbuttons()\n"); GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // GTK_CHECK_BUTTON checkbutton1 = gtk_check_button_new_with_label("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label("Check btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label("Check btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label("Check btn 4"); gtk_widget_set_sensitive(checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label("Check btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton5), TRUE); gtk_widget_set_sensitive(checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label("Check btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(checkbutton6), TRUE); gtk_widget_set_sensitive(checkbutton6, FALSE); // layout add_to(root, checkbutton1, FALSE, FALSE, 0, 0); add_to(root, checkbutton2, FALSE, FALSE, 0, 0); add_to(root, checkbutton3, FALSE, FALSE, 0, 0); add_to(root, checkbutton4, FALSE, FALSE, 0, 0); add_to(root, checkbutton5, FALSE, FALSE, 0, 0); add_to(root, checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_radiobuttons()\n"); GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; // GTK_RADIO_BUTTON radiobutton1 = gtk_radio_button_new_with_label(NULL, "Radio btn 1"); radiobutton2 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton2), TRUE); radiobutton3 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton1)), "Radio btn 3"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton3), TRUE); radiobutton4 = gtk_radio_button_new_with_label(NULL, "Radio btn 4"); gtk_widget_set_sensitive(radiobutton4, FALSE); radiobutton5 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radiobutton5), TRUE); gtk_widget_set_sensitive(radiobutton5, FALSE); radiobutton6 = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(radiobutton4)), "Radio btn 6"); gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(radiobutton6), TRUE); gtk_widget_set_sensitive(radiobutton6, FALSE); // layout add_to(root, radiobutton1, FALSE, FALSE, 0, 0); add_to(root, radiobutton2, FALSE, FALSE, 0, 0); add_to(root, radiobutton3, FALSE, FALSE, 0, 0); add_to(root, radiobutton4, FALSE, FALSE, 0, 0); add_to(root, radiobutton5, FALSE, FALSE, 0, 0); add_to(root, radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_otherbuttons()\n"); GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14, *button17; // GTK_BUTTON button1 = gtk_button_new_with_label("Button 1"); button2 = gtk_button_new_with_label("Button 2"); gtk_widget_set_sensitive(button2, FALSE); button3 = gtk_toggle_button_new_with_label("Button 3"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button3), TRUE); button4 = gtk_toggle_button_new_with_label("Button 4"); gtk_widget_set_sensitive(button4, FALSE); // GTK_COLOR_BUTTON GdkRGBA color; gdk_rgba_parse(&color, "#7796ba"); button5 = gtk_color_button_new_with_rgba(&color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); // GTK_FONT_BUTTON button6 = gtk_font_button_new(); find_and_update_labels(button6, FALSE); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); // GTK_FILE_CHOOSER_BUTTON button7 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_OPEN); find_and_update_labels(button7, FALSE); gtk_widget_set_size_request(button7, 180, -1); // The 186 gtk_widget_set_tooltip_text(button7, _app("Choose a file")); button8 = gtk_file_chooser_button_new("GtkFileChooserDialog:Open", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); find_and_update_labels(button8, TRUE); gtk_widget_set_size_request(button8, 180, -1); // The 186 gtk_widget_set_tooltip_text(button8, _app("Choose a folder")); // @todo < 3.8 not null // GTK_SWITCH (for GTK_OPTION_MENU) button9 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button9), TRUE); button10 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button10), TRUE); gtk_widget_set_sensitive(button10, FALSE); button11 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button11), FALSE); button12 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button12), FALSE); gtk_widget_set_sensitive(button12, FALSE); // GTK_LINK_BUTTON button13 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive(button14, FALSE); // GTK_VOLUME_BUTTON button15 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), 0.5); #if !GTK_CHECK_VERSION (3,12,0) g_object_set((GObject*) button15, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu #endif button16 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button16), 0); gtk_widget_set_sensitive(button16, FALSE); #if !GTK_CHECK_VERSION (3,12,0) g_object_set((GObject*) button16, "size", GTK_ICON_SIZE_BUTTON, NULL); // @todo not working with Ubuntu #endif // GTK_MENU_BUTTON #if GTK_CHECK_VERSION (3,12,0) button17 = gtk_menu_button_new(); gtk_menu_button_set_use_popover(GTK_MENU_BUTTON(button17), TRUE); gtk_button_set_image(GTK_BUTTON(button17), gtk_image_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_BUTTON)); GMenuItem *menuitem; GMenu *menu = g_menu_new(); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 1", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 2", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 3", NULL)); g_object_unref(menuitem); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button17), G_MENU_MODEL(menu)); g_object_unref(menu); #endif // layout add_to(root1, button1, FALSE, FALSE, 0, 0); add_to(root1, button2, FALSE, FALSE, 0, 0); add_to(root1, button3, FALSE, FALSE, 0, 0); add_to(root1, button4, FALSE, FALSE, 0, 0); add_to(root1, button5, FALSE, FALSE, 0, 0); add_to(root1, button6, FALSE, FALSE, 0, 0); add_to(root1, button7, FALSE, FALSE, 0, 0); add_to(root1, button8, FALSE, FALSE, 0, 0); add_to(root2, button9, FALSE, FALSE, 0, 0); add_to(root2, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root2, button10, FALSE, FALSE, 0, 0); add_to(root3, button11, FALSE, FALSE, 0, 0); add_to(root3, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root3, button12, FALSE, FALSE, 0, 0); add_to(root4, button13, FALSE, FALSE, 0, 0); add_to(root4, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root4, button14, FALSE, FALSE, 0, 0); add_to(root5, button15, FALSE, FALSE, 0, 0); add_to(root5, button16, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,12,0) add_to(root5, button17, FALSE, FALSE, 0, 0); #endif } static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_progressbars()\n"); // GTK_PROGRESS_BAR progress1 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress1), GTK_ORIENTATION_HORIZONTAL); progress2 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress2), GTK_ORIENTATION_HORIZONTAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress2), TRUE); progress3 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress3), GTK_ORIENTATION_VERTICAL); gtk_widget_set_size_request(progress3, -1, 100); // The 100 progress4 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress4), GTK_ORIENTATION_VERTICAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress4), TRUE); // GTK_SCALE scale1 = create_horizontal_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale1, "value_changed", G_CALLBACK(update_values), NULL); scale2 = create_horizontal_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale2, "value_changed", G_CALLBACK(update_values), NULL); scale3 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale3, "value_changed", G_CALLBACK(update_values), NULL); scale4 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale4, "value_changed", G_CALLBACK(update_values), NULL); scale5 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); update_marks(GTK_SCALE(scale5), FALSE, GTK_POS_LEFT); g_signal_connect(scale5, "value_changed", G_CALLBACK(update_values), NULL); scale6 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); update_marks(GTK_SCALE(scale6), FALSE, GTK_POS_RIGHT); g_signal_connect(scale6, "value_changed", G_CALLBACK(update_values), NULL); // GTK_LEVEL_BAR #if GTK_CHECK_VERSION (3,6,0) levelbar1 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar1), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar1), GTK_ORIENTATION_VERTICAL); levelbar2 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar2), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar2), GTK_ORIENTATION_VERTICAL); levelbar3 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar3), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), 2); // GTK 3.20.9 not working gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar3), GTK_ORIENTATION_VERTICAL); levelbar4 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar4), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), 2); // GTK 3.20.9 not working gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar4), GTK_ORIENTATION_VERTICAL); levelbar5 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar5), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), 0.5); levelbar6 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar6), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), 0.5); levelbar7 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar7), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), 2); // GTK 3.20.9 not working levelbar8 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar8), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), 2); // GTK 3.20.9 not working #if GTK_CHECK_VERSION (3,8,0) gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar2), TRUE); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar4), TRUE); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar6), TRUE); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar8), TRUE); #endif #endif // layout add_to(root1, progress1, FALSE, FALSE, 0, 0); add_to(root1, progress2, FALSE, FALSE, 0, 0); add_to(root1, scale1, FALSE, FALSE, 0, 0); add_to(root1, scale2, FALSE, FALSE, 0, 0); add_to(root2, progress3, FALSE, FALSE, 0, 0); add_to(root2, progress4, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,6,0) add_to(root2, levelbar1, FALSE, FALSE, 0, 0); add_to(root2, levelbar2, FALSE, FALSE, 0, 0); add_to(root2, levelbar3, FALSE, FALSE, 0, 0); add_to(root2, levelbar4, FALSE, FALSE, 0, 0); #endif add_to(root3, scale3, FALSE, FALSE, 0, 0); add_to(root3, scale5, FALSE, FALSE, 0, 0); add_to(root3, scale6, FALSE, FALSE, 0, 0); add_to(root3, scale4, FALSE, FALSE, 0, 0); #if GTK_CHECK_VERSION (3,6,0) add_to(root4, levelbar5, FALSE, FALSE, 0, 0); add_to(root4, levelbar6, FALSE, FALSE, 0, 0); add_to(root4, levelbar7, FALSE, FALSE, 0, 0); add_to(root4, levelbar8, FALSE, FALSE, 0, 0); #endif } static void create_labels(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_labels()\n"); GtkWidget *label1, *label2; // GTK_LABEL label1 = gtk_label_new("Label 1"); label2 = gtk_label_new("Label 2"); gtk_widget_set_sensitive(label2, FALSE); // layout add_to(root, label1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, label2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_spinners()\n"); GtkWidget *spinner1, *spinner2; // GTK_SPINNER spinner1 = gtk_spinner_new(); gtk_widget_set_size_request(spinner1, 20, 20); spinner2 = gtk_spinner_new(); gtk_widget_set_size_request(spinner2, 20, 20); gtk_widget_set_sensitive(spinner2, FALSE); //gtk_spinner_start(GTK_SPINNER(spinner2)); // layout add_to(root, spinner1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinner2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_expander()\n"); GtkWidget *expander, *scrolledWindow, *tv; GtkTextBuffer *buffer; gchar *text; // GTK_EXPANDER expander = gtk_expander_new(_app("More...")); gtk_expander_set_expanded(GTK_EXPANDER(expander), TRUE); //~if GTK_CHECK_VERSION (3,20,0) // @todo label 100% width //~endif // GTK_SCROLLED_WINDOW scrolledWindow = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolledWindow, -1, 120); #if GTK_CHECK_VERSION (3,16,0) const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) { gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolledWindow), FALSE); gtk_style_context_add_class(gtk_widget_get_style_context(gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(scrolledWindow))), "discrete"); gtk_style_context_add_class(gtk_widget_get_style_context(gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(scrolledWindow))), "discrete"); } #endif // GTK_TEXT_VIEW tv = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv), GTK_WRAP_WORD); text = g_strdup_printf("%s %s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer), text, -1); g_free(text); // layout gtk_container_add(GTK_CONTAINER(scrolledWindow), tv); gtk_container_add(GTK_CONTAINER(expander), scrolledWindow); add_to(root, expander, FALSE, FALSE, 0, 0); } static void create_frames(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_frames()\n"); GtkWidget *frame1, *frame2, *frame3, *frame4; // GTK_FRAME frame1 = gtk_frame_new("Frame (shadow in)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame1), "border-inset"); gtk_frame_set_shadow_type(GTK_FRAME(frame1), GTK_SHADOW_IN); frame2 = gtk_frame_new("Frame (shadow out)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame2), "border-outset"); gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_OUT); frame3 = gtk_frame_new("Frame (shadow etched in)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame3), "border-groove"); gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_IN); frame4 = gtk_frame_new("Frame (shadow etched out)"); gtk_style_context_add_class(gtk_widget_get_style_context(frame4), "border-ridge"); gtk_frame_set_shadow_type(GTK_FRAME(frame4), GTK_SHADOW_ETCHED_OUT); gtk_widget_set_sensitive(frame4, FALSE); // layout add_to(root1, frame1, TRUE, TRUE, 0, 0); add_to(root1, frame2, TRUE, TRUE, 0, 0); add_to(root2, frame3, TRUE, TRUE, 0, 0); add_to(root2, frame4, TRUE, TRUE, 0, 0); } static void create_notebooks(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_notebooks()\n"); // GTK_NOTEBOOK notebook1 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook1)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook1), GTK_POS_TOP); create_notebook_tab(notebook1, "Tab1", NULL, FALSE); create_notebook_tab(notebook1, "Tab2", NULL, FALSE); create_notebook_tab(notebook1, "Tab3", NULL, TRUE); create_notebook_tab(notebook1, "Tab4", NULL, TRUE); notebook2 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook2)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook2), GTK_POS_BOTTOM); create_notebook_tab(notebook2, "Tab1", NULL, FALSE); create_notebook_tab(notebook2, "Tab2", NULL, FALSE); create_notebook_tab(notebook2, "Tab3", NULL, TRUE); create_notebook_tab(notebook2, "Tab4", NULL, TRUE); notebook3 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook3)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); create_notebook_tab(notebook3, "T1", NULL, FALSE); create_notebook_tab(notebook3, "Tab2", NULL, FALSE); create_notebook_tab(notebook3, "T3b", NULL, TRUE); create_notebook_tab(notebook3, "T4", NULL, TRUE); notebook4 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook4)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); create_notebook_tab(notebook4, "T1", NULL, FALSE); create_notebook_tab(notebook4, "Tab2", NULL, FALSE); create_notebook_tab(notebook4, "T3b", NULL, TRUE); create_notebook_tab(notebook4, "T4", NULL, TRUE); #if GTK_CHECK_VERSION (3,4,0) // gtk-scroll-tabs for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // with or without gtk3-classic https://github.com/lah7/gtk3-classic/commit/66b65775822c46e07f5b2f30036010d06dbcbad4 gtk_widget_add_events(notebook1, GDK_SCROLL_MASK); g_signal_connect(notebook1, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); gtk_widget_add_events(notebook2, GDK_SCROLL_MASK); g_signal_connect(notebook2, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); gtk_widget_add_events(notebook3, GDK_SCROLL_MASK); g_signal_connect(notebook3, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); gtk_widget_add_events(notebook4, GDK_SCROLL_MASK); g_signal_connect(notebook4, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); #endif // layout add_to(root1, notebook1, TRUE, TRUE, 0, 0); add_to(root1, notebook2, TRUE, TRUE, 0, 0); add_to(root2, notebook3, TRUE, TRUE, 0, 0); add_to(root2, notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { // ok GtkWidget *headbtn = BOXH, *btn; add_to(headbtn, gtk_label_new(text), TRUE, TRUE, 0, 0); // GTK_BUTTON if (close) { btn = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(btn), gtk_image_new_from_icon_name("window-close", GTK_ICON_SIZE_MENU)); gtk_button_set_relief(GTK_BUTTON(btn), GTK_RELIEF_NONE); #if GTK_CHECK_VERSION (3,20,0) gtk_widget_set_focus_on_click(btn, FALSE); #else gtk_button_set_focus_on_click(GTK_BUTTON(btn), FALSE); #endif add_to(headbtn, btn, FALSE, FALSE, 0, 0); } if (!content) content = BOXV; gtk_widget_show_all(headbtn); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, headbtn); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(notebook), content, TRUE); #if GTK_CHECK_VERSION (3,4,0) if (close) { // gtk-scroll-tabs (close button) for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // with or without gtk3-classic https://github.com/lah7/gtk3-classic/commit/66b65775822c46e07f5b2f30036010d06dbcbad4 gtk_widget_add_events(btn, GDK_SCROLL_MASK); g_signal_connect(btn, "scroll-event", G_CALLBACK(on_scrolltabs), NULL); } #endif } static void create_treeview(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_treeview()\n"); GtkWidget *scrolledWindow, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; // data store = gtk_tree_store_new(11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "help-contents", 8, "help-contents", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_reorderable(GTK_TREE_VIEW(view), FALSE); // rows gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(view), FALSE); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(view), TRUE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 0, GTK_SORT_ASCENDING); g_object_unref(G_OBJECT(store)); idx = 0; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 1; renderer = gtk_cell_renderer_toggle_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 4; renderer = gtk_cell_renderer_progress_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); // colors for lines: before with GTK 3.19, after with gtk3-classic #if !GTK_CHECK_VERSION (3,19,0) gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(view), TRUE); #endif // scrolled window scrolledWindow = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN); #if GTK_CHECK_VERSION (3,16,0) const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolledWindow), FALSE); #endif gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolledWindow, 200, 200); // The 200 gtk_widget_set_size_request(view, 200, 200); // The 200 gtk_container_add(GTK_CONTAINER(scrolledWindow), view); add_to(root, scrolledWindow, FALSE, FALSE, 0, 0); } static void create_scales(GtkWidget *notebook, gchar *text, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_scales()\n"); GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value(GTK_RANGE(scale1)); gtk_container_set_border_width(GTK_CONTAINER(hbox), 12); // vertical scales scale1v = create_vertical_scale(value, FALSE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale1v), "top"); scale2v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale2v), "top"); scale3v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale3v), "top"); scale4v = create_vertical_scale(value, TRUE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale4v), "top"); scale5v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale5v), "top"); scale6v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_style_context_add_class(gtk_widget_get_style_context(scale6v), "top"); scale7v = create_vertical_scale(value, FALSE, TRUE, position); scale8v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale(value, TRUE, TRUE, position); scale11v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale(value, FALSE, FALSE, position); scale2h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale(value, TRUE, FALSE, position); scale5h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale(value, FALSE, TRUE, position); scale8h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale(value, TRUE, TRUE, position); scale11h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to(hbox, vbox1, TRUE, TRUE, 5, 5); add_to(vbox1, scale1h, FALSE, FALSE, 5, 5); add_to(vbox1, scale2h, FALSE, FALSE, 5, 5); add_to(vbox1, scale3h, FALSE, FALSE, 5, 5); add_to(vbox1, scale4h, FALSE, FALSE, 5, 5); add_to(vbox1, scale5h, FALSE, FALSE, 5, 5); add_to(vbox1, scale6h, FALSE, FALSE, 5, 5); add_to(hbox, vbox2, TRUE, TRUE, 5, 5); add_to(vbox2, hboxa, TRUE, TRUE, 0, 0); add_to(hboxa, scale1v, FALSE, FALSE, 5, 5); add_to(hboxa, scale2v, FALSE, FALSE, 5, 5); add_to(hboxa, scale3v, FALSE, FALSE, 5, 5); add_to(hboxa, scale7v, FALSE, FALSE, 5, 5); add_to(hboxa, scale8v, FALSE, FALSE, 5, 5); add_to(hboxa, scale9v, FALSE, FALSE, 5, 5); add_to(vbox2, hboxb, TRUE, TRUE, 0, 0); add_to(hboxb, scale4v, FALSE, FALSE, 5, 5); add_to(hboxb, scale5v, FALSE, FALSE, 5, 5); add_to(hboxb, scale6v, FALSE, FALSE, 5, 5); add_to(hboxb, scale10v, FALSE, FALSE, 5, 5); add_to(hboxb, scale11v, FALSE, FALSE, 5, 5); add_to(hboxb, scale12v, FALSE, FALSE, 5, 5); add_to(hbox, vbox3, TRUE, TRUE, 5, 5); add_to(vbox3, scale7h, FALSE, FALSE, 5, 5); add_to(vbox3, scale8h, FALSE, FALSE, 5, 5); add_to(vbox3, scale9h, FALSE, FALSE, 5, 5); add_to(vbox3, scale10h, FALSE, FALSE, 5, 5); add_to(vbox3, scale11h, FALSE, FALSE, 5, 5); add_to(vbox3, scale12h, FALSE, FALSE, 5, 5); create_notebook_tab(notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_horizontal_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 100, 1); gtk_range_set_value(GTK_RANGE(scale), value); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_widget_set_size_request(scale, 186, -1); // The 186 return scale; } static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_vertical_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL, 0, 100, 1); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_range_set_value(GTK_RANGE(scale), value); gtk_widget_set_size_request(scale, -1, 100); // The 100 return scale; } // traditional menu - common gtk2/3 except one line static void create_traditional_menubar(GtkWidget *root) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_traditional_menubar()\n"); GtkWidget *menu, *submenu, *menuitem, *base; GtkAccelGroup *accels = gtk_accel_group_new(); GSList *group = NULL; GList *iterator; gboolean ok; gtk_window_add_accel_group(GTK_WINDOW(window), accels); // options menu = create_menu(root, _app("_Options"), accels); // @todo option command line? if (g_getenv("AWF_TEAROFF") != NULL) create_menuitem_tearoff(menu); create_menuitem(menu, "gtk-open", FALSE, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, _app("Open recent file"), FALSE, AWF_ACCEL_RECE, AWF_RECE, dialog_recent); create_menuitem(menu, "gtk-save", FALSE, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, "gtk-refresh", FALSE, AWF_ACCEL_REFR, AWF_REFR, G_CALLBACK(on_sighup)); // G_CALLBACK(update_theme) create_menuitem(menu, _app("Calendar"), FALSE, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, "Scales", FALSE, AWF_ACCEL_SCAL, AWF_SCAL, dialog_scales); create_menuitem(menu, "gtk-properties", FALSE, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, "gtk-page-setup", FALSE, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, "gtk-print", FALSE, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = create_menu(menu, _app("More..."), accels); create_menuitem(submenu, "gtk-cut", FALSE, AWF_ACCEL_MCUT, AWF_MCUT, NULL); create_menuitem(submenu, "gtk-copy", FALSE, AWF_ACCEL_MCOP, AWF_MCOP, NULL); create_menuitem(submenu, "gtk-paste", FALSE, AWF_ACCEL_MPAS, AWF_MPAS, NULL); submenu = create_menu(menu, _app("Less..."), NULL); gtk_widget_set_sensitive(gtk_menu_get_attach_widget(GTK_MENU(submenu)), FALSE); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE); create_menuitem_check(menu, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE); create_menuitem_check(menu, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, FALSE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, FALSE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, FALSE, NULL); menuitem = create_menuitem_radio(menu, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, FALSE, FALSE, TRUE, NULL); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); create_menuitem_radio(menu, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, TRUE, FALSE, TRUE, group); create_menuitem_radio(menu, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, FALSE, TRUE, TRUE, NULL); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); create_menuitem(menu, "gtk-close", TRUE, AWF_ACCEL_CLOS, AWF_CLOS, NULL); create_menuitem(menu, "gtk-quit", FALSE, AWF_ACCEL_QUIT, AWF_QUIT, quit); // system themes ok = FALSE; group = NULL; menu = create_menu(root, _app("_System themes"), NULL); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Orchis") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Orchis") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup(hash_user_theme, iterator->data)) { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, TRUE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } else { menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } } if (!list_system_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // user themes ok = FALSE; menu = create_menu(root, _app("_User themes"), NULL); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Orchis") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = create_menu(menu, iterator->data, FALSE); base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Orchis") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } menuitem = create_menuitem_radio(base, iterator->data, FALSE, FALSE, FALSE, FALSE, group); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); if (strcmp(current_theme, (gchar*) iterator->data) == 0) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_theme), iterator->data); } if (!list_user_theme) create_menuitem(menu, _app("No themes found"), TRUE, NULL, NULL, NULL); // text direction group = NULL; menu = create_menu(root, _app("_Text direction"), NULL); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 1) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_LTR)); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), FALSE, FALSE, FALSE, FALSE, group); if (current_direction == 2) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); g_signal_connect_swapped(menuitem, "activate", G_CALLBACK(update_text_direction), GINT_TO_POINTER(GTK_TEXT_DIR_RTL)); // help menu = create_menu(root, _app("_Help"), accels); #if GTK_CHECK_VERSION (3,14,0) create_menuitem(menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, dialog_inspector); #else menuitem = create_menuitem(menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, NULL); gtk_widget_set_sensitive(menuitem, FALSE); #endif create_menuitem(menu, "gtk-about", FALSE, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); g_object_set(gtk_settings_get_default(), "gtk-can-change-accels", FALSE, NULL); g_object_unref(accels); } static GtkWidget* create_menu(GtkWidget *root, gchar *text, GtkAccelGroup *accels) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menu(%s)\n", text); GtkWidget *menu, *menuitem; menu = gtk_menu_new(); menuitem = gtk_menu_item_new_with_mnemonic(text); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); gtk_menu_shell_append(GTK_MENU_SHELL(root), menuitem); if (accels) { // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gtk_menu_set_accel_group(GTK_MENU(menu), accels); gtk_widget_set_events(menu, GDK_KEY_RELEASE_MASK); g_signal_connect(menu, "key-release-event", G_CALLBACK(accels_change), NULL); } return menu; } static GtkWidget* create_menuitem_tearoff(GtkWidget *menu) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem_tearoff()\n"); GtkWidget *menuitem; menuitem = gtk_tearoff_menu_item_new(); gtk_style_context_add_class(gtk_widget_get_style_context(menuitem), "tearoff"); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); return menuitem; } static GtkWidget* create_menuitem_check(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem_check(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_check_menu_item_new_with_mnemonic(text); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem_radio(GtkWidget *menu, gchar *text, gboolean free, gboolean chk, gboolean ist, gboolean dsb, GSList *group) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem_radio(%s)\n", text); GtkWidget *menuitem; menuitem = gtk_radio_menu_item_new_with_mnemonic(group, text); gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(menuitem), ist); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), chk); gtk_widget_set_sensitive(menuitem, !dsb); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if (free) g_free(text); return menuitem; } static GtkWidget* create_menuitem(GtkWidget *menu, gchar *text, gboolean dsb, gchar *accel, gchar *kmp, GCallback function) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem(%s)\n", text); GtkWidget *menuitem; GdkModifierType mods; guint key; if (g_str_has_prefix(text, "gtk-")) menuitem = gtk_image_menu_item_new_from_stock(text, NULL); else menuitem = gtk_image_menu_item_new_with_mnemonic(text); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_widget_set_sensitive(menuitem, !dsb); if (accel && kmp) { gtk_accelerator_parse(accel, &key, &mods); gtk_accel_map_add_entry(kmp, key, mods); } if (kmp) { gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), kmp); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x g_signal_connect(menuitem, "select", G_CALLBACK(accels_select), NULL); g_signal_connect(menuitem, "deselect", G_CALLBACK(accels_deselect), NULL); } if (function) g_signal_connect(menuitem, "activate", function, NULL); return menuitem; } static void accels_load() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_load()\n"); gchar *oldPath = g_build_filename(g_get_home_dir(), ".awf-gtk-accels", NULL); if (g_file_test(oldPath, G_FILE_TEST_EXISTS)) { gchar *newPath = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); g_rename(oldPath, newPath); g_free(newPath); } g_free(oldPath); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) gtk_accel_map_load(path); g_free(path); } static void accels_select(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x current_menuitem = widget; } static void accels_deselect(GtkWidget *widget) { // ok // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (current_menuitem == widget) current_menuitem = NULL; } static gboolean accels_change(GtkWidget *widget, GdkEventKey *event) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_change()\n"); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://github.com/GNOME/gtk/commit/2d79334bb069224966b3dcd8456967c9800e8fd0 if (current_menuitem) { GtkMenuItem *menuitem = GTK_MENU_ITEM(current_menuitem); gchar *key = gdk_keyval_name(event->keyval); const gchar *acl = gtk_menu_item_get_accel_path(menuitem); if ( key && acl && (strcmp(key, "Control_L") != 0) && (strcmp(key, "Control_R") != 0) && (strcmp(key, "Shift_L") != 0) && (strcmp(key, "Shift_R") != 0) && (strcmp(key, "Super_L") != 0) && (strcmp(key, "Super_R") != 0) && (strcmp(key, "Meta_L") != 0) && (strcmp(key, "Meta_R") != 0) && (strcmp(key, "Alt_L") != 0) && (strcmp(key, "Alt_R") != 0) ) { gboolean del = (event->keyval == GDK_KEY_Delete) || (event->keyval == GDK_KEY_KP_Delete) || (event->keyval == GDK_KEY_BackSpace); if ( del || // f1..12 ((event->keyval >= GDK_KEY_F1) && (event->keyval <= GDK_KEY_F12)) || // ctrl/shift/super/alt + ? (event->state & GDK_CONTROL_MASK) || (event->state & GDK_SHIFT_MASK) || (event->state & GDK_SUPER_MASK) || (event->state & GDK_META_MASK) ) { must_save_accels = TRUE; gtk_accel_map_change_entry( acl, del ? 0 : gdk_keyval_to_lower(event->keyval), del ? 0 : event->state & gtk_accelerator_get_default_mod_mask(), TRUE); // @todo new shorcut (CTRL+SHIFT+...) not always displayed (in More and Help menus) if (awf_debug) g_printf("\033[33m[debug]\033[00m new_shortcut: %s\n", del ? "none" : gtk_accelerator_name(gdk_keyval_to_lower(event->keyval), event->state & gtk_accelerator_get_default_mod_mask())); return TRUE; } } } return FALSE; } static void accels_save() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_save()\n"); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (must_save_accels) { gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); gtk_accel_map_save(path); g_free(path); } } // dialogs static void dialog_open() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_open()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Open", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); #endif gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileChooserDialog:Open", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), g_get_home_dir()); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_recent() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_recent()\n"); GtkWidget *dialog = gtk_recent_chooser_dialog_new( "GtkRecentChooserDialog", GTK_WINDOW(window), "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-open", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); #endif gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkRecentChooserDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_save() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_save()\n"); GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Save", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-save", GTK_RESPONSE_ACCEPT, NULL); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) // with gtk-dialogs-use-header gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); #endif gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileChooserDialog:Save", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), g_get_home_dir()); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_message() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_message()\n"); GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkMessageDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_page_setup() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_page_setup()\n"); //PKG_CHECK_MODULES(GTK3, [gtk+-3.0 gtk+-unix-print-3.0], ... //GtkWidget *dialog = gtk_page_setup_unix_dialog_new("GtkPageSetupUnixDialog", GTK_WINDOW(window)); // //~if GTK_CHECK_VERSION (3,12,0) // if (awf_csd) // with gtk-dialogs-use-header // gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); //~endif // //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPageSetup *setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(window), NULL, NULL); g_object_unref(setup); } static void dialog_print() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_print()\n"); //GtkWidget *dialog = gtk_print_unix_dialog_new("GtkPrintUnixDialog", GTK_WINDOW(window)); // //~if GTK_CHECK_VERSION (3,12,0) // if (awf_csd) // with gtk-dialogs-use-header // gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(gtk_dialog_get_header_bar(GTK_DIALOG(dialog))), FALSE); //~endif // //gtk_dialog_run(GTK_DIALOG(dialog)); //gtk_widget_destroy(dialog); GtkPrintOperation *op = gtk_print_operation_new(); gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL); g_object_unref(op); } static void dialog_about() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_about()\n"); GdkPixbuf *pixbuf = NULL; #if defined (G_OS_WIN32) extern GdkPixbuf *gdk_win32_icon_to_pixbuf_libgtk_only(HICON hicon); HICON hIcon = (HICON) LoadImage(GetModuleHandle(NULL), "IDI_ICON1", IMAGE_ICON, 64, 64, LR_DEFAULTSIZE); if (hIcon) pixbuf = gdk_win32_icon_to_pixbuf_libgtk_only(hIcon); #endif gchar *cVersion; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) cVersion = "C23"; else if (__STDC_VERSION__ >= 201710L) cVersion = "C17"; else if (__STDC_VERSION__ >= 201112L) cVersion = "C11"; else if (__STDC_VERSION__ >= 199901L) cVersion = "C99"; else if (__STDC_VERSION__ >= 199409L) cVersion = "C95"; else cVersion = "C (unknown)"; #else cVersion = "C89/C90"; #endif gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog(GTK_WINDOW(window), "version", VERSION, "comments", t1 = g_strdup_printf("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf(_app("Remove %s file"), "~/.awf-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), cVersion, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_get_major_version(), gtk_get_minor_version(), gtk_get_micro_version(), glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2026 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo-icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo", pixbuf, "license", _app("A widget factory 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."), "wrap-license", TRUE, NULL); g_free(t1); g_free(t2); g_free(t3); g_free(t4); #if defined (G_OS_WIN32) if (hIcon) { if (pixbuf) g_object_unref(pixbuf); DestroyIcon(hIcon); } #endif } static void dialog_inspector() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_inspector()\n"); #if GTK_CHECK_VERSION (3,14,0) gtk_window_set_interactive_debugging(TRUE); #endif } static void dialog_calendar() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_calendar()\n"); GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); // info bars and calendar infobar = gtk_info_bar_new_with_buttons("gtk-ok", GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_INFO); label = gtk_label_new(_app("This is an info bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons(_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new(_app("This is a question bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_WARNING); label = gtk_label_new(_app("This is a warning bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_ERROR); label = gtk_label_new(_app("This is an error bar.")); add_to(infobar, label, FALSE, FALSE, 0, 0); add_to(vbox, infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new(); gtk_calendar_set_display_options(GTK_CALENDAR(calendar), GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES | GTK_CALENDAR_SHOW_WEEK_NUMBERS); add_to(vbox, calendar, FALSE, FALSE, 0, 0); // dialog gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_box_set_spacing(GTK_BOX(area), 2); add_to(area, vbox, TRUE, TRUE, 5, 5); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-close", GTK_RESPONSE_OK); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(headerbardialog), FALSE); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } #endif gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_set_size_request(dialog, 350, -1); gtk_widget_show_all(dialog); gtk_widget_grab_focus(GTK_WIDGET(btn)); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } static void dialog_scales() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_scales()\n"); GtkWidget *dialog, *notebook, *area, *btn; dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); create_scales(notebook, "value top", GTK_POS_TOP); create_scales(notebook, "value right", GTK_POS_RIGHT); create_scales(notebook, "value bottom", GTK_POS_BOTTOM); create_scales(notebook, "value left", GTK_POS_LEFT); gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_box_set_spacing(GTK_BOX(area), 2); add_to(area, notebook, TRUE, TRUE, 5, 5); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-close", GTK_RESPONSE_OK); #if GTK_CHECK_VERSION (3,12,0) if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_has_subtitle(GTK_HEADER_BAR(headerbardialog), FALSE); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } #endif gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_show_all(dialog); gtk_widget_grab_focus(GTK_WIDGET(btn)); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } // gtk-scroll-tabs for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://github.com/mate-desktop/mate-control-center/blob/master/capplets/common/capplet-util.c // for on_scrolltabs source function is capplet_dialog_page_scroll_event_cb // of mate-appearance-properties from mate-control-center, GNU GPL 2.0+ #if GTK_CHECK_VERSION (3,4,0) static gboolean on_scrolltabs(GtkWidget *widget, GdkEventScroll *event) { // gtk-scroll-tabs for GTK 3.4..3.24 | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x GtkWidget *child, *eventWidget, *actionWidget; GtkNotebook *notebook; while (!GTK_IS_NOTEBOOK(widget)) widget = gtk_widget_get_parent(widget); notebook = GTK_NOTEBOOK(widget); child = gtk_notebook_get_nth_page(notebook, gtk_notebook_get_current_page(notebook)); if (child == NULL) return FALSE; // ignore scroll events from the content of the page eventWidget = gtk_get_event_widget((GdkEvent*) event); if (eventWidget == NULL || eventWidget == child || gtk_widget_is_ancestor(eventWidget, child)) return FALSE; // and also from the action widgets actionWidget = gtk_notebook_get_action_widget(notebook, GTK_PACK_START); if (eventWidget == actionWidget || (actionWidget != NULL && gtk_widget_is_ancestor(eventWidget, actionWidget))) return FALSE; actionWidget = gtk_notebook_get_action_widget(notebook, GTK_PACK_END); if (eventWidget == actionWidget || (actionWidget != NULL && gtk_widget_is_ancestor(eventWidget, actionWidget))) return FALSE; switch (event->direction) { case GDK_SCROLL_RIGHT: case GDK_SCROLL_DOWN: gtk_notebook_next_page(notebook); break; case GDK_SCROLL_LEFT: case GDK_SCROLL_UP: gtk_notebook_prev_page(notebook); break; case GDK_SCROLL_SMOOTH: switch (gtk_notebook_get_tab_pos(notebook)) { case GTK_POS_LEFT: case GTK_POS_RIGHT: if (event->delta_y > 0) gtk_notebook_next_page(notebook); else if (event->delta_y < 0) gtk_notebook_prev_page(notebook); break; case GTK_POS_TOP: case GTK_POS_BOTTOM: if (event->delta_x > 0) gtk_notebook_next_page(notebook); else if (event->delta_x < 0) gtk_notebook_prev_page(notebook); break; } break; } return TRUE; } #endif // yoloawf-extended-4.2.0/src/awf-gtk4.c000066400000000000000000003630271522325530000164570ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated D/21/06/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) 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 (GPL) for more details. * * * Translations update: * https://github.com/GNOME/gtk/blob/3.24.50/po/fr.po * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) GTK 2.24/3.24/4.22 + GLIB 2.88 + Pango 1.58 * Fedora Rawhide 64 (1536 MB) GTK 2.24/3.24/4.23 + GLIB 2.89 + Pango 1.57 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) GTK 2.24/3.24/4.22 + GLIB 2.87 + Pango 1.56 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) GTK 2.24/3.24/4.20 + GLIB 2.86 + Pango 1.56 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) GTK 2.24/3.24/4.18 + GLIB 2.84 + Pango 1.56 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) GTK 2.24/3.24/4.16 + GLIB 2.82 + Pango 1.54 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) GTK 2.24/3.24/4.14 + GLIB 2.80 + Pango 1.52 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) GTK 2.24/3.24/4.12 + GLIB 2.78 + Pango 1.51 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) GTK 2.24/3.24/4.10 + GLIB 2.76 + Pango 1.50 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) GTK 2.24/3.24/4.8 + GLIB 2.74 + Pango 1.50 * Ubuntu 22.04 Jammy Jellyfish 64 (2176 MB) GTK 2.24/3.24/4.6 + GLIB 2.72 + Pango 1.50 * Ubuntu 21.10 Impish Indri 64 (2176 MB) GTK 2.24/3.24/4.4 + GLIB 2.68 + Pango 1.48 * Ubuntu 21.04 Hirsute Hippo 64 (2176 MB) GTK 2.24/3.24/4.0 + GLIB 2.68 + Pango 1.48 * Ubuntu 17.04 Zesty Zapus 32 (1536 MB) GTK 2.24/3.22 + GLIB 2.52 + Pango 1.40 * Ubuntu 16.10 Yakkety Yak 32 (1536 MB) GTK 2.24/3.20 + GLIB 2.50 + Pango 1.40 * Ubuntu 16.04 Xenial Xerus 32 (1536 MB) GTK 2.24/3.18 + GLIB 2.48 + Pango 1.38 * Ubuntu 15.10 Wily Werewolf 32 (1024 MB) GTK 2.24/3.16 + GLIB 2.46 + Pango 1.36 * Ubuntu 15.04 Vivid Vervet 32 (1024 MB) GTK 2.24/3.14 + GLIB 2.44 + Pango 1.36 * Ubuntu 14.10 Utopic Unicorn 32 (1024 MB) GTK 2.24/3.12 + GLIB 2.42 + Pango 1.36 * Ubuntu 14.04 Trusty Tahr 32 (1024 MB) GTK 2.24/3.10 + GLIB 2.40 + Pango 1.36 * Ubuntu 13.10 Saucy Salamander 32 (1024 MB) GTK 2.24/3.8 + GLIB 2.38 + Pango 1.32 * Ubuntu 13.04 Raring Ringtail 32 (1024 MB) GTK 2.24/3.6 + GLIB 2.36 + Pango 1.32 * Ubuntu 12.04 Precise Pangolin 32 (1024 MB) GTK 2.24/3.4 + GLIB 2.32 + Pango 1.30 * Ubuntu 11.10 Oneiric Ocelot 32 (1024 MB) GTK 2.24/3.2 + GLIB 2.30 + Pango 1.29 * Ubuntu 11.04 Natty Narwhal 32 (1024 MB) GTK 2.24/3.0 + GLIB 2.28 + Pango 1.28 * Windows XP SP3 MinGW/msys (2048 MB) GTK 2.24 + GLIB 2.28 + Pango 1.29 & GTK 3.6 + GLIB 2.34 + Pango 1.30 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include #include #include #include #include #include #include #if defined (G_OS_WIN32) #include #elif defined (G_OS_UNIX) #include #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) #include #endif #pragma GCC diagnostic pop #define GTK_DIRNAME "gtk-4.0" #define GETTEXT_PACKAGE "awf-gtk4" #define BOXH (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)) #define BOXV (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)) #define SEPH (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)) #define SEPV (gtk_separator_new (GTK_ORIENTATION_VERTICAL)) #define PANEH (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL)) #define PANEV (gtk_paned_new (GTK_ORIENTATION_VERTICAL)) #define AWF_OPEN "/Test/Open" #define AWF_SAVE "/Test/Save" #define AWF_REFR "/Test/Refresh" #define AWF_RECE "/Test/Recent" #define AWF_CALE "/Test/Calendar" #define AWF_SCAL "/Test/Scales" #define AWF_PROP "/Test/Properties" #define AWF_PRSE "/Test/PrintSetup" #define AWF_PRIN "/Test/Print" #define AWF_MCUT "/Test/More/Cut" #define AWF_MCOP "/Test/More/Copy" #define AWF_MPAS "/Test/More/Paste" #define AWF_CLOS "/Test/Close" #define AWF_QUIT "/Test/Quit" #define AWF_INSP "/Test/Inspector" #define AWF_ABOU "/Test/About" #define AWF_ACCEL_OPEN "O" #define AWF_ACCEL_SAVE "S" #define AWF_ACCEL_REFR "F5" #define AWF_ACCEL_RECE NULL #define AWF_ACCEL_CALE NULL #define AWF_ACCEL_SCAL NULL #define AWF_ACCEL_PROP "Return" #define AWF_ACCEL_PRSE "P" #define AWF_ACCEL_PRIN "P" #define AWF_ACCEL_MCUT "X" #define AWF_ACCEL_MCOP "C" #define AWF_ACCEL_MPAS "V" #define AWF_ACCEL_CLOS "W" #define AWF_ACCEL_QUIT "Q" #define AWF_ACCEL_INSP "F12" #define AWF_ACCEL_ABOU "F1" // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) dgettext(GETTEXT_PACKAGE, x) #define _gtk(x) dgettext("gtk40", x) // global variables static gboolean awf_debug = FALSE; static gboolean awf_trace = FALSE; static gboolean awf_csd = FALSE; static GHashTable *hash_system_theme = NULL; static GHashTable *hash_user_theme = NULL; static GList *list_system_theme = NULL; static GList *list_user_theme = NULL; static GtkWidget *window = NULL, *toolbar = NULL, *toolbarentry = NULL, *toolbarend = NULL, *statusbar = NULL; static GtkWidget *headbarCloseLeft = NULL, *headbarCloseRight = NULL, *button15 = NULL, *button16 = NULL; static GtkWidget *progress1 = NULL, *progress2 = NULL, *progress3 = NULL, *progress4 = NULL, *progress8 = NULL, *progress9 = NULL; static GtkWidget *scale1 = NULL, *scale2 = NULL, *scale3 = NULL, *scale4 = NULL, *scale5 = NULL, *scale6 = NULL; static GtkWidget *levelbar1 = NULL, *levelbar2 = NULL, *levelbar3 = NULL, *levelbar4 = NULL; static GtkWidget *levelbar5 = NULL, *levelbar6 = NULL, *levelbar7 = NULL, *levelbar8 = NULL; static GtkWidget *notebook1 = NULL, *notebook2 = NULL, *notebook3 = NULL, *notebook4 = NULL; static int current_direction = 0; // GTK_TEXT_DIR_NONE static gchar *current_theme = NULL; static gchar *opt_theme = NULL; static gchar *opt_screenshot = NULL; static gboolean allow_update_values = TRUE; static gboolean must_save_accels = FALSE; // @todo // global functions static void awf_load_theme(GHashTable* hashtable, gchar *directory); static inline int awf_compare_theme(gconstpointer a, gconstpointer b); static void notify_updated_gtktheme(GSettings *settings, gchar *key); static void update_text_direction(int direction); static void update_theme(gchar *newTheme); static void update_statusbar(gchar *message); static void update_values(GtkRange *range); static void update_widgets(); static void update_marks(GtkScale *scale, gboolean value, int position); static void clear_entry(GtkEntry *entry); static void display_notification(); static void find_and_update_labels(GtkWidget *widget); static gboolean find_and_check_menuradio(GMenuModel *model, gchar *search); static gboolean on_sighup(void *data); static gboolean take_screenshot(); static void create_window(gpointer app); static void create_widgets(GtkWidget *root); static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing); static void add_progressbar_and_entrybar(); static void create_toolbar(GtkWidget *root); static void create_combos_entries(GtkWidget *root); static void create_spinbuttons(GtkWidget *root); static void create_checkbuttons(GtkWidget *root); static void create_radiobuttons(GtkWidget *root); static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5); static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4); static void create_labels(GtkWidget *root); static void create_spinners(GtkWidget *root); static void create_expander(GtkWidget *root); static void create_frames(GtkWidget *root1, GtkWidget *root2); static void create_notebooks(GtkWidget *root1, GtkWidget *root2); static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close); static void create_treeview(GtkWidget *root); static void create_scales(GtkWidget *notebook, gchar *text, int position); static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position); static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position); static void create_traditional_menubar(GtkApplication *app, GMenu *root); static void create_menuitem_radio(GMenu *menu, gchar *text, gboolean free1, gchar *group, gboolean free2); static void create_menuitem(GtkApplication *app, GMenu *menu, gchar *text, gboolean dsb, gchar *acl, gchar *kmp, gchar *icon, GCallback function); static void activate_action(GSimpleAction *action, GVariant *parameter, gpointer data); static void accels_load(GtkApplication *app); static gboolean accels_change(GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state); static void accels_save(); static void dialog_open(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_scales(); static gboolean on_scrolltabs(GtkEventControllerScroll *event, double dx, double dy, GtkWidget *widget); // run run run int main(int argc, gchar **argv) { awf_debug = g_getenv("AWF_DEBUG") != NULL; awf_trace = g_getenv("AWF_TRACE") != NULL; const gchar *config = g_getenv("GTK_CSD"); if (config && (strcmp(config, "1") == 0)) awf_csd = TRUE; if (awf_trace) g_printf("\033[36m[trace]\033[00m main()\n"); current_theme = g_strdup("auto"); opt_theme = g_strdup("auto"); int opt = 0, status = 0; hash_system_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); hash_user_theme = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); GList *iterator = NULL; gchar *directory; // load available system themes (/usr/local/share/themes && /usr/share/themes) const char *const *dirs = g_get_system_data_dirs(); for (opt = 0; dirs[opt]; opt++) { directory = g_build_filename(dirs[opt], "themes", NULL); awf_load_theme(hash_system_theme, directory); g_free(directory); } g_hash_table_replace(hash_system_theme, g_strdup("Adwaita"), g_strdup("Adwaita")); // bolos g_hash_table_remove(hash_system_theme, "Default"); g_hash_table_remove(hash_system_theme, "Emacs"); list_system_theme = g_list_sort(g_hash_table_get_keys(hash_system_theme), (GCompareFunc) awf_compare_theme); // load available user themes (HOME/.local/share/themes && HOME/.themes) directory = g_build_filename(g_get_user_data_dir(), "themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); directory = g_build_filename(g_get_home_dir(), ".themes", NULL); awf_load_theme(hash_user_theme, directory); g_free(directory); list_user_theme = g_list_sort(g_hash_table_get_keys(hash_user_theme), (GCompareFunc) awf_compare_theme); // locale setlocale(LC_ALL, ""); #if defined (G_OS_WIN32) directory = g_build_filename("share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, directory); g_free(directory); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, NULL, 'x'}, {"version", no_argument, NULL, 'v'}, {"list", no_argument, NULL, 'l'}, {"theme", required_argument, NULL, 't'}, {"screenshot", required_argument, NULL, 's'}, {"ltr", no_argument, NULL, 'y'}, {"rtl", no_argument, NULL, 'z'}, {NULL, 0, NULL, 0} }; gchar *cVersion, *t1, *t2, *t3, *t4; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, NULL)) != -1) { switch (opt) { // --version -v case 'v': g_printf("%s\n", VERSION); return status; // --list -l case 'l': for (iterator = list_system_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); for (iterator = list_user_theme; iterator; iterator = iterator->next) g_printf("%s\n", (gchar*) iterator->data); return status; // --theme -t case 't': if (g_hash_table_lookup(hash_system_theme, optarg) || g_hash_table_lookup(hash_user_theme, optarg)) { g_free(opt_theme); opt_theme = g_strdup(optarg); } break; // --screenshot -s case 's': opt_screenshot = g_strdup(optarg); break; // --ltr case 'y': current_direction = 1; // GTK_TEXT_DIR_LTR break; // --rtl case 'z': current_direction = 2; // GTK_TEXT_DIR_RTL break; // --help (via GtkApplication) -h // --help/x supported by GTK 4.x case 'x': case 'h': default: if (opt == 'x') break; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) cVersion = "C23"; else if (__STDC_VERSION__ >= 201710L) cVersion = "C17"; else if (__STDC_VERSION__ >= 201112L) cVersion = "C11"; else if (__STDC_VERSION__ >= 199901L) cVersion = "C99"; else if (__STDC_VERSION__ >= 199409L) cVersion = "C95"; else cVersion = "C (unknown)"; #else cVersion = "C89/C90"; #endif g_printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", t1 = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION), "-v ", _app("Show version number."), "-l ", _app("List available themes."), "-t ", _app("Run with the specified theme."), "-s ", t2 = g_strdup_printf(_app("Run and save a screenshot on %s (PNG)."), "SIGHUP"), "--ltr ", _app("Run with text from left to right (Left-To-Right)."), "--rtl ", _app("Run with text from right to left (Right-To-Left)."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), cVersion, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_get_major_version(), gtk_get_minor_version(), gtk_get_micro_version(), glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ); g_free(t1); g_free(t2); g_free(t3); g_free(t4); return status; } } // create and show window #if defined (G_OS_WIN32) g_setenv("GSETTINGS_SCHEMA_DIR", ".", TRUE); #endif GtkApplication *app = gtk_application_new("org.gtk.awf", G_APPLICATION_NON_UNIQUE); g_signal_connect(app, "activate", G_CALLBACK(create_window), NULL); // --version -v g_application_add_main_option(G_APPLICATION(app), "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Show version number."), NULL); // --list -l g_application_add_main_option(G_APPLICATION(app), "list", 'l', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("List available themes."), NULL); // --theme -t g_application_add_main_option(G_APPLICATION(app), "theme", 't', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, _app("Run with the specified theme."), ""); // --screenshot -s gchar *text = g_strdup_printf(_app("Run and save a screenshot on %s (PNG)."), "SIGHUP"); g_application_add_main_option(G_APPLICATION(app), "screenshot", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, text, ""); g_free(text); // --ltr g_application_add_main_option(G_APPLICATION(app), "ltr", 'y', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from left to right (Left-To-Right)."), NULL); // --rtl g_application_add_main_option(G_APPLICATION(app), "rtl", 'z', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, _app("Run with text from right to left (Right-To-Left)."), NULL); g_application_register(G_APPLICATION(app), NULL, NULL); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); return status; } static void quit() { if (awf_trace) g_printf("\033[36m[trace]\033[00m quit()\n"); g_list_free(list_system_theme); g_list_free(list_user_theme); list_system_theme = NULL; list_user_theme = NULL; g_hash_table_destroy(hash_system_theme); g_hash_table_destroy(hash_user_theme); hash_system_theme = NULL; hash_user_theme = NULL; accels_save(); g_application_quit(g_application_get_default()); } static void awf_load_theme(GHashTable* hashtable, gchar *directory) { if (awf_trace) g_printf("\033[36m[trace]\033[00m awf_load_theme(%s)\n", directory); if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { if (awf_debug) g_printf("\033[33m[debug]\033[00m themes_dir: %s\n", directory); GDir *dir = g_dir_open(directory, 0, NULL); if (dir) { const gchar *theme; while ((theme = g_dir_read_name(dir)) != NULL) { gchar *themePath = g_build_filename(directory, theme, GTK_DIRNAME, NULL); if (g_file_test(themePath, G_FILE_TEST_IS_DIR)) g_hash_table_replace(hashtable, g_strdup(theme), g_strdup(theme)); g_free(themePath); } g_dir_close(dir); } } } static inline int awf_compare_theme(gconstpointer a, gconstpointer b) { return g_ascii_strcasecmp((gchar*) a, (gchar*) b); //g_strcmp0((gchar*) a, (gchar*) b); } static void notify_updated_gtktheme(GSettings *settings, gchar *key) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m notify_updated_gtktheme(%s)\n", key); if (g_strcmp0("gtk-theme", key) == 0) { gchar *newTheme = g_settings_get_string(settings, key); if (awf_debug) g_printf("\033[33m[debug]\033[00m SIGNAL_theme_update: %s\n", newTheme); find_and_check_menuradio(gtk_application_get_menubar(GTK_APPLICATION(g_application_get_default())), newTheme); g_free(newTheme); } else if (headbarCloseLeft && headbarCloseRight) { gboolean closeLeft = FALSE, closeRight = FALSE; // minimize, maximize, close, icon, menu gchar *tokens = g_settings_get_string(settings, key); if (tokens) { if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("\033[33m[debug]\033[00m headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); } gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } } static void update_text_direction(int direction) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m update_text_direction()\n"); if ((direction == 1) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_LTR)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); current_direction = 1; gtk_widget_set_default_direction(current_direction); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_RIGHT); } else if ((direction == 2) && (gtk_widget_get_direction(window) != GTK_TEXT_DIR_RTL)) { gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), toggle, GTK_POS_RIGHT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), toggle, GTK_POS_LEFT); current_direction = 2; gtk_widget_set_default_direction(current_direction); } } static void update_theme(gchar *newTheme) { // ok if (!newTheme) return; if (awf_trace) g_printf("\033[36m[trace]\033[00m update_theme(%s)\n", newTheme); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_before: %s » %s\n", current_theme, newTheme); if (strcmp(newTheme, "refresh") == 0) { g_object_set(gtk_settings_get_default(), "gtk-theme-name", "Default", NULL); g_usleep(G_USEC_PER_SEC / 2); g_object_set(gtk_settings_get_default(), "gtk-theme-name", current_theme, NULL); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); if (opt_screenshot) { if (take_screenshot()) { gchar *text = g_strdup_printf(_app("Theme %s reloaded, then screenshot saved (%s)."), current_theme, opt_screenshot); update_statusbar(text); g_free(text); } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded (error saving screenshot)."), current_theme); update_statusbar(text); g_free(text); } } else { gchar *text = g_strdup_printf(_app("Theme %s reloaded."), current_theme); update_statusbar(text); g_free(text); } if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after1: %s\n", current_theme); } else if (strcmp(newTheme, "auto") == 0) { g_free(current_theme); g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after2: %s\n", current_theme); } else if (strcmp(newTheme, current_theme) != 0) { g_free(current_theme); g_object_set(gtk_settings_get_default(), "gtk-theme-name", newTheme, NULL); // @todo? useless for notify_updated_gtktheme g_object_get(gtk_settings_get_default(), "gtk-theme-name", ¤t_theme, NULL); while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); gchar *text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); if (awf_debug) g_printf("\033[33m[debug]\033[00m update_theme_after3: %s\n", current_theme); } } static void update_statusbar(gchar *message) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m update_statusbar(%s)\n", message); if (window && statusbar) { GDateTime *now = g_date_time_new_now_local(); gchar *buffer = g_date_time_format(now, "%H:%M:%S"); g_date_time_unref(now); gchar *text = g_strdup_printf("%s - %s", buffer, message); G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ guint ctid = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), "gné"); gtk_statusbar_remove_all(GTK_STATUSBAR(statusbar), ctid); gtk_statusbar_push(GTK_STATUSBAR(statusbar), ctid, text); G_GNUC_END_IGNORE_DEPRECATIONS g_free(text); g_free(buffer); gtk_widget_remove_css_class(statusbar, "flash"); gtk_widget_queue_draw(statusbar); while (g_main_context_pending(NULL)) g_main_context_iteration(NULL, FALSE); gtk_widget_add_css_class(statusbar, "flash"); } } static void update_values(GtkRange *range) { // ok if (allow_update_values) { allow_update_values = FALSE; double value = gtk_range_get_value(range); //if (awf_trace) // g_printf("\033[36m[trace]\033[00m update_values(%f)*\n", value); // range(0..1) gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), value / 100.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), value / 100.0); // range(0..1) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), value / 100.0); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), value / 100.0); // range(0..5) gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar3))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar4))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar7))); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), value / 100.0 * gtk_level_bar_get_max_value(GTK_LEVEL_BAR(levelbar8))); // range(0..1) gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), value / 100.0); // range(0..100) if (scale1 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale1), value); if (scale2 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale2), value); if (scale3 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale3), value); if (scale4 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale4), value); if (scale5 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale5), value); if (scale6 != (GtkWidget*) range) gtk_range_set_value(GTK_RANGE(scale6), value); // text gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), value > 50); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), value > 50); allow_update_values = TRUE; } } static void update_widgets() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked gboolean toggle = gtk_notebook_get_scrollable(GTK_NOTEBOOK(notebook1)); // via add_progressbar_and_entrybar // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_visible(toolbarentry, FALSE); } else { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0.0); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0.0); gtk_widget_set_visible(progress8, TRUE); gtk_widget_set_visible(progress9, TRUE); gtk_widget_set_visible(toolbarentry, TRUE); } // enabled or not gtk_widget_set_sensitive(scale2, toggle); gtk_widget_set_sensitive(scale4, toggle); gtk_widget_set_sensitive(scale6, toggle); gtk_widget_set_sensitive(progress2, toggle); gtk_widget_set_sensitive(progress4, toggle); gtk_widget_set_sensitive(levelbar2, toggle); gtk_widget_set_sensitive(levelbar4, toggle); gtk_widget_set_sensitive(levelbar6, toggle); gtk_widget_set_sensitive(levelbar8, toggle); // text or not gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress1), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress2), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress3), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress4), !toggle); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress8), FALSE); gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress9), FALSE); // marks gtk_scale_clear_marks(GTK_SCALE(scale5)); update_marks(GTK_SCALE(scale5), !toggle, GTK_POS_LEFT); gtk_scale_clear_marks(GTK_SCALE(scale6)); update_marks(GTK_SCALE(scale6), !toggle, GTK_POS_RIGHT); // scrollable or not gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), !toggle); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), !toggle); gtk_window_set_default_size(GTK_WINDOW(window), 50, 50); } static void update_marks(GtkScale *scale, gboolean value, int position) { if (awf_trace) g_printf("\033[36m[trace]\033[00m update_marks(%d)\n", position); if (value) { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, "25"); gtk_scale_add_mark(scale, 50, position, "50"); gtk_scale_add_mark(scale, 75, position, "75"); gtk_scale_add_mark(scale, 100, position, NULL); } else { gtk_scale_add_mark(scale, 0, position, NULL); gtk_scale_add_mark(scale, 25, position, NULL); gtk_scale_add_mark(scale, 50, position, NULL); gtk_scale_add_mark(scale, 75, position, NULL); gtk_scale_add_mark(scale, 100, position, NULL); } } static void clear_entry(GtkEntry *entry) { if (awf_trace) g_printf("\033[36m[trace]\033[00m clear_entry()\n"); gtk_editable_set_text(GTK_EDITABLE(entry), ""); } static void display_notification() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m display_notification()\n"); #if defined (G_OS_UNIX) if (notify_init(GETTEXT_PACKAGE)) { // Ubuntu 11.04 with libnotify-dev 0.5.x, so you must use libnotify-dev 0.7.x from Ubuntu 11.10 NotifyNotification *notif = notify_notification_new(GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), "dialog-information"); notify_notification_add_action(notif, "nothing", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_add_action(notif, "close", _gtk("Close"), NOTIFY_ACTION_CALLBACK(notify_uninit), NULL, NULL); notify_notification_set_timeout(notif, 50000); notify_notification_show(notif, NULL); g_object_unref(G_OBJECT(notif)); notify_uninit(); } #endif } static void find_and_update_labels(GtkWidget *widget) { // whynot if (GTK_IS_LABEL(widget)) { gtk_label_set_ellipsize(GTK_LABEL(widget), PANGO_ELLIPSIZE_END); } else if (GTK_IS_WIDGET(widget)) { GtkWidget *child = gtk_widget_get_first_child(widget); while (child) { find_and_update_labels(child); child = gtk_widget_get_next_sibling(child); } } } static gboolean find_and_check_menuradio(GMenuModel *model, gchar *search) { // whynot if (awf_trace) g_printf("\033[36m[trace]\033[00m find_and_check_menuradio(%s)\n", search); int n = g_menu_model_get_n_items(model); const gchar *value = NULL; GVariant *info; for (int idx = 0; idx < n; idx++) { GMenuModel *submenu = g_menu_model_get_item_link(model, idx, G_MENU_LINK_SECTION); if (!submenu) submenu = g_menu_model_get_item_link(model, idx, G_MENU_LINK_SUBMENU); if (submenu) { // process submenu gboolean found = find_and_check_menuradio(submenu, search); g_object_unref(submenu); if (found) return TRUE; } else { // app.set-theme::theme_name(.[action]::[target]) // check menuitem by label/target info = g_menu_model_get_item_attribute_value(model, idx, "target", NULL); // target or label = theme_name if (info) { value = g_variant_get_string(info, NULL); g_variant_unref(info); if (value && (g_strcmp0(value, search) == 0)) { // menuitem found by label/target // check menuitem by action info = g_menu_model_get_item_attribute_value(model, idx, "action", NULL); // action = disabled or set-theme if (info) { value = g_variant_get_string(info, NULL); g_variant_unref(info); if (value && (g_strcmp0(value, "disabled") != 0)) { // menuitem found by label/target + action not disabled g_action_group_activate_action(G_ACTION_GROUP(g_application_get_default()), "set-theme", g_variant_new_string(search)); // set state checked and activate action return TRUE; } } } } } } return FALSE; } static gboolean on_sighup(void *data) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m on_sighup()\n"); update_theme("refresh"); #if defined (G_SOURCE_CONTINUE) return G_SOURCE_CONTINUE; #else return TRUE; // glib < 2.32 #endif } static gboolean take_screenshot() { // ok (without window borders) if (awf_trace) g_printf("\033[36m[trace]\033[00m take_screenshot()\n"); gboolean result = FALSE; GdkPaintable *paintable = gtk_widget_paintable_new(window); int width = gdk_paintable_get_intrinsic_width(paintable), height = gdk_paintable_get_intrinsic_height(paintable); GtkSnapshot *snapshot = gtk_snapshot_new(); G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ gtk_snapshot_render_background(snapshot, gtk_widget_get_style_context(GTK_WIDGET(window)), 0, 0, (double)width, (double)height); G_GNUC_END_IGNORE_DEPRECATIONS GTK_WIDGET_GET_CLASS(GTK_WIDGET(window))->snapshot(GTK_WIDGET(window), snapshot); GskRenderNode *node = gtk_snapshot_free_to_node(snapshot); if (node) { GskRenderer *renderer = gtk_native_get_renderer(GTK_NATIVE(window)); graphene_rect_t bounds = GRAPHENE_RECT_INIT(0, 0, (float)width, (float)height); GdkTexture *texture = gsk_renderer_render_texture(renderer, node, &bounds); result = gdk_texture_save_to_png(texture, opt_screenshot); g_object_unref(texture); gsk_render_node_unref(node); } else { g_printf("\033[1;31m[error]\033[00m screenshot error: width=%d height=%d image=%p\n", width, height, node); } g_object_unref(paintable); return result; } // layout and widgets static void create_window(gpointer app) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_window()\n"); if (window) { gtk_window_present(GTK_WINDOW(window)); return; } GtkWidget *vboxWindow, *widgets; gboolean closeLeft = FALSE, closeRight = FALSE; gchar *text, *value; // window window = gtk_application_window_new(GTK_APPLICATION(app)); gtk_widget_set_name(GTK_WIDGET(window), "AwfMainWindow"); gtk_window_set_icon_name(GTK_WINDOW(window), GETTEXT_PACKAGE); text = g_strdup_printf(_app("A widget factory - GTK %d.%d"), GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(window), text); g_free(text); // theme auto or from command line if (strcmp(current_theme, opt_theme) != 0) update_theme(opt_theme); else update_theme(current_theme); if (current_direction == 0) current_direction = (gtk_widget_get_default_direction() == GTK_TEXT_DIR_LTR) ? 1 : 2; // layout vboxWindow = BOXV; gtk_window_set_child(GTK_WINDOW(window), vboxWindow); GMenu *gmm = g_menu_new(); create_traditional_menubar(app, gmm); gtk_application_set_menubar(app, G_MENU_MODEL(gmm)); gtk_application_window_set_show_menubar(GTK_APPLICATION_WINDOW(window), TRUE); if (awf_csd) { // enable CSD for dialogs // except for custom dialogs g_object_set(gtk_settings_get_default(), "gtk-dialogs-use-header", TRUE, NULL); gtk_window_set_decorated(GTK_WINDOW(window), TRUE); GtkWidget *button; GtkWidget *headerbar = gtk_header_bar_new(); gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(headerbar), TRUE); gchar *tokens; // minimize, maximize, close, icon, menu g_object_get(gtk_widget_get_settings(headerbar), "gtk-decoration-layout", &tokens, NULL); if (g_str_has_prefix(tokens, "icon") || g_str_has_prefix(tokens, "menu")) closeLeft = TRUE; else if (g_str_has_suffix(tokens, "icon") || g_str_has_suffix(tokens, "menu")) closeRight = TRUE; if (awf_debug) g_printf("\033[33m[debug]\033[00m headerbar_tokens: %s %d %d\n", tokens, closeLeft, closeRight); g_free(tokens); // left headbarCloseLeft = gtk_image_new_from_icon_name(GETTEXT_PACKAGE); gtk_widget_add_css_class(headbarCloseLeft, "app-icon"); gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), headbarCloseLeft); button = gtk_menu_button_new(); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button), G_MENU_MODEL(gmm)); gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(button), "open-menu-symbolic"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn1"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn2"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn3"); gtk_header_bar_pack_start(GTK_HEADER_BAR(headerbar), button); // right headbarCloseRight = gtk_image_new_from_icon_name(GETTEXT_PACKAGE); gtk_widget_add_css_class(headbarCloseRight, "app-icon"); gtk_widget_set_visible(headbarCloseRight, closeRight); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), headbarCloseRight); button = gtk_menu_button_new(); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button), G_MENU_MODEL(gmm)); gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(button), "open-menu-symbolic"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn6"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn5"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); button = gtk_toggle_button_new_with_label("Btn4"); gtk_header_bar_pack_end(GTK_HEADER_BAR(headerbar), button); gtk_window_set_titlebar(GTK_WINDOW(window), headerbar); } g_object_unref(gmm); toolbar = BOXH; gtk_widget_add_css_class(toolbar, "primary-toolbar"); create_toolbar(toolbar); //add_to(vboxWindow, toolbar, FALSE, FALSE, 0, 0); gtk_box_append(GTK_BOX(vboxWindow), toolbar); widgets = BOXV; add_to(vboxWindow, widgets, TRUE, TRUE, 0, 0); create_widgets(widgets); G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ statusbar = gtk_statusbar_new(); GtkCssProvider *provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(provider, "@keyframes statusbarflash {" " 0% { background-color: yellow; }" " 100% { background-color: transparent; }" "}" "#AwfMainWindow statusbar.flash {" " animation: statusbarflash 1s ease-out forwards;" "}" , -1); gtk_style_context_add_provider_for_display(gdk_display_get_default(), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_FALLBACK); g_object_unref(provider); G_GNUC_END_IGNORE_DEPRECATIONS // via add_progressbar_and_entrybar // for the progressbar of the statusbar, before adding statusbar gtk_widget_set_halign(gtk_widget_get_first_child(statusbar), GTK_ALIGN_FILL); // statusbar > box gtk_widget_set_hexpand(gtk_widget_get_first_child(statusbar), TRUE); // statusbar > box gtk_widget_set_hexpand(gtk_widget_get_first_child(gtk_widget_get_first_child(statusbar)), TRUE); // statusbar > box > label add_to(vboxWindow, statusbar, FALSE, FALSE, 0, 0); text = g_strdup_printf(_app("Theme %s loaded."), current_theme); update_statusbar(text); g_free(text); // go go go update_text_direction(current_direction); g_signal_connect(window, "destroy", G_CALLBACK(quit), NULL); #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,30,0) g_unix_signal_add(SIGHUP, on_sighup, NULL); #endif #if defined (G_OS_UNIX) && GLIB_CHECK_VERSION (2,32,0) if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-theme", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.gnome.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.cinnamon.desktop.wm.preferences", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.Marco.general", FALSE)) g_signal_connect(g_settings_new(value), "changed::button-layout", G_CALLBACK(notify_updated_gtktheme), NULL); if (g_settings_schema_source_lookup(g_settings_schema_source_get_default(), value = "org.mate.interface", FALSE)) g_signal_connect(g_settings_new(value), "changed::gtk-decoration-layout", G_CALLBACK(notify_updated_gtktheme), NULL); #endif // gtk-can-change-accels for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(app); //GtkEventController *event = gtk_event_controller_key_new(); //g_signal_connect(event, "key-released", G_CALLBACK(accels_change), window); //gtk_widget_add_controller(window, event); gtk_window_present(GTK_WINDOW(window)); gtk_widget_grab_focus(gtk_widget_get_first_child(toolbar)); // focus on the first toolbar button if (headbarCloseLeft && headbarCloseRight) { // @todo not working here gtk_widget_set_visible(headbarCloseLeft, closeLeft); gtk_widget_set_visible(headbarCloseRight, closeRight); } add_progressbar_and_entrybar(); } static void create_widgets(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_widgets()\n"); GtkWidget *hboxColumns = BOXH; GtkWidget *vboxColumn1 = BOXV, *vboxComboEntry = BOXV, *hboxSpin = BOXH, *hboxCheckRadio = BOXH, *vboxCheck = BOXV, *vboxRadio = BOXV; GtkWidget *vboxColumn2 = BOXV, *vboxButtons = BOXV, *hboxBtns1 = BOXH, *hboxBtns2 = BOXH, *hboxBtns3 = BOXH, *hboxBtns4 = BOXH; GtkWidget *vboxColumn3 = BOXV, *vboxProgress1 = BOXV, *vboxProgress2 = BOXV, *hboxProgress1 = BOXH, *hboxProgress2 = BOXH; GtkWidget *vboxColumn4 = BOXV, *vboxOthers = BOXV, *hboxLabel = BOXH, *hboxSpinner = BOXH; GtkWidget *vpane = PANEV, *hpane1 = PANEH, *hpane2 = PANEH; GtkWidget *hboxFrame1 = BOXH, *hboxFrame2 = BOXH, *hboxNotebook1 = BOXH, *hboxNotebook2 = BOXH; // columns layout add_to(root, hboxColumns, TRUE, TRUE, 0, 0); // column 1 add_to(hboxColumns, vboxColumn1, TRUE, TRUE, 5, 0); add_to(vboxColumn1, vboxComboEntry, FALSE, TRUE, 5, 3); create_combos_entries(vboxComboEntry); add_to(vboxColumn1, hboxSpin, FALSE, FALSE, 5, 0); create_spinbuttons(hboxSpin); add_to(vboxColumn1, hboxCheckRadio, FALSE, TRUE, 5, 0); add_to(hboxCheckRadio, vboxCheck, TRUE, TRUE, 0, 0); create_checkbuttons(vboxCheck); add_to(hboxCheckRadio, vboxRadio, TRUE, TRUE, 0, 0); create_radiobuttons(vboxRadio); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 2 add_to(hboxColumns, vboxColumn2, TRUE, TRUE, 5, 0); add_to(vboxColumn2, vboxButtons, FALSE, TRUE, 5, 3); add_to(vboxColumn2, hboxBtns1, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns2, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns3, FALSE, FALSE, 5, 3); add_to(vboxColumn2, hboxBtns4, FALSE, FALSE, 5, 3); create_otherbuttons(vboxButtons, hboxBtns1, hboxBtns2, hboxBtns3, hboxBtns4); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 3 add_to(hboxColumns, vboxColumn3, TRUE, TRUE, 5, 0); add_to(vboxColumn3, vboxProgress1, FALSE, TRUE, 6, 10); add_to(vboxColumn3, hboxProgress1, FALSE, FALSE, 5, 10); add_to(vboxColumn3, hboxProgress2, FALSE, FALSE, 5, 10); add_to(vboxColumn3, vboxProgress2, FALSE, TRUE, 5, 10); create_progressbars(vboxProgress1, hboxProgress1, hboxProgress2, vboxProgress2); add_to(hboxColumns, SEPV, FALSE, FALSE, 0, 0); // column 4 add_to(hboxColumns, vboxColumn4, TRUE, TRUE, 5, 0); add_to(vboxColumn4, vboxOthers, FALSE, TRUE, 5, 3); create_treeview(vboxOthers); add_to(vboxOthers, hboxLabel, FALSE, TRUE, 5, 0); create_labels(hboxLabel); add_to(vboxOthers, hboxSpinner, FALSE, TRUE, 5, 0); create_spinners(hboxSpinner); create_expander(vboxOthers); add_to(root, SEPH, FALSE, FALSE, 0, 0); // paned layout add_to(root, vpane, TRUE, TRUE, 0, 0); gtk_paned_set_start_child(GTK_PANED(vpane), hpane1); gtk_paned_set_shrink_start_child(GTK_PANED(vpane), FALSE); gtk_widget_set_size_request(hpane1, -1, 70); // The 70 gtk_box_set_homogeneous(GTK_BOX(hboxFrame1), TRUE); gtk_box_set_spacing(GTK_BOX(hboxFrame1), 3); gtk_widget_set_margin_start(hboxFrame1, 10); gtk_widget_set_margin_end(hboxFrame1, 10); gtk_widget_set_margin_top(hboxFrame1, 10); gtk_widget_set_margin_bottom(hboxFrame1, 10); gtk_paned_set_start_child(GTK_PANED(hpane1), hboxFrame1); gtk_paned_set_resize_start_child(GTK_PANED(hpane1), FALSE); gtk_paned_set_shrink_start_child(GTK_PANED(hpane1), FALSE); gtk_box_set_homogeneous(GTK_BOX(hboxFrame2), TRUE); gtk_box_set_spacing(GTK_BOX(hboxFrame2), 3); gtk_widget_set_margin_start(hboxFrame2, 10); gtk_widget_set_margin_end(hboxFrame2, 10); gtk_widget_set_margin_top(hboxFrame2, 10); gtk_widget_set_margin_bottom(hboxFrame2, 10); gtk_paned_set_end_child(GTK_PANED(hpane1), hboxFrame2); create_frames(hboxFrame1, hboxFrame2); gtk_paned_set_end_child(GTK_PANED(vpane), hpane2); gtk_paned_set_shrink_end_child(GTK_PANED(vpane), FALSE); //gtk_widget_set_size_request(hpane2, -1, 120); // The 120 gtk_box_set_homogeneous(GTK_BOX(hboxNotebook1), TRUE); gtk_box_set_spacing(GTK_BOX(hboxNotebook1), 3); gtk_widget_set_margin_start(hboxNotebook1, 10); gtk_widget_set_margin_end(hboxNotebook1, 10); gtk_widget_set_margin_top(hboxNotebook1, 10); gtk_widget_set_margin_bottom(hboxNotebook1, 10); gtk_paned_set_start_child(GTK_PANED(hpane2), hboxNotebook1); gtk_paned_set_resize_start_child(GTK_PANED(hpane2), FALSE); gtk_paned_set_shrink_start_child(GTK_PANED(hpane2), FALSE); gtk_box_set_homogeneous(GTK_BOX(hboxNotebook2), TRUE); gtk_box_set_spacing(GTK_BOX(hboxNotebook2), 3); gtk_widget_set_margin_start(hboxNotebook2, 10); gtk_widget_set_margin_end(hboxNotebook2, 10); gtk_widget_set_margin_top(hboxNotebook2, 10); gtk_widget_set_margin_bottom(hboxNotebook2, 10); gtk_paned_set_end_child(GTK_PANED(hpane2), hboxNotebook2); create_notebooks(hboxNotebook1, hboxNotebook2); } static void add_progressbar_and_entrybar() { if (awf_trace) g_printf("\033[36m[trace]\033[00m add_progressbar_and_entrybar()\n"); // entry toolbar toolbarentry = gtk_entry_new(); gtk_entry_set_placeholder_text(GTK_ENTRY(toolbarentry), "..."); gtk_widget_set_visible(toolbarentry, FALSE); gtk_widget_set_valign(toolbarentry, GTK_ALIGN_CENTER); gtk_widget_set_vexpand(toolbarentry, FALSE); gtk_widget_insert_after(toolbarentry, toolbar, toolbarend); // end left // progressbar toolbar progress8 = gtk_progress_bar_new(); gtk_widget_set_size_request(progress8, 140, 1); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress8), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress8), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress8, FALSE); gtk_widget_set_valign(progress8, GTK_ALIGN_CENTER); gtk_widget_set_halign(progress8, GTK_ALIGN_END); gtk_widget_set_hexpand(progress8, TRUE); gtk_widget_insert_after(progress8, toolbar, gtk_widget_get_last_child(toolbar)); // end right // progressbar statusbar progress9 = gtk_progress_bar_new(); gtk_widget_set_size_request(progress9, 140, 1); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress9), 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress9), GTK_ORIENTATION_HORIZONTAL); gtk_widget_set_visible(progress9, FALSE); gtk_widget_set_valign(progress9, GTK_ALIGN_CENTER); gtk_widget_set_halign(progress9, GTK_ALIGN_END); gtk_widget_set_hexpand(progress9, TRUE); gtk_widget_insert_after(progress9, gtk_widget_get_first_child(statusbar), gtk_widget_get_first_child(gtk_widget_get_first_child(statusbar))); // statusbar > box > label, statusbar > box > progressbar } static void add_to(GtkWidget *root, GtkWidget *widget, gboolean expand, gboolean fill, guint padding, guint spacing) { // ok if (expand && fill) { gtk_widget_set_halign(widget, GTK_ALIGN_FILL); gtk_widget_set_valign(widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand(widget, TRUE); gtk_widget_set_vexpand(widget, TRUE); } else if (expand) { gtk_widget_set_halign(widget, GTK_ALIGN_FILL); gtk_widget_set_valign(widget, GTK_ALIGN_START); gtk_widget_set_hexpand(widget, FALSE); gtk_widget_set_vexpand(widget, FALSE); } else { gtk_widget_set_hexpand(widget, FALSE); gtk_widget_set_vexpand(widget, FALSE); } if (GTK_IS_BOX(widget) && (padding > 0)) { gtk_widget_set_margin_start(widget, padding); gtk_widget_set_margin_end(widget, padding); gtk_widget_set_margin_top(widget, padding); gtk_widget_set_margin_bottom(widget, padding); } if (GTK_IS_BOX(widget) && (spacing > 0)) { gtk_box_set_spacing(GTK_BOX(widget), spacing); } gtk_box_append(GTK_BOX(root), widget); if (!GTK_IS_BOX(widget)) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ GtkStyleContext *style = gtk_widget_get_style_context(widget); gchar *text = gtk_style_context_to_string(style, GTK_STYLE_CONTEXT_PRINT_RECURSE); G_GNUC_END_IGNORE_DEPRECATIONS // @todo remove [ ] g_strstrip(text); gtk_widget_set_tooltip_text(widget, text); g_free(text); } } static void create_toolbar(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_toolbar()\n"); GtkWidget *icon1, *icon2, *icon3, *icon4, *icon5, *icon6, *icon7, *icon8, *icon9; // GTK_BUTTON icon1 = gtk_button_new_from_icon_name("document-open"); gtk_widget_add_css_class(icon1, "flat"); g_signal_connect(icon1, "clicked", G_CALLBACK(dialog_open), NULL); icon2 = gtk_button_new_from_icon_name("document-open"); gtk_widget_set_sensitive(icon2, FALSE); icon3 = gtk_button_new_from_icon_name("document-save"); g_signal_connect(icon3, "clicked", G_CALLBACK(dialog_save), NULL); icon4 = gtk_button_new_from_icon_name("view-refresh"); g_signal_connect_swapped(icon4, "clicked", G_CALLBACK(on_sighup), NULL); icon5 = gtk_button_new_from_icon_name("camera-photo"); gtk_widget_set_sensitive(icon5, opt_screenshot ? TRUE : FALSE); g_signal_connect(icon5, "clicked", G_CALLBACK(take_screenshot), NULL); icon6 = gtk_button_new_from_icon_name("dialog-information"); g_signal_connect(icon6, "clicked", G_CALLBACK(display_notification), NULL); #if defined (G_OS_WIN32) gtk_widget_set_sensitive(icon6, FALSE); #endif // GTK_TOGGLE_BUTTON icon7 = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(icon7), "list-add"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(icon7), TRUE); g_signal_connect(icon7, "clicked", G_CALLBACK(update_widgets), NULL); icon8 = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(icon8), "list-remove"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(icon8), FALSE); g_signal_connect(icon8, "clicked", G_CALLBACK(update_widgets), NULL); icon9 = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(icon9), "window-close"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(icon9), FALSE); gtk_widget_set_sensitive(icon9, FALSE); toolbarend = icon9; // layout add_to(root, icon1, FALSE, FALSE, 0, 0); add_to(root, icon2, FALSE, FALSE, 0, 0); add_to(root, icon3, FALSE, FALSE, 0, 0); add_to(root, SEPV, FALSE, FALSE, 0, 0); add_to(root, icon4, FALSE, FALSE, 0, 0); add_to(root, icon5, FALSE, FALSE, 0, 0); add_to(root, icon6, FALSE, FALSE, 0, 0); add_to(root, SEPV, FALSE, FALSE, 0, 0); add_to(root, icon7, FALSE, FALSE, 0, 0); add_to(root, icon8, FALSE, FALSE, 0, 0); add_to(root, icon9, FALSE, FALSE, 0, 0); } static void create_combos_entries(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_combos_entries()\n"); GtkWidget *combo1, *combo2, *combo3, *combo4, *entry1, *entry2, *entry3, *entry4; // GTK_COMBO_BOX G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ //if GTK_CHECK_VERSION (4,10,0) // combo1 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box entry 1", "Combo box entry 2", NULL }); // //gtk_drop_down_set_enable_search(GTK_DROP_DOWN(combo1), TRUE); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo1), 0); //else combo1 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo1), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo1), 0); //endif //if GTK_CHECK_VERSION (4,10,0) // combo2 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box entry 1", "Combo box entry 2", NULL }); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo2), 0); //else combo2 = gtk_combo_box_text_new_with_entry(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo2), "Combo box entry 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo2), 0); //endif gtk_widget_set_sensitive(combo2, FALSE); //if GTK_CHECK_VERSION (4,10,0) // combo3 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box 1", "Combo box 2", NULL }); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo3), 0); //else combo3 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo3), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo3), 0); //endif //if GTK_CHECK_VERSION (4,10,0) // combo4 = gtk_drop_down_new_from_strings((const char * const[]) { "Combo box 1", "Combo box 2", NULL }); // gtk_drop_down_set_selected(GTK_DROP_DOWN(combo4), 0); //else combo4 = gtk_combo_box_text_new(); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 1"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo4), "Combo box 2"); gtk_combo_box_set_active(GTK_COMBO_BOX(combo4), 0); //endif gtk_widget_set_sensitive(combo4, FALSE); G_GNUC_END_IGNORE_DEPRECATIONS // GTK_ENTRY entry1 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry1), "Entry"); gtk_entry_set_placeholder_text(GTK_ENTRY(entry1), "Placeholder"); entry2 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry2), "Entry"); gtk_widget_set_sensitive(entry2, FALSE); entry3 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry3), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry3), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_entry_set_placeholder_text(GTK_ENTRY(entry3), "Placeholder"); g_signal_connect(entry3, "icon-press", G_CALLBACK(clear_entry), NULL); entry4 = gtk_entry_new(); gtk_editable_set_text(GTK_EDITABLE(entry4), "Entry"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_PRIMARY, "edit-clear"); gtk_entry_set_icon_from_icon_name(GTK_ENTRY(entry4), GTK_ENTRY_ICON_SECONDARY, "edit-find"); gtk_widget_set_sensitive(entry4, FALSE); // layout add_to(root, combo1, FALSE, FALSE, 0, 0); add_to(root, combo2, FALSE, FALSE, 0, 0); add_to(root, combo3, FALSE, FALSE, 0, 0); add_to(root, combo4, FALSE, FALSE, 0, 0); add_to(root, entry1, FALSE, FALSE, 0, 0); add_to(root, entry2, FALSE, FALSE, 0, 0); add_to(root, entry3, FALSE, FALSE, 0, 0); add_to(root, entry4, FALSE, FALSE, 0, 0); } static void create_spinbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_spinbuttons()\n"); GtkWidget *spinbutton1, *spinbutton2; // GTK_SPIN_BUTTON spinbutton1 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton1), 1); spinbutton2 = gtk_spin_button_new_with_range(-100, 100, 1); gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbutton2), 1); gtk_widget_set_sensitive(spinbutton2, FALSE); // layout add_to(root, spinbutton1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinbutton2, FALSE, FALSE, 0, 0); } static void create_checkbuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_checkbuttons()\n"); GtkWidget *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // GTK_CHECK_BUTTON checkbutton1 = gtk_check_button_new_with_label("Check btn 1"); checkbutton2 = gtk_check_button_new_with_label("Check btn 2"); gtk_check_button_set_active(GTK_CHECK_BUTTON(checkbutton2), TRUE); checkbutton3 = gtk_check_button_new_with_label("Check btn 3"); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(checkbutton3), TRUE); checkbutton4 = gtk_check_button_new_with_label("Check btn 4"); gtk_widget_set_sensitive(checkbutton4, FALSE); checkbutton5 = gtk_check_button_new_with_label("Check btn 5"); gtk_check_button_set_active(GTK_CHECK_BUTTON(checkbutton5), TRUE); gtk_widget_set_sensitive(checkbutton5, FALSE); checkbutton6 = gtk_check_button_new_with_label("Check btn 6"); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(checkbutton6), TRUE); gtk_widget_set_sensitive(checkbutton6, FALSE); // layout add_to(root, checkbutton1, FALSE, FALSE, 0, 0); add_to(root, checkbutton2, FALSE, FALSE, 0, 0); add_to(root, checkbutton3, FALSE, FALSE, 0, 0); add_to(root, checkbutton4, FALSE, FALSE, 0, 0); add_to(root, checkbutton5, FALSE, FALSE, 0, 0); add_to(root, checkbutton6, FALSE, FALSE, 0, 0); } static void create_radiobuttons(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_radiobuttons()\n"); GtkWidget *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; // GTK_RADIO_BUTTON radiobutton1 = gtk_check_button_new_with_label("Radio btn 1"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton1), NULL); radiobutton2 = gtk_check_button_new_with_label("Radio btn 2"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton2), GTK_CHECK_BUTTON(radiobutton1)); gtk_check_button_set_active(GTK_CHECK_BUTTON(radiobutton2), TRUE); radiobutton3 = gtk_check_button_new_with_label("Radio btn 3"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton3), GTK_CHECK_BUTTON(radiobutton1)); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(radiobutton3), TRUE); radiobutton4 = gtk_check_button_new_with_label("Radio btn 4"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton4), NULL); gtk_widget_set_sensitive(radiobutton4, FALSE); radiobutton5 = gtk_check_button_new_with_label("Radio btn 5"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton5), GTK_CHECK_BUTTON(radiobutton4)); gtk_check_button_set_active(GTK_CHECK_BUTTON(radiobutton5), TRUE); gtk_widget_set_sensitive(radiobutton5, FALSE); radiobutton6 = gtk_check_button_new_with_label("Radio btn 6"); gtk_check_button_set_group(GTK_CHECK_BUTTON(radiobutton6), GTK_CHECK_BUTTON(radiobutton4)); gtk_check_button_set_inconsistent(GTK_CHECK_BUTTON(radiobutton6), TRUE); gtk_widget_set_sensitive(radiobutton6, FALSE); // layout add_to(root, radiobutton1, FALSE, FALSE, 0, 0); add_to(root, radiobutton2, FALSE, FALSE, 0, 0); add_to(root, radiobutton3, FALSE, FALSE, 0, 0); add_to(root, radiobutton4, FALSE, FALSE, 0, 0); add_to(root, radiobutton5, FALSE, FALSE, 0, 0); add_to(root, radiobutton6, FALSE, FALSE, 0, 0); } static void create_otherbuttons(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4, GtkWidget *root5) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_otherbuttons()\n"); GtkWidget *button1, *button2, *button3, *button4, *button5, *button6, *button7, *button8, *button9; GtkWidget *button10, *button11, *button12, *button13, *button14, *button17; // GTK_BUTTON button1 = gtk_button_new_with_label("Button 1"); button2 = gtk_button_new_with_label("Button 2"); gtk_widget_set_sensitive(button2, FALSE); button3 = gtk_toggle_button_new_with_label("Button 3"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button3), TRUE); button4 = gtk_toggle_button_new_with_label("Button 4"); gtk_widget_set_sensitive(button4, FALSE); // GTK_COLOR_DIALOG_BUTTON or GTK_COLOR_BUTTON #if GTK_CHECK_VERSION (4,10,0) GdkRGBA color; gdk_rgba_parse(&color, "#7796ba"); button5 = gtk_color_dialog_button_new(gtk_color_dialog_new()); gtk_color_dialog_button_set_rgba(GTK_COLOR_DIALOG_BUTTON(button5), &color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); #else GdkRGBA color; gdk_rgba_parse(&color, "#7796ba"); button5 = gtk_color_button_new_with_rgba(&color); gtk_widget_set_tooltip_text(button5, _app("Choose a color")); #endif // GTK_FONT_DIALOG_BUTTON or GTK_FONT_BUTTON #if GTK_CHECK_VERSION (4,10,0) button6 = gtk_font_dialog_button_new(gtk_font_dialog_new()); find_and_update_labels(button6); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); #else button6 = gtk_font_button_new(); find_and_update_labels(button6); gtk_widget_set_size_request(button6, 186, -1); // The 186 gtk_widget_set_tooltip_text(button6, _app("Choose a font")); #endif // GTK_BUTTON button7 = gtk_button_new_with_label(_app("Choose a file")); gtk_widget_add_css_class(button7, "awf-cheatcode-filebtn"); g_signal_connect(button7, "clicked", G_CALLBACK(dialog_open), NULL); button8 = gtk_button_new_with_label(_app("Choose a folder")); gtk_widget_add_css_class(button8, "awf-cheatcode-folderbtn"); g_signal_connect(button8, "clicked", G_CALLBACK(dialog_open), NULL); // GTK_SWITCH (for GTK_OPTION_MENU) button9 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button9), TRUE); button10 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button10), TRUE); gtk_widget_set_sensitive(button10, FALSE); button11 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button11), FALSE); button12 = gtk_switch_new(); gtk_switch_set_active(GTK_SWITCH(button12), FALSE); gtk_widget_set_sensitive(button12, FALSE); // GTK_LINK_BUTTON button13 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); button14 = gtk_link_button_new_with_label("https://github.com/luigifab/awf-extended", "Link button"); gtk_widget_set_sensitive(button14, FALSE); // GTK_VOLUME_BUTTON G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ button15 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button15), 0.5); button16 = gtk_volume_button_new(); gtk_scale_button_set_value(GTK_SCALE_BUTTON(button16), 0); gtk_widget_set_sensitive(button16, FALSE); G_GNUC_END_IGNORE_DEPRECATIONS // GTK_MENU_BUTTON button17 = gtk_menu_button_new(); gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(button17), "open-menu-symbolic"); GMenuItem *menuitem; GMenu *menu = g_menu_new(); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 1", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 2", NULL)); g_object_unref(menuitem); g_menu_append_item(menu, menuitem = g_menu_item_new("Popover item 3", NULL)); g_object_unref(menuitem); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(button17), G_MENU_MODEL(menu)); g_object_unref(menu); // layout add_to(root1, button1, FALSE, FALSE, 0, 0); add_to(root1, button2, FALSE, FALSE, 0, 0); add_to(root1, button3, FALSE, FALSE, 0, 0); add_to(root1, button4, FALSE, FALSE, 0, 0); add_to(root1, button5, FALSE, FALSE, 0, 0); add_to(root1, button6, FALSE, FALSE, 0, 0); add_to(root1, button7, FALSE, FALSE, 0, 0); add_to(root1, button8, FALSE, FALSE, 0, 0); add_to(root2, button9, FALSE, FALSE, 0, 0); add_to(root2, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root2, button10, FALSE, FALSE, 0, 0); add_to(root3, button11, FALSE, FALSE, 0, 0); add_to(root3, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root3, button12, FALSE, FALSE, 0, 0); add_to(root4, button13, FALSE, FALSE, 0, 0); add_to(root4, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root4, button14, FALSE, FALSE, 0, 0); add_to(root5, button15, FALSE, FALSE, 0, 0); add_to(root5, button16, FALSE, FALSE, 0, 0); add_to(root5, button17, FALSE, FALSE, 0, 0); } static void create_progressbars(GtkWidget *root1, GtkWidget *root2, GtkWidget *root3, GtkWidget *root4) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_progressbars()\n"); // GTK_PROGRESS_BAR progress1 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress1), GTK_ORIENTATION_HORIZONTAL); progress2 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress2), GTK_ORIENTATION_HORIZONTAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress2), TRUE); progress3 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress3), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress3), GTK_ORIENTATION_VERTICAL); gtk_widget_set_size_request(progress3, -1, 100); // The 100 progress4 = gtk_progress_bar_new(); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress4), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(progress4), GTK_ORIENTATION_VERTICAL); gtk_progress_bar_set_inverted(GTK_PROGRESS_BAR(progress4), TRUE); // GTK_SCALE scale1 = create_horizontal_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale1, "value_changed", G_CALLBACK(update_values), NULL); scale2 = create_horizontal_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale2, "value_changed", G_CALLBACK(update_values), NULL); scale3 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); g_signal_connect(scale3, "value_changed", G_CALLBACK(update_values), NULL); scale4 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); g_signal_connect(scale4, "value_changed", G_CALLBACK(update_values), NULL); scale5 = create_vertical_scale(50, FALSE, FALSE, GTK_POS_TOP); update_marks(GTK_SCALE(scale5), FALSE, GTK_POS_LEFT); g_signal_connect(scale5, "value_changed", G_CALLBACK(update_values), NULL); scale6 = create_vertical_scale(50, FALSE, TRUE, GTK_POS_TOP); update_marks(GTK_SCALE(scale6), FALSE, GTK_POS_RIGHT); g_signal_connect(scale6, "value_changed", G_CALLBACK(update_values), NULL); // GTK_LEVEL_BAR levelbar1 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar1), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar1), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar1), GTK_ORIENTATION_VERTICAL); levelbar2 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar2), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar2), 0.5); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar2), GTK_ORIENTATION_VERTICAL); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar2), TRUE); levelbar3 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar3), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar3), 2); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar3), GTK_ORIENTATION_VERTICAL); levelbar4 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar4), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar4), 2); gtk_orientable_set_orientation(GTK_ORIENTABLE(levelbar4), GTK_ORIENTATION_VERTICAL); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar4), TRUE); levelbar5 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar5), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar5), 0.5); levelbar6 = gtk_level_bar_new(); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar6), GTK_LEVEL_BAR_MODE_CONTINUOUS); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar6), 0.5); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar6), TRUE); levelbar7 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar7), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar7), 2); levelbar8 = gtk_level_bar_new_for_interval(0, 5); gtk_level_bar_set_mode(GTK_LEVEL_BAR(levelbar8), GTK_LEVEL_BAR_MODE_DISCRETE); gtk_level_bar_set_value(GTK_LEVEL_BAR(levelbar8), 2); gtk_level_bar_set_inverted(GTK_LEVEL_BAR(levelbar8), TRUE); // layout add_to(root1, progress1, FALSE, FALSE, 0, 0); add_to(root1, progress2, FALSE, FALSE, 0, 0); add_to(root1, scale1, FALSE, FALSE, 0, 0); add_to(root1, scale2, FALSE, FALSE, 0, 0); add_to(root2, progress3, FALSE, FALSE, 0, 0); add_to(root2, progress4, FALSE, FALSE, 0, 0); add_to(root2, levelbar1, FALSE, FALSE, 0, 0); add_to(root2, levelbar2, FALSE, FALSE, 0, 0); add_to(root2, levelbar3, FALSE, FALSE, 0, 0); add_to(root2, levelbar4, FALSE, FALSE, 0, 0); add_to(root3, scale3, FALSE, FALSE, 0, 0); add_to(root3, scale5, FALSE, FALSE, 0, 0); add_to(root3, scale6, FALSE, FALSE, 0, 0); add_to(root3, scale4, FALSE, FALSE, 0, 0); add_to(root4, levelbar5, FALSE, FALSE, 0, 0); add_to(root4, levelbar6, FALSE, FALSE, 0, 0); add_to(root4, levelbar7, FALSE, FALSE, 0, 0); add_to(root4, levelbar8, FALSE, FALSE, 0, 0); } static void create_labels(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_labels()\n"); GtkWidget *label1, *label2; // GTK_LABEL label1 = gtk_label_new("Label 1"); label2 = gtk_label_new("Label 2"); gtk_widget_set_sensitive(label2, FALSE); // layout add_to(root, label1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, label2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_spinners(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_spinners()\n"); GtkWidget *spinner1, *spinner2; // GTK_SPINNER spinner1 = gtk_spinner_new(); gtk_widget_set_size_request(spinner1, 20, 20); spinner2 = gtk_spinner_new(); gtk_widget_set_size_request(spinner2, 20, 20); gtk_widget_set_sensitive(spinner2, FALSE); //gtk_spinner_start(GTK_SPINNER(spinner2)); // layout add_to(root, spinner1, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space add_to(root, spinner2, FALSE, FALSE, 0, 0); add_to(root, BOXH, TRUE, TRUE, 0, 0); // empty space } static void create_expander(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_expander()\n"); GtkWidget *expander, *scrolledWindow, *tv; GtkTextBuffer *buffer; gchar *text; // GTK_EXPANDER expander = gtk_expander_new(_app("More...")); gtk_expander_set_expanded(GTK_EXPANDER(expander), TRUE); // GTK_SCROLLED_WINDOW scrolledWindow = gtk_scrolled_window_new(); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolledWindow, -1, 120); const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) { gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolledWindow), FALSE); gtk_widget_add_css_class(gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(scrolledWindow)), "discrete"); gtk_widget_add_css_class(gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(scrolledWindow)), "discrete"); } // GTK_TEXT_VIEW tv = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv), GTK_WRAP_WORD); text = g_strdup_printf("%s %s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv)); gtk_text_buffer_set_text(GTK_TEXT_BUFFER(buffer), text, -1); g_free(text); // layout gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolledWindow), tv); gtk_expander_set_child(GTK_EXPANDER(expander), scrolledWindow); add_to(root, expander, FALSE, FALSE, 0, 0); } static void create_frames(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_frames()\n"); GtkWidget *frame1, *frame2, *frame3, *frame4; // GTK_FRAME frame1 = gtk_frame_new("Frame (shadow in)"); gtk_widget_add_css_class(frame1, "border-inset"); frame2 = gtk_frame_new("Frame (shadow out)"); gtk_widget_add_css_class(frame2, "border-outset"); frame3 = gtk_frame_new("Frame (shadow etched in)"); gtk_widget_add_css_class(frame3, "border-groove"); frame4 = gtk_frame_new("Frame (shadow etched out)"); gtk_widget_add_css_class(frame4, "border-ridge"); gtk_widget_set_sensitive(frame4, FALSE); // layout add_to(root1, frame1, TRUE, TRUE, 0, 0); add_to(root1, frame2, TRUE, TRUE, 0, 0); add_to(root2, frame3, TRUE, TRUE, 0, 0); add_to(root2, frame4, TRUE, TRUE, 0, 0); } static void create_notebooks(GtkWidget *root1, GtkWidget *root2) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_notebooks()\n"); // GTK_NOTEBOOK notebook1 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook1)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook1), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook1), GTK_POS_TOP); create_notebook_tab(notebook1, "Tab1", NULL, FALSE); create_notebook_tab(notebook1, "Tab2", NULL, FALSE); create_notebook_tab(notebook1, "Tab3", NULL, TRUE); create_notebook_tab(notebook1, "Tab4", NULL, TRUE); notebook2 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook2)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook2), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook2), GTK_POS_BOTTOM); create_notebook_tab(notebook2, "Tab1", NULL, FALSE); create_notebook_tab(notebook2, "Tab2", NULL, FALSE); create_notebook_tab(notebook2, "Tab3", NULL, TRUE); create_notebook_tab(notebook2, "Tab4", NULL, TRUE); notebook3 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook3)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook3), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook3), GTK_POS_LEFT); create_notebook_tab(notebook3, "T1", NULL, FALSE); create_notebook_tab(notebook3, "Tab2", NULL, FALSE); create_notebook_tab(notebook3, "T3b", NULL, TRUE); create_notebook_tab(notebook3, "T4", NULL, TRUE); notebook4 = gtk_notebook_new(); gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook4)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook4), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook4), GTK_POS_RIGHT); create_notebook_tab(notebook4, "T1", NULL, FALSE); create_notebook_tab(notebook4, "Tab2", NULL, FALSE); create_notebook_tab(notebook4, "T3b", NULL, TRUE); create_notebook_tab(notebook4, "T4", NULL, TRUE); // layout add_to(root1, notebook1, TRUE, TRUE, 0, 0); add_to(root1, notebook2, TRUE, TRUE, 0, 0); add_to(root2, notebook3, TRUE, TRUE, 0, 0); add_to(root2, notebook4, TRUE, TRUE, 0, 0); } static void create_notebook_tab(GtkWidget *notebook, gchar *text, GtkWidget *content, gboolean close) { // ok GtkWidget *headbtn = BOXH, *btn; gtk_widget_set_hexpand(headbtn, FALSE); gtk_widget_set_vexpand(headbtn, FALSE); add_to(headbtn, gtk_label_new(text), TRUE, TRUE, 0, 0); // GTK_BUTTON if (close) { btn = gtk_button_new_from_icon_name("window-close"); gtk_button_set_has_frame(GTK_BUTTON(btn), FALSE); gtk_widget_set_focus_on_click(btn, FALSE); add_to(headbtn, btn, FALSE, FALSE, 0, 0); } if (!content) content = BOXV; gtk_notebook_append_page(GTK_NOTEBOOK(notebook), content, headbtn); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(notebook), content, TRUE); // gtk-scroll-tabs for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x GtkEventController *event; event = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES | GTK_EVENT_CONTROLLER_SCROLL_DISCRETE); g_signal_connect(event, "scroll", G_CALLBACK(on_scrolltabs), notebook); gtk_widget_add_controller(gtk_widget_get_parent(headbtn), event); } static void create_treeview(GtkWidget *root) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_treeview()\n"); GtkWidget *scrolledWindow, *view; GtkCellRenderer *renderer; GtkTreeStore *store; GtkTreeIter iter; int idx = 0; G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ // data store = gtk_tree_store_new(11, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 1, 1, FALSE, 2, FALSE, 3, "Text 1.1", 4, 0.0, 5, 0.0, 6, "Text 1.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 2, 1, TRUE, 2, TRUE, 3, "Text 2.1", 4, 10.0, 5, 10.0, 6, "Text 2.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 3, 1, FALSE, 2, FALSE, 3, "Text 3.1", 4, 20.0, 5, 20.0, 6, "Text 3.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 4, 1, TRUE, 2, TRUE, 3, "Text 4.1", 4, 30.0, 5, 30.0, 6, "Text 4.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 5, 1, FALSE, 2, FALSE, 3, "Text 5.1", 4, 40.0, 5, 40.0, 6, "Text 5.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 6, 1, TRUE, 2, TRUE, 3, "Text 6.1", 4, 50.0, 5, 50.0, 6, "Text 6.2", 7, "help-contents", 8, "help-contents", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 7, 1, FALSE, 2, FALSE, 3, "Text 7.1", 4, 60.0, 5, 60.0, 6, "Text 7.2", 7, "document-open", 8, "document-open", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 8, 1, TRUE, 2, TRUE, 3, "Text 8.1", 4, 70.0, 5, 70.0, 6, "Text 8.2", 7, "document-save", 8, "document-save", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 9, 1, FALSE, 2, FALSE, 3, "Text 9.1", 4, 80.0, 5, 80.0, 6, "Text 9.2", 7, "document-save-as", 8, "document-save-as", 9, FALSE, 10, FALSE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 10, 1, TRUE, 2, TRUE, 3, "Text 10.1", 4, 90.0, 5, 90.0, 6, "Text 10.2", 7, "view-refresh", 8, "view-refresh", 9, TRUE, 10, TRUE, -1); gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, 0, 11, 1, FALSE, 2, FALSE, 3, "Text 11.1", 4, 100.0, 5, 100.0, 6, "Text 11.2", 7, "edit-cut", 8, "edit-cut", 9, FALSE, 10, FALSE, -1); // columns view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_reorderable(GTK_TREE_VIEW(view), FALSE); // rows gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(view), FALSE); gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(view), TRUE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 0, GTK_SORT_ASCENDING); g_object_unref(G_OBJECT(store)); idx = 0; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "i", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 1; renderer = gtk_cell_renderer_toggle_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 2; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 3; renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); g_object_set(renderer, "editable", TRUE, NULL); idx = 4; renderer = gtk_cell_renderer_progress_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 5; renderer = gtk_cell_renderer_progress_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Progress", renderer, "value", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 6; renderer = gtk_cell_renderer_text_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Text", renderer, "text", idx, NULL); gtk_tree_view_column_set_sort_column_id(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), idx); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 7; renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 8; renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "Icon", renderer, "icon-name", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); idx = 9; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "c", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); idx = 10; renderer = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_set_sensitive(renderer, FALSE); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), idx, "r", renderer, "active", idx, NULL); gtk_tree_view_column_set_reorderable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_resizable(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), TRUE); gtk_tree_view_column_set_min_width(gtk_tree_view_get_column(GTK_TREE_VIEW(view), idx), 20); // colors for lines: with gtk4-classic G_GNUC_END_IGNORE_DEPRECATIONS // scrolled window scrolledWindow = gtk_scrolled_window_new(); const gchar *config = g_getenv("GTK_OVERLAY_SCROLLING"); if (config && (strcmp(config, "0") == 0)) gtk_scrolled_window_set_overlay_scrolling(GTK_SCROLLED_WINDOW(scrolledWindow), FALSE); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); gtk_widget_set_size_request(scrolledWindow, 200, 200); // The 200 gtk_widget_set_size_request(view, 200, 200); // The 200 gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(scrolledWindow), view); add_to(root, scrolledWindow, FALSE, FALSE, 0, 0); } static void create_scales(GtkWidget *notebook, gchar *text, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_scales()\n"); GtkWidget *hbox = BOXH; GtkWidget *vbox1 = BOXV, *vbox2 = BOXV, *vbox3 = BOXV, *hboxa = BOXH, *hboxb = BOXH; GtkWidget *scale1v, *scale2v, *scale3v, *scale4v, *scale5v, *scale6v, *scale7v, *scale8v, *scale9v, *scale10v, *scale11v, *scale12v; GtkWidget *scale1h, *scale2h, *scale3h, *scale4h, *scale5h, *scale6h, *scale7h, *scale8h, *scale9h, *scale10h, *scale11h, *scale12h; gdouble value = gtk_range_get_value(GTK_RANGE(scale1)); gtk_widget_set_margin_top(hbox, 12); gtk_widget_set_margin_bottom(hbox, 12); gtk_widget_set_margin_start(hbox, 12); gtk_widget_set_margin_end(hbox, 12); // vertical scales scale1v = create_vertical_scale(value, FALSE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale1v, "top"); scale2v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale2v, "top"); scale3v = create_vertical_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale3v, "top"); scale4v = create_vertical_scale(value, TRUE, FALSE, position); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale4v, "top"); scale5v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5v), FALSE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale5v, "top"); scale6v = create_vertical_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6v), TRUE, GTK_POS_LEFT); if (gtk_widget_get_direction(window) == GTK_TEXT_DIR_RTL) // @todo highlight bottom instead of top, why? gtk_widget_add_css_class(scale6v, "top"); scale7v = create_vertical_scale(value, FALSE, TRUE, position); scale8v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8v), FALSE, GTK_POS_RIGHT); scale9v = create_vertical_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9v), TRUE, GTK_POS_RIGHT); scale10v = create_vertical_scale(value, TRUE, TRUE, position); scale11v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11v), FALSE, GTK_POS_RIGHT); scale12v = create_vertical_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12v), TRUE, GTK_POS_RIGHT); // horizontal scales scale1h = create_horizontal_scale(value, FALSE, FALSE, position); scale2h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale2h), FALSE, GTK_POS_TOP); scale3h = create_horizontal_scale(value, FALSE, FALSE, position); update_marks(GTK_SCALE(scale3h), TRUE, GTK_POS_TOP); scale4h = create_horizontal_scale(value, TRUE, FALSE, position); scale5h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale5h), FALSE, GTK_POS_TOP); scale6h = create_horizontal_scale(value, TRUE, FALSE, position); update_marks(GTK_SCALE(scale6h), TRUE, GTK_POS_TOP); scale7h = create_horizontal_scale(value, FALSE, TRUE, position); scale8h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale8h), FALSE, GTK_POS_BOTTOM); scale9h = create_horizontal_scale(value, FALSE, TRUE, position); update_marks(GTK_SCALE(scale9h), TRUE, GTK_POS_BOTTOM); scale10h = create_horizontal_scale(value, TRUE, TRUE, position); scale11h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale11h), FALSE, GTK_POS_BOTTOM); scale12h = create_horizontal_scale(value, TRUE, TRUE, position); update_marks(GTK_SCALE(scale12h), TRUE, GTK_POS_BOTTOM); // layout add_to(hbox, vbox1, TRUE, TRUE, 5, 5); add_to(vbox1, scale1h, FALSE, FALSE, 5, 5); add_to(vbox1, scale2h, FALSE, FALSE, 5, 5); add_to(vbox1, scale3h, FALSE, FALSE, 5, 5); add_to(vbox1, scale4h, FALSE, FALSE, 5, 5); add_to(vbox1, scale5h, FALSE, FALSE, 5, 5); add_to(vbox1, scale6h, FALSE, FALSE, 5, 5); add_to(hbox, vbox2, TRUE, TRUE, 5, 5); add_to(vbox2, hboxa, TRUE, TRUE, 0, 0); add_to(hboxa, scale1v, FALSE, FALSE, 5, 5); add_to(hboxa, scale2v, FALSE, FALSE, 5, 5); add_to(hboxa, scale3v, FALSE, FALSE, 5, 5); add_to(hboxa, scale7v, FALSE, FALSE, 5, 5); add_to(hboxa, scale8v, FALSE, FALSE, 5, 5); add_to(hboxa, scale9v, FALSE, FALSE, 5, 5); add_to(vbox2, hboxb, TRUE, TRUE, 0, 0); add_to(hboxb, scale4v, FALSE, FALSE, 5, 5); add_to(hboxb, scale5v, FALSE, FALSE, 5, 5); add_to(hboxb, scale6v, FALSE, FALSE, 5, 5); add_to(hboxb, scale10v, FALSE, FALSE, 5, 5); add_to(hboxb, scale11v, FALSE, FALSE, 5, 5); add_to(hboxb, scale12v, FALSE, FALSE, 5, 5); add_to(hbox, vbox3, TRUE, TRUE, 5, 5); add_to(vbox3, scale7h, FALSE, FALSE, 5, 5); add_to(vbox3, scale8h, FALSE, FALSE, 5, 5); add_to(vbox3, scale9h, FALSE, FALSE, 5, 5); add_to(vbox3, scale10h, FALSE, FALSE, 5, 5); add_to(vbox3, scale11h, FALSE, FALSE, 5, 5); add_to(vbox3, scale12h, FALSE, FALSE, 5, 5); create_notebook_tab(notebook, text, hbox, FALSE); } static GtkWidget* create_horizontal_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_horizontal_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 100, 1); gtk_range_set_value(GTK_RANGE(scale), value); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_widget_set_size_request(scale, 186, -1); // The 186 return scale; } static GtkWidget* create_vertical_scale(gdouble value, gboolean draw, gboolean inverted, int position) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m create_vertical_scale()\n"); GtkWidget *scale; scale = gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL, 0, 100, 1); gtk_scale_set_value_pos(GTK_SCALE(scale), position); gtk_range_set_inverted(GTK_RANGE(scale), inverted); gtk_scale_set_draw_value(GTK_SCALE(scale), draw); gtk_range_set_value(GTK_RANGE(scale), value); gtk_widget_set_size_request(scale, -1, 100); // The 100 return scale; } // traditional menu static void create_traditional_menubar(GtkApplication *app, GMenu *root) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_traditional_menubar()\n"); GMenu *menu, *submenu, *section, *base; GSimpleAction *action; GList *iterator; gboolean ok; // options menu = g_menu_new(); g_menu_append_submenu(root, _app("_Options"), G_MENU_MODEL(menu)); create_menuitem(app, menu, _gtk("_Open"), FALSE, AWF_ACCEL_OPEN, AWF_OPEN, "gtk-open", dialog_open); create_menuitem(app, menu, _app("Open recent file"), TRUE, AWF_ACCEL_RECE, AWF_RECE, NULL, NULL); create_menuitem(app, menu, _gtk("_Save"), FALSE, AWF_ACCEL_SAVE, AWF_SAVE, "gtk-save", dialog_save); create_menuitem(app, menu, _app("_Refresh"), FALSE, AWF_ACCEL_REFR, AWF_REFR, "gtk-refresh", G_CALLBACK(on_sighup)); // (update_theme) create_menuitem(app, menu, _app("Calendar"), FALSE, AWF_ACCEL_CALE, AWF_CALE, NULL, dialog_calendar); create_menuitem(app, menu, "Scales", FALSE, AWF_ACCEL_SCAL, AWF_SCAL, NULL, dialog_scales); create_menuitem(app, menu, _gtk("_Properties"), FALSE, AWF_ACCEL_PROP, AWF_PROP, "gtk-properties", dialog_message); create_menuitem(app, menu, _gtk("Page Set_up"), FALSE, AWF_ACCEL_PRSE, AWF_PRSE, NULL, dialog_page_setup); // gtk-page-setup removed create_menuitem(app, menu, _gtk("_Print"), FALSE, AWF_ACCEL_PRIN, AWF_PRIN, "gtk-print", dialog_print); submenu = g_menu_new(); g_menu_append_submenu(menu, _app("More..."), G_MENU_MODEL(submenu)); create_menuitem(app, submenu, _gtk("Cu_t"), FALSE, AWF_ACCEL_MCUT, AWF_MCUT, "gtk-cut", NULL); create_menuitem(app, submenu, _gtk("_Copy"), FALSE, AWF_ACCEL_MCOP, AWF_MCOP, "gtk-copy", NULL); create_menuitem(app, submenu, _gtk("_Paste"), FALSE, AWF_ACCEL_MPAS, AWF_MPAS, "gtk-paste", NULL); g_object_unref(submenu); submenu = g_menu_new(); //g_menu_append_submenu(menu, _app("Less..."), G_MENU_MODEL(submenu)); GMenuItem *less = g_menu_item_new_submenu(_app("Less..."), G_MENU_MODEL(submenu)); g_menu_item_set_attribute(less, "submenu-action", "s", "disabled"); g_menu_item_set_detailed_action(less, "disabled"); g_menu_append_item(menu, less); g_object_unref(less); g_object_unref(submenu); section = g_menu_new(); g_menu_append_section(menu, NULL, G_MENU_MODEL(section)); action = g_simple_action_new_stateful("set-check-grp11", NULL, g_variant_new_boolean(FALSE)); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, "app.set-check-grp11", FALSE); action = g_simple_action_new_stateful("set-check-grp12", NULL, g_variant_new_boolean(TRUE)); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, "app.set-check-grp12", FALSE); create_menuitem_radio(section, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, NULL, FALSE); // @todo action = g_simple_action_new_stateful("set-check-grp21", NULL, g_variant_new_boolean(FALSE)); g_simple_action_set_enabled(action, FALSE); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 1 %s", _app("(unchecked)")), TRUE, "app.set-check-grp21", FALSE); action = g_simple_action_new_stateful("set-check-grp22", NULL, g_variant_new_boolean(TRUE)); g_simple_action_set_enabled(action, FALSE); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Check 2 %s", _app("(checked)")), TRUE, "app.set-check-grp22", FALSE); create_menuitem_radio(section, g_strdup_printf("Check 3 %s", _app("(inconsistent)")), TRUE, "set-check-grp23", FALSE); // @todo g_object_unref(section); section = g_menu_new(); g_menu_append_section(menu, NULL, G_MENU_MODEL(section)); action = g_simple_action_new_stateful("set-radio-grp1", G_VARIANT_TYPE_STRING, g_variant_new_string("checked")); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, "app.set-radio-grp1::unchecked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, "app.set-radio-grp1::checked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, NULL, FALSE); // @todo action = g_simple_action_new_stateful("set-radio-grp2", G_VARIANT_TYPE_STRING, g_variant_new_string("checked")); g_simple_action_set_enabled(action, FALSE); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); create_menuitem_radio(section, g_strdup_printf("Radio 1 %s", _app("(unchecked)")), TRUE, "app.set-radio-grp2::unchecked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 2 %s", _app("(checked)")), TRUE, "app.set-radio-grp2::checked", FALSE); create_menuitem_radio(section, g_strdup_printf("Radio 3 %s", _app("(inconsistent)")), TRUE, "disabled", FALSE); // @todo g_object_unref(section); section = g_menu_new(); g_menu_append_section(menu, NULL, G_MENU_MODEL(section)); create_menuitem(app, section, _gtk("_Close"), TRUE, AWF_ACCEL_CLOS, AWF_CLOS, "gtk-close", NULL); create_menuitem(app, section, _gtk("_Quit"), FALSE, AWF_ACCEL_QUIT, AWF_QUIT, "gtk-quit", quit); g_object_unref(section); g_object_unref(menu); // themes action = g_simple_action_new_stateful("set-theme", G_VARIANT_TYPE_STRING, g_variant_new_string(current_theme)); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); // system themes ok = FALSE; menu = g_menu_new(); g_menu_append_submenu(root, _app("_System themes"), G_MENU_MODEL(menu)); for (iterator = list_system_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Orchis") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = g_menu_new(); g_menu_append_submenu(menu, iterator->data, G_MENU_MODEL(submenu)); g_object_unref(submenu); // @todo use-after-unref base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Orchis") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } if (g_hash_table_lookup(hash_user_theme, iterator->data)) create_menuitem_radio(base, iterator->data, FALSE, "disabled", FALSE); // @todo else create_menuitem_radio(base, iterator->data, FALSE, g_strdup_printf("app.set-theme::%s", (gchar*) iterator->data), TRUE); } if (!list_system_theme) g_menu_append(menu, _app("No themes found"), "disabled"); // @todo g_object_unref(menu); // user themes ok = FALSE; menu = g_menu_new(); g_menu_append_submenu(root, _app("_User themes"), G_MENU_MODEL(menu)); for (iterator = list_user_theme; iterator; iterator = iterator->next) { if ( (strcmp((gchar*) iterator->data, "Mint-L") == 0) || (strcmp((gchar*) iterator->data, "Mint-X") == 0) || (strcmp((gchar*) iterator->data, "Mint-Y") == 0) || (strcmp((gchar*) iterator->data, "Orchis") == 0) || (strcmp((gchar*) iterator->data, "Yaru") == 0) || (strcmp((gchar*) iterator->data, "Sucharu") == 0) ) { submenu = g_menu_new(); g_menu_append_submenu(menu, iterator->data, G_MENU_MODEL(submenu)); g_object_unref(submenu); // @todo use-after-unref base = submenu; ok = TRUE; } else if (ok && ( g_str_has_prefix((gchar*) iterator->data, "Mint-L") || g_str_has_prefix((gchar*) iterator->data, "Mint-X") || g_str_has_prefix((gchar*) iterator->data, "Mint-Y") || g_str_has_prefix((gchar*) iterator->data, "Orchis") || g_str_has_prefix((gchar*) iterator->data, "Yaru") || g_str_has_prefix((gchar*) iterator->data, "Sucharu") )) { base = submenu; } else { base = menu; ok = FALSE; } create_menuitem_radio(base, iterator->data, FALSE, g_strdup_printf("app.set-theme::%s", (gchar*) iterator->data), TRUE); } if (!list_user_theme) g_menu_append(menu, _app("No themes found"), "disabled"); // @todo g_object_unref(menu); // text direction action = g_simple_action_new_stateful("set-direction", G_VARIANT_TYPE_STRING, g_variant_new_string((current_direction == 1) ? "1" : "2")); g_signal_connect(action, "activate", G_CALLBACK(activate_action), NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); g_object_unref(action); menu = g_menu_new(); g_menu_append_submenu(root, _app("_Text direction"), G_MENU_MODEL(menu)); create_menuitem_radio(menu, _app("Left to Right (LTR)"), FALSE, g_strdup_printf("app.set-direction::%d", GTK_TEXT_DIR_LTR), TRUE); create_menuitem_radio(menu, _app("Right to Left (RTL)"), FALSE, g_strdup_printf("app.set-direction::%d", GTK_TEXT_DIR_RTL), TRUE); g_object_unref(menu); // help menu = g_menu_new(); g_menu_append_submenu(root, _app("_Help"), G_MENU_MODEL(menu)); create_menuitem(app, menu, "GtkInspector", FALSE, AWF_ACCEL_INSP, AWF_INSP, NULL, dialog_inspector); create_menuitem(app, menu, _gtk("_About"), FALSE, AWF_ACCEL_ABOU, AWF_ABOU, "gtk-about", dialog_about); g_object_unref(menu); } static void create_menuitem_radio(GMenu *menu, gchar *text, gboolean free1, gchar *group, gboolean free2) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem_radio(%s)\n", text); GMenuItem *menuitem = g_menu_item_new(text, group); g_menu_append_item(menu, menuitem); g_object_unref(menuitem); if (free1) g_free(text); if (free2) g_free(group); } static void create_menuitem(GtkApplication *app, GMenu *menu, gchar *text, gboolean dsb, gchar *acl, gchar *kmp, gchar *icon, GCallback function) { if (awf_trace) g_printf("\033[36m[trace]\033[00m create_menuitem(%s)\n", text); GMenuItem *menuitem; GSimpleAction *action = NULL; gchar *appkey = "disabled"; if (!dsb) { appkey = g_strdup_printf("app.%s", kmp); action = g_simple_action_new(kmp, NULL); g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(action)); const char *acckey[2] = { acl, NULL }; gtk_application_set_accels_for_action(app, appkey, acckey); } menuitem = g_menu_item_new(text, appkey); if (action && function) g_signal_connect(action, "activate", function, NULL); if (icon) g_menu_item_set_attribute_value(menuitem, "icon", g_variant_new_string(icon)); // with gtk4-classic, without the icon is hidden // @see maybe https://github.com/GNOME/gtk/commit/7344a03aa33e334e034a6542b391f9649ffe38f5 // display menuitem shortcuts with GTK 4.0 #if !GTK_CHECK_VERSION (4,3,2) if (acl) g_menu_item_set_attribute(menuitem, "accel", "s", acl, NULL); #endif g_menu_append_item(menu, menuitem); g_object_unref(menuitem); if (!dsb) { g_object_unref(action); g_free(appkey); } } static void activate_action(GSimpleAction *action, GVariant *parameter, gpointer data) { if (awf_trace) g_printf("\033[36m[trace]\033[00m activate_action()\n"); // radio if (parameter) { g_simple_action_set_state(action, parameter); if (strcmp(g_action_get_name(G_ACTION(action)), "set-theme") == 0) update_theme((gchar*) g_variant_get_string(parameter, NULL)); else if (strcmp(g_action_get_name(G_ACTION(action)), "set-direction") == 0) update_text_direction((strcmp(g_variant_get_string(parameter, NULL), "1") == 0) ? 1 : 2); } // checkbox else { GVariant *actionState = g_action_get_state(G_ACTION(action)); if (g_variant_get_boolean(actionState) == FALSE) g_simple_action_set_state(action, g_variant_new_boolean(TRUE)); else g_simple_action_set_state(action, g_variant_new_boolean(FALSE)); g_variant_unref(actionState); } } static void accels_load(GtkApplication *app) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_load()\n"); gchar *oldPath = g_build_filename(g_get_home_dir(), ".awf-gtk-accels", NULL); if (g_file_test(oldPath, G_FILE_TEST_EXISTS)) { gchar *newPath = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); g_rename(oldPath, newPath); g_free(newPath); } g_free(oldPath); // gtk-can-change-accels for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x gchar *path = g_build_filename(g_get_home_dir(), ".awf-accels", NULL); if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) { gsize len = 0; gchar *content = NULL; if (g_file_get_contents(path, &content, &len, NULL)) { GActionMap *map = G_ACTION_MAP(app); gchar **lines = g_strsplit(content, "\n", -1); for (int i = 0; lines[i] != NULL; i++) { //; (gtk_accel_path "/Test/Print" "p") gchar *l = g_strstrip(lines[i]); if (l[0] == '\0' || l[0] == ';') continue; gchar *a = strchr(l, '"'); if (!a) continue; gchar *b = strchr(a + 1, '"'); if (!b) continue; gchar *c = strchr(b + 1, '"'); if (!c) continue; gchar *d = strchr(c + 1, '"'); if (!d) continue; gchar *kmp = g_strndup(a + 1, b - a - 1); gchar *acl = g_strndup(c + 1, d - c - 1); // find action by name if (kmp[0] != '\0') { if (awf_debug) g_printf("\033[33m[debug]\033[00m accels_foundInFile: %s %s\n", kmp, acl); GAction *action = g_action_map_lookup_action(map, kmp); if (action != NULL) { gchar *full = g_strdup_printf("app.%s", kmp); if (awf_debug) g_printf("\033[33m[debug]\033[00m accels_foundInMenu: %s %s %s\n", kmp, full, acl); const char *acckey[2] = { acl, NULL }; gtk_application_set_accels_for_action(app, full, acckey); g_free(full); } } g_free(kmp); g_free(acl); } g_strfreev(lines); g_free(content); } } g_free(path); } static gboolean accels_change(GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state) { // todo if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_change()\n"); // @todo not triggered when menu is open return FALSE; } static void accels_save() { // todo if (awf_trace) g_printf("\033[36m[trace]\033[00m accels_save()\n"); // gtk-can-change-accels for GTK 3.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (must_save_accels) { // @todo } } // dialogs static void dialog_close(GtkWidget *widget, GtkDialog *dialog) { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_close()\n"); if (GTK_IS_WINDOW(widget)) gtk_window_destroy(GTK_WINDOW(widget)); else if (GTK_IS_WINDOW(dialog)) gtk_window_destroy(GTK_WINDOW(dialog)); } static void dialog_open() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_open()\n"); #if GTK_CHECK_VERSION (4,10,0) GtkFileDialog *dialog = gtk_file_dialog_new(); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileDialog:Open", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_file_dialog_set_title(dialog, text); g_free(text); GFile *home = g_file_new_for_path(g_get_home_dir()); gtk_file_dialog_set_initial_folder(dialog, home); g_object_unref(home); gtk_file_dialog_open_multiple(dialog, GTK_WINDOW(window), NULL, NULL, NULL); g_object_unref(dialog); #else GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Open", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, _gtk("_Cancel"), GTK_RESPONSE_CANCEL, _gtk("_Open"), GTK_RESPONSE_ACCEPT, NULL); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileChooserDialog:Open", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); GFile *home = g_file_new_for_path(g_get_home_dir()); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), home, NULL); g_object_unref(home); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE); gtk_window_present(GTK_WINDOW(dialog)); g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif } static void dialog_save() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_save()\n"); #if GTK_CHECK_VERSION (4,10,0) GtkFileDialog *dialog = gtk_file_dialog_new(); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileDialog:Save", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_file_dialog_set_title(dialog, text); g_free(text); GFile *home = g_file_new_for_path(g_get_home_dir()); gtk_file_dialog_set_initial_folder(dialog, home); g_object_unref(home); gtk_file_dialog_save(dialog, GTK_WINDOW(window), NULL, NULL, NULL); g_object_unref(dialog); #else GtkWidget *dialog = gtk_file_chooser_dialog_new( "GtkFileChooserDialog:Save", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, _gtk("_Cancel"), GTK_RESPONSE_CANCEL, _gtk("_Save"), GTK_RESPONSE_ACCEPT, NULL); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkFileChooserDialog:Save", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); GFile *home = g_file_new_for_path(g_get_home_dir()); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), home, NULL); g_object_unref(home); gtk_window_present(GTK_WINDOW(dialog)); g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif } static void dialog_message() { // todo if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_message()\n"); GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, "GtkMessageDialog"); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); gchar *text = g_strdup_printf("%s - GTK %d.%d", "GtkMessageDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); // dialog window #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); #endif g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); gtk_window_present(GTK_WINDOW(dialog)); } static void dialog_page_setup() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_page_setup()\n"); //GtkWidget *dialog = gtk_page_setup_unix_dialog_new("GtkPageSetupUnixDialog", GTK_WINDOW(window)); // // dialog window //~if GTK_CHECK_VERSION (4,10,0) // gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); // gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); //~endif // //g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); //gtk_window_present(GTK_WINDOW(dialog)); GtkPageSetup *setup = gtk_print_run_page_setup_dialog(GTK_WINDOW(window), NULL, NULL); // @todo 4.12 segfault on close g_object_unref(setup); } static void dialog_print() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_print()\n"); //GtkWidget *dialog = gtk_print_unix_dialog_new("GtkPrintUnixDialog", GTK_WINDOW(window)); // // dialog window //~if GTK_CHECK_VERSION (4,10,0) // gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); // gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); //~endif // //g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); //gtk_window_present(GTK_WINDOW(dialog)); GtkPrintOperation *op = gtk_print_operation_new(); gtk_print_operation_run(op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(window), NULL); // @todo 4.12 segfault on close g_object_unref(op); } static void dialog_about() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_about()\n"); GdkPixbuf *pixbuf = NULL; #if defined (G_OS_WIN32) //extern GdkPixbuf *gdk_win32_icon_to_pixbuf_libgtk_only(HICON hicon); HICON hIcon = (HICON) LoadImage(GetModuleHandle(NULL), "IDI_ICON1", IMAGE_ICON, 64, 64, LR_DEFAULTSIZE); //if (hIcon) // pixbuf = gdk_win32_icon_to_pixbuf_libgtk_only(hIcon); #endif gchar *cVersion; #ifdef __STDC_VERSION__ if (__STDC_VERSION__ >= 202311L) cVersion = "C23"; else if (__STDC_VERSION__ >= 201710L) cVersion = "C17"; else if (__STDC_VERSION__ >= 201112L) cVersion = "C11"; else if (__STDC_VERSION__ >= 199901L) cVersion = "C99"; else if (__STDC_VERSION__ >= 199409L) cVersion = "C95"; else cVersion = "C (unknown)"; #else cVersion = "C89/C90"; #endif gchar *t1, *t2, *t3, *t4; gtk_show_about_dialog(GTK_WINDOW(window), "version", VERSION, "comments", t1 = g_strdup_printf("%s\n\n%s\n%s\n\n%s\n%s", _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme."), t2 = g_strdup_printf(_app("Remove %s file"), "~/.awf-accels"), _app("to reset keyboard shortcuts."), t3 = g_strdup_printf(_app("compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), cVersion, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION, PANGO_VERSION_STRING), t4 = g_strdup_printf(_app(" started with gtk %d.%d.%d and glib %d.%d.%d and pango %s"), gtk_get_major_version(), gtk_get_minor_version(), gtk_get_micro_version(), glib_major_version, glib_minor_version, glib_micro_version, pango_version_string()) ), "website", "https://github.com/luigifab/awf-extended", "copyright", "Copyright © 2020-2026 Fabrice Creuzot (luigifab)\nCopyright © 2011-2017 Valère Monseur (valr)", "logo", pixbuf, "icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "logo-icon-name", pixbuf ? NULL : GETTEXT_PACKAGE, "license", _app("A widget factory 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."), "wrap-license", TRUE, NULL); g_free(t1); g_free(t2); g_free(t3); g_free(t4); #if defined (G_OS_WIN32) if (hIcon) { if (pixbuf) g_object_unref(pixbuf); DestroyIcon(hIcon); } #endif } static void dialog_inspector() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_inspector()\n"); gtk_window_set_interactive_debugging(TRUE); } static void dialog_calendar() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_calendar()\n"); GtkWidget *dialog, *infobar, *label, *calendar, *area, *btn, *vbox = BOXV, *hbox; gchar *text; // info bars and calendar G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GTK 4.10+ infobar = gtk_info_bar_new_with_buttons(_gtk("_OK"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_INFO); label = gtk_label_new(_app("This is an info bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new_with_buttons(_app("Ok"), GTK_RESPONSE_OK, NULL); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_QUESTION); label = gtk_label_new(_app("This is a question bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_WARNING); label = gtk_label_new(_app("This is a warning bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); infobar = gtk_info_bar_new(); gtk_info_bar_set_message_type(GTK_INFO_BAR(infobar), GTK_MESSAGE_ERROR); label = gtk_label_new(_app("This is an error bar.")); gtk_info_bar_add_child(GTK_INFO_BAR(infobar), label); add_to(vbox, infobar, FALSE, FALSE, 0, 0); calendar = gtk_calendar_new(); gtk_calendar_set_show_day_names(GTK_CALENDAR(calendar), TRUE); gtk_calendar_set_show_week_numbers(GTK_CALENDAR(calendar), TRUE); add_to(vbox, calendar, FALSE, FALSE, 0, 0); G_GNUC_END_IGNORE_DEPRECATIONS // GtkWindow:Modal or GtkDialog #if GTK_CHECK_VERSION (4,10,0) dialog = gtk_window_new(); gtk_widget_add_css_class(dialog, "dialog"); text = g_strdup_printf("%s - GTK %d.%d", "GtkWindow:Modal", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); // encore une idée de génie de GTK area = BOXV; gtk_widget_add_css_class(area, "dialog-vbox"); gtk_window_set_child(GTK_WINDOW(dialog), area); add_to(area, vbox, TRUE, TRUE, 0, 5); // no padding // encore une idée de génie de GTK hbox = BOXH; gtk_widget_add_css_class(hbox, "dialog-action-area"); btn = gtk_button_new_with_mnemonic(_gtk("_Close")); g_signal_connect(btn, "clicked", G_CALLBACK(dialog_close), dialog); gtk_box_append(GTK_BOX(hbox), btn); add_to(area, hbox, TRUE, TRUE, 0, 0); gtk_widget_set_halign(hbox, GTK_ALIGN_END); #else dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); text = g_strdup_printf("%s - GTK %d.%d", "GtkDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, vbox, TRUE, TRUE, 5, 5); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), _gtk("_Close"), GTK_RESPONSE_OK); #endif if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } // dialog window #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); #else g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_widget_set_size_request(dialog, 350, -1); gtk_window_present(GTK_WINDOW(dialog)); gtk_widget_grab_focus(GTK_WIDGET(btn)); } static void dialog_scales() { // ok if (awf_trace) g_printf("\033[36m[trace]\033[00m dialog_scales()\n"); GtkWidget *dialog, *notebook, *area, *btn, *hbox; gchar *text; // notebook and scales notebook = gtk_notebook_new(); gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); create_scales(notebook, "value top", GTK_POS_TOP); create_scales(notebook, "value right", GTK_POS_RIGHT); create_scales(notebook, "value bottom", GTK_POS_BOTTOM); create_scales(notebook, "value left", GTK_POS_LEFT); // GtkWindow:Modal or GtkDialog #if GTK_CHECK_VERSION (4,10,0) dialog = gtk_window_new(); gtk_widget_add_css_class(dialog, "dialog"); text = g_strdup_printf("%s - GTK %d.%d", "GtkWindow:Modal", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); // encore une idée de génie de GTK area = BOXV; gtk_widget_add_css_class(area, "dialog-vbox"); gtk_window_set_child(GTK_WINDOW(dialog), area); add_to(area, notebook, TRUE, TRUE, 0, 5); // no padding // encore une idée de génie de GTK hbox = BOXH; gtk_widget_add_css_class(hbox, "dialog-action-area"); btn = gtk_button_new_with_mnemonic(_gtk("_Close")); g_signal_connect(btn, "clicked", G_CALLBACK(dialog_close), dialog); gtk_box_append(GTK_BOX(hbox), btn); add_to(area, hbox, TRUE, TRUE, 0, 0); gtk_widget_set_halign(hbox, GTK_ALIGN_END); #else dialog = gtk_dialog_new_with_buttons(NULL, GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); text = g_strdup_printf("%s - GTK %d.%d", "GtkDialog", GTK_MAJOR_VERSION, GTK_MINOR_VERSION); gtk_window_set_title(GTK_WINDOW(dialog), text); g_free(text); area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); add_to(area, notebook, TRUE, TRUE, 5, 5); btn = gtk_dialog_add_button(GTK_DIALOG(dialog), _gtk("_Close"), GTK_RESPONSE_OK); #endif if (awf_csd) { gtk_window_set_decorated(GTK_WINDOW(dialog), TRUE); GtkWidget *headerbardialog = gtk_header_bar_new(); gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(headerbardialog), TRUE); gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbardialog); } // dialog window #if GTK_CHECK_VERSION (4,10,0) gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window)); #else g_signal_connect(dialog, "response", G_CALLBACK(dialog_close), NULL); #endif gtk_widget_set_name(dialog, "AwfDialogWindow"); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_window_present(GTK_WINDOW(dialog)); gtk_widget_grab_focus(GTK_WIDGET(btn)); } // gtk-scroll-tabs for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // @see https://github.com/mate-desktop/mate-control-center/blob/master/capplets/common/capplet-util.c // for on_scrolltabs source function is capplet_dialog_page_scroll_event_cb // of mate-appearance-properties from mate-control-center, GNU GPL 2.0+ static gboolean on_scrolltabs(GtkEventControllerScroll *event, double dx, double dy, GtkWidget *widget) { // gtk-scroll-tabs for GTK 4.x | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x GtkWidget *child, *eventWidget, *actionWidget; GtkNotebook *notebook; while (!GTK_IS_NOTEBOOK(widget)) widget = gtk_widget_get_parent(widget); notebook = GTK_NOTEBOOK(widget); child = gtk_notebook_get_nth_page(notebook, gtk_notebook_get_current_page(notebook)); if (child == NULL) return FALSE; // ignore scroll events from the content of the page eventWidget = gtk_event_controller_get_widget(GTK_EVENT_CONTROLLER(event)); if (eventWidget == NULL || eventWidget == child || gtk_widget_is_ancestor(eventWidget, child)) return FALSE; // and also from the action widgets actionWidget = gtk_notebook_get_action_widget(notebook, GTK_PACK_START); if (eventWidget == actionWidget || (actionWidget != NULL && gtk_widget_is_ancestor(eventWidget, actionWidget))) return FALSE; actionWidget = gtk_notebook_get_action_widget(notebook, GTK_PACK_END); if (eventWidget == actionWidget || (actionWidget != NULL && gtk_widget_is_ancestor(eventWidget, actionWidget))) return FALSE; if ((dy > 0) || (dx > 0)) gtk_notebook_next_page(notebook); else if ((dy < 0) || (dx < 0)) gtk_notebook_prev_page(notebook); return TRUE; } // yoloawf-extended-4.2.0/src/awf-qt5.cpp000066400000000000000000003025721522325530000166550ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated J/02/07/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) 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 (GPL) for more details. * * * Translations update: * https://github.com/qt/qttranslations/blob/v6.11.0/translations/qtbase_fr.ts * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) Qt 5.15/6.10 * Fedora Rawhide 64 (1536 MB) Qt 5.15/6.11 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) Qt 5.15/6.10 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) Qt 5.15/6.9 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) Qt 5.15/6.8 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) Qt 5.15/6.6 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) Qt 5.15/6.4 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) Qt 5.15/6.4 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) Qt 5.15/6.4 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) Qt 5.15/6.3 * Windows XP SP3 MinGW/msys (2048 MB) Qt 5.3 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #if defined (Q_OS_WIN) || defined (_WIN32) #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5,14,0) #include #else #include #endif #endif #include #include #include #include #include #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined (Q_OS_UNIX) #include #endif #pragma GCC diagnostic pop #define GETTEXT_PACKAGE "awf-qt5" #ifndef QT_VERSION_MAJOR #define QT_VERSION_MAJOR ((QT_VERSION >> 16) & 0xFF) #endif #ifndef QT_VERSION_MINOR #define QT_VERSION_MINOR ((QT_VERSION >> 8) & 0xFF) #endif #ifndef QT_VERSION_PATCH #define QT_VERSION_PATCH (QT_VERSION & 0xFF) #endif #define AWF_OPEN QStringLiteral("/Test/Open") #define AWF_SAVE QStringLiteral("/Test/Save") #define AWF_REFR QStringLiteral("/Test/Refresh") #define AWF_RECE QStringLiteral("/Test/Recent") #define AWF_CALE QStringLiteral("/Test/Calendar") #define AWF_SCAL QStringLiteral("/Test/Scales") #define AWF_PROP QStringLiteral("/Test/Properties") #define AWF_PRSE QStringLiteral("/Test/PrintSetup") #define AWF_PRIN QStringLiteral("/Test/Print") #define AWF_MCUT QStringLiteral("/Test/More/Cut") #define AWF_MCOP QStringLiteral("/Test/More/Copy") #define AWF_MPAS QStringLiteral("/Test/More/Paste") #define AWF_CLOS QStringLiteral("/Test/Close") #define AWF_QUIT QStringLiteral("/Test/Quit") #define AWF_INSP QStringLiteral("/Test/Inspector") #define AWF_ABOU QStringLiteral("/Test/About") #define AWF_ACCEL_OPEN QKeySequence("Ctrl+O") #define AWF_ACCEL_SAVE QKeySequence("Ctrl+S") #define AWF_ACCEL_REFR QKeySequence("F5") #define AWF_ACCEL_RECE QKeySequence() #define AWF_ACCEL_CALE QKeySequence() #define AWF_ACCEL_SCAL QKeySequence() #define AWF_ACCEL_PROP QKeySequence("Alt+Return") #define AWF_ACCEL_PRSE QKeySequence("Ctrl+Shift+P") #define AWF_ACCEL_PRIN QKeySequence("Ctrl+P") #define AWF_ACCEL_MCUT QKeySequence("Ctrl+X") #define AWF_ACCEL_MCOP QKeySequence("Ctrl+C") #define AWF_ACCEL_MPAS QKeySequence("Ctrl+V") #define AWF_ACCEL_CLOS QKeySequence("Ctrl+W") #define AWF_ACCEL_QUIT QKeySequence("Ctrl+Q") #define AWF_ACCEL_INSP QKeySequence("F12") #define AWF_ACCEL_ABOU QKeySequence("F1") // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) QString::fromUtf8(gettext(x)).replace('_', '&') #define _qt(y, x) QCoreApplication::translate(y, x) // global variables static bool awf_debug = qEnvironmentVariableIsSet("AWF_DEBUG"); static bool awf_trace = qEnvironmentVariableIsSet("AWF_TRACE"); static bool awf_gqss = false; constexpr std::nullptr_t null = nullptr; static QStringList list_system_theme; static QStringList list_user_theme; static QMainWindow *window = null; static QDialog *inspector = null; static QLineEdit *toolbarentry = null; static QProgressBar *progress1 = null, *progress2 = null, *progress3 = null, *progress4 = null, *progress8 = null, *progress9 = null; static QSlider *slider1 = null, *slider2 = null, *slider3 = null, *slider4 = null, *slider5 = null, *slider6 = null, *slider7 = null; static QTabWidget *notebook1 = null, *notebook2 = null, *notebook3 = null, *notebook4 = null; static int current_direction = 0; static QString current_theme = "auto"; static QString opt_theme = "auto"; static QString opt_screenshot = ""; static QString original_style = ""; static bool allow_update_values = true; static bool must_save_accels = false; // gtk_style_context_to_string static QString generateTooltipRecursive(QWidget *widget) { if (!widget) return ""; QString tooltip = widget->metaObject()->className(); if (widget->property("textVisible").isValid()) tooltip += "[textVisible=bool]"; if (widget->property("hasMenu").isValid()) tooltip += "[hasMenu=bool]"; if (widget->property("isInverted").isValid()) tooltip += "[isInverted=bool]"; if (widget->property("hasTicks").isValid()) tooltip += "[hasTicks=" + widget->property("hasTicks").toString() + "]"; if (!widget->objectName().isEmpty()) tooltip += "#" + widget->objectName(); if (widget->property("class").isValid()) tooltip += "." + widget->property("class").toString(); QString style = widget->styleSheet().trimmed(); if (!style.isEmpty()) tooltip += "\n" + style; for (QObject *child : widget->children()) { if (QWidget *childWidget = qobject_cast(child)) tooltip += "\n " + generateTooltipRecursive(childWidget).replace("\n", "\n "); } return tooltip; } class AwfHBox : public QHBoxLayout { public: using QHBoxLayout::QHBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QHBoxLayout::addWidget(widget); } }; class AwfVBox : public QVBoxLayout { public: using QVBoxLayout::QVBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QVBoxLayout::addWidget(widget); } }; class AwfToolBar : public QToolBar { public: using QToolBar::QToolBar; QAction* addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); return QToolBar::addWidget(widget); } protected: void keyPressEvent(QKeyEvent *e) override { if ((e->key() == Qt::Key_Return) || (e->key() == Qt::Key_Enter)) { if (auto *b = qobject_cast(focusWidget())) { b->click(); return; } } QToolBar::keyPressEvent(e); } }; // global functions static QIcon get_icon(QString name); static void awf_load_theme(QStringList& themes, QString directory); static void update_text_direction(int direction); static void update_theme(QString newTheme); static void update_statusbar(QString message); static void update_values(QAbstractSlider *range); static void update_widgets(); static void display_notification(); static bool findAndCheckMenu(QList actions, QString search); static void on_sighup(int signum); static bool take_screenshot(); static void create_window(); static void create_widgets(AwfVBox *root); static void create_toolbar(AwfToolBar *toolbar); static void create_combos_entries(AwfVBox *root); static void create_spinbuttons(AwfHBox *root); static void create_checkbuttons(AwfVBox *root); static void create_radiobuttons(AwfVBox *root); static void create_otherbuttons(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfHBox *root4, AwfHBox *root5); static void create_progressbars(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfVBox *root4); static void create_labels(AwfHBox *root); static void create_spinners(AwfHBox *root); static void create_expander(AwfVBox *root); static void create_frames(AwfHBox *root1, AwfHBox *root2); static void create_notebooks(AwfHBox *root1, AwfHBox *root2); static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close); static void create_treeview(AwfVBox *root); static void create_sliders(QTabWidget *notebook, QString text, QSlider::TickPosition position); static QSlider* create_horizontal_slider(int value, bool draw, bool inverted, QSlider::TickPosition position); static QSlider* create_vertical_slider(int value, bool draw, bool inverted, QSlider::TickPosition position); static void create_traditional_menubar(QMenuBar *root); static void accels_load(); static bool accels_change(QObject *obj, QEvent *event); static void accels_save(); static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb); static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group); static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function); static void dialog_open(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_sliders(); // other class AwfMainWindow : public QMainWindow { Q_OBJECT public: bool eventFilter(QObject *obj, QEvent *event) override { // disable statusbar update on menubar hover if (event->type() == QEvent::StatusTip) return true; return QMainWindow::eventFilter(obj, event); } protected: void changeEvent(QEvent *e) override { // check current theme in menus on desktop theme change from globalqss style plugin if (qEnvironmentVariableIsSet("GQSS_SIGNAL") && (e->type() == QEvent::StyleChange)) { QString newTheme = QString::fromUtf8(qgetenv("GQSS_THEME")); if (awf_debug) printf("\033[33m[debug]\033[00m SIGNAL_theme_update: %s\n", newTheme.toUtf8().constData()); findAndCheckMenu(menuBar()->actions().mid(1), newTheme); } QMainWindow::changeEvent(e); } }; class AwfTreeView : public QTreeView { Q_OBJECT Q_PROPERTY(QString columnWidths READ getColumnWidths WRITE setColumnWidths) Q_PROPERTY(QColor sortedColumnColor READ getSortedColumnColor WRITE setSortedColumnColor) Q_PROPERTY(QColor alternateSortedColumnColor READ getAlternateSortedColumnColor WRITE setAlternateSortedColumnColor) int m_sortedColumn = -1; QColor m_color; QColor m_altColor; // to have the same display as awf-gtk - alternateSortedColumnColor does not work // AwfTreeView { qproperty-sortedColumnColor:#EEE; qproperty-alternateSortedColumnColor:#DDD; } protected: void drawRow(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override { if (m_color.isValid() && m_altColor.isValid() && (m_sortedColumn >= 0)) { QColor c = (index.row() % 2 != 0) ? m_altColor : m_color; painter->fillRect(visualRect(index.sibling(index.row(), m_sortedColumn)), c); } QTreeView::drawRow(painter, option, index); } public: explicit AwfTreeView(QWidget* parent = null) : QTreeView(parent) { connect(header(), &QHeaderView::sortIndicatorChanged, this, [this](int column, Qt::SortOrder) { m_sortedColumn = column; viewport()->update(); }); } QColor getSortedColumnColor() { return m_color; } QColor getAlternateSortedColumnColor() { return m_altColor; } void setSortedColumnColor(QColor color) { m_color = color; } void setAlternateSortedColumnColor(QColor color) { m_altColor = color; } // to have the same display as awf-gtk // AwfTreeView { qproperty-columnWidths:"10,20..." } QString getColumnWidths() { QStringList list; for (int i = 0; i < 11; ++i) list << QString::number(columnWidth(i)); return list.join(","); } void setColumnWidths(QString widths) { #if QT_VERSION >= QT_VERSION_CHECK(5,14,0) QTimer::singleShot(0, this, [this, widths]() { // QTimer mainly for Qt 6.6/6.9 QStringList list = widths.split(",", Qt::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); }); #elif QT_VERSION >= QT_VERSION_CHECK(5,4,0) QTimer::singleShot(0, this, [this, widths]() { // QTimer mainly for Qt 6.6/6.9 QStringList list = widths.split(",", QString::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); }); #else QStringList list = widths.split(",", QString::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); #endif } }; class AwfProgressDelegate : public QStyledItemDelegate { public: AwfProgressDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_pbar = new QProgressBar(m_view->viewport()); m_pbar->setOrientation(Qt::Horizontal); m_pbar->setMinimum(0); m_pbar->setMaximum(100); m_pbar->setTextVisible(true); m_pbar->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QLocale locale; bool isfr = (locale.language() == QLocale::French) && (locale.country() == QLocale::France); QStyleOptionProgressBar option; option.initFrom(m_pbar); option.rect = opt.rect; option.minimum = m_pbar->minimum(); option.maximum = m_pbar->maximum(); option.progress = idx.data().toInt(); option.textVisible = m_pbar->isTextVisible(); option.text = QString::number(idx.data().toInt()) + (isfr ? " %" : "%"); option.state |= QStyle::StateFlag::State_Horizontal; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_pbar->style()->drawControl(QStyle::CE_ProgressBar, &option, painter, m_pbar); } private: QAbstractItemView* m_view; QProgressBar* m_pbar; }; class AwfRadioDelegate : public QStyledItemDelegate { public: AwfRadioDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_radio = new QRadioButton(m_view->viewport()); m_radio->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QStyleOptionButton option; option.initFrom(m_radio); option.rect = opt.rect; option.state |= (idx.data(Qt::CheckStateRole).toInt() == Qt::Checked) ? QStyle::State_On : QStyle::State_Off; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_radio->style()->drawControl(QStyle::CE_RadioButton, &option, painter, m_radio); } private: QAbstractItemView* m_view; QRadioButton* m_radio; }; class AwfShortcutFilter : public QObject { public: explicit AwfShortcutFilter(QObject *parent) : QObject(parent) {} bool eventFilter(QObject *obj, QEvent *event) override { return accels_change(obj, event) ? true : QObject::eventFilter(obj, event); } }; // run run run int main(int argc, char **argv) { if (awf_trace) printf("\033[36m[trace]\033[00m main()\n"); int opt = 0, status = 0; QApplication app(argc, argv); awf_gqss = qEnvironmentVariableIsSet("GQSS_SET"); if (awf_gqss) { // load available system themes (/usr/local/share/themes && /usr/share/themes) for (QString dir : QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) awf_load_theme(list_system_theme, QDir(dir).filePath("themes")); list_system_theme.sort(Qt::CaseInsensitive); list_system_theme.push_front("None"); // load available user themes (HOME/.local/share/themes && HOME/.themes) awf_load_theme(list_user_theme, QDir(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).filePath("themes")); awf_load_theme(list_user_theme, QDir(QDir::homePath()).filePath(".themes")); list_user_theme.sort(Qt::CaseInsensitive); } // locale QString appDir = QCoreApplication::applicationDirPath(); QLocale::setDefault(QLocale::system()); QTranslator *qtTr = new QTranslator(qApp); if (qtTr->load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtTr); else if (qtTr->load("qt_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtTr); QTranslator *qtBaseTr = new QTranslator(qApp); if (qtBaseTr->load("qtbase_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtBaseTr); else if (qtBaseTr->load("qtbase_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtBaseTr); setlocale(LC_ALL, ""); #if defined (Q_OS_WIN) || defined (_WIN32) bindtextdomain(GETTEXT_PACKAGE, (appDir + "/share/locale").toLocal8Bit().constData()); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, null, 'x'}, {"version", no_argument, null, 'v'}, {"list", no_argument, null, 'l'}, {"theme", required_argument, null, 't'}, {"screenshot", required_argument, null, 's'}, {"ltr", no_argument, null, 'y'}, {"rtl", no_argument, null, 'z'}, {null, 0, null, 0} }; QString cppVersion; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, null)) != -1) { switch (opt) { // --version -v case 'v': printf("%s\n", VERSION); return status; // --list -l case 'l': for (QString theme : list_system_theme) printf("%s\n", theme.toUtf8().constData()); for (QString theme : list_user_theme) printf("%s\n", theme.toUtf8().constData()); return status; // --theme -t case 't': if (list_system_theme.contains(optarg) || list_user_theme.contains(optarg)) opt_theme = optarg; break; // --screenshot -s case 's': opt_screenshot = optarg; break; // --ltr case 'y': current_direction = 1; // Qt::LeftToRight break; // --rtl case 'z': current_direction = 2; // Qt::RightToLeft break; // --help -h case 'x': case 'h': default: switch (__cplusplus) { case 199711L: cppVersion = "C++98"; break; case 201103L: cppVersion = "C++11"; break; case 201402L: cppVersion = "C++14"; break; case 201703L: cppVersion = "C++17"; break; case 202002L: cppVersion = "C++20"; break; case 202302L: cppVersion = "C++23"; break; default: cppVersion = "C++ (" + QString::number(__cplusplus) + ")"; break; } printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", qPrintable(QString(_app("A widget factory - Qt %1.%2")).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)), "-v ", qPrintable(_app("Show version number.")), "-l ", qPrintable(_app("List available themes.")), "-t ", qPrintable(_app("Run with the specified theme.")), "-s ", qPrintable(QString(_app("Run and save a screenshot on %1 (PNG).")).arg("SIGHUP")), "--ltr ", qPrintable(_app("Run with text from left to right (Left-To-Right).")), "--rtl ", qPrintable(_app("Run with text from right to left (Right-To-Left).")), qPrintable(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cppVersion).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)), qPrintable(QString(_app(" started with qt %1")).arg(qVersion()))); return status; } } // --rtl via -reverse/--reverse if ((current_direction == 0) && (qApp->layoutDirection() == Qt::RightToLeft)) current_direction = 3; // create and show window #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) QCommandLineParser parser; parser.setApplicationDescription(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); parser.addHelpOption(); parser.addVersionOption(); // << "v" << "version", _app("Show version number."))); parser.addOption(QCommandLineOption(QStringList() << "l" << "list", _app("List available themes."))); parser.addOption(QCommandLineOption(QStringList() << "t" << "theme", _app("Run with the specified theme."), "theme")); parser.addOption(QCommandLineOption(QStringList() << "s" << "screenshot", QString(_app("Run and save a screenshot on %1 (PNG).").arg("SIGHUP")), "filename")); parser.addOption(QCommandLineOption(QStringList() << "y" << "ltr", _app("Run with text from left to right (Left-To-Right)."))); parser.addOption(QCommandLineOption(QStringList() << "z" << "rtl", _app("Run with text from right to left (Right-To-Left)."))); parser.process(app); #endif create_window(); return app.exec(); } static QIcon get_icon(QString name) { static const QHash map = { {"application-exit", QStyle::SP_DialogCloseButton}, {"dialog-close", QStyle::SP_DialogCloseButton}, {"dialog-information", QStyle::SP_MessageBoxInformation}, {"document-open", QStyle::SP_DialogOpenButton}, {"document-save", QStyle::SP_DialogSaveButton}, {"help-about", QStyle::SP_MessageBoxQuestion}, {"help-browser", QStyle::SP_MessageBoxQuestion}, {"view-refresh", QStyle::SP_BrowserReload}, {"window-close", QStyle::SP_DialogCloseButton}, }; QIcon icon = QIcon::fromTheme(name); if (icon.isNull()) icon = qApp->style()->standardIcon(map.value(name, QStyle::SP_FileIcon)); return icon; } static void awf_load_theme(QStringList& themes, QString directory) { if (awf_trace) printf("\033[36m[trace]\033[00m awf_load_theme(%s)\n", directory.toUtf8().constData()); QDir dir(directory); if (dir.exists()) { if (awf_debug) printf("\033[33m[debug]\033[00m themes_dir: %s\n", directory.toUtf8().constData()); QStringList entries = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); for (QString theme : entries) { if (QDir(QDir(dir.filePath(theme)).filePath("qt5")).exists()) themes.append(theme); } } } static void update_text_direction(int direction) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m update_text_direction()\n"); if ((direction == 1) && (qApp->layoutDirection() != Qt::LeftToRight)) { current_direction = 1; notebook3->setTabPosition(QTabWidget::West); notebook4->setTabPosition(QTabWidget::East); qApp->setLayoutDirection(Qt::LeftToRight); update_theme("refresh"); } else if ((direction == 2) && (qApp->layoutDirection() != Qt::RightToLeft) || (direction == 3)) { current_direction = 2; notebook3->setTabPosition(QTabWidget::East); notebook4->setTabPosition(QTabWidget::West); qApp->setLayoutDirection(Qt::RightToLeft); update_theme("refresh"); } } static void update_theme(QString newTheme) { // ok if (awf_gqss) { if (awf_trace) printf("\033[36m[trace]\033[00m update_theme(%s)*\n", newTheme.toUtf8().constData()); if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_before: %s » %s\n", current_theme.toUtf8().constData(), newTheme.toUtf8().constData()); if (newTheme == "refresh") { qputenv("GQSS_RELOAD", "yes"); QApplication::style()->polish(qApp); QApplication::processEvents(); window->adjustSize(); if (!opt_screenshot.isEmpty()) { if (take_screenshot()) update_statusbar(_app("Theme %1 reloaded, then screenshot saved (%2).").arg(current_theme).arg(opt_screenshot)); else update_statusbar(_app("Theme %1 reloaded (error saving screenshot).").arg(current_theme)); } else { update_statusbar(_app("Theme %1 reloaded.").arg(current_theme)); } if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_after1: %s\n", current_theme.toUtf8().constData()); } else if (newTheme == "auto") { current_theme = QString::fromUtf8(qgetenv("GQSS_THEME")); window->adjustSize(); if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_after2: %s\n", current_theme.toUtf8().constData()); } else if (current_theme != newTheme) { current_theme = newTheme; qputenv("GQSS_RELOAD", "yes"); qputenv("GQSS_THEME", newTheme.toUtf8()); if (!qEnvironmentVariableIsSet("GQSS_SIGNAL")) { // useless for changeEvent (notify_updated_gtktheme) QApplication::style()->polish(qApp); QApplication::processEvents(); } window->adjustSize(); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_after3: %s\n", current_theme.toUtf8().constData()); } original_style = "!^!"; } } static void update_statusbar(QString message) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m update_statusbar(%s)\n", message.toUtf8().constData()); if (window && window->statusBar()) { QStatusBar *statusbar = window->statusBar(); statusbar->showMessage(QTime::currentTime().toString("HH:mm:ss") + " - " + message, 0); QVariantAnimation *anim = new QVariantAnimation(statusbar); anim->setStartValue(QColor(255,255,0,255)); // yellow anim->setEndValue(window->palette().color(QPalette::Window)); anim->setDuration(1000); QObject::connect(anim, &QVariantAnimation::valueChanged, [statusbar](const QVariant &value) { QColor c = value.value(); statusbar->setStyleSheet(QString("background-color:rgba(%1,%2,%3,%4);").arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha())); }); QObject::connect(anim, &QVariantAnimation::finished, [statusbar]() { statusbar->setStyleSheet(""); }); anim->start(QAbstractAnimation::DeleteWhenStopped); } } static void update_values(QAbstractSlider *range) { // ok if (allow_update_values) { // range(0..100) allow_update_values = false; int value = range->value(); //if (awf_trace) // printf("\033[36m[trace]\033[00m update_values(%d)*\n", value); progress1->setValue(value); progress2->setValue(value); progress3->setValue(value); progress4->setValue(value); progress8->setValue(value); progress9->setValue(value); if (slider1 != range) slider1->setValue(value); if (slider2 != range) slider2->setValue(value); if (slider3 != range) slider3->setValue(value); if (slider4 != range) slider4->setValue(value); if (slider5 != range) slider5->setValue(value); if (slider6 != range) slider6->setValue(value); if (slider7 != range) slider7->setValue(value); // text progress8->setTextVisible(value > 50); progress8->setProperty("textVisible", value > 50); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(value > 50); progress9->setProperty("textVisible", value > 50); progress9->style()->polish(progress9); progress9->updateGeometry(); allow_update_values = true; } } static void update_widgets() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked int width1, width2, height1, height2; bool toggle = notebook1->tabBar()->usesScrollButtons(); // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { qobject_cast(progress8->property("action").value())->setVisible(false); progress9->setVisible(false); qobject_cast(toolbarentry->property("action").value())->setVisible(false); } else { progress8->setValue(0); progress9->setValue(0); qobject_cast(progress8->property("action").value())->setVisible(true); progress9->setVisible(true); qobject_cast(toolbarentry->property("action").value())->setVisible(true); } // enabled or not slider2->setEnabled(toggle); slider4->setEnabled(toggle); slider6->setEnabled(toggle); slider7->setEnabled(toggle); progress2->setEnabled(toggle); progress4->setEnabled(toggle); // text or not progress1->setTextVisible(!toggle); progress1->setProperty("textVisible", !toggle); progress1->style()->polish(progress1); progress1->updateGeometry(); progress2->setTextVisible(!toggle); progress2->setProperty("textVisible", !toggle); progress2->style()->polish(progress2); progress2->updateGeometry(); progress3->setTextVisible(!toggle); progress3->setProperty("textVisible", !toggle); progress3->style()->polish(progress3); progress3->updateGeometry(); progress4->setTextVisible(!toggle); progress4->setProperty("textVisible", !toggle); progress4->style()->polish(progress4); progress4->updateGeometry(); progress8->setTextVisible(false); progress8->setProperty("textVisible", false); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(false); progress9->setProperty("textVisible", false); progress9->style()->polish(progress9); progress9->updateGeometry(); // scrollable or not if (toggle) { notebook1->tabBar()->setUsesScrollButtons(false); notebook2->tabBar()->setUsesScrollButtons(false); notebook3->tabBar()->setUsesScrollButtons(false); notebook4->tabBar()->setUsesScrollButtons(false); notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height()); } else { notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width() / 2); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width() / 2); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height() / 2); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height() / 2); notebook1->tabBar()->setUsesScrollButtons(true); notebook2->tabBar()->setUsesScrollButtons(true); notebook3->tabBar()->setUsesScrollButtons(true); notebook4->tabBar()->setUsesScrollButtons(true); } // auto width and height @todo notebook1->updateGeometry(); notebook2->updateGeometry(); notebook3->updateGeometry(); notebook4->updateGeometry(); QSplitter *hpane, *vpane; QWidget *widget = notebook1->parentWidget(); while (widget) { hpane = qobject_cast(widget); if (hpane) break; widget = widget->parentWidget(); } hpane->setSizes({qMax(width1, width2), 10000}); hpane->updateGeometry(); widget = widget->parentWidget(); while (widget) { vpane = qobject_cast(widget); if (vpane) break; widget = widget->parentWidget(); } QList sizes = vpane->sizes(); sizes[1] = qMax(height1, height2); vpane->setSizes(sizes); vpane->updateGeometry(); window->setMinimumHeight(0); window->setMinimumWidth(0); window->adjustSize(); } static void display_notification() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m display_notification()\n"); #if defined (Q_OS_UNIX) signal(SIGCHLD, SIG_IGN); if (fork() == 0) { execlp("notify-send", "notify-send", "-i", "dialog-information", "-t", "50000", "--action", _qt("QShortcut", "Close").toUtf8().constData(), GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.").toUtf8().constData(), null); _exit(1); } #endif } static bool findAndCheckMenu(QList actions, QString search) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m findAndCheckMenu()\n"); for (QAction *action : actions) { if (action->menu()) { // process submenu if (findAndCheckMenu(action->menu()->actions(), search)) return true; } else if (action->isEnabled() && (action->text() == search)) { // check menuitem action->trigger(); // set state checked and activate action return true; } } return false; } static void on_sighup(int signum) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m on_sighup()\n"); #if QT_VERSION >= QT_VERSION_CHECK(5,10,0) QMetaObject::invokeMethod(qApp, [](){ update_theme("refresh"); }, Qt::QueuedConnection); #elif QT_VERSION >= QT_VERSION_CHECK(5,4,0) QTimer::singleShot(0, [](){ update_theme("refresh"); }); #else update_theme("refresh"); // best effort #endif } static bool take_screenshot() { // ok (without window borders) if (awf_trace) printf("\033[36m[trace]\033[00m take_screenshot()\n"); QPixmap pixmap = window->grab(); return pixmap.save(opt_screenshot, "PNG", 0); // 0 = 9 } // layout and widgets static void create_window() { if (awf_trace) printf("\033[36m[trace]\033[00m create_window()\n"); // window QApplication::setApplicationName("awf"); window = new AwfMainWindow; window->setWindowTitle(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); window->setObjectName("AwfMainWindow"); window->installEventFilter(window); #if defined (Q_OS_UNIX) QApplication::setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); window->setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); #elif (defined (Q_OS_WIN) || defined (_WIN32)) && (QT_VERSION >= QT_VERSION_CHECK(5,2,0)) HICON hIcon = (HICON) LoadImage(GetModuleHandle(nullptr), "IDI_ICON1", IMAGE_ICON, 48, 48, LR_DEFAULTSIZE); QIcon icon = QIcon(QtWin::fromHICON(hIcon)); QApplication::setWindowIcon(icon); window->setWindowIcon(icon); DestroyIcon(hIcon); #endif // theme auto or from command line if (awf_gqss) update_theme((current_theme == opt_theme) ? current_theme : opt_theme); if (current_direction == 0) current_direction = (qApp->layoutDirection() == Qt::LeftToRight) ? 1 : 2; // layout AwfVBox *layout = new AwfVBox; QWidget *central = new QWidget; window->setCentralWidget(central); layout->setSpacing(0); layout->setContentsMargins(0,0,0,0); create_widgets(layout); central->setLayout(layout); QMenuBar *menubar = window->menuBar(); menubar->setContextMenuPolicy(Qt::PreventContextMenu); create_traditional_menubar(menubar); AwfToolBar *toolbar = new AwfToolBar; toolbar->setMovable(false); toolbar->setFloatable(false); toolbar->setContextMenuPolicy(Qt::PreventContextMenu); create_toolbar(toolbar); window->addToolBar(toolbar); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); progress9 = new QProgressBar; progress9->setMaximumWidth(140); progress9->setFixedHeight(16); progress9->setAttribute(Qt::WA_StyledBackground, true); // @todo not working progress9->setVisible(false); window->statusBar()->addPermanentWidget(progress9); QLocale locale; if ((locale.language() == QLocale::French) && (locale.country() == QLocale::France)) progress9->setFormat("%p %"); // go go go update_text_direction(current_direction); #if defined (Q_OS_UNIX) if (awf_gqss) std::signal(SIGHUP, on_sighup); #endif window->show(); window->setAttribute(Qt::WA_DeleteOnClose); toolbar->widgetForAction(toolbar->actions().first())->setFocus(Qt::TabFocusReason); // focus on the first toolbar button QObject::connect(qApp, &QCoreApplication::aboutToQuit, accels_save); #if defined (Q_OS_WIN) || defined (_WIN32) #if QT_VERSION >= QT_VERSION_CHECK(5,14,0) window->move(QGuiApplication::screens().first()->availableGeometry().center() - window->rect().center()); #else window->move(QApplication::desktop()->availableGeometry().center() - window->rect().center()); #endif #endif } static void create_widgets(AwfVBox *root) { // todo if (awf_trace) printf("\033[36m[trace]\033[00m create_widgets()\n"); AwfHBox *hboxColumns = new AwfHBox; hboxColumns->setSpacing(0); hboxColumns->setContentsMargins(0,0,0,0); AwfVBox *vboxColumn1 = new AwfVBox, *vboxComboEntry = new AwfVBox, *vboxCheck = new AwfVBox, *vboxRadio = new AwfVBox; AwfHBox *hboxSpin = new AwfHBox, *hboxCheckRadio = new AwfHBox; vboxColumn1->setSpacing(0); vboxColumn1->setContentsMargins(5,5,5,5); vboxComboEntry->setSpacing(3); vboxComboEntry->setContentsMargins(5,5,5,5); hboxSpin->setSpacing(0); hboxSpin->setContentsMargins(5,5,5,5); hboxCheckRadio->setSpacing(0); hboxCheckRadio->setContentsMargins(5,5,5,5); vboxCheck->setSpacing(0); vboxCheck->setContentsMargins(0,0,0,0); vboxRadio->setSpacing(0); vboxRadio->setContentsMargins(0,0,0,0); AwfVBox *vboxColumn2 = new AwfVBox, *vboxButtons = new AwfVBox; AwfHBox *hboxBtns1 = new AwfHBox, *hboxBtns2 = new AwfHBox, *hboxBtns3 = new AwfHBox, *hboxBtns4 = new AwfHBox; vboxColumn2->setSpacing(0); vboxColumn2->setContentsMargins(5,5,5,5); vboxButtons->setSpacing(3); vboxButtons->setContentsMargins(5,5,5,5); hboxBtns1->setSpacing(3); hboxBtns1->setContentsMargins(5,5,5,5); hboxBtns2->setSpacing(3); hboxBtns2->setContentsMargins(5,5,5,5); hboxBtns3->setSpacing(3); hboxBtns3->setContentsMargins(5,5,5,5); hboxBtns4->setSpacing(3); hboxBtns4->setContentsMargins(5,5,5,5); AwfVBox *vboxColumn3 = new AwfVBox, *vboxProgress1 = new AwfVBox, *vboxProgress2 = new AwfVBox; AwfHBox *hboxProgress1 = new AwfHBox, *hboxProgress2 = new AwfHBox; vboxColumn3->setSpacing(0); vboxColumn3->setContentsMargins(5,5,5,5); vboxProgress1->setSpacing(10); vboxProgress1->setContentsMargins(6,6,6,6); vboxProgress2->setSpacing(10); vboxProgress2->setContentsMargins(5,5,5,5); hboxProgress1->setSpacing(10); hboxProgress1->setContentsMargins(5,5,5,5); hboxProgress2->setSpacing(10); hboxProgress2->setContentsMargins(5,5,5,5); AwfVBox *vboxColumn4 = new AwfVBox, *vboxOthers = new AwfVBox; AwfHBox *hboxLabel = new AwfHBox, *hboxSpinner = new AwfHBox; vboxColumn4->setSpacing(0); vboxColumn4->setContentsMargins(5,5,5,5); vboxOthers->setSpacing(3); vboxOthers->setContentsMargins(5,5,5,5); hboxLabel->setSpacing(0); hboxLabel->setContentsMargins(5,5,5,5); hboxSpinner->setSpacing(0); hboxSpinner->setContentsMargins(5,5,5,5); QSplitter *vpane = new QSplitter(Qt::Vertical), *hpane1 = new QSplitter(Qt::Horizontal), *hpane2 = new QSplitter(Qt::Horizontal); vpane->setContentsMargins(0,0,0,0); hpane1->setContentsMargins(0,0,0,0); hpane2->setContentsMargins(0,0,0,0); QWidget *wboxFrame1 = new QWidget, *wboxFrame2 = new QWidget, *wboxNotebook1 = new QWidget, *wboxNotebook2 = new QWidget; wboxFrame1->setContentsMargins(0,0,0,0); wboxFrame2->setContentsMargins(0,0,0,0); wboxNotebook1->setContentsMargins(0,0,0,0); wboxNotebook2->setContentsMargins(0,0,0,0); AwfHBox *hboxFrame1 = new AwfHBox, *hboxFrame2 = new AwfHBox, *hboxNotebook1 = new AwfHBox, *hboxNotebook2 = new AwfHBox; hboxFrame1->setSpacing(3); hboxFrame1->setContentsMargins(10,10,10,10); hboxFrame2->setSpacing(3); hboxFrame2->setContentsMargins(10,10,10,10); hboxNotebook1->setSpacing(3); hboxNotebook1->setContentsMargins(10,10,10,10); hboxNotebook2->setSpacing(3); hboxNotebook2->setContentsMargins(10,10,10,10); QFrame *sep1 = new QFrame, *sep2 = new QFrame, *sep3 = new QFrame, *sep4 = new QFrame; sep1->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep1->setFrameShadow(QFrame::Plain); sep1->setProperty("class", "separator vertical"); sep2->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep2->setFrameShadow(QFrame::Plain); sep2->setProperty("class", "separator vertical"); sep3->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep3->setFrameShadow(QFrame::Plain); sep3->setProperty("class", "separator vertical"); sep4->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::HLine); sep4->setFrameShadow(QFrame::Plain); sep4->setProperty("class", "separator horizontal"); // columns layout root->addLayout(hboxColumns); // column 1 hboxColumns->addLayout(vboxColumn1); vboxColumn1->addLayout(vboxComboEntry); create_combos_entries(vboxComboEntry); vboxColumn1->addLayout(hboxSpin); create_spinbuttons(hboxSpin); vboxColumn1->addLayout(hboxCheckRadio); hboxCheckRadio->addLayout(vboxCheck); create_checkbuttons(vboxCheck); hboxCheckRadio->addLayout(vboxRadio); create_radiobuttons(vboxRadio); vboxColumn1->addStretch(); hboxColumns->addWidget(sep1); // column 2 hboxColumns->addLayout(vboxColumn2); vboxColumn2->addLayout(vboxButtons); vboxColumn2->addLayout(hboxBtns1); vboxColumn2->addLayout(hboxBtns2); vboxColumn2->addLayout(hboxBtns3); vboxColumn2->addLayout(hboxBtns4); create_otherbuttons(vboxButtons, hboxBtns1, hboxBtns2, hboxBtns3, hboxBtns4); vboxColumn2->addStretch(); hboxColumns->addWidget(sep2); // column 3 hboxColumns->addLayout(vboxColumn3); vboxColumn3->addLayout(vboxProgress1); vboxColumn3->addLayout(hboxProgress1); vboxColumn3->addLayout(hboxProgress2); vboxColumn3->addLayout(vboxProgress2); create_progressbars(vboxProgress1, hboxProgress1, hboxProgress2, vboxProgress2); vboxColumn3->addStretch(); hboxColumns->addWidget(sep3); // column 4 hboxColumns->addLayout(vboxColumn4); vboxColumn4->addLayout(vboxOthers); create_treeview(vboxOthers); vboxOthers->addLayout(hboxLabel); create_labels(hboxLabel); vboxOthers->addLayout(hboxSpinner); create_spinners(hboxSpinner); create_expander(vboxOthers); vboxColumn4->addStretch(); root->addWidget(sep4); // paned layout root->addWidget(vpane); vpane->addWidget(hpane1); wboxFrame1->setMinimumHeight(70); // The 70 wboxFrame1->setLayout(hboxFrame1); hpane1->addWidget(wboxFrame1); wboxFrame2->setMinimumHeight(70); // The 70 wboxFrame2->setLayout(hboxFrame2); hpane1->addWidget(wboxFrame2); create_frames(hboxFrame1, hboxFrame2); vpane->addWidget(hpane2); //wboxNotebook1->setMinimumHeight(120); // The 120 wboxNotebook1->setLayout(hboxNotebook1); hpane2->addWidget(wboxNotebook1); //wboxNotebook2->setMinimumHeight(120); // The 120 wboxNotebook2->setLayout(hboxNotebook2); hpane2->addWidget(wboxNotebook2); create_notebooks(hboxNotebook1, hboxNotebook2); hpane2->setSizes({wboxNotebook1->sizeHint().width(), 10000}); } static void create_toolbar(AwfToolBar *toolbar) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_toolbar()\n"); QToolButton *tool1, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9; QAction *action1, *action2; QWidget *spacer; QMenu *menu; // QToolButton tool1 = new QToolButton; menu = new QMenu(tool1); menu->addAction("Menu item 1"); menu->addAction("Menu item 2"); menu->addAction("Menu item 3"); tool1->setMenu(menu); tool1->setIcon(get_icon("document-open")); tool1->setPopupMode(QToolButton::MenuButtonPopup); tool1->setProperty("hasMenu", true); QObject::connect(tool1, &QToolButton::clicked, dialog_open); tool2 = new QToolButton; tool2->setIcon(get_icon("document-open")); tool2->setPopupMode(QToolButton::MenuButtonPopup); tool2->setProperty("hasMenu", true); tool2->setEnabled(false); tool3 = new QToolButton; tool3->setIcon(get_icon("document-save")); QObject::connect(tool3, &QToolButton::clicked, dialog_save); tool4 = new QToolButton; tool4->setIcon(get_icon("view-refresh")); tool4->setEnabled(awf_gqss); QObject::connect(tool4, &QToolButton::clicked, [](){ on_sighup(0); }); tool5 = new QToolButton; tool5->setIcon(get_icon("camera-photo")); tool5->setEnabled(opt_screenshot.isEmpty() ? false : true); QObject::connect(tool5, &QToolButton::clicked, take_screenshot); tool6 = new QToolButton; tool6->setIcon(get_icon("dialog-information")); QObject::connect(tool6, &QToolButton::clicked, display_notification); #if defined (Q_OS_WIN) || defined (_WIN32) tool6->setEnabled(false); #endif tool7 = new QToolButton; tool7->setCheckable(true); tool7->setChecked(true); tool7->setIcon(get_icon("list-add")); QObject::connect(tool7, &QToolButton::clicked, update_widgets); tool8 = new QToolButton; tool8->setCheckable(true); tool8->setChecked(false); tool8->setIcon(get_icon("list-remove")); QObject::connect(tool8, &QToolButton::clicked, update_widgets); tool9 = new QToolButton; tool9->setCheckable(true); tool9->setChecked(false); tool9->setIcon(get_icon("window-close")); tool9->setEnabled(false); toolbarentry = new QLineEdit; toolbarentry->setPlaceholderText("..."); toolbarentry->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); spacer = new QWidget; spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); progress8 = new QProgressBar; progress8->setValue(0); progress8->setOrientation(Qt::Horizontal); progress8->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); QLocale locale; if ((locale.language() == QLocale::French) && (locale.country() == QLocale::France)) progress8->setFormat("%p %"); // layout toolbar->addWidget(tool1); toolbar->addWidget(tool2); toolbar->addWidget(tool3); toolbar->addSeparator(); toolbar->addWidget(tool4); toolbar->addWidget(tool5); toolbar->addWidget(tool6); toolbar->addSeparator(); toolbar->addWidget(tool7); toolbar->addWidget(tool8); toolbar->addWidget(tool9); action1 = toolbar->addWidget(toolbarentry); toolbar->addWidget(spacer); action2 = toolbar->addWidget(progress8); // links action1->setVisible(false); toolbarentry->setProperty("action", QVariant::fromValue(action1)); action2->setVisible(false); progress8->setProperty("action", QVariant::fromValue(action2)); } static void create_combos_entries(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_combos_entries()\n"); QComboBox *combo1, *combo2, *combo3, *combo4; QLineEdit *entry1, *entry2, *entry3, *entry4; // QComboBox combo1 = new QComboBox; combo1->setEditable(true); combo1->addItem("Combo box entry 1"); combo1->addItem("Combo box entry 2"); combo2 = new QComboBox; combo2->setEditable(true); combo2->addItem("Combo box entry 1"); combo2->addItem("Combo box entry 2"); combo2->setDisabled(true); combo3 = new QComboBox; combo3->addItem("Combo box 1"); combo3->addItem("Combo box 2"); combo4 = new QComboBox; combo4->addItem("Combo box 1"); combo4->addItem("Combo box 2"); combo4->setDisabled(true); // QLineEdit entry1 = new QLineEdit; entry1->setText("Entry"); entry1->setPlaceholderText("Placeholder"); entry2 = new QLineEdit; entry2->setText("Entry"); entry2->setEnabled(false); entry3 = new QLineEdit; entry3->setText("Entry"); entry3->setPlaceholderText("Placeholder"); #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) entry3->setClearButtonEnabled(true); #endif entry4 = new QLineEdit; entry4->setText("Entry"); entry4->setEnabled(false); #if QT_VERSION >= QT_VERSION_CHECK(5,2,0) entry4->setClearButtonEnabled(true); #endif // layout root->addWidget(combo1); root->addWidget(combo2); root->addWidget(combo3); root->addWidget(combo4); root->addWidget(entry1); root->addWidget(entry2); root->addWidget(entry3); root->addWidget(entry4); } static void create_spinbuttons(AwfHBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_spinbuttons()\n"); QSpinBox *spinbutton1, *spinbutton2; // QSpinBox spinbutton1 = new QSpinBox; spinbutton1->setRange(-100, 100); spinbutton1->setSingleStep(1); spinbutton1->setValue(1); spinbutton1->setFixedWidth(58); // like gtk2 spinbutton1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2 = new QSpinBox; spinbutton2->setRange(-100, 100); spinbutton2->setSingleStep(1); spinbutton2->setValue(1); spinbutton2->setFixedWidth(58); // like gtk2 spinbutton2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2->setEnabled(false); // layout root->addWidget(spinbutton1); root->addStretch(); root->addWidget(spinbutton2); } static void create_checkbuttons(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_checkbuttons()\n"); QCheckBox *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // QCheckBox checkbutton1 = new QCheckBox("Check btn 1"); checkbutton2 = new QCheckBox("Check btn 2"); checkbutton2->setChecked(true); checkbutton3 = new QCheckBox("Check btn 3"); checkbutton3->setTristate(true); checkbutton3->setCheckState(Qt::PartiallyChecked); checkbutton4 = new QCheckBox("Check btn 4"); checkbutton4->setEnabled(false); checkbutton5 = new QCheckBox("Check btn 5"); checkbutton5->setChecked(true); checkbutton5->setEnabled(false); checkbutton6 = new QCheckBox("Check btn 6"); checkbutton6->setTristate(true); checkbutton6->setCheckState(Qt::PartiallyChecked); checkbutton6->setEnabled(false); // layout root->addWidget(checkbutton1); root->addWidget(checkbutton2); root->addWidget(checkbutton3); root->addWidget(checkbutton4); root->addWidget(checkbutton5); root->addWidget(checkbutton6); } static void create_radiobuttons(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_radiobuttons()\n"); QRadioButton *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; QButtonGroup *group1, *group2; // QRadioButton radiobutton1 = new QRadioButton("Radio btn 1"); radiobutton2 = new QRadioButton("Radio btn 2"); radiobutton2->setChecked(true); radiobutton3 = new QRadioButton("Radio btn 3"); radiobutton3->setCheckable(true); radiobutton4 = new QRadioButton("Radio btn 4"); radiobutton4->setEnabled(false); radiobutton5 = new QRadioButton("Radio btn 5"); radiobutton5->setChecked(true); radiobutton5->setEnabled(false); radiobutton6 = new QRadioButton("Radio btn 6"); radiobutton6->setCheckable(true); radiobutton6->setEnabled(false); // QButtonGroup group1 = new QButtonGroup(root); group1->addButton(radiobutton1); group1->addButton(radiobutton2); group1->addButton(radiobutton3); group2 = new QButtonGroup(root); group2->addButton(radiobutton4); group2->addButton(radiobutton5); group2->addButton(radiobutton6); // layout root->addWidget(radiobutton1); root->addWidget(radiobutton2); root->addWidget(radiobutton3); root->addWidget(radiobutton4); root->addWidget(radiobutton5); root->addWidget(radiobutton6); } static void create_otherbuttons(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfHBox *root4, AwfHBox *root5) { //ok if (awf_trace) printf("\033[36m[trace]\033[00m create_otherbuttons()\n"); // QPushButton QPushButton *button1, *button2, *button3, *button4; button1 = new QPushButton("Button 1"); button2 = new QPushButton("Button 2"); button2->setEnabled(false); button3 = new QPushButton("Button 3"); button3->setCheckable(true); button3->setChecked(true); button4 = new QPushButton("Button 4"); button4->setCheckable(true); button4->setChecked(true); button4->setEnabled(false); // QPushButton for dialogs QPushButton *button5, *button6, *button7, *button8; button5 = new QPushButton(_app("Choose a color")); button5->setMinimumWidth(186); // The 186 button5->setProperty("class", "awf-cheatcode-colorbtn"); QObject::connect(button5, &QPushButton::clicked, [=](){ QColorDialog::getColor(QColor("#7796ba"), window, "QColorDialog"); }); button6 = new QPushButton(_app("Choose a font")); button6->setMinimumWidth(186); // The 186 button6->setProperty("class", "awf-cheatcode-fontbtn"); QObject::connect(button6, &QPushButton::clicked, [=](){ bool ok; QFontDialog::getFont(&ok, QFont(), window, "QFontDialog"); }); button7 = new QPushButton(_app("Choose a file")); button7->setMinimumWidth(186); // The 186 button7->setProperty("class", "awf-cheatcode-filebtn"); QObject::connect(button7, &QPushButton::clicked, [=](){ QFileDialog::getOpenFileName(window, "QFileDialog:Open"); }); button8 = new QPushButton(_app("Choose a folder")); button8->setMinimumWidth(186); // The 186 button8->setProperty("class", "awf-cheatcode-folderbtn"); QObject::connect(button8, &QPushButton::clicked, [=](){ QFileDialog::getExistingDirectory(window, "QFileDialog:Open"); }); // Other QFontComboBox *button9; QDoubleSpinBox *button10; button9 = new QFontComboBox; button9->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); button9->setMinimumContentsLength(8); button10 = new QDoubleSpinBox; button10->setRange(-100, 100); button10->setSingleStep(1); button10->setValue(1); button10->setSuffix(" mm"); button10->setPrefix("± "); // layout root1->addWidget(button1); root1->addWidget(button2); root1->addWidget(button3); root1->addWidget(button4); root1->addWidget(button5); root1->addWidget(button6); root1->addWidget(button7); root1->addWidget(button8); root2->addWidget(button9); root3->addWidget(button10); root4->addStretch(); root5->addStretch(); } static void create_progressbars(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfVBox *root4) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_progressbars()\n"); // QProgressBar progress1 = new QProgressBar; progress1->setOrientation(Qt::Horizontal); progress1->setTextVisible(false); progress1->setValue(50); progress2 = new QProgressBar; progress2->setOrientation(Qt::Horizontal); progress2->setTextVisible(false); progress2->setValue(50); progress2->setInvertedAppearance(true); progress2->setProperty("isInverted", true); progress3 = new QProgressBar; progress3->setOrientation(Qt::Vertical); progress3->setTextVisible(false); progress3->setValue(50); progress3->setFixedHeight(100); progress3->setInvertedAppearance(true); progress3->setProperty("isInverted", true); progress4 = new QProgressBar; progress4->setOrientation(Qt::Vertical); progress4->setTextVisible(false); progress4->setValue(50); progress4->setFixedHeight(100); QLocale locale; if ((locale.language() == QLocale::French) && (locale.country() == QLocale::France)) { progress1->setFormat("%p %"); progress2->setFormat("%p %"); progress3->setFormat("%p %"); progress4->setFormat("%p %"); } // QSlider slider1 = create_horizontal_slider(50, false, false, QSlider::NoTicks); QObject::connect(slider1, &QSlider::valueChanged, [=](){ update_values(slider1); }); slider2 = create_horizontal_slider(50, false, true, QSlider::NoTicks); QObject::connect(slider2, &QSlider::valueChanged, [=](){ update_values(slider2); }); slider3 = create_vertical_slider(50, false, !false, QSlider::NoTicks); QObject::connect(slider3, &QSlider::valueChanged, [=](){ update_values(slider3); }); slider4 = create_vertical_slider(50, false, !true, QSlider::NoTicks); QObject::connect(slider4, &QSlider::valueChanged, [=](){ update_values(slider4); }); slider5 = create_vertical_slider(50, false, !false, QSlider::TicksAbove); QObject::connect(slider5, &QSlider::valueChanged, [=](){ update_values(slider5); }); slider6 = create_vertical_slider(50, false, !true, QSlider::TicksBelow); QObject::connect(slider6, &QSlider::valueChanged, [=](){ update_values(slider6); }); slider7 = create_vertical_slider(50, false, !true, QSlider::TicksBothSides); QObject::connect(slider7, &QSlider::valueChanged, [=](){ update_values(slider7); }); // layout root1->addWidget(progress1); root1->addWidget(progress2); root1->addWidget(slider1); root1->addWidget(slider2); root2->addWidget(progress3); root2->addWidget(progress4); root2->addStretch(); root3->addWidget(slider3); root3->addWidget(slider5); root3->addWidget(slider6); root3->addWidget(slider4); root3->addWidget(slider7); root3->addStretch(); root4->addStretch(); } static void create_labels(AwfHBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_labels()\n"); QLabel *label1, *label2; // QLabel label1 = new QLabel("Label 1"); label2 = new QLabel("Label 2"); label2->setEnabled(false); // layout root->addWidget(label1); root->addStretch(); root->addWidget(label2); root->addStretch(); } static void create_spinners(AwfHBox *root) { } static void create_expander(AwfVBox *root) { // todo if (awf_trace) printf("\033[36m[trace]\033[00m create_expander()\n"); QGroupBox *expander; QTextEdit *text; // QGroupBox expander = new QGroupBox(_app("More...")); expander->setCheckable(true); expander->setChecked(true); // QTextEdit text = new QTextEdit; text->setFixedHeight(120); text->setMinimumWidth(160); text->setWordWrapMode(QTextOption::WordWrap); text->setText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.") + " " + _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); // layout AwfVBox *expanderLayout = new AwfVBox(expander); expanderLayout->addWidget(text); root->addWidget(expander); } static void create_frames(AwfHBox *root1, AwfHBox *root2) { // todo if (awf_trace) printf("\033[36m[trace]\033[00m create_frames()\n"); QGroupBox *frame1, *frame2, *frame3, *frame4; // QGroupBox frame1 = new QGroupBox("Frame (shadow in)"); frame1->setProperty("class", "border-inset"); frame2 = new QGroupBox("Frame (shadow out)"); frame2->setProperty("class", "border-outset"); frame3 = new QGroupBox("Frame (shadow etched in)"); frame3->setProperty("class", "border-groove"); frame4 = new QGroupBox("Frame (shadow etched out)"); frame4->setProperty("class", "border-ridge"); frame4->setEnabled(false); // layout root1->addWidget(frame1); root1->addWidget(frame2); root2->addWidget(frame3); root2->addWidget(frame4); } static void create_notebooks(AwfHBox *root1, AwfHBox *root2) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_notebooks()\n"); // QTabWidget notebook1 = new QTabWidget; notebook1->setTabPosition(QTabWidget::North); notebook1->setTabsClosable(false); notebook1->setUsesScrollButtons(false); notebook1->tabBar()->setExpanding(false); notebook1->tabBar()->setMovable(true); create_notebook_tab(notebook1, "Tab1", null, false); create_notebook_tab(notebook1, "Tab2", null, false); create_notebook_tab(notebook1, "Tab3", null, true); create_notebook_tab(notebook1, "Tab4", null, true); notebook2 = new QTabWidget; notebook2->setTabPosition(QTabWidget::South); notebook2->setTabsClosable(false); notebook2->setUsesScrollButtons(false); notebook2->tabBar()->setExpanding(false); notebook2->tabBar()->setMovable(true); create_notebook_tab(notebook2, "Tab1", null, false); create_notebook_tab(notebook2, "Tab2", null, false); create_notebook_tab(notebook2, "Tab3", null, true); create_notebook_tab(notebook2, "Tab4", null, true); notebook3 = new QTabWidget; notebook3->setTabPosition(QTabWidget::West); notebook3->setTabsClosable(false); notebook3->setUsesScrollButtons(false); notebook3->tabBar()->setExpanding(false); notebook3->tabBar()->setMovable(true); create_notebook_tab(notebook3, "T1", null, false); create_notebook_tab(notebook3, "Tab2", null, false); create_notebook_tab(notebook3, "T3b", null, true); create_notebook_tab(notebook3, "T4", null, true); notebook4 = new QTabWidget; notebook4->setTabPosition(QTabWidget::East); notebook4->setTabsClosable(false); notebook4->setUsesScrollButtons(false); notebook4->tabBar()->setExpanding(false); notebook4->tabBar()->setMovable(true); create_notebook_tab(notebook4, "T1", null, false); create_notebook_tab(notebook4, "Tab2", null, false); create_notebook_tab(notebook4, "T3b", null, true); create_notebook_tab(notebook4, "T4", null, true); // layout notebook1->setMinimumWidth(notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(notebook4->tabBar()->sizeHint().height()); root1->addWidget(notebook1); root1->addWidget(notebook2); root2->addWidget(notebook3); root2->addWidget(notebook4); } static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close) { // todo if (!content) content = new QWidget; content->setAutoFillBackground(true); if ((notebook->tabPosition() == QTabWidget::West) || (notebook->tabPosition() == QTabWidget::East)) { // @todo force horizontal tab for vertical tabs bar if (close) { QWidget *layout = new QWidget; layout->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat AwfHBox *hbox = new AwfHBox(layout); hbox->setContentsMargins(0, 0, 0, 0); hbox->addWidget(new QLabel(text)); hbox->addWidget(btn); layout->setLayout(hbox); notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, layout); } else { notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, new QLabel(text)); } } else if (close) { QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat notebook->tabBar()->setTabButton(notebook->addTab(content, text), QTabBar::RightSide, btn); } else { notebook->addTab(content, text); } } static void create_treeview(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_treeview()\n"); QStandardItemModel *model = new QStandardItemModel; model->setColumnCount(11); model->setHorizontalHeaderLabels({ "i", "c", "r", "Text", "Progress", "Progress", "Text", "Icon", "Icon", "c", "r" }); auto addRow = [&](int a, bool b, bool c, QString d, int e, int f, QString g, QString h, QString i, bool j, bool k) { QList items; auto it0 = new QStandardItem; it0->setData(a, Qt::DisplayRole); auto it1 = new QStandardItem; it1->setData(b ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it1->setEditable(false); auto it2 = new QStandardItem; it2->setData(c ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it2->setEditable(false); auto it3 = new QStandardItem; it3->setData(d, Qt::DisplayRole); auto it4 = new QStandardItem; it4->setData(e, Qt::DisplayRole); it4->setEditable(false); auto it5 = new QStandardItem; it5->setData(f, Qt::DisplayRole); it5->setEditable(false); it5->setEnabled(false); auto it6 = new QStandardItem; it6->setData(g, Qt::DisplayRole); it6->setEditable(false); it6->setEnabled(false); auto it7 = new QStandardItem; it7->setIcon(get_icon(h)); it7->setEditable(false); auto it8 = new QStandardItem; it8->setIcon(get_icon(i)); it8->setEditable(false); it8->setEnabled(false); auto it9 = new QStandardItem; it9->setData(j ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it9->setEditable(false); it9->setEnabled(false); auto it10 = new QStandardItem; it10->setData(k ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it10->setEditable(false); it10->setEnabled(false); items << it0 << it1 << it2 << it3 << it4 << it5 << it6 << it7 << it8 << it9 << it10; model->appendRow(items); }; addRow(1, false, false, "Text 1.1", 0, 0, "Text 1.2", "document-open", "document-open", false, false); addRow(2, true, true, "Text 2.1", 10, 10, "Text 2.2", "document-save", "document-save", true, true); addRow(3, false, false, "Text 3.1", 20, 20, "Text 3.2", "document-save-as", "document-save-as", false, false); addRow(4, true, true, "Text 4.1", 30, 30, "Text 4.2", "view-refresh", "view-refresh", true, true); addRow(5, false, false, "Text 5.1", 40, 40, "Text 5.2", "edit-cut", "edit-cut", false, false); addRow(6, true, true, "Text 6.1", 50, 50, "Text 6.2", "help-browser", "help-browser", true, true); addRow(7, false, false, "Text 7.1", 60, 60, "Text 7.2", "document-open", "document-open", false, false); addRow(8, true, true, "Text 8.1", 70, 70, "Text 8.2", "document-save", "document-save", true, true); addRow(9, false, false, "Text 9.1", 80, 80, "Text 9.2", "document-save-as", "document-save-as", false, false); addRow(10, true, true, "Text 10.1", 90, 90, "Text 10.2", "view-refresh", "view-refresh", true, true); addRow(11, false, false, "Text 11.1", 100, 100, "Text 11.2", "edit-cut", "edit-cut", false, false); // QTreeView AwfTreeView *view = new AwfTreeView; // same as QTreeView *view = new QTreeView; but with QSS columns width support view->setFixedHeight(200); // The 200 view->setMinimumWidth(200); // The 200 model->setParent(view); view->setModel(model); view->setSortingEnabled(true); view->setRootIsDecorated(false); view->setItemsExpandable(false); view->setAlternatingRowColors(true); view->sortByColumn(0, Qt::AscendingOrder); view->setItemDelegateForColumn(2, new AwfRadioDelegate(view)); view->setItemDelegateForColumn(4, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(5, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(10, new AwfRadioDelegate(view)); view->header()->setStretchLastSection(false); view->header()->setMinimumSectionSize(16); for (int c = 0; c < model->columnCount(); ++c) view->resizeColumnToContents(c); view->header()->setSectionResizeMode(QHeaderView::Interactive); root->addWidget(view); } static void create_sliders(QTabWidget *notebook, QString text, QSlider::TickPosition position) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_sliders()\n"); AwfHBox *hbox = new AwfHBox; AwfVBox *vbox1 = new AwfVBox, *vbox2 = new AwfVBox, *vbox3 = new AwfVBox; AwfHBox *hboxa = new AwfHBox, *hboxb = new AwfHBox; QSlider *slider1v, *slider2v, *slider3v, *slider4v, *slider5v, *slider6v, *slider7v, *slider8v, *slider9v, *slider10v, *slider11v, *slider12v; QSlider *slider1h, *slider2h, *slider3h, *slider4h, *slider5h, *slider6h, *slider7h, *slider8h, *slider9h, *slider10h, *slider11h, *slider12h; int value = slider1->value(); // vertical sliders slider1v = create_vertical_slider(value, false, false, position); slider2v = create_vertical_slider(value, false, false, position); slider3v = create_vertical_slider(value, false, false, position); slider4v = create_vertical_slider(value, true, false, position); slider5v = create_vertical_slider(value, true, false, position); slider6v = create_vertical_slider(value, true, false, position); slider7v = create_vertical_slider(value, false, true, position); slider8v = create_vertical_slider(value, false, true, position); slider9v = create_vertical_slider(value, false, true, position); slider10v = create_vertical_slider(value, true, true, position); slider11v = create_vertical_slider(value, true, true, position); slider12v = create_vertical_slider(value, true, true, position); // horizontal sliders slider1h = create_horizontal_slider(value, false, false, position); slider2h = create_horizontal_slider(value, false, false, position); slider3h = create_horizontal_slider(value, false, false, position); slider4h = create_horizontal_slider(value, true, false, position); slider5h = create_horizontal_slider(value, true, false, position); slider6h = create_horizontal_slider(value, true, false, position); slider7h = create_horizontal_slider(value, false, true, position); slider8h = create_horizontal_slider(value, false, true, position); slider9h = create_horizontal_slider(value, false, true, position); slider10h = create_horizontal_slider(value, true, true, position); slider11h = create_horizontal_slider(value, true, true, position); slider12h = create_horizontal_slider(value, true, true, position); // layout hbox->addLayout(vbox1); vbox1->addWidget(slider1h); vbox1->addWidget(slider2h); vbox1->addWidget(slider3h); vbox1->addWidget(slider4h); vbox1->addWidget(slider5h); vbox1->addWidget(slider6h); hbox->addLayout(vbox2); vbox2->addLayout(hboxa); hboxa->addWidget(slider1v); hboxa->addWidget(slider2v); hboxa->addWidget(slider3v); hboxa->addWidget(slider7v); hboxa->addWidget(slider8v); hboxa->addWidget(slider9v); vbox2->addLayout(hboxb); hboxb->addWidget(slider4v); hboxb->addWidget(slider5v); hboxb->addWidget(slider6v); hboxb->addWidget(slider10v); hboxb->addWidget(slider11v); hboxb->addWidget(slider12v); hbox->addLayout(vbox3); vbox3->addWidget(slider7h); vbox3->addWidget(slider8h); vbox3->addWidget(slider9h); vbox3->addWidget(slider10h); vbox3->addWidget(slider11h); vbox3->addWidget(slider12h); QWidget *container = new QWidget; container->setLayout(hbox); create_notebook_tab(notebook, text, container, false); } static QSlider* create_horizontal_slider(int value, bool draw, bool inverted, QSlider::TickPosition position) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_horizontal_slider()\n"); QSlider *slider = new QSlider(Qt::Horizontal); slider->setRange(0, 100); slider->setValue(value); slider->setInvertedAppearance(inverted); if (inverted) slider->setProperty("isInverted", true); // draw does not exists slider->setTickPosition(position); slider->setFixedWidth(186); // The 186 slider->setTracking(true); switch (position) { case QSlider::NoTicks: slider->setProperty("hasTicks", "NoTicks"); break; case QSlider::TicksAbove: slider->setProperty("hasTicks", "TicksAbove"); break; case QSlider::TicksBelow: slider->setProperty("hasTicks", "TicksBelow"); break; case QSlider::TicksBothSides: slider->setProperty("hasTicks", "TicksBothSides"); break; } return slider; } static QSlider* create_vertical_slider(int value, bool draw, bool inverted, QSlider::TickPosition position) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_vertical_slider()\n"); QSlider *slider = new QSlider(Qt::Vertical); slider->setRange(0, 100); slider->setValue(value); slider->setInvertedAppearance(inverted); if (inverted) slider->setProperty("isInverted", true); // draw does not exists slider->setTickPosition(position); slider->setFixedHeight(100); // The 100 slider->setTracking(true); switch (position) { case QSlider::NoTicks: slider->setProperty("hasTicks", "NoTicks"); break; case QSlider::TicksAbove: slider->setProperty("hasTicks", "TicksAbove"); break; case QSlider::TicksBelow: slider->setProperty("hasTicks", "TicksBelow"); break; case QSlider::TicksBothSides: slider->setProperty("hasTicks", "TicksBothSides"); break; } return slider; } // traditional menu static void create_traditional_menubar(QMenuBar *root) { if (awf_trace) printf("\033[36m[trace]\033[00m create_traditional_menubar()\n"); static AwfShortcutFilter *shortcutFilter = new AwfShortcutFilter(window); QMenu *menu, *submenu, *base; QActionGroup *group; QAction *menuitem; bool ok, noRefresh = !awf_gqss, noPrint = false; #if ! defined (QT_PRINTSUPPORT_LIB) noPrint = true; #endif // options menu = root->addMenu(_app("_Options")); menu->installEventFilter(shortcutFilter); // @todo option command line? if (qEnvironmentVariableIsSet("AWF_TEAROFF")) menu->setTearOffEnabled(true); create_menuitem(menu, get_icon("document-open"), _qt("QFileDialog", "&Open"), false, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, QIcon(), _app("Open recent file"), true, AWF_ACCEL_RECE, AWF_RECE, null); create_menuitem(menu, get_icon("document-save"), _qt("QFileDialog", "&Save"), false, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, get_icon("view-refresh"), _app("_Refresh"), noRefresh, AWF_ACCEL_REFR, AWF_REFR, [](){ on_sighup(0); }); create_menuitem(menu, QIcon(), _app("Calendar"), false, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, QIcon(), "Sliders", false, AWF_ACCEL_SCAL, AWF_SCAL, dialog_sliders); create_menuitem(menu, get_icon("document-properties"), _app("Properties"), false, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, get_icon("document-page-setup"),_app("Page Set&up"), noPrint, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, get_icon("document-print"), _qt("QPrintDialog", "&Print"), noPrint, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = menu->addMenu(_app("More...")); submenu->installEventFilter(shortcutFilter); create_menuitem(submenu, get_icon("edit-cut"), _qt("QLineEdit", "Cu&t"), false, AWF_ACCEL_MCUT, AWF_MCUT, null); create_menuitem(submenu, get_icon("edit-copy"), _qt("QLineEdit", "&Copy"), false, AWF_ACCEL_MCOP, AWF_MCOP, null); create_menuitem(submenu, get_icon("edit-paste"), _qt("QLineEdit", "&Paste"), false, AWF_ACCEL_MPAS, AWF_MPAS, null); submenu = menu->addMenu(_app("Less...")); submenu->setEnabled(false); menu->addSeparator(); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, false); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, false); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, false); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, true); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, true); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, true); menu->addSeparator(); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, false, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, false, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, false, group); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, true, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, true, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, true, group); menu->addSeparator(); create_menuitem(menu, get_icon("window-close"), _qt("QMdiSubWindow", "&Close"), true, AWF_ACCEL_CLOS, AWF_CLOS, null); create_menuitem(menu, get_icon("application-exit"), _qt("QCocoaMenuItem", "Quit"), false, AWF_ACCEL_QUIT, AWF_QUIT, qApp->quit); // system themes ok = false; group = new QActionGroup(window); group->setExclusive(true); menu = root->addMenu(_app("_System themes")); for (QString theme : list_system_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } if (list_user_theme.contains(theme)) { menuitem = create_menuitem_radio(base, theme, false, false, true, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } else { menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_system_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // user themes ok = false; menu = root->addMenu(_app("_User themes")); for (QString theme : list_user_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_user_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // text direction menu = root->addMenu(_app("_Text direction")); group = new QActionGroup(window); group->setExclusive(true); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), false, false, false, group); if (current_direction == 1) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(1); }); // Qt::LeftToRight menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), false, false, false, group); if (current_direction == 2) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(2); }); // Qt::RightToLeft // help menu = root->addMenu(_qt("QWizard", "&Help")); menu->installEventFilter(shortcutFilter); create_menuitem(menu, QIcon(), "QtInspector", false, AWF_ACCEL_INSP, AWF_INSP, dialog_inspector); create_menuitem(menu, get_icon("help-about"), _qt("QCocoaMenuItem", "About"), false, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); } static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb) { if (awf_trace) printf("\033[36m[trace]\033[00m create_menuitem_check(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, window); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group) { if (awf_trace) printf("\033[36m[trace]\033[00m create_menuitem_radio(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, group); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function) { if (awf_trace) printf("\033[36m[trace]\033[00m create_menuitem(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(icon, text, window); menuitem->setShortcut(acl); menuitem->setEnabled(!dsb); if (!kmp.isEmpty()) menuitem->setObjectName(kmp); if (function) QObject::connect(menuitem, &QAction::triggered, function); menu->addAction(menuitem); return menuitem; } static void accels_load() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m accels_load()\n"); QString oldPath = QDir::homePath() + "/.awf-gtk-accels"; if (QFile::exists(oldPath)) QFile::rename(oldPath, QDir::homePath() + "/.awf-accels"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.exists() && f.open(QIODevice::ReadOnly | QIODevice::Text)) { QMap accels; QMap actions; QString kmp, acl; auto parseModifiers = [](QString mod) { Qt::KeyboardModifiers m = Qt::NoModifier; if (mod.contains("Primary")) m |= static_cast(Qt::CTRL); if (mod.contains("Shift")) m |= static_cast(Qt::SHIFT); if (mod.contains("Alt")) m |= static_cast(Qt::ALT); if (mod.contains("Meta")) m |= static_cast(Qt::META); return m; }; auto parseKey = [](QString keyStr) { if (keyStr.length() == 1) return static_cast(keyStr.toUpper().at(0).unicode()); if ((keyStr.compare("Delete", Qt::CaseInsensitive) == 0) || (keyStr.compare("Del", Qt::CaseInsensitive) == 0)) return Qt::Key_Delete; if (keyStr.compare("Return", Qt::CaseInsensitive) == 0) return Qt::Key_Return; if (keyStr.compare("F1", Qt::CaseInsensitive) == 0) return Qt::Key_F1; if (keyStr.compare("F2", Qt::CaseInsensitive) == 0) return Qt::Key_F2; if (keyStr.compare("F3", Qt::CaseInsensitive) == 0) return Qt::Key_F3; if (keyStr.compare("F4", Qt::CaseInsensitive) == 0) return Qt::Key_F4; if (keyStr.compare("F5", Qt::CaseInsensitive) == 0) return Qt::Key_F5; if (keyStr.compare("F6", Qt::CaseInsensitive) == 0) return Qt::Key_F6; if (keyStr.compare("F7", Qt::CaseInsensitive) == 0) return Qt::Key_F7; if (keyStr.compare("F8", Qt::CaseInsensitive) == 0) return Qt::Key_F8; if (keyStr.compare("F9", Qt::CaseInsensitive) == 0) return Qt::Key_F9; if (keyStr.compare("F10", Qt::CaseInsensitive) == 0) return Qt::Key_F10; if (keyStr.compare("F11", Qt::CaseInsensitive) == 0) return Qt::Key_F11; if (keyStr.compare("F12", Qt::CaseInsensitive) == 0) return Qt::Key_F12; return Qt::Key_unknown; }; // read file // QMap accels QTextStream in(&f); while (!in.atEnd()) { //; (gtk_accel_path "/Test/Print" "p") QString l = in.readLine().trimmed(); if (l.isEmpty() || l.startsWith(';')) continue; int a = l.indexOf('"'); if (a < 0) continue; int b = l.indexOf('"', a + 1); if (b < 0) continue; int c = l.indexOf('"', b + 1); if (c < 0) continue; int d = l.indexOf('"', c + 1); if (d < 0) continue; kmp = l.mid(a + 1, b - a - 1); acl = l.mid(c + 1, d - c - 1); if (kmp.isEmpty()) continue; if (awf_debug) printf("\033[33m[debug]\033[00m accels_foundInFile: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); accels.insert(kmp, acl); } f.close(); // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (accels.contains(kmp)) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (accels.contains(kmp)) actions.insert(kmp, action); } } } // apply shortcuts for (QString tmp : actions.keys()) { kmp = tmp; acl = accels.value(kmp); if (awf_debug) printf("\033[33m[debug]\033[00m accels_foundInMenu: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); if (acl.isEmpty()) { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence()); } else { Qt::KeyboardModifiers mods = parseModifiers(acl); acl.remove(QRegularExpression("<.*>")); Qt::Key key = parseKey(acl); if (key == Qt::Key_unknown) { printf("\033[33m[debug]\033[00m accels_foundInMenu: %s %s » unknown key\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); } else { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence(key | mods)); } } } } } static bool accels_change(QObject *obj, QEvent *event) { // ok // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (event->type() != QEvent::KeyPress) return false; QMenu *menu = qobject_cast(obj); if (!menu || !menu->activeAction()) return false; QAction *menuitem = menu->activeAction(); if (menuitem->objectName().isEmpty()) return false; QKeyEvent *keyEvent = static_cast(event); int key = keyEvent->key(); if ((key == Qt::Key_Control) || (key == Qt::Key_Shift) || (key == Qt::Key_Meta) || (key == Qt::Key_Alt)) return false; if (awf_trace) printf("\033[36m[trace]\033[00m accels_change()\n"); Qt::KeyboardModifiers mods = keyEvent->modifiers(); bool del = (key == Qt::Key_Delete) || (key == Qt::Key_Backspace); if ( del || // f1..12 ((key >= Qt::Key_F1) && (key <= Qt::Key_F12)) || // ctrl/shift/super/alt + ? mods ) { must_save_accels = true; QKeySequence seq = del ? QKeySequence() : QKeySequence(mods | key); // check and remove existing keyboard shortcut if (!del) { for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { if ((action != menuitem) && (action->shortcut() == seq)) { action->setProperty("shortcutModified", true); action->setShortcut(QKeySequence()); } } } } // set new keyboard shortcut menuitem->setProperty("shortcutModified", true); menuitem->setShortcut(seq); if (awf_debug) printf("\033[33m[debug]\033[00m new_shortcut: %s\n", del ? "none" : seq.toString(QKeySequence::PortableText).toUtf8().constData()); return true; } return false; } static void accels_save() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m accels_save()\n"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // gtk_accel_map_save if (must_save_accels) { QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.open(QIODevice::WriteOnly | QIODevice::Text)) { QMap actions; QString kmp, acl; QAction *act; auto parseModifiers = [](Qt::KeyboardModifiers m) { QString s; if (m & Qt::CTRL) s += QString(""); if (m & Qt::SHIFT) s += QString(""); if (m & Qt::ALT) s += QString(""); if (m & Qt::META) s += QString(""); return s; }; auto parseKey = [](Qt::Key k) { if ((k >= Qt::Key_A) && (k <= Qt::Key_Z)) return QString(QChar(k).toLower()); if (k == Qt::Key_Delete) return QString("Delete"); if (k == Qt::Key_Return) return QString("Return"); if (k == Qt::Key_F1) return QString("F1"); if (k == Qt::Key_F2) return QString("F2"); if (k == Qt::Key_F3) return QString("F3"); if (k == Qt::Key_F4) return QString("F4"); if (k == Qt::Key_F5) return QString("F5"); if (k == Qt::Key_F6) return QString("F6"); if (k == Qt::Key_F7) return QString("F7"); if (k == Qt::Key_F8) return QString("F8"); if (k == Qt::Key_F9) return QString("F9"); if (k == Qt::Key_F10) return QString("F10"); if (k == Qt::Key_F11) return QString("F11"); if (k == Qt::Key_F12) return QString("F12"); return QString(); }; // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, action); } } } // save file QTextStream out(&f); out << "; awf-qt" << QT_VERSION_MAJOR << " GtkAccelMap rc-file -*- scheme -*-\n"; out << "; this file is an automated accelerator map dump\n"; out << ";\n"; for (QString tmp : actions.keys()) { kmp = tmp; act = actions.value(kmp); acl = act->shortcut().toString(); if (!acl.isEmpty()) { Qt::Key key = static_cast(act->shortcut()[0] & ~Qt::KeyboardModifierMask); Qt::KeyboardModifiers mods = static_cast(act->shortcut()[0] & Qt::KeyboardModifierMask); acl = parseModifiers(mods) + parseKey(key); } out << (act->property("shortcutModified").toBool() ? "" : "; ") << "(gtk_accel_path \"" << kmp << "\" \"" << acl << "\")\n"; } out << "\n"; f.close(); } } } // dialogs static void dialog_open() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_open()\n"); QFileDialog::getOpenFileNames(window, QString("%1 - Qt %2.%3").arg("QFileDialog:Open").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR), QDir::homePath()); } static void dialog_save() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_save()\n"); QFileDialog::getSaveFileName(window, QString("%1 - Qt %2.%3").arg("QFileDialog:Save").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR), QDir::homePath()); } static void dialog_message() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_message()\n"); QMessageBox msgBox(window); msgBox.setIcon(QMessageBox::Information); msgBox.setWindowTitle(QString("%1 - Qt %2.%3").arg("QMessageBox").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); msgBox.setText("QMessageBox"); msgBox.setInformativeText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.exec(); } static void dialog_page_setup() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_page_setup()\n"); QPrinter printer; QPageSetupDialog(&printer, window).exec(); } static void dialog_print() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_print()\n"); QPrinter printer; QPrintDialog(&printer, window).exec(); } static void dialog_about() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_about()\n"); QString cppVersion; switch (__cplusplus) { case 199711L: cppVersion = "C++98"; break; case 201103L: cppVersion = "C++11"; break; case 201402L: cppVersion = "C++14"; break; case 201703L: cppVersion = "C++17"; break; case 202002L: cppVersion = "C++20"; break; case 202302L: cppVersion = "C++23"; break; default: cppVersion = "C++ (" + QString::number(__cplusplus) + ")"; break; } QString t1 = QString("%1

    %2 %3

    %4
    %5
    QT_QPA_PLATFORMTHEME=%6 QT_STYLE_OVERRIDE=%7") .arg(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")) .arg(QString(_app("Remove %1 file")).arg("~/.awf-accels")) .arg(_app("to reset keyboard shortcuts.")) .arg(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cppVersion).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)) .arg(QString(_app(" started with qt %1")).arg(qVersion())) .arg(QString::fromUtf8(qgetenv("QT_QPA_PLATFORMTHEME"))) .arg(QString::fromUtf8(qgetenv("QT_STYLE_OVERRIDE"))); QString t2 = QString("awf-qt%1 / %2

    %3

    %4

    %5

    %6") .arg(QT_VERSION_MAJOR) .arg(VERSION) .arg(t1) .arg("
    https://github.com/luigifab/awf-extended") .arg("Copyright © 2020-2026 Fabrice Creuzot (luigifab)
    Copyright © 2011-2017 Valère Monseur (valr)") .arg(_app("A widget factory 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.")); QMessageBox::about(window, _qt("QCocoaMenuItem", "About"), t2); } static void dialog_inspector() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_inspector()\n"); if (inspector) { inspector->raise(); inspector->activateWindow(); } else { inspector = new QDialog(window, Qt::Window); inspector->setAttribute(Qt::WA_DeleteOnClose); inspector->setWindowTitle(QString("%1 - Qt %2.%3").arg("QtInspector").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); inspector->resize(500, 400); QTextEdit *textEdit = new QTextEdit; textEdit->setAcceptRichText(false); textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); textEdit->setPlaceholderText(_app("Write QSS here...")); textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QPushButton *btnCopy = new QPushButton(_qt("QShortcut", "Copy")); btnCopy->setIcon(get_icon("edit-copy")); QPushButton *btnClear = new QPushButton(_qt("QShortcut", "Clear")); btnClear->setIcon(get_icon("edit-clear")); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); AwfHBox *buttonLayout = new AwfHBox; buttonLayout->addWidget(btnCopy); buttonLayout->addWidget(btnClear); buttonLayout->addWidget(btnClose); AwfVBox *mainLayout = new AwfVBox; mainLayout->addWidget(textEdit); mainLayout->addLayout(buttonLayout); inspector->setLayout(mainLayout); QTimer* counter = new QTimer(inspector); counter->setSingleShot(true); QObject::connect(textEdit, &QTextEdit::textChanged, counter, [=](){ counter->start(1000); }); QObject::connect(btnClose, &QPushButton::clicked, inspector, [=](){ inspector->close(); }); QObject::connect(btnCopy, &QPushButton::clicked, inspector, [=](){ QString text = textEdit->toPlainText(); if (!text.isEmpty()) QApplication::clipboard()->setText(text); textEdit->setFocus(); }); QObject::connect(btnClear, &QPushButton::clicked, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); if (awf_gqss) original_style = "!^!"; QSignalBlocker blocker(textEdit); textEdit->clear(); textEdit->setFocus(); }); QObject::connect(inspector, &QWidget::destroyed, window, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); if (awf_gqss) original_style = "!^!"; inspector = null; }); QObject::connect(window, &QWidget::destroyed, inspector, &QWidget::close); QObject::connect(counter, &QTimer::timeout, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); #if defined (Q_OS_UNIX) int savedFd = dup(fileno(stderr)); FILE* ignored = freopen("/dev/null", "w", stderr); qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); fflush(stderr); dup2(savedFd, fileno(stderr)); close(savedFd); #else qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); #endif }); inspector->show(); } } static void dialog_calendar() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_calendar()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(QString("%1 - Qt %2.%3").arg("QDialog").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); dialog->setObjectName("AwfDialogWindow"); // QCalendar QCalendarWidget *calendar = new QCalendarWidget; calendar->setGridVisible(true); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); QObject::connect(btnClose, &QPushButton::clicked, dialog, [=](){ dialog->close(); }); AwfHBox *buttonLayout = new AwfHBox; buttonLayout->addStretch(); buttonLayout->addWidget(btnClose); AwfVBox *mainLayout = new AwfVBox; mainLayout->addWidget(calendar); mainLayout->addLayout(buttonLayout); dialog->setLayout(mainLayout); dialog->show(); } static void dialog_sliders() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_sliders()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(QString("%1 - Qt %2.%3").arg("QDialog").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); dialog->setObjectName("AwfDialogWindow"); // QTabWidget QTabWidget *notebook = new QTabWidget; notebook->setTabPosition(QTabWidget::North); notebook->setTabsClosable(false); notebook->setUsesScrollButtons(false); notebook->tabBar()->setExpanding(false); notebook->tabBar()->setMovable(false); create_sliders(notebook, "top/left", QSlider::TicksAbove); create_sliders(notebook, "bottom/right", QSlider::TicksBelow); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); QObject::connect(btnClose, &QPushButton::clicked, dialog, [=](){ dialog->close(); }); AwfHBox *buttonLayout = new AwfHBox; buttonLayout->addStretch(); buttonLayout->addWidget(btnClose); AwfVBox *mainLayout = new AwfVBox; mainLayout->addWidget(notebook); mainLayout->addLayout(buttonLayout); dialog->setLayout(mainLayout); dialog->show(); } #include "awf-qt5.moc"awf-extended-4.2.0/src/awf-qt6.cpp000066400000000000000000003000241522325530000166440ustar00rootroot00000000000000/** * Forked M/10/03/2020 * Updated J/02/07/2026 * * Copyright 2020-2026 | Fabrice Creuzot (luigifab) * https://github.com/luigifab/awf-extended * https://www.luigifab.fr/gtkqt/awf-extended * * Forked from * Copyright 2011-2017 | Valère Monseur (valr) * https://github.com/valr/awf * * Forked from * AWF is originally based on the code from The Widget Factory * created by Richard Stellingwerff * * This program is free software, you can redistribute it or modify * it under the terms of the GNU General Public License (GPL) 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 (GPL) for more details. * * * Translations update: * https://github.com/qt/qttranslations/blob/v6.11.0/translations/qtbase_fr.ts * xgettext --keyword=_app -d awf -o src/awf.pot -k_ -s src/awf-*.c* * msgmerge src/po/fr.po src/awf.pot -o src/po/fr.po * msgfmt src/po/fr.po -o src/fr/LC_MESSAGES/awf.mo * * Tested with build.sh (via VirtualBox 7) with: * Debian Testing 64 (1536 MB) Qt 5.15/6.10 * Fedora Rawhide 64 (1536 MB) Qt 5.15/6.11 * Ubuntu 26.04 Resolute Raccoon 64 (4096 MB) Qt 5.15/6.10 * Ubuntu 25.10 Questing Quokka 64 (4096 MB) Qt 5.15/6.9 * Ubuntu 25.04 Plucky Puffin 64 (4096 MB) Qt 5.15/6.8 * Ubuntu 24.10 Oracular Oriole 64 (4096 MB) Qt 5.15/6.6 * Ubuntu 24.04 Noble Numbat 64 (4096 MB) Qt 5.15/6.4 * Ubuntu 23.10 Mantic Minotaur 64 (3072 MB) Qt 5.15/6.4 * Ubuntu 23.04 Lunar Lobster 64 (3072 MB) Qt 5.15/6.4 * Ubuntu 22.10 Kinetic Kudu 64 (2176 MB) Qt 5.15/6.3 * Windows XP SP3 MinGW/msys (2048 MB) Qt 5.3 */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #if defined (Q_OS_WIN) || defined (_WIN32) #include #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined (Q_OS_UNIX) #include #endif #pragma GCC diagnostic pop #define GETTEXT_PACKAGE "awf-qt6" #define AWF_OPEN QStringLiteral("/Test/Open") #define AWF_SAVE QStringLiteral("/Test/Save") #define AWF_REFR QStringLiteral("/Test/Refresh") #define AWF_RECE QStringLiteral("/Test/Recent") #define AWF_CALE QStringLiteral("/Test/Calendar") #define AWF_SCAL QStringLiteral("/Test/Scales") #define AWF_PROP QStringLiteral("/Test/Properties") #define AWF_PRSE QStringLiteral("/Test/PrintSetup") #define AWF_PRIN QStringLiteral("/Test/Print") #define AWF_MCUT QStringLiteral("/Test/More/Cut") #define AWF_MCOP QStringLiteral("/Test/More/Copy") #define AWF_MPAS QStringLiteral("/Test/More/Paste") #define AWF_CLOS QStringLiteral("/Test/Close") #define AWF_QUIT QStringLiteral("/Test/Quit") #define AWF_INSP QStringLiteral("/Test/Inspector") #define AWF_ABOU QStringLiteral("/Test/About") #define AWF_ACCEL_OPEN QKeySequence(Qt::CTRL | Qt::Key_O) #define AWF_ACCEL_SAVE QKeySequence(Qt::CTRL | Qt::Key_S) #define AWF_ACCEL_REFR QKeySequence(Qt::Key_F5) #define AWF_ACCEL_RECE QKeySequence() #define AWF_ACCEL_CALE QKeySequence() #define AWF_ACCEL_SCAL QKeySequence() #define AWF_ACCEL_PROP QKeySequence(Qt::ALT | Qt::Key_Return) #define AWF_ACCEL_PRSE QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_P) #define AWF_ACCEL_PRIN QKeySequence(Qt::CTRL | Qt::Key_P) #define AWF_ACCEL_MCUT QKeySequence(Qt::CTRL | Qt::Key_X) #define AWF_ACCEL_MCOP QKeySequence(Qt::CTRL | Qt::Key_C) #define AWF_ACCEL_MPAS QKeySequence(Qt::CTRL | Qt::Key_V) #define AWF_ACCEL_CLOS QKeySequence(Qt::CTRL | Qt::Key_W) #define AWF_ACCEL_QUIT QKeySequence(Qt::CTRL | Qt::Key_Q) #define AWF_ACCEL_INSP QKeySequence(Qt::Key_F12) #define AWF_ACCEL_ABOU QKeySequence(Qt::Key_F1) // @see https://stackoverflow.com/a/10018581/2980105 #define _app(x) QString::fromUtf8(gettext(x)).replace('_', '&') #define _qt(y, x) QCoreApplication::translate(y, x) // global variables static bool awf_debug = qEnvironmentVariableIsSet("AWF_DEBUG"); static bool awf_trace = qEnvironmentVariableIsSet("AWF_TRACE"); static bool awf_gqss = false; constexpr std::nullptr_t null = nullptr; static QStringList list_system_theme; static QStringList list_user_theme; static QMainWindow *window = null; static QDialog *inspector = null; static QLineEdit *toolbarentry = null; static QProgressBar *progress1 = null, *progress2 = null, *progress3 = null, *progress4 = null, *progress8 = null, *progress9 = null; static QSlider *slider1 = null, *slider2 = null, *slider3 = null, *slider4 = null, *slider5 = null, *slider6 = null, *slider7 = null; static QTabWidget *notebook1 = null, *notebook2 = null, *notebook3 = null, *notebook4 = null; static int current_direction = 0; static QString current_theme = "auto"; static QString opt_theme = "auto"; static QString opt_screenshot = ""; static QString original_style = ""; static bool allow_update_values = true; static bool must_save_accels = false; // gtk_style_context_to_string static QString generateTooltipRecursive(QWidget *widget) { if (!widget) return ""; QString tooltip = widget->metaObject()->className(); if (widget->property("textVisible").isValid()) tooltip += "[textVisible=bool]"; if (widget->property("hasMenu").isValid()) tooltip += "[hasMenu=bool]"; if (widget->property("isInverted").isValid()) tooltip += "[isInverted=bool]"; if (widget->property("hasTicks").isValid()) tooltip += "[hasTicks=" + widget->property("hasTicks").toString() + "]"; if (!widget->objectName().isEmpty()) tooltip += "#" + widget->objectName(); if (widget->property("class").isValid()) tooltip += "." + widget->property("class").toString(); QString style = widget->styleSheet().trimmed(); if (!style.isEmpty()) tooltip += "\n" + style; for (QObject *child : widget->children()) { if (QWidget *childWidget = qobject_cast(child)) tooltip += "\n " + generateTooltipRecursive(childWidget).replace("\n", "\n "); } return tooltip; } class AwfHBox : public QHBoxLayout { public: using QHBoxLayout::QHBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QHBoxLayout::addWidget(widget); } }; class AwfVBox : public QVBoxLayout { public: using QVBoxLayout::QVBoxLayout; void addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); QVBoxLayout::addWidget(widget); } }; class AwfToolBar : public QToolBar { public: using QToolBar::QToolBar; QAction* addWidget(QWidget *widget) { widget->setToolTip(generateTooltipRecursive(widget)); return QToolBar::addWidget(widget); } protected: void keyPressEvent(QKeyEvent *e) override { if ((e->key() == Qt::Key_Return) || (e->key() == Qt::Key_Enter)) { if (auto *b = qobject_cast(focusWidget())) { b->click(); return; } } QToolBar::keyPressEvent(e); } }; // global functions static QIcon get_icon(QString name); static void awf_load_theme(QStringList& themes, QString directory); static void update_text_direction(int direction); static void update_theme(QString newTheme); static void update_statusbar(QString message); static void update_values(QAbstractSlider *range); static void update_widgets(); static void display_notification(); static bool findAndCheckMenu(QList actions, QString search); static void on_sighup(int signum); static bool take_screenshot(); static void create_window(); static void create_widgets(AwfVBox *root); static void create_toolbar(AwfToolBar *toolbar); static void create_combos_entries(AwfVBox *root); static void create_spinbuttons(AwfHBox *root); static void create_checkbuttons(AwfVBox *root); static void create_radiobuttons(AwfVBox *root); static void create_otherbuttons(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfHBox *root4, AwfHBox *root5); static void create_progressbars(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfVBox *root4); static void create_labels(AwfHBox *root); static void create_spinners(AwfHBox *root); static void create_expander(AwfVBox *root); static void create_frames(AwfHBox *root1, AwfHBox *root2); static void create_notebooks(AwfHBox *root1, AwfHBox *root2); static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close); static void create_treeview(AwfVBox *root); static void create_sliders(QTabWidget *notebook, QString text, QSlider::TickPosition position); static QSlider* create_horizontal_slider(int value, bool draw, bool inverted, QSlider::TickPosition position); static QSlider* create_vertical_slider(int value, bool draw, bool inverted, QSlider::TickPosition position); static void create_traditional_menubar(QMenuBar *root); static void accels_load(); static bool accels_change(QObject *obj, QEvent *event); static void accels_save(); static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb); static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group); static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function); static void dialog_open(); static void dialog_save(); static void dialog_message(); static void dialog_page_setup(); static void dialog_print(); static void dialog_about(); static void dialog_inspector(); static void dialog_calendar(); static void dialog_sliders(); // other class AwfMainWindow : public QMainWindow { Q_OBJECT public: bool eventFilter(QObject *obj, QEvent *event) override { // disable statusbar update on menubar hover if (event->type() == QEvent::StatusTip) return true; return QMainWindow::eventFilter(obj, event); } protected: void changeEvent(QEvent *e) override { // check current theme in menus on desktop theme change from globalqss style plugin if (qEnvironmentVariableIsSet("GQSS_SIGNAL") && (e->type() == QEvent::StyleChange)) { QString newTheme = QString::fromUtf8(qgetenv("GQSS_THEME")); if (awf_debug) printf("\033[33m[debug]\033[00m SIGNAL_theme_update: %s\n", newTheme.toUtf8().constData()); findAndCheckMenu(menuBar()->actions().mid(1), newTheme); } QMainWindow::changeEvent(e); } }; class AwfTreeView : public QTreeView { Q_OBJECT Q_PROPERTY(QString columnWidths READ getColumnWidths WRITE setColumnWidths) Q_PROPERTY(QColor sortedColumnColor READ getSortedColumnColor WRITE setSortedColumnColor) Q_PROPERTY(QColor alternateSortedColumnColor READ getAlternateSortedColumnColor WRITE setAlternateSortedColumnColor) int m_sortedColumn = -1; QColor m_color; QColor m_altColor; // to have the same display as awf-gtk - alternateSortedColumnColor does not work // AwfTreeView { qproperty-sortedColumnColor:#EEE; qproperty-alternateSortedColumnColor:#DDD; } protected: void drawRow(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override { if (m_color.isValid() && m_altColor.isValid() && (m_sortedColumn >= 0)) { QColor c = (index.row() % 2 != 0) ? m_altColor : m_color; painter->fillRect(visualRect(index.sibling(index.row(), m_sortedColumn)), c); } QTreeView::drawRow(painter, option, index); } public: explicit AwfTreeView(QWidget* parent = null) : QTreeView(parent) { connect(header(), &QHeaderView::sortIndicatorChanged, this, [this](int column, Qt::SortOrder) { m_sortedColumn = column; viewport()->update(); }); } QColor getSortedColumnColor() { return m_color; } QColor getAlternateSortedColumnColor() { return m_altColor; } void setSortedColumnColor(QColor color) { m_color = color; } void setAlternateSortedColumnColor(QColor color) { m_altColor = color; } // to have the same display as awf-gtk // AwfTreeView { qproperty-columnWidths:"10,20..." } QString getColumnWidths() { QStringList list; for (int i = 0; i < 11; ++i) list << QString::number(columnWidth(i)); return list.join(","); } void setColumnWidths(QString widths) { QTimer::singleShot(0, this, [this, widths]() { // QTimer mainly for Qt 6.6/6.9 QStringList list = widths.split(",", Qt::SkipEmptyParts); for (int i = 0; i < list.size() && i < 11; ++i) setColumnWidth(i, list[i].trimmed().toInt()); }); } }; class AwfProgressDelegate : public QStyledItemDelegate { public: AwfProgressDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_pbar = new QProgressBar(m_view->viewport()); m_pbar->setOrientation(Qt::Horizontal); m_pbar->setMinimum(0); m_pbar->setMaximum(100); m_pbar->setTextVisible(true); m_pbar->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QLocale locale; bool isfr = (locale.language() == QLocale::French) && (locale.territory() == QLocale::France); QStyleOptionProgressBar option; option.initFrom(m_pbar); option.rect = opt.rect; option.minimum = m_pbar->minimum(); option.maximum = m_pbar->maximum(); option.progress = idx.data().toInt(); option.textVisible = m_pbar->isTextVisible(); option.text = QString::number(idx.data().toInt()) + (isfr ? " %" : "%"); option.state |= QStyle::StateFlag::State_Horizontal; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_pbar->style()->drawControl(QStyle::CE_ProgressBar, &option, painter, m_pbar); } private: QAbstractItemView* m_view; QProgressBar* m_pbar; }; class AwfRadioDelegate : public QStyledItemDelegate { public: AwfRadioDelegate(QAbstractItemView* view) : QStyledItemDelegate(view) { m_view = view; m_radio = new QRadioButton(m_view->viewport()); m_radio->hide(); } void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &idx) const override { opt.widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); if (!(opt.state & QStyle::State_Selected)) { QColor bg = idx.data(Qt::BackgroundRole).value(); if (bg.isValid()) painter->fillRect(opt.rect, bg); } QStyleOptionButton option; option.initFrom(m_radio); option.rect = opt.rect; option.state |= (idx.data(Qt::CheckStateRole).toInt() == Qt::Checked) ? QStyle::State_On : QStyle::State_Off; if (!idx.flags().testFlag(Qt::ItemIsEnabled)) option.state &= ~QStyle::State_Enabled; if (opt.state & QStyle::State_Selected) option.state |= QStyle::State_Selected; m_radio->style()->drawControl(QStyle::CE_RadioButton, &option, painter, m_radio); } private: QAbstractItemView* m_view; QRadioButton* m_radio; }; class AwfShortcutFilter : public QObject { public: explicit AwfShortcutFilter(QObject *parent) : QObject(parent) {} bool eventFilter(QObject *obj, QEvent *event) override { return accels_change(obj, event) ? true : QObject::eventFilter(obj, event); } }; // run run run int main(int argc, char **argv) { if (awf_trace) printf("\033[36m[trace]\033[00m main()\n"); int opt = 0, status = 0; QApplication app(argc, argv); awf_gqss = qEnvironmentVariableIsSet("GQSS_SET"); if (awf_gqss) { // load available system themes (/usr/local/share/themes && /usr/share/themes) for (QString dir : QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) awf_load_theme(list_system_theme, QDir(dir).filePath("themes")); list_system_theme.sort(Qt::CaseInsensitive); list_system_theme.push_front("None"); // load available user themes (HOME/.local/share/themes && HOME/.themes) awf_load_theme(list_user_theme, QDir(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).filePath("themes")); awf_load_theme(list_user_theme, QDir(QDir::homePath()).filePath(".themes")); list_user_theme.sort(Qt::CaseInsensitive); } // locale QString appDir = QCoreApplication::applicationDirPath(); QLocale::setDefault(QLocale::system()); QTranslator *qtTr = new QTranslator(qApp); if (qtTr->load("qt_" + QLocale::system().name(), QLibraryInfo::path(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtTr); else if (qtTr->load("qt_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtTr); QTranslator *qtBaseTr = new QTranslator(qApp); if (qtBaseTr->load("qtbase_" + QLocale::system().name(), QLibraryInfo::path(QLibraryInfo::TranslationsPath))) qApp->installTranslator(qtBaseTr); else if (qtBaseTr->load("qtbase_" + QLocale::system().name(), appDir + "/translations")) qApp->installTranslator(qtBaseTr); setlocale(LC_ALL, ""); #if defined (Q_OS_WIN) || defined (_WIN32) bindtextdomain(GETTEXT_PACKAGE, (appDir + "/share/locale").toLocal8Bit().constData()); #endif bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); // init static struct option options[] = { {"help", no_argument, null, 'x'}, {"version", no_argument, null, 'v'}, {"list", no_argument, null, 'l'}, {"theme", required_argument, null, 't'}, {"screenshot", required_argument, null, 's'}, {"ltr", no_argument, null, 'y'}, {"rtl", no_argument, null, 'z'}, {null, 0, null, 0} }; QString cppVersion; while ((opt = getopt_long(argc, argv, "hvlt:s:xyz", options, null)) != -1) { switch (opt) { // --version -v case 'v': printf("%s\n", VERSION); return status; // --list -l case 'l': for (QString theme : list_system_theme) printf("%s\n", theme.toUtf8().constData()); for (QString theme : list_user_theme) printf("%s\n", theme.toUtf8().constData()); return status; // --theme -t case 't': if (list_system_theme.contains(optarg) || list_user_theme.contains(optarg)) opt_theme = optarg; break; // --screenshot -s case 's': opt_screenshot = optarg; break; // --ltr case 'y': current_direction = 1; // Qt::LeftToRight break; // --rtl case 'z': current_direction = 2; // Qt::RightToLeft break; // --help -h case 'x': case 'h': default: switch (__cplusplus) { case 199711L: cppVersion = "C++98"; break; case 201103L: cppVersion = "C++11"; break; case 201402L: cppVersion = "C++14"; break; case 201703L: cppVersion = "C++17"; break; case 202002L: cppVersion = "C++20"; break; case 202302L: cppVersion = "C++23"; break; default: cppVersion = "C++ (" + QString::number(__cplusplus) + ")"; break; } printf("%s\n\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n %s %s\n\n%s\n%s\n", qPrintable(QString(_app("A widget factory - Qt %1.%2")).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)), "-v ", qPrintable(_app("Show version number.")), "-l ", qPrintable(_app("List available themes.")), "-t ", qPrintable(_app("Run with the specified theme.")), "-s ", qPrintable(QString(_app("Run and save a screenshot on %1 (PNG).")).arg("SIGHUP")), "--ltr ", qPrintable(_app("Run with text from left to right (Left-To-Right).")), "--rtl ", qPrintable(_app("Run with text from right to left (Right-To-Left).")), qPrintable(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cppVersion).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)), qPrintable(QString(_app(" started with qt %1")).arg(qVersion()))); return status; } } // --rtl via -reverse/--reverse if ((current_direction == 0) && (qApp->layoutDirection() == Qt::RightToLeft)) current_direction = 3; // create and show window QCommandLineParser parser; parser.setApplicationDescription(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); parser.addHelpOption(); parser.addVersionOption(); // << "v" << "version", _app("Show version number."))); parser.addOption(QCommandLineOption(QStringList() << "l" << "list", _app("List available themes."))); parser.addOption(QCommandLineOption(QStringList() << "t" << "theme", _app("Run with the specified theme."), "theme")); parser.addOption(QCommandLineOption(QStringList() << "s" << "screenshot", QString(_app("Run and save a screenshot on %1 (PNG).").arg("SIGHUP")), "filename")); parser.addOption(QCommandLineOption(QStringList() << "y" << "ltr", _app("Run with text from left to right (Left-To-Right)."))); parser.addOption(QCommandLineOption(QStringList() << "z" << "rtl", _app("Run with text from right to left (Right-To-Left)."))); parser.process(app); create_window(); return app.exec(); } static QIcon get_icon(QString name) { static const QHash map = { {"application-exit", QStyle::SP_DialogCloseButton}, {"dialog-close", QStyle::SP_DialogCloseButton}, {"dialog-information", QStyle::SP_MessageBoxInformation}, {"document-open", QStyle::SP_DialogOpenButton}, {"document-save", QStyle::SP_DialogSaveButton}, {"help-about", QStyle::SP_MessageBoxQuestion}, {"help-browser", QStyle::SP_MessageBoxQuestion}, {"view-refresh", QStyle::SP_BrowserReload}, {"window-close", QStyle::SP_DialogCloseButton}, }; QIcon icon = QIcon::fromTheme(name); if (icon.isNull()) icon = qApp->style()->standardIcon(map.value(name, QStyle::SP_FileIcon)); return icon; } static void awf_load_theme(QStringList& themes, QString directory) { if (awf_trace) printf("\033[36m[trace]\033[00m awf_load_theme(%s)\n", directory.toUtf8().constData()); QDir dir(directory); if (dir.exists()) { if (awf_debug) printf("\033[33m[debug]\033[00m themes_dir: %s\n", directory.toUtf8().constData()); QStringList entries = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); for (QString theme : entries) { if (QDir(QDir(dir.filePath(theme)).filePath("qt6")).exists()) themes.append(theme); } } } static void update_text_direction(int direction) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m update_text_direction()\n"); if ((direction == 1) && (qApp->layoutDirection() != Qt::LeftToRight)) { current_direction = 1; notebook3->setTabPosition(QTabWidget::West); notebook4->setTabPosition(QTabWidget::East); qApp->setLayoutDirection(Qt::LeftToRight); update_theme("refresh"); } else if ((direction == 2) && (qApp->layoutDirection() != Qt::RightToLeft) || (direction == 3)) { current_direction = 2; notebook3->setTabPosition(QTabWidget::East); notebook4->setTabPosition(QTabWidget::West); qApp->setLayoutDirection(Qt::RightToLeft); update_theme("refresh"); } } static void update_theme(QString newTheme) { // ok if (awf_gqss) { if (awf_trace) printf("\033[36m[trace]\033[00m update_theme(%s)*\n", newTheme.toUtf8().constData()); if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_before: %s » %s\n", current_theme.toUtf8().constData(), newTheme.toUtf8().constData()); if (newTheme == "refresh") { qputenv("GQSS_RELOAD", "yes"); QApplication::style()->polish(qApp); QApplication::processEvents(); window->adjustSize(); if (!opt_screenshot.isEmpty()) { if (take_screenshot()) update_statusbar(_app("Theme %1 reloaded, then screenshot saved (%2).").arg(current_theme).arg(opt_screenshot)); else update_statusbar(_app("Theme %1 reloaded (error saving screenshot).").arg(current_theme)); } else { update_statusbar(_app("Theme %1 reloaded.").arg(current_theme)); } if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_after1: %s\n", current_theme.toUtf8().constData()); } else if (newTheme == "auto") { current_theme = QString::fromUtf8(qgetenv("GQSS_THEME")); window->adjustSize(); if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_after2: %s\n", current_theme.toUtf8().constData()); } else if (current_theme != newTheme) { current_theme = newTheme; qputenv("GQSS_RELOAD", "yes"); qputenv("GQSS_THEME", newTheme.toUtf8()); if (!qEnvironmentVariableIsSet("GQSS_SIGNAL")) { // useless for changeEvent (notify_updated_gtktheme) QApplication::style()->polish(qApp); QApplication::processEvents(); } window->adjustSize(); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); if (awf_debug) printf("\033[33m[debug]\033[00m update_theme_after3: %s\n", current_theme.toUtf8().constData()); } original_style = "!^!"; } } static void update_statusbar(QString message) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m update_statusbar(%s)\n", message.toUtf8().constData()); if (window && window->statusBar()) { QStatusBar *statusbar = window->statusBar(); statusbar->showMessage(QTime::currentTime().toString("HH:mm:ss") + " - " + message, 0); QVariantAnimation *anim = new QVariantAnimation(statusbar); anim->setStartValue(QColor(255,255,0,255)); // yellow anim->setEndValue(window->palette().color(QPalette::Window)); anim->setDuration(1000); QObject::connect(anim, &QVariantAnimation::valueChanged, [statusbar](const QVariant &value) { QColor c = value.value(); statusbar->setStyleSheet(QString("background-color:rgba(%1,%2,%3,%4);").arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha())); }); QObject::connect(anim, &QVariantAnimation::finished, [statusbar]() { statusbar->setStyleSheet(""); }); anim->start(QAbstractAnimation::DeleteWhenStopped); } } static void update_values(QAbstractSlider *range) { // ok if (allow_update_values) { // range(0..100) allow_update_values = false; int value = range->value(); //if (awf_trace) // printf("\033[36m[trace]\033[00m update_values(%d)*\n", value); progress1->setValue(value); progress2->setValue(value); progress3->setValue(value); progress4->setValue(value); progress8->setValue(value); progress9->setValue(value); if (slider1 != range) slider1->setValue(value); if (slider2 != range) slider2->setValue(value); if (slider3 != range) slider3->setValue(value); if (slider4 != range) slider4->setValue(value); if (slider5 != range) slider5->setValue(value); if (slider6 != range) slider6->setValue(value); if (slider7 != range) slider7->setValue(value); // text progress8->setTextVisible(value > 50); progress8->setProperty("textVisible", value > 50); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(value > 50); progress9->setProperty("textVisible", value > 50); progress9->style()->polish(progress9); progress9->updateGeometry(); allow_update_values = true; } } static void update_widgets() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m update_widgets()\n"); // function called when user click on [+] toolbar button // when toggle = true, the [+] toolbar button is NOT checked int width1, width2, height1, height2; bool toggle = notebook1->tabBar()->usesScrollButtons(); // show progressbar in toolbar and statusbar when [+] toolbar button is NOT checked if (toggle) { qobject_cast(progress8->property("action").value())->setVisible(false); progress9->setVisible(false); qobject_cast(toolbarentry->property("action").value())->setVisible(false); } else { progress8->setValue(0); progress9->setValue(0); qobject_cast(progress8->property("action").value())->setVisible(true); progress9->setVisible(true); qobject_cast(toolbarentry->property("action").value())->setVisible(true); } // enabled or not slider2->setEnabled(toggle); slider4->setEnabled(toggle); slider6->setEnabled(toggle); slider7->setEnabled(toggle); progress2->setEnabled(toggle); progress4->setEnabled(toggle); // text or not progress1->setTextVisible(!toggle); progress1->setProperty("textVisible", !toggle); progress1->style()->polish(progress1); progress1->updateGeometry(); progress2->setTextVisible(!toggle); progress2->setProperty("textVisible", !toggle); progress2->style()->polish(progress2); progress2->updateGeometry(); progress3->setTextVisible(!toggle); progress3->setProperty("textVisible", !toggle); progress3->style()->polish(progress3); progress3->updateGeometry(); progress4->setTextVisible(!toggle); progress4->setProperty("textVisible", !toggle); progress4->style()->polish(progress4); progress4->updateGeometry(); progress8->setTextVisible(false); progress8->setProperty("textVisible", false); progress8->style()->polish(progress8); progress8->updateGeometry(); progress9->setTextVisible(false); progress9->setProperty("textVisible", false); progress9->style()->polish(progress9); progress9->updateGeometry(); // scrollable or not if (toggle) { notebook1->tabBar()->setUsesScrollButtons(false); notebook2->tabBar()->setUsesScrollButtons(false); notebook3->tabBar()->setUsesScrollButtons(false); notebook4->tabBar()->setUsesScrollButtons(false); notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height()); } else { notebook1->setMinimumWidth(width1 = notebook1->tabBar()->sizeHint().width() / 2); notebook2->setMinimumWidth(width2 = notebook2->tabBar()->sizeHint().width() / 2); notebook3->setMinimumHeight(height1 = notebook3->tabBar()->sizeHint().height() / 2); notebook4->setMinimumHeight(height2 = notebook4->tabBar()->sizeHint().height() / 2); notebook1->tabBar()->setUsesScrollButtons(true); notebook2->tabBar()->setUsesScrollButtons(true); notebook3->tabBar()->setUsesScrollButtons(true); notebook4->tabBar()->setUsesScrollButtons(true); } // auto width and height @todo notebook1->updateGeometry(); notebook2->updateGeometry(); notebook3->updateGeometry(); notebook4->updateGeometry(); QSplitter *hpane, *vpane; QWidget *widget = notebook1->parentWidget(); while (widget) { hpane = qobject_cast(widget); if (hpane) break; widget = widget->parentWidget(); } hpane->setSizes({qMax(width1, width2), 10000}); hpane->updateGeometry(); widget = widget->parentWidget(); while (widget) { vpane = qobject_cast(widget); if (vpane) break; widget = widget->parentWidget(); } QList sizes = vpane->sizes(); sizes[1] = qMax(height1, height2); vpane->setSizes(sizes); vpane->updateGeometry(); window->setMinimumHeight(0); window->setMinimumWidth(0); window->adjustSize(); } static void display_notification() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m display_notification()\n"); #if defined (Q_OS_UNIX) signal(SIGCHLD, SIG_IGN); if (fork() == 0) { execlp("notify-send", "notify-send", "-i", "dialog-information", "-t", "50000", "--action", _qt("QShortcut", "Close").toUtf8().constData(), GETTEXT_PACKAGE, _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.").toUtf8().constData(), null); _exit(1); } #endif } static bool findAndCheckMenu(QList actions, QString search) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m findAndCheckMenu()\n"); for (QAction *action : actions) { if (action->menu()) { // process submenu if (findAndCheckMenu(action->menu()->actions(), search)) return true; } else if (action->isEnabled() && (action->text() == search)) { // check menuitem action->trigger(); // set state checked and activate action return true; } } return false; } static void on_sighup(int signum) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m on_sighup()\n"); QMetaObject::invokeMethod(qApp, [](){ update_theme("refresh"); }, Qt::QueuedConnection); } static bool take_screenshot() { // ok (without window borders) if (awf_trace) printf("\033[36m[trace]\033[00m take_screenshot()\n"); QPixmap pixmap = window->grab(); return pixmap.save(opt_screenshot, "PNG", 0); // 0 = 9 } // layout and widgets static void create_window() { if (awf_trace) printf("\033[36m[trace]\033[00m create_window()\n"); // window QApplication::setApplicationName("awf"); window = new AwfMainWindow; window->setWindowTitle(_app("A widget factory - Qt %1.%2").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); window->setObjectName("AwfMainWindow"); window->installEventFilter(window); #if defined (Q_OS_UNIX) QApplication::setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); window->setWindowIcon(QIcon::fromTheme(GETTEXT_PACKAGE)); #elif defined (Q_OS_WIN) || defined (_WIN32) HICON hIcon = (HICON) LoadImage(GetModuleHandle(nullptr), "IDI_ICON1", IMAGE_ICON, 48, 48, LR_DEFAULTSIZE); QPixmap pixmap = QPixmap::fromImage(QImage::fromHICON(hIcon)); QApplication::setWindowIcon(QIcon(pixmap)); window->setWindowIcon(QIcon(pixmap)); DestroyIcon(hIcon); #endif // theme auto or from command line if (awf_gqss) update_theme((current_theme == opt_theme) ? current_theme : opt_theme); if (current_direction == 0) current_direction = (qApp->layoutDirection() == Qt::LeftToRight) ? 1 : 2; // layout AwfVBox *layout = new AwfVBox; QWidget *central = new QWidget; window->setCentralWidget(central); layout->setSpacing(0); layout->setContentsMargins(0,0,0,0); create_widgets(layout); central->setLayout(layout); QMenuBar *menubar = window->menuBar(); menubar->setContextMenuPolicy(Qt::PreventContextMenu); create_traditional_menubar(menubar); AwfToolBar *toolbar = new AwfToolBar; toolbar->setMovable(false); toolbar->setFloatable(false); toolbar->setContextMenuPolicy(Qt::PreventContextMenu); create_toolbar(toolbar); window->addToolBar(toolbar); update_statusbar(_app("Theme %1 loaded.").arg(current_theme)); progress9 = new QProgressBar; progress9->setMaximumWidth(140); progress9->setFixedHeight(16); progress9->setAttribute(Qt::WA_StyledBackground, true); // @todo not working progress9->setVisible(false); window->statusBar()->addPermanentWidget(progress9); QLocale locale; if ((locale.language() == QLocale::French) && (locale.territory() == QLocale::France)) progress9->setFormat("%p %"); // go go go update_text_direction(current_direction); #if defined (Q_OS_UNIX) if (awf_gqss) std::signal(SIGHUP, on_sighup); #endif window->show(); window->setAttribute(Qt::WA_DeleteOnClose); toolbar->widgetForAction(toolbar->actions().constFirst())->setFocus(Qt::TabFocusReason); // focus on the first toolbar button QObject::connect(qApp, &QCoreApplication::aboutToQuit, accels_save); #if defined (Q_OS_WIN) || defined (_WIN32) window->move(QGuiApplication::primaryScreen()->availableGeometry().center() - window->rect().center()); #endif } static void create_widgets(AwfVBox *root) { // todo if (awf_trace) printf("\033[36m[trace]\033[00m create_widgets()\n"); AwfHBox *hboxColumns = new AwfHBox; hboxColumns->setSpacing(0); hboxColumns->setContentsMargins(0,0,0,0); AwfVBox *vboxColumn1 = new AwfVBox, *vboxComboEntry = new AwfVBox, *vboxCheck = new AwfVBox, *vboxRadio = new AwfVBox; AwfHBox *hboxSpin = new AwfHBox, *hboxCheckRadio = new AwfHBox; vboxColumn1->setSpacing(0); vboxColumn1->setContentsMargins(5,5,5,5); vboxComboEntry->setSpacing(3); vboxComboEntry->setContentsMargins(5,5,5,5); hboxSpin->setSpacing(0); hboxSpin->setContentsMargins(5,5,5,5); hboxCheckRadio->setSpacing(0); hboxCheckRadio->setContentsMargins(5,5,5,5); vboxCheck->setSpacing(0); vboxCheck->setContentsMargins(0,0,0,0); vboxRadio->setSpacing(0); vboxRadio->setContentsMargins(0,0,0,0); AwfVBox *vboxColumn2 = new AwfVBox, *vboxButtons = new AwfVBox; AwfHBox *hboxBtns1 = new AwfHBox, *hboxBtns2 = new AwfHBox, *hboxBtns3 = new AwfHBox, *hboxBtns4 = new AwfHBox; vboxColumn2->setSpacing(0); vboxColumn2->setContentsMargins(5,5,5,5); vboxButtons->setSpacing(3); vboxButtons->setContentsMargins(5,5,5,5); hboxBtns1->setSpacing(3); hboxBtns1->setContentsMargins(5,5,5,5); hboxBtns2->setSpacing(3); hboxBtns2->setContentsMargins(5,5,5,5); hboxBtns3->setSpacing(3); hboxBtns3->setContentsMargins(5,5,5,5); hboxBtns4->setSpacing(3); hboxBtns4->setContentsMargins(5,5,5,5); AwfVBox *vboxColumn3 = new AwfVBox, *vboxProgress1 = new AwfVBox, *vboxProgress2 = new AwfVBox; AwfHBox *hboxProgress1 = new AwfHBox, *hboxProgress2 = new AwfHBox; vboxColumn3->setSpacing(0); vboxColumn3->setContentsMargins(5,5,5,5); vboxProgress1->setSpacing(10); vboxProgress1->setContentsMargins(6,6,6,6); vboxProgress2->setSpacing(10); vboxProgress2->setContentsMargins(5,5,5,5); hboxProgress1->setSpacing(10); hboxProgress1->setContentsMargins(5,5,5,5); hboxProgress2->setSpacing(10); hboxProgress2->setContentsMargins(5,5,5,5); AwfVBox *vboxColumn4 = new AwfVBox, *vboxOthers = new AwfVBox; AwfHBox *hboxLabel = new AwfHBox, *hboxSpinner = new AwfHBox; vboxColumn4->setSpacing(0); vboxColumn4->setContentsMargins(5,5,5,5); vboxOthers->setSpacing(3); vboxOthers->setContentsMargins(5,5,5,5); hboxLabel->setSpacing(0); hboxLabel->setContentsMargins(5,5,5,5); hboxSpinner->setSpacing(0); hboxSpinner->setContentsMargins(5,5,5,5); QSplitter *vpane = new QSplitter(Qt::Vertical), *hpane1 = new QSplitter(Qt::Horizontal), *hpane2 = new QSplitter(Qt::Horizontal); vpane->setContentsMargins(0,0,0,0); hpane1->setContentsMargins(0,0,0,0); hpane2->setContentsMargins(0,0,0,0); QWidget *wboxFrame1 = new QWidget, *wboxFrame2 = new QWidget, *wboxNotebook1 = new QWidget, *wboxNotebook2 = new QWidget; wboxFrame1->setContentsMargins(0,0,0,0); wboxFrame2->setContentsMargins(0,0,0,0); wboxNotebook1->setContentsMargins(0,0,0,0); wboxNotebook2->setContentsMargins(0,0,0,0); AwfHBox *hboxFrame1 = new AwfHBox, *hboxFrame2 = new AwfHBox, *hboxNotebook1 = new AwfHBox, *hboxNotebook2 = new AwfHBox; hboxFrame1->setSpacing(3); hboxFrame1->setContentsMargins(10,10,10,10); hboxFrame2->setSpacing(3); hboxFrame2->setContentsMargins(10,10,10,10); hboxNotebook1->setSpacing(3); hboxNotebook1->setContentsMargins(10,10,10,10); hboxNotebook2->setSpacing(3); hboxNotebook2->setContentsMargins(10,10,10,10); QFrame *sep1 = new QFrame, *sep2 = new QFrame, *sep3 = new QFrame, *sep4 = new QFrame; sep1->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep1->setFrameShadow(QFrame::Plain); sep1->setProperty("class", "separator vertical"); sep2->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep2->setFrameShadow(QFrame::Plain); sep2->setProperty("class", "separator vertical"); sep3->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::VLine); sep3->setFrameShadow(QFrame::Plain); sep3->setProperty("class", "separator vertical"); sep4->setFrameShape(awf_gqss ? QFrame::NoFrame : QFrame::HLine); sep4->setFrameShadow(QFrame::Plain); sep4->setProperty("class", "separator horizontal"); // columns layout root->addLayout(hboxColumns); // column 1 hboxColumns->addLayout(vboxColumn1); vboxColumn1->addLayout(vboxComboEntry); create_combos_entries(vboxComboEntry); vboxColumn1->addLayout(hboxSpin); create_spinbuttons(hboxSpin); vboxColumn1->addLayout(hboxCheckRadio); hboxCheckRadio->addLayout(vboxCheck); create_checkbuttons(vboxCheck); hboxCheckRadio->addLayout(vboxRadio); create_radiobuttons(vboxRadio); vboxColumn1->addStretch(); hboxColumns->addWidget(sep1); // column 2 hboxColumns->addLayout(vboxColumn2); vboxColumn2->addLayout(vboxButtons); vboxColumn2->addLayout(hboxBtns1); vboxColumn2->addLayout(hboxBtns2); vboxColumn2->addLayout(hboxBtns3); vboxColumn2->addLayout(hboxBtns4); create_otherbuttons(vboxButtons, hboxBtns1, hboxBtns2, hboxBtns3, hboxBtns4); vboxColumn2->addStretch(); hboxColumns->addWidget(sep2); // column 3 hboxColumns->addLayout(vboxColumn3); vboxColumn3->addLayout(vboxProgress1); vboxColumn3->addLayout(hboxProgress1); vboxColumn3->addLayout(hboxProgress2); vboxColumn3->addLayout(vboxProgress2); create_progressbars(vboxProgress1, hboxProgress1, hboxProgress2, vboxProgress2); vboxColumn3->addStretch(); hboxColumns->addWidget(sep3); // column 4 hboxColumns->addLayout(vboxColumn4); vboxColumn4->addLayout(vboxOthers); create_treeview(vboxOthers); vboxOthers->addLayout(hboxLabel); create_labels(hboxLabel); vboxOthers->addLayout(hboxSpinner); create_spinners(hboxSpinner); create_expander(vboxOthers); vboxColumn4->addStretch(); root->addWidget(sep4); // paned layout root->addWidget(vpane); vpane->addWidget(hpane1); wboxFrame1->setMinimumHeight(70); // The 70 wboxFrame1->setLayout(hboxFrame1); hpane1->addWidget(wboxFrame1); wboxFrame2->setMinimumHeight(70); // The 70 wboxFrame2->setLayout(hboxFrame2); hpane1->addWidget(wboxFrame2); create_frames(hboxFrame1, hboxFrame2); vpane->addWidget(hpane2); //wboxNotebook1->setMinimumHeight(120); // The 120 wboxNotebook1->setLayout(hboxNotebook1); hpane2->addWidget(wboxNotebook1); //wboxNotebook2->setMinimumHeight(120); // The 120 wboxNotebook2->setLayout(hboxNotebook2); hpane2->addWidget(wboxNotebook2); create_notebooks(hboxNotebook1, hboxNotebook2); hpane2->setSizes({wboxNotebook1->sizeHint().width(), 10000}); } static void create_toolbar(AwfToolBar *toolbar) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_toolbar()\n"); QToolButton *tool1, *tool2, *tool3, *tool4, *tool5, *tool6, *tool7, *tool8, *tool9; QAction *action1, *action2; QWidget *spacer; QMenu *menu; // QToolButton tool1 = new QToolButton; menu = new QMenu(tool1); menu->addAction("Menu item 1"); menu->addAction("Menu item 2"); menu->addAction("Menu item 3"); tool1->setMenu(menu); tool1->setIcon(get_icon("document-open")); tool1->setPopupMode(QToolButton::MenuButtonPopup); tool1->setProperty("hasMenu", true); QObject::connect(tool1, &QToolButton::clicked, dialog_open); tool2 = new QToolButton; tool2->setIcon(get_icon("document-open")); tool2->setPopupMode(QToolButton::MenuButtonPopup); tool2->setProperty("hasMenu", true); tool2->setEnabled(false); tool3 = new QToolButton; tool3->setIcon(get_icon("document-save")); QObject::connect(tool3, &QToolButton::clicked, dialog_save); tool4 = new QToolButton; tool4->setIcon(get_icon("view-refresh")); tool4->setEnabled(awf_gqss); QObject::connect(tool4, &QToolButton::clicked, [](){ on_sighup(0); }); tool5 = new QToolButton; tool5->setIcon(get_icon("camera-photo")); tool5->setEnabled(opt_screenshot.isEmpty() ? false : true); QObject::connect(tool5, &QToolButton::clicked, take_screenshot); tool6 = new QToolButton; tool6->setIcon(get_icon("dialog-information")); QObject::connect(tool6, &QToolButton::clicked, display_notification); #if defined (Q_OS_WIN) || defined (_WIN32) tool6->setEnabled(false); #endif tool7 = new QToolButton; tool7->setCheckable(true); tool7->setChecked(true); tool7->setIcon(get_icon("list-add")); QObject::connect(tool7, &QToolButton::clicked, update_widgets); tool8 = new QToolButton; tool8->setCheckable(true); tool8->setChecked(false); tool8->setIcon(get_icon("list-remove")); QObject::connect(tool8, &QToolButton::clicked, update_widgets); tool9 = new QToolButton; tool9->setCheckable(true); tool9->setChecked(false); tool9->setIcon(get_icon("window-close")); tool9->setEnabled(false); toolbarentry = new QLineEdit; toolbarentry->setPlaceholderText("..."); toolbarentry->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); spacer = new QWidget; spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); progress8 = new QProgressBar; progress8->setValue(0); progress8->setOrientation(Qt::Horizontal); progress8->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); QLocale locale; if ((locale.language() == QLocale::French) && (locale.territory() == QLocale::France)) progress8->setFormat("%p %"); // layout toolbar->addWidget(tool1); toolbar->addWidget(tool2); toolbar->addWidget(tool3); toolbar->addSeparator(); toolbar->addWidget(tool4); toolbar->addWidget(tool5); toolbar->addWidget(tool6); toolbar->addSeparator(); toolbar->addWidget(tool7); toolbar->addWidget(tool8); toolbar->addWidget(tool9); action1 = toolbar->addWidget(toolbarentry); toolbar->addWidget(spacer); action2 = toolbar->addWidget(progress8); // links action1->setVisible(false); toolbarentry->setProperty("action", QVariant::fromValue(action1)); action2->setVisible(false); progress8->setProperty("action", QVariant::fromValue(action2)); } static void create_combos_entries(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_combos_entries()\n"); QComboBox *combo1, *combo2, *combo3, *combo4; QLineEdit *entry1, *entry2, *entry3, *entry4; // QComboBox combo1 = new QComboBox; combo1->setEditable(true); combo1->addItem("Combo box entry 1"); combo1->addItem("Combo box entry 2"); combo2 = new QComboBox; combo2->setEditable(true); combo2->addItem("Combo box entry 1"); combo2->addItem("Combo box entry 2"); combo2->setDisabled(true); combo3 = new QComboBox; combo3->addItem("Combo box 1"); combo3->addItem("Combo box 2"); combo4 = new QComboBox; combo4->addItem("Combo box 1"); combo4->addItem("Combo box 2"); combo4->setDisabled(true); // QLineEdit entry1 = new QLineEdit; entry1->setText("Entry"); entry1->setPlaceholderText("Placeholder"); entry2 = new QLineEdit; entry2->setText("Entry"); entry2->setEnabled(false); entry3 = new QLineEdit; entry3->setText("Entry"); entry3->setClearButtonEnabled(true); entry3->setPlaceholderText("Placeholder"); entry4 = new QLineEdit; entry4->setText("Entry"); entry4->setClearButtonEnabled(true); entry4->setEnabled(false); // layout root->addWidget(combo1); root->addWidget(combo2); root->addWidget(combo3); root->addWidget(combo4); root->addWidget(entry1); root->addWidget(entry2); root->addWidget(entry3); root->addWidget(entry4); } static void create_spinbuttons(AwfHBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_spinbuttons()\n"); QSpinBox *spinbutton1, *spinbutton2; // QSpinBox spinbutton1 = new QSpinBox; spinbutton1->setRange(-100, 100); spinbutton1->setSingleStep(1); spinbutton1->setValue(1); spinbutton1->setFixedWidth(58); // like gtk2 spinbutton1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2 = new QSpinBox; spinbutton2->setRange(-100, 100); spinbutton2->setSingleStep(1); spinbutton2->setValue(1); spinbutton2->setFixedWidth(58); // like gtk2 spinbutton2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); spinbutton2->setEnabled(false); // layout root->addWidget(spinbutton1); root->addStretch(); root->addWidget(spinbutton2); } static void create_checkbuttons(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_checkbuttons()\n"); QCheckBox *checkbutton1, *checkbutton2, *checkbutton3, *checkbutton4, *checkbutton5, *checkbutton6; // QCheckBox checkbutton1 = new QCheckBox("Check btn 1"); checkbutton2 = new QCheckBox("Check btn 2"); checkbutton2->setChecked(true); checkbutton3 = new QCheckBox("Check btn 3"); checkbutton3->setTristate(true); checkbutton3->setCheckState(Qt::PartiallyChecked); checkbutton4 = new QCheckBox("Check btn 4"); checkbutton4->setEnabled(false); checkbutton5 = new QCheckBox("Check btn 5"); checkbutton5->setChecked(true); checkbutton5->setEnabled(false); checkbutton6 = new QCheckBox("Check btn 6"); checkbutton6->setTristate(true); checkbutton6->setCheckState(Qt::PartiallyChecked); checkbutton6->setEnabled(false); // layout root->addWidget(checkbutton1); root->addWidget(checkbutton2); root->addWidget(checkbutton3); root->addWidget(checkbutton4); root->addWidget(checkbutton5); root->addWidget(checkbutton6); } static void create_radiobuttons(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_radiobuttons()\n"); QRadioButton *radiobutton1, *radiobutton2, *radiobutton3, *radiobutton4, *radiobutton5, *radiobutton6; QButtonGroup *group1, *group2; // QRadioButton radiobutton1 = new QRadioButton("Radio btn 1"); radiobutton2 = new QRadioButton("Radio btn 2"); radiobutton2->setChecked(true); radiobutton3 = new QRadioButton("Radio btn 3"); radiobutton3->setCheckable(true); radiobutton4 = new QRadioButton("Radio btn 4"); radiobutton4->setEnabled(false); radiobutton5 = new QRadioButton("Radio btn 5"); radiobutton5->setChecked(true); radiobutton5->setEnabled(false); radiobutton6 = new QRadioButton("Radio btn 6"); radiobutton6->setCheckable(true); radiobutton6->setEnabled(false); // QButtonGroup group1 = new QButtonGroup(root); group1->addButton(radiobutton1); group1->addButton(radiobutton2); group1->addButton(radiobutton3); group2 = new QButtonGroup(root); group2->addButton(radiobutton4); group2->addButton(radiobutton5); group2->addButton(radiobutton6); // layout root->addWidget(radiobutton1); root->addWidget(radiobutton2); root->addWidget(radiobutton3); root->addWidget(radiobutton4); root->addWidget(radiobutton5); root->addWidget(radiobutton6); } static void create_otherbuttons(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfHBox *root4, AwfHBox *root5) { //ok if (awf_trace) printf("\033[36m[trace]\033[00m create_otherbuttons()\n"); // QPushButton QPushButton *button1, *button2, *button3, *button4; button1 = new QPushButton("Button 1"); button2 = new QPushButton("Button 2"); button2->setEnabled(false); button3 = new QPushButton("Button 3"); button3->setCheckable(true); button3->setChecked(true); button4 = new QPushButton("Button 4"); button4->setCheckable(true); button4->setChecked(true); button4->setEnabled(false); // QPushButton for dialogs QPushButton *button5, *button6, *button7, *button8; button5 = new QPushButton(_app("Choose a color")); button5->setMinimumWidth(186); // The 186 button5->setProperty("class", "awf-cheatcode-colorbtn"); QObject::connect(button5, &QPushButton::clicked, [=](){ QColorDialog::getColor(QColor("#7796ba"), window, "QColorDialog"); }); button6 = new QPushButton(_app("Choose a font")); button6->setMinimumWidth(186); // The 186 button6->setProperty("class", "awf-cheatcode-fontbtn"); QObject::connect(button6, &QPushButton::clicked, [=](){ bool ok; QFontDialog::getFont(&ok, QFont(), window, "QFontDialog"); }); button7 = new QPushButton(_app("Choose a file")); button7->setMinimumWidth(186); // The 186 button7->setProperty("class", "awf-cheatcode-filebtn"); QObject::connect(button7, &QPushButton::clicked, [=](){ QFileDialog::getOpenFileName(window, "QFileDialog:Open"); }); button8 = new QPushButton(_app("Choose a folder")); button8->setMinimumWidth(186); // The 186 button8->setProperty("class", "awf-cheatcode-folderbtn"); QObject::connect(button8, &QPushButton::clicked, [=](){ QFileDialog::getExistingDirectory(window, "QFileDialog:Open"); }); // Other QFontComboBox *button9; QDoubleSpinBox *button10; button9 = new QFontComboBox; button9->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); button9->setMinimumContentsLength(8); button10 = new QDoubleSpinBox; button10->setRange(-100, 100); button10->setSingleStep(1); button10->setValue(1); button10->setSuffix(" mm"); button10->setPrefix("± "); // layout root1->addWidget(button1); root1->addWidget(button2); root1->addWidget(button3); root1->addWidget(button4); root1->addWidget(button5); root1->addWidget(button6); root1->addWidget(button7); root1->addWidget(button8); root2->addWidget(button9); root3->addWidget(button10); root4->addStretch(); root5->addStretch(); } static void create_progressbars(AwfVBox *root1, AwfHBox *root2, AwfHBox *root3, AwfVBox *root4) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_progressbars()\n"); // QProgressBar progress1 = new QProgressBar; progress1->setOrientation(Qt::Horizontal); progress1->setTextVisible(false); progress1->setValue(50); progress2 = new QProgressBar; progress2->setOrientation(Qt::Horizontal); progress2->setTextVisible(false); progress2->setValue(50); progress2->setInvertedAppearance(true); progress2->setProperty("isInverted", true); progress3 = new QProgressBar; progress3->setOrientation(Qt::Vertical); progress3->setTextVisible(false); progress3->setValue(50); progress3->setFixedHeight(100); progress3->setInvertedAppearance(true); progress3->setProperty("isInverted", true); progress4 = new QProgressBar; progress4->setOrientation(Qt::Vertical); progress4->setTextVisible(false); progress4->setValue(50); progress4->setFixedHeight(100); QLocale locale; if ((locale.language() == QLocale::French) && (locale.territory() == QLocale::France)) { progress1->setFormat("%p %"); progress2->setFormat("%p %"); progress3->setFormat("%p %"); progress4->setFormat("%p %"); } // QSlider slider1 = create_horizontal_slider(50, false, false, QSlider::NoTicks); QObject::connect(slider1, &QSlider::valueChanged, [=](){ update_values(slider1); }); slider2 = create_horizontal_slider(50, false, true, QSlider::NoTicks); QObject::connect(slider2, &QSlider::valueChanged, [=](){ update_values(slider2); }); slider3 = create_vertical_slider(50, false, !false, QSlider::NoTicks); QObject::connect(slider3, &QSlider::valueChanged, [=](){ update_values(slider3); }); slider4 = create_vertical_slider(50, false, !true, QSlider::NoTicks); QObject::connect(slider4, &QSlider::valueChanged, [=](){ update_values(slider4); }); slider5 = create_vertical_slider(50, false, !false, QSlider::TicksAbove); QObject::connect(slider5, &QSlider::valueChanged, [=](){ update_values(slider5); }); slider6 = create_vertical_slider(50, false, !true, QSlider::TicksBelow); QObject::connect(slider6, &QSlider::valueChanged, [=](){ update_values(slider6); }); slider7 = create_vertical_slider(50, false, !true, QSlider::TicksBothSides); QObject::connect(slider7, &QSlider::valueChanged, [=](){ update_values(slider7); }); // layout root1->addWidget(progress1); root1->addWidget(progress2); root1->addWidget(slider1); root1->addWidget(slider2); root2->addWidget(progress3); root2->addWidget(progress4); root2->addStretch(); root3->addWidget(slider3); root3->addWidget(slider5); root3->addWidget(slider6); root3->addWidget(slider4); root3->addWidget(slider7); root3->addStretch(); root4->addStretch(); } static void create_labels(AwfHBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_labels()\n"); QLabel *label1, *label2; // QLabel label1 = new QLabel("Label 1"); label2 = new QLabel("Label 2"); label2->setEnabled(false); // layout root->addWidget(label1); root->addStretch(); root->addWidget(label2); root->addStretch(); } static void create_spinners(AwfHBox *root) { } static void create_expander(AwfVBox *root) { // todo if (awf_trace) printf("\033[36m[trace]\033[00m create_expander()\n"); QGroupBox *expander; QTextEdit *text; // QGroupBox expander = new QGroupBox(_app("More...")); expander->setCheckable(true); expander->setChecked(true); // QTextEdit text = new QTextEdit; text->setFixedHeight(120); text->setMinimumWidth(160); text->setWordWrapMode(QTextOption::WordWrap); text->setText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.") + " " + _app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); // layout AwfVBox *expanderLayout = new AwfVBox(expander); expanderLayout->addWidget(text); root->addWidget(expander); } static void create_frames(AwfHBox *root1, AwfHBox *root2) { // todo if (awf_trace) printf("\033[36m[trace]\033[00m create_frames()\n"); QGroupBox *frame1, *frame2, *frame3, *frame4; // QGroupBox frame1 = new QGroupBox("Frame (shadow in)"); frame1->setProperty("class", "border-inset"); frame2 = new QGroupBox("Frame (shadow out)"); frame2->setProperty("class", "border-outset"); frame3 = new QGroupBox("Frame (shadow etched in)"); frame3->setProperty("class", "border-groove"); frame4 = new QGroupBox("Frame (shadow etched out)"); frame4->setProperty("class", "border-ridge"); frame4->setEnabled(false); // layout root1->addWidget(frame1); root1->addWidget(frame2); root2->addWidget(frame3); root2->addWidget(frame4); } static void create_notebooks(AwfHBox *root1, AwfHBox *root2) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_notebooks()\n"); // QTabWidget notebook1 = new QTabWidget; notebook1->setTabPosition(QTabWidget::North); notebook1->setTabsClosable(false); notebook1->setUsesScrollButtons(false); notebook1->tabBar()->setExpanding(false); notebook1->tabBar()->setMovable(true); create_notebook_tab(notebook1, "Tab1", null, false); create_notebook_tab(notebook1, "Tab2", null, false); create_notebook_tab(notebook1, "Tab3", null, true); create_notebook_tab(notebook1, "Tab4", null, true); notebook2 = new QTabWidget; notebook2->setTabPosition(QTabWidget::South); notebook2->setTabsClosable(false); notebook2->setUsesScrollButtons(false); notebook2->tabBar()->setExpanding(false); notebook2->tabBar()->setMovable(true); create_notebook_tab(notebook2, "Tab1", null, false); create_notebook_tab(notebook2, "Tab2", null, false); create_notebook_tab(notebook2, "Tab3", null, true); create_notebook_tab(notebook2, "Tab4", null, true); notebook3 = new QTabWidget; notebook3->setTabPosition(QTabWidget::West); notebook3->setTabsClosable(false); notebook3->setUsesScrollButtons(false); notebook3->tabBar()->setExpanding(false); notebook3->tabBar()->setMovable(true); create_notebook_tab(notebook3, "T1", null, false); create_notebook_tab(notebook3, "Tab2", null, false); create_notebook_tab(notebook3, "T3b", null, true); create_notebook_tab(notebook3, "T4", null, true); notebook4 = new QTabWidget; notebook4->setTabPosition(QTabWidget::East); notebook4->setTabsClosable(false); notebook4->setUsesScrollButtons(false); notebook4->tabBar()->setExpanding(false); notebook4->tabBar()->setMovable(true); create_notebook_tab(notebook4, "T1", null, false); create_notebook_tab(notebook4, "Tab2", null, false); create_notebook_tab(notebook4, "T3b", null, true); create_notebook_tab(notebook4, "T4", null, true); // layout notebook1->setMinimumWidth(notebook1->tabBar()->sizeHint().width()); notebook2->setMinimumWidth(notebook2->tabBar()->sizeHint().width()); notebook3->setMinimumHeight(notebook3->tabBar()->sizeHint().height()); notebook4->setMinimumHeight(notebook4->tabBar()->sizeHint().height()); root1->addWidget(notebook1); root1->addWidget(notebook2); root2->addWidget(notebook3); root2->addWidget(notebook4); } static void create_notebook_tab(QTabWidget *notebook, QString text, QWidget *content, bool close) { // todo if (!content) content = new QWidget; content->setAutoFillBackground(true); if ((notebook->tabPosition() == QTabWidget::West) || (notebook->tabPosition() == QTabWidget::East)) { // @todo force horizontal tab for vertical tabs bar if (close) { QWidget *layout = new QWidget; layout->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat AwfHBox *hbox = new AwfHBox(layout); hbox->setContentsMargins(0, 0, 0, 0); hbox->addWidget(new QLabel(text)); hbox->addWidget(btn); layout->setLayout(hbox); notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, layout); } else { notebook->tabBar()->setTabButton(notebook->addTab(content, ""), QTabBar::LeftSide, new QLabel(text)); } } else if (close) { QToolButton *btn = new QToolButton; btn->setIcon(get_icon("window-close")); btn->setIconSize(QSize(16, 16)); btn->setAutoRaise(true); // flat notebook->tabBar()->setTabButton(notebook->addTab(content, text), QTabBar::RightSide, btn); } else { notebook->addTab(content, text); } } static void create_treeview(AwfVBox *root) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_treeview()\n"); QStandardItemModel *model = new QStandardItemModel; model->setColumnCount(11); model->setHorizontalHeaderLabels({ "i", "c", "r", "Text", "Progress", "Progress", "Text", "Icon", "Icon", "c", "r" }); auto addRow = [&](int a, bool b, bool c, QString d, int e, int f, QString g, QString h, QString i, bool j, bool k) { QList items; auto it0 = new QStandardItem; it0->setData(a, Qt::DisplayRole); auto it1 = new QStandardItem; it1->setData(b ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it1->setEditable(false); auto it2 = new QStandardItem; it2->setData(c ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it2->setEditable(false); auto it3 = new QStandardItem; it3->setData(d, Qt::DisplayRole); auto it4 = new QStandardItem; it4->setData(e, Qt::DisplayRole); it4->setEditable(false); auto it5 = new QStandardItem; it5->setData(f, Qt::DisplayRole); it5->setEditable(false); it5->setEnabled(false); auto it6 = new QStandardItem; it6->setData(g, Qt::DisplayRole); it6->setEditable(false); it6->setEnabled(false); auto it7 = new QStandardItem; it7->setIcon(get_icon(h)); it7->setEditable(false); auto it8 = new QStandardItem; it8->setIcon(get_icon(i)); it8->setEditable(false); it8->setEnabled(false); auto it9 = new QStandardItem; it9->setData(j ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it9->setEditable(false); it9->setEnabled(false); auto it10 = new QStandardItem; it10->setData(k ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); it10->setEditable(false); it10->setEnabled(false); items << it0 << it1 << it2 << it3 << it4 << it5 << it6 << it7 << it8 << it9 << it10; model->appendRow(items); }; addRow(1, false, false, "Text 1.1", 0, 0, "Text 1.2", "document-open", "document-open", false, false); addRow(2, true, true, "Text 2.1", 10, 10, "Text 2.2", "document-save", "document-save", true, true); addRow(3, false, false, "Text 3.1", 20, 20, "Text 3.2", "document-save-as", "document-save-as", false, false); addRow(4, true, true, "Text 4.1", 30, 30, "Text 4.2", "view-refresh", "view-refresh", true, true); addRow(5, false, false, "Text 5.1", 40, 40, "Text 5.2", "edit-cut", "edit-cut", false, false); addRow(6, true, true, "Text 6.1", 50, 50, "Text 6.2", "help-browser", "help-browser", true, true); addRow(7, false, false, "Text 7.1", 60, 60, "Text 7.2", "document-open", "document-open", false, false); addRow(8, true, true, "Text 8.1", 70, 70, "Text 8.2", "document-save", "document-save", true, true); addRow(9, false, false, "Text 9.1", 80, 80, "Text 9.2", "document-save-as", "document-save-as", false, false); addRow(10, true, true, "Text 10.1", 90, 90, "Text 10.2", "view-refresh", "view-refresh", true, true); addRow(11, false, false, "Text 11.1", 100, 100, "Text 11.2", "edit-cut", "edit-cut", false, false); // QTreeView AwfTreeView *view = new AwfTreeView; // same as QTreeView *view = new QTreeView; but with QSS columns width support view->setFixedHeight(200); // The 200 view->setMinimumWidth(200); // The 200 model->setParent(view); view->setModel(model); view->setSortingEnabled(true); view->setRootIsDecorated(false); view->setItemsExpandable(false); view->setAlternatingRowColors(true); view->sortByColumn(0, Qt::AscendingOrder); view->setItemDelegateForColumn(2, new AwfRadioDelegate(view)); view->setItemDelegateForColumn(4, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(5, new AwfProgressDelegate(view)); view->setItemDelegateForColumn(10, new AwfRadioDelegate(view)); view->header()->setStretchLastSection(false); view->header()->setMinimumSectionSize(16); for (int c = 0; c < model->columnCount(); ++c) view->resizeColumnToContents(c); view->header()->setSectionResizeMode(QHeaderView::Interactive); root->addWidget(view); } static void create_sliders(QTabWidget *notebook, QString text, QSlider::TickPosition position) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_sliders()\n"); AwfHBox *hbox = new AwfHBox; AwfVBox *vbox1 = new AwfVBox, *vbox2 = new AwfVBox, *vbox3 = new AwfVBox; AwfHBox *hboxa = new AwfHBox, *hboxb = new AwfHBox; QSlider *slider1v, *slider2v, *slider3v, *slider4v, *slider5v, *slider6v, *slider7v, *slider8v, *slider9v, *slider10v, *slider11v, *slider12v; QSlider *slider1h, *slider2h, *slider3h, *slider4h, *slider5h, *slider6h, *slider7h, *slider8h, *slider9h, *slider10h, *slider11h, *slider12h; int value = slider1->value(); // vertical sliders slider1v = create_vertical_slider(value, false, false, position); slider2v = create_vertical_slider(value, false, false, position); slider3v = create_vertical_slider(value, false, false, position); slider4v = create_vertical_slider(value, true, false, position); slider5v = create_vertical_slider(value, true, false, position); slider6v = create_vertical_slider(value, true, false, position); slider7v = create_vertical_slider(value, false, true, position); slider8v = create_vertical_slider(value, false, true, position); slider9v = create_vertical_slider(value, false, true, position); slider10v = create_vertical_slider(value, true, true, position); slider11v = create_vertical_slider(value, true, true, position); slider12v = create_vertical_slider(value, true, true, position); // horizontal sliders slider1h = create_horizontal_slider(value, false, false, position); slider2h = create_horizontal_slider(value, false, false, position); slider3h = create_horizontal_slider(value, false, false, position); slider4h = create_horizontal_slider(value, true, false, position); slider5h = create_horizontal_slider(value, true, false, position); slider6h = create_horizontal_slider(value, true, false, position); slider7h = create_horizontal_slider(value, false, true, position); slider8h = create_horizontal_slider(value, false, true, position); slider9h = create_horizontal_slider(value, false, true, position); slider10h = create_horizontal_slider(value, true, true, position); slider11h = create_horizontal_slider(value, true, true, position); slider12h = create_horizontal_slider(value, true, true, position); // layout hbox->addLayout(vbox1); vbox1->addWidget(slider1h); vbox1->addWidget(slider2h); vbox1->addWidget(slider3h); vbox1->addWidget(slider4h); vbox1->addWidget(slider5h); vbox1->addWidget(slider6h); hbox->addLayout(vbox2); vbox2->addLayout(hboxa); hboxa->addWidget(slider1v); hboxa->addWidget(slider2v); hboxa->addWidget(slider3v); hboxa->addWidget(slider7v); hboxa->addWidget(slider8v); hboxa->addWidget(slider9v); vbox2->addLayout(hboxb); hboxb->addWidget(slider4v); hboxb->addWidget(slider5v); hboxb->addWidget(slider6v); hboxb->addWidget(slider10v); hboxb->addWidget(slider11v); hboxb->addWidget(slider12v); hbox->addLayout(vbox3); vbox3->addWidget(slider7h); vbox3->addWidget(slider8h); vbox3->addWidget(slider9h); vbox3->addWidget(slider10h); vbox3->addWidget(slider11h); vbox3->addWidget(slider12h); QWidget *container = new QWidget; container->setLayout(hbox); create_notebook_tab(notebook, text, container, false); } static QSlider* create_horizontal_slider(int value, bool draw, bool inverted, QSlider::TickPosition position) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_horizontal_slider()\n"); QSlider *slider = new QSlider(Qt::Horizontal); slider->setRange(0, 100); slider->setValue(value); slider->setInvertedAppearance(inverted); if (inverted) slider->setProperty("isInverted", true); // draw does not exists slider->setTickPosition(position); slider->setFixedWidth(186); // The 186 slider->setTracking(true); switch (position) { case QSlider::NoTicks: slider->setProperty("hasTicks", "NoTicks"); break; case QSlider::TicksAbove: slider->setProperty("hasTicks", "TicksAbove"); break; case QSlider::TicksBelow: slider->setProperty("hasTicks", "TicksBelow"); break; case QSlider::TicksBothSides: slider->setProperty("hasTicks", "TicksBothSides"); break; } return slider; } static QSlider* create_vertical_slider(int value, bool draw, bool inverted, QSlider::TickPosition position) { // ok if (awf_trace) printf("\033[36m[trace]\033[00m create_vertical_slider()\n"); QSlider *slider = new QSlider(Qt::Vertical); slider->setRange(0, 100); slider->setValue(value); slider->setInvertedAppearance(inverted); if (inverted) slider->setProperty("isInverted", true); // draw does not exists slider->setTickPosition(position); slider->setFixedHeight(100); // The 100 slider->setTracking(true); switch (position) { case QSlider::NoTicks: slider->setProperty("hasTicks", "NoTicks"); break; case QSlider::TicksAbove: slider->setProperty("hasTicks", "TicksAbove"); break; case QSlider::TicksBelow: slider->setProperty("hasTicks", "TicksBelow"); break; case QSlider::TicksBothSides: slider->setProperty("hasTicks", "TicksBothSides"); break; } return slider; } // traditional menu static void create_traditional_menubar(QMenuBar *root) { if (awf_trace) printf("\033[36m[trace]\033[00m create_traditional_menubar()\n"); static AwfShortcutFilter *shortcutFilter = new AwfShortcutFilter(window); QMenu *menu, *submenu, *base; QActionGroup *group; QAction *menuitem; bool ok, noRefresh = !awf_gqss, noPrint = false; #if ! defined (QT_PRINTSUPPORT_LIB) noPrint = true; #endif // options menu = root->addMenu(_app("_Options")); menu->installEventFilter(shortcutFilter); // @todo option command line? if (qEnvironmentVariableIsSet("AWF_TEAROFF")) menu->setTearOffEnabled(true); create_menuitem(menu, get_icon("document-open"), _qt("QFileDialog", "&Open"), false, AWF_ACCEL_OPEN, AWF_OPEN, dialog_open); create_menuitem(menu, QIcon(), _app("Open recent file"), true, AWF_ACCEL_RECE, AWF_RECE, null); create_menuitem(menu, get_icon("document-save"), _qt("QFileDialog", "&Save"), false, AWF_ACCEL_SAVE, AWF_SAVE, dialog_save); create_menuitem(menu, get_icon("view-refresh"), _app("_Refresh"), noRefresh, AWF_ACCEL_REFR, AWF_REFR, [](){ on_sighup(0); }); create_menuitem(menu, QIcon(), _app("Calendar"), false, AWF_ACCEL_CALE, AWF_CALE, dialog_calendar); create_menuitem(menu, QIcon(), "Sliders", false, AWF_ACCEL_SCAL, AWF_SCAL, dialog_sliders); create_menuitem(menu, get_icon("document-properties"), _app("Properties"), false, AWF_ACCEL_PROP, AWF_PROP, dialog_message); create_menuitem(menu, get_icon("document-page-setup"),_app("Page Set&up"), noPrint, AWF_ACCEL_PRSE, AWF_PRSE, dialog_page_setup); create_menuitem(menu, get_icon("document-print"), _qt("QPrintDialog", "&Print"), noPrint, AWF_ACCEL_PRIN, AWF_PRIN, dialog_print); submenu = menu->addMenu(_app("More...")); submenu->installEventFilter(shortcutFilter); create_menuitem(submenu, get_icon("edit-cut"), _qt("QLineEdit", "Cu&t"), false, AWF_ACCEL_MCUT, AWF_MCUT, null); create_menuitem(submenu, get_icon("edit-copy"), _qt("QLineEdit", "&Copy"), false, AWF_ACCEL_MCOP, AWF_MCOP, null); create_menuitem(submenu, get_icon("edit-paste"), _qt("QLineEdit", "&Paste"), false, AWF_ACCEL_MPAS, AWF_MPAS, null); submenu = menu->addMenu(_app("Less...")); submenu->setEnabled(false); menu->addSeparator(); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, false); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, false); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, false); create_menuitem_check(menu, QString("Check 1 %1").arg(_app("(unchecked)")), false, false, true); create_menuitem_check(menu, QString("Check 2 %1").arg(_app("(checked)")), true, false, true); create_menuitem_check(menu, QString("Check 3 %1").arg(_app("(inconsistent)")), false, true, true); menu->addSeparator(); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, false, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, false, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, false, group); group = new QActionGroup(window); group->setExclusive(true); create_menuitem_radio(menu, QString("Radio 1 %1").arg(_app("(unchecked)")), false, false, true, group); create_menuitem_radio(menu, QString("Radio 2 %1").arg(_app("(checked)")), true, false, true, group); create_menuitem_radio(menu, QString("Radio 3 %1").arg(_app("(inconsistent)")), false, true, true, group); menu->addSeparator(); create_menuitem(menu, get_icon("window-close"), _qt("QMdiSubWindow", "&Close"), true, AWF_ACCEL_CLOS, AWF_CLOS, null); create_menuitem(menu, get_icon("application-exit"), _qt("QCocoaMenuItem", "Quit"), false, AWF_ACCEL_QUIT, AWF_QUIT, qApp->quit); // system themes ok = false; group = new QActionGroup(window); group->setExclusive(true); menu = root->addMenu(_app("_System themes")); for (QString theme : list_system_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } if (list_user_theme.contains(theme)) { menuitem = create_menuitem_radio(base, theme, false, false, true, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } else { menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_system_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // user themes ok = false; menu = root->addMenu(_app("_User themes")); for (QString theme : list_user_theme) { if (theme == "Azertyuiop") { submenu = menu->addMenu(theme); base = submenu; ok = true; } else if (ok && theme.startsWith("Azertyuiop")) { base = submenu; } else { base = menu; ok = false; } menuitem = create_menuitem_radio(base, theme, false, false, false, group); if (theme == current_theme) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [theme](){ update_theme(theme); }); } if (noRefresh) create_menuitem(menu, QIcon(), _app("GlobalQSS not available"), true, QKeySequence(), null, null); else if (list_user_theme.isEmpty()) create_menuitem(menu, QIcon(), _app("No themes found"), true, QKeySequence(), null, null); // text direction menu = root->addMenu(_app("_Text direction")); group = new QActionGroup(window); group->setExclusive(true); menuitem = create_menuitem_radio(menu, _app("Left to Right (LTR)"), false, false, false, group); if (current_direction == 1) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(1); }); // Qt::LeftToRight menuitem = create_menuitem_radio(menu, _app("Right to Left (RTL)"), false, false, false, group); if (current_direction == 2) menuitem->setChecked(true); QObject::connect(menuitem, &QAction::triggered, [](){ update_text_direction(2); }); // Qt::RightToLeft // help menu = root->addMenu(_qt("QWizard", "&Help")); menu->installEventFilter(shortcutFilter); create_menuitem(menu, QIcon(), "QtInspector", false, AWF_ACCEL_INSP, AWF_INSP, dialog_inspector); create_menuitem(menu, get_icon("help-about"), _qt("QCocoaMenuItem", "About"), false, AWF_ACCEL_ABOU, AWF_ABOU, dialog_about); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x accels_load(); } static QAction* create_menuitem_check(QMenu *menu, QString text, bool chk, bool ist, bool dsb) { if (awf_trace) printf("\033[36m[trace]\033[00m create_menuitem_check(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, window); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem_radio(QMenu *menu, QString text, bool chk, bool ist, bool dsb, QActionGroup *group) { if (awf_trace) printf("\033[36m[trace]\033[00m create_menuitem_radio(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(text, group); menuitem->setCheckable(true); menuitem->setChecked(chk); // @todo inconsistent (ist) menuitem->setEnabled(!dsb); menu->addAction(menuitem); return menuitem; } static QAction* create_menuitem(QMenu *menu, QIcon icon, QString text, bool dsb, QKeySequence acl, QString kmp, std::function function) { if (awf_trace) printf("\033[36m[trace]\033[00m create_menuitem(%s)\n", text.toUtf8().constData()); QAction *menuitem; menuitem = new QAction(icon, text, window); menuitem->setShortcut(acl); menuitem->setEnabled(!dsb); if (!kmp.isEmpty()) menuitem->setObjectName(kmp); if (function) QObject::connect(menuitem, &QAction::triggered, function); menu->addAction(menuitem); return menuitem; } static void accels_load() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m accels_load()\n"); QString oldPath = QDir::homePath() + "/.awf-gtk-accels"; if (QFile::exists(oldPath)) QFile::rename(oldPath, QDir::homePath() + "/.awf-accels"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.exists() && f.open(QIODevice::ReadOnly | QIODevice::Text)) { QMap accels; QMap actions; QString kmp, acl; auto parseModifiers = [](QString mod) { Qt::KeyboardModifiers m = Qt::NoModifier; if (mod.contains("Primary")) m |= static_cast(Qt::CTRL); if (mod.contains("Shift")) m |= static_cast(Qt::SHIFT); if (mod.contains("Alt")) m |= static_cast(Qt::ALT); if (mod.contains("Meta")) m |= static_cast(Qt::META); return m; }; auto parseKey = [](QString keyStr) { if (keyStr.length() == 1) return static_cast(keyStr.toUpper().at(0).unicode()); if ((keyStr.compare("Delete", Qt::CaseInsensitive) == 0) || (keyStr.compare("Del", Qt::CaseInsensitive) == 0)) return Qt::Key_Delete; if (keyStr.compare("Return", Qt::CaseInsensitive) == 0) return Qt::Key_Return; if (keyStr.compare("F1", Qt::CaseInsensitive) == 0) return Qt::Key_F1; if (keyStr.compare("F2", Qt::CaseInsensitive) == 0) return Qt::Key_F2; if (keyStr.compare("F3", Qt::CaseInsensitive) == 0) return Qt::Key_F3; if (keyStr.compare("F4", Qt::CaseInsensitive) == 0) return Qt::Key_F4; if (keyStr.compare("F5", Qt::CaseInsensitive) == 0) return Qt::Key_F5; if (keyStr.compare("F6", Qt::CaseInsensitive) == 0) return Qt::Key_F6; if (keyStr.compare("F7", Qt::CaseInsensitive) == 0) return Qt::Key_F7; if (keyStr.compare("F8", Qt::CaseInsensitive) == 0) return Qt::Key_F8; if (keyStr.compare("F9", Qt::CaseInsensitive) == 0) return Qt::Key_F9; if (keyStr.compare("F10", Qt::CaseInsensitive) == 0) return Qt::Key_F10; if (keyStr.compare("F11", Qt::CaseInsensitive) == 0) return Qt::Key_F11; if (keyStr.compare("F12", Qt::CaseInsensitive) == 0) return Qt::Key_F12; return Qt::Key_unknown; }; // read file // QMap accels QTextStream in(&f); while (!in.atEnd()) { //; (gtk_accel_path "/Test/Print" "p") QString l = in.readLine().trimmed(); if (l.isEmpty() || l.startsWith(';')) continue; int a = l.indexOf('"'); if (a < 0) continue; int b = l.indexOf('"', a + 1); if (b < 0) continue; int c = l.indexOf('"', b + 1); if (c < 0) continue; int d = l.indexOf('"', c + 1); if (d < 0) continue; kmp = l.mid(a + 1, b - a - 1); acl = l.mid(c + 1, d - c - 1); if (kmp.isEmpty()) continue; if (awf_debug) printf("\033[33m[debug]\033[00m accels_foundInFile: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); accels.insert(kmp, acl); } f.close(); // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (accels.contains(kmp)) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (accels.contains(kmp)) actions.insert(kmp, action); } } } // apply shortcuts for (QString tmp : actions.keys()) { kmp = tmp; acl = accels.value(kmp); if (awf_debug) printf("\033[33m[debug]\033[00m accels_foundInMenu: %s %s\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); if (acl.isEmpty()) { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence()); } else { Qt::KeyboardModifiers mods = parseModifiers(acl); acl.remove(QRegularExpression("<.*>")); Qt::Key key = parseKey(acl); if (key == Qt::Key_unknown) { printf("\033[33m[debug]\033[00m accels_foundInMenu: %s %s » unknown key\n", kmp.toUtf8().constData(), acl.toUtf8().constData()); } else { actions.value(kmp)->setProperty("shortcutModified", true); actions.value(kmp)->setShortcut(QKeySequence(key | mods)); } } } } } static bool accels_change(QObject *obj, QEvent *event) { // ok // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x if (event->type() != QEvent::KeyPress) return false; QMenu *menu = qobject_cast(obj); if (!menu || !menu->activeAction()) return false; QAction *menuitem = menu->activeAction(); if (menuitem->objectName().isEmpty()) return false; QKeyEvent *keyEvent = static_cast(event); int key = keyEvent->key(); if ((key == Qt::Key_Control) || (key == Qt::Key_Shift) || (key == Qt::Key_Meta) || (key == Qt::Key_Alt)) return false; if (awf_trace) printf("\033[36m[trace]\033[00m accels_change()\n"); Qt::KeyboardModifiers mods = keyEvent->modifiers(); bool del = (key == Qt::Key_Delete) || (key == Qt::Key_Backspace); if ( del || // f1..12 ((key >= Qt::Key_F1) && (key <= Qt::Key_F12)) || // ctrl/shift/super/alt + ? mods ) { must_save_accels = true; QKeySequence seq = del ? QKeySequence() : QKeySequence(mods | key); // check and remove existing keyboard shortcut if (!del) { for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { if ((action != menuitem) && (action->shortcut() == seq)) { action->setProperty("shortcutModified", true); action->setShortcut(QKeySequence()); } } } } // set new keyboard shortcut menuitem->setProperty("shortcutModified", true); menuitem->setShortcut(seq); if (awf_debug) printf("\033[33m[debug]\033[00m new_shortcut: %s\n", del ? "none" : seq.toString(QKeySequence::PortableText).toUtf8().constData()); return true; } return false; } static void accels_save() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m accels_save()\n"); // gtk-can-change-accels for Qt | so same GTK 2.24 3.x 4.x & Qt 5.x 6.x // gtk_accel_map_save if (must_save_accels) { QFile f(QDir::homePath() + QStringLiteral("/.awf-accels")); if (f.open(QIODevice::WriteOnly | QIODevice::Text)) { QMap actions; QString kmp, acl; QAction *act; auto parseModifiers = [](Qt::KeyboardModifiers m) { QString s; if (m & Qt::CTRL) s += QString(""); if (m & Qt::SHIFT) s += QString(""); if (m & Qt::ALT) s += QString(""); if (m & Qt::META) s += QString(""); return s; }; auto parseKey = [](Qt::Key k) { if ((k >= Qt::Key_A) && (k <= Qt::Key_Z)) return QString(QChar('a' + (k - Qt::Key_A))); if (k == Qt::Key_Delete) return QString("Delete"); if (k == Qt::Key_Return) return QString("Return"); if (k == Qt::Key_F1) return QString("F1"); if (k == Qt::Key_F2) return QString("F2"); if (k == Qt::Key_F3) return QString("F3"); if (k == Qt::Key_F4) return QString("F4"); if (k == Qt::Key_F5) return QString("F5"); if (k == Qt::Key_F6) return QString("F6"); if (k == Qt::Key_F7) return QString("F7"); if (k == Qt::Key_F8) return QString("F8"); if (k == Qt::Key_F9) return QString("F9"); if (k == Qt::Key_F10) return QString("F10"); if (k == Qt::Key_F11) return QString("F11"); if (k == Qt::Key_F12) return QString("F12"); return QString(); }; // find all QAction in submenus and menus // QMap actions for (QAction *menuAction : window->menuBar()->actions()) { QMenu *menu = menuAction->menu(); if (!menu) continue; for (QAction *action : menu->actions()) { QMenu *subMenu = action->menu(); if (subMenu) { for (QAction *subAction : subMenu->actions()) { kmp = subAction->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, subAction); } } else { kmp = action->objectName(); if (!kmp.isEmpty()) actions.insert(kmp, action); } } } // save file QTextStream out(&f); out << "; awf-qt" << QT_VERSION_MAJOR << " GtkAccelMap rc-file -*- scheme -*-\n"; out << "; this file is an automated accelerator map dump\n"; out << ";\n"; for (QString tmp : actions.keys()) { kmp = tmp; act = actions.value(kmp); acl = act->shortcut().toString(); if (!acl.isEmpty()) { const QKeyCombination kc = act->shortcut()[0]; Qt::Key key = kc.key(); Qt::KeyboardModifiers mods = kc.keyboardModifiers(); acl = parseModifiers(mods) + parseKey(key); } out << (act->property("shortcutModified").toBool() ? "" : "; ") << "(gtk_accel_path \"" << kmp << "\" \"" << acl << "\")\n"; } out << "\n"; f.close(); } } } // dialogs static void dialog_open() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_open()\n"); QFileDialog::getOpenFileNames(window, QString("%1 - Qt %2.%3").arg("QFileDialog:Open").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR), QDir::homePath()); } static void dialog_save() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_save()\n"); QFileDialog::getSaveFileName(window, QString("%1 - Qt %2.%3").arg("QFileDialog:Save").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR), QDir::homePath()); } static void dialog_message() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_message()\n"); QMessageBox msgBox(window); msgBox.setIcon(QMessageBox::Information); msgBox.setWindowTitle(QString("%1 - Qt %2.%3").arg("QMessageBox").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); msgBox.setText("QMessageBox"); msgBox.setInformativeText(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.exec(); } static void dialog_page_setup() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_page_setup()\n"); QPrinter printer; QPageSetupDialog(&printer, window).exec(); } static void dialog_print() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_print()\n"); QPrinter printer; QPrintDialog(&printer, window).exec(); } static void dialog_about() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_about()\n"); QString cppVersion; switch (__cplusplus) { case 199711L: cppVersion = "C++98"; break; case 201103L: cppVersion = "C++11"; break; case 201402L: cppVersion = "C++14"; break; case 201703L: cppVersion = "C++17"; break; case 202002L: cppVersion = "C++20"; break; case 202302L: cppVersion = "C++23"; break; default: cppVersion = "C++ (" + QString::number(__cplusplus) + ")"; break; } QString t1 = QString("%1

    %2 %3

    %4
    %5
    QT_QPA_PLATFORMTHEME=%6 QT_STYLE_OVERRIDE=%7") .arg(_app("A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.")) .arg(QString(_app("Remove %1 file")).arg("~/.awf-accels")) .arg(_app("to reset keyboard shortcuts.")) .arg(QString(_app("compiled in %1 with qt %2.%3.%4")).arg(cppVersion).arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR).arg(QT_VERSION_PATCH)) .arg(QString(_app(" started with qt %1")).arg(qVersion())) .arg(QString::fromUtf8(qgetenv("QT_QPA_PLATFORMTHEME"))) .arg(QString::fromUtf8(qgetenv("QT_STYLE_OVERRIDE"))); QString t2 = QString("awf-qt%1 / %2

    %3

    %4

    %5

    %6") .arg(QT_VERSION_MAJOR) .arg(VERSION) .arg(t1) .arg("https://github.com/luigifab/awf-extended") .arg("Copyright © 2020-2026 Fabrice Creuzot (luigifab)
    Copyright © 2011-2017 Valère Monseur (valr)") .arg(_app("A widget factory 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.")); QMessageBox::about(window, _qt("QCocoaMenuItem", "About"), t2); } static void dialog_inspector() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_inspector()\n"); if (inspector) { inspector->raise(); inspector->activateWindow(); } else { inspector = new QDialog(window, Qt::Window); inspector->setAttribute(Qt::WA_DeleteOnClose); inspector->setWindowTitle(QString("%1 - Qt %2.%3").arg("QtInspector").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); inspector->resize(500, 400); QTextEdit *textEdit = new QTextEdit; textEdit->setAcceptRichText(false); textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); textEdit->setPlaceholderText(_app("Write QSS here...")); textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QPushButton *btnCopy = new QPushButton(_qt("QShortcut", "Copy")); btnCopy->setIcon(get_icon("edit-copy")); QPushButton *btnClear = new QPushButton(_qt("QShortcut", "Clear")); btnClear->setIcon(get_icon("edit-clear")); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); AwfHBox *buttonLayout = new AwfHBox; buttonLayout->addWidget(btnCopy); buttonLayout->addWidget(btnClear); buttonLayout->addWidget(btnClose); AwfVBox *mainLayout = new AwfVBox; mainLayout->addWidget(textEdit); mainLayout->addLayout(buttonLayout); inspector->setLayout(mainLayout); QTimer* counter = new QTimer(inspector); counter->setSingleShot(true); QObject::connect(textEdit, &QTextEdit::textChanged, counter, [=](){ counter->start(1000); }); QObject::connect(btnClose, &QPushButton::clicked, inspector, [=](){ inspector->close(); }); QObject::connect(btnCopy, &QPushButton::clicked, inspector, [=](){ QString text = textEdit->toPlainText(); if (!text.isEmpty()) QApplication::clipboard()->setText(text); textEdit->setFocus(); }); QObject::connect(btnClear, &QPushButton::clicked, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); if (awf_gqss) original_style = "!^!"; QSignalBlocker blocker(textEdit); textEdit->clear(); textEdit->setFocus(); }); QObject::connect(inspector, &QWidget::destroyed, window, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); qApp->setStyleSheet(original_style); if (awf_gqss) original_style = "!^!"; inspector = null; }); QObject::connect(window, &QWidget::destroyed, inspector, &QWidget::close); QObject::connect(counter, &QTimer::timeout, inspector, [=](){ if (awf_gqss && (original_style == "!^!")) original_style = qApp->styleSheet(); #if defined (Q_OS_UNIX) int savedFd = dup(fileno(stderr)); FILE* ignored = freopen("/dev/null", "w", stderr); qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); fflush(stderr); dup2(savedFd, fileno(stderr)); close(savedFd); #else qApp->setStyleSheet(original_style + "\n\n" + textEdit->toPlainText()); #endif }); inspector->show(); } } static void dialog_calendar() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_calendar()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(QString("%1 - Qt %2.%3").arg("QDialog").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); dialog->setObjectName("AwfDialogWindow"); // QCalendar QCalendarWidget *calendar = new QCalendarWidget; calendar->setGridVisible(true); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); QObject::connect(btnClose, &QPushButton::clicked, dialog, [=](){ dialog->close(); }); AwfHBox *buttonLayout = new AwfHBox; buttonLayout->addStretch(); buttonLayout->addWidget(btnClose); AwfVBox *mainLayout = new AwfVBox; mainLayout->addWidget(calendar); mainLayout->addLayout(buttonLayout); dialog->setLayout(mainLayout); dialog->show(); } static void dialog_sliders() { // ok if (awf_trace) printf("\033[36m[trace]\033[00m dialog_sliders()\n"); QWidget *dialog = new QDialog(window, Qt::Window | Qt::Dialog); dialog->setWindowModality(Qt::ApplicationModal); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowTitle(QString("%1 - Qt %2.%3").arg("QDialog").arg(QT_VERSION_MAJOR).arg(QT_VERSION_MINOR)); dialog->setObjectName("AwfDialogWindow"); // QTabWidget QTabWidget *notebook = new QTabWidget; notebook->setTabPosition(QTabWidget::North); notebook->setTabsClosable(false); notebook->setUsesScrollButtons(false); notebook->tabBar()->setExpanding(false); notebook->tabBar()->setMovable(false); create_sliders(notebook, "top/left", QSlider::TicksAbove); create_sliders(notebook, "bottom/right", QSlider::TicksBelow); QPushButton *btnClose = new QPushButton(_qt("QMdiSubWindow", "&Close")); btnClose->setIcon(get_icon("dialog-close")); QObject::connect(btnClose, &QPushButton::clicked, dialog, [=](){ dialog->close(); }); AwfHBox *buttonLayout = new AwfHBox; buttonLayout->addStretch(); buttonLayout->addWidget(btnClose); AwfVBox *mainLayout = new AwfVBox; mainLayout->addWidget(notebook); mainLayout->addLayout(buttonLayout); dialog->setLayout(mainLayout); dialog->show(); } #include "awf-qt6.moc"awf-extended-4.2.0/src/awf.pot000066400000000000000000000312511522325530000161570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-21 18:58+0200\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=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: gtk-awf/src/awf-gtk2.c:342 gtk-awf/src/awf-gtk2.c:2639 #: gtk-awf/src/awf-gtk3.c:350 gtk-awf/src/awf-gtk3.c:3047 #: gtk-awf/src/awf-gtk4.c:339 gtk-awf/src/awf-gtk4.c:2990 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr "" #: gtk-awf/src/awf-qt5.cpp:623 gtk-awf/src/awf-qt5.cpp:2680 #: gtk-awf/src/awf-qt6.cpp:597 gtk-awf/src/awf-qt6.cpp:2639 msgid " started with qt %1" msgstr "" #: gtk-awf/src/awf-gtk2.c:2128 gtk-awf/src/awf-gtk2.c:2132 #: gtk-awf/src/awf-gtk2.c:2140 gtk-awf/src/awf-gtk2.c:2145 #: gtk-awf/src/awf-gtk3.c:2500 gtk-awf/src/awf-gtk3.c:2504 #: gtk-awf/src/awf-gtk3.c:2512 gtk-awf/src/awf-gtk3.c:2517 #: gtk-awf/src/awf-gtk4.c:2426 gtk-awf/src/awf-gtk4.c:2442 #: gtk-awf/src/awf-gtk4.c:2457 gtk-awf/src/awf-gtk4.c:2467 #: gtk-awf/src/awf-qt5.cpp:2122 gtk-awf/src/awf-qt5.cpp:2126 #: gtk-awf/src/awf-qt5.cpp:2135 gtk-awf/src/awf-qt5.cpp:2142 #: gtk-awf/src/awf-qt6.cpp:2080 gtk-awf/src/awf-qt6.cpp:2084 #: gtk-awf/src/awf-qt6.cpp:2093 gtk-awf/src/awf-qt6.cpp:2100 msgid "(checked)" msgstr "" #: gtk-awf/src/awf-gtk2.c:2129 gtk-awf/src/awf-gtk2.c:2133 #: gtk-awf/src/awf-gtk2.c:2141 gtk-awf/src/awf-gtk2.c:2146 #: gtk-awf/src/awf-gtk3.c:2501 gtk-awf/src/awf-gtk3.c:2505 #: gtk-awf/src/awf-gtk3.c:2513 gtk-awf/src/awf-gtk3.c:2518 #: gtk-awf/src/awf-gtk4.c:2428 gtk-awf/src/awf-gtk4.c:2444 #: gtk-awf/src/awf-gtk4.c:2458 gtk-awf/src/awf-gtk4.c:2468 #: gtk-awf/src/awf-qt5.cpp:2123 gtk-awf/src/awf-qt5.cpp:2127 #: gtk-awf/src/awf-qt5.cpp:2136 gtk-awf/src/awf-qt5.cpp:2143 #: gtk-awf/src/awf-qt6.cpp:2081 gtk-awf/src/awf-qt6.cpp:2085 #: gtk-awf/src/awf-qt6.cpp:2094 gtk-awf/src/awf-qt6.cpp:2101 msgid "(inconsistent)" msgstr "" #: gtk-awf/src/awf-gtk2.c:2127 gtk-awf/src/awf-gtk2.c:2131 #: gtk-awf/src/awf-gtk2.c:2138 gtk-awf/src/awf-gtk2.c:2143 #: gtk-awf/src/awf-gtk3.c:2499 gtk-awf/src/awf-gtk3.c:2503 #: gtk-awf/src/awf-gtk3.c:2510 gtk-awf/src/awf-gtk3.c:2515 #: gtk-awf/src/awf-gtk4.c:2420 gtk-awf/src/awf-gtk4.c:2435 #: gtk-awf/src/awf-gtk4.c:2456 gtk-awf/src/awf-gtk4.c:2466 #: gtk-awf/src/awf-qt5.cpp:2121 gtk-awf/src/awf-qt5.cpp:2125 #: gtk-awf/src/awf-qt5.cpp:2134 gtk-awf/src/awf-qt5.cpp:2141 #: gtk-awf/src/awf-qt6.cpp:2079 gtk-awf/src/awf-qt6.cpp:2083 #: gtk-awf/src/awf-qt6.cpp:2092 gtk-awf/src/awf-qt6.cpp:2099 msgid "(unchecked)" msgstr "" #: gtk-awf/src/awf-gtk2.c:330 gtk-awf/src/awf-gtk2.c:839 #: gtk-awf/src/awf-gtk3.c:338 gtk-awf/src/awf-gtk3.c:969 #: gtk-awf/src/awf-gtk4.c:327 gtk-awf/src/awf-gtk4.c:888 #, c-format msgid "A widget factory - GTK %d.%d" msgstr "" #: gtk-awf/src/awf-qt5.cpp:615 gtk-awf/src/awf-qt5.cpp:635 #: gtk-awf/src/awf-qt5.cpp:1023 gtk-awf/src/awf-qt6.cpp:589 #: gtk-awf/src/awf-qt6.cpp:608 gtk-awf/src/awf-qt6.cpp:989 msgid "A widget factory - Qt %1.%2" msgstr "" #: gtk-awf/src/awf-gtk2.c:712 gtk-awf/src/awf-gtk2.c:1528 #: gtk-awf/src/awf-gtk2.c:2564 gtk-awf/src/awf-gtk2.c:2631 #: gtk-awf/src/awf-gtk3.c:815 gtk-awf/src/awf-gtk3.c:1862 #: gtk-awf/src/awf-gtk3.c:2960 gtk-awf/src/awf-gtk3.c:3039 #: gtk-awf/src/awf-gtk4.c:744 gtk-awf/src/awf-gtk4.c:1799 #: gtk-awf/src/awf-gtk4.c:2896 gtk-awf/src/awf-gtk4.c:2982 #: gtk-awf/src/awf-qt5.cpp:962 gtk-awf/src/awf-qt5.cpp:1741 #: gtk-awf/src/awf-qt5.cpp:2636 gtk-awf/src/awf-qt5.cpp:2676 #: gtk-awf/src/awf-qt6.cpp:934 gtk-awf/src/awf-qt6.cpp:1699 #: gtk-awf/src/awf-qt6.cpp:2595 gtk-awf/src/awf-qt6.cpp:2635 msgid "" "A widget factory is a theme preview application for GTK and Qt. It displays " "the various widget types in a single window allowing to see the visual " "effect of the applied theme." msgstr "" #: gtk-awf/src/awf-gtk2.c:2649 gtk-awf/src/awf-gtk3.c:3057 #: gtk-awf/src/awf-gtk4.c:3000 gtk-awf/src/awf-qt5.cpp:2690 #: gtk-awf/src/awf-qt6.cpp:2649 msgid "" "A widget factory 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." msgstr "" #: gtk-awf/src/awf-gtk2.c:2109 gtk-awf/src/awf-gtk3.c:2481 #: gtk-awf/src/awf-gtk4.c:2389 gtk-awf/src/awf-qt5.cpp:2103 #: gtk-awf/src/awf-qt6.cpp:2061 msgid "Calendar" msgstr "" #: gtk-awf/src/awf-gtk2.c:1318 gtk-awf/src/awf-gtk3.c:1571 #: gtk-awf/src/awf-gtk4.c:1520 gtk-awf/src/awf-gtk4.c:1525 #: gtk-awf/src/awf-qt5.cpp:1561 gtk-awf/src/awf-qt6.cpp:1519 msgid "Choose a color" msgstr "" #: gtk-awf/src/awf-gtk2.c:1330 gtk-awf/src/awf-gtk3.c:1583 #: gtk-awf/src/awf-gtk4.c:1542 gtk-awf/src/awf-qt5.cpp:1576 #: gtk-awf/src/awf-qt6.cpp:1534 msgid "Choose a file" msgstr "" #: gtk-awf/src/awf-gtk2.c:1335 gtk-awf/src/awf-gtk3.c:1588 #: gtk-awf/src/awf-gtk4.c:1546 gtk-awf/src/awf-qt5.cpp:1583 #: gtk-awf/src/awf-qt6.cpp:1541 msgid "Choose a folder" msgstr "" #: gtk-awf/src/awf-gtk2.c:1324 gtk-awf/src/awf-gtk3.c:1577 #: gtk-awf/src/awf-gtk4.c:1533 gtk-awf/src/awf-gtk4.c:1538 #: gtk-awf/src/awf-qt5.cpp:1568 gtk-awf/src/awf-qt6.cpp:1526 msgid "Choose a font" msgstr "" #: gtk-awf/src/awf-qt5.cpp:2185 gtk-awf/src/awf-qt5.cpp:2214 #: gtk-awf/src/awf-qt6.cpp:2143 gtk-awf/src/awf-qt6.cpp:2172 msgid "GlobalQSS not available" msgstr "" #: gtk-awf/src/awf-gtk2.c:2252 gtk-awf/src/awf-gtk3.c:2624 #: gtk-awf/src/awf-gtk4.c:2587 gtk-awf/src/awf-qt5.cpp:2224 #: gtk-awf/src/awf-qt6.cpp:2182 msgid "Left to Right (LTR)" msgstr "" #: gtk-awf/src/awf-gtk2.c:2121 gtk-awf/src/awf-gtk3.c:2493 #: gtk-awf/src/awf-gtk4.c:2406 gtk-awf/src/awf-qt5.cpp:2116 #: gtk-awf/src/awf-qt6.cpp:2074 msgid "Less..." msgstr "" #: gtk-awf/src/awf-gtk2.c:332 gtk-awf/src/awf-gtk3.c:340 #: gtk-awf/src/awf-gtk3.c:396 gtk-awf/src/awf-gtk4.c:329 #: gtk-awf/src/awf-gtk4.c:366 gtk-awf/src/awf-qt5.cpp:617 #: gtk-awf/src/awf-qt5.cpp:638 gtk-awf/src/awf-qt6.cpp:591 #: gtk-awf/src/awf-qt6.cpp:611 msgid "List available themes." msgstr "" #: gtk-awf/src/awf-gtk2.c:1517 gtk-awf/src/awf-gtk2.c:2115 #: gtk-awf/src/awf-gtk3.c:1838 gtk-awf/src/awf-gtk3.c:2487 #: gtk-awf/src/awf-gtk4.c:1781 gtk-awf/src/awf-gtk4.c:2396 #: gtk-awf/src/awf-qt5.cpp:1732 gtk-awf/src/awf-qt5.cpp:2109 #: gtk-awf/src/awf-qt6.cpp:1690 gtk-awf/src/awf-qt6.cpp:2067 msgid "More..." msgstr "" #: gtk-awf/src/awf-gtk2.c:2204 gtk-awf/src/awf-gtk2.c:2246 #: gtk-awf/src/awf-gtk3.c:2576 gtk-awf/src/awf-gtk3.c:2618 #: gtk-awf/src/awf-gtk4.c:2531 gtk-awf/src/awf-gtk4.c:2575 #: gtk-awf/src/awf-qt5.cpp:2187 gtk-awf/src/awf-qt5.cpp:2216 #: gtk-awf/src/awf-qt6.cpp:2145 gtk-awf/src/awf-qt6.cpp:2174 msgid "No themes found" msgstr "" #: gtk-awf/src/awf-gtk2.c:2684 gtk-awf/src/awf-gtk3.c:3100 #: gtk-awf/src/awf-gtk4.c:3043 msgid "Ok" msgstr "" #: gtk-awf/src/awf-gtk2.c:2106 gtk-awf/src/awf-gtk3.c:2478 #: gtk-awf/src/awf-gtk4.c:2386 gtk-awf/src/awf-qt5.cpp:2100 #: gtk-awf/src/awf-qt6.cpp:2058 msgid "Open recent file" msgstr "" #: gtk-awf/src/awf-qt5.cpp:2106 gtk-awf/src/awf-qt6.cpp:2064 msgid "Page Set&up" msgstr "" #: gtk-awf/src/awf-qt5.cpp:2105 gtk-awf/src/awf-qt6.cpp:2063 msgid "Properties" msgstr "" #: gtk-awf/src/awf-qt5.cpp:2677 gtk-awf/src/awf-qt6.cpp:2636 msgid "Remove %1 file" msgstr "" #: gtk-awf/src/awf-gtk2.c:2632 gtk-awf/src/awf-gtk3.c:3040 #: gtk-awf/src/awf-gtk4.c:2983 #, c-format msgid "Remove %s file" msgstr "" #: gtk-awf/src/awf-gtk2.c:2258 gtk-awf/src/awf-gtk3.c:2630 #: gtk-awf/src/awf-gtk4.c:2588 gtk-awf/src/awf-qt5.cpp:2229 #: gtk-awf/src/awf-qt6.cpp:2187 msgid "Right to Left (RTL)" msgstr "" #: gtk-awf/src/awf-qt5.cpp:619 gtk-awf/src/awf-qt5.cpp:640 #: gtk-awf/src/awf-qt6.cpp:593 gtk-awf/src/awf-qt6.cpp:613 msgid "Run and save a screenshot on %1 (PNG)." msgstr "" #: gtk-awf/src/awf-gtk2.c:334 gtk-awf/src/awf-gtk3.c:342 #: gtk-awf/src/awf-gtk3.c:403 gtk-awf/src/awf-gtk4.c:331 #: gtk-awf/src/awf-gtk4.c:373 #, c-format msgid "Run and save a screenshot on %s (PNG)." msgstr "" #: gtk-awf/src/awf-gtk2.c:335 gtk-awf/src/awf-gtk3.c:343 #: gtk-awf/src/awf-gtk3.c:410 gtk-awf/src/awf-gtk4.c:332 #: gtk-awf/src/awf-gtk4.c:380 gtk-awf/src/awf-qt5.cpp:620 #: gtk-awf/src/awf-qt5.cpp:641 gtk-awf/src/awf-qt6.cpp:594 #: gtk-awf/src/awf-qt6.cpp:614 msgid "Run with text from left to right (Left-To-Right)." msgstr "" #: gtk-awf/src/awf-gtk2.c:336 gtk-awf/src/awf-gtk3.c:344 #: gtk-awf/src/awf-gtk3.c:414 gtk-awf/src/awf-gtk4.c:333 #: gtk-awf/src/awf-gtk4.c:384 gtk-awf/src/awf-qt5.cpp:621 #: gtk-awf/src/awf-qt5.cpp:642 gtk-awf/src/awf-qt6.cpp:595 #: gtk-awf/src/awf-qt6.cpp:615 msgid "Run with text from right to left (Right-To-Left)." msgstr "" #: gtk-awf/src/awf-gtk2.c:333 gtk-awf/src/awf-gtk3.c:341 #: gtk-awf/src/awf-gtk3.c:400 gtk-awf/src/awf-gtk4.c:330 #: gtk-awf/src/awf-gtk4.c:370 gtk-awf/src/awf-qt5.cpp:618 #: gtk-awf/src/awf-qt5.cpp:639 gtk-awf/src/awf-qt6.cpp:592 #: gtk-awf/src/awf-qt6.cpp:612 msgid "Run with the specified theme." msgstr "" #: gtk-awf/src/awf-gtk2.c:331 gtk-awf/src/awf-gtk3.c:339 #: gtk-awf/src/awf-gtk3.c:392 gtk-awf/src/awf-gtk4.c:328 #: gtk-awf/src/awf-gtk4.c:362 gtk-awf/src/awf-qt5.cpp:616 #: gtk-awf/src/awf-qt6.cpp:590 msgid "Show version number." msgstr "" #: gtk-awf/src/awf-qt5.cpp:760 gtk-awf/src/awf-qt5.cpp:1065 #: gtk-awf/src/awf-qt6.cpp:732 gtk-awf/src/awf-qt6.cpp:1031 msgid "Theme %1 loaded." msgstr "" #: gtk-awf/src/awf-qt5.cpp:731 gtk-awf/src/awf-qt6.cpp:703 msgid "Theme %1 reloaded (error saving screenshot)." msgstr "" #: gtk-awf/src/awf-qt5.cpp:729 gtk-awf/src/awf-qt6.cpp:701 msgid "Theme %1 reloaded, then screenshot saved (%2)." msgstr "" #: gtk-awf/src/awf-qt5.cpp:734 gtk-awf/src/awf-qt6.cpp:706 msgid "Theme %1 reloaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:520 gtk-awf/src/awf-gtk2.c:873 #: gtk-awf/src/awf-gtk3.c:626 gtk-awf/src/awf-gtk3.c:1103 #: gtk-awf/src/awf-gtk4.c:564 gtk-awf/src/awf-gtk4.c:1010 #, c-format msgid "Theme %s loaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:487 gtk-awf/src/awf-gtk3.c:588 #: gtk-awf/src/awf-gtk4.c:531 #, c-format msgid "Theme %s reloaded (error saving screenshot)." msgstr "" #: gtk-awf/src/awf-gtk2.c:482 gtk-awf/src/awf-gtk3.c:583 #: gtk-awf/src/awf-gtk4.c:526 #, c-format msgid "Theme %s reloaded, then screenshot saved (%s)." msgstr "" #: gtk-awf/src/awf-gtk2.c:493 gtk-awf/src/awf-gtk3.c:594 #: gtk-awf/src/awf-gtk4.c:537 #, c-format msgid "Theme %s reloaded." msgstr "" #: gtk-awf/src/awf-gtk2.c:2686 gtk-awf/src/awf-gtk3.c:3102 #: gtk-awf/src/awf-gtk4.c:3045 msgid "This is a question bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2692 gtk-awf/src/awf-gtk3.c:3108 #: gtk-awf/src/awf-gtk4.c:3051 msgid "This is a warning bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2698 gtk-awf/src/awf-gtk3.c:3114 #: gtk-awf/src/awf-gtk4.c:3057 msgid "This is an error bar." msgstr "" #: gtk-awf/src/awf-gtk2.c:2680 gtk-awf/src/awf-gtk3.c:3096 #: gtk-awf/src/awf-gtk4.c:3039 msgid "This is an info bar." msgstr "" #: gtk-awf/src/awf-qt5.cpp:2713 gtk-awf/src/awf-qt6.cpp:2672 msgid "Write QSS here..." msgstr "" #: gtk-awf/src/awf-gtk2.c:2264 gtk-awf/src/awf-gtk3.c:2636 #: gtk-awf/src/awf-gtk4.c:2594 msgid "_Help" msgstr "" #: gtk-awf/src/awf-gtk2.c:2099 gtk-awf/src/awf-gtk3.c:2471 #: gtk-awf/src/awf-gtk4.c:2383 gtk-awf/src/awf-qt5.cpp:2092 #: gtk-awf/src/awf-qt6.cpp:2050 msgid "_Options" msgstr "" #: gtk-awf/src/awf-gtk4.c:2388 gtk-awf/src/awf-qt5.cpp:2102 #: gtk-awf/src/awf-qt6.cpp:2060 msgid "_Refresh" msgstr "" #: gtk-awf/src/awf-gtk2.c:2157 gtk-awf/src/awf-gtk3.c:2529 #: gtk-awf/src/awf-gtk4.c:2491 gtk-awf/src/awf-qt5.cpp:2154 #: gtk-awf/src/awf-qt6.cpp:2112 msgid "_System themes" msgstr "" #: gtk-awf/src/awf-gtk2.c:2250 gtk-awf/src/awf-gtk3.c:2622 #: gtk-awf/src/awf-gtk4.c:2586 gtk-awf/src/awf-qt5.cpp:2219 #: gtk-awf/src/awf-qt6.cpp:2177 msgid "_Text direction" msgstr "" #: gtk-awf/src/awf-gtk2.c:2208 gtk-awf/src/awf-gtk3.c:2580 #: gtk-awf/src/awf-gtk4.c:2538 gtk-awf/src/awf-qt5.cpp:2191 #: gtk-awf/src/awf-qt6.cpp:2149 msgid "_User themes" msgstr "" #: gtk-awf/src/awf-qt5.cpp:622 gtk-awf/src/awf-qt5.cpp:2679 #: gtk-awf/src/awf-qt6.cpp:596 gtk-awf/src/awf-qt6.cpp:2638 msgid "compiled in %1 with qt %2.%3.%4" msgstr "" #: gtk-awf/src/awf-gtk2.c:337 gtk-awf/src/awf-gtk2.c:2634 #: gtk-awf/src/awf-gtk3.c:345 gtk-awf/src/awf-gtk3.c:3042 #: gtk-awf/src/awf-gtk4.c:334 gtk-awf/src/awf-gtk4.c:2985 #, c-format msgid "compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr "" #: gtk-awf/src/awf-gtk2.c:2633 gtk-awf/src/awf-gtk3.c:3041 #: gtk-awf/src/awf-gtk4.c:2984 gtk-awf/src/awf-qt5.cpp:2678 #: gtk-awf/src/awf-qt6.cpp:2637 msgid "to reset keyboard shortcuts." msgstr "" awf-extended-4.2.0/src/awf.rc000066400000000000000000000053541522325530000157660ustar00rootroot00000000000000#include #define GTK2 12 #define GTK3 13 #define GTK4 14 #define GTK5 15 #define QT5 25 #define QT6 26 #define QT7 27 #if ENGINE == GTK2 # define EXE_NAME "awf-gtk2\0" # define EXE_FILE "awf-gtk2.exe\0" #elif ENGINE == GTK3 # define EXE_NAME "awf-gtk3\0" # define EXE_FILE "awf-gtk3.exe\0" #elif ENGINE == GTK4 # define EXE_NAME "awf-gtk4\0" # define EXE_FILE "awf-gtk4.exe\0" #elif ENGINE == GTK5 # define EXE_NAME "awf-gtk5\0" # define EXE_FILE "awf-gtk5.exe\0" #elif ENGINE == QT5 # define EXE_NAME "awf-qt5\0" # define EXE_FILE "awf-qt5.exe\0" #elif ENGINE == QT6 # define EXE_NAME "awf-qt6\0" # define EXE_FILE "awf-qt6.exe\0" #elif ENGINE == QT7 # define EXE_NAME "awf-qt7\0" # define EXE_FILE "awf-qt7.exe\0" #endif IDI_ICON1 ICON "../data/awf.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION 4,0,0,0 PRODUCTVERSION 4,0,0,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "FileDescription", "A widget factory 4.2.0\0" VALUE "FileVersion", "4.2.0\0" VALUE "ProductName", "A widget factory\0" VALUE "ProductVersion", "4.2.0\0" VALUE "CompanyName", "luigifab\0" VALUE "LegalCopyright", "2026 Fabrice Creuzot (luigifab), GNU GPL v3\0" VALUE "Info1", "https://github.com/luigifab/awf-extended\0" VALUE "Info2", "https://www.luigifab.fr/gtkqt/awf-extended\0" VALUE "InternalName", EXE_NAME VALUE "OriginalFilename", EXE_FILE VALUE "Comments", "A widget factory is a theme preview application for GTK and Qt. It displays the various widget types in a single window allowing to see the visual effect of the applied theme.\0" END BLOCK "040C04B0" BEGIN VALUE "FileDescription", "La fabrique à widgets 4.2.0\0" VALUE "FileVersion", "4.2.0\0" VALUE "ProductName", "La fabrique à widgets\0" VALUE "ProductVersion", "4.2.0\0" VALUE "CompanyName", "luigifab\0" VALUE "LegalCopyright", "2026 Fabrice Creuzot (luigifab), GNU GPL v3\0" VALUE "Info1", "https://github.com/luigifab/awf-extended\0" VALUE "Info2", "https://www.luigifab.fr/gtkqt/awf-extended\0" VALUE "InternalName", EXE_NAME VALUE "OriginalFilename", EXE_FILE VALUE "Comments", "La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. Elle affiche les différents types de widgets dans une seule fenêtre permettant de voir l'effet visuel du thème appliqué.\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 0x04B0, 0x040C, 0x04B0 END ENDawf-extended-4.2.0/src/po/000077500000000000000000000000001522325530000152725ustar00rootroot00000000000000awf-extended-4.2.0/src/po/fr.po000066400000000000000000000343571522325530000162550ustar00rootroot00000000000000msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-06-21 18:58+0200\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: gtk-awf/src/awf-gtk2.c:342 gtk-awf/src/awf-gtk2.c:2639 #: gtk-awf/src/awf-gtk3.c:350 gtk-awf/src/awf-gtk3.c:3047 #: gtk-awf/src/awf-gtk4.c:339 gtk-awf/src/awf-gtk4.c:2990 #, c-format msgid " started with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr " démarré avec gtk %d.%d.%d et glib %d.%d.%d et pango %s" #: gtk-awf/src/awf-qt5.cpp:623 gtk-awf/src/awf-qt5.cpp:2680 #: gtk-awf/src/awf-qt6.cpp:597 gtk-awf/src/awf-qt6.cpp:2639 msgid " started with qt %1" msgstr " démarré avec qt %1" #: gtk-awf/src/awf-gtk2.c:2128 gtk-awf/src/awf-gtk2.c:2132 #: gtk-awf/src/awf-gtk2.c:2140 gtk-awf/src/awf-gtk2.c:2145 #: gtk-awf/src/awf-gtk3.c:2500 gtk-awf/src/awf-gtk3.c:2504 #: gtk-awf/src/awf-gtk3.c:2512 gtk-awf/src/awf-gtk3.c:2517 #: gtk-awf/src/awf-gtk4.c:2426 gtk-awf/src/awf-gtk4.c:2442 #: gtk-awf/src/awf-gtk4.c:2457 gtk-awf/src/awf-gtk4.c:2467 #: gtk-awf/src/awf-qt5.cpp:2122 gtk-awf/src/awf-qt5.cpp:2126 #: gtk-awf/src/awf-qt5.cpp:2135 gtk-awf/src/awf-qt5.cpp:2142 #: gtk-awf/src/awf-qt6.cpp:2080 gtk-awf/src/awf-qt6.cpp:2084 #: gtk-awf/src/awf-qt6.cpp:2093 gtk-awf/src/awf-qt6.cpp:2100 msgid "(checked)" msgstr "(coché)" #: gtk-awf/src/awf-gtk2.c:2129 gtk-awf/src/awf-gtk2.c:2133 #: gtk-awf/src/awf-gtk2.c:2141 gtk-awf/src/awf-gtk2.c:2146 #: gtk-awf/src/awf-gtk3.c:2501 gtk-awf/src/awf-gtk3.c:2505 #: gtk-awf/src/awf-gtk3.c:2513 gtk-awf/src/awf-gtk3.c:2518 #: gtk-awf/src/awf-gtk4.c:2428 gtk-awf/src/awf-gtk4.c:2444 #: gtk-awf/src/awf-gtk4.c:2458 gtk-awf/src/awf-gtk4.c:2468 #: gtk-awf/src/awf-qt5.cpp:2123 gtk-awf/src/awf-qt5.cpp:2127 #: gtk-awf/src/awf-qt5.cpp:2136 gtk-awf/src/awf-qt5.cpp:2143 #: gtk-awf/src/awf-qt6.cpp:2081 gtk-awf/src/awf-qt6.cpp:2085 #: gtk-awf/src/awf-qt6.cpp:2094 gtk-awf/src/awf-qt6.cpp:2101 msgid "(inconsistent)" msgstr "(incohérent)" #: gtk-awf/src/awf-gtk2.c:2127 gtk-awf/src/awf-gtk2.c:2131 #: gtk-awf/src/awf-gtk2.c:2138 gtk-awf/src/awf-gtk2.c:2143 #: gtk-awf/src/awf-gtk3.c:2499 gtk-awf/src/awf-gtk3.c:2503 #: gtk-awf/src/awf-gtk3.c:2510 gtk-awf/src/awf-gtk3.c:2515 #: gtk-awf/src/awf-gtk4.c:2420 gtk-awf/src/awf-gtk4.c:2435 #: gtk-awf/src/awf-gtk4.c:2456 gtk-awf/src/awf-gtk4.c:2466 #: gtk-awf/src/awf-qt5.cpp:2121 gtk-awf/src/awf-qt5.cpp:2125 #: gtk-awf/src/awf-qt5.cpp:2134 gtk-awf/src/awf-qt5.cpp:2141 #: gtk-awf/src/awf-qt6.cpp:2079 gtk-awf/src/awf-qt6.cpp:2083 #: gtk-awf/src/awf-qt6.cpp:2092 gtk-awf/src/awf-qt6.cpp:2099 msgid "(unchecked)" msgstr "(décoché)" #: gtk-awf/src/awf-gtk2.c:330 gtk-awf/src/awf-gtk2.c:839 #: gtk-awf/src/awf-gtk3.c:338 gtk-awf/src/awf-gtk3.c:969 #: gtk-awf/src/awf-gtk4.c:327 gtk-awf/src/awf-gtk4.c:888 #, c-format msgid "A widget factory - GTK %d.%d" msgstr "La fabrique à widgets - GTK %d.%d" #: gtk-awf/src/awf-qt5.cpp:615 gtk-awf/src/awf-qt5.cpp:635 #: gtk-awf/src/awf-qt5.cpp:1023 gtk-awf/src/awf-qt6.cpp:589 #: gtk-awf/src/awf-qt6.cpp:608 gtk-awf/src/awf-qt6.cpp:989 msgid "A widget factory - Qt %1.%2" msgstr "La fabrique à widgets - Qt %1.%2" #: gtk-awf/src/awf-gtk2.c:712 gtk-awf/src/awf-gtk2.c:1528 #: gtk-awf/src/awf-gtk2.c:2564 gtk-awf/src/awf-gtk2.c:2631 #: gtk-awf/src/awf-gtk3.c:815 gtk-awf/src/awf-gtk3.c:1862 #: gtk-awf/src/awf-gtk3.c:2960 gtk-awf/src/awf-gtk3.c:3039 #: gtk-awf/src/awf-gtk4.c:744 gtk-awf/src/awf-gtk4.c:1799 #: gtk-awf/src/awf-gtk4.c:2896 gtk-awf/src/awf-gtk4.c:2982 #: gtk-awf/src/awf-qt5.cpp:962 gtk-awf/src/awf-qt5.cpp:1741 #: gtk-awf/src/awf-qt5.cpp:2636 gtk-awf/src/awf-qt5.cpp:2676 #: gtk-awf/src/awf-qt6.cpp:934 gtk-awf/src/awf-qt6.cpp:1699 #: gtk-awf/src/awf-qt6.cpp:2595 gtk-awf/src/awf-qt6.cpp:2635 msgid "" "A widget factory is a theme preview application for GTK and Qt. It displays " "the various widget types in a single window allowing to see the visual " "effect of the applied theme." msgstr "" "La fabrique à widgets est une application d'aperçu de thème pour GTK et Qt. " "Elle affiche les différents types de widgets dans une seule fenêtre " "permettant de voir l'effet visuel du thème appliqué. " #: gtk-awf/src/awf-gtk2.c:2649 gtk-awf/src/awf-gtk3.c:3057 #: gtk-awf/src/awf-gtk4.c:3000 gtk-awf/src/awf-qt5.cpp:2690 #: gtk-awf/src/awf-qt6.cpp:2649 msgid "" "A widget factory 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." msgstr "" "La fabrique à widgets est un logiciel libre ; vous pouvez le redistribuer et/" "ou le modifier selon les termes de la Licence Publique Générale GNU, telle " "que publiée par la free software foundation ; version 3 de la licence, ou (à " "votre discrétion) toute version ultérieure. " #: gtk-awf/src/awf-gtk2.c:2109 gtk-awf/src/awf-gtk3.c:2481 #: gtk-awf/src/awf-gtk4.c:2389 gtk-awf/src/awf-qt5.cpp:2103 #: gtk-awf/src/awf-qt6.cpp:2061 msgid "Calendar" msgstr "Calendrier" #: gtk-awf/src/awf-gtk2.c:1318 gtk-awf/src/awf-gtk3.c:1571 #: gtk-awf/src/awf-gtk4.c:1520 gtk-awf/src/awf-gtk4.c:1525 #: gtk-awf/src/awf-qt5.cpp:1561 gtk-awf/src/awf-qt6.cpp:1519 msgid "Choose a color" msgstr "Choisir une couleur" #: gtk-awf/src/awf-gtk2.c:1330 gtk-awf/src/awf-gtk3.c:1583 #: gtk-awf/src/awf-gtk4.c:1542 gtk-awf/src/awf-qt5.cpp:1576 #: gtk-awf/src/awf-qt6.cpp:1534 msgid "Choose a file" msgstr "Choisir un fichier" #: gtk-awf/src/awf-gtk2.c:1335 gtk-awf/src/awf-gtk3.c:1588 #: gtk-awf/src/awf-gtk4.c:1546 gtk-awf/src/awf-qt5.cpp:1583 #: gtk-awf/src/awf-qt6.cpp:1541 msgid "Choose a folder" msgstr "Choisir un dossier" #: gtk-awf/src/awf-gtk2.c:1324 gtk-awf/src/awf-gtk3.c:1577 #: gtk-awf/src/awf-gtk4.c:1533 gtk-awf/src/awf-gtk4.c:1538 #: gtk-awf/src/awf-qt5.cpp:1568 gtk-awf/src/awf-qt6.cpp:1526 msgid "Choose a font" msgstr "Choisir une police" #: gtk-awf/src/awf-qt5.cpp:2185 gtk-awf/src/awf-qt5.cpp:2214 #: gtk-awf/src/awf-qt6.cpp:2143 gtk-awf/src/awf-qt6.cpp:2172 msgid "GlobalQSS not available" msgstr "GlobalQSS indisponible" #: gtk-awf/src/awf-gtk2.c:2252 gtk-awf/src/awf-gtk3.c:2624 #: gtk-awf/src/awf-gtk4.c:2587 gtk-awf/src/awf-qt5.cpp:2224 #: gtk-awf/src/awf-qt6.cpp:2182 msgid "Left to Right (LTR)" msgstr "Gauche à droite (LTR)" #: gtk-awf/src/awf-gtk2.c:2121 gtk-awf/src/awf-gtk3.c:2493 #: gtk-awf/src/awf-gtk4.c:2406 gtk-awf/src/awf-qt5.cpp:2116 #: gtk-awf/src/awf-qt6.cpp:2074 msgid "Less..." msgstr "Moins..." #: gtk-awf/src/awf-gtk2.c:332 gtk-awf/src/awf-gtk3.c:340 #: gtk-awf/src/awf-gtk3.c:396 gtk-awf/src/awf-gtk4.c:329 #: gtk-awf/src/awf-gtk4.c:366 gtk-awf/src/awf-qt5.cpp:617 #: gtk-awf/src/awf-qt5.cpp:638 gtk-awf/src/awf-qt6.cpp:591 #: gtk-awf/src/awf-qt6.cpp:611 msgid "List available themes." msgstr "Liste les thèmes disponibles." #: gtk-awf/src/awf-gtk2.c:1517 gtk-awf/src/awf-gtk2.c:2115 #: gtk-awf/src/awf-gtk3.c:1838 gtk-awf/src/awf-gtk3.c:2487 #: gtk-awf/src/awf-gtk4.c:1781 gtk-awf/src/awf-gtk4.c:2396 #: gtk-awf/src/awf-qt5.cpp:1732 gtk-awf/src/awf-qt5.cpp:2109 #: gtk-awf/src/awf-qt6.cpp:1690 gtk-awf/src/awf-qt6.cpp:2067 msgid "More..." msgstr "Plus..." #: gtk-awf/src/awf-gtk2.c:2204 gtk-awf/src/awf-gtk2.c:2246 #: gtk-awf/src/awf-gtk3.c:2576 gtk-awf/src/awf-gtk3.c:2618 #: gtk-awf/src/awf-gtk4.c:2531 gtk-awf/src/awf-gtk4.c:2575 #: gtk-awf/src/awf-qt5.cpp:2187 gtk-awf/src/awf-qt5.cpp:2216 #: gtk-awf/src/awf-qt6.cpp:2145 gtk-awf/src/awf-qt6.cpp:2174 msgid "No themes found" msgstr "Aucun thème trouvé" #: gtk-awf/src/awf-gtk2.c:2684 gtk-awf/src/awf-gtk3.c:3100 #: gtk-awf/src/awf-gtk4.c:3043 msgid "Ok" msgstr "Ok" #: gtk-awf/src/awf-gtk2.c:2106 gtk-awf/src/awf-gtk3.c:2478 #: gtk-awf/src/awf-gtk4.c:2386 gtk-awf/src/awf-qt5.cpp:2100 #: gtk-awf/src/awf-qt6.cpp:2058 msgid "Open recent file" msgstr "Ouvrir un fichier récent" #: gtk-awf/src/awf-qt5.cpp:2106 gtk-awf/src/awf-qt6.cpp:2064 msgid "Page Set&up" msgstr "Page Set&up" #: gtk-awf/src/awf-qt5.cpp:2105 gtk-awf/src/awf-qt6.cpp:2063 msgid "Properties" msgstr "Properties" #: gtk-awf/src/awf-qt5.cpp:2677 gtk-awf/src/awf-qt6.cpp:2636 msgid "Remove %1 file" msgstr "Supprimer le fichier %1" #: gtk-awf/src/awf-gtk2.c:2632 gtk-awf/src/awf-gtk3.c:3040 #: gtk-awf/src/awf-gtk4.c:2983 #, c-format msgid "Remove %s file" msgstr "Supprimer le fichier %s" #: gtk-awf/src/awf-gtk2.c:2258 gtk-awf/src/awf-gtk3.c:2630 #: gtk-awf/src/awf-gtk4.c:2588 gtk-awf/src/awf-qt5.cpp:2229 #: gtk-awf/src/awf-qt6.cpp:2187 msgid "Right to Left (RTL)" msgstr "Droite à gauche (RTL)" #: gtk-awf/src/awf-qt5.cpp:619 gtk-awf/src/awf-qt5.cpp:640 #: gtk-awf/src/awf-qt6.cpp:593 gtk-awf/src/awf-qt6.cpp:613 msgid "Run and save a screenshot on %1 (PNG)." msgstr "Démarre et enregistre une capture d'écran lors du %1 (PNG)." #: gtk-awf/src/awf-gtk2.c:334 gtk-awf/src/awf-gtk3.c:342 #: gtk-awf/src/awf-gtk3.c:403 gtk-awf/src/awf-gtk4.c:331 #: gtk-awf/src/awf-gtk4.c:373 #, c-format msgid "Run and save a screenshot on %s (PNG)." msgstr "Démarre et enregistre une capture d'écran lors du %s (PNG)." #: gtk-awf/src/awf-gtk2.c:335 gtk-awf/src/awf-gtk3.c:343 #: gtk-awf/src/awf-gtk3.c:410 gtk-awf/src/awf-gtk4.c:332 #: gtk-awf/src/awf-gtk4.c:380 gtk-awf/src/awf-qt5.cpp:620 #: gtk-awf/src/awf-qt5.cpp:641 gtk-awf/src/awf-qt6.cpp:594 #: gtk-awf/src/awf-qt6.cpp:614 msgid "Run with text from left to right (Left-To-Right)." msgstr "Démarre avec le texte de gauche à droite (Left-To-Right)." #: gtk-awf/src/awf-gtk2.c:336 gtk-awf/src/awf-gtk3.c:344 #: gtk-awf/src/awf-gtk3.c:414 gtk-awf/src/awf-gtk4.c:333 #: gtk-awf/src/awf-gtk4.c:384 gtk-awf/src/awf-qt5.cpp:621 #: gtk-awf/src/awf-qt5.cpp:642 gtk-awf/src/awf-qt6.cpp:595 #: gtk-awf/src/awf-qt6.cpp:615 msgid "Run with text from right to left (Right-To-Left)." msgstr "Démarre avec le texte de droite à gauche (Right-To-Left)." #: gtk-awf/src/awf-gtk2.c:333 gtk-awf/src/awf-gtk3.c:341 #: gtk-awf/src/awf-gtk3.c:400 gtk-awf/src/awf-gtk4.c:330 #: gtk-awf/src/awf-gtk4.c:370 gtk-awf/src/awf-qt5.cpp:618 #: gtk-awf/src/awf-qt5.cpp:639 gtk-awf/src/awf-qt6.cpp:592 #: gtk-awf/src/awf-qt6.cpp:612 msgid "Run with the specified theme." msgstr "Démarre avec le thème spécifié." #: gtk-awf/src/awf-gtk2.c:331 gtk-awf/src/awf-gtk3.c:339 #: gtk-awf/src/awf-gtk3.c:392 gtk-awf/src/awf-gtk4.c:328 #: gtk-awf/src/awf-gtk4.c:362 gtk-awf/src/awf-qt5.cpp:616 #: gtk-awf/src/awf-qt6.cpp:590 msgid "Show version number." msgstr "Affiche le numéro de version." #: gtk-awf/src/awf-qt5.cpp:760 gtk-awf/src/awf-qt5.cpp:1065 #: gtk-awf/src/awf-qt6.cpp:732 gtk-awf/src/awf-qt6.cpp:1031 msgid "Theme %1 loaded." msgstr "Thème %1 chargé." #: gtk-awf/src/awf-qt5.cpp:731 gtk-awf/src/awf-qt6.cpp:703 msgid "Theme %1 reloaded (error saving screenshot)." msgstr "" "Thème %1 rechargé (erreur lors de la sauvegarde de la capture d'écran)." #: gtk-awf/src/awf-qt5.cpp:729 gtk-awf/src/awf-qt6.cpp:701 msgid "Theme %1 reloaded, then screenshot saved (%2)." msgstr "Thème %1 rechargé, puis capture d'écran enregistrée (%2)." #: gtk-awf/src/awf-qt5.cpp:734 gtk-awf/src/awf-qt6.cpp:706 msgid "Theme %1 reloaded." msgstr "Thème %1 rechargé." #: gtk-awf/src/awf-gtk2.c:520 gtk-awf/src/awf-gtk2.c:873 #: gtk-awf/src/awf-gtk3.c:626 gtk-awf/src/awf-gtk3.c:1103 #: gtk-awf/src/awf-gtk4.c:564 gtk-awf/src/awf-gtk4.c:1010 #, c-format msgid "Theme %s loaded." msgstr "Thème %s chargé." #: gtk-awf/src/awf-gtk2.c:487 gtk-awf/src/awf-gtk3.c:588 #: gtk-awf/src/awf-gtk4.c:531 #, c-format msgid "Theme %s reloaded (error saving screenshot)." msgstr "" "Thème %s rechargé (erreur lors de la sauvegarde de la capture d'écran)." #: gtk-awf/src/awf-gtk2.c:482 gtk-awf/src/awf-gtk3.c:583 #: gtk-awf/src/awf-gtk4.c:526 #, c-format msgid "Theme %s reloaded, then screenshot saved (%s)." msgstr "Thème %s rechargé, puis capture d'écran enregistrée (%s)." #: gtk-awf/src/awf-gtk2.c:493 gtk-awf/src/awf-gtk3.c:594 #: gtk-awf/src/awf-gtk4.c:537 #, c-format msgid "Theme %s reloaded." msgstr "Thème %s rechargé." #: gtk-awf/src/awf-gtk2.c:2686 gtk-awf/src/awf-gtk3.c:3102 #: gtk-awf/src/awf-gtk4.c:3045 msgid "This is a question bar." msgstr "Ceci est une barre de question." #: gtk-awf/src/awf-gtk2.c:2692 gtk-awf/src/awf-gtk3.c:3108 #: gtk-awf/src/awf-gtk4.c:3051 msgid "This is a warning bar." msgstr "Ceci est une barre d'avertissement." #: gtk-awf/src/awf-gtk2.c:2698 gtk-awf/src/awf-gtk3.c:3114 #: gtk-awf/src/awf-gtk4.c:3057 msgid "This is an error bar." msgstr "Ceci est une barre d'erreur." #: gtk-awf/src/awf-gtk2.c:2680 gtk-awf/src/awf-gtk3.c:3096 #: gtk-awf/src/awf-gtk4.c:3039 msgid "This is an info bar." msgstr "Ceci est une barre d'information." #: gtk-awf/src/awf-qt5.cpp:2713 gtk-awf/src/awf-qt6.cpp:2672 msgid "Write QSS here..." msgstr "Écrire le QSS ici..." #: gtk-awf/src/awf-gtk2.c:2264 gtk-awf/src/awf-gtk3.c:2636 #: gtk-awf/src/awf-gtk4.c:2594 msgid "_Help" msgstr "Aid_e" #: gtk-awf/src/awf-gtk2.c:2099 gtk-awf/src/awf-gtk3.c:2471 #: gtk-awf/src/awf-gtk4.c:2383 gtk-awf/src/awf-qt5.cpp:2092 #: gtk-awf/src/awf-qt6.cpp:2050 msgid "_Options" msgstr "_Options" #: gtk-awf/src/awf-gtk4.c:2388 gtk-awf/src/awf-qt5.cpp:2102 #: gtk-awf/src/awf-qt6.cpp:2060 msgid "_Refresh" msgstr "A_ctualiser" #: gtk-awf/src/awf-gtk2.c:2157 gtk-awf/src/awf-gtk3.c:2529 #: gtk-awf/src/awf-gtk4.c:2491 gtk-awf/src/awf-qt5.cpp:2154 #: gtk-awf/src/awf-qt6.cpp:2112 msgid "_System themes" msgstr "Thèmes _système" #: gtk-awf/src/awf-gtk2.c:2250 gtk-awf/src/awf-gtk3.c:2622 #: gtk-awf/src/awf-gtk4.c:2586 gtk-awf/src/awf-qt5.cpp:2219 #: gtk-awf/src/awf-qt6.cpp:2177 msgid "_Text direction" msgstr "Direction du _texte" #: gtk-awf/src/awf-gtk2.c:2208 gtk-awf/src/awf-gtk3.c:2580 #: gtk-awf/src/awf-gtk4.c:2538 gtk-awf/src/awf-qt5.cpp:2191 #: gtk-awf/src/awf-qt6.cpp:2149 msgid "_User themes" msgstr "Thèmes _utilisateur" #: gtk-awf/src/awf-qt5.cpp:622 gtk-awf/src/awf-qt5.cpp:2679 #: gtk-awf/src/awf-qt6.cpp:596 gtk-awf/src/awf-qt6.cpp:2638 msgid "compiled in %1 with qt %2.%3.%4" msgstr " compilé en %1 avec qt %2.%3.%4" #: gtk-awf/src/awf-gtk2.c:337 gtk-awf/src/awf-gtk2.c:2634 #: gtk-awf/src/awf-gtk3.c:345 gtk-awf/src/awf-gtk3.c:3042 #: gtk-awf/src/awf-gtk4.c:334 gtk-awf/src/awf-gtk4.c:2985 #, c-format msgid "compiled in %s with gtk %d.%d.%d and glib %d.%d.%d and pango %s" msgstr " compilé en %s avec gtk %d.%d.%d et glib %d.%d.%d et pango %s" #: gtk-awf/src/awf-gtk2.c:2633 gtk-awf/src/awf-gtk3.c:3041 #: gtk-awf/src/awf-gtk4.c:2984 gtk-awf/src/awf-qt5.cpp:2678 #: gtk-awf/src/awf-qt6.cpp:2637 msgid "to reset keyboard shortcuts." msgstr "pour réinitialiser les raccourcis clavier."

    v&=a쐚{EM+urԮ$Unw1ݤ0;_.ꥨ[R*n/K]_Uҭ+ȁD(TO>!CD:@ED2r!9Rcry){RҸ@~౶KYLS|=(բ&Jt%'>0`-mǺV}Z*)UV(ꯗs97}e,eX6 2i'$ޖ?$+*Ρ4I%Jme@"hf,uKZ~!.)"XB^R!?S%]]^\լwwʚk AtAdq +)ۨ\ǧ:wW)C\1%rm -K:Zyr6ΰUڅuJ%T/l;UKJHKJ=)eӸ)KBV۪+ֈ)E `kcU:iY^pQvl/Qo8RP:;5e8ȅ/l2baRn\R:*!ia``XHLP3@FEtٔ+..*8H2CKwS Vbv i+FB{)|X۾KC^O^We )i%S1SzyFQ7wG^K+(,쁴^*MB ht!EX z!SRR[I3=[ہB@ h!2aq% zTon~Me(xZ>~? uU%)K+VTy+*ɥҦ&pHuSo^Z-3znAUK;@> @m^q  )ure7:HgR.R'wPN *?(,(䃥/5`źjT٪ϓ/ieQ@hR^5*H/q3Byz)HnR./:*kJk~kOa@?U^ tٔV~^Dl8f-Bh])1ΉEӌ9W/*X( ֔#*ecF:lʶԁ>uSfK?SoS'gl/l:R?ʟ=-uttUKwR(q鄋a 3O)@ѥ{I]?.l (`>|GQ {B{BWe ˳!Pw/N=o9r<`.v}!;@$|zThpɶ#'f:OMBTC|6L `)hݸnky^HĬGl68[BxSHa[E:ģvސTxD01iv<8g0zIAbscÃ놡iˈ6===5:;6c2쯦ۆqdvsO8ָnX0/vFY=eS̙-+Sc]8=664uΎNʝU),@a7g_v.X,u5NR1΂sfn5/NƧ kAzpnޙw'g-*$~mݭrI>v%Ҧm@V*j65ZVNܥ}R f9j!?!yZ285f\}cye70i0.q6Zn|4͍ NSSPwIyж:9=3jT1;Gܓv9\Fw̓ 6sSn>c.ϟ#!ãayAh|cIˡD'gvpf9=n㺝co̓ĨbtY5gX9(uIGZ/Kr-U*a+=uTݕwu?cV_%AS"iV/y\۝G_[߯^0gqr4G-3qeYM8; Of3C6i FǴe<^0,86a4C&mƹm{feΆ,˖m3+,cN50)! / hh^V̄ci6:elˎ80i2RqQmzx3e=m H#i]U\ڊzP_R5kGSw]%q^_-yV4_4T7P]N_T}QQ afue"PE\UOPԸMDkײF5OU{IXpG1g=JaX$XqIqG*uZ@HA2D ;$捰t!80F0+=R) r۸A˜Q/z/B.W$SPT $Ez0"3q^l7#p~9NODW ӼP)'w\H7yӲ2 ]zT $2KO貿8PC2$i h !K40XpR#NDtZ' R4smKpI{A^BnuruA0&ppaz栞=fw/L(t^&HMH·2V'Mհ;V)ydO#twxNa.Da1^q+j9=Ysb@x#R<1H< ˂QLHeA爸C!qaA@DdTqaa6 2./g Q~H}2 Ho,3\fnGpsw>dN3Ii@rg_ }NB7 I;@b $W$wq@rxc7νR~"y.kz85ȎJH0zAJehDCR,w4;*!9ճHlQȮf%%rF\ΘeILGѣ+>_&[8ZG<79?_.N1Τ+vD\\]@R\@ $| Fe^2]@pD|  +C.(C@RrF^ꈈ˿UQvurSEG-xR _Y^fS0YSwId=Fd嘬bWsҽrkQJU,Y4j>5|i2R5AJJ%C| 3Tj\ʂ:AkJkD`$>5ai@f_K.Fܤ)'$dpܐ sw? j+D%Ʒ 3s9SEs5[u(PkMpo"7u>Mh4x7Ꮮ;4/G;|bĠqUGygQn{p4 kz~o :s+j9 a$[o8GѰ5 n[ͳ'PQ-N A`Rx%nBbD8ġϢΙ@n5Anqk?{~.f:eCl@~:4=dxu2-Zܷ*L$!dv| Rnp-q1)Z[#MA#Mu@Cݼܽ< 8{Ųrk%nGΝn{)>Lt]o_Ý\! U˻c%T.*4N+jmKL+8lP7+%ҁDhn\ 04o~@l#y/,޽ 86|yx6eCxp):b!|E[u\MZ#mJNT,}} t $lˋ|zW? }JXJ/!|L$EBqAa$;Lu!S9|Zno膆fvX*93^.ꔻo{vKb=%)t 6pٵ `^p@n̠_=`H]{ib_.zK[|k?U2K625I'wϟ :Nn%OдҁKrҍ\Bx[oμ4F2-%IfXOzV610VG$S&@癎sj)]3{Hx@F"U#G"靷nn6Y7{ 4CҺ*}IE)(RIJ0w)&iH,zҀ<Ҟ uA3  8GwWMf̍hwCR4)b`ha(  !pi񵞂jR<©q啐>_む@>>!`#|$M H$fn&{?3frᲀ滎s ~ޛ?72ی>ޞ]폳\o:u3c!?aQCΐ.l43Whhoc*9ҡG 4 &zYCΌ#Ad QJK*I=@diSREZo ɧJ.Fvr@Gꮎa@@(XƔ;nBS̔bQ-,ؗ/#L`CSa8{dS CBlJz@[ ^Nv )89?<1_vqe"$,&TPpDэ5IϦ6+EJ`ʲ;ŽD5 ưs쏬ĕB:|؂.,!}D{+s^r{ +EX(I M"6zubT8qTiqB*C`5f@`XB^ 1+mVf 6&!2ߦZЍdN4ֺ -&rݬ:@TkmIᣌYnY]Z41̤!hFɀj1s:<;`nњF b1)ܡ A"ƪ]CJw2Xթj3ր t [}F,uլ]VZYj $]~b '( %|ygv BQLD̏WUZYS%K>dр09.%ڃ]rpVҮ-˚Rzb_p]~`wf/ =$)^Hs}~grBJH5h Φ8QMfe`X e6de-826Y <TYxq^{GbGJ\)VHѪ,ļUuUj+EA.U?P_Bp*^phP[Vͺ=Zȭ_eX/Fuvj,Q2Y۲jklYKeNMmuQƞ@N۲l'lYo4[ֱ1˖eԴ0 fZcxd;gؾ9`~g(0h5 ;4jX[ۇi귃;'&$EOlPO( qO !8P`ӖUPiRA|1zUVSۓMw2‚Mꊰk:= ɕ*CU?]*Zb2 HB8=S%dŲV+_}:LbH4~v/4T+?\k SVĻYXeɭ5vD8;O2ݾ=*ړJ2 D<:zKVA\.{Xp'T CizIZ[Q䳜+&WkWot1~=e5^yv[rekWtCz{cNV8T0o|r։# o aBM:N.I8Y.DKx3"Nd+[0[^MhdtchxiFbt~2oߖoG;1.'bY,VՑM܉ \oY+2mY#Y*rc6Bc:uSGW CU˯`VYD0:ar6![̗ d"͇`⋃hKwjfT r.KmGA8F~3l P[xy fWBLrf,VY=ձ҉ EZY8Xe/Ϡp\ڭa9 L*!Ñ[$Pp xIq T*G1)(ZDAT q1\HqE,C(% f/t 9`j 9CN{~Y3QgQxjm^3j1ZO9<8{qCG'mY&`ÉS99ayVu nr#c g#@^ "DSC dj2= 9c=6 3e;,1_8NAPgG zr*A亀'y .9;!5 rp$iW6)]'-Iy%k$SD@PɵDD LoӧkKP,!Co L[wU;AAE-+@X C ڲY}Qp w@{t\ *Z$UIU{$c6 HP9ϰP8GaH{6_Md],,ۚ iwz=`[ CqiSiH;6ގav} dǨ||j\ !T$.>CAi; '"E8Җ%p<$\&PoѿuFb;Kl0agjx͗%n-6,KoŗR_WXdySД]zַ,Fd xd-%<>! &=D>I>=փ*\_]wKJd\*T$ ݋%`6KmKp%8W q ?ps wIeYVl$X֥sm~K ^W]t}%]~r T4 2H@ʠ\Etص,B*xfTle8M85=DJ %4SZ `a8{U<TcTZ K6.Ke53amLD-C{ ~ V<0RM{!]B'@R>T]A4uZ DSQ>(IENDB`awf-extended-4.2.0/images/thumbs/qt6-menu.png000066400000000000000000001077431522325530000210320ustar00rootroot00000000000000PNG  IHDR`PLTE¶ܩɾڈ\HbKƼǹݾЀUBZF˾źaKא_Jʿĸϋ]IhN]IxUFĵ˼Ƿyk¸}y`N˿²ƺýǻn}VE¶|xtż녃ꟚǿgQࣞ¼պŕwso|n^ޑˈR<ֱQ֛kVaRzgt䜓taըZWT|}~[CѺeLNMKxF0Ԝ;CF\@3;pÇnzdX`3,) jq۱|3B?&r@ƌ$UY9`x=UO䅑Jzx^IDATx{XWb P!0U([$P"`!D"HD$`1(" ƂTT[3s}}f8Q.Z}|Z{ƀ) _Y&` ]7?x׿g~cwsxڮ]xƕ׌?޼yK?Hwlm0Ǵ00>1H<c8)5}< 'Ϳ(u Bnmר(>iٹ׾ͿB6MHBUq?}6d,9t ;,R'ggC!Gf *B2\ѰFøpg.&ȔN]8$A 00 ˎNt(:;fONf&iLE`QYW+W;4AA mp(lI1إPv̦w3flb6gs|c)AfO(s }" 6Hd Eׄe^O܎ElyT1;^13wt#ީ/C3Y~>? D֟{jdQFo d'CFc!8,F x<5~ ~˟{K(lh w~ŗMSOU>>1)6֝p!*A*[Ml?>Í*6 ɊtI .&۸1ab|Pѥ ;e\hx-%~3Ng.!7]; 3 9"W11@)Q _wwc~phr.Gc t€q7EFFi\7ytߓECZ&dJJh[<- Q2DADa rn||hp0ph Q0e`CCnЬnp-EE(Ch2 ,pefMs*ц56N >|m⟆~Xĕ`٢YhSٵq f664Tу;_5#W|0޸F蝎 bOaQQys^O{ c"`0^O;0xS ANzl7G1QH:a! lz$4{z^\2C:l),F<MD.m6!MOҎݥudll9/h;O[tYm6`p!9ݱ!Lwtwۼgt"צ:ӫ2ml6Mo<Ti9S( j 6mi;k459o~#ia(D~yyXع)%)hBZ87qd~o]?'6yi:wYxF 2H>/0wdMHn&0R?@%8\)jgQyB~gM/5dH* Ȕ=̏xb|-"E*$VXdgRh &dQʡ[$83VDjU&ia](6EUDElq~4K*(kEHux,Q-OT _ YAٹ'sc2={4njD=ΰEM[l \Y7MR1W/J$\'@kTkmv 7'OƢ4H$ O$d4# UdzUQϚ̗ZEq{{iuug^U]UE\?b@-Ȭ*T_PM<*'j 㐀̪o*#ZOx9s~Ѱ@0R >. EUb&!gv J p|$уs0 /7921)wC@çY:`DkLkj`ae  $; ҫcHT$4.j/5P! r7l@sPI~T43TNUsMI.1TKRR%ՏR N&6P,cз@*B~˹&TD effI$: hxN~l(-"rjK;*5 ?L%ةlPő)@Õ7X>`sAE9jLhJ>k%*S! hZ!*|{8<#G5 NʤEi icVNZyICk-V]Ž(DrB;#Ioi|щ6m1JUo>QAO{.^(;mu01L"h GA:ϟ5vǘkp&O%c;$hH[=Ng"բ)9*/nhn/1\ f3ԂMw@W4d:v26VGhrysXP6Ä-P\[O#_¾vz$- a08΃xHlf@ʂ.THKcS'Ƣ%##//@~y̑'dSE@Qz Ɯ@Zw~z})24zga^?*AF?^˹0&{pi~d,M9822he2v״P/;cǎ5cdC)4 O5UY=bgGZ̀QGƢdcc`VшJr#1|${dŗO3T"|{}p(cG 3/ ɯ̈́ޭF<9uL=y$~ {25"C9'u#uSc@!ۣ'E]]/5 ;^RGrP> ??Ǚ@gO;֣9|!B}!*ɇ*kbb"]]4{( {8V}ʇgmi:@%x;}jR]rZ_~>}_SUgzg*/TYa47nљZ42(wFfŜm"z'NcP EZ}gwLrd0f_?v}Q? vD!$;}?|v]F1DhD*_CPAv^-K[Ygs D%dgu MҎPKD>8R^C\`6iaciHʽ{!ˀ{}CU.fzD_}u HhNZ"k6({.gѝ2`V  (ص,E DPJ7B20&eyHD㱴@Eu`BR k5jObxX``> 띚ʨyc E2wY$!$hIN \~g/O{uePѡFP#ؐLxΕdf '҂,KD.l!S)0i\e-axQp f qޥxyyWS(m5=D#-k|,>q J6߾{PəGն)UDX!*ZU0mMp*6NNHDo\(|'lM-`tq\{6]umm`ayf}ۛ e kثpj$AA2$gqA5=N;֯ h 010E_W{A{D=7&[m!.țnVںCן` f 7tg'GPλ\c_fKjV+HMaAgYU孝}'8,r̹,_Wͺߏx+W$v+SP ȎѐַroXFP+CQqZ~%n[LkP]|MXJ[߬5aV2~{zD"WÅxY mGWVyWB=Yo0[EWqg $B{]҂[o 9"MۈbPxA{w=1{k]q&k!њ5kx5tvpkt^Qgy[m#m-D?F3v [o|\!D='YY%k|aYW~-`WY3)N)u j phgտeSPnq)=}(SP:.Me&HP 7l~wu{XmP1%KkȐT\4UpĬFK+k 0;oGWq A{{y W\BՆwP !tq7 .DjKwēwc_#P~NKc@!7jZ=40m4=o_o/֘4pHm 7"V;'1UFYY|ǢnVAk_uT"&uO )vZA{a/\ H^ˬDG8'jbH0\/Ov }tU@BAWGPǾgF^0_&(pP/4xJכIT:>Gqqǀ}nz}UV\ID!Q *ې$ uX)ZA씛-<.$=K".p gmf"K'x^TKMM6~'({ X֞hBkЩo݋]UA@LP;]Fq y 10C`EO; Ɔ _)*|ح ⤻~i4:WLK:Cp[ZNˬ.Ϡ0;6Pj(\j|RYXɄ`_J Oz9US'ȜUlU aJZ|awSS}S %?@rrPC;(8)ˬSfT*a2J sdJaYme =󤴠ǟX3۫oB_]l7^9nsF{@ y%ɳrܢC֐I |DPSSޙ[;**2)+$LH{n⹬=/KFU h$rVؤ#Hp\`JJpEO<ؖO`OOOqyyhy MHJ^`9 # ~VCeo []u"l{WteX Egj/ +)UYAdlV:[_dPRZ;ۤ6Z-6pe ?v54֖}g,i1冻Au1ϔ~Κ-=}4ZxAX˒ Ȃg}6~MU*b kꥀMѦ]ÄEtg]A+)}ӓ@@ODmyn20Vi/>2H%A9`ekY2fm X4xՔ6rOԶ{ W[;KثJegO/bK|9\]e{}޽;]5TShV} ^ T r!'///5ٝUT砍O\~'E *JbA,Vv~e1^/UeGL/&Ia2]M/ ͠x.΂Tfx"gZ;t# Hrmդɔ)y} r1P]ey: .`pRS(o&=%%^xg$;VC9`ʵ1}Aa W߱E$6b^LGi`5S]$@B#4olk2RF=e4ӏx#M)oGh#+MդM=> !yXZ[->vc z6f= ch#m_ K+r"qڵ`T8hS{RCsw5qRA\\ )q`x1Z8U7뀕9d쁡DvJmYh^$)퍄 {Q;}|̌1[wA:.)RS]j$*P:dmC G,TT<@DRDGCSmnizK}Dgq upxAcUz_59VȬ=i&긴dpڦH,$uD es PIt,!8(Q\ɤ@Rj V2R^=Z IiN>A͎ fi ɖS.fCtѨX(H Wܑsaw8Ap s.^@>uiA 2l.Ƥmm+?e.s)kԝ‰D:bgOFFAQӓ^ Ϝ_ȐdwdƵ ~=,--CAOʈrz䞥r_yrR.|7WuWP_j-`W}GP0΂:}CYC?x-:Cv FCuB|VNLo$P!PƁ_m.OU@V$ DbQVcl;7}kCj 9ٰšD.wٳ|Vҩ9f%g{{<ѳֺZ1wܹoEtLV ;W5imu:\(/;Ĺ_ۻ䜸e_A바Aӗϖ|RxcD>K%?WZ>Y*qN4&ar{H\jZxN/1?nxs(o a\׾ F9ƾ6σKKS? {{i8ҳ_ UJ,ub7\IPdX8#+pjA G*C)2@qpTC*Cs$ptGc#unRX\()ؚU Żīp/eM>OR>/f%\`h:A _'T=o,kBKSzhks#um,dR>4_,dNfO#`w1]M۱}p\oΝD_> blkh(t-kV[e!ϙ 75AOx- vhviJZ~^[!wbe##h嵊M=֑5jCDH//9m=zdHc Ϋw"K}S3D"d/_d!-8h'|h^r±}>|I^dC"TId I$uxt]xv4 ~jMӳxmyzH(!9_^!~ $wAP"YTawaщz795cNtt" ZӆEUٓ,VxT~O*NNkK[LszRc5?9Y"u BDŽ~qA^zwa 8=V qy8 rҲOW)pw kg:@I^wWUy']U_\ 5%XYVZ}7Xaq߽v>QN*QW%K;| l}vz-c`}s5\؆\\5 ') 69x!OtB'y)O\LlrH9<~(X(yF=*0bbq̫ȗhXd= ]=DLҺcbIqکc&Y4#Q~VE5@Mm lԵfW)eTr!*0[OI`VBHB>LhqCk&@M- -vZ+vlv3sߙ/ y?ywcf/eϏGFY%Eg!b9PfaA_|ÔX1Ti[Ba@?͠gqHeȧBy|9qQ'ؾ@m5@X\DO4 ؗ3l! x6WiY(*|9Ĕ.\M==234z :0!W^!\Fܵ ii1R?P{L zuq-iԫRr:Q7\L6d0rCCLaJUu:J騿uzz pcq}T) QǀŅK @& ڲBRw f4D8GYxqPloo7WVNx~q 555B!>bBx$p]!b |0?#1DPRk[zj0Mx&!4w}Ja1UhAGw܊H~܁-JJq]/ꟺ^s"IPpfN,@l"B2'$'K4Ӊ0h&sK Ή)8nUc=#7T2uǓ{Ga(l>gX,ߤVA(m^~!^"W##|kPbhMC/O*!S`ŪB!E@4ʪSp;nI^c@f< B?;} Mi5PNP4{^Lo8\u9;4IeRŠGKl &G$U}+<6U?l\|cKCՐ4:1FY4;s+pL/nWtHpT=<+l56ÊmUC ýbC:̠H)&yL)+"e~BfZcd2̪N{mme ٱ|HRsTΎ82W3kfC:{a ٿ}S'SPr7Uª.`aa.urx76J[K%%iq!deVWf%>Ogi,:>La*&C@Rh׭0{N^gi~Ǝ~U|la/| ӷ Wf}?0 "EydLgTԐ;|'?|r7ow0_?7+ݽ{gL4$(w᏿\p0t~jlgX/AWGU%x i-{"q 1Bϊfزf Cc嚓wΜyЇi8^ݹtF‘# Œf{BW!fUV>[ 8`LaI #!W`L6#Ta)tHe.! &&BZ{̹sǎs t ؁CX}aqrB-iAgYOjZ5#`Ȅ{ <D-տo~ߝ|Sbm>ħ4WauYB`2O@ʨDXAˁwCO9yu9 D=x s= dZ: r#7 h>M YQbNGP HҪD1c>pȢI0y,@%؝\DRu*l\ wD4i8!Ӊ07uAdnݱ=!?`Y8<Iȸ. ),y.|$KEÏڬJ)M),AAcNcѕqȒq'k-a:% Dr1i:ZJ2~3m^?*6!۔4YIpL:tPnA.,Fm "ٕ5o$mrZLke1)e:;p1Y'BJj^}0nuÀ 4;RW &ԧ %z8<䀭j}:&!W6MQ*.mC]JU5k F4;液I0n S":Ƶ٭ %K᜼*9#pB U5>:> -EC Lܔ _ &}%ĐGkx 4ԖRe H< F0NiYE|H+r]d1b61O i6m*\0`{b4h} -P A[gG.\4u$qpHEb1BZ pcs\B?e<d\O7Y `+sCxȠcI0$ ", a[bR,I5Nٝ;w~[ !+QRR2a@@H($DHu,=GF:^ T^hȧuׯ_N(W0*.Rx'RX0AA'LP J|JG|}?oHFRѕ۷oc9_W9["XB.BA%daᤅKS @9{v~m8%zީ~pԧkcOCo+c`סDqD>𱰉$OM&*Ly1!LHG7|MlK!%KgB}j ,)n'>S  FAxڧcRS D7A2ҔM5`@~k\ )Fy^H 4Ba)d0>pB^FH4S-*\a6a(!>$er `1,VzY`L92H OIVuVtZ^9\WN+#UNsCI^]וMG8!W^_NB";:R"sCDuKa;=bW EGY7ake&$0URq}xxxsL, CTs筨 W$٫> 5ƾM[[vlZNV֤x M{uP^=#5jv}}RdFTv[4껻'>tvuZ'Q^Fs^Аo.3!̪KàA yPhH ߭ӗ. ESB ϡ/P>uh2Lݻbp_!t^:1jƔFq4>#oQ oH&1LiE]v?.4($K |UdtBҐ+d,!E=EaBoQ2 rB_@ѧ༽UԑkKzohj, F0 HrRܙI3H5'-̸QUZ)k-Ѕ+n鼄2Hȕɠ-!CP%zً90$ NQOOGIQGG"K` [3+8^?pI$H] ٽD؝IHIȍז. {چ 6 L&T<%r(Â^z7,]ZlBb,5Dڀ3yuK3//!:07ώ1~ 8ȇz,:Dz4VFb{m[WLHḠL3a[ r[D F`#DϣCfϵks&`'x>0B<ѷcSNYx̅}!ةc"&b~hVUnKY8p/?asv~o&8SPE6m .yy_jbx/0KeV bO*~ze) |auC+W z6WR@|$FYA7 b # ֚F5ZgsLnfؔA2~?/02et!6rb.ceA.ΎrefLjrpw sA-ĢWR B >ꗁܫ_L r+01dc[e4v\JNURYH\D d!*CT|]G'mx @WB<㕌f&c6f:BrjL'F4$#8  ϲb_{WxyH1ϭ*Q 9:y feM~[bA1ˏXS}Ns0*v.O=ZPNɂXDM+/rV%|rEԙ hL:hMͣ< j,.lSr'ڧ[XAO}@U]E} ]BqY#-Pvt )/_+=}7E("SR1_;I(X`)cT5QL:4]7-v뚍Fm8P[*UOE2vZu&9z祗>m.8o ፄ;}3,j?Œf_scF3ۛmxEFd߫ۼh6k2;p1 ?~ ?ጫЅ`a/`c9f#]+=`עF{F1YZ/;D\[wݻe9RD?\I6} ϤCTڻ8]NzbWV06]VtU$` Zb"z|po#t["tz7 /vBԸ 2wAH]Uw!]c9!!?y>1PW b3v-EHF UB}t}A^X y6g-\ڛF9i\mژ+WaD _ps^tP,$p (gǂĥ981Y9NiOAs@ ;ӳ5-QUSQlj"NV{%D5&Q&F|07#!D.*DI$6PȂdcT`>! B ><}l8'P0X;3!<7Hh IvOQtJCȦ~u8D;"6~},@ O.6;*Oѽ8p@!I!񒏂pY"Ja/&\9wNR2ܿ io=yq VRo/),)t7'2.WwY2 v1 +Ξ[C^(BD4BS@) BU,ʱ<22N- OS Wk?}\+~=Q0I BJ_"c ,3 ؀"cS@eoIZqګUf`Hu% |%ACLA&$$f@a8F䧃4{E 1PIl0M_lhDERYzYw8!mE^mћSN A8.hɯ 7{O!j[3a;s@%D׸VIeGH6P]c7:Z^vۡu8X˖u;фiWT -2kEݛ[7"m#qve毅7Y|9s0S"aV'"eJ+DvGnF39-ݗ1EzTEAEL" NNJdˎԋ8Q\yxkf~;Z^ m"DֲEr]! pc#<<gGq|EENr*^TTp6VYũX,({%l5:ƻǛckȎMō'woM-nY G>|M=m*bGRb[<O`jRH\|<_s%~;۲3⎽S+[D^h9ސph k=Zs^.-b]z0<^(Bxr+U y YIeDrJ"PXYRŭjG HoHR<+F#k6oH#פC)OÝW7_J+U:E,س&lVح&leKLm&jQҤtd2K sr F% %$}R>}DpgfKgrg x 9EVTjT'21E69ߧMV33iVXiiAH٢Z#d[K=O=>{&pjC2#vbRX^h4 ?ed Y'E-zu6/WᙵN !̮&:j]V9m~WmY*gFu/ eN*u7$'$r#(K,@V1.U/vf$X<YZ +[\qO0"ـ'[lH/kw/\^˜ "v2ͩBaD '|ĮXbفF[I/sL* D(((^(ކGW%&_rcݢbt5~od䁻ci Ӱ`; yNI .2&X' !1pU:;,RChF8q&xyx\+\HөupcnB Ն% eQ%$d3 !~<@iz1ƯHvY\Dޔ!yYiLx'"zpS.^qϒa-}JT2z+30-=d(V+KVJҡ$ΰ|{+_y䏉 < V,mtŃm wHhP4bQ.cxDk]<$~;^jNvw9_øbhk!9ϤN^<O͎C7ދf@?;dXxIcH/X,텒=i u iWjP23@' lB *GD>QWVI03 *C*`ӧ7!~ф)cI]q qT/Guh{emj3*_4fl^{6X=$V|6do]%vzCEOLuS'/ R9鄐`*6-L=:WԢ*QJJc*I PGTTSlQQ"_uveMm 89G.k+vIdtDGw=gf}T~ BVa%Rt,$JHai\|x[-6JM3;V$x$! z 6 wl̤7tBksS#6Hm2OkR)n%j؏Ez{)f]oOgrr2Oρ8䧙u.gE:ve"&o!d!ʞ:z-YX։i ]LI_(B@ h+ó k&K*Qh|fJƇ&ˀ2 g5"&Glŧ ߻r' N@cB+x3 Yl>UjђB;AerD5reV]*~mWH3, =/ҀfMJ> sp)HT3Wq.p}AbwJ> XyN}s9KG}M ! @H6qT_(3f*OHjDF3& -3$Ob+XD9xX"C|Q@a"H"=N^3sҐkB#Rp(b#֤%ꠡ"S /&cMnt`/ (eqDoGtS%xO @L2`5TcիWNc2AJNN!qM'- / x_neZ2Ο!Ή%c0A p跜OiktBRs'!$-Q$mN WAۄ\af] N b'*0'cPP\KdЗ1BV,6Y<4S`kI9Sۈ&cT* b1Q$$ "nԔ6".lN%mM^A&$*1 dˆ!r%#j3Q\I -*f&A"DoFץHG >shv40G\Lt >=;Y ䷳I԰'$yOSBBҊxTޱg=0)ޥsYeck+mV+45V7W'qk$Ed#z $$~(sgA.}SZٶg߉ j*@/0#\[A£ ha@Y"K%)|# Qp. /]ԫ̌MxVowYM#/tWYY(qX{k)6p;Y:IRڮdwrW9Eq M9%sw~aZZP6-|t~ah6j~h 'f#ks/mkk)$cv"g▻7.K8bλN)͖ל|Zж~{d6aL[+Xģ^Tܺ޲>i4m,Xd^lj,ې#prN|3WˁzڔؒߦGyn.l?@\|0 J Gk7 tz [Kkӟ%O;ew_.MEBxZ\|xETQT7un僗|JT2 C pO &MkQ2o8AcHܖһexB_8(!,?}R:8ג<^S Z2^ӎ!~5Һr_Onz8UiZQb ( @43Cqw",/}2==gIDp q^' B=3|- K! Z04ZST1ޮp7ngɟ-1;EXM Y韷T:F{l;pr>NsBܫZ<>OzD @&j?CjlH)q"y[ר{nw9@U8!Hs)ZQU9ES]dR!ѠCk .mH2؋xHշCߖ/!U-l7$h4E&|bX͹q9? z0;ën$G}%@>ĝ+F'|Ⅻt1.\dIA^S)d"$=xܞ!W{? ; ] lx=^ Wtz7|1Z\-Iw8r&0?;@Il.1TC0fk{ 0%;H< aCp1uUƨo~ rMuوluB5݃)oQa7h%Cɥ$Q ? OD@'@Ha%G1deg .΋σ܂(B! ?u<ɤ} SIdRKp.h J0[tRV|Y2E䩆喜 r&W; !~&T y A1ؤAqqL{490k%B>| H @c.Gbi.46hAB'M٧+.6t0\z)!LE?Hˑ9gEy9beo9%vvw k $bD؇wS^xЧ]lV*k: F(S Mp:nmFms%Ss o :4ʮ Yو\!щ3\FR-.\'+!ET:S>¡ 7STBC0dܡ-[6k0o?\.F!Y!̡l"ڊٌElt9ۋ%JٰCj``S/m9 Qw p\"ރ]\Of8i J|qK9_|/b@8A~O}+K6my@3\m*2`NT0P D\r)}1ゾˇtf*OJz~;Pa]x1"MܖɚN򜺂z=s#`$5 Hj1շj 3)(@J uIf͞)OEI>c.Yx*yKH#Xݿ񛺌8NQ@pY=*':H4W2Cχ\(v>$O‰Y~ɡ ?7oҞsp &; x9,BP?(e"( C0ϲ0 qo>AL~Y]?<0UWr=*ι0@=#TH$u Exw=r+Cu7FհdoBS X@nYEcCF](ge25 x&,X'Lv{Xbqi/-!e9E'mDCpY;wz)5 zV7kK!U?N|S4JX"Ia/(Gꐲ`5l:6vG;r)0Ce`֭%p, 䢾nlíKoo $dž[z=6G8L[N&"W A&~)El`} Y!X)j5L9#ոgWꆹ*. &2w{+g1"z@e!OKeOHjFe?xwI5 h V;諶E}I?'m`OKD=6C"HXDHY3-]lMrcNY1iju(׹ZK'\V>3VnEx*{QA3<`: &iHAH[ ƭIuӭv$F[5m0$ #=`ߛj=1,̶%T6(if[bcVr1V`D'uVCmp|ak1!j9 u:gsny@rrR@*^kFɇ*,/Q{s9fBӼE΃"NfrY%$4:o}ac|ihˡՑ]Rװ0;FYN[v6!7ny#N?ǺWcK$enϝ/ORP`5p*\%7B plG9LƄgACɋ\DdPq 倱Ig9ˢaFxIaFwSHH?8Ν=|̃hHS` 7lIP.2ɤۋ7 ?BQ"*U- hT#·1 VomYjA|Z!OH4 3;Ng(lK!6iz}~ u@M'ٛG~'[TJ%oRnm>HƏm]\B"Nop ID,SaDmۚpԣ(HKP,?kT*V-rƦE뗈;;kz+Iiw >ikPhԑfi\4"tXUv/jlD'bEv\;_Ⱥ_ ,U[χ))3/2pe`>S5-Έ}K %wXʰ!o N{qDWM"=&̒l-"cbneL'\i7bJv]rT8n) ZNndֻ rQ^8Nq@ Nugڼ>^4V|^_VcQ~̹4%yS8O%}s7zyϳa %G)fb;J0 5Fv%mh ̚VTqfCsTJӚ5 2ws@ F@ =xK4Bph0r`Cl6?/6bQ"6*!Knk.!]`7vj L))79Js 0EI6stgЛ)8pwRMXB6+NYx8\%CQ[(]z+qgÆei(>q\!eyi>7pťA C;փ£ppr@^w |o 88;M 5nUD=*4 Z ϝfmU39&+mI v .@MdJ6x0CbI?s*/SO*c\=B{6}CA_, dwڽa̓FmWhao<wcXʇ:O@pr qܖ,ea-@0` H mިϷ - $m`ֻCVA" Hg™h 6[2\6}QXH"3h?!+^OÞ玚x$"iRr$2}PQB^zLEٶ nV0NT*\V(*cpZP1VT1m"p| `߼7(N v?CH<qO H`u{#1,)f iZY/(e{ztfDVִ㴬O,CȦR?hٚUYTDBv<Pl>+:%d7Jv$"d$ $,{HٴMEy!֚մ^?`ϧ^-,K6ٴ跬SOh/y,%]7ߵ60X =pa! ar87 ƈ%m9k`2y2eM@fgP\dfuN:뗜2dns :Nap,X-j/!FrC޸%Bh 7UX۴,s|mɱ_ް@޹MmnѦj]Oms냲G炥^*90Ua ;HPS-t{nrbuq@@50FSvP( M00l` (Q)WDc|< y5! {^NڠuDB0[^""ML0\h xw~7dе_l8 p^l !Cu;AwySU8R=BQ˾S "![e$nXr2d󘕺C(Pq0\y:U~>f9Iw= "bP0B8iF!+?z:xwݸA ǝZ:NK~%&pb8*V)D#7(X˔ h dMʝ Io"AL$X"MƓ)O,S;I Nl>ċ-p>"q[N NEgfHM } QK@c"ʧivn$)_d A_\&Ww^ E٥+/^T5jgg'j~*7դ:ߠ p+>P 9m~N_}j*XEV6|.2# W"ztihrcƴ_@.B7E+jx.+S7\hq`-:zwhh4a`ahb%S3WĬejN?Z,!KΒ~qNT*{os, :;7@XF}:2oRF-ޕsS>HfJTKd=`Ĝ攩wmhnY[>\Y[=N1l [sewkò?sTj J.L `pmE- z>MnP x3 n/·g$"gtBXT9>/*}x؃<|O@9MǘNDx;|/@! xgM'|L2J?ɡ T 6?.zr/f61j^ZaPp>\Ji`E4ߡRװS@cKG"X"4= {Q @vh LhfT6Z?10=-;pWk\Z^Rgm+c3C!y^|ֺ93a}?ܺ[ryLn=_Я.0,6ZXun֏MLMO"G%5Rdh6Y8TSQEZìsKkhnn¤\[^t["zuv؇!]"D뇦f"k&'TL40730A9Qcb~~chcjd~]65hHU?\p,2=0upXA~ iSJ;:VQyCg(|KcuiCH}f1S'5 ZVEu@@v:@BtF2`uF/t v)̮ۺOѥe #ld;vj@"ȯI "iuڧ .]ishnAѥ@}V[*KKRh5ú.M%C~-X@95,Ɇ2(ÝYC  0Ӂ9CdoC*vZ@p4T5PDzA*JlsSiԡ/܂.FQAa%ӠA32NKѿCϐX,zy8H~{g' a[Y6P+F9~)ur 'JT2QGS@tr2п^JfQCmQV&F5L" \xQҁIR2BR7!D%SZr%E') [)y`Pu D(˹r[N^5e\IsByjlQR?B)z>‘!&v2E^/k|_K7~Kb_67|}omm-^mmu?FIm/Hmm-t*I_^0tm|VP6ǒo4ZXRjyi)"RfXz^AQ[dhC2&Y&[IT˂H&/Ig"-g;njlr둡:aWA@H/ꗇf9yvEWOdyW~knYטtW#9SnnaWU?k~l2\ʔ2FVfWW9$5_QHЯ6¼~PIN_(Vzygx+FU)VS/VvWQ[_TJBHz pb.ͽ88c1v |h0]HB-wV? +e=}t,BEfXV i,JXWVǑ͚E%ĵa?ub\;[fdkHLQIar3nvtJbRY &#Z%|'5rY;=UU>c%HqQg  Ca};#> Ń҈ Qu; j\;b:,?"PN{I1_ +u"uKa*!<? ?Q[Nr=O б2*Vݹ~:9\FnHHQ,O;/@<`Y #L8 (MEu$7 !B\r "nwF?d{.)im@$\-f㠣FC6B\" lɶמf>NtNrI}ct@sXTYW_9[[~&K-B2mUAh_9~kH(M~j)\Gju 7pu5~a5l56u+L;/ yoB 9lq~ϴ2ܙk M~̞^]gwxz夽SVz;KIyMyr,P?LBLg!.A$LjL&EfAKTrCH.~Ԃ^r:3Z|JImV?b :fCMu&SQRgG^KoTz&~ѯB &[A5hDM˸hh|Hg[f6Mw )\tצ2ۖ oT p\/ 5 } ZU+檽t5g=q)w8lDҙ8!Q[rA9łŽT'sK ,r6CU.Uwlb [`نHz  !hE@D~.H" Un`rvB>om!hQ*0v"apUśU2Y:0vS*o@cweHɺaJNy(.Cκl2j/"}wA9U>_߾"g)1Fq:eb/A"/"$Cٔ*%Z(MP | ӏ DsOd|(ju46l6>gXZ] { /Y]MrqEgן6m(CNK>rݹ/; B8jotC`Bj:>jY!2޳;pz < E / 7d<ߍO>6FXÖo^0 ̞pa nǠ!aȍ~Eu~e5<A R٣:qMI#5(Ψ A6Y ٣52ןZY @楥=cλ*Ec\_?尴:iD}yǙ2ӾKsˉXGZ!{ f]/N^S2AF i$hh#FGb72JK0@ى :Ե(B#ۦpU⮭tiH$7@T54W5Z-4h - 2!7K)7 rF2vih[։9or, p簁aZXCE3LDuC$E\g"BsFPa&p%T&Jm!(w7r-9M*HƵ[;C1yAPo2:L4g [:"ӌkRVO˴aiA (GfjXT FvEL ;y_XXMHP;yrq=w^rZ=}<V T'M6}N wU{-չd9ZQ(IG -jl+HT ZzT@!;;U0$N4p"Jr9Ț/5⁗ "! ɪsLԡ)t=YmGo.g:}OYstrwVs )wX\"r :oNL'j;y gwD_Y{:}^x*H.)H a@U~?&++ĊfGmH" [pWa;::mFlςR7A'9}$Y+<49!mLX/ן.ٕnzR;k%gQ<~A7t MykDo?܎9ob#II*l!͸|k>zr@me$Fٵ2-/Ӊ 8"@Mf}[yVc89< *  &4bs H"kt4 +ӮD0+E {]'g íͅYMxC#R&DP/%wXu1-!L=GRa&e]"#_k'3GwPZu.U F#ĸb8;Êfģg3b |̓*WDp)Ѩb$vEΠcȖ32ޑlhvĶ0ۢ{ɁuJyAˡ$y+K2*!se J'3{{3ɽ=B0Whll:lk9`[ 4BPtFT`a;5AXn_wX z#UJw䜋 &HYYЗq9J,p^aN y`C3u@.<K= B]# ,`Ǖf;-H A kk.{6?s.)Pc/ c0qwfFOj&F0fMVkY,Kr]q@P;Nzu~9l&)r."g鑕=KۆR@ +'-6Cd9DB`FFHOC^z/#̲Sb0&LX`[5Yr4DyCKqx8r۟ 2P6knsveaytTn#gm!FmU mKHN>VNk԰sXೆuG2 h, 9l\*zGrv$Hr_eӗ,b "4a\H24X0L!rkbMP 8JC~2_e!Ȧe# CmȚkcʢLp1nV`bifLY&.+dY+6Y!j5aY+["&)*MAa1Y^#ϚB2, :sp#;)((/ A҂@;=*0}޾v +U/IENDB`awf-extended-4.2.0/images/thumbs/qt6-rtl-menu.png000066400000000000000000001103241522325530000216160ustar00rootroot00000000000000PNG  IHDR`PLTE¶̩]IʘbK\Hɽø[GǹžUBǽaKĹƺʿ_IĵźΣhNxUF˽˿Ƿ²˼ȻlgQ{lǺ¶bPqcżT>|`MϾɕĿٗxjr{ws踰|VD򍆀ͿԮĺ݈Q<Փl[~|zӵwrnң́{v{۱։hYᙙWCqnjb_\ub嬎wP?kVhebdPtqYVTljgrI7ֳrstYI˺MKJbSȰ9?AҙW=3_n9O+͝*=9+꡶峒z,K[?/QYBion))mbCSqLhronF͢B6{SBk9P}ǗW\ߓ͢"~+nua/~z6drR|~5~r>n麢u¶sH}愙Ⓓ _(KN6'gfƸ7į\2ffcTO= @?o?}?MA+$aҞL7[n<w;#5'u >kuSs3quɁ9SR8S?'13)ggfNwω_HC_wC2__GI: @u/B''{9Iui<};5-kbIօY85׭Ξkz-r{by Ւ/j&dM gJܶI c ̗NM!TXO˘ !57ujx1~Q{ޞ:6ooo { ÷ >e?f yP}]mOzPΛjۃj==3336?c90?CE><tk["1|!o<(JKQRV}GʢK>*B% @Q$~-`9603#Brf՞={Qy}16\^2i&Ox ,OSvͭޏǼ)hn'"2 MݬRM(hB[[L+-*ג ~nj-Mn&٘:H{ ƚDGgqq'CD4 0c-2YH6릧C%iiԄ,KCAd(w1&jDDIXurҗ> 1"J#j6 d 3GökdsymxGl|;ۿ]N2mO${5k 9Ͷ9Q;s$^Ӡ z{I$#"cK42n&nw}!k5Aެ tG#T&!OK:=%̀So[t^{׭"-q$Y<̵ȫ ]yœF'z}l[;&ٍsE~p2D=̿B5 㝨s6|*D9mffs8F 3 <>02ڒZ~FI7 ƎJ!_%  ws!-wsydjJt5q'2 R]P8ӇH4q Zp@9ɕdniw)cmNv *ʚ96$SW-H~+᎖&>$s#208`EoBRA"iޛB!DfCMp/Q7wgȜɜAM͝zuH*96&mdD( $|(K@τ+_ѱ^YJ kĆoVo> 4BS2^B*`f@"xY!1{MlMΪ(+d(`ByEi gS/wF 5a_0r=tP'c L7^>x!nP|BVI;hiGCKW)n,w)s_ foD1݁u6m؞3pyL\P# B _p,@N'Ǽق lcP)Ǜ#DOt_G([G^Y悢4_,ZW&@Ki0X$So[7mEn&ZhY 9 +]hyIqwߍ TkIyDoͷxTmNo"4%qlIMhI|\];wܼ'.;DMHH1mk\N?n϶ELbP2{o|c4UٌQ}փ ]̱ ^œl!ˑ,Ր(y30O?mG&FDDrlǍ=|:LAfKty潯fFG?̷o׌Bk_-}UA*oǼIޅ  nd4M:ˤ0"YpPP~r7maf Zh XGT23 S FFSųbo 2+>vbہفьQV˨ƢٯfgڂFI#]-47&w9`/a?'xzx$0IzM9!~Iȴ@_} fG?&5{i=SSޖrB7NNzaI&'G AMAM4_w5LSMԧn3 =#H+F~ef~ T7e9N>sb{F- 9r[DԬ>ab`FFKӅaO_-Q@7w7NB!?Y"2di@$(!_~D0'ٳm#^5&a3RgZp2/DItMƹ jPB9I<% k_2 ='`QBc=N@C# D"k K&*=Vg?B )dQ<3VKL!"AtN" vhh H ʚet+Vcl~ B]gmh. M©У>va}҂=?Чg$:8 *nD-wB&w2e1[˱dc<'INN֣z'899>Af BVI-dMGUt~>L~cyW/t]2 zz NXhgFPZ/5_4nx3Puy1`Zg7CGvtt9vZOרw |R55NrT,lȴWC{ի>zm-Q/1#4) KXK `PG.ZLk) `؇4HU-\-<@]} m.}}_` j12^f%JH$D[yUx}x }6nVP o ,A/G vE啄;,gYtRn_X%Ehy FE /:Ⱦ t .EjHfZ~c)ZZZZ3g>dhb-#oeeeK~9X (T-(ue`v$<U8%n =!;PB -F.k0W.fVȇ]`y7)74ЀS? , $6wۑfmzzaf Co|ܙA͈w4v(Qa:@GWNN y>6B#èzQVG_? Uz,`QКMU%R: ؕ\YvBK^i?D;־Ā)^i"Zw]Z0&`MY%Mfi a6>hGK[yqy YbTVTlsؖ^v;c8ئļZg1-%勲ngZI?ne| 3ݸsEKe<>{Fg!.E48~=Q>UlL[wY>=ywdO4ʪ}WɓOsKEl--MMegJcR˟)i!zG+6bYOj*qzgB¬ⳕ%ei|@`eqV$30N9L[+C\LH0j1ݤ9+'d Ғ|/*Vfzb`Wԙ54 !>V-S5,DG򐭬ѵĊM$AUe-hВ*!~A22>(^~E /&ZfItw"L NV҂nc`af6^Q[2(2r800c$dM$& ~ jJr4%۸3lL$.C!`i((eN@E,!x|7& /!Ry*-XvuaZ0%GHy]|!wftwe@.&dT-fV.,N} UPgpY~'PC'E KUVSK4& ҒibwAa B 1JIh+|Y[nw}9lw Z~,0 OÚ n楙a@]\__ߵ;7)E aQt$"XB'%C$JPx{',,K\JS;M uSh3yg @A-$R`Fivc\ɈE kc3IODt.dudbdx_@$2S8T"\[7|n}^eik^j(N(,LTTK"j5Zn}){mqe FʛGO_=w6Ю$+.Rq'֦/n_^d*Bcx(nx@@G/ƺnWE|v u8.!iMs];.EJHR֐ }.(=(b=:j=f{|J^CӗL{%w|V7LSܦsqXtt"( DD0pPt{yub]AgC"Dn'ĂI܆`CHllR`@HH@]49$\Fj!=# q6mex^{! +<y`>V? _әAQ=00`gEPh,Dhij1Du MHƑN{EѰ &B .E pXh,##寄Ȉޒ ,њ{L0DS 8( !JY۩.$r ahuޔ\M 5" UbRubm9#0=aֽT Gd=c]kA|ꯀ|ǎ OrIہ6~'6ɞj!-/<9>٪0Nk K=K84HFj V6EUJ\WCOpf`SrPÖVd- YVsӂSqȑb/ 7cSFxpRb-oz!ai E"jZHmH'/~ŕkW? xٵ]Bßo\4X׿i]u뵕"HOYr+_I#C՟: Za4@̵@/ j'n5R:ygWM;Tq]RV\4]mmbFq líO**>KRxbgOj wIX_~8vۥ*{2\qBrUtnXAMJB.0Tb#\h Mۡ/W>ŽS*ʊ ;/_,lj*,ɻ/;cLǗuѥ!iiι޺ImRw~J. zñ`!2lҁ'bp:Y{OWKD=DCHJu*ȀoP}6,LqT%kfVM?>Uxb}ݕ9Fm!qkkwZ>vIjMk쫽l]U\n^/b ÏS.+|YPGʝZ{_jv\i(KbϦtv RJN$4AΛ)7O.c!VDə|)$&I!I 0'&&<81֥ ޘNBD놫g`|Ղŋu~~yyl[@7jo׉Fi 6R^v"=t[NppME4hhvNIpADBB`CeZ$6K[/:1CVj/ӡ8rz ]ni{OWOV2A@2DB=E\T}J ;;dK\eN ;KP:P $21)wԩSHܹ؋ra@` ^t6 8!sYjۉ~$qW-AHܾxV,z/[ ~ !gm~:ఇ9IYJVra榺69x `ֱBlYblٺe1gjr 0[y9w>!]t\˯+uQB7Tޱ<.ˑ BhI75Bp =VzB5T VX4`[,YE b5cO {Re-SjC%>ߴFM7;~tPC#V(!?)۠rܵWBC׭pT`J9 .v ₻uEB0G UGzB_2H>j!K`DeǍ5Ak *TlMX;=*;<;,!dgwe…r 'j/u?Ȼy3;.|I/hܦѦ?\KE (!.>Xۗuk+T\E6pG.6݄$zBÕՒ[癬:-lҿqxYF1ˊ>y~5]}U3114qptAPj~f+Fd 1 fc?=u?t~alIBi}*húW m&\ `Zk 6/X lqvG` n)ZMO|t瓫IYE>PSX2hnҳ8/5  ?u6_5wc(k/zJ5xu6<T{1oT*EӢႉOݷG5u{(`!9䤆tKSWAP. @Ԡ\v!M1A)FAHuDk Z;^R^ŵ5s֚31={BAgﻟ{y}HHDyȻQG4Rhʱ6a}!Ǣ(xJGgڻHX-`p@bOkpI C︬P'p2qh8 v'!y&sfy׿%>sdS?1' octU~y?b ).)nj~B>=lR2$}}|hkrq4yQ5,ǦZH-)^è،0"АBt@\Mӥ7~v39Cpӏ1|dm\w0^q14l[,LlLPU.\ٻnLskJ`ěĜ &EŠkH "$+~v{Q %r堲F`\|ac)%3o"0dԖp 0z'iwPQa!b16I1T"T,B*KГ(c $T:K;tԀ5 X}[Cۚ8/>}2?&1 A_W2~LJڥ!KE\b,TC6xS݉(6>#F^iЩuiJ8- aZd Tn(Rٰ2z_+ɤʵ^:wNOW^>Ώ,?''L˪l޻k|<.놯B=ˊb~-8ΠDιNV&&B,칫[L&IloXm b=-=Fm#FѦ֗j,>LJaz Bi6$v;.ρ& |^'o[+noΟ<r~-$ M=C`bUrlkuYeʿv7,̧#@vJh|BhҐW'S4 FC<$ , hgմ6qxsG# C|k>}{hpbcR6 Y^ԙk!C~և۠S+='gA}'_BM2><;c2奃IrZ*\‡em~ 'bXx *zĥz [C>~#x gdWOܸtErp>ݕ@X-xJzNTE;'6bremb^0<8%mJ e҇%F;ڵ,T["tc#SyT taL_㗬YƐ'm5O|IganWCB.u_8u'dR/h|:h'. lyqERfQޢAhi8m63e.Zf]fHU2oiEj[9L^HQ:x*hB@ 2<;j"ACHEúO9;qǢ۲2Ly)!R^:h# bFJ[EBg٬DmRC߈rztd"$<6:e oM5wO}<J&ߐ{-8`]cy Z/_|EWŋFK08)/بEi/2 ,aCxzP7n޼9m\\RXי ?>'xyj:aH ̠ICnri+t_cO0c+%-SN\w'rFR``"j. T}G>weا'CI)?shp?8nOw.tsؖԐ|80 " k߼ )dG]Ŏ`GA ͈ !)pԺ8|O{÷{'̑BOZܽPY~1l}I??H嵽P3Q&U͸}rw`]|1;#(h( 2pIl!W; @|(a1\PL﯑JԲzztp]NBN\sCIΞ9Tp˧|ךa[?IHMTBg` ZZ4X \%Ϋp[Ϣ!_̱a% 3ApB8e Lϙo?6.]]w}d_OZ>-9x a)P&Y 9 !k峾ǐI\9*'<-tac BrFt!2ߧT: r(cS)ai$$ w_GͪpV^PH9i^6 Ca2u;B,8BjJ$W {\|!rwsO䇌s#$D[H5T=joݺԅxNN_&jHބ0&+K -0-L{(GH /{qj;q{@vt:gJT8 !^.)Ϛl}^\fY!aj>"mHL}|LIhc%!J akTgg;RA/𨓊,gFʦe]?20 ''.!E遧3*}:& SsgcvC⚲*,E; (5<%"xʬxq"ȁYZA|L5~ \n-Oz~]쟛FHhm,0^x<mσI'K=bHa̭f!$7YM WU?T^}Ԑ3_.\sTǃTTw{3Łk 4BB_͆>PQ W|^:: x.lA@AlntU֞zEo0zkOdن$ڧ׸k<ѣ9pB\ޒ[x(5"pitBOc"HܱIKp#H E^acױIֱcK"@a"U ݪD>K9 !8p Gsxdp8kH<T@kS!Q3weZ;vl:XDʆ"*x޺[U*rJs#`Lv^`,NwuBMf4Y4dg!G#=F`|.'p c#"Yeo(v)cu~{P[S^<jW v]a*, z{إ²:mi v œi!5T"inoryS %e5A?4 ^5!U5 N\ o_2)T~ӄQz64(22xg"Rg0pq1$<0 EHL 4؉ yA"dïݠq?dnɊHy4ؼ2z}9޻+3'~JS3z'&߂'A#p3/s VN|2+[h+po~`ow1)"4eonq+ A6+!?186Od};o䠹wk)<# y.+u_M;㤝1$:p fuفË;N~gHyDK۸='`&1z%-qe9+צDG8%m oRA <υ_LEÈ=Ņ~^fݜdˍ HIxq1ߡ"k !3A^,WC5F[ p TӠ#s<"Ew.3. /jNQbn}!7*@t8 F.JH>fX)RN=o>BpBEX`ȼRؚU/"n81#ـ2b!{#`]uQؼBjL>p/`D͍!UP "Sm!ȯd'V*JʬmkPÇ\plB;rwQ d|]h ^Cv|=G>6{9,߄L{oai ]Quo*ޚYAϩ!$ڦŃ貰CֶK7Iٶ6g]J6zmNNNvB[cMف0..¹4$|eݬ_q|+`do.$!e9z!*ÂJgl %.S,ow30$P9 Ξ%٦c[QoƩY{>>5$4;2)*Aq͝ Yk; plkp\EqZ*Crk/h?nBu}8-lKC0! $!x.7!Q4ݪ168Fr ܈Bة]'Phv5x\1B! . J! q p!<{Lfp&Г99ȕuڵFQsdW8cPzk8b]X!܌ߣ"!`K%ե'.|BaW%P^'T][ŏjǂCW+uᡔ@򾛐9L'Ul5ך.Ǖ^AUDowd5k?uM`h休NQBo&P2ަU0R27i;6b$J{37Nױ*X]-B_  !`:"7sزV SNN_d{vPlaTuݞ]I3?ޠ &sGvE!uෳsҎe׽)3%(ܔMGRcd@ؿʶvCp[u7!96+sM^ЋvcGzzq0q`ooِ^,tD&9[ GCҸ99³RHٔPitv͈oBtNC>?!k} znL߸tcҥW>ؘ6ޥ7L_:cm'}/JGYEp)YT/?l?WְQcC6 "1T*fcU1B!p>BZ+J% hOM70[sB@067c"BGpB*d1LA( %r~/j)k2R)X`&܃gHmPuapxu|L:4(AXHB=9!Fm͆aÚdzJE(jBQ:f U#@ 0B^aBzEP4zϸy20BI ?bmW]dbBCH ZYA\R26-Dfk{Ժz$ jTҶ 5T&O'r)e9Ҧ %KcX5J* ۱ ԐIu9Bum5Ď?nimK)jF8aaqeզ4>qw+3:iիBOB;@Cq?5<K|A}/aye-$MSߪj5ThiQh!uXVd3)ը)f=R!IOOiVB(Aڍ xPv7O&0KڑXXЫW(8M'ciۤG9^mBD(j65í2Ylsϼx+ SgUž[< g\ŅͲ`ئRQeL (| `gD0)sCQ8:Lp%͎˅&Dl!0dFPF0+2-z$dneeG "lE^DuXu!{[i:Ab! ԤˮS(\ /ڹ(2/@%3oTB!p= { D{[ WcU'Ґ@9%>8ٌKd[C~O<ܫE>953B$}ll>\F)T)98WMUZ nDK[,1+-FuXv]gsXC]ʭ5*ӝS8igDu6^Ǔ\0P_I>N > D`GqrƤDfMgRj[j"iQ̓&yH5]W/:c52ߕGBD/A^BPiCd;fC2CY<1(5ԏ͏|Ü3E:15qhj~v"}KceM+`Y19j-F*0XEZXj 6R-֊҇eV$"^@BȠgZ=f M%~?9&,7cS|B*KΆL|I- J̽z#':{U朕)&7 r&:F{+ )`MMNjlD#7oB^ IVJf+uU@BAHu]c.JBL[ݬInO'Q|]6L%䎇!Guu Ȩ[z+jW8 6!~Eg!ĮY&ʖ;IIxZ(Qd:YJ,ki[!-Bĭwm`dA3wYAƠ OH֥+ۻT9f(BONH2 imӜkNB|fQRnYU+ACx+=u[An42+hخUF9#XǤ! \|JmsDHlޯI _ CwCȤěasʖELF>BEXtLx,*ŢufZ(Y, Dq<ƀiHpP09^' %AvA-x׮]C!X]hŅ3BСtQN \2pFP8' GHP<~ #_I. eYex27^(!Ĵ{ eqg$"t*@ܧ*6,RPdP% $$Py 'd 1gj/K [ UGSq;kJM~ CPb`Ȣ:଄G/VC 8y!tA.ׄP<Bt[NiZG Ğxp pPD$rE"Q}#O*CC]/edG2R/)+6 ,[B!7IXMݣJbX|(JĂ -Kن5\zpqD*gK H>3!())//}Sٶ-Ǟ1dL P чZTNN%ԥeQ3(?XhG/|a XaI)WVouEh3zvckX^{v"΍r5俗e9WHfjl6dkFcӲ4̉n<v.ɉ+n̂k,&-j}{]F'/pK/m }} jRB7cn&tc>iE_WZ0X&?9+C0`L8VK5’˅-,{\W.{nǹdeh̏ 2H6נCCza1r$4 s~V|x/:o{sL}@es#b= Vl,Ug;t : 4 t *d yG@XG2mq_^L./!>&#(z"t^Z^^u.KS7 rT`/dmLKP}I=pPH530>&3*eEW#nΜ/n mp+e񏽼ƓspJc洌ė_*C(С{΋cez( B86}EC΁oFP#sb&§]-k@d94ѤdVeál*ND 陰6-ͧCL&C0 7\EC)WxX6L!MK}'@?w*8=y`UN }anGgGD(|І]VC(HDIge jh(${U@IE9(%.փJ9(vCJdY!nD#h2f2I_]4ϑh6ZQ2D3ddH%SE#>8奀4O'[8g+9h;{Od3SDQxGȓL>KX:'QO@ `Bː@2 JHyռtE *XA6sw'DI6h(IGsH!9kMd~} ,{}p(ȴ?Io4y=r{O~|DsDs8 ?HKnE_Aϔ##h(ihr1p!,Ig@.u*r>n;Ƿp79H>!ST?Og ן>y E]H>GOBdy"ekR$]2u.h>pKQ^П/ǑW%rl9+])4J_ Jڋ4nVRB b;(@BjS rhPGry-| mBn  ʎo[J1B* `m&VnwW_*n~cG/ < tkAd^h2Xкb,A]&dsJcٖ̖2SB"ގMR&Ucp]da:5L6C q8P9`q8-_D%<2ZѵB& PUhM*C_+ 0̩@}ap۷4rth@_Z^+#y mf1Q]С8Q&n)E#l۠gS򤊛C9 Ȓ=7D:Il,֣ 6Qw%W fmƷgy~SEs*9BsoId(BWs;'-iHk@h8E*4;'%z$ &(FWQVXY&썆e>讀7/GΜL"z!eB 'tU]"x<[S0hMh_S0~|, % *O7$ [p0G=P@8MpxB|N yu'%ziw7͙8&䘆"^a}0@IX ~r&Bgh4x`/_$# 4 mCdՊrO֗r NiCP ǰ%)8S (E0 '@PYPN2 #|h2>&H ECC5L£ʓjx`̀7d9:DaA@z+gZֲd:JE'M$!L@Uw6ܰfw l΀T3,?o f6 I%g/g8M@*m d& `+7.?:T T۹ChSOBm40 })YjؐҮS!&UI 6 cl)ۿ3g@ʜç?T T{G,;B^Ba/2<[V-9l_Рc5pv/S^:V?UG S/P!'UtpL 8`Rp㉇3n)JH9\/08d.?/C_kGre⧥JN43sנ},P 3BX `+bVz9´^.?Zkj67@ZJxJ 9Y|5AaAVcshpUkoĴ!덃Bc|NAK3 HM}q|ͭm!5E@n&2j ZKB56Q5NI&Z)lSOdU+7  Y̟=p>dȄsHÑ o:m &]A,Y%P*' rπ nk€za,0^˲h<w=$bi4IW*Zplp/ an'- zLjE6C>gB`D?D"&^:XDsa_ jnA ee'*~p^ H}>,+bgK2/Zi`^@  *SeyaN Z&`3ZQ}Vk֛x 1290.H\6<%})IO:ɍT._ ơ_M/DْUtX>gPtH)tȈ>u_M~оd*@`!d@PcPj.JoDC/ex>ߘd,֯ƙ|%p4ws6yP`:kUXC㣝ZKD ƑY%!X߹QKOK{%>FRoMP09` P%gE@ÄT.S\,Q={3 Q2JP`S6_  ю⥅kw޴AqE u35(ĎuK X/90:SKoz6Dc}aw\A2{AaҀ}{9!7FJP>sO)r =SblǬ W&+k$_3a=f\ 07ZamPKr9n5od S?GyegZI|rF"߹=1D^>\$8(f'Q23'E7'f DdE )|Tԛ|ޛrwssh %Vs l0MteɅ/ 02]'9Kc½/Q n4HY#ݤC5TK?8zȃ5C7=xPmi>.[ q)-n wp_)l1͗1| A0C(*&0(p^[rPqPZ,>GoN=F+k7uلЉ |!ѳ|+! P5, 1Nܰ({Қ@n="GD1&-O=N kEp-/vnX\q ,űE2es%05X ÷ ǣ ܦǂƯ]y,T.{M:LXaMZrw͎MA#=2 :t˖( !SV{__YX8 BiYZvp{c3²a18HGAGo]Ш9uc߃-,kI.NScԄSto--/YeJh,-\+!~"" PC\끩8&=hz!xr gΉqh &{d^x!*&P8ԫBqjڎ^`? s v7~Sն+oe8UqڎׂS^&l$ҁ C#Z!>!2 G"5@A._߼{zf͑r_V[c8^2oޙjjn ~{YSe5p W *4~MpYXkڿwon(5w #onH\~=[\&.xx6Uu𛚪墿k< >\.xLUugVݙzj@vC~̓k|kSUGGN5rҽp"{织N=o.J 5SM5:0C@{%dPsS?Pr3IIۉ?66}|}l{'7Xǹ5w_˖{\ɱ3#ƛMm:Ry66z}1u[c^jussVkZ6{VU?(mVϟU+Nӽjcw{fSHml3B_U#nݿgf~;cz|wqέYoY]w~tv߹1][,o\+\QMU35~]ZT LI+0PNC,&֛d i 0wF,FBwp+F:|pOO?3Dg_5uOS/^TVo*mwC.*t/)z'|.ޑ@}s5[rx{ewfٿw>vu?p޹uSs-|{@Hȣ;Zwk" T-ȕFe."\;ͷa [ 5D#Zh=R; ։j)OGۺ%$ Y &~Qm?Pi`6sgWU3Ŀ;W(\Y[M{̮į@i~u?w^hbW z_į_&_SͮعG`/p◮UŅkU" 摑m,%!fWwBuhi:TqFjWCLY}esA Gn!.RGW-6O 7IvU ;+MdA`~;ߘ4=+\"R JGKH@璮h۵/$&YHb\rǃi %܋\66ޓ15//nMߌV~eaa>?!7 RƄ&~M(0ƵT~VMfbOyhbkPw*<$M/i(;~_;^@zɅ(v ǩ6f =p: \Agk*ظpt:Ck{.W~$V˼^ijTY54VEAtĤxFκc"V>ZNJYH19N pr ٽ9٢IMCgԕЏ)pĕJ H=h.DurD{?˪?&z|ZBP'.}_c]]%ş)XAbyQg-Bs Yx[u>@1DS7($! Mi8W^* #u^/B09Y9{e=N uqlx21ooC8:43`3<کޑP: kFQAggN >T'N^o޹o|Nvm|jꟀ|۩F*K?Lƛ x}>\EЗNJkҪUT񽼭6@4^nZv^ŽH<§+&Įr&Zzϋ'tڤbI9IhH.67tv jAS!Ugj}SmF!Smne.M&xS|oɁw,&NhG'eꌱQx@(b˙!6fCv '8J6ASܛ Gx ^Rc4'Ec y{QfDS?faU`C?L*hNgS,x8foF? ,R.Ay VbXC${ZHQTQD]KXY/V8u{AQp8ytLؑ 9Qļ01F鬼1=+H]tvG<݃oPn8& zI逼]"Gǩ;'gGhp$(.gC^JP@8W 08ҡejΔHgi 8WFg~ ]v0F;^$ }' Cq~ ݋.k# Q|d-~PO@N7n}Ns~`OAAO[uQ񭇞yausA^RHgg2Kؤ!hr{'GCb/PؚIS.YǜsUq"-.DkW7ykK*D4+ec@(5 544 Ϯahm(7n 74@͵ZOSf-ĕC -FY"ȻnLOސ+1.Q|?=Jn q\B/UQbW\40D7k@%SD.>eP\yd{ja_΄>_f etiROq|ףy^hT#!qY !T -΄jϿo*x̎<|imd f#W,AQ㙧+@;LpOc~h%}p"x@Kkj+P×-%Y27ѧO_x8ͻ͏|cv< =o?MX%'͊0kEi|IlԽ2ثF"/_\o]@Œ,5 ^UYڭݓNB+XAEH/U:S>5,F zԩQjLÄ)$ӡU++_=z$:Qۮ[]{f)f?јKDuè?%G)ݯz:/ 3Hi w!>zdvÕ/D&0h%"&Eqd# JG!UNͤ_Z׃ZɝLN&hz3B'wt@Ѐuv:G:M 0(E:]5[Ҁ@DjU21MOEH]iI"JMiDž[VM Fl0OND4撉jj1?Sj RZLNbu fbv+rO&H1v .:ϯ $tf~+Msd^Wb]RAt\!͐PWsW$NiJ @xyB5\R?_\8jdܮ&s\ҀX)] 9>w-'ꔰqb]!!?O|~[fc;&[JVj#rxΈ[[n|,n}F~p1<uRg-G7R}X#|;;롥: )rӜv++l=dd!4ƹ>DNj|&p#!Za'Wcj,L)=Kc20/ɑbA3o_^`aph>~]>FcBԔe::ČEpY"uz2orP6 {Q ǧLW_Nq/3W)עhg+++S~\S^ KoN7B8t./xB|M}Zr\:NÄB:ఔL uFt߷9©ưZGږ,baI_˗k d|OfI !Y;Ck3J\5t=DH3AYEm20'>ǂ]>1%vt0 D,*Mϱu^'մ,* ]^)Q!zoc#"js4С.b$zKƫ:>Ycx}{MKR,K`!\Ҩ;e)cG) =j7f'KIqf~q:D@zlUFcE56P>†=8%@`8vXGX7Q|͊SaA4[o B+(8]rv1RE;*͘G:q=R}R҃>2$a@O;2M>G#-Nʕ4 [\ဏ |ǡq+ N6x! VW` e1>dI?2Hh m@p`kj ޒ w`$a`-'޳@ #JB [졀\rĒHт8ZtbbHk12T!$iR 1L$D- E-\rׁл]Oez$VS 0ʆGiTæ_ŧXƄ44!,YdG*d a}T1(@댖Zz$zRg]w>7e8RZz6u)$X,"Z@p` &Y^AB@r @hK-:9cqG8xX`zCFZ>Z"$%~G?Qk5g3NIENDB`awf-extended-4.2.0/images/thumbs/qt6-rtl.png000066400000000000000000001064441522325530000206640ustar00rootroot00000000000000PNG  IHDR`PLTE¶˩źƻʈ[GΘbKȽ˾ʿɿUBŶxUEɻhNµȹ²aJĹ]I_Iø»]IƸykĴ˼ǽƿؾߘgQοϨĸmqaƾ{vû_MṱǷ}bPwspzø|wrѓȗŪrϵ~ormjȻb^[jfc﫫坄x׉iYP;ԑkZԜjUxeXG貞|}~XTQsfWApL=ٷ}cTǯLJHӛ۽C=9˳~fƋp_Aoh?,oYN媏4Tfɷѭs1I{3Hn:ĚE“dziQEyENIDATx]{TSWOC! y A@E!X<G" AM04  )A|JTQRyys{;mg3f{ws8}{s/{8)DO㧁$ntƍ,Es(0]ƞh“7?ʍ? &_߃p#!7;ɰ'&Xăd=Dn/*w,?j/\1o1T%@0v7e?v'R{)=Q*QSFS = ‘)=@gppCc ר*4”Q;} x(oQeQo=*1GbS{#ǨlP ;s;/\P_ޙc $e cˌe#Qܒdž=R*`є=cce=?Lڙ3;3xWc)Qe3R1BRRa?:Fe =Ɇ.}5j.VG1FZʟ=J,];D}"xD4~1{N]Q7RFЭIcc; x軻ވe?2'"Bv>OcgceTg2WF}MrQeˢ#5OFݍFSgYrNP5{⽽Dcdn44;@t GmN=?6r#* #d?`xc{7D(Dϻ O`0F%Tl[ =æ'`)$I?slll'z{z@B~S!Q|7SvT pz?&l7{9-`(+$1(1HB"ֱ1؂wBpGW=S~S$8F0d/8n){FIM>V@нA_(RaGB$@a3%a _`1RKn4z1eXnsA $HQn^H׬ލer)Lni 3<3 ˥)%w#Rh}( $C$t9fY:0O1;1h9yndA %DE}\ ZSiuuEw)HE!j 36ǭQfc̺@;83Ǐɳb)uuXv_u^ $Y#1xlR=%r)S &8w<6/.. į2 2u̾XB B8:cIuڴBW i٧պlᩲ,Rgk;BWFײFA;'VnR9uYJeQP&Rohy4&e8:ThZAPTJ};}%Va) {\JէF~ZcޔT1OX^V.F3ΠኾV.jU YߦpV++4m̬j]UieTRTVhLo;)4DTT锵U6W_I]UP(j1\Q^QT+kW