diff --git b/LICENSE.TXT a/LICENSE.TXT
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ a/LICENSE.TXT
@@ -0,0 +1,674 @@
+ 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
+.
diff --git b/Makefile a/Makefile
new file mode 100644
index 0000000..bfa99f2
--- /dev/null
+++ a/Makefile
@@ -0,0 +1,321 @@
+#############################################################################
+# Makefile for building: apunts
+# Generated by qmake (2.01a) (Qt 4.8.4) on: Mon Nov 4 07:59:25 2013
+# Project: apunts.pro
+# Template: app
+# Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ -o Makefile apunts.pro
+#############################################################################
+
+####### Compiler, tools and options
+
+CC = gcc
+CXX = g++
+DEFINES = -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
+CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
+CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
+INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtSql -I/usr/include/qt4 -I. -I.
+LINK = g++
+LFLAGS = -Wl,-O1
+LIBS = $(SUBLIBS) -L/usr/lib/i386-linux-gnu -lQtSql -lQtGui -lQtCore -lpthread
+AR = ar cqs
+RANLIB =
+QMAKE = /usr/bin/qmake-qt4
+TAR = tar -cf
+COMPRESS = gzip -9f
+COPY = cp -f
+SED = sed
+COPY_FILE = $(COPY)
+COPY_DIR = $(COPY) -r
+STRIP = strip
+INSTALL_FILE = install -m 644 -p
+INSTALL_DIR = $(COPY_DIR)
+INSTALL_PROGRAM = install -m 755 -p
+DEL_FILE = rm -f
+SYMLINK = ln -f -s
+DEL_DIR = rmdir
+MOVE = mv -f
+CHK_DIR_EXISTS= test -d
+MKDIR = mkdir -p
+
+####### Output directory
+
+OBJECTS_DIR = ./
+
+####### Files
+
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ adddialog.cpp \
+ editdialog.cpp \
+ customsqlmodel.cpp \
+ customtextedit.cpp moc_mainwindow.cpp \
+ moc_adddialog.cpp \
+ moc_editdialog.cpp \
+ moc_customsqlmodel.cpp \
+ moc_customtextedit.cpp \
+ qrc_apunts.cpp
+OBJECTS = main.o \
+ mainwindow.o \
+ adddialog.o \
+ editdialog.o \
+ customsqlmodel.o \
+ customtextedit.o \
+ moc_mainwindow.o \
+ moc_adddialog.o \
+ moc_editdialog.o \
+ moc_customsqlmodel.o \
+ moc_customtextedit.o \
+ qrc_apunts.o
+DIST = /usr/share/qt4/mkspecs/common/unix.conf \
+ /usr/share/qt4/mkspecs/common/linux.conf \
+ /usr/share/qt4/mkspecs/common/gcc-base.conf \
+ /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
+ /usr/share/qt4/mkspecs/common/g++-base.conf \
+ /usr/share/qt4/mkspecs/common/g++-unix.conf \
+ /usr/share/qt4/mkspecs/qconfig.pri \
+ /usr/share/qt4/mkspecs/features/qt_functions.prf \
+ /usr/share/qt4/mkspecs/features/qt_config.prf \
+ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
+ /usr/share/qt4/mkspecs/features/default_pre.prf \
+ /usr/share/qt4/mkspecs/features/release.prf \
+ /usr/share/qt4/mkspecs/features/default_post.prf \
+ /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
+ /usr/share/qt4/mkspecs/features/warn_on.prf \
+ /usr/share/qt4/mkspecs/features/qt.prf \
+ /usr/share/qt4/mkspecs/features/unix/thread.prf \
+ /usr/share/qt4/mkspecs/features/moc.prf \
+ /usr/share/qt4/mkspecs/features/resources.prf \
+ /usr/share/qt4/mkspecs/features/uic.prf \
+ /usr/share/qt4/mkspecs/features/yacc.prf \
+ /usr/share/qt4/mkspecs/features/lex.prf \
+ /usr/share/qt4/mkspecs/features/include_source_dir.prf \
+ apunts.pro
+QMAKE_TARGET = apunts
+DESTDIR =
+TARGET = apunts
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .o .c .cpp .cc .cxx .C
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+
+####### Build rules
+
+all: Makefile $(TARGET)
+
+$(TARGET): ui_mainwindow.h ui_adddialog.h ui_editdialog.h $(OBJECTS)
+ $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: apunts.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \
+ /usr/share/qt4/mkspecs/common/linux.conf \
+ /usr/share/qt4/mkspecs/common/gcc-base.conf \
+ /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
+ /usr/share/qt4/mkspecs/common/g++-base.conf \
+ /usr/share/qt4/mkspecs/common/g++-unix.conf \
+ /usr/share/qt4/mkspecs/qconfig.pri \
+ /usr/share/qt4/mkspecs/features/qt_functions.prf \
+ /usr/share/qt4/mkspecs/features/qt_config.prf \
+ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \
+ /usr/share/qt4/mkspecs/features/default_pre.prf \
+ /usr/share/qt4/mkspecs/features/release.prf \
+ /usr/share/qt4/mkspecs/features/default_post.prf \
+ /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
+ /usr/share/qt4/mkspecs/features/warn_on.prf \
+ /usr/share/qt4/mkspecs/features/qt.prf \
+ /usr/share/qt4/mkspecs/features/unix/thread.prf \
+ /usr/share/qt4/mkspecs/features/moc.prf \
+ /usr/share/qt4/mkspecs/features/resources.prf \
+ /usr/share/qt4/mkspecs/features/uic.prf \
+ /usr/share/qt4/mkspecs/features/yacc.prf \
+ /usr/share/qt4/mkspecs/features/lex.prf \
+ /usr/share/qt4/mkspecs/features/include_source_dir.prf \
+ /usr/lib/i386-linux-gnu/libQtSql.prl \
+ /usr/lib/i386-linux-gnu/libQtGui.prl \
+ /usr/lib/i386-linux-gnu/libQtCore.prl
+ $(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ -o Makefile apunts.pro
+/usr/share/qt4/mkspecs/common/unix.conf:
+/usr/share/qt4/mkspecs/common/linux.conf:
+/usr/share/qt4/mkspecs/common/gcc-base.conf:
+/usr/share/qt4/mkspecs/common/gcc-base-unix.conf:
+/usr/share/qt4/mkspecs/common/g++-base.conf:
+/usr/share/qt4/mkspecs/common/g++-unix.conf:
+/usr/share/qt4/mkspecs/qconfig.pri:
+/usr/share/qt4/mkspecs/features/qt_functions.prf:
+/usr/share/qt4/mkspecs/features/qt_config.prf:
+/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
+/usr/share/qt4/mkspecs/features/default_pre.prf:
+/usr/share/qt4/mkspecs/features/release.prf:
+/usr/share/qt4/mkspecs/features/default_post.prf:
+/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
+/usr/share/qt4/mkspecs/features/warn_on.prf:
+/usr/share/qt4/mkspecs/features/qt.prf:
+/usr/share/qt4/mkspecs/features/unix/thread.prf:
+/usr/share/qt4/mkspecs/features/moc.prf:
+/usr/share/qt4/mkspecs/features/resources.prf:
+/usr/share/qt4/mkspecs/features/uic.prf:
+/usr/share/qt4/mkspecs/features/yacc.prf:
+/usr/share/qt4/mkspecs/features/lex.prf:
+/usr/share/qt4/mkspecs/features/include_source_dir.prf:
+/usr/lib/i386-linux-gnu/libQtSql.prl:
+/usr/lib/i386-linux-gnu/libQtGui.prl:
+/usr/lib/i386-linux-gnu/libQtCore.prl:
+qmake: FORCE
+ @$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ -o Makefile apunts.pro
+
+dist:
+ @$(CHK_DIR_EXISTS) .tmp/apunts1.0.0 || $(MKDIR) .tmp/apunts1.0.0
+ $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/apunts1.0.0/ && $(COPY_FILE) --parents mainwindow.h adddialog.h editdialog.h customsqlmodel.h customtextedit.h .tmp/apunts1.0.0/ && $(COPY_FILE) --parents apunts.qrc .tmp/apunts1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp adddialog.cpp editdialog.cpp customsqlmodel.cpp customtextedit.cpp .tmp/apunts1.0.0/ && $(COPY_FILE) --parents mainwindow.ui adddialog.ui editdialog.ui .tmp/apunts1.0.0/ && (cd `dirname .tmp/apunts1.0.0` && $(TAR) apunts1.0.0.tar apunts1.0.0 && $(COMPRESS) apunts1.0.0.tar) && $(MOVE) `dirname .tmp/apunts1.0.0`/apunts1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/apunts1.0.0
+
+
+clean:compiler_clean
+ -$(DEL_FILE) $(OBJECTS)
+ -$(DEL_FILE) *~ core *.core
+
+
+####### Sub-libraries
+
+distclean: clean
+ -$(DEL_FILE) $(TARGET)
+ -$(DEL_FILE) Makefile
+
+
+check: first
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all: moc_mainwindow.cpp moc_adddialog.cpp moc_editdialog.cpp moc_customsqlmodel.cpp moc_customtextedit.cpp
+compiler_moc_header_clean:
+ -$(DEL_FILE) moc_mainwindow.cpp moc_adddialog.cpp moc_editdialog.cpp moc_customsqlmodel.cpp moc_customtextedit.cpp
+moc_mainwindow.cpp: adddialog.h \
+ customsqlmodel.h \
+ editdialog.h \
+ mainwindow.h
+ /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o moc_mainwindow.cpp
+
+moc_adddialog.cpp: customsqlmodel.h \
+ adddialog.h
+ /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) adddialog.h -o moc_adddialog.cpp
+
+moc_editdialog.cpp: editdialog.h
+ /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) editdialog.h -o moc_editdialog.cpp
+
+moc_customsqlmodel.cpp: customsqlmodel.h
+ /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) customsqlmodel.h -o moc_customsqlmodel.cpp
+
+moc_customtextedit.cpp: customtextedit.h
+ /usr/lib/i386-linux-gnu/qt4/bin/moc $(DEFINES) $(INCPATH) customtextedit.h -o moc_customtextedit.cpp
+
+compiler_rcc_make_all: qrc_apunts.cpp
+compiler_rcc_clean:
+ -$(DEL_FILE) qrc_apunts.cpp
+qrc_apunts.cpp: apunts.qrc \
+ apunts.png
+ /usr/lib/i386-linux-gnu/qt4/bin/rcc -name apunts apunts.qrc -o qrc_apunts.cpp
+
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+ -$(DEL_FILE) qmake_image_collection.cpp
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all: ui_mainwindow.h ui_adddialog.h ui_editdialog.h
+compiler_uic_clean:
+ -$(DEL_FILE) ui_mainwindow.h ui_adddialog.h ui_editdialog.h
+ui_mainwindow.h: mainwindow.ui
+ /usr/lib/i386-linux-gnu/qt4/bin/uic mainwindow.ui -o ui_mainwindow.h
+
+ui_adddialog.h: adddialog.ui \
+ customtextedit.h
+ /usr/lib/i386-linux-gnu/qt4/bin/uic adddialog.ui -o ui_adddialog.h
+
+ui_editdialog.h: editdialog.ui \
+ customtextedit.h
+ /usr/lib/i386-linux-gnu/qt4/bin/uic editdialog.ui -o ui_editdialog.h
+
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_uic_clean
+
+####### Compile
+
+main.o: main.cpp mainwindow.h \
+ adddialog.h \
+ customsqlmodel.h \
+ editdialog.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
+
+mainwindow.o: mainwindow.cpp mainwindow.h \
+ adddialog.h \
+ customsqlmodel.h \
+ editdialog.h \
+ ui_mainwindow.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp
+
+adddialog.o: adddialog.cpp adddialog.h \
+ customsqlmodel.h \
+ ui_adddialog.h \
+ customtextedit.h \
+ mainwindow.h \
+ editdialog.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o adddialog.o adddialog.cpp
+
+editdialog.o: editdialog.cpp editdialog.h \
+ ui_editdialog.h \
+ customtextedit.h \
+ mainwindow.h \
+ adddialog.h \
+ customsqlmodel.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o editdialog.o editdialog.cpp
+
+customsqlmodel.o: customsqlmodel.cpp customsqlmodel.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o customsqlmodel.o customsqlmodel.cpp
+
+customtextedit.o: customtextedit.cpp customtextedit.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o customtextedit.o customtextedit.cpp
+
+moc_mainwindow.o: moc_mainwindow.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp
+
+moc_adddialog.o: moc_adddialog.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_adddialog.o moc_adddialog.cpp
+
+moc_editdialog.o: moc_editdialog.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_editdialog.o moc_editdialog.cpp
+
+moc_customsqlmodel.o: moc_customsqlmodel.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_customsqlmodel.o moc_customsqlmodel.cpp
+
+moc_customtextedit.o: moc_customtextedit.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_customtextedit.o moc_customtextedit.cpp
+
+qrc_apunts.o: qrc_apunts.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_apunts.o qrc_apunts.cpp
+
+####### Install
+
+install: FORCE
+
+uninstall: FORCE
+
+FORCE:
+
diff --git b/QSortFilterSqlQueryModel.cpp a/QSortFilterSqlQueryModel.cpp
new file mode 100644
index 0000000..97096d6
--- /dev/null
+++ a/QSortFilterSqlQueryModel.cpp
@@ -0,0 +1,115 @@
+#include "QSortFilterSqlQueryModel.h"
+#include
+#include
+
+QSortFilterSqlQueryModel::QSortFilterSqlQueryModel(QObject *parent) :
+ QSqlQueryModel(parent)
+{
+
+}
+
+void QSortFilterSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db)
+{
+ queryClause = query;
+ queryDB = db;
+
+ filterString.clear();
+ //filterColumn.clear();
+ filterFlags = Qt::MatchStartsWith;
+ sortKeyColumn = -1;
+ sortOrder = Qt::AscendingOrder;
+}
+
+void QSortFilterSqlQueryModel::select()
+{
+
+ if (queryClause.isEmpty() || (!queryDB.isValid()))
+ return;
+
+ QString query = queryClause;
+
+ if (!filterString.isEmpty() && !filterColumn.isEmpty()) {
+ QString whereClause;
+ QString esFilterString = filterString;
+ QString esFilterColumn = filterColumn;
+
+ if (filterFlags & Qt::MatchExactly) {
+ whereClause = "WHERE %1 = %2";
+ } else if (filterFlags & Qt::MatchStartsWith) {
+ whereClause = "WHERE %1 LIKE %2";
+ esFilterString.append("*");
+ } else if (filterFlags & Qt::MatchEndsWith) {
+ whereClause = "WHERE %1 LIKE %2";
+ esFilterString.prepend("*");
+ } else if (filterFlags & Qt::MatchRegExp) {
+ whereClause = "WHERE %1 REGEXP %2";
+ } else if (filterFlags & Qt::MatchWildcard) {
+ whereClause = "WHERE %1 LIKE %2";
+ } else if (filterFlags & Qt::MatchContains) {
+ whereClause = "WHERE %1 LIKE %2";
+ esFilterString.append("*");
+ esFilterString.prepend("*");
+ } else { return; } // unhandled filterflag
+
+ QSqlDriver *driver = queryDB.driver();
+ esFilterColumn = driver->escapeIdentifier(filterColumn, QSqlDriver::FieldName);
+ QSqlField field; field.setType(QVariant::String); field.setValue(esFilterString);
+ esFilterString = driver->formatValue(field);
+ if (filterFlags & Qt::MatchStartsWith || Qt::MatchEndsWith || Qt::MatchWildcard) {
+ esFilterString = esFilterString.replace("%", "\\%");
+ //if (filterFlags & Qt::MatchWildcard)
+ esFilterString = esFilterString.replace("*", "%");
+ }
+
+ //whereClause.arg(esFilterColumn).arg(esFilterString); // don't know why it doesn't work
+ whereClause = whereClause.replace("%1", esFilterColumn).replace("%2", esFilterString);
+ query.append(" " + whereClause);
+ }
+
+ if (sortKeyColumn >= 0) {
+ QString orderClause;
+ orderClause = "ORDER BY " + QString::number(sortKeyColumn+1) + " " + ((sortOrder == Qt::AscendingOrder) ? "ASC" : "DESC");
+ query.append(" " + orderClause);
+ }
+
+ QSqlQueryModel::setQuery(query, queryDB);
+
+}
+
+
+void QSortFilterSqlQueryModel::setSort(int column, Qt::SortOrder order)
+{
+ sortKeyColumn = column;
+ sortOrder = order;
+}
+
+
+void QSortFilterSqlQueryModel::sort(int column, Qt::SortOrder order)
+{
+ if ((sortKeyColumn != column) || (sortOrder != order)) {
+ setSort(column, order);
+ select();
+ }
+}
+
+void QSortFilterSqlQueryModel::setFilterColumn(const QString &column)
+{
+ filterColumn = column;
+}
+
+void QSortFilterSqlQueryModel::setFilter(const QString &filter) {
+ filterString = filter;
+}
+
+void QSortFilterSqlQueryModel::setFilterFlags(const Qt::MatchFlag flags)
+{
+ filterFlags = flags;
+}
+
+void QSortFilterSqlQueryModel::filter(const QString &filter)
+{
+ if (filterString != filter) {
+ setFilter(filter);
+ select();
+ }
+}
diff --git b/QSortFilterSqlQueryModel.h a/QSortFilterSqlQueryModel.h
new file mode 100644
index 0000000..aed83ba
--- /dev/null
+++ a/QSortFilterSqlQueryModel.h
@@ -0,0 +1,44 @@
+#ifndef QSORTFILTERSQLQUERYMODEL_H
+#define QSORTFILTERSQLQUERYMODEL_H
+
+#include
+#include
+
+class QSortFilterSqlQueryModel : public QSqlQueryModel
+{
+ Q_OBJECT
+
+public:
+
+ explicit QSortFilterSqlQueryModel(QObject *parent = 0);
+
+ //void setQuery(const QSqlQuery &query);
+ void setQuery(const QString & query, const QSqlDatabase & db = QSqlDatabase::database() );
+
+public slots:
+
+ void setFilterColumn (const QString & column);
+ void setFilterFlags (const Qt::MatchFlag flags);
+ void setFilter( const QString & filter );
+ void filter( const QString & filter );
+
+ void select();
+
+ virtual void setSort (int column, Qt::SortOrder order);
+ virtual void sort (int column, Qt::SortOrder order);
+
+private:
+
+ QSqlDatabase queryDB;
+ QString queryClause;
+ Qt::MatchFlag filterFlags;
+ QString filterString;
+ QString filterColumn;
+ int sortKeyColumn;
+ Qt::SortOrder sortOrder;
+
+signals:
+
+};
+
+#endif // QSORTFILTERSQLQUERYMODEL_H
diff --git b/QSortFilterSqlQueryModel.o a/QSortFilterSqlQueryModel.o
new file mode 100644
index 0000000..cc8d67c
--- /dev/null
+++ a/QSortFilterSqlQueryModel.o
diff --git b/adddialog.cpp a/adddialog.cpp
new file mode 100644
index 0000000..c548792
--- /dev/null
+++ a/adddialog.cpp
@@ -0,0 +1,75 @@
+#include "adddialog.h"
+#include "ui_adddialog.h"
+#include "mainwindow.h"
+#include
+#include
+
+AddDialog::AddDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::AddDialog)
+{
+ this->parent = parent;
+ ui->setupUi(this);
+ ui->nameLineEdit->setMaxLength(64);
+ ui->phoneLineEdit->setMaxLength(9);
+ ui->commentTextEdit->setMaxLength(140);
+ connect(ui->buttonBox,SIGNAL(rejected()),parent,SLOT(dismissAddDialog()));
+ connect(this,SIGNAL(requestClose()),parent,SLOT(dismissAddDialog()));
+ connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(add()));
+ showAssignatures();
+}
+
+void AddDialog::showAssignatures()
+{
+ tableViewModel.setQuery("SELECT nom AS \"Assignatura\" FROM assignatures ORDER by nom;");
+ ui->assignaturesTableView->setModel(&tableViewModel);
+ ui->assignaturesTableView->resizeColumnsToContents();
+}
+
+void AddDialog::add()
+{
+ QSqlQuery reserva;
+ QSqlQuery assignatura;
+ QModelIndexList indexes = ui->assignaturesTableView->selectionModel()->selectedRows();
+ if(indexes.count())
+ {
+ if(!MainWindow::checkPhone(ui->phoneLineEdit->text()))
+ {
+ QMessageBox::critical(this,"Error",trUtf8("Número de telèfon invàlid"));
+ return;
+ }
+ for(int i = 0; i < indexes.count(); i++)
+ {
+ int number = MainWindow::getNum(tableViewModel.data(indexes.at(i)).toString());
+ reserva.prepare("INSERT into reserves VALUES(:name,:num,:phone,NOW(),:comm);");
+ reserva.bindValue(":name",ui->nameLineEdit->text());
+ reserva.bindValue(":num",number);
+ reserva.bindValue(":phone",ui->phoneLineEdit->text().toInt());
+ reserva.bindValue(":comm",ui->commentTextEdit->toPlainText());
+ reserva.exec();
+ assignatura.prepare("UPDATE assignatures SET agafats = '1' WHERE num = :n;");
+ assignatura.bindValue(":n",number);
+ assignatura.exec();
+ }
+ ((MainWindow*)parent)->triggerUpdate();
+ if(reserva.isActive() && assignatura.isActive())
+ {
+ ((MainWindow*)parent)->setStatusMessage(trUtf8("Canvis desats: s'han afegit els préstecs"));
+ emit requestClose();
+ return;
+ }
+ ((MainWindow*)parent)->setStatusMessage(trUtf8("Error: no s'ha pogut escriure a la base de dades"));
+ emit requestClose();
+ }
+ else
+ {
+ QMessageBox::critical(this,"Error",trUtf8("No s'ha seleccionat cap assignatura"));
+ return;
+ }
+ emit requestClose();
+}
+
+AddDialog::~AddDialog()
+{
+ delete ui;
+}
diff --git b/adddialog.h a/adddialog.h
new file mode 100644
index 0000000..ead9b9e
--- /dev/null
+++ a/adddialog.h
@@ -0,0 +1,33 @@
+#ifndef ADDDIALOG_H
+#define ADDDIALOG_H
+
+#include
+#include
+#include "customsqlmodel.h"
+
+namespace Ui {
+class AddDialog;
+}
+
+class AddDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit AddDialog(QWidget *parent = 0);
+ ~AddDialog();
+
+public slots:
+ void add();
+
+private:
+ QWidget *parent;
+ Ui::AddDialog *ui;
+ CustomSQLModel tableViewModel;
+ void showAssignatures();
+
+signals:
+ void requestClose();
+};
+
+#endif // ADDDIALOG_H
diff --git b/adddialog.o a/adddialog.o
new file mode 100644
index 0000000..fba8449
--- /dev/null
+++ a/adddialog.o
diff --git b/adddialog.ui a/adddialog.ui
new file mode 100644
index 0000000..9c34d25
--- /dev/null
+++ a/adddialog.ui
@@ -0,0 +1,202 @@
+
+
+ AddDialog
+
+
+
+ 0
+ 0
+ 280
+ 500
+
+
+
+ Afegir préstec...
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Nom i cognoms
+
+
+
+ -
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Telèfon
+
+
+
+ -
+
+
+ -
+
+
+ Comentari (Màx 140 caràcters)
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 100
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Assignatures
+
+
+
+ -
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ true
+
+
+ QAbstractItemView::MultiSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Minimum
+
+
+
+ 20
+ 5
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Minimum
+
+
+
+ 20
+ 5
+
+
+
+
+
+
+
+
+ CustomTextEdit
+ QTextEdit
+
+
+
+
+
+
diff --git b/apunts a/apunts
new file mode 100755
index 0000000..3ddf3bf
--- /dev/null
+++ a/apunts
diff --git b/apunts.png a/apunts.png
new file mode 100644
index 0000000..a48e329
--- /dev/null
+++ a/apunts.png
diff --git b/apunts.pro a/apunts.pro
new file mode 100644
index 0000000..efc77d1
--- /dev/null
+++ a/apunts.pro
@@ -0,0 +1,35 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2013-01-14T13:01:37
+#
+#-------------------------------------------------
+
+QT += core gui sql
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = apunts
+TEMPLATE = app
+
+
+SOURCES += main.cpp\
+ mainwindow.cpp \
+ adddialog.cpp \
+ editdialog.cpp \
+ customsqlmodel.cpp \
+ customtextedit.cpp
+
+HEADERS += mainwindow.h \
+ adddialog.h \
+ editdialog.h \
+ customsqlmodel.h \
+ customtextedit.h
+
+FORMS += mainwindow.ui \
+ adddialog.ui \
+ editdialog.ui
+
+OTHER_FILES +=
+
+RESOURCES += \
+ apunts.qrc
diff --git b/apunts.pro.user a/apunts.pro.user
new file mode 100644
index 0000000..a1493f6
--- /dev/null
+++ a/apunts.pro.user
@@ -0,0 +1,255 @@
+
+
+
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ true
+ 1
+ true
+ 0
+ true
+ 0
+ 8
+ true
+ 1
+ true
+ true
+ true
+ false
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop
+ {c86d7da1-3052-4bc0-8e07-2ce69d480c89}
+ 1
+ 0
+ 0
+
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+ true
+
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ -w
+ -r
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ -w
+ -r
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ /home/users/imanol/devel/qt4/apunts
+ true
+
+
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+ true
+
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ -w
+ -r
+
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ -w
+ -r
+
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ /home/users/imanol/devel/qt4/apunts/
+ true
+
+ 2
+
+
+ 0
+ Deploy
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ Deploy locally
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 25
+
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ apunts
+
+ Qt4ProjectManager.Qt4RunConfiguration:/home/users/imanol/devel/qt4/apunts/apunts.pro
+ 2
+
+ apunts.pro
+ false
+ false
+
+
+ 3768
+ true
+ false
+ false
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.EnvironmentId
+ {e69b930c-1ca4-433f-a065-463b1709aab0}
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 12
+
+
diff --git b/apunts.pro.user.10f4848 a/apunts.pro.user.10f4848
new file mode 100644
index 0000000..3a44c0e
--- /dev/null
+++ a/apunts.pro.user.10f4848
@@ -0,0 +1,242 @@
+
+
+
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ System
+ false
+ 4
+ false
+ true
+ 1
+ true
+ 0
+ true
+ 0
+ 8
+ true
+ 1
+ true
+ true
+ true
+ false
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop
+ Qt4ProjectManager.Target.DesktopTarget
+ 0
+ 0
+ 0
+
+ ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5}
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+ true
+
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Qt 4.8.2 in PATH (System) Release
+
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ /home/imanol/devel/qt4/apunts
+ 2
+ false
+
+
+ ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5}
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+ true
+
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Qt 4.8.2 in PATH (System) Debug
+
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ /home/imanol/devel/qt4/apunts
+ 2
+ false
+
+ 2
+
+
+ 0
+ Deploy
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ No deployment
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 25
+
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ apunts
+
+ Qt4ProjectManager.Qt4RunConfiguration
+ 2
+
+ apunts.pro
+ false
+ false
+
+
+ 3768
+ true
+ false
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.EnvironmentId
+ {10f48485-ccaf-42d3-823f-8a27a830a51c}
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 11
+
+
diff --git b/apunts.pro.user.2.6pre1 a/apunts.pro.user.2.6pre1
new file mode 100644
index 0000000..3a44c0e
--- /dev/null
+++ a/apunts.pro.user.2.6pre1
@@ -0,0 +1,242 @@
+
+
+
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ System
+ false
+ 4
+ false
+ true
+ 1
+ true
+ 0
+ true
+ 0
+ 8
+ true
+ 1
+ true
+ true
+ true
+ false
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop
+ Qt4ProjectManager.Target.DesktopTarget
+ 0
+ 0
+ 0
+
+ ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5}
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+ true
+
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Qt 4.8.2 in PATH (System) Release
+
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ /home/imanol/devel/qt4/apunts
+ 2
+ false
+
+
+ ProjectExplorer.ToolChain.Gcc:{f442dff4-0ebd-41a6-b784-3e7d37fa78b5}
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+ true
+
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ false
+
+
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+ true
+ clean
+
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Qt 4.8.2 in PATH (System) Debug
+
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ /home/imanol/devel/qt4/apunts
+ 2
+ false
+
+ 2
+
+
+ 0
+ Deploy
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ No deployment
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 25
+
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ apunts
+
+ Qt4ProjectManager.Qt4RunConfiguration
+ 2
+
+ apunts.pro
+ false
+ false
+
+
+ 3768
+ true
+ false
+ true
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.EnvironmentId
+ {10f48485-ccaf-42d3-823f-8a27a830a51c}
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 11
+
+
diff --git b/apunts.qrc a/apunts.qrc
new file mode 100644
index 0000000..764a31b
--- /dev/null
+++ a/apunts.qrc
@@ -0,0 +1,5 @@
+
+
+ apunts.png
+
+
diff --git b/customsqlmodel.cpp a/customsqlmodel.cpp
new file mode 100644
index 0000000..92d93c3
--- /dev/null
+++ a/customsqlmodel.cpp
@@ -0,0 +1,78 @@
+#include "customsqlmodel.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+CustomSQLModel::CustomSQLModel(QObject *parent) :
+ QSqlQueryModel(parent)
+{
+
+}
+
+QVariant CustomSQLModel::data(const QModelIndex &item, int role) const
+{
+ if(columnCount() != 1)
+ {
+ if ((role == Qt::BackgroundColorRole) && compareDates(record(item.row()).value("Data").toString()))
+ {
+ return Qt::red;
+ }
+ if ((role == Qt::FontRole) && compareDates(record(item.row()).value("Data").toString()))
+ {
+ QFont f;
+ f.setBold(true);
+ return f;
+ }
+ }
+ return QSqlQueryModel::data(item, role);
+}
+
+Qt::ItemFlags CustomSQLModel::flags(const QModelIndex &index) const
+ {
+ if(columnCount() == 1)
+ {
+ if(isReservat(record(index.row()).value(0).toString()))
+ {
+ return Qt::NoItemFlags;
+ }
+ }
+ return QAbstractItemModel::flags(index);
+ }
+
+
+bool CustomSQLModel::compareDates(const QString date) const
+{
+ int year, month, day, hour, minute, second;
+
+ year = date.mid(0,4).toInt();
+ month = date.mid(5,2).toInt();
+ day = date.mid(8,2).toInt();
+
+ hour = date.mid(11,2).toInt();
+ minute = date.mid(14,2).toInt();
+ second = date.mid(17,2).toInt();
+
+ QDate currentDate = QDate::currentDate();
+ QTime currentTime = QTime::currentTime();
+ QDateTime current(currentDate,currentTime);
+ QDate d(year,month,day);
+ QTime t(hour,minute,second);
+ QDateTime timestamp(d,t);
+ return (timestamp.daysTo(current) > 3);
+}
+
+bool CustomSQLModel::isReservat(QString name) const
+{
+ QSqlQuery assignatures("SELECT * FROM assignatures WHERE agafats = 1;");
+ while(assignatures.next())
+ {
+ if(assignatures.record().value(0).toString() == name)
+ {
+ return true;
+ }
+ }
+ return false;
+}
diff --git b/customsqlmodel.h a/customsqlmodel.h
new file mode 100644
index 0000000..8c4b361
--- /dev/null
+++ a/customsqlmodel.h
@@ -0,0 +1,19 @@
+#ifndef CUSTOMSQLMODEL_H
+#define CUSTOMSQLMODEL_H
+
+#include
+#include
+
+class CustomSQLModel : public QSqlQueryModel
+{
+ Q_OBJECT
+public:
+ QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const;
+ Qt::ItemFlags flags(const QModelIndex &index) const;
+ explicit CustomSQLModel(QObject *parent = 0);
+ bool compareDates(const QString date) const;
+ bool isReservat(const QString assignatura) const;
+
+};
+
+#endif // CUSTOMSQLMODEL_H
diff --git b/customsqlmodel.o a/customsqlmodel.o
new file mode 100644
index 0000000..5d63c63
--- /dev/null
+++ a/customsqlmodel.o
diff --git b/customtextedit.cpp a/customtextedit.cpp
new file mode 100644
index 0000000..801d1f8
--- /dev/null
+++ a/customtextedit.cpp
@@ -0,0 +1,38 @@
+#include "customtextedit.h"
+#include
+
+CustomTextEdit::CustomTextEdit(QObject *parent) : QTextEdit((QWidget*)parent)
+{
+ maxLength = 0;
+ connect(this,SIGNAL(textChanged()),this,SLOT(truncateText()));
+}
+
+void CustomTextEdit::setMaxLength(int length)
+{
+ maxLength = length;
+ QString curText = toPlainText();
+ if ((maxLength > 0) && (curText.length() > maxLength))
+ {
+ curText = curText.left(maxLength);
+ setPlainText(curText);
+ }
+}
+
+int CustomTextEdit::getMaxLength()
+{
+ return maxLength;
+}
+
+void CustomTextEdit::truncateText()
+{
+ if(maxLength > 0)
+ {
+ QString curText = this->toPlainText();
+ if(curText.length() > maxLength)
+ {
+ this->setText(curText.left(maxLength));
+ this->moveCursor(QTextCursor::End);
+ }
+ }
+}
+
diff --git b/customtextedit.h a/customtextedit.h
new file mode 100644
index 0000000..4a6188b
--- /dev/null
+++ a/customtextedit.h
@@ -0,0 +1,26 @@
+#ifndef CUSTOMTEXTEDIT_H
+#define CUSTOMTEXTEDIT_H
+
+#include
+
+class CustomTextEdit : public QTextEdit
+{
+ Q_OBJECT
+ public:
+ explicit CustomTextEdit(QObject *parent = 0);
+ int getMaxLength();
+
+ public slots:
+ void setMaxLength(int length);
+
+ protected:
+ /*virtual void keyPressEvent(QKeyEvent *e);
+ void insertFromMimeData(const QMimeData* source);*/
+
+ private:
+ int maxLength;
+ private slots:
+ void truncateText();
+};
+
+#endif // CUSTOMTEXTEDIT_H
diff --git b/customtextedit.o a/customtextedit.o
new file mode 100644
index 0000000..03210da
--- /dev/null
+++ a/customtextedit.o
diff --git b/editdialog.cpp a/editdialog.cpp
new file mode 100644
index 0000000..e9a7acb
--- /dev/null
+++ a/editdialog.cpp
@@ -0,0 +1,80 @@
+#include "editdialog.h"
+#include "ui_editdialog.h"
+#include "mainwindow.h"
+#include
+
+EditDialog::EditDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::EditDialog)
+{
+ ui->setupUi(this);
+ ui->nameLineEdit->setMaxLength(64);
+ ui->phoneLineEdit->setMaxLength(9);
+ ui->commentTextEdit->setMaxLength(140);
+ connect(ui->buttonBox,SIGNAL(rejected()),parent,SLOT(dismissEditDialog()));
+ connect(this,SIGNAL(requestClose()),parent,SLOT(dismissEditDialog()));
+ connect(ui->buttonBox,SIGNAL(accepted()),this,SLOT(edit()));
+ EditDialog::parent = parent;
+ showValues();
+}
+
+void EditDialog::showValues()
+{
+ QSqlRecord previousReserva = ((MainWindow*)parent)->getSelectedReserva();
+ previousAssignatura = previousReserva.value(1).toString();
+ ui->nameLineEdit->setText(previousReserva.value(0).toString());
+ ui->phoneLineEdit->setText(previousReserva.value(2).toString());
+ ui->commentTextEdit->setText(previousReserva.value(4).toString());
+ populateAssignatures(previousAssignatura);
+}
+
+void EditDialog::populateAssignatures(QString selected)
+{
+ tableViewModel.setQuery("SELECT nom FROM assignatures WHERE agafats = 0 ORDER by nom;");
+ ui->assignaturaComboBox->addItem(selected);
+ for(int i = 0; i < tableViewModel.rowCount(); i++)
+ {
+ ui->assignaturaComboBox->addItem(tableViewModel.record(i).value("nom").toString());
+ }
+}
+
+void EditDialog::edit()
+{
+ QSqlQuery reserva;
+ QSqlQuery newAssignatura;
+ QSqlQuery oldAssignatura;
+ if(!MainWindow::checkPhone(ui->phoneLineEdit->text()))
+ {
+ QMessageBox::critical(this,"Error",trUtf8("Número de telèfon invàlid"));
+ return;
+ }
+ int newNumber = MainWindow::getNum(ui->assignaturaComboBox->currentText());
+ int oldNumber = MainWindow::getNum(previousAssignatura);
+ reserva.prepare("UPDATE reserves SET nom_i_cognoms = :n, apunts = :na, telefon = :t, comentari = :c WHERE apunts = :a;");
+ reserva.bindValue(":n",ui->nameLineEdit->text());
+ reserva.bindValue(":na",newNumber);
+ reserva.bindValue(":t",ui->phoneLineEdit->text().toInt());
+ reserva.bindValue(":c",ui->commentTextEdit->toPlainText());
+ reserva.bindValue(":a",oldNumber);
+ reserva.exec();
+ newAssignatura.prepare("UPDATE assignatures SET agafats = '1' WHERE num = :na;");
+ oldAssignatura.prepare("UPDATE assignatures SET agafats = '0' WHERE num = :a;");
+ newAssignatura.bindValue(":na",newNumber);
+ oldAssignatura.bindValue(":n",oldNumber);
+ newAssignatura.exec();
+ oldAssignatura.exec();
+ ((MainWindow*)parent)->triggerUpdate();
+ if(reserva.isActive() && newAssignatura.isActive() && oldAssignatura.isActive())
+ {
+ ((MainWindow*)parent)->setStatusMessage(trUtf8("Canvis desats: s'han afegit els préstecs"));
+ emit requestClose();
+ return;
+ }
+ ((MainWindow*)parent)->setStatusMessage(trUtf8("Error: no s'ha pogut escriure a la base de dades"));
+ emit requestClose();
+}
+
+EditDialog::~EditDialog()
+{
+ delete ui;
+}
diff --git b/editdialog.h a/editdialog.h
new file mode 100644
index 0000000..6fa13e2
--- /dev/null
+++ a/editdialog.h
@@ -0,0 +1,34 @@
+#ifndef EDITDIALOG_H
+#define EDITDIALOG_H
+
+#include
+#include
+
+namespace Ui {
+class EditDialog;
+}
+
+class EditDialog : public QDialog
+{
+ Q_OBJECT
+
+public slots:
+ void edit();
+
+public:
+ explicit EditDialog(QWidget *parent = 0);
+ ~EditDialog();
+
+private:
+ Ui::EditDialog *ui;
+ QWidget *parent;
+ QSqlQueryModel tableViewModel;
+ QString previousAssignatura;
+ void showValues();
+ void populateAssignatures(QString selected);
+
+signals:
+ void requestClose();
+};
+
+#endif // EDITDIALOG_H
diff --git b/editdialog.o a/editdialog.o
new file mode 100644
index 0000000..151420e
--- /dev/null
+++ a/editdialog.o
diff --git b/editdialog.ui a/editdialog.ui
new file mode 100644
index 0000000..1199c3c
--- /dev/null
+++ a/editdialog.ui
@@ -0,0 +1,179 @@
+
+
+ EditDialog
+
+
+
+ 0
+ 0
+ 280
+ 336
+
+
+
+ Editar préstec...
+
+
+ -
+
+
-
+
+
+ Nom i cognoms
+
+
+
+ -
+
+
+ -
+
+
+ Telèfon
+
+
+
+ -
+
+
+ -
+
+
+ Comentari (Màx 140 caràcters)
+
+
+
+ -
+
+
+ -
+
+
+ Assignatura
+
+
+
+ -
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Minimum
+
+
+
+ 20
+ 5
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Minimum
+
+
+
+ 20
+ 5
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 10
+ 20
+
+
+
+
+
+
+
+
+ CustomTextEdit
+ QTextEdit
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ EditDialog
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ EditDialog
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
diff --git b/main.cpp a/main.cpp
new file mode 100644
index 0000000..597b902
--- /dev/null
+++ a/main.cpp
@@ -0,0 +1,11 @@
+#include
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+
+ return a.exec();
+}
diff --git b/main.o a/main.o
new file mode 100644
index 0000000..8828ba6
--- /dev/null
+++ a/main.o
diff --git b/mainwindow.cpp a/mainwindow.cpp
new file mode 100644
index 0000000..9ceb399
--- /dev/null
+++ a/mainwindow.cpp
@@ -0,0 +1,218 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include
+#include
+#include "customsqlmodel.h"
+#include
+#include
+#include
+
+const char* MainWindow::CONFIG_PATH = "/usr/local/etc/apunts.conf";
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+ std::string* parameters = loadConfig(CONFIG_PATH);
+ db = QSqlDatabase::addDatabase("QMYSQL");
+ db.setHostName(parameters[0].c_str());
+ db.setUserName(parameters[1].c_str());
+ db.setPassword(parameters[2].c_str());
+ db.setDatabaseName(parameters[3].c_str());
+ if(!db.open())
+ {
+ QMessageBox::critical(this,"Error",trUtf8("No s'ha pogut obrir la base de dades"));
+ exit(-1);
+ }
+ delete[] parameters;
+ connect(ui->exitButton,SIGNAL(clicked()),this, SLOT(close()));
+ connect(ui->addButton,SIGNAL(clicked()),this,SLOT(showAddDialog()));
+ connect(ui->editButton,SIGNAL(clicked()),this,SLOT(showEditDialog()));
+ connect(ui->deleteButton,SIGNAL(clicked()),this,SLOT(deleteReserva()));
+ connect(ui->tableView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(showEditDialog()));
+ connect(ui->tableView->horizontalHeader(),SIGNAL(sectionClicked(int)),this,SLOT(sort(int)));
+ query = "SELECT r.nom_i_cognoms as \"Nom i cognoms\", a.nom as Apunts, r.telefon as Telèfon, r.data as Data, r.comentari as Comentari FROM assignatures as a, reserves as r WHERE a.num = r.apunts ";
+ orderQuery= ";";
+ triggerUpdate();
+ ui->tableView->setModel(&tableViewModel);
+ ui->tableView->resizeColumnsToContents();
+ ui->tableView->resizeRowsToContents();
+ setStatusMessage(trUtf8("Llistat de préstecs carregat"));
+}
+
+void MainWindow::triggerUpdate()
+{
+
+ std::string str = query+orderQuery;
+ tableViewModel.setQuery(trUtf8(str.c_str()));
+ ui->tableView->resizeRowsToContents();
+}
+
+void MainWindow::setStatusMessage(const QString &str)
+{
+ ui->statusBar->showMessage(str);
+}
+
+QSqlRecord& MainWindow::getSelectedReserva()
+{
+ return selectedReserva;
+}
+
+int MainWindow::getNum(QString name)
+{
+ QSqlQuery number;
+ number.prepare("SELECT num FROM assignatures WHERE nom = :n");
+ number.bindValue(":n",name);
+ number.exec();
+ number.next();
+ return number.record().value(0).toInt();
+}
+
+std::string* MainWindow::loadConfig(const char *path)
+{
+ std::ifstream conf;
+ conf.open(path);
+ if(!conf.is_open())
+ {
+ conf.close();
+ QMessageBox::critical(this,"Error",trUtf8("No s'ha pogut carregar el fitxer de configuració. Aviseu a l'administrador."));
+ exit(-2);
+ }
+ std::string host, user, pass, db;
+ std::getline(conf,host);
+ std::getline(conf,user);
+ std::getline(conf,pass);
+ std::getline(conf,db);
+ host = host.substr(5);
+ user = user.substr(5);
+ pass = pass.substr(9);
+ db = db.substr(9);
+ std::string* ret = new std::string[4];
+ ret[0] = host;
+ ret[1] = user;
+ ret[2] = pass;
+ ret[3] = db;
+ return ret;
+}
+
+bool MainWindow::checkPhone(QString phone)
+{
+ bool isNumber;
+ phone.toInt(&isNumber);
+ if((!isNumber) || (phone.length() != 9))
+ {
+ return false;
+ }
+ return true;
+}
+
+void MainWindow::showAddDialog()
+{
+ add = new AddDialog(this);
+ add->show();
+}
+
+void MainWindow::showEditDialog()
+{
+ if(ui->tableView->selectionModel()->selectedIndexes().isEmpty())
+ {
+ QMessageBox::critical(this,"Error",trUtf8("No s'ha seleccionat cap préstec"));
+ return;
+ }
+ QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows();
+ if(indexes.count() > 1)
+ {
+ QMessageBox::critical(this,"Error",trUtf8("Només es pot editar una entrada a la vegada"));
+ return;
+ }
+ selectedReserva=tableViewModel.record((indexes.at(0).row()));
+ edit = new EditDialog(this);
+ edit->show();
+}
+
+void MainWindow::deleteReserva()
+{
+ QSqlQuery deleteQuery, assignaturaQuery;
+ QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows();
+ if(!warnUser(indexes.count()))
+ {
+ return;
+ }
+ for(int i = 0; i < indexes.count(); i++)
+ {
+ int number = getNum(tableViewModel.record(indexes.at(i).row()).value(1).toString());
+ deleteQuery.prepare("DELETE FROM reserves WHERE apunts = :n");
+ deleteQuery.bindValue(":n",number);
+ deleteQuery.exec();
+ assignaturaQuery.prepare("UPDATE assignatures SET agafats = '0' WHERE num = :n;");
+ assignaturaQuery.bindValue(":n",number);
+ assignaturaQuery.exec();
+ }
+ triggerUpdate();
+ if(deleteQuery.isActive() && assignaturaQuery.isActive())
+ {
+ setStatusMessage(trUtf8("Canvis desats: s'ha eliminat el préstec"));
+ return;
+ }
+ setStatusMessage(trUtf8("Error: no s'ha pogut escriure a la base de dades"));
+}
+
+void MainWindow::dismissAddDialog()
+{
+ add->close();
+ delete add;
+ add = 0;
+}
+
+void MainWindow::dismissEditDialog()
+{
+ edit->close();
+ delete edit;
+ edit = 0;
+}
+
+bool MainWindow::warnUser(int elements)
+{
+ if(elements)
+ {
+ std::stringstream sstream;
+ sstream << "Segur que vols eliminar ";
+ sstream << elements;
+ sstream << " préstecs?";
+ int n = QMessageBox::warning(this,trUtf8("Eliminar préstec?"),trUtf8(sstream.str().c_str()),"&Si","&No",QString::null,1,1);
+ if(!n)
+ {
+ return true;
+ }
+ return false;
+ }
+ else
+ {
+ QMessageBox::critical(this,"Error",trUtf8("No s'ha seleccionat cap préstec"));
+ return false;
+ }
+}
+
+void MainWindow::sort(int index)
+{
+ orderQuery = "ORDER BY ";
+ std::stringstream sstream;
+ sstream << (index+1);
+ orderQuery.append(sstream.str());
+ Qt::SortOrder sortOrder = ui->tableView->horizontalHeader()->sortIndicatorOrder();
+ if(sortOrder == Qt::AscendingOrder)
+ {
+ orderQuery += " ASC;";
+ }
+ else
+ {
+ orderQuery += " DESC;";
+ }
+ triggerUpdate();
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
diff --git b/mainwindow.h a/mainwindow.h
new file mode 100644
index 0000000..60df90b
--- /dev/null
+++ a/mainwindow.h
@@ -0,0 +1,52 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include
+#include
+#include
+#include "adddialog.h"
+#include "editdialog.h"
+#include "customsqlmodel.h"
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget *parent = 0);
+ ~MainWindow();
+ void triggerUpdate();
+ void setStatusMessage(const QString &str);
+ QSqlRecord& getSelectedReserva();
+ static int getNum(QString name);
+ static bool checkPhone(QString phone);
+
+public slots:
+ void showAddDialog();
+ void showEditDialog();
+ void deleteReserva();
+ void dismissAddDialog();
+ void dismissEditDialog();
+
+private slots:
+ void sort(int index);
+
+private:
+ Ui::MainWindow *ui;
+ CustomSQLModel tableViewModel;
+ QSqlDatabase db;
+ AddDialog *add;
+ EditDialog *edit;
+ QSqlRecord selectedReserva;
+ std::string query;
+ std::string orderQuery;
+ static const char* CONFIG_PATH;
+ std::string *loadConfig(const char* path);
+ bool warnUser(int elements);
+};
+
+#endif // MAINWINDOW_H
diff --git b/mainwindow.o a/mainwindow.o
new file mode 100644
index 0000000..6b92f44
--- /dev/null
+++ a/mainwindow.o
diff --git b/mainwindow.ui a/mainwindow.ui
new file mode 100644
index 0000000..6d8230a
--- /dev/null
+++ a/mainwindow.ui
@@ -0,0 +1,283 @@
+
+
+ MainWindow
+
+
+
+ 0
+ 0
+ 800
+ 600
+
+
+
+ Aplicació Apunts
+
+
+
+ :/Icons/apunts.png:/Icons/apunts.png
+
+
+
+ -
+
+
+
+
+
+ Qt::ScrollBarAsNeeded
+
+
+ QAbstractItemView::NoEditTriggers
+
+
+ true
+
+
+ QAbstractItemView::MultiSelection
+
+
+ QAbstractItemView::SelectRows
+
+
+ true
+
+
+ Qt::SolidLine
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+ Afegeix préstec
+
+
+
+
+
+
+
+
+
+
+
+ 32
+ 32
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+ Esborra préstec
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 32
+ 32
+
+
+
+
+ 32
+ 32
+
+
+
+ Edita préstec
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Sortir
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Minimum
+
+
+
+ 20
+ 5
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Minimum
+
+
+
+ 20
+ 15
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Minimum
+
+
+
+ 20
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git b/moc_QSortFilterSqlQueryModel.cpp a/moc_QSortFilterSqlQueryModel.cpp
new file mode 100644
index 0000000..a3595a7
--- /dev/null
+++ a/moc_QSortFilterSqlQueryModel.cpp
@@ -0,0 +1,110 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'QSortFilterSqlQueryModel.h'
+**
+** Created: Thu Apr 4 17:03:56 2013
+** by: The Qt Meta Object Compiler version 63 (Qt 4.8.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "QSortFilterSqlQueryModel.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'QSortFilterSqlQueryModel.h' doesn't include ."
+#elif Q_MOC_OUTPUT_REVISION != 63
+#error "This file was generated using the moc from 4.8.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_QSortFilterSqlQueryModel[] = {
+
+ // content:
+ 6, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 7, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+ 33, 26, 25, 25, 0x0a,
+ 64, 58, 25, 25, 0x0a,
+ 101, 94, 25, 25, 0x0a,
+ 120, 94, 25, 25, 0x0a,
+ 136, 25, 25, 25, 0x0a,
+ 158, 145, 25, 25, 0x0a,
+ 185, 145, 25, 25, 0x0a,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_QSortFilterSqlQueryModel[] = {
+ "QSortFilterSqlQueryModel\0\0column\0"
+ "setFilterColumn(QString)\0flags\0"
+ "setFilterFlags(Qt::MatchFlag)\0filter\0"
+ "setFilter(QString)\0filter(QString)\0"
+ "select()\0column,order\0setSort(int,Qt::SortOrder)\0"
+ "sort(int,Qt::SortOrder)\0"
+};
+
+void QSortFilterSqlQueryModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ Q_ASSERT(staticMetaObject.cast(_o));
+ QSortFilterSqlQueryModel *_t = static_cast(_o);
+ switch (_id) {
+ case 0: _t->setFilterColumn((*reinterpret_cast< const QString(*)>(_a[1]))); break;
+ case 1: _t->setFilterFlags((*reinterpret_cast< const Qt::MatchFlag(*)>(_a[1]))); break;
+ case 2: _t->setFilter((*reinterpret_cast< const QString(*)>(_a[1]))); break;
+ case 3: _t->filter((*reinterpret_cast< const QString(*)>(_a[1]))); break;
+ case 4: _t->select(); break;
+ case 5: _t->setSort((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< Qt::SortOrder(*)>(_a[2]))); break;
+ case 6: _t->sort((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< Qt::SortOrder(*)>(_a[2]))); break;
+ default: ;
+ }
+ }
+}
+
+const QMetaObjectExtraData QSortFilterSqlQueryModel::staticMetaObjectExtraData = {
+ 0, qt_static_metacall
+};
+
+const QMetaObject QSortFilterSqlQueryModel::staticMetaObject = {
+ { &QSqlQueryModel::staticMetaObject, qt_meta_stringdata_QSortFilterSqlQueryModel,
+ qt_meta_data_QSortFilterSqlQueryModel, &staticMetaObjectExtraData }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &QSortFilterSqlQueryModel::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *QSortFilterSqlQueryModel::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *QSortFilterSqlQueryModel::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_QSortFilterSqlQueryModel))
+ return static_cast(const_cast< QSortFilterSqlQueryModel*>(this));
+ return QSqlQueryModel::qt_metacast(_clname);
+}
+
+int QSortFilterSqlQueryModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QSqlQueryModel::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 7)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 7;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git b/moc_QSortFilterSqlQueryModel.o a/moc_QSortFilterSqlQueryModel.o
new file mode 100644
index 0000000..e980b18
--- /dev/null
+++ a/moc_QSortFilterSqlQueryModel.o
diff --git b/moc_adddialog.cpp a/moc_adddialog.cpp
new file mode 100644
index 0000000..bcc914c
--- /dev/null
+++ a/moc_adddialog.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'adddialog.h'
+**
+** Created: Mon Nov 4 07:59:46 2013
+** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "adddialog.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'adddialog.h' doesn't include ."
+#elif Q_MOC_OUTPUT_REVISION != 63
+#error "This file was generated using the moc from 4.8.4. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_AddDialog[] = {
+
+ // content:
+ 6, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 2, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 1, // signalCount
+
+ // signals: signature, parameters, type, tag, flags
+ 11, 10, 10, 10, 0x05,
+
+ // slots: signature, parameters, type, tag, flags
+ 26, 10, 10, 10, 0x0a,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_AddDialog[] = {
+ "AddDialog\0\0requestClose()\0add()\0"
+};
+
+void AddDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ Q_ASSERT(staticMetaObject.cast(_o));
+ AddDialog *_t = static_cast(_o);
+ switch (_id) {
+ case 0: _t->requestClose(); break;
+ case 1: _t->add(); break;
+ default: ;
+ }
+ }
+ Q_UNUSED(_a);
+}
+
+const QMetaObjectExtraData AddDialog::staticMetaObjectExtraData = {
+ 0, qt_static_metacall
+};
+
+const QMetaObject AddDialog::staticMetaObject = {
+ { &QDialog::staticMetaObject, qt_meta_stringdata_AddDialog,
+ qt_meta_data_AddDialog, &staticMetaObjectExtraData }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &AddDialog::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *AddDialog::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *AddDialog::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_AddDialog))
+ return static_cast(const_cast< AddDialog*>(this));
+ return QDialog::qt_metacast(_clname);
+}
+
+int AddDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QDialog::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 2)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 2;
+ }
+ return _id;
+}
+
+// SIGNAL 0
+void AddDialog::requestClose()
+{
+ QMetaObject::activate(this, &staticMetaObject, 0, 0);
+}
+QT_END_MOC_NAMESPACE
diff --git b/moc_adddialog.o a/moc_adddialog.o
new file mode 100644
index 0000000..ed02d81
--- /dev/null
+++ a/moc_adddialog.o
diff --git b/moc_customsqlmodel.cpp a/moc_customsqlmodel.cpp
new file mode 100644
index 0000000..a9fb156
--- /dev/null
+++ a/moc_customsqlmodel.cpp
@@ -0,0 +1,81 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'customsqlmodel.h'
+**
+** Created: Mon Nov 4 07:59:47 2013
+** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "customsqlmodel.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'customsqlmodel.h' doesn't include ."
+#elif Q_MOC_OUTPUT_REVISION != 63
+#error "This file was generated using the moc from 4.8.4. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_CustomSQLModel[] = {
+
+ // content:
+ 6, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 0, 0, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_CustomSQLModel[] = {
+ "CustomSQLModel\0"
+};
+
+void CustomSQLModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ Q_UNUSED(_o);
+ Q_UNUSED(_id);
+ Q_UNUSED(_c);
+ Q_UNUSED(_a);
+}
+
+const QMetaObjectExtraData CustomSQLModel::staticMetaObjectExtraData = {
+ 0, qt_static_metacall
+};
+
+const QMetaObject CustomSQLModel::staticMetaObject = {
+ { &QSqlQueryModel::staticMetaObject, qt_meta_stringdata_CustomSQLModel,
+ qt_meta_data_CustomSQLModel, &staticMetaObjectExtraData }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &CustomSQLModel::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *CustomSQLModel::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *CustomSQLModel::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_CustomSQLModel))
+ return static_cast(const_cast< CustomSQLModel*>(this));
+ return QSqlQueryModel::qt_metacast(_clname);
+}
+
+int CustomSQLModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QSqlQueryModel::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git b/moc_customsqlmodel.o a/moc_customsqlmodel.o
new file mode 100644
index 0000000..0030f73
--- /dev/null
+++ a/moc_customsqlmodel.o
diff --git b/moc_customtextedit.cpp a/moc_customtextedit.cpp
new file mode 100644
index 0000000..4570edd
--- /dev/null
+++ a/moc_customtextedit.cpp
@@ -0,0 +1,96 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'customtextedit.h'
+**
+** Created: Mon Nov 4 07:59:48 2013
+** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "customtextedit.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'customtextedit.h' doesn't include ."
+#elif Q_MOC_OUTPUT_REVISION != 63
+#error "This file was generated using the moc from 4.8.4. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_CustomTextEdit[] = {
+
+ // content:
+ 6, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 2, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+ 23, 16, 15, 15, 0x0a,
+ 41, 15, 15, 15, 0x08,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_CustomTextEdit[] = {
+ "CustomTextEdit\0\0length\0setMaxLength(int)\0"
+ "truncateText()\0"
+};
+
+void CustomTextEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ Q_ASSERT(staticMetaObject.cast(_o));
+ CustomTextEdit *_t = static_cast(_o);
+ switch (_id) {
+ case 0: _t->setMaxLength((*reinterpret_cast< int(*)>(_a[1]))); break;
+ case 1: _t->truncateText(); break;
+ default: ;
+ }
+ }
+}
+
+const QMetaObjectExtraData CustomTextEdit::staticMetaObjectExtraData = {
+ 0, qt_static_metacall
+};
+
+const QMetaObject CustomTextEdit::staticMetaObject = {
+ { &QTextEdit::staticMetaObject, qt_meta_stringdata_CustomTextEdit,
+ qt_meta_data_CustomTextEdit, &staticMetaObjectExtraData }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &CustomTextEdit::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *CustomTextEdit::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *CustomTextEdit::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_CustomTextEdit))
+ return static_cast(const_cast< CustomTextEdit*>(this));
+ return QTextEdit::qt_metacast(_clname);
+}
+
+int CustomTextEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QTextEdit::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 2)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 2;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git b/moc_customtextedit.o a/moc_customtextedit.o
new file mode 100644
index 0000000..a3828da
--- /dev/null
+++ a/moc_customtextedit.o
diff --git b/moc_editdialog.cpp a/moc_editdialog.cpp
new file mode 100644
index 0000000..be8b2ce
--- /dev/null
+++ a/moc_editdialog.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'editdialog.h'
+**
+** Created: Mon Nov 4 07:59:47 2013
+** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "editdialog.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'editdialog.h' doesn't include ."
+#elif Q_MOC_OUTPUT_REVISION != 63
+#error "This file was generated using the moc from 4.8.4. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_EditDialog[] = {
+
+ // content:
+ 6, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 2, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 1, // signalCount
+
+ // signals: signature, parameters, type, tag, flags
+ 12, 11, 11, 11, 0x05,
+
+ // slots: signature, parameters, type, tag, flags
+ 27, 11, 11, 11, 0x0a,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_EditDialog[] = {
+ "EditDialog\0\0requestClose()\0edit()\0"
+};
+
+void EditDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ Q_ASSERT(staticMetaObject.cast(_o));
+ EditDialog *_t = static_cast(_o);
+ switch (_id) {
+ case 0: _t->requestClose(); break;
+ case 1: _t->edit(); break;
+ default: ;
+ }
+ }
+ Q_UNUSED(_a);
+}
+
+const QMetaObjectExtraData EditDialog::staticMetaObjectExtraData = {
+ 0, qt_static_metacall
+};
+
+const QMetaObject EditDialog::staticMetaObject = {
+ { &QDialog::staticMetaObject, qt_meta_stringdata_EditDialog,
+ qt_meta_data_EditDialog, &staticMetaObjectExtraData }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &EditDialog::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *EditDialog::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *EditDialog::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_EditDialog))
+ return static_cast(const_cast< EditDialog*>(this));
+ return QDialog::qt_metacast(_clname);
+}
+
+int EditDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QDialog::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 2)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 2;
+ }
+ return _id;
+}
+
+// SIGNAL 0
+void EditDialog::requestClose()
+{
+ QMetaObject::activate(this, &staticMetaObject, 0, 0);
+}
+QT_END_MOC_NAMESPACE
diff --git b/moc_editdialog.o a/moc_editdialog.o
new file mode 100644
index 0000000..206e7e9
--- /dev/null
+++ a/moc_editdialog.o
diff --git b/moc_mainwindow.cpp a/moc_mainwindow.cpp
new file mode 100644
index 0000000..ca58774
--- /dev/null
+++ a/moc_mainwindow.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'mainwindow.h'
+**
+** Created: Mon Nov 4 07:59:45 2013
+** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "mainwindow.h"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'mainwindow.h' doesn't include ."
+#elif Q_MOC_OUTPUT_REVISION != 63
+#error "This file was generated using the moc from 4.8.4. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_MainWindow[] = {
+
+ // content:
+ 6, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 6, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+ 12, 11, 11, 11, 0x0a,
+ 28, 11, 11, 11, 0x0a,
+ 45, 11, 11, 11, 0x0a,
+ 61, 11, 11, 11, 0x0a,
+ 80, 11, 11, 11, 0x0a,
+ 106, 100, 11, 11, 0x08,
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_MainWindow[] = {
+ "MainWindow\0\0showAddDialog()\0"
+ "showEditDialog()\0deleteReserva()\0"
+ "dismissAddDialog()\0dismissEditDialog()\0"
+ "index\0sort(int)\0"
+};
+
+void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ Q_ASSERT(staticMetaObject.cast(_o));
+ MainWindow *_t = static_cast(_o);
+ switch (_id) {
+ case 0: _t->showAddDialog(); break;
+ case 1: _t->showEditDialog(); break;
+ case 2: _t->deleteReserva(); break;
+ case 3: _t->dismissAddDialog(); break;
+ case 4: _t->dismissEditDialog(); break;
+ case 5: _t->sort((*reinterpret_cast< int(*)>(_a[1]))); break;
+ default: ;
+ }
+ }
+}
+
+const QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {
+ 0, qt_static_metacall
+};
+
+const QMetaObject MainWindow::staticMetaObject = {
+ { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,
+ qt_meta_data_MainWindow, &staticMetaObjectExtraData }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &MainWindow::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *MainWindow::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *MainWindow::qt_metacast(const char *_clname)
+{
+ if (!_clname) return 0;
+ if (!strcmp(_clname, qt_meta_stringdata_MainWindow))
+ return static_cast(const_cast< MainWindow*>(this));
+ return QMainWindow::qt_metacast(_clname);
+}
+
+int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QMainWindow::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 6)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 6;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git b/moc_mainwindow.o a/moc_mainwindow.o
new file mode 100644
index 0000000..4ae4f66
--- /dev/null
+++ a/moc_mainwindow.o
diff --git b/qrc_apunts.cpp a/qrc_apunts.cpp
new file mode 100644
index 0000000..48b0e56
--- /dev/null
+++ a/qrc_apunts.cpp
@@ -0,0 +1,825 @@
+/****************************************************************************
+** Resource object code
+**
+** Created: Mon Nov 4 07:59:48 2013
+** by: The Resource Compiler for Qt version 4.8.4
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include
+
+static const unsigned char qt_resource_data[] = {
+ // /home/users/imanol/devel/qt4/apunts/apunts.png
+ 0x0,0x0,0x2f,0x15,
+ 0x89,
+ 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,
+ 0x0,0x0,0x30,0x0,0x0,0x0,0x30,0x8,0x6,0x0,0x0,0x0,0x57,0x2,0xf9,0x87,
+ 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x2e,0x23,0x0,0x0,0x2e,0x23,
+ 0x1,0x78,0xa5,0x3f,0x76,0x0,0x0,0xa,0x4f,0x69,0x43,0x43,0x50,0x50,0x68,0x6f,
+ 0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x49,0x43,0x43,0x20,0x70,0x72,0x6f,0x66,0x69,
+ 0x6c,0x65,0x0,0x0,0x78,0xda,0x9d,0x53,0x67,0x54,0x53,0xe9,0x16,0x3d,0xf7,0xde,
+ 0xf4,0x42,0x4b,0x88,0x80,0x94,0x4b,0x6f,0x52,0x15,0x8,0x20,0x52,0x42,0x8b,0x80,
+ 0x14,0x91,0x26,0x2a,0x21,0x9,0x10,0x4a,0x88,0x21,0xa1,0xd9,0x15,0x51,0xc1,0x11,
+ 0x45,0x45,0x4,0x1b,0xc8,0xa0,0x88,0x3,0x8e,0x8e,0x80,0x8c,0x15,0x51,0x2c,0xc,
+ 0x8a,0xa,0xd8,0x7,0xe4,0x21,0xa2,0x8e,0x83,0xa3,0x88,0x8a,0xca,0xfb,0xe1,0x7b,
+ 0xa3,0x6b,0xd6,0xbc,0xf7,0xe6,0xcd,0xfe,0xb5,0xd7,0x3e,0xe7,0xac,0xf3,0x9d,0xb3,
+ 0xcf,0x7,0xc0,0x8,0xc,0x96,0x48,0x33,0x51,0x35,0x80,0xc,0xa9,0x42,0x1e,0x11,
+ 0xe0,0x83,0xc7,0xc4,0xc6,0xe1,0xe4,0x2e,0x40,0x81,0xa,0x24,0x70,0x0,0x10,0x8,
+ 0xb3,0x64,0x21,0x73,0xfd,0x23,0x1,0x0,0xf8,0x7e,0x3c,0x3c,0x2b,0x22,0xc0,0x7,
+ 0xbe,0x0,0x1,0x78,0xd3,0xb,0x8,0x0,0xc0,0x4d,0x9b,0xc0,0x30,0x1c,0x87,0xff,
+ 0xf,0xea,0x42,0x99,0x5c,0x1,0x80,0x84,0x1,0xc0,0x74,0x91,0x38,0x4b,0x8,0x80,
+ 0x14,0x0,0x40,0x7a,0x8e,0x42,0xa6,0x0,0x40,0x46,0x1,0x80,0x9d,0x98,0x26,0x53,
+ 0x0,0xa0,0x4,0x0,0x60,0xcb,0x63,0x62,0xe3,0x0,0x50,0x2d,0x0,0x60,0x27,0x7f,
+ 0xe6,0xd3,0x0,0x80,0x9d,0xf8,0x99,0x7b,0x1,0x0,0x5b,0x94,0x21,0x15,0x1,0xa0,
+ 0x91,0x0,0x20,0x13,0x65,0x88,0x44,0x0,0x68,0x3b,0x0,0xac,0xcf,0x56,0x8a,0x45,
+ 0x0,0x58,0x30,0x0,0x14,0x66,0x4b,0xc4,0x39,0x0,0xd8,0x2d,0x0,0x30,0x49,0x57,
+ 0x66,0x48,0x0,0xb0,0xb7,0x0,0xc0,0xce,0x10,0xb,0xb2,0x0,0x8,0xc,0x0,0x30,
+ 0x51,0x88,0x85,0x29,0x0,0x4,0x7b,0x0,0x60,0xc8,0x23,0x23,0x78,0x0,0x84,0x99,
+ 0x0,0x14,0x46,0xf2,0x57,0x3c,0xf1,0x2b,0xae,0x10,0xe7,0x2a,0x0,0x0,0x78,0x99,
+ 0xb2,0x3c,0xb9,0x24,0x39,0x45,0x81,0x5b,0x8,0x2d,0x71,0x7,0x57,0x57,0x2e,0x1e,
+ 0x28,0xce,0x49,0x17,0x2b,0x14,0x36,0x61,0x2,0x61,0x9a,0x40,0x2e,0xc2,0x79,0x99,
+ 0x19,0x32,0x81,0x34,0xf,0xe0,0xf3,0xcc,0x0,0x0,0xa0,0x91,0x15,0x11,0xe0,0x83,
+ 0xf3,0xfd,0x78,0xce,0xe,0xae,0xce,0xce,0x36,0x8e,0xb6,0xe,0x5f,0x2d,0xea,0xbf,
+ 0x6,0xff,0x22,0x62,0x62,0xe3,0xfe,0xe5,0xcf,0xab,0x70,0x40,0x0,0x0,0xe1,0x74,
+ 0x7e,0xd1,0xfe,0x2c,0x2f,0xb3,0x1a,0x80,0x3b,0x6,0x80,0x6d,0xfe,0xa2,0x25,0xee,
+ 0x4,0x68,0x5e,0xb,0xa0,0x75,0xf7,0x8b,0x66,0xb2,0xf,0x40,0xb5,0x0,0xa0,0xe9,
+ 0xda,0x57,0xf3,0x70,0xf8,0x7e,0x3c,0x3c,0x45,0xa1,0x90,0xb9,0xd9,0xd9,0xe5,0xe4,
+ 0xe4,0xd8,0x4a,0xc4,0x42,0x5b,0x61,0xca,0x57,0x7d,0xfe,0x67,0xc2,0x5f,0xc0,0x57,
+ 0xfd,0x6c,0xf9,0x7e,0x3c,0xfc,0xf7,0xf5,0xe0,0xbe,0xe2,0x24,0x81,0x32,0x5d,0x81,
+ 0x47,0x4,0xf8,0xe0,0xc2,0xcc,0xf4,0x4c,0xa5,0x1c,0xcf,0x92,0x9,0x84,0x62,0xdc,
+ 0xe6,0x8f,0x47,0xfc,0xb7,0xb,0xff,0xfc,0x1d,0xd3,0x22,0xc4,0x49,0x62,0xb9,0x58,
+ 0x2a,0x14,0xe3,0x51,0x12,0x71,0x8e,0x44,0x9a,0x8c,0xf3,0x32,0xa5,0x22,0x89,0x42,
+ 0x92,0x29,0xc5,0x25,0xd2,0xff,0x64,0xe2,0xdf,0x2c,0xfb,0x3,0x3e,0xdf,0x35,0x0,
+ 0xb0,0x6a,0x3e,0x1,0x7b,0x91,0x2d,0xa8,0x5d,0x63,0x3,0xf6,0x4b,0x27,0x10,0x58,
+ 0x74,0xc0,0xe2,0xf7,0x0,0x0,0xf2,0xbb,0x6f,0xc1,0xd4,0x28,0x8,0x3,0x80,0x68,
+ 0x83,0xe1,0xcf,0x77,0xff,0xef,0x3f,0xfd,0x47,0xa0,0x25,0x0,0x80,0x66,0x49,0x92,
+ 0x71,0x0,0x0,0x5e,0x44,0x24,0x2e,0x54,0xca,0xb3,0x3f,0xc7,0x8,0x0,0x0,0x44,
+ 0xa0,0x81,0x2a,0xb0,0x41,0x1b,0xf4,0xc1,0x18,0x2c,0xc0,0x6,0x1c,0xc1,0x5,0xdc,
+ 0xc1,0xb,0xfc,0x60,0x36,0x84,0x42,0x24,0xc4,0xc2,0x42,0x10,0x42,0xa,0x64,0x80,
+ 0x1c,0x72,0x60,0x29,0xac,0x82,0x42,0x28,0x86,0xcd,0xb0,0x1d,0x2a,0x60,0x2f,0xd4,
+ 0x40,0x1d,0x34,0xc0,0x51,0x68,0x86,0x93,0x70,0xe,0x2e,0xc2,0x55,0xb8,0xe,0x3d,
+ 0x70,0xf,0xfa,0x61,0x8,0x9e,0xc1,0x28,0xbc,0x81,0x9,0x4,0x41,0xc8,0x8,0x13,
+ 0x61,0x21,0xda,0x88,0x1,0x62,0x8a,0x58,0x23,0x8e,0x8,0x17,0x99,0x85,0xf8,0x21,
+ 0xc1,0x48,0x4,0x12,0x8b,0x24,0x20,0xc9,0x88,0x14,0x51,0x22,0x4b,0x91,0x35,0x48,
+ 0x31,0x52,0x8a,0x54,0x20,0x55,0x48,0x1d,0xf2,0x3d,0x72,0x2,0x39,0x87,0x5c,0x46,
+ 0xba,0x91,0x3b,0xc8,0x0,0x32,0x82,0xfc,0x86,0xbc,0x47,0x31,0x94,0x81,0xb2,0x51,
+ 0x3d,0xd4,0xc,0xb5,0x43,0xb9,0xa8,0x37,0x1a,0x84,0x46,0xa2,0xb,0xd0,0x64,0x74,
+ 0x31,0x9a,0x8f,0x16,0xa0,0x9b,0xd0,0x72,0xb4,0x1a,0x3d,0x8c,0x36,0xa1,0xe7,0xd0,
+ 0xab,0x68,0xf,0xda,0x8f,0x3e,0x43,0xc7,0x30,0xc0,0xe8,0x18,0x7,0x33,0xc4,0x6c,
+ 0x30,0x2e,0xc6,0xc3,0x42,0xb1,0x38,0x2c,0x9,0x93,0x63,0xcb,0xb1,0x22,0xac,0xc,
+ 0xab,0xc6,0x1a,0xb0,0x56,0xac,0x3,0xbb,0x89,0xf5,0x63,0xcf,0xb1,0x77,0x4,0x12,
+ 0x81,0x45,0xc0,0x9,0x36,0x4,0x77,0x42,0x20,0x61,0x1e,0x41,0x48,0x58,0x4c,0x58,
+ 0x4e,0xd8,0x48,0xa8,0x20,0x1c,0x24,0x34,0x11,0xda,0x9,0x37,0x9,0x3,0x84,0x51,
+ 0xc2,0x27,0x22,0x93,0xa8,0x4b,0xb4,0x26,0xba,0x11,0xf9,0xc4,0x18,0x62,0x32,0x31,
+ 0x87,0x58,0x48,0x2c,0x23,0xd6,0x12,0x8f,0x13,0x2f,0x10,0x7b,0x88,0x43,0xc4,0x37,
+ 0x24,0x12,0x89,0x43,0x32,0x27,0xb9,0x90,0x2,0x49,0xb1,0xa4,0x54,0xd2,0x12,0xd2,
+ 0x46,0xd2,0x6e,0x52,0x23,0xe9,0x2c,0xa9,0x9b,0x34,0x48,0x1a,0x23,0x93,0xc9,0xda,
+ 0x64,0x6b,0xb2,0x7,0x39,0x94,0x2c,0x20,0x2b,0xc8,0x85,0xe4,0x9d,0xe4,0xc3,0xe4,
+ 0x33,0xe4,0x1b,0xe4,0x21,0xf2,0x5b,0xa,0x9d,0x62,0x40,0x71,0xa4,0xf8,0x53,0xe2,
+ 0x28,0x52,0xca,0x6a,0x4a,0x19,0xe5,0x10,0xe5,0x34,0xe5,0x6,0x65,0x98,0x32,0x41,
+ 0x55,0xa3,0x9a,0x52,0xdd,0xa8,0xa1,0x54,0x11,0x35,0x8f,0x5a,0x42,0xad,0xa1,0xb6,
+ 0x52,0xaf,0x51,0x87,0xa8,0x13,0x34,0x75,0x9a,0x39,0xcd,0x83,0x16,0x49,0x4b,0xa5,
+ 0xad,0xa2,0x95,0xd3,0x1a,0x68,0x17,0x68,0xf7,0x69,0xaf,0xe8,0x74,0xba,0x11,0xdd,
+ 0x95,0x1e,0x4e,0x97,0xd0,0x57,0xd2,0xcb,0xe9,0x47,0xe8,0x97,0xe8,0x3,0xf4,0x77,
+ 0xc,0xd,0x86,0x15,0x83,0xc7,0x88,0x67,0x28,0x19,0x9b,0x18,0x7,0x18,0x67,0x19,
+ 0x77,0x18,0xaf,0x98,0x4c,0xa6,0x19,0xd3,0x8b,0x19,0xc7,0x54,0x30,0x37,0x31,0xeb,
+ 0x98,0xe7,0x99,0xf,0x99,0x6f,0x55,0x58,0x2a,0xb6,0x2a,0x7c,0x15,0x91,0xca,0xa,
+ 0x95,0x4a,0x95,0x26,0x95,0x1b,0x2a,0x2f,0x54,0xa9,0xaa,0xa6,0xaa,0xde,0xaa,0xb,
+ 0x55,0xf3,0x55,0xcb,0x54,0x8f,0xa9,0x5e,0x53,0x7d,0xae,0x46,0x55,0x33,0x53,0xe3,
+ 0xa9,0x9,0xd4,0x96,0xab,0x55,0xaa,0x9d,0x50,0xeb,0x53,0x1b,0x53,0x67,0xa9,0x3b,
+ 0xa8,0x87,0xaa,0x67,0xa8,0x6f,0x54,0x3f,0xa4,0x7e,0x59,0xfd,0x89,0x6,0x59,0xc3,
+ 0x4c,0xc3,0x4f,0x43,0xa4,0x51,0xa0,0xb1,0x5f,0xe3,0xbc,0xc6,0x20,0xb,0x63,0x19,
+ 0xb3,0x78,0x2c,0x21,0x6b,0xd,0xab,0x86,0x75,0x81,0x35,0xc4,0x26,0xb1,0xcd,0xd9,
+ 0x7c,0x76,0x2a,0xbb,0x98,0xfd,0x1d,0xbb,0x8b,0x3d,0xaa,0xa9,0xa1,0x39,0x43,0x33,
+ 0x4a,0x33,0x57,0xb3,0x52,0xf3,0x94,0x66,0x3f,0x7,0xe3,0x98,0x71,0xf8,0x9c,0x74,
+ 0x4e,0x9,0xe7,0x28,0xa7,0x97,0xf3,0x7e,0x8a,0xde,0x14,0xef,0x29,0xe2,0x29,0x1b,
+ 0xa6,0x34,0x4c,0xb9,0x31,0x65,0x5c,0x6b,0xaa,0x96,0x97,0x96,0x58,0xab,0x48,0xab,
+ 0x51,0xab,0x47,0xeb,0xbd,0x36,0xae,0xed,0xa7,0x9d,0xa6,0xbd,0x45,0xbb,0x59,0xfb,
+ 0x81,0xe,0x41,0xc7,0x4a,0x27,0x5c,0x27,0x47,0x67,0x8f,0xce,0x5,0x9d,0xe7,0x53,
+ 0xd9,0x53,0xdd,0xa7,0xa,0xa7,0x16,0x4d,0x3d,0x3a,0xf5,0xae,0x2e,0xaa,0x6b,0xa5,
+ 0x1b,0xa1,0xbb,0x44,0x77,0xbf,0x6e,0xa7,0xee,0x98,0x9e,0xbe,0x5e,0x80,0x9e,0x4c,
+ 0x6f,0xa7,0xde,0x79,0xbd,0xe7,0xfa,0x1c,0x7d,0x2f,0xfd,0x54,0xfd,0x6d,0xfa,0xa7,
+ 0xf5,0x47,0xc,0x58,0x6,0xb3,0xc,0x24,0x6,0xdb,0xc,0xce,0x18,0x3c,0xc5,0x35,
+ 0x71,0x6f,0x3c,0x1d,0x2f,0xc7,0xdb,0xf1,0x51,0x43,0x5d,0xc3,0x40,0x43,0xa5,0x61,
+ 0x95,0x61,0x97,0xe1,0x84,0x91,0xb9,0xd1,0x3c,0xa3,0xd5,0x46,0x8d,0x46,0xf,0x8c,
+ 0x69,0xc6,0x5c,0xe3,0x24,0xe3,0x6d,0xc6,0x6d,0xc6,0xa3,0x26,0x6,0x26,0x21,0x26,
+ 0x4b,0x4d,0xea,0x4d,0xee,0x9a,0x52,0x4d,0xb9,0xa6,0x29,0xa6,0x3b,0x4c,0x3b,0x4c,
+ 0xc7,0xcd,0xcc,0xcd,0xa2,0xcd,0xd6,0x99,0x35,0x9b,0x3d,0x31,0xd7,0x32,0xe7,0x9b,
+ 0xe7,0x9b,0xd7,0x9b,0xdf,0xb7,0x60,0x5a,0x78,0x5a,0x2c,0xb6,0xa8,0xb6,0xb8,0x65,
+ 0x49,0xb2,0xe4,0x5a,0xa6,0x59,0xee,0xb6,0xbc,0x6e,0x85,0x5a,0x39,0x59,0xa5,0x58,
+ 0x55,0x5a,0x5d,0xb3,0x46,0xad,0x9d,0xad,0x25,0xd6,0xbb,0xad,0xbb,0xa7,0x11,0xa7,
+ 0xb9,0x4e,0x93,0x4e,0xab,0x9e,0xd6,0x67,0xc3,0xb0,0xf1,0xb6,0xc9,0xb6,0xa9,0xb7,
+ 0x19,0xb0,0xe5,0xd8,0x6,0xdb,0xae,0xb6,0x6d,0xb6,0x7d,0x61,0x67,0x62,0x17,0x67,
+ 0xb7,0xc5,0xae,0xc3,0xee,0x93,0xbd,0x93,0x7d,0xba,0x7d,0x8d,0xfd,0x3d,0x7,0xd,
+ 0x87,0xd9,0xe,0xab,0x1d,0x5a,0x1d,0x7e,0x73,0xb4,0x72,0x14,0x3a,0x56,0x3a,0xde,
+ 0x9a,0xce,0x9c,0xee,0x3f,0x7d,0xc5,0xf4,0x96,0xe9,0x2f,0x67,0x58,0xcf,0x10,0xcf,
+ 0xd8,0x33,0xe3,0xb6,0x13,0xcb,0x29,0xc4,0x69,0x9d,0x53,0x9b,0xd3,0x47,0x67,0x17,
+ 0x67,0xb9,0x73,0x83,0xf3,0x88,0x8b,0x89,0x4b,0x82,0xcb,0x2e,0x97,0x3e,0x2e,0x9b,
+ 0x1b,0xc6,0xdd,0xc8,0xbd,0xe4,0x4a,0x74,0xf5,0x71,0x5d,0xe1,0x7a,0xd2,0xf5,0x9d,
+ 0x9b,0xb3,0x9b,0xc2,0xed,0xa8,0xdb,0xaf,0xee,0x36,0xee,0x69,0xee,0x87,0xdc,0x9f,
+ 0xcc,0x34,0x9f,0x29,0x9e,0x59,0x33,0x73,0xd0,0xc3,0xc8,0x43,0xe0,0x51,0xe5,0xd1,
+ 0x3f,0xb,0x9f,0x95,0x30,0x6b,0xdf,0xac,0x7e,0x4f,0x43,0x4f,0x81,0x67,0xb5,0xe7,
+ 0x23,0x2f,0x63,0x2f,0x91,0x57,0xad,0xd7,0xb0,0xb7,0xa5,0x77,0xaa,0xf7,0x61,0xef,
+ 0x17,0x3e,0xf6,0x3e,0x72,0x9f,0xe3,0x3e,0xe3,0x3c,0x37,0xde,0x32,0xde,0x59,0x5f,
+ 0xcc,0x37,0xc0,0xb7,0xc8,0xb7,0xcb,0x4f,0xc3,0x6f,0x9e,0x5f,0x85,0xdf,0x43,0x7f,
+ 0x23,0xff,0x64,0xff,0x7a,0xff,0xd1,0x0,0xa7,0x80,0x25,0x1,0x67,0x3,0x89,0x81,
+ 0x41,0x81,0x5b,0x2,0xfb,0xf8,0x7a,0x7c,0x21,0xbf,0x8e,0x3f,0x3a,0xdb,0x65,0xf6,
+ 0xb2,0xd9,0xed,0x41,0x8c,0xa0,0xb9,0x41,0x15,0x41,0x8f,0x82,0xad,0x82,0xe5,0xc1,
+ 0xad,0x21,0x68,0xc8,0xec,0x90,0xad,0x21,0xf7,0xe7,0x98,0xce,0x91,0xce,0x69,0xe,
+ 0x85,0x50,0x7e,0xe8,0xd6,0xd0,0x7,0x61,0xe6,0x61,0x8b,0xc3,0x7e,0xc,0x27,0x85,
+ 0x87,0x85,0x57,0x86,0x3f,0x8e,0x70,0x88,0x58,0x1a,0xd1,0x31,0x97,0x35,0x77,0xd1,
+ 0xdc,0x43,0x73,0xdf,0x44,0xfa,0x44,0x96,0x44,0xde,0x9b,0x67,0x31,0x4f,0x39,0xaf,
+ 0x2d,0x4a,0x35,0x2a,0x3e,0xaa,0x2e,0x6a,0x3c,0xda,0x37,0xba,0x34,0xba,0x3f,0xc6,
+ 0x2e,0x66,0x59,0xcc,0xd5,0x58,0x9d,0x58,0x49,0x6c,0x4b,0x1c,0x39,0x2e,0x2a,0xae,
+ 0x36,0x6e,0x6c,0xbe,0xdf,0xfc,0xed,0xf3,0x87,0xe2,0x9d,0xe2,0xb,0xe3,0x7b,0x17,
+ 0x98,0x2f,0xc8,0x5d,0x70,0x79,0xa1,0xce,0xc2,0xf4,0x85,0xa7,0x16,0xa9,0x2e,0x12,
+ 0x2c,0x3a,0x96,0x40,0x4c,0x88,0x4e,0x38,0x94,0xf0,0x41,0x10,0x2a,0xa8,0x16,0x8c,
+ 0x25,0xf2,0x13,0x77,0x25,0x8e,0xa,0x79,0xc2,0x1d,0xc2,0x67,0x22,0x2f,0xd1,0x36,
+ 0xd1,0x88,0xd8,0x43,0x5c,0x2a,0x1e,0x4e,0xf2,0x48,0x2a,0x4d,0x7a,0x92,0xec,0x91,
+ 0xbc,0x35,0x79,0x24,0xc5,0x33,0xa5,0x2c,0xe5,0xb9,0x84,0x27,0xa9,0x90,0xbc,0x4c,
+ 0xd,0x4c,0xdd,0x9b,0x3a,0x9e,0x16,0x9a,0x76,0x20,0x6d,0x32,0x3d,0x3a,0xbd,0x31,
+ 0x83,0x92,0x91,0x90,0x71,0x42,0xaa,0x21,0x4d,0x93,0xb6,0x67,0xea,0x67,0xe6,0x66,
+ 0x76,0xcb,0xac,0x65,0x85,0xb2,0xfe,0xc5,0x6e,0x8b,0xb7,0x2f,0x1e,0x95,0x7,0xc9,
+ 0x6b,0xb3,0x90,0xac,0x5,0x59,0x2d,0xa,0xb6,0x42,0xa6,0xe8,0x54,0x5a,0x28,0xd7,
+ 0x2a,0x7,0xb2,0x67,0x65,0x57,0x66,0xbf,0xcd,0x89,0xca,0x39,0x96,0xab,0x9e,0x2b,
+ 0xcd,0xed,0xcc,0xb3,0xca,0xdb,0x90,0x37,0x9c,0xef,0x9f,0xff,0xed,0x12,0xc2,0x12,
+ 0xe1,0x92,0xb6,0xa5,0x86,0x4b,0x57,0x2d,0x1d,0x58,0xe6,0xbd,0xac,0x6a,0x39,0xb2,
+ 0x3c,0x71,0x79,0xdb,0xa,0xe3,0x15,0x5,0x2b,0x86,0x56,0x6,0xac,0x3c,0xb8,0x8a,
+ 0xb6,0x2a,0x6d,0xd5,0x4f,0xab,0xed,0x57,0x97,0xae,0x7e,0xbd,0x26,0x7a,0x4d,0x6b,
+ 0x81,0x5e,0xc1,0xca,0x82,0xc1,0xb5,0x1,0x6b,0xeb,0xb,0x55,0xa,0xe5,0x85,0x7d,
+ 0xeb,0xdc,0xd7,0xed,0x5d,0x4f,0x58,0x2f,0x59,0xdf,0xb5,0x61,0xfa,0x86,0x9d,0x1b,
+ 0x3e,0x15,0x89,0x8a,0xae,0x14,0xdb,0x17,0x97,0x15,0x7f,0xd8,0x28,0xdc,0x78,0xe5,
+ 0x1b,0x87,0x6f,0xca,0xbf,0x99,0xdc,0x94,0xb4,0xa9,0xab,0xc4,0xb9,0x64,0xcf,0x66,
+ 0xd2,0x66,0xe9,0xe6,0xde,0x2d,0x9e,0x5b,0xe,0x96,0xaa,0x97,0xe6,0x97,0xe,0x6e,
+ 0xd,0xd9,0xda,0xb4,0xd,0xdf,0x56,0xb4,0xed,0xf5,0xf6,0x45,0xdb,0x2f,0x97,0xcd,
+ 0x28,0xdb,0xbb,0x83,0xb6,0x43,0xb9,0xa3,0xbf,0x3c,0xb8,0xbc,0x65,0xa7,0xc9,0xce,
+ 0xcd,0x3b,0x3f,0x54,0xa4,0x54,0xf4,0x54,0xfa,0x54,0x36,0xee,0xd2,0xdd,0xb5,0x61,
+ 0xd7,0xf8,0x6e,0xd1,0xee,0x1b,0x7b,0xbc,0xf6,0x34,0xec,0xd5,0xdb,0x5b,0xbc,0xf7,
+ 0xfd,0x3e,0xc9,0xbe,0xdb,0x55,0x1,0x55,0x4d,0xd5,0x66,0xd5,0x65,0xfb,0x49,0xfb,
+ 0xb3,0xf7,0x3f,0xae,0x89,0xaa,0xe9,0xf8,0x96,0xfb,0x6d,0x5d,0xad,0x4e,0x6d,0x71,
+ 0xed,0xc7,0x3,0xd2,0x3,0xfd,0x7,0x23,0xe,0xb6,0xd7,0xb9,0xd4,0xd5,0x1d,0xd2,
+ 0x3d,0x54,0x52,0x8f,0xd6,0x2b,0xeb,0x47,0xe,0xc7,0x1f,0xbe,0xfe,0x9d,0xef,0x77,
+ 0x2d,0xd,0x36,0xd,0x55,0x8d,0x9c,0xc6,0xe2,0x23,0x70,0x44,0x79,0xe4,0xe9,0xf7,
+ 0x9,0xdf,0xf7,0x1e,0xd,0x3a,0xda,0x76,0x8c,0x7b,0xac,0xe1,0x7,0xd3,0x1f,0x76,
+ 0x1d,0x67,0x1d,0x2f,0x6a,0x42,0x9a,0xf2,0x9a,0x46,0x9b,0x53,0x9a,0xfb,0x5b,0x62,
+ 0x5b,0xba,0x4f,0xcc,0x3e,0xd1,0xd6,0xea,0xde,0x7a,0xfc,0x47,0xdb,0x1f,0xf,0x9c,
+ 0x34,0x3c,0x59,0x79,0x4a,0xf3,0x54,0xc9,0x69,0xda,0xe9,0x82,0xd3,0x93,0x67,0xf2,
+ 0xcf,0x8c,0x9d,0x95,0x9d,0x7d,0x7e,0x2e,0xf9,0xdc,0x60,0xdb,0xa2,0xb6,0x7b,0xe7,
+ 0x63,0xce,0xdf,0x6a,0xf,0x6f,0xef,0xba,0x10,0x74,0xe1,0xd2,0x45,0xff,0x8b,0xe7,
+ 0x3b,0xbc,0x3b,0xce,0x5c,0xf2,0xb8,0x74,0xf2,0xb2,0xdb,0xe5,0x13,0x57,0xb8,0x57,
+ 0x9a,0xaf,0x3a,0x5f,0x6d,0xea,0x74,0xea,0x3c,0xfe,0x93,0xd3,0x4f,0xc7,0xbb,0x9c,
+ 0xbb,0x9a,0xae,0xb9,0x5c,0x6b,0xb9,0xee,0x7a,0xbd,0xb5,0x7b,0x66,0xf7,0xe9,0x1b,
+ 0x9e,0x37,0xce,0xdd,0xf4,0xbd,0x79,0xf1,0x16,0xff,0xd6,0xd5,0x9e,0x39,0x3d,0xdd,
+ 0xbd,0xf3,0x7a,0x6f,0xf7,0xc5,0xf7,0xf5,0xdf,0x16,0xdd,0x7e,0x72,0x27,0xfd,0xce,
+ 0xcb,0xbb,0xd9,0x77,0x27,0xee,0xad,0xbc,0x4f,0xbc,0x5f,0xf4,0x40,0xed,0x41,0xd9,
+ 0x43,0xdd,0x87,0xd5,0x3f,0x5b,0xfe,0xdc,0xd8,0xef,0xdc,0x7f,0x6a,0xc0,0x77,0xa0,
+ 0xf3,0xd1,0xdc,0x47,0xf7,0x6,0x85,0x83,0xcf,0xfe,0x91,0xf5,0x8f,0xf,0x43,0x5,
+ 0x8f,0x99,0x8f,0xcb,0x86,0xd,0x86,0xeb,0x9e,0x38,0x3e,0x39,0x39,0xe2,0x3f,0x72,
+ 0xfd,0xe9,0xfc,0xa7,0x43,0xcf,0x64,0xcf,0x26,0x9e,0x17,0xfe,0xa2,0xfe,0xcb,0xae,
+ 0x17,0x16,0x2f,0x7e,0xf8,0xd5,0xeb,0xd7,0xce,0xd1,0x98,0xd1,0xa1,0x97,0xf2,0x97,
+ 0x93,0xbf,0x6d,0x7c,0xa5,0xfd,0xea,0xc0,0xeb,0x19,0xaf,0xdb,0xc6,0xc2,0xc6,0x1e,
+ 0xbe,0xc9,0x78,0x33,0x31,0x5e,0xf4,0x56,0xfb,0xed,0xc1,0x77,0xdc,0x77,0x1d,0xef,
+ 0xa3,0xdf,0xf,0x4f,0xe4,0x7c,0x20,0x7f,0x28,0xff,0x68,0xf9,0xb1,0xf5,0x53,0xd0,
+ 0xa7,0xfb,0x93,0x19,0x93,0x93,0xff,0x4,0x3,0x98,0xf3,0xfc,0x63,0x33,0x2d,0xdb,
+ 0x0,0x0,0x0,0x20,0x63,0x48,0x52,0x4d,0x0,0x0,0x7a,0x25,0x0,0x0,0x80,0x83,
+ 0x0,0x0,0xf9,0xff,0x0,0x0,0x80,0xe9,0x0,0x0,0x75,0x30,0x0,0x0,0xea,0x60,
+ 0x0,0x0,0x3a,0x98,0x0,0x0,0x17,0x6f,0x92,0x5f,0xc5,0x46,0x0,0x0,0x24,0x40,
+ 0x49,0x44,0x41,0x54,0x78,0x1,0x0,0x30,0x24,0xcf,0xdb,0x1,0xff,0xff,0xff,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xf7,0xf7,
+ 0xf2,0x0,0xff,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x1,
+ 0x0,0x0,0xfe,0xfd,0x0,0x0,0xfd,0xfe,0xff,0x0,0x1,0x1,0xff,0x0,0x1,0x3,
+ 0x0,0x0,0x1,0xff,0x1,0x0,0xfc,0xfb,0xfc,0x0,0x0,0x1,0x0,0x0,0x5,0x5,
+ 0x5,0x0,0xff,0xff,0xfd,0x0,0x8,0x9,0xf,0x0,0xf7,0xf6,0xf2,0x0,0xfe,0xfe,
+ 0x0,0x0,0x1,0x1,0x1,0x0,0xa,0xb,0xd,0x0,0xf8,0xf8,0xf1,0xa,0x0,0x0,
+ 0x4,0xf6,0x0,0xff,0xfe,0x0,0x1,0xfc,0xfb,0x0,0xfd,0x0,0xff,0x0,0x1,0x0,
+ 0x1,0x0,0x1,0x1,0x2,0x0,0x2,0x1,0x0,0x0,0xff,0x0,0xff,0x0,0x1,0x1,
+ 0x2,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0x1,0x0,0x1,0x2,0x0,0x0,0x2,0xff,
+ 0x0,0x0,0xfe,0x3,0x2,0x0,0x0,0x3,0x1,0x0,0x0,0xff,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x6,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0xff,
+ 0xfe,0x0,0x0,0xff,0x0,0xfe,0x0,0x4,0x5,0x2,0x0,0x7,0x7,0xe,0x0,0xf7,
+ 0xf7,0xf2,0x0,0x0,0x0,0x0,0x0,0x2,0x3,0x1,0x0,0x0,0x1,0xff,0x0,0x7,
+ 0x8,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xa,0xe,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf5,0xf5,0xf0,0x0,0xb,0xb,0x10,0xf6,0xf9,
+ 0xf9,0xf7,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0xff,0xff,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,
+ 0xf6,0xf6,0xf1,0x0,0xff,0x0,0x2,0x0,0xff,0x0,0xff,0x0,0x2,0x0,0xff,0x0,
+ 0x0,0xff,0x0,0x0,0x9,0xa,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0xf9,0xf3,0x0,0x7,0x7,0xd,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xfa,0x0,0x0,0x0,0x2,0x0,0x0,0x7,0x4,0x0,0x0,0xf9,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xfe,0xff,0xfb,0x0,0xfe,0xfc,0xfc,0x0,
+ 0x1,0xff,0xff,0x0,0xff,0xfc,0xfb,0x0,0xfe,0xfe,0x0,0x0,0x1,0x2,0x0,0x0,
+ 0x2,0xff,0x0,0x0,0xfe,0x3,0x2,0x0,0x0,0x3,0x1,0x0,0x0,0xff,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x6,0xc,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x4,0x0,0x1,0x0,0x0,0x0,0xff,0x0,0x0,0x2,0x0,0x0,0x0,0x9,0x9,0xe,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x7,0xd,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x6,0xd5,0xd9,0xd3,
+ 0x0,0x37,0x2b,0x31,0xf9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xe1,0xdc,0xd5,0x9e,0x18,0x16,0x16,0xdc,0x6,0xa,0xc,
+ 0xdb,0x0,0x0,0x4,0xda,0xff,0x6,0x8,0xd4,0xfa,0xff,0x0,0xfe,0x2,0xfe,0xfc,
+ 0x0,0x1,0xfa,0xf9,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xf7,0xf8,0xf2,0x0,0xff,0xff,
+ 0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,
+ 0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,
+ 0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,
+ 0xff,0x0,0xff,0xff,0xff,0x6,0xff,0xff,0xff,0x0,0xcc,0xae,0xa2,0x2f,0x3,0x3,
+ 0x3,0xff,0xdd,0x3f,0x20,0xff,0xe2,0x51,0x25,0xff,0xcd,0x38,0x16,0xff,0xc0,0x37,
+ 0x1c,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,
+ 0x3,0xff,0xbf,0xa7,0x9a,0xff,0xe0,0xd2,0xc3,0xe2,0xff,0xf1,0xe3,0xae,0xff,0xff,
+ 0xfa,0x6b,0xff,0xff,0xff,0x1b,0xfb,0xff,0xfb,0x0,0xf8,0xfa,0xf2,0x0,0xf8,0xf9,
+ 0xf3,0x0,0xf9,0xfa,0xf4,0x0,0xf9,0xfa,0xf4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0xfa,0x2,0x2,
+ 0x0,0x6,0xfe,0xe7,0xba,0xa3,0x26,0x1d,0x4a,0x61,0xb7,0x0,0x0,0x0,0x0,0xde,
+ 0x23,0xf,0x22,0x2,0xb,0x11,0x0,0xfd,0xb,0x6,0x0,0x8,0x3,0xff,0x0,0x5,
+ 0xfd,0xfd,0x0,0x2,0xfb,0xfb,0x0,0xf6,0xf8,0xfa,0x0,0xea,0xff,0xfc,0x0,0xe6,
+ 0xff,0xff,0x0,0x4e,0xd6,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,
+ 0x85,0x77,0x0,0x24,0x3d,0x3b,0xf9,0x38,0x3a,0x4a,0x9d,0x0,0x0,0x0,0x6b,0xfe,
+ 0xfe,0xf8,0x0,0xfa,0xfa,0xfb,0x0,0x2,0x3,0x2,0x0,0x7,0x6,0xc,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xbe,0xa3,0x22,
+ 0xd6,0xa2,0xaa,0x5f,0x40,0xa4,0xb7,0x5c,0xce,0x16,0x9,0x22,0x1b,0x2d,0x19,0x0,
+ 0xff,0xe,0x6,0x0,0xfb,0xfa,0xff,0x0,0x0,0xf9,0xff,0x0,0xfa,0xf2,0xfe,0x0,
+ 0xfd,0xf9,0x1,0x0,0xfe,0xfe,0x0,0x0,0x1,0x0,0x0,0x0,0x5,0x2,0xfe,0x0,
+ 0x11,0xe,0xff,0x0,0xd,0x1a,0x9,0x0,0xe9,0xe6,0xf2,0x0,0xd0,0xce,0xea,0x0,
+ 0x4b,0xf5,0xf9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb3,0xc5,0xbf,0x89,
+ 0x30,0x2b,0x31,0x78,0x1,0xf2,0xee,0x0,0xfe,0xff,0x0,0x0,0x1b,0x1c,0x1f,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x6a,
+ 0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xf9,0xc8,0xa7,0x18,0xc4,0x96,0xa5,0x6b,0x47,0xa6,0xb8,
+ 0x5a,0x0,0x0,0x0,0x22,0xe6,0x3c,0x27,0x0,0x6,0x16,0x7,0x0,0xf6,0xfb,0xfc,
+ 0x0,0x3,0x2,0xfe,0x0,0x6,0xd,0x0,0x0,0xfa,0xf1,0x0,0x0,0xf9,0xef,0xfe,
+ 0x0,0x1,0x1,0x0,0x0,0x0,0xff,0x1,0x0,0xfd,0xf7,0xff,0x0,0xfc,0xf7,0xff,
+ 0x0,0xff,0xf6,0xfb,0x0,0x10,0x40,0x1c,0x0,0xb,0x34,0x1c,0x0,0x8,0xf5,0xf0,
+ 0x0,0x2,0xd8,0xef,0x0,0x0,0xca,0xe9,0x0,0xd2,0xe2,0xe4,0x0,0x32,0xf3,0xfc,
+ 0xd6,0xc0,0xab,0xa1,0x38,0x33,0x4c,0x55,0xf3,0xf4,0xee,0xed,0x0,0x16,0x18,0x1a,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f,
+ 0x7f,0x81,0x81,0x81,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd9,
+ 0xac,0x10,0xb4,0x97,0xb1,0x60,0x50,0x94,0xa7,0x6d,0x0,0x0,0x0,0x22,0x0,0x0,
+ 0x0,0x0,0xee,0x44,0x29,0x0,0xf1,0xfa,0x3,0x0,0xf6,0xe7,0xfd,0x0,0x1,0xfe,
+ 0xff,0x0,0xf9,0xfc,0xff,0x0,0xf3,0xf4,0xff,0x0,0xfe,0xfc,0x0,0x0,0x3,0x6,
+ 0x1,0x0,0x1,0x4,0x1,0x0,0xfe,0xfd,0xff,0x0,0xff,0xfc,0x0,0x0,0x2,0x2,
+ 0x1,0x0,0x0,0x7,0x5,0x0,0xf2,0xca,0xe7,0x0,0xfa,0xf5,0xfb,0x0,0x1b,0x2b,
+ 0xb,0x0,0x0,0x6,0xfb,0x0,0x4,0xd5,0xe0,0x0,0x0,0x0,0x0,0x0,0xaa,0x1e,
+ 0x15,0xbc,0x3c,0x51,0x5b,0xf3,0x0,0x0,0x0,0x0,0x7,0xe,0xd,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f,0x7f,0x81,0x81,
+ 0x81,0x0,0x7f,0x7f,0x7f,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf6,0xe6,0xac,0x1,0xa,0x1a,0x54,0xff,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xb9,0xa,0x0,0x0,0x47,0xf6,0xc9,0x8d,0x67,0x54,0x3b,
+ 0x77,0x9d,0x89,0x0,0x0,0x0,0x22,0xd4,0x35,0x21,0x0,0x1d,0xfd,0xfd,0x0,0xed,
+ 0xfd,0x5,0x0,0xfa,0xfe,0x3,0x0,0x1,0x0,0xfe,0x0,0x0,0xfe,0x1,0x0,0x1,
+ 0xfe,0x1,0x0,0xfd,0xfd,0x1,0x0,0x0,0xfe,0xff,0x0,0x2,0x4,0x2,0x0,0x0,
+ 0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0x0,0x0,0x1,0x1,0x0,0xfc,
+ 0xf4,0xfc,0x0,0xff,0x5,0x0,0x0,0xe,0x1a,0x6,0x0,0x1a,0x3,0xfc,0x0,0xee,
+ 0xf5,0xfa,0x0,0x16,0xca,0xe0,0x0,0x1a,0x3,0xf,0x0,0xe6,0xfd,0xf1,0x0,0xfc,
+ 0xfc,0xfc,0x1,0x4,0x4,0x4,0x0,0xfc,0xf2,0xef,0x0,0x0,0x0,0x0,0x0,0x1,
+ 0xb,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x16,0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f,0x7f,0x81,0x81,0x81,0x0,0xff,
+ 0xff,0xff,0x0,0x80,0x80,0x80,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x1a,0x54,0xff,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0xcf,0x9f,0xc1,0x24,0xb1,0xb2,0x95,0xd1,0x84,0xb3,0xb6,0x0,
+ 0xc0,0x2e,0x17,0x0,0x3c,0x30,0x16,0x0,0x0,0xf,0xe,0x0,0xe7,0xf1,0x1,0x0,
+ 0x1,0xe7,0xf4,0x0,0x3,0xe8,0xf3,0x0,0xfe,0xfd,0x1,0x0,0x1,0x2,0x2,0x0,
+ 0x0,0x3,0xff,0x0,0x4,0x7,0x0,0x0,0x0,0x0,0x1,0x0,0xfd,0xf5,0xf9,0x0,
+ 0x0,0x1,0x3,0x0,0x2,0x7,0x4,0x0,0x1,0x1,0x0,0x0,0xfb,0xf1,0xfc,0x0,
+ 0x4,0x18,0xa,0x0,0x1f,0x18,0x2,0x0,0x4,0xf5,0xf9,0x0,0xb4,0xe5,0x0,0x0,
+ 0x50,0xd7,0xe0,0x0,0x13,0x19,0x1c,0x0,0x6d,0x34,0xe,0x0,0x79,0xb3,0xf1,0x0,
+ 0x4,0x4,0x4,0x0,0xf4,0xf4,0xf0,0x0,0xf8,0x0,0xfe,0x0,0x0,0x0,0x1,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x6a,0x7f,0x7f,0x7f,0x7f,0x81,0x81,0x81,0x0,0xff,0xff,0xff,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xf5,0xe1,0xa1,0x5,0xb,0x1f,0x5f,0xfb,0x0,0x0,0x0,0x0,0x99,0x5f,0x49,
+ 0x16,0x9e,0xd2,0xe9,0x93,0xcd,0xd3,0xd2,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xc5,0xfe,0x13,0x0,0xdf,0xc7,0xf9,0x0,0x2b,0x19,0xf1,0x0,0x2a,0x2f,0x14,
+ 0x0,0x8,0x18,0x12,0x0,0xf6,0xe6,0x0,0x0,0xf1,0xeb,0xf9,0x0,0xfa,0xf2,0x0,
+ 0x0,0xff,0xfd,0xfe,0x0,0x0,0xff,0xfe,0x0,0xff,0xf9,0xfc,0x0,0x9,0x28,0x11,
+ 0x0,0xff,0xf5,0xf9,0x0,0xfb,0xed,0xf6,0x0,0xfc,0xf8,0x2,0x0,0xe,0x2a,0x5,
+ 0x0,0x18,0x1e,0x8,0x0,0xe6,0xd8,0xf8,0x0,0x1e,0xc1,0xd7,0x0,0x0,0x0,0x0,
+ 0x0,0x4b,0x34,0x2a,0x0,0x77,0x4c,0x1b,0x0,0xf9,0x8,0x2,0x0,0x0,0xb3,0xd6,
+ 0x0,0x0,0x0,0x0,0x0,0x3,0x4,0x3,0x0,0xfe,0xfe,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0xf4,0xe1,
+ 0xaa,0x5,0xc,0x1f,0x5f,0xfb,0x0,0x0,0x0,0x0,0xdb,0x6f,0x3e,0x2,0x90,0xa2,
+ 0xd3,0xec,0xdb,0x3,0xf3,0x56,0xbb,0x86,0x4c,0x0,0xe0,0xd2,0xde,0x0,0xd9,0xc9,
+ 0xec,0x0,0x7b,0xd4,0xd6,0x0,0x0,0x0,0x0,0x0,0x4f,0xf5,0x28,0x0,0xb1,0xc2,
+ 0xc0,0x0,0xab,0x2d,0x26,0x0,0x36,0x1c,0x7,0x0,0x16,0xa,0x1,0x0,0xfc,0xb,
+ 0xfd,0x0,0xf3,0xf6,0xff,0x0,0xfb,0xfc,0xfc,0x0,0x8,0x20,0x8,0x0,0x8,0x29,
+ 0x17,0x0,0xfc,0xed,0xf5,0x0,0xf2,0xcb,0xf5,0x0,0x19,0xf,0x4,0x0,0x8,0xd,
+ 0x7,0x0,0xbb,0xc3,0xee,0x0,0x49,0xd6,0xdc,0x0,0x15,0x17,0x21,0x0,0x6c,0x3c,
+ 0x14,0x0,0x50,0x3d,0x17,0x0,0x8f,0xb4,0xd7,0xf9,0xa0,0xbc,0xdd,0x7,0x0,0x0,
+ 0x0,0x0,0x3,0x3,0x3,0xf7,0x15,0x14,0x18,0xf9,0xf7,0xf7,0xf7,0xe3,0xff,0xff,
+ 0xff,0xc9,0x0,0x0,0x0,0x64,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x81,0x6,0x6,
+ 0x4,0x4e,0xb,0xb,0xc,0x22,0x12,0x12,0x12,0xf1,0x7c,0x7c,0x7c,0xe,0x84,0x84,
+ 0x84,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xf6,0xe9,0xb7,0x4,0x2,
+ 0xf8,0xe9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdf,0xfa,0xfc,0x0,0xe8,
+ 0x0,0x6,0x2,0x0,0x0,0x0,0x0,0x38,0x53,0x67,0x0,0x41,0x5a,0xf6,0x0,0xe5,
+ 0xc4,0xbf,0x0,0x4f,0xd6,0xde,0x0,0xcf,0xcc,0xdd,0x0,0xd3,0xd8,0xea,0x0,0x3c,
+ 0x10,0x19,0x0,0x55,0xd3,0xda,0x0,0x0,0xd3,0x0,0x0,0x8a,0x1f,0x26,0x0,0x4a,
+ 0x12,0x0,0x0,0x23,0x12,0xfd,0x0,0x3,0x32,0x1c,0x0,0xff,0x1e,0x8,0x0,0xf1,
+ 0xc9,0xd8,0x0,0xfc,0xfe,0x4,0x0,0x1d,0x27,0xd,0x0,0xfb,0xe5,0xff,0x0,0x84,
+ 0xc1,0xf9,0x0,0x80,0xde,0xdc,0x0,0x4a,0x31,0x29,0x0,0x66,0x47,0x22,0x0,0x2a,
+ 0x23,0xa,0x0,0xf9,0xfc,0x5,0x0,0xa0,0xbc,0xdd,0x7,0x29,0x29,0x28,0xf0,0xfd,
+ 0xfd,0xfe,0x0,0xfb,0xfb,0xfb,0x0,0x3,0x3,0x2,0x3,0x20,0x20,0x1f,0x21,0xcb,
+ 0xcb,0xcc,0x1e,0xef,0xef,0xf0,0x5c,0x0,0x0,0x0,0x2,0x12,0x12,0x11,0xf7,0xfd,
+ 0xfd,0xfe,0x0,0xc,0xc,0xd,0xff,0xdc,0xdc,0xdd,0xf,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xff,0xfd,0xfb,0x6,
+ 0x1,0x0,0xfc,0xfb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c,0x31,0x15,0x1,
+ 0x35,0x0,0xd7,0xa,0xbe,0x0,0x0,0x0,0xfb,0x23,0x49,0x0,0x6,0x0,0x0,0x0,
+ 0x5,0x43,0x29,0x0,0x2a,0x37,0xdf,0x0,0x2b,0x46,0xd9,0x0,0xf7,0xde,0xdb,0x0,
+ 0xdd,0xd2,0xdb,0x0,0xc8,0xc8,0x3,0x0,0xbf,0xdd,0xf9,0x0,0x76,0xe1,0xda,0x0,
+ 0xaa,0xf7,0x26,0x0,0x3d,0xec,0x2,0x0,0x56,0xf6,0xf6,0x0,0x2d,0x13,0xf6,0x0,
+ 0xc,0x10,0xb,0x0,0x6,0xf7,0xfc,0x0,0xda,0xd4,0x0,0x0,0x2a,0xc0,0xd4,0x0,
+ 0x0,0x0,0x0,0x0,0x70,0x4d,0x38,0x0,0x66,0x56,0x35,0x0,0x1e,0x19,0x10,0x0,
+ 0xd8,0xde,0xeb,0x0,0x34,0x69,0x98,0x0,0x0,0x0,0x0,0x0,0xd7,0xd7,0xd8,0x10,
+ 0xfc,0xfc,0xfb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0xfe,0xfa,0x0,
+ 0x74,0x75,0x79,0xfb,0xd5,0xd5,0xd4,0xf7,0xf7,0xf7,0xf8,0xff,0x17,0x17,0x17,0x3,
+ 0xaa,0xaa,0xaa,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,
+ 0x0,0xf6,0xde,0x99,0x5,0xa,0x22,0x67,0xfb,0x0,0x0,0x0,0x0,0x0,0xb9,0x3f,
+ 0x1,0x99,0x7e,0xe0,0x4,0x6b,0xcd,0xe5,0xfa,0xfc,0xdf,0xbe,0x0,0x0,0x1d,0x3a,
+ 0x0,0xf4,0x0,0x4,0x0,0xe8,0xe8,0xea,0x0,0xfa,0xf2,0xe7,0x0,0xf,0x6,0xf4,
+ 0x0,0xa,0xf2,0xdc,0x0,0x1,0xe1,0xd4,0x0,0xf4,0xd8,0xdc,0x0,0xd0,0xcd,0xe1,
+ 0x0,0xb1,0xd4,0xed,0x0,0x9f,0xd8,0xe5,0x0,0x0,0x0,0x0,0x0,0x66,0xd,0x1f,
+ 0x0,0x5e,0x21,0xc,0x0,0xf8,0xe,0x3,0x0,0x44,0xc4,0xd2,0x0,0x1a,0x14,0x17,
+ 0x0,0x77,0x4c,0x27,0x0,0x58,0x62,0x4f,0x0,0x13,0x19,0x1f,0x0,0x4,0x25,0x54,
+ 0x0,0x0,0x0,0x0,0x0,0x36,0x71,0x1c,0x0,0xf9,0x8,0xf9,0x0,0xf6,0x2,0xe8,
+ 0x0,0xdb,0x85,0x3,0x0,0xfc,0xfc,0xf6,0x0,0x0,0x0,0x6,0x0,0xff,0xff,0xfa,
+ 0x0,0x1,0x1,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x1,0xf4,0xe7,
+ 0xb2,0x8,0x1,0xf4,0xe0,0xfd,0xa,0x24,0x6d,0xfb,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xff,0x0,0x0,0x0,0x0,0xc2,0x53,
+ 0x47,0x0,0x3a,0x6a,0x58,0x0,0x0,0x3f,0x4e,0x0,0xfc,0x0,0xf,0x0,0xe1,0xe8,
+ 0xea,0x0,0xed,0xe5,0xe0,0x0,0x9,0x6,0xf7,0x0,0x18,0x5,0xee,0x0,0x9,0xf0,
+ 0xd9,0x0,0xfb,0xd7,0xd2,0x0,0xe7,0xd8,0xe6,0x0,0xbb,0xdb,0xf0,0x0,0x73,0xb2,
+ 0xd4,0x0,0x5a,0x25,0x29,0x0,0xa6,0xdb,0xd7,0x0,0x41,0x2f,0x26,0x0,0x7b,0x57,
+ 0x2e,0x0,0x3c,0x4e,0x4f,0x0,0x4,0x1e,0x2f,0x0,0x4,0xe,0x2e,0x0,0x0,0x0,
+ 0x0,0x0,0x33,0x72,0x14,0x0,0xf9,0xed,0xf,0x0,0x1e,0x3f,0xfb,0x0,0x5,0xe6,
+ 0xe5,0x0,0xb1,0x7c,0xfd,0x0,0xfc,0xfc,0xf5,0x0,0x0,0x0,0x7,0x0,0x0,0x0,
+ 0x0,0x0,0xff,0xff,0xfd,0x0,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x4,0xff,
+ 0xfa,0xf7,0xa,0x1,0xff,0x4,0x13,0x0,0x0,0x0,0xdb,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0xfc,0xfc,0x1,0xad,0x5e,0x24,0x15,0x3e,
+ 0xa6,0xb9,0xea,0x0,0xad,0xb9,0x0,0xaf,0x45,0x3e,0x0,0x45,0x60,0x56,0x0,0x23,
+ 0x4e,0x4c,0x0,0x21,0x18,0x36,0x0,0xeb,0xfd,0xff,0x0,0xe3,0xd9,0xdb,0x0,0xfd,
+ 0x5,0x17,0x0,0x15,0x37,0x30,0x0,0x1f,0x37,0xe9,0x0,0x68,0xea,0xd9,0x0,0x61,
+ 0x51,0x29,0x0,0x12,0x61,0xab,0x0,0x3c,0x32,0x22,0x0,0x8e,0x75,0x4b,0x0,0x2d,
+ 0x42,0x4a,0x0,0xfe,0x7,0x19,0x0,0xaa,0xa5,0xaf,0x0,0x0,0x0,0x0,0x0,0x2f,
+ 0x6d,0x15,0x0,0xff,0xef,0x12,0x0,0x1,0x14,0xfe,0x0,0xfe,0xf6,0x3,0x0,0xee,
+ 0xca,0xc,0x0,0x0,0x0,0xf1,0x0,0xff,0xff,0x4,0x0,0x1,0x1,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,
+ 0xf2,0xdf,0xa9,0x5,0x5,0xf0,0xd5,0x0,0x8,0x30,0x81,0xfb,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbd,0x30,0x6,
+ 0xe7,0xf,0x25,0x34,0x1d,0x38,0xaf,0xc5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0xe7,0x89,0x7e,0x0,0x15,0x4a,0x3e,0x0,0x0,0x29,0x34,0x0,
+ 0xf1,0x0,0xc,0x0,0xea,0xe9,0xf1,0x0,0xf5,0xed,0xe7,0x0,0xa,0xff,0xea,0x0,
+ 0xf,0xfa,0xe0,0x0,0x1b,0x35,0x62,0x0,0x0,0x0,0x0,0x0,0xfc,0xf2,0xc9,0x0,
+ 0xfa,0xfb,0x10,0x0,0xa,0x13,0x27,0x0,0x0,0x0,0x0,0x0,0x2c,0x6b,0x17,0x0,
+ 0x6,0xf3,0x10,0x0,0x3,0x11,0xff,0x0,0xe3,0xf3,0x2,0x0,0x33,0xf7,0x3,0x0,
+ 0xb5,0xa7,0xd5,0x0,0x0,0x0,0x0,0x0,0x6e,0x5c,0x44,0x0,0x8e,0xa0,0xb8,0x0,
+ 0x0,0x0,0x0,0x0,0xff,0xfe,0xfc,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,
+ 0x2,0x0,0xfc,0xf5,0x1,0x8,0x30,0x81,0xfb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb7,0xbf,0xf9,
+ 0x17,0x1d,0x38,0xaf,0xb7,0x1a,0x47,0x24,0x0,0x26,0x7d,0x27,0x0,0x20,0x7e,0x26,
+ 0x0,0x36,0x56,0x12,0x0,0x19,0x77,0x82,0x0,0x4,0x2d,0x44,0x0,0xc6,0x5b,0x60,
+ 0x0,0xf,0xc3,0xad,0x0,0x25,0x17,0x1,0x0,0x28,0x2a,0x28,0x0,0xf,0x23,0x38,
+ 0x0,0xcd,0xe6,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf4,0xf1,0x4,
+ 0x0,0xa,0x13,0x27,0x0,0x0,0x0,0x0,0x0,0x2e,0x65,0x19,0x0,0xb,0xff,0x10,
+ 0x0,0xc,0x21,0xfd,0x0,0xe7,0xe4,0x1,0x0,0x11,0xca,0x0,0x0,0xb5,0xa7,0xd5,
+ 0x0,0x0,0x0,0x0,0x0,0x47,0x10,0x10,0x0,0x92,0xa4,0xbc,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xfe,0xfe,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x2,0x3,0xfa,0xf4,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x26,0x1d,
+ 0x8,0xe7,0x5e,0x51,0x2e,0xe,0xe6,0xb9,0xdc,0x0,0xda,0x83,0xd9,0x0,0xe0,0x82,
+ 0xda,0x0,0xd,0x2d,0x11,0x0,0x4a,0x96,0x22,0x0,0x3d,0x6f,0x1c,0x0,0x3e,0xa9,
+ 0xb0,0x0,0x4,0x41,0x57,0x0,0xa6,0x46,0x51,0x0,0xfb,0xa5,0x91,0x0,0x17,0x8,
+ 0xf6,0x0,0x38,0x43,0x3f,0x0,0x0,0x0,0x0,0x0,0xfb,0xed,0xd8,0x0,0x10,0x1d,
+ 0x33,0x0,0x1d,0x34,0xe,0x0,0x29,0x5d,0x19,0x0,0x12,0x5,0xf,0x0,0xf,0x1c,
+ 0xfc,0x0,0xe0,0xd6,0x4,0x0,0xa,0xd4,0x0,0x0,0xd7,0xd4,0xd8,0x0,0x88,0x17,
+ 0x25,0x0,0x27,0x8,0xd,0x0,0xb9,0xf0,0xf0,0x0,0x0,0x0,0x0,0x0,0x4d,0x49,
+ 0x43,0xf2,0x0,0x0,0x0,0x0,0xfd,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,
+ 0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,
+ 0xb4,0x33,0x5,0xff,0xd5,0x67,0x1c,0x3,0x3,0x3,0xff,0xad,0x92,0x67,0xff,0x3,
+ 0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x25,0x52,0x20,0xff,0x3d,
+ 0x81,0x27,0xff,0x3f,0x7c,0x22,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x8d,
+ 0x39,0x35,0xff,0xf6,0x9e,0x93,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,
+ 0x3,0x3,0xff,0x2c,0x6a,0x1c,0xff,0x43,0x72,0x2a,0xff,0x4d,0x86,0x27,0xff,0x1c,
+ 0x4b,0x2c,0xff,0x2b,0x2b,0x2b,0xff,0x3,0x3,0x3,0xff,0x71,0x21,0x2a,0xff,0x3b,
+ 0x18,0x1c,0xff,0x3,0x3,0x3,0xff,0xac,0xa2,0xa0,0xff,0x3,0x3,0x3,0xff,0x3,
+ 0x3,0x3,0xff,0xf8,0xf7,0xf6,0xff,0xfc,0xfc,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x7f,0x7f,0xff,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xff,0xf5,0xf0,0xeb,0x0,
+ 0x7,0xff,0xe6,0x0,0xd9,0xc8,0xb5,0x0,0xbb,0xb6,0xbe,0x0,0x70,0x93,0xbc,0x0,
+ 0x0,0x0,0x0,0x0,0x1e,0x4e,0x1a,0x0,0x16,0x25,0xa,0x0,0xfe,0x1,0x0,0x0,
+ 0xce,0x8c,0xdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1a,0x37,0x13,0x0,
+ 0x14,0x3c,0x8,0x0,0x1d,0xa,0xb,0x0,0x2,0x4,0xfe,0x0,0xc9,0xc4,0x7,0x0,
+ 0x12,0xe8,0xfd,0x0,0xd8,0xd3,0xd8,0x0,0x5e,0x21,0x28,0x0,0xd8,0xf1,0xf4,0x0,
+ 0xca,0xee,0xe4,0x0,0xc6,0xa7,0x7b,0x0,0xb7,0xc7,0xff,0x0,0xf0,0xef,0x5,0x0,
+ 0x93,0xa3,0x81,0x0,0xe4,0xdf,0xe1,0x0,0x17,0x1d,0x1b,0x0,0x1,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x80,0x80,0x80,0x0,0x4,0xf9,0xd0,0x7e,0x2,0x7,0x30,0x82,0xfe,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xff,0x0,0x0,0x0,0x0,0x7,0xc,0x11,
+ 0x0,0xee,0xf1,0x6,0x0,0x8,0x29,0x5a,0x0,0x66,0x2f,0x4b,0x0,0x6a,0x6e,0xdc,
+ 0x0,0xc3,0xbb,0xb6,0x0,0x43,0x6a,0x9d,0x0,0xe2,0x0,0x0,0x0,0x12,0x2f,0x19,
+ 0x0,0x32,0x61,0x27,0x0,0x4,0x5,0xfd,0x0,0x2,0xf5,0xff,0x0,0x14,0x22,0x4,
+ 0x0,0x8,0x9,0x0,0x0,0xf2,0xf3,0xfc,0x0,0xcf,0xc3,0x8,0x0,0x12,0xed,0xfd,
+ 0x0,0xd8,0xd3,0xd8,0x0,0x6d,0x23,0x29,0x0,0xd9,0xf2,0xf7,0x0,0xca,0xee,0xe4,
+ 0x0,0xb3,0x90,0x5f,0x0,0x0,0x0,0xd,0x0,0xec,0xef,0xe6,0x0,0x5,0x2,0x20,
+ 0x0,0x0,0x0,0x0,0x0,0x1,0x5,0x5,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x35,0x35,0x35,0x0,0x2,0xfe,0x7,0x12,0x19,0xf9,0xcf,0x7f,0x5,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,
+ 0x4,0xff,0x4,0x4,0x4,0xff,0x18,0x28,0x1a,0xec,0x0,0x0,0x0,0x0,0x93,0xa0,
+ 0x75,0x0,0xfb,0xe8,0xb3,0x0,0x16,0x1,0xe3,0x0,0xd0,0xde,0xf3,0x0,0xc2,0xe8,
+ 0x1c,0x0,0x2d,0x4f,0x7a,0x0,0xfc,0xe9,0xc1,0x0,0xd5,0xa8,0x6f,0x0,0xee,0xd1,
+ 0xe7,0x0,0xce,0x9f,0xd9,0x0,0xea,0xd9,0x0,0x0,0x17,0x28,0xf,0x0,0x3d,0x32,
+ 0x19,0x0,0xa,0x7,0x3,0x0,0xcb,0xce,0x4,0x0,0x11,0xf0,0xfd,0x0,0xd9,0xd3,
+ 0xd8,0x0,0x79,0x22,0x29,0x0,0xfe,0xf7,0xfb,0x0,0xba,0xeb,0xe0,0x0,0x0,0x0,
+ 0x0,0x0,0x12,0x13,0x1f,0x0,0xc1,0xcf,0xe8,0x0,0x7,0x5,0x26,0x0,0x2d,0x2e,
+ 0x2c,0x0,0x0,0x0,0x0,0x0,0xfd,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x5a,0x5a,0x5a,0xf5,0x0,0x0,0x0,0x0,0x56,0x56,
+ 0x56,0xf4,0x63,0x63,0x62,0xf2,0x1,0xf4,0xdc,0x9d,0x1e,0x0,0xfb,0xf5,0xe7,0x1,
+ 0xfb,0xf5,0xff,0xa,0x12,0x4,0xff,0x0,0xf,0xfd,0x16,0xc1,0x93,0xb7,0x7,0x43,
+ 0x7d,0xc4,0xdf,0x9b,0x41,0x25,0x0,0x1d,0x1a,0x5,0x0,0x48,0xa5,0xd6,0x0,0x0,
+ 0x0,0x0,0x0,0x22,0x3c,0x1d,0x0,0xde,0xc4,0xe3,0x0,0xdf,0xce,0x97,0x0,0xc,
+ 0x4,0x15,0x0,0xdb,0xec,0x8,0x0,0xf7,0x9,0x1a,0x0,0x27,0x1e,0x13,0x0,0x18,
+ 0x2,0xdd,0x0,0xb3,0xa3,0x9b,0x0,0x6f,0x91,0xc0,0x0,0xe2,0xe5,0xe7,0x0,0x50,
+ 0x76,0x2b,0x0,0xd7,0xf4,0xfb,0x0,0x8,0xd6,0x2,0x0,0xd1,0xc0,0xd8,0x0,0x88,
+ 0x2d,0x28,0x0,0x7,0xf9,0xfd,0x0,0x71,0xda,0xdb,0x0,0x0,0x0,0x0,0x0,0xc4,
+ 0xa3,0x84,0x0,0xd1,0xdd,0xea,0x0,0xc4,0xc8,0xfb,0x0,0xa4,0xb5,0x94,0x0,0x0,
+ 0x0,0x0,0x0,0xfd,0xfd,0xfd,0x0,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x40,0x40,0x40,0xf1,0xd9,0xd9,0xd8,0x1,0xc,0xc,0xc,0xff,0xef,
+ 0xef,0xef,0x1,0xf3,0xf3,0xf3,0xea,0x4,0x1,0xa,0x18,0xe8,0xa,0x19,0x4a,0xfb,
+ 0x0,0x0,0x0,0x0,0x0,0xf1,0xad,0xe,0xb1,0x96,0xa8,0xe6,0x53,0x7d,0xc4,0x0,
+ 0x0,0x0,0x0,0x0,0xd3,0xec,0xfb,0x0,0xda,0xf4,0x0,0x0,0x84,0x34,0x27,0x0,
+ 0xf5,0xfa,0x0,0x0,0xd5,0xe0,0xf5,0x0,0xf7,0x13,0xd,0x0,0x21,0x32,0x69,0x0,
+ 0x82,0x85,0x57,0x0,0x57,0x40,0x38,0x0,0x21,0x17,0x0,0x0,0xe8,0xf0,0xfa,0x0,
+ 0xe1,0x3,0x11,0x0,0x23,0x32,0x51,0x0,0x42,0x3b,0xdd,0x0,0xc1,0xc7,0x4,0x0,
+ 0xb0,0x8a,0xd5,0x0,0x27,0x3f,0x28,0x0,0xd1,0xc1,0xd8,0x0,0x8b,0x31,0x27,0x0,
+ 0x23,0xa,0xfe,0x0,0xa1,0xe7,0xf8,0x0,0x0,0x0,0x0,0x0,0xc0,0xa4,0x89,0x0,
+ 0xe3,0xed,0xf4,0x0,0xb9,0xba,0xdf,0x0,0xb2,0xc6,0xb3,0x0,0xfd,0xfc,0xfc,0x0,
+ 0x2,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x7c,0x7c,0x7c,0xff,0xd0,0xd0,0xce,0x0,0xf2,0xf2,0xf3,0xb,0xed,0xed,0xec,0xe5,
+ 0xff,0xff,0x0,0xb0,0xfc,0xfc,0xfd,0x6f,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,
+ 0x0,0xff,0xff,0xff,0x0,0x96,0x70,0x53,0x70,0x3,0x3,0x3,0xff,0x75,0x4d,0x34,
+ 0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,
+ 0xff,0x3,0x3,0x3,0xff,0x65,0x22,0x25,0xff,0x57,0x21,0x27,0xff,0x2d,0x1a,0x21,
+ 0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0x7e,0x81,0x56,0xff,0xd4,0xc7,0x8b,
+ 0xff,0xff,0xef,0xbb,0xff,0xff,0xed,0xbf,0xff,0x6f,0x71,0x40,0xff,0x3,0x3,0x3,
+ 0xff,0x21,0x29,0x28,0xff,0x3,0x3,0x3,0xff,0xa0,0x41,0x2c,0xff,0xbc,0x4d,0x29,
+ 0xff,0x3,0x3,0x3,0xff,0x3,0x3,0x3,0xff,0xb7,0x9c,0x82,0xff,0xb8,0xa6,0x94,
+ 0xff,0x5a,0x44,0x4c,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x1e,0x1e,0x1c,0xf0,0x1,0x1,0x1,0xfc,0x0,0x0,0x0,0x8,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0xae,0xb9,0xd5,0x47,0x0,0x0,0x0,0x0,0x31,0x39,
+ 0x37,0x0,0xfc,0xaa,0x96,0x0,0xe6,0xca,0xc5,0x0,0xee,0xe3,0xdf,0x0,0xf0,0xe8,
+ 0xe8,0x0,0xdf,0xe2,0xeb,0x0,0x61,0x95,0xc2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x49,0x1d,0x1b,0x0,0xdf,0xf7,0xfe,0x0,0x82,0x85,0xb9,0x0,0x85,0x82,
+ 0xad,0x0,0x57,0x71,0x42,0x0,0x35,0x25,0x23,0x0,0xd9,0xe3,0xf4,0x0,0x0,0x0,
+ 0x0,0x0,0xe2,0xda,0xdb,0x0,0xc0,0x4a,0x29,0x0,0x10,0x18,0x0,0x0,0x30,0x9e,
+ 0xda,0x0,0x0,0x0,0x0,0x0,0xaf,0x92,0x70,0x0,0xc,0x16,0x22,0x0,0xad,0xa9,
+ 0xb9,0x0,0x4a,0x54,0x5a,0x0,0xa6,0xbc,0xb4,0x0,0xff,0xff,0xff,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x55,0x55,
+ 0x55,0xf4,0xf3,0xf3,0xf3,0x0,0x2,0x2,0x2,0x8a,0xfd,0xfd,0xfd,0xf8,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,
+ 0x0,0x0,0x0,0xef,0xdf,0xbf,0x2,0x77,0x3b,0x4d,0xc5,0x9b,0xe7,0xf5,0x38,0xc1,
+ 0xc5,0xbd,0x0,0x2d,0x32,0x40,0x0,0xe6,0xdf,0xd7,0x0,0xf7,0xf1,0xe6,0x0,0xff,
+ 0xf8,0xec,0x0,0x0,0xf8,0xec,0x0,0xf9,0xed,0xe3,0x0,0xf7,0xe9,0xe6,0x0,0x49,
+ 0x76,0xa8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x53,0x17,0x20,0x0,0x3a,0x1c,0x4,0x0,0x73,0xcd,0xdc,0x0,0x0,
+ 0x0,0x0,0x0,0xb3,0x97,0x6f,0x0,0x13,0x1e,0x35,0x0,0xca,0xc5,0xcb,0x0,0xc9,
+ 0xcc,0xf2,0x0,0xa4,0xb7,0x9c,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x72,0x72,0x72,0xfb,0x9c,
+ 0x9c,0x9a,0xf5,0xff,0xff,0xfe,0xdd,0xf4,0xf4,0xf7,0x34,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xdd,0xfd,0xfd,0xfd,0x22,
+ 0x0,0x0,0x0,0x0,0xed,0xe1,0xc8,0x0,0x9,0xd,0x18,0x0,0x3,0x8,0xf,0x0,
+ 0xe9,0xf0,0xf6,0x0,0xf1,0xf1,0xf3,0x0,0xf7,0xf5,0xef,0x0,0xf4,0xee,0xe5,0x0,
+ 0xfd,0xf5,0xe6,0x0,0x2,0xf8,0xec,0x0,0xf9,0xee,0xe6,0x0,0xfe,0xf2,0xef,0x0,
+ 0x1,0xf5,0xf2,0x0,0xfc,0xef,0xf2,0x0,0x52,0x98,0xcc,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xa9,0x86,0x5e,0x0,0x1f,0x33,0x44,0x0,0xea,0xe7,0xed,0x0,0xad,0xae,0xd8,0x0,
+ 0xa1,0xb2,0x99,0x0,0xfc,0xfc,0xfc,0x0,0x0,0xff,0xfd,0x0,0x0,0x0,0x1,0x0,
+ 0x0,0x1,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x76,0x76,0x76,0xfc,0x96,0x96,0x95,0xf4,
+ 0xfa,0xfa,0xfa,0x2,0xfb,0xfb,0xfc,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,
+ 0xdd,0x0,0x0,0x0,0x0,0xfd,0xfd,0xfd,0x22,0x0,0x0,0x0,0x0,0xb8,0xa9,0x95,
+ 0x0,0x17,0x16,0x14,0x0,0x15,0x19,0x1b,0x0,0x1a,0x1e,0x23,0x0,0x1,0x9,0x12,
+ 0x0,0xf6,0xfa,0xfb,0x0,0xe9,0xe9,0xeb,0x0,0xe5,0xe3,0xde,0x0,0xef,0xe8,0xe0,
+ 0x0,0x6,0xfe,0xf3,0x0,0x5,0xfd,0xf3,0x0,0x6,0xf9,0xed,0x0,0x7,0xfb,0xf3,
+ 0x0,0x4,0xfe,0xfa,0x0,0xb,0x6,0x3,0x0,0xa3,0xb9,0xd3,0x0,0x0,0x7,0xc,
+ 0x0,0x4a,0x50,0x51,0x0,0x6,0xc,0xb,0x0,0xa7,0xa8,0xdb,0x0,0x90,0x9f,0x8d,
+ 0x0,0xfc,0xf5,0xbf,0x0,0x36,0x3d,0x72,0xf0,0xca,0xc9,0xc9,0x10,0x0,0x1,0x2,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x7c,0x7c,0x7c,0xff,0x8c,0x8c,0x8a,0xf1,0xfc,0xfc,0xfd,
+ 0x8,0xfd,0xfd,0xfe,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,
+ 0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,
+ 0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0xdd,0xfd,0xfd,
+ 0xfd,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x3c,0x36,0xad,0x7b,0x72,
+ 0x65,0x53,0xe,0x10,0x14,0x0,0x10,0x13,0x16,0x0,0x1c,0x1f,0x20,0x0,0xa,0xf,
+ 0x10,0x0,0x0,0x0,0x0,0x0,0xef,0xef,0xf0,0x0,0xe4,0xdd,0xd6,0x0,0xf6,0xed,
+ 0xe4,0x0,0x5,0x1,0xf8,0x0,0x0,0xf0,0xe4,0x0,0xa2,0xa9,0xb6,0x0,0x1e,0x22,
+ 0x21,0x0,0x57,0x58,0x49,0x0,0xa8,0xb4,0xe0,0x0,0x77,0x83,0x88,0x0,0xfc,0xfa,
+ 0xc6,0x0,0x3b,0x3d,0x6f,0xf0,0xd9,0xd9,0xd6,0x1,0x41,0x41,0x46,0x3,0xab,0xab,
+ 0xab,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x60,0x60,0x5f,0xf6,0xa9,0xa9,0xa9,0xfa,0xfa,0xfa,0xfb,0xa,0xfe,0xfe,
+ 0xfe,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,
+ 0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x6,0xd2,0xf8,0xf8,0xfa,0x2d,0x0,
+ 0x0,0x0,0x0,0x3,0x3,0x3,0x0,0xfd,0xfd,0xfd,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xc1,0xbb,0xac,0x0,0x9,0xb,0xf,0x0,0x13,0x11,0xe,0x0,0x15,
+ 0x18,0x1c,0x0,0x9,0x9,0x8,0x0,0x4,0xf8,0xe8,0x0,0x9e,0x9b,0x9f,0x0,0x3,
+ 0x0,0xf2,0x0,0x17,0x1d,0x22,0x0,0x4c,0x5b,0x7b,0x0,0xfc,0xfb,0xce,0x0,0x0,
+ 0x1,0x2e,0x0,0x0,0x0,0xff,0x0,0x26,0x26,0x26,0xf1,0xfb,0xfb,0xfc,0x0,0xdf,
+ 0xdf,0xdf,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x26,
+ 0x26,0x25,0xf0,0xdb,0xdb,0xdd,0x8,0x2,0x2,0x0,0x1,0xfe,0xfe,0xff,0x8,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,
+ 0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x7,0x7,0x5,0xbf,
+ 0x1,0x1,0x1,0xfa,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xfe,0x61,0x61,0x61,0xf5,
+ 0xff,0xff,0xfd,0xff,0xff,0xff,0xfc,0xff,0x4b,0x4b,0x47,0xf1,0x18,0x18,0x16,0xef,
+ 0x3,0x3,0x3,0xff,0x7,0x7,0x6,0xfd,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,
+ 0x3,0x3,0x3,0xfe,0x0,0x0,0x0,0xff,0xc6,0xbf,0xb2,0xff,0xbb,0xb5,0xa5,0xff,
+ 0x78,0x74,0x64,0xff,0x3,0x3,0x3,0xff,0xff,0xfd,0xd5,0xff,0xfb,0xee,0xba,0xff,
+ 0xff,0xfe,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x79,0x79,0x79,0xfd,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0x12,0x11,0xf1,
+ 0x7,0x7,0x5,0xef,0x6,0x6,0x4,0xe0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,
+ 0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x4,0x4,0x3,0xf0,0x1e,0x1e,0x1d,
+ 0xef,0x35,0x35,0x34,0xef,0x2c,0x2c,0x2b,0xef,0x1,0x1,0x1,0xfc,0x1b,0x1b,0x1b,
+ 0xf1,0x2f,0x2f,0x2e,0xef,0xf,0xf,0xe,0xf4,0x4,0x4,0x4,0xf4,0x46,0x46,0x45,
+ 0xf1,0xff,0xff,0xff,0xff,0x3b,0x3b,0x3b,0xf0,0x8,0x8,0x6,0xd5,0x2,0x2,0x2,
+ 0xf4,0x6,0x6,0x5,0xd9,0x3,0x3,0x3,0xee,0x0,0x0,0x0,0xff,0x0,0x0,0x0,
+ 0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x17,0x17,0x16,0xf1,0x50,0x4f,0x4c,
+ 0xf2,0xff,0xfe,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x30,0x30,0x2f,0xef,0xd,0xd,0xb,0xef,0x12,0x12,0x11,
+ 0xf1,0x0,0x0,0x0,0x48,0xf6,0xf5,0xf1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xd,0xa,0xc3,0x5,0x5,0x4,0x3,0x1f,0x1f,
+ 0x1f,0xfd,0xc2,0xc2,0xc3,0xf,0x2b,0x2b,0x2a,0xf0,0x1,0x1,0x1,0xf5,0xe6,0xe6,
+ 0xe6,0x7,0xea,0xea,0xe9,0xfb,0x1,0x1,0x1,0x0,0xfc,0xfc,0xfc,0x9,0xf6,0xf6,
+ 0xf6,0xf3,0x3a,0x3a,0x39,0xf0,0xe5,0xe5,0xe5,0x1,0xfd,0xfd,0xfe,0x1e,0x4,0x4,
+ 0x2,0xef,0x0,0x0,0xff,0xef,0xfe,0xfe,0xfe,0x1e,0x3,0x3,0x2,0xf7,0xb,0xb,
+ 0xb,0xfa,0xb,0xb,0xa,0x1,0xd,0xd,0xe,0xfe,0x17,0x16,0x15,0x1,0xa,0xb,
+ 0xe,0x3,0x0,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x60,
+ 0x5f,0xf6,0xb3,0xb3,0xb3,0xfc,0xf9,0xf9,0xf8,0x0,0xfb,0xfb,0xfb,0xeb,0xf3,0xf3,
+ 0xf5,0x54,0xf5,0xf4,0xf1,0xd2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x1,0x1,0x1,0x16,0x1,0x1,0x1,0xe5,0x6,0x6,0x4,0xf5,0x23,
+ 0x23,0x24,0xff,0xf4,0xf4,0xf4,0x0,0xf9,0xf9,0xf8,0x4,0xe9,0xe9,0xeb,0x6c,0x0,
+ 0x0,0x0,0x21,0x7f,0x7f,0x7f,0x7f,0xdb,0xdb,0xdb,0xf5,0xc9,0xc9,0xc9,0xfc,0xf8,
+ 0xf8,0xf7,0x0,0xfb,0xfb,0xfc,0x1,0xf7,0xf7,0xf6,0xff,0xa,0xa,0xa,0x1,0xfb,
+ 0xfb,0xfb,0x0,0xff,0xff,0xff,0x0,0x6,0x6,0x7,0x0,0x12,0x12,0x11,0xfe,0x47,
+ 0x47,0x48,0xb,0x8f,0x8f,0x8f,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7c,0x7c,0x7c,0xff,0x9a,0x9a,0x99,0xf3,0xf3,
+ 0xf3,0xf3,0xfe,0xf8,0xf8,0xf9,0x10,0x0,0x0,0x0,0x3a,0xff,0xff,0xff,0xc7,0xf7,
+ 0xf8,0xef,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0xff,0x0,0x9,0x9,0x12,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,
+ 0x9,0x9,0x7,0xb3,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0xff,0x9,0x9,0x6,0xd1,
+ 0x0,0x0,0x0,0x41,0x8,0x8,0x6,0xd0,0x7,0x7,0x5,0xef,0x8,0x8,0x6,0xef,
+ 0x4,0x4,0x3,0xe9,0x4d,0x4d,0x4d,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x54,0x54,0x54,0xf3,0x15,0x15,0x15,0xf1,0xd,0xd,0xb,0xef,0x4,0x4,0x3,0xf2,
+ 0x7,0x7,0x6,0xb1,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0xf7,0xf6,0xf1,0x2,
+ 0xf7,0xf6,0xf0,0x0,0xf6,0xf6,0xf1,0x0,0xf6,0xf6,0xf1,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,
+ 0x47,0x1e,0x1e,0x1c,0xa8,0xe,0xe,0xf,0x0,0xf5,0xf5,0xf5,0x0,0xfe,0xfe,0xfd,
+ 0x0,0xe8,0xe8,0xe8,0xde,0xf9,0xf9,0xfb,0x74,0x0,0x0,0x0,0xfe,0x7,0x7,0x5,
+ 0x95,0xfa,0xfa,0xfc,0x26,0x14,0x14,0x13,0xf7,0x3,0x3,0x3,0x0,0x2,0x2,0x3,
+ 0xff,0x8,0x8,0x8,0x0,0x10,0x10,0x10,0xff,0x28,0x28,0x28,0x5,0xa5,0xa5,0xa5,
+ 0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x58,0x58,0x58,0xf4,0xcb,0xcb,0xca,0xfd,0xef,0xef,0xef,
+ 0x1,0xfb,0xfb,0xfb,0xff,0xf6,0xf6,0xf6,0xa,0x7,0x7,0x5,0xc6,0xf7,0xf7,0xfa,
+ 0x65,0xf0,0xef,0xed,0xdb,0x3,0x3,0x2,0x0,0x5,0x7,0x3,0x0,0xfc,0xfa,0xff,
+ 0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xe,0xf,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x4,0xf7,0xf6,0xf3,0x0,0x0,0x2,0x3,0x0,0x3,0x3,
+ 0x3,0x4,0xfd,0xfd,0xfe,0x1,0xd3,0xd3,0xd4,0xf,0x0,0x0,0x0,0x0,0x48,0x48,
+ 0x48,0xf2,0x0,0x0,0x1,0x22,0xa,0xa,0xa,0xae,0xde,0xde,0xdd,0xdf,0xf9,0xf9,
+ 0xfb,0x6e,0x1b,0x1b,0x1b,0xc7,0xe5,0xe5,0xe5,0x23,0x6,0x6,0x4,0x77,0x0,0x0,
+ 0x1,0x2d,0xfe,0xfe,0xfe,0x1a,0xe0,0xe0,0xdf,0xd,0xe6,0xe6,0xe5,0xfa,0x21,0x21,
+ 0x20,0xf1,0xf5,0xf5,0xf6,0x1,0xfa,0xfa,0xfa,0x0,0x3,0x3,0x3,0x0,0x5,0x5,
+ 0x5,0x0,0xfe,0xfe,0xfd,0x0,0xfd,0xfd,0xfd,0x0,0xef,0xef,0xf0,0xa,0x1,0x1,
+ 0x1,0xf5,0x3,0x3,0x1,0xa7,0xfe,0xfe,0xff,0x77,0xee,0xf0,0xeb,0xf3,0xff,0xfe,
+ 0x0,0x0,0xfa,0xf8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x1,0x1,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x1,0x0,0x4,0xff,0xfe,0xfe,0xfc,0xfd,
+ 0xfd,0xfd,0xf3,0xa,0xa,0xa,0xff,0x1a,0x1a,0x19,0xf0,0x20,0x20,0x20,0x1,0xc6,
+ 0xc6,0xc7,0xf,0x0,0x0,0x0,0x0,0x48,0x48,0x48,0xf2,0xd9,0xd9,0xd9,0x27,0x8,
+ 0x8,0x6,0xad,0xe6,0xe6,0xe6,0xd,0x6,0x6,0x5,0xcd,0xfa,0xfa,0xfb,0x41,0x0,
+ 0x0,0x0,0xf7,0xf7,0xf7,0xf2,0xff,0x1,0x1,0x0,0x0,0xe,0xe,0x13,0xbb,0xfb,
+ 0xfb,0xfc,0x41,0x6,0x6,0x5,0xfb,0x3,0x3,0x1,0xf9,0xf2,0xf2,0xfa,0xb,0x4,
+ 0x4,0x3,0xdf,0x1,0x1,0x1,0xdf,0xfc,0xfc,0xfd,0xd1,0xff,0xff,0xff,0x81,0xf4,
+ 0xf4,0xee,0xf5,0x0,0xff,0x3,0x0,0x1,0x2,0x1,0x0,0x0,0xff,0xfe,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xf8,0xf9,0xf4,0x0,0xfd,0xfc,0xff,0x0,
+ 0x1,0x1,0xfd,0x0,0xe,0xe,0x14,0x3f,0x3,0x3,0x2,0xa5,0xfe,0xfe,0xfe,0x12,
+ 0x1b,0x1b,0x1b,0xf9,0x3,0x3,0x4,0x0,0x8,0x8,0x8,0x0,0xd8,0xd8,0xd7,0xfb,
+ 0x2,0x2,0x2,0x6,0xfd,0xfd,0xfe,0x0,0xff,0xff,0xff,0xa,0x2,0x2,0x2,0x1,
+ 0x6,0x6,0x5,0x4,0xff,0xff,0x0,0xf8,0xf9,0xf9,0xf8,0x4,0x0,0x0,0x1,0xfd,
+ 0x3,0x3,0x2,0xed,0x2,0x2,0x2,0xbf,0xfa,0xfa,0xfb,0xa8,0xf7,0xf8,0xf3,0xb4,
+ 0x8,0x7,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0xfb,0xf1,0x0,
+ 0x0,0x1,0x1,0x0,0xfe,0xfa,0x2,0x0,0xff,0x0,0x0,0x0,0x2,0x3,0xfe,0x0,
+ 0xff,0xff,0x0,0x0,0xfa,0xf8,0xfc,0x0,0x3,0x3,0x2,0x0,0x5,0x6,0x3,0x0,
+ 0xfd,0xfc,0xff,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xc,0xd,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x18,0x0,0x0,0x0,0x2a,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x3,0x0,0x0,0x0,
+ 0xbd,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdb,0x0,0x0,0x0,
+ 0xfe,0x0,0x0,0x0,0xf7,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xff,0xff,0xff,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xff,0xff,
+ 0xab,0xb7,0x8a,0xde,0xc5,0x86,0xe7,0x5f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,
+ 0xae,0x42,0x60,0x82,
+
+};
+
+static const unsigned char qt_resource_name[] = {
+ // Icons
+ 0x0,0x5,
+ 0x0,0x4f,0xa6,0x53,
+ 0x0,0x49,
+ 0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x73,
+ // apunts.png
+ 0x0,0xa,
+ 0x5,0xbb,0x58,0xc7,
+ 0x0,0x61,
+ 0x0,0x70,0x0,0x75,0x0,0x6e,0x0,0x74,0x0,0x73,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67,
+
+};
+
+static const unsigned char qt_resource_struct[] = {
+ // :
+ 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
+ // :/Icons
+ 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
+ // :/Icons/apunts.png
+ 0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
+
+};
+
+QT_BEGIN_NAMESPACE
+
+extern Q_CORE_EXPORT bool qRegisterResourceData
+ (int, const unsigned char *, const unsigned char *, const unsigned char *);
+
+extern Q_CORE_EXPORT bool qUnregisterResourceData
+ (int, const unsigned char *, const unsigned char *, const unsigned char *);
+
+QT_END_NAMESPACE
+
+
+int QT_MANGLE_NAMESPACE(qInitResources_apunts)()
+{
+ QT_PREPEND_NAMESPACE(qRegisterResourceData)
+ (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
+ return 1;
+}
+
+Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_apunts))
+
+int QT_MANGLE_NAMESPACE(qCleanupResources_apunts)()
+{
+ QT_PREPEND_NAMESPACE(qUnregisterResourceData)
+ (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
+ return 1;
+}
+
+Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_apunts))
+
diff --git b/qrc_apunts.o a/qrc_apunts.o
new file mode 100644
index 0000000..8576792
--- /dev/null
+++ a/qrc_apunts.o
diff --git b/ui_adddialog.h a/ui_adddialog.h
new file mode 100644
index 0000000..9f2adfd
--- /dev/null
+++ a/ui_adddialog.h
@@ -0,0 +1,170 @@
+/********************************************************************************
+** Form generated from reading UI file 'adddialog.ui'
+**
+** Created: Mon Nov 4 07:59:39 2013
+** by: Qt User Interface Compiler version 4.8.4
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_ADDDIALOG_H
+#define UI_ADDDIALOG_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+QT_BEGIN_NAMESPACE
+
+class Ui_AddDialog
+{
+public:
+ QGridLayout *gridLayout;
+ QSpacerItem *horizontalSpacer;
+ QVBoxLayout *verticalLayout;
+ QLabel *nameLabel;
+ QLineEdit *nameLineEdit;
+ QLabel *phoneLabel;
+ QLineEdit *phoneLineEdit;
+ QLabel *commentLabel;
+ CustomTextEdit *commentTextEdit;
+ QLabel *assignaturesLabel;
+ QTableView *assignaturesTableView;
+ QSpacerItem *horizontalSpacer_2;
+ QSpacerItem *verticalSpacer_2;
+ QDialogButtonBox *buttonBox;
+ QSpacerItem *verticalSpacer;
+
+ void setupUi(QDialog *AddDialog)
+ {
+ if (AddDialog->objectName().isEmpty())
+ AddDialog->setObjectName(QString::fromUtf8("AddDialog"));
+ AddDialog->resize(280, 500);
+ gridLayout = new QGridLayout(AddDialog);
+ gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ horizontalSpacer = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout->addItem(horizontalSpacer, 1, 0, 1, 1);
+
+ verticalLayout = new QVBoxLayout();
+ verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ nameLabel = new QLabel(AddDialog);
+ nameLabel->setObjectName(QString::fromUtf8("nameLabel"));
+ QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(nameLabel->sizePolicy().hasHeightForWidth());
+ nameLabel->setSizePolicy(sizePolicy);
+
+ verticalLayout->addWidget(nameLabel);
+
+ nameLineEdit = new QLineEdit(AddDialog);
+ nameLineEdit->setObjectName(QString::fromUtf8("nameLineEdit"));
+
+ verticalLayout->addWidget(nameLineEdit);
+
+ phoneLabel = new QLabel(AddDialog);
+ phoneLabel->setObjectName(QString::fromUtf8("phoneLabel"));
+ sizePolicy.setHeightForWidth(phoneLabel->sizePolicy().hasHeightForWidth());
+ phoneLabel->setSizePolicy(sizePolicy);
+
+ verticalLayout->addWidget(phoneLabel);
+
+ phoneLineEdit = new QLineEdit(AddDialog);
+ phoneLineEdit->setObjectName(QString::fromUtf8("phoneLineEdit"));
+
+ verticalLayout->addWidget(phoneLineEdit);
+
+ commentLabel = new QLabel(AddDialog);
+ commentLabel->setObjectName(QString::fromUtf8("commentLabel"));
+
+ verticalLayout->addWidget(commentLabel);
+
+ commentTextEdit = new CustomTextEdit(AddDialog);
+ commentTextEdit->setObjectName(QString::fromUtf8("commentTextEdit"));
+ QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Maximum);
+ sizePolicy1.setHorizontalStretch(0);
+ sizePolicy1.setVerticalStretch(0);
+ sizePolicy1.setHeightForWidth(commentTextEdit->sizePolicy().hasHeightForWidth());
+ commentTextEdit->setSizePolicy(sizePolicy1);
+ commentTextEdit->setMaximumSize(QSize(16777215, 100));
+
+ verticalLayout->addWidget(commentTextEdit);
+
+ assignaturesLabel = new QLabel(AddDialog);
+ assignaturesLabel->setObjectName(QString::fromUtf8("assignaturesLabel"));
+ sizePolicy.setHeightForWidth(assignaturesLabel->sizePolicy().hasHeightForWidth());
+ assignaturesLabel->setSizePolicy(sizePolicy);
+
+ verticalLayout->addWidget(assignaturesLabel);
+
+ assignaturesTableView = new QTableView(AddDialog);
+ assignaturesTableView->setObjectName(QString::fromUtf8("assignaturesTableView"));
+ assignaturesTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ assignaturesTableView->setAlternatingRowColors(true);
+ assignaturesTableView->setSelectionMode(QAbstractItemView::MultiSelection);
+ assignaturesTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ assignaturesTableView->setSortingEnabled(true);
+ assignaturesTableView->setCornerButtonEnabled(false);
+ assignaturesTableView->horizontalHeader()->setStretchLastSection(true);
+ assignaturesTableView->verticalHeader()->setVisible(false);
+
+ verticalLayout->addWidget(assignaturesTableView);
+
+
+ gridLayout->addLayout(verticalLayout, 1, 1, 1, 1);
+
+ horizontalSpacer_2 = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout->addItem(horizontalSpacer_2, 1, 2, 1, 1);
+
+ verticalSpacer_2 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout->addItem(verticalSpacer_2, 2, 1, 1, 1);
+
+ buttonBox = new QDialogButtonBox(AddDialog);
+ buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setOrientation(Qt::Horizontal);
+ buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
+
+ gridLayout->addWidget(buttonBox, 3, 1, 1, 1);
+
+ verticalSpacer = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout->addItem(verticalSpacer, 0, 1, 1, 1);
+
+
+ retranslateUi(AddDialog);
+
+ QMetaObject::connectSlotsByName(AddDialog);
+ } // setupUi
+
+ void retranslateUi(QDialog *AddDialog)
+ {
+ AddDialog->setWindowTitle(QApplication::translate("AddDialog", "Afegir pr\303\251stec...", 0, QApplication::UnicodeUTF8));
+ nameLabel->setText(QApplication::translate("AddDialog", "Nom i cognoms", 0, QApplication::UnicodeUTF8));
+ phoneLabel->setText(QApplication::translate("AddDialog", "Tel\303\250fon", 0, QApplication::UnicodeUTF8));
+ commentLabel->setText(QApplication::translate("AddDialog", "Comentari (M\303\240x 140 car\303\240cters)", 0, QApplication::UnicodeUTF8));
+ assignaturesLabel->setText(QApplication::translate("AddDialog", "Assignatures", 0, QApplication::UnicodeUTF8));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class AddDialog: public Ui_AddDialog {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_ADDDIALOG_H
diff --git b/ui_editdialog.h a/ui_editdialog.h
new file mode 100644
index 0000000..08ee232
--- /dev/null
+++ a/ui_editdialog.h
@@ -0,0 +1,149 @@
+/********************************************************************************
+** Form generated from reading UI file 'editdialog.ui'
+**
+** Created: Mon Nov 4 07:59:39 2013
+** by: Qt User Interface Compiler version 4.8.4
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_EDITDIALOG_H
+#define UI_EDITDIALOG_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+QT_BEGIN_NAMESPACE
+
+class Ui_EditDialog
+{
+public:
+ QGridLayout *gridLayout;
+ QVBoxLayout *verticalLayout;
+ QLabel *nameLabel;
+ QLineEdit *nameLineEdit;
+ QLabel *phoneLabel;
+ QLineEdit *phoneLineEdit;
+ QLabel *commentLabel;
+ CustomTextEdit *commentTextEdit;
+ QLabel *assignaturaLabel;
+ QComboBox *assignaturaComboBox;
+ QSpacerItem *horizontalSpacer_2;
+ QDialogButtonBox *buttonBox;
+ QSpacerItem *verticalSpacer_3;
+ QSpacerItem *verticalSpacer_2;
+ QSpacerItem *horizontalSpacer;
+
+ void setupUi(QDialog *EditDialog)
+ {
+ if (EditDialog->objectName().isEmpty())
+ EditDialog->setObjectName(QString::fromUtf8("EditDialog"));
+ EditDialog->resize(280, 336);
+ gridLayout = new QGridLayout(EditDialog);
+ gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ verticalLayout = new QVBoxLayout();
+ verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ nameLabel = new QLabel(EditDialog);
+ nameLabel->setObjectName(QString::fromUtf8("nameLabel"));
+
+ verticalLayout->addWidget(nameLabel);
+
+ nameLineEdit = new QLineEdit(EditDialog);
+ nameLineEdit->setObjectName(QString::fromUtf8("nameLineEdit"));
+
+ verticalLayout->addWidget(nameLineEdit);
+
+ phoneLabel = new QLabel(EditDialog);
+ phoneLabel->setObjectName(QString::fromUtf8("phoneLabel"));
+
+ verticalLayout->addWidget(phoneLabel);
+
+ phoneLineEdit = new QLineEdit(EditDialog);
+ phoneLineEdit->setObjectName(QString::fromUtf8("phoneLineEdit"));
+
+ verticalLayout->addWidget(phoneLineEdit);
+
+ commentLabel = new QLabel(EditDialog);
+ commentLabel->setObjectName(QString::fromUtf8("commentLabel"));
+
+ verticalLayout->addWidget(commentLabel);
+
+ commentTextEdit = new CustomTextEdit(EditDialog);
+ commentTextEdit->setObjectName(QString::fromUtf8("commentTextEdit"));
+
+ verticalLayout->addWidget(commentTextEdit);
+
+ assignaturaLabel = new QLabel(EditDialog);
+ assignaturaLabel->setObjectName(QString::fromUtf8("assignaturaLabel"));
+
+ verticalLayout->addWidget(assignaturaLabel);
+
+ assignaturaComboBox = new QComboBox(EditDialog);
+ assignaturaComboBox->setObjectName(QString::fromUtf8("assignaturaComboBox"));
+
+ verticalLayout->addWidget(assignaturaComboBox);
+
+
+ gridLayout->addLayout(verticalLayout, 1, 1, 2, 3);
+
+ horizontalSpacer_2 = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
+
+ gridLayout->addItem(horizontalSpacer_2, 1, 4, 1, 1);
+
+ buttonBox = new QDialogButtonBox(EditDialog);
+ buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setOrientation(Qt::Horizontal);
+ buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
+
+ gridLayout->addWidget(buttonBox, 4, 3, 1, 1);
+
+ verticalSpacer_3 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout->addItem(verticalSpacer_3, 3, 3, 1, 1);
+
+ verticalSpacer_2 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout->addItem(verticalSpacer_2, 0, 3, 1, 1);
+
+ horizontalSpacer = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
+
+ gridLayout->addItem(horizontalSpacer, 1, 0, 1, 1);
+
+
+ retranslateUi(EditDialog);
+ QObject::connect(buttonBox, SIGNAL(accepted()), EditDialog, SLOT(accept()));
+ QObject::connect(buttonBox, SIGNAL(rejected()), EditDialog, SLOT(reject()));
+
+ QMetaObject::connectSlotsByName(EditDialog);
+ } // setupUi
+
+ void retranslateUi(QDialog *EditDialog)
+ {
+ EditDialog->setWindowTitle(QApplication::translate("EditDialog", "Editar pr\303\251stec...", 0, QApplication::UnicodeUTF8));
+ nameLabel->setText(QApplication::translate("EditDialog", "Nom i cognoms", 0, QApplication::UnicodeUTF8));
+ phoneLabel->setText(QApplication::translate("EditDialog", "Tel\303\250fon", 0, QApplication::UnicodeUTF8));
+ commentLabel->setText(QApplication::translate("EditDialog", "Comentari (M\303\240x 140 car\303\240cters)", 0, QApplication::UnicodeUTF8));
+ assignaturaLabel->setText(QApplication::translate("EditDialog", "Assignatura", 0, QApplication::UnicodeUTF8));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class EditDialog: public Ui_EditDialog {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_EDITDIALOG_H
diff --git b/ui_mainwindow.h a/ui_mainwindow.h
new file mode 100644
index 0000000..7696b80
--- /dev/null
+++ a/ui_mainwindow.h
@@ -0,0 +1,207 @@
+/********************************************************************************
+** Form generated from reading UI file 'mainwindow.ui'
+**
+** Created: Mon Nov 4 07:59:39 2013
+** by: Qt User Interface Compiler version 4.8.4
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_MAINWINDOW_H
+#define UI_MAINWINDOW_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+QT_BEGIN_NAMESPACE
+
+class Ui_MainWindow
+{
+public:
+ QWidget *centralWidget;
+ QGridLayout *gridLayout_2;
+ QTableView *tableView;
+ QHBoxLayout *horizontalLayout_2;
+ QPushButton *addButton;
+ QPushButton *deleteButton;
+ QPushButton *editButton;
+ QSpacerItem *horizontalSpacer;
+ QPushButton *exitButton;
+ QSpacerItem *verticalSpacer_4;
+ QSpacerItem *horizontalSpacer_7;
+ QSpacerItem *verticalSpacer_2;
+ QSpacerItem *horizontalSpacer_2;
+ QSpacerItem *verticalSpacer_3;
+ QStatusBar *statusBar;
+
+ void setupUi(QMainWindow *MainWindow)
+ {
+ if (MainWindow->objectName().isEmpty())
+ MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+ MainWindow->resize(800, 600);
+ QIcon icon;
+ icon.addFile(QString::fromUtf8(":/Icons/apunts.png"), QSize(), QIcon::Normal, QIcon::Off);
+ MainWindow->setWindowIcon(icon);
+ centralWidget = new QWidget(MainWindow);
+ centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+ gridLayout_2 = new QGridLayout(centralWidget);
+ gridLayout_2->setSpacing(6);
+ gridLayout_2->setContentsMargins(11, 11, 11, 11);
+ gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+ tableView = new QTableView(centralWidget);
+ tableView->setObjectName(QString::fromUtf8("tableView"));
+ tableView->setLocale(QLocale(QLocale::Spanish, QLocale::Spain));
+ tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ tableView->setAlternatingRowColors(true);
+ tableView->setSelectionMode(QAbstractItemView::MultiSelection);
+ tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
+ tableView->setShowGrid(true);
+ tableView->setGridStyle(Qt::SolidLine);
+ tableView->setSortingEnabled(true);
+ tableView->setCornerButtonEnabled(false);
+ tableView->horizontalHeader()->setStretchLastSection(true);
+ tableView->verticalHeader()->setVisible(false);
+ tableView->verticalHeader()->setStretchLastSection(false);
+
+ gridLayout_2->addWidget(tableView, 2, 1, 1, 1);
+
+ horizontalLayout_2 = new QHBoxLayout();
+ horizontalLayout_2->setSpacing(6);
+ horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ addButton = new QPushButton(centralWidget);
+ addButton->setObjectName(QString::fromUtf8("addButton"));
+ QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(addButton->sizePolicy().hasHeightForWidth());
+ addButton->setSizePolicy(sizePolicy);
+ addButton->setMinimumSize(QSize(32, 32));
+ addButton->setMaximumSize(QSize(32, 32));
+ QIcon icon1;
+ QString iconThemeName = QString::fromUtf8("add");
+ if (QIcon::hasThemeIcon(iconThemeName)) {
+ icon1 = QIcon::fromTheme(iconThemeName);
+ } else {
+ icon1.addFile(QString::fromUtf8(""), QSize(), QIcon::Normal, QIcon::Off);
+ }
+ addButton->setIcon(icon1);
+ addButton->setIconSize(QSize(32, 32));
+
+ horizontalLayout_2->addWidget(addButton);
+
+ deleteButton = new QPushButton(centralWidget);
+ deleteButton->setObjectName(QString::fromUtf8("deleteButton"));
+ sizePolicy.setHeightForWidth(deleteButton->sizePolicy().hasHeightForWidth());
+ deleteButton->setSizePolicy(sizePolicy);
+ deleteButton->setMinimumSize(QSize(32, 32));
+ deleteButton->setMaximumSize(QSize(32, 32));
+ QIcon icon2;
+ iconThemeName = QString::fromUtf8("edit-delete");
+ if (QIcon::hasThemeIcon(iconThemeName)) {
+ icon2 = QIcon::fromTheme(iconThemeName);
+ } else {
+ icon2.addFile(QString::fromUtf8(""), QSize(), QIcon::Normal, QIcon::Off);
+ }
+ deleteButton->setIcon(icon2);
+
+ horizontalLayout_2->addWidget(deleteButton);
+
+ editButton = new QPushButton(centralWidget);
+ editButton->setObjectName(QString::fromUtf8("editButton"));
+ sizePolicy.setHeightForWidth(editButton->sizePolicy().hasHeightForWidth());
+ editButton->setSizePolicy(sizePolicy);
+ editButton->setMinimumSize(QSize(32, 32));
+ editButton->setMaximumSize(QSize(32, 32));
+ QIcon icon3;
+ iconThemeName = QString::fromUtf8("text-editor");
+ if (QIcon::hasThemeIcon(iconThemeName)) {
+ icon3 = QIcon::fromTheme(iconThemeName);
+ } else {
+ icon3.addFile(QString::fromUtf8(""), QSize(), QIcon::Normal, QIcon::Off);
+ }
+ editButton->setIcon(icon3);
+
+ horizontalLayout_2->addWidget(editButton);
+
+ horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ horizontalLayout_2->addItem(horizontalSpacer);
+
+ exitButton = new QPushButton(centralWidget);
+ exitButton->setObjectName(QString::fromUtf8("exitButton"));
+
+ horizontalLayout_2->addWidget(exitButton);
+
+
+ gridLayout_2->addLayout(horizontalLayout_2, 4, 1, 1, 1);
+
+ verticalSpacer_4 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout_2->addItem(verticalSpacer_4, 5, 1, 1, 1);
+
+ horizontalSpacer_7 = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout_2->addItem(horizontalSpacer_7, 2, 0, 1, 1);
+
+ verticalSpacer_2 = new QSpacerItem(20, 15, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout_2->addItem(verticalSpacer_2, 3, 1, 1, 1);
+
+ horizontalSpacer_2 = new QSpacerItem(10, 20, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout_2->addItem(horizontalSpacer_2, 2, 2, 1, 1);
+
+ verticalSpacer_3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ gridLayout_2->addItem(verticalSpacer_3, 0, 1, 1, 1);
+
+ MainWindow->setCentralWidget(centralWidget);
+ statusBar = new QStatusBar(MainWindow);
+ statusBar->setObjectName(QString::fromUtf8("statusBar"));
+ MainWindow->setStatusBar(statusBar);
+
+ retranslateUi(MainWindow);
+
+ QMetaObject::connectSlotsByName(MainWindow);
+ } // setupUi
+
+ void retranslateUi(QMainWindow *MainWindow)
+ {
+ MainWindow->setWindowTitle(QApplication::translate("MainWindow", "Aplicaci\303\263 Apunts", 0, QApplication::UnicodeUTF8));
+#ifndef QT_NO_TOOLTIP
+ addButton->setToolTip(QApplication::translate("MainWindow", "Afegeix pr\303\251stec", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ addButton->setText(QString());
+#ifndef QT_NO_TOOLTIP
+ deleteButton->setToolTip(QApplication::translate("MainWindow", "Esborra pr\303\251stec", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ deleteButton->setText(QString());
+#ifndef QT_NO_TOOLTIP
+ editButton->setToolTip(QApplication::translate("MainWindow", "Edita pr\303\251stec", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ editButton->setText(QString());
+ exitButton->setText(QApplication::translate("MainWindow", "Sortir", 0, QApplication::UnicodeUTF8));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class MainWindow: public Ui_MainWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_MAINWINDOW_H