From 24fcf70e1d329f0a88fa828032354e92bbdd9252 Mon Sep 17 00:00:00 2001 From: andi Date: Tue, 12 Mar 2024 17:53:49 +0000 Subject: [PATCH 01/73] Initial commit --- LICENSE | 232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 3 + 2 files changed, 235 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0f2fa9d --- /dev/null +++ b/LICENSE @@ -0,0 +1,232 @@ +GNU GENERAL PUBLIC LICENSE +Version 3, 29 June 2007 + +Copyright © 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. + + lmn-client + Copyright (C) 2024 DigitalSouveraeneSchule + + 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: + + lmn-client Copyright (C) 2024 DigitalSouveraeneSchule + 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 a/README.md b/README.md new file mode 100644 index 0000000..41e0e77 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# lmn-client + +Ansible playbooks and roles to deploy Debian clients for LinuxMuster. \ No newline at end of file From 0406669109f934e69b307729a41778978fbfa5cc Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Tue, 8 Apr 2025 11:19:19 +0200 Subject: [PATCH 02/73] Add vaultpw to debian installer preseeding --- doc/install_pxe.md | 5 ++++- misc/preseed.cfg | 13 +++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/install_pxe.md b/doc/install_pxe.md index bfe7a8d..2acfa32 100644 --- a/doc/install_pxe.md +++ b/doc/install_pxe.md @@ -25,9 +25,12 @@ set default=1 menuentry 'Installer Debian bookworm (amd64) + preseed + ansible inventory' { echo -n "Enter domain join password: " read adpw + set vaultpw="dummy" + # echo -n "Enter vault password" + # read vaultpw linux (http,ftp.debian.org)/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux auto=true priority=high \ url=https://codeberg.org/DigitalSouveraeneSchule/lmn-client/raw/branch/fvs/misc/preseed.cfg interface=auto \ - playbook=lmn-client.yml adpw="${adpw}" --- + playbook=lmn-client.yml adpw="${adpw}" vaultpw="${vaultpw}" --- initrd (http,ftp.debian.org)/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz } ``` diff --git a/misc/preseed.cfg b/misc/preseed.cfg index 09c6cfe..2cbe370 100644 --- a/misc/preseed.cfg +++ b/misc/preseed.cfg @@ -50,13 +50,11 @@ d-i apt-setup/contrib boolean true d-i mirror/country string manual d-i mirror/http/hostname string deb.debian.org d-i mirror/http/directory string /debian -#d-i mirror/http/proxy string http://10.167.0.253:3142/ -#d-i mirror/http/proxy string http://192.168.1.17:3142/ -#d-i mirror/http/proxy string http://aptcache.steinbeisschule-reutlingen.de:3142/ -d-i mirror/http/proxy string http://aptcache.pn.steinbeis.schule:3142/ +#d-i mirror/http/proxy string http://aptcache.pn.steinbeis.schule:3142/ +d-i mirror/http/proxy string # NTP server to use: -d-i clock-setup/ntp-server string server.pn.steinbeis.schule +#d-i clock-setup/ntp-server string server.pn.steinbeis.schule ### Backports: #apt-setup-udeb apt-setup/services-select multiselect security, updates, backports @@ -129,10 +127,9 @@ d-i preseed/late_command string \ in-target mount -v -t tmpfs tmpfs /dev/shm ; \ echo "$vaultpw" > /target/dev/shm/vaultpw ; \ in-target ansible-pull --verbose --purge --extra-vars="run_in_installer=true" \ - -l localhost \ - -i inventory-sample.yml --url=https://codeberg.org/DigitalSouveraeneSchule/lmn-client.git -C fvs $playbook ; \ + --vault-password-file /dev/shm/vaultpw -l localhost \ + -i inventory-sample.yml --url=https://codeberg.org/DigitalSouveraeneSchule/lmn-client.git -C main $playbook ; \ fi -## --vault-password-file /dev/shm/vaultpw -l localhost \ # ## When installing in combination with ansible-pull, ## export your ansible playbook like: From 9f5ecfc4f1a87660a143d779dd5bd75852413aeb Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Tue, 8 Apr 2025 18:35:47 +0200 Subject: [PATCH 03/73] Improve documentation about installation via pxe --- doc/install_pxe.md | 69 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/doc/install_pxe.md b/doc/install_pxe.md index 2acfa32..2b42ec9 100644 --- a/doc/install_pxe.md +++ b/doc/install_pxe.md @@ -2,15 +2,28 @@ * **Using DigitalSouveraeneSchule repository and LinuxMuster.Net tftp** Simplest solution. Playbook and default inventory from DigitalSouveraeneSchule codeberg repository. - Linux kernel and initial Ramdisk from debian repository. + Linux kernel and initial Ramdisk from debian repository. + Client must have access to the internet (noproxy group). * **Using your own repository and LinuxMuster.Net tftp** Here you can use your own inventory and make many custom settings. - Linux kernel and initial Ramdisk from debian repository. + Linux kernel and initial Ramdisk from debian repository. + Client must have access to the internet (noproxy group). * **Using your own repository and livebox tftp** - Additional kernel and Ramdisk from your own infrastrukture. + Additional kernel and Ramdisk from your own infrastrukture. + Client does not need direct internet access. ## Using codeberg repository and LinuxMuster.Net tftp +### Requirements / firewall settings + +The computer on which the linuxclient is to be installed must have access to the Internet (add host to noproxy group) + +The following resources are downloaded from the internet: + +* The repository is provided by codeberg.org +* the Linux kernel, the initial ramdisk and the installation files are loaded from debian.org. +* mscorefonts from Microsoft + ### Modification LinuxMuster.Net server Create grub config for device group `lmnclient` on your schools server: @@ -50,4 +63,52 @@ classroom;mypc01;lmnclient;F2:81:6B:C9:E3:EF;10.0.5.51;;;;classroom-studentcompu * confirm `hostname` and `domain` (you will be asked in network setup) * ... Get a cup of coffee ... wait until reboot ... login (Logging in may take a few minutes after installation) -## Using your own livebox server + +## Using your own repository and LinuxMuster.Net tftp + +If you fork the lmn-client repository, you can customize the preseeding and inventory to your needs. +Use the instructions in the previous section and customize the repository in `/srv/linbo/boot/grub/lmnclient.cfg`. + +It makes sense to encrypt your inventory via `ansible-vault`. +When using encrypted inventories you have to provide the vault password by commenting in the two lines in the `/srv/linbo/boot/grub/lmnclient.cfg`. + +## Using your own repository and livebox tftp + +The next improvement will be to use your own livebox with following functionalities: + +* Providing linux kernel and initial ramdisk for installer +* Can be used as cache for debian packages (aptcacher) +* Can provide mscorefonts and libdvdcss (multimedia codecs) +* Can be used to boot live systems (netboot) via pxe + +### Installing the livebox server + +* Install debian VM and configure network +* Install additional packages: ansible + `sudo apt install ansible` +* Run livebox playbook + `ansible-pull -i localhost, --url=https://salsa.debian.org/andi/debian-lan-ansible.git -C master livebox.yml` +* Set DNS entry for your new livebox server + +### Modification LinuxMuster.Net server + +The file `/srv/linbo/boot/grub/lmnclient.cfg` might look like this: + +``` +# ### NOT managed by linuxmuster.net ### + +# edit to your needs +set default=1 + +menuentry 'Installer Debian bookworm (amd64) + preseed + ansible inventory' { + echo -n "Enter domain join password: " + read adpw + set vaultpw="dummy" + # echo -n "Enter vault password" + # read vaultpw + linux (http,livebox.example.com)/d-i/n-pkg/images/12/amd64/text/debian-installer/amd64/linux auto=true priority=high \ + url=https://codeberg.org/MySchool/lmn-client/raw/branch/fvs/misc/preseed-myschool.cfg interface=auto \ + playbook=lmn-client.yml adpw="${adpw}" vaultpw="${vaultpw}" --- + initrd (http,livebox.example.com)/d-i/n-pkg/images/12/amd64/text/debian-installer/amd64/initrd.gz +} +``` From 39d2491e36998d47ea70d106f0393bd96f42c42b Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 9 Apr 2025 08:38:18 +0200 Subject: [PATCH 04/73] Use defaults for `kde_desktop_pkg` in inventory-sample --- inventory-sample.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/inventory-sample.yml b/inventory-sample.yml index 5cca733..de3bf1d 100644 --- a/inventory-sample.yml +++ b/inventory-sample.yml @@ -2,10 +2,9 @@ all: vars: domain: "{{ ansible_domain }}" - security_defaultuser_login_disable: false - kde_desktop_pkg: - - akonadi-backend-sqlite + # Comment out on productive systems when ssh key is provided + security_defaultuser_login_disable: false ## Proxy configuration (see: doc/localproxy.md) # localproxy: true @@ -59,7 +58,6 @@ all: # - vim # - mc # - tmux - # - debconf-utils ## WLAN configuration (see: doc/vpn.md): ## From 3580a9141b89a75e0c86d3afe2e9563a0b6b734d Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 9 Apr 2025 14:18:17 +0200 Subject: [PATCH 05/73] Avoid the need to use ssh keys for ansible connections to localhost --- inventory-sample.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/inventory-sample.yml b/inventory-sample.yml index de3bf1d..e12857e 100644 --- a/inventory-sample.yml +++ b/inventory-sample.yml @@ -103,6 +103,7 @@ all: hosts: localhost: + ansible_connection: local laptops: children: From 233e8e4ecfe64a30959b96394b61e1ea7d75c922 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 9 Apr 2025 16:08:46 +0200 Subject: [PATCH 06/73] Improve documentation --- doc/install_ontop.md | 20 ++++++++++++++------ doc/install_pxe.md | 4 ++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/doc/install_ontop.md b/doc/install_ontop.md index e44633c..cbf9090 100644 --- a/doc/install_ontop.md +++ b/doc/install_ontop.md @@ -1,6 +1,12 @@ # Installation on existing client -An easy method to test the lmn-client is to run the playbook manual on a fresh installed client. +A straightforward way to test the lmn-client is to manually run the playbook on a freshly installed client. + +This can be done in the following ways: + + On the client using ansible-pull + On the client by checking out the lmn-client repository and running the playbook locally + On a target device by checking out the lmn-client repository locally and executing the playbook against the target device ## Direct call via ansible-pull @@ -9,10 +15,10 @@ With two simple commands you can install the lmn-client with default configurati Steps: * Install debian on client (via USB or PXE) -* Install additional packages: ansible +* Install additional packages: ansible `sudo apt install ansible` -* Run Playbook - `ansible-pull -i inventory.yml -l localhost, --url=https://codeberg.org/DigitalSouveraeneSchule/lmn-client.git -C main lmn-client.yml` +* Run Playbook + `sudo ansible-pull --verbose -i inventory-sample.yml -l localhost --url=https://codeberg.org/DigitalSouveraeneSchule/lmn-client.git -C main lmn-client.yml` ## Checkout git and run ansible locally @@ -24,10 +30,12 @@ Steps: * Install debian on client (via USB or PXE) * Install additional packages: ansible, git `sudo apt install ansible git` -* Checkout Repository +* Checkout Repository `git clone https://codeberg.org/DigitalSouveraeneSchule/lmn-client.git` +* Change into repository directory + `cd lmn-client` * Create inventory - `cp inventory.yml inventory-myschool.yml` + `cp inventory-sample.yml inventory-myschool.yml` * Edit inventory-myschool.yml e.g.: `nano inventory-myschool.yml` * Run Playbook diff --git a/doc/install_pxe.md b/doc/install_pxe.md index 2b42ec9..de90ab6 100644 --- a/doc/install_pxe.md +++ b/doc/install_pxe.md @@ -42,7 +42,7 @@ menuentry 'Installer Debian bookworm (amd64) + preseed + ansible inventory' { # echo -n "Enter vault password" # read vaultpw linux (http,ftp.debian.org)/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux auto=true priority=high \ - url=https://codeberg.org/DigitalSouveraeneSchule/lmn-client/raw/branch/fvs/misc/preseed.cfg interface=auto \ + url=https://codeberg.org/DigitalSouveraeneSchule/lmn-client/raw/branch/main/misc/preseed.cfg interface=auto \ playbook=lmn-client.yml adpw="${adpw}" vaultpw="${vaultpw}" --- initrd (http,ftp.debian.org)/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz } @@ -107,7 +107,7 @@ menuentry 'Installer Debian bookworm (amd64) + preseed + ansible inventory' { # echo -n "Enter vault password" # read vaultpw linux (http,livebox.example.com)/d-i/n-pkg/images/12/amd64/text/debian-installer/amd64/linux auto=true priority=high \ - url=https://codeberg.org/MySchool/lmn-client/raw/branch/fvs/misc/preseed-myschool.cfg interface=auto \ + url=https://codeberg.org/MySchool/lmn-client/raw/branch/main/misc/preseed-myschool.cfg interface=auto \ playbook=lmn-client.yml adpw="${adpw}" vaultpw="${vaultpw}" --- initrd (http,livebox.example.com)/d-i/n-pkg/images/12/amd64/text/debian-installer/amd64/initrd.gz } From dfb9cf5ee7539d850ee68509994b39771dc87a22 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 7 May 2025 13:32:17 +0200 Subject: [PATCH 07/73] Fix playbook check if delegate_to host is accessible --- roles/lmn_vpn/tasks/wg_config.yml | 6 +++--- roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/roles/lmn_vpn/tasks/wg_config.yml b/roles/lmn_vpn/tasks/wg_config.yml index d1bf9ce..88b3f40 100644 --- a/roles/lmn_vpn/tasks/wg_config.yml +++ b/roles/lmn_vpn/tasks/wg_config.yml @@ -5,7 +5,7 @@ - wireguard - name: Check if wg_server is reachable - ansible.builtin.command: echo "Test if wg_server is reachable" + ansible.builtin.command: echo "reachable" delegate_to: wireguard_server register: result changed_when: false @@ -17,10 +17,10 @@ * server not reachable * no matching ssh-key changed_when: true - when: result.unreachable is defined and result.unreachable + when: result.stdout is not defined or result.stdout!="reachable" - name: Configure WG Server - when: result.unreachable is not defined or not result.unreachable + when: result.stdout is defined and result.stdout=="reachable" block: - name: Set facts wg_clientname ansible.builtin.set_fact: diff --git a/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml b/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml index 74bc7c4..c527f06 100644 --- a/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml +++ b/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml @@ -27,7 +27,7 @@ when: cert_client_active.stat.exists - name: Check if radius-server is reachable - ansible.builtin.command: echo "Test if radius-server is reachable" + ansible.builtin.command: echo "reachable" delegate_to: radius_server register: radius_reachable changed_when: false @@ -40,12 +40,12 @@ - "* server not reachable" - "* no matching ssh-key" changed_when: true - when: radius_reachable.unreachable is defined and radius_reachable.unreachable + when: radius_reachable.stdout is not defined or radius_reachable.stdout!='reachable' - name: Issue radius certificate ansible.builtin.include_tasks: eap-tls_issue-certificate.yaml when: - - radius_reachable.unreachable is not defined or not radius_reachable.unreachable + - radius_reachable.stdout is defined and radius_reachable.stdout=="reachable" - | ( not cert_client_active.stat.exists ) or (cert_serial.stdout | replace('serial=','') | int(base=16) ) in ( radius_crl.revoked_certificates | map(attribute='serial_number') | list ) or From e060ba9161949a42593bd658dae0a45b231c4d70 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 7 May 2025 13:35:32 +0200 Subject: [PATCH 08/73] Prevent playbook abort if iwd was not installed --- roles/lmn_wlan/tasks/eap-tls_issue-certificate.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/lmn_wlan/tasks/eap-tls_issue-certificate.yaml b/roles/lmn_wlan/tasks/eap-tls_issue-certificate.yaml index a3258df..9e897bb 100644 --- a/roles/lmn_wlan/tasks/eap-tls_issue-certificate.yaml +++ b/roles/lmn_wlan/tasks/eap-tls_issue-certificate.yaml @@ -105,6 +105,7 @@ ansible.builtin.systemd: name: iwd.service enabled: false + failed_when: false - name: Remove deprecated NetworkManager config ansible.builtin.blockinfile: From f0fd1d5aa0d0a2d4cfa0f02c52ce80c74e0c2b6a Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 7 May 2025 14:38:01 +0200 Subject: [PATCH 09/73] Skip delegate_to tasks when running in installer --- roles/lmn_vpn/tasks/wg_config.yml | 4 +++- roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/roles/lmn_vpn/tasks/wg_config.yml b/roles/lmn_vpn/tasks/wg_config.yml index 88b3f40..1e42049 100644 --- a/roles/lmn_vpn/tasks/wg_config.yml +++ b/roles/lmn_vpn/tasks/wg_config.yml @@ -20,7 +20,9 @@ when: result.stdout is not defined or result.stdout!="reachable" - name: Configure WG Server - when: result.stdout is defined and result.stdout=="reachable" + when: + - result.stdout is defined and result.stdout=="reachable" + - not run_in_installer|default(false)|bool block: - name: Set facts wg_clientname ansible.builtin.set_fact: diff --git a/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml b/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml index c527f06..79932f0 100644 --- a/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml +++ b/roles/lmn_wlan/tasks/eap-tls_check-certificate.yaml @@ -46,6 +46,7 @@ ansible.builtin.include_tasks: eap-tls_issue-certificate.yaml when: - radius_reachable.stdout is defined and radius_reachable.stdout=="reachable" + - not run_in_installer|default(false)|bool - | ( not cert_client_active.stat.exists ) or (cert_serial.stdout | replace('serial=','') | int(base=16) ) in ( radius_crl.revoked_certificates | map(attribute='serial_number') | list ) or From ce31924a3cdf6097a89e7f3bbdb6355458b7dba6 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 8 May 2025 07:16:12 +0200 Subject: [PATCH 10/73] Remove unnecessary systemd-resolved --- roles/lmn_wlan/tasks/main.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/lmn_wlan/tasks/main.yaml b/roles/lmn_wlan/tasks/main.yaml index 1fb7ec2..d5adcea 100644 --- a/roles/lmn_wlan/tasks/main.yaml +++ b/roles/lmn_wlan/tasks/main.yaml @@ -3,7 +3,6 @@ - name: Install packages related to wifi ansible.builtin.apt: name: - - systemd-resolved - firmware-realtek # for our wifi sticks - name: Provide service to enable WiFi on boot From 0e0950d18468f1eb6d0bc55488b9228004c706d6 Mon Sep 17 00:00:00 2001 From: "Andreas B. Mundt" Date: Tue, 6 May 2025 13:21:29 +0200 Subject: [PATCH 11/73] Fix conditionals for ansible version in trixie --- roles/lmn_misc/tasks/main.yml | 2 +- roles/lmn_network/tasks/main.yml | 4 ++-- roles/lmn_printer/tasks/main.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/lmn_misc/tasks/main.yml b/roles/lmn_misc/tasks/main.yml index 22134c5..7c15ede 100644 --- a/roles/lmn_misc/tasks/main.yml +++ b/roles/lmn_misc/tasks/main.yml @@ -98,7 +98,7 @@ export superusers password_pbkdf2 root {{ grub_pwd }} notify: Run update-grub - when: grub_pwd|default(false) + when: grub_pwd | bool | default(false) - name: Allow booting grub menu entries ansible.builtin.lineinfile: diff --git a/roles/lmn_network/tasks/main.yml b/roles/lmn_network/tasks/main.yml index 7a39349..571c107 100644 --- a/roles/lmn_network/tasks/main.yml +++ b/roles/lmn_network/tasks/main.yml @@ -5,14 +5,14 @@ mode: '0644' content: > {{ apt_conf }} - when: apt_conf|default(false) + when: apt_conf | bool | default(false) - name: Set NTP server ansible.builtin.lineinfile: path: /etc/systemd/timesyncd.conf insertafter: '^#NTP=' line: NTP={{ ntp_serv }} - when: ntp_serv|default(false) + when: ntp_serv | bool | default(false) - name: Add proposed-updates repository ansible.builtin.apt_repository: diff --git a/roles/lmn_printer/tasks/main.yml b/roles/lmn_printer/tasks/main.yml index 960b1fa..996cb2e 100644 --- a/roles/lmn_printer/tasks/main.yml +++ b/roles/lmn_printer/tasks/main.yml @@ -37,7 +37,7 @@ line: "SystemGroup root lpadmin {{ printer_admin_group }}" regexp: '^SystemGroup' state: present - when: printer_admin_group | length + when: printer_admin_group | length > 0 - name: Disable cups-browsed ansible.builtin.systemd: From 6063e6508943494c5111b31a5cdccd6ca24f509a Mon Sep 17 00:00:00 2001 From: "Andreas B. Mundt" Date: Tue, 6 May 2025 10:01:25 +0200 Subject: [PATCH 12/73] Fixes for trixie --- roles/custom/fvs/tasks/main.yml | 2 +- roles/lmn_kde/defaults/main.yml | 6 +++++- roles/lmn_kde/tasks/main.yml | 11 +++-------- roles/lmn_localhome/tasks/main.yml | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index 738b4fe..3a91603 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -220,7 +220,7 @@ ansible.builtin.blockinfile: path: /usr/share/sddm/themes/debian-breeze/Main.qml marker: // {mark} ANSIBLE MANAGED BLOCK - insertbefore: '\s+//Footer' + insertbefore: '^}$' block: | Text { id: hostname diff --git a/roles/lmn_kde/defaults/main.yml b/roles/lmn_kde/defaults/main.yml index 779142b..07685bb 100644 --- a/roles/lmn_kde/defaults/main.yml +++ b/roles/lmn_kde/defaults/main.yml @@ -6,6 +6,7 @@ kde_desktop_pkg: - calligra - codeblocks - dia + - filius - flameshot - freecad - fritzing @@ -14,8 +15,9 @@ kde_desktop_pkg: - inkscape - kde-full - keepassxc + - kicad + - kicad-doc-de - librecad - - mu-editor - openboard - qtcreator - spyder @@ -34,3 +36,5 @@ kde_desktop_pkg: - xdg-desktop-portal-kde - xdg-desktop-portal-wlr # share screen in browser - xournalpp + +kde_desktop_pkg_bpo: [ ] diff --git a/roles/lmn_kde/tasks/main.yml b/roles/lmn_kde/tasks/main.yml index 052606b..0b76358 100644 --- a/roles/lmn_kde/tasks/main.yml +++ b/roles/lmn_kde/tasks/main.yml @@ -8,19 +8,14 @@ repo: deb http://deb.debian.org/debian/ {{ ansible_distribution_release }}-backports main non-free-firmware state: present update_cache: true + when: kde_desktop_pkg_bpo | length > 0 - name: Install extra packages from backports ansible.builtin.apt: - name: - - filius - - kicad - - kicad-doc-de - - libreoffice - - libreoffice-l10n-de - - libreoffice-qt5 - state: latest # noqa package-latest + name: "{{ kde_desktop_pkg_bpo }}" autoremove: true default_release: "{{ ansible_distribution_release }}-backports" + when: kde_desktop_pkg_bpo | length > 0 - name: Create akonadi config dir diff --git a/roles/lmn_localhome/tasks/main.yml b/roles/lmn_localhome/tasks/main.yml index 3122720..f7c54df 100644 --- a/roles/lmn_localhome/tasks/main.yml +++ b/roles/lmn_localhome/tasks/main.yml @@ -9,7 +9,7 @@ ansible.builtin.blockinfile: path: /usr/share/sddm/themes/debian-breeze/Main.qml marker: // {mark} ANSIBLE MANAGED BLOCK localhome - insertbefore: '\s+//Footer' + insertbefore: '^}$' block: | Text { id: localhome From 6e119e0129eb8b9287161cd5d01df7e50f136f9b Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 4 Jun 2025 10:21:18 +0200 Subject: [PATCH 13/73] Omit backports, because Trixie does not have backports yet --- roles/lmn_finish/tasks/main.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/lmn_finish/tasks/main.yaml b/roles/lmn_finish/tasks/main.yaml index 5f3a787..2a44d0e 100644 --- a/roles/lmn_finish/tasks/main.yaml +++ b/roles/lmn_finish/tasks/main.yaml @@ -14,7 +14,7 @@ main non-free-firmware state: present update_cache: true -# when: extra_pkgs_bpo|length + when: extra_pkgs_bpo | length > 0 or extra_pkgs_bpo1 | length > 0 or extra_pkgs_bpo2 | length > 0 - name: Install extra packages from backports ansible.builtin.apt: @@ -25,6 +25,7 @@ - "{{ extra_pkgs_bpo }}" - "{{ extra_pkgs_bpo1 }}" - "{{ extra_pkgs_bpo2 }}" + when: extra_pkgs_bpo | length > 0 or extra_pkgs_bpo1 | length > 0 or extra_pkgs_bpo2 | length > 0 - name: Timestamp successfull run and send up-to-date report ansible.builtin.shell: From 84865291e03adfe5a577cfe6e0719aba732cf183 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 4 Jun 2025 10:26:56 +0200 Subject: [PATCH 14/73] Allow multiple macvtap-VMs to use the same MAC address --- roles/lmn_vm/files/vm-run | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/lmn_vm/files/vm-run b/roles/lmn_vm/files/vm-run index a957a49..700a0ab 100755 --- a/roles/lmn_vm/files/vm-run +++ b/roles/lmn_vm/files/vm-run @@ -267,6 +267,7 @@ while true; do type="ethernet,mac=${mac},target.dev=${interface},xpath1.set=./target/@managed=no,model.type=virtio" LIBVIRTOPTS="${LIBVIRTOPTS} --network type=$type" done + LIBVIRTOPTS="${LIBVIRTOPTS} --check mac_in_use=off" shift ;; --os ) From 76c7cc042ad9590117971f9ccfa502c85d643008 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 14 May 2025 12:39:43 +0200 Subject: [PATCH 15/73] Configure display resolution / audio out for specific clients --- inventory.yml | 1313 +++++++++++++++++++++++++------------------------ 1 file changed, 665 insertions(+), 648 deletions(-) diff --git a/inventory.yml b/inventory.yml index 81076e7..5941ac0 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,649 +1,666 @@ $ANSIBLE_VAULT;1.1;AES256 -62386339393366643763383339373037363365316132633835363530353330653839303732353335 -6231343438366132343632383066386163336532373633330a626636643034633261373662313138 -37336632633465646638363763306436333566376133656237373731613539363530656266336339 -3339313039373766360a306631373166663330373233343762613631636432306333383265313639 -65656638306665313862316137383939393336303633646463316536646162323563383263623637 -39323134626333333661666636326636313263396663653864643262373733326535653764313065 -31656135313263313535386364623237376336616430303737306534333839326531383964636264 -36336164656636366431346434643536663361313634386233356132633133666237633037623439 -37356136383063356530336230373231623062306163646235633633623439346634636161623062 -30383438663361373938653630653562366436303235663963363631656630303165386465396632 -30313639633364633439346230666264363762646264396336663934346533353562636437316461 -39636665346565343437303032313761633536633266653866643235316464346533666536316664 -39346662373338356639613238626237353737363533396330653239373033393665663263353165 -36626265323266333337363365356538393933616266613965353662323263353832386264363337 -35656631656365366132303465306432366235363931386238633265656162396632656463316465 -66363734663233663866656263353631323762343665353535356561313237313036393138636163 -36386562333339373832383364373465323862616661343865646662626331646639646164313439 -30333239346136303432323035626135623937353862646562373336636134633034393837656164 -31373932323135353836646236316163343966643731343831333033386338393737303264626134 -63373862383732663462656639643335613232633839386434633832636534376133376432643638 -31353136313538376531613239373965303730323536393039633861393338323861306662313639 -36366636396364386136663865613564633566666262656538373637383133376333623934666262 -35373134633133383535353436613932333466383961313361333730303164353463633531356561 -34626335653335306435333364636235623862616266353961313138663032326338343665343035 -66393562373835656634326164643638623364333239613363333138303938616337623366346663 -37343662663239396666633038386636633963613934616461363664333631663663316531626266 -65636661306635333839393835363839383763343164616631666238373737666366323232346234 -32626630626564353433393463626566383331343365396336646239303462633665643439633538 -36383365356435626237663630353364396166653365653363663362663838376532666236316663 -31393565363962316632663463313063333331316564383031363939646361363837623037626630 -32393761353066316663316165666434313766653666653537326638353165346438663565323836 -62383434616266366336363537376166663261303834353531323835626463326132326432336338 -39316464373362646333663763663334363035393336366266356639393735373563616130343931 -36383862363162613161343836313737363663353763323831306561313931343835316565326661 -34383236626335316266646362333535626338303962363632373663653136383138336263393435 -34326638353762343132393537343166643630666433386538326634613862313831633361303732 -39363862306562313765303066663932636531343935383466363738373039306135646162613164 -39386464623439356635366666323433303235303866653962363932643964383432323064636334 -63356231623139663661353364666432323335613738346130343536343633396333373963636234 -33623734323966626532663030646362323765663661383364613734663066313363653566303965 -64313136336236346430663636656634653039626165613631636532323164323330333263646366 -65393337353136396533393961613738336366313138373432306263393362613735336137393763 -37623365616139613638623664333039346533646638353538346464633465663634373463653963 -31366632306437616435356339633561346237373833356565663139363534373037626566356339 -62363739653934636635386465353163346263353034343861656135336435393930663561396634 -38393335303633326330373066623135336530633032653537366631343961346639656539666231 -62326134333364313237373035363637636265343236383931303438356463366361363936633964 -36393865626137353064613336656637353039353061353532663230396462363431393636663239 -61346565663764363666393034633239613431626133656134393661393435333334633736623730 -37656334656131623038363761343863643966313730316330363061326336353839623833643635 -35653333663239363436326131663537613735616632616165316435666134613862643265383638 -64323637623364313564313730643766376138663436356530663236313133353161643336663163 -34353735386433363362393336366236303132376235303163363231396266306462643261643730 -64333938353166333664383865616262383935666531633466653832383237623566353738376137 -63393937656235336432343163313933303532646432663437383635386164303039386535393334 -32356462626633623036616531383636633533346537316132623438663365373966343831333061 -33613431383038623162656262333031386265613561646530653737363339383631303137306131 -65643961393138373137613637396465346432333266303838653935373061316532636466316439 -62343863626564656232316236373735303734623933353634643337653036353639643139383462 -36616134373065616162336235353564663735393332636166306133373336373139643466653262 -62373735303130376534343930303532316332313737656434666665346133383534343066623634 -39383332626337323061373530666137333133653237353131363261366664623363393864616436 -32356238343137336430386262633962626466623438323437376566663666623236333432316532 -37356138343132393362373266396631353138373639363062623135666631383966313761303635 -33366136303632303965353634626334653533633737313032383036303430656662636230336137 -65653163326631636437363436663163376465373566366665333635326437376438633665336335 -62623666363435396561346436383433633936383261383639326535623861626539653833633738 -35626462383733363162616239343261346239303964376163636433313663353831633838396561 -30333331363336663336333937306437643332643332333061366638313837383532373036653461 -38316233346532633266373438336563613835316634396664663738366138613039616338353666 -62396166643461623136656266663637343862633237643665386530656436393363313134383639 -62386139663035663363653763366139396632656639623065383466633939363433393339323664 -66316138383238313562396462633731323037366461616434333865643363653339656364633265 -33613234613766626461366430343663633864363536646664323230323338383130306633613165 -33336133363466323062363961316632643133303962646230316336623731616230353932316562 -66303565346534363030323763336562353061633230373230303465336562396463376464643637 -63333137666562363135303264316332323031326638343032313934626663373362613133646334 -61653130636266633034383538636236313033373334613336356533633936643933336365346133 -37626263623035646232663433333532623031623462386336383032653735333335633931363733 -37386435343331393133333937626431303330613261396237306262623563633632323936316535 -65353638396430373937393536333565363830303333373863313762343465613861383262393366 -30633261326638383538623662653839393130323539646165646439613039396135656161656532 -65313662613533336161306639663131666132313037393338303261636433646434633761376538 -62626135633733323063316230636534393334336634643330323037393566303838336137313165 -37636632656338383664323264636132653432346164323533323739623730343937633938353735 -62313035323830303964363665313235313066336330336231613833316138326234393331636166 -37383731613537333464303431663236393933656462623165356335623165616661373665326235 -30333162636437346465633031633734623366356466396262613139623262326631666638326635 -32373631633234323365386532396561613366643139613539323266653130333537643465396563 -35346638326265343564343733303535643230663238336535343937626463343537653666663030 -33663563653865376135666633396164373332326336313130336661633136613233356237666137 -65306431636535356531333566303065643065653963313763393066353630363135336365656333 -63636239336264613161656135303633636336646531323534623063333439626331613138363239 -64656262313936616161326564663632653037663430653635356533393134663331353130366235 -38366639623662663230343039353861626432663933633137313238633332353739396436373633 -37353236363164306130326662346230336135663861346532383139663362656365646430373038 -61353932363561656537633534393430363236383566343839646231343730633864613036643530 -36633534343164376466336161333833653136376664353661346436353233616430396230386437 -64393430623864646334623137343537656563313865323336643064643766633035653265316539 -62636434653931613337336337383066373235653335656161656438373165616561323765323931 -31353661373532626231656361623038626361366632663764333764663737363137333732613234 -62376437393637316663353739333935343866373164333364346165313632313639636139356535 -38343639646362636635346634363064386636623635663536366461373431343362653839383138 -34323737313832343963366536666234363439386337353838323233376464646362343737313665 -36643237316238616265313332303162383033323363396330303766313734353563353133316530 -62643032326237626433363932666164336161346532646634363564326432396637346665636637 -36623561633861396439623835376434653738623862613333643162343362613865323363363434 -32633638306438653638343239383137396530356564356338623330303661663630656639666461 -62313232343461633636336538326537323266666466646261633336393464306438653136613637 -34336133623361336563306462373963613336383265646637313139653765656433346238386231 -31646362353736646431303937633033386435316336323062346235323232383466313566636162 -61366430313335313161333163393164353530303938386435623830353962373831393235616531 -31656565633534666164303532633235306133616536646161393365616231383866326635376630 -38666363386232633865366533373630356139393030626230653834613230346664383734616336 -39653736633237303161306632333138646633356463373063663064396561613162663138366339 -33326235313165343866363234353336643934656363383464353036353138626638373362393263 -36326438303366623137383530393434353933326163356634333837653830363037316565626466 -36643339376262386430383530343934646361303831633863653765303530373765336531326535 -36646330366635366339303731376662623366636163353738646535363363326437623439336466 -39373861323738363734613032383136313335306462386436633962666139366165343263616338 -64306536393966613235376264383463313763383161343634336362393865373865383366313839 -65623761626166366437323234373130393237643963376235316535646166326663646335353036 -62366562386364343734313261363636636639633639663830666130613833383766316461613236 -37653030326661623838643861353339353562366537346535363065356235393963376331623064 -36316464626439353464393638373963326333373037333761663239343431626563313735363031 -33613663613038326465623462623565343963333064623464313039376332323935353736616262 -66646161623564316439666431393462633463633432643763636535326538356135663535383734 -30323063323361376165626436633632636234653062623337346562386338663733396532323331 -61316539393566306334616435343665623931323866313636663033663161383964646430663263 -38663833303063356637343130323362313734646564633261653934666665376661653033373934 -64393934616465383964353464336136636436323563366562623839623862366332343339613334 -63373063656663316138653939323165383735623263646438376533316638623734636261663035 -33636465396431356334383063633866623063316163343262623831616137643165366564646532 -65303033313137636562353238663564303034393166313864353330656335663233643763626239 -35346334386130653462343531336431623639376165653263373539316163383038336636613136 -30626137666133623063376333646134643536653138333464623930323931613461366465633437 -32386531323739343363373737326263323836333438356133613065306633326131343838333363 -62356331623163393230373838383866323063633739313339353839336232363430323165666531 -34316231376232396464356436326165616266323430313632393362313966376563613534633339 -61346532386537356262633936366533376239616531373133353633336235316534363436393238 -34373232383665373539346664316463613962383961386530323539313538306165383038333736 -31343463373938636630336364653931343931363461663261373333363336353438613266333232 -66316333613134363630366632623861363135373335613837653937666466623163613231376431 -61623964353534316464373737326134666538393662323663306563633430616363353833373131 -61323563653235646139623139303162616235323664613463336364326638363762653665666433 -30656634393965306436616261303330313037373030353266383833326539626263326462363833 -36656538663733313533653864646232333934333031363433613839323632333166313162646461 -32653935393738646163343263633563333132616436613930613038313462633735636131653265 -64663439323665313130653931623564373737616632386338336465363564373233616466393934 -62373763326533343830366438386430306166323834646362313838313662386637613961643138 -38383362633730353730333335316439663631396430623135313565313431646465336631613666 -64316638646531356563666631626663383939396461313631366462326161643730346436633734 -63626633303336626137333565306664616363386162316264636331386134633461636162333835 -66326139393733373262343537323136633233616331373730653966353736613538633430643264 -33623731366330323161643230393635646366623139326534353561616632636338333232386431 -35353539333831613064626165386536636664373933633833363736613335323434383663336561 -34616130656232326631613835646131353936326631396334663335386236653066326564656238 -33623065303039666461383864323031313737316565366133326136333138393731653731663036 -32663135323464653030626430303439353030393865316266383164616233613039613032353130 -37326430373439363631323061333431386430613361656439303734393730326264643731326638 -37343836393439316330653432303633303439623337613336626662323338633535346563343938 -31333963303866313763666436653265306164633731376432663634623131613166623535656362 -64643232383863633261613061373131313933626666643631666238663931336566343561333439 -66653939353665363065656631323130326664343464303338333161623639383962356538623237 -33656337323733353738353034636138656138373762343336316336346264393434306338336136 -66643966336130346263643232373334626433326334633363616337343466313438343133366637 -35336561353531306164316639643262316235383631626636633133343837663032343032613362 -33356330343833333438663465363364653633306134646537656361383864356461393963313666 -33316236326665346233653331663132313531663263623762393039663365303333663231373262 -63643634363762393863303739626162636131366564623333373534316461383861646332373532 -61343736396465646538363765653864626636376361333935366536343133666432323530376333 -36333664326538336438323138393561616536343932363733316164316133656631333233626562 -33376234663863623365373365303936376164373530653839393631303732356662663536633135 -36326439646465613363633233633836643162333164663266393161626231393138616538643738 -35303532636532656266623434333162323230646636366334663238613733326237636232623763 -37643066613361313436346531373835343131613061326366643638396633626261303630623338 -32313632653336316531333065343830656365306430623565393935333065663537316130633936 -66376231626239383165626536626564306331623935336331666662376264643765396464323135 -38353438613435333864326633326530623036396665313762613865383365366137303166306436 -35646238306262613432333434346639393939333264656530303637393566633934633062666661 -62646537306132663164643663313138646639363131346133616366313137333965396137316433 -31613439613433383663663666313237613336326134343437373637363038643332376532383339 -34663735386235313532633431313630366537326135366132373063333035613939363832336433 -65663230626536666565303031663062356639376538396531346263346139386436633434623363 -65323462393138313932623239373132326463323830616237323665656437336562333666396366 -30313632363138666534383631313366653532336238303036623235303866643632663335653066 -32616363326134343038336431393436326565343732646438333336386366383066346231353833 -61363565303737346561643938666133363565383632346465656335363864386236393432633832 -34663863393063656562623134316235366536663638653563323465666566613464373666376530 -37366364633537666231653065366664646632393638663535643931633264616431626366626563 -66656561376664303838653437306433666131323761323639663665376262386564336363376638 -32343661326138653734316161356130313636616434623434613765386538366131353036643532 -30353237323831373562376332346466366437643165633738623066636563393036623765376639 -38303135306563356533663238386233646636306266353034343433383830383330653032663130 -32313932303338646637363762653232613138373665396436336264353534623633616138383235 -30373433626332653032343937653964373161343462393139336235396439303739346330656166 -31643936333139656232353932326531633566363366306466666137623832313435333161366331 -63333432383034396439323466663235656536663831643035626332373234643837666630626332 -64363531306531393737666230363631336666366536363464353266303633663563316234653634 -62313135346639376366306463383837636531353564306530623134373236613635303132383263 -32326663376138393633383132643964656365633966656231376439316165353630623764326137 -61303234646566343863653130343738373331373433353732663837326334633530666636326434 -31336135613431326131353864613331643137396661333566303632336661626134666565623133 -63383865646464613537383533636462333133386639363837653436366237666164613639396666 -30643034306330393062313132663661636163383336373134663130666132373534383734643731 -30303163353563306465383134626137376630373731323939653531356436323337616662653565 -61313131663262636437666531623466623438326136653332666238336566623963343334623266 -39663134636666326261633634383264393662383733353663343734306534363934356165663638 -62623437633031663364306231663162616630393531346130333764656431616161626466343462 -64333865396463666161363134393932613636333330316136363737336130343663653063623036 -36393038336462373933313934353939336132313135623534393361656639333864613637626137 -66656331376235636661363534393163336439656264396663373665383737633263373934643231 -61316436343539646662316639343662336438383335383838373261643838396439316632653838 -64643135343938366236626463613036386230316263376165336232303434656230366561646164 -62656466396439666363613634366633623935376630313034633230643162333334313436643930 -34333837353937636339363364353333326238343536623131333561376230646237366437333836 -37613363663663656266326439316334383837613633336339396335396539636562636334316338 -61313536316364386262666663396261356538306536333761633763303762363232313332373438 -65316263353165653336343562343164306566353630326333653664356165376361326366333964 -64623261393636626439343738653731663130643839306639663239623834366364613832326233 -31396432343136306365393132613531303632656363303833313139363939356132393230633966 -39383432613135646435396262646461623735313135356230383533613136656639643539366233 -34306231313032303537626532316263663337303362663635323731333561343933663265373639 -39313461353561316539643436343764636665316233303438643736303464363839313135633333 -38653936663234663830313632623566336333633561656631336132323231353432323031663863 -66613363343431656437633631336638383932653336303762613730623534633936306333646135 -61613261613932653361623263656237643534326132613339653861343666393466613439303734 -31303430343132636332343134303936366262333566316638636233656330333734636636376164 -36383536313534306535336438633435353463353630326461336366666535313638363862616136 -36616236353033343566626332646133656235623162633736303762306430336238663835653263 -61326466663161646531383137333439656531383566303164366637656661306638623439323164 -61663163353263373864323734373434303530643764633762303139333336323832643063653734 -32373266373239366633636637613433336532663135626238333936353431343532316536653061 -37393131633066666637623538633530653730323362373432656439333332366638336361666239 -63646631633762333938636338323537343734396133313332393436326630383639333034643961 -65643139303531376163613833666532333734633438623935353635613635336262373432636462 -34323738386631616266313462346265356164316238323239646462643762333166666132633965 -37333535376235613538363938353135616366393964346164633861396331633139613463393035 -31313262356436646261636139383431643637383235623334353861343064666437356465373339 -31323364646635306163646131646339383931613461613330636561313235663934376632373132 -31633235346339373763303138356464646231373266366431633038646533616161613462333231 -65623835353963376532313535306331636639643635323434323362326462376239383630663962 -32393634366233616133323531633030336635623134393730626630636465653065633462666661 -63363637326139333030633333626531353866633839376661646437353939316166366137363865 -35383536666462343135623266363939623335613632613830316432343363313538623364666634 -37646531346433336365653935326437343461323861336133306233613931636231316232643034 -35396539373663633237623862623964383463613936623061376333323439653963633861663631 -64623866396263663038373561656239643664383233336433623036393930636264303662643434 -62366632323864633733626135343339623030636334356331393732363139326662326563663366 -36313262323933313631633562343230363032656636666465373062656664333964323537633362 -30343266393230393665626463316639336665383763343332333339383464333533653135353365 -34306135613839326361623663633033623238306234666564626565313137326431383763646433 -35316339366234353936326466363435323331353165653531373733643232356236383838303930 -61373538363238613635313031653434396265316434353335386332666135323366393062376162 -30353730613433383364636164306336396430633133333839383261366162363930303131303762 -32373461396264643232623337643266616562393865393864363161616337636436383131643932 -61316232313835363634353930636664323539643133333632626631666430363534383866656631 -30656634333836623133623731373861366333643637336566353064393332626461376334333733 -30383164306561383738333238353766666565656137643661623466313535623936353831303863 -64653762656364356664383365343264306336663563373763316532303537336138613238323438 -64376130656466393564613766633036623336393931313132393430313663373334353134363030 -39646665306137613034653830666437333832393464343265336162393231386437303539363861 -62333032393134666331363030336463363639366235656266363830653337333965303934626530 -31616532323334383665663936376130396334656137623537646663346166343262353764653439 -30396332346235653462633034653535396361383934646632386534643530313134343034323636 -32383538636537316532626230363361313330653534353962363932326331323966303833386330 -34623632356136616166636434633437356261313233333165303237346464396436343931376263 -39633963313062623636663533316538356162613734373830363838346133383564353336613437 -31643233343437393765376431613338383331363632613632396265656638646434663631303363 -35386332343033623534666530363831343262343736333366396238643030333337313838396534 -64633937636332313432326266643735383262643334613034643465366666336638393461616361 -31383038656235653239373164666265663865666537663335396137353939343233616435646362 -36393266633863393965363163376332383837626532343034363034346665343663326163653266 -61666236653837316639333832636536353534626365333939343734633863613032666437383864 -64326234303438363434626566306435376237336137316465626432383234383434343666333332 -33363333633132393265313662313731353162656337363730366439653532643438333639393664 -32623561636531376234613565323661613635623337303963653862393435663562333137383531 -37353532666639326334366133376162646262666439616135316432333934656631326566393965 -61643135653965343032316339353433323636353734313834666163633431366331393035393564 -32313966346634646263623130653934323736303364653930633439343339343432346538303831 -62333462343533386166623831383437373732373037356236376530353639346662663930336235 -65303564313939373532303137376565356364353332663961323366323264353738306331353963 -38343333653764323835303432643230663733643132333866303039656136326630303962643963 -39343737353166653862333030356533316165343766646231306532336530343964633136326563 -38646330386438373931323961653832613638303261653333396337623331323837623431656137 -33373631336462623531326438323739653662613139393866383263343134633335383738656363 -30333665663063373661623761356438633262356334373262613934333064326239376633633039 -66613534326662343435383438306133613765326361376537663331323938623436636164366135 -35323730363036643765376537336432333066303137333534353537633234626666336334333530 -39396133626434383132373435343165383563383564323864333639623764633064353131633165 -33333862613538363233633735653730326633346563383732353563643862356561616261393731 -66373662353937646462363262363865343531366463393761316665383230313331626630326236 -32353439323039316335343237623730393966356132656534633933333737653935613932643231 -63366163373062656630316661623131333462366564333462336333663833666363396639373936 -64613530383861643339353965666530663437356431353731623464336461383030306563393262 -39346566306565623331336234646439316461646366636566386236323464303138306663373265 -39346135663264366566623731656532323236316130383865346136353238353534303736363635 -34623532363033656437656235643066316364333164626662333536396631653531323437643564 -66386635653436616461633162316165343638326264303066633437313734383666623636666538 -66636634306532393339346633356431303537636364323832633737353139313138346632356238 -39393634666138383339323335306462623330333931326266366135616666613533633531653539 -39646535383666646662653936386231616230306536396432333536313834646538643936303366 -63666431663965343336343362356465306461313532616462383233316261336439663936313639 -35663261656534613634316235663139323937616261333530393235653836336138353630636335 -65616236366233626336356566326633646664356264313736306665316434613535393535353038 -38356331343436626230376334303138303962316231636631656233396231336437346435376532 -35316232306137333332663236393631636436633736353962663332626233363536633733353436 -62613565616332353461633930333636616164656635663064623463656238383430386135353030 -63626534393930663462323634343936346261653635636430616564643630313836316135646638 -36613363613238626364393434383966376430373838323461653131323563346364656330396562 -66373231643732316138383236636535366339623865393935383364373765636335656139396261 -35326339343266663863636361386431623238633139396264613166343564353236626237616161 -36626233356361666530323632393437623238663835616539373939636434353966643734653835 -30356437353566323266353233646532383335363366636333336335363634303038633965376165 -38306164663837366633306633393163356564643533663134653439663666316366383666623536 -39653666303363346131383064633835323261343361396462343566613237313732323366373864 -61313762353737616633633538616162353761353131636336623265313861616634376434363961 -36366662313737653465353363313537376361613534383563303764356136393563306230613466 -33356437613965633661336164633239346666636137666332303430633766643036346439326134 -30376636306436376564623338636231366536663530353537356461663864323234663530626633 -63656535633336346631386163643138326638663061373331623762376335646661316362363636 -36333732336138663034386139326566616236373061636661373038306135613031633139666635 -36626333646631636437323334653164316335396532396536356261346438383265643535306362 -62303034303161386465393062623963303131363165343066633765656431303035646664306661 -66333531383665646166393130386463323537386237383632333431333265616664323364306564 -64656463313133386330393266633932643863656436396265653161323665373861393031393338 -33373463303032326231313035646564663961363031613362356635623030376465383337373033 -30336263326364613633656532613439333631343665353866616263323137613163363333666664 -61383831616630373836343233373935633262383136663931643539653337643232363132376364 -65353662343539373437633133376638653633393864343866633865306231353264306262313261 -33366332316531616234333766323232343336613564313135656531306535643430636666346234 -38343532653666636235373366356635343339346237386436633234643738633033383664366264 -31396464366363323937333834626230383038653434346361316166343930366536373761353433 -62313638376132373661316436333430653735393737383235386164636535386130313533633830 -63616335643233373165393733613266646138353437356666316139633933346565633561353734 -30656261636265306633396633383638646233623164383236343335626432613866653834616434 -37663861373062653061316631373064336663353061306261303733313632373163326261663262 -32396263613639383534386236623836303635613631393763313130656134656236623238353661 -38643538343135386131393133336237373733613238663763653431636436376232646637386339 -37626131396237396239323031613265306262326466656634363266393064326631383633656338 -31313130343064326135616433343533653563666663393230363735633239363537376463663466 -61353865333361373538616236393235613366333635633664333631653361333962386462373761 -30313066356564363432363739346430346633386436613739363939336665636239323930636130 -61633639363635353333356266383661313638353162373535613165333063343332383231633331 -63313339306235303361393362333635313331623365666166383937313663376261653838376563 -37386237393762356339663434626639363666663931613832653539616630343137383230346163 -39326138383165326131616639623033633164626466663439386333393231373537616439326161 -33366634313739346266663564343330653062393139616464393634313234336165356338303439 -34366537613163653339373062646431643537316635343438343031613937343734356130636230 -35353334323130303439613233333439303234313530343861316261613036326266396134393938 -30393032393864656661346464666262343431386364626662353736343234363861663437326532 -65663835306366313362656135386430666633383165623965663838646433613835363836643365 -62373730343831633033613631396535333232333331636163366162613131356132643835663766 -63643531663237333935393330353733323730643732386362333734316632636265653731663039 -37623365336562623766643833653533343238396139336231326262326330316338343738663031 -37383334333634366464653836353238373061386334333437626537616135363736313364306366 -34396636383934306664363835633965353463333465333966306537353735323564643565623261 -31343932316537346561316662306139343266636463393130653434666666393338366531303734 -66323965346632306535623931326133663161663464643337373761343661633763393666636162 -66346566383937626161633339663732666436343437386233396332633261303533666436396430 -64303566396530616365613935623763323962616564373130383637623334636134623637326465 -64303037333035303930616133396336616432663338396634383037323238623961353136323965 -31326266383838653236616435313936396537323761636436626539323336663037316161393433 -64626233323935396232636337316634623037656231653661303462333961346230666230313834 -66626661643231386135363565336437633738613263636364663336313137376635396162366235 -35316638353430393837386265356465363834666366636432656237646634666533636631663530 -36656434353038626332336263353832376563363035373437316262383733326661353762393934 -31333532656666343136343635343435386337363962363037336331623239373035633631346337 -31316231623761366235303538336339626134653238343132343838346363353266346239353663 -64613566313263626537333830646439396536366135346362333162366539363537616332386262 -32663862313739316330636334346664353666363933623563643365383630373866656537633033 -39373331663663623831383830656237653034333932376263356566613162326566346537373632 -36356161643766343934643636633633363135653537396333613532656464663535653863323066 -63393662666463626635663062386430336233613637363263306564353563616439666436656162 -62363330376430336663393565613736306165336630383336363263643032653062346661343766 -65646537343063663864333933363938613438326163353235306239346236656561346264343039 -32616331373062323066306232383030373130303565666463326434383331343361393331343039 -65653536306538353830333434373433333030353465313866393966666434663238323232323364 -30343535383631313431636462356630323439323965353033383536363866323461373538666332 -63623935343665323033326432356432323730353864646431633035363831313735623063316465 -34623064303864393365373635353263343033653064313163633936366564616661346532343138 -66383130396232353166613531343338636664363164613165613737353762333466616530643937 -65666530363165346331356262363065653861386261623566346135383030656163303332323436 -63306137623430613661333733643161386138623934313863643561313061363061663435353335 -32353362663064613364653236613862383830356431333839636163623432346638303230666438 -38353766646231383436636463346436393561613339316430323463363731303762353330346532 -38646130663862323466326136313332306561613933646637366235646338343161666161383431 -37626230303633303664366161653437643331386435363631313935643764643835383662353536 -65626132313961343564373538396237363934343335633231656362316238633030623365663063 -30623232663930643639303437336563363131333531333238333663333136353964363439363836 -37376233646330323364363764393732326462316235393633626134356138653430346537393764 -32393739363637376534313836346239626639636332326666386334636234353535623035363266 -64633661383438363336656539373033313635626239313232373233613764323665663762343461 -32343938653135313863316233376632396666366636643036623566393739393537333235396239 -34303034396138656531343662613838316363646461643136643432653132306466623837303532 -65316139316432633039373239326539383165313430656364646336333863303464643961346363 -36623830363235316436306563313239636463613537623962393061616632356632356136646531 -66653561323232343231613863356466643030303066396665623638383662666465373833343733 -31356563623761636630626630356362646164373662383562613264663966326631353237366130 -34393439356263383732643665323431653738633236313539366535396664616261333232306535 -63306662346465303835616666333434393361306462653861323430366566353435333231353935 -34383264663930303662663462626535346130613033396435653934633933366464343166306165 -64623461323365623634346463386234386561306339613461613438663034333334643365343531 -32303637616336616463383566386139323639613731303263646162613262343531306665326261 -66393038653234376132646136613263383531656632373631326361313332613739386465343935 -37626331633063336232326333343037646432323265326131653665333863653337663961383737 -36663361663232373338623931393538393461646538646565323730393562353836623263343832 -38303333386363313634643930663832656262616537666531393536656664303539306563653265 -64666538333135656132643637346666353930356635393764333538396662316366353166376433 -33626232383666343030363263626266656538616562663735353534663164376434346631383762 -31376561376430333036393131356564663737633064616361353038633839656164633536613631 -66646665613132623062383465623738363330633039373135343333363039643332363331333365 -36306636373238396430336530633763613332336432363933303733346133653666373132393063 -30633437356363666235326263386566643062343534353238633062393565633838623839316634 -62323239376532383163376237366431313734366665646161626232616566323631383536656632 -36653535643537616230626633306630383934373135363538656339626432666563663638316363 -30316262336461303438643964366434366332336535343437666432663566323761306563623261 -30633965623530346165633936616366623536666230363130386633633061343730373365303833 -66646334646634366433626331626137386531323661386132316235613966663730336432333764 -66306532303566333834613537666639616663633466633633613832363164623536373738613265 -38323038343862323166663533613830666362353630323035336235393565663230623562356166 -64306331363234336433323364316232653934366662323465393961393862373738343063316434 -36343035396536363136323734623132373763366636633939616339323965306564303031663331 -63306463623732373462313035623532646334623532363666633461613066323933393433376463 -62626563666565663438393332646435333939653439306234363930303637373965643366656131 -31383834666565623861356531663164646165313638353237643831343337313362306232393737 -36653062323561346661326133326635643363336465616636316666613335623235346161376136 -36666264633232653638626138643934616366663938336562353333393265373137383833356234 -32303638646436393865656336653664313136653831336636386664333965383461663166356363 -30383139323134303035626438626632613562663164393934663636636338336134626530356134 -33643930643532376532303466396264386166646166316166366661383263666563333764643365 -38633438306538316338623631616337303933373432646664313736613035626365356433323737 -31323364616464633830643133383661366161613137356431663330633032386136326334343264 -61633333356230326236353330316264383738303033323930666562393932343235313932666133 -32623636643563623166383231396433303735303534356334623330323933666636366365626266 -38653038306135326431343832336331623564633364663033653766623832383630643964643032 -35633431663062353339333266633835366430646563356434373537393937313932346432623633 -64373632343264353066633436626531636232653038613263653038323830616164303361393732 -34643233633731373637336137383763303736353237316134393835663032393861353934633038 -30626531356333346336373535313433623035333466343066346265326336643162323133656339 -37323561326137653939303839343837393763653465363462356161363963353865386539623333 -35383637356666633731396638643966303063313430393038393234346433646566326632363637 -65306466613230353261616366323634313837373030623563613562333833653263346230376439 -35643836346335373261326365336531353733636236373466353332383737613639633034323161 -66393432653336636362313962616237316232663038343665343065313030313937343834356436 -34326266343364616366343039303332353161373263313730373839643361326333616464306133 -64643863633336363762306131303431636366613038623562653035626537353466643231356561 -37393035656533666638336637373932346662346436313561313964316139613763616335316435 -33656230356365373365633830653835376639373365623663346635396361333338376139666232 -33626662616662626363636564306530613034663039653636663838326162616263343562393661 -64353134363737623139633734306430353265323835373833373261363031383163343938373862 -30363735633531376230376161643037663762316466396134626462346133626264353064333039 -66333531613735313333376336313565376632346565373134386433663935626363336635356337 -61633264363635303833613462346263636433383634326330393236663835626432326336396133 -36396462323365633338663935343733346365356233653436613962356366383365326262663236 -34316233626130336635333933646463663461653364313338343534633630663733336261363431 -37343664333633383536633464326466653432353733343933616264316364666661396631336135 -64306637623234643735643430323262626539383439373363356139643362663939336665376139 -35613864303837363635353564393532336162393566313339633866316266363261623266633032 -61343365393762386465356164646531313865633633313866313162393431393132613131643462 -38646131363036313964333930663234396139613362326331333538376364323461353839366562 -62313066663830313862326162326166356537653135313036326239353032636634656433316530 -63336532663935616633373261653666333662643561313235353466303632623364336165623334 -63346334303762326363643838336362616466333631376135643466306638313038353765353034 -61613033623132653930623634376537643230323330343534646365356339333938396565336533 -33303730666433646465623231306233353130626237353236373836333438666565626566326531 -30373637353237393934343064616663663762343135313865386331326266386639353430306130 -39353534663362323665616166373733623639333164656633363537613437616635363639316232 -37373365336531323639663935313836313338653030396133356365336437373963313231636332 -65663433646665383836643362383739653663636338346137636263386366386234306130303264 -30393266376138646465613436613736373662643365663330313230346139613465383136333463 -38626661643165356364626164663164366534316462376633653231626233393934303333313963 -39643362633761353731643239663334646266613536383661626462633062653231616236326332 -32393634643030656535633139336132343639313939313436393865336361633430376166313230 -63383435663766646537363136373138316166333031663736616461316134343461356438366361 -37326663343434323563613231633530316364643164646464386361656632633539353135303432 -34386162376235326631653764613866323432366166663966356534346463306231656665346333 -35356633356262303236386633316539363536653438633334623161343136623161313463626633 -61373637303630633233383430346534613336363739653332376461383531653832333264356163 -32346562636662323066643932326436326333323537323932343033653862356163353730353438 -31313531306462636131626136613135646231343633323065623363643661303336313463373130 -30636630623734636536366631653031326162383034623233623463326434366635383836613361 -61356463336335646662353735333662633231396331336336636235663839353163616234363733 -32373438393730656461383537353038653739326335313732636639656263643033346635316465 -63306437613863643932396361346335303331366535393863613663313133393730333039306233 -63376563366636313435623664323632383139653932643461383536313734343430613736393734 -38313061623163313931616564623366353266333237643639366166313564336437376664303938 -30306233633437376233353237393331313734633063666165323637363938353239653539613439 -36346232626466396431386664396535663162336166313438363265353232363365633034383331 -36393164386235613134663566666539323539313735383636303631336337386366643561346331 -65353962366336653139356433366465616637386333636439333365396563363663656231346333 -63366636336131656237396234353837303035323637343265303566333761353431613135356635 -31313664316635636564346531323638633266356634323164393563383935343738346632333237 -35656464356338356538366664636265306165653334316363336435666262636634326636383934 -36313136373038326363366263616438306561653565656435643063613537643732643332363037 -63633962333637326434363936346633313634363961613063303664323761313533646638666139 -64616436366638353166656133323131633461363663616336353730336639653463383033323061 -30646237653463313261643237343933663032346133336339393965626166623066373735623836 -30653331656635373838633062333638333037316439323663323838616530663530623434653964 -37616362373331633030396261333038373162336536373731396363646334333665396630376263 -37656634373138636633386163393234613434376265393065306333353661326266636633323634 -62633031363965346337363031663263313538393064363761366336356462383737313633353236 -35613261653563663663663832373664383262306232373430323934376330376166363738343962 -61323863336664383266313264613563636464363566356637396261353039626166623331626234 -39353762353536646338613066656533303332666664353863343838356464616437623934343263 -31313838326531356432353563326334643665663735366233666534343733323865636562326530 -63333166303936643736623066653832346339343133346632343164373630616538633936633631 -36376663343934666133343535646662623038666633616130323163346533393765653337353832 -36616563393930343065666361376635326464333435303736386661396263346331636131386336 -64326665643536363563343964623536306238376535656330323061663431653532633434386634 -33346133656630636565613065323634616333396363346534303163393337613830366662303731 -61633530393463633635346136656366333030623038616439363631383466303962333238373661 -35386332613264303739343931336366653431393134303833323464383439656661303163636464 -61363462363064393364633061336262353261336662363462636462336462636535366662333534 -63363666626137636633356631653862626639346634373238353636666236623964373231383264 -31666563353034386365636264346464326237663235353136346339393436383035663034313630 -37333963373135643430653761643662353334646439313262393635656662353439616334356338 -65313166643934623065353164633965303166653830306165333837346262393563616335343764 -39313033373339626534613838343239323661613530323666356665353431356439646231613638 -63323862353230373562393039656361376434366237653365373937336332313762333561386432 -61343435356633396465353133333066333563313330396234626165393364653031353939633731 -37623439336262373838393533626162333937623133396365373034613962623161393231303562 -65626133623833383465396632366137396135363434306337353038333633653264616437633635 -66396435663931653534643239613636333862613263613434396261323238333461623661613437 -64633331393461333831633162623333623663376165343530326262613362653730663463313039 -33316638623664663837383837306163663461373636643032303933366338303633613830356665 -34363165663232386237643464646163663136396232626138333165653162303339616362396230 -37383766313039643438346136623864326334653938393039633961373339376665633536336437 -39383033393635613034333634373834386266626534363833313534393134303138363162316533 -33653333373962643965336465326635653732306338656631356564363961366462636230373030 -63393837356631366638663964326530666536643932343861616665633331373230336530356138 -39303738386166336334633433353339613366643436313064653333626130313361656237623163 -35663263633136373765343330343338306636663534383730353235636434656138643466383261 -62373661616137613164363665353535633637613263646361313337336533363665626462383633 -61383731303132393138663639396433343530336266633939653366633438626139666161653638 -62623866393533346136343339363334666333613666613031613135626235633564353463366664 -30393130356664343434633132313537383063663130646464346263636133303034316266303739 -30656661303231303434333562656237633233616539333239303266373363613034626263613531 -35393937333761633232386333353134613362396138353030613934353935356637623630356533 -30626431366234383834383866353436326333386564353537663136623761623736313861366336 -31336331373537313739353933303261336238613630636462353031653133333139306363326566 -32373264306338353638393965343933656162373438373366333338623434313032373538623835 -63316434306262643532616232646430316635306535316635326564316664353063343331653963 -61306530396630323031386534653062636533613931613632306637343364623464386137623330 -39396166306333346665323139356135643662363564633631383362303636616336613732383763 -35353861343565383739336535623962666239663963626162373861343738663364386439353133 -62666232333533376563383536363239366135306134616439643738306331643539383034663363 -37366366643838666338396537373232623232326263616165616639353939323463663638643132 -61353038646233646231393961663863373466306461373832363435613635383836363633393039 -64346134633837333332366135363736323234336235626630653965353039663964383535373931 -63303262346661373535376161393136656436303235386333663033656164363636346632616433 -31353932643266343361626431383835623761653633656131373134633163343137363536336661 -34316633386263306432333338313462393031383832333533656436336230666363316133396162 -65663861616538306333373032626539663535373161383462366164373764343437323562626136 -38653336663263306533376466323132623261386166666435353438663763316665653039623532 -38323730626666353636663830373765383138303330386663663737623531346630363936393966 -37663839623464393136303934306438376362313233643838373939323938666635626630633035 -31333466393833393361393965353636616661353166323937313032663139386431333163663035 -62373265306132643465363765376663623430656264613839336234343766613833323235353333 -66656639366130656534316639306638366465336661643263666337323030666263623036306362 -64316634353139666434396261653161646339663263663131386339346631653932653834626562 -62386665616131386138633839353262353230316264383130656330313333326538636261393863 -37633665613631343130313163376337363963653134626131643531353565666537613636373663 -63333633313561363438653035303563303532613736373634613362313663386563656339656634 -64616666346532376537336130353233623832336237376663663837643134636361616533666530 -63373065663833363734356130613230613739633134643766373935396531373965383862656330 -32306639356365383332643462336331383731643864636264633234616132386538396533613432 -32646638656233333661626335306361646435306234653436323361643866633235313962313637 -61333637663463643066333562373535363439636666643538626133623432643932666662653233 -33306137613735626135373430393033373132356666633337303134323231323235326434323639 -63326362306136333065393734396339336665313035663637303533393834373664623864386234 -31313062316334333130336138326132636366356266653531333435386231653063646531353933 -37326533663431376461383632643266663531626235393131663464373439396666343236313262 -35316165313962383632623262366164386130323065646436343236623230636664306539613031 -37363564343438376637386366376139613332623765663166373731316262303630326234383063 -35303330333364303366363135376262323365633561336264626333323564396132346362626164 -30623637333263366164373465353562356561376238353332353461623939633035643562356266 -64666131376335663832373136646266633363386139363864363939386534636461313237666661 -31383063366362306466633039363730376130373661366331643836356533303062323030396330 -35623431663561653264383531626136653363336339366332363431323635393561363763613134 -37643733633138396432623031666333616136643735646235346632306461313136653837326135 -36643935303264303532396332356561643063373263303536626433623264393432343933363237 -65616237656131356537366337316437363831303064326436393761623734303238336334653131 -38363437373264373636653531346665666363616233643563336133316439643663336263613964 -66613835336638386631386565343233313435356434393637326339623933306134343332316132 -64326434393134643866323935663331336539396636303666623364363133613861303366313736 -61623465646336643161313839326333316632653365626231616264616633623336633463663232 -65313465313965316139316531623863373235633362633731636633393534663662623663623533 -65653762623938343833653639373730363932366330373237653830316438356666333636663938 -66353139333162376439306530653839306436393832333030336632643830376663653132633633 -36373965646666613436383931643662383263633066356666666362306430373636336438626231 -37653338336462616333353937626363663765346664623862616162353865633463393263626537 -32333336383633383237613731346465613635633633383065643038333536616331333966373232 -66663231343266393865663165383937633439373064383636323137363566646133616332656566 -35343335376465653939653933393161396265396136363936656433316566613336613537623365 -37393364326337633362303662656333613934663362323331343135666136376365663765346439 -35303465303163333732343737383135303635613865346331376537336566623561643837333433 -36633930376330623737633836376239663333616134356530623264303337666432326332646433 -31633034303166616134353736613838383231666363623563316430326461393462333564626335 -62646337643066313563343466303231643334666437383135393432663538623464313735663431 -63336166323839656531633862326534353136303264616266373431363036643335616562363438 -63643464356662333065666663643464623139353833353536323466663462313630366235303065 -34623433613736646465616466633232656362356137366634393735623031343531633231306334 -33393137343637343734613133366239306135383931353637313561376161666562396237386436 -61386637376563346633303032626361353462323963366233613566643434666532383965626661 -66663165336164313431653363653939653262326537623630643237636163613066323434653633 -38613939316463663833643062303933383165393939333233643139666462363037613032306135 -32643266333938653962366231363364616339656137646432666466653363636265643364656363 -32313966356238356266356339636465376133653861306233343635303135303735623037383339 -37626335333030643932306164316535353933346462666337353366633966346363366337623133 -65343766653261353365643039333164663231323031393233623062366432373430396563663264 -37313962363831316137663064313631646433353033336537636132623663393637336438366463 -36393565633936346134643465306639633737363431656161376533633434636663656535613037 -61643330383366663266626436326466646234333831386632633566663831336437646563333635 -65616339626561353065626462633530633461643764373866376264636337636431366638623839 -31366338653632333037353233623962303866303334353033343739636637616239626237343764 -39356464396239383235396132316665366238373833303266343535636164623862656139613064 -33393264363634636231653235613133656138663763326263386334303537333733653132346533 -61383739663963643365393638616233323138616131376461323233643262656633636435303566 -32656438303466306361653366656464303335663661656437373031356365336334373961386264 -32396230326431376137356534336566643137356361316232333939343362323766393232373639 -35363465356235323331333265303535623630666236376230633364643237653762386630323836 -38363136373331623964623964373163363930313138393030353636643930633335323761383764 -37316135393466323139643738366537396133636465393565613765633938306164633263653032 -35353931643438633436306464316230333437373532356261613565643164656330643862386635 -36616237653834653134646439636266643131613761373833346338623439383861636330383133 -34616630313465303535613032626536303762623331653435333633303262326464306330393832 -30623265346438656137383937306366646530613564306230353939626366653536653738323139 -63363332626532346462313635353366333235323837353961323862343334353232313464626236 -30633336316465666637626239373730383965653737663639336261306264343530643364663561 -64666265613762313032633837333433643537666562653534643364346637356363653732306561 -39623538623763653136353464663164356232623333363033646666396232666261323233653661 -65393536653237383863653134356134653533316631623231616539653861363538376362663066 -61646261656336363931303935353764313562653736633431633263656261623039613737373432 -31373165386161373038643831333937333366636230326133616430346131386663653964313866 -37626234396631646639626436326466666561303734346134653764353234376136656662366539 -39376161616162653337353235643236323832653835356235363634346365346462346162306333 -61326534393264666163383466616166626463626666616438653765346638383763636338376463 -35616466306230383233366266653064343962393731393434363435333466616462376633336338 -61643061613963666636336366663562346366616135326462383864326562346534353032343662 -37363861653866363630373565346266623037663233326432316562356661333538666332313465 -33333930343965313030363262653862626461393162653135666666336262663634653333313434 -37373030356665616238363438613739366337383961666662363364343535393033666336636465 -39333431353939366439393761343039626663386164653330663135313839356535393362376135 -66353531353461333539633135363832393235333535333066373461346363343863323239626335 -65313638623638313437303865653736626133653239643232306437663237313432346633616565 -37303539333830663235393862396665313164623263353932313036333362643361383732346631 -33336330656565616331 +66363336646133346166336334663566626537623338373531613863303633303630663235613732 +3661643963613035623231663936366266366566663061640a376438363638303139353566393265 +61323437326463363039336364353331323130363332646534343936353765656330363363343032 +3435653264623931300a383166343433653964343732623236303464323731323530653466613238 +33613338656561643564333062616261666132313832393664633631356539623934303638356436 +38623764303164663831646531303965616531363630396137376263656231613139326433373266 +33613239663965633837633638643838323638663331356566636134653439326230643337336662 +38663264376563636262653136653337366433323761376136653234333230383839383834616663 +38623531383639613866663735396161653937336438633937353162313833383866613230363864 +66336362383961613564346636383638396335653833306530333336613732643763323935303736 +32396563393139636663393233633531646431613834656438633161363364633866353665643539 +62626134613362653731633836393938363436373838343331303533363366653164376362353366 +38656566396232356331653265333236326137303032323033623738396362306663633131653864 +66633730306639633239623534656532633161313138346564623761376566663765396134343939 +35666635643630643666343033613737346630373033646238333366333865643939313832646238 +37663037613432646465373962356338616331323130323564386537383134313930326364363863 +33626662313239626333333733333832613331356134333930373432316662346130363962633833 +34303836363862653439643265363732643734323962313435333764623932323063616539623239 +39663534393036396434373036306663316531623134383735336634383537343432343033666663 +64316134633531663536366665626538626361623037303430393035323136636636306631343335 +39646565326533643332616165633734656566356462646634303635663836376566633532663561 +38633831313863306533383733653962346337396236363633306232623862656361393336633934 +66313034313830663863663061346265373234383431303564323562383230323364643237353037 +62656365633934303937343661396134613738623364303365303065333936393461616162396530 +65366539343834373438633139396330666335376334386565303965643539656263386361313361 +63626362303630323861663766633366643638336531666138643462353365393832343236643637 +64613934326338396230306161386262353262616537323537326465613132396639363462663936 +62346635633266383837623632663264326435346230643663666530303530626330393533353630 +35343539626639633534336636643436383533386238633338646235666566386564653265393339 +30623530316237616265383433623064303336643230396565623462663465636666333030613766 +37353039623739663230393237333363316564383330373631356434303739623937623864386138 +36383838373463333439303764656663343362373335376261383630386230666634313734623562 +39353135376435393030663264646565396663616234373833656336393238363638313765623831 +31306530373432306366363431396336323665366232363632316262663762343038613237333837 +33623162323036326138636633336635663666353162363263396431313236316233663563643966 +39313932363032613463623138333861633931663938383561373932393037326439666639313663 +35623031343836643361646562373561633136306364323433633864336134356332316464613639 +33343236613531303734323261653465633365326236323034376565316366343736643332353966 +37636430663166663532653561306366343936333265383430353637383365626663373534303565 +38383634363836393133376332613263376166393266333031316265626134303939613932333931 +61353661303839653162643064353163356633626639623262356134646264666338653338343536 +33653861343964636433346234383333636536333836306664626466346362333037326436343564 +61333432393037636135356538643366626134653065656363346137616135613462343362613338 +61396137376139653232333334333532393165313839373063646163393866626639383235656635 +39666330633734363061313361306130666662373032353837396135316163333537633465333933 +33393261646134373835623161376465383432333739383566386461653264626337393430326137 +32623363633035613639323339343961313633336532356333366262646136636437663632666231 +33356336663133333535653161373261376237353137653033343765613630653539313238356334 +61336237663932646430666132633462313766643263663736333336303361613033353138353439 +33636237336634633939616163313234343064636336376131366566616235363330633732383933 +37333235306134313638396234306338613562643239383739366462636561623831663930626331 +34353533393163386164623034323937306533373361663831363931623631353966376365633939 +33383232626664353831386239373938353939656534316635336632366531363962633037323762 +64383465653764383539653138653736396364376364393437353562663935663736666134623731 +61623436303333383361663135353566353733633435346239666531643438326165353861343337 +37363262646437346336366332633361336462303765663561333035336634373838356635313537 +38633737383666626535393434383634663735623034666366656461396361323662623836353064 +38353930393335356462646133373033613334613766303130613930326236383963663238663561 +32323732343765326665386261663166653161396537636235306238306334393437323465396430 +39376130356431383365316263363361653939616338323735646639373965663933366161336333 +39623832663539653134326263353338306530373966366137636164303837346336376338623035 +63303335333631393337396363306463643037386633373361393162623530623137633763653831 +32353333656232333832353231653936376537313730323039333834303331316330396265663130 +62613039393037353931663063613336626431653336363839316431353865613862306130373261 +37656131656364346134383865626431373266656637353231363732636337373962613234393136 +66626638616363323130343138333234656430646637623766623439393832393166343730613138 +30386632646365636566396136396538313965353034346633346361343032626635633965386163 +30303935326632396265376434613162373834366239383232623137613663653365363963333737 +39343061346661356334343262363965613631306433306131623862633138386138376462633763 +36666364383937313266336439363833333137666636663531303361336562316663653061336531 +37366238663866383832616332373836313462396534303134366530626563363733663636336536 +35653032363932346162303934323330666630656131376462383661633134613330653562346538 +66346230316139386461323938313737323135616563323233386638343333616439316663316538 +32373137353939613334666162613463343564633133646266373563393638363532396438336365 +36323663343331663137636436613865303733353563633132303437666233383166666539313937 +31316466613062366134366238366337353238346166356336626635643230306535626365626233 +36353333616433353937336636643330356365373139376566303663323463373338393034363930 +33363061333430653963343465373339613664363865633732366665663538333630626661613830 +32643331323062343433383233356663656133386333623635373933383232356464663539343335 +37336536636530376338343235623363626365643662326537356566643838616338363732643931 +35393230656231303837323161666638623631613061336436343437626164623264643838376536 +62666435363735313038646364313361653462333538633733343766663938386333376130663736 +30663633303262316438373931613066356137633234393939613236663039366430366364306539 +62306638373732613836663765383562633561336334336664336562393166326164633638306434 +39316634356333306166326339363766613966323964356237653439386363326163306533323136 +61346565636230373565616531306139363962666636303439333864303239313830303831636265 +61373134623130336438343136373334373861376332306438626532633935383137366634626566 +38303538363165623961323533306166646665643331326665313563393536393064623262393538 +35623830646264613739333661393436346562323236373433353532343661653930623964383461 +33393238643435336462343038626435623932626239643765336330303033376265643664663661 +33366362376437313965353739663531626534343732626135396166613338393932303332333432 +38633134333239363462336132323763376237393236646139366662616661353666656466636233 +36623262396632376530383336346431636461343062396661383532633764653439303665326336 +36393636383561343439366534386238316364393363363937316461356366656632346233303363 +31323061663630373061663534626465313134663431383663633965376661316664646630343565 +35666433313030333238613032313930633939343431653239643334376434303438346238306363 +61613336633161636563303838336139663939363138383932323131376433633033313764313232 +61306430326333376532356336383135663637313164636334396134326539363936303938343839 +33393335303338646239626266343863323933633261653637343763373936313261343933333136 +32326433353338666561636461626533646631633030376437353332653563373033623233366163 +39636165646164623338393661376164303236363261383239626338393164343461356538663034 +61646432373435646566643065366338306665353835366463303830316433613262336436363062 +38353363386439633534336163333365303338613065616561323431313531373531333136613164 +31643932383635626461373036366564343438316536326161343135363836613636303437663137 +39386436633334373565383461393435636238393133373265393763353136336233323134363966 +34323538313063373637303131613038356138373534626636623832313861373634653135376566 +30383336613861353036623835613139393961396233633762343239306231393234326237336463 +38353265613539623866613031633137323061396637653536383530313534333632316561303637 +62313536313563353966326334656635616134353366316530373566643639386534336462616361 +34633561323461616532303530636466313066306431353932656635333330616333313530346130 +35353730393632653339303932313266313034373431373530383462343136376162656561336461 +63626631633638393763326234643436623265613739363666396335653834303935376239633066 +31323961343765656536616165303365346462663031663633376639336332363039623337323030 +61626165346438633164366534653465643931363063396163373234636663346664313732336164 +63376663633134343462316537363231623932373363383339376538363461313635663666383831 +63643765376439653034396637663562626337386131363039613836383964323336373631373931 +65383566633430393663366166333631643636626138353932323036663537306634626437363464 +61366632613964613862346335653766333462393661616666346564363065613531383235373336 +64353233336432363530303734333137656362326537353832376333666130373063323565666630 +34366434643534643339363930393466353935363138363363306333386538313633646632356662 +65303639396138303265623066346232616562353230366536343066623538356661353466373361 +62343365616637363833336638646633323234636537326438633439343462646466623133616265 +64616366373062323138623933386264666530646631663936313634643064613062373965643536 +32633832643865656136343134306562383264383664316566303239663633363163393733646534 +36383261633933653737656136653065363036383462623837666463393037636135626531363335 +62626561633165666465366338366431393732373536633931306237363739313036353964306438 +32316563396266396333353037323062643633393032353762613566633761336366316538353134 +34656261356534323061353438633033623239633236393862323863393234313932616562663763 +39616336653235323638373038613738316634623064333963363465653365646666343431386236 +38303332373762646663353338633763386331643231393932646536326531363737386264666464 +65383233396461636236643466636438653431613138306635333830633535656264613165363331 +64623161326332386461343534373430356239613037616232633233613666353764663031366438 +33323565663535666637363730616366356130323862613134393435396439333165393663623738 +38376333313037666530653631313535643530386636333136396463656166633430393234333662 +32306331303438613731373439306333383432353539636639313230383931316338373534616533 +39643130353938323961613364353631333362303962666636333839613139646331386135353939 +63313065393261323566316438353536623964653961383737333431623965326561396562336430 +33396166656134316437343038303931363031373339353664653265656463343334343934386436 +37663931366430383164376261653033363264376362623930346265663063396666303261643932 +62376339313634393334323033666535623162333865356333623464303731653632363934623363 +64653439383664376365306263346465386565396531666434333764383937623363626162326662 +35623833393663636162356335336266653163656535623239346130653334343036386237313737 +33323131306635653464643430313432303632313461353034663462343866643961656530396164 +33326139383664363565333064646431393961323934366439363663373630336465623933306432 +37326439643064626362653531396165336562356638303161383730616464613138383762366434 +36666463313734333536336530376263636563313439346638653235363432356135623232363335 +34343631623633373139643938653038333935323331356561666434623766303164653233326338 +65633334616262613935393732633134363536633664393133323637656362643865383939663863 +66616137636461666562636437313831656236346630313738326637623935306563373965396638 +33646461356531323033623234633364656333396236363465613563343264636230386130313431 +37643832366436353236393936653533663165653366343430356166346237353536643431383361 +36376562393563303461656431363864646335633838323439356166313137353335653939623634 +37363762636334626630353864366533383333343636653535343732626332623437636132373030 +36653935376361623162633464616430623934663064656233343538383236376330363963363236 +64343331383966356361653933356130623335303031636539633039343830663330656332653830 +63336236353039313932313664366461383335616237386662343835633535396633353666396563 +31313965393366396133363066363532613038643036353532326535613166376139383732396239 +37623832323831663031656335613737356261373635643063383764303564643433306539306537 +32636138646136346137343236336234353764386466313636393939376138393233323766323537 +61653439363831333837643865306163616336353233323537346462626331616163666437376638 +61393337616532616363306330623632646639616239383562663063363765663063316133613563 +36393930353738343532613161623036633037396364386434323263353933646637336630613736 +63646662336566346335366464313264323439303234316134356333383838306530633035633730 +37373066393036343664316139353564663962346566316239393031623937383530373264656466 +31313438643432326430383734323434393564663033616633343732363364336162333864313064 +31623939613830626166336636313538636134336239646463653965346335346139306662356161 +31383466346131623635613861323264383739306562643930316261346632303036613333323865 +34316438386462653537663832663938306637303265326139313532353263373631383663363431 +37656536383264303362306637663330373233616536326564333864646333663334323462623838 +35353138333833336539323761343765653136373661346265343430393161366639363765633865 +37323032356263613530643735356136356434633734653165633134643262386237343263323563 +32613566336139346435323036323963656334306664613332633661643462373464363935303131 +35326639333565656639303731383037626636333861373738636431653261316665343038353632 +31633037353932353635303435306265373166643836356664316336353561313138353437363565 +32383734373163633133373338646535643364646537366564643765633133303534373063363166 +39646663633961356337646661393733313433313530633230356239653964633131396238663265 +65633530623063383937326336643134356165386238376330343837613461323539353335303266 +32303165663335656433666137626138356563363862343939623137316261373238383639386664 +64396464363934353862626535393133363334646631316438663734306537643836396563623632 +63663636643062343839613735336438356565326136653333383231663832653564626663633439 +37636661383765613831313831333132323764343965323633386330303762623736313139396131 +31393762646233623132313036383931376430353734393030666139616137383735623762396562 +30626539616634313132653265373738636561343663326363373132633566623164376561643664 +36643464366638373431393962623133346531633030316637643365663161323361656432303735 +34346564316666313739633434363462626664316165393065373238363765383831666262396464 +33363732363333376366623062343963356132343137666431623836393935363939376134323731 +61383437353131636365386532326633643037656631613733353663303436376265363962646361 +38333466633061363365643162333838303761383734313766303763383163636165393161356162 +34343134306635356331356639623237623935333039376466643934343033373461616137323132 +66343261653130336439393630393130343362353236386663346437323038363836316134343838 +62333536623333363635363132623532636434313435663530643939353831373333306531633832 +35653230343335666366613666333133343036393231623233663530313766653861343363383139 +66316533663461316335383935383066636464333132346136326464336665633735333566363362 +33376338666332653237316238346334323265396166333366623332303632343766326264363036 +37313835313630613836616639666131653666666135313865333035383461316461383266356364 +66636137613264656631656135643738663836636237373861366262343730323939333938613837 +32613034303037356663333061666432623934316665306536323865613834303736336661303562 +35646364316361356235343033626430323861646434373235623166356663396461356363646235 +65313965353837363035613638376335623961613262316331333434623963383234653030346365 +63346162303465313864363839653431366437383733343766363133663932326431626136626265 +34653035323263616636666638323938333363376265376538393763393161373162653332396238 +38633965393035616462383938666266373932383437666666613230363166343562363934666635 +39326661616162376130353138623962356635363961363662383961626439393762373765323666 +32323737323065346331396439383864653261373137663535626534643731613234613733656565 +31353630623166383034313232346631643939376133323736653765306365316237373530383162 +35396561306262666536386633663062653438336466386663346136653234373830313331346235 +39343838306261646639363363343832653166336135653166643034623961306464323663646438 +37383965303038393762396536626438303938366335393961623839616238333134643931366462 +32643263653064663738313664303566373530383238656639613735306332316639366439623739 +38653233353637666364313038663964623765393036386564363430363439386232323539346366 +39393037316364653039346132653534636161313265613361376364653764326535366130353833 +38333739353537646138323036613864303332363338393666313432623335376264663166323838 +37626330366461343038333263623464633336636138356462373565663561393066656638363361 +64616362656462333962373037313862366363626138643738306664316634613035386464323363 +63623763323836316135393762626464306631393664316165373432383330373362653337333562 +34316562393030333832366634303061653431356636373438343531393736636666346535336634 +61373261633037373230613861636637623030316462323766346636363166666236663931346433 +37653834323665396432323630613030643363393633616664353364373063616137386564646235 +63326335613336613739656131343466633361333939343166346634363330383837313462653736 +39326332663963323734396637616439373735613766623239323732393333646635663565363639 +32393033363930323165396138633066623733333634663461383134316361396134313639663862 +39643732363466643565333030373339326634663037313930323562363063356162643934623831 +65623837316433383336626465383935383833663535323061666631336232346234353464356337 +37616238343738396139313536656233643064613863636466616664336163363862653031626132 +61396231646639346238333830636535313033363437333734333834656634663133386531343639 +31663433313235363162386364373631623433653835343164376633663363663762663365353132 +37393730656435363164663663363139613164306561373634313565653063666531633063383032 +63333935313439353963306339656135643133366230393437326537396637653339616131346431 +39353737656339326534303266363634623033393537616266656230656330303030333662346536 +63356266306531663761346531333165323434613764636331396338343437343530666338343565 +31326136633436346262616237376366373433633137656461333262333735376233356466643836 +30393936326161353833326362636261623466343062333834653163653866633563386238653661 +33393965656637306636393032306331663564366433373066363366393133643331346331333563 +65376135383464353537656335623439383030336365653466623061646365633233633732356362 +30666361626539343564366531366563653063393132613435373166343061613463343963643166 +35633039336362623133653437313962613533616139653861363834616633326639646465643831 +62376663616132636434383737656462373036636661333336333262376131396132326662313338 +31323531313861313064326463316231633665626334656433616635313036633664643630356465 +37363564633665373131383737363132326139666336356163306630306138383631393562643430 +32366636623431656463376338333433303261386235396262366563306265336165396130643335 +30316565366665663265383066643464323634623030663535666635376161333963373236316637 +65346336383964316331333735633536643761323234306566653762376231373030663064326366 +30633538656261656234323465396161303930613438333939633464636164636463643531623431 +64386162643931646263376433356162303334366632653063316131313732623238626464363362 +32643034303664376439396366353233393230326431383566376663373964373765363562386565 +33353536636337613461636238323630333762626266376533393063393463366262326663366663 +30663733346364356561336533363965356337366265313066663966653364363634616231626565 +32356635663338613139656164616232643437646164643866383366316139373433373234646533 +35653937376264313137363033303937343762633934376463303830323063386439613134396438 +63343961643662376333313363306162353331376235376332366134313332363339346364386534 +33623536346535656435623261316232323834356261343334633763626462663831376462323031 +39626561656464663532313535396265373462643664356337646566376130326661313462393931 +65626638383533346138303139303338643861373461333738376534666338656264623262313439 +62303665356566326636663262366532333665383464303331343837623939336639633733643662 +32653936626466366266363966663264306430353337356432393332346366623938376166383563 +65353833653064633561316433363465353932613635333765633531383731343963336466623634 +36336638623337393533336139323463316534303961303262303166663336663662663439343039 +30333232656132396133363034346130356335336264346663326262623135306364306537383037 +36343438643838613262343166333561613361396233613637363033366662623939333839366563 +65303132383530633937316532653163373462396463653439663435356130326166663664653038 +33623633343738666162386565313635323565613065383563633032613631626632633339326466 +36306433653737643437363363653564623865323232373537653065656434613463633764303164 +39393839366637306534363964376335343562616362336234396663353136636132646238616462 +36376366393037613331363334623339316435313561616662363836366666346565333539663130 +63303662633566613664303038633538623332653761393131313336303930386165336534393162 +38393062616461303833393266663763373637313563626537646434383634626138386534333931 +34393863653731616534386638346334613438633434613265333235616239663538623633623239 +30323936376338376631383835363435393330663964306366346662656562646634373135313735 +34633839313166306665366131343130393531663331616163663462313737663038373433356239 +64323737653231633961313765616235653863313033316534363838326263343931343062373362 +38633733316164363764646565306139363931656562346231616261633865613630646365363762 +65313934323465383064633436626565303730663938353830353631653634316135313864363665 +38623831653464633830313430616133663330306366373133393932336261366466323430643061 +31323439373534646235303136383639623666643564633363303435616331623237616261396161 +62613836353433653737366261613836663132306130643039376231333331363764346532363232 +37356632326162613538356236376231336534653734383734656132323537383639373730346464 +33376532393932326634393062396235313639303866633932333333353337316536383564303935 +64313036623830663331323263316239613962343861666333356434663164666530303964633631 +63376331303237323232393935373439333130363762636539386537653038396163663261316435 +35633532366239363531333633626538343534666434373563326238333735643439393836393061 +30623362393561386261323132336130393533633334326535613032623034656334343864353735 +36656234333735343466623037376235313631363235626132376564626332306537623939643766 +38363333353461366238313930663031393633356636336234303862633331626433363835383934 +61396436333632653632303038316139643837626562393065333137663532366231653332626633 +66653066623939336564626664396139663363653762373162366633356335626634626236303965 +62613932666564616532663766653831646334353539353966636661373538343237326662616463 +36636132396239366530393636393030306130393733376436306464613232376466343730626264 +34303130646236386238663465613866316136666638396163626261656331373566306534333462 +32623135383362363932343637333137333366303839366464666263366363323036316331303333 +65326664313831656562306139303731306566323931323637613636353430386537656337316430 +35663731366631306664663066316462313136636361623232333066646163666135366632326163 +32316466343132383735623565653139316261343361326338333238633534616435373661653731 +65316266316365333835613166636232343632616138386638373432386637343263653935633861 +65373532363864363464643865303461643032356664623935633461336339303437633564663434 +35333430356665393232636266633139613363383337656135373832643865393838653730386363 +61656134613765623133323131633064633636623665393633356436353464653664383134373861 +36363632646164323261373862353966343137313830643464306539363234303833343231306334 +37326332396161653563636339396264646264303761373363646364646436393265393339656137 +30666265323134366263653234666238623361613638353330623064663335323930633863336166 +62646238333266666236363734313239336538613565386335336333356564313437633635666534 +66343932643938643037633962353761633861393535356338376463343766626132613566323230 +39393737636537313362663436616263313737396334376132623939303831386664616461363033 +64386435643430613165346232663630306563653637343739393062623139383364363935303463 +61373161316531306363313434353232383836353962333538346536613032663762333263373564 +61313931666433383430336430353031653930653862376564393336383765663832613161366662 +32343934653233353537623365353638343161663633616631666366616636663937636234303336 +36313262653934393233396262343132663534313139396135363931343932353164303432633662 +36316136336564343937633435633963353561386435376438613838376463666236306563643033 +39333235346634393238376338336664343837383236363738396430633531396232306363616437 +37663961316139333064643930346437363830303363376238376132383532356630636634303631 +33336463656465373166393065623332353462353237666337663165343338366437323262383566 +35623134643466643234383162353534373334643638386233313338356532623134323264396163 +35386638666532396131643866316339366635626237386633356162353761373134653332386639 +38663439373631336364386538363662393966323661323233366663306634373865343030393936 +34626538326130623230623234323437653031316533663166656537383861323365663730343432 +34333133623738323264306436373961613731656335373466393563333266666662656633343266 +64386238396539626530373232633838366132333331363532376231396663306537633230383935 +63343934313438386639386632613630653336393233346533633630353432616636656135343365 +61363537346330356232306236653966393937313637353262313637656537386534613565643238 +66616233333331373337373539366465383132616233623630326337346132303466643366653739 +35643566633563613634616365623536373663313363386562316365663234653861353163336163 +36653163313338643564633262396331326237643038643338636632643061636666363233356538 +62363261353262303337333865626663336362363539653761353764636339306166323363353166 +39343962613636356362353865363832393865643062323538343761396138343537643738336630 +64343637306538313462303862346634363032616261316337353039306239353038383161353239 +66373065643164356134323132653235396330616439616661323938646236376264343564326464 +32616166633034373339366432333066306237366262616438326137316461373637656566616665 +37353331663139626135313839643035336435616364346463323662626562613030626436333766 +35636465326664386332643136303836373563663439393538386336323464333030626464663161 +31666230393661623233373233396165333866643266346266363962343163616238373032623931 +30613132373635323963316639383366636634366133376466633064636130613064633261326238 +63393166383938333038653364623266356635343265336463663761623165326232373734663330 +36393165373765323730383835386532613863306133346463653737376161653832656134643338 +31613137303435376662303765636563303633653139653361346539633534313231333063633661 +62633634633739376339376539393063666339393637393433663536303736656434663662633231 +32613464303663633335323166653735653464316434643637313564633038616262306230343933 +63343334363765353363633938313232336165613237616161353435333931303165646634616331 +63353535313231336561666431656533373737393035353739393162616265396637633836623935 +38373236613431666131366432363734313839366262343637363866373465343430306236353833 +33343763346663656362636430313634323365623034353864303766643666613162313465346334 +33383538623162336332303463643330653633613739316134663430396364313831613033613965 +66363434383165353330623164393331316530376530313237386531343637346262643232613231 +63326537363631383430616238356130323466386561313563353730323332646137393433323633 +34663737363630316532663935393737616336336133346332313633616438366563336161383336 +61363632613034626532633733326333623565383838336438306634366666333037343533653666 +34666238393932353462336530363631396363393833363732326464373438323764646664623638 +63633534323230633833306131613038643932643431346532623937616631396634633962343861 +65373731303037333632326631356566373166636331393937363933303761353665666534383730 +30663762313865383730366636636661366130323862376362353537316335613737336639613934 +34326165333931313935383938366663333963323063383163656466356335356464656662393863 +34343033373033663539306361656437323335316138633464653838646634643830613538313633 +35643633313332356561646665626532386636653733643730323234303638353338326634323638 +61393735383230353639373239343066366134386164643731643839393961343931333637363036 +37626334653331353032346234366163646630663630623538363030376664313161363831656234 +33386161336562666138613761643133613763363637366136646665386634616536303432626539 +36333435356366306433323461636231653837336437343232313832313666613934393330356430 +66306365666633353438656161323832616136613439326636613262643763626139663232616137 +63383762636163373036636338323630653966646632633461363333643762363763346337313764 +35643865313734343564383964626261636435633331656631616561313263393464336230373566 +63393939663565363363633264373964656639323434623061303165636534353761306139396135 +62643531613161353336626639316438616134666662656330623830336562396237633632373632 +39313231373235346233653432306638386462626433333139646434343765633963303661363935 +32366538383633613665653435633264623230326239643362343939343539333663623139623435 +30303762336437613933393736653930333031663864376338303836396533313334383130313834 +62366430633139633638363237613861336534626466663964353439373037623663376533396436 +62366637366136313637353334346264616230363431373761353965343130343039666431613536 +62363466323766306162663033393136373862326130616634643063323866633263643135633763 +38653339666533363839613465366164316631343533323962623438373861613639373564616666 +37396464396136366539383437366230343139643037623639356565386232356264323466313930 +64383831306236303330363462616136643763626138346466656238393737393037626661663361 +36373435386131393330353964363163656330343938346630333666643530353465633735363331 +63366533373833313637383763373431653232393434663163636635663363613365386562383361 +36383361663332343061373765653237336232393965643663313366643739313333343431616464 +33316239353462396235356132656131303264353265633062396366643131633665373233343934 +31323939353564633561633131383430313539613638633762633238323766313030666634613162 +61616361376461346262393734343435643562613636313038613034653562396561323730363538 +31383264396162616538356330363562613633356331353831326238346137313362626138303236 +34323430643737313938383662326162656163343430646562633131343331613338353634323936 +61623061653938653965633935326639303430366138333462656635333733373962616265643031 +62633131626236656232623563653332336633373437663731333665646631306335316162666133 +64316333313865353637343966313035386165313938636337383738616532396633393966313738 +30643339613236653733386133306238303438643362643737343362656666653463383032396631 +38336265336336663331666639666431623964346531313062616135386435396266643536616430 +64626161313434633238366362656566383562363334306564646531316431323633613264373838 +37333538343766343230613533346661343733333335663766366662373065343231656162356332 +66666339376632623137636634326466306133356435386562373939373233333264623463303131 +63343366356566636637393662303135373638616362623362356532636332646665393932663938 +31613238643939303066383337326364363163373038643533336638326334316633616430366163 +64343134616436386330666534616161356165616365643332373139353263306231613939313238 +36623162643436393362363732313236636163663637623963646364386231363133656236666463 +33326638386637613937613935663730613861373166383063653464326236386431366366323835 +62396637626661366636643036623437356665643133396464373533333931656137303636636532 +34626436366161343138623364656564376431386534653334386332626230643633356639633632 +31626139333363626233383433303633303430393162383635323931653232333363363461323132 +37383537356631323161323262653861353233613031383232326134396461613535393266386430 +38636161326435653461383265343763353635653034643462353135623661306234666263633732 +33663861343364323538393133303265353735626232393136653765336236623433323231386536 +30336531666230613132323637383764666435353966323061313562316336366431373332663763 +34303164393365393638653632633266396666643737643165353332356538313161333763376164 +63393765653463363938653365633934383133333766363231343438376234623239303461633266 +65646131623239353632376438373137363062353865316130613633323837356336623664306162 +66363131663765633063363131613730616538366365383262636431623731636437666536646336 +35366464353061663663336465613065653635303339326165623264376238396465666165636435 +63363135303638633437656134613563373336306439356539313565326337366531613064393238 +38396538333338666233663565383932366265316336396334636230306331643331623161663030 +33326533666261373233613461653339633535353832313064663363353636396263373464326139 +34613635633366343063366439396539656361393234383732313965663464663939336263623731 +61343265363734376638393863366133393637663234346637636538636661336464643066623761 +63316464323431653662326662333562633134306361363935326630396634646630383462356566 +65316538376332353931373537303233333336616637316231613735626330666564386261376161 +30376632323932623231333464303864656133386166333231363262653463363637353235346632 +63393763633231363137323632383139316165306239663530373962373635623237313434303566 +34663236346161653636626237386331346136653138623664363833616162333634326430643833 +31323762656535366363393034336138353763333539356230353835396438333538303431323031 +31356639613032383738383338313834666234386265663939343636626130636131613539623532 +31623531643436626534333465306634643234313431303264353364333033343734636235656666 +38383636626338666266613463326133323866356364643035623335643765626665363631383934 +34366661326162643539623839636332303937316465323665626133633366646431393936663932 +31303839646131316534353838626531666533306132663863393431323161623465643936346536 +65666464643236633165396466633232333236626635616561306336393432353739623337353731 +61386435363565373031643733346166303839366434386261616235656161343834386630643161 +65303866346161326238383466613233643036653034646166383235613939353839643535646265 +39653163646134623966633736653438366537643066383836646638636534306136353336336630 +61616637643831333336323535323733623433393139666162663337323961643766353562636633 +38363535376165363666393462383862373731366566653463313166393566643832643061653831 +63336331653636356166326439653736336536383666373435383338313633353039326137616532 +36346335386235383563386461616261616338373364336637363334343835353765303762343638 +30663131373934356161323665663333613363373466326335323862663636623964616237333136 +62646137326339366363633761623138323630353834663039306638663132633864653263313633 +66626561386431663765616139316261613337313362306666613134626631393733323137313130 +63383461643332643466636431376332636437616665653437613964643564353930383531633135 +63316634653038333534313437313336343561346239613534383633646161353035373761626635 +64646163383037333561653932383265636532313239633664323962623735356261353433663531 +65613733633164643639373839386630303164356538653335623636633334343864636132643938 +37373636646364326336366430333831323230316566633432633336633930393531306230643235 +30633331646466613830646461386261363038346432643864326162386161623662323763383534 +37323338386166386165303866373465666166303835333962383530656632616638373964663563 +64323466373262336239336632633033353330626164613461653435346561643362636431303664 +39616436396665363531356162323962666137323561326433303936643465343665386661366566 +64663938346564343363373863383830393637363265383166333135646666313866346463656138 +61383735656562383862396663353566386139633066326238636334356431333633333262636562 +36623066383331313137376464646562393437613031623465663264366265353865353237393839 +31313337336464333730333531333566353332613039313839313430363537376530333364363137 +32393437633363313164353238636335363465656238633132366335326333313230626261323636 +33373238653531396434623963383934343264333639353065663462646336373130323466613763 +64663166643438343562663832343231633463343363623631303039386331323932353264383738 +62653331326138376338353730356436363661306338306561633337323039386266373961346461 +63653939653663333233646633393163363536353635363034616562666633666331303463343939 +35343731373366623437356565656638623639383061363964663266613664663965613566363238 +63666531656664663735313133346439336632663330636137326335333033366361323764643763 +38633637353236393632326238623635666330363964666136633733376331623465353330336535 +63373030356664396137646337383539653166356161386439373437343965376635336362343765 +64656231363831353134663939353533613561636262643961303939343963363030623030616137 +36353932326134656330316534393261373737326537323034353732393638393562323963373033 +37653734333066316230316430646465383835353365376234366430303430666463656463353039 +61366233326164383539333365636663313730333262366434353964396338656231336431393436 +34373630336630373330326465353834323763643464653034616465313862353032303064666439 +62633565313563666238663863343366646533343138313466323032306331666664663332323535 +62303736636366373334303863616130356438383331623939666563653131353934653065353664 +30326364356265373131353335363561363062316437356561653039336632373566666633396665 +32313539633635306136353536303836653932643033353363366365643835653830323137306164 +64366236323439376238663863633034316334336538303764636365336331396263623130353933 +34613433313865306262636662353530636261633038633531656431666530313961643162376530 +34323530333233613931356263396565343034626135333166656231303632313635376563316136 +39343537336431653639626231396434316439663237386266316131623366383765363733656266 +64366531643036613333366632653132333736636339346164633631326139663032656139613465 +36323732373230326434343233306439656465643665393061333536633365316663613765643234 +65666531306661396436633161303531616430333232663762363065656531383430353964396631 +62656530346664346632666336626135383331623964616431363330393938393962653432613738 +33306330316437373161353737353633656235363733326664313037643361633963363139323661 +38316134383533653834326636393337636434373264613933343535356334303131313664366464 +37643432626239626530333261343736313339386339313531366631626361396438353535313534 +30323936393962663932666162653366393365303433313031356333366135366463356265323638 +63366537343332643262386334616432653937303732313930633132626239663438333661653231 +63326433313739636463363533316336343166663834306131393933656632336233366261326362 +64383364313138336464306463306632396130633730336539376164396430353165633031333338 +61373138376135323031363632646337656537616538653132313566383138363764353232396336 +64306562356139333564386234333533336131363761666666353763326133346633323337376231 +37353732333237393834366132333763666138623032663830313731303766623234643437316437 +62646433356230663164353931656566643633343330373861616630626231646138663161303030 +61343362323663376638353866386232653062666163633636343135646363373435326661646432 +30323934613732373866616233316162333937303966663130613337666164633338636638363862 +66343130333333326233353839383135656262653934363935653134633235356536303837363138 +30303932376163636536306434393235363834666636333863363034653439396464363665663230 +36323334376131333266613733336139616137636233353463623037646635666162623639393765 +37316665656565343936316366643131356132303633616434386338303363643031383966313138 +36626165663961353032653937656135393634396565636337303834393563373236656338643837 +33656666643832336632323636636462313331303830663264366336663038626432613462366663 +38666333373233666164303563393765323764616536353433343866626564373530666630303262 +63336336623062303536633231396539316161613132313630663937643933623535313733323632 +34316264636136326532623837303930303635393966393638303239346632326532373135646164 +33623162346437636539613733313262313732353162636234343830633531383433653739346632 +64313763633339326362643063666333383564656262333163356639623131643766363563653531 +33373431613065333936323333356266326163616461353938366233343236613061613235343835 +38646331636232383135303962626336343666393331363666303435306464643636366336653736 +39363230393037346164366630373266356338383732303939363235373736653634383834313533 +34633139623934383061366633643833306363316332303437363431356465636263346233306230 +34326561663939613762626535646266663464376131643966313638643530333862353334616263 +39326461343431656562623238383637613961353533333765306231373665666666666536373264 +37396361663334623765633661353034303935653230613266303033623730613762333934636664 +62376162343139303533383634313433393333373139393836323539323233633139373931353364 +34376338633566623236393431383538316563303831323234356361626232336630386266333134 +65616531356332616539373335633836313138646635323431666436616535323135336238356638 +65636438643762333564343737383663376261373237636539313461326665303661636361306330 +32623831643161363838383532376466636134353161613366386237313465663266333234373734 +37343034316434613863643932663837356131386639326464313939396663313533333830353534 +32323535323834653564356436366535663062323530646662336366363938303837366334393264 +38373539356335653066373630613262633065663036353938383032646464343363393336353136 +61326664616334313066666339623738343030346234626537626434376631313264626133613237 +31643062396664386466383236363531353937623838346130323165636535303836396337333834 +36303564356637653135343961316363626539653161623061313365663838633164396535656431 +39616437383932343736363366666131323035353364303565643662396431373534613737623365 +39643131646362633765393737363837323462643238626136393935393937373866376462663630 +61363430363833376237306439356337303564393965346530386332373965333232333133306465 +65333665386130383837383361343939333036316239616633393930316666656530323133623632 +35333130313832373439643032353662306161326638646534396332333564386339396234343963 +38383934663738313863333231316461363935336666333638666261646565653437346339383932 +38386561396164613763393566643737376264653131386564313362356633363764313664363164 +38616339626632336361656164356235633962643363633632333539643732313630356335316335 +34303434396362303064656233333235313036386539616462383033646537383363633033646339 +62396432306662396233643333353131353831376233323432376131323663386132613966353536 +64383063396565343364333635383861623935626330363861616231363366363533356630343439 +38616362613365316166366638396565313061323930313162386233663830343630663330363235 +33393236623563313235323133376135306533373932613337623833313437653635356533626135 +36353265333135663431633837633131613232623533396138386239313863653265396563653264 +34373136653731663836383062613064316133303637316433666436306638313834623664353665 +63323064653830626361306261376538643964326330666230636639393831346663356166643233 +62623865303530633634363339303164643233636531313439363665636262326135626231613935 +30613137636234613761303164623762356137663430646536313961376166643632346364626162 +37623332386565353362343666613362356537383063623836336438613739623839326435306438 +36383037613463336132303335623238346162626332646166393466313663653339366233633030 +32353230643038376562623862636637323833393939363433646265386364653166666234643035 +64336539376333333434363162643262373230383864393835643137653039363033356235353461 +35313066396230363565613136363035303038316433346634383733636661356630353334313666 +32343661353931333030396132316662353061336531666637663264653332613237663261346566 +64313535316334393136646465653938333432306561396133343235313130396237326338326138 +33366536376566343663336165616537666362646365663765326165366664383162303039323034 +33633034363238353865393866656138333466636664343533666565653163653862306563353230 +38366138656435396333623264353231663930633936343365376632346539313563633163323233 +61663432393761666637633938333063656538393263646432623163366162396431313261633863 +65383635363031366232633962353536623335356364643339303033316561396238653833623730 +36303062663964353339633334363438383961626661306365366435656463613762336234333036 +61653033376563343466656463303765623635643735623131306132373535386265363035353230 +33643161636138663731333466333536636165363336316664666364333633356563663335363531 +38396435666130326565386562343363356335623465656335303530663064373435633333343564 +62383135623864346532666464363439346138373931366539653261303265366133303838346463 +32393131313135633736366334336566626463383036313863613065656132306335303366363930 +32396531623333373463383333316166663734656230353663306663313163613366613962366235 +39666661303564366235613536346466313535636435656664656538316137393433633134633338 +30343363313462393662363937633833623237613966376264393632303132326365383633316438 +35313063353330336261643436303235663666623565303133653861616464313062336139306334 +33633939393136323865363233616339336134386239653364653632396431313335323562366235 +63613735623833613533333561353861343665316264643162376262646136393534316632336239 +65306438366531646162326134613338326632316432663264626664653936303264376564636337 +30353235393635663537356138623562643435653837316635333236333038343939626331363138 +30636561383930636636326133333231313032346264376563393065363266653063366631303136 +34623030396434383134373931666135643762653863663161626266323763333464613939356131 +65626465643137653363393235383863376334396462353065636139616332646166333339356432 +30643833653761303733393337623633613238353730366136623237373833656263303961663231 +39643638306630646234346539353538303632313566373639353566373137626637363630356231 +39356433656330313136653239623661386433343636363364343162306335356239643039323836 +64313561626165653234353435306235383832393165316666396461343634626537663734663330 +66376536356332333363353334386163333963383631643033663966363362393962303463393666 +31363865393533363766373330356364643665626236363764643465316133636538663039623461 +32363165636664643562333438346639353137363134626661613766363766346138633533373930 +65386534323062663165303766613765336630363565643864313362366464353232346364663836 +37623464393738313237363139663339616537616638383964623962393063633639333763316535 +36643965653833666637383334303761323135306466653033393535366532623330363664383764 +64346261666536343237623737306630616132383330653839363565303565303566653235363563 +66356334323166303562373630616231336238386430336539346465653532626661306438343738 +38626235396566633938373464303132653339633039613066383434636364343532303236613934 +63386565373263343538383631666435383035386235623161336639393431396637376264373537 +33393435343463356530393032383164313334613435323366313266666162343630616434333638 +34313432633339613363386534663264333438333830396335653162626239373138343862636331 +33386433646430666366663462326639633562373061363033636466353538363836343638353337 +65343562643935633431633963303665623139653832396532303639363061623163343163373131 +39646635323339666233363935393237313837373566326564643463323737636636333734643762 +61306662643737613066303734316133313066326365356336353735356438643133633039303339 +66386533313966376330613432313939643936383634303130643635663864336330383538653939 +37656136336361636663343962626330366534623338393266653365323430393665343236353835 +34313632363933313361373432363031313364653565343662663536613831383432626136373436 +62353631346337646638633166353065363666326163353166643663613836653864306630343234 +38363539313436313634353331653732363661363731323631326132353465396565633562336263 +36653137346434333537626133386636336564303535623239313261393834333431316435646633 +65333031643363633662663333366133343462336561333864326562316530376632303831616165 +39313163366436393334626163336466353831373865393365623966316364643633663635636430 +35313633333636306166333961386265396463616263616537633033363432373232613663383665 +34366630653338313861363336393231393836363831353337613334653633306631343936366432 +63333636303736376266666464623866393564343434666463373362326539653837323039396630 +32373638303138653532623662386166646638323432363934353930326164616165353936653634 +38333466646162353933343333646535366435333034363664303164343265383236636466303937 +38306239653366663062636534383038373934663136386339336534333131336539363230383231 +38326439393138343630313837313463336633633862616262306565313264356236346539633234 +31333831663137363466363466353164663561343931383165396161366331333466353137396332 +38356230346362633463373065363732633837396438363263343934333164313932633731666430 +34353436336266306237326536666334623364373866313533356639386331336364366163313533 +63366531623139396634363766346534623238636362396263343731633635646563363563353439 +62653261373336393164323731613862396334616666666438373435663464666133336363386463 +34343938643466393834336465383538316433623730323132636265303632383864623361643534 +63623931353139663039396635313963396166653461653062373537313764326233303733643666 +37626266616562663666323230663962313937666338383832653133303037653463353435373762 +38343833323232643266626336376437373937373363383765633931336261316531613835646130 +61333966346536333637366631626461303764353136623163613136643838313834316637343565 +64373536396436636334616263656565313465653639396633646439626534333234636435343736 +34323362376466343265363138386230363930633835663137333738623862333434366237336131 +34666332363033626538373465666135623130613134643732613663306566363764343531343436 +64363833306131393165666232653864343732653834396332666232613233373963323038333566 +36666166653864393532656363653263326262656331653064613930623137616165333937646334 +63386235376565313635333934326665393835616232663065303566663562396636343930303335 +65313639363031313131396135393139323030386537383832366639623430653135613831306431 +33363036303634626539613239383139383861303765643132393665356236636131316134653261 +64386362393862636565366435646135313265336330636639313232343039383965613535643835 +64343636323365326461306530303439643133393738663664633238366466323538636136376438 +37383063316237313265626638653736623239633931363761373266663737376530626162323938 +34623264333830613032613136636534633562646161666564366263356131636132303837386636 +32303138306435666531653633393362633066343433366636336530636363616463623864376530 +35646138623637326163303330653731356235303866303166613934626435656634626264643863 +65633131396231326564663839353730656562393964373263363430306366313462633266316631 +66663530333933616362353438623461636263343031386533643864356632303630633530393462 +61616663313432396364616464343662653439336632373532333332303931613136653235323664 +32353064663832666632373666363837303764333538376636396534353433373565623434656135 +66386137626130663834393063333232643737626131393861343530653832393962353562323662 +33613261353764663663666537656563353861383236636139333334393034663431343539383231 +31373365636139656434643238616263333339393031376462333764386261383637373635313437 +32323736376634663464653834346462646462363133663430363361333036383336666238633438 +39376365316237383431656361666132343134353239396536303238623434653034613261343639 +63613030386635323061636264313561303235356130376632303538313739353361396233333631 +63656139363231666364653232376666636632663265396237366338343266383231323435363234 +35373730393235393265353433633833313537646532366430393933666632613836316433343463 +36636264346336343764336362616139333866613436336232636633383362633265366632646433 +32316132363432663531323462663339373134386332663539343232373830613265386533373966 +64393761373166313831306330333664346530343133613735613137383934623534316131383537 +30323835653639376632653239626432393861633364353365616237343137303261643764653666 +63613363393763656237376366323536636664653933623639316538303535663666386338393739 +38323364303138303335323939393464366264376462356565626163333439613561373661303064 +30333431363863386635373662313531353633333730386464393361663636353334636463326230 +33393763616234633661626431306562366466633464343539623938393134316238353138616339 +32663662326663333133366231633862393030666161316434356362623730363931393666376166 +32303566323131396435393736646539626233653538616561363236306532633536646430653538 +66646231616439393363333065666635613862333865633032356637366664306231353130343961 +36663631353766333964373234376562313035613062363034336437646166616364663433646465 +37376666653632643339313132643535323666633861333265396162613533653039303235386434 +30653563376562393238313332653035636238616533643263623235303433313639393564316238 +64646564613332643035316234313236653365616537626166383030386636303765353730613534 +34636561306138303333653562646661303162396436393737623462653432343531373931373838 +36613933643733613436623030336535326665636664323166333438333963313465383063346664 +36623033643464333832626234346633326566393431313931646338393930633666316332303563 +36623539366135663039366232616437356433646361306566323034306439633237363961663234 +31363232353833663363363565336466663835326363383963396437363836323134626335633033 +65623937396464333633386431653062653133353236623064343738353164646139306465373232 +63653939343561383336633532373162386532663935313930326236656161336236303066383761 +63663130306132376562646632323861616239666665313965383336653635613735333138623361 +34316361363939323737363461366637363562323366316565313838313137643462386363316332 +35363561336536633731393365616338643932303663393962366565376632623833373938653632 +62386435386633336166643135313863643636383837333135343063343337643136613366616462 +39643330383264323863396635646231373133646336636238303864323638396435356239393830 +31333863656365333837326239363666363531303939633064613531646335366331386233343331 +39373733313737383466306534356436313832313365333433376266323037343365303666616637 +35363032343535303930313534666134636461306162313565366539316637616330643932366139 +65643266353234663663376264356365333166396437633631313261636437303364663936356235 +32663038373436613833613366616361306534383331653361383839383630383166643564636130 +36343538346534653034336634373764643062396165653733633165623064323139643130333139 +36643939353832343862366538646637393332343764383361396263326634373338613366653035 +61313164343931393631313835643337623437346536623739636461303466393737653831366334 +3537 From 563ac1848375dba6910a6a7ce93d76a07c0c8fd0 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 4 Jun 2025 11:19:56 +0200 Subject: [PATCH 16/73] Add host to inventory --- inventory.yml | 1344 +++++++++++++++++++++++++------------------------ 1 file changed, 679 insertions(+), 665 deletions(-) diff --git a/inventory.yml b/inventory.yml index 5941ac0..f7c3172 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,666 +1,680 @@ $ANSIBLE_VAULT;1.1;AES256 -66363336646133346166336334663566626537623338373531613863303633303630663235613732 -3661643963613035623231663936366266366566663061640a376438363638303139353566393265 -61323437326463363039336364353331323130363332646534343936353765656330363363343032 -3435653264623931300a383166343433653964343732623236303464323731323530653466613238 -33613338656561643564333062616261666132313832393664633631356539623934303638356436 -38623764303164663831646531303965616531363630396137376263656231613139326433373266 -33613239663965633837633638643838323638663331356566636134653439326230643337336662 -38663264376563636262653136653337366433323761376136653234333230383839383834616663 -38623531383639613866663735396161653937336438633937353162313833383866613230363864 -66336362383961613564346636383638396335653833306530333336613732643763323935303736 -32396563393139636663393233633531646431613834656438633161363364633866353665643539 -62626134613362653731633836393938363436373838343331303533363366653164376362353366 -38656566396232356331653265333236326137303032323033623738396362306663633131653864 -66633730306639633239623534656532633161313138346564623761376566663765396134343939 -35666635643630643666343033613737346630373033646238333366333865643939313832646238 -37663037613432646465373962356338616331323130323564386537383134313930326364363863 -33626662313239626333333733333832613331356134333930373432316662346130363962633833 -34303836363862653439643265363732643734323962313435333764623932323063616539623239 -39663534393036396434373036306663316531623134383735336634383537343432343033666663 -64316134633531663536366665626538626361623037303430393035323136636636306631343335 -39646565326533643332616165633734656566356462646634303635663836376566633532663561 -38633831313863306533383733653962346337396236363633306232623862656361393336633934 -66313034313830663863663061346265373234383431303564323562383230323364643237353037 -62656365633934303937343661396134613738623364303365303065333936393461616162396530 -65366539343834373438633139396330666335376334386565303965643539656263386361313361 -63626362303630323861663766633366643638336531666138643462353365393832343236643637 -64613934326338396230306161386262353262616537323537326465613132396639363462663936 -62346635633266383837623632663264326435346230643663666530303530626330393533353630 -35343539626639633534336636643436383533386238633338646235666566386564653265393339 -30623530316237616265383433623064303336643230396565623462663465636666333030613766 -37353039623739663230393237333363316564383330373631356434303739623937623864386138 -36383838373463333439303764656663343362373335376261383630386230666634313734623562 -39353135376435393030663264646565396663616234373833656336393238363638313765623831 -31306530373432306366363431396336323665366232363632316262663762343038613237333837 -33623162323036326138636633336635663666353162363263396431313236316233663563643966 -39313932363032613463623138333861633931663938383561373932393037326439666639313663 -35623031343836643361646562373561633136306364323433633864336134356332316464613639 -33343236613531303734323261653465633365326236323034376565316366343736643332353966 -37636430663166663532653561306366343936333265383430353637383365626663373534303565 -38383634363836393133376332613263376166393266333031316265626134303939613932333931 -61353661303839653162643064353163356633626639623262356134646264666338653338343536 -33653861343964636433346234383333636536333836306664626466346362333037326436343564 -61333432393037636135356538643366626134653065656363346137616135613462343362613338 -61396137376139653232333334333532393165313839373063646163393866626639383235656635 -39666330633734363061313361306130666662373032353837396135316163333537633465333933 -33393261646134373835623161376465383432333739383566386461653264626337393430326137 -32623363633035613639323339343961313633336532356333366262646136636437663632666231 -33356336663133333535653161373261376237353137653033343765613630653539313238356334 -61336237663932646430666132633462313766643263663736333336303361613033353138353439 -33636237336634633939616163313234343064636336376131366566616235363330633732383933 -37333235306134313638396234306338613562643239383739366462636561623831663930626331 -34353533393163386164623034323937306533373361663831363931623631353966376365633939 -33383232626664353831386239373938353939656534316635336632366531363962633037323762 -64383465653764383539653138653736396364376364393437353562663935663736666134623731 -61623436303333383361663135353566353733633435346239666531643438326165353861343337 -37363262646437346336366332633361336462303765663561333035336634373838356635313537 -38633737383666626535393434383634663735623034666366656461396361323662623836353064 -38353930393335356462646133373033613334613766303130613930326236383963663238663561 -32323732343765326665386261663166653161396537636235306238306334393437323465396430 -39376130356431383365316263363361653939616338323735646639373965663933366161336333 -39623832663539653134326263353338306530373966366137636164303837346336376338623035 -63303335333631393337396363306463643037386633373361393162623530623137633763653831 -32353333656232333832353231653936376537313730323039333834303331316330396265663130 -62613039393037353931663063613336626431653336363839316431353865613862306130373261 -37656131656364346134383865626431373266656637353231363732636337373962613234393136 -66626638616363323130343138333234656430646637623766623439393832393166343730613138 -30386632646365636566396136396538313965353034346633346361343032626635633965386163 -30303935326632396265376434613162373834366239383232623137613663653365363963333737 -39343061346661356334343262363965613631306433306131623862633138386138376462633763 -36666364383937313266336439363833333137666636663531303361336562316663653061336531 -37366238663866383832616332373836313462396534303134366530626563363733663636336536 -35653032363932346162303934323330666630656131376462383661633134613330653562346538 -66346230316139386461323938313737323135616563323233386638343333616439316663316538 -32373137353939613334666162613463343564633133646266373563393638363532396438336365 -36323663343331663137636436613865303733353563633132303437666233383166666539313937 -31316466613062366134366238366337353238346166356336626635643230306535626365626233 -36353333616433353937336636643330356365373139376566303663323463373338393034363930 -33363061333430653963343465373339613664363865633732366665663538333630626661613830 -32643331323062343433383233356663656133386333623635373933383232356464663539343335 -37336536636530376338343235623363626365643662326537356566643838616338363732643931 -35393230656231303837323161666638623631613061336436343437626164623264643838376536 -62666435363735313038646364313361653462333538633733343766663938386333376130663736 -30663633303262316438373931613066356137633234393939613236663039366430366364306539 -62306638373732613836663765383562633561336334336664336562393166326164633638306434 -39316634356333306166326339363766613966323964356237653439386363326163306533323136 -61346565636230373565616531306139363962666636303439333864303239313830303831636265 -61373134623130336438343136373334373861376332306438626532633935383137366634626566 -38303538363165623961323533306166646665643331326665313563393536393064623262393538 -35623830646264613739333661393436346562323236373433353532343661653930623964383461 -33393238643435336462343038626435623932626239643765336330303033376265643664663661 -33366362376437313965353739663531626534343732626135396166613338393932303332333432 -38633134333239363462336132323763376237393236646139366662616661353666656466636233 -36623262396632376530383336346431636461343062396661383532633764653439303665326336 -36393636383561343439366534386238316364393363363937316461356366656632346233303363 -31323061663630373061663534626465313134663431383663633965376661316664646630343565 -35666433313030333238613032313930633939343431653239643334376434303438346238306363 -61613336633161636563303838336139663939363138383932323131376433633033313764313232 -61306430326333376532356336383135663637313164636334396134326539363936303938343839 -33393335303338646239626266343863323933633261653637343763373936313261343933333136 -32326433353338666561636461626533646631633030376437353332653563373033623233366163 -39636165646164623338393661376164303236363261383239626338393164343461356538663034 -61646432373435646566643065366338306665353835366463303830316433613262336436363062 -38353363386439633534336163333365303338613065616561323431313531373531333136613164 -31643932383635626461373036366564343438316536326161343135363836613636303437663137 -39386436633334373565383461393435636238393133373265393763353136336233323134363966 -34323538313063373637303131613038356138373534626636623832313861373634653135376566 -30383336613861353036623835613139393961396233633762343239306231393234326237336463 -38353265613539623866613031633137323061396637653536383530313534333632316561303637 -62313536313563353966326334656635616134353366316530373566643639386534336462616361 -34633561323461616532303530636466313066306431353932656635333330616333313530346130 -35353730393632653339303932313266313034373431373530383462343136376162656561336461 -63626631633638393763326234643436623265613739363666396335653834303935376239633066 -31323961343765656536616165303365346462663031663633376639336332363039623337323030 -61626165346438633164366534653465643931363063396163373234636663346664313732336164 -63376663633134343462316537363231623932373363383339376538363461313635663666383831 -63643765376439653034396637663562626337386131363039613836383964323336373631373931 -65383566633430393663366166333631643636626138353932323036663537306634626437363464 -61366632613964613862346335653766333462393661616666346564363065613531383235373336 -64353233336432363530303734333137656362326537353832376333666130373063323565666630 -34366434643534643339363930393466353935363138363363306333386538313633646632356662 -65303639396138303265623066346232616562353230366536343066623538356661353466373361 -62343365616637363833336638646633323234636537326438633439343462646466623133616265 -64616366373062323138623933386264666530646631663936313634643064613062373965643536 -32633832643865656136343134306562383264383664316566303239663633363163393733646534 -36383261633933653737656136653065363036383462623837666463393037636135626531363335 -62626561633165666465366338366431393732373536633931306237363739313036353964306438 -32316563396266396333353037323062643633393032353762613566633761336366316538353134 -34656261356534323061353438633033623239633236393862323863393234313932616562663763 -39616336653235323638373038613738316634623064333963363465653365646666343431386236 -38303332373762646663353338633763386331643231393932646536326531363737386264666464 -65383233396461636236643466636438653431613138306635333830633535656264613165363331 -64623161326332386461343534373430356239613037616232633233613666353764663031366438 -33323565663535666637363730616366356130323862613134393435396439333165393663623738 -38376333313037666530653631313535643530386636333136396463656166633430393234333662 -32306331303438613731373439306333383432353539636639313230383931316338373534616533 -39643130353938323961613364353631333362303962666636333839613139646331386135353939 -63313065393261323566316438353536623964653961383737333431623965326561396562336430 -33396166656134316437343038303931363031373339353664653265656463343334343934386436 -37663931366430383164376261653033363264376362623930346265663063396666303261643932 -62376339313634393334323033666535623162333865356333623464303731653632363934623363 -64653439383664376365306263346465386565396531666434333764383937623363626162326662 -35623833393663636162356335336266653163656535623239346130653334343036386237313737 -33323131306635653464643430313432303632313461353034663462343866643961656530396164 -33326139383664363565333064646431393961323934366439363663373630336465623933306432 -37326439643064626362653531396165336562356638303161383730616464613138383762366434 -36666463313734333536336530376263636563313439346638653235363432356135623232363335 -34343631623633373139643938653038333935323331356561666434623766303164653233326338 -65633334616262613935393732633134363536633664393133323637656362643865383939663863 -66616137636461666562636437313831656236346630313738326637623935306563373965396638 -33646461356531323033623234633364656333396236363465613563343264636230386130313431 -37643832366436353236393936653533663165653366343430356166346237353536643431383361 -36376562393563303461656431363864646335633838323439356166313137353335653939623634 -37363762636334626630353864366533383333343636653535343732626332623437636132373030 -36653935376361623162633464616430623934663064656233343538383236376330363963363236 -64343331383966356361653933356130623335303031636539633039343830663330656332653830 -63336236353039313932313664366461383335616237386662343835633535396633353666396563 -31313965393366396133363066363532613038643036353532326535613166376139383732396239 -37623832323831663031656335613737356261373635643063383764303564643433306539306537 -32636138646136346137343236336234353764386466313636393939376138393233323766323537 -61653439363831333837643865306163616336353233323537346462626331616163666437376638 -61393337616532616363306330623632646639616239383562663063363765663063316133613563 -36393930353738343532613161623036633037396364386434323263353933646637336630613736 -63646662336566346335366464313264323439303234316134356333383838306530633035633730 -37373066393036343664316139353564663962346566316239393031623937383530373264656466 -31313438643432326430383734323434393564663033616633343732363364336162333864313064 -31623939613830626166336636313538636134336239646463653965346335346139306662356161 -31383466346131623635613861323264383739306562643930316261346632303036613333323865 -34316438386462653537663832663938306637303265326139313532353263373631383663363431 -37656536383264303362306637663330373233616536326564333864646333663334323462623838 -35353138333833336539323761343765653136373661346265343430393161366639363765633865 -37323032356263613530643735356136356434633734653165633134643262386237343263323563 -32613566336139346435323036323963656334306664613332633661643462373464363935303131 -35326639333565656639303731383037626636333861373738636431653261316665343038353632 -31633037353932353635303435306265373166643836356664316336353561313138353437363565 -32383734373163633133373338646535643364646537366564643765633133303534373063363166 -39646663633961356337646661393733313433313530633230356239653964633131396238663265 -65633530623063383937326336643134356165386238376330343837613461323539353335303266 -32303165663335656433666137626138356563363862343939623137316261373238383639386664 -64396464363934353862626535393133363334646631316438663734306537643836396563623632 -63663636643062343839613735336438356565326136653333383231663832653564626663633439 -37636661383765613831313831333132323764343965323633386330303762623736313139396131 -31393762646233623132313036383931376430353734393030666139616137383735623762396562 -30626539616634313132653265373738636561343663326363373132633566623164376561643664 -36643464366638373431393962623133346531633030316637643365663161323361656432303735 -34346564316666313739633434363462626664316165393065373238363765383831666262396464 -33363732363333376366623062343963356132343137666431623836393935363939376134323731 -61383437353131636365386532326633643037656631613733353663303436376265363962646361 -38333466633061363365643162333838303761383734313766303763383163636165393161356162 -34343134306635356331356639623237623935333039376466643934343033373461616137323132 -66343261653130336439393630393130343362353236386663346437323038363836316134343838 -62333536623333363635363132623532636434313435663530643939353831373333306531633832 -35653230343335666366613666333133343036393231623233663530313766653861343363383139 -66316533663461316335383935383066636464333132346136326464336665633735333566363362 -33376338666332653237316238346334323265396166333366623332303632343766326264363036 -37313835313630613836616639666131653666666135313865333035383461316461383266356364 -66636137613264656631656135643738663836636237373861366262343730323939333938613837 -32613034303037356663333061666432623934316665306536323865613834303736336661303562 -35646364316361356235343033626430323861646434373235623166356663396461356363646235 -65313965353837363035613638376335623961613262316331333434623963383234653030346365 -63346162303465313864363839653431366437383733343766363133663932326431626136626265 -34653035323263616636666638323938333363376265376538393763393161373162653332396238 -38633965393035616462383938666266373932383437666666613230363166343562363934666635 -39326661616162376130353138623962356635363961363662383961626439393762373765323666 -32323737323065346331396439383864653261373137663535626534643731613234613733656565 -31353630623166383034313232346631643939376133323736653765306365316237373530383162 -35396561306262666536386633663062653438336466386663346136653234373830313331346235 -39343838306261646639363363343832653166336135653166643034623961306464323663646438 -37383965303038393762396536626438303938366335393961623839616238333134643931366462 -32643263653064663738313664303566373530383238656639613735306332316639366439623739 -38653233353637666364313038663964623765393036386564363430363439386232323539346366 -39393037316364653039346132653534636161313265613361376364653764326535366130353833 -38333739353537646138323036613864303332363338393666313432623335376264663166323838 -37626330366461343038333263623464633336636138356462373565663561393066656638363361 -64616362656462333962373037313862366363626138643738306664316634613035386464323363 -63623763323836316135393762626464306631393664316165373432383330373362653337333562 -34316562393030333832366634303061653431356636373438343531393736636666346535336634 -61373261633037373230613861636637623030316462323766346636363166666236663931346433 -37653834323665396432323630613030643363393633616664353364373063616137386564646235 -63326335613336613739656131343466633361333939343166346634363330383837313462653736 -39326332663963323734396637616439373735613766623239323732393333646635663565363639 -32393033363930323165396138633066623733333634663461383134316361396134313639663862 -39643732363466643565333030373339326634663037313930323562363063356162643934623831 -65623837316433383336626465383935383833663535323061666631336232346234353464356337 -37616238343738396139313536656233643064613863636466616664336163363862653031626132 -61396231646639346238333830636535313033363437333734333834656634663133386531343639 -31663433313235363162386364373631623433653835343164376633663363663762663365353132 -37393730656435363164663663363139613164306561373634313565653063666531633063383032 -63333935313439353963306339656135643133366230393437326537396637653339616131346431 -39353737656339326534303266363634623033393537616266656230656330303030333662346536 -63356266306531663761346531333165323434613764636331396338343437343530666338343565 -31326136633436346262616237376366373433633137656461333262333735376233356466643836 -30393936326161353833326362636261623466343062333834653163653866633563386238653661 -33393965656637306636393032306331663564366433373066363366393133643331346331333563 -65376135383464353537656335623439383030336365653466623061646365633233633732356362 -30666361626539343564366531366563653063393132613435373166343061613463343963643166 -35633039336362623133653437313962613533616139653861363834616633326639646465643831 -62376663616132636434383737656462373036636661333336333262376131396132326662313338 -31323531313861313064326463316231633665626334656433616635313036633664643630356465 -37363564633665373131383737363132326139666336356163306630306138383631393562643430 -32366636623431656463376338333433303261386235396262366563306265336165396130643335 -30316565366665663265383066643464323634623030663535666635376161333963373236316637 -65346336383964316331333735633536643761323234306566653762376231373030663064326366 -30633538656261656234323465396161303930613438333939633464636164636463643531623431 -64386162643931646263376433356162303334366632653063316131313732623238626464363362 -32643034303664376439396366353233393230326431383566376663373964373765363562386565 -33353536636337613461636238323630333762626266376533393063393463366262326663366663 -30663733346364356561336533363965356337366265313066663966653364363634616231626565 -32356635663338613139656164616232643437646164643866383366316139373433373234646533 -35653937376264313137363033303937343762633934376463303830323063386439613134396438 -63343961643662376333313363306162353331376235376332366134313332363339346364386534 -33623536346535656435623261316232323834356261343334633763626462663831376462323031 -39626561656464663532313535396265373462643664356337646566376130326661313462393931 -65626638383533346138303139303338643861373461333738376534666338656264623262313439 -62303665356566326636663262366532333665383464303331343837623939336639633733643662 -32653936626466366266363966663264306430353337356432393332346366623938376166383563 -65353833653064633561316433363465353932613635333765633531383731343963336466623634 -36336638623337393533336139323463316534303961303262303166663336663662663439343039 -30333232656132396133363034346130356335336264346663326262623135306364306537383037 -36343438643838613262343166333561613361396233613637363033366662623939333839366563 -65303132383530633937316532653163373462396463653439663435356130326166663664653038 -33623633343738666162386565313635323565613065383563633032613631626632633339326466 -36306433653737643437363363653564623865323232373537653065656434613463633764303164 -39393839366637306534363964376335343562616362336234396663353136636132646238616462 -36376366393037613331363334623339316435313561616662363836366666346565333539663130 -63303662633566613664303038633538623332653761393131313336303930386165336534393162 -38393062616461303833393266663763373637313563626537646434383634626138386534333931 -34393863653731616534386638346334613438633434613265333235616239663538623633623239 -30323936376338376631383835363435393330663964306366346662656562646634373135313735 -34633839313166306665366131343130393531663331616163663462313737663038373433356239 -64323737653231633961313765616235653863313033316534363838326263343931343062373362 -38633733316164363764646565306139363931656562346231616261633865613630646365363762 -65313934323465383064633436626565303730663938353830353631653634316135313864363665 -38623831653464633830313430616133663330306366373133393932336261366466323430643061 -31323439373534646235303136383639623666643564633363303435616331623237616261396161 -62613836353433653737366261613836663132306130643039376231333331363764346532363232 -37356632326162613538356236376231336534653734383734656132323537383639373730346464 -33376532393932326634393062396235313639303866633932333333353337316536383564303935 -64313036623830663331323263316239613962343861666333356434663164666530303964633631 -63376331303237323232393935373439333130363762636539386537653038396163663261316435 -35633532366239363531333633626538343534666434373563326238333735643439393836393061 -30623362393561386261323132336130393533633334326535613032623034656334343864353735 -36656234333735343466623037376235313631363235626132376564626332306537623939643766 -38363333353461366238313930663031393633356636336234303862633331626433363835383934 -61396436333632653632303038316139643837626562393065333137663532366231653332626633 -66653066623939336564626664396139663363653762373162366633356335626634626236303965 -62613932666564616532663766653831646334353539353966636661373538343237326662616463 -36636132396239366530393636393030306130393733376436306464613232376466343730626264 -34303130646236386238663465613866316136666638396163626261656331373566306534333462 -32623135383362363932343637333137333366303839366464666263366363323036316331303333 -65326664313831656562306139303731306566323931323637613636353430386537656337316430 -35663731366631306664663066316462313136636361623232333066646163666135366632326163 -32316466343132383735623565653139316261343361326338333238633534616435373661653731 -65316266316365333835613166636232343632616138386638373432386637343263653935633861 -65373532363864363464643865303461643032356664623935633461336339303437633564663434 -35333430356665393232636266633139613363383337656135373832643865393838653730386363 -61656134613765623133323131633064633636623665393633356436353464653664383134373861 -36363632646164323261373862353966343137313830643464306539363234303833343231306334 -37326332396161653563636339396264646264303761373363646364646436393265393339656137 -30666265323134366263653234666238623361613638353330623064663335323930633863336166 -62646238333266666236363734313239336538613565386335336333356564313437633635666534 -66343932643938643037633962353761633861393535356338376463343766626132613566323230 -39393737636537313362663436616263313737396334376132623939303831386664616461363033 -64386435643430613165346232663630306563653637343739393062623139383364363935303463 -61373161316531306363313434353232383836353962333538346536613032663762333263373564 -61313931666433383430336430353031653930653862376564393336383765663832613161366662 -32343934653233353537623365353638343161663633616631666366616636663937636234303336 -36313262653934393233396262343132663534313139396135363931343932353164303432633662 -36316136336564343937633435633963353561386435376438613838376463666236306563643033 -39333235346634393238376338336664343837383236363738396430633531396232306363616437 -37663961316139333064643930346437363830303363376238376132383532356630636634303631 -33336463656465373166393065623332353462353237666337663165343338366437323262383566 -35623134643466643234383162353534373334643638386233313338356532623134323264396163 -35386638666532396131643866316339366635626237386633356162353761373134653332386639 -38663439373631336364386538363662393966323661323233366663306634373865343030393936 -34626538326130623230623234323437653031316533663166656537383861323365663730343432 -34333133623738323264306436373961613731656335373466393563333266666662656633343266 -64386238396539626530373232633838366132333331363532376231396663306537633230383935 -63343934313438386639386632613630653336393233346533633630353432616636656135343365 -61363537346330356232306236653966393937313637353262313637656537386534613565643238 -66616233333331373337373539366465383132616233623630326337346132303466643366653739 -35643566633563613634616365623536373663313363386562316365663234653861353163336163 -36653163313338643564633262396331326237643038643338636632643061636666363233356538 -62363261353262303337333865626663336362363539653761353764636339306166323363353166 -39343962613636356362353865363832393865643062323538343761396138343537643738336630 -64343637306538313462303862346634363032616261316337353039306239353038383161353239 -66373065643164356134323132653235396330616439616661323938646236376264343564326464 -32616166633034373339366432333066306237366262616438326137316461373637656566616665 -37353331663139626135313839643035336435616364346463323662626562613030626436333766 -35636465326664386332643136303836373563663439393538386336323464333030626464663161 -31666230393661623233373233396165333866643266346266363962343163616238373032623931 -30613132373635323963316639383366636634366133376466633064636130613064633261326238 -63393166383938333038653364623266356635343265336463663761623165326232373734663330 -36393165373765323730383835386532613863306133346463653737376161653832656134643338 -31613137303435376662303765636563303633653139653361346539633534313231333063633661 -62633634633739376339376539393063666339393637393433663536303736656434663662633231 -32613464303663633335323166653735653464316434643637313564633038616262306230343933 -63343334363765353363633938313232336165613237616161353435333931303165646634616331 -63353535313231336561666431656533373737393035353739393162616265396637633836623935 -38373236613431666131366432363734313839366262343637363866373465343430306236353833 -33343763346663656362636430313634323365623034353864303766643666613162313465346334 -33383538623162336332303463643330653633613739316134663430396364313831613033613965 -66363434383165353330623164393331316530376530313237386531343637346262643232613231 -63326537363631383430616238356130323466386561313563353730323332646137393433323633 -34663737363630316532663935393737616336336133346332313633616438366563336161383336 -61363632613034626532633733326333623565383838336438306634366666333037343533653666 -34666238393932353462336530363631396363393833363732326464373438323764646664623638 -63633534323230633833306131613038643932643431346532623937616631396634633962343861 -65373731303037333632326631356566373166636331393937363933303761353665666534383730 -30663762313865383730366636636661366130323862376362353537316335613737336639613934 -34326165333931313935383938366663333963323063383163656466356335356464656662393863 -34343033373033663539306361656437323335316138633464653838646634643830613538313633 -35643633313332356561646665626532386636653733643730323234303638353338326634323638 -61393735383230353639373239343066366134386164643731643839393961343931333637363036 -37626334653331353032346234366163646630663630623538363030376664313161363831656234 -33386161336562666138613761643133613763363637366136646665386634616536303432626539 -36333435356366306433323461636231653837336437343232313832313666613934393330356430 -66306365666633353438656161323832616136613439326636613262643763626139663232616137 -63383762636163373036636338323630653966646632633461363333643762363763346337313764 -35643865313734343564383964626261636435633331656631616561313263393464336230373566 -63393939663565363363633264373964656639323434623061303165636534353761306139396135 -62643531613161353336626639316438616134666662656330623830336562396237633632373632 -39313231373235346233653432306638386462626433333139646434343765633963303661363935 -32366538383633613665653435633264623230326239643362343939343539333663623139623435 -30303762336437613933393736653930333031663864376338303836396533313334383130313834 -62366430633139633638363237613861336534626466663964353439373037623663376533396436 -62366637366136313637353334346264616230363431373761353965343130343039666431613536 -62363466323766306162663033393136373862326130616634643063323866633263643135633763 -38653339666533363839613465366164316631343533323962623438373861613639373564616666 -37396464396136366539383437366230343139643037623639356565386232356264323466313930 -64383831306236303330363462616136643763626138346466656238393737393037626661663361 -36373435386131393330353964363163656330343938346630333666643530353465633735363331 -63366533373833313637383763373431653232393434663163636635663363613365386562383361 -36383361663332343061373765653237336232393965643663313366643739313333343431616464 -33316239353462396235356132656131303264353265633062396366643131633665373233343934 -31323939353564633561633131383430313539613638633762633238323766313030666634613162 -61616361376461346262393734343435643562613636313038613034653562396561323730363538 -31383264396162616538356330363562613633356331353831326238346137313362626138303236 -34323430643737313938383662326162656163343430646562633131343331613338353634323936 -61623061653938653965633935326639303430366138333462656635333733373962616265643031 -62633131626236656232623563653332336633373437663731333665646631306335316162666133 -64316333313865353637343966313035386165313938636337383738616532396633393966313738 -30643339613236653733386133306238303438643362643737343362656666653463383032396631 -38336265336336663331666639666431623964346531313062616135386435396266643536616430 -64626161313434633238366362656566383562363334306564646531316431323633613264373838 -37333538343766343230613533346661343733333335663766366662373065343231656162356332 -66666339376632623137636634326466306133356435386562373939373233333264623463303131 -63343366356566636637393662303135373638616362623362356532636332646665393932663938 -31613238643939303066383337326364363163373038643533336638326334316633616430366163 -64343134616436386330666534616161356165616365643332373139353263306231613939313238 -36623162643436393362363732313236636163663637623963646364386231363133656236666463 -33326638386637613937613935663730613861373166383063653464326236386431366366323835 -62396637626661366636643036623437356665643133396464373533333931656137303636636532 -34626436366161343138623364656564376431386534653334386332626230643633356639633632 -31626139333363626233383433303633303430393162383635323931653232333363363461323132 -37383537356631323161323262653861353233613031383232326134396461613535393266386430 -38636161326435653461383265343763353635653034643462353135623661306234666263633732 -33663861343364323538393133303265353735626232393136653765336236623433323231386536 -30336531666230613132323637383764666435353966323061313562316336366431373332663763 -34303164393365393638653632633266396666643737643165353332356538313161333763376164 -63393765653463363938653365633934383133333766363231343438376234623239303461633266 -65646131623239353632376438373137363062353865316130613633323837356336623664306162 -66363131663765633063363131613730616538366365383262636431623731636437666536646336 -35366464353061663663336465613065653635303339326165623264376238396465666165636435 -63363135303638633437656134613563373336306439356539313565326337366531613064393238 -38396538333338666233663565383932366265316336396334636230306331643331623161663030 -33326533666261373233613461653339633535353832313064663363353636396263373464326139 -34613635633366343063366439396539656361393234383732313965663464663939336263623731 -61343265363734376638393863366133393637663234346637636538636661336464643066623761 -63316464323431653662326662333562633134306361363935326630396634646630383462356566 -65316538376332353931373537303233333336616637316231613735626330666564386261376161 -30376632323932623231333464303864656133386166333231363262653463363637353235346632 -63393763633231363137323632383139316165306239663530373962373635623237313434303566 -34663236346161653636626237386331346136653138623664363833616162333634326430643833 -31323762656535366363393034336138353763333539356230353835396438333538303431323031 -31356639613032383738383338313834666234386265663939343636626130636131613539623532 -31623531643436626534333465306634643234313431303264353364333033343734636235656666 -38383636626338666266613463326133323866356364643035623335643765626665363631383934 -34366661326162643539623839636332303937316465323665626133633366646431393936663932 -31303839646131316534353838626531666533306132663863393431323161623465643936346536 -65666464643236633165396466633232333236626635616561306336393432353739623337353731 -61386435363565373031643733346166303839366434386261616235656161343834386630643161 -65303866346161326238383466613233643036653034646166383235613939353839643535646265 -39653163646134623966633736653438366537643066383836646638636534306136353336336630 -61616637643831333336323535323733623433393139666162663337323961643766353562636633 -38363535376165363666393462383862373731366566653463313166393566643832643061653831 -63336331653636356166326439653736336536383666373435383338313633353039326137616532 -36346335386235383563386461616261616338373364336637363334343835353765303762343638 -30663131373934356161323665663333613363373466326335323862663636623964616237333136 -62646137326339366363633761623138323630353834663039306638663132633864653263313633 -66626561386431663765616139316261613337313362306666613134626631393733323137313130 -63383461643332643466636431376332636437616665653437613964643564353930383531633135 -63316634653038333534313437313336343561346239613534383633646161353035373761626635 -64646163383037333561653932383265636532313239633664323962623735356261353433663531 -65613733633164643639373839386630303164356538653335623636633334343864636132643938 -37373636646364326336366430333831323230316566633432633336633930393531306230643235 -30633331646466613830646461386261363038346432643864326162386161623662323763383534 -37323338386166386165303866373465666166303835333962383530656632616638373964663563 -64323466373262336239336632633033353330626164613461653435346561643362636431303664 -39616436396665363531356162323962666137323561326433303936643465343665386661366566 -64663938346564343363373863383830393637363265383166333135646666313866346463656138 -61383735656562383862396663353566386139633066326238636334356431333633333262636562 -36623066383331313137376464646562393437613031623465663264366265353865353237393839 -31313337336464333730333531333566353332613039313839313430363537376530333364363137 -32393437633363313164353238636335363465656238633132366335326333313230626261323636 -33373238653531396434623963383934343264333639353065663462646336373130323466613763 -64663166643438343562663832343231633463343363623631303039386331323932353264383738 -62653331326138376338353730356436363661306338306561633337323039386266373961346461 -63653939653663333233646633393163363536353635363034616562666633666331303463343939 -35343731373366623437356565656638623639383061363964663266613664663965613566363238 -63666531656664663735313133346439336632663330636137326335333033366361323764643763 -38633637353236393632326238623635666330363964666136633733376331623465353330336535 -63373030356664396137646337383539653166356161386439373437343965376635336362343765 -64656231363831353134663939353533613561636262643961303939343963363030623030616137 -36353932326134656330316534393261373737326537323034353732393638393562323963373033 -37653734333066316230316430646465383835353365376234366430303430666463656463353039 -61366233326164383539333365636663313730333262366434353964396338656231336431393436 -34373630336630373330326465353834323763643464653034616465313862353032303064666439 -62633565313563666238663863343366646533343138313466323032306331666664663332323535 -62303736636366373334303863616130356438383331623939666563653131353934653065353664 -30326364356265373131353335363561363062316437356561653039336632373566666633396665 -32313539633635306136353536303836653932643033353363366365643835653830323137306164 -64366236323439376238663863633034316334336538303764636365336331396263623130353933 -34613433313865306262636662353530636261633038633531656431666530313961643162376530 -34323530333233613931356263396565343034626135333166656231303632313635376563316136 -39343537336431653639626231396434316439663237386266316131623366383765363733656266 -64366531643036613333366632653132333736636339346164633631326139663032656139613465 -36323732373230326434343233306439656465643665393061333536633365316663613765643234 -65666531306661396436633161303531616430333232663762363065656531383430353964396631 -62656530346664346632666336626135383331623964616431363330393938393962653432613738 -33306330316437373161353737353633656235363733326664313037643361633963363139323661 -38316134383533653834326636393337636434373264613933343535356334303131313664366464 -37643432626239626530333261343736313339386339313531366631626361396438353535313534 -30323936393962663932666162653366393365303433313031356333366135366463356265323638 -63366537343332643262386334616432653937303732313930633132626239663438333661653231 -63326433313739636463363533316336343166663834306131393933656632336233366261326362 -64383364313138336464306463306632396130633730336539376164396430353165633031333338 -61373138376135323031363632646337656537616538653132313566383138363764353232396336 -64306562356139333564386234333533336131363761666666353763326133346633323337376231 -37353732333237393834366132333763666138623032663830313731303766623234643437316437 -62646433356230663164353931656566643633343330373861616630626231646138663161303030 -61343362323663376638353866386232653062666163633636343135646363373435326661646432 -30323934613732373866616233316162333937303966663130613337666164633338636638363862 -66343130333333326233353839383135656262653934363935653134633235356536303837363138 -30303932376163636536306434393235363834666636333863363034653439396464363665663230 -36323334376131333266613733336139616137636233353463623037646635666162623639393765 -37316665656565343936316366643131356132303633616434386338303363643031383966313138 -36626165663961353032653937656135393634396565636337303834393563373236656338643837 -33656666643832336632323636636462313331303830663264366336663038626432613462366663 -38666333373233666164303563393765323764616536353433343866626564373530666630303262 -63336336623062303536633231396539316161613132313630663937643933623535313733323632 -34316264636136326532623837303930303635393966393638303239346632326532373135646164 -33623162346437636539613733313262313732353162636234343830633531383433653739346632 -64313763633339326362643063666333383564656262333163356639623131643766363563653531 -33373431613065333936323333356266326163616461353938366233343236613061613235343835 -38646331636232383135303962626336343666393331363666303435306464643636366336653736 -39363230393037346164366630373266356338383732303939363235373736653634383834313533 -34633139623934383061366633643833306363316332303437363431356465636263346233306230 -34326561663939613762626535646266663464376131643966313638643530333862353334616263 -39326461343431656562623238383637613961353533333765306231373665666666666536373264 -37396361663334623765633661353034303935653230613266303033623730613762333934636664 -62376162343139303533383634313433393333373139393836323539323233633139373931353364 -34376338633566623236393431383538316563303831323234356361626232336630386266333134 -65616531356332616539373335633836313138646635323431666436616535323135336238356638 -65636438643762333564343737383663376261373237636539313461326665303661636361306330 -32623831643161363838383532376466636134353161613366386237313465663266333234373734 -37343034316434613863643932663837356131386639326464313939396663313533333830353534 -32323535323834653564356436366535663062323530646662336366363938303837366334393264 -38373539356335653066373630613262633065663036353938383032646464343363393336353136 -61326664616334313066666339623738343030346234626537626434376631313264626133613237 -31643062396664386466383236363531353937623838346130323165636535303836396337333834 -36303564356637653135343961316363626539653161623061313365663838633164396535656431 -39616437383932343736363366666131323035353364303565643662396431373534613737623365 -39643131646362633765393737363837323462643238626136393935393937373866376462663630 -61363430363833376237306439356337303564393965346530386332373965333232333133306465 -65333665386130383837383361343939333036316239616633393930316666656530323133623632 -35333130313832373439643032353662306161326638646534396332333564386339396234343963 -38383934663738313863333231316461363935336666333638666261646565653437346339383932 -38386561396164613763393566643737376264653131386564313362356633363764313664363164 -38616339626632336361656164356235633962643363633632333539643732313630356335316335 -34303434396362303064656233333235313036386539616462383033646537383363633033646339 -62396432306662396233643333353131353831376233323432376131323663386132613966353536 -64383063396565343364333635383861623935626330363861616231363366363533356630343439 -38616362613365316166366638396565313061323930313162386233663830343630663330363235 -33393236623563313235323133376135306533373932613337623833313437653635356533626135 -36353265333135663431633837633131613232623533396138386239313863653265396563653264 -34373136653731663836383062613064316133303637316433666436306638313834623664353665 -63323064653830626361306261376538643964326330666230636639393831346663356166643233 -62623865303530633634363339303164643233636531313439363665636262326135626231613935 -30613137636234613761303164623762356137663430646536313961376166643632346364626162 -37623332386565353362343666613362356537383063623836336438613739623839326435306438 -36383037613463336132303335623238346162626332646166393466313663653339366233633030 -32353230643038376562623862636637323833393939363433646265386364653166666234643035 -64336539376333333434363162643262373230383864393835643137653039363033356235353461 -35313066396230363565613136363035303038316433346634383733636661356630353334313666 -32343661353931333030396132316662353061336531666637663264653332613237663261346566 -64313535316334393136646465653938333432306561396133343235313130396237326338326138 -33366536376566343663336165616537666362646365663765326165366664383162303039323034 -33633034363238353865393866656138333466636664343533666565653163653862306563353230 -38366138656435396333623264353231663930633936343365376632346539313563633163323233 -61663432393761666637633938333063656538393263646432623163366162396431313261633863 -65383635363031366232633962353536623335356364643339303033316561396238653833623730 -36303062663964353339633334363438383961626661306365366435656463613762336234333036 -61653033376563343466656463303765623635643735623131306132373535386265363035353230 -33643161636138663731333466333536636165363336316664666364333633356563663335363531 -38396435666130326565386562343363356335623465656335303530663064373435633333343564 -62383135623864346532666464363439346138373931366539653261303265366133303838346463 -32393131313135633736366334336566626463383036313863613065656132306335303366363930 -32396531623333373463383333316166663734656230353663306663313163613366613962366235 -39666661303564366235613536346466313535636435656664656538316137393433633134633338 -30343363313462393662363937633833623237613966376264393632303132326365383633316438 -35313063353330336261643436303235663666623565303133653861616464313062336139306334 -33633939393136323865363233616339336134386239653364653632396431313335323562366235 -63613735623833613533333561353861343665316264643162376262646136393534316632336239 -65306438366531646162326134613338326632316432663264626664653936303264376564636337 -30353235393635663537356138623562643435653837316635333236333038343939626331363138 -30636561383930636636326133333231313032346264376563393065363266653063366631303136 -34623030396434383134373931666135643762653863663161626266323763333464613939356131 -65626465643137653363393235383863376334396462353065636139616332646166333339356432 -30643833653761303733393337623633613238353730366136623237373833656263303961663231 -39643638306630646234346539353538303632313566373639353566373137626637363630356231 -39356433656330313136653239623661386433343636363364343162306335356239643039323836 -64313561626165653234353435306235383832393165316666396461343634626537663734663330 -66376536356332333363353334386163333963383631643033663966363362393962303463393666 -31363865393533363766373330356364643665626236363764643465316133636538663039623461 -32363165636664643562333438346639353137363134626661613766363766346138633533373930 -65386534323062663165303766613765336630363565643864313362366464353232346364663836 -37623464393738313237363139663339616537616638383964623962393063633639333763316535 -36643965653833666637383334303761323135306466653033393535366532623330363664383764 -64346261666536343237623737306630616132383330653839363565303565303566653235363563 -66356334323166303562373630616231336238386430336539346465653532626661306438343738 -38626235396566633938373464303132653339633039613066383434636364343532303236613934 -63386565373263343538383631666435383035386235623161336639393431396637376264373537 -33393435343463356530393032383164313334613435323366313266666162343630616434333638 -34313432633339613363386534663264333438333830396335653162626239373138343862636331 -33386433646430666366663462326639633562373061363033636466353538363836343638353337 -65343562643935633431633963303665623139653832396532303639363061623163343163373131 -39646635323339666233363935393237313837373566326564643463323737636636333734643762 -61306662643737613066303734316133313066326365356336353735356438643133633039303339 -66386533313966376330613432313939643936383634303130643635663864336330383538653939 -37656136336361636663343962626330366534623338393266653365323430393665343236353835 -34313632363933313361373432363031313364653565343662663536613831383432626136373436 -62353631346337646638633166353065363666326163353166643663613836653864306630343234 -38363539313436313634353331653732363661363731323631326132353465396565633562336263 -36653137346434333537626133386636336564303535623239313261393834333431316435646633 -65333031643363633662663333366133343462336561333864326562316530376632303831616165 -39313163366436393334626163336466353831373865393365623966316364643633663635636430 -35313633333636306166333961386265396463616263616537633033363432373232613663383665 -34366630653338313861363336393231393836363831353337613334653633306631343936366432 -63333636303736376266666464623866393564343434666463373362326539653837323039396630 -32373638303138653532623662386166646638323432363934353930326164616165353936653634 -38333466646162353933343333646535366435333034363664303164343265383236636466303937 -38306239653366663062636534383038373934663136386339336534333131336539363230383231 -38326439393138343630313837313463336633633862616262306565313264356236346539633234 -31333831663137363466363466353164663561343931383165396161366331333466353137396332 -38356230346362633463373065363732633837396438363263343934333164313932633731666430 -34353436336266306237326536666334623364373866313533356639386331336364366163313533 -63366531623139396634363766346534623238636362396263343731633635646563363563353439 -62653261373336393164323731613862396334616666666438373435663464666133336363386463 -34343938643466393834336465383538316433623730323132636265303632383864623361643534 -63623931353139663039396635313963396166653461653062373537313764326233303733643666 -37626266616562663666323230663962313937666338383832653133303037653463353435373762 -38343833323232643266626336376437373937373363383765633931336261316531613835646130 -61333966346536333637366631626461303764353136623163613136643838313834316637343565 -64373536396436636334616263656565313465653639396633646439626534333234636435343736 -34323362376466343265363138386230363930633835663137333738623862333434366237336131 -34666332363033626538373465666135623130613134643732613663306566363764343531343436 -64363833306131393165666232653864343732653834396332666232613233373963323038333566 -36666166653864393532656363653263326262656331653064613930623137616165333937646334 -63386235376565313635333934326665393835616232663065303566663562396636343930303335 -65313639363031313131396135393139323030386537383832366639623430653135613831306431 -33363036303634626539613239383139383861303765643132393665356236636131316134653261 -64386362393862636565366435646135313265336330636639313232343039383965613535643835 -64343636323365326461306530303439643133393738663664633238366466323538636136376438 -37383063316237313265626638653736623239633931363761373266663737376530626162323938 -34623264333830613032613136636534633562646161666564366263356131636132303837386636 -32303138306435666531653633393362633066343433366636336530636363616463623864376530 -35646138623637326163303330653731356235303866303166613934626435656634626264643863 -65633131396231326564663839353730656562393964373263363430306366313462633266316631 -66663530333933616362353438623461636263343031386533643864356632303630633530393462 -61616663313432396364616464343662653439336632373532333332303931613136653235323664 -32353064663832666632373666363837303764333538376636396534353433373565623434656135 -66386137626130663834393063333232643737626131393861343530653832393962353562323662 -33613261353764663663666537656563353861383236636139333334393034663431343539383231 -31373365636139656434643238616263333339393031376462333764386261383637373635313437 -32323736376634663464653834346462646462363133663430363361333036383336666238633438 -39376365316237383431656361666132343134353239396536303238623434653034613261343639 -63613030386635323061636264313561303235356130376632303538313739353361396233333631 -63656139363231666364653232376666636632663265396237366338343266383231323435363234 -35373730393235393265353433633833313537646532366430393933666632613836316433343463 -36636264346336343764336362616139333866613436336232636633383362633265366632646433 -32316132363432663531323462663339373134386332663539343232373830613265386533373966 -64393761373166313831306330333664346530343133613735613137383934623534316131383537 -30323835653639376632653239626432393861633364353365616237343137303261643764653666 -63613363393763656237376366323536636664653933623639316538303535663666386338393739 -38323364303138303335323939393464366264376462356565626163333439613561373661303064 -30333431363863386635373662313531353633333730386464393361663636353334636463326230 -33393763616234633661626431306562366466633464343539623938393134316238353138616339 -32663662326663333133366231633862393030666161316434356362623730363931393666376166 -32303566323131396435393736646539626233653538616561363236306532633536646430653538 -66646231616439393363333065666635613862333865633032356637366664306231353130343961 -36663631353766333964373234376562313035613062363034336437646166616364663433646465 -37376666653632643339313132643535323666633861333265396162613533653039303235386434 -30653563376562393238313332653035636238616533643263623235303433313639393564316238 -64646564613332643035316234313236653365616537626166383030386636303765353730613534 -34636561306138303333653562646661303162396436393737623462653432343531373931373838 -36613933643733613436623030336535326665636664323166333438333963313465383063346664 -36623033643464333832626234346633326566393431313931646338393930633666316332303563 -36623539366135663039366232616437356433646361306566323034306439633237363961663234 -31363232353833663363363565336466663835326363383963396437363836323134626335633033 -65623937396464333633386431653062653133353236623064343738353164646139306465373232 -63653939343561383336633532373162386532663935313930326236656161336236303066383761 -63663130306132376562646632323861616239666665313965383336653635613735333138623361 -34316361363939323737363461366637363562323366316565313838313137643462386363316332 -35363561336536633731393365616338643932303663393962366565376632623833373938653632 -62386435386633336166643135313863643636383837333135343063343337643136613366616462 -39643330383264323863396635646231373133646336636238303864323638396435356239393830 -31333863656365333837326239363666363531303939633064613531646335366331386233343331 -39373733313737383466306534356436313832313365333433376266323037343365303666616637 -35363032343535303930313534666134636461306162313565366539316637616330643932366139 -65643266353234663663376264356365333166396437633631313261636437303364663936356235 -32663038373436613833613366616361306534383331653361383839383630383166643564636130 -36343538346534653034336634373764643062396165653733633165623064323139643130333139 -36643939353832343862366538646637393332343764383361396263326634373338613366653035 -61313164343931393631313835643337623437346536623739636461303466393737653831366334 -3537 +31313364396663636163346533353463616663623038636364623761663537336162393732616665 +3434333865326134343164643636626433613131356139610a303039373364643263376337303135 +36626232643937326635393562653937383530653262313634633132643666666465393735303935 +6431386665313938320a376163373263333833396234613837646431633536363863303837316139 +63393639323933633665306664333339613462653135303934623233326661633666306164326635 +64383533326335386232343864383439326463653733663836303038353036653032303661396635 +32656664663336343264666432383164386530663636326138633166343365616135336561656237 +66333736313166326532633331303237646231383863373536636439333235643531633961376233 +63333833333861363130386537363836623361386134633633383534353330303163326439393466 +30393663623061343561373834363038333066393163316136373636373061353932396464636330 +34373364326333353530366231303833373061363930373336316635623566613033326632303833 +66666231653734646336363330633537383633633333376466663539353561383735353830383738 +34663332366239633738643437306539633835396131396461386364376233656561346264653330 +30373339663364323236376637383938663266346530363965613462306530623166386435663833 +37343833323538353933333532643937613363373031646238343365336161393432333065643235 +64366638643562653862366263353238633430613330393137383764663263356439666565326265 +33373534356233393630636337353734323039363835303834326438303432323731346665383139 +31653538666362636232343136323661363138613933326561633033653462633132643435646338 +33626661653031633634303938646436656565346163636665636532383632313766323139303936 +63356130363366626630386161643566363536656530316131303663663735643434376135333236 +64623164663365326563323961323134643761616435376338663539393666336662316661663565 +30313731623635353135653434303832343034333538656537663663353263396231643533366634 +62656663376564646630366332386434613934663938646139353133666436666538343162306337 +61346462313762306563373736373838303562353330663734646136663435373938336533613262 +34373432366364333833303437643063663963363031313830343333393738393336343863633432 +36643030376164616564323161666136323064316665313662346439303533396639643539623432 +39303139373463313730613461333361366266363533373238356336333961313239303336303639 +33303637333363646331353265326265373838356361383730633938633535613832356163333534 +62343936306366313265356339353361303364383863373935663437653565323335323765306634 +35613361333235346162306461643033613866613561626363613131643434613838313237376339 +62316335633735663961363830633130306365346431626534356564366532356531323933383663 +66393136616230376439643335636166373439663264383738396632366537353466363861643463 +36663735666138643362633836663933616665386638626538373533663839666533356437316266 +66323162356135636361626131623865653434633666643934613335373463393962353737386438 +64636266306464383730336334373433643631333466393965343861343638306431646362313531 +34623933313839313930326135383230633932353933623633343436333733646136646330393235 +38623034653262393231633534343231626630643730363864633464653465656235363731343138 +35376563373730663639313832383831646665326332376134666135366438383765376234653336 +64343431393961623331333164626333303338653461366534306664646665313630356164306566 +37613633373235623335643137313139623131616262353230343135386434333363313830636632 +31363762663333373734643765363366613638356132313763333538333136363537393531383937 +63653731353133646235353337663562326162326464613961383862363461353863393665373531 +64303161323266643636393337313363616536326536336135396533633062656361323265616438 +39386563376530343330633135653037336133306635633564356137333864646262623636396337 +35303731363337626635306234613333383065313962326439643834373863383133646337313532 +35623237333663613833306236613564393061303864626331366363653132336635623031393838 +38653439326464313863303538376536636235666630646232656365363838643538643166643035 +30656437343434666335393839626565303434383462313033343430643531303933646561326439 +64653734383236613139643061316333323363653930363236633038373931636334326436393931 +37353536653462386361626330643236333330626363643466333838323836666237633462653265 +36656262326166306463316332643538646365333865373165633330313461333666316530626138 +66646136346530313662346331373962343663656363633437613564653031383337393839313833 +30666532373865643639356364643636323964303436343735646666363237306630323439636164 +33306136303732306537353436636239623437333664323039393030666537663136653032323036 +38613763653834303062323365373130626663613862333764353234646136353033663664623265 +30643737386465386631666539646366313065326237343430663734313066373731633237353266 +65346666323734613039373163316566313839323135396662373839393764653832613866326464 +31316332613137313765326631346433313331343561393732333238386533303666633133376538 +65386262623433343034333737333364336261373361353934376236333334336631373930663334 +61363230326662356131613737626261646539326431326437643235333863656261316436643533 +30663364306163386431366263653362353531653564613763393164323061653261633165303433 +39383931363130376334343462373566333133386433396261616662336263653364653432373265 +34343936613061393062363933636264656464313738393566656162303534336537373265356130 +33626237353835383666646130613138313431393630623036383635393930613135623430633737 +35383138646363336437333534633464333733643132626130393532643662313762343532316330 +36353664383966373034656365366162623430386162356162383235396137386239383265616539 +34333835636631303938323132636130353035653834313738353931663630613332616364336438 +63643961666562383864396437383530386235623537333762346234333962396464353335643563 +61663164623035636639343939636565646565386364333737653734383133623738313563373935 +63613530656137356439343763656136343462616139346336373632323036323664306637343366 +33383137613235363465646430656230643131666637376331646262633434656235313535363234 +34613130336432353535373036333931643765336534313135366238316431326462643166623337 +32396135396566323963303937346530303535383136316666363466663266663331326631396461 +33313064326532303638366263343936666433353235633436356562336333373332356235643031 +32353136333434626234646638616436383930653961643962393165643066633137656131316139 +35353432343164303964316638306664386336356263666535663937323666343434306338653364 +30636663643339373833366166336331316235363236313837343864643864656665303765303462 +30383332363535636338636231376136373364346263363430653733353664326262336166653363 +30353335666337613762393431623262336433326563313361343133383930386365643365653361 +33643961623636633833643064626263363634656330633136383165393539313139353838663263 +36663530383434623263316136616464393033383137323163303135333539306338393163353832 +61316162643132363534386563376432623564333732643739393733623061303436353731376365 +32393362323037383035353265356530353661333863386533623834346332663935396238613639 +36636537373432646162626234353036383863343264333036346362316536653331646133363330 +63363432313463653362666263626366643938323766393764323831636336333965623330623232 +64646333383461376465373563313361316431666566316235306434663234633261303562613765 +34663064373432336362626331353438663235306335396237663639336361316634306362376463 +38346363313439376361386530343833666532323562306663666434323565326430633834663530 +64376432386164376538653535643961653431326439643264353236323839323637333662346431 +61323731353139346664396635633436616332636536656530333939373663386334306364666465 +39633364343036356431336637663035326261613331346430366331396361376236306530343739 +33666337313538323733303438663133323663393035646638666135343964633730333031346334 +64643161393236333533663737363538303961386265373365343434396133633638326665393065 +38383062353533373861626239383935333064326638373832333332656138646133323839326435 +63373463636364363130616638663136356465356661326637343336333331333266653762393431 +37666166343330383535633032333962393362643831613666383662306561336338646465653633 +39303239633435326663623932396437623061653530343530663239366232663166343265363662 +62326333363037363266613164396133306537326633303938666432636235336136343965633138 +38346332646639653063623339346234373664656362643731393732613239663135623134656661 +31306136323030323737316634643835323033646637323266326333613063653865356163656138 +33383561323432626665356562623731656230313565643664323963373533376661326238663865 +63643434646133643663303864353132333530616234656537656233363635346234353064306533 +37653861316463303834353134656636356564366565313939663735643666336263376634633662 +36636335646532326330336261356362333461346339303433393030383565313164656634626133 +35353632616664633432666532633934623931323535643763346164383537636132376365323262 +66336539303334613261353733653461376433636633343063346363326565313132346566333638 +36653862633339303636646430386562666639383638336137346463656563613863653863363033 +32643239373832376335383235656333333931383261666135373564633037373764333231663432 +62636165393837393936336466393234343639383138353231383731373838353737346136613164 +36316261306430386234656266643531613832353036633032333431316434633538353139393765 +62636231646361313464373463306434636566663163383531623735346136636134333339646261 +61333564383536373165383463363461343166366139616331653234626166643636643633656662 +30383965613637376532643439373365383039396530306634653061363865373737323239386431 +61636135643564363936313135373466373361666463623333363739633739323061663237303365 +64313633396334303735333132343563323036303936663130643232386265363166303562373665 +32333464316439663737313438653537623065616336373865333362383662363033656563313632 +65373937613038376634353061313762323266356530656463303339356335363666326164666439 +64373037666532303334323262323834346266396431363264323536616531383561373338336466 +63616135663233356234386333333761626135666130303933313234396535326530626230326138 +64373139363339346334383330663565636336373964613733316235613761326132346464393831 +31653236633036653839373338653332323163613463633362656139343233663633393836613131 +62616531353333373764636232633230346265633461636135323832643661303730623437656633 +36333665323765386265336664373966643336393033363234306139343339353066373164306539 +36326638313464366561353261313466666334656231363466633666613862303635393566356364 +61613463626130393361636363333630313836623238326534373733663734383632383738613163 +39646237663132363064636536363834373565316433383362376338303963386532386365373638 +31633766343166303031316465343638373866396436393838613166613166373166616463336439 +33383062346562386465303534616463396635353235623236393835626236626236376366626366 +35363732633538303966623137666461333434343938383562396235353162383036643637356136 +37363134323639633961356466343162353433303438633531616465323938636130396137653130 +31346232636537316363316161363531633537313034333637393364303961623534303131666130 +37656638323265383135646465346331633036393134666136336633343064646364643930306163 +35626635623265303263346230333938646131366336366536353534623963663030303838303036 +35306165613335326134353030633036323936356237376631623566323738656139336466663831 +62633731323362323333356463326262613739373863626532616564666262636164613031396531 +33643834313637303034643232386139303563366261323762363331376363613434616239656566 +35343635666233336563646137303265383938623864333062343662383766653164633037373031 +34326234333830343630346666316337383837623865653931383436303436346139343831396139 +33303937313432656130353439623166313437373164336339353339393639303234313033303233 +63343537363164363164636561356635636332306562373063383136666265396334633964353262 +32313137366161303032306434343438363034306630646437353036303731656238383335303737 +34366435366462643333323436333037393637613962363766353361313066363630323932346162 +36396566326265363365376332383161653232343337623131633538393664393234646563356537 +65303163313062643233663631396165613038353733363362626631396232326437366664393639 +64303635393862376532383438636362353661306165646465613837323939386434353466383061 +35303065666336393936653531323939633464333033323863613031326563343335656164373264 +61613932626262616363616337353163636335623633626265303564623436333965616362663438 +36303030363239613237393433646139373038636335646538643536386561633564633734636538 +63383835313432663433393133623365336461323861623361303062376363333630396266396363 +35636238313035333333663833373533336530393135393534616564653165623339313963303666 +64666134373239663032326266636431363931323633336133383264653362353666373930393265 +32613265663939623034373362303965616236653831383466393266653963633637303433623364 +66353933323235326636383434323664663662653665623762303030373536646366323232333265 +35383765616136316139376230663330363639393038396465653966313931633430623662653830 +63626364306436613037613537386433366537363463336532623333636465623638616332383962 +37376631343961366539306361386337616364356534643963623766643265613364646462333336 +39613432373765303362653663623561363938326665346333383865303862623734353965376238 +34396335316266326639343536386430396361623938626565623236353664363736623635306139 +32333261383732656531306137363934393566643566333534363532343438633961373734343762 +31326139356364326264646336366332663831353632626636663661353561626566623936343431 +65636432373238343336356536316162643339323439366530636130373535633136303535623732 +31343035623336366237666565326636613138646561613233663738346332313730323334346336 +66353963613632636538626433393937373033643338303733633962643964383434346363666533 +63646466363431336137663438323532646437316161623934333563356165656234346663383032 +32633063653539333730646236616539623332396531653631383133636231363661653439363638 +33353632313565363731336266336362613035386138653437643131373066356439643732643964 +62313335306236373739633531313233373964333462623663383131323633623337666266323665 +33643666383839303366333561313566306139336564653361313265393331643731623265616165 +34376234396632626137373335383463366335396661326362363134376131333333373866633639 +64666130663163643536343965373166356261333330313030663664356435393035396562623531 +33613733323864336433373834353436633537326132313732616436623432656664373566613436 +39646566323335333536323636643765306366343633363236336535323632303433323664333634 +39643830366238303830323666386431323830616336396163663632333232396530353233636533 +32633764643064396463376363623638306133376664663966336636356263356235313936363436 +31363338633634393633386538336535633939323661643161393638346438393164393832653239 +31613031616564323361333934343437366364343661623966393637636438653536313032653030 +38323232393337323332636661663233653530373234643237333061343861336165646364343663 +38633263396562666433336162363336313464303666303934653034656231333030626536303763 +32633636663061666361313730353738353163323839323265316430333563646639343737633066 +37633337616563663637623133393338323033316139346265336634383164653361613835616561 +37383161316461383436653231343434666134636462393462313932653937323031313635376165 +65373939613235383866306138333033306134386636326562383230373539316661623436303335 +30323562633237326237393463613662623163316532646163646630353131626362306333396139 +39326334326233623165383135326132666266383664306433636630376165326566323239613835 +35346263353534616463383133386365633766303434383163343163613337613565643863323565 +63343031363962316136633166653761396666613633356365333133386137366264653039396231 +34393731633564393135306664643034306136343862363636643165373863393363643336636663 +62363164653730373738313965313737376364343064393565356439366539333335313837393936 +66373336333662386166663534663462396365616566636635626562336239613434326132386335 +61376366303633666532633835346161356134316266313735613739313562316536333135376632 +64313235313663393964386565633831616331313739656331313464393239376439363730643863 +61343938646634353135326334373663383738373733343439303964353765616663316238623430 +36366336376436366364626636363265363630303232363335666431306432373962376564363461 +37323233353131633136376632613439363466316661333666643762353036623164636437366232 +62363631643266646633643538316164346134366265333461346365636238626461306339306133 +61333130316561303032393134386530323038616238376663356235366431633164353830623530 +30393638613064363963383966373838313539663931633831396331383036656565373437303431 +34306165663566346261356635653663356132646165396464326231653630613234366139376132 +34353765613032333339643265313134643461646664663436633135383332306262343862396165 +61613665363930656438633835313264303361393535386533356230323131313963373363656531 +62373538663435616338343838333166313161373837323535383239633063303835393736323666 +32316364383830326437393133663064316438333062633438656561373330376232333232323232 +63396634393132306665663361313937306433653562646561653537653934353366323133303833 +33663765626533376331333634306433356636313337356138656463646638333563346635336536 +64316166353264353834666537663661336165383032366235623665326664313737396464363836 +61653362363436303361386136393562626434626165336362383764393234323138323832653761 +31623166376261613464313565663738366230346564656236633865663831383034666666376132 +30363437623263303366656565353665646265393331396433616461623536623564633336363638 +65343265636533333339356630316366343634663533623430633563313130653163363663373565 +34366237623833363863303837336565396461646634366136303465343130386436373033343834 +32323762393961663761303538666439323264363231663263653665393635376362326336623565 +66613862626436306466333564356331386364323134333230633936376131623034653432363761 +66343530316335386233353537343431363336386138353838633837626436653966386361393763 +66636666623037643036313034633537646466313930373230346134663032323434386565306131 +35393463666536663364396166393534323761386130383066663833373961313237336564306630 +34363939363431303366646230653435303437313636373466353930646565316336376264306165 +39663461343634373638656431656232363266383334653664616561396637666339386337356131 +31356333316363333336353963356633636162646462313131306132383138303733313032643466 +35316665343231643733363232306336373033383663633334346162336636633162346535616536 +32363735633963363037323439316266323535643832383335343131616431663561623736356637 +39663465373132633363623565363235653833383532356339616266653661333264316435323962 +65633462356438616161353436353831613332303233663335343538316266303433343537306130 +66613263373337646563353566616438656566303332396230306265623239353134656534376639 +31643064386131633430316262663431646661663963643736373965303032346563396566666465 +62336538313035626263666332386330356230633834306337346131306235663863376239326438 +33383137623265396432653134363161383031663062306462346433346135653566633862323437 +38663430346239303732623635353738303864623634663163393166666439396135356631333961 +37306431353836386138663334303235313731393131653262613936653936363739373637646230 +37343434393639343862363836633739326164643932666432613764373635393465383630303462 +63353631343338366133663432643637313366653765663439306162643966643365326566346561 +63306331386133393634303035393663613761333462363832323866336465316533323832613236 +66353934646136373438333463373638393561343130336138633731303161376139376232323439 +30396337613163663535396531633539393765316439323734353533303036303861326335343764 +66393333386465313038343536663437376138663035333061646261366266333134343863633636 +64366538333436396135653237313766633631386531336135623331653265383462376463313263 +36613335396661613236366632306637303434396136386633666132373061326134346232343132 +61353530663965373961663137353465646265356534313336383930666364623361636332373139 +39623933323835363537353839396538303238343633393863393832393464356364336466366536 +65616366343234316663346362363639303136313438643432646631343166333262633533636538 +65386164666366616662663234363239396462663666643534643365633962633139343037303766 +62663162653062373835613564366161343030333363626538663134313366356366373863343531 +64366430353038656464326561383439303564616531363265313231653866343838393432383563 +32313238666261393263653864643034643233653362303866613737616462313635666439306334 +31393263386439653434303962386633386463316231613261333837643539643461363761373261 +65313262623865623639636338666434616632363765646133303031666364646461326330383934 +33363837653962626135373730626162336365303665636131313564306532343062396435383932 +62633037363166656234303363396531653032616264346631353737636164303461316230613536 +65663934636131383839366565663130386333643465666366343831643562336234646430343565 +39363865326535383466643239353835366131306234383034626666316631366638393834633662 +65336632613636323737316165303937323734666365303635353665656636323336616662343466 +34316664366232663437333336656532323166346363386338323664666233363264316661666365 +32393861383834336631353365313832363330623364396562343564613862393538623131613339 +63303563383532306163376637626531646630333630643534303431306439356538353231313635 +32376563396332333136626533373231316661313836376532643039386237373066633263636531 +63356634646664303762343537303564343363363864336461633566333638303635376561363937 +64316265623439396661623862393639326631346366363561336561643161303966376135306631 +66323163363834373530363134393464663866303330623530383839613566376162613738363433 +32633633626137363234613061306137356237393566356264396366666566383231613332306237 +33343861646361373634656563666531396137363531636230343936653462383632363732643130 +35376532316135306464636261636462656464363061636165333835346538303564623631303539 +35373437396635363337356531316138353961343134303336653038306132613032373263636665 +33613931363066326230366564353339396336656239366539373737376134616362663963366264 +36343266326239343836343136626130376663353930653132646366343032613231643839626163 +38313938626535353735383939626666646439616138333465616239346361373437626139383166 +31323033636136376537373661643965343033363861643065303330313864363235316134366436 +61383930333531633130623033353532616131643935306635663962313633383932633430646238 +64653266313335613731373137613332643436386236333236666561313965386432303731656238 +34346662326437313333313939303533333339386135653161363366336335313261323136313539 +30313333326165326637376666373835626531633964626361383336623066363066313934636438 +64333462376637623130316363633133643337646266363736363839383633303365366334363436 +61313765343433666238333363386434373539393539326662383261663834363337666334373466 +38336461303763656562343133353139633033656130376266306538626334366564646332323333 +30373136373137353765336138393138306331643539346463393162363134353963366434333734 +61303062303032663661616465376461663832626335393465376130373466353636303033383733 +62303735383964363230333661356237383937616634633166663538323363633535323634616532 +36313337663663383938643331616639613732633630323037383339396332623231313531333331 +32343037653030663661366533333536336633373563383536656235316162663537323733636263 +32663939396463613732616565346166633238653838336365373838663637323439306236376535 +31626636656632346664613464373636333233656535346635353362363237626231303537306331 +37353365393534643730323937373636333135336539623262396661393530353330366564373662 +38333162313965653833313336656431326635333765626632653633663963333439343038323062 +31343939663161613338633036323836653436336532376266383230653137636432393761613335 +66356664373830613934666266333131393436623165373938323265656564306462663037303630 +36653433616233386535366531353733643130346265626433653563353565653565313166343466 +65633463623062373934383065366334663634633561343866386530373461636232313661323361 +61333263643433373834306164653832383337363236383363383137333232613862663761316239 +35363236363031323636623739646331333435306235323365323866366538646261613461336233 +64373936363463303662316535303066363864616435383461363164636639343965363132323561 +61613566316432326266633131653534386565343332303061323033643933316437643939376530 +36366431353432633834313964616264636536383632386330356335323733663166373334386164 +37653466393865666563346332633739643063636538323761323139363663323734323738343533 +62343362306432656237343836383530303630636230383665366532303136666635323565306364 +35646561393462663565343362376136646634373530393936373633653137616163663666363537 +64363465346564303965333561396536653234303632633766353362323030653334326230316465 +30353434356138623439356432303131623131633763396337363530623463636133356639656535 +33613264303439653164373430356536656331393161386534343635656534663862326564306561 +39343865393562363561306533616231666330616166306166303163353766393033323663633961 +62323864373636613139613835396138623163393466396136303437613738666638643335343935 +35663234333630613861383532613830663335653534623537623139656562326435373632366637 +39373638653665323137666361613030616132313039353535363330633264653439313432656236 +37343965353033363432613961623063363436386433383663353062626432373534626366393633 +34383535356365643430353563663864366464666430656339363030333431633133336265303332 +39343865323338356563613530656638383537386633653530396638393365613435666333393938 +63393961646632336566306437323236623730323737333536376531633462613263343565336136 +37356534326334313634636362343439663965336166383832326331396330343531616433643732 +65396336623163343037393234373038613932666265306130643064393864373166353339333164 +62623962653333613137363635336133613431303738333764383661363964343366303638396230 +33383237366161376634613836386239653036643766663466636333623861336464333133323364 +34663535393361376564396665323966343963343137613339626639666433316433656362383735 +33393862396362626138373637353761623939393736363133323734376232653232393864623865 +31396439623264653362326536356131393332646361333364396665363838316139363939353433 +39393031396565373637646236313531386632646665356565633034613832306130363635323639 +64633439373637623064366436663238633138653539376238663834636565313564363562646639 +37616137373437633031386137323361313638663330663561303533616537326631633232623538 +33393333353733376130366235616134623431326361363837386164336465373161663234623939 +33303834313238366434393835306232613963316666396136343735636238396433336261336363 +32366332383666663234393632303461383436383863646535616265616234376137656265646537 +34323164323662323638623031643036376533316364333835303337353461636636366134333763 +36613232396265626530363963333335623366343232663031663632646633386364393832353062 +62616431653435393762353433356337323939373536323239393566393234326537656466343335 +38366661373937626632616635656134386136336663633331336239303439343265336164313139 +35363965356235303664316332326236376536363932663562666430613563326564353530616233 +66376139626633366332356538356434393063383766623066653031353866393065303836616663 +66626636376331626138333965356436613839613037623863393336636533353037646632386461 +37363761366338633637656131333631376562393064346536653135313932623933623066303537 +64643937376163386565353637313966663461306161656433393135333861323035313235306431 +34303064653336656231613030323736346438636561383237396266373563653765336164376465 +33663838616663646433303664383036663361363333363064623131666331633031356636653031 +64643963626638303132333937643433646439386635643238643439393239653637656562373163 +39653432356162613566336434643238363938383039303165346237376630623766343165366162 +39346564616439613365623937303638666266626434656662376465656463643261356636356232 +37366430363339633939643539363934653336643266663537613336333137353731646635643330 +37363933363664656336613164623265316437316332333366663338303665383135366163396237 +39313634353630356161636536376132303933363437653161303833353963363432393730363935 +61353038386339336639326437353366313230333339393831303062333533623039306631346262 +36353632626364613464373363313465353932633562616335343133393362613836396634346630 +64666535346130343937633830306130313462323734316238386362363636376264643235353632 +64663662303532646331653061633333393539656331633236623235613434363662333435616234 +37386532633234646539633638343061336566613161373936636265316235636165653362353764 +33343039386136666335396635303139343138316233656139666437343336323838353637636265 +39636431353336643335616664323637626539326636356531373036633866333831393261653032 +30663234646330353362316531613364663733333237316161323534656365656231393230613639 +63366335353066646462303264373562363666396632373364653231323366383731656330643563 +37616435366364613133373664616239316435353031343939653462666539373639326162623730 +61333863623237316430666365363363656332303466303638633865303264653237376365313735 +39656531306538353361383136323666326232623838326264363939663837376632353236656164 +37326462303333326466393831383063316630356133396465613533373436376138343263376132 +66303436366538353965636465323363353831363838393136346435353939323831376539323436 +31386632633963383834366433663838376333386265623232376264653862653762363435393464 +37323033313861363738663331663462343032623035633536316235306566366133336163313639 +34393533646530623532343763306239363635303665373837313433356365633163646661656531 +62643035366262653534356139323238333637323761623636646131613938396634383465353437 +33336365363465386234633430333535373333363338333061396463313463396238643064313533 +36343564633265323530383930646433376439633335323836616266633066656130646632346338 +63626535376339373564656534643565623463663632643533333565623033363861626337336230 +37616465623538326665613865366264316363363435326636396366313465663361626236636266 +30303937376133653930383133656135326434653033373862346239666365393666356339646163 +34333636653765643833306630326533386436303632303861366161323062373530613763633439 +64393966636533303831396165613439666130373664323035666132333731643533636431353566 +38393766363766396631643834326534626338303163376431616334616461393135323135316630 +63343630363930383933363238663836653363363237663931323835326535323461636632326465 +33646138373430363361333730316430316339366131613430656363383935616661376465656430 +30653262366634346666616633306666396166343437666664626537616431636139643161393162 +65666435386333306634613436336337666164646261613831353830666662356265386661386439 +64393238653435313337363661366331386331386435643164633264373161656338626131666334 +38376535333230306633333532303862383633656364613135333233643638643830313565643133 +38323831323861623164353434393466346339303530653263386233343131623365356165346637 +37343233383138383066653365333538313233316430313332313864356531656466373737396162 +34373134636536396366663836393962303034656162333336666637373030623961316631326337 +63386433623933313135646438623339653437613232373961356262663934343064363566616363 +30326637376438666335323531343532383530623763363930313332323532383837333566663130 +36393763343966653766313631616432353165663730316166383931376462336636643762373533 +37373463646536366532646465656535316164333032343134356632613237303435336463363031 +37643764643034356430323938373966636361623632633333636335323335326662373538303838 +30373233383831373833643963636236363766643164346632643333323062613964373966386636 +38623934383733366331616166336461383230356563303431333561303132373363376266383330 +65653931316635303166646238613137363339633734386266643065643263623463656634316439 +65396330663732366465376166323566643636366165613630346636613064663534393835396631 +61613465313333623931353065373732393766396461306432663833396537363732353663613464 +39383665626635613438646631313661393931303263353034323534633565333136326438343834 +63663638363437646638663835613232616335313133386630336162343333303737356337303733 +32323932356433383761646539313936396165326536326663613235613937366661336233376463 +30656133393163306438323635323830323532316162393564646333373534616262633135373136 +30343633373533313831626137313436656134333234396136306465666234613036343164653239 +63623830323338623336373435366534343630373432353030396365306131353462383631393463 +61643132346463383235663662623266656534313434666631333766613234313337343436613338 +37373266303637363933376638316135343833303632336630353638306537636261626466373732 +33663738363935356331303733343939376235343766653237613531373662623366333136336333 +33616237623862316164306232363931353438336135336564636239363238623739636361353030 +34653234376133313037373532666437313539333866303432356163363837633462626266633837 +37303433336432656362653131356230356330633732386130623031346666383839383036623339 +34353035323662383839376130626338366539643532333037636563313532363562633238373564 +64366163373934396366656338643039323033383932393232333262393365363065323735353465 +36316632363930626337346565656531366134666465316239363564363565373766626566326263 +61386461316439623536383136333238643163346238373532363730306438636565376133653361 +64616432376564316435353837373835653730663363366631646133326132333961316336626132 +35346537303434633664336234626161616236653130633239653631636133353032336630626265 +39393766613432633035383533303735396634633336396664616266373966656137616365663063 +30633938653031356638373132306562313165663538613439393465316537343635333434333734 +37646561366164633464346465373063303262663330366136616565356430333239363862613563 +65633234383431393936373637386165623864333263646237663336313161646536366237666633 +62396437636435643338613930623135353663303634373036363730626262383231613665303961 +66666531333831303964636337373638336136656164363336373661326438353163316238313636 +63303363623864643538653433623333386362643839623462336239643533636135393232393936 +30303630383533643461393166636138376531616262656631323639616437313164396663306436 +38386533333666666338316662623033616331373763393966313062623866316438666437663365 +39663736656365633838313433303564653664356134376430636436363835303364383134653535 +62343138333631653561323130376635313539653239366130396262303264386531333465613065 +65653262336366613139616364626232313166636665633266346662643337363862363431616334 +36353431316431366437326537633161313761346532643865353663383763336462393438323762 +35323462666130613661393463643838356133643264303234353866343830393130306232653862 +33333066363236613339616333653964303562396430643637396430373532653463613665333032 +65303364353733626430353661383634313638633565333535643262333663343132393464653030 +61663164366535346666626330366430663363363631663265636637313431613635376666613038 +65623863393734626538646362616361323630323566663531633535363334346434313132386564 +39613763316563613639353162303637643939303539643934656532366336616330656461353336 +61336233396630656431363262623536393332616664386530353037323461346630613338646635 +38336362616433656362656236356638666136333231663766316534623061643135353132666236 +61346466636237316439306434343937363230636538306466646566623363376134326630323037 +33336561616134366437373430383762323065343638653535323764666461396139353462333732 +36383232376531396566616236393562393461383566366336323831393163623738386566373364 +33383563643566643737636535653861363532316161373730656633323032653535386238386362 +65653633313331656135646637323762633732353532623735643833633633313865623135316637 +65613565616338313563666363333463323761336337656537376532653466356232313937313964 +64316138386632613738306261613233373234306435623131643533646161656431626438663936 +63393561643235626439343062653761376336363235343032393030643166313066333562363962 +63373562656636353031636136376366396337353463633433326165326530323562363432356363 +35333732343335373534373230613935313862623233653632353066656363656232653662623830 +62623238613838666366316463656134613634623365353463306365396231653761653432353731 +63333739383931383162343761323463396638633231396333316536666536626131313266356233 +62306234623334393333323736363838376632356663353164393362613832643234393265313537 +33383164613537613665633866303735323436626564636139356664663463326332326166383033 +37366364633163366234626434653634616532643766646134633532646263316561356566306230 +63323138653032663138346432333338633763353164653961383162626330633334386263363465 +32323237366537376665633863346430346333643363376264323835306161653437663138643336 +31306263336330626433343733333931343231343662333937363038373561303965383736646564 +62663438643339663831623030346130306233623938363737336663333036396638383563393037 +65306266616438613034313932336536396564616162383566643531613237616539613632363463 +66333163346566663439663262613934623133643163313639363335303462656463613564643464 +61626639306231653534343334323732653936623839323565656137666338303338326338346537 +66326236613662663731353366623862653063303130663034346137323564343836666537343930 +63366239613862626134323837376638326234643634353436383461313732383636303764353135 +37326232653136663335643061663139356461313930383762333538636232623730316362383966 +34623465323834333431656539663763346662613764393139653533303864373336336262653436 +37363433666462323138323063306162666135343766623562373565623664353163356333636430 +66623937326633363465643737653435393439666235393166366533313835316662663461373164 +36646662383661333039626533376130343039306231643465333737336163373365653231613838 +32346666613736383632343566313130363236303739363635393462663934666163356633616162 +62313666303637653137633461346439666363636631326462353930373231316163613537383165 +30626332366563386437346338353330383830303834613762373938663831333434633937663936 +30616634643030313664306533633038393331336630666435303330373932626138313330303135 +63396330656530306133633764653638663761326363663865376330356131623035386239623236 +39396265303637363135623365306434323739316661393435373731306438633665333864666131 +34643235396463386662643837623964623332663634303430386662393262643735396334656366 +33653230356365613865353932393963326262323365656561363338336632323837306432633135 +65313062643536616236636565383063353662336638366530313633616538363061386663386435 +62323631626463323564353939643664373534316363646465633438313464383061653831363364 +32623865303637323433666665643662393438383231336335373237303638333130316231666139 +31366137663766383237623465363734333739376232653863373539663337623633393434303765 +38653638336563336661626338303863636263393833363062363232306661343738303264633465 +66333531303432376463323466366638613864323439613136323866626433383262303234376331 +30613838643565313861626235626534373831663566623364313837383631346265353562383964 +30386565646537383933626432303762356530353862656461363030366639313333353336363835 +38613637383633633733626638383933616566616534383466393735376565306438333461626162 +36663133363439383862623838636230653236376537633863383564393964633236306637336465 +30373034663831343033363464636464373633366539646531633062303663353131636465313332 +66623665376534366134353330666566656438613439656636323564613564663063313331356133 +35666339633264613236303737373232666333386535313638326232306434356263396535303062 +62306230336531323435363638663261353264366363393731313038613661356264336166643135 +63306366353463353934623039643037393966383731306430623362663038376565633231636166 +66393262616635396138333561303038323633663834386261393966663533313834376535353333 +36386664633932363238663766653237303432383330353763373332313237613831636532326230 +63323033663730393364633363386263333766653431623538323563353235326336373663623261 +64326335363364643135336533386430636139326337346437316436326231636532306338306161 +32633236613433636134653965326236653062363962613732306266323834306430303639326437 +31383439336664643939346165393936616339353437666534303434613365636566393435333665 +33333130383036396566613834316464616264633966396138306236333665333165633032356231 +66313030343530613232396562343864343637363035393939373936363936613934636666303464 +31333533623365396431393466336165656237366630653763336134363536363130323337383535 +32313938626433393835373939636435353633303636313733653133363261376334633764346130 +34333862633433613564316261313438656339613335373237316461666462356536353735383064 +32623233313862306365656365626232386439613262666563636466373830633436373832613863 +65656531366165353431613335323861643961376633356136666332656634326361366464636631 +64653161326633313630313431323635373831313938626638663330613562333863343235636366 +38653836366536373838653231646138643536353761383136653563373333633737363263646564 +62636266343237393766643965303561666463306334376665323531356430303261306435323466 +30623863326431313862623765373666336639616636396530656539616335363364323939393331 +64303339383565383330356130613932626234303732383731383539366237346436643138633730 +61666132353437383330656333353837663964313631303331356330356539356435653264666338 +63626662373962613836363237356230383939613434326635373333343234646663313965363730 +37393336326539633336666666626533623531343365363563356535653331616336313335323930 +33353034356337323838393864333530303366623032316665366261663638333966393337326561 +39333036313035356164313566306438316331336431666336663332643664643031643030343537 +36333364663331366465316634383030623165346237383336333236633062376232333939376237 +38313834616638313064366438666138356336636535613534313262383066363439343933383931 +65666638373938376133663839313064383966323262626330633665313462656366373563306565 +33623161623838326434666365656133613864356431323432653462346133326430366236333666 +34316462303164656164393465396133643061356364363135626534626565336339643637343334 +38646238613531636532356466326263393238373962623238346131343737653834356535653834 +33653266343730346134633831396361353334393764353733373636383631333838336331636636 +64383763303766396332303830363132633361646531343261383339346537613961326231383732 +32306631343739303431633639616162356461626466636336653035653332313831653364373839 +63393366616438366632373231363166336465323765613632393039363765366239363031626165 +36336461343665663964323738316133656530316663643831613331333133623231326661346236 +34663032613733376664323938303939626238373437383233326630333634383232303264313939 +63343665353435316238313736663735346237343864646334383039656362313761383832383162 +39643262626533653939626364613730616233613938626566363464633530623431613865336537 +62306532623061373135396639643736383536356133326230393239613937626463333831316431 +63666333393237313061396637343037336436613133343039656265363739636638393236306535 +31336430356538326136386633656138373637393833393631303838643736623631386261326161 +38366463643734326331663465326136663335386561396235393066333834646536326562663537 +66626132326635636430643561393134396435616565376134666565353038613637643165613935 +35363237366165613964653461323132323163623536393031363638353136326635633462376537 +34616137636162346266376237393064646461326234653763653637623630386661336561663066 +61333063626132353036633464643135646632306136656331643432666336646536653736386666 +38623661616435303439373230616336666537653262613234633730613331336166613434343238 +34653234323932343939653164386638393537303663633132383963666362653530613138343362 +33393331356338333634666463663932306432623361666534333065313764373537613963656331 +39363232343264343863393431323564653232343732363161643564663933653965336632653930 +63346531346235363732326435353038663361306539336632393330313030363562626666336562 +36303231656334316337386230633339613533636430613739393139643061393361313937356238 +66323933323934653636373239353162363034323334333030616562393832306635343166326534 +61343130633665616630633838623462396266303039623031313332363631643861313230366133 +32623766343363373034313732356565386637303331326133653966393738656535613064393061 +38363530636236376235376431303962336231383635393163383333653963326632343931616166 +32343666353966383964626561376362343265666133633161303131353438653939383536353232 +32323835386431326138373239393737396664333538333934343534376431623130656437316238 +36353131333966636665623139343636356436323038366132643265643835383263636264353934 +37356564313036663035613834333534303839323166666138636136316631376235646463656536 +31343033373839396564653966613734623265393133653932303362656534633461393238643131 +30323566633862626232363439613531376561643032353365623362393939323931376562663463 +33306530633639313738313662343636633931643736343664363362656466646535626533303766 +37373734356535303037393666666363626661376132363934633664343864353133356262366565 +37646163323835633965343932366165663831663035656437363235353535653165356631343937 +62626564323137333464313762333966353666663338396566336639333133383838353739373164 +64386665306164366137373265343165383036623761313339616364666232616536643837626338 +35656366306438343933663133306264323962653462336336323239633061663030653537666533 +31373733303763653139653432663636653837333964613538396661376235366264346663303534 +35396264313936656138373865356532613563316638666165643262316465616566323535623731 +33646163646330376230363165363239653464393632663062663536636463333563616462333534 +37613364306533386633613436643266343132376636336361393833376161353762366235336561 +33373165393733306162346535306566653935666533623237666131623735336162393334653662 +39633265376530376237396563363338373434356237323034356634363265666230326533336238 +35303634643339633436343838663461343834303939366263393938343461623136646661613466 +39353230616331376231303936613439343965643931623330353633323736376363353031316261 +31643535306534626362633436643137646232343464333562326334343639613634306262356264 +62396436666131326637626364626433396262663061356635613732623061303765633065376336 +37316363633034623838393635626161386162313165316564373662386333353831646439653764 +66346432333337393666346334613430623739313364356434616261343739393464376362373733 +34373938383561363833366337343162386635326135646532326333646133336630393663666532 +62666237656662336438303230323839353031396166396462356563326332343232323466616234 +36386135313564666430303262346364616261613566636230643736383532646436353066383930 +35396330666166663663313739626262643533623233623566646130656166663234656165626662 +66613530623365333033373338376135393231316462343933393233656162343665353661383562 +31303134386637643363646363323766643533313337316666343332393133343666306132366639 +66343464376633626164383866643030346135396435643130356330656335363137356361616339 +64303636616633633062613265336238323133653832346438363366323836386662313063313330 +33303065376131376363343839366131613231653331333262656464313737663030313531396464 +31373531393739623239336135353066383265653464643731303261323638393039313832313761 +63373864353935336262643133356333666563353339336163666338613264343233393066646138 +38613436393066376338633334373033363638366539633736396536653533643736333431316133 +37373035353330316361656166326138663031393563306461643533363736616365636435363632 +33323132306165373436643234666561623766376432323935343361666266343563333332633137 +36636337613566333663643831333935666565326166383138353064326631343135666331336435 +36653038636162323939393963316335653234616362613230653730633237613935663365386437 +30616232366538613161396339303636326437623031326435396366316363666338316635636132 +32643934303630313563306233643862376366326561393534613761643730383038613566306336 +62393335666363666233313437636365393935393364623264373534666465333337656638633438 +33616665303263326134356663356133303136343834623430383932353433653766616135396263 +66633535383436346265353966376261313432636339643439323630623835393765326434343437 +62336332616137353938633662376366623435326539316663623364333861653464373630633236 +65653133376665626337323265353438666338313238613563626562383964663237333962316237 +35666262306334633862623263646666386432613633613933343637616635643862363036373464 +32616564646662326166323330343562366630616232663630363231366634373037313066623866 +30653433353631333634373465313737363139363737316436643138383739306265643133393036 +38376563633235383764303931643936663137363339643336663039333335363565306263656462 +36333431306365663138653134663837656538386366343962303764383365663336653864613763 +30333734353364636464643835353261343964303166343031353065353761323061313962663062 +37323738633332633330333332333537373863373437353236666538323130326137626665336539 +30623963393166643030303837623462333266653833633664656130303563373862636633373938 +62653465343866363234366537353734333837306464396433373535366535386634333163303461 +63633630366164633162303238353137313731663833333038303235356638353336633539646161 +34636238363264653634393565376164643139396166333162326236313236306563323563626633 +38363836323739313666366133343865313433666234396433376230626631643539313662626538 +65326664613266643466613533313934336266303131636230316430386638373334386433356662 +62333738633933336366373835333939623133646633663063383131386163653332383364626664 +62333335343538383662353861626462353637633432376565623766353362663234633830323433 +37386236363830373261643662656639323665656235613465366131633462663433323035366264 +65666630393461393762656538623238656437666135306662353338343439366530383336346661 +63326365613334666266306533643036333336623261326135363039643966316361666562376461 +64656562393333343766303136366235663337303561326365316664653665363033366138366662 +38656238313364373561313539303933613463623261393839356265633937326435663239303662 +32356536366634363064323262336530393163383263633965353238343534353230306231626464 +31376336323864323461306462343766363765323537313938333665666539663735623161303866 +62343061346664323138333136643263353331343462313666306131333936383630386137383136 +66313430616137386539623739616531326137393966393066646463306638643330393964376563 +39306635333337323234346633353138663366646561353861633438666332646634373563366361 +61396139643061303962656637363961623163663565306536333963613033646133313564383333 +35653962666263336364346265616633636163616263393336623766316437666165323336656662 +64363561363336393936363538363966393039396333363132363938333432653235353637313134 +33303732343537636433336234663262616239616334363933616636316464343562633430323865 +33393566343038346436346330666164356165303039346333323761623731636138663862316434 +31313331386364343738643031303539353766386337383863623163616233323665363632316664 +33626531653732353632623032343161303337373135306236326365326361666535636436313934 +65306566326663346136646366616636623632383537323738383237343465386430313232316432 +30646535633332646639376464616266393131363962386237343663643738393365633331613465 +61663138363963643933323836383434623061326231626665333362353934366264653262386538 +31353433316138613038626638613133373663343864653565376433316333376436386262633639 +39633964373833306565333636633535336138373533663834353862326139333230636464323165 +64306564376137656130333239643132326537363932666335343730353331666464363931616536 +64306265356535623466326633643161666164326131343738383866623038643763636338643062 +30653263653338383962303139353337663039383434333033353966323537623632316630373437 +35313831313638613961393765313135346436393833383630346432363734336465336434303762 +64363564616630666230313463626532633730386339343832623735323334656330336663366466 +34363463623662353163333665336566643232636432646464353561613339303066666633633266 +38666438373962376263383065376266393930383838396533366432616263336431653038316533 +33346231386633623265396138666166333266653038386237326133366265653263363061643433 +61383962653135383939373934386539666162623163663737343539613061656630363636356331 +65323362373264393930643936306565333239653337663737646665353930306331336139653432 +34386431323438313165333831663062656464663162363565663438353964613835303536303937 +34343038333834616665373033386466383863376130656230363638316537626666373135633438 +39626130303937346165356666343733353631646533303431346231326563306461623031623930 +37633938633061666663376232306234336434363533626432303539363432386532306232336664 +32623037643265663465393864646163613436346165373037383665303966656565323664366436 +38323764626538663235383064653937346534393333623931616234396133373930656664653630 +36666165653930363966373631383931346437376164396438353139396232633734663564323735 +66366665396630373932343864396437353661373565646466316563383434336532373862633837 +37666433646333303439313933616261616634643739643463383466666332323962643331323637 +37653266646234363964663565356430336135313765626337383933366435616261333564376365 +36636462313432373663376265656330376636356232333831653964386463353336656563323235 +34656563323839643565623038643939333938313862666534386539653366316432326461326531 +61633437356530623462623362643739623565333165393432376238336463616339373966613933 +65666336613766383331323262306161616335613462333439303763376161373264623463306531 +33393131303932653861653838336439396633646465333332663637636162316662626632363731 +32373032346139616238326438663237383763343735316261333335353634303964323933333361 +61343263336165306235383562653734323664323133363733666630383561636637346238363038 +34626239323239663439363063323030386466613365383263623266643630356336383630336465 +33393539643566373762313036363436663137383865326231333631623734656535356331623239 +36306431313832363037666538626438623066363137376330323361656466316637336534363931 +62386334303039346561643561353662303139333564636463663461356166653336323334323033 +38636430343132383038636632616564386631313663656330343761646563383039666439373861 +33376138363633636135613030373961626362653436663537663663313266373031366266346634 +65353839663264643263343561306362323534306632316161366137643665393135306666343662 +39326638333161353462393837306332376338353137383262306164323332303061366339613961 +33356335323036373332343038646163316239343564363232663137646662666263393765663661 +61363330346466613634326539646135386433383433303339323536333435303631393239356339 +63336662333965376366353232633665346237663835333164393035333630653861343534656261 +35383665343564343132366661626463383236616231396265613531613862646164653435626433 +32363136383064396433636432396532623535313664316465663837626236356336326461636235 +31613731313032343634366234393736343836616538333731363734653131623664346634323535 +64333961633236313737393933626339303030313265316135323837613033616332626137323938 +35666332313430376637343336366236383330333865653565656230303036396637343630303834 +64346461316133666365386331303366323231376465393139376566666539656238623161353639 +62653233336132306134326232656233373133333834636138636531323138353430653762323034 +64653632356535313866343765376465363432376535363939356431363264353139313365663734 +64323732343536626232356264613136643661376363323361353731333235663431393663396334 +35663963363935346333643161316538646530356164346365663466353565373763613233386536 +34356666623135396431303765363138346437626439633432353633323837653132303066363861 +36363338393565333131343236323833646665353834643238653831323537663664633966356133 +66633837623461643362623337323931643338316438393765336538666434393930313663633665 +36376264316362386661333563366137666463376237323836373963613437633633363664343031 +32613963373931366163616436366339633939353534396464346232636164613138656664343230 +39316539663862636663643861343136333065326136663863333631653563336562666634646339 +61313537363530383935656233633535333634363838386630616561396539643061653036656339 +31633833623564313036353466333538633761363034353232653234306232336661316237643737 +63336633316562333130633838643034353264353331616566633935643234616565313734613063 +36633334306433623965636364653735313739313963326538646633326461386437303136373336 +61643934663364333838633466363466643037396563623734343839343436613537363663633235 +63303433316166336432613064663139363264633963616366316664356232623664333838306335 +37356534363764653439336532343363643065383366373934636262633835656232323530343933 +31666638356138333564636561363731353366306163633665613538386533613830666438663731 +33386464356665306263626162313965353433343832383464626265363261316537396236393661 +61326538326431343037363632616237646636303563623061393666623235323662653961626335 +33623362326538353636363531633839363364613837643731353961333963353836303830656339 +37643938653064633766373764316233396365343265643637373133633534393238346332643231 +66613337353662323663653066393165386663353634336137663039343933616436383432663064 +61656634313736633630346534333234656632396463383131663363303236333966313531333666 +39626438366430373038356136303162653530313031333962643538396363343830646434316531 +373163643837303136633832363963303664 From db6197d0a0b91741740f1a3535684859d15a0640 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 5 Jun 2025 12:43:22 +0200 Subject: [PATCH 17/73] Prevents the `--options` option in `vm-run` from interfering with other options --- roles/lmn_vm/files/vm-run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/lmn_vm/files/vm-run b/roles/lmn_vm/files/vm-run index 700a0ab..5307c68 100755 --- a/roles/lmn_vm/files/vm-run +++ b/roles/lmn_vm/files/vm-run @@ -216,7 +216,7 @@ while true; do shift ;; -o | --options ) - LIBVIRTOPTS=$2 + LIBVIRTOPTS="${LIBVIRTOPTS} $2" shift 2 ;; --no-viewer ) From efd48de6c734d8052d94cea0442a8ebe90be4f39 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 5 Jun 2025 13:02:12 +0200 Subject: [PATCH 18/73] The virt-viewer package must be explicitly selected for trixie --- roles/lmn_vm/tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml index a39325a..a3ce960 100644 --- a/roles/lmn_vm/tasks/main.yml +++ b/roles/lmn_vm/tasks/main.yml @@ -18,6 +18,7 @@ - mktorrent - libvirt-daemon-system - virt-manager + - virt-viewer - dialog # for vm-netboot menu # - name: allow all users to use VMs From b688a8df59c183afa4f33e95e878833e3f609ac9 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 2 Jul 2025 13:54:19 +0200 Subject: [PATCH 19/73] Refactor VM volume mounting - Replace bind-mounts on /lmn/media/$USER with separate mounting for Home and Share SMB shares in the VM. - Update vm-run to start virtiofsd with /lmn/media/$USER (/home/$USER on localhome machines). - Use vm-vminfo to generate a JSON file containing user information, including Username, Groups, printer list krb5-ticket and some more - Configure vminfo.service (systemd-timer) to periodically call vm-vminfo. - Ensure krb5-ticket (TGT) is injected into the Windows VM. - Mount SMB-Home and SMB-Share shares as part of the new structure. --- misc/vm/Netzlaufwerke neu verbinden.lnk | Bin 0 -> 1244 bytes misc/vm/injector.ps1 | 155 ++++++++++++++++++++++++ misc/vm/vm-prepare-sys.ps1 | 73 +++++++++++ misc/vm/vm-prepare-sys.xml | Bin 0 -> 3452 bytes misc/vm/vm-prepare-user.ps1 | 102 ++++++++++++++++ misc/vm/vm-prepare-user.xml | Bin 0 -> 3468 bytes misc/vm/vm-update-user.ps1 | 30 +++++ misc/vm/vm-update-user.xml | Bin 0 -> 3958 bytes roles/lmn_vm/files/vm-link-images | 5 +- roles/lmn_vm/files/vm-run | 81 +++++++++---- roles/lmn_vm/files/vm-vminfo | 113 +++++++++++++++++ roles/lmn_vm/tasks/main.yml | 25 ++++ 12 files changed, 560 insertions(+), 24 deletions(-) create mode 100755 misc/vm/Netzlaufwerke neu verbinden.lnk create mode 100644 misc/vm/injector.ps1 create mode 100644 misc/vm/vm-prepare-sys.ps1 create mode 100755 misc/vm/vm-prepare-sys.xml create mode 100644 misc/vm/vm-prepare-user.ps1 create mode 100755 misc/vm/vm-prepare-user.xml create mode 100644 misc/vm/vm-update-user.ps1 create mode 100755 misc/vm/vm-update-user.xml create mode 100755 roles/lmn_vm/files/vm-vminfo diff --git a/misc/vm/Netzlaufwerke neu verbinden.lnk b/misc/vm/Netzlaufwerke neu verbinden.lnk new file mode 100755 index 0000000000000000000000000000000000000000..e2fe26b9576e281887f759e2d9824147eac6449f GIT binary patch literal 1244 zcma)6T}V@57=C88l#sR%$?RuEUYVzhI+-ADHh*HBpwg2YZJyzoZr(*u-qeNB zg%<@QjEE@kChJCuqOhyzN{}EH5oD1U2|+hK@0mMtRH|>h-~abM&-=d5SqA_|MG1T0 zx!I%bH%j5*{Ih#<`?JJ?{z1h9fa8kwCYFFxO6WlX=p;5yH#Tx3Du0n-ORjCUT6Z3I4z$ zbXqy8?QvnWUhx8c8%`lZLmT2O2C5yS^q_#xP(h!JgvD!$9_scWCDaX}u4q{e#42Q7 zPV>>2$$#m!lP?SM_$8s3t=hAUl*QPv7%OC+r2%_sG1_jL)J?`ZnzTWh(A`9vyPEHI zaReo@q5!p6v*N~Tid9K~x|a6|#-~8F_4e$l>*}fgNB&h5bEp0_+A_4TCMx}mNd-^7DGu``S>cQ3y|CPm;JNlN~ zx2hfv&YxMn{jc)?ee&-m=i^u(2}hR;9kgiP3C}C I^ki#)0AA1p4gdfE literal 0 HcmV?d00001 diff --git a/misc/vm/injector.ps1 b/misc/vm/injector.ps1 new file mode 100644 index 0000000..4c785cf --- /dev/null +++ b/misc/vm/injector.ps1 @@ -0,0 +1,155 @@ +param( + [string]$ticketb64 +) +# BASE64 +$ticket = New-Object System.Byte +#reading from b64 +$ticket = [System.Convert]::FromBase64String($ticketb64) +if ($ticket -eq $null){ + write-host "[-] Be Sure entering the correct mode" + write-host "[-] Cannot receive ticket from file or b64" + exit; +} + + +# ------------------- FUNCTIONS -----------------------# +$ptt = @" +[StructLayout(LayoutKind.Sequential)] +public struct LUID +{ + public UInt32 LowPart; + public Int32 HighPart; +} +public enum KERB_PROTOCOL_MESSAGE_TYPE +{ + KerbDebugRequestMessage, + KerbQueryTicketCacheMessage, + KerbChangeMachinePasswordMessage, + KerbVerifyPacMessage, + KerbRetrieveTicketMessage, + KerbUpdateAddressesMessage, + KerbPurgeTicketCacheMessage, + KerbChangePasswordMessage, + KerbRetrieveEncodedTicketMessage, + KerbDecryptDataMessage, + KerbAddBindingCacheEntryMessage, + KerbSetPasswordMessage, + KerbSetPasswordExMessage, + KerbVerifyCredentialMessage, + KerbQueryTicketCacheExMessage, + KerbPurgeTicketCacheExMessage, + KerbRefreshSmartcardCredentialsMessage, + KerbAddExtraCredentialsMessage, + KerbQuerySupplementalCredentialsMessage, + KerbTransferCredentialsMessage, + KerbQueryTicketCacheEx2Message, + KerbSubmitTicketMessage, + KerbAddExtraCredentialsExMessage +} +[StructLayout(LayoutKind.Sequential)] +public struct KERB_CRYPTO_KEY32 +{ + public int KeyType; + public int Length; + public int Offset; +} +[StructLayout(LayoutKind.Sequential)] +public struct KERB_SUBMIT_TKT_REQUEST +{ + public KERB_PROTOCOL_MESSAGE_TYPE MessageType; + public LUID LogonId; + public int Flags; + public KERB_CRYPTO_KEY32 Key; + public int KerbCredSize; + public int KerbCredOffset; +} +[StructLayout(LayoutKind.Sequential)] +public struct LSA_STRING_IN +{ + public ushort Length; + public ushort MaximumLength; + public IntPtr buffer; +} +[DllImport("secur32.dll", SetLastError=false)] +public static extern int LsaLookupAuthenticationPackage([In] IntPtr LsaHandle,[In] ref LSA_STRING_IN PackageName,[Out] out UInt32 AuthenticationPackage); +[DllImport("Secur32.dll", SetLastError = true)] +public static extern int LsaCallAuthenticationPackage(IntPtr LsaHandle,uint AuthenticationPackage,IntPtr ProtocolSubmitBuffer,int SubmitBufferLength,out IntPtr ProtocolReturnBuffer,out ulong ReturnBufferLength,out int ProtocolStatus); +[DllImport("secur32.dll", SetLastError=false)] +public static extern int LsaConnectUntrusted([Out] out IntPtr LsaHandle); +[DllImport("secur32.dll", SetLastError=false)] +public static extern int LsaDeregisterLogonProcess([In] IntPtr LsaHandle); +[DllImport("advapi32.dll", SetLastError=true)] +public static extern uint LsaNtStatusToWinError(uint status); +"@ + + +Function ConnectToLsa() +{ +$lsahandle = New-Object System.IntPtr +[int]$retcode = [KRB.PTT]::LsaConnectUntrusted([ref]$lsahandle) +if ($retcode -ne 0){ + write-host "[-] LsaConnectUntrusted Error (NTSTATUS): ", $retcode -ForegroundColor Red + exit; +} +return $lsahandle +} + +#-------------------------------- ENTRY POINT ----------------------------# + +$assemblies = [System.Reflection.Assembly]::LoadWithPartialName("System.Security.Principal") +Add-Type -MemberDefinition $ptt -Namespace "KRB" -Name "PTT" -ReferencedAssemblies $assemblies.location -UsingNamespace System.Security.Principal +# CONNECTING TO LSA +$LsaHandle = ConnectToLsa +write-host "[?] LSA HANDLE: ", $LsaHandle +# EXTRACTING KERBEROS AP +$retcode = New-Object System.Int32 +$authPackage = New-Object System.Int32 +$name = "kerberos" +$importnantlsastring = New-Object KRB.PTT+LSA_STRING_IN +$importnantlsastring.Length = [uint16]$name.Length +$importnantlsastring.MaximumLength = [uint16]($name.Length + 1) +$importnantlsastring.buffer = [System.Runtime.InteropServices.Marshal]::StringToHGlobalAnsi($name) +$retcode = [KRB.PTT]::LsaLookupAuthenticationPackage($lsaHandle,[ref]$importnantlsastring,[ref]$authPackage) +if ($retcode -ne 0){ +write-host "[-] Error LsaLookupAuthPckg (NTSTATUS): ", $retcode -ForegroundColor Red +exit; +} +write-host "[?] Kerberos Package: ", $authPackage +# GETTING CURRENT LUID (INJECT PURPOSES) +$output = klist +$CurrLuid = $output.split("`n")[1].split(":")[1] +$sysIntCurrLuid = [convert]::ToInt32($CurrLuid,16) +$luidFinally = New-Object KRB.PTT+LUID +$luidFinally.LowPart = $sysIntCurrLuid + +# TICKET INJECTING +$protocolReturnBuffer = New-Object System.IntPtr +$ReturnBufferLength = New-Object System.Int32 +$ProtocolStatus = New-Object System.Int32 +$KrbRequestInfo = New-Object KRB.PTT+KERB_SUBMIT_TKT_REQUEST +$KrbRequestInfoType = $KrbRequestInfo.getType() +$KrbRequestInfo.MessageType = [KRB.PTT+KERB_PROTOCOL_MESSAGE_TYPE]::KerbSubmitTicketMessage +$KrbRequestInfo.KerbCredSize = $ticket.Length +$KrbRequestInfo.KerbCredOffset = [System.Runtime.InteropServices.Marshal]::SizeOf([type]$KrbRequestInfoType) +$KrbRequestInfo.LogonId = $luidFinally +$inputBufferSize = [System.Runtime.InteropServices.Marshal]::SizeOf([type]$KrbRequestInfoType) + $ticket.Length +$inputBuffer = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($inputBufferSize) +[System.Runtime.InteropServices.Marshal]::StructureToPtr($KrbRequestInfo,$inputBuffer,$false) +[System.IntPtr]$PtrToCred = $inputBuffer.ToInt64() + $KrbRequestInfo.KerbCredOffset +[System.Runtime.InteropServices.Marshal]::Copy($ticket,0,$PtrToCred,$ticket.Length) +$ntstatus = [KRB.PTT]::LsaCallAuthenticationPackage($lsaHandle,$authPackage,$inputBuffer,$inputBufferSize,[ref]$protocolReturnBuffer,[ref]$ReturnBufferLength,[ref]$ProtocolStatus) +if(($ProtocolStatus -ne 0) -or ($ntstatus -ne 0)) +{ + Write-Host "[!] Error in LsaCallAuthenticationPackage" -ForegroundColor Red + write-host " NTSTATUS: ", $ntstatus, " Protocol Status: ", $ProtocolStatus + if ($ProtocolStatus -eq -1073741517){ + " Ticket may be out of date" + } + exit; +} +if($inputBuffer -ne [System.IntPtr]::Zero) +{ + [System.Runtime.InteropServices.Marshal]::FreeHGlobal($inputBuffer) + [System.Object]$ticket = $null +} +klist diff --git a/misc/vm/vm-prepare-sys.ps1 b/misc/vm/vm-prepare-sys.ps1 new file mode 100644 index 0000000..ad8f16f --- /dev/null +++ b/misc/vm/vm-prepare-sys.ps1 @@ -0,0 +1,73 @@ +# Installiere alle Mounts aus target.csv +# Geprüft wird, ob das Laufwerk bereits vorhanden +# 11.05.2025 da + +function Mount-Drive { + param ( + [string]$DriveLetter, + [string]$TargetPath + ) + + try { + & "C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofs$DriveLetter $TargetPath \\.\${DriveLetter}: + Write-Verbose "Laufwerk hinzugefügt: $DriveLetter" + } catch { + Write-Error "Fehler beim Hinzufügen des Laufwerks ${DriveLetter}: $_" + } +} + +function Import-VMInfo { + param ( + [string]$Path + ) + + if (Test-Path $Path) { + return Get-Content -Path $Path -Raw | ConvertFrom-Json + } else { + Write-Error "Fehler beim Einlesen der VMInfo Datei ($Path nicht gefunden)." + Write-Error "Tipp: Beim Neustart der VM wird diese Datei neu angelegt." + Pause + exit + } +} + +# Laufwerk Y: mit weiteren Mountpoint-Infos mounten +& "C:\Program Files\Virtio-Win\VioFS\virtiofs.exe" -m Y: +#Mount-Drive -DriveLetter "Y" -TargetPath "VM-Data" + +# VMInfo aus JSON File einlesen +$VMInfoPath = "Y:\.vminfo.json" +# Schleife, die auf das Laufwerk wartet +while (-not (Test-Path $VMInfoPath)) { + Write-Host "Warte auf $VMInfoPath..." + Start-Sleep -Seconds 1 +} +$VMInfo = Import-VMInfo -Path $VMInfoPath + +# Weitere Laufwerke einbinden +#foreach ($virtiofs in $VMInfo.VirtioFS) { +# $targetDrive = $virtiofs.Drive +# if (-not (Get-PSDrive -Name $targetDrive -ErrorAction SilentlyContinue)) { +# Mount-Drive -DriveLetter $targetDrive -TargetPath $virtiofs.Target +# } else { +# Write-Error "Laufwerk bereits vorhanden: $targetDrive" +# } +#} + +# Drucker installieren +foreach ($drucker in $VMInfo.Printers) { + # Überprüfen, ob der Drucker bereits vorhanden ist + $druckerName = $drucker.Name + $druckerVorhanden = Get-Printer | Where-Object { $_.Name -eq $druckerName } + + # Umwandlung in HTTP-URL + $httpUrl = $drucker.IppURL -replace "ipp://", "http://" -replace "122.1", "122.1:631" + + if (-not $druckerVorhanden) { + # Drucker hinzufügen, wenn er nicht vorhanden ist + Add-Printer -PortName $httpUrl -Name $druckerName -DriverName "Microsoft IPP Class Driver" + Write-Host "Drucker hinzugefuegt: $druckerName" + } else { + Write-Host "Drucker bereits vorhanden: $druckerName" + } +} diff --git a/misc/vm/vm-prepare-sys.xml b/misc/vm/vm-prepare-sys.xml new file mode 100755 index 0000000000000000000000000000000000000000..b00a30e041ee65f27e81e0312472335c4f141ebf GIT binary patch literal 3452 zcmbuCTT>cA5QY0WRrwE;?;sKrV~SwmB}z=9r5Im$A+jPRpv7WL{(O?}%sA}MqJ)^* z+6yy1r@K#IX88T9Zd>-lMmDsPeYeCWmfFB>Y;5ms#n!B1Ro*3L#&*GYkJ+*H-RzmQ z?Sqw(dV|cCHSDFmusWk%P_CauTz80G>ljICy0R(Pt-Z5Vt`uEY=o~qu3hx0U6ZEIt zmq=EeH6vv2okcyy@0ne-8WvY=ov$k2t8VR-_w>Q4l?OXZ*jKj`wDdtpnV%prd=;ap|eqYy7X`f7yMv;i85QReQy=h7}dtaB`dW);5u@V@ZY~zB25l z-J$;qtrPHfZO=~a5H^qO82m%qv3-7>*;o5$9p0&nmk{HXG3psUw!rHU-w`;speH=L z?p+4uC$~_7WLU4U<@r(EC$QJ&@_AI`ZX3^T@GzE(r98`fu-~1B0uMO`;6T~H-GD5t16SdUB|aD8{}=D8P!8#U%2lb zJO7Fjd$|jGipC+Add8{KKjGP;;*Zd`&8)mo77uvJk4v{gQ4tT%!-(yW-WxJZTKD<# zoIRyq-6>SSzpae5HfMex;L(H(Y&$>IVO4YTIWE|PS0H*A3u_jMNXGn6YKGH zAkK#5irfjEzW(P{~>a+IIL4YEB3fWa(V3@RXsYzYsGWw zGB{utIbI~0$5oC8jKzM{;ds81AoSx6rB;7s~T+58E#!prNq{sNs4;^7cI8U?@DLbF`$mr_j>5} z=dhmZ+rC4IZJn6LNW`7uc?hu;=VZ(^$ZdG=ycWHFOd`hE<3yWaxlU7_xi;?+W1rl6 zz<7h5rp?)`#?Gm1Uv5pT$M2TvG(yyVwc)Vl$HO{ldb*xeOBXYnQ%;6EurOvM!K3M4 zPZ#x>7ul|zof(8R%2nhJC)AFeW4kKUpPoBdr_-P`jyS{C<|MQ~-!nTwQl|~ozD}0@ zpF)S64fE-2zT)inJ7>{~z)WUm6YM^*Q@rH6cHi;?LO!O_6ix~y&WbD=aAQ+sV2Tm`z$(K&IX7S9nY zGxQhSXGpf(nhCPkZqb1CYj!uRgT-yzeO>#4mLUiQ`!giw zyvzFo?lazkPm&GtyDpQlEcI+*G9ofJ3&iXtHkCzbBlPT&EJ|2MAC%zMK zrl4p1p7^tg&JrieMg(E6&yXTNgTEnH$fP=ZAMkDH{HBtrTwr>S2%Ok|WM)RzZFzjY z@-Ca|d(qx-a>E|hBb3yJ0v!>j3*+)cIX`l)#;{cG2R+L&4WtL2&((-jGp>yGTQpq4 z{*>s*ze8g4j9VG?oZQjd<|1S2veC{G?F&dberI0AWAOB@I-D-Rn$&B()^`>B4b>XX-L<*j!j)lzbL>|H&lUtNK& ze2f)d=XAX@sh&^+;%rR5D1OS4IZ;*4T&$t>F$k#*s%2H#>f8_cA0sD=<2iM9%Q*Q`x}#cIfJ2Tk}(nMA|7HhmcxvOvYS*+=GX}Yu)R+BvOn$=GzR* zHCqMddORnreemaq^)0?MJtnn|?JwqwbP7M^>|Kob$>mnmQHVN zE|?Q{U?FEE!=w3wQ%095DR@zSwaa-ySd&Uc?l7tv@JP|R%bKdql38XwoUFz&L`3WHf2A$^ E9~=)fO8@`> literal 0 HcmV?d00001 diff --git a/misc/vm/vm-update-user.ps1 b/misc/vm/vm-update-user.ps1 new file mode 100644 index 0000000..c3036d5 --- /dev/null +++ b/misc/vm/vm-update-user.ps1 @@ -0,0 +1,30 @@ +# Injects krb5-credential from .vminfo.json if available +# 02.07.2025 da + +function Import-VMInfo { + param ( + [string]$Path + ) + + if (Test-Path $Path) { + return Get-Content -Path $Path -Raw | ConvertFrom-Json + } else { + Write-Error "Fehler beim Einlesen der VMInfo Datei ($Path nicht gefunden)." + Write-Error "Tipp: Beim Neustart der VM wird diese Datei neu angelegt." + Pause + exit + } +} + +$VMInfoPath = "Y:\.vminfo.json" + +# Schleife, die auf das Laufwerk wartet +if (-not (Test-Path $VMInfoPath)) { + Write-Host "$VMInfoPath nicht gefunden. Skript beenden." + exit +} + +# VMInfo aus JSON File einlesen +$VMInfo = Import-VMInfo -Path $VMInfoPath + +& $PSScriptRoot\injector.ps1 $VMInfo.krb5.cred diff --git a/misc/vm/vm-update-user.xml b/misc/vm/vm-update-user.xml new file mode 100755 index 0000000000000000000000000000000000000000..b6500e8d23b2a0dfcc40a32b841e505cbc0a0d15 GIT binary patch literal 3958 zcmbuC-BKGz5QY0XRe1-M?-2r%5T`bF$%q))CU$`cH@YFL02Pv;vXJ-HXC$l&9#l|+WhCSNArdHU{?rdVe*$dmTrnR^>kWB27=Q+}e zT|4QS_3U@sLhEOA-q>sV(SERurx#ecU1@R8S@d2fXv))#m3;2)SKH=O;OhpTV`r(! zb;y$`{tLcWXf_?1F}gE{DChYM>9*~HxMh3XwYcAQYfG->9My|C&Ib50JHg8}77FB3 zG)nFjeV6YQcRnWRdi{>m8Sq?wcI_wPZxR2NyYIopE-|$1CBM6%XxhHhdu6}aE3`9^ zENqCch3&RI;Qt1%Q|x!_&`#|GY<{xO*#BS$_KtsN_NTqKKG(wKOBU0Wsns)L>|(D^ ze#h8(faQE1h5jw91kJEsmN(}|d7r}GH6LF`RqlF7$H-E>RLiq0ulIbFjgXPLp4U~T zO6T#Bs76Hk84o*lxOm-+*$Jl{z{_dSQRT;=o0$o_LtYTb0#U zpRiU;-I3)Et4916TAz<&$J#2L*qU&Et5&?us(Q=tDVb*0kgTdM3Xr5;>N*Xyb2pFT zj*2HnsG5vk)I3r*bsblycUqy==B3_2N4~jE$%k@u(Up$*C&lcB#*FB0tAMib0*M9$R1e>5d`9VO`iM zV#Y&$m+8gc!yHiG1is@n)vDDVxk@v(t4aj2(728BV>TxT)A5601Lwj#w- z-AQ75Rav_7h?>j!3_w!lBbBA=>Xi`~sajd5nc7@EHN=>*Gp2IYfo=APdskBh8T04M zs^9->Eyd=~hG*ay(np$lIsW~bI(Jjs&nL01)9(b0w1b~#Aw_Xc#oS`K2M?atYSha# zQX7Z7oeV&(ld)$moD4qlUvsVmxlS1S?79BTx7nK1kKZdbX=G8m)xO)E>d(VE_0{Tr zQZHS8#awX8KY#^)QvJenz4NR)V`QBEedLQhTNA=h3E3J)9eKdHuW#pI_vbIY3H3qu z`u|t+m?D?ZwdabuTRYedGS@=L{GRBeHBGuW`VPf?Q3$UQ@>)@ z8DeX0AyoK^XC)3b@mZ&TS;7+OHb$ykQ}>seHHx8liX>m-o4zjB0rjwVr>08 gP!q2O(JQuP$m95=Q_qlJ8Ry++PtSWUqFWgF51Uqfz5oCK literal 0 HcmV?d00001 diff --git a/roles/lmn_vm/files/vm-link-images b/roles/lmn_vm/files/vm-link-images index e4c8618..0eccd04 100755 --- a/roles/lmn_vm/files/vm-link-images +++ b/roles/lmn_vm/files/vm-link-images @@ -19,8 +19,9 @@ done shift "$((OPTIND -1))" # link system-VM-Images to User VM Directory -for i in *.qcow2; do - [[ -f "${VM_DIR}/${i}" ]] || ln "${i}" "${VM_DIR}/${i}" +for filename in "$@"; do + filename="$(basename ${filename})" + [[ -f "${VM_DIR}/${filename}" ]] || ln "${filename}" "${VM_DIR}/${filename}" done # allow lmnsynci to remove old vm images diff --git a/roles/lmn_vm/files/vm-run b/roles/lmn_vm/files/vm-run index 5307c68..fd58fca 100755 --- a/roles/lmn_vm/files/vm-run +++ b/roles/lmn_vm/files/vm-run @@ -90,17 +90,21 @@ create_clone() { local VM_NAME="$1" if ! [[ -f "${VM_SYSDIR}/${VM_NAME}.qcow2" || -f "${VM_DIR}/${VM_NAME}.qcow2" ]]; then - echo "qcow2 File does not exists." >&2 - exit 1 + echo "qcow2 File does not exists." >&2 + exit 1 fi # Create User-VM-Dir and link system VM-Images [[ -d "${VM_DIR}" ]] || mkdir -p "${VM_DIR}" - if [[ "${PERSISTENT}" -eq 1 ]]; then - sudo /usr/local/bin/vm-link-images -p - else - sudo /usr/local/bin/vm-link-images - fi + IMAGE="${VM_NAME}.qcow2" + while [[ -n ${IMAGE} ]]; do + if [[ "${PERSISTENT}" -eq 1 ]]; then + sudo /usr/local/bin/vm-link-images -p "${IMAGE}" + else + sudo /usr/local/bin/vm-link-images "${IMAGE}" + fi + IMAGE="$(qemu-img info -U "${VM_DIR}/${IMAGE}" | grep "^backing file:" | cut -d ' ' -f 3)" + done # Create backing file cd "${VM_DIR}" @@ -130,18 +134,30 @@ create_printerlist() { } create_mountlist() { - if id | grep -q teachers; then - NETHOME=/srv/samba/schools/default-school/teachers/$USER - else - NETHOME=(/srv/samba/schools/default-school/students/*/"$USER") - fi - NETHOME="${NETHOME#/srv/samba/schools}" - cat << EOF > "/lmn/media/${USER}/.mounts.csv" + NETHOMEPART="${NETHOME#/srv/samba/schools}" + cat << EOF > "${VMINFO_DIR}/.mounts.csv" Drive;Remotepath -H;\\\\10.190.1.1${NETHOME//\//\\} -T;\\\\10.190.1.1\default-school\share +H;\\\\server.pn.steinbeis.schule${NETHOMEPART//\//\\} +T;\\\\server.pn.steinbeis.schule\\default-school\\share EOF - echo "${USER}" > "/lmn/media/${USER}/.user" + echo "${USER}" > "/${VMINFO_DIR}/.user" +} + +start_virtiofs_service() { + local target_name=$1 + local shared_dir=$2 + local drive_letter=$3 + local socket="/run/user/${UID}/virtiofs-${VM_NAME}-${target_name,,}.sock" + + systemd-run --user /usr/local/bin/virtiofsd --uid-map=":${GUEST_UID}:${UID}:1:" --gid-map=":${GUEST_GID}:$(id -g):1:" \ + --socket-path "${socket}" --shared-dir "${shared_dir}" --syslog + + if [[ $? -ne 0 ]]; then + echo "Error starting virtiofsd for ${target_name}." >&2 + return 1 + fi + + LIBVIRTOPTS="${LIBVIRTOPTS} --filesystem driver.type=virtiofs,accessmode=passthrough,target.dir=${target_name},xpath1.set=./source/@socket=${socket}" } start_virtiofsd() { @@ -151,9 +167,16 @@ start_virtiofsd() { [[ "$GUEST_GID" == 0 ]] && GUEST_GID=1010 fi # END temporary fix - socket="/run/user/$(id -u $USER)/virtiofs-${VM_NAME}.sock" - systemd-run --user /usr/local/bin/virtiofsd --uid-map=:${GUEST_UID}:${UID}:1: --gid-map=:${GUEST_GID}:$(id -g):1: \ - --socket-path "$socket" --shared-dir "/lmn/media/${USER}" --syslog + + # start_virtiofs_service "VM-Data" "/lmn/media/${USER}" "Y" + # start_virtiofs_service "default-school" "/srv/samba/schools/default-school" "Y" + + # Home@PC / VM-Data + if [[ "${HOME}" != "${NETHOME}" ]]; then + start_virtiofs_service "Home_Linux" "${HOME}" "Y" + else + start_virtiofs_service "VM-Data" "/lmn/media/${USER}" "Y" + fi } ask_really_persistent() { @@ -316,18 +339,33 @@ if ! virsh --connect="${QEMU}" list | grep "${VM_NAME}-clone"; then check_images fi if [[ "${NEWCLONE}" = 1 ]] || [[ ! -f "${VM_DIR}/${VM_NAME}-clone.qcow2" ]]; then - create_clone "${VM_NAME}" + create_clone "${VM_NAME}" fi # delete the old vm virsh --connect=qemu:///session undefine --nvram "${VM_NAME}-clone" || echo "${VM_NAME}-clone did not exist" #trap exit_script SIGHUP SIGINT SIGTERM + if id | grep -q teachers; then + NETHOME=/srv/samba/schools/default-school/teachers/$USER + else + NETHOME=(/srv/samba/schools/default-school/students/*/"$USER") + fi + if [[ "${HOME}" != "${NETHOME}" ]]; then + VMINFO_DIR="${HOME}" + else + VMINFO_DIR="/lmn/media/${USER}" + fi create_printerlist create_mountlist # start virtiofsd-service [[ "${QEMU}" = 'qemu:///session' ]] && start_virtiofsd + # Create VMInfo Json file + #( umask 027; ./vm-create-vminfo > "${VMINFO_DIR}/.vminfo.json" ) + # Start vminfo.timer + systemctl --user start vminfo.timer + uuid=$(openssl rand -hex 16) uuid="${uuid:0:8}-${uuid:8:4}-${uuid:12:4}-${uuid:16:4}-${uuid:20:12}" @@ -349,7 +387,6 @@ if ! virsh --connect="${QEMU}" list | grep "${VM_NAME}-clone"; then --memorybacking source.type=memfd,access.mode=shared \ --disk "${VM_DIR}/${VM_NAME}-clone.qcow2",driver.discard=unmap,target.bus=scsi,cache=writeback \ --network=bridge=virbr0,model.type=virtio \ - --filesystem driver.type=virtiofs,accessmode=passthrough,target.dir=virtiofs,xpath1.set=./source/@socket="/run/user/${UID}/virtiofs-${VM_NAME}.sock" \ --controller type=scsi,model=virtio-scsi \ --check path_in_use=off \ --connect="${QEMU}" \ diff --git a/roles/lmn_vm/files/vm-vminfo b/roles/lmn_vm/files/vm-vminfo new file mode 100755 index 0000000..f19b4ce --- /dev/null +++ b/roles/lmn_vm/files/vm-vminfo @@ -0,0 +1,113 @@ +#!/usr/bin/python3 + +import argparse +import struct +import subprocess +import json + +from os import environ,path +from impacket.krb5.ccache import CCache +from base64 import b64encode + +home = "" +nethome = "" +vminfo = {} + +def get_printers(): + printers = [] + try: + result = subprocess.run(['lpstat', '-v'], capture_output=True, text=True, check=True) + for line in result.stdout.splitlines(): + # Extrahiere den Druckernamen + printer_name = line.split()[2].rstrip(':') + ipp_url = f"ipp://192.168.122.1/printers/{printer_name}" + printer = { 'Name': printer_name, 'IppURL': ipp_url } + printers.append(printer) + return printers + except subprocess.CalledProcessError as e: + print(f"Fehler beim Abrufen der Drucker: {e}") + return [] + +def get_groups(username): + try: + result = subprocess.run(['id', '-Gnz', username], capture_output=True, text=True, check=True) + groups = result.stdout.strip().split('\0') + return groups + except subprocess.CalledProcessError as e: + print(f"Fehler beim Abrufen der Gruppen: {e}") + return [] + +def get_krb5 (): + krb5 = {} + ccachefilename = environ.get('KRB5CCNAME').replace('FILE:', '') + if ccachefilename: + try: + ccache = CCache.loadFile(ccachefilename) + cred = ccache.toKRBCRED() + cred_enc = b64encode(cred) + krb5['cred'] = cred_enc.decode('utf-8') + krb5['starttime'] = ccache.credentials[0]['time']['starttime'] + krb5['endtime'] = ccache.credentials[0]['time']['endtime'] + krb5['renew_till'] = ccache.credentials[0]['time']['renew_till'] + except: + print("Fehler beim Ticket laden") + return krb5 + +def get_mounts(): + mounts = [] + mounts.append({ 'Drive': 'H', 'RemotePath': '\\\\server.pn.steinbeis.schule' + nethome.replace('/srv/samba/schools','').replace('/','\\'), 'Name': 'Home_Server' }) + mounts.append({ 'Drive': 'T', 'RemotePath': '\\\\server.pn.steinbeis.schule\default-school\share', 'Name': 'Tausch' }) + return mounts + +def get_user_folders(): + HOME="H:" + if environ.get('HOME') != nethome: + HOME="Y:" + folders = [] + folders.append( {'Name': 'Personal', 'Path': f"{HOME}\Dokumente"} ) + folders.append( {'Name': 'My Pictures', 'Path': f"{HOME}\Bilder"} ) + folders.append( {'Name': 'My Music', 'Path': f"{HOME}\Musik"} ) + folders.append( {'Name': 'My Video', 'Path': f"{HOME}\Videos"} ) + return folders + +def get_quickaccess(): + quickaccess = [] + quickaccess.append( 'H:\\transfer' ) + return quickaccess + +def parse_args(): + parser = argparse.ArgumentParser() + #parser.add_argument('input_file', help="File in kirbi (KRB-CRED) or ccache format") + #parser.add_argument('output_file', help="Output file") + return parser.parse_args() + + +def main(): + global home, nethome + + args = parse_args() + + home = environ.get('HOME') + + vminfo['User'] = environ.get('USER') + vminfo['Groups'] = get_groups(environ.get('USER')) + + if 'teachers' in vminfo['Groups']: + nethome = f"/srv/samba/schools/default-school/teachers/{vminfo['User']}" + else: + result = subprocess.run(['find', '/srv/samba/schools/default-school/students/', '-name', vminfo['User'], '-maxdepth', '2', '-type', 'd'], capture_output=True, text=True, check=False) + nethome = result.stdout + + vminfo['Printers'] = get_printers() + vminfo['krb5'] = get_krb5() + vminfo['Mounts'] = get_mounts() + vminfo['UserShellFolders'] = get_user_folders() + vminfo['QuickAccess'] = get_quickaccess() + + vminfo_json = json.dumps(vminfo, ensure_ascii=False, indent=4) + print(vminfo_json) + +if __name__ == '__main__': + main() + + diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml index a3ce960..1f68b58 100644 --- a/roles/lmn_vm/tasks/main.yml +++ b/roles/lmn_vm/tasks/main.yml @@ -20,6 +20,7 @@ - virt-manager - virt-viewer - dialog # for vm-netboot menu + - python3-impacket # - name: allow all users to use VMs # lineinfile: @@ -150,6 +151,7 @@ - vm-sync - vm-link-images - vm-virtiofsd + - vm-vminfo - virtiofsd - vm-aria2 - uploadseed @@ -237,3 +239,26 @@ src: vm-netboot dest: /usr/local/bin/ mode: '0755' + +- name: Provide vminfo service + ansible.builtin.copy: + content: | + [Unit] + Description=Create .vminfo.json for VMs + [Service] + Type=simple + ExecStart=/usr/bin/bash -c 'umask 027; /usr/local/bin/vm-vminfo > "{% if localhome %}~{% else %}/lmn/media/${USER}{% endif %}/.vminfo.json"' + dest: /etc/systemd/user/vminfo.service + mode: '0644' + +- name: Provide vminfo timer + ansible.builtin.copy: + content: | + [Unit] + Description=Timer for vm-info + [Timer] + OnActiveSec=0s + OnUnitActiveSec=1h + Persistent=true + dest: /etc/systemd/user/vminfo.timer + mode: '0644' From e875ac00a42cb6adef7d1d7f42abb652f71528c4 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 2 Jul 2025 13:56:32 +0200 Subject: [PATCH 20/73] Configure SSSD for hourly ticket lifetime checks and renewal --- roles/lmn_sssd/templates/sssd.conf.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/lmn_sssd/templates/sssd.conf.j2 b/roles/lmn_sssd/templates/sssd.conf.j2 index fc3bf48..fef5d02 100644 --- a/roles/lmn_sssd/templates/sssd.conf.j2 +++ b/roles/lmn_sssd/templates/sssd.conf.j2 @@ -17,6 +17,7 @@ ad_gpo_access_control = disabled ad_gpo_ignore_unreadable = True ad_maximum_machine_account_password_age = 0 ignore_group_members = True +krb5_renew_interval = 1h {% if localhome is defined and localhome %} override_homedir = /home/%u {% endif %} From a7c879d267ac71aa4615ae40bc53272b870fdc2b Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 2 Jul 2025 13:59:47 +0200 Subject: [PATCH 21/73] Sync desktop starters from fileserver instead of server --- roles/custom/fvs/files/lmn-sync | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/custom/fvs/files/lmn-sync b/roles/custom/fvs/files/lmn-sync index 16668f8..6ae5e17 100644 --- a/roles/custom/fvs/files/lmn-sync +++ b/roles/custom/fvs/files/lmn-sync @@ -12,7 +12,7 @@ fi #rsync -rlptD --chown=pgmadmin:root --chmod=F755,D755 rsync://server:/local-program/ /usr/local/lmn RSYNC_COMMAND=$(rsync -ai --delete --exclude=mimeinfo.cache \ - --chown=root:root --chmod=F644,D755 "rsync://server:/desktopstarter" \ + --chown=root:root --chmod=F644,D755 "rsync://fileserver:/desktopstarter" \ /usr/local/share/applications/ | sed '/ \.\//d') if [[ $? -eq 0 ]] && [[ -n "${RSYNC_COMMAND}" ]]; then echo "${RSYNC_COMMAND}" From 1b1758809a026d3591f0ac6e82fa1efa5ea63cf1 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 3 Jul 2025 09:20:20 +0200 Subject: [PATCH 22/73] Force use of /lmn/media/USER share for legacy VMs - Introduced VMLEGACY environment variable to ensure that old VMs utilize the legacy media share located at /lmn/media/USER. - This change is aimed at maintaining compatibility with older virtual machines that rely on the previous media share structure. --- roles/lmn_vm/files/vm-run | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/lmn_vm/files/vm-run b/roles/lmn_vm/files/vm-run index fd58fca..c76fed2 100755 --- a/roles/lmn_vm/files/vm-run +++ b/roles/lmn_vm/files/vm-run @@ -172,7 +172,8 @@ start_virtiofsd() { # start_virtiofs_service "default-school" "/srv/samba/schools/default-school" "Y" # Home@PC / VM-Data - if [[ "${HOME}" != "${NETHOME}" ]]; then + # if the environment variable VMLEGACY is set, /lmn/media/USER is forced + if [[ "${HOME}" != "${NETHOME}" && ! -v VMLEGACY ]]; then start_virtiofs_service "Home_Linux" "${HOME}" "Y" else start_virtiofs_service "VM-Data" "/lmn/media/${USER}" "Y" From 2660cc05c8dc318d955ccca3fb52549608a020d0 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 10 Sep 2025 13:02:30 +0200 Subject: [PATCH 23/73] Fix home directory for localhomes in vminfo.service --- roles/lmn_vm/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml index 1f68b58..1ab1386 100644 --- a/roles/lmn_vm/tasks/main.yml +++ b/roles/lmn_vm/tasks/main.yml @@ -247,7 +247,7 @@ Description=Create .vminfo.json for VMs [Service] Type=simple - ExecStart=/usr/bin/bash -c 'umask 027; /usr/local/bin/vm-vminfo > "{% if localhome %}~{% else %}/lmn/media/${USER}{% endif %}/.vminfo.json"' + ExecStart=/usr/bin/bash -c 'umask 027; /usr/local/bin/vm-vminfo > "{% if localhome %}/home{% else %}/lmn/media{% endif %}/${USER}/.vminfo.json"' dest: /etc/systemd/user/vminfo.service mode: '0644' From 51d4e34a07d540993e7e0856cc760af2a1079ff2 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 22 Sep 2025 13:17:57 +0200 Subject: [PATCH 24/73] No longer output error messages from the vminfo script to stdout The error messages were corrupting the contents of the .vminfo.json file. Error messages are now sent to stderr. --- roles/lmn_vm/files/vm-vminfo | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/roles/lmn_vm/files/vm-vminfo b/roles/lmn_vm/files/vm-vminfo index f19b4ce..bbf6e3b 100755 --- a/roles/lmn_vm/files/vm-vminfo +++ b/roles/lmn_vm/files/vm-vminfo @@ -4,6 +4,7 @@ import argparse import struct import subprocess import json +import sys from os import environ,path from impacket.krb5.ccache import CCache @@ -25,7 +26,7 @@ def get_printers(): printers.append(printer) return printers except subprocess.CalledProcessError as e: - print(f"Fehler beim Abrufen der Drucker: {e}") + sys.stderr.write(f"Fehler beim Abrufen der Drucker: {e}") return [] def get_groups(username): @@ -34,7 +35,7 @@ def get_groups(username): groups = result.stdout.strip().split('\0') return groups except subprocess.CalledProcessError as e: - print(f"Fehler beim Abrufen der Gruppen: {e}") + sys.stderr.write(f"Fehler beim Abrufen der Gruppen: {e}") return [] def get_krb5 (): @@ -50,7 +51,7 @@ def get_krb5 (): krb5['endtime'] = ccache.credentials[0]['time']['endtime'] krb5['renew_till'] = ccache.credentials[0]['time']['renew_till'] except: - print("Fehler beim Ticket laden") + sys.stderr.write("Fehler beim Ticket laden") return krb5 def get_mounts(): @@ -96,7 +97,7 @@ def main(): nethome = f"/srv/samba/schools/default-school/teachers/{vminfo['User']}" else: result = subprocess.run(['find', '/srv/samba/schools/default-school/students/', '-name', vminfo['User'], '-maxdepth', '2', '-type', 'd'], capture_output=True, text=True, check=False) - nethome = result.stdout + nethome = result.stdout.splitlines()[0] vminfo['Printers'] = get_printers() vminfo['krb5'] = get_krb5() @@ -105,7 +106,7 @@ def main(): vminfo['QuickAccess'] = get_quickaccess() vminfo_json = json.dumps(vminfo, ensure_ascii=False, indent=4) - print(vminfo_json) + print(vminfo_json) if __name__ == '__main__': main() From 191e953bb0cac66d585917a9c7a55985944fa173 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 29 Sep 2025 12:35:23 +0200 Subject: [PATCH 25/73] Force vminfo.service to run on every vm start --- roles/lmn_vm/files/vm-run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/lmn_vm/files/vm-run b/roles/lmn_vm/files/vm-run index c76fed2..d37174c 100755 --- a/roles/lmn_vm/files/vm-run +++ b/roles/lmn_vm/files/vm-run @@ -365,7 +365,7 @@ if ! virsh --connect="${QEMU}" list | grep "${VM_NAME}-clone"; then # Create VMInfo Json file #( umask 027; ./vm-create-vminfo > "${VMINFO_DIR}/.vminfo.json" ) # Start vminfo.timer - systemctl --user start vminfo.timer + systemctl --user restart vminfo.timer uuid=$(openssl rand -hex 16) uuid="${uuid:0:8}-${uuid:8:4}-${uuid:12:4}-${uuid:16:4}-${uuid:20:12}" From f69cc6efb76ecfde87b647c04f89f1ae9c18484e Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 29 Sep 2025 12:36:54 +0200 Subject: [PATCH 26/73] Add more links to firefox bookmarks --- roles/custom/fvs/files/policies.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/roles/custom/fvs/files/policies.json b/roles/custom/fvs/files/policies.json index 1fd5fb0..71980d8 100644 --- a/roles/custom/fvs/files/policies.json +++ b/roles/custom/fvs/files/policies.json @@ -27,7 +27,7 @@ "name": "FvS-eMail" }, { - "url": "https://dw.steinbeis.schule", + "url": "https://info.steinbeis.schule", "name": "FvS-Hilfesystem" }, { @@ -35,8 +35,16 @@ "name": "FvS-Moodle" }, { - "url": "https://nc.steinbeis.schule", - "name": "FvS-Nextcloud" + "url": "https://cloud.steinbeis.schule", + "name": "FvS-Schulcloud" + }, + { + "url": "https://nct.steinbeis.schule", + "name": "FvS-Nextcloud-Teacher (Nur für Lehrer)" + }, + { + "url": "https://git.steinbeis.schule", + "name": "FvS-Git Versionsverwaltung" }, { "url": "https://server.pn.steinbeis.schule", From 29d77f3ba35ff89e3aad253b37c7a7fd1da926cb Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 2 Oct 2025 08:40:41 +0200 Subject: [PATCH 27/73] Due to new media tables, the audio output on some devices has changed --- inventory.yml | 1344 ++++++++++++++++++++++++------------------------- 1 file changed, 665 insertions(+), 679 deletions(-) diff --git a/inventory.yml b/inventory.yml index f7c3172..9b08bd8 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,680 +1,666 @@ $ANSIBLE_VAULT;1.1;AES256 -31313364396663636163346533353463616663623038636364623761663537336162393732616665 -3434333865326134343164643636626433613131356139610a303039373364643263376337303135 -36626232643937326635393562653937383530653262313634633132643666666465393735303935 -6431386665313938320a376163373263333833396234613837646431633536363863303837316139 -63393639323933633665306664333339613462653135303934623233326661633666306164326635 -64383533326335386232343864383439326463653733663836303038353036653032303661396635 -32656664663336343264666432383164386530663636326138633166343365616135336561656237 -66333736313166326532633331303237646231383863373536636439333235643531633961376233 -63333833333861363130386537363836623361386134633633383534353330303163326439393466 -30393663623061343561373834363038333066393163316136373636373061353932396464636330 -34373364326333353530366231303833373061363930373336316635623566613033326632303833 -66666231653734646336363330633537383633633333376466663539353561383735353830383738 -34663332366239633738643437306539633835396131396461386364376233656561346264653330 -30373339663364323236376637383938663266346530363965613462306530623166386435663833 -37343833323538353933333532643937613363373031646238343365336161393432333065643235 -64366638643562653862366263353238633430613330393137383764663263356439666565326265 -33373534356233393630636337353734323039363835303834326438303432323731346665383139 -31653538666362636232343136323661363138613933326561633033653462633132643435646338 -33626661653031633634303938646436656565346163636665636532383632313766323139303936 -63356130363366626630386161643566363536656530316131303663663735643434376135333236 -64623164663365326563323961323134643761616435376338663539393666336662316661663565 -30313731623635353135653434303832343034333538656537663663353263396231643533366634 -62656663376564646630366332386434613934663938646139353133666436666538343162306337 -61346462313762306563373736373838303562353330663734646136663435373938336533613262 -34373432366364333833303437643063663963363031313830343333393738393336343863633432 -36643030376164616564323161666136323064316665313662346439303533396639643539623432 -39303139373463313730613461333361366266363533373238356336333961313239303336303639 -33303637333363646331353265326265373838356361383730633938633535613832356163333534 -62343936306366313265356339353361303364383863373935663437653565323335323765306634 -35613361333235346162306461643033613866613561626363613131643434613838313237376339 -62316335633735663961363830633130306365346431626534356564366532356531323933383663 -66393136616230376439643335636166373439663264383738396632366537353466363861643463 -36663735666138643362633836663933616665386638626538373533663839666533356437316266 -66323162356135636361626131623865653434633666643934613335373463393962353737386438 -64636266306464383730336334373433643631333466393965343861343638306431646362313531 -34623933313839313930326135383230633932353933623633343436333733646136646330393235 -38623034653262393231633534343231626630643730363864633464653465656235363731343138 -35376563373730663639313832383831646665326332376134666135366438383765376234653336 -64343431393961623331333164626333303338653461366534306664646665313630356164306566 -37613633373235623335643137313139623131616262353230343135386434333363313830636632 -31363762663333373734643765363366613638356132313763333538333136363537393531383937 -63653731353133646235353337663562326162326464613961383862363461353863393665373531 -64303161323266643636393337313363616536326536336135396533633062656361323265616438 -39386563376530343330633135653037336133306635633564356137333864646262623636396337 -35303731363337626635306234613333383065313962326439643834373863383133646337313532 -35623237333663613833306236613564393061303864626331366363653132336635623031393838 -38653439326464313863303538376536636235666630646232656365363838643538643166643035 -30656437343434666335393839626565303434383462313033343430643531303933646561326439 -64653734383236613139643061316333323363653930363236633038373931636334326436393931 -37353536653462386361626330643236333330626363643466333838323836666237633462653265 -36656262326166306463316332643538646365333865373165633330313461333666316530626138 -66646136346530313662346331373962343663656363633437613564653031383337393839313833 -30666532373865643639356364643636323964303436343735646666363237306630323439636164 -33306136303732306537353436636239623437333664323039393030666537663136653032323036 -38613763653834303062323365373130626663613862333764353234646136353033663664623265 -30643737386465386631666539646366313065326237343430663734313066373731633237353266 -65346666323734613039373163316566313839323135396662373839393764653832613866326464 -31316332613137313765326631346433313331343561393732333238386533303666633133376538 -65386262623433343034333737333364336261373361353934376236333334336631373930663334 -61363230326662356131613737626261646539326431326437643235333863656261316436643533 -30663364306163386431366263653362353531653564613763393164323061653261633165303433 -39383931363130376334343462373566333133386433396261616662336263653364653432373265 -34343936613061393062363933636264656464313738393566656162303534336537373265356130 -33626237353835383666646130613138313431393630623036383635393930613135623430633737 -35383138646363336437333534633464333733643132626130393532643662313762343532316330 -36353664383966373034656365366162623430386162356162383235396137386239383265616539 -34333835636631303938323132636130353035653834313738353931663630613332616364336438 -63643961666562383864396437383530386235623537333762346234333962396464353335643563 -61663164623035636639343939636565646565386364333737653734383133623738313563373935 -63613530656137356439343763656136343462616139346336373632323036323664306637343366 -33383137613235363465646430656230643131666637376331646262633434656235313535363234 -34613130336432353535373036333931643765336534313135366238316431326462643166623337 -32396135396566323963303937346530303535383136316666363466663266663331326631396461 -33313064326532303638366263343936666433353235633436356562336333373332356235643031 -32353136333434626234646638616436383930653961643962393165643066633137656131316139 -35353432343164303964316638306664386336356263666535663937323666343434306338653364 -30636663643339373833366166336331316235363236313837343864643864656665303765303462 -30383332363535636338636231376136373364346263363430653733353664326262336166653363 -30353335666337613762393431623262336433326563313361343133383930386365643365653361 -33643961623636633833643064626263363634656330633136383165393539313139353838663263 -36663530383434623263316136616464393033383137323163303135333539306338393163353832 -61316162643132363534386563376432623564333732643739393733623061303436353731376365 -32393362323037383035353265356530353661333863386533623834346332663935396238613639 -36636537373432646162626234353036383863343264333036346362316536653331646133363330 -63363432313463653362666263626366643938323766393764323831636336333965623330623232 -64646333383461376465373563313361316431666566316235306434663234633261303562613765 -34663064373432336362626331353438663235306335396237663639336361316634306362376463 -38346363313439376361386530343833666532323562306663666434323565326430633834663530 -64376432386164376538653535643961653431326439643264353236323839323637333662346431 -61323731353139346664396635633436616332636536656530333939373663386334306364666465 -39633364343036356431336637663035326261613331346430366331396361376236306530343739 -33666337313538323733303438663133323663393035646638666135343964633730333031346334 -64643161393236333533663737363538303961386265373365343434396133633638326665393065 -38383062353533373861626239383935333064326638373832333332656138646133323839326435 -63373463636364363130616638663136356465356661326637343336333331333266653762393431 -37666166343330383535633032333962393362643831613666383662306561336338646465653633 -39303239633435326663623932396437623061653530343530663239366232663166343265363662 -62326333363037363266613164396133306537326633303938666432636235336136343965633138 -38346332646639653063623339346234373664656362643731393732613239663135623134656661 -31306136323030323737316634643835323033646637323266326333613063653865356163656138 -33383561323432626665356562623731656230313565643664323963373533376661326238663865 -63643434646133643663303864353132333530616234656537656233363635346234353064306533 -37653861316463303834353134656636356564366565313939663735643666336263376634633662 -36636335646532326330336261356362333461346339303433393030383565313164656634626133 -35353632616664633432666532633934623931323535643763346164383537636132376365323262 -66336539303334613261353733653461376433636633343063346363326565313132346566333638 -36653862633339303636646430386562666639383638336137346463656563613863653863363033 -32643239373832376335383235656333333931383261666135373564633037373764333231663432 -62636165393837393936336466393234343639383138353231383731373838353737346136613164 -36316261306430386234656266643531613832353036633032333431316434633538353139393765 -62636231646361313464373463306434636566663163383531623735346136636134333339646261 -61333564383536373165383463363461343166366139616331653234626166643636643633656662 -30383965613637376532643439373365383039396530306634653061363865373737323239386431 -61636135643564363936313135373466373361666463623333363739633739323061663237303365 -64313633396334303735333132343563323036303936663130643232386265363166303562373665 -32333464316439663737313438653537623065616336373865333362383662363033656563313632 -65373937613038376634353061313762323266356530656463303339356335363666326164666439 -64373037666532303334323262323834346266396431363264323536616531383561373338336466 -63616135663233356234386333333761626135666130303933313234396535326530626230326138 -64373139363339346334383330663565636336373964613733316235613761326132346464393831 -31653236633036653839373338653332323163613463633362656139343233663633393836613131 -62616531353333373764636232633230346265633461636135323832643661303730623437656633 -36333665323765386265336664373966643336393033363234306139343339353066373164306539 -36326638313464366561353261313466666334656231363466633666613862303635393566356364 -61613463626130393361636363333630313836623238326534373733663734383632383738613163 -39646237663132363064636536363834373565316433383362376338303963386532386365373638 -31633766343166303031316465343638373866396436393838613166613166373166616463336439 -33383062346562386465303534616463396635353235623236393835626236626236376366626366 -35363732633538303966623137666461333434343938383562396235353162383036643637356136 -37363134323639633961356466343162353433303438633531616465323938636130396137653130 -31346232636537316363316161363531633537313034333637393364303961623534303131666130 -37656638323265383135646465346331633036393134666136336633343064646364643930306163 -35626635623265303263346230333938646131366336366536353534623963663030303838303036 -35306165613335326134353030633036323936356237376631623566323738656139336466663831 -62633731323362323333356463326262613739373863626532616564666262636164613031396531 -33643834313637303034643232386139303563366261323762363331376363613434616239656566 -35343635666233336563646137303265383938623864333062343662383766653164633037373031 -34326234333830343630346666316337383837623865653931383436303436346139343831396139 -33303937313432656130353439623166313437373164336339353339393639303234313033303233 -63343537363164363164636561356635636332306562373063383136666265396334633964353262 -32313137366161303032306434343438363034306630646437353036303731656238383335303737 -34366435366462643333323436333037393637613962363766353361313066363630323932346162 -36396566326265363365376332383161653232343337623131633538393664393234646563356537 -65303163313062643233663631396165613038353733363362626631396232326437366664393639 -64303635393862376532383438636362353661306165646465613837323939386434353466383061 -35303065666336393936653531323939633464333033323863613031326563343335656164373264 -61613932626262616363616337353163636335623633626265303564623436333965616362663438 -36303030363239613237393433646139373038636335646538643536386561633564633734636538 -63383835313432663433393133623365336461323861623361303062376363333630396266396363 -35636238313035333333663833373533336530393135393534616564653165623339313963303666 -64666134373239663032326266636431363931323633336133383264653362353666373930393265 -32613265663939623034373362303965616236653831383466393266653963633637303433623364 -66353933323235326636383434323664663662653665623762303030373536646366323232333265 -35383765616136316139376230663330363639393038396465653966313931633430623662653830 -63626364306436613037613537386433366537363463336532623333636465623638616332383962 -37376631343961366539306361386337616364356534643963623766643265613364646462333336 -39613432373765303362653663623561363938326665346333383865303862623734353965376238 -34396335316266326639343536386430396361623938626565623236353664363736623635306139 -32333261383732656531306137363934393566643566333534363532343438633961373734343762 -31326139356364326264646336366332663831353632626636663661353561626566623936343431 -65636432373238343336356536316162643339323439366530636130373535633136303535623732 -31343035623336366237666565326636613138646561613233663738346332313730323334346336 -66353963613632636538626433393937373033643338303733633962643964383434346363666533 -63646466363431336137663438323532646437316161623934333563356165656234346663383032 -32633063653539333730646236616539623332396531653631383133636231363661653439363638 -33353632313565363731336266336362613035386138653437643131373066356439643732643964 -62313335306236373739633531313233373964333462623663383131323633623337666266323665 -33643666383839303366333561313566306139336564653361313265393331643731623265616165 -34376234396632626137373335383463366335396661326362363134376131333333373866633639 -64666130663163643536343965373166356261333330313030663664356435393035396562623531 -33613733323864336433373834353436633537326132313732616436623432656664373566613436 -39646566323335333536323636643765306366343633363236336535323632303433323664333634 -39643830366238303830323666386431323830616336396163663632333232396530353233636533 -32633764643064396463376363623638306133376664663966336636356263356235313936363436 -31363338633634393633386538336535633939323661643161393638346438393164393832653239 -31613031616564323361333934343437366364343661623966393637636438653536313032653030 -38323232393337323332636661663233653530373234643237333061343861336165646364343663 -38633263396562666433336162363336313464303666303934653034656231333030626536303763 -32633636663061666361313730353738353163323839323265316430333563646639343737633066 -37633337616563663637623133393338323033316139346265336634383164653361613835616561 -37383161316461383436653231343434666134636462393462313932653937323031313635376165 -65373939613235383866306138333033306134386636326562383230373539316661623436303335 -30323562633237326237393463613662623163316532646163646630353131626362306333396139 -39326334326233623165383135326132666266383664306433636630376165326566323239613835 -35346263353534616463383133386365633766303434383163343163613337613565643863323565 -63343031363962316136633166653761396666613633356365333133386137366264653039396231 -34393731633564393135306664643034306136343862363636643165373863393363643336636663 -62363164653730373738313965313737376364343064393565356439366539333335313837393936 -66373336333662386166663534663462396365616566636635626562336239613434326132386335 -61376366303633666532633835346161356134316266313735613739313562316536333135376632 -64313235313663393964386565633831616331313739656331313464393239376439363730643863 -61343938646634353135326334373663383738373733343439303964353765616663316238623430 -36366336376436366364626636363265363630303232363335666431306432373962376564363461 -37323233353131633136376632613439363466316661333666643762353036623164636437366232 -62363631643266646633643538316164346134366265333461346365636238626461306339306133 -61333130316561303032393134386530323038616238376663356235366431633164353830623530 -30393638613064363963383966373838313539663931633831396331383036656565373437303431 -34306165663566346261356635653663356132646165396464326231653630613234366139376132 -34353765613032333339643265313134643461646664663436633135383332306262343862396165 -61613665363930656438633835313264303361393535386533356230323131313963373363656531 -62373538663435616338343838333166313161373837323535383239633063303835393736323666 -32316364383830326437393133663064316438333062633438656561373330376232333232323232 -63396634393132306665663361313937306433653562646561653537653934353366323133303833 -33663765626533376331333634306433356636313337356138656463646638333563346635336536 -64316166353264353834666537663661336165383032366235623665326664313737396464363836 -61653362363436303361386136393562626434626165336362383764393234323138323832653761 -31623166376261613464313565663738366230346564656236633865663831383034666666376132 -30363437623263303366656565353665646265393331396433616461623536623564633336363638 -65343265636533333339356630316366343634663533623430633563313130653163363663373565 -34366237623833363863303837336565396461646634366136303465343130386436373033343834 -32323762393961663761303538666439323264363231663263653665393635376362326336623565 -66613862626436306466333564356331386364323134333230633936376131623034653432363761 -66343530316335386233353537343431363336386138353838633837626436653966386361393763 -66636666623037643036313034633537646466313930373230346134663032323434386565306131 -35393463666536663364396166393534323761386130383066663833373961313237336564306630 -34363939363431303366646230653435303437313636373466353930646565316336376264306165 -39663461343634373638656431656232363266383334653664616561396637666339386337356131 -31356333316363333336353963356633636162646462313131306132383138303733313032643466 -35316665343231643733363232306336373033383663633334346162336636633162346535616536 -32363735633963363037323439316266323535643832383335343131616431663561623736356637 -39663465373132633363623565363235653833383532356339616266653661333264316435323962 -65633462356438616161353436353831613332303233663335343538316266303433343537306130 -66613263373337646563353566616438656566303332396230306265623239353134656534376639 -31643064386131633430316262663431646661663963643736373965303032346563396566666465 -62336538313035626263666332386330356230633834306337346131306235663863376239326438 -33383137623265396432653134363161383031663062306462346433346135653566633862323437 -38663430346239303732623635353738303864623634663163393166666439396135356631333961 -37306431353836386138663334303235313731393131653262613936653936363739373637646230 -37343434393639343862363836633739326164643932666432613764373635393465383630303462 -63353631343338366133663432643637313366653765663439306162643966643365326566346561 -63306331386133393634303035393663613761333462363832323866336465316533323832613236 -66353934646136373438333463373638393561343130336138633731303161376139376232323439 -30396337613163663535396531633539393765316439323734353533303036303861326335343764 -66393333386465313038343536663437376138663035333061646261366266333134343863633636 -64366538333436396135653237313766633631386531336135623331653265383462376463313263 -36613335396661613236366632306637303434396136386633666132373061326134346232343132 -61353530663965373961663137353465646265356534313336383930666364623361636332373139 -39623933323835363537353839396538303238343633393863393832393464356364336466366536 -65616366343234316663346362363639303136313438643432646631343166333262633533636538 -65386164666366616662663234363239396462663666643534643365633962633139343037303766 -62663162653062373835613564366161343030333363626538663134313366356366373863343531 -64366430353038656464326561383439303564616531363265313231653866343838393432383563 -32313238666261393263653864643034643233653362303866613737616462313635666439306334 -31393263386439653434303962386633386463316231613261333837643539643461363761373261 -65313262623865623639636338666434616632363765646133303031666364646461326330383934 -33363837653962626135373730626162336365303665636131313564306532343062396435383932 -62633037363166656234303363396531653032616264346631353737636164303461316230613536 -65663934636131383839366565663130386333643465666366343831643562336234646430343565 -39363865326535383466643239353835366131306234383034626666316631366638393834633662 -65336632613636323737316165303937323734666365303635353665656636323336616662343466 -34316664366232663437333336656532323166346363386338323664666233363264316661666365 -32393861383834336631353365313832363330623364396562343564613862393538623131613339 -63303563383532306163376637626531646630333630643534303431306439356538353231313635 -32376563396332333136626533373231316661313836376532643039386237373066633263636531 -63356634646664303762343537303564343363363864336461633566333638303635376561363937 -64316265623439396661623862393639326631346366363561336561643161303966376135306631 -66323163363834373530363134393464663866303330623530383839613566376162613738363433 -32633633626137363234613061306137356237393566356264396366666566383231613332306237 -33343861646361373634656563666531396137363531636230343936653462383632363732643130 -35376532316135306464636261636462656464363061636165333835346538303564623631303539 -35373437396635363337356531316138353961343134303336653038306132613032373263636665 -33613931363066326230366564353339396336656239366539373737376134616362663963366264 -36343266326239343836343136626130376663353930653132646366343032613231643839626163 -38313938626535353735383939626666646439616138333465616239346361373437626139383166 -31323033636136376537373661643965343033363861643065303330313864363235316134366436 -61383930333531633130623033353532616131643935306635663962313633383932633430646238 -64653266313335613731373137613332643436386236333236666561313965386432303731656238 -34346662326437313333313939303533333339386135653161363366336335313261323136313539 -30313333326165326637376666373835626531633964626361383336623066363066313934636438 -64333462376637623130316363633133643337646266363736363839383633303365366334363436 -61313765343433666238333363386434373539393539326662383261663834363337666334373466 -38336461303763656562343133353139633033656130376266306538626334366564646332323333 -30373136373137353765336138393138306331643539346463393162363134353963366434333734 -61303062303032663661616465376461663832626335393465376130373466353636303033383733 -62303735383964363230333661356237383937616634633166663538323363633535323634616532 -36313337663663383938643331616639613732633630323037383339396332623231313531333331 -32343037653030663661366533333536336633373563383536656235316162663537323733636263 -32663939396463613732616565346166633238653838336365373838663637323439306236376535 -31626636656632346664613464373636333233656535346635353362363237626231303537306331 -37353365393534643730323937373636333135336539623262396661393530353330366564373662 -38333162313965653833313336656431326635333765626632653633663963333439343038323062 -31343939663161613338633036323836653436336532376266383230653137636432393761613335 -66356664373830613934666266333131393436623165373938323265656564306462663037303630 -36653433616233386535366531353733643130346265626433653563353565653565313166343466 -65633463623062373934383065366334663634633561343866386530373461636232313661323361 -61333263643433373834306164653832383337363236383363383137333232613862663761316239 -35363236363031323636623739646331333435306235323365323866366538646261613461336233 -64373936363463303662316535303066363864616435383461363164636639343965363132323561 -61613566316432326266633131653534386565343332303061323033643933316437643939376530 -36366431353432633834313964616264636536383632386330356335323733663166373334386164 -37653466393865666563346332633739643063636538323761323139363663323734323738343533 -62343362306432656237343836383530303630636230383665366532303136666635323565306364 -35646561393462663565343362376136646634373530393936373633653137616163663666363537 -64363465346564303965333561396536653234303632633766353362323030653334326230316465 -30353434356138623439356432303131623131633763396337363530623463636133356639656535 -33613264303439653164373430356536656331393161386534343635656534663862326564306561 -39343865393562363561306533616231666330616166306166303163353766393033323663633961 -62323864373636613139613835396138623163393466396136303437613738666638643335343935 -35663234333630613861383532613830663335653534623537623139656562326435373632366637 -39373638653665323137666361613030616132313039353535363330633264653439313432656236 -37343965353033363432613961623063363436386433383663353062626432373534626366393633 -34383535356365643430353563663864366464666430656339363030333431633133336265303332 -39343865323338356563613530656638383537386633653530396638393365613435666333393938 -63393961646632336566306437323236623730323737333536376531633462613263343565336136 -37356534326334313634636362343439663965336166383832326331396330343531616433643732 -65396336623163343037393234373038613932666265306130643064393864373166353339333164 -62623962653333613137363635336133613431303738333764383661363964343366303638396230 -33383237366161376634613836386239653036643766663466636333623861336464333133323364 -34663535393361376564396665323966343963343137613339626639666433316433656362383735 -33393862396362626138373637353761623939393736363133323734376232653232393864623865 -31396439623264653362326536356131393332646361333364396665363838316139363939353433 -39393031396565373637646236313531386632646665356565633034613832306130363635323639 -64633439373637623064366436663238633138653539376238663834636565313564363562646639 -37616137373437633031386137323361313638663330663561303533616537326631633232623538 -33393333353733376130366235616134623431326361363837386164336465373161663234623939 -33303834313238366434393835306232613963316666396136343735636238396433336261336363 -32366332383666663234393632303461383436383863646535616265616234376137656265646537 -34323164323662323638623031643036376533316364333835303337353461636636366134333763 -36613232396265626530363963333335623366343232663031663632646633386364393832353062 -62616431653435393762353433356337323939373536323239393566393234326537656466343335 -38366661373937626632616635656134386136336663633331336239303439343265336164313139 -35363965356235303664316332326236376536363932663562666430613563326564353530616233 -66376139626633366332356538356434393063383766623066653031353866393065303836616663 -66626636376331626138333965356436613839613037623863393336636533353037646632386461 -37363761366338633637656131333631376562393064346536653135313932623933623066303537 -64643937376163386565353637313966663461306161656433393135333861323035313235306431 -34303064653336656231613030323736346438636561383237396266373563653765336164376465 -33663838616663646433303664383036663361363333363064623131666331633031356636653031 -64643963626638303132333937643433646439386635643238643439393239653637656562373163 -39653432356162613566336434643238363938383039303165346237376630623766343165366162 -39346564616439613365623937303638666266626434656662376465656463643261356636356232 -37366430363339633939643539363934653336643266663537613336333137353731646635643330 -37363933363664656336613164623265316437316332333366663338303665383135366163396237 -39313634353630356161636536376132303933363437653161303833353963363432393730363935 -61353038386339336639326437353366313230333339393831303062333533623039306631346262 -36353632626364613464373363313465353932633562616335343133393362613836396634346630 -64666535346130343937633830306130313462323734316238386362363636376264643235353632 -64663662303532646331653061633333393539656331633236623235613434363662333435616234 -37386532633234646539633638343061336566613161373936636265316235636165653362353764 -33343039386136666335396635303139343138316233656139666437343336323838353637636265 -39636431353336643335616664323637626539326636356531373036633866333831393261653032 -30663234646330353362316531613364663733333237316161323534656365656231393230613639 -63366335353066646462303264373562363666396632373364653231323366383731656330643563 -37616435366364613133373664616239316435353031343939653462666539373639326162623730 -61333863623237316430666365363363656332303466303638633865303264653237376365313735 -39656531306538353361383136323666326232623838326264363939663837376632353236656164 -37326462303333326466393831383063316630356133396465613533373436376138343263376132 -66303436366538353965636465323363353831363838393136346435353939323831376539323436 -31386632633963383834366433663838376333386265623232376264653862653762363435393464 -37323033313861363738663331663462343032623035633536316235306566366133336163313639 -34393533646530623532343763306239363635303665373837313433356365633163646661656531 -62643035366262653534356139323238333637323761623636646131613938396634383465353437 -33336365363465386234633430333535373333363338333061396463313463396238643064313533 -36343564633265323530383930646433376439633335323836616266633066656130646632346338 -63626535376339373564656534643565623463663632643533333565623033363861626337336230 -37616465623538326665613865366264316363363435326636396366313465663361626236636266 -30303937376133653930383133656135326434653033373862346239666365393666356339646163 -34333636653765643833306630326533386436303632303861366161323062373530613763633439 -64393966636533303831396165613439666130373664323035666132333731643533636431353566 -38393766363766396631643834326534626338303163376431616334616461393135323135316630 -63343630363930383933363238663836653363363237663931323835326535323461636632326465 -33646138373430363361333730316430316339366131613430656363383935616661376465656430 -30653262366634346666616633306666396166343437666664626537616431636139643161393162 -65666435386333306634613436336337666164646261613831353830666662356265386661386439 -64393238653435313337363661366331386331386435643164633264373161656338626131666334 -38376535333230306633333532303862383633656364613135333233643638643830313565643133 -38323831323861623164353434393466346339303530653263386233343131623365356165346637 -37343233383138383066653365333538313233316430313332313864356531656466373737396162 -34373134636536396366663836393962303034656162333336666637373030623961316631326337 -63386433623933313135646438623339653437613232373961356262663934343064363566616363 -30326637376438666335323531343532383530623763363930313332323532383837333566663130 -36393763343966653766313631616432353165663730316166383931376462336636643762373533 -37373463646536366532646465656535316164333032343134356632613237303435336463363031 -37643764643034356430323938373966636361623632633333636335323335326662373538303838 -30373233383831373833643963636236363766643164346632643333323062613964373966386636 -38623934383733366331616166336461383230356563303431333561303132373363376266383330 -65653931316635303166646238613137363339633734386266643065643263623463656634316439 -65396330663732366465376166323566643636366165613630346636613064663534393835396631 -61613465313333623931353065373732393766396461306432663833396537363732353663613464 -39383665626635613438646631313661393931303263353034323534633565333136326438343834 -63663638363437646638663835613232616335313133386630336162343333303737356337303733 -32323932356433383761646539313936396165326536326663613235613937366661336233376463 -30656133393163306438323635323830323532316162393564646333373534616262633135373136 -30343633373533313831626137313436656134333234396136306465666234613036343164653239 -63623830323338623336373435366534343630373432353030396365306131353462383631393463 -61643132346463383235663662623266656534313434666631333766613234313337343436613338 -37373266303637363933376638316135343833303632336630353638306537636261626466373732 -33663738363935356331303733343939376235343766653237613531373662623366333136336333 -33616237623862316164306232363931353438336135336564636239363238623739636361353030 -34653234376133313037373532666437313539333866303432356163363837633462626266633837 -37303433336432656362653131356230356330633732386130623031346666383839383036623339 -34353035323662383839376130626338366539643532333037636563313532363562633238373564 -64366163373934396366656338643039323033383932393232333262393365363065323735353465 -36316632363930626337346565656531366134666465316239363564363565373766626566326263 -61386461316439623536383136333238643163346238373532363730306438636565376133653361 -64616432376564316435353837373835653730663363366631646133326132333961316336626132 -35346537303434633664336234626161616236653130633239653631636133353032336630626265 -39393766613432633035383533303735396634633336396664616266373966656137616365663063 -30633938653031356638373132306562313165663538613439393465316537343635333434333734 -37646561366164633464346465373063303262663330366136616565356430333239363862613563 -65633234383431393936373637386165623864333263646237663336313161646536366237666633 -62396437636435643338613930623135353663303634373036363730626262383231613665303961 -66666531333831303964636337373638336136656164363336373661326438353163316238313636 -63303363623864643538653433623333386362643839623462336239643533636135393232393936 -30303630383533643461393166636138376531616262656631323639616437313164396663306436 -38386533333666666338316662623033616331373763393966313062623866316438666437663365 -39663736656365633838313433303564653664356134376430636436363835303364383134653535 -62343138333631653561323130376635313539653239366130396262303264386531333465613065 -65653262336366613139616364626232313166636665633266346662643337363862363431616334 -36353431316431366437326537633161313761346532643865353663383763336462393438323762 -35323462666130613661393463643838356133643264303234353866343830393130306232653862 -33333066363236613339616333653964303562396430643637396430373532653463613665333032 -65303364353733626430353661383634313638633565333535643262333663343132393464653030 -61663164366535346666626330366430663363363631663265636637313431613635376666613038 -65623863393734626538646362616361323630323566663531633535363334346434313132386564 -39613763316563613639353162303637643939303539643934656532366336616330656461353336 -61336233396630656431363262623536393332616664386530353037323461346630613338646635 -38336362616433656362656236356638666136333231663766316534623061643135353132666236 -61346466636237316439306434343937363230636538306466646566623363376134326630323037 -33336561616134366437373430383762323065343638653535323764666461396139353462333732 -36383232376531396566616236393562393461383566366336323831393163623738386566373364 -33383563643566643737636535653861363532316161373730656633323032653535386238386362 -65653633313331656135646637323762633732353532623735643833633633313865623135316637 -65613565616338313563666363333463323761336337656537376532653466356232313937313964 -64316138386632613738306261613233373234306435623131643533646161656431626438663936 -63393561643235626439343062653761376336363235343032393030643166313066333562363962 -63373562656636353031636136376366396337353463633433326165326530323562363432356363 -35333732343335373534373230613935313862623233653632353066656363656232653662623830 -62623238613838666366316463656134613634623365353463306365396231653761653432353731 -63333739383931383162343761323463396638633231396333316536666536626131313266356233 -62306234623334393333323736363838376632356663353164393362613832643234393265313537 -33383164613537613665633866303735323436626564636139356664663463326332326166383033 -37366364633163366234626434653634616532643766646134633532646263316561356566306230 -63323138653032663138346432333338633763353164653961383162626330633334386263363465 -32323237366537376665633863346430346333643363376264323835306161653437663138643336 -31306263336330626433343733333931343231343662333937363038373561303965383736646564 -62663438643339663831623030346130306233623938363737336663333036396638383563393037 -65306266616438613034313932336536396564616162383566643531613237616539613632363463 -66333163346566663439663262613934623133643163313639363335303462656463613564643464 -61626639306231653534343334323732653936623839323565656137666338303338326338346537 -66326236613662663731353366623862653063303130663034346137323564343836666537343930 -63366239613862626134323837376638326234643634353436383461313732383636303764353135 -37326232653136663335643061663139356461313930383762333538636232623730316362383966 -34623465323834333431656539663763346662613764393139653533303864373336336262653436 -37363433666462323138323063306162666135343766623562373565623664353163356333636430 -66623937326633363465643737653435393439666235393166366533313835316662663461373164 -36646662383661333039626533376130343039306231643465333737336163373365653231613838 -32346666613736383632343566313130363236303739363635393462663934666163356633616162 -62313666303637653137633461346439666363636631326462353930373231316163613537383165 -30626332366563386437346338353330383830303834613762373938663831333434633937663936 -30616634643030313664306533633038393331336630666435303330373932626138313330303135 -63396330656530306133633764653638663761326363663865376330356131623035386239623236 -39396265303637363135623365306434323739316661393435373731306438633665333864666131 -34643235396463386662643837623964623332663634303430386662393262643735396334656366 -33653230356365613865353932393963326262323365656561363338336632323837306432633135 -65313062643536616236636565383063353662336638366530313633616538363061386663386435 -62323631626463323564353939643664373534316363646465633438313464383061653831363364 -32623865303637323433666665643662393438383231336335373237303638333130316231666139 -31366137663766383237623465363734333739376232653863373539663337623633393434303765 -38653638336563336661626338303863636263393833363062363232306661343738303264633465 -66333531303432376463323466366638613864323439613136323866626433383262303234376331 -30613838643565313861626235626534373831663566623364313837383631346265353562383964 -30386565646537383933626432303762356530353862656461363030366639313333353336363835 -38613637383633633733626638383933616566616534383466393735376565306438333461626162 -36663133363439383862623838636230653236376537633863383564393964633236306637336465 -30373034663831343033363464636464373633366539646531633062303663353131636465313332 -66623665376534366134353330666566656438613439656636323564613564663063313331356133 -35666339633264613236303737373232666333386535313638326232306434356263396535303062 -62306230336531323435363638663261353264366363393731313038613661356264336166643135 -63306366353463353934623039643037393966383731306430623362663038376565633231636166 -66393262616635396138333561303038323633663834386261393966663533313834376535353333 -36386664633932363238663766653237303432383330353763373332313237613831636532326230 -63323033663730393364633363386263333766653431623538323563353235326336373663623261 -64326335363364643135336533386430636139326337346437316436326231636532306338306161 -32633236613433636134653965326236653062363962613732306266323834306430303639326437 -31383439336664643939346165393936616339353437666534303434613365636566393435333665 -33333130383036396566613834316464616264633966396138306236333665333165633032356231 -66313030343530613232396562343864343637363035393939373936363936613934636666303464 -31333533623365396431393466336165656237366630653763336134363536363130323337383535 -32313938626433393835373939636435353633303636313733653133363261376334633764346130 -34333862633433613564316261313438656339613335373237316461666462356536353735383064 -32623233313862306365656365626232386439613262666563636466373830633436373832613863 -65656531366165353431613335323861643961376633356136666332656634326361366464636631 -64653161326633313630313431323635373831313938626638663330613562333863343235636366 -38653836366536373838653231646138643536353761383136653563373333633737363263646564 -62636266343237393766643965303561666463306334376665323531356430303261306435323466 -30623863326431313862623765373666336639616636396530656539616335363364323939393331 -64303339383565383330356130613932626234303732383731383539366237346436643138633730 -61666132353437383330656333353837663964313631303331356330356539356435653264666338 -63626662373962613836363237356230383939613434326635373333343234646663313965363730 -37393336326539633336666666626533623531343365363563356535653331616336313335323930 -33353034356337323838393864333530303366623032316665366261663638333966393337326561 -39333036313035356164313566306438316331336431666336663332643664643031643030343537 -36333364663331366465316634383030623165346237383336333236633062376232333939376237 -38313834616638313064366438666138356336636535613534313262383066363439343933383931 -65666638373938376133663839313064383966323262626330633665313462656366373563306565 -33623161623838326434666365656133613864356431323432653462346133326430366236333666 -34316462303164656164393465396133643061356364363135626534626565336339643637343334 -38646238613531636532356466326263393238373962623238346131343737653834356535653834 -33653266343730346134633831396361353334393764353733373636383631333838336331636636 -64383763303766396332303830363132633361646531343261383339346537613961326231383732 -32306631343739303431633639616162356461626466636336653035653332313831653364373839 -63393366616438366632373231363166336465323765613632393039363765366239363031626165 -36336461343665663964323738316133656530316663643831613331333133623231326661346236 -34663032613733376664323938303939626238373437383233326630333634383232303264313939 -63343665353435316238313736663735346237343864646334383039656362313761383832383162 -39643262626533653939626364613730616233613938626566363464633530623431613865336537 -62306532623061373135396639643736383536356133326230393239613937626463333831316431 -63666333393237313061396637343037336436613133343039656265363739636638393236306535 -31336430356538326136386633656138373637393833393631303838643736623631386261326161 -38366463643734326331663465326136663335386561396235393066333834646536326562663537 -66626132326635636430643561393134396435616565376134666565353038613637643165613935 -35363237366165613964653461323132323163623536393031363638353136326635633462376537 -34616137636162346266376237393064646461326234653763653637623630386661336561663066 -61333063626132353036633464643135646632306136656331643432666336646536653736386666 -38623661616435303439373230616336666537653262613234633730613331336166613434343238 -34653234323932343939653164386638393537303663633132383963666362653530613138343362 -33393331356338333634666463663932306432623361666534333065313764373537613963656331 -39363232343264343863393431323564653232343732363161643564663933653965336632653930 -63346531346235363732326435353038663361306539336632393330313030363562626666336562 -36303231656334316337386230633339613533636430613739393139643061393361313937356238 -66323933323934653636373239353162363034323334333030616562393832306635343166326534 -61343130633665616630633838623462396266303039623031313332363631643861313230366133 -32623766343363373034313732356565386637303331326133653966393738656535613064393061 -38363530636236376235376431303962336231383635393163383333653963326632343931616166 -32343666353966383964626561376362343265666133633161303131353438653939383536353232 -32323835386431326138373239393737396664333538333934343534376431623130656437316238 -36353131333966636665623139343636356436323038366132643265643835383263636264353934 -37356564313036663035613834333534303839323166666138636136316631376235646463656536 -31343033373839396564653966613734623265393133653932303362656534633461393238643131 -30323566633862626232363439613531376561643032353365623362393939323931376562663463 -33306530633639313738313662343636633931643736343664363362656466646535626533303766 -37373734356535303037393666666363626661376132363934633664343864353133356262366565 -37646163323835633965343932366165663831663035656437363235353535653165356631343937 -62626564323137333464313762333966353666663338396566336639333133383838353739373164 -64386665306164366137373265343165383036623761313339616364666232616536643837626338 -35656366306438343933663133306264323962653462336336323239633061663030653537666533 -31373733303763653139653432663636653837333964613538396661376235366264346663303534 -35396264313936656138373865356532613563316638666165643262316465616566323535623731 -33646163646330376230363165363239653464393632663062663536636463333563616462333534 -37613364306533386633613436643266343132376636336361393833376161353762366235336561 -33373165393733306162346535306566653935666533623237666131623735336162393334653662 -39633265376530376237396563363338373434356237323034356634363265666230326533336238 -35303634643339633436343838663461343834303939366263393938343461623136646661613466 -39353230616331376231303936613439343965643931623330353633323736376363353031316261 -31643535306534626362633436643137646232343464333562326334343639613634306262356264 -62396436666131326637626364626433396262663061356635613732623061303765633065376336 -37316363633034623838393635626161386162313165316564373662386333353831646439653764 -66346432333337393666346334613430623739313364356434616261343739393464376362373733 -34373938383561363833366337343162386635326135646532326333646133336630393663666532 -62666237656662336438303230323839353031396166396462356563326332343232323466616234 -36386135313564666430303262346364616261613566636230643736383532646436353066383930 -35396330666166663663313739626262643533623233623566646130656166663234656165626662 -66613530623365333033373338376135393231316462343933393233656162343665353661383562 -31303134386637643363646363323766643533313337316666343332393133343666306132366639 -66343464376633626164383866643030346135396435643130356330656335363137356361616339 -64303636616633633062613265336238323133653832346438363366323836386662313063313330 -33303065376131376363343839366131613231653331333262656464313737663030313531396464 -31373531393739623239336135353066383265653464643731303261323638393039313832313761 -63373864353935336262643133356333666563353339336163666338613264343233393066646138 -38613436393066376338633334373033363638366539633736396536653533643736333431316133 -37373035353330316361656166326138663031393563306461643533363736616365636435363632 -33323132306165373436643234666561623766376432323935343361666266343563333332633137 -36636337613566333663643831333935666565326166383138353064326631343135666331336435 -36653038636162323939393963316335653234616362613230653730633237613935663365386437 -30616232366538613161396339303636326437623031326435396366316363666338316635636132 -32643934303630313563306233643862376366326561393534613761643730383038613566306336 -62393335666363666233313437636365393935393364623264373534666465333337656638633438 -33616665303263326134356663356133303136343834623430383932353433653766616135396263 -66633535383436346265353966376261313432636339643439323630623835393765326434343437 -62336332616137353938633662376366623435326539316663623364333861653464373630633236 -65653133376665626337323265353438666338313238613563626562383964663237333962316237 -35666262306334633862623263646666386432613633613933343637616635643862363036373464 -32616564646662326166323330343562366630616232663630363231366634373037313066623866 -30653433353631333634373465313737363139363737316436643138383739306265643133393036 -38376563633235383764303931643936663137363339643336663039333335363565306263656462 -36333431306365663138653134663837656538386366343962303764383365663336653864613763 -30333734353364636464643835353261343964303166343031353065353761323061313962663062 -37323738633332633330333332333537373863373437353236666538323130326137626665336539 -30623963393166643030303837623462333266653833633664656130303563373862636633373938 -62653465343866363234366537353734333837306464396433373535366535386634333163303461 -63633630366164633162303238353137313731663833333038303235356638353336633539646161 -34636238363264653634393565376164643139396166333162326236313236306563323563626633 -38363836323739313666366133343865313433666234396433376230626631643539313662626538 -65326664613266643466613533313934336266303131636230316430386638373334386433356662 -62333738633933336366373835333939623133646633663063383131386163653332383364626664 -62333335343538383662353861626462353637633432376565623766353362663234633830323433 -37386236363830373261643662656639323665656235613465366131633462663433323035366264 -65666630393461393762656538623238656437666135306662353338343439366530383336346661 -63326365613334666266306533643036333336623261326135363039643966316361666562376461 -64656562393333343766303136366235663337303561326365316664653665363033366138366662 -38656238313364373561313539303933613463623261393839356265633937326435663239303662 -32356536366634363064323262336530393163383263633965353238343534353230306231626464 -31376336323864323461306462343766363765323537313938333665666539663735623161303866 -62343061346664323138333136643263353331343462313666306131333936383630386137383136 -66313430616137386539623739616531326137393966393066646463306638643330393964376563 -39306635333337323234346633353138663366646561353861633438666332646634373563366361 -61396139643061303962656637363961623163663565306536333963613033646133313564383333 -35653962666263336364346265616633636163616263393336623766316437666165323336656662 -64363561363336393936363538363966393039396333363132363938333432653235353637313134 -33303732343537636433336234663262616239616334363933616636316464343562633430323865 -33393566343038346436346330666164356165303039346333323761623731636138663862316434 -31313331386364343738643031303539353766386337383863623163616233323665363632316664 -33626531653732353632623032343161303337373135306236326365326361666535636436313934 -65306566326663346136646366616636623632383537323738383237343465386430313232316432 -30646535633332646639376464616266393131363962386237343663643738393365633331613465 -61663138363963643933323836383434623061326231626665333362353934366264653262386538 -31353433316138613038626638613133373663343864653565376433316333376436386262633639 -39633964373833306565333636633535336138373533663834353862326139333230636464323165 -64306564376137656130333239643132326537363932666335343730353331666464363931616536 -64306265356535623466326633643161666164326131343738383866623038643763636338643062 -30653263653338383962303139353337663039383434333033353966323537623632316630373437 -35313831313638613961393765313135346436393833383630346432363734336465336434303762 -64363564616630666230313463626532633730386339343832623735323334656330336663366466 -34363463623662353163333665336566643232636432646464353561613339303066666633633266 -38666438373962376263383065376266393930383838396533366432616263336431653038316533 -33346231386633623265396138666166333266653038386237326133366265653263363061643433 -61383962653135383939373934386539666162623163663737343539613061656630363636356331 -65323362373264393930643936306565333239653337663737646665353930306331336139653432 -34386431323438313165333831663062656464663162363565663438353964613835303536303937 -34343038333834616665373033386466383863376130656230363638316537626666373135633438 -39626130303937346165356666343733353631646533303431346231326563306461623031623930 -37633938633061666663376232306234336434363533626432303539363432386532306232336664 -32623037643265663465393864646163613436346165373037383665303966656565323664366436 -38323764626538663235383064653937346534393333623931616234396133373930656664653630 -36666165653930363966373631383931346437376164396438353139396232633734663564323735 -66366665396630373932343864396437353661373565646466316563383434336532373862633837 -37666433646333303439313933616261616634643739643463383466666332323962643331323637 -37653266646234363964663565356430336135313765626337383933366435616261333564376365 -36636462313432373663376265656330376636356232333831653964386463353336656563323235 -34656563323839643565623038643939333938313862666534386539653366316432326461326531 -61633437356530623462623362643739623565333165393432376238336463616339373966613933 -65666336613766383331323262306161616335613462333439303763376161373264623463306531 -33393131303932653861653838336439396633646465333332663637636162316662626632363731 -32373032346139616238326438663237383763343735316261333335353634303964323933333361 -61343263336165306235383562653734323664323133363733666630383561636637346238363038 -34626239323239663439363063323030386466613365383263623266643630356336383630336465 -33393539643566373762313036363436663137383865326231333631623734656535356331623239 -36306431313832363037666538626438623066363137376330323361656466316637336534363931 -62386334303039346561643561353662303139333564636463663461356166653336323334323033 -38636430343132383038636632616564386631313663656330343761646563383039666439373861 -33376138363633636135613030373961626362653436663537663663313266373031366266346634 -65353839663264643263343561306362323534306632316161366137643665393135306666343662 -39326638333161353462393837306332376338353137383262306164323332303061366339613961 -33356335323036373332343038646163316239343564363232663137646662666263393765663661 -61363330346466613634326539646135386433383433303339323536333435303631393239356339 -63336662333965376366353232633665346237663835333164393035333630653861343534656261 -35383665343564343132366661626463383236616231396265613531613862646164653435626433 -32363136383064396433636432396532623535313664316465663837626236356336326461636235 -31613731313032343634366234393736343836616538333731363734653131623664346634323535 -64333961633236313737393933626339303030313265316135323837613033616332626137323938 -35666332313430376637343336366236383330333865653565656230303036396637343630303834 -64346461316133666365386331303366323231376465393139376566666539656238623161353639 -62653233336132306134326232656233373133333834636138636531323138353430653762323034 -64653632356535313866343765376465363432376535363939356431363264353139313365663734 -64323732343536626232356264613136643661376363323361353731333235663431393663396334 -35663963363935346333643161316538646530356164346365663466353565373763613233386536 -34356666623135396431303765363138346437626439633432353633323837653132303066363861 -36363338393565333131343236323833646665353834643238653831323537663664633966356133 -66633837623461643362623337323931643338316438393765336538666434393930313663633665 -36376264316362386661333563366137666463376237323836373963613437633633363664343031 -32613963373931366163616436366339633939353534396464346232636164613138656664343230 -39316539663862636663643861343136333065326136663863333631653563336562666634646339 -61313537363530383935656233633535333634363838386630616561396539643061653036656339 -31633833623564313036353466333538633761363034353232653234306232336661316237643737 -63336633316562333130633838643034353264353331616566633935643234616565313734613063 -36633334306433623965636364653735313739313963326538646633326461386437303136373336 -61643934663364333838633466363466643037396563623734343839343436613537363663633235 -63303433316166336432613064663139363264633963616366316664356232623664333838306335 -37356534363764653439336532343363643065383366373934636262633835656232323530343933 -31666638356138333564636561363731353366306163633665613538386533613830666438663731 -33386464356665306263626162313965353433343832383464626265363261316537396236393661 -61326538326431343037363632616237646636303563623061393666623235323662653961626335 -33623362326538353636363531633839363364613837643731353961333963353836303830656339 -37643938653064633766373764316233396365343265643637373133633534393238346332643231 -66613337353662323663653066393165386663353634336137663039343933616436383432663064 -61656634313736633630346534333234656632396463383131663363303236333966313531333666 -39626438366430373038356136303162653530313031333962643538396363343830646434316531 -373163643837303136633832363963303664 +65646662393463636363623235323964373562656133356635363537613739373066623930353362 +6431326464616463393733306437616566316138366137390a393962393230323038333733396637 +65396630656239383337313861306637306362343536313765386130623066313061393239633938 +6366393636646361360a373333363338303136633133313064343232383366396566393439313161 +33336531356233316536333730393165643838653562356533643932386231343963393838323334 +38643231323437363334656439653962653165393535323532393830333230643933386632306433 +64613938323939663563623231343438643263343862666665386437623864363638663530613732 +61386438646261363531633864613635663734313339326332356233633262333938643430353537 +39653638656565643633326433306637623837636635333130613163656233656333613362376331 +36613832643963343562353063373736616361613161643139343039656531386161653666366563 +64646566336238363366633463663036616166373465633934323961313136386662663866653038 +66653333643163336462623661326533616437663630623131616335636639346563653330653635 +35613433656462303533333735663034326562616564363165343732326437353666636430356265 +62636433636664663233383337613361343333383730326531373165643236376338666639313439 +34363536316236313761653030333638323131316535303362626564613532383538653638363239 +36396235346366633563646165323434393061383638633936316539306132396564353234633033 +64303037303363643832386465653735636363663636663933333934373462646439333539613438 +34353266633865396637663166376266663865326536623334376538643132383339613137386661 +35616231616265633265613239343966313030366566313231646664663232363134666137616666 +30313165303039643966666563373238666139626436376238376564643031343737303436626433 +33646635356234313365393038386132613835356530653739303562666161643737613934363033 +65393665663664346161326261333861396335306238303030313066343732313461343166323030 +35376461313232656339306631613537616338366463366337663466356238356662336562356537 +62356538303662623866383061363030373430656632336137636231363665393430306438613166 +32633064346564393131616662666331376664643437663731376463663832306334313834653465 +61633030636436366533366334323563303062666633326464336230393537323639393534383431 +63663338653830303337363331366434363163656135383462653133313832643263316637653364 +62353939373833343763313331393464363732323637386139313835366461336164666537353133 +65323565333135613734336661346638343233376536333638646434303064316238376464316538 +33636664313639633932643836666533633863626362613562663532383133303535376261303439 +38656134623666363735343835666230326166623031366633323636383662646135613764633832 +38313731623232306361623764393930396238623338633535383334646136633032323833323739 +63633333316561656162343662306165303061343734633738623536623536376366613165373838 +64306565363932383038396163383731626361376332613265306333363462323137633861383964 +63386335616136626134303637396435306263633533363561396337643531353135313466363862 +61306130666431346230316431306238323661393265303437333161613733373131616534326262 +32663361393031623533386165653561613838386134643763666135656335316265373637366663 +61643430336530396663326234643436623761646165363130316536386630353435333863363830 +37666638643730363163306431366333353136343837616162326363316162643334353337373661 +35353337316364313333313465386239336134383162623338333061363631303839393735623933 +30626263613633623336346539323634376464326539393761396333643838383634343232333830 +33363234393930666534623365636636643035636161366232303834366134353035353061383033 +33663334373233386563663163336364373933303866663134616662303934396364633534376163 +63383535646337646462366264613162333766366139313338333262323035373063363561313664 +64373237363165366566343234383334333664383937373531323161333761346235633637373034 +66383435386232323237343539323736313035366538653664373330373461343330306130386364 +38366361333035393035373337663033623235646561653764653231393339643031353563306337 +31386532626562303330373061343236333039383264343764663535623134336332316232616366 +34393736346431303931636133323731643239653662623966376462643063353633303634383337 +63353530396234626666376161623762663564326431343730626539376530663237343331633163 +32393133346663626265316263633435333036383164666639313666323039393735653933356533 +64323436643839313631626336653266363762326265656135663732346233313965663131353461 +38346564313736613633336565653436646233653136373963666334306330653664616663336435 +64306434663639386662366531363861646566653365636539613839396564376431653534343233 +34623132663035343062373134623538633830363230623037346465633738613535373464373164 +33653566356564626632373636393032323261663931346234643462323833303466643735663461 +33666239646638623663333338666333353862633939373634643163326330613037306262313362 +63306335306561386364306235346639383764373732643231306239666432663564633462633036 +38303261666661613431616234643430396461633963613561633638323662373065373566313261 +63613835613335643336386364393362363564653461333438346563333063323763656234626565 +37376366653234323730353964663064376232303532383132646535353832343830353562633262 +36333238303561653932343136653163306439323366396363396330343637373036386665316565 +33316232666138663835666638343338303162366137323436643537343664316137653737373030 +33636336383233373462643861326336343366346338313362623331616536316530383766336363 +66353030356536616237363331306230323765386638323132306664353034643362343536396237 +34323362346261323633646139393839323865336635616630333337363936353930313765626462 +64343533666162646632366539633034633266383936656337323734356266386637663839643034 +34663537643666363337363336363938313838363930623836613638363366323562626664373431 +30323035326437313266383033643466613430336332366166386139326139343233383563646639 +63623538663138633439383965393731626338396466626664616433353663353038386432313933 +61343435643330373363303761306532663935393534646162363939613563386235633561373437 +33333963383136393132313464346633616465636432373531323337633334313535333064626364 +61373863373734623638336432633264316131646432303132333165633834306464373335653438 +32656264316665383837323861313237636136633861303961393834346462656331333733303134 +32393161643164613066383061633430336434323935643566303164643135393565306136633761 +38663632396332383237386333383033303664633065633939363362326639353365363136386539 +33366662633964343834623137366435636632636335363932323961393564303833313965363830 +34643739663534373161626465303231316336663961633131303435343730386332663264636637 +66346231336336336536323564616464393633323061623064396636343862396532663734643838 +62393062653638626639303533633566323234353163343165383365626166646537653164393562 +38326639373536653264616230646163303463343832616239626363616464656631393666353865 +38313365356638393262373862353865366633633561353638356437343662663733663933333265 +37373633363331643039383562333134653433396431313230396132363239363265376661306430 +35666664393062346266326337373063353436316637306164393666623865646333636233653234 +39303335306265343362303236623430383163303933636434623435396338353265643933343931 +38396666316466366138396138393136316137666339353334373532376565356637336464376630 +31623832646461653038616665663262396536646439353739383037376162643235616663623838 +35366538636133616162656138393234643130333035393832393032363661613338643839346335 +32303162333562623161346131663136393165303064623134303465333966643765623366643834 +36643961343761376536373539343637626633653238643632313039663161623136613964383862 +36323437623961353535356436373938313235613833373338613132393336646134643766323535 +65313564363839306565373764326233393362623332363833636637636639303361393834613337 +62326264376338636334643238616635303136666363386462313164633064326162343761353133 +36383732316238393831653531626431393064613236326462376237393832656333623563326432 +39303233393232356534633836343033376462326131306638636430373639303733626336636239 +66336665396361643936613238393332623762363438656431303765663465343338353864386530 +63326662633539363764666533363265306532623230623931613237643731333937623761313934 +36653263333765646430303639663736623263323238643137356365366338353361353262653538 +31323034353665323362373636613036356631613034613937326337663963373937393233323831 +61613532633531643836653836653232343861616632373538323130623634373539643138356336 +35353162656436396635663130643138343437613235353665356363636664666232303937306435 +31653064333761643834353535616637646334356363623066366533666137333633353931373635 +38366531653765363063653134303936303234363135323266643364663263306561353662306630 +35386539393532636337653630316165326264306466306135636531363035636265653132393033 +61386534386261313931316132383163363638663564636639646439633561653832366437323539 +33343039333464386631366465646336313761366432356136636662626634653234383131373738 +34623261623730396333373231373931333337613862353133653930336633333636363961623630 +37663136653934363066626265393333323731316333613437393139373131613261636530326363 +66666237326565363936656535343034633361643562333466313130656636323633366537303838 +34343065633363666664383032396364663337643636636337656164356332343033373039633636 +39643431346237636265633265643932313766623263366630336666303030666166393462373363 +36393261383966663862326634613332313262383338626237633732303732386266376366336365 +61323165626562323163363335303138376134373339323266323935616133646535653461653633 +66323265626133333635386530373738383430613265666230323230656565666363346138366565 +32616161313662313230646334316236643431663261396539306266323035613430386365653830 +32613039343939613036306332356536313864633934363030353033346464653835333638383830 +62383162353361303061313164376162363463303865666661353030346561613336656338333338 +31393035336266613764616535636663383539326230643637663961363031376132383538356266 +61316338313863363963653535303961663134366361366661646437346562636136623564353130 +65636237396563323637316166336533613066643535346433343930386638393136366531616464 +30323431363062356536623064396265326566323131643331363430313365346337613266643937 +37313939346565653036383736616363643761633863643537316663323834393132306265663861 +30323262666162373830353835663635656630653466643435326536316234623630393033353161 +39653365316365656264623937313265666562356463633038666633643332313534613339613466 +36336435336262613965666465613238346261663062646231393763353931373632666137373161 +39633638653965396432363732303764383361323834373661316236333834343565663861653033 +37623031356332376534633466313730653263333062313632626265306133336437616533323638 +64386464616633303863393261323962373631326336656135393435356362313264383664363739 +65333865666534333034326562653633316139316634653231363138343634396232616432393534 +63633832393666383332373361666533646364316364623235303866633836353763333632326533 +33383537393832376131626266336239376161626463663862653931663639323661616639313633 +31386639316135616161343737663533376661323638316639396633373938343434303530336135 +38623636656566313562613465633731623039303964366437363163383039316333393033323264 +62623664353032633263346433373664333835393133646539333137303266653032323366336463 +35646231353963303862393530343661653766356136643433613236346566643762353162393738 +66393737643035353834353338316330663261393162623737663233623739643834623266613061 +66653231366435646638663538626230326665366530393332303664326539313239343439396633 +65316539386633303230323862353166626333356462383261386565306339373237613937376237 +61343666303130393366323937383862646130656533626539396166623236396638336163623363 +33326630313132346135646635343531356261636632663261656434393961326335643930303536 +61356434303332316638393964633134323261393533393861663233336231393238363937643732 +37383063366237396263653334616134376137306539636538303234653566376532393333323138 +31326437373661663666633830613735393737313563613131303831636336303265663934633638 +63346538373038643330306461646561636634363735633566666264353338656237386431616138 +37616334353531623366353335343431663332333766633434376632323735373837383436323836 +34353264653063616430663635343532653637313339613564643234303064663734393839636233 +63353835373466376438643939353731393436643966646633626164323732643230396434333133 +64396263656234643230383565326238636261636537303636326235346665326138626636346263 +34383263396635303538336331366435643465353265356636386536346639643939383538313231 +32393837626336653935393736653136666531303434646331343032373363636634653634393134 +65316263396565393037336233303663386231343561666338626464653134356566336239616636 +63663934353663316363653737666436316461633135353932353366623537653863376566633435 +32383638353130383232323665363335326461353238626662316530633962363136663766666237 +30643430656638363638386531323534653863663133623863326635366362643938666632363930 +32383430323136303237343232313265343136316636323733346230353032363033313834616531 +37343765396132343764663162393836323236643135313436393664633263346335653764303038 +65613764393838386661303135663237336462633332363633313161643066396566396634316331 +38303430653937386535356261653333313366363563323664636265313635636566616430363132 +62393065393863323631326534633731323237353961333962313165613531643762633964666432 +30303464313430613064653661663339376133623032366665316539626564396138363536386139 +63666561373462643539336232326533366465616334656563336431313932356461656135346236 +37323565613065396232343635373339373966636265343534666365373339343936663064626239 +39313361336433353634653033653831643662636239643939383765373632633535356264656232 +37313936353036316462383734636236653535383538306362383538343331623262373163366439 +37363366633532343333363163353364666531303633336166386138303536366534393935323934 +31306563646661323038333633313839306632663965626130306137656336633466626233633336 +64343636313062363532363164663933356163346437353131623931616431633538623961643136 +30396363333630396463326261663565393038323930336562333038306264643564316335643435 +34366637343338396537333361316638363530333162303739646636343734653231613362333835 +33333030346530663733316263356333633532623731636163316265646137366331663638353130 +65323862323630366436326563366234376665346634623437323665623534613038376630353231 +65363034616162643037303735306361346533663838363933353937376131653734616133353435 +37376139343666323365356164643132396239386366353662386639393033623363303832396163 +65303062663562386235666463623233336264643933656133303633643032363964303064636230 +30336132613038383865376430326463643662643432646135373036366665313238643935353130 +34353833643337323034646232346261633532386133346265393466393761376134613633653564 +38333237326266366635643164383065323332323831313565393162633339333630386233663338 +62383935656235343365303561656164626136663732353162666135613165363531383038646533 +63356363346265656230366363333661333630353465373439356362613264646231383164373933 +30303639633861643633376364353639643332303765373437373637393432626239633463663831 +38383066646436353332373730316232356430633430303161363561343635663135373230663962 +63376438303164396566663436323737326362666436636631646537363663383739626632306461 +36653964613538353031336566333038333134313731663335336630636531383130633030346662 +32626335363334303539326431336535313766653264333437383564643765386663383962623634 +31656339313663616665363333323862306362376161633435353264633838356236653830643032 +39336434666634306235323765373735373030616461616239656231343633623337613632376633 +61326165653161383836363162313565633432623436323932333966643162623132303830373332 +62666333646233633130643965386333646230343135613739366434323261313665656562656664 +66623133316238393865333037366465646230353435656533386565333166363036616437303465 +30393333643132386663666163613130323030623962646434373534626634393834626338326565 +37343432353764613839393539653535666164633433316239663134366165366364636634393637 +65363939313436633936346136313538386130386434303939343533613135353538633832353830 +39663238386261333261306135353633623738366334393134313232613134376133373135633066 +31613136363065306632323136353966653639373234396131356663663232643136613130636630 +32363564326262373235323434363030636434323338623863376264393461386365313262326433 +61343961656138633763386263386135363166393138636231643864353562323434353134326630 +63326332373361393631356130633131653666386362656166336536323761626263646138666564 +65616464313430383931323630313566353234633531383164393433643961613762663265626465 +34386463613037373132383930356539363761626663323233623431393963373531346634333538 +64316462313936323438343333336232353235356535323663376263306636653266343038363937 +33626432613362373337313563326134386532663463383535323132316163306535363631643466 +36366531643639313138376630653263313930396537343834383563356336633262363765653232 +37646132383537346532393230393263653832373233316332633734373838376665633861333864 +66373539336537373935626339306535333736666135303833633562663734653562323436336663 +32333436383262313361343734303038646564656133646338366337633865633633313030346137 +32613436363865643637366161636338313538376238333662376464393666366134643037363566 +66613463303332356532643532303264333862353834346566393762303164313362343666633536 +37303632336433323062643235353035663463623862323364313563613363383164396566363862 +66656461363933363961373663623331633239376236613561313061353065653832366436366237 +34366635633864376363653436343962356532353664616161643338313834623165386565376366 +31303863333730613435643434613961373365386332323238613261353139393831616230346463 +34656261613033393062376534333735666139303437636461346563613633616336393539643863 +66313633396165313139373334663035303433633139343162326632343830383738366239613965 +62666630386536616363633033343961316333656563393737616661393534623163643163653862 +37306163363437316633623634363963303138323336653535393263306663363337656338353765 +63326430363532386362306438373363363862336365393430383263303265653339363932346433 +35346663643761373231643564643931386134643434353566333765346463353662373230363932 +64626531623739356637616531353535623734333466626438396565323432303064633465376439 +66336566646534313262663931316638646164333239353332633965373332326630653331303539 +61623463306633653534306436383466363561323833373435623464343430613561663363653836 +32636361383437303433386632326563656364343734646266316631316636346365353166623766 +33316265393762363033326431616130666237303461646433616134343534343065323634633931 +64646632393566306630326663353235323865616531613037346664393637636361383933633832 +39333535356535623836633661666136323664356130333030373061396130313334363733653461 +62613330393436663334356563373439613134313066633737346131376561623864326533643466 +36316232383465363566383261323237326362393963306633653862323938656631616438323765 +38313965383766343837316334616661326636366339636161393562613364663363616339313866 +31353835356462333732383830303438626437333732653431363634623630383164646237346363 +64333439346662343837353232353936303037346435383539393234363535303337663834336365 +38646538616165363734666664383437656438306537653066623261306135383639346139303133 +37323734663630646566616135356537643831623533333536363665366232636264393134353862 +30616635313661643630633365393061373935663038346265393937336138616431353133653064 +39363063653866313432663763363132656339306237353163623230343633306338303638656339 +32633464626139633665303636373838343265626535313763633961376362343465393863303931 +62363337306466323466653765373764636637313564333933393366333162356637666332393735 +62353036623035653332656436626131303135393864313234353936396262363833373063323137 +34303062323231363134383063666366393030303362303732623965326631323765316130623066 +39343339633234333864393830323439323662336263323761373565363036333662663061613465 +61373737613933653836313163666636616535376534313431303862333932393365633036346266 +66316139326135396162363231626336623239306136653162343065373231363437353938653461 +65376334643735366539363731303836353564373866323539636665376265363961386439363733 +30623538626265343636633564373033623630643661336135666339653436336332656432623262 +33636332393932303837643162343663633962333230326231346635396536376334366432666130 +37643762323964393437666631336366336561383662393334633362656434343935343038333135 +34343165363864303431613439346534333937636439336533396363316336316633356635356230 +66353836623435346435393231636531386166356636383633616566366563633736626132626332 +33363137346466353337623634643738306338636264633263623833343863343562353535613961 +64303835313135323061393165316132613565306666633631393132646361653732633563326531 +33613131323735326531383236323235366435623531323633343737353932633636653834653465 +32386339636633633963313266643831336162646634613465303238656138633539303061313961 +33353765333431663434613832323030623963633630653932666431303165633531616133646233 +62643633356264356537613163343539393266653635383662363161313136653837303661363334 +30303930343034396161366230313336306135663064343934623338643437383162396561643862 +66343631353366346434636536623965323063633538653433306531643931316565636335656233 +39666562383962636236636538303237333764336336633031303130386562313236373839396534 +65666234353162626139306166356633356339326237383866303538353531386536366237653336 +61353136313461656433353766663135396262303737393632343334643334366433383536316438 +62613265383530616137643833363835643363636436353264313034613162383637343063373764 +65376135396463343136353766663536643833376664613164653632343561336566363431353533 +63313330373637653765356464623937613639313964383361353031346563363739633765346433 +32373338323463313163353235666663396162623732303233626134653066616636653561323266 +38303037653438616561353961323239613661353465323037393037356264366333313162353130 +35363463656637343037336430363033656362666131363735643030366166633464333938626338 +61356332336331373231636465653831626438623166373235303633316666613539313561333463 +61303861323830353736653963663863633565633236303630616365333866356364303531613365 +31643234303130636365623037613062363331303534313639376632303630336637363133323833 +62343261643432646332656366373562373664373566636465353334653833396666346230373639 +36326663343730616164613034633662613064303931663436653139616637356639343937376137 +61646432396533643465376363643135306661306537316665383666643561353432313131336232 +64333330396466666165326336646563363237313463373262653062303232646465386633323337 +36333438303039623530323562356630353133353261366637363835333863333339386366636238 +33663265623834666534333937653738353064306666666232323662366530386139326664356662 +32396565373835653732656236333463356137636362336165656563626230363832396665313833 +35323933653266356633643138323936383839306364323665303033343934373036636132633463 +34663265356532356538346135356236313439633136353130333837383761316562333361393539 +32666364653233636661636565666533653963613439346361643539383966356265336331326633 +61353662356436313636353961636263393238333561393461363230613034323261663439623733 +65653462366463356362663333353136643132613932663163343432386564633065316530663262 +66666465396631316537303132653439383561333938646536326662393436363364353330643134 +34356366316331646465303035376636623364333963626435376434666663343566663830316237 +66306539323665656165383465376661396463663033376434313664663930396234646534376131 +31353934313361343563626365623161333131373038386466346565663762653138313861356266 +31623465633837653266626634303637613830326634666239646661643637643037616635326165 +63353231316235623033363939316665326136306234316663356461333462353165643933663434 +64306634373965643365313233373363633762393333633730663063373862306563353735363865 +35633462316461333938363431383962376233376238343437633163336330353139313063313430 +64316133383234656131613335616334306466393237316364393539366366633832343266343361 +66653462626139306165303732323837633137316664386235613133303935626334623266313163 +65616130613738646464386532656536613065306261386133383636643133366163313036336434 +62316364363732613137336438613337396664383032626666663531643534386564613063383461 +62663031306338616461306232663035663534316338303033663364633966663866313862656438 +36376232306335326164333464626538663831363263613634323234653235393433616438343133 +33333364353864643137643764326634343538393064643732656662656537653139646566316466 +35333036613833396439643864356536623031316561653233623536613832363561383934326431 +64363439663236313461393562363966623130376661613266353335653037323339363761393337 +34613330656461613134306531366635393931623030343032643637623332373730356636633731 +61636233653162353432613038623432346335333366653664336166326636633865636430383738 +36643833656231646361353338353738653836333130336631633535323139336436653666626363 +39323661313166656166333338346661666665376564303939646464323465323533376533356435 +33383339336463663230656164653266633964666131363338383138636339313263326462633061 +66393662316531626335306466316432396261336563653532343935363139306331383838333365 +31633466613839303064316430643332343861313437613034623734366333343833653537326539 +36636361396131326466643135643931626636366333616363663732666266663662356230633134 +31643362373835663532353065333136336364633736346434633937346332333830393437383463 +66383730353335663830643237663834656536663333613061396338396330306633376663316134 +33356663303063616436356661303339643665363864626165666534323465613230333637613231 +35663830303938356634376236353261326561613366303830613933316131613935613064336139 +39303464326666626632653061333766613963656535383562343137643735366335313235383631 +62386435626132393837663361383933323832316263663939376632303165383938633162333537 +62323164343333313539663064323366333738386639343564623836636562393361396638623232 +66373264343562383465343766363139643433356165336665363662383233363537303863653266 +32656130366132356239623565386131356564666635336162643339343761383663323533376135 +62356339393034623232376132326365633864313563393135653065386564306264633032303665 +39663433326261643534633665366538643662653763393135613763396533373137663162643732 +39643535323463353265373531323139356136353839373064393663613534623532613861636533 +37323863333064336432626432343732666166646434363139333331643637636231306664353232 +62333165386534616635316333663732643465356632346664386136623636626534303932663836 +37653237316336316362393934613031303435326632393261383937343539386466613632633735 +61343936626535663336306662303335326163343332393138323032386531353262363031653338 +38646565373362366562656332383464303361623638386662623435303339656234363330626161 +33306238363335303938353134613935383962383561633663303836343964303137336663393062 +66616463666166396436623566386233643966323937376333333063616164653339333264643862 +36356538613038303432323735336564353635313831366639306164343031646432643835613061 +64646132626532353166306632386561653134303433643033326531336239353335633365656433 +37386139366161383231326430653438346630626439646237363737633532393264376662333435 +65346562363730336339366663333466623463636362326538376634623166376439323161396163 +66336139656463656565333834663137353861663662316630343132643037333831613534663663 +32326366323637633161383539303462643431373132393139346161336236616439333731363332 +34313936303032313663353661343532653730633639643566346561636535646435336435623335 +61333765353936656535656131663030633332333265616230363038386337613431313631343863 +36663031306433383938663633393633623361383163643463323834623239626431616238366438 +30646236613662643530303563393635383165396539663737333632373961353937663137623434 +31613030366161373732316436356131323162666437323931636166326636393634373237383936 +65356631656561336133653438653033306163633334656638376162313861343432373736626439 +64373634346662363530346166353639633964613236376131386463383133376337636636383664 +34626235353332303235346433373131333764343466313161343631343633653635336233343932 +63363366363133373635326661346639366663393761353031303737653933396334323666386664 +31363433306235316661613035323631333735666236333066326336376339663533656436313462 +35393536643835623237303964366165383966656664653535333439356633333164346434303134 +63393335373636656233386639653934343963316137623763353665313762666632376334633135 +37323636366635303139326566663736616462323038353162316462326534633862643665313833 +63323833386363623561383435393565386436306662336266333565323333393364633332613533 +64356331346432326136336138393437333039363234336337386566653661616464353737373862 +66353063653739623939656335653530323134613631363964623139336532663733653163656362 +63383334643130653730613162313733303037653339366132313139633636373364633866663332 +35383632633565653035393832313537623335306265326231343632306264653637333832363335 +63303562313634626237623533313538323761393639356262376533643664623432303638393232 +34316335326631356433353761363436666563363065333434353662646565636339396630626637 +33666265393364323335373136666635346233323233643434343261393665623961343661383164 +31613135386332386236386138333732643335353531616132316334353232633862633434376234 +63366337643035663739623962616131363336623931346337393165316463633739653236613232 +36623936363130376433353638313135316231353230623334643139366261336338326461613334 +62383765613864616333326430313837373162303133346533613665633938653262313064303163 +34663532353961323365303966656235626238353836366262373530366237396531666439613932 +30623734303336386264633036383866646232616138343931346635363639616361333836613862 +64623239643236663539653163393962643462623834346338303731306438633763336266313063 +61353333653165386132356432376337303832323838383032313838656236343338623035396136 +33623432356337306435343966633935303632333665333664613234303936326339393233356664 +62383662646338373137363434393632303434353330343561313161623439313430366333373136 +39646165326130303834616334356430613335316363386238393633343631346237613038613332 +62386235346666316637333031333963663939626363623762343861316536396430313361393131 +62373138366434373336336665366135333334363238626237656634626639336235383761333864 +36346633363539643032613334636233623334333866653133623836393431636231633164343064 +36643261666638326366333865343339353532333862356537333933323334613939616536646564 +34616137323366373866353164393338343633636537616334636265393230623639333465383633 +34383337396434623635323466653563633231663833613039613864343266626465613634363434 +36313764323163653932313965396664626565653466393436666236363237633431616261356437 +36613263666630393234363062383561383562646663636464613966343435393963306333626364 +62336634353636396130323535346464343362343464613531313362663962643435316536373363 +64336232646264396532653436366438376464656461636130316363376461616438373334383431 +33656364303435356666643631623264663632326162633330363138303863383839653761316564 +39646536343039386663386364376336313536373838353839316630383934326231656538656366 +65643566323266363763636633383734373965366262626538366632393463373931386332343437 +62306436643834336566666466326466353065666334386138656166393836353962663461323530 +63633433373437383561386636326334386138346138363332313364386263626332343136393363 +36373335613334313231353737343831396166663661306330363133613464376566363562393964 +31663434613238333638666431353262663736623235613930626335343837616237643333626463 +32333162616433333461643264373966353839656662313234303039653137386662333435386533 +36343962303165303661383461313539303266343431663439303464613632333464663864343862 +61393566316538363931616434356431623363386461393537323162333339633063363535386532 +61356637376331663138303432343266393163646632656665623061663433336538343562646139 +65366335376631383463333838343331663330346332383565303538633661616239643837393830 +66363730343638343164386438356237616466626135643434383434383234343639386435383639 +63666262393165336562663036623236346365376563356363323161336632366361386634363765 +63313034313132316634383735303566336662643665376562346533326635333566313164306434 +32376664356138353030666336333666343931613137386436393363366430386533343330666336 +34303035316361323238333864316634356332376639316439303931633038613637656537636631 +34653763646133633963323435333834316537646133313931623765616430333038316661396634 +34366566623461386639313839393662323536316234613732663539353331653435336432633532 +66393236323861386161613662613438303761623534396166396532663763663365373465303536 +35353633343235613430346361636132383134366561666533333363383862383031303633643762 +62643163386565366261626438326637653365376366346335616538303736626139633965373764 +31396261336564313863393066633335373864356533393136616664666165376437626563646137 +35633236626231343765386239613138396336616566613463646366343464383038353037633263 +37626638366338326333643137613665356530663637653263336631326562393733663832376363 +31306635343232316137393661623739376165633331396231356461386365656134643661656638 +63616437336434376134333238616537633434626334393936313830373333303732613065616663 +30323636383533393865343564666134636531303239373737636466373939373161646636323334 +63326636616437306261643261613264366634343263383764313064333938623266623732336539 +37363739663033313566336564393539613531386362626361373330343138353636356562326639 +64363165633737316333306439333330343234306638356466376133373432336663623064643564 +66636332303464623831356466313832313234366165326234376561383962383838633236376665 +39353031396166643230623063343238396262623230386630656132373331633532393166306634 +32326664616365383164323162396634393362626663653064316536393366626231363763346664 +65616130343662396232373539376634623936653230636434316537653663336338396530333437 +39396366636261623864653032323832326331623733376132353332636565366361323936633862 +63313463383333306433306235356634643932323665616139653963616436303339653962373662 +39393766636166376162656232663338373365633861306137663333656465363634626265386162 +35663566383065636463383336643735633461323035666333616634373839376238346437396164 +35323435316163626565623065356236316661383330616263356231376661336231366135356534 +30373937663862326430323437313861663132306465396130646534326362623837616134626532 +30363834343162326632376338343239373733616133316263396339346335326238643434386663 +30616636383637343162663036393165356533386165663166336464313161623263616531646137 +31616137326134313332613434396562396236653261363065656264306464313265333363363233 +64376439646238356138616533626633633636373764356464373136336563393462623765393831 +34323439336337346134383934393962363164613337343336323865653730663031376335376339 +62326331316666623364326135313434363263323764353261336439326132646564343065336565 +31646363613734626265363332623231616665316365333133393633656435353733363433376136 +33643436353664383131623261313138666132363162303064663936656638616637356437356637 +66323631613161373463313136333133636266636365333762383739313935633766336566393934 +35333036303030323332386131373563656431663362373737383139363862376239633634636230 +39343865663036306138383762393339336362323962353161383335363933306233316264653431 +61396139626535326466633739396435303333626565323238646439663032363763396436366465 +65343366613438393661653963343461633331356137343438353033376137353234636436613166 +35363337346434346239666237396361326438376366383033326666376232376661333438373230 +30623630353964653265343066373766323936343866346134393032316562663766663439373632 +38633763383930343236346531646634306336373066633330313766633230393530326265336238 +62383966643664656364346163373065646438663565356261623833333935643037376230363366 +31303035643238316464313163363431306562663934626666383163333138396339663636653538 +38363965636630666265346661333565356663323432656366633739653664336136353339386433 +35323937303134343563316463333534643838386662646238653831393763616537343463666630 +33333632373262393464313732313637333635663339653036303964633866653961376531643362 +39323733636565356561383434383239373934623464656530303738636134623736306231356461 +39643430396361666235326462306537633962323733613039316331393233386630316437383632 +38663336613830613263616130353635303239323864343636633866393230303735393639306539 +66393034306361613433386533386166303565383133626530666361663138353761303265343565 +33353538353461306239636537653134373035666461333534633962623532653030623263343365 +33366562613032313339333732626665326564313462383132386138393635323834386135376464 +37663031393832396338333837653736616331313163626633316332393365643931383539613536 +38616133373939646266336333303662353234353461613834653039386233313531303333323733 +34363366306561373338633463633130626234313734376631396161333933313065316461373237 +66376234303733343865306161363634626561633538303064366134313965666139303362613634 +30353564396338643666323935303062346133336265666366663263643330383431633062623264 +61636262303433333435316538373365386265336563333231646233633238643939323736363566 +38373563393139326234373865313663363061613038643930373733653834383066636265333539 +38626436313136343266653935383266633139626363346136346163323338636130666465623333 +62396464353336646230326437633365663266626161666264316132613732373234613131383662 +61393130306639323238313239623964343964313239666230313232663963316264643332303036 +35306137623761306338356137393136303666623738633738656237333133663133353262376663 +61633363326630343561396465363863373361316638336233633966393736646164326137623265 +32663362383264336635393363653863646661336566306233396132643431366465636236363034 +35616237383633613066323062613332313963636461303538323037623963346435653765393737 +31323236323031313437393462393638653038353034303864363761613334613737623538336330 +32363837346361386437373134633066366536623436336238373165316561616136386364636335 +66396337306363656433636334386166633063393436333665306232333838346662373566663935 +62393339316365623938353735333835663465643738333437306635316237356338626437383034 +30386531626430646661653132656633383465316237303734656533656462306231373933613561 +62613134653239616439383233313236343433653665356161613761366533646337656664343764 +61396134316530616365333364323965303662616233393066343935303930373736343135343062 +35623561313136336431396361383435366238636638653361386161623631643132326432393963 +37636635316130356636366235343133313862616461323263316330323964383633306637303836 +64353639366337353836383030663230653164383166663865326465656536666666366364306231 +36333064343937323933353339316334396530666637663965623662376261656636663363396130 +34313036373062326132313338666464636331656661363230336331323663323461636131313961 +39633264643839646439363065663436316230326137303531396134313733376232366436313735 +39333766383961303831383130646135343333303133646533336130646161626366623064616335 +31313034376237326430323333333932346463616531383035303539653539666137333566326637 +32323666396339633234386264613762343638323734363030613832303733346461616531376530 +65623732346465613430626531343534623466663366623834323832636464663264626236653832 +32613331653066386231346434643834333733663532343961333837316534303532653563646263 +35306630616537636461623933303331383436346265353663363732613665623461303161373339 +33363530323161613932666462316365383865653464313539613834656638636132343166363366 +66613739343933623233653764326261306665363133343764366637303435313832393432316334 +31326230656132303762316364303537363165303964346135373565386162343934373433303763 +38323430366462366135386162333734663731363761636635373737346231396461333839613133 +61353734666362313437323939613835313537386432613633396162646539393435353464666363 +62663762666432383362346262643364336434616166313631363037653361363037643533386335 +38373163343134663931626662643532306631656630343433303062303535633163363731303561 +38636465636263343262623138623731623235623863383461626632343161653166313932376662 +34366230333063353935666232666361336133393338386266613361306436333430656333633738 +35633536343832333433353666303530396434643064363339323237326638396632336362316266 +64636331313735656131366136663464323030336364343138353030653031623166333465316435 +61353634386131313336366531636634663530643132626666636261393163366430303864313131 +64376135346538343936383938613862643131386136616331303435616366333337363638313432 +63656661356332663966383831623363386539343139646138646563393734333631366639303663 +37663639346339633162613734346339313739393761366333616262323835383237306635313933 +63383361316339626133643538366336633966666365626630646634626362613736346530353962 +31616535643262363831353566666634663532353631386364363933663239656630346662396135 +65313437373730646463303939623037356361633865326434626332653631323531616236396333 +64656635313062613264316633653562613766393766663638646632313835333131316234666639 +32633465623862386361383437623233373366303361363531353464653236373666326262306535 +31646263366665366466396230663764613730336632666433663736383561633632613038626265 +36316338333166376535376230303336356636663631626166653230366365383733393234396665 +66363262353433363830623434386431613662373665373031613031626335613836356333626437 +65366439336165616638333266366238613261363032626461666431636331343739356464303064 +38613938313564663038336639613561323464323631326236333561613466323165663861653161 +38356532336535623962376333396236303263363638303038316435353664613662336133626437 +35343036656539303766343931616536663134333561343438663865633231313838303865633961 +66656436616634323731613036646336316133343065353730633536323862396139346165393838 +65393130663165313634626137343633643236373232396433373838626435636161373739393134 +35636461623335386532333437303465313362303137396230323763643031616438663763363638 +63303231353766393961336234336665336131313863316237336366386437616538616162656230 +65356334643064386431336364663536313537643562386431646139303234326636303261613165 +38343135643034363365623933363934326639646136323866396537343435383766346131336164 +30373236376263633663333237326264323531376562626663373361633063356332396639336361 +34363762343835376537373932636433363430353135666562336339323461336236353936316634 +39373237653135393038303466656664316664663339656661353935353436336132656132333339 +65643838306436383435383132396261633830666237333331346132626638313338376566626261 +38656563316638373533613132653565613637626265663939316430636262653037633634303932 +62663636626131613266353430363135663564363131323836313635663336393138633134613937 +33343438363238313664303162326139396665333032306365316466336365666435343338343431 +31363836613339313836333733346565313936656162393662383666343739346437313234323631 +66636531373039333130393937613232656438323135303630303362616163383431633162336562 +64313732333639653031353939363164353936363966626331366535356536393138313735326461 +34356338663265653934643566636333666330613134366561386265633139346631316231333934 +65353036333263393234653530346563393365323935626236386631303430663163356539306264 +32383930373033383239663165373366303939303536316637353264373061646262316438356239 +66363834613039333466343331626631353264343365303465316465393938393465663432646364 +65626164386134316630343663353766653531636239613736386232663839376630356161653934 +38663062663735376434613764376431363863366639633466353234613465303731396338356531 +61663366353937363332633635396666383366313466373632363162356132623432326232633361 +37633366663938383738616563623039616436613937336366613733346437396663353062356338 +38373634353139366637366435663962626136326464316135636231613630313333396632383762 +38303831663262626561616531626431333631306331313161396264303432633039323462393665 +31633766353733363464653035616663356430653030306230376361376237313630336336373636 +32616461343534616134333766353663373132353133316132316335366338393334363636636161 +36346130656633323633353337303064636339643039316665396562343830373930383237356362 +64363866386232383661373432376461346530353165346338343263613665346538633832616665 +65363561303964303835643430356333356631393636303861626632323930636237653763326539 +38623736633336663461343737643832363234373766313163623863323939393738383562663332 +65623639356164346661613962393861373333313530626436653566316466326561303934346236 +63613939633562393464613137333133323636656562616161356131663335623262383239393062 +36653034663038393736383630613830366365316662363835323462613565663731653437353638 +30353239623236333635663130376231643737326363396232353235376539323531313231633162 +34333064663433383961396565626362666138306539626466303437376561393066373039623734 +38363839616630626431623264393863326535666436663030323235383634333134636134613461 +61623463366362653262613030383364393065313531323630656330386465343938313536646632 +36316562353861643861393933356364346139386635663738356562383363383538653030316235 +34643737656634313765613834333234313866393232326535393637383562333763376336366335 +36353061346139343863353732363164326463623165663437643962653534343635306637396635 +32386431383333393166353535613665653764316563633461346464666462643936396663343861 +64313662353733626332356330346431643539303936643766613431316163333434326638663865 +37323362656335366132353063663739376462393465353339313234313239353566613338366463 +63633761363233326530313933626439623936386331623033363633636237326535303231373034 +61623635643638313133316133646631376534613863333466636435663664336665313265616361 +62356165366264323634303333653139333963633936373465353534653337306361376336363532 +61343838663934376565646133373133313266663461656239306235353937373435626235333736 +65373966633539346534636461653730626161636630353639353361366632646337316237646265 +34663338356463336233636333323162386165303434376564663336333439393239326161663061 +39353266393435346139646663363435313262316565363239336134356435303333626438343463 +32316463316531316238653062633133313736626262346565663065326563323836316161383833 +36363666373635333366613464356533303637636462646135316465396133666138333064636466 +32376264386661383530366466356630396430326137383238313431303633613364666363666262 +35396561663536613663373532396333616635663037663936666535623437383139323866353032 +61383737663735623437646664316636316462666364646230366363326538623664666538666261 +64393633353037666464623263346439666531616364363639633065356633323436396237653831 +32616230383032383865653631643431336234356466336333336165613836353632303565656135 +63363465373837333837663662313564656537396434323034633633663364343866376532346433 +39343137613133653832636436303334663035323062636633356334353535643231633037666537 +39393162666663356437353166303137393238653134363038376164373464313339663033376231 +61303634643861633366366561393936383966633266636333313130656161623763383839353531 +66633264346337323130383334623833646130373836343638316365643939653437623366343735 +34353462326362326231303339316565346462323533373861646539333366633065383030323265 +39376636623132386262643930303765386339633337313666653636376665643866323565633363 +30613431393464646336323764633432373361326266336365326666313238663238333237313261 +39346664383334613930653365316631643166623266356463656132613232373232396530656235 +37353361353434383539353238383737326638656135613936613039373935366362663034386637 +66333365613462373036313439303736383636326461386437326665313561383633623631656565 +62383631393066383265366138306362643266653661323333386137323239386237643366646130 +62613334663864666336386463643937353962353832343364376637346332343666343332646634 +64663931396438356564373531366333313637393263636438306564316333316637646636313835 +35343034623866323831663562336464366232626661393166626233646261313833383761323531 +62646435353839643631646433316431313763373565393832336135663638343637373735666536 +64363161663139346331646462613634666164376566383430383231643332386130653236393938 +36663333623630303965653462346466616630376130363634303734393339333965346664383264 +37346465626663656439326163663461653939613261343537313566653362666232326235346165 +36623532353230613430383334373132306633643530616635373936623337623461396563323562 +30303238613032313362623166343165336233323838366364633132393661393935376466306333 +37356165363033643164326339376137636533376637336239656530326236366130616636316164 +34366130636635613432626133336432616635626562666165393630623962333639616538316562 +62393931383261343338326435663934666366353861343432346465383832353731353330316464 +36343139333834376632383037316439623430353735353563653237666432653134653162363965 +38623336303630333933653564333364356461623363313839633132663732396236326466346162 +39343730343333613664343839316266663438636432313836333737393963376664346461656532 +33333139623038386165303933356235636465633537616330653766643961323264663538636333 +65613934633337626632633232316336326265393366643465643563306233343265613562656534 +30616463663736336435323861356133336562613463303034303938353739396334326333373835 +31373232326331653830616264313066346565633165613131653133666334356461343766393063 +33646432306461643363393731323330353537346465613635316634326538636333383362633361 +32623230303434366136616234306264313865333838616431393634646139663139343130393462 +66643535646164646135303233613438633138363962303038323065363934323265303961663837 +65633339626663653533643736613737396164363166346465383635316237393730396265393733 +38616265666238613534363962343339363565613761396437306538666364326137626130313539 +33366132663662663039333134333865316565343534666530653136393763653563613966653261 +34643531383031316634333836363162366334623936313764633931663235393431326330306666 +31616431626337646565653063363239373339353632373063363639316564306162623466636331 +30396262366562396461376436323963653564313533356332373063626430626166373239313833 +61396134616431373035323130363839396230653036616130346666383931613236336639306532 +61616363626435343564353966373266353662366235323262386131326563616434343235323466 +32346539616662303031653531353939336364336462313165366636656162613832383935643032 +64613466313233386133623138373366336266373664326634316337333237613763356431383837 +33343930613734313235326436393034613763393434333765646364663830383161396537653165 +35363235626233373161663938633832366330323162353865333135623338623435326335326365 +64666565333436613636303862623238333866386663303036613436393966306631333061366132 +36656566666264316630373931333232623331313537613230303064626336643630653735366661 +64333335626265386663643464663030353433643337623730323131316165616430373866393033 +34336232386538613938643961666539613261353637366138373634643736336465323435326331 +65656136613465343166623263393332336462663134613263613266653435643137353662333835 +36343139663833393436633231313435643363336138653032666665313265643436383561346533 +63323364306636626136333163653434316435356339353133336131613833326263323539366565 +38633736386539373831313433666130356338646664643661376264323734316634373039386137 +38376561353831356431663163373832666539386132306566636438386464383333383031386339 +32346631323463326466363462306632356430313932393833313734393264613938343237303635 +65333763653365663562323932386135613534323261356461396166646465386432303638316161 +62646238373461366366326337663835373466376664306662323565656664363136663737643532 +36313766356339343134333130646466386337316130346165383831313664656436636564636434 +66383231653538386164323863323863396630373535636362636164393230313033383735623764 +61623132376263613432346565616264333536393434616234346430313933366635366263643132 +39663530393233353233633165373562626531633866313131323931323462366165653435386533 +34656433613562643634396138393036336533393062616662323837626437653730383936313863 +62663334616539333736643134306664616539383137346164666639336239633631346332363263 +38323365313132386536636231343135386465306561326537346638356238383939393837313162 +64633962653564633836616632373163363362326631653830346330313332396235623566316639 +34366330333564396438323935393962346533343939346162333463396463303266663363626331 +61393735396430386266653835343966316465353264356366623335666331316666633938313430 +33333063363837613665333566363561666639666339383837353837383766646461346532366130 +64653538356339336566343163343361386435663032346136306266636139663762633566663061 +34356563303762353839616631646234353033643334326661313330366462653035306631613964 +61386666613462333739643735323538303935373661663866663138333331343634323334333236 +65643130383062653730383638353235613038373735343535343234336439326331333537663335 +31333233646535613361333964396563643861316430323665396230653233313434366230386664 +32343461633665636637383661353034373533346131663238393030376237393633346631333230 +32646439376664616562626435633937666539366164393266646563333735346430316232616431 +61353932313237653839633230626462623833616631653531316234363336633464666432316631 +32393435616264333761393562663533333065386439323639633331356466656635613033363934 +30336266303563386634623133343464343539353036356364333764623038353431303766313636 +38306664313263303734353832663663626133383862633862333366653736623736626239336663 +38653730363138393263386464336534303836303866656137306134663335646162653261316439 +63313234336638336230646163376162383164616463613433323835396333363165623036356532 +62316433313035336638353632346331356430373262396339313038323032646164333830633932 +66613337623735316434393937636431353361313864633066353766616639393736623831633238 +30653234663738326136333030313334393663633233626131353835373134663739633334303263 +65643666356337303737383666376337633338626235633830386433393165383530643763623037 +36613066363662626163653837613062626333376337336365346665376333646433323265366664 +63353461313666303036396530656439666633613830636335613066643835336162643366626434 +37663063336133636230356565396137643662623266313039323632313438356466323537306332 +63346334393835643133353866396663633462363236363837336662306431383434386461333265 +64323134633337313836343434353938313930333566333337303238333461646665656532633162 +63633835303538336365376437343234653037626331376330366335613339333531326135353734 +36333461663065666166393836613533643964363532363634643837323036336661373732643336 +35313939646131303031643031666536643731303132656335363635326535333463643431353166 +36363261333638646662346662643665306661613536343139626530343031333738313437636338 +30386534336636383064386332653163316635383236326539316633616231373332653865343030 +63393964313830613236623330656564663362613833366564373362336561343462633033353163 +61363537373434666262663038363430616161623438626361373166613239313538613033373333 +63353335393333333833383438336166363834376135366166616439313236353334656136316162 +37376162643761363232643765616463643561376633306434326431656462313836613366356332 +38316333393432666631356135653230623135336333623461366265343965373766643163613862 +66646165353661313631353038353366363538336363326362326466666231656562316331656462 +64306233316631636134306564386235313765333738373334636437336362356265323432643066 +35623764323463653865343261636332363733633366333431663463373837393131636163623637 +32336236653031653161333062363538666532323563343534343663663166306533363563303937 +63306665303231366365353862336466373530346234383562353834333832633663343636373739 +32333635303632623633383533313439633734356166366565356234613761383263383734393262 +32666564306532666131636334653730346661646338656130313365643066373830 From fdc44b8a6d5bbfc9d98646cab21e24320e79cadf Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 2 Oct 2025 08:54:05 +0200 Subject: [PATCH 28/73] Move outbound traffic restriction from teacher pc to classromm pcs --- inventory.yml | 1330 ++++++++++++++++++++++++------------------------- 1 file changed, 665 insertions(+), 665 deletions(-) diff --git a/inventory.yml b/inventory.yml index 9b08bd8..0421a29 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,666 +1,666 @@ $ANSIBLE_VAULT;1.1;AES256 -65646662393463636363623235323964373562656133356635363537613739373066623930353362 -6431326464616463393733306437616566316138366137390a393962393230323038333733396637 -65396630656239383337313861306637306362343536313765386130623066313061393239633938 -6366393636646361360a373333363338303136633133313064343232383366396566393439313161 -33336531356233316536333730393165643838653562356533643932386231343963393838323334 -38643231323437363334656439653962653165393535323532393830333230643933386632306433 -64613938323939663563623231343438643263343862666665386437623864363638663530613732 -61386438646261363531633864613635663734313339326332356233633262333938643430353537 -39653638656565643633326433306637623837636635333130613163656233656333613362376331 -36613832643963343562353063373736616361613161643139343039656531386161653666366563 -64646566336238363366633463663036616166373465633934323961313136386662663866653038 -66653333643163336462623661326533616437663630623131616335636639346563653330653635 -35613433656462303533333735663034326562616564363165343732326437353666636430356265 -62636433636664663233383337613361343333383730326531373165643236376338666639313439 -34363536316236313761653030333638323131316535303362626564613532383538653638363239 -36396235346366633563646165323434393061383638633936316539306132396564353234633033 -64303037303363643832386465653735636363663636663933333934373462646439333539613438 -34353266633865396637663166376266663865326536623334376538643132383339613137386661 -35616231616265633265613239343966313030366566313231646664663232363134666137616666 -30313165303039643966666563373238666139626436376238376564643031343737303436626433 -33646635356234313365393038386132613835356530653739303562666161643737613934363033 -65393665663664346161326261333861396335306238303030313066343732313461343166323030 -35376461313232656339306631613537616338366463366337663466356238356662336562356537 -62356538303662623866383061363030373430656632336137636231363665393430306438613166 -32633064346564393131616662666331376664643437663731376463663832306334313834653465 -61633030636436366533366334323563303062666633326464336230393537323639393534383431 -63663338653830303337363331366434363163656135383462653133313832643263316637653364 -62353939373833343763313331393464363732323637386139313835366461336164666537353133 -65323565333135613734336661346638343233376536333638646434303064316238376464316538 -33636664313639633932643836666533633863626362613562663532383133303535376261303439 -38656134623666363735343835666230326166623031366633323636383662646135613764633832 -38313731623232306361623764393930396238623338633535383334646136633032323833323739 -63633333316561656162343662306165303061343734633738623536623536376366613165373838 -64306565363932383038396163383731626361376332613265306333363462323137633861383964 -63386335616136626134303637396435306263633533363561396337643531353135313466363862 -61306130666431346230316431306238323661393265303437333161613733373131616534326262 -32663361393031623533386165653561613838386134643763666135656335316265373637366663 -61643430336530396663326234643436623761646165363130316536386630353435333863363830 -37666638643730363163306431366333353136343837616162326363316162643334353337373661 -35353337316364313333313465386239336134383162623338333061363631303839393735623933 -30626263613633623336346539323634376464326539393761396333643838383634343232333830 -33363234393930666534623365636636643035636161366232303834366134353035353061383033 -33663334373233386563663163336364373933303866663134616662303934396364633534376163 -63383535646337646462366264613162333766366139313338333262323035373063363561313664 -64373237363165366566343234383334333664383937373531323161333761346235633637373034 -66383435386232323237343539323736313035366538653664373330373461343330306130386364 -38366361333035393035373337663033623235646561653764653231393339643031353563306337 -31386532626562303330373061343236333039383264343764663535623134336332316232616366 -34393736346431303931636133323731643239653662623966376462643063353633303634383337 -63353530396234626666376161623762663564326431343730626539376530663237343331633163 -32393133346663626265316263633435333036383164666639313666323039393735653933356533 -64323436643839313631626336653266363762326265656135663732346233313965663131353461 -38346564313736613633336565653436646233653136373963666334306330653664616663336435 -64306434663639386662366531363861646566653365636539613839396564376431653534343233 -34623132663035343062373134623538633830363230623037346465633738613535373464373164 -33653566356564626632373636393032323261663931346234643462323833303466643735663461 -33666239646638623663333338666333353862633939373634643163326330613037306262313362 -63306335306561386364306235346639383764373732643231306239666432663564633462633036 -38303261666661613431616234643430396461633963613561633638323662373065373566313261 -63613835613335643336386364393362363564653461333438346563333063323763656234626565 -37376366653234323730353964663064376232303532383132646535353832343830353562633262 -36333238303561653932343136653163306439323366396363396330343637373036386665316565 -33316232666138663835666638343338303162366137323436643537343664316137653737373030 -33636336383233373462643861326336343366346338313362623331616536316530383766336363 -66353030356536616237363331306230323765386638323132306664353034643362343536396237 -34323362346261323633646139393839323865336635616630333337363936353930313765626462 -64343533666162646632366539633034633266383936656337323734356266386637663839643034 -34663537643666363337363336363938313838363930623836613638363366323562626664373431 -30323035326437313266383033643466613430336332366166386139326139343233383563646639 -63623538663138633439383965393731626338396466626664616433353663353038386432313933 -61343435643330373363303761306532663935393534646162363939613563386235633561373437 -33333963383136393132313464346633616465636432373531323337633334313535333064626364 -61373863373734623638336432633264316131646432303132333165633834306464373335653438 -32656264316665383837323861313237636136633861303961393834346462656331333733303134 -32393161643164613066383061633430336434323935643566303164643135393565306136633761 -38663632396332383237386333383033303664633065633939363362326639353365363136386539 -33366662633964343834623137366435636632636335363932323961393564303833313965363830 -34643739663534373161626465303231316336663961633131303435343730386332663264636637 -66346231336336336536323564616464393633323061623064396636343862396532663734643838 -62393062653638626639303533633566323234353163343165383365626166646537653164393562 -38326639373536653264616230646163303463343832616239626363616464656631393666353865 -38313365356638393262373862353865366633633561353638356437343662663733663933333265 -37373633363331643039383562333134653433396431313230396132363239363265376661306430 -35666664393062346266326337373063353436316637306164393666623865646333636233653234 -39303335306265343362303236623430383163303933636434623435396338353265643933343931 -38396666316466366138396138393136316137666339353334373532376565356637336464376630 -31623832646461653038616665663262396536646439353739383037376162643235616663623838 -35366538636133616162656138393234643130333035393832393032363661613338643839346335 -32303162333562623161346131663136393165303064623134303465333966643765623366643834 -36643961343761376536373539343637626633653238643632313039663161623136613964383862 -36323437623961353535356436373938313235613833373338613132393336646134643766323535 -65313564363839306565373764326233393362623332363833636637636639303361393834613337 -62326264376338636334643238616635303136666363386462313164633064326162343761353133 -36383732316238393831653531626431393064613236326462376237393832656333623563326432 -39303233393232356534633836343033376462326131306638636430373639303733626336636239 -66336665396361643936613238393332623762363438656431303765663465343338353864386530 -63326662633539363764666533363265306532623230623931613237643731333937623761313934 -36653263333765646430303639663736623263323238643137356365366338353361353262653538 -31323034353665323362373636613036356631613034613937326337663963373937393233323831 -61613532633531643836653836653232343861616632373538323130623634373539643138356336 -35353162656436396635663130643138343437613235353665356363636664666232303937306435 -31653064333761643834353535616637646334356363623066366533666137333633353931373635 -38366531653765363063653134303936303234363135323266643364663263306561353662306630 -35386539393532636337653630316165326264306466306135636531363035636265653132393033 -61386534386261313931316132383163363638663564636639646439633561653832366437323539 -33343039333464386631366465646336313761366432356136636662626634653234383131373738 -34623261623730396333373231373931333337613862353133653930336633333636363961623630 -37663136653934363066626265393333323731316333613437393139373131613261636530326363 -66666237326565363936656535343034633361643562333466313130656636323633366537303838 -34343065633363666664383032396364663337643636636337656164356332343033373039633636 -39643431346237636265633265643932313766623263366630336666303030666166393462373363 -36393261383966663862326634613332313262383338626237633732303732386266376366336365 -61323165626562323163363335303138376134373339323266323935616133646535653461653633 -66323265626133333635386530373738383430613265666230323230656565666363346138366565 -32616161313662313230646334316236643431663261396539306266323035613430386365653830 -32613039343939613036306332356536313864633934363030353033346464653835333638383830 -62383162353361303061313164376162363463303865666661353030346561613336656338333338 -31393035336266613764616535636663383539326230643637663961363031376132383538356266 -61316338313863363963653535303961663134366361366661646437346562636136623564353130 -65636237396563323637316166336533613066643535346433343930386638393136366531616464 -30323431363062356536623064396265326566323131643331363430313365346337613266643937 -37313939346565653036383736616363643761633863643537316663323834393132306265663861 -30323262666162373830353835663635656630653466643435326536316234623630393033353161 -39653365316365656264623937313265666562356463633038666633643332313534613339613466 -36336435336262613965666465613238346261663062646231393763353931373632666137373161 -39633638653965396432363732303764383361323834373661316236333834343565663861653033 -37623031356332376534633466313730653263333062313632626265306133336437616533323638 -64386464616633303863393261323962373631326336656135393435356362313264383664363739 -65333865666534333034326562653633316139316634653231363138343634396232616432393534 -63633832393666383332373361666533646364316364623235303866633836353763333632326533 -33383537393832376131626266336239376161626463663862653931663639323661616639313633 -31386639316135616161343737663533376661323638316639396633373938343434303530336135 -38623636656566313562613465633731623039303964366437363163383039316333393033323264 -62623664353032633263346433373664333835393133646539333137303266653032323366336463 -35646231353963303862393530343661653766356136643433613236346566643762353162393738 -66393737643035353834353338316330663261393162623737663233623739643834623266613061 -66653231366435646638663538626230326665366530393332303664326539313239343439396633 -65316539386633303230323862353166626333356462383261386565306339373237613937376237 -61343666303130393366323937383862646130656533626539396166623236396638336163623363 -33326630313132346135646635343531356261636632663261656434393961326335643930303536 -61356434303332316638393964633134323261393533393861663233336231393238363937643732 -37383063366237396263653334616134376137306539636538303234653566376532393333323138 -31326437373661663666633830613735393737313563613131303831636336303265663934633638 -63346538373038643330306461646561636634363735633566666264353338656237386431616138 -37616334353531623366353335343431663332333766633434376632323735373837383436323836 -34353264653063616430663635343532653637313339613564643234303064663734393839636233 -63353835373466376438643939353731393436643966646633626164323732643230396434333133 -64396263656234643230383565326238636261636537303636326235346665326138626636346263 -34383263396635303538336331366435643465353265356636386536346639643939383538313231 -32393837626336653935393736653136666531303434646331343032373363636634653634393134 -65316263396565393037336233303663386231343561666338626464653134356566336239616636 -63663934353663316363653737666436316461633135353932353366623537653863376566633435 -32383638353130383232323665363335326461353238626662316530633962363136663766666237 -30643430656638363638386531323534653863663133623863326635366362643938666632363930 -32383430323136303237343232313265343136316636323733346230353032363033313834616531 -37343765396132343764663162393836323236643135313436393664633263346335653764303038 -65613764393838386661303135663237336462633332363633313161643066396566396634316331 -38303430653937386535356261653333313366363563323664636265313635636566616430363132 -62393065393863323631326534633731323237353961333962313165613531643762633964666432 -30303464313430613064653661663339376133623032366665316539626564396138363536386139 -63666561373462643539336232326533366465616334656563336431313932356461656135346236 -37323565613065396232343635373339373966636265343534666365373339343936663064626239 -39313361336433353634653033653831643662636239643939383765373632633535356264656232 -37313936353036316462383734636236653535383538306362383538343331623262373163366439 -37363366633532343333363163353364666531303633336166386138303536366534393935323934 -31306563646661323038333633313839306632663965626130306137656336633466626233633336 -64343636313062363532363164663933356163346437353131623931616431633538623961643136 -30396363333630396463326261663565393038323930336562333038306264643564316335643435 -34366637343338396537333361316638363530333162303739646636343734653231613362333835 -33333030346530663733316263356333633532623731636163316265646137366331663638353130 -65323862323630366436326563366234376665346634623437323665623534613038376630353231 -65363034616162643037303735306361346533663838363933353937376131653734616133353435 -37376139343666323365356164643132396239386366353662386639393033623363303832396163 -65303062663562386235666463623233336264643933656133303633643032363964303064636230 -30336132613038383865376430326463643662643432646135373036366665313238643935353130 -34353833643337323034646232346261633532386133346265393466393761376134613633653564 -38333237326266366635643164383065323332323831313565393162633339333630386233663338 -62383935656235343365303561656164626136663732353162666135613165363531383038646533 -63356363346265656230366363333661333630353465373439356362613264646231383164373933 -30303639633861643633376364353639643332303765373437373637393432626239633463663831 -38383066646436353332373730316232356430633430303161363561343635663135373230663962 -63376438303164396566663436323737326362666436636631646537363663383739626632306461 -36653964613538353031336566333038333134313731663335336630636531383130633030346662 -32626335363334303539326431336535313766653264333437383564643765386663383962623634 -31656339313663616665363333323862306362376161633435353264633838356236653830643032 -39336434666634306235323765373735373030616461616239656231343633623337613632376633 -61326165653161383836363162313565633432623436323932333966643162623132303830373332 -62666333646233633130643965386333646230343135613739366434323261313665656562656664 -66623133316238393865333037366465646230353435656533386565333166363036616437303465 -30393333643132386663666163613130323030623962646434373534626634393834626338326565 -37343432353764613839393539653535666164633433316239663134366165366364636634393637 -65363939313436633936346136313538386130386434303939343533613135353538633832353830 -39663238386261333261306135353633623738366334393134313232613134376133373135633066 -31613136363065306632323136353966653639373234396131356663663232643136613130636630 -32363564326262373235323434363030636434323338623863376264393461386365313262326433 -61343961656138633763386263386135363166393138636231643864353562323434353134326630 -63326332373361393631356130633131653666386362656166336536323761626263646138666564 -65616464313430383931323630313566353234633531383164393433643961613762663265626465 -34386463613037373132383930356539363761626663323233623431393963373531346634333538 -64316462313936323438343333336232353235356535323663376263306636653266343038363937 -33626432613362373337313563326134386532663463383535323132316163306535363631643466 -36366531643639313138376630653263313930396537343834383563356336633262363765653232 -37646132383537346532393230393263653832373233316332633734373838376665633861333864 -66373539336537373935626339306535333736666135303833633562663734653562323436336663 -32333436383262313361343734303038646564656133646338366337633865633633313030346137 -32613436363865643637366161636338313538376238333662376464393666366134643037363566 -66613463303332356532643532303264333862353834346566393762303164313362343666633536 -37303632336433323062643235353035663463623862323364313563613363383164396566363862 -66656461363933363961373663623331633239376236613561313061353065653832366436366237 -34366635633864376363653436343962356532353664616161643338313834623165386565376366 -31303863333730613435643434613961373365386332323238613261353139393831616230346463 -34656261613033393062376534333735666139303437636461346563613633616336393539643863 -66313633396165313139373334663035303433633139343162326632343830383738366239613965 -62666630386536616363633033343961316333656563393737616661393534623163643163653862 -37306163363437316633623634363963303138323336653535393263306663363337656338353765 -63326430363532386362306438373363363862336365393430383263303265653339363932346433 -35346663643761373231643564643931386134643434353566333765346463353662373230363932 -64626531623739356637616531353535623734333466626438396565323432303064633465376439 -66336566646534313262663931316638646164333239353332633965373332326630653331303539 -61623463306633653534306436383466363561323833373435623464343430613561663363653836 -32636361383437303433386632326563656364343734646266316631316636346365353166623766 -33316265393762363033326431616130666237303461646433616134343534343065323634633931 -64646632393566306630326663353235323865616531613037346664393637636361383933633832 -39333535356535623836633661666136323664356130333030373061396130313334363733653461 -62613330393436663334356563373439613134313066633737346131376561623864326533643466 -36316232383465363566383261323237326362393963306633653862323938656631616438323765 -38313965383766343837316334616661326636366339636161393562613364663363616339313866 -31353835356462333732383830303438626437333732653431363634623630383164646237346363 -64333439346662343837353232353936303037346435383539393234363535303337663834336365 -38646538616165363734666664383437656438306537653066623261306135383639346139303133 -37323734663630646566616135356537643831623533333536363665366232636264393134353862 -30616635313661643630633365393061373935663038346265393937336138616431353133653064 -39363063653866313432663763363132656339306237353163623230343633306338303638656339 -32633464626139633665303636373838343265626535313763633961376362343465393863303931 -62363337306466323466653765373764636637313564333933393366333162356637666332393735 -62353036623035653332656436626131303135393864313234353936396262363833373063323137 -34303062323231363134383063666366393030303362303732623965326631323765316130623066 -39343339633234333864393830323439323662336263323761373565363036333662663061613465 -61373737613933653836313163666636616535376534313431303862333932393365633036346266 -66316139326135396162363231626336623239306136653162343065373231363437353938653461 -65376334643735366539363731303836353564373866323539636665376265363961386439363733 -30623538626265343636633564373033623630643661336135666339653436336332656432623262 -33636332393932303837643162343663633962333230326231346635396536376334366432666130 -37643762323964393437666631336366336561383662393334633362656434343935343038333135 -34343165363864303431613439346534333937636439336533396363316336316633356635356230 -66353836623435346435393231636531386166356636383633616566366563633736626132626332 -33363137346466353337623634643738306338636264633263623833343863343562353535613961 -64303835313135323061393165316132613565306666633631393132646361653732633563326531 -33613131323735326531383236323235366435623531323633343737353932633636653834653465 -32386339636633633963313266643831336162646634613465303238656138633539303061313961 -33353765333431663434613832323030623963633630653932666431303165633531616133646233 -62643633356264356537613163343539393266653635383662363161313136653837303661363334 -30303930343034396161366230313336306135663064343934623338643437383162396561643862 -66343631353366346434636536623965323063633538653433306531643931316565636335656233 -39666562383962636236636538303237333764336336633031303130386562313236373839396534 -65666234353162626139306166356633356339326237383866303538353531386536366237653336 -61353136313461656433353766663135396262303737393632343334643334366433383536316438 -62613265383530616137643833363835643363636436353264313034613162383637343063373764 -65376135396463343136353766663536643833376664613164653632343561336566363431353533 -63313330373637653765356464623937613639313964383361353031346563363739633765346433 -32373338323463313163353235666663396162623732303233626134653066616636653561323266 -38303037653438616561353961323239613661353465323037393037356264366333313162353130 -35363463656637343037336430363033656362666131363735643030366166633464333938626338 -61356332336331373231636465653831626438623166373235303633316666613539313561333463 -61303861323830353736653963663863633565633236303630616365333866356364303531613365 -31643234303130636365623037613062363331303534313639376632303630336637363133323833 -62343261643432646332656366373562373664373566636465353334653833396666346230373639 -36326663343730616164613034633662613064303931663436653139616637356639343937376137 -61646432396533643465376363643135306661306537316665383666643561353432313131336232 -64333330396466666165326336646563363237313463373262653062303232646465386633323337 -36333438303039623530323562356630353133353261366637363835333863333339386366636238 -33663265623834666534333937653738353064306666666232323662366530386139326664356662 -32396565373835653732656236333463356137636362336165656563626230363832396665313833 -35323933653266356633643138323936383839306364323665303033343934373036636132633463 -34663265356532356538346135356236313439633136353130333837383761316562333361393539 -32666364653233636661636565666533653963613439346361643539383966356265336331326633 -61353662356436313636353961636263393238333561393461363230613034323261663439623733 -65653462366463356362663333353136643132613932663163343432386564633065316530663262 -66666465396631316537303132653439383561333938646536326662393436363364353330643134 -34356366316331646465303035376636623364333963626435376434666663343566663830316237 -66306539323665656165383465376661396463663033376434313664663930396234646534376131 -31353934313361343563626365623161333131373038386466346565663762653138313861356266 -31623465633837653266626634303637613830326634666239646661643637643037616635326165 -63353231316235623033363939316665326136306234316663356461333462353165643933663434 -64306634373965643365313233373363633762393333633730663063373862306563353735363865 -35633462316461333938363431383962376233376238343437633163336330353139313063313430 -64316133383234656131613335616334306466393237316364393539366366633832343266343361 -66653462626139306165303732323837633137316664386235613133303935626334623266313163 -65616130613738646464386532656536613065306261386133383636643133366163313036336434 -62316364363732613137336438613337396664383032626666663531643534386564613063383461 -62663031306338616461306232663035663534316338303033663364633966663866313862656438 -36376232306335326164333464626538663831363263613634323234653235393433616438343133 -33333364353864643137643764326634343538393064643732656662656537653139646566316466 -35333036613833396439643864356536623031316561653233623536613832363561383934326431 -64363439663236313461393562363966623130376661613266353335653037323339363761393337 -34613330656461613134306531366635393931623030343032643637623332373730356636633731 -61636233653162353432613038623432346335333366653664336166326636633865636430383738 -36643833656231646361353338353738653836333130336631633535323139336436653666626363 -39323661313166656166333338346661666665376564303939646464323465323533376533356435 -33383339336463663230656164653266633964666131363338383138636339313263326462633061 -66393662316531626335306466316432396261336563653532343935363139306331383838333365 -31633466613839303064316430643332343861313437613034623734366333343833653537326539 -36636361396131326466643135643931626636366333616363663732666266663662356230633134 -31643362373835663532353065333136336364633736346434633937346332333830393437383463 -66383730353335663830643237663834656536663333613061396338396330306633376663316134 -33356663303063616436356661303339643665363864626165666534323465613230333637613231 -35663830303938356634376236353261326561613366303830613933316131613935613064336139 -39303464326666626632653061333766613963656535383562343137643735366335313235383631 -62386435626132393837663361383933323832316263663939376632303165383938633162333537 -62323164343333313539663064323366333738386639343564623836636562393361396638623232 -66373264343562383465343766363139643433356165336665363662383233363537303863653266 -32656130366132356239623565386131356564666635336162643339343761383663323533376135 -62356339393034623232376132326365633864313563393135653065386564306264633032303665 -39663433326261643534633665366538643662653763393135613763396533373137663162643732 -39643535323463353265373531323139356136353839373064393663613534623532613861636533 -37323863333064336432626432343732666166646434363139333331643637636231306664353232 -62333165386534616635316333663732643465356632346664386136623636626534303932663836 -37653237316336316362393934613031303435326632393261383937343539386466613632633735 -61343936626535663336306662303335326163343332393138323032386531353262363031653338 -38646565373362366562656332383464303361623638386662623435303339656234363330626161 -33306238363335303938353134613935383962383561633663303836343964303137336663393062 -66616463666166396436623566386233643966323937376333333063616164653339333264643862 -36356538613038303432323735336564353635313831366639306164343031646432643835613061 -64646132626532353166306632386561653134303433643033326531336239353335633365656433 -37386139366161383231326430653438346630626439646237363737633532393264376662333435 -65346562363730336339366663333466623463636362326538376634623166376439323161396163 -66336139656463656565333834663137353861663662316630343132643037333831613534663663 -32326366323637633161383539303462643431373132393139346161336236616439333731363332 -34313936303032313663353661343532653730633639643566346561636535646435336435623335 -61333765353936656535656131663030633332333265616230363038386337613431313631343863 -36663031306433383938663633393633623361383163643463323834623239626431616238366438 -30646236613662643530303563393635383165396539663737333632373961353937663137623434 -31613030366161373732316436356131323162666437323931636166326636393634373237383936 -65356631656561336133653438653033306163633334656638376162313861343432373736626439 -64373634346662363530346166353639633964613236376131386463383133376337636636383664 -34626235353332303235346433373131333764343466313161343631343633653635336233343932 -63363366363133373635326661346639366663393761353031303737653933396334323666386664 -31363433306235316661613035323631333735666236333066326336376339663533656436313462 -35393536643835623237303964366165383966656664653535333439356633333164346434303134 -63393335373636656233386639653934343963316137623763353665313762666632376334633135 -37323636366635303139326566663736616462323038353162316462326534633862643665313833 -63323833386363623561383435393565386436306662336266333565323333393364633332613533 -64356331346432326136336138393437333039363234336337386566653661616464353737373862 -66353063653739623939656335653530323134613631363964623139336532663733653163656362 -63383334643130653730613162313733303037653339366132313139633636373364633866663332 -35383632633565653035393832313537623335306265326231343632306264653637333832363335 -63303562313634626237623533313538323761393639356262376533643664623432303638393232 -34316335326631356433353761363436666563363065333434353662646565636339396630626637 -33666265393364323335373136666635346233323233643434343261393665623961343661383164 -31613135386332386236386138333732643335353531616132316334353232633862633434376234 -63366337643035663739623962616131363336623931346337393165316463633739653236613232 -36623936363130376433353638313135316231353230623334643139366261336338326461613334 -62383765613864616333326430313837373162303133346533613665633938653262313064303163 -34663532353961323365303966656235626238353836366262373530366237396531666439613932 -30623734303336386264633036383866646232616138343931346635363639616361333836613862 -64623239643236663539653163393962643462623834346338303731306438633763336266313063 -61353333653165386132356432376337303832323838383032313838656236343338623035396136 -33623432356337306435343966633935303632333665333664613234303936326339393233356664 -62383662646338373137363434393632303434353330343561313161623439313430366333373136 -39646165326130303834616334356430613335316363386238393633343631346237613038613332 -62386235346666316637333031333963663939626363623762343861316536396430313361393131 -62373138366434373336336665366135333334363238626237656634626639336235383761333864 -36346633363539643032613334636233623334333866653133623836393431636231633164343064 -36643261666638326366333865343339353532333862356537333933323334613939616536646564 -34616137323366373866353164393338343633636537616334636265393230623639333465383633 -34383337396434623635323466653563633231663833613039613864343266626465613634363434 -36313764323163653932313965396664626565653466393436666236363237633431616261356437 -36613263666630393234363062383561383562646663636464613966343435393963306333626364 -62336634353636396130323535346464343362343464613531313362663962643435316536373363 -64336232646264396532653436366438376464656461636130316363376461616438373334383431 -33656364303435356666643631623264663632326162633330363138303863383839653761316564 -39646536343039386663386364376336313536373838353839316630383934326231656538656366 -65643566323266363763636633383734373965366262626538366632393463373931386332343437 -62306436643834336566666466326466353065666334386138656166393836353962663461323530 -63633433373437383561386636326334386138346138363332313364386263626332343136393363 -36373335613334313231353737343831396166663661306330363133613464376566363562393964 -31663434613238333638666431353262663736623235613930626335343837616237643333626463 -32333162616433333461643264373966353839656662313234303039653137386662333435386533 -36343962303165303661383461313539303266343431663439303464613632333464663864343862 -61393566316538363931616434356431623363386461393537323162333339633063363535386532 -61356637376331663138303432343266393163646632656665623061663433336538343562646139 -65366335376631383463333838343331663330346332383565303538633661616239643837393830 -66363730343638343164386438356237616466626135643434383434383234343639386435383639 -63666262393165336562663036623236346365376563356363323161336632366361386634363765 -63313034313132316634383735303566336662643665376562346533326635333566313164306434 -32376664356138353030666336333666343931613137386436393363366430386533343330666336 -34303035316361323238333864316634356332376639316439303931633038613637656537636631 -34653763646133633963323435333834316537646133313931623765616430333038316661396634 -34366566623461386639313839393662323536316234613732663539353331653435336432633532 -66393236323861386161613662613438303761623534396166396532663763663365373465303536 -35353633343235613430346361636132383134366561666533333363383862383031303633643762 -62643163386565366261626438326637653365376366346335616538303736626139633965373764 -31396261336564313863393066633335373864356533393136616664666165376437626563646137 -35633236626231343765386239613138396336616566613463646366343464383038353037633263 -37626638366338326333643137613665356530663637653263336631326562393733663832376363 -31306635343232316137393661623739376165633331396231356461386365656134643661656638 -63616437336434376134333238616537633434626334393936313830373333303732613065616663 -30323636383533393865343564666134636531303239373737636466373939373161646636323334 -63326636616437306261643261613264366634343263383764313064333938623266623732336539 -37363739663033313566336564393539613531386362626361373330343138353636356562326639 -64363165633737316333306439333330343234306638356466376133373432336663623064643564 -66636332303464623831356466313832313234366165326234376561383962383838633236376665 -39353031396166643230623063343238396262623230386630656132373331633532393166306634 -32326664616365383164323162396634393362626663653064316536393366626231363763346664 -65616130343662396232373539376634623936653230636434316537653663336338396530333437 -39396366636261623864653032323832326331623733376132353332636565366361323936633862 -63313463383333306433306235356634643932323665616139653963616436303339653962373662 -39393766636166376162656232663338373365633861306137663333656465363634626265386162 -35663566383065636463383336643735633461323035666333616634373839376238346437396164 -35323435316163626565623065356236316661383330616263356231376661336231366135356534 -30373937663862326430323437313861663132306465396130646534326362623837616134626532 -30363834343162326632376338343239373733616133316263396339346335326238643434386663 -30616636383637343162663036393165356533386165663166336464313161623263616531646137 -31616137326134313332613434396562396236653261363065656264306464313265333363363233 -64376439646238356138616533626633633636373764356464373136336563393462623765393831 -34323439336337346134383934393962363164613337343336323865653730663031376335376339 -62326331316666623364326135313434363263323764353261336439326132646564343065336565 -31646363613734626265363332623231616665316365333133393633656435353733363433376136 -33643436353664383131623261313138666132363162303064663936656638616637356437356637 -66323631613161373463313136333133636266636365333762383739313935633766336566393934 -35333036303030323332386131373563656431663362373737383139363862376239633634636230 -39343865663036306138383762393339336362323962353161383335363933306233316264653431 -61396139626535326466633739396435303333626565323238646439663032363763396436366465 -65343366613438393661653963343461633331356137343438353033376137353234636436613166 -35363337346434346239666237396361326438376366383033326666376232376661333438373230 -30623630353964653265343066373766323936343866346134393032316562663766663439373632 -38633763383930343236346531646634306336373066633330313766633230393530326265336238 -62383966643664656364346163373065646438663565356261623833333935643037376230363366 -31303035643238316464313163363431306562663934626666383163333138396339663636653538 -38363965636630666265346661333565356663323432656366633739653664336136353339386433 -35323937303134343563316463333534643838386662646238653831393763616537343463666630 -33333632373262393464313732313637333635663339653036303964633866653961376531643362 -39323733636565356561383434383239373934623464656530303738636134623736306231356461 -39643430396361666235326462306537633962323733613039316331393233386630316437383632 -38663336613830613263616130353635303239323864343636633866393230303735393639306539 -66393034306361613433386533386166303565383133626530666361663138353761303265343565 -33353538353461306239636537653134373035666461333534633962623532653030623263343365 -33366562613032313339333732626665326564313462383132386138393635323834386135376464 -37663031393832396338333837653736616331313163626633316332393365643931383539613536 -38616133373939646266336333303662353234353461613834653039386233313531303333323733 -34363366306561373338633463633130626234313734376631396161333933313065316461373237 -66376234303733343865306161363634626561633538303064366134313965666139303362613634 -30353564396338643666323935303062346133336265666366663263643330383431633062623264 -61636262303433333435316538373365386265336563333231646233633238643939323736363566 -38373563393139326234373865313663363061613038643930373733653834383066636265333539 -38626436313136343266653935383266633139626363346136346163323338636130666465623333 -62396464353336646230326437633365663266626161666264316132613732373234613131383662 -61393130306639323238313239623964343964313239666230313232663963316264643332303036 -35306137623761306338356137393136303666623738633738656237333133663133353262376663 -61633363326630343561396465363863373361316638336233633966393736646164326137623265 -32663362383264336635393363653863646661336566306233396132643431366465636236363034 -35616237383633613066323062613332313963636461303538323037623963346435653765393737 -31323236323031313437393462393638653038353034303864363761613334613737623538336330 -32363837346361386437373134633066366536623436336238373165316561616136386364636335 -66396337306363656433636334386166633063393436333665306232333838346662373566663935 -62393339316365623938353735333835663465643738333437306635316237356338626437383034 -30386531626430646661653132656633383465316237303734656533656462306231373933613561 -62613134653239616439383233313236343433653665356161613761366533646337656664343764 -61396134316530616365333364323965303662616233393066343935303930373736343135343062 -35623561313136336431396361383435366238636638653361386161623631643132326432393963 -37636635316130356636366235343133313862616461323263316330323964383633306637303836 -64353639366337353836383030663230653164383166663865326465656536666666366364306231 -36333064343937323933353339316334396530666637663965623662376261656636663363396130 -34313036373062326132313338666464636331656661363230336331323663323461636131313961 -39633264643839646439363065663436316230326137303531396134313733376232366436313735 -39333766383961303831383130646135343333303133646533336130646161626366623064616335 -31313034376237326430323333333932346463616531383035303539653539666137333566326637 -32323666396339633234386264613762343638323734363030613832303733346461616531376530 -65623732346465613430626531343534623466663366623834323832636464663264626236653832 -32613331653066386231346434643834333733663532343961333837316534303532653563646263 -35306630616537636461623933303331383436346265353663363732613665623461303161373339 -33363530323161613932666462316365383865653464313539613834656638636132343166363366 -66613739343933623233653764326261306665363133343764366637303435313832393432316334 -31326230656132303762316364303537363165303964346135373565386162343934373433303763 -38323430366462366135386162333734663731363761636635373737346231396461333839613133 -61353734666362313437323939613835313537386432613633396162646539393435353464666363 -62663762666432383362346262643364336434616166313631363037653361363037643533386335 -38373163343134663931626662643532306631656630343433303062303535633163363731303561 -38636465636263343262623138623731623235623863383461626632343161653166313932376662 -34366230333063353935666232666361336133393338386266613361306436333430656333633738 -35633536343832333433353666303530396434643064363339323237326638396632336362316266 -64636331313735656131366136663464323030336364343138353030653031623166333465316435 -61353634386131313336366531636634663530643132626666636261393163366430303864313131 -64376135346538343936383938613862643131386136616331303435616366333337363638313432 -63656661356332663966383831623363386539343139646138646563393734333631366639303663 -37663639346339633162613734346339313739393761366333616262323835383237306635313933 -63383361316339626133643538366336633966666365626630646634626362613736346530353962 -31616535643262363831353566666634663532353631386364363933663239656630346662396135 -65313437373730646463303939623037356361633865326434626332653631323531616236396333 -64656635313062613264316633653562613766393766663638646632313835333131316234666639 -32633465623862386361383437623233373366303361363531353464653236373666326262306535 -31646263366665366466396230663764613730336632666433663736383561633632613038626265 -36316338333166376535376230303336356636663631626166653230366365383733393234396665 -66363262353433363830623434386431613662373665373031613031626335613836356333626437 -65366439336165616638333266366238613261363032626461666431636331343739356464303064 -38613938313564663038336639613561323464323631326236333561613466323165663861653161 -38356532336535623962376333396236303263363638303038316435353664613662336133626437 -35343036656539303766343931616536663134333561343438663865633231313838303865633961 -66656436616634323731613036646336316133343065353730633536323862396139346165393838 -65393130663165313634626137343633643236373232396433373838626435636161373739393134 -35636461623335386532333437303465313362303137396230323763643031616438663763363638 -63303231353766393961336234336665336131313863316237336366386437616538616162656230 -65356334643064386431336364663536313537643562386431646139303234326636303261613165 -38343135643034363365623933363934326639646136323866396537343435383766346131336164 -30373236376263633663333237326264323531376562626663373361633063356332396639336361 -34363762343835376537373932636433363430353135666562336339323461336236353936316634 -39373237653135393038303466656664316664663339656661353935353436336132656132333339 -65643838306436383435383132396261633830666237333331346132626638313338376566626261 -38656563316638373533613132653565613637626265663939316430636262653037633634303932 -62663636626131613266353430363135663564363131323836313635663336393138633134613937 -33343438363238313664303162326139396665333032306365316466336365666435343338343431 -31363836613339313836333733346565313936656162393662383666343739346437313234323631 -66636531373039333130393937613232656438323135303630303362616163383431633162336562 -64313732333639653031353939363164353936363966626331366535356536393138313735326461 -34356338663265653934643566636333666330613134366561386265633139346631316231333934 -65353036333263393234653530346563393365323935626236386631303430663163356539306264 -32383930373033383239663165373366303939303536316637353264373061646262316438356239 -66363834613039333466343331626631353264343365303465316465393938393465663432646364 -65626164386134316630343663353766653531636239613736386232663839376630356161653934 -38663062663735376434613764376431363863366639633466353234613465303731396338356531 -61663366353937363332633635396666383366313466373632363162356132623432326232633361 -37633366663938383738616563623039616436613937336366613733346437396663353062356338 -38373634353139366637366435663962626136326464316135636231613630313333396632383762 -38303831663262626561616531626431333631306331313161396264303432633039323462393665 -31633766353733363464653035616663356430653030306230376361376237313630336336373636 -32616461343534616134333766353663373132353133316132316335366338393334363636636161 -36346130656633323633353337303064636339643039316665396562343830373930383237356362 -64363866386232383661373432376461346530353165346338343263613665346538633832616665 -65363561303964303835643430356333356631393636303861626632323930636237653763326539 -38623736633336663461343737643832363234373766313163623863323939393738383562663332 -65623639356164346661613962393861373333313530626436653566316466326561303934346236 -63613939633562393464613137333133323636656562616161356131663335623262383239393062 -36653034663038393736383630613830366365316662363835323462613565663731653437353638 -30353239623236333635663130376231643737326363396232353235376539323531313231633162 -34333064663433383961396565626362666138306539626466303437376561393066373039623734 -38363839616630626431623264393863326535666436663030323235383634333134636134613461 -61623463366362653262613030383364393065313531323630656330386465343938313536646632 -36316562353861643861393933356364346139386635663738356562383363383538653030316235 -34643737656634313765613834333234313866393232326535393637383562333763376336366335 -36353061346139343863353732363164326463623165663437643962653534343635306637396635 -32386431383333393166353535613665653764316563633461346464666462643936396663343861 -64313662353733626332356330346431643539303936643766613431316163333434326638663865 -37323362656335366132353063663739376462393465353339313234313239353566613338366463 -63633761363233326530313933626439623936386331623033363633636237326535303231373034 -61623635643638313133316133646631376534613863333466636435663664336665313265616361 -62356165366264323634303333653139333963633936373465353534653337306361376336363532 -61343838663934376565646133373133313266663461656239306235353937373435626235333736 -65373966633539346534636461653730626161636630353639353361366632646337316237646265 -34663338356463336233636333323162386165303434376564663336333439393239326161663061 -39353266393435346139646663363435313262316565363239336134356435303333626438343463 -32316463316531316238653062633133313736626262346565663065326563323836316161383833 -36363666373635333366613464356533303637636462646135316465396133666138333064636466 -32376264386661383530366466356630396430326137383238313431303633613364666363666262 -35396561663536613663373532396333616635663037663936666535623437383139323866353032 -61383737663735623437646664316636316462666364646230366363326538623664666538666261 -64393633353037666464623263346439666531616364363639633065356633323436396237653831 -32616230383032383865653631643431336234356466336333336165613836353632303565656135 -63363465373837333837663662313564656537396434323034633633663364343866376532346433 -39343137613133653832636436303334663035323062636633356334353535643231633037666537 -39393162666663356437353166303137393238653134363038376164373464313339663033376231 -61303634643861633366366561393936383966633266636333313130656161623763383839353531 -66633264346337323130383334623833646130373836343638316365643939653437623366343735 -34353462326362326231303339316565346462323533373861646539333366633065383030323265 -39376636623132386262643930303765386339633337313666653636376665643866323565633363 -30613431393464646336323764633432373361326266336365326666313238663238333237313261 -39346664383334613930653365316631643166623266356463656132613232373232396530656235 -37353361353434383539353238383737326638656135613936613039373935366362663034386637 -66333365613462373036313439303736383636326461386437326665313561383633623631656565 -62383631393066383265366138306362643266653661323333386137323239386237643366646130 -62613334663864666336386463643937353962353832343364376637346332343666343332646634 -64663931396438356564373531366333313637393263636438306564316333316637646636313835 -35343034623866323831663562336464366232626661393166626233646261313833383761323531 -62646435353839643631646433316431313763373565393832336135663638343637373735666536 -64363161663139346331646462613634666164376566383430383231643332386130653236393938 -36663333623630303965653462346466616630376130363634303734393339333965346664383264 -37346465626663656439326163663461653939613261343537313566653362666232326235346165 -36623532353230613430383334373132306633643530616635373936623337623461396563323562 -30303238613032313362623166343165336233323838366364633132393661393935376466306333 -37356165363033643164326339376137636533376637336239656530326236366130616636316164 -34366130636635613432626133336432616635626562666165393630623962333639616538316562 -62393931383261343338326435663934666366353861343432346465383832353731353330316464 -36343139333834376632383037316439623430353735353563653237666432653134653162363965 -38623336303630333933653564333364356461623363313839633132663732396236326466346162 -39343730343333613664343839316266663438636432313836333737393963376664346461656532 -33333139623038386165303933356235636465633537616330653766643961323264663538636333 -65613934633337626632633232316336326265393366643465643563306233343265613562656534 -30616463663736336435323861356133336562613463303034303938353739396334326333373835 -31373232326331653830616264313066346565633165613131653133666334356461343766393063 -33646432306461643363393731323330353537346465613635316634326538636333383362633361 -32623230303434366136616234306264313865333838616431393634646139663139343130393462 -66643535646164646135303233613438633138363962303038323065363934323265303961663837 -65633339626663653533643736613737396164363166346465383635316237393730396265393733 -38616265666238613534363962343339363565613761396437306538666364326137626130313539 -33366132663662663039333134333865316565343534666530653136393763653563613966653261 -34643531383031316634333836363162366334623936313764633931663235393431326330306666 -31616431626337646565653063363239373339353632373063363639316564306162623466636331 -30396262366562396461376436323963653564313533356332373063626430626166373239313833 -61396134616431373035323130363839396230653036616130346666383931613236336639306532 -61616363626435343564353966373266353662366235323262386131326563616434343235323466 -32346539616662303031653531353939336364336462313165366636656162613832383935643032 -64613466313233386133623138373366336266373664326634316337333237613763356431383837 -33343930613734313235326436393034613763393434333765646364663830383161396537653165 -35363235626233373161663938633832366330323162353865333135623338623435326335326365 -64666565333436613636303862623238333866386663303036613436393966306631333061366132 -36656566666264316630373931333232623331313537613230303064626336643630653735366661 -64333335626265386663643464663030353433643337623730323131316165616430373866393033 -34336232386538613938643961666539613261353637366138373634643736336465323435326331 -65656136613465343166623263393332336462663134613263613266653435643137353662333835 -36343139663833393436633231313435643363336138653032666665313265643436383561346533 -63323364306636626136333163653434316435356339353133336131613833326263323539366565 -38633736386539373831313433666130356338646664643661376264323734316634373039386137 -38376561353831356431663163373832666539386132306566636438386464383333383031386339 -32346631323463326466363462306632356430313932393833313734393264613938343237303635 -65333763653365663562323932386135613534323261356461396166646465386432303638316161 -62646238373461366366326337663835373466376664306662323565656664363136663737643532 -36313766356339343134333130646466386337316130346165383831313664656436636564636434 -66383231653538386164323863323863396630373535636362636164393230313033383735623764 -61623132376263613432346565616264333536393434616234346430313933366635366263643132 -39663530393233353233633165373562626531633866313131323931323462366165653435386533 -34656433613562643634396138393036336533393062616662323837626437653730383936313863 -62663334616539333736643134306664616539383137346164666639336239633631346332363263 -38323365313132386536636231343135386465306561326537346638356238383939393837313162 -64633962653564633836616632373163363362326631653830346330313332396235623566316639 -34366330333564396438323935393962346533343939346162333463396463303266663363626331 -61393735396430386266653835343966316465353264356366623335666331316666633938313430 -33333063363837613665333566363561666639666339383837353837383766646461346532366130 -64653538356339336566343163343361386435663032346136306266636139663762633566663061 -34356563303762353839616631646234353033643334326661313330366462653035306631613964 -61386666613462333739643735323538303935373661663866663138333331343634323334333236 -65643130383062653730383638353235613038373735343535343234336439326331333537663335 -31333233646535613361333964396563643861316430323665396230653233313434366230386664 -32343461633665636637383661353034373533346131663238393030376237393633346631333230 -32646439376664616562626435633937666539366164393266646563333735346430316232616431 -61353932313237653839633230626462623833616631653531316234363336633464666432316631 -32393435616264333761393562663533333065386439323639633331356466656635613033363934 -30336266303563386634623133343464343539353036356364333764623038353431303766313636 -38306664313263303734353832663663626133383862633862333366653736623736626239336663 -38653730363138393263386464336534303836303866656137306134663335646162653261316439 -63313234336638336230646163376162383164616463613433323835396333363165623036356532 -62316433313035336638353632346331356430373262396339313038323032646164333830633932 -66613337623735316434393937636431353361313864633066353766616639393736623831633238 -30653234663738326136333030313334393663633233626131353835373134663739633334303263 -65643666356337303737383666376337633338626235633830386433393165383530643763623037 -36613066363662626163653837613062626333376337336365346665376333646433323265366664 -63353461313666303036396530656439666633613830636335613066643835336162643366626434 -37663063336133636230356565396137643662623266313039323632313438356466323537306332 -63346334393835643133353866396663633462363236363837336662306431383434386461333265 -64323134633337313836343434353938313930333566333337303238333461646665656532633162 -63633835303538336365376437343234653037626331376330366335613339333531326135353734 -36333461663065666166393836613533643964363532363634643837323036336661373732643336 -35313939646131303031643031666536643731303132656335363635326535333463643431353166 -36363261333638646662346662643665306661613536343139626530343031333738313437636338 -30386534336636383064386332653163316635383236326539316633616231373332653865343030 -63393964313830613236623330656564663362613833366564373362336561343462633033353163 -61363537373434666262663038363430616161623438626361373166613239313538613033373333 -63353335393333333833383438336166363834376135366166616439313236353334656136316162 -37376162643761363232643765616463643561376633306434326431656462313836613366356332 -38316333393432666631356135653230623135336333623461366265343965373766643163613862 -66646165353661313631353038353366363538336363326362326466666231656562316331656462 -64306233316631636134306564386235313765333738373334636437336362356265323432643066 -35623764323463653865343261636332363733633366333431663463373837393131636163623637 -32336236653031653161333062363538666532323563343534343663663166306533363563303937 -63306665303231366365353862336466373530346234383562353834333832633663343636373739 -32333635303632623633383533313439633734356166366565356234613761383263383734393262 -32666564306532666131636334653730346661646338656130313365643066373830 +38323362633534366265363764336331643632366262336536633837653030376164323666653266 +6130653633316639616235626635393336353338373164340a663365393233393737623133303161 +65386236646662663365643863343635643163386433373633303636306533373830393865313236 +3663623234643663360a383333616264383864326533343263373731613361356239306635623934 +65666539613837353836643635633765343461373838363132333638383565333839353932666436 +66643035326263666336333962616166373031663565643137306566393832316362303835366333 +66333430303864656239626236366665313533393139366662636430343630353232623339323435 +34333765613661316130623635366433303562373961313539353163616537666263373235663536 +32323261303738356134303133333739373137363930613330656430636464646138313533386536 +31353632613135313938366564636132353538663664643430643837656461623064386232663162 +38316461663562313866666236366162613264333039636136663631326164623539633364626661 +33386464386231653038333266363066336135353464633635643330323435373636313666626238 +39303931353361333266663631666538653466383433346332653463333061396634303464653863 +64373435313566323030616434613930643434313664386134656434663066323731626430396135 +33386662343062623166633430626239623831373335653261376666376661376130353835376634 +65653135636438653138383735616630363335636335623733383461663037366333386162383961 +36343661653562623738333830636639313839376630313639326264323930643933373839663434 +63626161613531646166323635373964636238633537613938616539663432646534643034363235 +33376465336466396235346533643535346436633961666434393366306132656137343439306531 +39343266366462383762343462633861303230613732633530373365376365643430663532303132 +34613132333638323932663137656139393038656161653263343463386330383463626364313735 +33653832316461396336363930386638313234623564346439383034396436393366653335656138 +35636361313538346635356138616531396665613331366631663064613833633833316630306662 +66613031353435333032353362316462616263373531666534393730356566646635386566626439 +31396330666232306230323438383065323437623932313636373838336162353865623466303963 +35613232333830386230303561623532356133666133636462656164616530613037663038393839 +32373739386265383037346234313666303166333035303066303336386433663962316535613633 +64386536653731363138336161636234313062343964616333363236323531376237396666616139 +34343962363335633936343935653838336461306661326431316639333939616134653133303864 +61313064323434623830376565373866346666356333653934393631346565636263636536313933 +31323366656566386337386563616632623661383165623232623331306531666632306164623335 +66653332393830393063353538363566633535663663366164343138653261346633636363326562 +38643162326530346164356132653461356230336664316538326632646235316465373038613264 +66613563636163343837323730336438346365656336323435353730373663323066636537643837 +31663830656138636536633661313261636431623130633462653830386535333739646138623734 +37316561356534386239366533356630613938643337336636343363376265663932626337313833 +65656530333966313162333263346165636464396566396232313135353462336264646465663038 +36373562323764633765323564306435353938353161396337346230363531626566636565343563 +63383938323166353934656565666366313136333137353064363864663532326438656638656637 +66303564316631316465373137333835373535303965376335376331633939643532306137346439 +35653634323365303763646464333861306431366665646462646362363230636435323739386564 +66663861636431653736306662323563363635363335353563313630633735373464663938663466 +36616133613365303937353663623233643564376332356165353830376135663963323339616536 +62616135336134393630656265366138313533393238643262656133363632616465396631336132 +63393038346239383130343330666232303864646462376364653234636431366337373164323531 +33396466343038323536623530646663323865393665643663616364323933663864316234623733 +35663731373563303239643539383230636335633436333733313530623135626465353061643362 +33343762393331306637373031666261393766653162656661653465363230353536663436353330 +31643538383930333934656363633066393735656430646164333339643236383139346137353561 +33616536313861306161646136623437623062623166616161393165303062666361646263636432 +65386134656261393166623739646232303932343533363266323930643566333936346332323564 +32353461376331626334623133613165633530393731326365393831363532373566623634666565 +39303933636431383962613330353130393866373836383936646533336333363531653830353261 +34363233343131633130383738306463343761313936636162636436333838336334656238313934 +63326563333838666235383565316132333333626535343737653239343431336437666339643438 +32313038363732326566633334653435663065336436343062656332333239363933393335333364 +33636239646663646532666162636634383733633230383831366465303663383830393066333264 +61376261643039663661366564323234626165383439333334316638393663373838363037663239 +66643164353663303566393333363164303365303064336431653064633265613565383931353037 +33363433303463656537346133663339393762393664303337376434343337353764646237346535 +38383763396635396138363362303063353262333938316566643635643463646664633938313931 +63396566346263303036663361626334323766376630383266373130663437323961656230343230 +65326630323735643765616164633064376631393961653166643763303332383431396165653736 +36646266633735623263333938616464656462643536633238386235346565323265303834633735 +32616665653735353239383233653435353538343164386639303933356133656166353938623633 +62333266303733376664643537323064323563656263643639313163393262313230643663373764 +64313637336562656636623537663332393762393938623933313833343761356363643438643264 +35386531346436336134666162303264373065363139356230636232376265313938623931353234 +65373731623839626662383361316431343262626132663363343362643735356636343332356230 +39343031316166383766373562373163623062663661653033343536326631333138316461653531 +32323537323765346339396633393338393561316665616639353363363639646335303634666362 +36326338353166363235326539356363626430616336356636333361396365643835643161643862 +66333430303035313465633566313463633036343262666432653164373564363434356132366634 +30313536383166306131383438663037633333363732626231333065376463323465333639333832 +38626164653266613130653432333539363836353734303436653138626230396331616639356431 +62383835646431636237346437313163316132643539353336353263363538316639373166636162 +34303462626165356437333931666236376433353166303562636439396335303933666232646463 +39326132363362643833333935666134663132376236376638633532623432386230346433623865 +66333034633361373439363663346665353663643538636134343232353931303361363564376364 +36613861613963356236393864323565323935646431306266656137343362666463373763333861 +39373364613666363064346536306532326166663965646565383532363663613830363439386165 +62363234376662306562373738633339316362633534373131616364323130353930396663386335 +36343530663435623261373934346538363338326530643530613334626239333833646532636264 +36623633376561623530633937306165363766313333616531363538393866623835643262636638 +30643135613433343237316464666432386463363665623333333434333861396335383565653962 +34663233653531343239373831623430333731346439323264623462376637376562333738393966 +65333538666161653733393466316334636163333630356138656437386664663635393732653564 +30623864393262643839313430336635303165376633333661623131613636326563343563616564 +31393832343565323663346433363237376464386230303663323662373838363964643261326163 +63623064356563626136653638336635653138373835303536313239663339656662356264643136 +61383635366464343866313962303664316163303437656337393866333664336334383762373762 +63343337616233343837633731303338636164313666353962643464336166383864646666653338 +64613433353630333535653936383337386365373866613836373037663139643032383764386565 +35383739633033366632303130323539393066333530326634386239303964333039333735393334 +66636633633631623535353234376238343635386365656336626632633764633362346636336466 +65616364333834383230343834326632643330303232356134613432613831643932626538303361 +33356535363833356531323436333534653436313631323531316161333530386165616236353664 +62326366346431356533653461333137643665623035313331666238393562363365643763653030 +30386239313832383062616363613463626532386234663135336462383737633735303833633561 +37363666396165363239383734623963643562323239626537313666313736363266326464353437 +31336563383736343138316161303562323337656265373262353466363737346534633662393663 +66323264653763656434383530616261373765373365636536636462323036363935633064656536 +66303965393433386432333763353531623731383732613666323163353537613662626237666536 +63396561623766313234346134303939386431366634326635643834333435313866386237663834 +64343636323231363564333631343963353665633565303132376464643738363431303263303661 +34393736346436353465633039323939393032623536633336613433616437373130613764653631 +63623438343563633831303635363432333132373831333133386561343435393032383461613065 +31653739653664656333623064626333323031333439646663366363353166313939363462383630 +34343033666266633163376636306437343262386637616161393961393539616163666237613639 +62636363633831306139636663623235316636373633666538373433396339656338656566356333 +65323738336463666361316639373038336438646165656537613561613164326638363166343535 +63386463633464633239653565303937343761636364363635313735376466353736333565646432 +38656130613763666232343236653731333831616463396163383365343465646338346161306136 +64396564373763363539613436323262383562663261373263653630646334346437353833343431 +35343132333762363934346666633366396439616433356430376362656361643766313764356166 +65623461326234313433313462333932363930633832336264306330353634396432323535353264 +63363963643335666531623431373761643035643634373861343332363666343066343830336437 +32366162343163383631313931336434323931663063333266633433326536373635363439386131 +61353931613431643433323630373936383935646534666166643465656138336561363231373434 +63333137363130383830336133636436393430643438326261666331643632376439626635663033 +32353533313434653132373963663932333337396535346162663933353865333561636661363664 +63616238313636306235343533633333393032633636373733626164633661376139376536623964 +35343864333335616534326335366565333964643761613238353861306563373065623265373566 +36343437663538653531633338393835613532346633633038363064626536386239323335633439 +39643536376437356566343235646630666330323438633262386665383065306434366135613137 +36636632383134333666336434393466316663643666633536323766633536303063613564323361 +65663933623539306466396665656631346239306539383764356464333733333263336134356633 +34313232653230626562323166353137643336323331363332343739643233653333393737633636 +63383035363039363965386336363330393931353066393932303065336430633262333538643034 +63663962616332623434326235613662323139636632663364663530366333303938386531393532 +61353332343935306138376533633537623838323432623161663432633033386266336563326563 +36653864626632333138396463666134306566303736326135643438303761626661653036353265 +37646165353739393634323463656531663433643363316134646135363134323863613665346232 +32663739393137616631393366383164643665663731356362366236656632623132656237336630 +65316663656538653161653335353761383761666261396332333361663039623234383538336132 +64363861343066663837643337363830646562656130313133366231656233343634323766383932 +34396531643835353437393765636138393738626530353631663234303261636235396261383633 +37613364613933653732353337383962626335343161356561636634653632313635643666633730 +31643432366463653866646662353265323535333339626331616164313832363865333866646131 +65346366666461653265643462623236626165323635313139333765666531666335646462353537 +62343638326162356335376635666630336666643538373633353031643634386136313830346664 +35306232326563626132653032613730376664656363613966633138363838393661393262643837 +33623634646336666362366264633336316633643935613034626565613662633564353934613536 +30306530626238613762396661613964336539666332356234663232643165666136366162633431 +39356138373838336335326638383865306237653038313963366637366532323261376339316561 +63383064623635643339633463326466336136353533306163653464343664623062346139306131 +61343333303432353233616234633330316337313039363736376333643964626531393062656239 +66306664366630656436313866333664346233623731323834356165636461616135646134356139 +30336335623564633636653533616263326232386537663538353866643737396136616266616165 +37323665343034613435633464626339366333323065623334373231623832323330396464623939 +31353834363265626536313033323633633266396234323565623536626636396162373834636432 +66353931643065373935303664663466323763353634656665373635383263646439323535633535 +39613337653363373464323364666233366362653937313935636534333463323839653436363930 +62383865376630356163323031303331363932656631653833393934666437323034646362303632 +61623138343066353162363238386465633661376139626332323836363030353563373935643530 +62383338333631313466373132303538643338333063383965353730386266303333323934306634 +61663735353336616532316436396263316661373435626536393463663739386536663539316562 +61346565333834366361323731623364663362343065666531643331383535393662316366376436 +34356439643538383462643531353539303962636161313538393466633064653038623163646361 +39613362383666613736643834383261353833356334626361613262363332313939393564303531 +31353138366666373263346364366531633361393761636663613436313237616238376431323163 +39663937343833316163316632323563643764383432643266383631613266373666613631333163 +66633938333431376333396666373361323839623834636637356465653634626238653335326131 +39316361323635633666633564353237366465333038613930613466623962353735623035616161 +39366631343130313031373536366530643165303337383235643036336562386134363237623235 +31306134646265326430326331303934653239653737626638653336613033353432653039663233 +66623432646236353931353030643036336438303937353562633331376366353931363536346266 +61663766623266333331363036336365353463306439366534323166313761346365313035616638 +31343938666538373837376435646130336366303137643332353261633761386133393639336233 +64616362306637353431643165373761363630333635326335326165653933663232343935633364 +66306564396534303931313733623636373139303534396666643566373736616365373063653332 +63643764386538356561373161333862323039366133343438316236353562613130633033663235 +66646264336234333937346262396463666664353365653464666366653939333466623965313333 +61616632393064336665303230653533303238646239633163366237373666306637613366653736 +63626364326337356665306164303933316330316437646333383438396564653662393833626434 +34346332623837303631636434626631346161336637653638626132373235343765623663653265 +35356161623331636432643031326533633766313834666635646632653939333163653933363464 +32313235346635613961333563396335616630326536616336626137383765333063376361363165 +37623234646561303332313734616364363639313533383530353161396663313039333738356434 +39323230376438386136306235373461323533666234633938353866323662643361636466356633 +31363232393231333331653930383665393466323531306435333832306564666530373630376362 +65303935323830623130316531393530636434323738663630316166623265336164323139393932 +38643564666234353139343064616637653932386366343433623561353431316161323736373936 +35663762336664633937393366356534323239333238616365303132643061626265616566626435 +37316538623633323538376266323766333361623231373030643337343933373162336336393432 +64633563383036336161366435393166623366313933313762333831306634386561303766373934 +30333834313632393530396234373939333434643832646339396239383533313035373037616264 +37343361376464326534363166663732636137356633336136386135396232393237616432393230 +30666330313831666138383365346432393834323037336239336231346438316532343436316562 +39616266343633353737363032373030623835303038333338633634363235666263386166326665 +63663836376133383137356437306231306135336333636263313732656130353439313263336330 +38646533303066356533363562626231336661623265313839326363366336383262373932303633 +66633764326166623030326532383162303366306535373933663537306563333638636432363833 +61623463303135313935666633386130346337396463363363633930613732353234306236643061 +31666334346233303661623966376138363431363865613331633032373064643038623464396535 +63656335626535393664366431613336393334633961633831383965346434633463326165373732 +35376332363530356661366465326434333466653161303536393635396131653430343230663536 +39303131386236633333393462666361656263396466623136356362313833353231616562616430 +39343939323230336636356161383062646465373864333161326232323036326434643864373263 +63636233363037633939616362396530316165343666653730633930656362396337323865396234 +38313864333135616665336538313639386364633061613065363239653736303861303635616366 +30636639613238376366343039363935663931383531333061633536383161636663623234663165 +38396339346638343938613461656336336136633636623066616639646435393162353337306531 +37633130386632353135346630336438303032353733633465303533653764306237333337373736 +31306263666666643363326131313237353932353664396139343362353466383562343166616137 +64396662663539343337666537356564623361613135393239333235333062656165323339313064 +62393964643437666233316364613062393661653863343333373030366564313961343237303265 +39316631343038383135343734383437666131343163623532303362316639356161613937636637 +36396263313132396233393664656363323637353931313561633732343865643736383535646532 +31666533626335666531323264663065383331366239353735663036343731333464326436653232 +65636561356263303464363932333432663366633835323966376535663438333338326663363563 +37636662363833376431306334616338323164303630646561393739323061623830613065363662 +33386337616234653163383061373837613530373439643766383365633039613864646635646565 +32366436663164366532383236626432316265623637666533383537356233343031306537643661 +34633362336534623635356136313465343062623164356562393036386663316462653234353761 +31306539646230383938383434353565373637663034353364626434643266656334343230663235 +62393936353535373963383435326530656533653264376630323532613765363861616164313032 +61623530386462303962323738323163663566353136353433363538323837613537336136383937 +31643437643430353638663132383765323764663533666463383736656661363761613935346532 +36376465393366653439663032636634373334613134396637336639616662643232333037663630 +32313663376365653730613963313165613832306438303435663063646538303536663961346261 +32333163393563313333316239326530386635363132313030323265303736333361656636303739 +65666636346537376531376337646434336534393434623131346335313038343061316131343563 +61646263356138643930623239386462356534306561666365353262666461303765666535323738 +39343563303766396361646434643766656537623839333437336336383036303332376134396333 +31326335616131396336656533363438393265343261653836363632363764366236383933396661 +66633965386536636363613231623939643961636237306164336234343762356565326233653031 +39313534316462316135663534636639346136346436663765386338396335616439343765383565 +31663037356538383733626334663465303861313338656236336235663661613363363631326139 +35356337323264373365656461393632633131366637313664316435656565646561656665303931 +63303736666462643565376137643065363661323261666434323563373237363530633065343437 +64393361313536366531376461396535373265353433373261383762373863343261643865313934 +35623230313339303564336133656230396633353962636538303134383737333864643239666162 +64626437393561666333336630373337393264636662646364386537383361616133613763616365 +37633636366266613563303739646161623136356366353435343765633035393733306366396130 +37353136646566363436643932643861346236646137306463633564616161323364393036313336 +65393332373736633764363439353436363431613065303162313363323630653531376665363332 +34656163323566373464646638363064326436633537633631646133366238633534613231636462 +33333933316336303231313865623131663961326239643231653138313665396563303531363361 +61343865376664386236653632373938646134613533316264393835616638336534393865396434 +34623664313831326665306164396336353634626132636533323634306436386235616337323137 +34393162656362633432343162666664616633623830336137386464356264393735353464383138 +64326365323662333831366263333765323663326437346564386539383561396361313762373231 +31323237636337653538316634316531343964356237623935366161306565646561633965333462 +64333064626165656537356435613835336637373164343635306436346639663237383166393431 +30326339363964316265303662356436383462623235393561366435353736303463346233636634 +66356330663831343731316363623231376134343031336161366238613230343437373030346363 +34633934393635653636383330643265626439646530383361613164346537353238346335646166 +33656164613032373566643265636365643961646238396663376235616361353035663135616364 +36623565653433363461666638373866353365393630613534323134323165346165303232643666 +64323963373134393462626130663432353163303637376665626336373537353531643262393765 +39303032303231383237613862636534343033613034383931386336323864323561303639386431 +65666433333030323832633463663066356664353865353065623035363262313537643663626630 +37386337346436616664616234373732643438386139336630666365326361653435623835393233 +30343762313961653439316339636562343064323031386366323830666338653038393339316532 +61643737393632333536373164636637623834356539666436316139616435623561663233353061 +35363238303139636661353031646337336666666463363666666130346333663333316533666465 +34646565666536653161623466366636323261613362313733643933353332626665623436396365 +38393838386234396462346131363831616239616131656434386565383466386335633933653433 +39653662386635346239666165613363366239653539373565333361333133613164636630383262 +61636531356462353536313231643663366635383661393336323239323136303134623739363330 +66336666623130356461643131386535346562623837643234393834336564333532306533346231 +65303064336332306137633034383935326231373766613934663436333662393137356461633336 +65363332326263636431316466333039343536303065313636613134363265326163623731666362 +63653831343638323861343166326137383963613362366661623533376239353235316539343836 +65393933336466636365643336393033343865613830383764343261303731313831323662396264 +30613861646666363966386539663635613337316330643832386136663839343864646535636133 +65646135636261326639353937336433636632643135383138346465656133393738636334633262 +31373038646661623839623762623130323032366665633833366133343862326637373662623339 +35386366343634653765316337303035643566383563636331663938313030333835633838363731 +33666366383135616664366163643234656137336461313734363539333631343461653766643664 +36643764613439613161373030616639336231626339363733376366666531323037383731656139 +62303366633666376438316331646132353433633531313964643233363863306236326337363931 +33363934313365623864323438633639376566323964613438303634336334643436313939386666 +34316633346238343738613934363333356136363961633535656239636232393037376433393232 +37343531633334636466333265376265383965303237613033326436316634313565623362376261 +66663665346138323731303238323033653262343161306539366531666164353761373136356637 +36353462373363316564663363393930396234353763303437306536383961616537303166346334 +62643137613864333635343932363062303235366133306161383062643134623963393139643164 +35336630313638353636366431396237636563333236373665613539303630386130663332393965 +64313339356635623933306466366662306432663330633264636233383037383362646634666536 +63666635613735386131343766613630666136383466656561326237373862333566643765366431 +63666635323430303866653733393933356231643833613639393636636531306165656533366134 +66393166386465303330326635346661376437633837633034343039396438373162383563613864 +32653536313461343163633166626433383966336665666533313164646161626238313533353533 +30313335316661656337356465376238613564333464373932366432623564626361633138396261 +61323165636137366262316664353435633964613937363238646438656265353161303333346336 +66323633383937396138623636353130623931326335356363646164363634626364633238613230 +36623962333037653965373638613639643830376564376537656666363531366262336236393633 +31623035366263383330373566653665346331373037353932396461313132373634643638313331 +36663664636262643931393837663431326266626365376539343434303564393132623132393330 +34313530663334363934353532373231323937336231313864326266633862646163363939356435 +30613933623863343066356531383965333562333637376232666563643536386265613965666539 +35306232353166376664393438373537353232396266306431366532633337343635656237623438 +37643265303033336639336166613133323231366231393064383364393363333963393333623730 +32643761656339386534666635373533313063303162336362396638343261643631386563373265 +34343835326665643761613561636366623431346231653963316232366236303962643236343831 +32373966656336333732366130356332343133383638313661653933633863623665663034613831 +31326664646133386564646534663936633961393431333839343734303037363538323630616331 +39313237363036303539356336353039396162613434393062363735326138653631653438386335 +65663232393835376565616534643438323638663965316239636235613263636365616663663131 +34346135306436653636626239306264363535373431663136373136323134316136346133353231 +37386461613735393636393936363166306332643930663531393130663130623262656565636236 +37336534353932303239306563646130653130323835356432313963316530303634623539666331 +66663732383765323362613434633339613639303363623235343565663630613933643334346534 +30343563353437633431623663623939383763323038343465653734343261663635396432303530 +36316465356633633030363030623932326363633864343134363564633366396131356561396461 +66656531636331303461393933616663336137643737373735613932323334326339363062666133 +33303339383937363062663936653563373761636161366333663165336339336664356266313334 +35636333393564366465346566646634636361376265343137383162306134636238623634656263 +64373561316332303966356661336136373635613961356635653339643237383166303634303331 +31333666343562343939353166386666363539316233386234316433303163306534353637613439 +39653332393634666137346436346466373637373963346139343036396232333235626431366436 +30343830666461376435343935623035653566626263633864316133333536323862663433343863 +37313433366439336361346639346266323164323331613935353131396534646432663432653239 +30623466393137373138643833616138353366333666343164646539376463656234356239303764 +66356662643136333163353939363266643362336636616136656362323530653566383232623535 +30303430343032613937656465653031653064636234363139386430343161623330363938646263 +61353935613537333439373233343937623034313136353235303262363062383130636161363339 +66633037633437656562633761323365323731396136623538376262393866656366386338383236 +30353036353739336333653563363937386463633230316237346438313863616132633735343032 +31636535396566306633626362623466626539386463366364346162343037653031336235393131 +39343133656337316662623134356132323935323430643637323664366664656230313363346436 +61656337376661613765313039636131633366316337633533373831616366313337363133383233 +30366661353433303733653138616538363465366562303130663462356230633364336262316136 +39393932646139366435346562356364613039393434383839343533383330366435353064376233 +61356237313164336530376631306364383430613835393332663334613138633537626163356631 +63383062353736633361343966393537323963653434356162333163626230303536333564636638 +32623966323366386237373039316564343965353665396162336537326565383635633361623663 +35366339333662323130653663356432623436363438323131316337353835663039623737636636 +33326434346562626230343134623932353236396362366436316566393265653832633366663035 +30663232333666353434373836396462333666316639623938636232363331643536303631343366 +39366337326663613132663666656263383664623664643463656334646632343961313435663562 +62646437363965313163313766306466666233663062343033346236323835353430316338336130 +64313437336138326233393762613466306463613436363035643339383232636264363230393166 +33663632313535653438653432616362323366383732333134663164363036353739346263353438 +36313863346534303037663861343332393964653963396362396634376165613763363137643663 +31626263623834343838396632636134383833343038623732326437376532353635356530386339 +31303437353034663136646638333661666335633030386131386630356261643435316338626536 +34373430653565356666636438363235356233396637383835613336643337356435353830636535 +33646338613233313163303733333232633338623935333834306137396265633732653736366461 +38376366633866626630633563626265623437363936323964373437376632653839613931383665 +35656561323232383665656330626336356333626639623561393134323234346464333538333237 +66633732326662353665313039616164373262383638396231373861353233376465353961316135 +37386636613763636563646131366438636162366338656333623231636433366638383633316639 +39313134633930626537623831316366303666653066326537323965633462366466363865366464 +37333939353139623261646632366134303330653362303639626663306566346164653833396130 +38616164356536393935633839306437366565333561303161363366323938643566653932383866 +32633564393039393364383865396365376239383939326331363330633538393866623465613033 +61356466636434363931393964366333363862336162616235363338386637643266363365626131 +37643131373333373562353362363361386562643738666262313761616139333136366264386533 +35616539653864646166383733363032666539666332363933643161363166656665323233613731 +64353665353539376462326635643465663134663631363438333733613036396138343038353130 +35343464393334613630383965303166313865633131393635616666636561656330653537333535 +39306235646636343134363861316264663639636663623863393337656262666165656336623437 +62666630616365636236613434623733313135376530333733333062356635353733636239343064 +61383661346537353032313237646337303531313763646533626638393564333538653539323630 +66336362343061326430303164383038306635666565303031616232343131636264376131373038 +64633561663961653631393463633336333166623164386263356132396533653461386166306535 +36343263376634663663373439643263653961616333303030326466346634343835303735626266 +64383336643533373262373863616337653464633732356636623563306261353833373061363332 +39316639393536336265656661626333386531616661303433333361666364333238306263333261 +66323733393462616161376261663936343965313563323338326461373539303532393738363533 +38386533386630396136666333633539613666626532653265346538303636326533376462636132 +33366164623235346165356666393632326666366334663936386430383466646338623131666162 +33666337653963393737363461326365623935343234613638343238643563316331363436663437 +63623362363266343632653732396164356336343965363438323636323035633931333034393265 +30326363383562653738313137306436333231353236313034616663346633633635643761383237 +30353961343361643936303633653363636266386231656137616639666464346338643963656161 +31306639303565343733663930656634393261366530653130343634623232343833326632633331 +63653932663730346239636637376462623231646465393232306337656561626538356336613531 +34396561326639663630306337343136613135326433313933303263393139353164626438353364 +66643234373330343531646564623338336538373334353935326130653434663233633131316536 +63373065623839353064323831393336303331373264306634366230346436383562666132366539 +30363136636431633335626337316266386338613832366531616265363666373866313337613632 +66626265386366616161623236323731393765666136633439313663303464346637323861383832 +33316363366238376537663834393534306565323033336434383434633734653932316566646338 +31616138613130623230393434623163393138613232386134386538643365383131613434663432 +32356638613565666632653162393931626333373233393331666165623135653237336534393565 +34626264383462363962636339363564366434353364626539613533646636353035346239643636 +33313938393039303562333839303737353339363334316136663466326464303934636364326536 +32313834656232376331346634616561363864626362356234333862323235353536313531656463 +63303236313465356166613666396630313061656464393833333566636532356531376535363966 +33653839383265326536323765613336616566613236616536656635663566373131623132313134 +35666266623664313864353037623537313930656237393363636531653838666232663335636335 +63383135303832643766336532616133663835313262373934306466373230396535653536383431 +35303232363333323466663730636662666336303163333835656233623938306333373535323037 +39623431376166303764616164663363363832336639383732656264353438316130366131363836 +33376134353935633537633739336137306462323064643835386130333961646165363963653439 +37653732623638626434653236636338633134366532393032363265613765623862323766616639 +33363136376363333163353032613561633430383234373139343432623439336238323138336439 +36336662303138656162376638306137656566633236663362613661356335386138636361306266 +37316463346330303061616266393630613538326635386364653136643063393738366534373662 +30623764626165646432323764656236323738336231643164633133623861636430633762666136 +64373630386462643337373264393066613037386332623938303435363135336265346339306262 +65336565613837333933656262353864383632383465616564313739363433623364613933376537 +64326530326233353833396238613630633439336535623839646336343734393565663166336461 +32623134646665366433326439363937663334633537373062393832393063343035373362653361 +66313366323630386164636430663965613263303131626638306437633566663730626336393439 +66343037633264643762323466323034373962333361336237613961316632373739336265383734 +37623863626534666537336566303539363565373135376133643435383362663037366236333233 +62343734376433376336396135616632626431653330333065306431323461623932656334306463 +62666564353431313535373764356165663839663361613066653165303563323834393233396633 +63383363663264636366393061336330613931313162316639623135383436653431386534633230 +35363536623536393131343763616465333837396535363334323261383364613465613635326130 +62363562613865613063393031316165393862653634663261323864393338663235393134363231 +39623130646462353930303633386164643063633738383030623961653561383336636430623663 +31616232373362613930336439316263646636353231653866656237386661306635393331303563 +64303635346330666339626263656230383464646462353537623230356639656133643261393538 +62623133346166303331333763336130316562616561653562613666666664396661633763613432 +63396431386135373535303531323439626661396330613731613663313337386162353435626630 +35663634343930633461333536316238356665656438323234366237663735313461663631313930 +36666361303934313339393130636639306261656636393766656532643131373831353834336435 +30663439343161346136386363666536383234393764326433616238323565313563623665383136 +34646133663034326166303938633233373666356663666134353838373034396362343537363137 +31643561343433326337323162323631313065653763653735353733316434333463386137363037 +64663636366634396332376631663264323030346639353138303462633337326366646138373637 +36613065333631303563636239336538393631623231356132643235316530666332373235363338 +31613831666334383130303530323133663166636264363036613761366164356131643231353138 +34323331646133336435393732613566646161333739336135663331303866386531643336643764 +62316565656434363437376437623531326238366434373533663334323861653766333762346535 +30303033303232373431323633643262643935623565613735316334373733396266393836636433 +61643130336133636162346438333162343039323461353030343062343635663236383961393635 +62643862363632326265623261613930623034303039623532343763393334376638376636663139 +31393064346161383065646136343861353031613534393564653365373364656438373734363636 +30663632626639396466316132346432663936303063653830333163346639396664666261343139 +65643562343138653463616638373130356164363535643338336632303439353233333936393131 +34306137393266393661373465326637656437346430653937363132656535656635393865383636 +37343966613336633865303665376339366336316164653132663338366338343438663631343761 +32613237626631343964396531356631386262373634383339303932326537653265323864646462 +38383736333865383536643761383637303861363930343831623963666662376166303030656665 +31663230383437666438663565666265623135333631333663653737623365323861346639306264 +37336632646464393139313137376632653132653532353430633361356530346532306139613535 +30306566653662353037613531626532316532653131393961333965386663376130363634353339 +34656338656364393464626166633938373332316335303863663539373236396165336164343131 +37653430373863356163663334643236616462346238373365396133333433316135616334383131 +35663862623165663837666661323861643338393838613966653036313537393662656637346538 +33663238616231323832366639346232323639316132356239363131383464366132306562323438 +36643739623632323366313232646165386230373633353333343839353735616165393261616632 +38366665386639316164313765613230376537383862663831396261333132316366656136383966 +38326565316665326238366662333036343062343136303266376537613462363337643665616532 +32623535366334313232306134633830636139393862386238373137343664653539613961653336 +32643832353162373533633366366363333737336364303332323635313630323766663966326134 +61346561363731346334313563346162356338313136643935626365653961313634666666303462 +64636663396165623733383532646163346232336462656366623331386135646238633135663139 +32323434303133323364386261373930356138613735363762346133356561656538656337653164 +30336436313231313933343637646162626261343736663330666236646566333833383065383535 +39316335393835303738366361643263363932646632326265386434363538383931313632306335 +61383339623136323432643061633631306533653338353766643633326133353538393335303631 +34666538613461353666636639393530393032303930323365383636373662616630623462626464 +31636533646164346431323139656637623330643331313033643766636231323762343866323235 +30613436323064343964356131306364636263663534356463636532353930343533346162333764 +34373465393362363239393665616638353361303834636137346565613737326439363830646163 +31373638346537393366386635326564666361373464363032653737663239613334363462643166 +31303466393263343261616432643031303132653465393831303739383839323165393734653530 +36306562306432366565333939363939373565383030346464323034366235393336303934616332 +66333166633963383432663538633137353636386336656563326365333637653966656536306135 +66633764396230303333613338343436363231656436323763386162666434366534346466343737 +36643437336634346535353362633465653562363836323564363963623364633065353130643365 +38356465613230326335313935663262353531373139633265303933396265303434353937373831 +61306665373938303931346539633066343065353764366135383633396530633630303631353231 +34303931643134353862316332333330336530633833363034323637323536356138333537393230 +35376138323839323363346533656632626264346361653435646565643361353164326535333263 +34313331646331303132333139363961313832383764326266643134366364666436613963366464 +38393637663365386466663631366433393830613562393134656163303630623730366433656237 +62303034343236643336313463653165663131616131653162636639376637376535663933323438 +61366130636534633832656166373736306636343363323238383863366135383934386430633864 +33313238343962653166653031616631366238306336386436653336323461653236363966356265 +61393864303635623232343137623966343463363632306337393865353833663966633139376465 +61393263613638613233336462643032613535313534616139636565313431353563353034333164 +31646335613133306330373636383665616434623662363937346636353631336430653233623162 +36666564373934666439343734306631613164333962383635323530326133633734643238363965 +35326233386133653461343362396266393262383630363762396537373233373539383130376464 +64366631386531656361373038623034646163363861636564396463626162343532643730376531 +65383131643030303962363833393137646161353864326631363666653333366331313631633530 +31323936386534646130373162343061306662316162313732333361333833613935663665386565 +37663131316361313836356664346234636237323465316134396532643162343932356639643937 +66636638663866326433306432393635353937376235356235616266353131656264346161373565 +64633633613839323165393366373962386636386433633638343236333839643265333536373337 +36643365343364663562616664633133663430363963353465363361613166363834656631666338 +61313833393038666565636237326538316565386637326562393162653538656234653465363734 +38643334383431636162623435333031663062333634656437383134326536336530613163353636 +36663933653237313761613463343530663061623765323635323039373930626532326339366433 +30313034613666613837336235303238386439393662646464336430626230333631356136333933 +66636664343734303337633730346663656635346163313938613235613539353462656139656230 +31396539653761326166363639316366396663656265396435346261303033626361313966366239 +34653665376235363062303263373561613834356465626461373939626632356161613966656431 +30646566383030343762336432316665323063653439626532656636653237343638643835343261 +30393731613039306564366634376163353036313164643034333966343233323064386638353362 +38373361353831643030363036333766336137656464623166643162623662396132376633656564 +65636466366532613530653161656463363731343336393934613261353466616238393837656232 +31343264303630653033393063656430326662316539326363343365326139643530333165343332 +39656139353837373131653861313964623064313962333431613539616466373334386231393862 +62376331323232646562353962663566336561633765313839346639633165393263623339383732 +65363166393666396232313363366132356537623133343133643733643536646334303031663836 +31363631633761653837653665313063623734383165643461353065313264346435616638333635 +33333438623237313930313732333431323336346266306438356362376363616135643564356332 +36353737616534383665653364663035373232663761303464346339323861643034386562353634 +61333261383433386236626136623835663233623962303762383132643733353838333434613434 +31386662386538666265616437396534326131313430336233343738343530393630323866363164 +39336563333331396634393035396561326265346238653234393636616662343561356536633262 +39333539306532383537633866653033363330353961613433363631303666643332636530623566 +62613761333735383030623365396439386436643738316538346637386361386334356236663666 +39643461656439313064633936336436326364396430613263343961373433663232356136303335 +64373563376531646365663166376538336661346461393432396363613163323936333563636635 +64396365303738366238623939643734643963623963323764306331363134336337623138636565 +31353338313636303266643665386462376433653936636132376163636561393832366534316533 +33666234326430616437383035363565303733656332396164613764376639623061633539613266 +61363464363961383836333066373035306264623766333337303634306434353165666237353533 +32353464373565646564636537633662333435353665656635353132363631373031386165663865 +32666137323064613731336334653132663864363365366231353861376137363036313538393438 +35363266346334303062373534343031663636373439353563336232323566663338353563613164 +35363063313066303661343638396338623163666662616636313762653935663161663365343538 +36383766633838353364366132393963323262383966343330343966663936343965353065326466 +61633531613337383832613530396231356533303935333833346434383633313966333735303064 +31616466393035376338643462373232653935646661646430333961383761633236353564616430 +34303665633961383130376232666234653966323234326136396365343065313063376432636665 +62323035663338313932353730313238643133383963393162323465633365376539303734643133 +61353330656235386436356430613131633461653734376134313362346432333963333232373230 +66336137383237346263373464336464353531613930383831346131613866633263303262666332 +30653631303764323232313538646131623434633661346434613139353830366463363535356331 +36316135306633643465343632623237643939303434393034353761323736326231393934623462 +30623865326363366433346236303566336335333531346133373231646535376461333166326339 +33336263623363656666396233663461383361323564653966656661383166343861633261623830 +33373431393564363636646136366432616264313734633361343133306131623139353764343161 +32623330346532353536643736643665343463323334383665333965646431356235616332643134 +35666163343464393035376262383331316339643430333062616263343535333734643930316462 +33663738303434633064623339393164333936373636373765333666616139313436356131333862 +33366665316336646363626539613866366635643139383935386561326464636265373634666261 +38306138333033376162313664376233363539306333626533643638326532643364353839336630 +32663566613634366534383333633635393239643631633465623237396238316564396338336534 +35373930346339633334616434356335373938333735353737643162346432643134336132303133 +31343839363566373533306636653364303830333839663737663130353838313161303734303436 +65336565646639353533373763336637333165306236313934373630343238373162336662366139 +33383331613230396237613332633638656635613536623565633636643837623630303639343030 +62623837626139646333666666353031393131393034313664643064646632666266316265313665 +32343461666236373535633236373261656635366662303834616138386638643461306631316435 +62353366613262376266333764393939623636653164393330646463343733396364333239316234 +64636535383466326233336530323830313837383439626434353064663032306261323535646262 +38633232336436383362363061643434323133383530663431323463353239303135663966303964 +63646461326166323664383161633733396534316430633738396361633861346236346363646336 +30633431653831663139353565663834623062333732326562643636656332373634373634653336 +65636239636261313965373366393139343238623861646133393838303930323765393266326166 +33336132356461663933323437326131633966393864313261303861623033313962633332353332 +37383262333838633333363763306337613333663931663337343033636361376137313732366263 +32326465646161373735373430396433613635636638646237613439663532366231326137333866 +61643036333764313235323637396332653463356130623834373261333338393535653632313762 +39333764336162393136366531613261363637666663326665356633656231656466353864663131 +61623839623434343030663135383164626663343436353261363539633637646135396564316437 +64336261663436633738666332613361656661636238633238356239396432323631393939626531 +32333537343637663839396334343330353738393462373264656238353161383031306137663533 +35643961323137383531316536633937303965646534333935383461396362363361333063303761 +33313463633534396639316363646535313437666661303130613361333833303862636539646237 +32343338656366356133396465316433613563366438383239646265646132376631366633303936 +37653538613236663539373630353065313162316133653563623762393633663839346334303363 +66396238663637343164303130333237383936343765646134663730373763373362616339376432 +66393939386562656263656230343430363038313134656131326236363437623134366132633531 +33393261383439373637356335373663346230383339393936306564626465623935323939316463 +33363436383161333662383963626137336633336139613233386336313433626565373531663334 +61373736353133313464643234643164396139663862336133663639373465323834353064343035 +35373537326363663262653735366233383161343332393735303638303033613639316430383834 +66366238373032666339663837356464366430333137623038643633626436323635636639613864 +32383937373632336130626262323066323339623634366635313161343433306664363831373966 +34626437613133383065323364313237316462346139393339626334663038653337653062323233 +63393037393562396534326239653538353663343932666139643139376161376361383337386363 +35626132323238646266373962323530373631393632373265666664353239613665623235663731 +37663437626438653762386533323439356165386230306261323037666436636131613539316336 +65653531346231316565383161316261333663356333613636303064646231326631616565633066 +38646266353638626561323331316334643666373963653634326437373134616439363535383663 +32393866373863353365663335313230623462303238373337396430306362613635643239333934 +66643839663366353635363536336561353237666637393731306663623036626638396135383462 +32363963663337616339636264303032623762666336663063323031663339386162323031643264 +36313532656431383630656332356335376532376531356338323333383031323730666133623034 +36666536356330386262393237323661316266313739646561373065653962663562626138383037 +38363033333166363339336462313538643137623936636138623663663165333336306639343563 +33633062383461656231373731356538376339643833663564626263373137383032333435323530 +30663931366666363936353637373536323962356138336133366331653163666131353461303930 +35346432646438623238376162653666653836376632313531363831636463373230646432663566 +64656235366562373330363538386639663834626430323439356638363964666637643131633262 +31316538633336326334333236343539333137343230633737333733396130386563393634646631 +31663364376261613237306232303837396137363331663935613766353636643938376237376264 +30613335396133396363343234636635303464633130386631373838616164353561373866386261 +39333837353631386266623034356534383939356463306535616463326664663239323630623037 +32663436303661303563666461613033363861626538316461336365663031303935303536653961 +31633837333263663637393361316535336630386434623737333163396437623439313562353834 +61393733643834326565613333343564316436373034656635663866363961613537336236336361 +32373236613237323433343466633336646365333732303132343632303539366539623835656133 +61633162306238653039303330393863346461653266396233643831613064653732396131306434 +39363162663835343362356439626239306562333834303636306263396134363933326130363734 +30393330323133636438613333353864373834363064643862636533623363346339386234303932 +38356237333839343735613339313030363439653931316439323462313133616631623238653333 +64326433366231663230653634613838643838616661383232343930666662646530643433356139 +32646165313730396136326333386331643932333231356239303937393162316237616338393962 +34323939656234646137316166633365373163653031393235613032663237396238383938363864 +39373762353466323439313734666230393064316566323137666665393530616432376133383665 +34653732346536623665343033353061623462363836376361396133373435366335636332666334 +66356361393664323832666463666435663537376662643937333064373439336666346236373964 +65623162616537616435393764353766326636373666346337303639343537376162363961386130 +39616362616463346239363363373433633962666333656538353463343330313039336536353066 +63333064616232393930353565323361356136653962393233633338306231303861653036643833 +32623664343831373461383165616636616633373937343435396534343530393262636664636137 +32343165346261303964623533323661363439353035303466323263316234316335623762653832 +37323839326563616437653132303738626362353266306634323236623739353932643837646464 +62303435656237333361353839343864376361623731346235323639326136336633343134663963 +65386134363839333361376461303462393633613835613335653465646235623134616132653763 +64623161643262303065646436623462386233616466326162393236326635623734336264373733 +61393965373539366531323537373964393232653731666565353931613765643731613135633030 +66343435343936646539306533643139353035393937366437633164353139346435396637376466 +63613130333238326335623366633962363237646137363039353330393165633135313130646561 +30323333333561323331333663636334633536373234393064623038393338333138623338353065 +65356337633535623734656334613336613934333464303261376331333766316363353433326130 +37313563326533376432303134653736643763656463623932306430633537663735303663636137 +30623564386562343139313737633265386532356339636634333162363066626262363763303065 +61316662363130306661643731336538373466383237613366616363613438383432613464643030 +33323666373031353639306534386138396564613832666664643562313139316633373665393538 +66373732363135666465353630633766323734646561303766333835643337353163393630353136 +35636637666535656666303036643263333135636430636336336665386261326237396234626237 +35323434363561383130316230306337646636303834623666333839663861613533306634633138 +31646461303262343936376362633339373161653134666639613964643536366433333839663863 +36343030303464313634653531313239313266646661616635363463323865306462396362616661 +36666232366531633064656562303132393561326561613135636237303265663536623465333436 +30396264353564376634616134373437323338363531663837636333353334343135393531333862 +38313531313266653263376461626366303366613461363332353031323163386433343661653137 +30333366383631636335633362626539663833313661363161666466353830623339653132383235 +33646435313062386664666165333730643239323531336261613666313763663837643165316534 +31356437653130316436323730363531363031356266653464393132376434366236366564303731 +36663236316233666438623565376462316132336661373463333763633036646163623234373464 +31656431333332633365353636396134326536653438656436313637656363616464323538376263 +38626665346534363130396431656539363034613033633936663130326130656365666437626537 +39303532396431326262663863373236636466356666373763353263616334383462323364613165 +33383032373536383332366363333965613361396462346534373562376331373538643130326165 +34333135366337343430383163356635623861343637636664346331306539613237303162623963 +39393635363766346331333830363564396636636337623639373337626336383331326462646137 +39643139333261383236323539616564313939623332333439323062303834366438623565313832 +65626433653338343934353235306138643338386137613362333337653561336666366566636366 +30373439323163396338363636383666633836666564323630386364336435643866343833366462 +65383466393238376230363539323930353432396332653366396237323239336435326165353864 +37303031343666336531656332663665663362363461303634633033323063633032646638396136 +61383763303831396330333363383630663431616434643132333535313330383235666538366635 +36303265653334653338326230306331353765613664366130383337363430373334366364356134 +64613764323235666332333131333037303965323665363034316139353264363831393365353935 +33653134383433393834323239306233346162336565353330323264346633393333366638623930 +64303666373664623461656534393835366265303731363838393238656239663864633462333336 +30613033623530623134363461633864316439346535323866323462373636616262666233306537 +36313235626261656333343639376134343633346637633931656464373533613437373838343563 +33616638336237333231353334336634633464393135323861623439386332356162623634346464 +61663433646238663364303261323865373734646434643763363734313439333434336532643862 +62663565663135636234663566336264373633393464326563313838393831346230633935373938 +33633563326239633830323135346639663162303536633233323335373733646464626262626135 +34343935633030656165643037303832353761386134346465333838343033666465396332376330 +34353164386638653932313335313862363464333838316636353464666532366236393661353536 +64343130336464663766653839356364393635613232646331616264396136623736623535303861 +62346235663938386630613763666563343136333562366365613931636661616334383931346166 +33353766366439396132326639616533373965393862376161356132393333613866663634386633 +34383266383733356233396137343831323864653530366536373165653565616439376532346336 +36316535663766663732623833393163336363656539643338643939643262613861306539376463 +62323862326536663764663365303930313766343439663737353864326362353661333166333263 +32626366636335346232343133396136616239373730663036363436666465333738373339363466 +32323764336534633531393561623731313434323239663763313961333935316435343935663436 +63333661323331346433623366653266333233623863326437656564353531356333356564306430 +64383438643864653832336232366662336230393338333963303534396334393363326534303434 +38383038613833613132346132623237373739636262366531343061326234643964316166396231 +63306438333638363332386531633930376165646664353637303565373263313834323563613162 +34393464353534383839303038346332653465656334373866626566316334383563396439336537 +33373235653266343731636662313763313430653261356666643864633064363162 From 34fbb44b222ffa3bada21e63033b70890f4d8994 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 2 Jul 2025 13:57:57 +0200 Subject: [PATCH 29/73] Fix Ansible boolean syntax for compatibility with new version --- lmn-client.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lmn-client.yml b/lmn-client.yml index 5584d6e..0224455 100644 --- a/lmn-client.yml +++ b/lmn-client.yml @@ -63,7 +63,7 @@ - role: lmn_localhome when: localhome - role: lmn_localuser - when: localuser + when: localuser|bool - role: lmn_exam when: exam_mode - role: lmn_wlan From 62f2ac58f47ce9c6c25fd87b847cd999159c86c4 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 9 Jul 2025 15:52:43 +0200 Subject: [PATCH 30/73] Freeplane package has been removed from Trixie --- roles/custom/fvs/tasks/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index 3a91603..9d7a3d1 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -29,7 +29,6 @@ - elpa-magit - emacs - filezilla - - freeplane - git - git-cola - gitg From e83616292f39df034b4c56e3696ea8a4096361a3 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Fri, 18 Jul 2025 12:14:09 +0200 Subject: [PATCH 31/73] Set firefox and thunderbird as default applications --- roles/custom/fvs/tasks/main.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index 9d7a3d1..bfa1b23 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -161,6 +161,16 @@ dest: /usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/fvs-config.js mode: '0644' +- name: Configure default KDE applications + ansible.builtin.blockinfile: + path: /etc/xdg/mimeapps.list + create: true + mode: '0644' + block: | + [Default Applications] + x-scheme-handler/http=firefox-esr.desktop; + x-scheme-handler/https=firefox-esr.desktop; + x-scheme-handler/mailto=thunderbird.desktop; - name: Configure some KDE aspects ansible.builtin.blockinfile: @@ -169,10 +179,10 @@ mode: '0644' block: | [KDE] - SingleClick=false + #SingleClick=false [KDE Action Restrictions][$i] - action/start_new_session=false + #action/start_new_session=false #action/switch_user=false #action/lock_screen=false From ad9c0e72435d5d3859dfce43b64296d65f09b40a Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 28 Jul 2025 12:14:33 +0200 Subject: [PATCH 32/73] zulucrypt-gui package has been removed from Trixie --- roles/custom/fvs/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index bfa1b23..d5830d1 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -81,7 +81,7 @@ - unison-gtk - w3m - wireshark - - zulucrypt-gui + # - zulucrypt-gui ## no longer in trixie autoremove: true state: latest environment: From 998bcb515af953ab4a461a3f9dafccb25cc01602 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Sun, 5 Oct 2025 16:01:03 +0200 Subject: [PATCH 33/73] Add firmware-sof-signed package for audio output on different Lenovo devices --- inventory.yml | 1332 +++++++++++++++++++++++++------------------------ 1 file changed, 667 insertions(+), 665 deletions(-) diff --git a/inventory.yml b/inventory.yml index 0421a29..db55d5d 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,666 +1,668 @@ $ANSIBLE_VAULT;1.1;AES256 -38323362633534366265363764336331643632366262336536633837653030376164323666653266 -6130653633316639616235626635393336353338373164340a663365393233393737623133303161 -65386236646662663365643863343635643163386433373633303636306533373830393865313236 -3663623234643663360a383333616264383864326533343263373731613361356239306635623934 -65666539613837353836643635633765343461373838363132333638383565333839353932666436 -66643035326263666336333962616166373031663565643137306566393832316362303835366333 -66333430303864656239626236366665313533393139366662636430343630353232623339323435 -34333765613661316130623635366433303562373961313539353163616537666263373235663536 -32323261303738356134303133333739373137363930613330656430636464646138313533386536 -31353632613135313938366564636132353538663664643430643837656461623064386232663162 -38316461663562313866666236366162613264333039636136663631326164623539633364626661 -33386464386231653038333266363066336135353464633635643330323435373636313666626238 -39303931353361333266663631666538653466383433346332653463333061396634303464653863 -64373435313566323030616434613930643434313664386134656434663066323731626430396135 -33386662343062623166633430626239623831373335653261376666376661376130353835376634 -65653135636438653138383735616630363335636335623733383461663037366333386162383961 -36343661653562623738333830636639313839376630313639326264323930643933373839663434 -63626161613531646166323635373964636238633537613938616539663432646534643034363235 -33376465336466396235346533643535346436633961666434393366306132656137343439306531 -39343266366462383762343462633861303230613732633530373365376365643430663532303132 -34613132333638323932663137656139393038656161653263343463386330383463626364313735 -33653832316461396336363930386638313234623564346439383034396436393366653335656138 -35636361313538346635356138616531396665613331366631663064613833633833316630306662 -66613031353435333032353362316462616263373531666534393730356566646635386566626439 -31396330666232306230323438383065323437623932313636373838336162353865623466303963 -35613232333830386230303561623532356133666133636462656164616530613037663038393839 -32373739386265383037346234313666303166333035303066303336386433663962316535613633 -64386536653731363138336161636234313062343964616333363236323531376237396666616139 -34343962363335633936343935653838336461306661326431316639333939616134653133303864 -61313064323434623830376565373866346666356333653934393631346565636263636536313933 -31323366656566386337386563616632623661383165623232623331306531666632306164623335 -66653332393830393063353538363566633535663663366164343138653261346633636363326562 -38643162326530346164356132653461356230336664316538326632646235316465373038613264 -66613563636163343837323730336438346365656336323435353730373663323066636537643837 -31663830656138636536633661313261636431623130633462653830386535333739646138623734 -37316561356534386239366533356630613938643337336636343363376265663932626337313833 -65656530333966313162333263346165636464396566396232313135353462336264646465663038 -36373562323764633765323564306435353938353161396337346230363531626566636565343563 -63383938323166353934656565666366313136333137353064363864663532326438656638656637 -66303564316631316465373137333835373535303965376335376331633939643532306137346439 -35653634323365303763646464333861306431366665646462646362363230636435323739386564 -66663861636431653736306662323563363635363335353563313630633735373464663938663466 -36616133613365303937353663623233643564376332356165353830376135663963323339616536 -62616135336134393630656265366138313533393238643262656133363632616465396631336132 -63393038346239383130343330666232303864646462376364653234636431366337373164323531 -33396466343038323536623530646663323865393665643663616364323933663864316234623733 -35663731373563303239643539383230636335633436333733313530623135626465353061643362 -33343762393331306637373031666261393766653162656661653465363230353536663436353330 -31643538383930333934656363633066393735656430646164333339643236383139346137353561 -33616536313861306161646136623437623062623166616161393165303062666361646263636432 -65386134656261393166623739646232303932343533363266323930643566333936346332323564 -32353461376331626334623133613165633530393731326365393831363532373566623634666565 -39303933636431383962613330353130393866373836383936646533336333363531653830353261 -34363233343131633130383738306463343761313936636162636436333838336334656238313934 -63326563333838666235383565316132333333626535343737653239343431336437666339643438 -32313038363732326566633334653435663065336436343062656332333239363933393335333364 -33636239646663646532666162636634383733633230383831366465303663383830393066333264 -61376261643039663661366564323234626165383439333334316638393663373838363037663239 -66643164353663303566393333363164303365303064336431653064633265613565383931353037 -33363433303463656537346133663339393762393664303337376434343337353764646237346535 -38383763396635396138363362303063353262333938316566643635643463646664633938313931 -63396566346263303036663361626334323766376630383266373130663437323961656230343230 -65326630323735643765616164633064376631393961653166643763303332383431396165653736 -36646266633735623263333938616464656462643536633238386235346565323265303834633735 -32616665653735353239383233653435353538343164386639303933356133656166353938623633 -62333266303733376664643537323064323563656263643639313163393262313230643663373764 -64313637336562656636623537663332393762393938623933313833343761356363643438643264 -35386531346436336134666162303264373065363139356230636232376265313938623931353234 -65373731623839626662383361316431343262626132663363343362643735356636343332356230 -39343031316166383766373562373163623062663661653033343536326631333138316461653531 -32323537323765346339396633393338393561316665616639353363363639646335303634666362 -36326338353166363235326539356363626430616336356636333361396365643835643161643862 -66333430303035313465633566313463633036343262666432653164373564363434356132366634 -30313536383166306131383438663037633333363732626231333065376463323465333639333832 -38626164653266613130653432333539363836353734303436653138626230396331616639356431 -62383835646431636237346437313163316132643539353336353263363538316639373166636162 -34303462626165356437333931666236376433353166303562636439396335303933666232646463 -39326132363362643833333935666134663132376236376638633532623432386230346433623865 -66333034633361373439363663346665353663643538636134343232353931303361363564376364 -36613861613963356236393864323565323935646431306266656137343362666463373763333861 -39373364613666363064346536306532326166663965646565383532363663613830363439386165 -62363234376662306562373738633339316362633534373131616364323130353930396663386335 -36343530663435623261373934346538363338326530643530613334626239333833646532636264 -36623633376561623530633937306165363766313333616531363538393866623835643262636638 -30643135613433343237316464666432386463363665623333333434333861396335383565653962 -34663233653531343239373831623430333731346439323264623462376637376562333738393966 -65333538666161653733393466316334636163333630356138656437386664663635393732653564 -30623864393262643839313430336635303165376633333661623131613636326563343563616564 -31393832343565323663346433363237376464386230303663323662373838363964643261326163 -63623064356563626136653638336635653138373835303536313239663339656662356264643136 -61383635366464343866313962303664316163303437656337393866333664336334383762373762 -63343337616233343837633731303338636164313666353962643464336166383864646666653338 -64613433353630333535653936383337386365373866613836373037663139643032383764386565 -35383739633033366632303130323539393066333530326634386239303964333039333735393334 -66636633633631623535353234376238343635386365656336626632633764633362346636336466 -65616364333834383230343834326632643330303232356134613432613831643932626538303361 -33356535363833356531323436333534653436313631323531316161333530386165616236353664 -62326366346431356533653461333137643665623035313331666238393562363365643763653030 -30386239313832383062616363613463626532386234663135336462383737633735303833633561 -37363666396165363239383734623963643562323239626537313666313736363266326464353437 -31336563383736343138316161303562323337656265373262353466363737346534633662393663 -66323264653763656434383530616261373765373365636536636462323036363935633064656536 -66303965393433386432333763353531623731383732613666323163353537613662626237666536 -63396561623766313234346134303939386431366634326635643834333435313866386237663834 -64343636323231363564333631343963353665633565303132376464643738363431303263303661 -34393736346436353465633039323939393032623536633336613433616437373130613764653631 -63623438343563633831303635363432333132373831333133386561343435393032383461613065 -31653739653664656333623064626333323031333439646663366363353166313939363462383630 -34343033666266633163376636306437343262386637616161393961393539616163666237613639 -62636363633831306139636663623235316636373633666538373433396339656338656566356333 -65323738336463666361316639373038336438646165656537613561613164326638363166343535 -63386463633464633239653565303937343761636364363635313735376466353736333565646432 -38656130613763666232343236653731333831616463396163383365343465646338346161306136 -64396564373763363539613436323262383562663261373263653630646334346437353833343431 -35343132333762363934346666633366396439616433356430376362656361643766313764356166 -65623461326234313433313462333932363930633832336264306330353634396432323535353264 -63363963643335666531623431373761643035643634373861343332363666343066343830336437 -32366162343163383631313931336434323931663063333266633433326536373635363439386131 -61353931613431643433323630373936383935646534666166643465656138336561363231373434 -63333137363130383830336133636436393430643438326261666331643632376439626635663033 -32353533313434653132373963663932333337396535346162663933353865333561636661363664 -63616238313636306235343533633333393032633636373733626164633661376139376536623964 -35343864333335616534326335366565333964643761613238353861306563373065623265373566 -36343437663538653531633338393835613532346633633038363064626536386239323335633439 -39643536376437356566343235646630666330323438633262386665383065306434366135613137 -36636632383134333666336434393466316663643666633536323766633536303063613564323361 -65663933623539306466396665656631346239306539383764356464333733333263336134356633 -34313232653230626562323166353137643336323331363332343739643233653333393737633636 -63383035363039363965386336363330393931353066393932303065336430633262333538643034 -63663962616332623434326235613662323139636632663364663530366333303938386531393532 -61353332343935306138376533633537623838323432623161663432633033386266336563326563 -36653864626632333138396463666134306566303736326135643438303761626661653036353265 -37646165353739393634323463656531663433643363316134646135363134323863613665346232 -32663739393137616631393366383164643665663731356362366236656632623132656237336630 -65316663656538653161653335353761383761666261396332333361663039623234383538336132 -64363861343066663837643337363830646562656130313133366231656233343634323766383932 -34396531643835353437393765636138393738626530353631663234303261636235396261383633 -37613364613933653732353337383962626335343161356561636634653632313635643666633730 -31643432366463653866646662353265323535333339626331616164313832363865333866646131 -65346366666461653265643462623236626165323635313139333765666531666335646462353537 -62343638326162356335376635666630336666643538373633353031643634386136313830346664 -35306232326563626132653032613730376664656363613966633138363838393661393262643837 -33623634646336666362366264633336316633643935613034626565613662633564353934613536 -30306530626238613762396661613964336539666332356234663232643165666136366162633431 -39356138373838336335326638383865306237653038313963366637366532323261376339316561 -63383064623635643339633463326466336136353533306163653464343664623062346139306131 -61343333303432353233616234633330316337313039363736376333643964626531393062656239 -66306664366630656436313866333664346233623731323834356165636461616135646134356139 -30336335623564633636653533616263326232386537663538353866643737396136616266616165 -37323665343034613435633464626339366333323065623334373231623832323330396464623939 -31353834363265626536313033323633633266396234323565623536626636396162373834636432 -66353931643065373935303664663466323763353634656665373635383263646439323535633535 -39613337653363373464323364666233366362653937313935636534333463323839653436363930 -62383865376630356163323031303331363932656631653833393934666437323034646362303632 -61623138343066353162363238386465633661376139626332323836363030353563373935643530 -62383338333631313466373132303538643338333063383965353730386266303333323934306634 -61663735353336616532316436396263316661373435626536393463663739386536663539316562 -61346565333834366361323731623364663362343065666531643331383535393662316366376436 -34356439643538383462643531353539303962636161313538393466633064653038623163646361 -39613362383666613736643834383261353833356334626361613262363332313939393564303531 -31353138366666373263346364366531633361393761636663613436313237616238376431323163 -39663937343833316163316632323563643764383432643266383631613266373666613631333163 -66633938333431376333396666373361323839623834636637356465653634626238653335326131 -39316361323635633666633564353237366465333038613930613466623962353735623035616161 -39366631343130313031373536366530643165303337383235643036336562386134363237623235 -31306134646265326430326331303934653239653737626638653336613033353432653039663233 -66623432646236353931353030643036336438303937353562633331376366353931363536346266 -61663766623266333331363036336365353463306439366534323166313761346365313035616638 -31343938666538373837376435646130336366303137643332353261633761386133393639336233 -64616362306637353431643165373761363630333635326335326165653933663232343935633364 -66306564396534303931313733623636373139303534396666643566373736616365373063653332 -63643764386538356561373161333862323039366133343438316236353562613130633033663235 -66646264336234333937346262396463666664353365653464666366653939333466623965313333 -61616632393064336665303230653533303238646239633163366237373666306637613366653736 -63626364326337356665306164303933316330316437646333383438396564653662393833626434 -34346332623837303631636434626631346161336637653638626132373235343765623663653265 -35356161623331636432643031326533633766313834666635646632653939333163653933363464 -32313235346635613961333563396335616630326536616336626137383765333063376361363165 -37623234646561303332313734616364363639313533383530353161396663313039333738356434 -39323230376438386136306235373461323533666234633938353866323662643361636466356633 -31363232393231333331653930383665393466323531306435333832306564666530373630376362 -65303935323830623130316531393530636434323738663630316166623265336164323139393932 -38643564666234353139343064616637653932386366343433623561353431316161323736373936 -35663762336664633937393366356534323239333238616365303132643061626265616566626435 -37316538623633323538376266323766333361623231373030643337343933373162336336393432 -64633563383036336161366435393166623366313933313762333831306634386561303766373934 -30333834313632393530396234373939333434643832646339396239383533313035373037616264 -37343361376464326534363166663732636137356633336136386135396232393237616432393230 -30666330313831666138383365346432393834323037336239336231346438316532343436316562 -39616266343633353737363032373030623835303038333338633634363235666263386166326665 -63663836376133383137356437306231306135336333636263313732656130353439313263336330 -38646533303066356533363562626231336661623265313839326363366336383262373932303633 -66633764326166623030326532383162303366306535373933663537306563333638636432363833 -61623463303135313935666633386130346337396463363363633930613732353234306236643061 -31666334346233303661623966376138363431363865613331633032373064643038623464396535 -63656335626535393664366431613336393334633961633831383965346434633463326165373732 -35376332363530356661366465326434333466653161303536393635396131653430343230663536 -39303131386236633333393462666361656263396466623136356362313833353231616562616430 -39343939323230336636356161383062646465373864333161326232323036326434643864373263 -63636233363037633939616362396530316165343666653730633930656362396337323865396234 -38313864333135616665336538313639386364633061613065363239653736303861303635616366 -30636639613238376366343039363935663931383531333061633536383161636663623234663165 -38396339346638343938613461656336336136633636623066616639646435393162353337306531 -37633130386632353135346630336438303032353733633465303533653764306237333337373736 -31306263666666643363326131313237353932353664396139343362353466383562343166616137 -64396662663539343337666537356564623361613135393239333235333062656165323339313064 -62393964643437666233316364613062393661653863343333373030366564313961343237303265 -39316631343038383135343734383437666131343163623532303362316639356161613937636637 -36396263313132396233393664656363323637353931313561633732343865643736383535646532 -31666533626335666531323264663065383331366239353735663036343731333464326436653232 -65636561356263303464363932333432663366633835323966376535663438333338326663363563 -37636662363833376431306334616338323164303630646561393739323061623830613065363662 -33386337616234653163383061373837613530373439643766383365633039613864646635646565 -32366436663164366532383236626432316265623637666533383537356233343031306537643661 -34633362336534623635356136313465343062623164356562393036386663316462653234353761 -31306539646230383938383434353565373637663034353364626434643266656334343230663235 -62393936353535373963383435326530656533653264376630323532613765363861616164313032 -61623530386462303962323738323163663566353136353433363538323837613537336136383937 -31643437643430353638663132383765323764663533666463383736656661363761613935346532 -36376465393366653439663032636634373334613134396637336639616662643232333037663630 -32313663376365653730613963313165613832306438303435663063646538303536663961346261 -32333163393563313333316239326530386635363132313030323265303736333361656636303739 -65666636346537376531376337646434336534393434623131346335313038343061316131343563 -61646263356138643930623239386462356534306561666365353262666461303765666535323738 -39343563303766396361646434643766656537623839333437336336383036303332376134396333 -31326335616131396336656533363438393265343261653836363632363764366236383933396661 -66633965386536636363613231623939643961636237306164336234343762356565326233653031 -39313534316462316135663534636639346136346436663765386338396335616439343765383565 -31663037356538383733626334663465303861313338656236336235663661613363363631326139 -35356337323264373365656461393632633131366637313664316435656565646561656665303931 -63303736666462643565376137643065363661323261666434323563373237363530633065343437 -64393361313536366531376461396535373265353433373261383762373863343261643865313934 -35623230313339303564336133656230396633353962636538303134383737333864643239666162 -64626437393561666333336630373337393264636662646364386537383361616133613763616365 -37633636366266613563303739646161623136356366353435343765633035393733306366396130 -37353136646566363436643932643861346236646137306463633564616161323364393036313336 -65393332373736633764363439353436363431613065303162313363323630653531376665363332 -34656163323566373464646638363064326436633537633631646133366238633534613231636462 -33333933316336303231313865623131663961326239643231653138313665396563303531363361 -61343865376664386236653632373938646134613533316264393835616638336534393865396434 -34623664313831326665306164396336353634626132636533323634306436386235616337323137 -34393162656362633432343162666664616633623830336137386464356264393735353464383138 -64326365323662333831366263333765323663326437346564386539383561396361313762373231 -31323237636337653538316634316531343964356237623935366161306565646561633965333462 -64333064626165656537356435613835336637373164343635306436346639663237383166393431 -30326339363964316265303662356436383462623235393561366435353736303463346233636634 -66356330663831343731316363623231376134343031336161366238613230343437373030346363 -34633934393635653636383330643265626439646530383361613164346537353238346335646166 -33656164613032373566643265636365643961646238396663376235616361353035663135616364 -36623565653433363461666638373866353365393630613534323134323165346165303232643666 -64323963373134393462626130663432353163303637376665626336373537353531643262393765 -39303032303231383237613862636534343033613034383931386336323864323561303639386431 -65666433333030323832633463663066356664353865353065623035363262313537643663626630 -37386337346436616664616234373732643438386139336630666365326361653435623835393233 -30343762313961653439316339636562343064323031386366323830666338653038393339316532 -61643737393632333536373164636637623834356539666436316139616435623561663233353061 -35363238303139636661353031646337336666666463363666666130346333663333316533666465 -34646565666536653161623466366636323261613362313733643933353332626665623436396365 -38393838386234396462346131363831616239616131656434386565383466386335633933653433 -39653662386635346239666165613363366239653539373565333361333133613164636630383262 -61636531356462353536313231643663366635383661393336323239323136303134623739363330 -66336666623130356461643131386535346562623837643234393834336564333532306533346231 -65303064336332306137633034383935326231373766613934663436333662393137356461633336 -65363332326263636431316466333039343536303065313636613134363265326163623731666362 -63653831343638323861343166326137383963613362366661623533376239353235316539343836 -65393933336466636365643336393033343865613830383764343261303731313831323662396264 -30613861646666363966386539663635613337316330643832386136663839343864646535636133 -65646135636261326639353937336433636632643135383138346465656133393738636334633262 -31373038646661623839623762623130323032366665633833366133343862326637373662623339 -35386366343634653765316337303035643566383563636331663938313030333835633838363731 -33666366383135616664366163643234656137336461313734363539333631343461653766643664 -36643764613439613161373030616639336231626339363733376366666531323037383731656139 -62303366633666376438316331646132353433633531313964643233363863306236326337363931 -33363934313365623864323438633639376566323964613438303634336334643436313939386666 -34316633346238343738613934363333356136363961633535656239636232393037376433393232 -37343531633334636466333265376265383965303237613033326436316634313565623362376261 -66663665346138323731303238323033653262343161306539366531666164353761373136356637 -36353462373363316564663363393930396234353763303437306536383961616537303166346334 -62643137613864333635343932363062303235366133306161383062643134623963393139643164 -35336630313638353636366431396237636563333236373665613539303630386130663332393965 -64313339356635623933306466366662306432663330633264636233383037383362646634666536 -63666635613735386131343766613630666136383466656561326237373862333566643765366431 -63666635323430303866653733393933356231643833613639393636636531306165656533366134 -66393166386465303330326635346661376437633837633034343039396438373162383563613864 -32653536313461343163633166626433383966336665666533313164646161626238313533353533 -30313335316661656337356465376238613564333464373932366432623564626361633138396261 -61323165636137366262316664353435633964613937363238646438656265353161303333346336 -66323633383937396138623636353130623931326335356363646164363634626364633238613230 -36623962333037653965373638613639643830376564376537656666363531366262336236393633 -31623035366263383330373566653665346331373037353932396461313132373634643638313331 -36663664636262643931393837663431326266626365376539343434303564393132623132393330 -34313530663334363934353532373231323937336231313864326266633862646163363939356435 -30613933623863343066356531383965333562333637376232666563643536386265613965666539 -35306232353166376664393438373537353232396266306431366532633337343635656237623438 -37643265303033336639336166613133323231366231393064383364393363333963393333623730 -32643761656339386534666635373533313063303162336362396638343261643631386563373265 -34343835326665643761613561636366623431346231653963316232366236303962643236343831 -32373966656336333732366130356332343133383638313661653933633863623665663034613831 -31326664646133386564646534663936633961393431333839343734303037363538323630616331 -39313237363036303539356336353039396162613434393062363735326138653631653438386335 -65663232393835376565616534643438323638663965316239636235613263636365616663663131 -34346135306436653636626239306264363535373431663136373136323134316136346133353231 -37386461613735393636393936363166306332643930663531393130663130623262656565636236 -37336534353932303239306563646130653130323835356432313963316530303634623539666331 -66663732383765323362613434633339613639303363623235343565663630613933643334346534 -30343563353437633431623663623939383763323038343465653734343261663635396432303530 -36316465356633633030363030623932326363633864343134363564633366396131356561396461 -66656531636331303461393933616663336137643737373735613932323334326339363062666133 -33303339383937363062663936653563373761636161366333663165336339336664356266313334 -35636333393564366465346566646634636361376265343137383162306134636238623634656263 -64373561316332303966356661336136373635613961356635653339643237383166303634303331 -31333666343562343939353166386666363539316233386234316433303163306534353637613439 -39653332393634666137346436346466373637373963346139343036396232333235626431366436 -30343830666461376435343935623035653566626263633864316133333536323862663433343863 -37313433366439336361346639346266323164323331613935353131396534646432663432653239 -30623466393137373138643833616138353366333666343164646539376463656234356239303764 -66356662643136333163353939363266643362336636616136656362323530653566383232623535 -30303430343032613937656465653031653064636234363139386430343161623330363938646263 -61353935613537333439373233343937623034313136353235303262363062383130636161363339 -66633037633437656562633761323365323731396136623538376262393866656366386338383236 -30353036353739336333653563363937386463633230316237346438313863616132633735343032 -31636535396566306633626362623466626539386463366364346162343037653031336235393131 -39343133656337316662623134356132323935323430643637323664366664656230313363346436 -61656337376661613765313039636131633366316337633533373831616366313337363133383233 -30366661353433303733653138616538363465366562303130663462356230633364336262316136 -39393932646139366435346562356364613039393434383839343533383330366435353064376233 -61356237313164336530376631306364383430613835393332663334613138633537626163356631 -63383062353736633361343966393537323963653434356162333163626230303536333564636638 -32623966323366386237373039316564343965353665396162336537326565383635633361623663 -35366339333662323130653663356432623436363438323131316337353835663039623737636636 -33326434346562626230343134623932353236396362366436316566393265653832633366663035 -30663232333666353434373836396462333666316639623938636232363331643536303631343366 -39366337326663613132663666656263383664623664643463656334646632343961313435663562 -62646437363965313163313766306466666233663062343033346236323835353430316338336130 -64313437336138326233393762613466306463613436363035643339383232636264363230393166 -33663632313535653438653432616362323366383732333134663164363036353739346263353438 -36313863346534303037663861343332393964653963396362396634376165613763363137643663 -31626263623834343838396632636134383833343038623732326437376532353635356530386339 -31303437353034663136646638333661666335633030386131386630356261643435316338626536 -34373430653565356666636438363235356233396637383835613336643337356435353830636535 -33646338613233313163303733333232633338623935333834306137396265633732653736366461 -38376366633866626630633563626265623437363936323964373437376632653839613931383665 -35656561323232383665656330626336356333626639623561393134323234346464333538333237 -66633732326662353665313039616164373262383638396231373861353233376465353961316135 -37386636613763636563646131366438636162366338656333623231636433366638383633316639 -39313134633930626537623831316366303666653066326537323965633462366466363865366464 -37333939353139623261646632366134303330653362303639626663306566346164653833396130 -38616164356536393935633839306437366565333561303161363366323938643566653932383866 -32633564393039393364383865396365376239383939326331363330633538393866623465613033 -61356466636434363931393964366333363862336162616235363338386637643266363365626131 -37643131373333373562353362363361386562643738666262313761616139333136366264386533 -35616539653864646166383733363032666539666332363933643161363166656665323233613731 -64353665353539376462326635643465663134663631363438333733613036396138343038353130 -35343464393334613630383965303166313865633131393635616666636561656330653537333535 -39306235646636343134363861316264663639636663623863393337656262666165656336623437 -62666630616365636236613434623733313135376530333733333062356635353733636239343064 -61383661346537353032313237646337303531313763646533626638393564333538653539323630 -66336362343061326430303164383038306635666565303031616232343131636264376131373038 -64633561663961653631393463633336333166623164386263356132396533653461386166306535 -36343263376634663663373439643263653961616333303030326466346634343835303735626266 -64383336643533373262373863616337653464633732356636623563306261353833373061363332 -39316639393536336265656661626333386531616661303433333361666364333238306263333261 -66323733393462616161376261663936343965313563323338326461373539303532393738363533 -38386533386630396136666333633539613666626532653265346538303636326533376462636132 -33366164623235346165356666393632326666366334663936386430383466646338623131666162 -33666337653963393737363461326365623935343234613638343238643563316331363436663437 -63623362363266343632653732396164356336343965363438323636323035633931333034393265 -30326363383562653738313137306436333231353236313034616663346633633635643761383237 -30353961343361643936303633653363636266386231656137616639666464346338643963656161 -31306639303565343733663930656634393261366530653130343634623232343833326632633331 -63653932663730346239636637376462623231646465393232306337656561626538356336613531 -34396561326639663630306337343136613135326433313933303263393139353164626438353364 -66643234373330343531646564623338336538373334353935326130653434663233633131316536 -63373065623839353064323831393336303331373264306634366230346436383562666132366539 -30363136636431633335626337316266386338613832366531616265363666373866313337613632 -66626265386366616161623236323731393765666136633439313663303464346637323861383832 -33316363366238376537663834393534306565323033336434383434633734653932316566646338 -31616138613130623230393434623163393138613232386134386538643365383131613434663432 -32356638613565666632653162393931626333373233393331666165623135653237336534393565 -34626264383462363962636339363564366434353364626539613533646636353035346239643636 -33313938393039303562333839303737353339363334316136663466326464303934636364326536 -32313834656232376331346634616561363864626362356234333862323235353536313531656463 -63303236313465356166613666396630313061656464393833333566636532356531376535363966 -33653839383265326536323765613336616566613236616536656635663566373131623132313134 -35666266623664313864353037623537313930656237393363636531653838666232663335636335 -63383135303832643766336532616133663835313262373934306466373230396535653536383431 -35303232363333323466663730636662666336303163333835656233623938306333373535323037 -39623431376166303764616164663363363832336639383732656264353438316130366131363836 -33376134353935633537633739336137306462323064643835386130333961646165363963653439 -37653732623638626434653236636338633134366532393032363265613765623862323766616639 -33363136376363333163353032613561633430383234373139343432623439336238323138336439 -36336662303138656162376638306137656566633236663362613661356335386138636361306266 -37316463346330303061616266393630613538326635386364653136643063393738366534373662 -30623764626165646432323764656236323738336231643164633133623861636430633762666136 -64373630386462643337373264393066613037386332623938303435363135336265346339306262 -65336565613837333933656262353864383632383465616564313739363433623364613933376537 -64326530326233353833396238613630633439336535623839646336343734393565663166336461 -32623134646665366433326439363937663334633537373062393832393063343035373362653361 -66313366323630386164636430663965613263303131626638306437633566663730626336393439 -66343037633264643762323466323034373962333361336237613961316632373739336265383734 -37623863626534666537336566303539363565373135376133643435383362663037366236333233 -62343734376433376336396135616632626431653330333065306431323461623932656334306463 -62666564353431313535373764356165663839663361613066653165303563323834393233396633 -63383363663264636366393061336330613931313162316639623135383436653431386534633230 -35363536623536393131343763616465333837396535363334323261383364613465613635326130 -62363562613865613063393031316165393862653634663261323864393338663235393134363231 -39623130646462353930303633386164643063633738383030623961653561383336636430623663 -31616232373362613930336439316263646636353231653866656237386661306635393331303563 -64303635346330666339626263656230383464646462353537623230356639656133643261393538 -62623133346166303331333763336130316562616561653562613666666664396661633763613432 -63396431386135373535303531323439626661396330613731613663313337386162353435626630 -35663634343930633461333536316238356665656438323234366237663735313461663631313930 -36666361303934313339393130636639306261656636393766656532643131373831353834336435 -30663439343161346136386363666536383234393764326433616238323565313563623665383136 -34646133663034326166303938633233373666356663666134353838373034396362343537363137 -31643561343433326337323162323631313065653763653735353733316434333463386137363037 -64663636366634396332376631663264323030346639353138303462633337326366646138373637 -36613065333631303563636239336538393631623231356132643235316530666332373235363338 -31613831666334383130303530323133663166636264363036613761366164356131643231353138 -34323331646133336435393732613566646161333739336135663331303866386531643336643764 -62316565656434363437376437623531326238366434373533663334323861653766333762346535 -30303033303232373431323633643262643935623565613735316334373733396266393836636433 -61643130336133636162346438333162343039323461353030343062343635663236383961393635 -62643862363632326265623261613930623034303039623532343763393334376638376636663139 -31393064346161383065646136343861353031613534393564653365373364656438373734363636 -30663632626639396466316132346432663936303063653830333163346639396664666261343139 -65643562343138653463616638373130356164363535643338336632303439353233333936393131 -34306137393266393661373465326637656437346430653937363132656535656635393865383636 -37343966613336633865303665376339366336316164653132663338366338343438663631343761 -32613237626631343964396531356631386262373634383339303932326537653265323864646462 -38383736333865383536643761383637303861363930343831623963666662376166303030656665 -31663230383437666438663565666265623135333631333663653737623365323861346639306264 -37336632646464393139313137376632653132653532353430633361356530346532306139613535 -30306566653662353037613531626532316532653131393961333965386663376130363634353339 -34656338656364393464626166633938373332316335303863663539373236396165336164343131 -37653430373863356163663334643236616462346238373365396133333433316135616334383131 -35663862623165663837666661323861643338393838613966653036313537393662656637346538 -33663238616231323832366639346232323639316132356239363131383464366132306562323438 -36643739623632323366313232646165386230373633353333343839353735616165393261616632 -38366665386639316164313765613230376537383862663831396261333132316366656136383966 -38326565316665326238366662333036343062343136303266376537613462363337643665616532 -32623535366334313232306134633830636139393862386238373137343664653539613961653336 -32643832353162373533633366366363333737336364303332323635313630323766663966326134 -61346561363731346334313563346162356338313136643935626365653961313634666666303462 -64636663396165623733383532646163346232336462656366623331386135646238633135663139 -32323434303133323364386261373930356138613735363762346133356561656538656337653164 -30336436313231313933343637646162626261343736663330666236646566333833383065383535 -39316335393835303738366361643263363932646632326265386434363538383931313632306335 -61383339623136323432643061633631306533653338353766643633326133353538393335303631 -34666538613461353666636639393530393032303930323365383636373662616630623462626464 -31636533646164346431323139656637623330643331313033643766636231323762343866323235 -30613436323064343964356131306364636263663534356463636532353930343533346162333764 -34373465393362363239393665616638353361303834636137346565613737326439363830646163 -31373638346537393366386635326564666361373464363032653737663239613334363462643166 -31303466393263343261616432643031303132653465393831303739383839323165393734653530 -36306562306432366565333939363939373565383030346464323034366235393336303934616332 -66333166633963383432663538633137353636386336656563326365333637653966656536306135 -66633764396230303333613338343436363231656436323763386162666434366534346466343737 -36643437336634346535353362633465653562363836323564363963623364633065353130643365 -38356465613230326335313935663262353531373139633265303933396265303434353937373831 -61306665373938303931346539633066343065353764366135383633396530633630303631353231 -34303931643134353862316332333330336530633833363034323637323536356138333537393230 -35376138323839323363346533656632626264346361653435646565643361353164326535333263 -34313331646331303132333139363961313832383764326266643134366364666436613963366464 -38393637663365386466663631366433393830613562393134656163303630623730366433656237 -62303034343236643336313463653165663131616131653162636639376637376535663933323438 -61366130636534633832656166373736306636343363323238383863366135383934386430633864 -33313238343962653166653031616631366238306336386436653336323461653236363966356265 -61393864303635623232343137623966343463363632306337393865353833663966633139376465 -61393263613638613233336462643032613535313534616139636565313431353563353034333164 -31646335613133306330373636383665616434623662363937346636353631336430653233623162 -36666564373934666439343734306631613164333962383635323530326133633734643238363965 -35326233386133653461343362396266393262383630363762396537373233373539383130376464 -64366631386531656361373038623034646163363861636564396463626162343532643730376531 -65383131643030303962363833393137646161353864326631363666653333366331313631633530 -31323936386534646130373162343061306662316162313732333361333833613935663665386565 -37663131316361313836356664346234636237323465316134396532643162343932356639643937 -66636638663866326433306432393635353937376235356235616266353131656264346161373565 -64633633613839323165393366373962386636386433633638343236333839643265333536373337 -36643365343364663562616664633133663430363963353465363361613166363834656631666338 -61313833393038666565636237326538316565386637326562393162653538656234653465363734 -38643334383431636162623435333031663062333634656437383134326536336530613163353636 -36663933653237313761613463343530663061623765323635323039373930626532326339366433 -30313034613666613837336235303238386439393662646464336430626230333631356136333933 -66636664343734303337633730346663656635346163313938613235613539353462656139656230 -31396539653761326166363639316366396663656265396435346261303033626361313966366239 -34653665376235363062303263373561613834356465626461373939626632356161613966656431 -30646566383030343762336432316665323063653439626532656636653237343638643835343261 -30393731613039306564366634376163353036313164643034333966343233323064386638353362 -38373361353831643030363036333766336137656464623166643162623662396132376633656564 -65636466366532613530653161656463363731343336393934613261353466616238393837656232 -31343264303630653033393063656430326662316539326363343365326139643530333165343332 -39656139353837373131653861313964623064313962333431613539616466373334386231393862 -62376331323232646562353962663566336561633765313839346639633165393263623339383732 -65363166393666396232313363366132356537623133343133643733643536646334303031663836 -31363631633761653837653665313063623734383165643461353065313264346435616638333635 -33333438623237313930313732333431323336346266306438356362376363616135643564356332 -36353737616534383665653364663035373232663761303464346339323861643034386562353634 -61333261383433386236626136623835663233623962303762383132643733353838333434613434 -31386662386538666265616437396534326131313430336233343738343530393630323866363164 -39336563333331396634393035396561326265346238653234393636616662343561356536633262 -39333539306532383537633866653033363330353961613433363631303666643332636530623566 -62613761333735383030623365396439386436643738316538346637386361386334356236663666 -39643461656439313064633936336436326364396430613263343961373433663232356136303335 -64373563376531646365663166376538336661346461393432396363613163323936333563636635 -64396365303738366238623939643734643963623963323764306331363134336337623138636565 -31353338313636303266643665386462376433653936636132376163636561393832366534316533 -33666234326430616437383035363565303733656332396164613764376639623061633539613266 -61363464363961383836333066373035306264623766333337303634306434353165666237353533 -32353464373565646564636537633662333435353665656635353132363631373031386165663865 -32666137323064613731336334653132663864363365366231353861376137363036313538393438 -35363266346334303062373534343031663636373439353563336232323566663338353563613164 -35363063313066303661343638396338623163666662616636313762653935663161663365343538 -36383766633838353364366132393963323262383966343330343966663936343965353065326466 -61633531613337383832613530396231356533303935333833346434383633313966333735303064 -31616466393035376338643462373232653935646661646430333961383761633236353564616430 -34303665633961383130376232666234653966323234326136396365343065313063376432636665 -62323035663338313932353730313238643133383963393162323465633365376539303734643133 -61353330656235386436356430613131633461653734376134313362346432333963333232373230 -66336137383237346263373464336464353531613930383831346131613866633263303262666332 -30653631303764323232313538646131623434633661346434613139353830366463363535356331 -36316135306633643465343632623237643939303434393034353761323736326231393934623462 -30623865326363366433346236303566336335333531346133373231646535376461333166326339 -33336263623363656666396233663461383361323564653966656661383166343861633261623830 -33373431393564363636646136366432616264313734633361343133306131623139353764343161 -32623330346532353536643736643665343463323334383665333965646431356235616332643134 -35666163343464393035376262383331316339643430333062616263343535333734643930316462 -33663738303434633064623339393164333936373636373765333666616139313436356131333862 -33366665316336646363626539613866366635643139383935386561326464636265373634666261 -38306138333033376162313664376233363539306333626533643638326532643364353839336630 -32663566613634366534383333633635393239643631633465623237396238316564396338336534 -35373930346339633334616434356335373938333735353737643162346432643134336132303133 -31343839363566373533306636653364303830333839663737663130353838313161303734303436 -65336565646639353533373763336637333165306236313934373630343238373162336662366139 -33383331613230396237613332633638656635613536623565633636643837623630303639343030 -62623837626139646333666666353031393131393034313664643064646632666266316265313665 -32343461666236373535633236373261656635366662303834616138386638643461306631316435 -62353366613262376266333764393939623636653164393330646463343733396364333239316234 -64636535383466326233336530323830313837383439626434353064663032306261323535646262 -38633232336436383362363061643434323133383530663431323463353239303135663966303964 -63646461326166323664383161633733396534316430633738396361633861346236346363646336 -30633431653831663139353565663834623062333732326562643636656332373634373634653336 -65636239636261313965373366393139343238623861646133393838303930323765393266326166 -33336132356461663933323437326131633966393864313261303861623033313962633332353332 -37383262333838633333363763306337613333663931663337343033636361376137313732366263 -32326465646161373735373430396433613635636638646237613439663532366231326137333866 -61643036333764313235323637396332653463356130623834373261333338393535653632313762 -39333764336162393136366531613261363637666663326665356633656231656466353864663131 -61623839623434343030663135383164626663343436353261363539633637646135396564316437 -64336261663436633738666332613361656661636238633238356239396432323631393939626531 -32333537343637663839396334343330353738393462373264656238353161383031306137663533 -35643961323137383531316536633937303965646534333935383461396362363361333063303761 -33313463633534396639316363646535313437666661303130613361333833303862636539646237 -32343338656366356133396465316433613563366438383239646265646132376631366633303936 -37653538613236663539373630353065313162316133653563623762393633663839346334303363 -66396238663637343164303130333237383936343765646134663730373763373362616339376432 -66393939386562656263656230343430363038313134656131326236363437623134366132633531 -33393261383439373637356335373663346230383339393936306564626465623935323939316463 -33363436383161333662383963626137336633336139613233386336313433626565373531663334 -61373736353133313464643234643164396139663862336133663639373465323834353064343035 -35373537326363663262653735366233383161343332393735303638303033613639316430383834 -66366238373032666339663837356464366430333137623038643633626436323635636639613864 -32383937373632336130626262323066323339623634366635313161343433306664363831373966 -34626437613133383065323364313237316462346139393339626334663038653337653062323233 -63393037393562396534326239653538353663343932666139643139376161376361383337386363 -35626132323238646266373962323530373631393632373265666664353239613665623235663731 -37663437626438653762386533323439356165386230306261323037666436636131613539316336 -65653531346231316565383161316261333663356333613636303064646231326631616565633066 -38646266353638626561323331316334643666373963653634326437373134616439363535383663 -32393866373863353365663335313230623462303238373337396430306362613635643239333934 -66643839663366353635363536336561353237666637393731306663623036626638396135383462 -32363963663337616339636264303032623762666336663063323031663339386162323031643264 -36313532656431383630656332356335376532376531356338323333383031323730666133623034 -36666536356330386262393237323661316266313739646561373065653962663562626138383037 -38363033333166363339336462313538643137623936636138623663663165333336306639343563 -33633062383461656231373731356538376339643833663564626263373137383032333435323530 -30663931366666363936353637373536323962356138336133366331653163666131353461303930 -35346432646438623238376162653666653836376632313531363831636463373230646432663566 -64656235366562373330363538386639663834626430323439356638363964666637643131633262 -31316538633336326334333236343539333137343230633737333733396130386563393634646631 -31663364376261613237306232303837396137363331663935613766353636643938376237376264 -30613335396133396363343234636635303464633130386631373838616164353561373866386261 -39333837353631386266623034356534383939356463306535616463326664663239323630623037 -32663436303661303563666461613033363861626538316461336365663031303935303536653961 -31633837333263663637393361316535336630386434623737333163396437623439313562353834 -61393733643834326565613333343564316436373034656635663866363961613537336236336361 -32373236613237323433343466633336646365333732303132343632303539366539623835656133 -61633162306238653039303330393863346461653266396233643831613064653732396131306434 -39363162663835343362356439626239306562333834303636306263396134363933326130363734 -30393330323133636438613333353864373834363064643862636533623363346339386234303932 -38356237333839343735613339313030363439653931316439323462313133616631623238653333 -64326433366231663230653634613838643838616661383232343930666662646530643433356139 -32646165313730396136326333386331643932333231356239303937393162316237616338393962 -34323939656234646137316166633365373163653031393235613032663237396238383938363864 -39373762353466323439313734666230393064316566323137666665393530616432376133383665 -34653732346536623665343033353061623462363836376361396133373435366335636332666334 -66356361393664323832666463666435663537376662643937333064373439336666346236373964 -65623162616537616435393764353766326636373666346337303639343537376162363961386130 -39616362616463346239363363373433633962666333656538353463343330313039336536353066 -63333064616232393930353565323361356136653962393233633338306231303861653036643833 -32623664343831373461383165616636616633373937343435396534343530393262636664636137 -32343165346261303964623533323661363439353035303466323263316234316335623762653832 -37323839326563616437653132303738626362353266306634323236623739353932643837646464 -62303435656237333361353839343864376361623731346235323639326136336633343134663963 -65386134363839333361376461303462393633613835613335653465646235623134616132653763 -64623161643262303065646436623462386233616466326162393236326635623734336264373733 -61393965373539366531323537373964393232653731666565353931613765643731613135633030 -66343435343936646539306533643139353035393937366437633164353139346435396637376466 -63613130333238326335623366633962363237646137363039353330393165633135313130646561 -30323333333561323331333663636334633536373234393064623038393338333138623338353065 -65356337633535623734656334613336613934333464303261376331333766316363353433326130 -37313563326533376432303134653736643763656463623932306430633537663735303663636137 -30623564386562343139313737633265386532356339636634333162363066626262363763303065 -61316662363130306661643731336538373466383237613366616363613438383432613464643030 -33323666373031353639306534386138396564613832666664643562313139316633373665393538 -66373732363135666465353630633766323734646561303766333835643337353163393630353136 -35636637666535656666303036643263333135636430636336336665386261326237396234626237 -35323434363561383130316230306337646636303834623666333839663861613533306634633138 -31646461303262343936376362633339373161653134666639613964643536366433333839663863 -36343030303464313634653531313239313266646661616635363463323865306462396362616661 -36666232366531633064656562303132393561326561613135636237303265663536623465333436 -30396264353564376634616134373437323338363531663837636333353334343135393531333862 -38313531313266653263376461626366303366613461363332353031323163386433343661653137 -30333366383631636335633362626539663833313661363161666466353830623339653132383235 -33646435313062386664666165333730643239323531336261613666313763663837643165316534 -31356437653130316436323730363531363031356266653464393132376434366236366564303731 -36663236316233666438623565376462316132336661373463333763633036646163623234373464 -31656431333332633365353636396134326536653438656436313637656363616464323538376263 -38626665346534363130396431656539363034613033633936663130326130656365666437626537 -39303532396431326262663863373236636466356666373763353263616334383462323364613165 -33383032373536383332366363333965613361396462346534373562376331373538643130326165 -34333135366337343430383163356635623861343637636664346331306539613237303162623963 -39393635363766346331333830363564396636636337623639373337626336383331326462646137 -39643139333261383236323539616564313939623332333439323062303834366438623565313832 -65626433653338343934353235306138643338386137613362333337653561336666366566636366 -30373439323163396338363636383666633836666564323630386364336435643866343833366462 -65383466393238376230363539323930353432396332653366396237323239336435326165353864 -37303031343666336531656332663665663362363461303634633033323063633032646638396136 -61383763303831396330333363383630663431616434643132333535313330383235666538366635 -36303265653334653338326230306331353765613664366130383337363430373334366364356134 -64613764323235666332333131333037303965323665363034316139353264363831393365353935 -33653134383433393834323239306233346162336565353330323264346633393333366638623930 -64303666373664623461656534393835366265303731363838393238656239663864633462333336 -30613033623530623134363461633864316439346535323866323462373636616262666233306537 -36313235626261656333343639376134343633346637633931656464373533613437373838343563 -33616638336237333231353334336634633464393135323861623439386332356162623634346464 -61663433646238663364303261323865373734646434643763363734313439333434336532643862 -62663565663135636234663566336264373633393464326563313838393831346230633935373938 -33633563326239633830323135346639663162303536633233323335373733646464626262626135 -34343935633030656165643037303832353761386134346465333838343033666465396332376330 -34353164386638653932313335313862363464333838316636353464666532366236393661353536 -64343130336464663766653839356364393635613232646331616264396136623736623535303861 -62346235663938386630613763666563343136333562366365613931636661616334383931346166 -33353766366439396132326639616533373965393862376161356132393333613866663634386633 -34383266383733356233396137343831323864653530366536373165653565616439376532346336 -36316535663766663732623833393163336363656539643338643939643262613861306539376463 -62323862326536663764663365303930313766343439663737353864326362353661333166333263 -32626366636335346232343133396136616239373730663036363436666465333738373339363466 -32323764336534633531393561623731313434323239663763313961333935316435343935663436 -63333661323331346433623366653266333233623863326437656564353531356333356564306430 -64383438643864653832336232366662336230393338333963303534396334393363326534303434 -38383038613833613132346132623237373739636262366531343061326234643964316166396231 -63306438333638363332386531633930376165646664353637303565373263313834323563613162 -34393464353534383839303038346332653465656334373866626566316334383563396439336537 -33373235653266343731636662313763313430653261356666643864633064363162 +38316334663330323133323630626333363862613963313232353138386235346365623932663932 +3034316530646639363837623132663064386363616130660a383162366463373038363936333237 +35373937356132306639646361376238353731333764393234383035626135653932323530356638 +3461323563613665610a623733613966366535363532336462346163623634346366666230643536 +30356536383631396531656130616135373264333136313330346235326430643433363831363661 +39393132623266626636316432333436643232383765316236623638333464326535636462333330 +66663038666530393434383663333930393238306638613464663762666464623337313564353232 +64383236616536353330626332663332636439316265366538633961316435666232393063616263 +37376238303536626433393363323235623933306532333533636263656134306530313832613862 +35353566383636626439653264363763636162623463656533376639303565333238313036356233 +36623530656264306164343835656330623265393134373834386163386563613036326235383934 +33386634626135303134346163373161356465656131333433626137313433626635656465613839 +64653935356164383632386563646365383535343532386262353839646562346332613335323036 +38386234663166323131636134653932616263616635396263336234373663666633616632353761 +61616465623338346264656461316235326666363665636538323035613038616338626133393836 +32636363636163333732636133326464646239613238373032346233616465613932666564393139 +31306332333638396239613331356132366164653535353765353865396538313234663337656335 +36663030613866323737363933613466393262613334666334343864383935383933663938363631 +36383733373437343765306533333935306535336331613830366431386639616233373733363135 +32656633306134643464383562346330663561623031636363316332356162303530666264336261 +30313164666562623437353131663736376161353461366464623361336263373434393663323565 +35306261646664343838633361316431303036666537336137626663336537373862396631316263 +66663737633930393736323736656435396162623665383564373036326530393964393663373637 +33373333393530646531303837383235643033343664633231356438653335663030363939643636 +61393433646665653938343664396434366162643531383632343565353431373938303732303966 +39343564306362303938373137393265653134346233623366663031653438623733663737346537 +62326361383332346430383966363532656238336365303765363463313031343430386161633365 +64336338373462663338663834643337653935323931366234643765383264343163303264393161 +38313331323664633237333962373431336361323131653931346334393632306365646165363537 +65643032383763356163666262376163663863656561333934666461313162353436646438346339 +33663839363166336235643863316538353565636134656236616564633434363632613061663964 +36303634326661363766373233346235636163373931313435373130323036306363313837303333 +39306235376436636333383661653831646266373339303863383737343363393965346563323036 +34653138383265336239343364363138666534393831656434313932656330376235393937663234 +31306632636535626235353231326661323266326537663563633866363566323938333166623136 +63323038323938653031666637353030373365383066346536616338323062306465616166323639 +31323633643464653935343535383238383435643963333965383635326239323532633563396537 +38356234353832613432663937376432356265666134343961333134313336663730313765313066 +30663330343064333436373632663730323930643539376466393332353536343366383565643232 +30353961353830326431343739626435633338393634303961336331636136366435646566323632 +30356266383433636137326432303862386236393330616636346238313935333833316535646232 +31326666376233613431396137653330306564303364663437623261343631366262616530323335 +38363731393435356165303562343562623166363933373562383038383030646436366135616366 +63623065373162366235336237383634343334656135393362626338303036386663646330363533 +33623566393130353933663034393333323838663036343336306134653535666163646132623635 +38623230313732313230653635386139626433353536323535613362303737356462336631613636 +63356638356139373336383365333764626666656337636336626430666638393838653762353033 +35336461383032353961376230393139363132393533626338333366353333376239303463333531 +34313937666262396661316163396462393266366635383563343333353865373362656362323663 +38663038643763303465356134663164396635333939663862666532623664366262646563636136 +36366665653464333536643762343036396131376336313932346366363036323761343161633263 +64616463323834353531353432383433663237373236353839346262393639356631396235653835 +33313030363431386430633866323666653938346163663534303038333565353030383163363463 +31333532306431336664343363373461326161663362663065326261356665616134336437633631 +39633664313534633438633665666332616237356463393333333464383565643035666230346263 +65623636356637333435343465313038373230346338323732613266666366343030333931333536 +66346131343937623039383430353338313862663734643964626661313533346334653837343562 +32633232323739356662386361666436383538346231393166373337663732383564656635303032 +33663764653836663038326138616536666561303333343231326564386234353135333061363161 +31643236323437316238346232303633666666366231306664616564396661613633383137393438 +33333464313935633062346137383561616566336135346538306634666333333431313633346136 +64373930626332663561633039356166326234656661373962383834386531343039363138366433 +34663136346262366138616561383333613031396364386462313130663933393634343162656431 +38646634316238323033633161656334336637646462353964383434623232366639333534396634 +62323834306639306333356363646137313139323534333865376636306535333264653431633730 +33623461643435366135323462363263343564373039333639323365643265353237366632626462 +30333037383331303930383835346564616265393337343662373138366132353335316661336132 +30373561653437326131656330313663386235363662336331326339653432613137626430373564 +36376334326435653265626430376334633833393836646666383266643530376439656131616332 +35646366303062663435353532353931633537656663356634313461396262663135313434633032 +65613338626462363839653064316538373464363237613438373738393962386539663838336565 +66666138653662313939613866386634373830323536626565383364616664363338373936336464 +37663462366439643433343030386231663239663233353533326564346461376534613863343265 +63663039313330653335656136303535313064656661373566623436616231323064623536646535 +34373034643466666664653032623634303863373235376239633264363830336563333039663066 +30643637663761333334343334363262393133343530333131663037303735336430356131313961 +61613630316538626133393339346433353864353632353163396330333064343337366235313861 +63313735653063616138376238393730653731386232396536626164313163373662626165623635 +31376535363930346133363064306461386139656665313730363330346266366638633765306530 +37373131383035326236326264393734383337376639663934356261633464343661373137613134 +34626539383963373661613037633137663861323963383564343465313430336336373935353937 +38393462326433623438363733393034613564646432396562666238363366633739646162633961 +39643732396337356534313938306638343834343235363232303334376562383637363162373265 +37323233363431643065383539653630323836306664376432346338316539303434353662663830 +39303839366634393465306439303839366263396662386330646532386164643565613965663438 +30663161383738333763633166636665323461626664356438616263316634346539653837643934 +33303063356334303266383937653930626236343230626465336631393332643934616330366535 +66663332316534613661303534616263383336353365656134353230653834326635373661623431 +35646261303166646637366533313234666537383432643632613830333630643231383335636335 +61393137383138356539333936383035313039633635646637336261303835653465316338666163 +36623532623038356661663239323230626463663930613166326431313566353565623638343264 +34306462303033616239386438366335303463393931343033336663656438313131653463383033 +30353533613763396337656433306132373466363365616331646133373336306639343730633163 +37356331313566333030383963363961346137353437346135623365373263323932323233326636 +65333566313134613630396431316266363330396235376230633366656363613330333064313432 +64636462616431363533353539393932643062316636616265366230653162653931333831376430 +63383666363837386330623230346136333737616238626132353631383934346633333766666262 +32636138383137306535393339346435623233313965633666653633336630646230656136386338 +34663936643738306335306430316366393136366439376664346238323236623561363838376233 +38383331643832383163656365323863333533666461323032396238306461323139663331626332 +39653665373035383861653662383534383764363735333635383633313965646335626362363966 +65323564373566333263396636316662663534336131383332636466393133666562346433333936 +61343833666337396435353933646230663239653332623337623966643636663134313563386665 +36663231393131356431323437343536613065656464303564386433366231623866393839346463 +36353631396137346237623036376436353630393964393834663238626163633338373237663961 +33613235363163373835643363363463336537623939353435643265343032346663613239303638 +61343335643266663437646332643363383963613964326437636136303062333938343738333265 +36653465643636303238323963666435613532633635373231633935663133633162396635303562 +64666166353839633464616535373038393337646231383963323037613565306635346339633363 +33656432396364323530616132313164323536393363386139386533353635656639313862636664 +31386539666632636663363766316431376639326461636535323063383533323535333438333738 +65663635383763373430373836393765663035366438303562663765343535663535336538613230 +65333431643338313931643235386539313331663435666436663337636637623863636533313239 +32646531356432643561326535303165633165393435373163646539663031373235373963353238 +37323730633731323764653835303332306662633832626664303833626134663030336366316232 +61333531636263633934343661316166376464396639326232653361623666306461653430346630 +33333436663061636430636531633564393430393265333464333034633936363632613034343035 +39653537303461306436316564363264623136346564316134386264306636373831326566616535 +39313731396536643735666262636263623362323038383638323136663234303536623864366333 +34373534303664356536393237343565303935356561633461363461626634306432323862336561 +61396532366565353761343761346234336536333536316136383533636264326562636264333765 +31333265623066376664353864626236323935636562313632316232633963333264353834636339 +38363130653537666237353534626535363037323766633939623765313536323666323961326137 +66336565393634303338323166303033663430356666626562366238346632383139663562663137 +33356139386539336361616333636161386134666636666637653336366466623632643733346166 +34663161633762353832336563386531366661323734613132336565396635616264393731363437 +37366538626564356639663734636433343730396535313665623964653232643036353537386238 +32666164626465363466626333393534373566643535333737313032343133343931383162383837 +66393061333061336266616537373335356333306330396634636231376463613131643234313138 +66316663656236656462336265393836343732373537363736316332393333653265656166386336 +63646634303165353639313532326635616433356436636637633736663165333363313635323566 +65363838303763326163316137643065383736383938653261633834316362333830356237633966 +38626362303030666235326333333236646630303765306235306636363566383338636236316531 +66363930643735383661383136383062626661663534663834366439353535643863303734306633 +32383563366237316663636334663263356565343162353030643632333139316262306636636665 +63633330333636636465333264346332633563666634373636613661313134313034663835346132 +32323836643162656335656531353761363661626164643563653030313565353963316232326530 +64363739373930306461316633646636313630396635393166363732616336363536633364306463 +35323432356463636332643837646165636434663332393631333635663761303833643130396165 +64363965326339343339366538653565316637643234383933373635336136336131343461356335 +63373537303062303462623037656335323261333661343339663462636265623535303862626362 +31626431633538343337643632366464323135373065643833613732656631353865646536353334 +61316435623331313036643936363037386263366562653961323461383561366238636238663536 +32383264383165373162376361373163343635623138623764343862333530346664373138643931 +37376562383535653431666337373431663239316330336230333333303632613139376666303237 +63663133383739626661363537336238633436366639306331623037373632393761343932626535 +36646133626434386161353866663938313262383835303038363737366239303231623938343237 +62616335313066376163356661353932653032613237316637643039643462373836323263353961 +65383239363237653230346431343834663364633130343464373133363035313361393732303539 +64633031643737656236663838633330616233663233313033623965303031353166643365663565 +35336339653161653535393339633638653538626365363131316565306366666263323838366365 +64393231336461363835643337633464346333613864326130376234323932656638623563383437 +61376566643730303237343036313138303332633565353934336539373732386263303037343937 +61316663346239366532366461303735656336333661366265656132306538636433376366346331 +65626631303964643465633035653232623532393536653064383465666662373265373935333738 +61643037313764326134366238636663646562616436653132343433316533636331373832633561 +39643266633464653333346662633436356539373363333035393334663532626139663731353361 +31633031623732626261363633326234353836313864613164353165313461316338643239333531 +63613232383133646631393937353637643462333530323862343135316332306134323833323234 +66333462623137353738636239383031653339373561303864306637323863373638333734313264 +66663765373738386533313065633133376336343766306231333935386137646532626233326236 +34303233626638663531643463346261306364333533656634346135623737616365623062323366 +36316534333636616130393939633831393437343766613761393639626639666134353564646235 +61373934393339643664373561323561613439376535626533616435313662643665373164316330 +63363631376430393038313665633266323935376464313333353739343938376564383431613331 +30656436333466333037646565363261656533353261373565386561623532643961326264356337 +30366638646664333066666439643236633135313038386362333932383763643032306139636638 +36356464653466623637623439626535616461633538663765363838393135663733636630373435 +62373661346363616536353933616238383663363166386133343865643833396636666232363263 +38643966376137316239643761336663633364343337396339316162373131613939613563363939 +30316331363434346561303439326231306566333831316435373937653062346462643438663562 +34313235346432663638346131323139333036346438626364303830663661333939323531653934 +38323534303464313164323333373738316131666535366666353565306235653937303935623966 +32356334653465663365373764323338653966623337393039646536613939316634313334653532 +37303038363861626639363634613935353237386337333832336537346164623233356362393766 +64353838373332383334303836303438333162653632656134396230303831653634346337363733 +33363964306236623761333536633533323931353437393532613238326237373335336433656264 +33636633316330363135373164643639313135353039633637623433366538316535626563353733 +34373938343134383430323931346363386137613663346630393562323733646662363762626566 +64383162666337356161353430613836326465646335656132303434333631613330383130356638 +31613165306633343566366632636363383866653861656362613964393065336361666362666535 +65666538666165363336373737313565303636636132313465353434306166323066613932393631 +66623736356264393437373631376366353430303839386630623239333361656636333437373939 +36373136343337376564386633633065303261636332376130386262326535633430613038643538 +31376339366336353234393336623130373830363366366331366435383864353164336565373863 +33396238353462653962326666323762333764326638633535353930633133363866376536636366 +65326361656464356138633663343464313332336465386135666466623462393833666161666638 +32346561656332623731396637336561646438666262326164363832373336656636373163383339 +63386264623138376166613665613264343434343133363734636161663038383531386332633864 +39653063653232373862656365333139383066373732396462623033383034646133333562616430 +34373865376333656335626337313261363039353031333365663837613237646266663935326532 +62333166643966643238616236393638643962623263653133633630303866623864643832356365 +39653233366534353664636461373964363836633530323839326165356636646531373764383666 +65366638343363366463353131653531346535303233356135346336386234643435333536663366 +34363033666130353737366234646337643730643835326563616563303430616434663062333831 +39373830656165666533393263353866306332396337336162656238633266313463613761373663 +66373666643834626436623233386232393030366438383866663863333234303430653262393966 +64616339623337343337633436303639366564326239613364626665393364313734626566343263 +35366436326263356562386331336131646233633533336432623137356237313731376537386535 +32633936646439643163343439343831656465653564613237313431323563373763353831386165 +36656161656232323763326338373939363530383934306634336363323139343031626536306134 +33666464353465343662653032633261383530323438626162373432323435376134623463636233 +31636431313439333333373662663236666362326462666136383930303930373138386339303731 +66313932366139623233316232366233346264353965333265383033356164343330373662353739 +65626631303261366666623530333337336435333738366664323964636365313635626530653030 +35613565366336313032653835653037303039643563306566393962343433326234613530383936 +38663832646434316561393962646365663935633334383739636534353330393563383562323134 +61353038613035663731336538303432353737336166313361393635303561383333386632343466 +32376363653135373633653363343333613463333164383661303463636266303132643765393131 +38356561383265306430396635643832623133373338363439363639643864646633396466323662 +66653635386264663136633964333763353562376235303063633331313232333732383366633337 +61373731343530633964306135643766303361383061386439306335616664323536626130633533 +34663433363433316338623163303737373063323061323865653235386638626166393931663064 +65383431363935656632303637306535616161636565366165663966386232666164346162373065 +39353232373335386466336538383335353034353764303738316537306631646537313233386130 +30643938353338666230323336386161373534383136646531323731643033356366623933636439 +31343564613134306162333263366534313431366531626265353535633836363838383331373637 +38613236336438326134643837303338326430643230376466663962636264663036346136316434 +63313162663430663834623366653461313038383831373637386264386665303930343636623537 +37633637346236363038343664353066333239353566313763653562336539643735376130386362 +36613939333931383235303833643034383939316331376137396638303261646235366536353535 +32343938643433343164626564386231386238356135373730383963353337353166653038626535 +37346331346536666436333863383861663765313862643832633064323730383334353239653330 +32383130663366663239656231356463623263363439623637613033313030313334333464343834 +64623062636562343136356130626564343734323231393539363864343662383937383735343537 +38643863396564623339623362326333346362396335383830633964613364376361633132343936 +33633362333564383362333834626238326131663137343030333132643762323639373931313430 +37383166383561363730313439363938383662316661636533663039333139356439343339343638 +31646239613565353666313034383061336231316163323863643232356662393763646534323566 +35366134656536366230373433313634313966613034366665663131356461613331643538633534 +36363536666364623633653062336638663935653766336636376539376232313365613931313537 +30323565363133393661326332376530666531386635306432623164366133613961666661346661 +64303363393831336135333933333937356335363532643138373464623862303063313736346464 +38613466326430643663396230363432376235343930396233316232633435643137653633386230 +36313233633738386338323065376566666235643266656465326532386461323061613037353037 +30633535396463366132383832353832376133646335323836333633373737323664643136383837 +31623934386235643963363939353632363663643165366331636533336262373735613261643637 +63363961313664356133393236616636326261313866643461643833346365613163646330626664 +37356234393864393066386162653433323831383761643865346363343830336331633330333431 +30366337393163326263653163633038613135646535343566643131613632653535323066396262 +61396336353534613766666164316664356132303763343863373863313636343637303136653232 +66633631313339353766346230323061386133636230333361643338333337386434346232656261 +39393261616235313862326335663136313661643464336264323530323232323138636166646233 +32333565343861653163643432646665396533353532636432623561396636643638343839353539 +33313564623762323239393565316164653962336234363263653564323032306636323739363636 +38363730326530353261376130366135643266636466363739376230633063626562383462363561 +36633134353838666535383265386336623466313337653431383435356439366661363564323966 +65353832663361393763633962323337366462643339343135363736643132386433613238613764 +66346265643834376533643066326234366233343036333237383631613365353831396337656431 +33376163383335363064363631373737643264356436633237616663333864646462623638356536 +33336465636133656634656366356166326134383434313362353163306333343763626535353665 +39343336313930303664343433356439323539376466326232323837356432636664623630333765 +65343335336161616161626164633065333633363065343537643635343964663163653336313937 +35383535313231383063653464366465396430303132326637643963363365626435393865633833 +62343065623938636536613435386330356666623839623331653930383436373038323333363464 +32626430316161373662313530313462613461653435626463613164313331383231313339353237 +65343763643337363036366463353230313936343463643139303366386164313462366265336462 +33363461643862626465316439363431346536613461396534613235393330366137393434383062 +39333739363164383131626238656535373638646261613430653033653431636263333830633366 +37313438363935343333313635326162333935313836303861656532663038306231656262366436 +37383461323530366636643933363539666136346335663766363465613533656436626563343031 +62613037306363353738656666333461326165666664393330613562653932373832633533613630 +32666361616638346637656135333163303430653630393734373562636331393236306363326336 +38663433653064356434623133376537363166643631663335323934626532323535333366373061 +62646237656665613535633466306430363163316631396561383136353232323639353333633035 +61366130653662656263396165363832336331356165653036333234383762363461653837373665 +32343465623662636332613165623838623732633761333266363332353237306239363465386634 +65623231366533383533653137663965613339626237313531653836303731376663313162653037 +61356334303362353930613132643136373864636362346463633530663464303231313335336335 +33643232363565336662623663633834653731656161633237343165313236313537643836313366 +38303464653564643036393232346237333766646338353830353537616436613336373731653530 +62313532363262376139646135323132646263646266623066323232653533363139623966376237 +36356664316361393635396339316230666666383339656530323364316137666534333231626133 +31356231643461326633316166636130316539303964656438383863383735633134326131613232 +36336261616363353331373061326562306237653034303466346638393066663438323664346561 +37663734653234626431623437366162333331383937366433356537313634616235306666323832 +39633362303531326237613730633934663935336365643631343762383631386564373738633538 +63646537613938626234323035343838373632636331316432336135373535636438633361346536 +39396464376232313465373666326338313062643065623133626439316336636338366137633639 +37373536333736643333633937376164393936323662626461623238613137663336616331363033 +65376135353733333738363932303831393832333437393634313238343739313563663637356464 +36313930373333356138353237303931643463633832363462383237393431386162613666343933 +63306564656534653765613034643561383239336238323064343530623361303030356366363666 +31313430313331343561363738616632643233343665363838333164663530666161633536633839 +37356166313862376433383561353739323261636164363834333964373632646335333839623965 +65633461633838383236373763646565316630623239663438666433303762303336303636363033 +38383730343936396534326266336635326138646366643738343333313939323332663638303432 +32643734343333663065623034323766353362383630666236633633323134653631363765353362 +35373534353838346137626337616230663834353231353962373337323137383466336262666236 +37383531383033363734323539306330623762333765636161386561336436643330336634393434 +63666436616335393366353339646665353537613732633361373434623938306462353535356465 +39656163646365633539336362343835303561313638336438386439363961303030383833633464 +36373164353238333332386336396232316533653337343534626230303264316437323836326365 +63663232623338366436303036386539326235373461353139356462666139643032313830383237 +30633761346363613065343731643065383231376436333330616666653963326565626464623630 +66613836353439366531386635346435313634663862613464653735316437656231616237653230 +31303733346162623764666635386336343166393739353064323662373937386631653033303939 +62323533373639383539346538363032346531306162613863316663303533663435333432616430 +36666239666337386136343962643434633430663030663136306431623633356563316538336130 +63343138643835366433326333666663653738616265636230353630303730633561353363663734 +34393535623663616530656665393635633638656133353838626530363636656438326232383736 +32646537303463313334626538356265646233383835303166646331663533396365613565613665 +32336261616430353530626138616165653830343639306438363762393431643732646666663535 +32333762353730383530316665356330346565663664363636396634663332343663613362363939 +65643239653861386561393331356433653031663531323433313938326531636166643138353334 +38363665326333303161383862633330333237333336333336616133343664366463626638376661 +36643433626131323237346231326532333133323137353464613563643364616561613639626433 +66336463323236393330626466346564366335643232626638623938633338363833613935303265 +32346332333639313435646134373236656132303961383963306438343763646130333761616136 +61353464616331386537363462623538663431656132376138643063353363336364346665306539 +36356130393537633638306366666238303337363333663237343664363766643364326333366437 +32313663393138373037633039343838656331633232356530356230346361383538616539313035 +61653638323435653237636666393364323161363864323132363837613766316639313632313132 +38623066346131383735643263626366336464303835336665633137373331653964353337333363 +30303331333463623563376238313963343431633737353134386464353234353934333830306533 +63313265323638656234353230336139346632363336316234656235613562386335303036653039 +31323139316435643430616662313564356630646664316437313564343039343738326163613661 +65633339383230366166663635383431626632613035353135316236373738353437613837656663 +39646236346638643033643063316330636432643631393035303839303534376365643033346330 +38616632363165303635326339646266303237326461616631656265393535623937363261343039 +32323435666162623865313234343961363362393764393733336266646233616234343463623131 +62316565333639306163643831643937366236666361343734383331303865393562376636346639 +33353631623563346237663830653236646665633838656536313464646236616334343438396133 +62303063303731626431623936383462346432643637643337666332616161653430386539393566 +34393462653266636233396137646463643764656135336430393831613132343134366431333065 +62353034653938343432393934336630653935376662663431326538386433303562366366303866 +63396564316663656666356264326231353864343966353663343538326132316364663831346461 +64653764323865323734653339326163626465623937663663666631616465323432393234393030 +31383265303630326536333031386330346563336665366235623032343566343332653730646162 +38353334333462353434383436393961396332636439356337306238373637643463376633343031 +66303439323938333739336332353139363462653231323538366535666337366466323239623939 +30636539646232366261613564353066303062353164663561393639356535616536386665376561 +31626633386361633631393338313466633364643239386436353430393661623434356662353033 +37656166613836346266623530313239386337666135356466346333613666346631336434633866 +32313834306431363432393863393832623266616331366463656130316237343839356532393039 +65386336656266343663666637356464613639666439306338353634313432333137386235643766 +32656137663935623932333330336531376565643236393165623039616133643861613138623466 +30383238633661353862336236646163343162353264633130656339303166396630643531306339 +34363737636436623636653734386137643939323139636538316538633235313030353863303037 +63666435306661363162613862643133323133643235343066626134636132326534643065633531 +62343962656631313639326439666333363566363535323561383264366631613435313563383033 +63336334393361313637383861303236363934636137616135333639316662353264323663363035 +32366536656235633833323266373763323430613732303061353762303666343264356335656165 +30346632306134326336646362343835646238633833653866323661353236306638303333353337 +31653166653439333864666566643936323135626365303231623931356333326438323630373430 +62373537653561613935313933353831343763613431373838656432646639376263643665636666 +39383938663035633238333536653065363936393533343761353165666634343333343165396636 +61326531323532623330333465386336336362306563636461633561316131643939303662393938 +38343533383861343166636532323762333932636534373762303235313035643537653763313064 +64633739353265326162373065626164343934626434636566646566613831363163356532623863 +32326335666236376236623939323037323362643563633037656534326133356230363033653534 +34303930373330636231363363663162386632366165363461393833373462303230613662666536 +37316261643031313934343465343465393835346231343366393830653737636134643166363635 +37646333333234366431343265376237343732386237323939333961306661643238396461623337 +35383365306634333838306662633735356437333464356662303138386662653533353936633839 +32656539306434343739626132353633336639653866313165643537643965383337363832353566 +36383939646463663435663361313432316539376161663263373363656638313331343466626339 +37323265326238363164326439333131656461376138633262323137306465333066623033663462 +34356533653633323836383561386331323131386639303539343431376138653264623638386639 +65353939336234623137343734306536313139353430363566633236376334613761643237653230 +38643835373032353530316633626531343163356463393939643935373433313035333532616365 +35626535636338636338666564643834333931323134323565303464633333633039333635653565 +39636235343230346565336364306665336538323833353634346532346631303737613663653763 +31376238343865653261613832366137343061653162616362336239623837313939623935303332 +66643961303434643762613530373863636234343238346533343437386532626536626438353132 +38396533643738343134646532343037363961613134356363613233386138383130653665313765 +63643134303536626535656335303933396433346535383165613830613035646136346661333732 +62633235653332623832396639643662343166646164663735333963643730643636353866633363 +36333062363437623265393734323565303734376564343635376333616134313535393266323331 +31313031626462666566623166393436376131666435343234373865376265626234376363306363 +35336132343435633532636638373734386561336536333166623934646637663931663235313763 +64613037623834373034613965313963333962346631363064616262373036363462656433306665 +36626634623562653365353261313966663631333830303536666232393062643130663266356363 +62393139353465326635626139373466353832316637323865393434663762303337393735316334 +30353332373663363262336565336238623965376362316135303039633038626662653764666631 +61303861343765303763666561323933333362636631346232663064363163313865636437313138 +31633164333337336564633233313430333362663838396637373662383862616134366466366637 +34333031643963353332306530643661333730343332613564346666666335613063643964396539 +64356666646362343563653839356231326464663765316338373266353264313036333336333434 +37396439643533633533656262663961373362343837373735643363643530303336636333316266 +64373330356439303133373162393531303263393566343764333163373166646165363362353835 +30363964346264366137333330323232386265376439303036323739386330666366346264646539 +34653430643934623865633736616166653066396332663366333961343335613765316561653135 +65613830613032356331613665623639643632393138393437666132343235336662393863363737 +34663435363837353637336237373238646535323433363565623063366637616233663135353439 +63626263346365643333383730373862633539333666623339656638316436393234633039636163 +34643465373639346636653864356637306163343331303136383565643836383732626333396466 +32636332303631336530656435353632386336653632383063646265313937633936623132623235 +35643961633335623537323265646361343563333837326539343136366238336465353739633934 +30306235313733633437363763613565363330636163666134383533383133316537643736386361 +34373036653135303665333365653063616335343730666535363130303433613566353235343462 +31356132356261653139653965336165376631626332626131626462643563303464626339333035 +36326436333539333737356366663865636165396165323764383335623131326633636364623834 +61363064396562633566323662303761343131636135326531613965303633623933636264663061 +34393937356239653034383665316435303337616165366264356662343462376239623535333430 +66623031383631396536306530656465393735636163613632656265316139373239393633323534 +38356237666563343030326234303966373430636265663231643831383536326630353061613266 +32393730333662303065616332623230306534333463346462326637623364643934306537633036 +38633736663966656261353665653639353137303065316561363236373562363064313665646437 +35316266623239656636346634353463326466323538393033633733353066636566616563383466 +32313663613264643738353030326563376531303830306366303234383837316234616465383264 +32626165376339373730653930353265633563643366366330326438373437353939656339643738 +33313238623262363062643633616239353032653963653561643062636165353939643837646265 +38376436373836326438643165366666663263366238663765356536353966343664363365613938 +66303539633461396332336137616266353236326134393731363661376137306364663136323035 +39303661316365663136373733306635396238636565623230616235313533306464343532663735 +64353366316434616631303833643830643437313065373830313131386235363234373531303934 +30373165393265356236663432303164363432313163313666616138366236343737613438346432 +31333362653035613166306461663333373338333338353131396233333365666666343363333234 +32373032663332336366366135353232306261646264333030666433363661306166373664373762 +32623134363562363532623062653938663236666534333536336638613736663939326365363363 +63626366636337303233333430623934336331613163653163646365663331346234366135653739 +36313561376231356236336333356135396435646662303861306662623637613637646261373335 +32323436303231386363376639373830653465353035376465353433396634393333353663623164 +33343239383230326630353938663938303437363766353730623035306632383532336431323766 +32643936663937363066346437613832636464333366666537346635353733326362313631376234 +34316561376161363435383830313936613931353734633834333664306330303439613339643566 +32346561623530313931333162613535383561393164316262386430333936353364393562623538 +39336265643734346432633938346233343463643266633861316535333866303331353232343034 +39636562323633653931623031383565633062363762393333313262336430623736633066363362 +61663861613137323333393834626539646561633064303331626464653965323431356663303862 +36663963363661663265373332363333393737323938373138653536623833303464336137386361 +62626265326664643039336562316534346264303537623037343432666633396633366666346562 +65356166643032646562373335366539623130333235623436333338383366303237633465326566 +66613464393332303732396532623533653665336662333532393163303933336335623337653833 +35386662353032623537343361613135623838323033353964363835353763363639623734306133 +30386636343732646438326433313731613836306665383663303731393664373861343532343534 +37376164666538353863363766383330303861306531336339653761333363303566373432663131 +66646364383531616564613062613936376134383738393234353561373634643563663732376663 +65636335343630393166353339353330373464393935636464633433613834323836363865633532 +39313061323635623536646337646536356432653236383632346561343330306431333032346530 +36636134326334633039663861363937396336616364623461656164633466336563353937323061 +64356237376163643232303864363935393964356339613031376464393566613830643061373038 +64303830343437326464343766366361343634313837663231363666346264653035316332653461 +37346439316663616238646363346239393537616363613363666433313735313330623938633766 +62353934646366386134623464633565633535383363613138343861643364623766373038666566 +37643339316135613034373735346231666230333734666437323066616465613266376564363561 +31663931326636633739303131333236313265663639666362393566626364363039653230303333 +64653765376136623761323564393934623339623633356636333864633331643437626631613764 +35663937613135333433313238363464323437393532356566653837306536303334343936333364 +62363332303431386231376263636332626363346663633966653930373135653233643533383030 +31653836316332336363393161323432373866623930613465643162373838616134386164666530 +35333666376138346332363366353930313061386162613362663364393630626430653631636537 +66663234626534633831323639653061376431326533643064303839376435613635383039303761 +66333335663066623465383333666430386533646136646134653239306261306238303534653064 +66613232386461323538323734393566383138353864396565303335366561306631623437383933 +63393866643561643131663035363339653638643433323832323733346132323865346364346562 +39653962323132363938376534656334663131313531663639656138306661613738643738323637 +66636337336365656638393034633735623564366332633733393065663764393137353539363731 +35663230366663343939623532376133353535303861626435666566663130663937393436316364 +66666633353932643331666361393265313237653836626165323466383239333061356436346432 +33316463643132303166343063313136646537396238313836366135343236633232353932353933 +66363737393835386239616562383066303665666334303439663133643666373138643964356133 +39396561373164303161356432393633303064356563623533663633303164313939623438643465 +65643334303636306430666666663733353335333138306335643830316165663765663535313431 +34316463313930336437346564643463346231343934306332623466613532326661626162383964 +32613562336630366564373935623164626265333834633334366239653163646531346536353834 +61343737343638393866306639633537333138376566643233653033333363613738623930346565 +61333563373062386662663864623236643263336239306361643338626166303563646436626163 +35653732633237366531323737633366646137363639366131343437373338613635653435346238 +35353362646565636664663461376663303765373030376464303362656333303731653037636163 +37366331373235393264376164653966643061386361626664343934396433613966363837656665 +32333261393531386262363531366531323262656537333638333434363364373364313831366161 +35356331346332306263353266333466623339356237616637653935643464633662326261343430 +34643463613537613735316265316562306135623436303361663064353439306339656237373633 +65396532363939303464366439383863393533393434303037626363363437343966666339326330 +64343061656165653563656635343534393633353234333962613238393039363333666166616231 +36663265343639363532366239353333313336343666663736626133646230373731383038323232 +33336661363133623236346533623061353635386232626564353434303339393933613263373664 +63656333363433363163633338363635323634646361343939353235323832356439616466396633 +31343935613833353364613736393332343832303665306165346536653263666164356561396663 +39386563386665363765623539373939336161383763363539353238376231376263323065643137 +64333738363335363930356661653466663437656233323234323333656666373830343034366162 +61363263643930636430656266393538336631646665646231623939663638343065653165643539 +63393039646661643633343733623965393430656537646264353864393433636365386563633434 +33613730306230613931323837653635353962373063616139613939643339353438343831383261 +64346464386466333765353436656662373832373439613764623661653339383063343030306161 +62383566636166343665393562383835393561323335333235636563623234343036343762376631 +66333030646235386430303531623334633835633962333533313132306634376131663761656436 +30633232346138323930373930306664363865623663353238666266663334376139623232343331 +34616462393536663438383832346239333062396530303066633839323431336163636163326539 +64383534333063373966366535343761633339363964346532393239343963363638646565393964 +37383131653936633261633633343137623964356538373166366333356238333336346562393531 +65366538363036666537383134303862306532653666376134343764386234303937613234633835 +34636663363230306166613831333061303038353634373764323565646632663630303865353832 +63393537353335393463616534373137383766626536303262336532306161396432303961316366 +33333661643030623030376132343230343563393965393436393930363234623035393332376231 +35303464353231363238653632316162643430396664633661653335643730343162343931316162 +64366666623035613936326131366265353334333461646465326162326366656538333736656437 +33663038326138303039366334636562333064373033346233663133663837313265306464386661 +39613962396632366665366638313462643263633765623135376234633036643163666334353637 +36613837643839663465333263633534343064396635306436353965396237653663303336656634 +30376639373564396431636563653835393333366139336461393966343931306133616565663264 +62663939353239353536666335303564393039326135353265353138663638663663333664386135 +38303766313466363163383831363163643234636234663436653162366639306636633338366262 +36316262363264393862313733633630653836313866653862653764643666383136646364303833 +61346536643566643037363764343137616662343562343566313836653737313238303865396562 +63366430346236386638306337656262663532356333623735396332303465323662613862656438 +33623439343136623137646632323661323366623434313862633962396263373131643363303963 +35633862663266306437626365313432303236353533616637623631623936336638333132656236 +34363561366563303263306131376164636232393461323736373830363933333364636530336139 +36396438363964343161313536316462363031643431303166346434306566346137336338383162 +37656464346132346335343162366536663134393266666230373161613838303764363862613334 +37656536653238653430646561663032326461396631643765613735663034326566363036333639 +38656232613232326666656535613762333130366464633865306161633638633264363839343265 +62346635613636393630663535623535613938643237303965643465663732653034383637346239 +61313830633964613265633837656534353336636434343931623036653166343561653333616435 +62336464323862376138656235336135643933643135323334316136306262333035646265663331 +35356238666465313966333238663234353231386466303434383636333035396532316365633733 +36323066373737323661323064643663303331343064343139666237356462333935613434346439 +38646235343030376666326364363462366537666662336537636565313465323430333530313037 +36643132306362626163346262613064653563356431626136643966306434323137363663316431 +36313033343961643230366163313035363034663534656336626230363537346534356236306265 +66303061366232346665656234366436613938663765383133363230643434383438343865636661 +61366463383565346639653431613032363161613636393266646238643665373435363535636438 +38343531653465653436633030663238313663366536393663356230393066376335363131623131 +65356263616434363839653334663434653064643839323934633839383866336363326435393964 +65646434373234626335663962383361326230316336363332386632663131396562353035323537 +37383734323338373262303534336366366436393031303561306434376137653636633835313231 +63623366643039316636663065393938616236623033636233303733663663353265643864333134 +66656531383961666361666166663535616630356234623533663763633364623462663065356162 +39326264666432613266316266633464306333626365336139376639656136653864313731376661 +66343930313561616632656139333235303639383534346565653235373433613131623366333462 +37353830343236633036386566343831636430636434363534303835653266373132306664613731 +66346338383231633866313332333331643737616264313934303333653839363537363164336234 +39353163303737643864386262663237633033383162366532646537623561633134653936313631 +33346536366233303837366636643563313636376264353739363465656134623639646137613637 +61633466643339613261383230613863633037346336353963663230646661313533303138633562 +66326362366564313632313033383431663734323238623364613830623936393164633733343161 +61303430393938353761353236343538656135643935313634613632333062323733633032383062 +35383039333631653466623333646264353665653435626535393239393065316138326635303965 +39616265613833613833383535373030303631366239633361393832313139336333656566643461 +65333336346565383332383264353637333262626430346439396539373061333366326632303435 +66303230623963316136663938653039633537306161343431383162643563376631353766386234 +61626661613835623962623164646239383738303432616530336164383239333432353362653830 +62363262613131613063333034386139323766633065383033363431336566383839393366633538 +63303534663766666333656534646132396537396365386566326464303036356563333066356230 +64393164613766383237303238643031656437303638653930613164393031616162366564303931 +37643866323930653635303966396462306663356138306638333362636430303166333136346262 +63306161643165373737616234663636353436393135336536383630646462373134386632343832 +65343464653932383661646234303563376666633434623232373264653261376563393036396133 +63656561653334623030636465663864653132646130343562353938356266353436663737363238 +33383764303239663465646231353364346632383135303331653138383835303461333036303234 +33386137383762326664623763666235346133396534613031666433663932646165656362663466 +30633935343234623163333332383731316232363461353532373730316561343832333031663239 +32333037363137663261636330623634343533663065373663333665336436613361373238376666 +37303238636433333431623338326634363063643962356336326237313266616437623834653937 +31336662313063316134333338643362333164326135383432623133393433666639376465323763 +62653766623431323663393430623337393830626530386238326338623931666361646532666137 +64356336363438346337386535313839306462333866323332386531616134376336613632656365 +65616662346635326539396630343061633836393461323266656664636162656533666639613232 +35336430303866326666313135393735393531333765363031313962343237666263616332653363 +33613233346532353262396232383038643238383034646131326535366133666534313064393838 +66316132356432336161663066393335333633633966303233383734396135666334656437386264 +39666232626461633636303366323762303563366366313831623066623963646338393163393638 +32333534623461613632646362663761616263663231306135373934303761653664343130646130 +32363762336261383532666432376265643039663434313431303531653130396235373665353964 +63396339393162323762643462323539356163656630386633306234356463346436616634613965 +31383837393139633633383663653739313365623764393364303538636536333762363231323834 +63373162393032303834316365346634323961333634356638303438353665303766656439303866 +64363663303835616562626662386165636466393433396331663436393161626134303539666435 +38363865636266336533316164653736633036346534303736643139663831356638623638366435 +61646166343033336130663738623037353962393731363332646539616463346630323863663337 +32326139636364303439653831636637303939343861636632353763666561346636336433643231 +33303262663636663830363465633731626466313135333033313461343634333333666332336133 +62353364313434333661656166656266616234613138616431316139313961326238383261623363 +37366465326636336339396665303435626535646633333838636164396265633733323965343561 +34653130323335343930356334363332393862306530653130366263303530666138316334653731 +37353830616530343231643334366333613333393261393662313362663561346238633538383736 +30313439616263353133316433653862646461613932666330613235386536303834363161663331 +32306135373065336636646664373765646366643432656565656335633532333335346337316638 +38616633633364653363633665626364393365636161666166303438356135336438643930316239 +64616664623339663065396435646135633238376332653363316265616536303634353534643963 +66303730353231376263303939306430303238616530333165343236366365323730353736313733 +63336532366632333165346364636233356231306466333339663962323333303132323335373162 +32653162386561623762636131623832613862653237656638643733626335653862356235613632 +38363162346562636337346634623864376561313364663430346561313733383638376236613539 +34373934333838616139326131626365323461383030653733316662363037373565353363303131 +33653638393937303032346135306639346539333336646265656461356630616134643733313030 +31666439333830333131393565643431663133653436633337306637343938383863333032633561 +39353539643738303037323132653336643935393639626631623566643434623130396134626530 +34386465363435303736356632333138326231333162346636633331663931613230393764336334 +35646466376231623339353435656630363330303161633031343331383132346566393435656238 +34663533303233353530663566363361643639613364373134646262346133373964656639636265 +65363062653763316232326464616638663362643965626137653561613161306530613536633234 +63313537333339353262326134303035663035393964303566333365363436356236323938313763 +31373938643731643862383737393962663031343862356463376437366638633930313534383661 +33626565393930653431303462666538643036366137366664396563636264343935316138656565 +65666465333633623965393937613234633665613433633231613030616265366334333661646333 +33633534643738393733666139613630396466643539636461653662353538656234393566333064 +62303430373734633236653139316265616439353034393263626438353263303766333330343035 +31353263346137363864393334656638333831333932633066363132336532633661663237363537 +30316236613261633733313361393937313234626163316638363939383335633133373639653762 +63363934613736633961346564636133393733306335346535663636353038646233663962313761 +32643038396362343735303331646663306432383539306364313635313538343766646365363862 +34303935353433313533383063383164663362323733333561303437373936376161316166663338 +37393730393563626463383263666538353235376430636534373266386562623733666532356666 +33393435393534613636333636366463613366663932336566386335353361356231373236386636 +31366134336533633561336164666638326161353438623438623239316163316663303663313266 +34333764336636313131626531643435376533303361616239323934626133356431663965303033 +31656565303538663561363931376436666466363332333966316430613433346365633533633734 +66343364613136653637383735623339346436343034326139326438666239306364376137393634 +61356465663661373632333365306338653538343537343161376136656465613634663534623361 +61343732613939646130323161623964613736393665386665353066343438336339656265646438 +37663832633231666231616531303435376132343764323536623437633863353462663633353362 +30353734613336346634616266393864386430346262356365333463383561333232343263633563 +35613430346332633931623465653764393164373261623835623561356536376635303566313739 +62653162343163306566373063313331363234363333633935376531663831613363313132396436 +31626162633263626430616134373337333632666231326236613439316430393030313861333036 +64303338623936626561316531353963313462383034313237653930366465656566656630633263 +64663363376130643235666362373538363537616563663865623437393964363461656262323238 +31326332653666323838313165316135396234613936633837366636306239356466333436336461 +36653737643833326337316138376263346163393363353238313864643236313738366630643630 +35616433336239653534363736633833393961393035656331626362363763353165633665656339 +33633837663964636431313966313465353532396463666636653234623866623430666636366138 +39313334323133663135646638353437666466643162373535333839653634386333343134373831 +37636237623161323961623366613863616635656436343431643065643035653031643230386161 +36353362313936623965616435653138623063326538363837346464653239656437663263326432 +30373062386364363263326437633634313461326232393836323432343633653238333039303661 +61633230383135666336373465323835303663303164336331333434336533636237623438636637 +36333639323634333530666239386565383532623437313937366630383865353663386633336339 +30363137323539376334306461356136636533333131336634626262633066393935393532643665 +31616430313531643539623962333161653139333461653735316136356166313230376465613331 +65353662393938346665663163343637656464653435343338616263653432313939373431326230 +65393663623933336163383634363664306132313963393936633735306436636164306165386632 +39646364386433646238363939383437646563306634333132353732393134303734333962613736 +38646537613436336361383035633430303965646463626364656635623639616266346433663065 +37326337666637646639303761376132333631616332633336336133626362663439323030646431 +35313834653238383238633066663535346635363238663631343636623134376637323963656130 +33326166373038353534343432363561353764333364306561353531393464633237653936643234 +65313838356337373336356363623633383663633732626338393366343732646361346234343433 +32623665653030646662393863653938313766303464366137393135353530383738383066383931 +36353137653262303136356366363733373735386232656665656433663930353738303665623365 +65333566633137383532373066643661363661313161663435333862336635303466386262306630 +63396566303531653530646663393563303032333563303732313336366334393437653338323535 +39323061396139366538353937376634623562623033626337363439613361303364613330323736 +30373931383033303237343461663066303935633035383630333162366135643734346534343966 +38356530633964343336383538393634636430633266386636643061336438656134666165346130 +39323262373639366633666565616330613163303737363236313734633739393330353534626561 +66656565643832323434636532346334666163633536353235636334623535613132636336623331 +33613664313334343031323430363262303566636437303565613534313834313761393732386139 +33613833373966356461393239393839306163396138623935636433386538346134343761353931 +36373535326635353531363163643765363838623134363534383761316231363339653466313661 +64633631313765306330356664643164373731623764646132363437313063613765663533323038 +38393737396666653435613062303864633136653439336164653831303866633064663731353535 +66646331646463386431373262396163303734303564336238333735653861323861623764313366 +38643638613765636462646666663432626266313530386266356363363663643761633439623435 +35383633376361393137653334323232356266383662343234313838653833303236663530613738 +66626437396438316637653237656265346165666639613063643637623062636266383063363432 +38663534313637306133326133333238623134363932316335343230376539633434393538336431 +34316630323531376438636635666265313239376665346339346630636435313132633261353465 +39373635326133356262383834333237303863316566643264313163663738323132666137666235 +65623861653465303936336436356239316436623061663537393537393935303936386231626530 +36656262636565363430356561663532626535316264316536373463346166613638656563303562 +64393734366662616266613065366135386338313631366535613161376662306436613064356235 +32313333393637653065653162363939616662626162636165306531616135346263376433336439 +32316162373233666264663264336334303434316266633733373363623235316234663636633162 +32656535616666353236633633623938376433306635313139393361316664313331663762646166 +37346465343539633035623565626236326532373561653565613664386637303630333265616634 +61646562353665363536326264323633376161383239663564326433623439343137333564646432 +35356362646162313137353666633163653432646238323865376531643265336535353238323966 +39653939643135316464653866346137323030333762656431623161656239356263313763633433 +36303461656461643537313135373766623232623364613633646334346466626262376536643134 +65613633613731643630663636323563326432303564366130613232613233363631633166646332 +30373935346565326635653030653262646564373435313431306235383265613031303335666166 +31323964326466373335623264316663656465396137303838336431386266633762326434376136 +333238313334323439353538323536653935 From 61833201cb75210f36589cedced4f90f0fabd5a4 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Sun, 5 Oct 2025 16:04:39 +0200 Subject: [PATCH 34/73] Remove the Nextcloud/WebDAV integration --- inventory.yml | 1334 +++++++++---------- roles/custom/fvs/files/lmn-patch-dolphin.sh | 14 +- 2 files changed, 668 insertions(+), 680 deletions(-) diff --git a/inventory.yml b/inventory.yml index db55d5d..331d652 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,668 +1,668 @@ $ANSIBLE_VAULT;1.1;AES256 -38316334663330323133323630626333363862613963313232353138386235346365623932663932 -3034316530646639363837623132663064386363616130660a383162366463373038363936333237 -35373937356132306639646361376238353731333764393234383035626135653932323530356638 -3461323563613665610a623733613966366535363532336462346163623634346366666230643536 -30356536383631396531656130616135373264333136313330346235326430643433363831363661 -39393132623266626636316432333436643232383765316236623638333464326535636462333330 -66663038666530393434383663333930393238306638613464663762666464623337313564353232 -64383236616536353330626332663332636439316265366538633961316435666232393063616263 -37376238303536626433393363323235623933306532333533636263656134306530313832613862 -35353566383636626439653264363763636162623463656533376639303565333238313036356233 -36623530656264306164343835656330623265393134373834386163386563613036326235383934 -33386634626135303134346163373161356465656131333433626137313433626635656465613839 -64653935356164383632386563646365383535343532386262353839646562346332613335323036 -38386234663166323131636134653932616263616635396263336234373663666633616632353761 -61616465623338346264656461316235326666363665636538323035613038616338626133393836 -32636363636163333732636133326464646239613238373032346233616465613932666564393139 -31306332333638396239613331356132366164653535353765353865396538313234663337656335 -36663030613866323737363933613466393262613334666334343864383935383933663938363631 -36383733373437343765306533333935306535336331613830366431386639616233373733363135 -32656633306134643464383562346330663561623031636363316332356162303530666264336261 -30313164666562623437353131663736376161353461366464623361336263373434393663323565 -35306261646664343838633361316431303036666537336137626663336537373862396631316263 -66663737633930393736323736656435396162623665383564373036326530393964393663373637 -33373333393530646531303837383235643033343664633231356438653335663030363939643636 -61393433646665653938343664396434366162643531383632343565353431373938303732303966 -39343564306362303938373137393265653134346233623366663031653438623733663737346537 -62326361383332346430383966363532656238336365303765363463313031343430386161633365 -64336338373462663338663834643337653935323931366234643765383264343163303264393161 -38313331323664633237333962373431336361323131653931346334393632306365646165363537 -65643032383763356163666262376163663863656561333934666461313162353436646438346339 -33663839363166336235643863316538353565636134656236616564633434363632613061663964 -36303634326661363766373233346235636163373931313435373130323036306363313837303333 -39306235376436636333383661653831646266373339303863383737343363393965346563323036 -34653138383265336239343364363138666534393831656434313932656330376235393937663234 -31306632636535626235353231326661323266326537663563633866363566323938333166623136 -63323038323938653031666637353030373365383066346536616338323062306465616166323639 -31323633643464653935343535383238383435643963333965383635326239323532633563396537 -38356234353832613432663937376432356265666134343961333134313336663730313765313066 -30663330343064333436373632663730323930643539376466393332353536343366383565643232 -30353961353830326431343739626435633338393634303961336331636136366435646566323632 -30356266383433636137326432303862386236393330616636346238313935333833316535646232 -31326666376233613431396137653330306564303364663437623261343631366262616530323335 -38363731393435356165303562343562623166363933373562383038383030646436366135616366 -63623065373162366235336237383634343334656135393362626338303036386663646330363533 -33623566393130353933663034393333323838663036343336306134653535666163646132623635 -38623230313732313230653635386139626433353536323535613362303737356462336631613636 -63356638356139373336383365333764626666656337636336626430666638393838653762353033 -35336461383032353961376230393139363132393533626338333366353333376239303463333531 -34313937666262396661316163396462393266366635383563343333353865373362656362323663 -38663038643763303465356134663164396635333939663862666532623664366262646563636136 -36366665653464333536643762343036396131376336313932346366363036323761343161633263 -64616463323834353531353432383433663237373236353839346262393639356631396235653835 -33313030363431386430633866323666653938346163663534303038333565353030383163363463 -31333532306431336664343363373461326161663362663065326261356665616134336437633631 -39633664313534633438633665666332616237356463393333333464383565643035666230346263 -65623636356637333435343465313038373230346338323732613266666366343030333931333536 -66346131343937623039383430353338313862663734643964626661313533346334653837343562 -32633232323739356662386361666436383538346231393166373337663732383564656635303032 -33663764653836663038326138616536666561303333343231326564386234353135333061363161 -31643236323437316238346232303633666666366231306664616564396661613633383137393438 -33333464313935633062346137383561616566336135346538306634666333333431313633346136 -64373930626332663561633039356166326234656661373962383834386531343039363138366433 -34663136346262366138616561383333613031396364386462313130663933393634343162656431 -38646634316238323033633161656334336637646462353964383434623232366639333534396634 -62323834306639306333356363646137313139323534333865376636306535333264653431633730 -33623461643435366135323462363263343564373039333639323365643265353237366632626462 -30333037383331303930383835346564616265393337343662373138366132353335316661336132 -30373561653437326131656330313663386235363662336331326339653432613137626430373564 -36376334326435653265626430376334633833393836646666383266643530376439656131616332 -35646366303062663435353532353931633537656663356634313461396262663135313434633032 -65613338626462363839653064316538373464363237613438373738393962386539663838336565 -66666138653662313939613866386634373830323536626565383364616664363338373936336464 -37663462366439643433343030386231663239663233353533326564346461376534613863343265 -63663039313330653335656136303535313064656661373566623436616231323064623536646535 -34373034643466666664653032623634303863373235376239633264363830336563333039663066 -30643637663761333334343334363262393133343530333131663037303735336430356131313961 -61613630316538626133393339346433353864353632353163396330333064343337366235313861 -63313735653063616138376238393730653731386232396536626164313163373662626165623635 -31376535363930346133363064306461386139656665313730363330346266366638633765306530 -37373131383035326236326264393734383337376639663934356261633464343661373137613134 -34626539383963373661613037633137663861323963383564343465313430336336373935353937 -38393462326433623438363733393034613564646432396562666238363366633739646162633961 -39643732396337356534313938306638343834343235363232303334376562383637363162373265 -37323233363431643065383539653630323836306664376432346338316539303434353662663830 -39303839366634393465306439303839366263396662386330646532386164643565613965663438 -30663161383738333763633166636665323461626664356438616263316634346539653837643934 -33303063356334303266383937653930626236343230626465336631393332643934616330366535 -66663332316534613661303534616263383336353365656134353230653834326635373661623431 -35646261303166646637366533313234666537383432643632613830333630643231383335636335 -61393137383138356539333936383035313039633635646637336261303835653465316338666163 -36623532623038356661663239323230626463663930613166326431313566353565623638343264 -34306462303033616239386438366335303463393931343033336663656438313131653463383033 -30353533613763396337656433306132373466363365616331646133373336306639343730633163 -37356331313566333030383963363961346137353437346135623365373263323932323233326636 -65333566313134613630396431316266363330396235376230633366656363613330333064313432 -64636462616431363533353539393932643062316636616265366230653162653931333831376430 -63383666363837386330623230346136333737616238626132353631383934346633333766666262 -32636138383137306535393339346435623233313965633666653633336630646230656136386338 -34663936643738306335306430316366393136366439376664346238323236623561363838376233 -38383331643832383163656365323863333533666461323032396238306461323139663331626332 -39653665373035383861653662383534383764363735333635383633313965646335626362363966 -65323564373566333263396636316662663534336131383332636466393133666562346433333936 -61343833666337396435353933646230663239653332623337623966643636663134313563386665 -36663231393131356431323437343536613065656464303564386433366231623866393839346463 -36353631396137346237623036376436353630393964393834663238626163633338373237663961 -33613235363163373835643363363463336537623939353435643265343032346663613239303638 -61343335643266663437646332643363383963613964326437636136303062333938343738333265 -36653465643636303238323963666435613532633635373231633935663133633162396635303562 -64666166353839633464616535373038393337646231383963323037613565306635346339633363 -33656432396364323530616132313164323536393363386139386533353635656639313862636664 -31386539666632636663363766316431376639326461636535323063383533323535333438333738 -65663635383763373430373836393765663035366438303562663765343535663535336538613230 -65333431643338313931643235386539313331663435666436663337636637623863636533313239 -32646531356432643561326535303165633165393435373163646539663031373235373963353238 -37323730633731323764653835303332306662633832626664303833626134663030336366316232 -61333531636263633934343661316166376464396639326232653361623666306461653430346630 -33333436663061636430636531633564393430393265333464333034633936363632613034343035 -39653537303461306436316564363264623136346564316134386264306636373831326566616535 -39313731396536643735666262636263623362323038383638323136663234303536623864366333 -34373534303664356536393237343565303935356561633461363461626634306432323862336561 -61396532366565353761343761346234336536333536316136383533636264326562636264333765 -31333265623066376664353864626236323935636562313632316232633963333264353834636339 -38363130653537666237353534626535363037323766633939623765313536323666323961326137 -66336565393634303338323166303033663430356666626562366238346632383139663562663137 -33356139386539336361616333636161386134666636666637653336366466623632643733346166 -34663161633762353832336563386531366661323734613132336565396635616264393731363437 -37366538626564356639663734636433343730396535313665623964653232643036353537386238 -32666164626465363466626333393534373566643535333737313032343133343931383162383837 -66393061333061336266616537373335356333306330396634636231376463613131643234313138 -66316663656236656462336265393836343732373537363736316332393333653265656166386336 -63646634303165353639313532326635616433356436636637633736663165333363313635323566 -65363838303763326163316137643065383736383938653261633834316362333830356237633966 -38626362303030666235326333333236646630303765306235306636363566383338636236316531 -66363930643735383661383136383062626661663534663834366439353535643863303734306633 -32383563366237316663636334663263356565343162353030643632333139316262306636636665 -63633330333636636465333264346332633563666634373636613661313134313034663835346132 -32323836643162656335656531353761363661626164643563653030313565353963316232326530 -64363739373930306461316633646636313630396635393166363732616336363536633364306463 -35323432356463636332643837646165636434663332393631333635663761303833643130396165 -64363965326339343339366538653565316637643234383933373635336136336131343461356335 -63373537303062303462623037656335323261333661343339663462636265623535303862626362 -31626431633538343337643632366464323135373065643833613732656631353865646536353334 -61316435623331313036643936363037386263366562653961323461383561366238636238663536 -32383264383165373162376361373163343635623138623764343862333530346664373138643931 -37376562383535653431666337373431663239316330336230333333303632613139376666303237 -63663133383739626661363537336238633436366639306331623037373632393761343932626535 -36646133626434386161353866663938313262383835303038363737366239303231623938343237 -62616335313066376163356661353932653032613237316637643039643462373836323263353961 -65383239363237653230346431343834663364633130343464373133363035313361393732303539 -64633031643737656236663838633330616233663233313033623965303031353166643365663565 -35336339653161653535393339633638653538626365363131316565306366666263323838366365 -64393231336461363835643337633464346333613864326130376234323932656638623563383437 -61376566643730303237343036313138303332633565353934336539373732386263303037343937 -61316663346239366532366461303735656336333661366265656132306538636433376366346331 -65626631303964643465633035653232623532393536653064383465666662373265373935333738 -61643037313764326134366238636663646562616436653132343433316533636331373832633561 -39643266633464653333346662633436356539373363333035393334663532626139663731353361 -31633031623732626261363633326234353836313864613164353165313461316338643239333531 -63613232383133646631393937353637643462333530323862343135316332306134323833323234 -66333462623137353738636239383031653339373561303864306637323863373638333734313264 -66663765373738386533313065633133376336343766306231333935386137646532626233326236 -34303233626638663531643463346261306364333533656634346135623737616365623062323366 -36316534333636616130393939633831393437343766613761393639626639666134353564646235 -61373934393339643664373561323561613439376535626533616435313662643665373164316330 -63363631376430393038313665633266323935376464313333353739343938376564383431613331 -30656436333466333037646565363261656533353261373565386561623532643961326264356337 -30366638646664333066666439643236633135313038386362333932383763643032306139636638 -36356464653466623637623439626535616461633538663765363838393135663733636630373435 -62373661346363616536353933616238383663363166386133343865643833396636666232363263 -38643966376137316239643761336663633364343337396339316162373131613939613563363939 -30316331363434346561303439326231306566333831316435373937653062346462643438663562 -34313235346432663638346131323139333036346438626364303830663661333939323531653934 -38323534303464313164323333373738316131666535366666353565306235653937303935623966 -32356334653465663365373764323338653966623337393039646536613939316634313334653532 -37303038363861626639363634613935353237386337333832336537346164623233356362393766 -64353838373332383334303836303438333162653632656134396230303831653634346337363733 -33363964306236623761333536633533323931353437393532613238326237373335336433656264 -33636633316330363135373164643639313135353039633637623433366538316535626563353733 -34373938343134383430323931346363386137613663346630393562323733646662363762626566 -64383162666337356161353430613836326465646335656132303434333631613330383130356638 -31613165306633343566366632636363383866653861656362613964393065336361666362666535 -65666538666165363336373737313565303636636132313465353434306166323066613932393631 -66623736356264393437373631376366353430303839386630623239333361656636333437373939 -36373136343337376564386633633065303261636332376130386262326535633430613038643538 -31376339366336353234393336623130373830363366366331366435383864353164336565373863 -33396238353462653962326666323762333764326638633535353930633133363866376536636366 -65326361656464356138633663343464313332336465386135666466623462393833666161666638 -32346561656332623731396637336561646438666262326164363832373336656636373163383339 -63386264623138376166613665613264343434343133363734636161663038383531386332633864 -39653063653232373862656365333139383066373732396462623033383034646133333562616430 -34373865376333656335626337313261363039353031333365663837613237646266663935326532 -62333166643966643238616236393638643962623263653133633630303866623864643832356365 -39653233366534353664636461373964363836633530323839326165356636646531373764383666 -65366638343363366463353131653531346535303233356135346336386234643435333536663366 -34363033666130353737366234646337643730643835326563616563303430616434663062333831 -39373830656165666533393263353866306332396337336162656238633266313463613761373663 -66373666643834626436623233386232393030366438383866663863333234303430653262393966 -64616339623337343337633436303639366564326239613364626665393364313734626566343263 -35366436326263356562386331336131646233633533336432623137356237313731376537386535 -32633936646439643163343439343831656465653564613237313431323563373763353831386165 -36656161656232323763326338373939363530383934306634336363323139343031626536306134 -33666464353465343662653032633261383530323438626162373432323435376134623463636233 -31636431313439333333373662663236666362326462666136383930303930373138386339303731 -66313932366139623233316232366233346264353965333265383033356164343330373662353739 -65626631303261366666623530333337336435333738366664323964636365313635626530653030 -35613565366336313032653835653037303039643563306566393962343433326234613530383936 -38663832646434316561393962646365663935633334383739636534353330393563383562323134 -61353038613035663731336538303432353737336166313361393635303561383333386632343466 -32376363653135373633653363343333613463333164383661303463636266303132643765393131 -38356561383265306430396635643832623133373338363439363639643864646633396466323662 -66653635386264663136633964333763353562376235303063633331313232333732383366633337 -61373731343530633964306135643766303361383061386439306335616664323536626130633533 -34663433363433316338623163303737373063323061323865653235386638626166393931663064 -65383431363935656632303637306535616161636565366165663966386232666164346162373065 -39353232373335386466336538383335353034353764303738316537306631646537313233386130 -30643938353338666230323336386161373534383136646531323731643033356366623933636439 -31343564613134306162333263366534313431366531626265353535633836363838383331373637 -38613236336438326134643837303338326430643230376466663962636264663036346136316434 -63313162663430663834623366653461313038383831373637386264386665303930343636623537 -37633637346236363038343664353066333239353566313763653562336539643735376130386362 -36613939333931383235303833643034383939316331376137396638303261646235366536353535 -32343938643433343164626564386231386238356135373730383963353337353166653038626535 -37346331346536666436333863383861663765313862643832633064323730383334353239653330 -32383130663366663239656231356463623263363439623637613033313030313334333464343834 -64623062636562343136356130626564343734323231393539363864343662383937383735343537 -38643863396564623339623362326333346362396335383830633964613364376361633132343936 -33633362333564383362333834626238326131663137343030333132643762323639373931313430 -37383166383561363730313439363938383662316661636533663039333139356439343339343638 -31646239613565353666313034383061336231316163323863643232356662393763646534323566 -35366134656536366230373433313634313966613034366665663131356461613331643538633534 -36363536666364623633653062336638663935653766336636376539376232313365613931313537 -30323565363133393661326332376530666531386635306432623164366133613961666661346661 -64303363393831336135333933333937356335363532643138373464623862303063313736346464 -38613466326430643663396230363432376235343930396233316232633435643137653633386230 -36313233633738386338323065376566666235643266656465326532386461323061613037353037 -30633535396463366132383832353832376133646335323836333633373737323664643136383837 -31623934386235643963363939353632363663643165366331636533336262373735613261643637 -63363961313664356133393236616636326261313866643461643833346365613163646330626664 -37356234393864393066386162653433323831383761643865346363343830336331633330333431 -30366337393163326263653163633038613135646535343566643131613632653535323066396262 -61396336353534613766666164316664356132303763343863373863313636343637303136653232 -66633631313339353766346230323061386133636230333361643338333337386434346232656261 -39393261616235313862326335663136313661643464336264323530323232323138636166646233 -32333565343861653163643432646665396533353532636432623561396636643638343839353539 -33313564623762323239393565316164653962336234363263653564323032306636323739363636 -38363730326530353261376130366135643266636466363739376230633063626562383462363561 -36633134353838666535383265386336623466313337653431383435356439366661363564323966 -65353832663361393763633962323337366462643339343135363736643132386433613238613764 -66346265643834376533643066326234366233343036333237383631613365353831396337656431 -33376163383335363064363631373737643264356436633237616663333864646462623638356536 -33336465636133656634656366356166326134383434313362353163306333343763626535353665 -39343336313930303664343433356439323539376466326232323837356432636664623630333765 -65343335336161616161626164633065333633363065343537643635343964663163653336313937 -35383535313231383063653464366465396430303132326637643963363365626435393865633833 -62343065623938636536613435386330356666623839623331653930383436373038323333363464 -32626430316161373662313530313462613461653435626463613164313331383231313339353237 -65343763643337363036366463353230313936343463643139303366386164313462366265336462 -33363461643862626465316439363431346536613461396534613235393330366137393434383062 -39333739363164383131626238656535373638646261613430653033653431636263333830633366 -37313438363935343333313635326162333935313836303861656532663038306231656262366436 -37383461323530366636643933363539666136346335663766363465613533656436626563343031 -62613037306363353738656666333461326165666664393330613562653932373832633533613630 -32666361616638346637656135333163303430653630393734373562636331393236306363326336 -38663433653064356434623133376537363166643631663335323934626532323535333366373061 -62646237656665613535633466306430363163316631396561383136353232323639353333633035 -61366130653662656263396165363832336331356165653036333234383762363461653837373665 -32343465623662636332613165623838623732633761333266363332353237306239363465386634 -65623231366533383533653137663965613339626237313531653836303731376663313162653037 -61356334303362353930613132643136373864636362346463633530663464303231313335336335 -33643232363565336662623663633834653731656161633237343165313236313537643836313366 -38303464653564643036393232346237333766646338353830353537616436613336373731653530 -62313532363262376139646135323132646263646266623066323232653533363139623966376237 -36356664316361393635396339316230666666383339656530323364316137666534333231626133 -31356231643461326633316166636130316539303964656438383863383735633134326131613232 -36336261616363353331373061326562306237653034303466346638393066663438323664346561 -37663734653234626431623437366162333331383937366433356537313634616235306666323832 -39633362303531326237613730633934663935336365643631343762383631386564373738633538 -63646537613938626234323035343838373632636331316432336135373535636438633361346536 -39396464376232313465373666326338313062643065623133626439316336636338366137633639 -37373536333736643333633937376164393936323662626461623238613137663336616331363033 -65376135353733333738363932303831393832333437393634313238343739313563663637356464 -36313930373333356138353237303931643463633832363462383237393431386162613666343933 -63306564656534653765613034643561383239336238323064343530623361303030356366363666 -31313430313331343561363738616632643233343665363838333164663530666161633536633839 -37356166313862376433383561353739323261636164363834333964373632646335333839623965 -65633461633838383236373763646565316630623239663438666433303762303336303636363033 -38383730343936396534326266336635326138646366643738343333313939323332663638303432 -32643734343333663065623034323766353362383630666236633633323134653631363765353362 -35373534353838346137626337616230663834353231353962373337323137383466336262666236 -37383531383033363734323539306330623762333765636161386561336436643330336634393434 -63666436616335393366353339646665353537613732633361373434623938306462353535356465 -39656163646365633539336362343835303561313638336438386439363961303030383833633464 -36373164353238333332386336396232316533653337343534626230303264316437323836326365 -63663232623338366436303036386539326235373461353139356462666139643032313830383237 -30633761346363613065343731643065383231376436333330616666653963326565626464623630 -66613836353439366531386635346435313634663862613464653735316437656231616237653230 -31303733346162623764666635386336343166393739353064323662373937386631653033303939 -62323533373639383539346538363032346531306162613863316663303533663435333432616430 -36666239666337386136343962643434633430663030663136306431623633356563316538336130 -63343138643835366433326333666663653738616265636230353630303730633561353363663734 -34393535623663616530656665393635633638656133353838626530363636656438326232383736 -32646537303463313334626538356265646233383835303166646331663533396365613565613665 -32336261616430353530626138616165653830343639306438363762393431643732646666663535 -32333762353730383530316665356330346565663664363636396634663332343663613362363939 -65643239653861386561393331356433653031663531323433313938326531636166643138353334 -38363665326333303161383862633330333237333336333336616133343664366463626638376661 -36643433626131323237346231326532333133323137353464613563643364616561613639626433 -66336463323236393330626466346564366335643232626638623938633338363833613935303265 -32346332333639313435646134373236656132303961383963306438343763646130333761616136 -61353464616331386537363462623538663431656132376138643063353363336364346665306539 -36356130393537633638306366666238303337363333663237343664363766643364326333366437 -32313663393138373037633039343838656331633232356530356230346361383538616539313035 -61653638323435653237636666393364323161363864323132363837613766316639313632313132 -38623066346131383735643263626366336464303835336665633137373331653964353337333363 -30303331333463623563376238313963343431633737353134386464353234353934333830306533 -63313265323638656234353230336139346632363336316234656235613562386335303036653039 -31323139316435643430616662313564356630646664316437313564343039343738326163613661 -65633339383230366166663635383431626632613035353135316236373738353437613837656663 -39646236346638643033643063316330636432643631393035303839303534376365643033346330 -38616632363165303635326339646266303237326461616631656265393535623937363261343039 -32323435666162623865313234343961363362393764393733336266646233616234343463623131 -62316565333639306163643831643937366236666361343734383331303865393562376636346639 -33353631623563346237663830653236646665633838656536313464646236616334343438396133 -62303063303731626431623936383462346432643637643337666332616161653430386539393566 -34393462653266636233396137646463643764656135336430393831613132343134366431333065 -62353034653938343432393934336630653935376662663431326538386433303562366366303866 -63396564316663656666356264326231353864343966353663343538326132316364663831346461 -64653764323865323734653339326163626465623937663663666631616465323432393234393030 -31383265303630326536333031386330346563336665366235623032343566343332653730646162 -38353334333462353434383436393961396332636439356337306238373637643463376633343031 -66303439323938333739336332353139363462653231323538366535666337366466323239623939 -30636539646232366261613564353066303062353164663561393639356535616536386665376561 -31626633386361633631393338313466633364643239386436353430393661623434356662353033 -37656166613836346266623530313239386337666135356466346333613666346631336434633866 -32313834306431363432393863393832623266616331366463656130316237343839356532393039 -65386336656266343663666637356464613639666439306338353634313432333137386235643766 -32656137663935623932333330336531376565643236393165623039616133643861613138623466 -30383238633661353862336236646163343162353264633130656339303166396630643531306339 -34363737636436623636653734386137643939323139636538316538633235313030353863303037 -63666435306661363162613862643133323133643235343066626134636132326534643065633531 -62343962656631313639326439666333363566363535323561383264366631613435313563383033 -63336334393361313637383861303236363934636137616135333639316662353264323663363035 -32366536656235633833323266373763323430613732303061353762303666343264356335656165 -30346632306134326336646362343835646238633833653866323661353236306638303333353337 -31653166653439333864666566643936323135626365303231623931356333326438323630373430 -62373537653561613935313933353831343763613431373838656432646639376263643665636666 -39383938663035633238333536653065363936393533343761353165666634343333343165396636 -61326531323532623330333465386336336362306563636461633561316131643939303662393938 -38343533383861343166636532323762333932636534373762303235313035643537653763313064 -64633739353265326162373065626164343934626434636566646566613831363163356532623863 -32326335666236376236623939323037323362643563633037656534326133356230363033653534 -34303930373330636231363363663162386632366165363461393833373462303230613662666536 -37316261643031313934343465343465393835346231343366393830653737636134643166363635 -37646333333234366431343265376237343732386237323939333961306661643238396461623337 -35383365306634333838306662633735356437333464356662303138386662653533353936633839 -32656539306434343739626132353633336639653866313165643537643965383337363832353566 -36383939646463663435663361313432316539376161663263373363656638313331343466626339 -37323265326238363164326439333131656461376138633262323137306465333066623033663462 -34356533653633323836383561386331323131386639303539343431376138653264623638386639 -65353939336234623137343734306536313139353430363566633236376334613761643237653230 -38643835373032353530316633626531343163356463393939643935373433313035333532616365 -35626535636338636338666564643834333931323134323565303464633333633039333635653565 -39636235343230346565336364306665336538323833353634346532346631303737613663653763 -31376238343865653261613832366137343061653162616362336239623837313939623935303332 -66643961303434643762613530373863636234343238346533343437386532626536626438353132 -38396533643738343134646532343037363961613134356363613233386138383130653665313765 -63643134303536626535656335303933396433346535383165613830613035646136346661333732 -62633235653332623832396639643662343166646164663735333963643730643636353866633363 -36333062363437623265393734323565303734376564343635376333616134313535393266323331 -31313031626462666566623166393436376131666435343234373865376265626234376363306363 -35336132343435633532636638373734386561336536333166623934646637663931663235313763 -64613037623834373034613965313963333962346631363064616262373036363462656433306665 -36626634623562653365353261313966663631333830303536666232393062643130663266356363 -62393139353465326635626139373466353832316637323865393434663762303337393735316334 -30353332373663363262336565336238623965376362316135303039633038626662653764666631 -61303861343765303763666561323933333362636631346232663064363163313865636437313138 -31633164333337336564633233313430333362663838396637373662383862616134366466366637 -34333031643963353332306530643661333730343332613564346666666335613063643964396539 -64356666646362343563653839356231326464663765316338373266353264313036333336333434 -37396439643533633533656262663961373362343837373735643363643530303336636333316266 -64373330356439303133373162393531303263393566343764333163373166646165363362353835 -30363964346264366137333330323232386265376439303036323739386330666366346264646539 -34653430643934623865633736616166653066396332663366333961343335613765316561653135 -65613830613032356331613665623639643632393138393437666132343235336662393863363737 -34663435363837353637336237373238646535323433363565623063366637616233663135353439 -63626263346365643333383730373862633539333666623339656638316436393234633039636163 -34643465373639346636653864356637306163343331303136383565643836383732626333396466 -32636332303631336530656435353632386336653632383063646265313937633936623132623235 -35643961633335623537323265646361343563333837326539343136366238336465353739633934 -30306235313733633437363763613565363330636163666134383533383133316537643736386361 -34373036653135303665333365653063616335343730666535363130303433613566353235343462 -31356132356261653139653965336165376631626332626131626462643563303464626339333035 -36326436333539333737356366663865636165396165323764383335623131326633636364623834 -61363064396562633566323662303761343131636135326531613965303633623933636264663061 -34393937356239653034383665316435303337616165366264356662343462376239623535333430 -66623031383631396536306530656465393735636163613632656265316139373239393633323534 -38356237666563343030326234303966373430636265663231643831383536326630353061613266 -32393730333662303065616332623230306534333463346462326637623364643934306537633036 -38633736663966656261353665653639353137303065316561363236373562363064313665646437 -35316266623239656636346634353463326466323538393033633733353066636566616563383466 -32313663613264643738353030326563376531303830306366303234383837316234616465383264 -32626165376339373730653930353265633563643366366330326438373437353939656339643738 -33313238623262363062643633616239353032653963653561643062636165353939643837646265 -38376436373836326438643165366666663263366238663765356536353966343664363365613938 -66303539633461396332336137616266353236326134393731363661376137306364663136323035 -39303661316365663136373733306635396238636565623230616235313533306464343532663735 -64353366316434616631303833643830643437313065373830313131386235363234373531303934 -30373165393265356236663432303164363432313163313666616138366236343737613438346432 -31333362653035613166306461663333373338333338353131396233333365666666343363333234 -32373032663332336366366135353232306261646264333030666433363661306166373664373762 -32623134363562363532623062653938663236666534333536336638613736663939326365363363 -63626366636337303233333430623934336331613163653163646365663331346234366135653739 -36313561376231356236336333356135396435646662303861306662623637613637646261373335 -32323436303231386363376639373830653465353035376465353433396634393333353663623164 -33343239383230326630353938663938303437363766353730623035306632383532336431323766 -32643936663937363066346437613832636464333366666537346635353733326362313631376234 -34316561376161363435383830313936613931353734633834333664306330303439613339643566 -32346561623530313931333162613535383561393164316262386430333936353364393562623538 -39336265643734346432633938346233343463643266633861316535333866303331353232343034 -39636562323633653931623031383565633062363762393333313262336430623736633066363362 -61663861613137323333393834626539646561633064303331626464653965323431356663303862 -36663963363661663265373332363333393737323938373138653536623833303464336137386361 -62626265326664643039336562316534346264303537623037343432666633396633366666346562 -65356166643032646562373335366539623130333235623436333338383366303237633465326566 -66613464393332303732396532623533653665336662333532393163303933336335623337653833 -35386662353032623537343361613135623838323033353964363835353763363639623734306133 -30386636343732646438326433313731613836306665383663303731393664373861343532343534 -37376164666538353863363766383330303861306531336339653761333363303566373432663131 -66646364383531616564613062613936376134383738393234353561373634643563663732376663 -65636335343630393166353339353330373464393935636464633433613834323836363865633532 -39313061323635623536646337646536356432653236383632346561343330306431333032346530 -36636134326334633039663861363937396336616364623461656164633466336563353937323061 -64356237376163643232303864363935393964356339613031376464393566613830643061373038 -64303830343437326464343766366361343634313837663231363666346264653035316332653461 -37346439316663616238646363346239393537616363613363666433313735313330623938633766 -62353934646366386134623464633565633535383363613138343861643364623766373038666566 -37643339316135613034373735346231666230333734666437323066616465613266376564363561 -31663931326636633739303131333236313265663639666362393566626364363039653230303333 -64653765376136623761323564393934623339623633356636333864633331643437626631613764 -35663937613135333433313238363464323437393532356566653837306536303334343936333364 -62363332303431386231376263636332626363346663633966653930373135653233643533383030 -31653836316332336363393161323432373866623930613465643162373838616134386164666530 -35333666376138346332363366353930313061386162613362663364393630626430653631636537 -66663234626534633831323639653061376431326533643064303839376435613635383039303761 -66333335663066623465383333666430386533646136646134653239306261306238303534653064 -66613232386461323538323734393566383138353864396565303335366561306631623437383933 -63393866643561643131663035363339653638643433323832323733346132323865346364346562 -39653962323132363938376534656334663131313531663639656138306661613738643738323637 -66636337336365656638393034633735623564366332633733393065663764393137353539363731 -35663230366663343939623532376133353535303861626435666566663130663937393436316364 -66666633353932643331666361393265313237653836626165323466383239333061356436346432 -33316463643132303166343063313136646537396238313836366135343236633232353932353933 -66363737393835386239616562383066303665666334303439663133643666373138643964356133 -39396561373164303161356432393633303064356563623533663633303164313939623438643465 -65643334303636306430666666663733353335333138306335643830316165663765663535313431 -34316463313930336437346564643463346231343934306332623466613532326661626162383964 -32613562336630366564373935623164626265333834633334366239653163646531346536353834 -61343737343638393866306639633537333138376566643233653033333363613738623930346565 -61333563373062386662663864623236643263336239306361643338626166303563646436626163 -35653732633237366531323737633366646137363639366131343437373338613635653435346238 -35353362646565636664663461376663303765373030376464303362656333303731653037636163 -37366331373235393264376164653966643061386361626664343934396433613966363837656665 -32333261393531386262363531366531323262656537333638333434363364373364313831366161 -35356331346332306263353266333466623339356237616637653935643464633662326261343430 -34643463613537613735316265316562306135623436303361663064353439306339656237373633 -65396532363939303464366439383863393533393434303037626363363437343966666339326330 -64343061656165653563656635343534393633353234333962613238393039363333666166616231 -36663265343639363532366239353333313336343666663736626133646230373731383038323232 -33336661363133623236346533623061353635386232626564353434303339393933613263373664 -63656333363433363163633338363635323634646361343939353235323832356439616466396633 -31343935613833353364613736393332343832303665306165346536653263666164356561396663 -39386563386665363765623539373939336161383763363539353238376231376263323065643137 -64333738363335363930356661653466663437656233323234323333656666373830343034366162 -61363263643930636430656266393538336631646665646231623939663638343065653165643539 -63393039646661643633343733623965393430656537646264353864393433636365386563633434 -33613730306230613931323837653635353962373063616139613939643339353438343831383261 -64346464386466333765353436656662373832373439613764623661653339383063343030306161 -62383566636166343665393562383835393561323335333235636563623234343036343762376631 -66333030646235386430303531623334633835633962333533313132306634376131663761656436 -30633232346138323930373930306664363865623663353238666266663334376139623232343331 -34616462393536663438383832346239333062396530303066633839323431336163636163326539 -64383534333063373966366535343761633339363964346532393239343963363638646565393964 -37383131653936633261633633343137623964356538373166366333356238333336346562393531 -65366538363036666537383134303862306532653666376134343764386234303937613234633835 -34636663363230306166613831333061303038353634373764323565646632663630303865353832 -63393537353335393463616534373137383766626536303262336532306161396432303961316366 -33333661643030623030376132343230343563393965393436393930363234623035393332376231 -35303464353231363238653632316162643430396664633661653335643730343162343931316162 -64366666623035613936326131366265353334333461646465326162326366656538333736656437 -33663038326138303039366334636562333064373033346233663133663837313265306464386661 -39613962396632366665366638313462643263633765623135376234633036643163666334353637 -36613837643839663465333263633534343064396635306436353965396237653663303336656634 -30376639373564396431636563653835393333366139336461393966343931306133616565663264 -62663939353239353536666335303564393039326135353265353138663638663663333664386135 -38303766313466363163383831363163643234636234663436653162366639306636633338366262 -36316262363264393862313733633630653836313866653862653764643666383136646364303833 -61346536643566643037363764343137616662343562343566313836653737313238303865396562 -63366430346236386638306337656262663532356333623735396332303465323662613862656438 -33623439343136623137646632323661323366623434313862633962396263373131643363303963 -35633862663266306437626365313432303236353533616637623631623936336638333132656236 -34363561366563303263306131376164636232393461323736373830363933333364636530336139 -36396438363964343161313536316462363031643431303166346434306566346137336338383162 -37656464346132346335343162366536663134393266666230373161613838303764363862613334 -37656536653238653430646561663032326461396631643765613735663034326566363036333639 -38656232613232326666656535613762333130366464633865306161633638633264363839343265 -62346635613636393630663535623535613938643237303965643465663732653034383637346239 -61313830633964613265633837656534353336636434343931623036653166343561653333616435 -62336464323862376138656235336135643933643135323334316136306262333035646265663331 -35356238666465313966333238663234353231386466303434383636333035396532316365633733 -36323066373737323661323064643663303331343064343139666237356462333935613434346439 -38646235343030376666326364363462366537666662336537636565313465323430333530313037 -36643132306362626163346262613064653563356431626136643966306434323137363663316431 -36313033343961643230366163313035363034663534656336626230363537346534356236306265 -66303061366232346665656234366436613938663765383133363230643434383438343865636661 -61366463383565346639653431613032363161613636393266646238643665373435363535636438 -38343531653465653436633030663238313663366536393663356230393066376335363131623131 -65356263616434363839653334663434653064643839323934633839383866336363326435393964 -65646434373234626335663962383361326230316336363332386632663131396562353035323537 -37383734323338373262303534336366366436393031303561306434376137653636633835313231 -63623366643039316636663065393938616236623033636233303733663663353265643864333134 -66656531383961666361666166663535616630356234623533663763633364623462663065356162 -39326264666432613266316266633464306333626365336139376639656136653864313731376661 -66343930313561616632656139333235303639383534346565653235373433613131623366333462 -37353830343236633036386566343831636430636434363534303835653266373132306664613731 -66346338383231633866313332333331643737616264313934303333653839363537363164336234 -39353163303737643864386262663237633033383162366532646537623561633134653936313631 -33346536366233303837366636643563313636376264353739363465656134623639646137613637 -61633466643339613261383230613863633037346336353963663230646661313533303138633562 -66326362366564313632313033383431663734323238623364613830623936393164633733343161 -61303430393938353761353236343538656135643935313634613632333062323733633032383062 -35383039333631653466623333646264353665653435626535393239393065316138326635303965 -39616265613833613833383535373030303631366239633361393832313139336333656566643461 -65333336346565383332383264353637333262626430346439396539373061333366326632303435 -66303230623963316136663938653039633537306161343431383162643563376631353766386234 -61626661613835623962623164646239383738303432616530336164383239333432353362653830 -62363262613131613063333034386139323766633065383033363431336566383839393366633538 -63303534663766666333656534646132396537396365386566326464303036356563333066356230 -64393164613766383237303238643031656437303638653930613164393031616162366564303931 -37643866323930653635303966396462306663356138306638333362636430303166333136346262 -63306161643165373737616234663636353436393135336536383630646462373134386632343832 -65343464653932383661646234303563376666633434623232373264653261376563393036396133 -63656561653334623030636465663864653132646130343562353938356266353436663737363238 -33383764303239663465646231353364346632383135303331653138383835303461333036303234 -33386137383762326664623763666235346133396534613031666433663932646165656362663466 -30633935343234623163333332383731316232363461353532373730316561343832333031663239 -32333037363137663261636330623634343533663065373663333665336436613361373238376666 -37303238636433333431623338326634363063643962356336326237313266616437623834653937 -31336662313063316134333338643362333164326135383432623133393433666639376465323763 -62653766623431323663393430623337393830626530386238326338623931666361646532666137 -64356336363438346337386535313839306462333866323332386531616134376336613632656365 -65616662346635326539396630343061633836393461323266656664636162656533666639613232 -35336430303866326666313135393735393531333765363031313962343237666263616332653363 -33613233346532353262396232383038643238383034646131326535366133666534313064393838 -66316132356432336161663066393335333633633966303233383734396135666334656437386264 -39666232626461633636303366323762303563366366313831623066623963646338393163393638 -32333534623461613632646362663761616263663231306135373934303761653664343130646130 -32363762336261383532666432376265643039663434313431303531653130396235373665353964 -63396339393162323762643462323539356163656630386633306234356463346436616634613965 -31383837393139633633383663653739313365623764393364303538636536333762363231323834 -63373162393032303834316365346634323961333634356638303438353665303766656439303866 -64363663303835616562626662386165636466393433396331663436393161626134303539666435 -38363865636266336533316164653736633036346534303736643139663831356638623638366435 -61646166343033336130663738623037353962393731363332646539616463346630323863663337 -32326139636364303439653831636637303939343861636632353763666561346636336433643231 -33303262663636663830363465633731626466313135333033313461343634333333666332336133 -62353364313434333661656166656266616234613138616431316139313961326238383261623363 -37366465326636336339396665303435626535646633333838636164396265633733323965343561 -34653130323335343930356334363332393862306530653130366263303530666138316334653731 -37353830616530343231643334366333613333393261393662313362663561346238633538383736 -30313439616263353133316433653862646461613932666330613235386536303834363161663331 -32306135373065336636646664373765646366643432656565656335633532333335346337316638 -38616633633364653363633665626364393365636161666166303438356135336438643930316239 -64616664623339663065396435646135633238376332653363316265616536303634353534643963 -66303730353231376263303939306430303238616530333165343236366365323730353736313733 -63336532366632333165346364636233356231306466333339663962323333303132323335373162 -32653162386561623762636131623832613862653237656638643733626335653862356235613632 -38363162346562636337346634623864376561313364663430346561313733383638376236613539 -34373934333838616139326131626365323461383030653733316662363037373565353363303131 -33653638393937303032346135306639346539333336646265656461356630616134643733313030 -31666439333830333131393565643431663133653436633337306637343938383863333032633561 -39353539643738303037323132653336643935393639626631623566643434623130396134626530 -34386465363435303736356632333138326231333162346636633331663931613230393764336334 -35646466376231623339353435656630363330303161633031343331383132346566393435656238 -34663533303233353530663566363361643639613364373134646262346133373964656639636265 -65363062653763316232326464616638663362643965626137653561613161306530613536633234 -63313537333339353262326134303035663035393964303566333365363436356236323938313763 -31373938643731643862383737393962663031343862356463376437366638633930313534383661 -33626565393930653431303462666538643036366137366664396563636264343935316138656565 -65666465333633623965393937613234633665613433633231613030616265366334333661646333 -33633534643738393733666139613630396466643539636461653662353538656234393566333064 -62303430373734633236653139316265616439353034393263626438353263303766333330343035 -31353263346137363864393334656638333831333932633066363132336532633661663237363537 -30316236613261633733313361393937313234626163316638363939383335633133373639653762 -63363934613736633961346564636133393733306335346535663636353038646233663962313761 -32643038396362343735303331646663306432383539306364313635313538343766646365363862 -34303935353433313533383063383164663362323733333561303437373936376161316166663338 -37393730393563626463383263666538353235376430636534373266386562623733666532356666 -33393435393534613636333636366463613366663932336566386335353361356231373236386636 -31366134336533633561336164666638326161353438623438623239316163316663303663313266 -34333764336636313131626531643435376533303361616239323934626133356431663965303033 -31656565303538663561363931376436666466363332333966316430613433346365633533633734 -66343364613136653637383735623339346436343034326139326438666239306364376137393634 -61356465663661373632333365306338653538343537343161376136656465613634663534623361 -61343732613939646130323161623964613736393665386665353066343438336339656265646438 -37663832633231666231616531303435376132343764323536623437633863353462663633353362 -30353734613336346634616266393864386430346262356365333463383561333232343263633563 -35613430346332633931623465653764393164373261623835623561356536376635303566313739 -62653162343163306566373063313331363234363333633935376531663831613363313132396436 -31626162633263626430616134373337333632666231326236613439316430393030313861333036 -64303338623936626561316531353963313462383034313237653930366465656566656630633263 -64663363376130643235666362373538363537616563663865623437393964363461656262323238 -31326332653666323838313165316135396234613936633837366636306239356466333436336461 -36653737643833326337316138376263346163393363353238313864643236313738366630643630 -35616433336239653534363736633833393961393035656331626362363763353165633665656339 -33633837663964636431313966313465353532396463666636653234623866623430666636366138 -39313334323133663135646638353437666466643162373535333839653634386333343134373831 -37636237623161323961623366613863616635656436343431643065643035653031643230386161 -36353362313936623965616435653138623063326538363837346464653239656437663263326432 -30373062386364363263326437633634313461326232393836323432343633653238333039303661 -61633230383135666336373465323835303663303164336331333434336533636237623438636637 -36333639323634333530666239386565383532623437313937366630383865353663386633336339 -30363137323539376334306461356136636533333131336634626262633066393935393532643665 -31616430313531643539623962333161653139333461653735316136356166313230376465613331 -65353662393938346665663163343637656464653435343338616263653432313939373431326230 -65393663623933336163383634363664306132313963393936633735306436636164306165386632 -39646364386433646238363939383437646563306634333132353732393134303734333962613736 -38646537613436336361383035633430303965646463626364656635623639616266346433663065 -37326337666637646639303761376132333631616332633336336133626362663439323030646431 -35313834653238383238633066663535346635363238663631343636623134376637323963656130 -33326166373038353534343432363561353764333364306561353531393464633237653936643234 -65313838356337373336356363623633383663633732626338393366343732646361346234343433 -32623665653030646662393863653938313766303464366137393135353530383738383066383931 -36353137653262303136356366363733373735386232656665656433663930353738303665623365 -65333566633137383532373066643661363661313161663435333862336635303466386262306630 -63396566303531653530646663393563303032333563303732313336366334393437653338323535 -39323061396139366538353937376634623562623033626337363439613361303364613330323736 -30373931383033303237343461663066303935633035383630333162366135643734346534343966 -38356530633964343336383538393634636430633266386636643061336438656134666165346130 -39323262373639366633666565616330613163303737363236313734633739393330353534626561 -66656565643832323434636532346334666163633536353235636334623535613132636336623331 -33613664313334343031323430363262303566636437303565613534313834313761393732386139 -33613833373966356461393239393839306163396138623935636433386538346134343761353931 -36373535326635353531363163643765363838623134363534383761316231363339653466313661 -64633631313765306330356664643164373731623764646132363437313063613765663533323038 -38393737396666653435613062303864633136653439336164653831303866633064663731353535 -66646331646463386431373262396163303734303564336238333735653861323861623764313366 -38643638613765636462646666663432626266313530386266356363363663643761633439623435 -35383633376361393137653334323232356266383662343234313838653833303236663530613738 -66626437396438316637653237656265346165666639613063643637623062636266383063363432 -38663534313637306133326133333238623134363932316335343230376539633434393538336431 -34316630323531376438636635666265313239376665346339346630636435313132633261353465 -39373635326133356262383834333237303863316566643264313163663738323132666137666235 -65623861653465303936336436356239316436623061663537393537393935303936386231626530 -36656262636565363430356561663532626535316264316536373463346166613638656563303562 -64393734366662616266613065366135386338313631366535613161376662306436613064356235 -32313333393637653065653162363939616662626162636165306531616135346263376433336439 -32316162373233666264663264336334303434316266633733373363623235316234663636633162 -32656535616666353236633633623938376433306635313139393361316664313331663762646166 -37346465343539633035623565626236326532373561653565613664386637303630333265616634 -61646562353665363536326264323633376161383239663564326433623439343137333564646432 -35356362646162313137353666633163653432646238323865376531643265336535353238323966 -39653939643135316464653866346137323030333762656431623161656239356263313763633433 -36303461656461643537313135373766623232623364613633646334346466626262376536643134 -65613633613731643630663636323563326432303564366130613232613233363631633166646332 -30373935346565326635653030653262646564373435313431306235383265613031303335666166 -31323964326466373335623264316663656465396137303838336431386266633762326434376136 -333238313334323439353538323536653935 +62333531623234633937313135396461396664613262333963346130383766376139623261623535 +6635653039643930626337376365653930653462633038650a653862313164313438643132383931 +38393162636366333635613537333163623365353934333463613233303436656166393631356262 +3566363139316332350a383134323138393663643163336663303264343436643332643830616266 +64643763363537623166356635353233613334303563363862613634326537623530393032626637 +62373339643439323464313037623061393830363236656533623866313435646438643962313733 +34633462306566396437303735373561643361346662363531616161616662326637633130653038 +30613336653938333636656265616563386463353630623135666335656334353561653530616336 +66333432636365313061373066343031626663353163613837663761396161346666623838626333 +38333731393461663737323030623637393134303936656438393266383732393138346639343062 +39376638633065656631373630613837316665346130383239663164306631343364343264653665 +39333730306232313863363661373035353866316632626464363832383130626538633836313338 +62643561363464336332306264313266353332613464316232323833636634323566303136396264 +31613834316437363031656532336631303961303730396265376330633562343433356462376637 +36633336663038333966343739653533306432393265623264376366353863333062656639303132 +31633766343431326361613762663438393331663066623361393930343664376162613431636131 +30393763336262303738376439346334623134303836626564646339623830363834303561346362 +31353835393033353865376532623530633139333731326335333238613536323861396662336134 +61633139346364396238376637663937613762396337336532366532393265656132303534633264 +36386331356133666431353334393664633239643866313164623939633232396133356236356236 +35633439623838636436353331666434353037613932663030366363663133393564383537633339 +62663035363863396262376132383730376436366538323833306134643235393938656438613436 +33343162356562313436333139393162303337363830643039306432363539653737613666356564 +61336665333837323262656331653437656234383038396265366131666331666161373433376336 +33343032393263623932333266636563363236366433616537343566636266646637373134643663 +33626232626336383038303132326133323833363136373738376331376237313166643661653132 +33313563653832626637613065616463663164343463366430353762616365633534303538353333 +31303264623564346561366463623038353330373233643964333932383934336465316437626438 +31653834623133656330653637373764633466656466393731383933393533333437393536373830 +62656461343733363932316439643439396235353630613631303034316239633237643235616266 +63323234356131386366396466306336633063616630643734616532666637393363633766313839 +61326237316433643135356561633062623237383738316139303636353566653031646666633434 +61326639633633633633383532656665333261613162353132346662646266323930656233323132 +34303433656630616232353135353065633236643339373963373963383061356131393432333834 +34323864363135333036323233313130326565303730323361343361346239646662316533626535 +35376336653362626333323633643462656139303763626464613836666630623262343463623430 +64333037346462386633306361393738643766643966343465383237613737303134663135303436 +37663333646461306564356633316361656331326539376465663132313966333938323633646162 +62343732313433616338383163313337326239363965393538396233323764613562356637373433 +62336233353531616436663862643930396431343264623262376433366463633765653761336638 +32623766393634376232313535373937323664666638396134393834356537616239366133353164 +65373637653332636639363663653566326233356534313137343666333230316332323134336339 +31626330396331613637373335323734666338373530646265623539623033653838633037636537 +31653833383765336632363766666234323666356339316561373261383136616431316134623734 +32326638323235616532383061376262383161643065356336376262313162303061303132396666 +38633839636164633831346334313633366337306466386235313062386166376535376365353132 +35653739373061636437373035356438346166636265326435316664396330613036326662306334 +36356239386663363236373361366635363338613338383863396566613762306561323738383137 +37643937656538393065636263633166663935376132396630386261353466613830333138323935 +61653763346632346439656534373033636337393038636432643864376538313863653439363364 +33303661393030356634643035336534373863303161663436323938386661346636346337333363 +66396539343531376336343733373161323537376464666665626230656635363665666661653537 +31303064333930316534663064323638663137343364623933333238333838643366386633623634 +39353464663137326435346663326563656639626638333466323335353862663531613531643432 +33626438336561633464646464326562393663623431396239336565653934356530336335626235 +36323235363432643032613733666562373932626162396431383965313237663835663134303332 +32373365613238386438626564346261346236636264376365616133623236633834303362353535 +31383138633161613236353762346134633562396661646330316361633361326465316634373039 +62313934346535343734383139643364363632326561653430343637303131306166666163616439 +39316531353433373066323733333436643432336332393062616633383538613238306363383765 +31656532323631633932636631636236346265666462336365653066353362373863376432653935 +31623961333739323466663261363564353936656562303663356430343637663266313664336631 +35613430376330373462656538333662623737643839386532333837396537363235393930346465 +31633937646365623334346431623263653834303566643037666339383034663064333634373933 +65383835386164663436336635633232323034313563633366326661353163363032623738316633 +36366665636337383539373233393935313632643237396630393566346366633537623139306261 +36376564616332616264336435663839353961396131623362306631363533326230623538633364 +64356232316533313566666332326166303236613865653138303830333963373433376665633961 +32663334383530303639656464393662366465613031363865656632396139353566313966373232 +34613964623163353965393066313765323162633262383035323265336361326533353562623334 +61356532653062333436326338373261316162393137303132376130383432396363393537386336 +32633834306361373435386162343531616661633362386535666438336263653637346533386161 +38643265633965663065383664313839633636303932383736653330366533386139393161393035 +66643838386132366439653363613464386532633431393633613438626364366666306137323461 +65643539373532333764383136393237396561643935306165336233653033646639366534376634 +65663432356663376565643033306231616531633731323061383363663965653764383466363262 +31633934376634666234636337326335613764653735343164363830613434626366663331383138 +36323736396430363735396664303565663435353239616462663530353034363961643430323563 +32613963323162343931343030386361643333333637656234376165313333646639656634356338 +62393363333739333538353632356337316461343631396235376539386232333465623363636638 +35386565633039393763616134333230353963663664353662313062323863393964636663663737 +65373635363039666265303434633839633466663331656232366630333437343730353366623838 +62393236666230393234633539353435366138663934303565363161653731343234363865306564 +38613635356537653733346366633133666538396263336534346139323636646336653835616336 +65663662656263626165643939346138393262326331326232323165383130363062323163333538 +63343337303234646138633461363766306639333837623037363965326130346361316432346435 +61323136353266396236666161626139306637343835356130346631343930623465376338653365 +66636432646430323965376366393331353965643464633335376131346633623161613035663039 +33363465623431633230313664333537316239653936323264643862633037376630663731356133 +30663337643036653234663732643163643463666439643865643734613865386638303865626236 +33623538383636623161656337346561656163343732356336303233316365643333623239633666 +30313634363762373832356437363731666432393862656265313737653038613330323664623738 +30366264653262336635383166396133656330376161313464336538383335316664336434633266 +33386237313362353662616462303937633730383831633337363837303664633234366262636361 +34366234386333343438326237616333306233323765343038393730376431356361326531396664 +66613461653533633561336537353534343239613837393965366634343365633063303062663039 +33306230396466313632306266373837343564633862353163623061653564333832333336376661 +64633763386463393338363130616666646266343733366434636564346465393035393763643035 +66656263306562633166323463373331636433336262396538346537303831363435613931623036 +36383032663338323263343632633539326135663931636162326564623836636666336562643132 +39393965636439313162333233653666643433666264346562323632626332396262633865383863 +65393034393638666564663533396231383065356363326566613439396339383034303566613132 +32373231343066333365363865376232376566663963323338623931643931383338616237366338 +61656364373935643061623162623831303936616665616163323566383864666565656334353462 +37666365313263623665373230363764633639653733613865356237623934303937643765383061 +36393833666434353761653436393565653761306365623261376333353139343639616366316532 +65636439633138303134663739363132356136653636303139336530323038383534626665666666 +63643038326636303438383864323365323439333161643963663832623639616531633939656236 +66646561313239643439633935303766356138653035316664623331356332656234396134336535 +34376263383637616634363035363130323265343063313463363663333365343766376538306336 +33666232326439386264636362313639303361326436333161313464343263326363373662613462 +61613038343164623564333862636232396132363037363536346239623134303866306162323933 +36613265323066616132346231323766633336333838383836393761363065373436656566663361 +32366463653432336539316364386234656430646531383263376538633832623566333330303636 +34333264343135623133643339656461333334343636623233313165336234396330383363613864 +31663239326464633861346661663463353464643762343130336637626262343763373835316133 +36356636326334363630613165613638326431613537623834643964363766333630383637373163 +38336338616539393630343432336166336332653636353633666336376130363630616662396438 +64383862636633393731633435383266373461303563386138616238396235373862656232386361 +38363163336465656134306634326465313561383931383934623835376130633031383935393338 +62646330316339303962653133636164643161383231653666386632386266646365346336386233 +37663163613531613630613763653037333066323635663037366163373334393137353866393831 +61373765366262363734646130393136613463373365343963616666383930633831343664633837 +34656430663939306632363762366438616264636561393366656631313561326235373731643731 +39323764663362333436356432383666666263613435333534666431393332336632626332363662 +39346631303366396232636264383236373939323932316432653730643264326235633330626466 +38323932613466656631623361616137313138316165343264663862623863376436303964636236 +64333137333764376532353865353662623338663135613338363835313330323863336239373736 +30616536663363363538623638313861623862313737316536303238333065656435353631643037 +31623137663530623363663030386435356537396233643435323437663030623361373430646636 +66393234326139636538623466666539306130643163623665386263343861333264396364323538 +34343065356365376632613461653661303335303030306238633136343766373235653966333933 +34663564643466646136393438653762623862643063336464656436373836393637313334343331 +64646331376233623432353064303063643937616630333832333261653038383362636163366538 +30633633306239613663356662633233326265666532323261613530333364623731343531393936 +66663464636433376635323361386333656633316430646630313864333031306164303939323433 +63376339366662313762393231343339666564386133333135323337346530646536343134653335 +65653836323064326235356361663262303537383561303132623930623466323763306639346633 +34336235313536633032653237346366303939363363633136346262633239386231393365316464 +32323232393864396437386538363164353234633233353738323736343533633431326235656335 +63633536626266383361363034323536636237323965336363323063333730326339666664336630 +37316461356134653234353834356335356633343164393636346234663533306530643634373866 +64316137373238376465373763313465343533373863623765343263636364646333353562313365 +39313737663466373362626435343231306430643461346363383036666635343661366264386664 +32373836396138363339306138643638653831326633633562333461303532383430323830626431 +64313966633930343835306235383131633634336465626366663835316363633933326666613762 +38333231303032383164663336316464333331313865336330643339393061336566653330313530 +39616132633938613863376435653737383166383837333065663233346362366563373039643065 +65626162336661653631326439363966666232623466333235663861626137396135396436643037 +34613230393864306166656266626538323666366538396434653635313562613336303537383461 +63316332353732326464623866333162666666363533326537386465316564343037613464386264 +30356663353638653836366661653536393266623432643234386632656131366662643565393064 +31613032366665393233613434313332616261653534393864313334306564356430356634643634 +39303239653638336532333032346566383933616264303163626466303239613932653862616530 +38353665353333373135623337316538336238383437643234303161633131363232333661333939 +65373030306662323264616634316331313864613364303437663664396664656333303061336164 +61363532343738636663643930393261666330326634343862303066383239363033656562313133 +39306466393035363333313933653461383762386234393038373137663431353638356337643464 +30623236326232636131653930376461316335636530666331343433393136366537393935623137 +36363663613763653530316538313232626136643930626464663530656562663766373463303064 +38336161396638626164613833613762626461393133393366383530316435663038633136633161 +36623038313635626163373636653230393063636336333566303265666164613831616333636238 +39633665313237363639636336643635343032326632663266396464373663666263393137636461 +63303561386132373134633434663533316430663362653030383630396533623838366236636430 +38343735623131383530383631336339316631653463313939343833303732666434663665353738 +36623330663335633534396162616438376538383638656334623335646430626133333738363261 +37333762616234363936373337663262373137613731333037303339333230303536356339656461 +30313861393264306437376239616637313832636430653535656535353664376165616666383133 +37356239303539633437363030626434656262643562643336623865386362333761623534653765 +30303465396566373134613866396662656238333738626666656438333364393731363937313333 +35356532303462613534353064656466386131303337326137393637376336303961363632633632 +62613133653862623136623030633732626162363136636433656338356166666136376237613537 +39656133646333313164613136313038643065623239383734613364333632613034323930306563 +30333230353531393030646635333761376630376663626463646465633237656136376464663865 +30626364313466646630643633373363393461393638613438613663303966366435623939663835 +66623633366237386331313631643933313662323833376464343931323539396133383566623333 +30333631663538373731663239623935663163653638623832386466636563376433376566616365 +30323335366134393566323934366437393261313135323265336135323438623931383964663563 +33613566346230333362646533633533306532663935373364306132636462653737316364306364 +37306265336632386335373466656331653938303930633733623036343539366633663032343164 +31623737303161336530373862666464393433313133643133653764386538353737373966386538 +34376539316362316633633363663032636635633761393733633362353263316437316564663536 +36303238343731336461353064386435326434303434356363653034373438306531656637303661 +30306531383063313864336635303663343530626638306134313965343235396634666466343936 +31363331343563373131373736643565393762323234333762303739613935333835363436353233 +39303337313866663539393132396562313132653336326433383738303430366633393436323234 +38326661353236303833646631623264663734336538373138356436643632626561636335356238 +62343730333066646262633137643238373838653739376333626364376262336430323335383665 +37633539646162653061366466373334336133656463613031663732656162383432323262393735 +33313963313464613637653231616636613339376464346534333931353333626635363364613535 +61343531363133626461663436633464323831616632656133343965363639363430633934323532 +39373930613732363131323763343363643232646364656533356661323464323038353734363833 +35656639333937646465623239343237393462366166313736383930333437376634633562363238 +33303561616232346632623331386466643666316230643831323534323261396665656165623563 +64313632343365373564363262386264393532336161363334613462623232376534633235396535 +61396436643430323335316135623136373861376236386639626233376231626662633739393466 +63623535356664353536663438326333653338633637353130646130613862326639343532393836 +35636466373863323563393464313364323630343565363066613536393330363066343939323961 +36333531323432356463653234633938643065363262396633386464346266336566346662303266 +39343961343064396637313438626233343165333035383431383539366139303131346464316330 +66666235663366396230383463363361643931663963643538633931386231626662643262643639 +62633830646532383834306465366561663332343133323361303465316164363964643037633139 +36383164623733383239393331363231353461343132653135613035633632663735396137663137 +35363062646137383731336134333231313734393331326632613636353335386632393165666266 +62306666613865386239663565613933633165396163653132636139386264653261346632316339 +65363834356135623366313265373235613965356565656564656339323438623739343032333830 +35383436323961346462323365616563616661633332343233323663616634383930353835633238 +34613331666266626362356364633935376230326335666631353965383461643837343437633539 +64343064353230383636346136373065316438653265313661616432663433383761333631666630 +66393436343864346464383961626661303864616562356563303737643363613736616238316465 +64653139643566336236373666323638613139323966386335336231336566353765663134663766 +65356465333061333232663232623364666430386435303634363234663934363062356334633732 +64373261623261626164663865646137396230623861666439656462316435653063356563373633 +31303536303664356165613065343632306437623831323661613236333761663333313964323338 +64646666333031346632396232356232343439313339306434653237636361306238376462623365 +34363231646239376636613237336238613634363336646362633064346137393663663738633066 +38633233346437396265396261353337626132386335613133353261326338393836613736626536 +66346261313133333362623639383930653930366236646232366132333631653432323039316330 +65366163323662626364363530373531626662663237646530343734323661323066613838336562 +39373761653936393132663031623438663739653266363833336262626162613039393465393338 +38666166333532613466346237633665303836353732346163323163653631343236313366356462 +65613134626162343336623334306433313130356634386336303937633462613534643037323165 +32346130656236663439393737396263393162633339613362636236646638656161393664353539 +64623138653666623962383835323831623730313133363264653337323062346133376262363536 +36333130343533363561663437336433646333303837386532666238623461383035636565653934 +64636431313636646137663261396231393131663234333238383036653033616264663439623533 +61383066326236373735333335346533353335373935323139313437336135636532616637633061 +39386331366139633663353332393037343162306231616162366231663032336533353537333237 +64636339303335316332366131316339373930313664306435393561653135623466613430303665 +32646630396136313161663466653032316436636637363365333032336366613666316138666135 +63336333383036303330376465393338616462393664623636333365363331323966356239376231 +36303664343065366336623766343365643232643663616232653861616263323365336634313831 +65383633393934393438613465656231343835356639336430613431336135666665356562663333 +32356366666232316535633461346132636233613365626466656338623966313363636530313762 +66663661653066306132396362616662653466626562656438366430326435346636383131383364 +62646565623236643732373665343661653131336237616333303735393266386661623361373231 +35626262373434643563383961636137326230336664636133383463663163383833343434613963 +33333037323133653336333037666634646462306264643630663562633361633939316339653036 +34623136646330383233626537623633376636363864346165346132636337383661303631663865 +33623038663063653631343437356637376361363763373266666665313533313463373137633238 +38316139323838366463396537626132376130643938346534643838613462333031376664336264 +38383430333462356264643363333363613638663636366238616439636564373863343164656366 +33393534613032323065373131343631306663343832316130383030306237663161656334396134 +33303533623435616563363035343066323831363339373666393535616538663835376261363764 +66646363323061336463666630376638383932346563353937386436653466653138643461623334 +36366339653765393633346563393766356434643839383333623639303435383962386330333865 +39323535663236623565356436653361383330643934646461313666643238336433323637333130 +62303435323337313136616662613836373334326237633838626234626466383636373363356131 +63336631666636373634326634336436353232343932333862396537363762653135643432386233 +36666562666531663237306464316665343636663363343431343765343462643739623862313266 +62306666653665336164393337306237363430346437353062373339306233646364386466633732 +36653837343430326130363662303830633661656363633738303539636361363638373737623030 +64373361366231316139353733323363643964653861626163316237323038303764353338633464 +38396137306133303561356264373863663834636131663437663466313661653633386564323631 +64336466353836633436383631313562636537346261626231343532333363636334303164633636 +61336235313363663664313538336436373739656662633462346362633435323534376233326633 +63396239643330313962396537646436643839373733336531653531376131656232633065393661 +35663138346163373435613866383266633631306161383730376139336335623864626431386661 +37626664303539623765376265653236396630346232613236376632396164393335383932383234 +31353032616233313938393962393865343537366662616233636439353737643835306230656661 +36303766616530386338356439326536613464306232346533616439626162643633343566633433 +61363331666330303739663938623239356530636633623234656263393933336462303036666235 +33623739333964313539616563623531633061396666666638613330343761363532366461346132 +35316636373662303665313539663539383763653364353930616338316534333738363633356432 +30646330646465303038386263616664376439366463623064363335313761366435656439623761 +30313539303738336534346132306161366663393764356538663032396164653761343964383933 +38383364653338353439303432303733376165356130333466663731613231373233376262373436 +65626438653631303265663939643965396132663163346631336161656365383731633338626362 +36623461373333323731343966623733373666383438396538393166326564326164303737613733 +35333036653861623430306162353564653132313235393230376234636435366365373536333331 +62623462666630363739626235643431646464663964323039303064663332643465633136623338 +31613935613964613632393637636161643062663638396234336364306434616431373965343439 +39346435323434623132383064333039346339613734636165383464666434633630313835363436 +37373666666161333063626261333766376637343361663464323963653132316266653437346463 +34373837353862343633323439663063383464333164386534623734653838303763353933396138 +38343466356436326434363534346663623863316234653736326437326466373536353032316563 +32633139383131663032633637316666383964386432373230623634313530343737623339646438 +35613933623764643466343236376130613463313431663332643435643534656461356366633736 +34333836396234396462336564643831366166333237626564373730343866326338353765346534 +37623362306634653366613939363139626564346163353062353533353565326461323633386636 +34663462616366323562366637613634663035646562653035633363373130386165363664396166 +32623863626136306439663361656263333736346366383433333131396639376230363733353233 +63316365636136373765326135373031303433663562613066336238653734633064396466613832 +33613034663538396539313036666239306562613765343234623664623366663566303666653262 +36393763613231376139393133376532613634633562303863353635653730373139383730643839 +37313762323232363862396230666430383134333761363835356233303935626431663930303730 +35633562333537613739343535393765336339396664323133313039313365663636393335613863 +31636636353466636364333664353432663863383330363166623338353631313335636436666431 +33623032383762306361396635383962306139373537636266376661396234326235353436356638 +39383738653864323432663262323737366132366139323266303231316637356362323435643235 +63613835643662643238383663353432306362356635343864396466623562616530626136656130 +64623165323334303530616463646661363534366130383665396431633032626164623234386266 +65343736613633393763613864343365303038656335613138306239366530626330353136313263 +31656161653833323961343631366133343238623535326637376331313964313262303961633036 +33653531303931643936383936376430643361633566646562373964326239303235646462623265 +62356139316432396331373737393733363834363161323830343937616364393262653662343463 +65616434396334363435616162396231323363336138623762306632633838633837373232373137 +31363235353634336536343165663238653163653061383762333930376232333666333962386333 +65333632316264346562353136643436323435613030393062663261653337373933646238346666 +31663938663231643439396361316334303538613630623734616361323565336133353035653064 +35366564636333346166383865373235643738383664303538393430303764376135323237653066 +30646566333232643765373635373236313239323466633965373630616163626465636435386461 +30303736323833626465613432343634306564303263613537653764376663393835656161386438 +35333336626638323535383230663330313330653661623963613861353636326362306263363331 +35386638656364343031376266343437323962353238656166323637613364636564613139356138 +32653132393233316162396162323133623438393563356435323436386164626239323037353232 +61656635346566336131633266623364316332386462303264626432373537336637663064393932 +37343662323764656230613634663436323862313165373735636130343361306335353265356363 +38626565366363643836333966383731613931626538363966336634393364633463343739393437 +35383131393264623934653337333238346635633266366337613930633431343735343961306635 +63396162623230326634376631313838383237643633333135666139393434396463613233373338 +35643866346138386466356530393563396263326436333730323330656436656637613136303039 +32623866343735663765366437346361616333623632353638623533376439343365666530343864 +32346431323930393636383464366239636234626563613330383830363066366333626237663566 +66626433393631643631666139393564323132653836646439623030343566356131643232623831 +32653035663964383465363365316636393836666162306136376535396638666163303365633766 +61393765346630376665626563653461613862376537303033356339363365633132633636326336 +35323363353866343533626531623730613635343832663133313764366364373531356432353239 +63346337663663616334303062333065336332313334303066303065323038376464323936363361 +38333539303936366564313664636666663564386265356234393766393162646531353066616339 +31376236623334333764373531386638383464363866316465636638326135303764643539396564 +66393531656631313831313864663039306561396138303735633962393634313565353834653235 +61306464623633363462316166353936356431653839383637663063383831663533353439626432 +39623038326238383839656532393661386439353133616437316336326234613962333665376135 +33323139346631383533613361376233383733333266623332393134626165666464366437396334 +61393962333734643766336464646232393964623062313164393631353834633939313532323665 +66396361353537653131373737323961356233373763613639646436306333623533363833303738 +31363261663632303439326336343662376435633065653466353062333330663738633538653763 +64383439393936643466643861393066633731366638323932353932393464363561643231643835 +34333833393363306533376336363435316563376333613733633764323430353637623066653834 +61363937343966373563353030313830343831393036343937633133616632346635666562343538 +37346131393566383938333430666465386332623333336635633366313438663662306166626239 +38373963636466346566643133613863656165383237643634653634633835636165626536363237 +38663932336132376131393239396235626263323563656532636264623731633165646431393263 +65313839633139363631323534653262646335613738353130306339626263613235353435666635 +64326336346362396133383136303338373035623430663732323361356133663961343130643333 +30666235643733333266346566353231376535636462356636373432333133333032343135323464 +31663464613365373638643062333163343566653839366130393332383664383137366466656338 +62383539366363323632393638646339643437323733343436313261356266366662343339353437 +65326532643139633865653765376236656566323934643835663135636632623865306133373333 +34616462633234613836383362376265356431646662336361353639393661373937353534373962 +62373238333238623862636230383762366161393232333231663964323961363465623137323332 +34646632373236666363366135356438303562346230343231326265636633343939306431383639 +63313765633334626631636135336134363234393262366666666638313662303034616263326332 +35396335306136343061323363333665623466643732353035666632393261643439373438623439 +36313130666231613065643561666263633638373439303035323433353336663166393137623761 +32616161653365363138343466613665313335363936396331656634353363336336643166646662 +66333638636166353130393039343132653431383865656565306132353934333561633037333934 +65653931396336643639346134326365343537623433343063616364643233356233623461316563 +61633765363330343536383065313835633532326336376433363331376233616237393164666235 +39343330663364323463363438623839323336633165646230616138393266666562366361363761 +30323239363437663062383339373338303636333432333336306364323039666264303261393666 +39376265396534373465393337623332393832633037356336636636653838313036303635613830 +31653766326538313237376430363262633162306666636634313366326233343037623536633032 +35383030646630343931313062353831386466393332323430656232653166373734386435346439 +64306664373238353564336130313531336162316338353131646666343937626166383238366537 +35313935653366623932636531326561663162656135393364323535386166626433393265323937 +37303536616365386438656132333130366136663233353331393066663337393065353931633063 +63653531653765623731333562326663386465353166633536613066623933356539373466663264 +38376361616163326265643261663237353334613165346230653133323366653438343135313864 +33613331396562323763333230393830316538323866373932363231383262363334616334323434 +63356265353335633963663638343866623163366366303666343762643064613361393430653335 +37333735333335363239363862353564343765373565393337623762306137393237323166633761 +64613130316566366131666237363431373834383465623738666530366336303834653861353336 +37646461383661393766363964343330653639333832616139393038626333396663613861656661 +38346665323964323133653135306134326339373463393866396138356366316539313239326563 +66653863356265316232316535353066366638633066333334643839376535613263376334363264 +36393935646238316264343531643436643762333365316530373632383361646533366661326464 +31396430373831313836383230313437383835393830643135313733306132326365323639356134 +63653834343335326632333333393163313136393865343134353434323534656330663736383835 +39383635643033663630393161653262373765336239373335363037363463663562613136353732 +65323437386365336635633865316235373630376266303230633861306530326535373631343262 +62343132313432363137666464376166663039616334353831306537356238356436383437333830 +35323262366261303138633436333235323537623664623562656538656465373935396139303831 +31633961373765323436303466623838363138343662323935396638613462643534323066366435 +66346134313132643833326531313663656638636564663336373266336336343037626434336534 +64613130393737666465373932653066376262363738356134343936356237303761363435643763 +31303135316361303438356532303136363436356666393932323233366164613433376261303363 +37653165626332333862373664303764313633326561643430353735313535383231343334323562 +35303034343236313062303434386539376137316135386135366161346361313632646238326331 +39326330646230316231663164666366643565613834313131323335663263633364323966356136 +36636233323733336235316263303864396239373737653534656337353862346537376461663038 +33373765353233623736313434333764373730663962383637363065326337313731356135626231 +36346134613066633864616639613866316362326564633665313065643130386564353530356466 +65636436343538356363646365323931383737373363613939393736333762383561383936393832 +66666662303361363535306264353661303063656366663362633662313237646635396366316161 +66643264666566356236643131663932656235383133396339303532386663326537626665356565 +62656230346332303836663165313939396139356638633939616464303266323762336564373639 +30356564323235663536643835393931373736356531353331373333303166613433393939316264 +37323738663566373565333131313437616561326561363362303161353237353830643962363563 +39346466303862643437386533653262613733356137333634383830343039363938626664633737 +31373830653062383263616164613261393065333734363632356435393836303561633732323962 +34363534343064336362633930633365613762616138666564313237376334356662386639306465 +38393638656136663335663530653834383265353666396431373136666663613938646231356566 +30333031333563373132613235313931366334333262353864333836656161336562656436633935 +64623464356266316330393739653336373562316266356535653031626338343762346463346135 +35303930646139643764383366316462663938363263653638373862336338333861356431623661 +36643363356331613335346166643334356534656462353961373563303137316263316466313938 +37303037636635643263636566653331633735636530636466623362643033336166386438393063 +39303337333466366465633636383966343362643233616162316565383237373866303532616139 +37363762313064636262306136643466366131363361663735663437653865646433323138616432 +65393638383933666464623062306336396239393633383933363339346662613632643432386231 +33366332656631363531323265366362376239643763356662653261366638353633353862623131 +35373664383839643165316363326334363134643465393264393666306239376230326461383666 +34393464626438363265336632623565353865643336373666323462616566303532623939643438 +36643237656332326661633966383561646261393432336336386564326137346161633636333235 +61643562626239396564326633396530653561643538393031626337623539386165353835343965 +34656533623338643662343233616337353238336534336566383731386464393632333837353934 +32363831363331303164613136303235343132663765333231666461376662306166626364616363 +36633831333539316638653662366364386135643135666264653936613763366239346464343161 +65626536383064646563643935643239346338386464306139373433393062353137323736646531 +38633039613963653339666463313663663065613266626463633432323537613836613438363538 +36613531326664303435363637333835313135313963333430626165333063343633643737383831 +39393764636233356636376266663434353566613437633263666239353334376636393534623837 +63346138343030643237616132636364343532393732663264323930333030396638643136623035 +37323339303332396638663135613863303439653631643232346539663262373965356464373564 +30383766343461333463633962303961376261376534373235613964303735666538623832653232 +65633462663962376163643839303235313232616662646166373938373135343033396565653439 +61356166356334343632383035376261633336336662643163396563663639336664306439616561 +64353865346531396132363563323964353361626534303230616634633335656135323236373061 +62386339393733313263373461306435656231353739303130383861626237623731313263363665 +65656336373864623538356366653538316639376538326330366264323739313235393033373334 +64653962303339623662653438343836626566336130323265306463333734313730366237613565 +66373764653230613836653630383362326434663639336662333435383930303766343361663764 +34653766646636363637613839613633666333623330383133333139393336303933383331396134 +37303164393462373532633138303061333638313833303761323530616432333631343235343036 +33316161613833663765663761316461336263393530366631393933366563313233316565343838 +39356338333531666131353130363938333630333837303337653532356663313132376264333734 +66613364633934623766356532623437363263663035303734646632663565616666303138333432 +36613265633838383832626163653265383435316566323836333664373933616161326665383138 +31646235343131303433643766613666656338333462383233326635626664386636633436646561 +32326532303063633434646265623933376635643430616532383339396362323937666164323431 +62613530393335623563653734643663356330363330383864346139636563323631656138663330 +33623662643034373132613339613664383531386530613531626564633233386438383733313563 +38656561613632353931393733376436613165366233656239386463326663333038343061306562 +34636561383937343334663365363037343038326239646538363336653064326366653733653564 +31393162643333666531343135373266356337633164663665383139636266613336386133616632 +30303461373836613932343336366133623930613966666131613463353832666631306566386563 +65363434396164373137356666313433306363363966376536383933376238366137366237373137 +35623562653361313361333365623163626632343966313336373631653436306161623339653435 +66633561623737363663316364356463363365623239353739356534346635333861633136346563 +30363262666166653033313131616238623835343365336264663331633531653464626637633764 +61613365616663326436373564313335623965363365653662393336653434306338366632346339 +61353439616362303866666564643231313835306133646137313166646661636664353664613934 +63623539306531356139636332653231383265313631313966366662653462623435386536356565 +61353937393665653431646630656466376666336132316330386463663431386338656466636639 +62623861656339383337363034373465356562636463336363373461393634356337666431646531 +64306133613637383463323263303965346139326139623736336232383335616338636163613932 +37336235313762343366636430396432366336353062376638356564633933626262623634353565 +37623931306364343437636535633436326264313562353235646166393265306633313239643631 +30336534383762616231306238666235336530653734333435343233623936343630363131666239 +30386133316565323863373936623239386566373532393737373239333061616633323564613566 +64313964323634353736306633383635373463623130326363363031306531323533663530633036 +30393637656337363163623932346233346166313534396565646530333666623932323530313863 +32356266633839306631613338316633383837653839616166343133323263373731616366376233 +39363166653136656662613566396530323935316165663063653438343332326364343430356439 +62656331613139613836646233643734373836343832663861663538306531646138353366313330 +65393465666664613966356136383165313430333236363631336434653233333233633366383733 +39616630313635643238653161356565366139626636376264646464353939613562313935636533 +33666563613733393230323634386564363334316130316563666233316533376435623133636433 +39376335386536373265666464663136353563333566633133643563303564316632616165623638 +65323231393939383632346532383934626135646230346561373732366264393766613664653933 +61643565633263646434623436613164616365303166636362303765323130656637383736336133 +39646163623662303464366330366361323563373164623264666233356231353165303565666664 +38303533363435323465383636656130373061653039373839643034386666646133623138373734 +30623765343937366637626238376234373333333838303864613263386363623539623438633935 +31363938323234353330633266646430363631636537353565373534653163323633323866353433 +31646635653331393966666136663338643561333338656337366539366231656663323565333963 +39333733643063393731373030313861343262653464616563656435326561353862616337346338 +62666439323762333234306264396230393466396239366135396433363434646463653435653933 +37323230643561373431393261333330373939336166333331316563316638393965376534343538 +33333137393536663161396561306565343231393961383365656162643739366235393936633662 +38303566653666656435313134373766356134636361323665386664346364303834653138616630 +64646538613563353937396539343864623564636531356538313334393063663137316263636331 +39633030653339313535626335623832626166623465303763656537373032393132336432356265 +62323534643735366665373162386638316336616536633336633165313563316365656164376664 +61613563313131303662333861663830613030323832653966363535653839396666363331643363 +66313130336638323430346366636236643931383831393530663766613933383135663266626165 +35376536343731623863386539386238306636373332613234653434616338653239613735313335 +36326662336665666537326364346139303366366130306236653863353662653739323738663164 +37393230393634633163666264343530313865663334396630306334313133663364663764383036 +64666534666434326461316135643039386238313566396136303630323761646133373266663561 +33393738336134333231366532383330613733346530393166303030336633376339353265393762 +65666463393933626165303836623761333439336162346134303035653864366232383462383763 +32646664653665313531633639643165393733363865623536636166616466346661636331353331 +35386235383336343838303831383761306261346461303934623932366130316333636264313366 +31323262383033666438636538646363343436396263363161643438653834626631636531396131 +62356438343835326565396561393332653135373037356537613430366664363431366664313733 +66366139303937333637353432326139363033326133353931376565363262653034333366303234 +35316539656237316334363639333537653439303532623636623931376639303530633035346165 +65626239343735373664613335306637363436663130343063393062343535666632646338616332 +32323765366235616266376266303161666333356439336231383266393633663866383534633031 +36616264636465653033343566636364323936633561336263373837373234393530323131653964 +35636539333934303235356439616661366264656338346434653939303861616138323865313665 +65653235326334333662316632346535373733396664383265346635303561343664396338363939 +31383532353237386265663063373765343066333437636532613338336638663031383139366264 +66313863613936373730316166616436353065313664306365306330353638376434663438333437 +62666464363335663464663665643333336661313732663739373931633031303332653834623933 +63383236313661633739313865643235656561623462633731326434363236323864396530316465 +39363064623131333236633336613566656535386163323936623034666466626431666462623862 +63336161373730343566616164393837636136373636313865373133333865303731313266653266 +35666666353264306438363232326439386666353462623361393734376238303230663037356533 +35336265353032376134363663613165363162323162373336386231306563396335396665666264 +30386466323636353938323137616163333962363765376166383335623838396537613266396661 +37333636393136353662633834343565663030343933623237373032346532616434643666393532 +66613634333032663335626334303461616136306232303038666133663431333263663534666561 +61646663653432353834636266333636666135343461366164313735636161356332346632636362 +34303531646130636461343631626464336236383336323735363236623837323832393933373764 +61363330616334666661383232656365326432323261613839383062333463666366633562646564 +38633161306361666364306662613835386165626664353865303438653938326236633830303836 +63313666646531356261633066383535636261633362616566326232326339323338333433316134 +35663038646661386134326637376332373565353661386237363565386134373136613439653932 +33643931646363353539393963393266306664393161346336616236333932353661363662643463 +65393939633363663465623032323563363630343035383562346535393537343633313062623061 +65643830356630363230383835356439666434663966356231316265623535646639313164393335 +33383764333561663637326563376163623935366264613565303666616565623161643065666166 +63323132653866643337383161396331303662333032386461333333356133383735663266376630 +65396539653362383132353237643332313735633164313439613035366465633833326565323933 +37333334356435353937303930383531323762636539393264386431653261393237333732366464 +61616638393230323164396131663837303463383765383836646537323636353736656438363065 +63663837656165306232373935333430383533353430313331333663383763336234336430393530 +34303733663631373336303138613731386530616635303333663938656531373631346134393634 +61383661633530636562323736616562396232336532393266613964373236353036356361613661 +35323939623361653664383931366535653936303961356561626338313431386532613465383763 +65613034336530663762363334353636616264663230346436653731396330393931656663326639 +32353164336336363565653264646336323234383566316362363637363239663331396332646261 +32343938383336303631303833306134313834663765393730366336316661373963386136666162 +39353866643764323330356435316638623631366230373036346539376661626534333161316164 +32653966653762316361633038363735653061396238643032376630666238663465646561626166 +39336266663330386365366634313236353161623161643065646166333233306332663635356636 +65346662633134393239373336616137303566613131636138353830653766656435343930333237 +39363936613763613235373831343334633561396637306530336133613864396334656361383236 +30613863643564353732653531643730323832326532626436373537346138323461633733376633 +63656338343432353932343865643464373332306337366639373064643634646132366337653966 +64613265373065316161316130366464623431633932306661306265346164363538613536353139 +36653836316132323534356662376530353063326334306132646630373037373530653539383833 +31646663646136303838326664323739646638383064663663633666626638616238626631303431 +31336333346266396433383532393730383462303764336462313936323166393930396136303734 +34353362643663646531316131626665643935366361363635663565396532373165373738303236 +39623838383338356539343566666336336163656633393931646434653932633430636131323737 +31363464333738386362363665313837316166626335383734653262323537653435323337363666 +30613037626566383263373762316366353431393466353532616564313134656661303039613836 +65313965343930333334666265613262366362396361373434346132643137353736653030656337 +33373066313463636631393564323237653438653634616233363638626166396332373335386639 +63323766646433666162343630356631346136383733383762313539333730343535316566306435 +30386331396462656634336130626565643539336239636230343166626638363064366639396365 +36386661646363306430313365386262326531313061366461366538623035383033346364663438 +66643963643639616662643566376539323964633365626362333938666532363962613038303834 +63376331373133656338373630656137363038336465653263613038343131343539663865643432 +32656538306534636436313465333933306262633563333161313734373438626264326639336438 +61346562633439333861346237633561326562393139346339366137646539353166373032646338 +35613161643463366136646131376465306636643531393762313233336334373732643834343434 +36653865343839653632363463373761313332326636616433363362656334306631353431323530 +38343464653634356264666664646565653935376331303732373264643364396564623263313930 +32336637333634623664366238353563613439393935633962643439663066393562376537343261 +35333432306435646232636235663737383036663064656631616639616563623936666365646137 +34356433363932646164633663306338623461636538313135653335363665623462623336363633 +33326538343161366631396130303935653064623865383934623065303030366632366637373563 +37353463653431366530383036336165323733333834393031643662646633326262393333653562 +35616262353432323366306661313966623437393363303862373365363562616163303633633339 +32386233663534613961643139393263363731633065306138666266613265356562346538646533 +63306231333634306339363734323739393135643466663461376464323530663533376266613862 +32363563366639376364323439633639663865643739363238393061346335353264383635653166 +61666662393933376566356435333265363936666532613635663534303464666437663233346239 +32346231343539363764633761393831613766613235376233656132333836323666666261306239 +39616366356166363539616366346536353635396438633030373665303236623033636439663061 +33633038326635353066616332343931333037396635373163333330643133613566623066623966 +62346166626332343062356665626461336537646561633363343663616633336465363836353164 +35396666323866363862643966643162316566363863366431653338326664643839613037663431 +66353165303164383532373064313564336639303562303432326131323565653762373139336564 +33626232383364386139386531373064656535643438383366353366313733393565623432383763 +62613532666234643264303838626338313839333833346639623562353566386436383663633930 +30643433366264373735623930316330663666613065343062663563623266356132353136363938 +39346438383833306564323064316462386134363937323433373663323437666632333265613963 +33646463356564353438623432656436393631623330663630303761363235333539336138396431 +65333633323236353832383935313532303638613133633332663137663831366532616134353061 +65633162353037643332313661336161663730666332646430656131613934633662373539333539 +34613831386563633731363662346635366635393632333731616462306230623761373038636136 +37613861643337653461303564646135396334633433653736643963343433643435663264396139 +63383039636364373830643136393965313234663263656339346437376462666533366533633739 +30633935323836393233316237323538376539313432353062356337646639326634366630333138 +30646230663563613132323036653638356138646464363262376136393536666138656134313935 +61643034356662313361613634653838376239366637366466343562633336623736643933366532 +32613134306636306435393163326630313564613364366564346364393534653961323338386434 +65383536386231396533356433306135333963343463663033363264653366393663616563303066 +64383964643038373739316537343734613163356438646133633230376462663933373764383762 +39383866326337633436323161303361333464383263363061313030333462326164363537306261 +33633038393862646366353732383134383662373636363133333932653036336462383035653562 +62383464306264306339346136626538373835383630663165343663643035396566316461366263 +32636433343531356364663063663937656263613665386263646230306265666164396265373432 +36393035343162386537646331303337396465636564353133323434376437393833363039646233 +61393065383839346330656533313433363738376339613337396662366533623239373764633264 +32633834326166356230626632663966633031623536353831326464346564346664653131316637 +32306635373066373438303962306664306533336538646338303465346630613835656337666265 +33643131656439616462633665363637343935363439363961636265376131313030653032353564 +36643438396237323136313538383962346331306330636664656661333531356363343861376539 +63366462623362303338353262343833663337633837393466363430626264663439656661373132 +32346138393834313838303635396566613162616538346237373339653332643164343939666132 +38646365363639383137373164633135336562376530343865373332636437633066373461643936 +64633566383163623236303761393761633839613238386430366435393466313162636234323466 +66363565323330646339383066316564623539313262343865313565613533313930363232313533 +32366461366439616164653665373365393030353364666430363734373466643236313464333863 +38356232313333633137623139386133653732643364346139383835303230306434653939653730 +62656462323938646532376639366464666139303166323964646366376662613931346437623232 +64633238653564363638643539303438613062386532336662313636396434346337383864353639 +64303039393962316135636131653834373531623632343265323664353566313333633530326139 +62653061303431623332633639363535366638613634646331623663383031626264373130336538 +62633030666561386330646565363464636232373534653666666333646331653537356663643564 +33613031623235363536653462626563626364313639623339336463633833323435356462366164 +65623035323332383537346665396263333765333039646438393334656430613937366633346139 +62666337313963333437323537623563393539343166376336326135643537353531633331623332 +30336463633834363963646638333462383862336363323166653333336263313730613734356432 +38353739373836393838643931643666663330316464633261366131303963616137376631313737 +64353661333261656638376539303465343731336430386463393866313766386164383438623332 +34663634663065336637343961623733353131333331373232663632393239333430353636626137 +31373739393762613333636262633462626364663432356131626138386436346539336638363938 +37313833333064626561393937636435353465663565646535373765396661646533356132363130 +38616230363562633137656664663561373066373534616461383932666333346238343465376634 +30636634363530666164376465363533383436306163363137303239343230633066656531313766 +39316266313336623164666562313532656530343165366165323964313739386264633463373634 +63376164343761613066643831643162616564626561623064363166356332396334326563393330 +32613837373932356234306634356634393762363136616431623635383763613364623762313363 +35343366323061366430383665663032653566376561376436376638353065343137333734353430 +39346261663135373239666538323138316431363437616362393739376432386235396330643964 +63656138303835333666623034326434663662393936326165383432373637633431303435346434 +37326565666265653661643361613663323132643831343937386233306661623765623332356463 +62316134653133363134653034333038616363363261316565666565393939323462383434386264 +34303063373362356238383066306530643830646431336561323730396130376663643762616134 +32353838383131613638356633353236623764323862646638336132343062313165306333343430 +66393034346665613563636238376162643362333531323563383963346539613762336561326163 +61366331643632376662636139646536633136326634616131396563386163356133306631663261 +34323864383233313431343165663639343436316339383430666336313035653936656631373038 +66323933386133306332613563396666363762383366636334653735366131323136343935396534 +31646336653566386666633039633238316137663765646335643734353634323566613934646464 +63346631636538653633326266343461636165356139366265393766613063303663343831376333 +32343432623762656239313138306134343030663862336664633633636364313461343330396263 +32333862653936336438316539343438336631333466623464376431633464306464343431346664 +32323762333231656437366639626531616161663438343361373731363063643230343365353931 +31656664646261313763613662366536336530636236633662323766306164623863613338336334 +64356364396331633331373966363735373063646632326265626434613261653864323234343264 +38333465333735303161613064653635326432396230336366363135346236373637663239626337 +30323730316237343631343030306139613062613063336662363761646130633866626434323839 +65333037623933626363643835326637656534393137373561616539316332353136613037363039 +35613934386563643039323836346230663831623563346330306466336135383761336535353463 +66316639363737613664633265343937323532386132623036303130393262663561373764376631 +34633130373365633665663464633236666530353936343833373465643962643330363030393566 +63336361396264326261373139666533356566336639306239303533663465386631613532663661 +37316632326433643232313462653537333262653463663032616233353866386333636431663964 +63643565373065373634326135666132323731646664313439623832326134646465663237653737 +63333166613536316262633536326565356235396637396432306132303663316332616263393537 +65353564333032343732336331333530383763613662356262663063623361363232343161623930 +36616262633665626231623136393965383333306166643135383366663536323036366231336361 +31663830336464376235663261393233623263313437613661313233613838343762643833343961 +66373463316337633831636539353831333037663930376230646436343532393331636462383264 +32306664303862373632313730663437633230376163313764653032383233646137333761393239 +30653530663636353635383239623661636332326365666462613065653833373261396239623733 +39613232353366316463363634643834353964633564333862653431653562343030323635326333 +36383630313365323865386536316634326366343539653735393364616633656630623864356164 +36396565363566346462326338663936346334633933353463613136343865303862393734386530 +62316533343163383865616562653837623830396635343037636132383261643361346165313039 +33643334356636373239396161623765343031376662393363663863373464393031326632656138 +64653231306361333834373466656338613464356163383030366431383763343661623865383933 +62643931366562306238346461633239616435313961323661323835666563666532333832663565 +35373635386266643561373334313963373365353633353436356134346332396434306564396335 +33373033333432316264366133623732343264323033623534346237636463316261623263333263 +37306165343264626332363565323463383038626263323466636465616432643133323134663664 +643831633765386561633436646162356330 diff --git a/roles/custom/fvs/files/lmn-patch-dolphin.sh b/roles/custom/fvs/files/lmn-patch-dolphin.sh index 60707c8..fc3c0e7 100755 --- a/roles/custom/fvs/files/lmn-patch-dolphin.sh +++ b/roles/custom/fvs/files/lmn-patch-dolphin.sh @@ -49,7 +49,7 @@ fi patch=" --- a/$file +++ b/$file -@@ -98,9 +98,45 @@ +@@ -98,9 +98,33 @@ true @@ -66,18 +66,6 @@ $HOMEONSERVER + true + + -+ -+ -+ Nextcloud -+ -+ -+ -+ -+ -+ $IDENTITY/${NUM3} -+ true -+ -+ + Network From b4caaf036df5eb9e23f6e7e2992d2f3e1a64f38f Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 6 Oct 2025 13:11:04 +0200 Subject: [PATCH 35/73] Implement timeout for krb5 ticket retrieval during VPN connections --- roles/lmn_vpn/files/10-lmn-mount.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/roles/lmn_vpn/files/10-lmn-mount.sh b/roles/lmn_vpn/files/10-lmn-mount.sh index 6f42725..b19724c 100755 --- a/roles/lmn_vpn/files/10-lmn-mount.sh +++ b/roles/lmn_vpn/files/10-lmn-mount.sh @@ -13,19 +13,24 @@ if [[ "$CONNECTION_ID" = "VPN-Schule" ]]; then # Exit if server is already mounted findmnt /srv/samba/schools/default-school > /dev/null && exit 0 - if ! klist -s -c "${KRB5CCNAME}"; then - #echo "try to renew KRB5-Ticket" >&2 - #sudo -u "${USERNAME}" kinit -R -c "${KRB5CCNAME}" - echo "KRB5-Ticket is expired. Sleep 3 seconds and hope it will be renewed after." >&2 - sleep 3 - fi + counter=1 + while ! klist -s -c "${KRB5CCNAME}"; do + (( counter > 30 )) && exit 0 + echo "KRB5-Ticket is expired. Sleep 1 seconds and hope it will be renewed after." >&2 + # if (( counter == 10 )); then + # echo "try to renew KRB5-Ticket" >&2 + # sudo -u "${USERNAME}" kinit -R -c "${KRB5CCNAME}" + # fi + sleep 1 + ((counter++)) + done echo "prepare mountpoints" >&2 umask 0002 mkdir -p /srv/samba/schools/default-school chmod 777 /srv/samba/schools/default-school mkdir -p "/lmn/media/${USERNAME}/share" - + mount -t cifs //server/default-school/ /srv/samba/schools/default-school \ -o "sec=krb5i,cruid=${USERID},user=${USERNAME},uid=${USERID},gid=${GROUPID},file_mode=0700,dir_mode=0700,mfsymlinks,nobrl,actimeo=600,cache=loose,echo_interval=10" echo "after mount" >&2 From cb37d52271ba60b54127ccf2cce535aab483083f Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 6 Oct 2025 20:13:58 +0200 Subject: [PATCH 36/73] Eliminate bind mounts that are no longer required for virtual machines (VMs) --- roles/lmn_vm/tasks/main.yml | 26 -------------------------- roles/lmn_vpn/files/10-lmn-mount.sh | 5 +---- roles/lmn_vpn/files/mountserver | 3 --- 3 files changed, 1 insertion(+), 33 deletions(-) diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml index 1ab1386..44c83a6 100644 --- a/roles/lmn_vm/tasks/main.yml +++ b/roles/lmn_vm/tasks/main.yml @@ -29,32 +29,6 @@ # insertafter: '#auth_unix_rw = "polkit"' # notify: reload libvirtd -- name: Configure pam_mount for VM bind mounts - ansible.builtin.blockinfile: - dest: /etc/security/pam_mount.conf.xml - marker: "" - block: | - - rootansibleDebian-gdmsddm{% if localuser %}{{ localuser }}{% endif %} - - rootansibleDebian-gdmsddm{% if localuser %}{{ localuser }}{% endif %} - - rootansibleDebian-gdmsddm{% if localuser %}{{ localuser }}{% endif %} - - insertafter: "" - - name: Use umount script for proper cleanup ansible.builtin.blockinfile: dest: /etc/security/pam_mount.conf.xml diff --git a/roles/lmn_vpn/files/10-lmn-mount.sh b/roles/lmn_vpn/files/10-lmn-mount.sh index b19724c..cabbc58 100755 --- a/roles/lmn_vpn/files/10-lmn-mount.sh +++ b/roles/lmn_vpn/files/10-lmn-mount.sh @@ -29,19 +29,16 @@ if [[ "$CONNECTION_ID" = "VPN-Schule" ]]; then umask 0002 mkdir -p /srv/samba/schools/default-school chmod 777 /srv/samba/schools/default-school - mkdir -p "/lmn/media/${USERNAME}/share" mount -t cifs //server/default-school/ /srv/samba/schools/default-school \ -o "sec=krb5i,cruid=${USERID},user=${USERNAME},uid=${USERID},gid=${GROUPID},file_mode=0700,dir_mode=0700,mfsymlinks,nobrl,actimeo=600,cache=loose,echo_interval=10" echo "after mount" >&2 - mount --bind /srv/samba/schools/default-school/share "/lmn/media/${USERNAME}/share" SUDO_USER=$USERNAME /usr/local/bin/install-printers.sh elif [[ "$NM_DISPATCHER_ACTION" = "pre-down" ]]; then # FIXME: Only umount server when Wireguard-Connection was the only connection to server. # Dirty fix (works only in fvs-IP-Range) if ! (ip r s | grep "10.190." | grep -v wg0); then - echo "Try to umount server shares" - umount "/lmn/media/${USERNAME}/share" + echo "Try to umount server" umount /srv/samba/schools/default-school fi fi diff --git a/roles/lmn_vpn/files/mountserver b/roles/lmn_vpn/files/mountserver index 71c61cc..708a26e 100644 --- a/roles/lmn_vpn/files/mountserver +++ b/roles/lmn_vpn/files/mountserver @@ -3,7 +3,6 @@ set -eu exit_script() { echo "unmounting media - terminated by trap!" >> "/tmp/${SUDO_UID}-exit-mount.log" - findmnt "/lmn/media/${SUDO_USER}/share" && umount "/lmn/media/${SUDO_USER}/share" findmnt "/srv/samba/schools/default-school" && umount "/srv/samba/schools/default-school" trap - SIGHUP SIGINT SIGTERM # clear the trap kill -- -$$ # Sends SIGTERM to child/sub processes @@ -14,11 +13,9 @@ findmnt /srv/samba/schools/default-school > /dev/null && exit 0 umask 0002 mkdir -p /srv/samba/schools/default-school chmod 777 /srv/samba/schools/default-school -mkdir -p "/lmn/media/${SUDO_USER}/share" mount -t cifs //server/default-school/ /srv/samba/schools/default-school \ -o "sec=krb5i,cruid=${SUDO_UID},user=${SUDO_USER},uid=${SUDO_UID},gid=${SUDO_GID},file_mode=0700,dir_mode=0700,mfsymlinks,nobrl,actimeo=600,cache=loose,echo_interval=10" -mount --bind /srv/samba/schools/default-school/share "/lmn/media/${SUDO_USER}/share" echo "Einbindung erfolgreich!" echo "Dieses Fenster bitte nicht schließen!" From 8ec701595ad92db26236d001de163e622db624ae Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 6 Oct 2025 20:20:59 +0200 Subject: [PATCH 37/73] Prevent simultaneous logins from multiple users (multi-seat mode) Because the home directory is mounted via pam_mount using the user's Kerberos ticket, simultaneous login of two users is not possible. --- roles/custom/fvs/tasks/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index d5830d1..bfcc436 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -182,8 +182,8 @@ #SingleClick=false [KDE Action Restrictions][$i] - #action/start_new_session=false - #action/switch_user=false + action/start_new_session=false + action/switch_user=false #action/lock_screen=false - name: Start with empty session by default From 9a83ebca6b9c8e6c532ae6ee61b6842350d4da18 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Tue, 7 Oct 2025 10:34:53 +0200 Subject: [PATCH 38/73] Fix screen resolution for C157 --- inventory.yml | 1334 ++++++++++++++++++++++++------------------------- 1 file changed, 667 insertions(+), 667 deletions(-) diff --git a/inventory.yml b/inventory.yml index 331d652..c254b40 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,668 +1,668 @@ $ANSIBLE_VAULT;1.1;AES256 -62333531623234633937313135396461396664613262333963346130383766376139623261623535 -6635653039643930626337376365653930653462633038650a653862313164313438643132383931 -38393162636366333635613537333163623365353934333463613233303436656166393631356262 -3566363139316332350a383134323138393663643163336663303264343436643332643830616266 -64643763363537623166356635353233613334303563363862613634326537623530393032626637 -62373339643439323464313037623061393830363236656533623866313435646438643962313733 -34633462306566396437303735373561643361346662363531616161616662326637633130653038 -30613336653938333636656265616563386463353630623135666335656334353561653530616336 -66333432636365313061373066343031626663353163613837663761396161346666623838626333 -38333731393461663737323030623637393134303936656438393266383732393138346639343062 -39376638633065656631373630613837316665346130383239663164306631343364343264653665 -39333730306232313863363661373035353866316632626464363832383130626538633836313338 -62643561363464336332306264313266353332613464316232323833636634323566303136396264 -31613834316437363031656532336631303961303730396265376330633562343433356462376637 -36633336663038333966343739653533306432393265623264376366353863333062656639303132 -31633766343431326361613762663438393331663066623361393930343664376162613431636131 -30393763336262303738376439346334623134303836626564646339623830363834303561346362 -31353835393033353865376532623530633139333731326335333238613536323861396662336134 -61633139346364396238376637663937613762396337336532366532393265656132303534633264 -36386331356133666431353334393664633239643866313164623939633232396133356236356236 -35633439623838636436353331666434353037613932663030366363663133393564383537633339 -62663035363863396262376132383730376436366538323833306134643235393938656438613436 -33343162356562313436333139393162303337363830643039306432363539653737613666356564 -61336665333837323262656331653437656234383038396265366131666331666161373433376336 -33343032393263623932333266636563363236366433616537343566636266646637373134643663 -33626232626336383038303132326133323833363136373738376331376237313166643661653132 -33313563653832626637613065616463663164343463366430353762616365633534303538353333 -31303264623564346561366463623038353330373233643964333932383934336465316437626438 -31653834623133656330653637373764633466656466393731383933393533333437393536373830 -62656461343733363932316439643439396235353630613631303034316239633237643235616266 -63323234356131386366396466306336633063616630643734616532666637393363633766313839 -61326237316433643135356561633062623237383738316139303636353566653031646666633434 -61326639633633633633383532656665333261613162353132346662646266323930656233323132 -34303433656630616232353135353065633236643339373963373963383061356131393432333834 -34323864363135333036323233313130326565303730323361343361346239646662316533626535 -35376336653362626333323633643462656139303763626464613836666630623262343463623430 -64333037346462386633306361393738643766643966343465383237613737303134663135303436 -37663333646461306564356633316361656331326539376465663132313966333938323633646162 -62343732313433616338383163313337326239363965393538396233323764613562356637373433 -62336233353531616436663862643930396431343264623262376433366463633765653761336638 -32623766393634376232313535373937323664666638396134393834356537616239366133353164 -65373637653332636639363663653566326233356534313137343666333230316332323134336339 -31626330396331613637373335323734666338373530646265623539623033653838633037636537 -31653833383765336632363766666234323666356339316561373261383136616431316134623734 -32326638323235616532383061376262383161643065356336376262313162303061303132396666 -38633839636164633831346334313633366337306466386235313062386166376535376365353132 -35653739373061636437373035356438346166636265326435316664396330613036326662306334 -36356239386663363236373361366635363338613338383863396566613762306561323738383137 -37643937656538393065636263633166663935376132396630386261353466613830333138323935 -61653763346632346439656534373033636337393038636432643864376538313863653439363364 -33303661393030356634643035336534373863303161663436323938386661346636346337333363 -66396539343531376336343733373161323537376464666665626230656635363665666661653537 -31303064333930316534663064323638663137343364623933333238333838643366386633623634 -39353464663137326435346663326563656639626638333466323335353862663531613531643432 -33626438336561633464646464326562393663623431396239336565653934356530336335626235 -36323235363432643032613733666562373932626162396431383965313237663835663134303332 -32373365613238386438626564346261346236636264376365616133623236633834303362353535 -31383138633161613236353762346134633562396661646330316361633361326465316634373039 -62313934346535343734383139643364363632326561653430343637303131306166666163616439 -39316531353433373066323733333436643432336332393062616633383538613238306363383765 -31656532323631633932636631636236346265666462336365653066353362373863376432653935 -31623961333739323466663261363564353936656562303663356430343637663266313664336631 -35613430376330373462656538333662623737643839386532333837396537363235393930346465 -31633937646365623334346431623263653834303566643037666339383034663064333634373933 -65383835386164663436336635633232323034313563633366326661353163363032623738316633 -36366665636337383539373233393935313632643237396630393566346366633537623139306261 -36376564616332616264336435663839353961396131623362306631363533326230623538633364 -64356232316533313566666332326166303236613865653138303830333963373433376665633961 -32663334383530303639656464393662366465613031363865656632396139353566313966373232 -34613964623163353965393066313765323162633262383035323265336361326533353562623334 -61356532653062333436326338373261316162393137303132376130383432396363393537386336 -32633834306361373435386162343531616661633362386535666438336263653637346533386161 -38643265633965663065383664313839633636303932383736653330366533386139393161393035 -66643838386132366439653363613464386532633431393633613438626364366666306137323461 -65643539373532333764383136393237396561643935306165336233653033646639366534376634 -65663432356663376565643033306231616531633731323061383363663965653764383466363262 -31633934376634666234636337326335613764653735343164363830613434626366663331383138 -36323736396430363735396664303565663435353239616462663530353034363961643430323563 -32613963323162343931343030386361643333333637656234376165313333646639656634356338 -62393363333739333538353632356337316461343631396235376539386232333465623363636638 -35386565633039393763616134333230353963663664353662313062323863393964636663663737 -65373635363039666265303434633839633466663331656232366630333437343730353366623838 -62393236666230393234633539353435366138663934303565363161653731343234363865306564 -38613635356537653733346366633133666538396263336534346139323636646336653835616336 -65663662656263626165643939346138393262326331326232323165383130363062323163333538 -63343337303234646138633461363766306639333837623037363965326130346361316432346435 -61323136353266396236666161626139306637343835356130346631343930623465376338653365 -66636432646430323965376366393331353965643464633335376131346633623161613035663039 -33363465623431633230313664333537316239653936323264643862633037376630663731356133 -30663337643036653234663732643163643463666439643865643734613865386638303865626236 -33623538383636623161656337346561656163343732356336303233316365643333623239633666 -30313634363762373832356437363731666432393862656265313737653038613330323664623738 -30366264653262336635383166396133656330376161313464336538383335316664336434633266 -33386237313362353662616462303937633730383831633337363837303664633234366262636361 -34366234386333343438326237616333306233323765343038393730376431356361326531396664 -66613461653533633561336537353534343239613837393965366634343365633063303062663039 -33306230396466313632306266373837343564633862353163623061653564333832333336376661 -64633763386463393338363130616666646266343733366434636564346465393035393763643035 -66656263306562633166323463373331636433336262396538346537303831363435613931623036 -36383032663338323263343632633539326135663931636162326564623836636666336562643132 -39393965636439313162333233653666643433666264346562323632626332396262633865383863 -65393034393638666564663533396231383065356363326566613439396339383034303566613132 -32373231343066333365363865376232376566663963323338623931643931383338616237366338 -61656364373935643061623162623831303936616665616163323566383864666565656334353462 -37666365313263623665373230363764633639653733613865356237623934303937643765383061 -36393833666434353761653436393565653761306365623261376333353139343639616366316532 -65636439633138303134663739363132356136653636303139336530323038383534626665666666 -63643038326636303438383864323365323439333161643963663832623639616531633939656236 -66646561313239643439633935303766356138653035316664623331356332656234396134336535 -34376263383637616634363035363130323265343063313463363663333365343766376538306336 -33666232326439386264636362313639303361326436333161313464343263326363373662613462 -61613038343164623564333862636232396132363037363536346239623134303866306162323933 -36613265323066616132346231323766633336333838383836393761363065373436656566663361 -32366463653432336539316364386234656430646531383263376538633832623566333330303636 -34333264343135623133643339656461333334343636623233313165336234396330383363613864 -31663239326464633861346661663463353464643762343130336637626262343763373835316133 -36356636326334363630613165613638326431613537623834643964363766333630383637373163 -38336338616539393630343432336166336332653636353633666336376130363630616662396438 -64383862636633393731633435383266373461303563386138616238396235373862656232386361 -38363163336465656134306634326465313561383931383934623835376130633031383935393338 -62646330316339303962653133636164643161383231653666386632386266646365346336386233 -37663163613531613630613763653037333066323635663037366163373334393137353866393831 -61373765366262363734646130393136613463373365343963616666383930633831343664633837 -34656430663939306632363762366438616264636561393366656631313561326235373731643731 -39323764663362333436356432383666666263613435333534666431393332336632626332363662 -39346631303366396232636264383236373939323932316432653730643264326235633330626466 -38323932613466656631623361616137313138316165343264663862623863376436303964636236 -64333137333764376532353865353662623338663135613338363835313330323863336239373736 -30616536663363363538623638313861623862313737316536303238333065656435353631643037 -31623137663530623363663030386435356537396233643435323437663030623361373430646636 -66393234326139636538623466666539306130643163623665386263343861333264396364323538 -34343065356365376632613461653661303335303030306238633136343766373235653966333933 -34663564643466646136393438653762623862643063336464656436373836393637313334343331 -64646331376233623432353064303063643937616630333832333261653038383362636163366538 -30633633306239613663356662633233326265666532323261613530333364623731343531393936 -66663464636433376635323361386333656633316430646630313864333031306164303939323433 -63376339366662313762393231343339666564386133333135323337346530646536343134653335 -65653836323064326235356361663262303537383561303132623930623466323763306639346633 -34336235313536633032653237346366303939363363633136346262633239386231393365316464 -32323232393864396437386538363164353234633233353738323736343533633431326235656335 -63633536626266383361363034323536636237323965336363323063333730326339666664336630 -37316461356134653234353834356335356633343164393636346234663533306530643634373866 -64316137373238376465373763313465343533373863623765343263636364646333353562313365 -39313737663466373362626435343231306430643461346363383036666635343661366264386664 -32373836396138363339306138643638653831326633633562333461303532383430323830626431 -64313966633930343835306235383131633634336465626366663835316363633933326666613762 -38333231303032383164663336316464333331313865336330643339393061336566653330313530 -39616132633938613863376435653737383166383837333065663233346362366563373039643065 -65626162336661653631326439363966666232623466333235663861626137396135396436643037 -34613230393864306166656266626538323666366538396434653635313562613336303537383461 -63316332353732326464623866333162666666363533326537386465316564343037613464386264 -30356663353638653836366661653536393266623432643234386632656131366662643565393064 -31613032366665393233613434313332616261653534393864313334306564356430356634643634 -39303239653638336532333032346566383933616264303163626466303239613932653862616530 -38353665353333373135623337316538336238383437643234303161633131363232333661333939 -65373030306662323264616634316331313864613364303437663664396664656333303061336164 -61363532343738636663643930393261666330326634343862303066383239363033656562313133 -39306466393035363333313933653461383762386234393038373137663431353638356337643464 -30623236326232636131653930376461316335636530666331343433393136366537393935623137 -36363663613763653530316538313232626136643930626464663530656562663766373463303064 -38336161396638626164613833613762626461393133393366383530316435663038633136633161 -36623038313635626163373636653230393063636336333566303265666164613831616333636238 -39633665313237363639636336643635343032326632663266396464373663666263393137636461 -63303561386132373134633434663533316430663362653030383630396533623838366236636430 -38343735623131383530383631336339316631653463313939343833303732666434663665353738 -36623330663335633534396162616438376538383638656334623335646430626133333738363261 -37333762616234363936373337663262373137613731333037303339333230303536356339656461 -30313861393264306437376239616637313832636430653535656535353664376165616666383133 -37356239303539633437363030626434656262643562643336623865386362333761623534653765 -30303465396566373134613866396662656238333738626666656438333364393731363937313333 -35356532303462613534353064656466386131303337326137393637376336303961363632633632 -62613133653862623136623030633732626162363136636433656338356166666136376237613537 -39656133646333313164613136313038643065623239383734613364333632613034323930306563 -30333230353531393030646635333761376630376663626463646465633237656136376464663865 -30626364313466646630643633373363393461393638613438613663303966366435623939663835 -66623633366237386331313631643933313662323833376464343931323539396133383566623333 -30333631663538373731663239623935663163653638623832386466636563376433376566616365 -30323335366134393566323934366437393261313135323265336135323438623931383964663563 -33613566346230333362646533633533306532663935373364306132636462653737316364306364 -37306265336632386335373466656331653938303930633733623036343539366633663032343164 -31623737303161336530373862666464393433313133643133653764386538353737373966386538 -34376539316362316633633363663032636635633761393733633362353263316437316564663536 -36303238343731336461353064386435326434303434356363653034373438306531656637303661 -30306531383063313864336635303663343530626638306134313965343235396634666466343936 -31363331343563373131373736643565393762323234333762303739613935333835363436353233 -39303337313866663539393132396562313132653336326433383738303430366633393436323234 -38326661353236303833646631623264663734336538373138356436643632626561636335356238 -62343730333066646262633137643238373838653739376333626364376262336430323335383665 -37633539646162653061366466373334336133656463613031663732656162383432323262393735 -33313963313464613637653231616636613339376464346534333931353333626635363364613535 -61343531363133626461663436633464323831616632656133343965363639363430633934323532 -39373930613732363131323763343363643232646364656533356661323464323038353734363833 -35656639333937646465623239343237393462366166313736383930333437376634633562363238 -33303561616232346632623331386466643666316230643831323534323261396665656165623563 -64313632343365373564363262386264393532336161363334613462623232376534633235396535 -61396436643430323335316135623136373861376236386639626233376231626662633739393466 -63623535356664353536663438326333653338633637353130646130613862326639343532393836 -35636466373863323563393464313364323630343565363066613536393330363066343939323961 -36333531323432356463653234633938643065363262396633386464346266336566346662303266 -39343961343064396637313438626233343165333035383431383539366139303131346464316330 -66666235663366396230383463363361643931663963643538633931386231626662643262643639 -62633830646532383834306465366561663332343133323361303465316164363964643037633139 -36383164623733383239393331363231353461343132653135613035633632663735396137663137 -35363062646137383731336134333231313734393331326632613636353335386632393165666266 -62306666613865386239663565613933633165396163653132636139386264653261346632316339 -65363834356135623366313265373235613965356565656564656339323438623739343032333830 -35383436323961346462323365616563616661633332343233323663616634383930353835633238 -34613331666266626362356364633935376230326335666631353965383461643837343437633539 -64343064353230383636346136373065316438653265313661616432663433383761333631666630 -66393436343864346464383961626661303864616562356563303737643363613736616238316465 -64653139643566336236373666323638613139323966386335336231336566353765663134663766 -65356465333061333232663232623364666430386435303634363234663934363062356334633732 -64373261623261626164663865646137396230623861666439656462316435653063356563373633 -31303536303664356165613065343632306437623831323661613236333761663333313964323338 -64646666333031346632396232356232343439313339306434653237636361306238376462623365 -34363231646239376636613237336238613634363336646362633064346137393663663738633066 -38633233346437396265396261353337626132386335613133353261326338393836613736626536 -66346261313133333362623639383930653930366236646232366132333631653432323039316330 -65366163323662626364363530373531626662663237646530343734323661323066613838336562 -39373761653936393132663031623438663739653266363833336262626162613039393465393338 -38666166333532613466346237633665303836353732346163323163653631343236313366356462 -65613134626162343336623334306433313130356634386336303937633462613534643037323165 -32346130656236663439393737396263393162633339613362636236646638656161393664353539 -64623138653666623962383835323831623730313133363264653337323062346133376262363536 -36333130343533363561663437336433646333303837386532666238623461383035636565653934 -64636431313636646137663261396231393131663234333238383036653033616264663439623533 -61383066326236373735333335346533353335373935323139313437336135636532616637633061 -39386331366139633663353332393037343162306231616162366231663032336533353537333237 -64636339303335316332366131316339373930313664306435393561653135623466613430303665 -32646630396136313161663466653032316436636637363365333032336366613666316138666135 -63336333383036303330376465393338616462393664623636333365363331323966356239376231 -36303664343065366336623766343365643232643663616232653861616263323365336634313831 -65383633393934393438613465656231343835356639336430613431336135666665356562663333 -32356366666232316535633461346132636233613365626466656338623966313363636530313762 -66663661653066306132396362616662653466626562656438366430326435346636383131383364 -62646565623236643732373665343661653131336237616333303735393266386661623361373231 -35626262373434643563383961636137326230336664636133383463663163383833343434613963 -33333037323133653336333037666634646462306264643630663562633361633939316339653036 -34623136646330383233626537623633376636363864346165346132636337383661303631663865 -33623038663063653631343437356637376361363763373266666665313533313463373137633238 -38316139323838366463396537626132376130643938346534643838613462333031376664336264 -38383430333462356264643363333363613638663636366238616439636564373863343164656366 -33393534613032323065373131343631306663343832316130383030306237663161656334396134 -33303533623435616563363035343066323831363339373666393535616538663835376261363764 -66646363323061336463666630376638383932346563353937386436653466653138643461623334 -36366339653765393633346563393766356434643839383333623639303435383962386330333865 -39323535663236623565356436653361383330643934646461313666643238336433323637333130 -62303435323337313136616662613836373334326237633838626234626466383636373363356131 -63336631666636373634326634336436353232343932333862396537363762653135643432386233 -36666562666531663237306464316665343636663363343431343765343462643739623862313266 -62306666653665336164393337306237363430346437353062373339306233646364386466633732 -36653837343430326130363662303830633661656363633738303539636361363638373737623030 -64373361366231316139353733323363643964653861626163316237323038303764353338633464 -38396137306133303561356264373863663834636131663437663466313661653633386564323631 -64336466353836633436383631313562636537346261626231343532333363636334303164633636 -61336235313363663664313538336436373739656662633462346362633435323534376233326633 -63396239643330313962396537646436643839373733336531653531376131656232633065393661 -35663138346163373435613866383266633631306161383730376139336335623864626431386661 -37626664303539623765376265653236396630346232613236376632396164393335383932383234 -31353032616233313938393962393865343537366662616233636439353737643835306230656661 -36303766616530386338356439326536613464306232346533616439626162643633343566633433 -61363331666330303739663938623239356530636633623234656263393933336462303036666235 -33623739333964313539616563623531633061396666666638613330343761363532366461346132 -35316636373662303665313539663539383763653364353930616338316534333738363633356432 -30646330646465303038386263616664376439366463623064363335313761366435656439623761 -30313539303738336534346132306161366663393764356538663032396164653761343964383933 -38383364653338353439303432303733376165356130333466663731613231373233376262373436 -65626438653631303265663939643965396132663163346631336161656365383731633338626362 -36623461373333323731343966623733373666383438396538393166326564326164303737613733 -35333036653861623430306162353564653132313235393230376234636435366365373536333331 -62623462666630363739626235643431646464663964323039303064663332643465633136623338 -31613935613964613632393637636161643062663638396234336364306434616431373965343439 -39346435323434623132383064333039346339613734636165383464666434633630313835363436 -37373666666161333063626261333766376637343361663464323963653132316266653437346463 -34373837353862343633323439663063383464333164386534623734653838303763353933396138 -38343466356436326434363534346663623863316234653736326437326466373536353032316563 -32633139383131663032633637316666383964386432373230623634313530343737623339646438 -35613933623764643466343236376130613463313431663332643435643534656461356366633736 -34333836396234396462336564643831366166333237626564373730343866326338353765346534 -37623362306634653366613939363139626564346163353062353533353565326461323633386636 -34663462616366323562366637613634663035646562653035633363373130386165363664396166 -32623863626136306439663361656263333736346366383433333131396639376230363733353233 -63316365636136373765326135373031303433663562613066336238653734633064396466613832 -33613034663538396539313036666239306562613765343234623664623366663566303666653262 -36393763613231376139393133376532613634633562303863353635653730373139383730643839 -37313762323232363862396230666430383134333761363835356233303935626431663930303730 -35633562333537613739343535393765336339396664323133313039313365663636393335613863 -31636636353466636364333664353432663863383330363166623338353631313335636436666431 -33623032383762306361396635383962306139373537636266376661396234326235353436356638 -39383738653864323432663262323737366132366139323266303231316637356362323435643235 -63613835643662643238383663353432306362356635343864396466623562616530626136656130 -64623165323334303530616463646661363534366130383665396431633032626164623234386266 -65343736613633393763613864343365303038656335613138306239366530626330353136313263 -31656161653833323961343631366133343238623535326637376331313964313262303961633036 -33653531303931643936383936376430643361633566646562373964326239303235646462623265 -62356139316432396331373737393733363834363161323830343937616364393262653662343463 -65616434396334363435616162396231323363336138623762306632633838633837373232373137 -31363235353634336536343165663238653163653061383762333930376232333666333962386333 -65333632316264346562353136643436323435613030393062663261653337373933646238346666 -31663938663231643439396361316334303538613630623734616361323565336133353035653064 -35366564636333346166383865373235643738383664303538393430303764376135323237653066 -30646566333232643765373635373236313239323466633965373630616163626465636435386461 -30303736323833626465613432343634306564303263613537653764376663393835656161386438 -35333336626638323535383230663330313330653661623963613861353636326362306263363331 -35386638656364343031376266343437323962353238656166323637613364636564613139356138 -32653132393233316162396162323133623438393563356435323436386164626239323037353232 -61656635346566336131633266623364316332386462303264626432373537336637663064393932 -37343662323764656230613634663436323862313165373735636130343361306335353265356363 -38626565366363643836333966383731613931626538363966336634393364633463343739393437 -35383131393264623934653337333238346635633266366337613930633431343735343961306635 -63396162623230326634376631313838383237643633333135666139393434396463613233373338 -35643866346138386466356530393563396263326436333730323330656436656637613136303039 -32623866343735663765366437346361616333623632353638623533376439343365666530343864 -32346431323930393636383464366239636234626563613330383830363066366333626237663566 -66626433393631643631666139393564323132653836646439623030343566356131643232623831 -32653035663964383465363365316636393836666162306136376535396638666163303365633766 -61393765346630376665626563653461613862376537303033356339363365633132633636326336 -35323363353866343533626531623730613635343832663133313764366364373531356432353239 -63346337663663616334303062333065336332313334303066303065323038376464323936363361 -38333539303936366564313664636666663564386265356234393766393162646531353066616339 -31376236623334333764373531386638383464363866316465636638326135303764643539396564 -66393531656631313831313864663039306561396138303735633962393634313565353834653235 -61306464623633363462316166353936356431653839383637663063383831663533353439626432 -39623038326238383839656532393661386439353133616437316336326234613962333665376135 -33323139346631383533613361376233383733333266623332393134626165666464366437396334 -61393962333734643766336464646232393964623062313164393631353834633939313532323665 -66396361353537653131373737323961356233373763613639646436306333623533363833303738 -31363261663632303439326336343662376435633065653466353062333330663738633538653763 -64383439393936643466643861393066633731366638323932353932393464363561643231643835 -34333833393363306533376336363435316563376333613733633764323430353637623066653834 -61363937343966373563353030313830343831393036343937633133616632346635666562343538 -37346131393566383938333430666465386332623333336635633366313438663662306166626239 -38373963636466346566643133613863656165383237643634653634633835636165626536363237 -38663932336132376131393239396235626263323563656532636264623731633165646431393263 -65313839633139363631323534653262646335613738353130306339626263613235353435666635 -64326336346362396133383136303338373035623430663732323361356133663961343130643333 -30666235643733333266346566353231376535636462356636373432333133333032343135323464 -31663464613365373638643062333163343566653839366130393332383664383137366466656338 -62383539366363323632393638646339643437323733343436313261356266366662343339353437 -65326532643139633865653765376236656566323934643835663135636632623865306133373333 -34616462633234613836383362376265356431646662336361353639393661373937353534373962 -62373238333238623862636230383762366161393232333231663964323961363465623137323332 -34646632373236666363366135356438303562346230343231326265636633343939306431383639 -63313765633334626631636135336134363234393262366666666638313662303034616263326332 -35396335306136343061323363333665623466643732353035666632393261643439373438623439 -36313130666231613065643561666263633638373439303035323433353336663166393137623761 -32616161653365363138343466613665313335363936396331656634353363336336643166646662 -66333638636166353130393039343132653431383865656565306132353934333561633037333934 -65653931396336643639346134326365343537623433343063616364643233356233623461316563 -61633765363330343536383065313835633532326336376433363331376233616237393164666235 -39343330663364323463363438623839323336633165646230616138393266666562366361363761 -30323239363437663062383339373338303636333432333336306364323039666264303261393666 -39376265396534373465393337623332393832633037356336636636653838313036303635613830 -31653766326538313237376430363262633162306666636634313366326233343037623536633032 -35383030646630343931313062353831386466393332323430656232653166373734386435346439 -64306664373238353564336130313531336162316338353131646666343937626166383238366537 -35313935653366623932636531326561663162656135393364323535386166626433393265323937 -37303536616365386438656132333130366136663233353331393066663337393065353931633063 -63653531653765623731333562326663386465353166633536613066623933356539373466663264 -38376361616163326265643261663237353334613165346230653133323366653438343135313864 -33613331396562323763333230393830316538323866373932363231383262363334616334323434 -63356265353335633963663638343866623163366366303666343762643064613361393430653335 -37333735333335363239363862353564343765373565393337623762306137393237323166633761 -64613130316566366131666237363431373834383465623738666530366336303834653861353336 -37646461383661393766363964343330653639333832616139393038626333396663613861656661 -38346665323964323133653135306134326339373463393866396138356366316539313239326563 -66653863356265316232316535353066366638633066333334643839376535613263376334363264 -36393935646238316264343531643436643762333365316530373632383361646533366661326464 -31396430373831313836383230313437383835393830643135313733306132326365323639356134 -63653834343335326632333333393163313136393865343134353434323534656330663736383835 -39383635643033663630393161653262373765336239373335363037363463663562613136353732 -65323437386365336635633865316235373630376266303230633861306530326535373631343262 -62343132313432363137666464376166663039616334353831306537356238356436383437333830 -35323262366261303138633436333235323537623664623562656538656465373935396139303831 -31633961373765323436303466623838363138343662323935396638613462643534323066366435 -66346134313132643833326531313663656638636564663336373266336336343037626434336534 -64613130393737666465373932653066376262363738356134343936356237303761363435643763 -31303135316361303438356532303136363436356666393932323233366164613433376261303363 -37653165626332333862373664303764313633326561643430353735313535383231343334323562 -35303034343236313062303434386539376137316135386135366161346361313632646238326331 -39326330646230316231663164666366643565613834313131323335663263633364323966356136 -36636233323733336235316263303864396239373737653534656337353862346537376461663038 -33373765353233623736313434333764373730663962383637363065326337313731356135626231 -36346134613066633864616639613866316362326564633665313065643130386564353530356466 -65636436343538356363646365323931383737373363613939393736333762383561383936393832 -66666662303361363535306264353661303063656366663362633662313237646635396366316161 -66643264666566356236643131663932656235383133396339303532386663326537626665356565 -62656230346332303836663165313939396139356638633939616464303266323762336564373639 -30356564323235663536643835393931373736356531353331373333303166613433393939316264 -37323738663566373565333131313437616561326561363362303161353237353830643962363563 -39346466303862643437386533653262613733356137333634383830343039363938626664633737 -31373830653062383263616164613261393065333734363632356435393836303561633732323962 -34363534343064336362633930633365613762616138666564313237376334356662386639306465 -38393638656136663335663530653834383265353666396431373136666663613938646231356566 -30333031333563373132613235313931366334333262353864333836656161336562656436633935 -64623464356266316330393739653336373562316266356535653031626338343762346463346135 -35303930646139643764383366316462663938363263653638373862336338333861356431623661 -36643363356331613335346166643334356534656462353961373563303137316263316466313938 -37303037636635643263636566653331633735636530636466623362643033336166386438393063 -39303337333466366465633636383966343362643233616162316565383237373866303532616139 -37363762313064636262306136643466366131363361663735663437653865646433323138616432 -65393638383933666464623062306336396239393633383933363339346662613632643432386231 -33366332656631363531323265366362376239643763356662653261366638353633353862623131 -35373664383839643165316363326334363134643465393264393666306239376230326461383666 -34393464626438363265336632623565353865643336373666323462616566303532623939643438 -36643237656332326661633966383561646261393432336336386564326137346161633636333235 -61643562626239396564326633396530653561643538393031626337623539386165353835343965 -34656533623338643662343233616337353238336534336566383731386464393632333837353934 -32363831363331303164613136303235343132663765333231666461376662306166626364616363 -36633831333539316638653662366364386135643135666264653936613763366239346464343161 -65626536383064646563643935643239346338386464306139373433393062353137323736646531 -38633039613963653339666463313663663065613266626463633432323537613836613438363538 -36613531326664303435363637333835313135313963333430626165333063343633643737383831 -39393764636233356636376266663434353566613437633263666239353334376636393534623837 -63346138343030643237616132636364343532393732663264323930333030396638643136623035 -37323339303332396638663135613863303439653631643232346539663262373965356464373564 -30383766343461333463633962303961376261376534373235613964303735666538623832653232 -65633462663962376163643839303235313232616662646166373938373135343033396565653439 -61356166356334343632383035376261633336336662643163396563663639336664306439616561 -64353865346531396132363563323964353361626534303230616634633335656135323236373061 -62386339393733313263373461306435656231353739303130383861626237623731313263363665 -65656336373864623538356366653538316639376538326330366264323739313235393033373334 -64653962303339623662653438343836626566336130323265306463333734313730366237613565 -66373764653230613836653630383362326434663639336662333435383930303766343361663764 -34653766646636363637613839613633666333623330383133333139393336303933383331396134 -37303164393462373532633138303061333638313833303761323530616432333631343235343036 -33316161613833663765663761316461336263393530366631393933366563313233316565343838 -39356338333531666131353130363938333630333837303337653532356663313132376264333734 -66613364633934623766356532623437363263663035303734646632663565616666303138333432 -36613265633838383832626163653265383435316566323836333664373933616161326665383138 -31646235343131303433643766613666656338333462383233326635626664386636633436646561 -32326532303063633434646265623933376635643430616532383339396362323937666164323431 -62613530393335623563653734643663356330363330383864346139636563323631656138663330 -33623662643034373132613339613664383531386530613531626564633233386438383733313563 -38656561613632353931393733376436613165366233656239386463326663333038343061306562 -34636561383937343334663365363037343038326239646538363336653064326366653733653564 -31393162643333666531343135373266356337633164663665383139636266613336386133616632 -30303461373836613932343336366133623930613966666131613463353832666631306566386563 -65363434396164373137356666313433306363363966376536383933376238366137366237373137 -35623562653361313361333365623163626632343966313336373631653436306161623339653435 -66633561623737363663316364356463363365623239353739356534346635333861633136346563 -30363262666166653033313131616238623835343365336264663331633531653464626637633764 -61613365616663326436373564313335623965363365653662393336653434306338366632346339 -61353439616362303866666564643231313835306133646137313166646661636664353664613934 -63623539306531356139636332653231383265313631313966366662653462623435386536356565 -61353937393665653431646630656466376666336132316330386463663431386338656466636639 -62623861656339383337363034373465356562636463336363373461393634356337666431646531 -64306133613637383463323263303965346139326139623736336232383335616338636163613932 -37336235313762343366636430396432366336353062376638356564633933626262623634353565 -37623931306364343437636535633436326264313562353235646166393265306633313239643631 -30336534383762616231306238666235336530653734333435343233623936343630363131666239 -30386133316565323863373936623239386566373532393737373239333061616633323564613566 -64313964323634353736306633383635373463623130326363363031306531323533663530633036 -30393637656337363163623932346233346166313534396565646530333666623932323530313863 -32356266633839306631613338316633383837653839616166343133323263373731616366376233 -39363166653136656662613566396530323935316165663063653438343332326364343430356439 -62656331613139613836646233643734373836343832663861663538306531646138353366313330 -65393465666664613966356136383165313430333236363631336434653233333233633366383733 -39616630313635643238653161356565366139626636376264646464353939613562313935636533 -33666563613733393230323634386564363334316130316563666233316533376435623133636433 -39376335386536373265666464663136353563333566633133643563303564316632616165623638 -65323231393939383632346532383934626135646230346561373732366264393766613664653933 -61643565633263646434623436613164616365303166636362303765323130656637383736336133 -39646163623662303464366330366361323563373164623264666233356231353165303565666664 -38303533363435323465383636656130373061653039373839643034386666646133623138373734 -30623765343937366637626238376234373333333838303864613263386363623539623438633935 -31363938323234353330633266646430363631636537353565373534653163323633323866353433 -31646635653331393966666136663338643561333338656337366539366231656663323565333963 -39333733643063393731373030313861343262653464616563656435326561353862616337346338 -62666439323762333234306264396230393466396239366135396433363434646463653435653933 -37323230643561373431393261333330373939336166333331316563316638393965376534343538 -33333137393536663161396561306565343231393961383365656162643739366235393936633662 -38303566653666656435313134373766356134636361323665386664346364303834653138616630 -64646538613563353937396539343864623564636531356538313334393063663137316263636331 -39633030653339313535626335623832626166623465303763656537373032393132336432356265 -62323534643735366665373162386638316336616536633336633165313563316365656164376664 -61613563313131303662333861663830613030323832653966363535653839396666363331643363 -66313130336638323430346366636236643931383831393530663766613933383135663266626165 -35376536343731623863386539386238306636373332613234653434616338653239613735313335 -36326662336665666537326364346139303366366130306236653863353662653739323738663164 -37393230393634633163666264343530313865663334396630306334313133663364663764383036 -64666534666434326461316135643039386238313566396136303630323761646133373266663561 -33393738336134333231366532383330613733346530393166303030336633376339353265393762 -65666463393933626165303836623761333439336162346134303035653864366232383462383763 -32646664653665313531633639643165393733363865623536636166616466346661636331353331 -35386235383336343838303831383761306261346461303934623932366130316333636264313366 -31323262383033666438636538646363343436396263363161643438653834626631636531396131 -62356438343835326565396561393332653135373037356537613430366664363431366664313733 -66366139303937333637353432326139363033326133353931376565363262653034333366303234 -35316539656237316334363639333537653439303532623636623931376639303530633035346165 -65626239343735373664613335306637363436663130343063393062343535666632646338616332 -32323765366235616266376266303161666333356439336231383266393633663866383534633031 -36616264636465653033343566636364323936633561336263373837373234393530323131653964 -35636539333934303235356439616661366264656338346434653939303861616138323865313665 -65653235326334333662316632346535373733396664383265346635303561343664396338363939 -31383532353237386265663063373765343066333437636532613338336638663031383139366264 -66313863613936373730316166616436353065313664306365306330353638376434663438333437 -62666464363335663464663665643333336661313732663739373931633031303332653834623933 -63383236313661633739313865643235656561623462633731326434363236323864396530316465 -39363064623131333236633336613566656535386163323936623034666466626431666462623862 -63336161373730343566616164393837636136373636313865373133333865303731313266653266 -35666666353264306438363232326439386666353462623361393734376238303230663037356533 -35336265353032376134363663613165363162323162373336386231306563396335396665666264 -30386466323636353938323137616163333962363765376166383335623838396537613266396661 -37333636393136353662633834343565663030343933623237373032346532616434643666393532 -66613634333032663335626334303461616136306232303038666133663431333263663534666561 -61646663653432353834636266333636666135343461366164313735636161356332346632636362 -34303531646130636461343631626464336236383336323735363236623837323832393933373764 -61363330616334666661383232656365326432323261613839383062333463666366633562646564 -38633161306361666364306662613835386165626664353865303438653938326236633830303836 -63313666646531356261633066383535636261633362616566326232326339323338333433316134 -35663038646661386134326637376332373565353661386237363565386134373136613439653932 -33643931646363353539393963393266306664393161346336616236333932353661363662643463 -65393939633363663465623032323563363630343035383562346535393537343633313062623061 -65643830356630363230383835356439666434663966356231316265623535646639313164393335 -33383764333561663637326563376163623935366264613565303666616565623161643065666166 -63323132653866643337383161396331303662333032386461333333356133383735663266376630 -65396539653362383132353237643332313735633164313439613035366465633833326565323933 -37333334356435353937303930383531323762636539393264386431653261393237333732366464 -61616638393230323164396131663837303463383765383836646537323636353736656438363065 -63663837656165306232373935333430383533353430313331333663383763336234336430393530 -34303733663631373336303138613731386530616635303333663938656531373631346134393634 -61383661633530636562323736616562396232336532393266613964373236353036356361613661 -35323939623361653664383931366535653936303961356561626338313431386532613465383763 -65613034336530663762363334353636616264663230346436653731396330393931656663326639 -32353164336336363565653264646336323234383566316362363637363239663331396332646261 -32343938383336303631303833306134313834663765393730366336316661373963386136666162 -39353866643764323330356435316638623631366230373036346539376661626534333161316164 -32653966653762316361633038363735653061396238643032376630666238663465646561626166 -39336266663330386365366634313236353161623161643065646166333233306332663635356636 -65346662633134393239373336616137303566613131636138353830653766656435343930333237 -39363936613763613235373831343334633561396637306530336133613864396334656361383236 -30613863643564353732653531643730323832326532626436373537346138323461633733376633 -63656338343432353932343865643464373332306337366639373064643634646132366337653966 -64613265373065316161316130366464623431633932306661306265346164363538613536353139 -36653836316132323534356662376530353063326334306132646630373037373530653539383833 -31646663646136303838326664323739646638383064663663633666626638616238626631303431 -31336333346266396433383532393730383462303764336462313936323166393930396136303734 -34353362643663646531316131626665643935366361363635663565396532373165373738303236 -39623838383338356539343566666336336163656633393931646434653932633430636131323737 -31363464333738386362363665313837316166626335383734653262323537653435323337363666 -30613037626566383263373762316366353431393466353532616564313134656661303039613836 -65313965343930333334666265613262366362396361373434346132643137353736653030656337 -33373066313463636631393564323237653438653634616233363638626166396332373335386639 -63323766646433666162343630356631346136383733383762313539333730343535316566306435 -30386331396462656634336130626565643539336239636230343166626638363064366639396365 -36386661646363306430313365386262326531313061366461366538623035383033346364663438 -66643963643639616662643566376539323964633365626362333938666532363962613038303834 -63376331373133656338373630656137363038336465653263613038343131343539663865643432 -32656538306534636436313465333933306262633563333161313734373438626264326639336438 -61346562633439333861346237633561326562393139346339366137646539353166373032646338 -35613161643463366136646131376465306636643531393762313233336334373732643834343434 -36653865343839653632363463373761313332326636616433363362656334306631353431323530 -38343464653634356264666664646565653935376331303732373264643364396564623263313930 -32336637333634623664366238353563613439393935633962643439663066393562376537343261 -35333432306435646232636235663737383036663064656631616639616563623936666365646137 -34356433363932646164633663306338623461636538313135653335363665623462623336363633 -33326538343161366631396130303935653064623865383934623065303030366632366637373563 -37353463653431366530383036336165323733333834393031643662646633326262393333653562 -35616262353432323366306661313966623437393363303862373365363562616163303633633339 -32386233663534613961643139393263363731633065306138666266613265356562346538646533 -63306231333634306339363734323739393135643466663461376464323530663533376266613862 -32363563366639376364323439633639663865643739363238393061346335353264383635653166 -61666662393933376566356435333265363936666532613635663534303464666437663233346239 -32346231343539363764633761393831613766613235376233656132333836323666666261306239 -39616366356166363539616366346536353635396438633030373665303236623033636439663061 -33633038326635353066616332343931333037396635373163333330643133613566623066623966 -62346166626332343062356665626461336537646561633363343663616633336465363836353164 -35396666323866363862643966643162316566363863366431653338326664643839613037663431 -66353165303164383532373064313564336639303562303432326131323565653762373139336564 -33626232383364386139386531373064656535643438383366353366313733393565623432383763 -62613532666234643264303838626338313839333833346639623562353566386436383663633930 -30643433366264373735623930316330663666613065343062663563623266356132353136363938 -39346438383833306564323064316462386134363937323433373663323437666632333265613963 -33646463356564353438623432656436393631623330663630303761363235333539336138396431 -65333633323236353832383935313532303638613133633332663137663831366532616134353061 -65633162353037643332313661336161663730666332646430656131613934633662373539333539 -34613831386563633731363662346635366635393632333731616462306230623761373038636136 -37613861643337653461303564646135396334633433653736643963343433643435663264396139 -63383039636364373830643136393965313234663263656339346437376462666533366533633739 -30633935323836393233316237323538376539313432353062356337646639326634366630333138 -30646230663563613132323036653638356138646464363262376136393536666138656134313935 -61643034356662313361613634653838376239366637366466343562633336623736643933366532 -32613134306636306435393163326630313564613364366564346364393534653961323338386434 -65383536386231396533356433306135333963343463663033363264653366393663616563303066 -64383964643038373739316537343734613163356438646133633230376462663933373764383762 -39383866326337633436323161303361333464383263363061313030333462326164363537306261 -33633038393862646366353732383134383662373636363133333932653036336462383035653562 -62383464306264306339346136626538373835383630663165343663643035396566316461366263 -32636433343531356364663063663937656263613665386263646230306265666164396265373432 -36393035343162386537646331303337396465636564353133323434376437393833363039646233 -61393065383839346330656533313433363738376339613337396662366533623239373764633264 -32633834326166356230626632663966633031623536353831326464346564346664653131316637 -32306635373066373438303962306664306533336538646338303465346630613835656337666265 -33643131656439616462633665363637343935363439363961636265376131313030653032353564 -36643438396237323136313538383962346331306330636664656661333531356363343861376539 -63366462623362303338353262343833663337633837393466363430626264663439656661373132 -32346138393834313838303635396566613162616538346237373339653332643164343939666132 -38646365363639383137373164633135336562376530343865373332636437633066373461643936 -64633566383163623236303761393761633839613238386430366435393466313162636234323466 -66363565323330646339383066316564623539313262343865313565613533313930363232313533 -32366461366439616164653665373365393030353364666430363734373466643236313464333863 -38356232313333633137623139386133653732643364346139383835303230306434653939653730 -62656462323938646532376639366464666139303166323964646366376662613931346437623232 -64633238653564363638643539303438613062386532336662313636396434346337383864353639 -64303039393962316135636131653834373531623632343265323664353566313333633530326139 -62653061303431623332633639363535366638613634646331623663383031626264373130336538 -62633030666561386330646565363464636232373534653666666333646331653537356663643564 -33613031623235363536653462626563626364313639623339336463633833323435356462366164 -65623035323332383537346665396263333765333039646438393334656430613937366633346139 -62666337313963333437323537623563393539343166376336326135643537353531633331623332 -30336463633834363963646638333462383862336363323166653333336263313730613734356432 -38353739373836393838643931643666663330316464633261366131303963616137376631313737 -64353661333261656638376539303465343731336430386463393866313766386164383438623332 -34663634663065336637343961623733353131333331373232663632393239333430353636626137 -31373739393762613333636262633462626364663432356131626138386436346539336638363938 -37313833333064626561393937636435353465663565646535373765396661646533356132363130 -38616230363562633137656664663561373066373534616461383932666333346238343465376634 -30636634363530666164376465363533383436306163363137303239343230633066656531313766 -39316266313336623164666562313532656530343165366165323964313739386264633463373634 -63376164343761613066643831643162616564626561623064363166356332396334326563393330 -32613837373932356234306634356634393762363136616431623635383763613364623762313363 -35343366323061366430383665663032653566376561376436376638353065343137333734353430 -39346261663135373239666538323138316431363437616362393739376432386235396330643964 -63656138303835333666623034326434663662393936326165383432373637633431303435346434 -37326565666265653661643361613663323132643831343937386233306661623765623332356463 -62316134653133363134653034333038616363363261316565666565393939323462383434386264 -34303063373362356238383066306530643830646431336561323730396130376663643762616134 -32353838383131613638356633353236623764323862646638336132343062313165306333343430 -66393034346665613563636238376162643362333531323563383963346539613762336561326163 -61366331643632376662636139646536633136326634616131396563386163356133306631663261 -34323864383233313431343165663639343436316339383430666336313035653936656631373038 -66323933386133306332613563396666363762383366636334653735366131323136343935396534 -31646336653566386666633039633238316137663765646335643734353634323566613934646464 -63346631636538653633326266343461636165356139366265393766613063303663343831376333 -32343432623762656239313138306134343030663862336664633633636364313461343330396263 -32333862653936336438316539343438336631333466623464376431633464306464343431346664 -32323762333231656437366639626531616161663438343361373731363063643230343365353931 -31656664646261313763613662366536336530636236633662323766306164623863613338336334 -64356364396331633331373966363735373063646632326265626434613261653864323234343264 -38333465333735303161613064653635326432396230336366363135346236373637663239626337 -30323730316237343631343030306139613062613063336662363761646130633866626434323839 -65333037623933626363643835326637656534393137373561616539316332353136613037363039 -35613934386563643039323836346230663831623563346330306466336135383761336535353463 -66316639363737613664633265343937323532386132623036303130393262663561373764376631 -34633130373365633665663464633236666530353936343833373465643962643330363030393566 -63336361396264326261373139666533356566336639306239303533663465386631613532663661 -37316632326433643232313462653537333262653463663032616233353866386333636431663964 -63643565373065373634326135666132323731646664313439623832326134646465663237653737 -63333166613536316262633536326565356235396637396432306132303663316332616263393537 -65353564333032343732336331333530383763613662356262663063623361363232343161623930 -36616262633665626231623136393965383333306166643135383366663536323036366231336361 -31663830336464376235663261393233623263313437613661313233613838343762643833343961 -66373463316337633831636539353831333037663930376230646436343532393331636462383264 -32306664303862373632313730663437633230376163313764653032383233646137333761393239 -30653530663636353635383239623661636332326365666462613065653833373261396239623733 -39613232353366316463363634643834353964633564333862653431653562343030323635326333 -36383630313365323865386536316634326366343539653735393364616633656630623864356164 -36396565363566346462326338663936346334633933353463613136343865303862393734386530 -62316533343163383865616562653837623830396635343037636132383261643361346165313039 -33643334356636373239396161623765343031376662393363663863373464393031326632656138 -64653231306361333834373466656338613464356163383030366431383763343661623865383933 -62643931366562306238346461633239616435313961323661323835666563666532333832663565 -35373635386266643561373334313963373365353633353436356134346332396434306564396335 -33373033333432316264366133623732343264323033623534346237636463316261623263333263 -37306165343264626332363565323463383038626263323466636465616432643133323134663664 -643831633765386561633436646162356330 +64623066623237306434663636376133323631313362323436396666333866663466343633623661 +6636636361306262356164306639323631643130646334390a313139303462633735376330643964 +61383630663139383636393465333536643338616133646331313664313437353932636339643931 +3136353436383565330a356264383063656466376534663033353030346566353033623636356162 +62636566303939333432643862376431366433623137653630633363326661623166633534323461 +37383138313666623131613761623931333137383235323131623336313530383135376233333465 +62616163346630653438313061333337653430373865333537663663316363663830303037303666 +64353561333633636239633130306233383036353766646161656630303365343137346635666531 +34346663396430326538353162366561343536376165653035383831363364626666623164643637 +39643166313139633162643566616461353337303964363931656436396436326234653034366437 +63306437373862336130633466613734313236313032303764656366343835393633316435643735 +62373365626563666461343062313334646362616239376634633230636136656162366339373964 +33663636373765343262383637616138393338363936346430383031623432393935376134366364 +39316663613630653266336139323537306339313034333930396436313366306337303262386332 +61356237333965663864323436343838616233376266383031326362383732663637393235386237 +32623437623738303663306639613266616537393631386664363965363662643866386665346161 +35316664306538316335353336313139376336383839396236626363383635653935643231373963 +35623937643936623262396437623661306630613333386264396636633838386530343132316637 +64666437613362396232333835323938303065353666616435366366306132323236616330633037 +61623139326638313539383761383064383564356164393963386264376635376431333630663962 +63363364346432653464393361366136376434653533366233616430313034383733353538313764 +66306662336161343032326162383933336262303265373734626135356161326239323963326363 +36656439396335666536626635373133356436646562326634646662353834313466303366373864 +61393161613430663139633832393964383863663638306634633439386433623331633265623364 +30623966663565353464316139353134336337363762303539363830663064366662373965376338 +39313561373366303730356431326563313366316164616562616533343062316534326162383236 +35326363613433343839613265353036633736616532336337313963366662653531383236646533 +64333538356631633739343836376138333739323265356634623062353538366466396662626535 +65623266313132633465663538303031376161363234646563313933383561396263316433353066 +36643832376234306431313339656664633232393666653430633963303133633535343965323237 +63366566613464656234666633373763656462353935383232643066353365663433323262323065 +36363832363962643361366434353039303131343230646335323865393862666164653539633339 +65323535643433616137356234323730323964393439663139353039313865623237316338633063 +61383830376538643961663465633432363763303233363933376430636538373839313536393661 +61636366306364373236326334383832303463353436366235313534643462633764386432653162 +31386430656232383362336232346238313462616365316138663636613438363630313763396238 +36353163626637333764623735333736313632383261383464373064366339626661663561383534 +32363164373837373364643835316235323732653034313837643436376265613531636162623734 +62366537666537346266336639383761343839616139333237333130613137306438626432663832 +39366330303065616462303365343464623039336335303063376235316138666631613633626530 +61393263303461303763383138326463356261633832613432323266636163336138643038343536 +63313734386632663136653164366638646439363861633638306565616139303534663737656637 +65626130363561326430316463326361323265613733643736323963656264396535356665626432 +39313537346237663637396336396166336362663735626236666164363161346436623534616234 +34333461643761303362636239323437356162356635393039366337323430353138326532393236 +34623335386565616638613730666133353136616434666336303666633038326231633631643865 +30303233663636623132353664616365363839313237633963363261653261386139323761303964 +66373931393566396564373836623264616536376164353935373438636365323638653538646263 +32343835353963656165356134313732336438343535373666353264613130663033336533396431 +35653331333664373136346539666431386262633936653234646336336538343938396562333662 +30356135303535623138373839353338343832393462343836363130313261623537383935316135 +36623563373331653636663162363263386537343962333661663034653535613531306466356335 +31663236353065656332303632333266336632303230613139306432303635363161383964316462 +62323630346635333165663564353664363665316439383665656437633636373137343533666239 +64353433613662306663333063396464656335346532386564336361383033323230666137396361 +32336638376363346138373462326632396138323336343634636462633861653037326337633131 +30663938623839316465623763373836643564613736396435663966643338313763633065323863 +31396638326462323265333865323364626264356232343938656539303462666666616230373563 +61646437633238616364656462313839393364633166376137303637623338633833613466343936 +62363161616639353566313264376633353836316434653933343061366638383865666161333438 +30646136626633333431623538666130366132616264633838383262623132303065656363386431 +61326662366430626462666334343638303164616638333631353232323761623862396237336533 +65396232633166346433646237663739663361323739643531376563336463613334656564633937 +30353332313139353064623135346230313730636665373133653531613461633861633333633465 +32363339336431333262333063323063626537343936323036383464333633633333643361363739 +36616433646233643335616362393861343734313330653038643466626531373534663734383864 +38663636666164346331376138623333326261366366666638366435373662666530653133343432 +64663038663964303263333537616164346334633439303961323365336537376535383137626339 +38623733633838636333376139653466313734303133643261343561396638623036623336393564 +37656135333234363535376533393035616432313166393130653136623863623265623662636530 +35636132336438343263306165356166376336373836636239343236366432313938636462353161 +33623735393061323766643261643534633234616633623666643461646461376666306633366433 +33613665343062623632663664383337643730363166336137333933396437333738623033656136 +33616366366331333165633138373039306539383130323861316530643235343166373464376436 +61656261663934656137633330373534363430663361643030323861653265363463323037313938 +30616132383732393965343639336632313865623839306439646136663134643039363663353064 +33633261323661623063613564333763316331346235663536346562326263613065326439373434 +33626538393536303136313261343339626565313266383333636439396430386166323839303838 +63636465383436633365336237393730393765633236396565393133646439303839306235393334 +62393332393235353762363639373933623338663339626331343034356564306436663738333965 +34323965306434616562333766663634303032343039643736313837323237656338643164336437 +62666634663333666661366537346338356230393730353439663435363161636537656131343631 +39336436376662343539646230646233306135333366366566353565653234306164613766356231 +38633432306361643032313562373434393232366362666236303538623337306364306430383961 +65613736383263643237316436663338616162646662326261323432663133616630353662393735 +39323334373936616361633536363134373331343631373036643934306331636231346134656231 +65613164326265653163323130353265393636646531653334306364373064356162366333643066 +66633635336134363538363030653534623461616364616236643034363566313830366136383833 +37626464333137636166373563353164303231376639663231373331323861343565393831363337 +39616364363934663465356631336239313839336331656361313666396430613063336234363730 +62343030623733376466616663303838346434633164396463653431643361346135346539356437 +34616532336161393561356466666537626664366265636138383131303862643131613634616436 +39623336636266313864373833613165663038643437346361333761356461363537333064366134 +64373561656439633563363164653366383761326663303237613266623936373337636564316233 +39623731653934396236353865643330346163353839643061373764323837313332643039343938 +35373461373938626661323961653861313863613937393338303864666138326535376230646661 +32323234646239393234613365346130363231633535353236393165383137363732643635393637 +31343832326432386631393162316439303263643130383162346530643032613037366464386431 +32643432323537326564666233613261623433326134393665373030356635653732383732666632 +34333236663234383834386463643735373736323866613336316635323764643465616538656564 +31326333633034653430613534656330646564383763323330303438326236363937383934333765 +31333133353831393030613964333865666136616139666438346464636634666231393732306135 +33626238333032343831323463393432623633623262303666323336373635633463343137356634 +65376233333563323531383732633131363331303536303262366531373365333333383666626230 +31366564373263353539643335613264373936623434663733346334316363386432653337363765 +32303735346232313639363032316463316666643630666135376662666262366435386537333832 +30626131376161663661316439363035613531366264326538396666613137313738323166396163 +34626237303062306439383731303139333933663936363833646337663163353861363339373166 +66326635386663306537373037366337363935666436366333353037623739393138373664386664 +62363361633230303865616234306361356435623130383233386133303239613736653031373566 +38656134636531323135346634623339623738353066373239393761643539393666373762303734 +65633934333136653964333931663131386432306536383631623265346665633766366461316137 +34333339656134323866346139373537653565636263363636313836376237393764353634363239 +31386438383564343465386531303830326165386237383438393462636536313639633433363863 +34653230376432333061323662663562313763646630393966633131363037613437663138323231 +35653664623766386166343630623361666564383738623266383466663539353139633664393534 +35656633663732343634613030643766373435643930366335366232623539386435303966333830 +62323330633663636631333437346137643130366663343335326263303737326363393138313461 +64343363306330643065313238663964643265663637393664616432303037333433373866633439 +35656231383932643336623535323862373031366263383632366662366138646431316537613435 +37653465643032333565306333623931353136313663633536373635326630333064663762323065 +39383234373365643236663635613834383630366265376134376432646234616261616235386236 +66313630646363646332393166643363303265636235643466363632336162353862366364666365 +62353066333063326265643464666239616266656661396162396132336465396336663965313936 +32613334373036313435623835373634656330363339303738336362636163343162663439313135 +30313037356539396662666332646463396266376237393134653437666565353438353061616533 +66386336336139633730353836376637343432323234346636383565663966386436656333303238 +66376562343630663861306166613539626166306432633936303264616462313763356532383264 +33303937376566613233663662663838656565653331353334353663343739663761326638386130 +62303566616138333362336530353964653139653138646135313337626164373966346535666363 +66336536653839393837613538623030336261323332303262663734633837386563383039313138 +64343364313332633966383963316464313465663531316333376232623831616366363733623039 +61366332333330383364353234396435646634626365353836313131383734653931336662353864 +65383037356338333636363963616166656138333138316438366264393535356137373764643339 +33343539393138613466376431656264306461343333386638306166323033343464316339366461 +36353530386536623139383064653639666537636336373331393935396539643665613939643062 +31623764646431643266666633363334663034366535623137653137323966366162346435353836 +33303363353665663764303038323735623139663130353265633463316232393839663639633838 +39366330373163366662636634666334353937633866643033303830393663336535326430396530 +32613864633365643035396566663330613830373132383432383933646665316163666366613732 +61666337343865303130626636313434316561363839306333343535303239346438613763326365 +39626530393036666564393236643232643338643666653962323136646165623961623265613737 +39393439383138373664396135376233353630316463396165663561383562316664623435653765 +34356137363461633564333536353530643634666138393639663835376364616565663432396335 +33616462343838356239666638353066633734313565393830616330613334373635333566613539 +62343231323466636163323761613633316432333839306537393435663233333831306261643562 +61383762333632363336333335366430366332396434663938316430306535343566316532346162 +38633532336535656461616635623165643336666532393961353565356365383437613366623230 +61306435613065326661643637336663653330363631333461393236633334333930313136323735 +62653961663430316131663634646535376662623232663631663237336630656234633439643033 +34613163636662643962313239313662643231626663643831613438663131316161396364626466 +63393361623232383361373439363338326163313265633431346634613430366162666534363363 +35656233373331626538363730356163343737303463313165326161303333303964626539383130 +65346632376135373032643066393333323766313363656464316333616530316332346463646338 +39626131373632646461363765383165353166356333386433353630633239356563643365623639 +34653832346432333138616664656464626265626336396263633136623235613536633132316237 +62376534636230376237393366613032613436666262346538356430393130343334383461316665 +63383463363338643463376435353333303362636234633866616539623031363862663136383039 +33333865663363636237333939666638393735653963623039383364653363626661366638353636 +35616232616535356362336663376539333731356662363237643365313232363563353932323933 +36393435326436386637373238616362636538326166626234373161613531643631346364616433 +37313534356133616536656635363137623634383136343631353338623833366261343264343238 +37303261666237326335623131306263653332376437366161303435646336646131346338383463 +32643639633265373563376563303837393063306139333963613731373061373739306136346366 +39306362303264393234386238626234383333303231646230613736643437636536313034383331 +36633636393530363063623834626261626636323262343938616230663730623964393237393638 +36336664326434353236343464663037313837373433353764313765613834383231643563373963 +36616564373661663230643239376666353439346534393732366633663436346562336565383766 +34343562643730303233343331396665636634343761313665666165653263656265633939313536 +62633166326363666363613635373534336431373939323066653031663230613637646663643238 +33323339333330336165363564393162626232343937386666663539623138643664326239623830 +61386535643138653663633264643332303464643265343562353366376532373036383861303734 +64666439326639613232623437636333643438376366323637393630393162393239343561396439 +38663936336365633963646533323238623335623366373034643335326235366663646438633839 +33353331633464353733363764366363306465646662316638343762646132656563616464383533 +65363362306236326231626430363463306535386366346664656239396361306231623634363238 +61333735373737636133386530343030356633333264343961323464613732646536323666623939 +63316339393437623539393336353633386439393337623930346434376431383933623633643361 +61326165623164383038316464303731653337376262626137643931613963373665306463313164 +62616131653262333737656366326664306230366130626461306434633337653630373437343261 +32333535656364626437636432316235356438643431666465363435396338373230306166613932 +65616237666231633266666563323864343730666530333933363135336563333830363665643361 +38303335383431643239303962353139333961323162303638616339623330366364333236333935 +66656132666139643337616365326132313038623264653665383733336165353464626437393534 +31393437343537656538656132396562313237323539356538343139636335663231383263306239 +64353565656431306661353763316466613135633539646463663339626137326439326366363330 +62653832396261383935396332353963306137333536396630306238346162326539383263376234 +33353337653766623637666435643632396564323964633730323063663637303031333965383264 +37303962333032653435376537343438316437633938616230636634366166643734616335326466 +65636664326537343437663239613937613536623961613865653930626437306666666633303533 +37656466653066653161313239376331373163323264663537386365373934376432613161393834 +31656630356534353839336131643761386633363564393737306262633961616262343037343864 +39643262663864363437643336333234306162343434376539626661373863303064343538663138 +64616432663533336234613235343336323266613730666131643431613765343265623037356331 +39663134373832623264373330323466336331613436633166376130623533336466303530613664 +31333466383533626437623834636236666662323062336262386133323162353564353966653033 +36363066633631663935333737373861626363643162633635313137663935366636383464663531 +31333530343364356439363564333337393838656264653237633239373136333061386464386363 +66646432363862663836383461643061316331386563623865323330323230653961333433666535 +31393233613262643766626365373565626435643431303535383162643337363534373564393639 +62333130353936333633653163666465396465393462613931643334383232356266366164343934 +37646238616134623561613963353135326132373033313966633862323136393534386564363735 +66616465653633643164613137336432306239353832393465363461336463336335666362343534 +33623035643331386464383161643231333564323334303637316231313937383232623432633035 +63303631383237383138656430303037643765383732363561653130323832313033376239663663 +32356230666263623834313538633330646138396362386530356430363536333139333335356330 +61303636373634353130353166653662313735396230303231373137383262613132666431393863 +66623031613162653264663436353161656331616238336132653938633334333036623564363034 +65383066326662366237343332323430326135373135666336373832666436646638316436633861 +30383030363135376337633834613764303236376131306563303231373133383761323162623564 +36633365636561666637333134636664636564336338313136666266623030393837303030373532 +36316334616639333435376566383064363966363632616432343230363966363834303432313331 +31626532636364346330393330393132363265363766343339363932626536623834316461373434 +33333132346265323636623663386231636663343639316265613239386238333432383662323065 +61623064363461613530353462613864643862353333623137316163323731323234376361373965 +62343838653131333062316632313731303633326530353333306530396333313837366635613961 +32353663393665656433623866336333323039353162316365636564336263373063613339363766 +62343536323961393137653664656134313232393464366235323531313631383965313266333563 +61656137653531633262323232383363323632303336303538323034623766366431643835323363 +62643231636666633662306163383538636331396431633033323461323261303563313962343762 +38343365666333333137346433613865333636353665653533613234316363666463326235373839 +34373035363330393432376439303134613634373230353537643431666432646462643731666462 +64383362306238643834336439343565613066663362333937643932363165623138343333636664 +62616163633339656639393237623035653533303863393437643666343834396434633864623038 +33643564323332646263383433306261613564316663326636616162663564393230313730356663 +63613937306562303364366163303239333063393632346665666163633035613737656237383036 +62383232386534653833353030646333333134383263323866643532373731366538373366323333 +34663933353062386636303662313235653364323636646264393462663032616265333831623966 +35373365613862336233363337336632666130633837613363323630663439376336326431363236 +30313633613631383231666263396532353439353236653861303931356336336539353966373364 +64393364663231643032326634636633303161663832633864363163366661663562616638643430 +33343566323766323930643061333537383736333737383331376261386362616630623039613561 +65346136363462366264386138383338643733623461613037343831313837373862643732323361 +37633865383736616331373465316464336534653866343236393566363264303661313139653632 +38616331323636306238663662356265633162393539396534333662383862336336323265326136 +36323566393631636339383938366234353839633064633663643834306131333762653030353939 +32343738386665373039366664323761373638633430313438306637623337323233333737613830 +36333266363734396530636133313134616433383162373039623864383332363931376537303034 +62616663363230613931373632633264313839336664306432613337353961373139343863383765 +61303339663661646439363665373237353239316634393737663931333134633863366139613664 +62333436383236656537366331353465343134623630323863346161333937393530393834383663 +30616633393733633061303861613539626134643665366262343034303135356262626265633863 +66386135346133303335343866323137336262303463336163353861353463373738616264306432 +64343534393565386466343433323463376132643330326635396263613039313737313339616132 +30386264633161343165623936313565393661633537386233323163386632373437313933313233 +61306439666630316462386263393639646164333033326434613239396238636263326131383364 +64626164366164316337306136363964323839353663656138656539323231313633343938396665 +35373138356532643836373134613433386564303530393833623039336431353566666462373962 +65393832346636633737376130393162303339643235323635333163663562303231633534613864 +63363836396361613630363962326530303266396536343332396331643764323161613132343539 +62636135656139623331386133613736616231656634653131376639313633323536653562623632 +62366438653662646364316336313532353533326237616135373866653665646537353431643062 +36316333326132313134316131636565333832626562353731306563343966316532633166616561 +39343930303333663665626636343039616531353936666432363639313962373263326136316361 +30633262663335353463663030633337396336346432353932613537323137303131323634313432 +65373866623264323561346163316635666233653731383938643337643635333438613861333233 +30353237336664323333653965343038346661663731613236666137626439316634646233313534 +62346531363631303361373862306633363930633862666134663737306638613339376431663439 +30396632313762663835356437623565613837316266663131303537393832633633303935333066 +65316333363334613266383662396534343564346232336136393939626334633364643963633263 +63363536396130323931323531393834636361326130633163613635616239613961313530323131 +30616663346639656234396534383966306636333738363161396238613434313361653136393330 +36646461653065643638363065663631626336376663346163316138323063313935363237623264 +62356263393064373331663562386164663963353662343762393463323634613365333330626566 +62316462343538303939313938326166616463333831343936303731303464653563326236663734 +31313434626134626164613333623863656561343661653638343264393563393162323965653236 +34386463343063653665393831623132303036323132386231616535636464396335646463336337 +35656630653736303136663264343265636338613434303832613439623234323164663530633331 +33366230313234396233623762393439353564623738396163393866343139663434613831366534 +31663239373639636461373163323433653564666565653139643337303036663536353265636139 +38323538663932626466326335316231666661653931636533643762333039613361633139643439 +65323766316461643831613230353436653539326465316638636364643030623166336231633733 +62363230306233393938666139353461343666643436393262623463643565313930306164306235 +62643937646332613836383639356538376164643332303236316536393566313630656464326631 +37343032356133326235326230633236343138323663386438616261633766376237393636623665 +31343736373063323539633730333137623439633036343763633866663532643037666439333737 +32353038343235326138313637373861393865396635656462653930323130633536366338373965 +65396536346262373332343731393166623366313561633065373636346632323032623135666335 +35633363663564636237646434666164313766626639323136633132643531383766333632313338 +32326531313062326462343161623935616463643834613966636539333133643266383133303465 +62613237396430333862306538366236643431356335306339323435393935343230666135373435 +34303139343230313130666633353865393834326366353639316331633336343837323031656164 +65393965323830373336323861333837626637333238326334666130316537313831393730663739 +39376231313862376261653434356439663931326638653862383966383262313232323335626462 +63646337303531376262363532333761373063663266306432366333386132396663366565623662 +65356630653061323636306266363337306232656438333266343466663036363735323334333937 +30353332313462643134333964393236623832663430666561653161633837663331313964303832 +33306435316232356239316631346638643239333633316438383031353035653837303066363932 +61393636376663356634663839623364663638343366656161656637613939626361663135303533 +66656631366166363564343135313635383335336139346638336230653139396538653162386434 +36333631636539336265303535623830363564663361343631623939393836613931393836313839 +31313662333935363561613032353635313465396434653831643865653433626366386631666434 +34653862613166303139636637623434313165646134396537613038333065653139633138623435 +66656138653266663434633833333533383630333665643963646431323366303864653664633739 +63383738363661376431383933666362303839306331373731633565303939633639373466633639 +34616561316638626437626462366231653831653533663362363535323537396366356535373165 +37323665323737636263626461316665623365373234306431336238663135396134333166373733 +38393262353365376530633064323830636432346166636339653630393464306235333837316165 +36616564316536373031643639323061333132313833663036366563363365613939393265303066 +65306532333331316630313438666633336639303461643731363061656633396562396566363062 +34336232366239666130616534316362643437343834343331356433373533303563663230316161 +37633531643936663162393261313864303165356533663239306638346130306334656438623530 +66623037353937636333303232393131343937363163303462383336363961643966613563636333 +36323736366631366233626333623039626630366162383636656562363637373933626432396537 +62323266643039356464313534636365633761336433323136666332306139376161613863363438 +34393136636661633937333832663133346233633062313436646562623837336635643963326237 +63313462393230623862303663656261633631383062303532303936306637373466353965396533 +30666530653464393132616537383563646130393533643833373634306431633934626465303830 +61643939373530386432336361633736363361666666643839393238353464643831366663396165 +36336632316461626634303864356461386266613931643430646532323937633762613633373866 +38663731646265336336373239396330393630346463346562363639663938643136663636396139 +38633661336361343734666138646363326331373439323361346339316162323832393565666435 +61396430376630646565373961633064326432643464323330656363653664303837663761386430 +62313832356638326133323566643262356432663236353961613338626633333733363131386263 +63313735323632353933663934336266306563623733613733663939656231616564316563383235 +30393164373131383365646138306263323134613563636631663661343839383830396134303730 +63623338316330626233383637323665383234656664376530306165353837653330646138393632 +64303237316437333335343639393763616566626665663130363234313335333830656636373562 +62373534663735396433623666336230663132383462656231633839353431663666643735633836 +64313139623062343635333837393163323462396464633236326239363836326533663065333936 +63613833323165353834343232363165313964353533376365323337656436633565303738393436 +65363763373964316531323362373064343834353738326164346333393162633464343535333063 +31643833623062333434653834633432343235633932326661376131646634633539366434306633 +66393037306161303162323462313234663161376338313934396330333039666538396363353532 +61363636356566346536366538653364613764623736313231376639623733643565646663363433 +39653830653331643834656330326266313635396332623137353463333663626237353934363731 +30336136376530643133653936303864363331383662396137303661333462303066386231306565 +62316632316336333439383233646335373662623465386263643037666465376165633939343738 +36383437633836343837326663316434616335323338396663333936653031353334373463353762 +33323833643734323063396361613761653337356463316231303231356139643263343136356266 +31303061666530613132613366333832346562393461353930306236353533363365373063313365 +61376137383963376462383262386531373637316532666237303363343135376333346332663138 +33643436613962653639666236386331393539343863363862666562623733613534363339346565 +66343539393832353032326533636138633631613432633833626634666461623566333865393362 +34313939376364393236316266356438393362316538626236313639663539396439613966646438 +65643735316230343435336238393832396561343164333932636465656565363561613865616139 +34316633353138363266636362633530643835376463393132383565336331623334313833663230 +61636661666336643938633733396437656561386663323734623664333966303561383561383634 +31316236356537356338336232326139326561306537393562366366653961656434306165316264 +36313039303137313630323163636464646266306665313738626239643834303364363238643061 +66633632363765356161663132343766383865343133396666306131623733663162366237376632 +36356433373462366332626330313037343336623436376165306532636539333564386333363134 +37386361396538356633306238666434313137306636643130663062386239663433653734666431 +61343934363864373532623135373931616665633733333264613135313466383762396261346364 +66383762643437396338393661383662633366623630336139386432356366643537613665343962 +63616533666463373465636139303332643362376436663364613361353333613165623966666131 +32343237623966363235623364306664303163386239363863313436373036393238636334363466 +63663332383334383936646638346665636262656130303038393537376231323034306230666538 +63613635323538623966636435336337383465636566653533613631373964623038613563333766 +65386262373639336536383632623939343464643435343166663631323535663462643165373436 +32633435616532323439613762373566626162613435326533353666396366336234633130373534 +31383364376563343932326662653864626632663837613364323436303433373535653431363630 +65313437623338623435633835613835386330303731356333376139313961333037326132656161 +37636466396264313666313737353531366630633036666165303266373130306465626464643535 +62343364363766636335383066303534336461366363663135643365643035363836303539623561 +62303135353436333966346432643363633665623361336663363338623934666337396336356634 +33366566393561363038613538353233343632616433316537353732613131626336393763666431 +39326237343237646338663735313264613366636462363862336332623465376431356338323066 +62333061303737393633623032303034383036353262633538666339393533383331376339646266 +66386535613732633833643430333835613564616630346262383731333061623437393539363538 +34326231616534343164343632343464363137353535653237326237316532623634366631376363 +38636663333237643032633837333734663964363538343865353235393238656338373562343162 +36326564353231613236323561323436656236613135656361653936323163353431326138303730 +37343830613062376261646166656564376432376133366535316463306531313366333937663733 +33313532353535643933333438663135613337376566356462633935393964643733343165623462 +30613865663537303736646361323862626436343261333837333237656565356539613736613737 +63353533663032626432306562333338623930363765613236613662326136366430646635663531 +32356261303566366465316137333864316165386437643033643131396166376165343062333163 +65303030663661323566633861343735393363373237393465353037363835333230313662656636 +32313461356538323036353437643166336133313535316561333432316532356630616265346566 +33326166633862366638636634323934396433626366623833336566633162346531336139313763 +33336663376536393263326561306463313362393437663334326235643864656637346130636431 +62373761613239636338643639653636313032366537396165353666613434366436653662613165 +38353464333966303932323262633437346661353730653636633331373538613861356136333135 +32353031343836396537393736346537333030326365376166326461646333343765633931333834 +65353066373466396130313739303563393134366662393330353338363630383964316365303132 +32333438376538356335363564343439313437653035626366653361326161656637303261373635 +63653036316534376635383735323132623164336238386363346461613536306666343335313936 +35316337633339366339613839363137356133303432666230613162373439373335653863373861 +36306435353135616433343466626462396237663565646336333064386138636434616365313533 +32663536353333616135643033353464393136383535393236306331626335626466333464383834 +62313264636361353266633831393736363535316434643338303531323735323837353535316433 +65396462383736313062613534363533666534386365333930333036643831306438623637626462 +35646131636438363033643131636531366365613864663966666263363966376635303334613138 +62656633393139353834663862666336353732303732306532323436353238643637376165336165 +38363537386339646533333733373433633362393862376138653063336531383464323433313132 +39636165353662356136623461383430356262316461313432373034326638653030353531626631 +39333437646531353266323733653131633030626161343335646634336434343834386238376130 +31316635306539353062366264326436663265323435363133613437353566663232643036316634 +33613834323531353863383266333630653930663430303864346532666238323266326362373833 +61616161366562336535363432643836643861363038316638333366636461386130643661306632 +63663831303361663736376166376535396533396538613563323535626536353462333765316562 +34393261616339303663316661343732616461663034343764356261653738653966666465623763 +64346565386532303330656261663030643431383466313239643136356334633638313833383635 +36353731363264336639383762633538623231643862663538376533376631626337303566306432 +33336530326266613662386133363361663132333932326638306631626232323961666437646237 +64396638383164353163663631313965646131326462396261363366393733626162396230366364 +30663063616536616334353163313230346331363131386434313532303535363861653938643131 +65356164636566383163666134626564643732643134306433613963613930343631366635386337 +39396537386338393061623262613064663537376433386636333331316464616265373862326333 +38383034323531323662316538643335373338303838343730623334316435373233636439393664 +32386564306162303233663066663865326435383463333639643531653664313436316164376666 +32313532386230363266663030386330313464633066623233343737363231316134323233613064 +31326633356538326264633233313662376362303063333139313262653163666366383362646236 +64656135623065303938393233626330626166343030376663353032626265643466623562323830 +65393465393137336437326533653033653837623466313033306138666564613732343134343235 +36343334633763666638363862623464616534396231356231336434636135656437613432393431 +30663639643665666161353334636437363266646232613061383562653137623637613734353833 +33313738653430653430613362316163393837313032346433623230643834623833643664346237 +31303661383734626531633161643266313331623636666663646434626538653361656162333037 +39343638353865623637376563656366616439343537643038616164613436333463653638653031 +37303935306265303236343139636437633930633936396632663161613130643564363632636338 +38666132356234346435376332323032336535373936633362396433336263363963616435343132 +34663739633961626539663739383939663632366364633434636632336335333963656134376563 +62633862653637346538323336383966396661393239653261386133346531616338663935393361 +36346465373639336533643761613338393833383563613936623062613433316662383066336539 +64336534343664616561333132646638643166636562326133343961353338646135343936623236 +64373230333030303662393065623835336234626166393331373532313261333934303735303166 +39613331303664653830386432306163353963336635646164643635346166346633626162623532 +35373536653937626662386163363636353265646137333734353537383133653939363833346334 +33656164393333636334393966363735306164613162366235623530353763363563623165386466 +65633065323939386139393961373538353939666230313636396534613861383633353032353635 +32313933366362333936656631643564346334333635363333663862393334616562386463633264 +66393563373136663865333566623838313263646434396534326530323932396333653930353564 +36373466643063316265646362363031326266666339383462393961656637663461396237333266 +36346339306537333730343264333430393935343633373636646332653037663766633064663337 +31323638353761626539336366306337623331383962363636373334353466636131663261383562 +65386635313763343330653533613935613265343536656532633534653662643966643164653239 +61386265306564663736336230346563633433326534356336316230316330636637316631323264 +30393363343566653233346330336433306235303632363734396330653536656264306663336164 +35316366363361646430636639636636333563323137346438346438393363316362643666626533 +61626434386332353334356339343162313765613333663639626666373138663434353038326462 +62306132393063373433366137313135396262616438346239353135643337396438653865343637 +35333937366633623333313861626233313136636230616462326232626135626263643934376339 +34623539353337326566303834643030653863616139383364313662366333306464383862613664 +32623239393737663631373464396261656565396235643062633631313932386237653765633433 +66393837343834656562326432373566666533373631626239643761303034346135373766366535 +32613865386232653134643964393937653039626134663034653537633430343431373862386565 +61623861313636346364663634666238383261356161333734393339623362393133363438336366 +37636135636665393862323861663066373534646430633866626361646139366236663332643163 +61613064613034396530636565323333626639333230386436643034396132626130303539613266 +30343532393437363862333137306131303732303431633162663830333665356162313431383164 +33613434633737663538316464643662666238396633666539323535633961313765666330396163 +33346561333830313530313963303434663032633536613166366534303830323862353730336638 +33653934653338613035626562646366613931323632363336393566323264353561386362373361 +63376466636433613033393865393337326634643737626262363631316438353964663032663736 +33303861313930626462613131646134646431336365656237373461306136386561333531353332 +35653034393235363731633634303236626564363036653938306535383766373437363064323539 +61326531663938643435333536623236393333653366616637613630326662373462336531666465 +35643633396163383130366564303239306262666564393633306637336434353434326639343666 +64623938303136313837373331316462666433383763393565613161323736343734393565303166 +61303739656438663137316638313665616363306236633330326166376530353738316462303438 +31626164373737656232643835633137366635346262396236333631333062313765396437623763 +33646534613838353039653438643164623135353634343337396532663263343064383763653938 +31623161623735393432316466373331623132373961323331363731386665313635303063326632 +63343735326166383961333733303736313731373934363230376537343461373866333635323138 +34626237626131666632333930303465336131363738373366326632323431646532666636323339 +31326539373664363035333862306633333231646364313362633562646434643964383361656539 +65613434373638313033333031376364643837636162393264346138396133613762353065643637 +63643634656133376638306461306663313839326438663434663431383662396230343662633336 +65653835663564623463646536336633653034336532393963383566663939653433383831646561 +65363061313764663337653862396232353631643863643438633461636234383332376430366562 +37386132383864646631376334353734663531653065653039316362326162313033366430383232 +33366638393739306334343230623138366438636165313634323638396665623439396535346466 +64626433613937323635623035373561373062633838373266333736643662656163613837636262 +65626133623435343763396265616238363861626166646135353339666663333534343766363864 +61376665393433323462336633383262343135613634313762326366323131323966326330393363 +32633635636462353834393863616163356363663130613161636563393839363038346563316462 +66333439386235363834613564623330323939326664646566616339633932396630323637396338 +32393131663066313537303638333436373061663462353732343233313164313235333864633466 +65653430303836663238663231373066626639353933363236616165376664356265393462313334 +66306166336236363264323233316462643766383838646435366531646530323536303332626464 +34623963343137366265623231633830373730366330616365353735376566626131633732323532 +31306235623263383532383731336162333363356337363065656338313337656534303935336261 +66663933303263313932336663333931303364396435396233356639313238663736373832313434 +37313037343061616132336465366666623963646230303430623034636230376664313964323432 +64633062616331383066353865323366363433616666326565306134636363613837333534663332 +30666230316361646537306663353362353836343064366330613833646338636238373731363739 +62313438653066643530663431643861363666353837653436346136313662333066306530366361 +61373736626262306336396666363733386532306365363535643833613066373730353232353334 +34376230373639376430336139396466653636316238393239343432343261396430373332653937 +34636638363462306635616235616665396331303136346330383232353661333064306230633830 +38356562666164646136653735393037383566623537626666383065383939353837643963333539 +39376537663230643737333336333737323439383665636238626430643130613537396136323834 +66373461386265373030363766333861663139616262643066613238323531666138343234643163 +32333339323235316636643566616666356337356438353839363764333434646139623336313766 +36623132303662343035613439373565643266653561303635313664353765663163646166656430 +33626139393963303836316530623938383835666336623361656661333930306637626665653266 +34613964623461373766333966653539353665333035323630383439653465633234356332633163 +31323965643630336364303233373138613630626231313864616566663761663237353166353663 +61653537643237623339623233333336653564333434353137303063663336326563616139623739 +33373130363334626134643231393637373639363666393262396565663434373363356137633365 +39313138383135636662663436326237653035643637323866333433306534393362373936316539 +32343635363561623230383331326533636265396539663339306462323238336363323533353161 +32386562303265616238326562616139363436633765386265383536363539643035323362306262 +66323761636630313731323765376665626232333835666133353065633734323363633563386533 +64343136363933323135353564633562623764316561633633316563366666613135646464373662 +66633564333333666464316632356463333366386431383139336664366433393032373662643264 +36303164336662643364393530663034613530666634333238623831383033646663633762316264 +35613766666361623234323937316539306231316238613365326562323664613963343864663864 +31326334326665363438663731366265396538323533643063366433353334376435353161396664 +38396133393735646664633664383963323865633062646364303837653132356665663635333433 +63306362303238346632343964336430663738323065326537663739366139343934353339633763 +37653134353035656630613437303463323361316138366166613739393238313962393339656330 +63633433623730336237623261386633383532383361393962626235343964663130386365336233 +38313565363831306431343935383433323535653066343634336566333561356430623433663036 +36373431323534666237383563343436313662306364353338623230613738393135643061366439 +31323539346536356366636461616634623062636430646364626335306538653836393135633963 +38666534323063373235616232346630633532663562613539643332623936633237333138316536 +34663164373232363334333530313864333963663638346131323836626561343537643736666435 +63626362343939376637643366646436663263333163333239366630366330303430313036393738 +38353366383234366461353630316131373136623862616633646631646136313633646435386162 +35326539363832393764633466626662623538316534393639613232646330383764373133656165 +36373563623539636233306638663865666662323561383330383863356135363262383363616537 +35646266323930643764663061383134663338656332346431643532306238646164343037353537 +30323765663837303962373331366531333664643965303232383730386337326236356337646433 +34373439323335623336323465313330616534666631656137346464613864346232386566303763 +61663731353531306133663339303439376634333263613161653064303566613030343039383065 +36663761633662353131343935353961653738666361346332623937383266656662653863656431 +61633936616564616165643538313731313236373030306462326134633238353031383030653436 +63313761643735383231663934393231613837393564303939323666356639646331656434636561 +62343339643264316261353161333066383436323763343765633164323563363634386131366232 +66323539333733336630626637343530313333363663316535343139393539666635666435386538 +34656438343038613139323431393939383236653965383635396531393737316133363136313039 +36623331636361353635346266313166656234363032383366333066323831396336623134353231 +38653234323364343731363934313131623831633462343334616533643939336530323462353737 +31663665336564616364346662613932383363396633333132633965373462363230643061666332 +62613563346439383339663730326634376464633634326234346133623134353661353937353137 +39353035643633393561633861396630616365633230313639653066316432643065636565366138 +65373935633263323563363135396537306434666534363538376565356332356330353561313866 +37356163663233366266626138663139663532633834363764303730373464616236363561303562 +30303965393637343839303134393230353738366130373432306434363432616630313635373434 +33393862346162346461613635336630633132373366363961313732616162653463323663346262 +61623233333932336435653337323565326434633663363039393339306664333462373739353336 +61626531313038386235376434336435316163613262346633316563303661323738306462383635 +38666666633330366630356562396261623134376537373766653565393234346231343361316239 +36656162353934623136616137626335366536666534613362313563666432373562636163346230 +35313032376661633835353265396364633836663631663835333831626539626364306432336164 +36663036353336633937663638343639623339623361333634643532396366666131653761366266 +31386237383830653861333939313736366332313836356236623830633234376364343962303965 +66326336653934363863643230623865343833306337316435373064616138623635313662623338 +64323464383434363863666230666533356236373033613439373836303666633137373832326534 +39653264313561383963646633656339386230343166613839386336366266376264343339303037 +64316334623430306639306465643563386363613333306663666334333833303236313030396631 +35646236376632353538613064336237663566376337313933663734326261373731633732326365 +30363964336561663030346437656338346336626365663634323732643230393536626230386230 +34613638306366376236643833363764383037326561373132663062653738333631396564626461 +35343063653464316561623333646632316665386231313534333539643432323739643339303464 +64373861326334636633326433656631316263613933613464396530363162353835653561376338 +39626261303461373532356435336638323130326530656431613732373663643336643332613061 +37373032616438383638626131353737633433313735646639393061353463666234613530663766 +33653839386435633661383764613039643534306438636131396631613562356331396132376230 +35386138313935656539306530396364343234326164626234383533303130386230353436343062 +39383061616538316636363666633839656634346565373239313239363736633639663133323466 +64633439363236663937663761333864363865356331356234373633653033376362366163353131 +37646161633763353031393338653865616531353332353239303931333161626562343665656362 +61363264353235656164633762333332613266653139383461656562613362653132323738356465 +39373733666436396438363431653665643235356161653061666464323863646330313939643439 +62666264363361363561643338356563373331643232616233323033386266323830613036626435 +37356435373265313666323631643966663066353165303830323365626533623364633139366632 +31393561626432313863626463326161356261626537306431363861396433313561663934636563 +64356239346262376464613761353336623033323262623366633936633764303864353463323161 +63356666306632366136316233346334653530386633353738313231613763303838303938326538 +63363031363839316135336365393438383165306461623535633335666231316236643339303130 +31343937333463333732393265366363663532303562363761393236646462646533623563323261 +32633734333335313838306265393633386666396430663466623339646532363865633738396265 +62373738313238646262646663396263396631346235666162326265336662666436363062356362 +32353634336631343633333363343666633736663133353135383935306365383237326338343565 +33316433343733323733353033643732363232363634363930636637353338343465366263303536 +37353534306635663036396464333061636663366332396466326565616665363061363733656334 +65393861396263303735363438393333353338636536353666343765366635333166363231303535 +30316136613935616266343166393331373262376466323337633463393430386238613830663538 +65326265393033373538666137366133646263616333396366653337303162363037636537356462 +39303430336133623133646232396562613030363932383034313166306165313965363564653536 +36363339386138393137373961653062613863646633646632393965306330376231393531653661 +64616135373031636361363166633362383539626333646262336362623562343038326463316464 +37653834343861633430353931303163623263393063613233373635306135346136356263613234 +61313038313433396432643961623838363131613335396438356239306334656166396139623738 +66383862323432663963393261663961336665653632356637663266653932363539383639323739 +35616662633064613032633263343234343166376366616464323564636539336263623366363565 +37316430653064653366363931363165326137356563646461616662383064373361626438386565 +33303734643639306264353563363838643931353436623934363533666362356336613863343638 +31653961633739326435363665393539633839396666626639643366376334313430366430363633 +30323532613133323132363762636439663666393561633261366532336438376564663833303733 +31373963656339333065363136323239646262656632653532616565613365333031636161623136 +36373462316532653530313730313031393165373234633733643538376364303832626533646665 +33633633663965313361313939316366336161663536376562396161323833653861663065336634 +62656563356661313036343734373637616231616237666233373439393031326334633431626635 +34666231623766366633313662363133393836663936366534396264376164323539303537313265 +33633436333261353765633332363933353033653538613932393166323934373035356364313965 +65383734633032643066376233623465636662306533663034353962326333323564663266363161 +61373734656364353535353736353236396566316430663533343865643035656663333537373263 +32353236626439306566623165343132626634663835326563333439386166363036373663363561 +63613461306631326461663238376264396337386536626336633035396232386435336439396632 +62336332363265336566313165643630333836663461393965356663353130663434653035363333 +32386561303462323664333265333939656133373735356134336366643139313538393465306664 +62616136663861363038353430356130323366393530323636353066393733376136656161383131 +61616239323832336137633934316134343666356530323938653633353866656662316661353166 +35393034636663313463376634613934653561663037326165626161303362396664356436323439 +37636537356237623839323730653564363738643661353330666166626261346631313631643366 +38303764623732323537336366666330313262306164653136316334386563316634616534303939 +30373131356438323138346662306538356133303636313766383137666431316637326233396566 +36353530356237633764373864376362386331386435343836613566363465363064626137316165 +30373366646366373864646165643737613337643838313661353661663430393131633364396230 +64643833343932636535623366393931363232613633626664343033313964323835346137333863 +39376132333762326363653761616265636263363233333834386133636137373566646339633535 +64663331323361633264356466373837303661336134616634393562343065663363386231333036 +36306436646637303062326430323834353131636330393636313062373734363238393662373137 +31326534363134623137626632313638373639363238313731643037396530393864303636306165 +32643830383632383630656537346533383930393431643535366637636163613637643362653965 +37633833366630366364663065336463353530393565353931333766363966653038646335663638 +30646632633262313932343761306239333038323163646134636230626665633764343338316465 +35356433636361333935653966386561623064623133386664306363316338366561656238323865 +30313262626438303061666434343861613264636162666535633166313734363432323332666330 +65316666303636383563306335383464336635363035626630613232323331646439353036313730 +37373730623166636166343464316364616637616662363239376233343131336539363236626531 +31653239623630326130313739623536613734326563383266323835613837623330633366336464 +64303337386266386634366332376439626330373766643730353165333735323761303630653263 +37636332643530623136393665356266386130366264656562653039663430616364376364356236 +34313263373031393432376137313961333163333335316236373335656631303439393737386130 +32653539316261326366613561336439376664346538306463616262353231353532613936303231 +65646163383361353437376133373962666137643361666331366131383533653130396131373832 +38343533393639633866666339326138643531383365313364376336373230656565393331353866 +34663936326266343332326665626661396464316138653132346636633738623632356566303862 +62653730393837346466393137373961656464313062613237353062383032316661636638626439 +64646331383630646462623664623165656130376539316637613362613032343261346161663139 +30396261366434623634616237643531373733333433633638616465386331393637353439303939 +30356230633265326364323232363538363662373465343033663533393633306635326339396535 +65353034633165636235653838313930306535303132643031353836633839653133666265666237 +34363732393033343265343832373832396135323638653630666463363164346334343962366332 +61643033326635643839653663356666393639656439353036386266346661303830663166343561 +32323963333164373734363338616466343264356432383037303135333235623737333732633839 +65363161326436376331613966386566386536343637646634396661376635323130376466633634 +30623739353036383933326537336539343630313832376531303538343633613730396161323334 +64643234323265356331613836333861376233653737663166356331326331343138623334313638 +65646362383263643663396133643939386130343365666432613932623438646336316232656264 +32396332646135626465656264643131303634666339363436373565633661643839613365323262 +66633436646638313234313862343133356330616439613038623833323134346666656366356438 +61653539346166366637343730353236666564646634343832386538313734636136663736363436 +37346134306665663635326232633066313830383832623237336334653566396435313562353363 +35326562646333363663636538656363653862393034343735336334646663636533623361343666 +38336238663762636162353938316136383930303231373637366365366536366431326661613231 +65366233353137616264633532363130643536316162336230303636626237363033373364396261 +61626361333635653339336131306665653238333737306331613036643137313766353639306239 +64313435383662356538636664633732386466366133303165313030323061326362306235383962 +66383261313664393635356439363638623163306566303861343465646564313130376235363530 +65626432333735376166643732623630626634383363396233343361313931633930623331663565 +61333737373961303365316434383431626261343336653137636531383339333164616132646536 +62623265366662346430333561353438616363316566623865666538356362376464313134656664 +35363065656430646332393433373365636337643437623733663233396533636163363766363163 +63383331633338623238353930653439623762636666333935383531666436643161316663383534 +34636138656334376533316263393338396334643165303966333031306634366635613066313936 +64623165383537666561643639656334373230353536313837373530623630653433303935653538 +33383335366335383033353330616137663832363563386537376232303636336262613766323964 +65616633653634633131326634646461363036396565336339363266396261313862616430373333 +64666463343331633937383439653164313133333132643431383463663664363335366362386238 +37663435666631386536616266386264346436613037643539313032313833313336313064373735 +35306135343763666137373838303764656336313563653565646433303135353766306536303034 +39393638653063336436363633633032393636623961333633376336303035656632636361353263 +36316134393138653365383962303935386339313934376362306636303439363062623833363733 +62666163336162373566633439333432616137386565373435346564383633616330613061323935 +33326561346262666162356530383062306162636562636335396166356230346466356531313166 +66303430663561626437313361613933356138353863323064613266663434353236396534353264 +33633462616237303163306162363330326362353263653266663530353266353431396362363163 +30613461323635373163396234623538316365636162626439646565653230333832383934363735 +32353966326566346532333461396563393334646365333136333930363031656665346334663238 +353165626132643534626532396433386662 From 148a478121a131053677204afc239f4b6818cdb0 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 8 Oct 2025 12:22:50 +0200 Subject: [PATCH 39/73] Add new hosts to inventory --- inventory.yml | 1334 ++++++++++++++++++++++++------------------------- 1 file changed, 667 insertions(+), 667 deletions(-) diff --git a/inventory.yml b/inventory.yml index c254b40..677a84b 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,668 +1,668 @@ $ANSIBLE_VAULT;1.1;AES256 -64623066623237306434663636376133323631313362323436396666333866663466343633623661 -6636636361306262356164306639323631643130646334390a313139303462633735376330643964 -61383630663139383636393465333536643338616133646331313664313437353932636339643931 -3136353436383565330a356264383063656466376534663033353030346566353033623636356162 -62636566303939333432643862376431366433623137653630633363326661623166633534323461 -37383138313666623131613761623931333137383235323131623336313530383135376233333465 -62616163346630653438313061333337653430373865333537663663316363663830303037303666 -64353561333633636239633130306233383036353766646161656630303365343137346635666531 -34346663396430326538353162366561343536376165653035383831363364626666623164643637 -39643166313139633162643566616461353337303964363931656436396436326234653034366437 -63306437373862336130633466613734313236313032303764656366343835393633316435643735 -62373365626563666461343062313334646362616239376634633230636136656162366339373964 -33663636373765343262383637616138393338363936346430383031623432393935376134366364 -39316663613630653266336139323537306339313034333930396436313366306337303262386332 -61356237333965663864323436343838616233376266383031326362383732663637393235386237 -32623437623738303663306639613266616537393631386664363965363662643866386665346161 -35316664306538316335353336313139376336383839396236626363383635653935643231373963 -35623937643936623262396437623661306630613333386264396636633838386530343132316637 -64666437613362396232333835323938303065353666616435366366306132323236616330633037 -61623139326638313539383761383064383564356164393963386264376635376431333630663962 -63363364346432653464393361366136376434653533366233616430313034383733353538313764 -66306662336161343032326162383933336262303265373734626135356161326239323963326363 -36656439396335666536626635373133356436646562326634646662353834313466303366373864 -61393161613430663139633832393964383863663638306634633439386433623331633265623364 -30623966663565353464316139353134336337363762303539363830663064366662373965376338 -39313561373366303730356431326563313366316164616562616533343062316534326162383236 -35326363613433343839613265353036633736616532336337313963366662653531383236646533 -64333538356631633739343836376138333739323265356634623062353538366466396662626535 -65623266313132633465663538303031376161363234646563313933383561396263316433353066 -36643832376234306431313339656664633232393666653430633963303133633535343965323237 -63366566613464656234666633373763656462353935383232643066353365663433323262323065 -36363832363962643361366434353039303131343230646335323865393862666164653539633339 -65323535643433616137356234323730323964393439663139353039313865623237316338633063 -61383830376538643961663465633432363763303233363933376430636538373839313536393661 -61636366306364373236326334383832303463353436366235313534643462633764386432653162 -31386430656232383362336232346238313462616365316138663636613438363630313763396238 -36353163626637333764623735333736313632383261383464373064366339626661663561383534 -32363164373837373364643835316235323732653034313837643436376265613531636162623734 -62366537666537346266336639383761343839616139333237333130613137306438626432663832 -39366330303065616462303365343464623039336335303063376235316138666631613633626530 -61393263303461303763383138326463356261633832613432323266636163336138643038343536 -63313734386632663136653164366638646439363861633638306565616139303534663737656637 -65626130363561326430316463326361323265613733643736323963656264396535356665626432 -39313537346237663637396336396166336362663735626236666164363161346436623534616234 -34333461643761303362636239323437356162356635393039366337323430353138326532393236 -34623335386565616638613730666133353136616434666336303666633038326231633631643865 -30303233663636623132353664616365363839313237633963363261653261386139323761303964 -66373931393566396564373836623264616536376164353935373438636365323638653538646263 -32343835353963656165356134313732336438343535373666353264613130663033336533396431 -35653331333664373136346539666431386262633936653234646336336538343938396562333662 -30356135303535623138373839353338343832393462343836363130313261623537383935316135 -36623563373331653636663162363263386537343962333661663034653535613531306466356335 -31663236353065656332303632333266336632303230613139306432303635363161383964316462 -62323630346635333165663564353664363665316439383665656437633636373137343533666239 -64353433613662306663333063396464656335346532386564336361383033323230666137396361 -32336638376363346138373462326632396138323336343634636462633861653037326337633131 -30663938623839316465623763373836643564613736396435663966643338313763633065323863 -31396638326462323265333865323364626264356232343938656539303462666666616230373563 -61646437633238616364656462313839393364633166376137303637623338633833613466343936 -62363161616639353566313264376633353836316434653933343061366638383865666161333438 -30646136626633333431623538666130366132616264633838383262623132303065656363386431 -61326662366430626462666334343638303164616638333631353232323761623862396237336533 -65396232633166346433646237663739663361323739643531376563336463613334656564633937 -30353332313139353064623135346230313730636665373133653531613461633861633333633465 -32363339336431333262333063323063626537343936323036383464333633633333643361363739 -36616433646233643335616362393861343734313330653038643466626531373534663734383864 -38663636666164346331376138623333326261366366666638366435373662666530653133343432 -64663038663964303263333537616164346334633439303961323365336537376535383137626339 -38623733633838636333376139653466313734303133643261343561396638623036623336393564 -37656135333234363535376533393035616432313166393130653136623863623265623662636530 -35636132336438343263306165356166376336373836636239343236366432313938636462353161 -33623735393061323766643261643534633234616633623666643461646461376666306633366433 -33613665343062623632663664383337643730363166336137333933396437333738623033656136 -33616366366331333165633138373039306539383130323861316530643235343166373464376436 -61656261663934656137633330373534363430663361643030323861653265363463323037313938 -30616132383732393965343639336632313865623839306439646136663134643039363663353064 -33633261323661623063613564333763316331346235663536346562326263613065326439373434 -33626538393536303136313261343339626565313266383333636439396430386166323839303838 -63636465383436633365336237393730393765633236396565393133646439303839306235393334 -62393332393235353762363639373933623338663339626331343034356564306436663738333965 -34323965306434616562333766663634303032343039643736313837323237656338643164336437 -62666634663333666661366537346338356230393730353439663435363161636537656131343631 -39336436376662343539646230646233306135333366366566353565653234306164613766356231 -38633432306361643032313562373434393232366362666236303538623337306364306430383961 -65613736383263643237316436663338616162646662326261323432663133616630353662393735 -39323334373936616361633536363134373331343631373036643934306331636231346134656231 -65613164326265653163323130353265393636646531653334306364373064356162366333643066 -66633635336134363538363030653534623461616364616236643034363566313830366136383833 -37626464333137636166373563353164303231376639663231373331323861343565393831363337 -39616364363934663465356631336239313839336331656361313666396430613063336234363730 -62343030623733376466616663303838346434633164396463653431643361346135346539356437 -34616532336161393561356466666537626664366265636138383131303862643131613634616436 -39623336636266313864373833613165663038643437346361333761356461363537333064366134 -64373561656439633563363164653366383761326663303237613266623936373337636564316233 -39623731653934396236353865643330346163353839643061373764323837313332643039343938 -35373461373938626661323961653861313863613937393338303864666138326535376230646661 -32323234646239393234613365346130363231633535353236393165383137363732643635393637 -31343832326432386631393162316439303263643130383162346530643032613037366464386431 -32643432323537326564666233613261623433326134393665373030356635653732383732666632 -34333236663234383834386463643735373736323866613336316635323764643465616538656564 -31326333633034653430613534656330646564383763323330303438326236363937383934333765 -31333133353831393030613964333865666136616139666438346464636634666231393732306135 -33626238333032343831323463393432623633623262303666323336373635633463343137356634 -65376233333563323531383732633131363331303536303262366531373365333333383666626230 -31366564373263353539643335613264373936623434663733346334316363386432653337363765 -32303735346232313639363032316463316666643630666135376662666262366435386537333832 -30626131376161663661316439363035613531366264326538396666613137313738323166396163 -34626237303062306439383731303139333933663936363833646337663163353861363339373166 -66326635386663306537373037366337363935666436366333353037623739393138373664386664 -62363361633230303865616234306361356435623130383233386133303239613736653031373566 -38656134636531323135346634623339623738353066373239393761643539393666373762303734 -65633934333136653964333931663131386432306536383631623265346665633766366461316137 -34333339656134323866346139373537653565636263363636313836376237393764353634363239 -31386438383564343465386531303830326165386237383438393462636536313639633433363863 -34653230376432333061323662663562313763646630393966633131363037613437663138323231 -35653664623766386166343630623361666564383738623266383466663539353139633664393534 -35656633663732343634613030643766373435643930366335366232623539386435303966333830 -62323330633663636631333437346137643130366663343335326263303737326363393138313461 -64343363306330643065313238663964643265663637393664616432303037333433373866633439 -35656231383932643336623535323862373031366263383632366662366138646431316537613435 -37653465643032333565306333623931353136313663633536373635326630333064663762323065 -39383234373365643236663635613834383630366265376134376432646234616261616235386236 -66313630646363646332393166643363303265636235643466363632336162353862366364666365 -62353066333063326265643464666239616266656661396162396132336465396336663965313936 -32613334373036313435623835373634656330363339303738336362636163343162663439313135 -30313037356539396662666332646463396266376237393134653437666565353438353061616533 -66386336336139633730353836376637343432323234346636383565663966386436656333303238 -66376562343630663861306166613539626166306432633936303264616462313763356532383264 -33303937376566613233663662663838656565653331353334353663343739663761326638386130 -62303566616138333362336530353964653139653138646135313337626164373966346535666363 -66336536653839393837613538623030336261323332303262663734633837386563383039313138 -64343364313332633966383963316464313465663531316333376232623831616366363733623039 -61366332333330383364353234396435646634626365353836313131383734653931336662353864 -65383037356338333636363963616166656138333138316438366264393535356137373764643339 -33343539393138613466376431656264306461343333386638306166323033343464316339366461 -36353530386536623139383064653639666537636336373331393935396539643665613939643062 -31623764646431643266666633363334663034366535623137653137323966366162346435353836 -33303363353665663764303038323735623139663130353265633463316232393839663639633838 -39366330373163366662636634666334353937633866643033303830393663336535326430396530 -32613864633365643035396566663330613830373132383432383933646665316163666366613732 -61666337343865303130626636313434316561363839306333343535303239346438613763326365 -39626530393036666564393236643232643338643666653962323136646165623961623265613737 -39393439383138373664396135376233353630316463396165663561383562316664623435653765 -34356137363461633564333536353530643634666138393639663835376364616565663432396335 -33616462343838356239666638353066633734313565393830616330613334373635333566613539 -62343231323466636163323761613633316432333839306537393435663233333831306261643562 -61383762333632363336333335366430366332396434663938316430306535343566316532346162 -38633532336535656461616635623165643336666532393961353565356365383437613366623230 -61306435613065326661643637336663653330363631333461393236633334333930313136323735 -62653961663430316131663634646535376662623232663631663237336630656234633439643033 -34613163636662643962313239313662643231626663643831613438663131316161396364626466 -63393361623232383361373439363338326163313265633431346634613430366162666534363363 -35656233373331626538363730356163343737303463313165326161303333303964626539383130 -65346632376135373032643066393333323766313363656464316333616530316332346463646338 -39626131373632646461363765383165353166356333386433353630633239356563643365623639 -34653832346432333138616664656464626265626336396263633136623235613536633132316237 -62376534636230376237393366613032613436666262346538356430393130343334383461316665 -63383463363338643463376435353333303362636234633866616539623031363862663136383039 -33333865663363636237333939666638393735653963623039383364653363626661366638353636 -35616232616535356362336663376539333731356662363237643365313232363563353932323933 -36393435326436386637373238616362636538326166626234373161613531643631346364616433 -37313534356133616536656635363137623634383136343631353338623833366261343264343238 -37303261666237326335623131306263653332376437366161303435646336646131346338383463 -32643639633265373563376563303837393063306139333963613731373061373739306136346366 -39306362303264393234386238626234383333303231646230613736643437636536313034383331 -36633636393530363063623834626261626636323262343938616230663730623964393237393638 -36336664326434353236343464663037313837373433353764313765613834383231643563373963 -36616564373661663230643239376666353439346534393732366633663436346562336565383766 -34343562643730303233343331396665636634343761313665666165653263656265633939313536 -62633166326363666363613635373534336431373939323066653031663230613637646663643238 -33323339333330336165363564393162626232343937386666663539623138643664326239623830 -61386535643138653663633264643332303464643265343562353366376532373036383861303734 -64666439326639613232623437636333643438376366323637393630393162393239343561396439 -38663936336365633963646533323238623335623366373034643335326235366663646438633839 -33353331633464353733363764366363306465646662316638343762646132656563616464383533 -65363362306236326231626430363463306535386366346664656239396361306231623634363238 -61333735373737636133386530343030356633333264343961323464613732646536323666623939 -63316339393437623539393336353633386439393337623930346434376431383933623633643361 -61326165623164383038316464303731653337376262626137643931613963373665306463313164 -62616131653262333737656366326664306230366130626461306434633337653630373437343261 -32333535656364626437636432316235356438643431666465363435396338373230306166613932 -65616237666231633266666563323864343730666530333933363135336563333830363665643361 -38303335383431643239303962353139333961323162303638616339623330366364333236333935 -66656132666139643337616365326132313038623264653665383733336165353464626437393534 -31393437343537656538656132396562313237323539356538343139636335663231383263306239 -64353565656431306661353763316466613135633539646463663339626137326439326366363330 -62653832396261383935396332353963306137333536396630306238346162326539383263376234 -33353337653766623637666435643632396564323964633730323063663637303031333965383264 -37303962333032653435376537343438316437633938616230636634366166643734616335326466 -65636664326537343437663239613937613536623961613865653930626437306666666633303533 -37656466653066653161313239376331373163323264663537386365373934376432613161393834 -31656630356534353839336131643761386633363564393737306262633961616262343037343864 -39643262663864363437643336333234306162343434376539626661373863303064343538663138 -64616432663533336234613235343336323266613730666131643431613765343265623037356331 -39663134373832623264373330323466336331613436633166376130623533336466303530613664 -31333466383533626437623834636236666662323062336262386133323162353564353966653033 -36363066633631663935333737373861626363643162633635313137663935366636383464663531 -31333530343364356439363564333337393838656264653237633239373136333061386464386363 -66646432363862663836383461643061316331386563623865323330323230653961333433666535 -31393233613262643766626365373565626435643431303535383162643337363534373564393639 -62333130353936333633653163666465396465393462613931643334383232356266366164343934 -37646238616134623561613963353135326132373033313966633862323136393534386564363735 -66616465653633643164613137336432306239353832393465363461336463336335666362343534 -33623035643331386464383161643231333564323334303637316231313937383232623432633035 -63303631383237383138656430303037643765383732363561653130323832313033376239663663 -32356230666263623834313538633330646138396362386530356430363536333139333335356330 -61303636373634353130353166653662313735396230303231373137383262613132666431393863 -66623031613162653264663436353161656331616238336132653938633334333036623564363034 -65383066326662366237343332323430326135373135666336373832666436646638316436633861 -30383030363135376337633834613764303236376131306563303231373133383761323162623564 -36633365636561666637333134636664636564336338313136666266623030393837303030373532 -36316334616639333435376566383064363966363632616432343230363966363834303432313331 -31626532636364346330393330393132363265363766343339363932626536623834316461373434 -33333132346265323636623663386231636663343639316265613239386238333432383662323065 -61623064363461613530353462613864643862353333623137316163323731323234376361373965 -62343838653131333062316632313731303633326530353333306530396333313837366635613961 -32353663393665656433623866336333323039353162316365636564336263373063613339363766 -62343536323961393137653664656134313232393464366235323531313631383965313266333563 -61656137653531633262323232383363323632303336303538323034623766366431643835323363 -62643231636666633662306163383538636331396431633033323461323261303563313962343762 -38343365666333333137346433613865333636353665653533613234316363666463326235373839 -34373035363330393432376439303134613634373230353537643431666432646462643731666462 -64383362306238643834336439343565613066663362333937643932363165623138343333636664 -62616163633339656639393237623035653533303863393437643666343834396434633864623038 -33643564323332646263383433306261613564316663326636616162663564393230313730356663 -63613937306562303364366163303239333063393632346665666163633035613737656237383036 -62383232386534653833353030646333333134383263323866643532373731366538373366323333 -34663933353062386636303662313235653364323636646264393462663032616265333831623966 -35373365613862336233363337336632666130633837613363323630663439376336326431363236 -30313633613631383231666263396532353439353236653861303931356336336539353966373364 -64393364663231643032326634636633303161663832633864363163366661663562616638643430 -33343566323766323930643061333537383736333737383331376261386362616630623039613561 -65346136363462366264386138383338643733623461613037343831313837373862643732323361 -37633865383736616331373465316464336534653866343236393566363264303661313139653632 -38616331323636306238663662356265633162393539396534333662383862336336323265326136 -36323566393631636339383938366234353839633064633663643834306131333762653030353939 -32343738386665373039366664323761373638633430313438306637623337323233333737613830 -36333266363734396530636133313134616433383162373039623864383332363931376537303034 -62616663363230613931373632633264313839336664306432613337353961373139343863383765 -61303339663661646439363665373237353239316634393737663931333134633863366139613664 -62333436383236656537366331353465343134623630323863346161333937393530393834383663 -30616633393733633061303861613539626134643665366262343034303135356262626265633863 -66386135346133303335343866323137336262303463336163353861353463373738616264306432 -64343534393565386466343433323463376132643330326635396263613039313737313339616132 -30386264633161343165623936313565393661633537386233323163386632373437313933313233 -61306439666630316462386263393639646164333033326434613239396238636263326131383364 -64626164366164316337306136363964323839353663656138656539323231313633343938396665 -35373138356532643836373134613433386564303530393833623039336431353566666462373962 -65393832346636633737376130393162303339643235323635333163663562303231633534613864 -63363836396361613630363962326530303266396536343332396331643764323161613132343539 -62636135656139623331386133613736616231656634653131376639313633323536653562623632 -62366438653662646364316336313532353533326237616135373866653665646537353431643062 -36316333326132313134316131636565333832626562353731306563343966316532633166616561 -39343930303333663665626636343039616531353936666432363639313962373263326136316361 -30633262663335353463663030633337396336346432353932613537323137303131323634313432 -65373866623264323561346163316635666233653731383938643337643635333438613861333233 -30353237336664323333653965343038346661663731613236666137626439316634646233313534 -62346531363631303361373862306633363930633862666134663737306638613339376431663439 -30396632313762663835356437623565613837316266663131303537393832633633303935333066 -65316333363334613266383662396534343564346232336136393939626334633364643963633263 -63363536396130323931323531393834636361326130633163613635616239613961313530323131 -30616663346639656234396534383966306636333738363161396238613434313361653136393330 -36646461653065643638363065663631626336376663346163316138323063313935363237623264 -62356263393064373331663562386164663963353662343762393463323634613365333330626566 -62316462343538303939313938326166616463333831343936303731303464653563326236663734 -31313434626134626164613333623863656561343661653638343264393563393162323965653236 -34386463343063653665393831623132303036323132386231616535636464396335646463336337 -35656630653736303136663264343265636338613434303832613439623234323164663530633331 -33366230313234396233623762393439353564623738396163393866343139663434613831366534 -31663239373639636461373163323433653564666565653139643337303036663536353265636139 -38323538663932626466326335316231666661653931636533643762333039613361633139643439 -65323766316461643831613230353436653539326465316638636364643030623166336231633733 -62363230306233393938666139353461343666643436393262623463643565313930306164306235 -62643937646332613836383639356538376164643332303236316536393566313630656464326631 -37343032356133326235326230633236343138323663386438616261633766376237393636623665 -31343736373063323539633730333137623439633036343763633866663532643037666439333737 -32353038343235326138313637373861393865396635656462653930323130633536366338373965 -65396536346262373332343731393166623366313561633065373636346632323032623135666335 -35633363663564636237646434666164313766626639323136633132643531383766333632313338 -32326531313062326462343161623935616463643834613966636539333133643266383133303465 -62613237396430333862306538366236643431356335306339323435393935343230666135373435 -34303139343230313130666633353865393834326366353639316331633336343837323031656164 -65393965323830373336323861333837626637333238326334666130316537313831393730663739 -39376231313862376261653434356439663931326638653862383966383262313232323335626462 -63646337303531376262363532333761373063663266306432366333386132396663366565623662 -65356630653061323636306266363337306232656438333266343466663036363735323334333937 -30353332313462643134333964393236623832663430666561653161633837663331313964303832 -33306435316232356239316631346638643239333633316438383031353035653837303066363932 -61393636376663356634663839623364663638343366656161656637613939626361663135303533 -66656631366166363564343135313635383335336139346638336230653139396538653162386434 -36333631636539336265303535623830363564663361343631623939393836613931393836313839 -31313662333935363561613032353635313465396434653831643865653433626366386631666434 -34653862613166303139636637623434313165646134396537613038333065653139633138623435 -66656138653266663434633833333533383630333665643963646431323366303864653664633739 -63383738363661376431383933666362303839306331373731633565303939633639373466633639 -34616561316638626437626462366231653831653533663362363535323537396366356535373165 -37323665323737636263626461316665623365373234306431336238663135396134333166373733 -38393262353365376530633064323830636432346166636339653630393464306235333837316165 -36616564316536373031643639323061333132313833663036366563363365613939393265303066 -65306532333331316630313438666633336639303461643731363061656633396562396566363062 -34336232366239666130616534316362643437343834343331356433373533303563663230316161 -37633531643936663162393261313864303165356533663239306638346130306334656438623530 -66623037353937636333303232393131343937363163303462383336363961643966613563636333 -36323736366631366233626333623039626630366162383636656562363637373933626432396537 -62323266643039356464313534636365633761336433323136666332306139376161613863363438 -34393136636661633937333832663133346233633062313436646562623837336635643963326237 -63313462393230623862303663656261633631383062303532303936306637373466353965396533 -30666530653464393132616537383563646130393533643833373634306431633934626465303830 -61643939373530386432336361633736363361666666643839393238353464643831366663396165 -36336632316461626634303864356461386266613931643430646532323937633762613633373866 -38663731646265336336373239396330393630346463346562363639663938643136663636396139 -38633661336361343734666138646363326331373439323361346339316162323832393565666435 -61396430376630646565373961633064326432643464323330656363653664303837663761386430 -62313832356638326133323566643262356432663236353961613338626633333733363131386263 -63313735323632353933663934336266306563623733613733663939656231616564316563383235 -30393164373131383365646138306263323134613563636631663661343839383830396134303730 -63623338316330626233383637323665383234656664376530306165353837653330646138393632 -64303237316437333335343639393763616566626665663130363234313335333830656636373562 -62373534663735396433623666336230663132383462656231633839353431663666643735633836 -64313139623062343635333837393163323462396464633236326239363836326533663065333936 -63613833323165353834343232363165313964353533376365323337656436633565303738393436 -65363763373964316531323362373064343834353738326164346333393162633464343535333063 -31643833623062333434653834633432343235633932326661376131646634633539366434306633 -66393037306161303162323462313234663161376338313934396330333039666538396363353532 -61363636356566346536366538653364613764623736313231376639623733643565646663363433 -39653830653331643834656330326266313635396332623137353463333663626237353934363731 -30336136376530643133653936303864363331383662396137303661333462303066386231306565 -62316632316336333439383233646335373662623465386263643037666465376165633939343738 -36383437633836343837326663316434616335323338396663333936653031353334373463353762 -33323833643734323063396361613761653337356463316231303231356139643263343136356266 -31303061666530613132613366333832346562393461353930306236353533363365373063313365 -61376137383963376462383262386531373637316532666237303363343135376333346332663138 -33643436613962653639666236386331393539343863363862666562623733613534363339346565 -66343539393832353032326533636138633631613432633833626634666461623566333865393362 -34313939376364393236316266356438393362316538626236313639663539396439613966646438 -65643735316230343435336238393832396561343164333932636465656565363561613865616139 -34316633353138363266636362633530643835376463393132383565336331623334313833663230 -61636661666336643938633733396437656561386663323734623664333966303561383561383634 -31316236356537356338336232326139326561306537393562366366653961656434306165316264 -36313039303137313630323163636464646266306665313738626239643834303364363238643061 -66633632363765356161663132343766383865343133396666306131623733663162366237376632 -36356433373462366332626330313037343336623436376165306532636539333564386333363134 -37386361396538356633306238666434313137306636643130663062386239663433653734666431 -61343934363864373532623135373931616665633733333264613135313466383762396261346364 -66383762643437396338393661383662633366623630336139386432356366643537613665343962 -63616533666463373465636139303332643362376436663364613361353333613165623966666131 -32343237623966363235623364306664303163386239363863313436373036393238636334363466 -63663332383334383936646638346665636262656130303038393537376231323034306230666538 -63613635323538623966636435336337383465636566653533613631373964623038613563333766 -65386262373639336536383632623939343464643435343166663631323535663462643165373436 -32633435616532323439613762373566626162613435326533353666396366336234633130373534 -31383364376563343932326662653864626632663837613364323436303433373535653431363630 -65313437623338623435633835613835386330303731356333376139313961333037326132656161 -37636466396264313666313737353531366630633036666165303266373130306465626464643535 -62343364363766636335383066303534336461366363663135643365643035363836303539623561 -62303135353436333966346432643363633665623361336663363338623934666337396336356634 -33366566393561363038613538353233343632616433316537353732613131626336393763666431 -39326237343237646338663735313264613366636462363862336332623465376431356338323066 -62333061303737393633623032303034383036353262633538666339393533383331376339646266 -66386535613732633833643430333835613564616630346262383731333061623437393539363538 -34326231616534343164343632343464363137353535653237326237316532623634366631376363 -38636663333237643032633837333734663964363538343865353235393238656338373562343162 -36326564353231613236323561323436656236613135656361653936323163353431326138303730 -37343830613062376261646166656564376432376133366535316463306531313366333937663733 -33313532353535643933333438663135613337376566356462633935393964643733343165623462 -30613865663537303736646361323862626436343261333837333237656565356539613736613737 -63353533663032626432306562333338623930363765613236613662326136366430646635663531 -32356261303566366465316137333864316165386437643033643131396166376165343062333163 -65303030663661323566633861343735393363373237393465353037363835333230313662656636 -32313461356538323036353437643166336133313535316561333432316532356630616265346566 -33326166633862366638636634323934396433626366623833336566633162346531336139313763 -33336663376536393263326561306463313362393437663334326235643864656637346130636431 -62373761613239636338643639653636313032366537396165353666613434366436653662613165 -38353464333966303932323262633437346661353730653636633331373538613861356136333135 -32353031343836396537393736346537333030326365376166326461646333343765633931333834 -65353066373466396130313739303563393134366662393330353338363630383964316365303132 -32333438376538356335363564343439313437653035626366653361326161656637303261373635 -63653036316534376635383735323132623164336238386363346461613536306666343335313936 -35316337633339366339613839363137356133303432666230613162373439373335653863373861 -36306435353135616433343466626462396237663565646336333064386138636434616365313533 -32663536353333616135643033353464393136383535393236306331626335626466333464383834 -62313264636361353266633831393736363535316434643338303531323735323837353535316433 -65396462383736313062613534363533666534386365333930333036643831306438623637626462 -35646131636438363033643131636531366365613864663966666263363966376635303334613138 -62656633393139353834663862666336353732303732306532323436353238643637376165336165 -38363537386339646533333733373433633362393862376138653063336531383464323433313132 -39636165353662356136623461383430356262316461313432373034326638653030353531626631 -39333437646531353266323733653131633030626161343335646634336434343834386238376130 -31316635306539353062366264326436663265323435363133613437353566663232643036316634 -33613834323531353863383266333630653930663430303864346532666238323266326362373833 -61616161366562336535363432643836643861363038316638333366636461386130643661306632 -63663831303361663736376166376535396533396538613563323535626536353462333765316562 -34393261616339303663316661343732616461663034343764356261653738653966666465623763 -64346565386532303330656261663030643431383466313239643136356334633638313833383635 -36353731363264336639383762633538623231643862663538376533376631626337303566306432 -33336530326266613662386133363361663132333932326638306631626232323961666437646237 -64396638383164353163663631313965646131326462396261363366393733626162396230366364 -30663063616536616334353163313230346331363131386434313532303535363861653938643131 -65356164636566383163666134626564643732643134306433613963613930343631366635386337 -39396537386338393061623262613064663537376433386636333331316464616265373862326333 -38383034323531323662316538643335373338303838343730623334316435373233636439393664 -32386564306162303233663066663865326435383463333639643531653664313436316164376666 -32313532386230363266663030386330313464633066623233343737363231316134323233613064 -31326633356538326264633233313662376362303063333139313262653163666366383362646236 -64656135623065303938393233626330626166343030376663353032626265643466623562323830 -65393465393137336437326533653033653837623466313033306138666564613732343134343235 -36343334633763666638363862623464616534396231356231336434636135656437613432393431 -30663639643665666161353334636437363266646232613061383562653137623637613734353833 -33313738653430653430613362316163393837313032346433623230643834623833643664346237 -31303661383734626531633161643266313331623636666663646434626538653361656162333037 -39343638353865623637376563656366616439343537643038616164613436333463653638653031 -37303935306265303236343139636437633930633936396632663161613130643564363632636338 -38666132356234346435376332323032336535373936633362396433336263363963616435343132 -34663739633961626539663739383939663632366364633434636632336335333963656134376563 -62633862653637346538323336383966396661393239653261386133346531616338663935393361 -36346465373639336533643761613338393833383563613936623062613433316662383066336539 -64336534343664616561333132646638643166636562326133343961353338646135343936623236 -64373230333030303662393065623835336234626166393331373532313261333934303735303166 -39613331303664653830386432306163353963336635646164643635346166346633626162623532 -35373536653937626662386163363636353265646137333734353537383133653939363833346334 -33656164393333636334393966363735306164613162366235623530353763363563623165386466 -65633065323939386139393961373538353939666230313636396534613861383633353032353635 -32313933366362333936656631643564346334333635363333663862393334616562386463633264 -66393563373136663865333566623838313263646434396534326530323932396333653930353564 -36373466643063316265646362363031326266666339383462393961656637663461396237333266 -36346339306537333730343264333430393935343633373636646332653037663766633064663337 -31323638353761626539336366306337623331383962363636373334353466636131663261383562 -65386635313763343330653533613935613265343536656532633534653662643966643164653239 -61386265306564663736336230346563633433326534356336316230316330636637316631323264 -30393363343566653233346330336433306235303632363734396330653536656264306663336164 -35316366363361646430636639636636333563323137346438346438393363316362643666626533 -61626434386332353334356339343162313765613333663639626666373138663434353038326462 -62306132393063373433366137313135396262616438346239353135643337396438653865343637 -35333937366633623333313861626233313136636230616462326232626135626263643934376339 -34623539353337326566303834643030653863616139383364313662366333306464383862613664 -32623239393737663631373464396261656565396235643062633631313932386237653765633433 -66393837343834656562326432373566666533373631626239643761303034346135373766366535 -32613865386232653134643964393937653039626134663034653537633430343431373862386565 -61623861313636346364663634666238383261356161333734393339623362393133363438336366 -37636135636665393862323861663066373534646430633866626361646139366236663332643163 -61613064613034396530636565323333626639333230386436643034396132626130303539613266 -30343532393437363862333137306131303732303431633162663830333665356162313431383164 -33613434633737663538316464643662666238396633666539323535633961313765666330396163 -33346561333830313530313963303434663032633536613166366534303830323862353730336638 -33653934653338613035626562646366613931323632363336393566323264353561386362373361 -63376466636433613033393865393337326634643737626262363631316438353964663032663736 -33303861313930626462613131646134646431336365656237373461306136386561333531353332 -35653034393235363731633634303236626564363036653938306535383766373437363064323539 -61326531663938643435333536623236393333653366616637613630326662373462336531666465 -35643633396163383130366564303239306262666564393633306637336434353434326639343666 -64623938303136313837373331316462666433383763393565613161323736343734393565303166 -61303739656438663137316638313665616363306236633330326166376530353738316462303438 -31626164373737656232643835633137366635346262396236333631333062313765396437623763 -33646534613838353039653438643164623135353634343337396532663263343064383763653938 -31623161623735393432316466373331623132373961323331363731386665313635303063326632 -63343735326166383961333733303736313731373934363230376537343461373866333635323138 -34626237626131666632333930303465336131363738373366326632323431646532666636323339 -31326539373664363035333862306633333231646364313362633562646434643964383361656539 -65613434373638313033333031376364643837636162393264346138396133613762353065643637 -63643634656133376638306461306663313839326438663434663431383662396230343662633336 -65653835663564623463646536336633653034336532393963383566663939653433383831646561 -65363061313764663337653862396232353631643863643438633461636234383332376430366562 -37386132383864646631376334353734663531653065653039316362326162313033366430383232 -33366638393739306334343230623138366438636165313634323638396665623439396535346466 -64626433613937323635623035373561373062633838373266333736643662656163613837636262 -65626133623435343763396265616238363861626166646135353339666663333534343766363864 -61376665393433323462336633383262343135613634313762326366323131323966326330393363 -32633635636462353834393863616163356363663130613161636563393839363038346563316462 -66333439386235363834613564623330323939326664646566616339633932396630323637396338 -32393131663066313537303638333436373061663462353732343233313164313235333864633466 -65653430303836663238663231373066626639353933363236616165376664356265393462313334 -66306166336236363264323233316462643766383838646435366531646530323536303332626464 -34623963343137366265623231633830373730366330616365353735376566626131633732323532 -31306235623263383532383731336162333363356337363065656338313337656534303935336261 -66663933303263313932336663333931303364396435396233356639313238663736373832313434 -37313037343061616132336465366666623963646230303430623034636230376664313964323432 -64633062616331383066353865323366363433616666326565306134636363613837333534663332 -30666230316361646537306663353362353836343064366330613833646338636238373731363739 -62313438653066643530663431643861363666353837653436346136313662333066306530366361 -61373736626262306336396666363733386532306365363535643833613066373730353232353334 -34376230373639376430336139396466653636316238393239343432343261396430373332653937 -34636638363462306635616235616665396331303136346330383232353661333064306230633830 -38356562666164646136653735393037383566623537626666383065383939353837643963333539 -39376537663230643737333336333737323439383665636238626430643130613537396136323834 -66373461386265373030363766333861663139616262643066613238323531666138343234643163 -32333339323235316636643566616666356337356438353839363764333434646139623336313766 -36623132303662343035613439373565643266653561303635313664353765663163646166656430 -33626139393963303836316530623938383835666336623361656661333930306637626665653266 -34613964623461373766333966653539353665333035323630383439653465633234356332633163 -31323965643630336364303233373138613630626231313864616566663761663237353166353663 -61653537643237623339623233333336653564333434353137303063663336326563616139623739 -33373130363334626134643231393637373639363666393262396565663434373363356137633365 -39313138383135636662663436326237653035643637323866333433306534393362373936316539 -32343635363561623230383331326533636265396539663339306462323238336363323533353161 -32386562303265616238326562616139363436633765386265383536363539643035323362306262 -66323761636630313731323765376665626232333835666133353065633734323363633563386533 -64343136363933323135353564633562623764316561633633316563366666613135646464373662 -66633564333333666464316632356463333366386431383139336664366433393032373662643264 -36303164336662643364393530663034613530666634333238623831383033646663633762316264 -35613766666361623234323937316539306231316238613365326562323664613963343864663864 -31326334326665363438663731366265396538323533643063366433353334376435353161396664 -38396133393735646664633664383963323865633062646364303837653132356665663635333433 -63306362303238346632343964336430663738323065326537663739366139343934353339633763 -37653134353035656630613437303463323361316138366166613739393238313962393339656330 -63633433623730336237623261386633383532383361393962626235343964663130386365336233 -38313565363831306431343935383433323535653066343634336566333561356430623433663036 -36373431323534666237383563343436313662306364353338623230613738393135643061366439 -31323539346536356366636461616634623062636430646364626335306538653836393135633963 -38666534323063373235616232346630633532663562613539643332623936633237333138316536 -34663164373232363334333530313864333963663638346131323836626561343537643736666435 -63626362343939376637643366646436663263333163333239366630366330303430313036393738 -38353366383234366461353630316131373136623862616633646631646136313633646435386162 -35326539363832393764633466626662623538316534393639613232646330383764373133656165 -36373563623539636233306638663865666662323561383330383863356135363262383363616537 -35646266323930643764663061383134663338656332346431643532306238646164343037353537 -30323765663837303962373331366531333664643965303232383730386337326236356337646433 -34373439323335623336323465313330616534666631656137346464613864346232386566303763 -61663731353531306133663339303439376634333263613161653064303566613030343039383065 -36663761633662353131343935353961653738666361346332623937383266656662653863656431 -61633936616564616165643538313731313236373030306462326134633238353031383030653436 -63313761643735383231663934393231613837393564303939323666356639646331656434636561 -62343339643264316261353161333066383436323763343765633164323563363634386131366232 -66323539333733336630626637343530313333363663316535343139393539666635666435386538 -34656438343038613139323431393939383236653965383635396531393737316133363136313039 -36623331636361353635346266313166656234363032383366333066323831396336623134353231 -38653234323364343731363934313131623831633462343334616533643939336530323462353737 -31663665336564616364346662613932383363396633333132633965373462363230643061666332 -62613563346439383339663730326634376464633634326234346133623134353661353937353137 -39353035643633393561633861396630616365633230313639653066316432643065636565366138 -65373935633263323563363135396537306434666534363538376565356332356330353561313866 -37356163663233366266626138663139663532633834363764303730373464616236363561303562 -30303965393637343839303134393230353738366130373432306434363432616630313635373434 -33393862346162346461613635336630633132373366363961313732616162653463323663346262 -61623233333932336435653337323565326434633663363039393339306664333462373739353336 -61626531313038386235376434336435316163613262346633316563303661323738306462383635 -38666666633330366630356562396261623134376537373766653565393234346231343361316239 -36656162353934623136616137626335366536666534613362313563666432373562636163346230 -35313032376661633835353265396364633836663631663835333831626539626364306432336164 -36663036353336633937663638343639623339623361333634643532396366666131653761366266 -31386237383830653861333939313736366332313836356236623830633234376364343962303965 -66326336653934363863643230623865343833306337316435373064616138623635313662623338 -64323464383434363863666230666533356236373033613439373836303666633137373832326534 -39653264313561383963646633656339386230343166613839386336366266376264343339303037 -64316334623430306639306465643563386363613333306663666334333833303236313030396631 -35646236376632353538613064336237663566376337313933663734326261373731633732326365 -30363964336561663030346437656338346336626365663634323732643230393536626230386230 -34613638306366376236643833363764383037326561373132663062653738333631396564626461 -35343063653464316561623333646632316665386231313534333539643432323739643339303464 -64373861326334636633326433656631316263613933613464396530363162353835653561376338 -39626261303461373532356435336638323130326530656431613732373663643336643332613061 -37373032616438383638626131353737633433313735646639393061353463666234613530663766 -33653839386435633661383764613039643534306438636131396631613562356331396132376230 -35386138313935656539306530396364343234326164626234383533303130386230353436343062 -39383061616538316636363666633839656634346565373239313239363736633639663133323466 -64633439363236663937663761333864363865356331356234373633653033376362366163353131 -37646161633763353031393338653865616531353332353239303931333161626562343665656362 -61363264353235656164633762333332613266653139383461656562613362653132323738356465 -39373733666436396438363431653665643235356161653061666464323863646330313939643439 -62666264363361363561643338356563373331643232616233323033386266323830613036626435 -37356435373265313666323631643966663066353165303830323365626533623364633139366632 -31393561626432313863626463326161356261626537306431363861396433313561663934636563 -64356239346262376464613761353336623033323262623366633936633764303864353463323161 -63356666306632366136316233346334653530386633353738313231613763303838303938326538 -63363031363839316135336365393438383165306461623535633335666231316236643339303130 -31343937333463333732393265366363663532303562363761393236646462646533623563323261 -32633734333335313838306265393633386666396430663466623339646532363865633738396265 -62373738313238646262646663396263396631346235666162326265336662666436363062356362 -32353634336631343633333363343666633736663133353135383935306365383237326338343565 -33316433343733323733353033643732363232363634363930636637353338343465366263303536 -37353534306635663036396464333061636663366332396466326565616665363061363733656334 -65393861396263303735363438393333353338636536353666343765366635333166363231303535 -30316136613935616266343166393331373262376466323337633463393430386238613830663538 -65326265393033373538666137366133646263616333396366653337303162363037636537356462 -39303430336133623133646232396562613030363932383034313166306165313965363564653536 -36363339386138393137373961653062613863646633646632393965306330376231393531653661 -64616135373031636361363166633362383539626333646262336362623562343038326463316464 -37653834343861633430353931303163623263393063613233373635306135346136356263613234 -61313038313433396432643961623838363131613335396438356239306334656166396139623738 -66383862323432663963393261663961336665653632356637663266653932363539383639323739 -35616662633064613032633263343234343166376366616464323564636539336263623366363565 -37316430653064653366363931363165326137356563646461616662383064373361626438386565 -33303734643639306264353563363838643931353436623934363533666362356336613863343638 -31653961633739326435363665393539633839396666626639643366376334313430366430363633 -30323532613133323132363762636439663666393561633261366532336438376564663833303733 -31373963656339333065363136323239646262656632653532616565613365333031636161623136 -36373462316532653530313730313031393165373234633733643538376364303832626533646665 -33633633663965313361313939316366336161663536376562396161323833653861663065336634 -62656563356661313036343734373637616231616237666233373439393031326334633431626635 -34666231623766366633313662363133393836663936366534396264376164323539303537313265 -33633436333261353765633332363933353033653538613932393166323934373035356364313965 -65383734633032643066376233623465636662306533663034353962326333323564663266363161 -61373734656364353535353736353236396566316430663533343865643035656663333537373263 -32353236626439306566623165343132626634663835326563333439386166363036373663363561 -63613461306631326461663238376264396337386536626336633035396232386435336439396632 -62336332363265336566313165643630333836663461393965356663353130663434653035363333 -32386561303462323664333265333939656133373735356134336366643139313538393465306664 -62616136663861363038353430356130323366393530323636353066393733376136656161383131 -61616239323832336137633934316134343666356530323938653633353866656662316661353166 -35393034636663313463376634613934653561663037326165626161303362396664356436323439 -37636537356237623839323730653564363738643661353330666166626261346631313631643366 -38303764623732323537336366666330313262306164653136316334386563316634616534303939 -30373131356438323138346662306538356133303636313766383137666431316637326233396566 -36353530356237633764373864376362386331386435343836613566363465363064626137316165 -30373366646366373864646165643737613337643838313661353661663430393131633364396230 -64643833343932636535623366393931363232613633626664343033313964323835346137333863 -39376132333762326363653761616265636263363233333834386133636137373566646339633535 -64663331323361633264356466373837303661336134616634393562343065663363386231333036 -36306436646637303062326430323834353131636330393636313062373734363238393662373137 -31326534363134623137626632313638373639363238313731643037396530393864303636306165 -32643830383632383630656537346533383930393431643535366637636163613637643362653965 -37633833366630366364663065336463353530393565353931333766363966653038646335663638 -30646632633262313932343761306239333038323163646134636230626665633764343338316465 -35356433636361333935653966386561623064623133386664306363316338366561656238323865 -30313262626438303061666434343861613264636162666535633166313734363432323332666330 -65316666303636383563306335383464336635363035626630613232323331646439353036313730 -37373730623166636166343464316364616637616662363239376233343131336539363236626531 -31653239623630326130313739623536613734326563383266323835613837623330633366336464 -64303337386266386634366332376439626330373766643730353165333735323761303630653263 -37636332643530623136393665356266386130366264656562653039663430616364376364356236 -34313263373031393432376137313961333163333335316236373335656631303439393737386130 -32653539316261326366613561336439376664346538306463616262353231353532613936303231 -65646163383361353437376133373962666137643361666331366131383533653130396131373832 -38343533393639633866666339326138643531383365313364376336373230656565393331353866 -34663936326266343332326665626661396464316138653132346636633738623632356566303862 -62653730393837346466393137373961656464313062613237353062383032316661636638626439 -64646331383630646462623664623165656130376539316637613362613032343261346161663139 -30396261366434623634616237643531373733333433633638616465386331393637353439303939 -30356230633265326364323232363538363662373465343033663533393633306635326339396535 -65353034633165636235653838313930306535303132643031353836633839653133666265666237 -34363732393033343265343832373832396135323638653630666463363164346334343962366332 -61643033326635643839653663356666393639656439353036386266346661303830663166343561 -32323963333164373734363338616466343264356432383037303135333235623737333732633839 -65363161326436376331613966386566386536343637646634396661376635323130376466633634 -30623739353036383933326537336539343630313832376531303538343633613730396161323334 -64643234323265356331613836333861376233653737663166356331326331343138623334313638 -65646362383263643663396133643939386130343365666432613932623438646336316232656264 -32396332646135626465656264643131303634666339363436373565633661643839613365323262 -66633436646638313234313862343133356330616439613038623833323134346666656366356438 -61653539346166366637343730353236666564646634343832386538313734636136663736363436 -37346134306665663635326232633066313830383832623237336334653566396435313562353363 -35326562646333363663636538656363653862393034343735336334646663636533623361343666 -38336238663762636162353938316136383930303231373637366365366536366431326661613231 -65366233353137616264633532363130643536316162336230303636626237363033373364396261 -61626361333635653339336131306665653238333737306331613036643137313766353639306239 -64313435383662356538636664633732386466366133303165313030323061326362306235383962 -66383261313664393635356439363638623163306566303861343465646564313130376235363530 -65626432333735376166643732623630626634383363396233343361313931633930623331663565 -61333737373961303365316434383431626261343336653137636531383339333164616132646536 -62623265366662346430333561353438616363316566623865666538356362376464313134656664 -35363065656430646332393433373365636337643437623733663233396533636163363766363163 -63383331633338623238353930653439623762636666333935383531666436643161316663383534 -34636138656334376533316263393338396334643165303966333031306634366635613066313936 -64623165383537666561643639656334373230353536313837373530623630653433303935653538 -33383335366335383033353330616137663832363563386537376232303636336262613766323964 -65616633653634633131326634646461363036396565336339363266396261313862616430373333 -64666463343331633937383439653164313133333132643431383463663664363335366362386238 -37663435666631386536616266386264346436613037643539313032313833313336313064373735 -35306135343763666137373838303764656336313563653565646433303135353766306536303034 -39393638653063336436363633633032393636623961333633376336303035656632636361353263 -36316134393138653365383962303935386339313934376362306636303439363062623833363733 -62666163336162373566633439333432616137386565373435346564383633616330613061323935 -33326561346262666162356530383062306162636562636335396166356230346466356531313166 -66303430663561626437313361613933356138353863323064613266663434353236396534353264 -33633462616237303163306162363330326362353263653266663530353266353431396362363163 -30613461323635373163396234623538316365636162626439646565653230333832383934363735 -32353966326566346532333461396563393334646365333136333930363031656665346334663238 -353165626132643534626532396433386662 +66386130623630633433626535623432643830366330343131316639373935633961663536353936 +6235623430383564323539663363383930656338633337390a326664363064623234383030616139 +38633532356435663937373262326561646537313964306161343430373536333932346131306433 +6266646462353332360a666162653533386366353731613564366363663436633766643136386334 +61616366313462666637613866626330626638373962326665323433303561376162373164383136 +62636164393434323262343937353335613036616539313137303665646665626431373661666165 +38626665353965346635633064666632303531303564353736393162396365396163663365623838 +32363238346135623961386337393166343132633266626332356634343266646538316564383263 +61393634356136373765393439383336323737316435396538643439653265303865353864616634 +32323361616132656165323730396331653764383864643032646633366364333839626362393162 +64663264303738333331313434633563626334646662623533323037366330313664383033373461 +34613235366563393261646339326164373263633434373732396462373032666261616262663237 +64663038306133363762336235393763616639353934353235343031653032646564633062663837 +37366137316666623565366633663132343932633732633163353964653335313239346332643439 +37386131386133396161343332643834303766616534373431643536313661316333303838663332 +31386264303635646334366266386666636239336130663564623734363035306232643761656339 +66343034623835613638353764316433333535303936656330386235643339343132626366326563 +33306433613335393837663037316333306630643735303662313434343166616130376566333864 +38396366313663653539666162333265303037633635366530313332376264386637363635333361 +32646563633561666534376563343339663531353038383366373962646630306133663938643739 +65613064306338366639643830653766383131633664353561663166356535626265343138396432 +36613037323133373135666165346531363336333539643238333963313338303261663061313366 +39316637653230383731326434396364373738326362383034653435346636393730343537306165 +30343034663261663064336639653037396233363732616639386165353438396134633566326239 +38306162343465316639646637613330396561393436366535393339333739643463623438646262 +62316135363838626436383630633938366530353862636534383765643438666539343939303864 +31356134613633653237653838363565323166356561353064633361313638326365626234353737 +39383534343831623337306234643633383934336538643330373436346162383137653361393035 +38323262386566356433633061666136363532336633613738373861626366373437633930653535 +66336535616266333666326637303033316164326236376133316535333766643836313535323939 +65643533623539323438616266353263326139396464383239333836306261656162353731333061 +64656464333838626631653435393531396130656366313233616534316639613330343130306138 +34393330633138303866356338383363336535393638353735646533366435623736643164666535 +66646638383531376166356338656661353630303863363363373234323431383635613164353339 +33646436626461346330326262636339666263313939396633643738393062393062633262333934 +39613161363061323231643635336364376134343032303233366339383166396662313231623033 +34363835653761616232663461336561313732663061386262386532393332613061623231303564 +31386166626636663636356363626335393762646135326563666238333165336464353166343963 +63356232666130656138303730323439646632303132313161383063336638623432326231633630 +39333034343136376439663534353930393365613362626236393833336164306538323566336134 +33313133613039643161363634383136336137306139326236636130363035366535366538643862 +38366465386565366562393838383565343139653466313134336534626238363536663633366232 +66666237353832653963396235363366376463646137333637306131393564356261626165616639 +66366666363065643362653933363330393133646361393834326135626230376432623038616163 +39623231303732613438373636366139623935363337373738626366313863343432636662663436 +38343130373031613561396231313736323733653465386666356165623631363430666330396634 +39373734306465333166356133393066383661353531366137633234393666323765616366353466 +63333764656636346262333261613833396662366539623266303132656330353739323830653730 +37613036396231666137343631306635316635393362303835393139306334613037323332333365 +39343132326665393833643734626230623039643566613862343266366466373138653237633863 +39343561633436303535323864653862373337636164643434363238616362323264366262633835 +36636332633463366432366337653763343835336630346263306536343930646665653062313862 +38666262393435643338393032323661636630623665313466613963323664613431613730653633 +37376235336264356132343833393834646465666232373538623735646465353531343563343664 +39626463653063663632623462373532383964366463323237653935643165376363396162663938 +63363830393466663164633466613133393137663030616236386635633666353039613337306537 +64626332356339393734666138666535666331356131643466376433323439396630383837643232 +64373339386663633162353161333136623466646161663864313336336234356562666463363339 +65353233393965376639633761326262396334396533363330616330306535313365663635316537 +37393932343337363637653638346561613137633033653338303261386433303634613765323461 +61326665346462613338643831623963313138643635306666633631336333646365306131363433 +63353932376136613330636634393462393232353838623964663534316261613836613364353439 +37373732346466393332323337346237373939386266366135636262353433343363323832386330 +38623635366137646233386565313261653834623230376535333364656161363565646138316134 +32323564653039396364623864626131336663643139626463353661313162373161366462333636 +31646131613132326138366261333333633030613566663933633765383461346631633565383338 +64613438383464636362316634623330343963333935323763383065346137613263656336376531 +39643136333232653866333436383836306637323462383237333533633666353638376330346534 +38613238653163313638363531363061653033646166366335316537643865323037356562616661 +31393437326561373638306531623162646636613731633039643230623230616531333064623163 +35316537653139613731386132643763336134626466346538366230353239656234623435323361 +66653632336463306638666336333131393837333636333835633364323565323438376435636135 +34353033303332373761613733393065313764613261303435386565623166626462316434326266 +61393865333535623134343138383366303831643539643464343333623665386566633637356236 +30646238303561633139396363373261383764383132646564313334323735613862356436373362 +36303235306261343434663232616130353363333161356261313532663437393837356365626239 +30303831656539363636623465306566323735363464316462623439303133383136376665663137 +62333931393932653566633633373066333131363765316132656437656466313936386331626632 +33623064393436326662383061663163373830623430396339326462353064383862333864366461 +31373030353432396238663531656564316165303339363361656538383432303762613335663933 +64373539336664396638386663333532393365623064636462653038336537353834643866346639 +39383531343436636561326361353162363462366330333432613431633731383661646531306633 +66396661666439373439653833663337393734346538326633633834393632383834306431323031 +34363531633633393665663661353838626464613863356332383035306565343064643764626335 +36633337353163343731346331306663303735346439386434333164656364353064376361323561 +62393062383261306437333265396236386362613565623238313562613261613863613162646361 +37343835336163653966303831653138386333353038633437363738373664613137643430666135 +33323438323662613061383139333731613361666261666166643365373665656231633636646362 +36343535326537393964313136393661613333623434393864616665363534333333393330653930 +32376266326236643033623933623766303736323835663638376465323238303363373163663863 +34326632656633663534663335616630633264666135313738623435666561303837316238316639 +31636534303238646464616338346534343932323431343861373364316430643665306230353439 +62376437303733653839313338326130623264376666373337333561386236663235353165353836 +33353531326133633930346364623364653966313632666332643962323938313434343337386636 +66653664303532303162353934326135626131373534383232346566313934643961373737393161 +30383563646636326561623335626335643339666130316330326637313937653838356639396530 +33303532333663656636313434353964666535356666646461313061663538393439363233666436 +31383735303638346265356536306331383630633834366438313866623963366235303362303134 +64336335623235653761623138636361383333623937376166636562613865653135636166356333 +34386339613163313331653333303332666238343832346231613233323232633134643635636533 +39653933373533663236313130626138303962333462333033643233663233666433346663363235 +33333965613965653931613937383731613264383638666538313631396530316332363163336231 +61613762303335366163366339666231336366366464396433333237666430336664353963376466 +66396435636333653762663636643131666263646630386166393466633237356235663963623061 +66656238663865663133626630366534643331326461616436313863303237326466363336356436 +36313566613734373131656335343965633739616233646463666565623338613437323034363061 +36393938616330386265643734643336313833336234636264376336303334616464326638373037 +61636564646636656530306134383334316439396135366534613535356137623263326463663662 +30653437333530643533386561373337666665656538626166333235353133633932623065643631 +64663832366464363366353839383635656637303662626365393161646638643964386333336132 +31666130626561373133343837326335623164393637363964396638346530303664636464313365 +37643665616462336566363637383730636132303432333536613931343139336565366339326163 +32363163383461343138333837626664633639346134653764653333303334333533666438363564 +34306637643331636462623937346131383231656431613138636365363464623037306464613531 +31323466343865373035323236313831306239383765643864623533663665653233643135646133 +35343238623963393831653839303739616432313135636563323034613466383237633932313563 +63663261303031653134353037306130393136663333316431306333346266396130373461393164 +63613337363334323761626434653734386534386366623962383162626461623565363065303435 +32313661366566376630613132666565643136386634313737323838646636656639303031343338 +61396362336231643161346435376663373537613563616135313065636663306634653235333735 +62623730303362303862666262613736636535633762643930633263326638626637356131326365 +38623339656162346261343134633966396161313162376536333632643430626432616566396533 +66646131633733303263626262366138653564646366646639663239386536656330386336396264 +37633434313537336435343038656632333039333533656663623334356534636235323062336361 +62646464393362623734383237663335323461643732386435336238313262313162616339346230 +66343363643838343262343635323864303333343662303136613833653964373630653537323261 +34613738346230376261306331623035386638383230353363353063663235326135363664373337 +34646637356236623766373633643665623033393830633861663765313134373735663837306433 +61613564373632363237373933353437356366663461316164336162336434386534666137653633 +37353535333866323632383734383833633634623865646239393838363464336230306535376261 +34373963353234653534353266306533393761383961633431643036363638306334383835313335 +37346231626530363464616464333135626135326334313938656137303165653565633030323937 +31623465336363646639393063636338393064356265356638363265653333623631396439383336 +37373739356533333132393365613237653836666266303130353230336134306461653733313137 +66633238343061636262333565373234306463323732363633626334323936643161333237396337 +65353165366466333437653062613461326464316336353635356630393536373136633934623939 +66363636663163356237373937653632393532323831663531376334646132373636653939626662 +63353830356536353539623436656237343566366564643165623638646561366463643830323039 +30323432353339663563313634303938646165323664346231323131376630623238333464653736 +61376430383832366631336135373631646465383739323233646331353963343830666631303136 +31333435633733373961636436336163393839353934643231316262663033663435366266393233 +37323264383838343935383036623133396464353364316337386463663162366536326235613132 +36316532353062306430333730383336383965636232663433306366333139663864626465353032 +63323334663536366562383362643361336466326532373961653061636135616437343663346533 +65356264663761383737303139356339373536383730316566333037376262653164356665323336 +62343263336164333635653265336565653731653237356530356236636361336339633335616337 +61366137303165646564376532633063663036343362383963663163643762626632306230623462 +61343837626363323462653366343932383437336238336634646532646264623866303761376465 +65616134303234393531646339396161303561616332366265353935373237666335363738303334 +62353339383531646530366537623138303839666531653034653566643139313264393766323136 +66613762343332313732633430316130616564323765373633653334313335613032653834633436 +32663365303738386334373437656534616436316433656632383363346664373263373538636430 +61306238356336383763623233363934326138396562613335346335623837653939396361386234 +64306131663236626164363664663430613333306338613534303532323063656531313438326364 +66333366613531326261663131663430373939306139356431633662613539343662663137636364 +38613863396366626263353832373335356663363534336631306530623066623061333836656433 +65373730653763313966623735323766323835396664356563323435386535366565383738346664 +62316332303232613832656638616133313532626661643031366166393661393932303637633836 +39643165663634323336653236633465323739333331303230663333303635623237633836386462 +65653861353330393963313163613633613039626166383530346665386133633466303531653636 +32393363633233323838323238626564653632633066373535633932653933383234323034616536 +35623362383863633931623263613062313830613835383362616165323165353866333432386533 +64326432373363313531653630636137613662306466366238323966353762333233656232353530 +39353363656535636537376464333739626464346235363363303463333831363939613735663335 +35626562346465613532643361656264653064383965366264336132386639363537346536663466 +61353564326535633433663131643432323463333363383235653534336436313539343761363235 +64653134646533353136366663356632613334316234346465663833333435343232336461323336 +33306338303238376239653434333762386636353930356139303831646535383162626363306162 +62333131346461383735326336663064366333653966656134356337343262363364313839656664 +35663637633931663362393437333130393865356631353430633830623365383436313563323337 +39393061636665636437353963613235356539666363383235333062313733373434306230623664 +64633738633566326638353131373232396366613861356565363330623863353762353831663761 +65383363616537306139346664626661363930396638383331633333383738633366343231373339 +32663430346262306234643838636163313865663438366166316335646332393934363461333865 +36663837313836346363356636366437376332356166343734653239653439383765303236656336 +38363232396131653961336138363966646536653039396164613238373062623430333234306163 +32373936366664373136373665316434356331666235623434623865636530333762663132366135 +38386136626431303464316164316237653564366266323330396466303938636362623264353732 +33623630653633313261303233313430323639326561623930346136613332353665313232666438 +61366665666534306464666662663734366562313233646163373063306664366361343538643139 +31316136396637363032643237646539303131383962636264666261663934323263623936323838 +34356435353136366538636138323933626634656432313362613963303062396336626236343635 +32656435653139313131346233373736613632333062326134666233303334646662343339353831 +64643233333235633534313038653265353734306332643434383063316563613861643732306133 +65653936623331313637633832356436316463306436666439663236333635303362626136663431 +64643936313761623361363834383165333063633561323734376139303739653265363132323733 +35343563663636363163643866316137626134373431623230386539353962616566663362343130 +63393766656633643331643562376136363966313164613435363832336633363139616166316566 +34636137376139633139353031636462666565613932663961363462316130656331623566636362 +38343431396261616133366561353030316565343864643039326466306535643764346262636639 +34653932326266326331303936326163653165306231306338356634623661313061346633653266 +36653330323437323631663734306237366136376631633663343831373565333735636661373462 +39393637626336613233343162646236316532653731336239383466376533663162633033386239 +31653230666136656333633836363763313531653433616337343863653862306665313834666136 +39386162306338353564353137383336663163373032366435376435643066643234306336323665 +37643765653761393266346238363536636464363861633763366132613937633064323762366638 +61383661313533363333653435343339633635353436383533303333396532346566346162656638 +62623162356163323962623761666665393730663531643231646436383761363834303961623730 +65313633366166646332346337663733666261353363626539373562333838636634613139373936 +38346162326262303836353633333935343837333235343166616439653531636534373363653830 +39636162643062343334646265626438633431373862366263663663643330653234653439653036 +63653533383465613763616566656132326531666430633932623238383064346561333339323861 +34363561306663656137643033386230643737383061663635373262373537366365646466616236 +63613665316233313866373563396261356163393135653134646430356539636634633736393335 +66373861623732656466326666343831666636616535343635333139336538356637663563316336 +31636639363164353732643966633536356138656263616663333934393564356534366331303135 +36323739363034316430356636363633383031393234616439663166323062316538663532353461 +61383063306530303538393266646631333430653166383461376138666535613731313830313339 +31333366313038373461653065663662613439313762323232366630383937363837306263306339 +39643462356562666666323435393066326231346562316235373237356261646136353362633861 +35613237393436353531396364373833626166333865306232366135646264323632313939363930 +62306438626231393736333030653530346135646135353264376533333333636462306137383361 +31383932343134303831666635363065363265633466376531363166613661653035396161336630 +38613338653934303063663961333862333963346536393766376239396164376163666533373232 +65396335336332323032303035623439616262326366373935646131383663366465643135303337 +63353561366430616634633530323932376539303239633965303866613839323263373637653664 +63376464663436353235326665636334393934346235373432613661326135623537653564656436 +62656165323736343165623362333933306432623966623362356265653530613931343465633137 +62333037313030366435376236366665656266396538303433303738386461336265343237613931 +65633139383662336535313038316464666136653564396263666233656631313362333666353438 +63343839386234383137663136613065303562613963633737623637383164346637343463323036 +32396164376661343565663864366465636330666630663330373535323165343962343336653934 +62366161653031343061306433656139626435353831386132616566333366353662393837646264 +62363338623563636136663362613431383332363433303230323733306661306632323931356536 +66626134663462666336393136333061383631356166636666316133366561376163613662303430 +66303039616331613761616232666533653063376666333833303466613762336335616664333361 +31646636653361396162383635363934636233363862393966333730633731306439643162333565 +36646337663663636664646364393933363163363135363831653539393063656262383739313163 +32613962613434656262333037336532643234386663653732336463663539633933323363663462 +31346264656665363962303332633265653236366233646333646637316430366362383662613336 +32643337383230616439363030653366363339316433633163373632623235343736633237353131 +65353933376434323831353735636337386364323862353139333830363631363737643061323562 +62393531396561333132316130303764636562643634663866313030346231366638393961613038 +64613461383733393866643231326337353935396330616162303730303661363733303066323332 +65643636346464616339613330333831346266643430303865363163393235626436636339623766 +65333661363466373566393439663733316262356464653030626466633633313536656364353235 +33326665313265306666333962303036333036373939373833356538383638306235383564613037 +30356264386465643934633066353538626363333463663038626263323863363561663561376336 +62323838316437343365366135306562623936396231363736323465393438333166666430303431 +63326263613937663933633935303035313762303032666535623238313062363432653633643734 +33626238386533646230636332636563383532316630643063343637313631373439626430613564 +37323166346531323134656531613865656134326163383861336664656665393037663236323736 +61663331343361323066333939336263623033383363623163346334376465363565306532393933 +61653135373536366338623063383166303734363139633838396666626364653333666264386262 +34663932373139653838366238353733613137626531326237633862363862646261613432356365 +62613466313532376134396135303338633265326263336661323765323364363236623532623232 +66386639376433633832363332316537663534303436656461646237323261313865323435326638 +63633137363363376361306632656432356436656563323661373239616130626664343564336233 +66643632636337633964653963356433333230343366383531666362393562646333386439653533 +64363332366236376233396331623861613437643037326531326463303935343135393530643137 +39373535333433343862623230323530333166383533633861346133663263386661333930336162 +62653532396231303264333639636161363839646338323061326463336637633136306663636565 +33646261613833613032626666643461666634633732313332313065613838656364316162323637 +34613735666365373836643366643630636262373963353664336562323363386131316662333961 +66613461633664666236646339613137393838356530303739326333393434636263393733336136 +35333861373639633239366139663365653438323433373330343034356535396162653630633162 +66386130323337323033343832663664346563393130623861653135373536663061383339306233 +30373033306664336237623564656230303566633434333537366337666330396662333534623333 +33663239313866613466633234623966336536616331626366653932353761656138393630636261 +63646235333830663039666162656539376465666332326465333333316438396536646166666264 +35303238373430376266653234366462303862663561643734393238363939306430323362376133 +30306162383230646365623738366362646534333561363261663735386161323463613462666533 +61613939363235656136393766373537626636303432366561663535336638356664376631373732 +35326633323933343864623730633237393965656131306264383737653632633235303335656436 +30653637353037353639306465613634343162363830633230356435366665353436323639333836 +35653732353664623434333064386436643966336465656135666436323263393663343935646461 +34336633346165633763353130646534393132316538646262363164643662633135653838313330 +38396364326366323164363732363934613165653538333062626565313938303933353330643235 +32313762653465396530646439366538316432373630356461653834303934326263306562386263 +64643639343664313935396632613566313463663665666261356430623038383432623031316262 +36356436643762646566343262613430333364616631623464623461633239633937373435333133 +34303433313262373737613466333033303430306436323235396435613737376466323330383435 +61643263356265646538616665356664343933356439643835313461623636373466653736663636 +64623064363032666332326130313433326165333064666538353465643161633539323963643161 +33666565656531306430376333376631333134393335303038306138633234363366643139633965 +61373865343234663166343265386534613030393035613261656138333566363139636130336431 +66656362373536613065326162633136633864663739363862306432633431646630373239653461 +66646539376636323939363935343532363166636632306636643934363732633664343262313731 +35393861386661366666643164623863663037616236346165356438396632656464623465656333 +31383936666564623734333165316264383837333532623932623765326165643832623561633132 +64373634306436383562336335326134313731313435396364323964303763333033653235613434 +65373964316165396137386637336661373239336535366334366133356237333236393736333938 +31383332313633386361363262396134323230636532346339396366383862613934616231373932 +64653163646562306331613761636337626634643931373730333835373333313332353638653865 +34393262396365383063323431626662666262613235366332323466303239663865623731386531 +30396439333939353437663863383164376437366161383631323666333839386438656165373830 +63313465396537643162623234643730616538373262323139626165303165396531616564333336 +61633330303065663532643036376630363662346331623637346539323063306536376533666163 +31343461326336336263376163343761646235373765663631313838623630306264356336613164 +66333330636339613837623263656261643865356665633761323933303861643266356266643538 +65333834373966396161366464653464616438333736313464323066313961363639336234323866 +65306436633862356234396162613937393236353865653235333234646262303366343938313561 +30633238366436373363366361356533346166373866353230313032373134643731623733373865 +32633062313130303238333566653133386562313033373836663561323530343331393930323864 +35666531323165373235363431376435633765363934623166663031336165333730666235343930 +34333732303831333263356135666432303038636433653036623064663832653634363739303265 +32326236323030626339326663303066363330363564353166663032373930663866326434663633 +34396163646539646463323337373334636662343861646464646563313931373933303036613538 +32323937656663623065323931353435363163316637633838303439323433643466626264313335 +31396665343961313636383666616630363538363564376134316634313861363839376232663131 +36323862663631333230376264376538656237386338636665633131373064623232613732656663 +30303131323364653966653666646535613732376166366238396337366465353265343962396465 +64316164643239346239363431626439666331396361346439646562613162633134306237353136 +61613561656435646163613966646335656337653832363736336262303439306238373339663665 +39623465343336316338343835393235313566393062393663306430323937643961653163356639 +38326461323539336638306138326432343265626431373232373137376263346437633638653437 +32306563326535636165373563376161656432353431353732386437663939303339346365353665 +62376466393966336330646631356462373434643034353161316438316535616638323536633538 +33626632346138643461313338656530323363333065616463643366303139396239653830343464 +64333766313333666564666431626137333536386238373739376264353930356538616238623836 +63343830616331396632363464653734336234333339306531613263316236613632353037303934 +30343239316265666639643831363734653039633833653263393033326535353734383664303838 +63386538386138333030646363616164633933653364633465356564353763373039333637306230 +31333631333330323239656539326336343839663034656233316239643430633966623462636462 +37653963363832346337376263613836386263383934376264316435323036666166336561633465 +37353161313239366234666132623037323263643161333837653233613639653437343665343533 +30653233373339646330643732656638346364326632346132666538386630383837643563636232 +33303764383664323639323330366462653537396237373362333966313234623037386436366538 +61353930646332373737643930313138333764656133373738633531393633616539393463663537 +38383735396163326235323339643664386161653831313866393537623063656333643838343362 +33306435346165633937303536363832323733646131666430363266633436306234626632646638 +34323339626633653235366134303666623232376661373530386634623535313231623831376130 +37373731313232323632666338343962636337613833326633386333363132326334343739336265 +37363538356162653263666431346537313164616462623765353430626666633630636632633933 +37613737656338613465373039383133633833616233373163323035663265316365656363336237 +34353937316533366536646164363834373664353037656230383633633332313639323566353264 +63633339353065316531616139333137356534343066356433666137393665383139346264643536 +39386438623466383666616463313161336334353539306330326563643032633036643435333831 +39366564373430333430353664326131616561616666323838323631313138666238313735376666 +37663963303063376337346463383063373866633965663836383331373762643138383864663539 +64336338623036306466346136353334356463616566323864633332316666633030656465386435 +30663831663464303832626631656431666131656334376166303036323835356638623339376532 +33313639323163616266663235343139613963616362636139626661363562653338373532313133 +37383565313766323263306439343838643061363935666561396135396366323864323733666163 +32393834336533356432323133613162653136336666633737616466356435383261353330333339 +65303462656562393136393765366633386339663561633034366632383637363533363266393833 +66663663373438323663346362393637353463616636666661366431333931316361323637623835 +31643631343961383337353734303131666662646666346465303366616336623461363962363536 +34613936663939373063613835396662353637643431396431383539333264353337393031383565 +30353533663966363666363636386162303435326636646662356434393366386530666330343532 +30616465663761303130363933663564373431333133616631346430363562333663353661333862 +66653065636336623762646566643132353630323965326336613735306432363339653139343533 +38613030336230653362396532353761343866383765313731316437393961396561336264303835 +35663665653561643464356135383932323331303332613663313732376561336235623038646234 +32313063653835353666333935613831623663323537666436396137323833663730626263303861 +30396630396333663536646637663637653463386262616666373930656537333563353365643263 +37333834666131633135366235366534383862393465393366623231623566386435326365316234 +66383438386635383063643666333934343730626531666231626535633161346631633635306539 +31633237336636636639636231353434643732306536663735363061356163633533383233643136 +30313335383764663061373962383135383262363133326466653361663765623438323637303631 +65313937316165363239343964316365396664313437366131336663626365316134346634616431 +38653330306131663861656266613734396132333964396634616332343464376264636466393134 +66643334653638393130646161316162626662633363346466316232323632366134653566376134 +63383236316137313334666165613032343635376535666165336436383731323035343334666564 +62383161636366346236336532353365306261383036623238336563343562336430623664316462 +37323837306330646639376130353961356334626162393633393830373738383963646265343635 +37303833633533656431613437393164353363656437353438306134616365653965613163366439 +36646261613066643932336435356537313036353539653839643139323637373461636438303465 +63313564633533386136306630376538326262356638373234373336623164623932343334386133 +61376161393263373466653730353866386333376534616535313333356432396335356164656535 +66303664393537336536336633353133346635643530653339313835613063343234316564653162 +37636334303263643335336364636162386465383236353832653563303138313263323032383036 +65313330343165366339373964373233666533636635643239633465323265393439383438646464 +32613238653433633239303433313161333261626463663934643062633937313535633237636339 +36353431363736363938313862373336616566623632656237393965656334353665373731643435 +34363635366333326464316162613636383535643864393934626237666231666162616135313265 +39643030366463366364323531393030313462313535383037363938303738316131616136663935 +62396439333537363831356365393962383534646563313134363162363039633130306133303330 +64613063343931623166393730396230623962666331323138323964393035363534623033376431 +38363336313336653663623161623938333030306330386630643931366337636133623838656635 +33303139646437623366383634643032303562336234363039333234313932636539663762376633 +65643532643461303836393939383161396335323532376530633863303963386536613933633465 +39623464393732653164646139333964343431383432373334313538366235623539623366316636 +66363335353564306564663337653431353835313763363233396634303239626365643935663137 +37373465636130653766623566396139306666633432386138623065313138316331623566633335 +35323231643236366433373530316438316639316464623930633638653435333066613136613866 +33383766333461613462656635333632356431313162393562323833313862626466316232366136 +38633630643537633335663664326362613639386666623466393335643038393733653231646663 +35323361653130303434646639633737343631613833363730653838383365653532343339363366 +33376465623365663338373662373136623934663765353434336336646537306330353838323866 +37393538306638623134396263343435303839656236623638333861633964643166313138363539 +38313265396262613938623530353937666665323239346538396464376264363238613230303938 +61323036666637613231343661316634396230383333373364666166313762383935613061613739 +35366434313462333439626466666435623865343066356138623834313232636339313936373761 +35623762326338656132326638306664653861636465363930646331383164326633623432373661 +63663838363635353834643964633536313362323936393439313565316132643339666335623837 +33393231316331643830633761643266393661653561666436363236613063396563386334353135 +35646564616535653761653034613864303965613138653035363339313635326138666639353534 +66316231646138383331383230636534343761363864363334643233393864636130346236616664 +61353032616637363739396136653639393638653863653030646331633066343864633533623837 +65396637363762646263393037653430636538653331323739326465623564366237646639316263 +34303236613362663834336132666338393436343531636563376633613938626534653961643532 +37623734626431626437363130653766663138353433363639356362313364306335343839306561 +36346237343531333239353265383539343233386366363331336133396566386465616261326434 +30613561346336626532393831373531663564666638376165396436663164353937633637613434 +66306536323338346561353635323734643638373966633731383035343964313633316432333136 +36313639643132383335313035326436626437396361363534646333613165623865616632356238 +33376231663636343438653735383762366237376464336561373562653138633535666237393266 +39613066613434303862356364346135326639373634373036623636386535313433643738333334 +30613935346230663866363430623139383861303266343332313330656164336239376239363034 +31303137306361303165613065353438306532363033663636393830663834356366636262343366 +33633037386239343763353461616262313237303331356134333530333137363435383766663438 +63323136653031373564363532346633313639323863646431663535316463323637393862376538 +32643162313039613931313165386238663764346438353034343139653833396434623835623963 +38663366393266653964653735653566346165303333653064386435666238653639366564333466 +64353037386335333736356133386433336334396431303333383036323366363233666231613231 +61646436336334306261323436373866346565356234316533363638633336323565376533613531 +38303034303932663930613963633436316664353831386238383630643239653435333537386337 +36303539383133363833306238386263656366346532626537353539373765383262373837626439 +35666235346166623037363038313030663665333761386536383439306632323763336636663265 +38626136323963393164343638336664373761363332643837343937303565663736396462313862 +65343838626633313831393333373765323337663337303965336663616265333831383861633238 +65656561363833616439643238353430666264633935613365626364323238326336323834316233 +30373939303463313636663031346433623366383339383263353666623065313030646133623934 +63373732393339306265363136303239386633616464643634616530313061663038366137653631 +33613234623830616338346539323831616632346230623137613430336637366239613939376138 +62313763353865623434336264623962343532653365303563373661643733373363633831393538 +38383464353138376161363038623335393133633236613739646564653461626235343762646532 +33353265646334653035316430313932313764326230616235316432386363303131633334396238 +30636130316430633265353464373862366130343862383137633539336135303166366637653661 +34643938626337663838326532303163616239613138396661366134346632343733373236633165 +38306431393938633834393164626633383934343766383531323932353737326334363666623238 +61643431653134316339346335643539633062323238616363623035623934663561366636323563 +61363365306664646464393934366634643863306365366163613262353835613966636630303162 +65333130326639666131366133383064613062653264656436346236613565623163373561346461 +33643264326166616161393731393339663839313665653335666661303436376464313935376236 +30353561343961343766383233663931333736386561313265616363663238363065363539626663 +35383865323562393030383137396365376539333162666666653632333033373133356236633263 +33393733646261373036653031653763333061656666336438326436356433653135613538356138 +35373863376236366464323137343939626163613966363036653232643735333962306131643238 +38363163616330656265643736616365376139313239386639613962656636303431393765313262 +34623963663235646136633562336361656566306161363164343736333238666335333837633139 +34656631353538356261313532633731353061363765633734393038373433656538346431353037 +66316364613761653965313264643038613261616664666264363663353330646630366133646431 +33363566373239646366666430643366343665323361636630313361313137653936323835393863 +66383834646637366231643431326663333936653337376132303733666266653231366135383133 +36396638306530313939656335316630396562383133666561396662336439616463623062653365 +36306133373964316465643065653836363833386436656133336336323633653539306533313731 +32613863313038613630323838653634666634383261306635363136663438633433323638613466 +64323936316137333963613730356139343538633335346566313837363238373339363532376363 +66623262623139633633626430623165323562633566396234316535326662343363623863376463 +35396537373236303563323066396533616565613038363564333562333962326432313338656638 +33363464616433386161323262666436623465393162613866663330656336313763616662636461 +65333333333361636365326533303830356630623562393038616166323237643364323730643233 +37626462323434313939323664643336356433616336303764613965303731333337326365653663 +31666231633434656631303836356264343033393132386539633235386462363130323838363039 +66383666316163316433363131646436353632323764633734663037323738323434393537333436 +39633361353938313165386136383939666130313266383362616562646361306636323639666639 +32626339373462636563633361323136343336313233376431393462333864643839303936346234 +31313836306266326365646536336131393561383435316664356637333339356137643365353562 +63323830623165353232393836393431373131623636373263366161663261326639646239396337 +63356334666433363062353531643530356337653233373830316637636136333837653966396564 +64323238623530633433316234366132646361366366316666623465323239636539666234353337 +38656162616539663565386261306131396166306262313462316263623536643863383765626533 +64303838633530623766323030393932646236346265653462306663313366663163643938376265 +31656563383861666132666236373062663532666164643732333639623235356365353266326632 +64626263396365333432666333396437643535663434333634316564383030343936306130633637 +35343130343333366637643762316233646639383738383863346639303936363364666166316663 +66323964346137653266343036323131643263613137623564343631626135373765333963326436 +38666330623463366538393162393066366539323965353761646532363833356664353031643936 +34303530326464316164643630386635663131663762623331663939343736623030323764353636 +38366232623435653637663830323364326331366239363733323537383965336433613165343438 +36643237643665353230643535356132393537636131343830373666663139346632383466643333 +33336462663262373631636332636439323665396637363662613762313434623337353231353935 +62373063663339313436656261353636313764663839316264613461616263306435393039353064 +30666531306264663238333633656135346334356462616365613838363062353735666435303238 +31613764373139303537303163363362346339653131633630356265353162633338646431356266 +32343033376238333761373162343632373464393239373938626530396435303365376638393036 +35306636303466653561326535343463323963626535303932386231643862363531376531626632 +37633963646439623230323064646431306630356166353065663633626535613536313166616365 +31323831656132346263613662383339346662646364643465363439373237373362666632383863 +64353534616235633931343430653033383537346665633931343639383764306536356337353266 +36626162613161326235376633643038316236396662663966653730333063343630363830313938 +64356634346662623631323266653631396533306436646566633236666438393338363530333136 +30396534303063613264616662656633666265393261623634313338373438343866616434666362 +62663566313734313330613261313263353530366461646130653437326134626434303861303164 +64643739326634303861656231303239366265383439363036383132633031656162646630616632 +33313436666463326230623066633531363739343139373563363030363163336639303835643764 +61396464366634613932333862386630626634356335636435613534373036386136633765313935 +30363933623431323537336466633736633662303965383765373864393938393232366534636363 +62366365353131663333393933366464626561376463623332396465376233393064316330353663 +35326662316336666134343136393831616537363662383264313734363331633732353837646232 +64633837623434363565346338636434396338343061343336323030393733333736653136323964 +31633965333963356138383432323930343562383962313834396236333031663261383739303438 +66313036373063323339646361653532383532633635383935656633626238393863393630316461 +61386166633034393438663366643431636663313333383832656233323635626431383664333132 +65343639626631336532363235626439333266356433653632646436653730623030393461626466 +36343638663330636236386439646436326134633962396532393461353234646162643738393462 +35633363616466623633653161616165383666323533366166636436386534373465363830656436 +39323739626635383065653638633833373765383334313835346238613566316330386435636565 +65643733633934643862366532653533303763653161633864333866313330306337363964653564 +36333665353134383265626362303632656463663330373965663739623538306266396361313166 +36316465353733323934323138376136656464346138643663376662656236613231383831376233 +61356137643862633038653866633536363932346432393661666166643333303863633032656562 +62386336663963336631343366656637656236336166383439613035626536363431386133666235 +66386161656461333964333361323136663033633339633339613630373364363337303432373339 +32376163316230313466306530656637646539383464633836313438623563366433656430393030 +35326366663839306464393362663362653863653339323337313837306237356262333863613066 +30656430323438393964646262306361356339616163366637646438306262666465323033356164 +38383034373934393732303634633964323464303034363836636131306436383163396234633633 +35393338343732353864643864333736636265666533326530656635386432343661666635366562 +33373265653434623030333033646434356335653930633230616139353465366238316331623366 +30376664633436383536353339363931653265656138323734326161666136343561623166343666 +39306331646663623766373937303535343264636266323738333931663165633536343035643937 +35363232643562333536333733373961323262366137323462353732313036663236616361366665 +64383337363065666236333335363461396466363864336438633834646134633564353666303564 +61336332643234653362616636383439343834626633663764313539613635373831386336316366 +34633762326539323933663438356236356361616337356331646338373439336265386636323437 +38623865313935353532396365633165643932376561626433653435316136393437366633633963 +38363439653735323761633261303466343837613834643364343833613233333337396533323230 +61353834353562383130356464636332636565623934346537623830653663356533663766323135 +34643661666166323534333030333064316434623863666434363535343564343336333963623233 +65376565376264373931643734663636636462376630393263306565633062383637333264373536 +36333733353366343562336130366261396663656233386331613662633563633262653766353035 +63313132316662323539643236393532333239623830666464333432376535303633326530306137 +32333566386166633335353662306237666238306230316465333435353065363238336239326135 +65363630363066303534643534613438323631663961616633643630383235376437333763363235 +37373162623334623532396664303137623863633839373633386631643963623139353565303339 +33626364396362663061303238313965333536323265336339306239633037303535313939623736 +32643262613830626433353735613133303232653764333532343837303134366438313263643336 +30343736616365663235653737323339313663653930363232633564653866396338626661363766 +35363435373164383366616532623235363062363337336135626431303138306461313063326433 +32626166353665363863383664333362366537613535643361623236336432306534376435313363 +39643634346535373836333666353864623139393035666361643665666365313736373435646638 +30633030643664393535313438373539616365616362346136306538656434323435386435656364 +64636266386638336238326536613264353836373434313162616336646262323835366639373561 +39353766613866303037363465623838386664303366386564333866633032353037653833363036 +31363465386166643637376533323963616132356536393539626462643361313635326166316162 +63363835343630313262623736326561363033656561653261616636376263323330386339653235 +39613762363038363739636664613064663435386635363033323962353034323334356233316636 +31643962373063386464613630373934636665643861346132633034646131386439323136646630 +38363262316338656464613664643635333232393664326631346236643263373936393564613437 +61333163663463383333636566333438656664633935316366646331616235646632656462363336 +34633662323463336534383266336134643666633435623862623734626438616164323465613335 +64366232306336653532626561656432666134373561333165653534313038316230666131656161 +31623866393330366532396433353637623765653237343432333965333264623231323636656331 +34343166656565626138373539306662303630396133663166663934666533616334316161636464 +63326662633563626464633361656333373432313663643636393134353431663537323634396230 +61626236393133363936316433366633656230613439386566333062386433323138373832333562 +32363465643866316262306666316538363561613537356364393131613736663761323935666435 +32376435343437383737333637636239333834366139643235386136666531313632383364383636 +65303732653939336566343361353965633031396161363039613963336361363939633731626230 +34306463343262623733636135383630306461643439623731323835613966303437663035366434 +62333139656665336164323165343534373964313961346533633139666431326265643065633962 +35623137353262306661366238343236353430306637353531353033356635366666376336633039 +35303733363033353837363163383431366161643363346238313566626233386237383036643065 +31373237316635313435363530303161326465376437613033333331653434393965383434333263 +33633537383232313932626562646235323665656634316438613733393634346563663831353663 +66306435666232643534366538343266656665663234383537333761393533303235376237396633 +64653265353436313238646534626464323737633230333665353732363535346334343537333538 +31343537366330396633653833633631306461386636383366313336343965326636623733333736 +35656633623262656335613764343135366363383038393532303663393739373461663663386631 +32663738373435623132663233636338613961343338616238373164633237616431373466666133 +64643237633663393962326536393539653864366664383938363061646632653937343866353633 +39626338383461613739613866616337383563303464643531366331336365653731363334356562 +61303539363263353032646133303666373131316536323563616536643034316238626230666338 +62613436366234656533643665663565623634303237633039666632613730303365653535306337 +65646662353761356632626265333436353463343963666636646537623936393530393537646236 +61386365313730386464333134313536343235366138353630316638333163366265623030613261 +30363731653534656337636135613739333139316330313961356532653836633437333935353139 +32336533616237306265373637353966633533393062663437633036303435356365656533366339 +32383966386437323932393762396563323162653337623031313335383439653664306436333564 +34353132616335653839383035316334326432316262656535343665343336353762343835303230 +64353337366461356633366661346462663830313661346436386134303631313934336562666537 +65656164616332613062373330343834346439633165623832323738363838663439396466396631 +61343365663561303833306661386539373666303334646532633230396261373034643630306433 +37373634636137653134636139386666353134613931356362663337343262323766613438663266 +37323132663837613865393331653334613366623664376337393464613737326662373033396237 +64326636343430386637363564616365356262346639326163346463383031636238633465613661 +30313433303362663266376230306636313263376134316633366163656238633537373235643237 +39346261303562623736633166333836326333343765313837383766353137383463363332666533 +30343432303532316335623063363830396635366265373863343663333963646330316230373731 +38346332646266313765373835363233616436343466656337376437383633353130616236333864 +34343833343566376261666261383235313237386562353130396538396431303166613366356663 +33313930363564366431383432646630623363336461646235326430336466316265336266313461 +64353064353438353463316539363133373961336335626238373639613664363931663837646230 +63393531646363323437666634666239623536623862346261643931376266313738326339633361 +34623265356362306434333662613335663539343563616161643365636363353562336565373133 +62346135383430383038363363633032653766323564396264616631326432313136656465356138 +30613439393734646139656566613963353763316564386166343839323536393730663437626333 +35323736346339386163376139333539353433623732336432323632356264356530346165303166 +62376462636431343838646432333230616137306366343634303335653863363664306133353839 +66336332346230653831666662633034653736613031316366326437623966383933366634656362 +38613431333063333334323733373738663938643838393332333164643335353532313433376139 +37323161663337653563313838356130303039373863313863623435353066666135653233623362 +35313563376536313530353537393633333262656465633631633062356432656165663232663963 +31383432343562343233336539366461626361373735353134613939306432626230333438316463 +37386435653263343061323463663135373862643537323330336434363939613636383535613561 +35343663343037356232383936656264303437383930633062356134313533373561313165653262 +38636236613563633533396534323862376237363037356632343530643431623431663661626637 +34393262653939633137393264663965376665643966636164323364343462393630623665303161 +65653066666330363239396339633462323861636438376331316462643466666166366538303538 +39393538343933613634373139623732643261653637333232373238666135326661643237646663 +33613138633366306565313061303533343761626630343538323965643961353238326664306231 +39363338386432346139643337363332376661333230313465653430643933313164663236353536 +65346262383533373362346632623464303336303239366231373138383332643464613739366436 +65623136343666333063356131383532323936663462386236323365363137353534336661623135 +61343963303833626537306234353361313531316561636564323834643835643830313466373064 +66656565633939643266613161323835663139313437303537353536306236623434626435356239 +34313639333563656363353330393738303334376363333164623931333263303433393831363061 +31303464653465646262333832316339313836373633653563306137326166346661343338623833 +62353337393937623061313466396532306334336566333837356531623338613562333865643031 +30646166653530313331306164616638333634663433373834636561333666636262646637656639 +63666664363037643061643334343336303762376264376231356266323163363638333037656237 +33313637623865386163643136623462353434383832393237363162316430643262613536323664 +65663732616161653433323832656531323964326638353035646435613036366161306463393537 +32326532363434343163326138373130323535323761333331373731653262333832313133366666 +34343561626136613763656530396430616633303531663931396537363766343434386438663266 +36643663636539356631373264366532323262376236373064323461336239396236366239363063 +37653838386665373935363735633630393162643764313738366334653365653831343365653438 +33613163626164343763626436643834643935643365326433613834626464356234373932363864 +66376530326432663462323965356436633530333133336537386466313362303133626662363633 +61393862616563376662343164343763616437663364333463333464313364653339363630373231 +31383031396536663664316662363866623439646236616666393131336333656637333833613265 +61316136653232343162396633303966643465303132366337376461336632333830303931636166 +66346539666638663232343130663561356661613430666566663032343230383633613461333961 +38306164386562623536613566643338383037666535343832363763613036623038306361356234 +32646633656335343130633362353533383035343032306337636666656261393862343130306439 +32623333636262613461323063343762323132636165653063376635343331336630333666633365 +36383331636237366431653661363038653034663939383132626136636563333934326330303664 +38636164366336656233366135316461646433303230643761383464366561356632633365626564 +37376665376532306361653134346666646335653861353431333063666363376561623066303738 +36663562656136656137623939646132373134633963313830323632613731353339326432316435 +66313430366461616635623061616330353065383037616365643462313335613961613930376230 +36363630633965663838343963353365653430646336353935633331313262643636353638653237 +38396339633039383762303762663930346530613062303162393937626631303335393964383064 +35323766653563323238666139353830306537666438306265663862356131396530656234353537 +35316137656338323234626634393333383439656533643264336239616630633835643730363261 +61643066376464346536366435653962366564653933343638326165353136653731666238663339 +31363231376435353932383363663831663237386335656136323538316235313561326133326437 +32373335663139653863343165656164356331373062656638316366313431656362643434376631 +30646435393962306638306566663965653266346561333163393730316563366366316434636332 +66303237613162303961343564636463356439613766363334313436323337323766383435323533 +30393731366439396362376432323932393736616564303235616635643130383566623331623431 +61323032376666346335326339653864353962656466336131333537636463616330663761346237 +38343762616564336635313739313061613735323439333464663336633466386536316566663661 +36336261303762333132373866376264306263313464633832366233353862613265313230316637 +64663565363733353238666430323537323734663935346332353466396432313739393837643339 +66653265356462316630356531333265306134336330346233316566353139396232626538653666 +64386465313735363061653338383631313463303939353830356537663531376336616334633264 +30373839343938313866656338613936623166633430623562646431313665363863343265646336 +66353038313036323133396131386531663137326134616265653436346338666332383138353031 +64656335663464623665626134636262336635646262343539373961653232393663633764306338 +37376233643034623566366332303234346663333739313136616139386139643666613561396532 +33656233643931343738363434346334343732373766363632633762633739653034653063623565 +61643562616663623265323436656535383236623265646364613437346561363530653631303061 +32326638363635353665636663333062333032343932643863663830313837333563386334363963 +62393761653762373761666533303163653861323038366537396332303937383935633261376631 +32383063663636323630343232646439646162373937613531353035373238616138356661653239 +64366537613739326536366636313461393236333433313839376236373836616435353764303065 +39333730306534373736333162653964363433373764353838396439353061333333623264326339 +61613131666636366466656163656364633365356562663666643065373162363538646430663531 +63353765666137353432643737386162373165333266376137653932346237353464613561653433 +34613262643536363930363130633139623665333166643563303530323765303966333231333737 +62393031656232393466653339376130653430383636333037386135353233643630396635383162 +36353066343238663465343364373861326561356330323161316666333031633264643231366265 +32383665306139623431346132656531656633323538383361633461646163356539356134386635 +37326536333961303337633731363930376537336636656334656634396466376237646239613263 +64316536346365623331383736613865393564613665636466313235613662643833363730313265 +35383665653165303064343630366365373061646232656335646231396461646630386530363239 +64613237396464646263336465303364653666303037636430396434626364363965656532383636 +64656565623937626238613864343463663762313166653765393763356261643363373966616365 +31393334356561323432306335616363376334363935326231663039306563643137343361353830 +64343339323261373866326639363536653833343666623961303933633736366461363032396266 +61613363646665353537613430663032303637613637666633336431623930656264623037366564 +37346462636432336436636163363034336563376264393662333362323537313337663730633335 +646239643861396138336534613833323030 From f95b220aa0258ec26b74f8ae7dbca18042bdf24a Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 29 Oct 2025 16:40:12 +0100 Subject: [PATCH 40/73] Allow multiple entries for debian and match IPv4 more strictly --- roles/lmn_misc/files/bootorder.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/lmn_misc/files/bootorder.sh b/roles/lmn_misc/files/bootorder.sh index a0fb6cd..e3ef2a9 100644 --- a/roles/lmn_misc/files/bootorder.sh +++ b/roles/lmn_misc/files/bootorder.sh @@ -5,11 +5,11 @@ set -eu cur="$(efibootmgr | grep -Ei 'BootOrder:' | \ - sed -E 's/^BootOrder: ([[:xdigit:]]{4}),.+$/\1/')" -pxeip4="$(efibootmgr | grep -Ei "IP.*4" | \ - sed -E 's/^Boot([[:xdigit:]]{4}).+$/\1/')" + sed -E 's/^BootOrder: ([[:xdigit:]]{4}),.+$/\1/')" +pxeip4="$(efibootmgr | grep -Ei "IP.{0,5}4" | \ + sed -E 's/^Boot([[:xdigit:]]{4}).+$/\1/' | paste -sd, -)" debian="$(efibootmgr | grep -Ei "debian" | \ - sed -E 's/^Boot([[:xdigit:]]{4}).+$/\1/')" + sed -E 's/^Boot([[:xdigit:]]{4}).+$/\1/' | paste -sd, -)" if [[ "$cur" != "$pxeip4" ]] && [[ -n "$pxeip4" ]] && [[ -n "$debian" ]] ; then efibootmgr -o $pxeip4,$debian From fee6a0bc18580069105b179e7684f59d0f1a8698 Mon Sep 17 00:00:00 2001 From: "Andreas B. Mundt" Date: Mon, 10 Nov 2025 07:51:19 +0100 Subject: [PATCH 41/73] Fixes for trixie livebox images (dracut) --- roles/lmn_vm/files/vm-netboot | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/roles/lmn_vm/files/vm-netboot b/roles/lmn_vm/files/vm-netboot index c21024f..cc1552a 100755 --- a/roles/lmn_vm/files/vm-netboot +++ b/roles/lmn_vm/files/vm-netboot @@ -7,10 +7,10 @@ set -eu ## Imporant for all virsh libvirt calls: export XDG_CONFIG_HOME="/var/tmp/vm/${UID}" -menu=(standard "CLI Standard Debian GNU/Linux NFS" - standard-ram "CLI Standard Debian GNU/Linux RAM" - kde-desktop "KDE Plasma Desktop Debian GNU/Linux NFS" - gnome-desktop "Gnome Desktop Debian GNU/Linux NFS") +menu=(standard-edu "CLI Standard Debian GNU/Linux NFS" + standard-edu-ram "CLI Standard Debian GNU/Linux RAM" + kde-edu "KDE Plasma Desktop Debian GNU/Linux NFS" + gnome-edu "Gnome Desktop Debian GNU/Linux NFS") img=$(dialog --clear --backtitle "Virtual Machine Chooser" \ --title "Choose the Virtual Machine to Start" \ --menu "Start VM:" 12 70 6 "${menu[@]}" 2>&1 >/dev/tty) @@ -42,10 +42,10 @@ case "$img" in kargs+=(console=ttyS0) ;;& *-ram) - kargs+=("fetch=http://10.190.1.2/d-i/n-live/${img%-ram}/live/filesystem.squashfs") + kargs+=("root=live:nfs4:livebox:/images/${img%-ram}/live/filesystem.squashfs rd.live.ram=1") ;; *) - kargs+=(netboot=nfs "nfsroot=10.190.1.2:/srv/nfs/debian-live/${img%-ram}") + kargs+=("root=live:nfs4:livebox:/images/${img%-ram}/live/filesystem.squashfs") ;; esac From fb9ffa53bbf7865ae8f1bddb7fe3c7e1fe0317e3 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 10 Nov 2025 12:42:31 +0100 Subject: [PATCH 42/73] Fix graphic issues in Chromium for specific video cards --- roles/lmn_tmpfixes/tasks/main.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/roles/lmn_tmpfixes/tasks/main.yml b/roles/lmn_tmpfixes/tasks/main.yml index 8e90138..69cb6f7 100644 --- a/roles/lmn_tmpfixes/tasks/main.yml +++ b/roles/lmn_tmpfixes/tasks/main.yml @@ -8,3 +8,11 @@ - bookworm.yml - cleanup.yml when: ansible_distribution_release == "bookworm" + +- name: Set chromium gl-flags fixing AMD graphic issues + ansible.builtin.copy: + dest: /etc/chromium.d/fvs + content: | + export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --use-gl=desktop" + when: ansible_board_vendor == "LENOVO" and + (ansible_board_name == "312D" or ansible_board_name == "312A") From 15cd06f4d63e808fcd103aa6148f759e416f940b Mon Sep 17 00:00:00 2001 From: "Andreas B. Mundt" Date: Mon, 17 Nov 2025 12:30:58 +0100 Subject: [PATCH 43/73] Fix type=user VMs --- roles/lmn_vm/files/vm-netboot | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/roles/lmn_vm/files/vm-netboot b/roles/lmn_vm/files/vm-netboot index cc1552a..92ca621 100755 --- a/roles/lmn_vm/files/vm-netboot +++ b/roles/lmn_vm/files/vm-netboot @@ -22,6 +22,8 @@ mac="$(ip link | grep -A1 -m1 "macvtap-" | \ sed -nE "s%\s+link/ether ([[:xdigit:]:]{17}) .+%\1%p")" tapdev="$(ip link | grep -A1 -m1 "macvtap-" | sed -nE "s%^[1-9]:\s(\S+)@.*%\1%p")" +livebox=$(host livebox | sed -E "s/.+ ([0-9.]+)$/\1/") + if [[ $# -eq 0 ]] ; then mem=$(sed -En "s/^MemAvailable:\s+([0-9]+)\s+kB/\1/p" /proc/meminfo) cpu=$(sed -En "0,/^cpu cores/s/^cpu cores\s+:\s+([0-9]+)/\1/p" /proc/cpuinfo) @@ -31,8 +33,8 @@ else arg=("$@") fi -kernel="http://livebox/d-i/n-live/${img%-ram}/live/vmlinuz" -initrd="http://livebox/d-i/n-live/${img%-ram}/live/initrd.img" +kernel="http://${livebox}/d-i/n-live/${img%-ram}/live/vmlinuz" +initrd="http://${livebox}/d-i/n-live/${img%-ram}/live/initrd.img" kargs=(boot=live components splash locales=de_DE.UTF-8 keyboard-layouts=de swap=true live-config.timezone=Europe/Berlin) @@ -42,10 +44,10 @@ case "$img" in kargs+=(console=ttyS0) ;;& *-ram) - kargs+=("root=live:nfs4:livebox:/images/${img%-ram}/live/filesystem.squashfs rd.live.ram=1") + kargs+=("root=live:nfs4:${livebox}:/images/${img%-ram}/live/filesystem.squashfs rd.live.ram=1") ;; *) - kargs+=("root=live:nfs4:livebox:/images/${img%-ram}/live/filesystem.squashfs") + kargs+=("root=live:nfs4:${livebox}:/images/${img%-ram}/live/filesystem.squashfs") ;; esac From e8015d70d105bbbcddac89e109fe43bb32914726 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 27 Nov 2025 15:26:32 +0100 Subject: [PATCH 44/73] Update browser bookmarks (webuntis) --- roles/custom/fvs/files/policies.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/custom/fvs/files/policies.json b/roles/custom/fvs/files/policies.json index 71980d8..b1c20cc 100644 --- a/roles/custom/fvs/files/policies.json +++ b/roles/custom/fvs/files/policies.json @@ -3,9 +3,9 @@ "Proxy": { "Mode": "autoDetect" }, - "OverrideFirstRunPage": "https://www.steinbeisschule-reutlingen.de", + "OverrideFirstRunPage": "https://www.steinbeis.schule", "Homepage": { - "URL": "https://www.steinbeisschule-reutlingen.de", + "URL": "https://www.steinbeis.schule", "Locked": false, "StartPage": "previous-session" }, @@ -15,7 +15,7 @@ "toplevel_name": "FvS-Reutlingen" }, { - "url": "https://www.steinbeisschule-reutlingen.de", + "url": "https://www.steinbeis.schule", "name": "FvS-Homepage" }, { @@ -51,7 +51,7 @@ "name": "Schulkonsole" }, { - "url": "https://peleus.webuntis.com/WebUntis/?school=Ferd.von+Steinbeis#/basic/login", + "url": "https://steinbeis.webuntis.com/WebUntis/?school=steinbeis#/basic/login", "name": "FvS-Stundenplan" }, { From 98bdee5f4dafeb6f5651a3148891d16ba710ef89 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 27 Nov 2025 15:40:16 +0100 Subject: [PATCH 45/73] Add package libsqlite3-dev (required for teaching purposes) --- roles/custom/fvs/tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index bfcc436..0b5eb26 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -45,6 +45,7 @@ - libasound2-dev - libdbus-glib-1-2 ## needed for zotero - libnotify-bin ## needed for pwroff script + - libsqlite3-dev - libwayland-dev - libxcursor-dev - libxi-dev From 3ac7e99bb04ebd226025d8757c7829b5d9daaa7f Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 27 Nov 2025 16:02:10 +0100 Subject: [PATCH 46/73] Due to new media tables, change the default audio output for some PCs --- inventory.yml | 1334 ++++++++++++++++++++++++------------------------- 1 file changed, 667 insertions(+), 667 deletions(-) diff --git a/inventory.yml b/inventory.yml index 677a84b..949e8af 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,668 +1,668 @@ $ANSIBLE_VAULT;1.1;AES256 -66386130623630633433626535623432643830366330343131316639373935633961663536353936 -6235623430383564323539663363383930656338633337390a326664363064623234383030616139 -38633532356435663937373262326561646537313964306161343430373536333932346131306433 -6266646462353332360a666162653533386366353731613564366363663436633766643136386334 -61616366313462666637613866626330626638373962326665323433303561376162373164383136 -62636164393434323262343937353335613036616539313137303665646665626431373661666165 -38626665353965346635633064666632303531303564353736393162396365396163663365623838 -32363238346135623961386337393166343132633266626332356634343266646538316564383263 -61393634356136373765393439383336323737316435396538643439653265303865353864616634 -32323361616132656165323730396331653764383864643032646633366364333839626362393162 -64663264303738333331313434633563626334646662623533323037366330313664383033373461 -34613235366563393261646339326164373263633434373732396462373032666261616262663237 -64663038306133363762336235393763616639353934353235343031653032646564633062663837 -37366137316666623565366633663132343932633732633163353964653335313239346332643439 -37386131386133396161343332643834303766616534373431643536313661316333303838663332 -31386264303635646334366266386666636239336130663564623734363035306232643761656339 -66343034623835613638353764316433333535303936656330386235643339343132626366326563 -33306433613335393837663037316333306630643735303662313434343166616130376566333864 -38396366313663653539666162333265303037633635366530313332376264386637363635333361 -32646563633561666534376563343339663531353038383366373962646630306133663938643739 -65613064306338366639643830653766383131633664353561663166356535626265343138396432 -36613037323133373135666165346531363336333539643238333963313338303261663061313366 -39316637653230383731326434396364373738326362383034653435346636393730343537306165 -30343034663261663064336639653037396233363732616639386165353438396134633566326239 -38306162343465316639646637613330396561393436366535393339333739643463623438646262 -62316135363838626436383630633938366530353862636534383765643438666539343939303864 -31356134613633653237653838363565323166356561353064633361313638326365626234353737 -39383534343831623337306234643633383934336538643330373436346162383137653361393035 -38323262386566356433633061666136363532336633613738373861626366373437633930653535 -66336535616266333666326637303033316164326236376133316535333766643836313535323939 -65643533623539323438616266353263326139396464383239333836306261656162353731333061 -64656464333838626631653435393531396130656366313233616534316639613330343130306138 -34393330633138303866356338383363336535393638353735646533366435623736643164666535 -66646638383531376166356338656661353630303863363363373234323431383635613164353339 -33646436626461346330326262636339666263313939396633643738393062393062633262333934 -39613161363061323231643635336364376134343032303233366339383166396662313231623033 -34363835653761616232663461336561313732663061386262386532393332613061623231303564 -31386166626636663636356363626335393762646135326563666238333165336464353166343963 -63356232666130656138303730323439646632303132313161383063336638623432326231633630 -39333034343136376439663534353930393365613362626236393833336164306538323566336134 -33313133613039643161363634383136336137306139326236636130363035366535366538643862 -38366465386565366562393838383565343139653466313134336534626238363536663633366232 -66666237353832653963396235363366376463646137333637306131393564356261626165616639 -66366666363065643362653933363330393133646361393834326135626230376432623038616163 -39623231303732613438373636366139623935363337373738626366313863343432636662663436 -38343130373031613561396231313736323733653465386666356165623631363430666330396634 -39373734306465333166356133393066383661353531366137633234393666323765616366353466 -63333764656636346262333261613833396662366539623266303132656330353739323830653730 -37613036396231666137343631306635316635393362303835393139306334613037323332333365 -39343132326665393833643734626230623039643566613862343266366466373138653237633863 -39343561633436303535323864653862373337636164643434363238616362323264366262633835 -36636332633463366432366337653763343835336630346263306536343930646665653062313862 -38666262393435643338393032323661636630623665313466613963323664613431613730653633 -37376235336264356132343833393834646465666232373538623735646465353531343563343664 -39626463653063663632623462373532383964366463323237653935643165376363396162663938 -63363830393466663164633466613133393137663030616236386635633666353039613337306537 -64626332356339393734666138666535666331356131643466376433323439396630383837643232 -64373339386663633162353161333136623466646161663864313336336234356562666463363339 -65353233393965376639633761326262396334396533363330616330306535313365663635316537 -37393932343337363637653638346561613137633033653338303261386433303634613765323461 -61326665346462613338643831623963313138643635306666633631336333646365306131363433 -63353932376136613330636634393462393232353838623964663534316261613836613364353439 -37373732346466393332323337346237373939386266366135636262353433343363323832386330 -38623635366137646233386565313261653834623230376535333364656161363565646138316134 -32323564653039396364623864626131336663643139626463353661313162373161366462333636 -31646131613132326138366261333333633030613566663933633765383461346631633565383338 -64613438383464636362316634623330343963333935323763383065346137613263656336376531 -39643136333232653866333436383836306637323462383237333533633666353638376330346534 -38613238653163313638363531363061653033646166366335316537643865323037356562616661 -31393437326561373638306531623162646636613731633039643230623230616531333064623163 -35316537653139613731386132643763336134626466346538366230353239656234623435323361 -66653632336463306638666336333131393837333636333835633364323565323438376435636135 -34353033303332373761613733393065313764613261303435386565623166626462316434326266 -61393865333535623134343138383366303831643539643464343333623665386566633637356236 -30646238303561633139396363373261383764383132646564313334323735613862356436373362 -36303235306261343434663232616130353363333161356261313532663437393837356365626239 -30303831656539363636623465306566323735363464316462623439303133383136376665663137 -62333931393932653566633633373066333131363765316132656437656466313936386331626632 -33623064393436326662383061663163373830623430396339326462353064383862333864366461 -31373030353432396238663531656564316165303339363361656538383432303762613335663933 -64373539336664396638386663333532393365623064636462653038336537353834643866346639 -39383531343436636561326361353162363462366330333432613431633731383661646531306633 -66396661666439373439653833663337393734346538326633633834393632383834306431323031 -34363531633633393665663661353838626464613863356332383035306565343064643764626335 -36633337353163343731346331306663303735346439386434333164656364353064376361323561 -62393062383261306437333265396236386362613565623238313562613261613863613162646361 -37343835336163653966303831653138386333353038633437363738373664613137643430666135 -33323438323662613061383139333731613361666261666166643365373665656231633636646362 -36343535326537393964313136393661613333623434393864616665363534333333393330653930 -32376266326236643033623933623766303736323835663638376465323238303363373163663863 -34326632656633663534663335616630633264666135313738623435666561303837316238316639 -31636534303238646464616338346534343932323431343861373364316430643665306230353439 -62376437303733653839313338326130623264376666373337333561386236663235353165353836 -33353531326133633930346364623364653966313632666332643962323938313434343337386636 -66653664303532303162353934326135626131373534383232346566313934643961373737393161 -30383563646636326561623335626335643339666130316330326637313937653838356639396530 -33303532333663656636313434353964666535356666646461313061663538393439363233666436 -31383735303638346265356536306331383630633834366438313866623963366235303362303134 -64336335623235653761623138636361383333623937376166636562613865653135636166356333 -34386339613163313331653333303332666238343832346231613233323232633134643635636533 -39653933373533663236313130626138303962333462333033643233663233666433346663363235 -33333965613965653931613937383731613264383638666538313631396530316332363163336231 -61613762303335366163366339666231336366366464396433333237666430336664353963376466 -66396435636333653762663636643131666263646630386166393466633237356235663963623061 -66656238663865663133626630366534643331326461616436313863303237326466363336356436 -36313566613734373131656335343965633739616233646463666565623338613437323034363061 -36393938616330386265643734643336313833336234636264376336303334616464326638373037 -61636564646636656530306134383334316439396135366534613535356137623263326463663662 -30653437333530643533386561373337666665656538626166333235353133633932623065643631 -64663832366464363366353839383635656637303662626365393161646638643964386333336132 -31666130626561373133343837326335623164393637363964396638346530303664636464313365 -37643665616462336566363637383730636132303432333536613931343139336565366339326163 -32363163383461343138333837626664633639346134653764653333303334333533666438363564 -34306637643331636462623937346131383231656431613138636365363464623037306464613531 -31323466343865373035323236313831306239383765643864623533663665653233643135646133 -35343238623963393831653839303739616432313135636563323034613466383237633932313563 -63663261303031653134353037306130393136663333316431306333346266396130373461393164 -63613337363334323761626434653734386534386366623962383162626461623565363065303435 -32313661366566376630613132666565643136386634313737323838646636656639303031343338 -61396362336231643161346435376663373537613563616135313065636663306634653235333735 -62623730303362303862666262613736636535633762643930633263326638626637356131326365 -38623339656162346261343134633966396161313162376536333632643430626432616566396533 -66646131633733303263626262366138653564646366646639663239386536656330386336396264 -37633434313537336435343038656632333039333533656663623334356534636235323062336361 -62646464393362623734383237663335323461643732386435336238313262313162616339346230 -66343363643838343262343635323864303333343662303136613833653964373630653537323261 -34613738346230376261306331623035386638383230353363353063663235326135363664373337 -34646637356236623766373633643665623033393830633861663765313134373735663837306433 -61613564373632363237373933353437356366663461316164336162336434386534666137653633 -37353535333866323632383734383833633634623865646239393838363464336230306535376261 -34373963353234653534353266306533393761383961633431643036363638306334383835313335 -37346231626530363464616464333135626135326334313938656137303165653565633030323937 -31623465336363646639393063636338393064356265356638363265653333623631396439383336 -37373739356533333132393365613237653836666266303130353230336134306461653733313137 -66633238343061636262333565373234306463323732363633626334323936643161333237396337 -65353165366466333437653062613461326464316336353635356630393536373136633934623939 -66363636663163356237373937653632393532323831663531376334646132373636653939626662 -63353830356536353539623436656237343566366564643165623638646561366463643830323039 -30323432353339663563313634303938646165323664346231323131376630623238333464653736 -61376430383832366631336135373631646465383739323233646331353963343830666631303136 -31333435633733373961636436336163393839353934643231316262663033663435366266393233 -37323264383838343935383036623133396464353364316337386463663162366536326235613132 -36316532353062306430333730383336383965636232663433306366333139663864626465353032 -63323334663536366562383362643361336466326532373961653061636135616437343663346533 -65356264663761383737303139356339373536383730316566333037376262653164356665323336 -62343263336164333635653265336565653731653237356530356236636361336339633335616337 -61366137303165646564376532633063663036343362383963663163643762626632306230623462 -61343837626363323462653366343932383437336238336634646532646264623866303761376465 -65616134303234393531646339396161303561616332366265353935373237666335363738303334 -62353339383531646530366537623138303839666531653034653566643139313264393766323136 -66613762343332313732633430316130616564323765373633653334313335613032653834633436 -32663365303738386334373437656534616436316433656632383363346664373263373538636430 -61306238356336383763623233363934326138396562613335346335623837653939396361386234 -64306131663236626164363664663430613333306338613534303532323063656531313438326364 -66333366613531326261663131663430373939306139356431633662613539343662663137636364 -38613863396366626263353832373335356663363534336631306530623066623061333836656433 -65373730653763313966623735323766323835396664356563323435386535366565383738346664 -62316332303232613832656638616133313532626661643031366166393661393932303637633836 -39643165663634323336653236633465323739333331303230663333303635623237633836386462 -65653861353330393963313163613633613039626166383530346665386133633466303531653636 -32393363633233323838323238626564653632633066373535633932653933383234323034616536 -35623362383863633931623263613062313830613835383362616165323165353866333432386533 -64326432373363313531653630636137613662306466366238323966353762333233656232353530 -39353363656535636537376464333739626464346235363363303463333831363939613735663335 -35626562346465613532643361656264653064383965366264336132386639363537346536663466 -61353564326535633433663131643432323463333363383235653534336436313539343761363235 -64653134646533353136366663356632613334316234346465663833333435343232336461323336 -33306338303238376239653434333762386636353930356139303831646535383162626363306162 -62333131346461383735326336663064366333653966656134356337343262363364313839656664 -35663637633931663362393437333130393865356631353430633830623365383436313563323337 -39393061636665636437353963613235356539666363383235333062313733373434306230623664 -64633738633566326638353131373232396366613861356565363330623863353762353831663761 -65383363616537306139346664626661363930396638383331633333383738633366343231373339 -32663430346262306234643838636163313865663438366166316335646332393934363461333865 -36663837313836346363356636366437376332356166343734653239653439383765303236656336 -38363232396131653961336138363966646536653039396164613238373062623430333234306163 -32373936366664373136373665316434356331666235623434623865636530333762663132366135 -38386136626431303464316164316237653564366266323330396466303938636362623264353732 -33623630653633313261303233313430323639326561623930346136613332353665313232666438 -61366665666534306464666662663734366562313233646163373063306664366361343538643139 -31316136396637363032643237646539303131383962636264666261663934323263623936323838 -34356435353136366538636138323933626634656432313362613963303062396336626236343635 -32656435653139313131346233373736613632333062326134666233303334646662343339353831 -64643233333235633534313038653265353734306332643434383063316563613861643732306133 -65653936623331313637633832356436316463306436666439663236333635303362626136663431 -64643936313761623361363834383165333063633561323734376139303739653265363132323733 -35343563663636363163643866316137626134373431623230386539353962616566663362343130 -63393766656633643331643562376136363966313164613435363832336633363139616166316566 -34636137376139633139353031636462666565613932663961363462316130656331623566636362 -38343431396261616133366561353030316565343864643039326466306535643764346262636639 -34653932326266326331303936326163653165306231306338356634623661313061346633653266 -36653330323437323631663734306237366136376631633663343831373565333735636661373462 -39393637626336613233343162646236316532653731336239383466376533663162633033386239 -31653230666136656333633836363763313531653433616337343863653862306665313834666136 -39386162306338353564353137383336663163373032366435376435643066643234306336323665 -37643765653761393266346238363536636464363861633763366132613937633064323762366638 -61383661313533363333653435343339633635353436383533303333396532346566346162656638 -62623162356163323962623761666665393730663531643231646436383761363834303961623730 -65313633366166646332346337663733666261353363626539373562333838636634613139373936 -38346162326262303836353633333935343837333235343166616439653531636534373363653830 -39636162643062343334646265626438633431373862366263663663643330653234653439653036 -63653533383465613763616566656132326531666430633932623238383064346561333339323861 -34363561306663656137643033386230643737383061663635373262373537366365646466616236 -63613665316233313866373563396261356163393135653134646430356539636634633736393335 -66373861623732656466326666343831666636616535343635333139336538356637663563316336 -31636639363164353732643966633536356138656263616663333934393564356534366331303135 -36323739363034316430356636363633383031393234616439663166323062316538663532353461 -61383063306530303538393266646631333430653166383461376138666535613731313830313339 -31333366313038373461653065663662613439313762323232366630383937363837306263306339 -39643462356562666666323435393066326231346562316235373237356261646136353362633861 -35613237393436353531396364373833626166333865306232366135646264323632313939363930 -62306438626231393736333030653530346135646135353264376533333333636462306137383361 -31383932343134303831666635363065363265633466376531363166613661653035396161336630 -38613338653934303063663961333862333963346536393766376239396164376163666533373232 -65396335336332323032303035623439616262326366373935646131383663366465643135303337 -63353561366430616634633530323932376539303239633965303866613839323263373637653664 -63376464663436353235326665636334393934346235373432613661326135623537653564656436 -62656165323736343165623362333933306432623966623362356265653530613931343465633137 -62333037313030366435376236366665656266396538303433303738386461336265343237613931 -65633139383662336535313038316464666136653564396263666233656631313362333666353438 -63343839386234383137663136613065303562613963633737623637383164346637343463323036 -32396164376661343565663864366465636330666630663330373535323165343962343336653934 -62366161653031343061306433656139626435353831386132616566333366353662393837646264 -62363338623563636136663362613431383332363433303230323733306661306632323931356536 -66626134663462666336393136333061383631356166636666316133366561376163613662303430 -66303039616331613761616232666533653063376666333833303466613762336335616664333361 -31646636653361396162383635363934636233363862393966333730633731306439643162333565 -36646337663663636664646364393933363163363135363831653539393063656262383739313163 -32613962613434656262333037336532643234386663653732336463663539633933323363663462 -31346264656665363962303332633265653236366233646333646637316430366362383662613336 -32643337383230616439363030653366363339316433633163373632623235343736633237353131 -65353933376434323831353735636337386364323862353139333830363631363737643061323562 -62393531396561333132316130303764636562643634663866313030346231366638393961613038 -64613461383733393866643231326337353935396330616162303730303661363733303066323332 -65643636346464616339613330333831346266643430303865363163393235626436636339623766 -65333661363466373566393439663733316262356464653030626466633633313536656364353235 -33326665313265306666333962303036333036373939373833356538383638306235383564613037 -30356264386465643934633066353538626363333463663038626263323863363561663561376336 -62323838316437343365366135306562623936396231363736323465393438333166666430303431 -63326263613937663933633935303035313762303032666535623238313062363432653633643734 -33626238386533646230636332636563383532316630643063343637313631373439626430613564 -37323166346531323134656531613865656134326163383861336664656665393037663236323736 -61663331343361323066333939336263623033383363623163346334376465363565306532393933 -61653135373536366338623063383166303734363139633838396666626364653333666264386262 -34663932373139653838366238353733613137626531326237633862363862646261613432356365 -62613466313532376134396135303338633265326263336661323765323364363236623532623232 -66386639376433633832363332316537663534303436656461646237323261313865323435326638 -63633137363363376361306632656432356436656563323661373239616130626664343564336233 -66643632636337633964653963356433333230343366383531666362393562646333386439653533 -64363332366236376233396331623861613437643037326531326463303935343135393530643137 -39373535333433343862623230323530333166383533633861346133663263386661333930336162 -62653532396231303264333639636161363839646338323061326463336637633136306663636565 -33646261613833613032626666643461666634633732313332313065613838656364316162323637 -34613735666365373836643366643630636262373963353664336562323363386131316662333961 -66613461633664666236646339613137393838356530303739326333393434636263393733336136 -35333861373639633239366139663365653438323433373330343034356535396162653630633162 -66386130323337323033343832663664346563393130623861653135373536663061383339306233 -30373033306664336237623564656230303566633434333537366337666330396662333534623333 -33663239313866613466633234623966336536616331626366653932353761656138393630636261 -63646235333830663039666162656539376465666332326465333333316438396536646166666264 -35303238373430376266653234366462303862663561643734393238363939306430323362376133 -30306162383230646365623738366362646534333561363261663735386161323463613462666533 -61613939363235656136393766373537626636303432366561663535336638356664376631373732 -35326633323933343864623730633237393965656131306264383737653632633235303335656436 -30653637353037353639306465613634343162363830633230356435366665353436323639333836 -35653732353664623434333064386436643966336465656135666436323263393663343935646461 -34336633346165633763353130646534393132316538646262363164643662633135653838313330 -38396364326366323164363732363934613165653538333062626565313938303933353330643235 -32313762653465396530646439366538316432373630356461653834303934326263306562386263 -64643639343664313935396632613566313463663665666261356430623038383432623031316262 -36356436643762646566343262613430333364616631623464623461633239633937373435333133 -34303433313262373737613466333033303430306436323235396435613737376466323330383435 -61643263356265646538616665356664343933356439643835313461623636373466653736663636 -64623064363032666332326130313433326165333064666538353465643161633539323963643161 -33666565656531306430376333376631333134393335303038306138633234363366643139633965 -61373865343234663166343265386534613030393035613261656138333566363139636130336431 -66656362373536613065326162633136633864663739363862306432633431646630373239653461 -66646539376636323939363935343532363166636632306636643934363732633664343262313731 -35393861386661366666643164623863663037616236346165356438396632656464623465656333 -31383936666564623734333165316264383837333532623932623765326165643832623561633132 -64373634306436383562336335326134313731313435396364323964303763333033653235613434 -65373964316165396137386637336661373239336535366334366133356237333236393736333938 -31383332313633386361363262396134323230636532346339396366383862613934616231373932 -64653163646562306331613761636337626634643931373730333835373333313332353638653865 -34393262396365383063323431626662666262613235366332323466303239663865623731386531 -30396439333939353437663863383164376437366161383631323666333839386438656165373830 -63313465396537643162623234643730616538373262323139626165303165396531616564333336 -61633330303065663532643036376630363662346331623637346539323063306536376533666163 -31343461326336336263376163343761646235373765663631313838623630306264356336613164 -66333330636339613837623263656261643865356665633761323933303861643266356266643538 -65333834373966396161366464653464616438333736313464323066313961363639336234323866 -65306436633862356234396162613937393236353865653235333234646262303366343938313561 -30633238366436373363366361356533346166373866353230313032373134643731623733373865 -32633062313130303238333566653133386562313033373836663561323530343331393930323864 -35666531323165373235363431376435633765363934623166663031336165333730666235343930 -34333732303831333263356135666432303038636433653036623064663832653634363739303265 -32326236323030626339326663303066363330363564353166663032373930663866326434663633 -34396163646539646463323337373334636662343861646464646563313931373933303036613538 -32323937656663623065323931353435363163316637633838303439323433643466626264313335 -31396665343961313636383666616630363538363564376134316634313861363839376232663131 -36323862663631333230376264376538656237386338636665633131373064623232613732656663 -30303131323364653966653666646535613732376166366238396337366465353265343962396465 -64316164643239346239363431626439666331396361346439646562613162633134306237353136 -61613561656435646163613966646335656337653832363736336262303439306238373339663665 -39623465343336316338343835393235313566393062393663306430323937643961653163356639 -38326461323539336638306138326432343265626431373232373137376263346437633638653437 -32306563326535636165373563376161656432353431353732386437663939303339346365353665 -62376466393966336330646631356462373434643034353161316438316535616638323536633538 -33626632346138643461313338656530323363333065616463643366303139396239653830343464 -64333766313333666564666431626137333536386238373739376264353930356538616238623836 -63343830616331396632363464653734336234333339306531613263316236613632353037303934 -30343239316265666639643831363734653039633833653263393033326535353734383664303838 -63386538386138333030646363616164633933653364633465356564353763373039333637306230 -31333631333330323239656539326336343839663034656233316239643430633966623462636462 -37653963363832346337376263613836386263383934376264316435323036666166336561633465 -37353161313239366234666132623037323263643161333837653233613639653437343665343533 -30653233373339646330643732656638346364326632346132666538386630383837643563636232 -33303764383664323639323330366462653537396237373362333966313234623037386436366538 -61353930646332373737643930313138333764656133373738633531393633616539393463663537 -38383735396163326235323339643664386161653831313866393537623063656333643838343362 -33306435346165633937303536363832323733646131666430363266633436306234626632646638 -34323339626633653235366134303666623232376661373530386634623535313231623831376130 -37373731313232323632666338343962636337613833326633386333363132326334343739336265 -37363538356162653263666431346537313164616462623765353430626666633630636632633933 -37613737656338613465373039383133633833616233373163323035663265316365656363336237 -34353937316533366536646164363834373664353037656230383633633332313639323566353264 -63633339353065316531616139333137356534343066356433666137393665383139346264643536 -39386438623466383666616463313161336334353539306330326563643032633036643435333831 -39366564373430333430353664326131616561616666323838323631313138666238313735376666 -37663963303063376337346463383063373866633965663836383331373762643138383864663539 -64336338623036306466346136353334356463616566323864633332316666633030656465386435 -30663831663464303832626631656431666131656334376166303036323835356638623339376532 -33313639323163616266663235343139613963616362636139626661363562653338373532313133 -37383565313766323263306439343838643061363935666561396135396366323864323733666163 -32393834336533356432323133613162653136336666633737616466356435383261353330333339 -65303462656562393136393765366633386339663561633034366632383637363533363266393833 -66663663373438323663346362393637353463616636666661366431333931316361323637623835 -31643631343961383337353734303131666662646666346465303366616336623461363962363536 -34613936663939373063613835396662353637643431396431383539333264353337393031383565 -30353533663966363666363636386162303435326636646662356434393366386530666330343532 -30616465663761303130363933663564373431333133616631346430363562333663353661333862 -66653065636336623762646566643132353630323965326336613735306432363339653139343533 -38613030336230653362396532353761343866383765313731316437393961396561336264303835 -35663665653561643464356135383932323331303332613663313732376561336235623038646234 -32313063653835353666333935613831623663323537666436396137323833663730626263303861 -30396630396333663536646637663637653463386262616666373930656537333563353365643263 -37333834666131633135366235366534383862393465393366623231623566386435326365316234 -66383438386635383063643666333934343730626531666231626535633161346631633635306539 -31633237336636636639636231353434643732306536663735363061356163633533383233643136 -30313335383764663061373962383135383262363133326466653361663765623438323637303631 -65313937316165363239343964316365396664313437366131336663626365316134346634616431 -38653330306131663861656266613734396132333964396634616332343464376264636466393134 -66643334653638393130646161316162626662633363346466316232323632366134653566376134 -63383236316137313334666165613032343635376535666165336436383731323035343334666564 -62383161636366346236336532353365306261383036623238336563343562336430623664316462 -37323837306330646639376130353961356334626162393633393830373738383963646265343635 -37303833633533656431613437393164353363656437353438306134616365653965613163366439 -36646261613066643932336435356537313036353539653839643139323637373461636438303465 -63313564633533386136306630376538326262356638373234373336623164623932343334386133 -61376161393263373466653730353866386333376534616535313333356432396335356164656535 -66303664393537336536336633353133346635643530653339313835613063343234316564653162 -37636334303263643335336364636162386465383236353832653563303138313263323032383036 -65313330343165366339373964373233666533636635643239633465323265393439383438646464 -32613238653433633239303433313161333261626463663934643062633937313535633237636339 -36353431363736363938313862373336616566623632656237393965656334353665373731643435 -34363635366333326464316162613636383535643864393934626237666231666162616135313265 -39643030366463366364323531393030313462313535383037363938303738316131616136663935 -62396439333537363831356365393962383534646563313134363162363039633130306133303330 -64613063343931623166393730396230623962666331323138323964393035363534623033376431 -38363336313336653663623161623938333030306330386630643931366337636133623838656635 -33303139646437623366383634643032303562336234363039333234313932636539663762376633 -65643532643461303836393939383161396335323532376530633863303963386536613933633465 -39623464393732653164646139333964343431383432373334313538366235623539623366316636 -66363335353564306564663337653431353835313763363233396634303239626365643935663137 -37373465636130653766623566396139306666633432386138623065313138316331623566633335 -35323231643236366433373530316438316639316464623930633638653435333066613136613866 -33383766333461613462656635333632356431313162393562323833313862626466316232366136 -38633630643537633335663664326362613639386666623466393335643038393733653231646663 -35323361653130303434646639633737343631613833363730653838383365653532343339363366 -33376465623365663338373662373136623934663765353434336336646537306330353838323866 -37393538306638623134396263343435303839656236623638333861633964643166313138363539 -38313265396262613938623530353937666665323239346538396464376264363238613230303938 -61323036666637613231343661316634396230383333373364666166313762383935613061613739 -35366434313462333439626466666435623865343066356138623834313232636339313936373761 -35623762326338656132326638306664653861636465363930646331383164326633623432373661 -63663838363635353834643964633536313362323936393439313565316132643339666335623837 -33393231316331643830633761643266393661653561666436363236613063396563386334353135 -35646564616535653761653034613864303965613138653035363339313635326138666639353534 -66316231646138383331383230636534343761363864363334643233393864636130346236616664 -61353032616637363739396136653639393638653863653030646331633066343864633533623837 -65396637363762646263393037653430636538653331323739326465623564366237646639316263 -34303236613362663834336132666338393436343531636563376633613938626534653961643532 -37623734626431626437363130653766663138353433363639356362313364306335343839306561 -36346237343531333239353265383539343233386366363331336133396566386465616261326434 -30613561346336626532393831373531663564666638376165396436663164353937633637613434 -66306536323338346561353635323734643638373966633731383035343964313633316432333136 -36313639643132383335313035326436626437396361363534646333613165623865616632356238 -33376231663636343438653735383762366237376464336561373562653138633535666237393266 -39613066613434303862356364346135326639373634373036623636386535313433643738333334 -30613935346230663866363430623139383861303266343332313330656164336239376239363034 -31303137306361303165613065353438306532363033663636393830663834356366636262343366 -33633037386239343763353461616262313237303331356134333530333137363435383766663438 -63323136653031373564363532346633313639323863646431663535316463323637393862376538 -32643162313039613931313165386238663764346438353034343139653833396434623835623963 -38663366393266653964653735653566346165303333653064386435666238653639366564333466 -64353037386335333736356133386433336334396431303333383036323366363233666231613231 -61646436336334306261323436373866346565356234316533363638633336323565376533613531 -38303034303932663930613963633436316664353831386238383630643239653435333537386337 -36303539383133363833306238386263656366346532626537353539373765383262373837626439 -35666235346166623037363038313030663665333761386536383439306632323763336636663265 -38626136323963393164343638336664373761363332643837343937303565663736396462313862 -65343838626633313831393333373765323337663337303965336663616265333831383861633238 -65656561363833616439643238353430666264633935613365626364323238326336323834316233 -30373939303463313636663031346433623366383339383263353666623065313030646133623934 -63373732393339306265363136303239386633616464643634616530313061663038366137653631 -33613234623830616338346539323831616632346230623137613430336637366239613939376138 -62313763353865623434336264623962343532653365303563373661643733373363633831393538 -38383464353138376161363038623335393133633236613739646564653461626235343762646532 -33353265646334653035316430313932313764326230616235316432386363303131633334396238 -30636130316430633265353464373862366130343862383137633539336135303166366637653661 -34643938626337663838326532303163616239613138396661366134346632343733373236633165 -38306431393938633834393164626633383934343766383531323932353737326334363666623238 -61643431653134316339346335643539633062323238616363623035623934663561366636323563 -61363365306664646464393934366634643863306365366163613262353835613966636630303162 -65333130326639666131366133383064613062653264656436346236613565623163373561346461 -33643264326166616161393731393339663839313665653335666661303436376464313935376236 -30353561343961343766383233663931333736386561313265616363663238363065363539626663 -35383865323562393030383137396365376539333162666666653632333033373133356236633263 -33393733646261373036653031653763333061656666336438326436356433653135613538356138 -35373863376236366464323137343939626163613966363036653232643735333962306131643238 -38363163616330656265643736616365376139313239386639613962656636303431393765313262 -34623963663235646136633562336361656566306161363164343736333238666335333837633139 -34656631353538356261313532633731353061363765633734393038373433656538346431353037 -66316364613761653965313264643038613261616664666264363663353330646630366133646431 -33363566373239646366666430643366343665323361636630313361313137653936323835393863 -66383834646637366231643431326663333936653337376132303733666266653231366135383133 -36396638306530313939656335316630396562383133666561396662336439616463623062653365 -36306133373964316465643065653836363833386436656133336336323633653539306533313731 -32613863313038613630323838653634666634383261306635363136663438633433323638613466 -64323936316137333963613730356139343538633335346566313837363238373339363532376363 -66623262623139633633626430623165323562633566396234316535326662343363623863376463 -35396537373236303563323066396533616565613038363564333562333962326432313338656638 -33363464616433386161323262666436623465393162613866663330656336313763616662636461 -65333333333361636365326533303830356630623562393038616166323237643364323730643233 -37626462323434313939323664643336356433616336303764613965303731333337326365653663 -31666231633434656631303836356264343033393132386539633235386462363130323838363039 -66383666316163316433363131646436353632323764633734663037323738323434393537333436 -39633361353938313165386136383939666130313266383362616562646361306636323639666639 -32626339373462636563633361323136343336313233376431393462333864643839303936346234 -31313836306266326365646536336131393561383435316664356637333339356137643365353562 -63323830623165353232393836393431373131623636373263366161663261326639646239396337 -63356334666433363062353531643530356337653233373830316637636136333837653966396564 -64323238623530633433316234366132646361366366316666623465323239636539666234353337 -38656162616539663565386261306131396166306262313462316263623536643863383765626533 -64303838633530623766323030393932646236346265653462306663313366663163643938376265 -31656563383861666132666236373062663532666164643732333639623235356365353266326632 -64626263396365333432666333396437643535663434333634316564383030343936306130633637 -35343130343333366637643762316233646639383738383863346639303936363364666166316663 -66323964346137653266343036323131643263613137623564343631626135373765333963326436 -38666330623463366538393162393066366539323965353761646532363833356664353031643936 -34303530326464316164643630386635663131663762623331663939343736623030323764353636 -38366232623435653637663830323364326331366239363733323537383965336433613165343438 -36643237643665353230643535356132393537636131343830373666663139346632383466643333 -33336462663262373631636332636439323665396637363662613762313434623337353231353935 -62373063663339313436656261353636313764663839316264613461616263306435393039353064 -30666531306264663238333633656135346334356462616365613838363062353735666435303238 -31613764373139303537303163363362346339653131633630356265353162633338646431356266 -32343033376238333761373162343632373464393239373938626530396435303365376638393036 -35306636303466653561326535343463323963626535303932386231643862363531376531626632 -37633963646439623230323064646431306630356166353065663633626535613536313166616365 -31323831656132346263613662383339346662646364643465363439373237373362666632383863 -64353534616235633931343430653033383537346665633931343639383764306536356337353266 -36626162613161326235376633643038316236396662663966653730333063343630363830313938 -64356634346662623631323266653631396533306436646566633236666438393338363530333136 -30396534303063613264616662656633666265393261623634313338373438343866616434666362 -62663566313734313330613261313263353530366461646130653437326134626434303861303164 -64643739326634303861656231303239366265383439363036383132633031656162646630616632 -33313436666463326230623066633531363739343139373563363030363163336639303835643764 -61396464366634613932333862386630626634356335636435613534373036386136633765313935 -30363933623431323537336466633736633662303965383765373864393938393232366534636363 -62366365353131663333393933366464626561376463623332396465376233393064316330353663 -35326662316336666134343136393831616537363662383264313734363331633732353837646232 -64633837623434363565346338636434396338343061343336323030393733333736653136323964 -31633965333963356138383432323930343562383962313834396236333031663261383739303438 -66313036373063323339646361653532383532633635383935656633626238393863393630316461 -61386166633034393438663366643431636663313333383832656233323635626431383664333132 -65343639626631336532363235626439333266356433653632646436653730623030393461626466 -36343638663330636236386439646436326134633962396532393461353234646162643738393462 -35633363616466623633653161616165383666323533366166636436386534373465363830656436 -39323739626635383065653638633833373765383334313835346238613566316330386435636565 -65643733633934643862366532653533303763653161633864333866313330306337363964653564 -36333665353134383265626362303632656463663330373965663739623538306266396361313166 -36316465353733323934323138376136656464346138643663376662656236613231383831376233 -61356137643862633038653866633536363932346432393661666166643333303863633032656562 -62386336663963336631343366656637656236336166383439613035626536363431386133666235 -66386161656461333964333361323136663033633339633339613630373364363337303432373339 -32376163316230313466306530656637646539383464633836313438623563366433656430393030 -35326366663839306464393362663362653863653339323337313837306237356262333863613066 -30656430323438393964646262306361356339616163366637646438306262666465323033356164 -38383034373934393732303634633964323464303034363836636131306436383163396234633633 -35393338343732353864643864333736636265666533326530656635386432343661666635366562 -33373265653434623030333033646434356335653930633230616139353465366238316331623366 -30376664633436383536353339363931653265656138323734326161666136343561623166343666 -39306331646663623766373937303535343264636266323738333931663165633536343035643937 -35363232643562333536333733373961323262366137323462353732313036663236616361366665 -64383337363065666236333335363461396466363864336438633834646134633564353666303564 -61336332643234653362616636383439343834626633663764313539613635373831386336316366 -34633762326539323933663438356236356361616337356331646338373439336265386636323437 -38623865313935353532396365633165643932376561626433653435316136393437366633633963 -38363439653735323761633261303466343837613834643364343833613233333337396533323230 -61353834353562383130356464636332636565623934346537623830653663356533663766323135 -34643661666166323534333030333064316434623863666434363535343564343336333963623233 -65376565376264373931643734663636636462376630393263306565633062383637333264373536 -36333733353366343562336130366261396663656233386331613662633563633262653766353035 -63313132316662323539643236393532333239623830666464333432376535303633326530306137 -32333566386166633335353662306237666238306230316465333435353065363238336239326135 -65363630363066303534643534613438323631663961616633643630383235376437333763363235 -37373162623334623532396664303137623863633839373633386631643963623139353565303339 -33626364396362663061303238313965333536323265336339306239633037303535313939623736 -32643262613830626433353735613133303232653764333532343837303134366438313263643336 -30343736616365663235653737323339313663653930363232633564653866396338626661363766 -35363435373164383366616532623235363062363337336135626431303138306461313063326433 -32626166353665363863383664333362366537613535643361623236336432306534376435313363 -39643634346535373836333666353864623139393035666361643665666365313736373435646638 -30633030643664393535313438373539616365616362346136306538656434323435386435656364 -64636266386638336238326536613264353836373434313162616336646262323835366639373561 -39353766613866303037363465623838386664303366386564333866633032353037653833363036 -31363465386166643637376533323963616132356536393539626462643361313635326166316162 -63363835343630313262623736326561363033656561653261616636376263323330386339653235 -39613762363038363739636664613064663435386635363033323962353034323334356233316636 -31643962373063386464613630373934636665643861346132633034646131386439323136646630 -38363262316338656464613664643635333232393664326631346236643263373936393564613437 -61333163663463383333636566333438656664633935316366646331616235646632656462363336 -34633662323463336534383266336134643666633435623862623734626438616164323465613335 -64366232306336653532626561656432666134373561333165653534313038316230666131656161 -31623866393330366532396433353637623765653237343432333965333264623231323636656331 -34343166656565626138373539306662303630396133663166663934666533616334316161636464 -63326662633563626464633361656333373432313663643636393134353431663537323634396230 -61626236393133363936316433366633656230613439386566333062386433323138373832333562 -32363465643866316262306666316538363561613537356364393131613736663761323935666435 -32376435343437383737333637636239333834366139643235386136666531313632383364383636 -65303732653939336566343361353965633031396161363039613963336361363939633731626230 -34306463343262623733636135383630306461643439623731323835613966303437663035366434 -62333139656665336164323165343534373964313961346533633139666431326265643065633962 -35623137353262306661366238343236353430306637353531353033356635366666376336633039 -35303733363033353837363163383431366161643363346238313566626233386237383036643065 -31373237316635313435363530303161326465376437613033333331653434393965383434333263 -33633537383232313932626562646235323665656634316438613733393634346563663831353663 -66306435666232643534366538343266656665663234383537333761393533303235376237396633 -64653265353436313238646534626464323737633230333665353732363535346334343537333538 -31343537366330396633653833633631306461386636383366313336343965326636623733333736 -35656633623262656335613764343135366363383038393532303663393739373461663663386631 -32663738373435623132663233636338613961343338616238373164633237616431373466666133 -64643237633663393962326536393539653864366664383938363061646632653937343866353633 -39626338383461613739613866616337383563303464643531366331336365653731363334356562 -61303539363263353032646133303666373131316536323563616536643034316238626230666338 -62613436366234656533643665663565623634303237633039666632613730303365653535306337 -65646662353761356632626265333436353463343963666636646537623936393530393537646236 -61386365313730386464333134313536343235366138353630316638333163366265623030613261 -30363731653534656337636135613739333139316330313961356532653836633437333935353139 -32336533616237306265373637353966633533393062663437633036303435356365656533366339 -32383966386437323932393762396563323162653337623031313335383439653664306436333564 -34353132616335653839383035316334326432316262656535343665343336353762343835303230 -64353337366461356633366661346462663830313661346436386134303631313934336562666537 -65656164616332613062373330343834346439633165623832323738363838663439396466396631 -61343365663561303833306661386539373666303334646532633230396261373034643630306433 -37373634636137653134636139386666353134613931356362663337343262323766613438663266 -37323132663837613865393331653334613366623664376337393464613737326662373033396237 -64326636343430386637363564616365356262346639326163346463383031636238633465613661 -30313433303362663266376230306636313263376134316633366163656238633537373235643237 -39346261303562623736633166333836326333343765313837383766353137383463363332666533 -30343432303532316335623063363830396635366265373863343663333963646330316230373731 -38346332646266313765373835363233616436343466656337376437383633353130616236333864 -34343833343566376261666261383235313237386562353130396538396431303166613366356663 -33313930363564366431383432646630623363336461646235326430336466316265336266313461 -64353064353438353463316539363133373961336335626238373639613664363931663837646230 -63393531646363323437666634666239623536623862346261643931376266313738326339633361 -34623265356362306434333662613335663539343563616161643365636363353562336565373133 -62346135383430383038363363633032653766323564396264616631326432313136656465356138 -30613439393734646139656566613963353763316564386166343839323536393730663437626333 -35323736346339386163376139333539353433623732336432323632356264356530346165303166 -62376462636431343838646432333230616137306366343634303335653863363664306133353839 -66336332346230653831666662633034653736613031316366326437623966383933366634656362 -38613431333063333334323733373738663938643838393332333164643335353532313433376139 -37323161663337653563313838356130303039373863313863623435353066666135653233623362 -35313563376536313530353537393633333262656465633631633062356432656165663232663963 -31383432343562343233336539366461626361373735353134613939306432626230333438316463 -37386435653263343061323463663135373862643537323330336434363939613636383535613561 -35343663343037356232383936656264303437383930633062356134313533373561313165653262 -38636236613563633533396534323862376237363037356632343530643431623431663661626637 -34393262653939633137393264663965376665643966636164323364343462393630623665303161 -65653066666330363239396339633462323861636438376331316462643466666166366538303538 -39393538343933613634373139623732643261653637333232373238666135326661643237646663 -33613138633366306565313061303533343761626630343538323965643961353238326664306231 -39363338386432346139643337363332376661333230313465653430643933313164663236353536 -65346262383533373362346632623464303336303239366231373138383332643464613739366436 -65623136343666333063356131383532323936663462386236323365363137353534336661623135 -61343963303833626537306234353361313531316561636564323834643835643830313466373064 -66656565633939643266613161323835663139313437303537353536306236623434626435356239 -34313639333563656363353330393738303334376363333164623931333263303433393831363061 -31303464653465646262333832316339313836373633653563306137326166346661343338623833 -62353337393937623061313466396532306334336566333837356531623338613562333865643031 -30646166653530313331306164616638333634663433373834636561333666636262646637656639 -63666664363037643061643334343336303762376264376231356266323163363638333037656237 -33313637623865386163643136623462353434383832393237363162316430643262613536323664 -65663732616161653433323832656531323964326638353035646435613036366161306463393537 -32326532363434343163326138373130323535323761333331373731653262333832313133366666 -34343561626136613763656530396430616633303531663931396537363766343434386438663266 -36643663636539356631373264366532323262376236373064323461336239396236366239363063 -37653838386665373935363735633630393162643764313738366334653365653831343365653438 -33613163626164343763626436643834643935643365326433613834626464356234373932363864 -66376530326432663462323965356436633530333133336537386466313362303133626662363633 -61393862616563376662343164343763616437663364333463333464313364653339363630373231 -31383031396536663664316662363866623439646236616666393131336333656637333833613265 -61316136653232343162396633303966643465303132366337376461336632333830303931636166 -66346539666638663232343130663561356661613430666566663032343230383633613461333961 -38306164386562623536613566643338383037666535343832363763613036623038306361356234 -32646633656335343130633362353533383035343032306337636666656261393862343130306439 -32623333636262613461323063343762323132636165653063376635343331336630333666633365 -36383331636237366431653661363038653034663939383132626136636563333934326330303664 -38636164366336656233366135316461646433303230643761383464366561356632633365626564 -37376665376532306361653134346666646335653861353431333063666363376561623066303738 -36663562656136656137623939646132373134633963313830323632613731353339326432316435 -66313430366461616635623061616330353065383037616365643462313335613961613930376230 -36363630633965663838343963353365653430646336353935633331313262643636353638653237 -38396339633039383762303762663930346530613062303162393937626631303335393964383064 -35323766653563323238666139353830306537666438306265663862356131396530656234353537 -35316137656338323234626634393333383439656533643264336239616630633835643730363261 -61643066376464346536366435653962366564653933343638326165353136653731666238663339 -31363231376435353932383363663831663237386335656136323538316235313561326133326437 -32373335663139653863343165656164356331373062656638316366313431656362643434376631 -30646435393962306638306566663965653266346561333163393730316563366366316434636332 -66303237613162303961343564636463356439613766363334313436323337323766383435323533 -30393731366439396362376432323932393736616564303235616635643130383566623331623431 -61323032376666346335326339653864353962656466336131333537636463616330663761346237 -38343762616564336635313739313061613735323439333464663336633466386536316566663661 -36336261303762333132373866376264306263313464633832366233353862613265313230316637 -64663565363733353238666430323537323734663935346332353466396432313739393837643339 -66653265356462316630356531333265306134336330346233316566353139396232626538653666 -64386465313735363061653338383631313463303939353830356537663531376336616334633264 -30373839343938313866656338613936623166633430623562646431313665363863343265646336 -66353038313036323133396131386531663137326134616265653436346338666332383138353031 -64656335663464623665626134636262336635646262343539373961653232393663633764306338 -37376233643034623566366332303234346663333739313136616139386139643666613561396532 -33656233643931343738363434346334343732373766363632633762633739653034653063623565 -61643562616663623265323436656535383236623265646364613437346561363530653631303061 -32326638363635353665636663333062333032343932643863663830313837333563386334363963 -62393761653762373761666533303163653861323038366537396332303937383935633261376631 -32383063663636323630343232646439646162373937613531353035373238616138356661653239 -64366537613739326536366636313461393236333433313839376236373836616435353764303065 -39333730306534373736333162653964363433373764353838396439353061333333623264326339 -61613131666636366466656163656364633365356562663666643065373162363538646430663531 -63353765666137353432643737386162373165333266376137653932346237353464613561653433 -34613262643536363930363130633139623665333166643563303530323765303966333231333737 -62393031656232393466653339376130653430383636333037386135353233643630396635383162 -36353066343238663465343364373861326561356330323161316666333031633264643231366265 -32383665306139623431346132656531656633323538383361633461646163356539356134386635 -37326536333961303337633731363930376537336636656334656634396466376237646239613263 -64316536346365623331383736613865393564613665636466313235613662643833363730313265 -35383665653165303064343630366365373061646232656335646231396461646630386530363239 -64613237396464646263336465303364653666303037636430396434626364363965656532383636 -64656565623937626238613864343463663762313166653765393763356261643363373966616365 -31393334356561323432306335616363376334363935326231663039306563643137343361353830 -64343339323261373866326639363536653833343666623961303933633736366461363032396266 -61613363646665353537613430663032303637613637666633336431623930656264623037366564 -37346462636432336436636163363034336563376264393662333362323537313337663730633335 -646239643861396138336534613833323030 +61623838313861353164636161633266303139626433313863633833363239316234313934663762 +3665613038393338396636333466373763323231653865650a376430333530613061363131323235 +32663539633066386165306537643862363831346132643339633637633665653835343731366634 +6534366130393634630a626163353262626635303864316332383361353137393733356263623333 +39346432343232646237316136653466323036323366353062333034616131303338373334373561 +63343464623837396334626431353438333039346261363664356130353537363639396332643239 +36306538303561653862623736626262326436363538383966373265653262306262373866343233 +32633334613233623533663764366163333932383532633863323739663863323739626632386662 +30396533613838613262613039333161613632346439373666613463346566323538653234393838 +34343066616165396231343436316133383365356564393066653130356362336430323536666333 +64376637323935353634333031636666346362623761616630333434353233303032626130313563 +65646230356238653730646464346165356638653038333035623636343130626165616562666430 +34623630633234653765396335306534383765353232383962303262626362623933303563323861 +34636263663134653435316236643533656236643466373630626136343438653366333862333030 +62356664616564316636663561363631366135393939663361643934356365633665626437316234 +34346364313339666231623235313030306131333036396466336638323434313230346638383834 +34333861363131643036396539633662653434333536393664303933356465303362313066646431 +30383839313439316336373037646336616461396234666336646234376363613165363831343266 +61353062666466343630613735353835313166326361646266653739396337386531386664383664 +39313862666431343434613634383737393164313663633635373964613863373137653063653132 +36303233396530363933383037313933663461363334643738393863353963373461326565383131 +32656334353839383732323430663564373632313633303062306232653739366561336363333536 +34323165666135356463663263386132323364333632393164303939333336346436666137626163 +65323064346237316463626536663437303861353838336662313933656130376563663430353336 +39663066643565663738653838333036313634383865386234363564643639353230373738333261 +64366632636464363661633161623462396435663238343233326433616234323239353165353063 +39396561383436623532383438333437306133646562616265373566356163646335646437653361 +35323763666533643338343432663437643461313236316261313631626261373762396432313439 +31383935383232303566366565643063623339306562393434363737643763326639346433383038 +35363832616634306130363437396331616566343662626166613031323235643764326136653738 +32396564366266303335646263663261383033623165396630383864633530366634613961396533 +66653634646664383232613030623332323835343035643963653330636530646539633939653234 +34336261383464646131383061653364396637336564356432386436396631656563346562636330 +62306636336533653862613730613039323234343630613233316634373865616233333133383133 +64643836316234653463323865356433666532663339316630613664336135303838613731323665 +61396563343039666161336163326531346337303164346533393863393062656330636565343237 +61323365346238363332323362623130306161366664306432616631326162633835633666623333 +65396437666339306230653464373961383530386132303933646333366631396336313561656134 +62633631303332343838393666636561353839613137323933346262633466353133376435336332 +39643934333262346232626538333639323637656130636230333034626138343963373866313861 +30613735646334306137643036653964386433646636623434373461343066623431653061393638 +31626430366533333836383431666538336437643961386365383731353935653539333734343032 +30623737633565393862613338323865306430393766653836373361653035326431363933393665 +65393766323735633730633030363733336535343136363839396631643332303033666638383734 +38646631383236353737393731613537333235633137386438633765333831346566343738353736 +66646263343765643032383564326133373330353539313633383432656164383839616661666531 +37346330313933616132313137643262653365623964326437306563363366306665643337393639 +64303035306363643233373732396166346432363663363431363634626239343637306335323234 +32343861303563393932346531383062366232306437613831393265396432656331626164353664 +64356562656562383730613433646135616266393165366138636665623134636538616265363264 +62633838333465383966613431393534636530613964616332373536616265626437326636343865 +36323231613336333235393236373235356338653862323433313232663735353634396264633432 +61356263393539656635613664316236316134636166653733653138323339376166643861313032 +33643966346565306432363263353635323561383230616537626562386465303736396664333933 +66396634346436636238636663666531336332323733623435653734396633643462383233313631 +32643664633439626138363466643834616364396634333735633364353031386231383533326566 +62663164633638333864616661616532343366656138663664313938633162623232353339366435 +61353131363265353862326364613731346236353665333639663632383733373033356436653664 +62616561636130666539666464366431383932656463376666376165333933323836356331663730 +63303530313537323437366665613363336361313734633735326631643631323534613532396335 +39346531306230303237353863633536303530303432623131386138653263353834363639663230 +65643930356261323436636139623262633261383538653266336662663435653037393463316232 +31363331633039626634343335373830373664386132316364643030313838353537366536306437 +63613434333030326636353265636566306234626638633936663733306237663061393962663036 +34616333303666623461396630656663626133363938623666396230323666306461353130643030 +64623566353338363064613863643732313634653564636638626335336366383462656336613034 +32356666656132313830663866396263356662343336323864356364313934623563666535343533 +32356263663063663632613161613964626664383739326230386466323631323365656439396461 +32643936613266303566306439616131303933346566353237303035383535616465386166306166 +64613437653161323832343239653530353332636339316433373634303038343139343933386234 +62666364633961653261373839323439646532623936363631323263326335643536363133613337 +38356361353061663537326263346462313265666565373333626465633563346534636635646233 +64326231376432306231306666396139323736326239313364323330626262346636333532633661 +65366666636565353362366164643634323731316230303937616661333135346334396262666565 +62366136623936643937306538333463343963343232643932306338663762333834393863333134 +65386434313830313438323336613638326638636662643639343062353131326262653137656561 +36366338306466643864343334333931333431626432343862323766643035353337373466306438 +34393431653163653539313833366163333035636439376333656434343838346662313632396332 +63323438386131643461656336383835326635396637336431373035666666393362653039356462 +64303933393363346162613038396632646466643031356665303635613736323235333964626361 +35613563393138633761376664626430666162363536313266343165343630393064356530353761 +31356130643534303436656466386431626262323830333063646631356362373361383430663130 +62633032613039643437396361663535396361303439323539323535613630623864653761303433 +34346262396162313930356336323334616237623763636462366132633833323339643036326363 +65663962336664663035356431623833333734366362303436633930393234643031623333376438 +39326564363761653264346336346564363836646164396436613564346536613566663536326465 +30353635373939373261613331333337636464643865326432613539366335346161306439343930 +35336233353830623665383365663737373530653233313966323235626561666336653236666665 +32663231333639356265663632363435373335643564646536636163386431326637303839623466 +63313935646533303135653834616266663332386661326435363532393032633136633435633530 +36393064383234636135353365313838303864356562626465663039306238623432383965323434 +66306537626539656333333836363666366235303964613132613338626465616165663461633233 +34303463303039313062623063633737656338316564313538383530366537653965333837393466 +34636537623931623832383039613237306139633837326564623661303965393066316633303634 +34626263383936343165326337343332343134303637356233656661383237373735623862326139 +64316465633437353939303465376163393431633037336131353136613131356565656139626633 +31366164323131373463393235396262653630613065376338663734353432363631303634623932 +39646237353165666434396163613632303832396232336665613934376335656234356633373230 +31343965626265333131363036373139386537643430646466383734623566323933333030373330 +30383434313363346135313237356464386336633936343864356135383139366162376539613134 +37653861613638393261343466353537353435303033663632643330346134363461643264346332 +66383866313239636134366331356230326462313239613835303064396535613066396635626266 +63363439316633646537366434323736316131373736336361623037383061653630643539626431 +61363735613035353539653637326639333531623563323732663832626463613939353638633437 +32373935383639393837656139303632366233633136366331643733653935306663396265323261 +32646466353964626566613230303163303262633263363066343461663133333666353237396263 +33386436663063376432323534386235306464633933373532343739323330363335313739643438 +63313133633062653134663638313335376337356562303732346664613838646434343661393439 +62633230363365396662313732303766333163646236643265303332393736303130383332323839 +64316436633537316261333433326564643264656436666566326565373665646234323263373664 +62323862343466356238396634636564613535326237326665666165613634366438653238376365 +37396132353737633466336639306134653235663836373633666238383734303434353236313634 +30306632633432396266336666353339626636616362626332326365333637656335323931356164 +66656538333536656139393838333237343235316565323938643862386530643236626433386533 +37303839633439663431623063636230343566353033313234636164343066373763336462643933 +38663231386237303230663937393463653563633731653862386435663833306634633737623438 +63633637353735333166313336316538373335363931346233343232646134626561636638383234 +34353034623135313339616331623635303238306564303065303761383438316132326231353733 +36663839633665373131313661626233383234623936353332353365316531643739346431376130 +62336130396633666234306463316531646537613964356463333165643166323937643938306633 +64323632363736306462616231333939363038643338643339363362333663363130653734306635 +61373031356238376139306136306135653934393765353939303732376433323839353638326263 +32623932333862356563373737663234613631336462646337363432633231383731353936353466 +61303732303162376465353533663861313632343339663931613135363336343161376136623162 +33653663346230636561653431323263343131363738626464626632333062306466383865656335 +35356438616235356266343431333732323665303836613236626432316362303464646539353531 +37373262613433636239623661366334316430666433346530303061646565376365663463343736 +35626232373263393433303134353162633937333636373633343263313362656633396433613334 +64333639613833616330663938643565353130383761623831313433393264663536656561303131 +34306236316665326166346430383630633638636630623732343131336461303561396430656634 +36613631393236393165303132356338356237376366613564323133333264653362356533383666 +33633734636563643765386332386539376635643164303364643933376130313663396462616532 +30313831313437613030376134633538336637646130653430353139356630383564613434383738 +62306136303539323834353663353032633138623063333139306335316231356235376538363766 +37313735623431386232386462303134626433343531396166656630306463616463613734656466 +30396432663766383765623631363464306632333361643635393264363236346262356135333935 +62666366363634336466646434613065363865363438646664396236613562303334376434353737 +34316638353532633432306163346661633537363462613532653635636439613031613039356563 +63303839343933636265333432306138376261373838383939303331323163623561636166386234 +31636561366664633863613539316362323835646232333134363035393035353438623435363030 +33663730333964316564653135656232303265313237386564666366313138343330323137393030 +64383432373733303136353833663561373563636337653966303633353363313730396266336263 +61356237643064303833333666666438613830653536663866656661636335663864663730613337 +37366630626437343365323630303635633332393865343035323733616138613231653962363035 +66373230666331303832326530613339636437306162313963313362383764663538343165653537 +62666236336131636430633238663935323164373633323866396263313462656339353438323834 +36346235643635313232383961356332636439616566343934353664313639333861613062656332 +34366265363762383163366530623664353738386134653139353734643835396362306662396165 +32316231323033303966366631306131393364353439333263303261636361363464373163626265 +64323438383663613565326239656530333436303231623764633736313137383636383735633439 +64373661313833623966333161643638336461316135303432643961366361666533353465643366 +61316234363232613639343639613033356363393661653330386431383865316166613962393861 +34363435646465313231316639616536616434353836646637326138363135356533323535386534 +31623238333139376466313963666236323333393863366434616335363932393461613762393866 +39396261356130666433303363336330386165663535393566646338626136653633366563623566 +32353038643761343234343436633834663061346362303364383237373533626662326666353162 +64366331653236643666386563663561343434626561666133643531383535393033356566396662 +66346235623331623835343039636233636663626433346231333564623366316361613163356632 +32356338633065373362303637353338653564313663633163623063386363626465386535396662 +63646335323934643064353638356532393964313434626264633930353362353931373432366236 +32633531326431336465636432353839393734636337663239356131643833323062326264396361 +63343539643130303336643934326662373339643362636139366463663064333335616465653535 +34393430326631343936323235383939653439353438316632333233666534313731303935646333 +32386430373765666330623963303838613364376137313163626638313861363435356530336237 +62616237316131656532626433303539373966666361333038306661393735303431653032376464 +61643236653561316138303637386237666462623934343461353338303563666165363832306531 +37363565663238623961666630323430326331613132353335656435326132636264353563326464 +37306262656539663437393133353530336338353261323764373138646566636465373962343337 +66623139323835393730313133346364653661393731383366653161643265303763343231396431 +62376130306330303436303739303961343735343632343038623232663634353937393930303765 +63323839343935313837376665626231313866386139326462666364613265616532373963646433 +62316537333330346433323936363934363263383966353463333633636230653865656566316163 +65663135383935383632356363303133613737666334643565333332393332376639616162363732 +33623831333235356638303434656564346433626239383834363961323334386534633032333239 +62393838373835333564306433393531616439376231336362383338396239623764613838373234 +37323165323337396533383738343665383065666632303836363039616134333665343832613535 +62326238653461663263363933616164623364383465626166346365626331326163666162363432 +33633931646637393230616564363134663435333730303930306133303163323237386263613036 +31663137653533646163613865663131653039353561613165303061386632633465353533663463 +63316462363832303065316362313636646632636565633231663839653430653265366166663838 +36616466666664323932333930353337373963376334626436393630646530333663653731333561 +33346466323835376539633361376638333639373164666134353062616238643262646566363835 +37333139313961613433656530313731616535666531623233383531326564313866386162656539 +66623838613130386330386530316136336265306131643765633864333035393437353865373136 +37323431323834323465643934343536303034306331393662663835323664643937336637623933 +65303136323763616335363563353437323765383864633866356166303562373339353061333161 +65656437343763366634643938333936623138376164373730643536633333383739306639663163 +37306566313234313831366166376337376130366438346136353932633537616163313766633035 +65643762653635343431643130323136326262623561353735323933366233303862363463393238 +63313734306161613235366562643139636535313730393962303834633435313765313632363235 +36353637383230643566633834333631656364343933653132336432626335613334303530336664 +62636261613930306261356165656264346561303838613561393662346430366436376661323165 +39393439333330613136383534313066373963666531643361316164336264376331643639636335 +37623764363537636639376330633965386366343331623065623039663932616232356531393365 +62643230333438323565363432333031323164373330613761613338346130366336393639316139 +31363936303863393437643164656164396433633034396139656431386538633233633830303164 +66666464363739356437653531623436326661356438363431643239356436353337386634613066 +35383931353731626639646532333932653739326236376539383134366361663830643537383263 +65313663313830313736396332396463643231333064643062323830386532363561623664313765 +32623265353961396535346263366361653665346266613932626538333438636661636364623033 +31333064353266353465643062326262303631376665323730613832653532626636333633653763 +35613961663863396162636534316633633836333131393733373064633136303335663562663137 +64366430323937313765366662623364376666613735383764353231323730386364386431666139 +61336662346235306539383731313130656462373632663464333061306139663463376330656635 +65643832303064623938343736303162616333346166633137343837633639636531336339333261 +31616235383065663835316162643565623939666562353061393832356438316566663564326637 +32646337336432346136316430376232636363313337323334396339646236396532656630653662 +63623732323435373335646264386463643031663534333838303664626465336533373036356662 +37316533316138393533636533393764653433383230316137643563383438346630396235303863 +31326666346266666265333664396538626438656137373466353135346232626537613636333166 +37333962623839323936333533646361623037363363653662623666653663346539356164316430 +63633038326438633365323232643564333866393239353831613430633837626237353765346164 +32333531613562313131663761623039663732646565616165643465353461653236633564646439 +61336430303132343738613832333761656539383763613336326636353861623939363535623961 +30393435623932376664316166613139653738313561316264313630313332396537633761326463 +63313836373937633864346664316332663938323537636363306235346238373833366462303238 +38633465313632666263386662663261393162346438313264383636356231643735346661653662 +63666233653865326436346535623933323262333065316333643331646436653039326234663230 +35393238363733623633303261326164626164376366313539303335356337303534353862303330 +36333830306635316430323961383961656336353137653736363133616165336266356261393564 +64646131376631383436616661346131636565643065306561613038363936663961303161333839 +31313830326434633734393735613264633164653864376165323634623562663132666166633239 +63326534303061393465356562393363386266386135653832373162326530306636373936346438 +32623232613135373136353064306562366432663663666336653237373436613436623065623136 +37643834373939643366323661656565643837303234663366636139306232313162386538326338 +38306163656266646266353633646361333532616531363830623866303732323532303130633233 +35653636333766623364656662336165316336356464353164653736363334616139626631333830 +37346363363764313636366433333366333231666663393763376338653835346236393234633732 +36356531633665366232343430343930313261653630646137343634326635396566386462626664 +64663732316165386533306662336266643534313365613935646362356632653062623834353636 +31343662343464373233636462323432393230643666626262303538623765383239356361303736 +31356130663431613834613932653030613862643966343964646561313435613061346437663661 +30353136646661393166643534303264366162653664363538643162323264326436303635306137 +30616665383863666634663335396531653032363337326364366636646564313538616435343566 +65356466303933633363393564353430373132643534376238643036626135613530336134383631 +61326539333862396232663536323739363731616332653131633530333937353032303963353734 +30626138656234633962323532616332323335653561326464393161646662613330643666346135 +37363834383964653165666231333066373232653233343133346163323765663837613661383466 +61303263333233396566303364613461643264316634636666643735646261316665386161363061 +38383431376637313762303435616433366661653239323463666161363633643937326230623231 +64353366323761333139343038373230616434633934326332333436386436616464613964646137 +31316332646439376536663064613964373334346534373565643838623031653437626234306661 +61353335336335656133306433393030313637323530646262386536383439613837646337626539 +38336664633966363634656463373066643730656365333039393164306235656234366366383732 +34343565653664653336303663393237353438663335646232383635333733656262313033343130 +32643635653837663462343638366537333666316234376262313761313739643831383834353530 +61663538323532633235383838326432616563376539313233656435663334616432663564306239 +30343432643934666231303865396230303835306265643863306661383637306464373963346330 +35623463613635306636326638303562336461373161386630366339333236313661666435373863 +37353039306166343836306163373962353835313839613937346531653339376564373864643264 +63303861393166663134393337636332623339626638613032663535373130366332346337363039 +61663239626335396334663063613661363432353062333365353165666665343566653131306262 +61396264386562386132323164333163356634653262306663346432353261353239366231316636 +33393563333936326332393534393266346437396630343462376364306463666561336465353863 +63623639623361383031366262383439636139323063346666313564363464653461336266383163 +62343766396665376631336365366266383264626638343163616337373637653761366538383038 +33613266393231653332343066373130306666346638613338653636326539346231313031386361 +65336536376137613661616232333132393033346233333539336539343131333062373163653266 +64386463306662646364356434393535393439623433343264316234323436323164393066666566 +30376130383333616131343232303963643534326331313432363265376366636339353266313735 +36313539663964653265363961363534363361393435346161356330653164363133366133303464 +32316662626166353563623538643235326163366639613366393762303162653932613661326533 +30653538313562366165303833653362323839353637643761386661323761613563313561636164 +39623334356165333965656564376230333531393535396433303662643435613833613130396236 +62643061346634623032313934336466336161633436616566353139306362363765346165636632 +63366132666335363630333037323136366235383332343461373362373132356139653465393336 +36306338316137313861643965363364333036343761636564616234313262373964366235613136 +32313131643035366134383162363333303439326330363138616265616662333665346533323938 +31313934306336316663626635616633666538316563353864346365353432343632616664613733 +63353839343763643462386536383566323763353833636166653863613335316465336161663535 +39343434613234343166613137396331343865383565326532616432373333313162363337326437 +63323431613433343439623865663862353434323861376334366363353231326265626230383361 +36323438326132626131306137333531363030346234316339646366626364396439633439656234 +32346231336231656632386163663430613466396164303538383438306330613735633563616137 +31336639373065393632303230373061346137663763353561303164653064313365373538643665 +30313631376561306464373365653463356161666364363833306436373833303037633066303530 +64353233396161353261616530653862613264666439376631633336333131326162653765623666 +33386535323336333133373836613830653035663435393864633034343239333532613762643737 +36386339333464666161343733623131303563353263333132333465653566373266396632626332 +38613164363735366131613931346232393566616565366261343830323761653230356165353365 +66663461643932623736356538666234326532393939393761353239313839326639396566306266 +65623536633966363439346336373630646434613833623661396236623865323632383266646137 +65353230346266336364616437663661653830376332353638643136366266386237326332306664 +63386135386131326132303030336262333332623234613861393539313739613564323638353438 +62353538653866623835333330636566656234633563396331343035356133303237633364623939 +66386636303931313566663030643537653362313964646138633664383763323431396130366135 +31646631316134306638623236393436353837656666343535383337663263346431366261303533 +33633438303963623138613966613161393735636232333435346261346534663338383565343034 +63366433653939336632613263633562616235323130303235653663353734303037663537666132 +35383133376138396435656339323764616362663663383134623462663837313262636435633162 +64626438373761366339613530373234313137653531633139633833313138386265376532623763 +33636531623663326563623264643632356331656265336663393931343230353230643936376633 +34306437363937366361343363386662666563666132633631663062313063656332373861656265 +62393530646235656139323732616537616262316337656336363933376137333134633135646335 +32313461653535626534303437316532636233346664633336656663633432653264353632633061 +38653039353736613065653962613966343630373431663664303032616337613733383438393263 +38613161636536646537343837323466386538333639663338363636363533653530653666323234 +32646638613735346630653432393632333638663439333033653236313665323864373366343462 +36393637626665383736313730633266393830623135353566633335313637663834333661356563 +34653638373533316462623739323964306131653430663835393064323536363033613236613739 +63623932313366366537656234386138333063656136363031613634626436666662376132643164 +61656531383063373031396365366134656261613931376363333835643361353164663636333038 +32333261653737373436623561626136383539623361373635633539613832663662306266343835 +66313939636339306361376135613565656562626366666661663434396530613438303331353431 +35353763353934323134623163333231383661383264653737376636346665356336366165613562 +30363666636366383434353562333231343064346330643138326465303930653039636137643263 +35363939363265383339646261333665316363343561356165393266363065336237336162646438 +63363461306232656562623961383362643165373237646234353566626636396636626133383438 +30626532646538383830363939303134656630313561643164623465613966316134613632393733 +37356534646334346335633862373764336437633636323061666130633330343934656433316665 +65393738613831616638646361313338326236393662366161386334343838393030333164633263 +37653330633037636530323265663565366332643961376537366139356362613664636362633064 +63376138633864366233383131616434303339336265363235303633383366346562353636303735 +34356434653561316639316630316230653364636463373432643438616163613135333765363030 +38303439336435393965653864376332393366363861646330663031663162303132653063613361 +65306161303439393465613733333234333465663766323935316137653837363138326230363933 +38323265356265646636626361336536366161613732306331363334656636613365323337636533 +62353336313066646232656565636334373663666633333136383931633633646532656536663766 +35316137343831383439336163643030616166613762386266373063313134313133393730333964 +33343564656264653866316666303230326239326562333235323664373932613164363238633065 +65656131336538356161383833643262336635613665373135363265323466333663613831663230 +66363330653535306135343961643765393930386362323631343862653563646232666133616531 +36396462393137393932353936356161396330643465363438623739356565623037336232353864 +31383637343363306338633263373535393531333066633830656564636664646435313662323462 +63626266653332616330633035383434363336656631346466386536363634633236353366663734 +37353138663833653734643561666636616261363733613064363862653365323734306431663339 +38663462346235333363386235646433646566663733663437326539376232356136333864623462 +32363534306663613262323836646363666335666461643833363833373238633138363333343536 +62376234316535663738313830633436626632356265643165336465376335383863623866396336 +37363638343231366131386665376664616330653762366165656431376339303766633031303338 +65616463643331333531363165353764346538336338393738353162343734333236663130653032 +38313939663763303836373631363939646439313434623335303465303362366163373263666435 +63303334373037663664346235653138326566396166663162616530393562346531306364653131 +31663966363764303730346134653331623333643435663663383431316566623038383932376636 +66393134623137333961346564306232353562616361613561373736346435396161326639383233 +61336266633966353536616162343165386338363165633536353631353263353930393738336633 +37316161376631623035386365303532613033633336616664613035623237626134623235333638 +62373832646231383263333132336166343564626430383239336533386639353666363732313462 +62313938626133383233343137646337623663393335643934303631376639306265323362373463 +38346661663062363733633464616664643363366138383337306561343836313265373531323131 +62666363643961623533386636313731393663303937336661616266623163313036373731646265 +65633538353565666236343432393735633662623462333862663138303366633064663634643434 +38323236313637386533326231353738346464653435396566353163373363366439353631383630 +37326234663265646563323665356465656264653134666164356133343864346163383361303930 +61356164643339303564333262616239363835353965613931396533313534356636356130633765 +63653865663863373335393831663232396433613631313866393261346638646132396634626633 +64623733643264383364363132646637386461343930303861323038396134616530636433653535 +33383537623562306638643835303338353162363634376537383634316331363731356638666535 +36666534306634366631306536306239616364343637356130633637656262316532306435333665 +62376230386533643334636364373861396362373133643561343830353332663165333231313230 +64616432343934323865393232363261663737653164623962643138616534326633303261653339 +62396632346638353961653036313532613933323635613662303935376435656666663339343164 +66626533396561396137383238383061353064366339666537306539636165363436666432303361 +36376635316633626365306331363438336634333335656566313363393632633661393732636638 +63663336323461633864313832333433363439313361303162306361383836323463613361373637 +32643333363835326234343861303561656264633763393838656566616238633963653264313163 +36333364383061383637386165653365663136336236363066633935663863636431613362643464 +61613362383734323132656339626631333031643039346638616261386434333063663364633061 +33346436373761373836323934363231383339613062396337633364376536613832643764373836 +34393864356263396264626364373164333531633338656133633961316165613537663334386332 +34363833353265373463613039353939323038613732643639643864343936353062346666663664 +64336633663133643365393964333236346166643234656230333632656263386166653433646633 +64353032656436333162386536336635376431666133633830643132333531353763323161633739 +62333530633335643963316134323066316438666464393364343433326432383738326134643734 +66616537613336396139343462663638656339396332613232376637333733396139653466356666 +39383036386531353266373337323238313366303630353966636137333539306138376161663764 +31386264303662646435366132316662313534633138393965623634363934333839343266343263 +34336163383763396238616565633339313638323266613535616632313736333734323232373733 +32346163336164353138383865613837636666626432643134626435613035666466383761343731 +66323933633033373134623235316164656466623961323437643463336334636632373939303232 +62346464363464383561316231383464653934633039623634303130373563313637666636356339 +63303363663333393861653534333164356530373336613137316239343363323032333362326336 +61653630313065323931353763373436363861333637313130636237356333396230333662623431 +64653663366466366134656164636132636363653032366339346233333936373734373864306161 +63626535316431313064326331373637613866353437363435323663363233643963313034613333 +61366662316664306664333365373962623234393764316139316531343066666430316130613434 +36363833373236653662636163313763353861643731363330643561383938353834393730353663 +62666161376263326661383338393639343531383732386165373338353636393030396532653835 +35353638636130616132353436323633366339393433333765653237383330383631356134313765 +35396265666635653934653962656334383537616664313532626137313532653730386338316636 +38373437616135363961613237333062653339303637663662376261343866643165316465646131 +66643237323365613838623764343937333065303533333636323463336436326535396536306165 +37643362653435363331323862336230363830363065656131646234633564366531616461386461 +63333732643261666432326135613034366432326139356436323438363031633938643437336139 +61343037626661663034343035336230333537353863653165313466373166643138346466636237 +32383063633565366431623732623130343662343665326166336431616636343265396361356435 +39383938636538643338393562326230353631383262373730613333316233356566383739613063 +63363236303761383731393664633935373534616464656535633634316437623662333632343830 +66376464646535376633373164376530393337333663626136376233623036393961303263633530 +36626434333835326330373633633930613339393630316137306132643430323933633364353363 +66333061633865616436373233663835623832306630323062663435373831346539363339373837 +32356138313734313636313233343066353638383439356264633534636335636430653163633332 +38373935656339333236623733643964623163393839353666353535353262636335356238303361 +35636638306337613465653332383162383266643562663762393235356430356163333662363537 +38313235363536333836646331633663333462363333653563373761663532393437333434353862 +61653338393335366661623162383939363530616337303935633636393561623332373962383966 +35306662633436396532643535613966303830313661653830613165636235616463336166333330 +32656438326136613166663263353164663363336264633934633865656461313138333263613265 +30633762663633643963646238666235346464323965353038373662366438623339613038643835 +39623239386439383266336330343864306461363631346537366465663762343832343731356464 +36626635383331353731373435326166633337643732313136636332353962393636653762393739 +36333733366439636666616130646431316364383339383364656137636338333565373436366464 +39313539366230616563333936353331383363343233373731313638633464306661363762343337 +64333463666165353235666439396337376636393535373837623433373361313938636336383130 +32626337383264353066366230356665326432326136613132626538363062343831343239356566 +63383134363937366161323166623539316436393534316239653965353339343334363262383866 +35323564363862666638386430643938613531353065636134666233646637643535383366366536 +38646531303239663165323931383064636230343962383765656466626365333665306438393132 +61646363636431656635373334626662356536346165633839363435656636333237663663346436 +39313964306135306465303663313066363464643962623163643263393438383061363738653837 +30623764323636623666666433373764326365353762646265303531313231623631666535313533 +65663033373062613437376634633961326564376138633638303461343933613131393633363138 +30333635633866316663393938393132353966303463373239346463323665366534393164376231 +34323064646130616234663961376132333862306638666166646364663562646566633066363631 +37333661663566303536393730393238363161303831663530613636363765393832356237393765 +65363230353962386135376339333238643862376131663539396132663636313331353638306330 +35323465373034333566316232636231346233626465663734353362336562383935366637656561 +36363131383561353635653764396339356263306430613166616438613939633861306231633464 +34353637386230373365326565323739303734613135616637643934303762643138313864336238 +30646362623763396362663534383936383337306266383565323832623164346533313061313732 +62333539306333613030653634303466356265383535653465613332303032633537363464646139 +65656431663265633336353338353064626266326362396161393864363462343837383736653463 +63656235326330633733626534313364313830323464323334313538383037656235656139633634 +34356233383966373435366233643566376331623563363234656162336134623937353162633631 +36646664373362366334383364633361383336313036623430353237333739643862326263356130 +37643738613661623135346234366633633731633436653661356161616162656636376234616434 +66623730346366366163393033613830323736386566376138383633356165663362363465326465 +34616562343166363666313437313735343362393135623039363932356633646365663134383465 +38306237616238613538376165393162323030316530616631313337393964353034323331663230 +61633235616231333265346434646465633531373931643065373238353139386166323365393439 +34373734373839633737633833643339323035646331346262363765626132636335383031623034 +39376164343665613537376566653531316263313230666632303234653363633834346566656264 +30343162656233653134356236353865643966373335326439636535616165663632353839353139 +35613037353864396635363633386131373235333435383565316665616135326536353134373863 +34376461616238343962313537326634363065633030663032396139633430336366653431653161 +65393165323835663163626531353530386131376563623535653932313437373730653264313363 +37343764303231323166656632613436336430643232363662393266383035306332303430626363 +30623439353466386266306562616464303531333930336636393461343934393934313431343335 +65663931613733623830313333343130343262393033383838663537656232653432363939303366 +62646161653466356231336538626565383864646138316139633162396232616630343263353063 +30613136306434663539366363613535386633383831376133323537396461346334376531653463 +61616666643263323866326332656461366562633362353633393364373330613734333462336139 +30376234363963636137643564323865363665356530643361396233636633316632663665356134 +37313065386438383463616533333562323161356139663663326233326338613137346561626664 +39336632393938373935326461666235336236343337303664383833626133346166353734396435 +34633238363463633737383230653932306237393561313831383932626137313161613432636638 +65393565383533373539353432366332346538643739343634623230613463356331393762623631 +65333737313736633939356131653463643930666563376562383936396530363934343835643164 +61643763653930363464393464336537643065643764616334373438643938323061356232303931 +61396266386136633737623637306161656366663931386138346336623133393661643161386536 +33373861393065366531303332626438323336343332343233373764303034653234393430323137 +65363338393834376233626166666538316634376164336563626662633465663562663062383637 +37656134636331646538386535306261323464366363663739666466643433386339386265353139 +30396435343762656133373363303238633938333234306262643833396665396364666565346264 +34653465666138643262383662626131666235656133653035613033653632393632616433626137 +38613037643137376562333633383536646232326230323238643832633935376163646436373834 +34653231653966613030646565613666613935353339663861646166386361366666326566663332 +61613761396538323261376361623963623331623534623836366231396430653966356633386264 +63366537623539653962383232353666353733376537353566353438633664353530373732663163 +33366335323639393363376363663534376362316631306131366265353338316231363538613964 +62313838393139616239333236343363613032643431663962653131366466643436653866336534 +37393666373334393862323362306132626361393030633830393637373664623531663762313437 +39306231363265666337333461333939353831373832386464653739353038303937626231383730 +38343438343031343734353465383438353462386634356266383935663732646133383030646338 +63356437373463356265383363323832333863306262306133383638343339396435393432643935 +32383533333766376537313931366165393638373965643164336661303732646532396661313063 +33383332303764323235353732346363646366633862386662326539333435393231636133333464 +35646236386331323635373862366632383863396333363535343331643835303135643636386564 +32333731323530376130363365346461363265373865333933363561306163363365646234323135 +30373131366532336166313533623232613436373737613231373864653966636139353939353361 +30383265393330313264646136363239636339356432623864666536383237373934353464363063 +63366332393131393932373363616531653332376561313736356662326530616335376334383333 +35356238616330346130356264633135663838633236333737633830613864396532636362303139 +32343763383361643231343766323764633666363735653335636439356230663364356332393662 +37623630646261386130353037666366393938346262343132366364633361383738303630663265 +31383861653761363935616539313437646432393163626134626332363231623763653838666235 +64613061373130626330366662343161326165663834366261323632366564343066393537616161 +37656237613330396361623961636535613561376337396130653530613666646431616334623461 +64336131346363323730663366353931626537653239376161633565356362356437336338376134 +33613161303536376631393539353537643732383539623438393662663362303461653030353630 +63353863363439316635626139363165366533313663313263333637336566323732373063316530 +31643131303534613264366338363938383732306532623066366266383963636335633937303666 +34646534623838396264343361326163353564383532323532653665316264343539623163333930 +31393636663533336262623461343839386439333866373961306436653762353664343261616561 +32313964636165643631623961333837656535633036626537333038623263333966646330353939 +65303531653263386432656332313230383836363237376437623361666237373834663465326535 +33323833356535356432396439396638623138336465346461336231333935656431343538323335 +66303862353661373566306361303266376161323131613631636432633631303164613431666235 +65613834333932623531333830653238363763363461623231376562613864306338303837373233 +30653961326232386465353537346465323862613030663634666136633932313830393135313062 +39303663666235663331666163326565333866303230633765326632646131613264356435613534 +35326565396662383233356563613239663135343039636162353837306633613635653538376661 +34643064623464376439376335303630326638636365623032363535396364636434323163653537 +62333034333164393330643564636263303031656135633931623733306339363566643430643336 +63653536336162343261326439616666383734663366323335333438346539626331353935663836 +39643161396136393263393364616363653562306534393064633936363538353031386366666566 +63356438363562633636623830333539333936386630386636383565663636303565626636393866 +32386638306535353837393930303864666230343130373135316466383532343530633039323837 +35316162376339373632626466323364373532386365336137326432653137303430613862356663 +39333439383462313162393437636136626432353234343939626366643734376562636430633936 +37643737396236326464666166313532383938346165663539373336306137366339323432353032 +34303637363161343730346465646638636461376435353661386562356333616332626564383238 +32303531306463396233653164306538313835333232663032613230353435323931303037663832 +64666333643235623835343032366665366166616135396432636464633437363262613962373131 +66373938653233396633376135646136623137613931383030336164343639616636333664373064 +34653239373737666366306132393265656636383664323636343436306261656337363636333963 +62626235316564386234393064373633336638363537323865353737356162353265656436633030 +37623331616238373830313837346239363362646635623761396438306365623064313139663762 +38633539343539623930393839396662363163383533613830333039363030316238363931353533 +35633963383032636361396562313761383432333866636264646236653464383930313432393261 +62363064386363396139326139623633363034313032613331663630326161383535646132326164 +37393039633837633138666230376666326430356531373934653466646564626535656436663461 +36656530663637333065323437663863393837343764303064336536386364313038613639623730 +62366238343633336662306433313039663430633638303934616364653666643064616132303163 +33323032386533343861303830613461633231363538376265363939656239633033333435363339 +37636532373936346434353737373935636331316333646366333236653364383139343061643238 +30646339353839633762306436306636666132643464383965383430643031356264653264383630 +32356364373539353537613866633462306361383334366330626338663738356635303734343139 +61306562316263316337623730376331306363353166333262653835626537373431633436373865 +66393235363131663734393535333335383736326639656338326436613238356266376565363931 +34323637353938316134363534326663363061346138376163643465626130316135623035383263 +38626462653730653333363464663865333262643363336666346131323665643262396638636565 +64303664356265656631323936383239376264363466376132616236653536396537333965326662 +66353138613137333330316566303135373361663931666639623332313733373230343034616634 +34336336626564363063393032636262666664353438333863303334633831346632353036383337 +34626638353561386537643063643230396262386163636537306364613065363165303130663362 +35353037373035666236336639336666656361353663646266356362623634383136633663666339 +35306433363932653832373865646161383935323639623936303766333833353734313437356335 +38336435366363336165373763343061646234343735663832363933376236633433386364306462 +34306534393661613635643339383065643366323730393230656162656130303737643330303463 +34646136313432663962633830633230313964623336623761383032343330356464636365653431 +61363434316163643232316665373433386630616530383366363561323834323665316534366237 +30346565316437366236396163306665323739613665623532313530393233643965303237666133 +36386331386462346332366461303136376336346563313038623363633335303135373764616566 +64666431303963396630363832373934616466396366626563616432663666626364663438353563 +39383132336635626630386331666365616331383639363933653939366239646164636336303436 +62616466303563653636633439386662353937653364633632613931303332656537353638646435 +32393330393230303165313866616464323133373364323837623230313533323838666630343362 +38376363363065353034636639646566383531636534353436383630383363316238386539393535 +32353534313739373630656337363461306561353564373165346265383436303937356637366336 +35656163613664616161623039373932343562303963656463613031366666663039386665653537 +62326564646230313861636363343637663038643061363962356563323565633061376266333661 +35323138663838353639623762356235623062653865333066643164346234353863666637336234 +62396239323539653462353939316235366530393861643135353736666563343130623163306438 +31626639616131616231343130356464623861316336353730343935643238353935616439393839 +36323164636561366530356235383834366537643637356437643436383165616438373739613834 +35383362326461326635623862663262613734666532356531393832326265313530373533353836 +62306433616162633432333762653836316631636265613836633039356537313235363935383636 +32363638333931376664353430383839376535356161633064363162376639646331623536343966 +66383262653133616630623239303939643335313365613332303833323434386231313565353932 +65656230313266616166613332636631666562346231386533633139356432636363393838633666 +39636339313332326331356432313336336362336266373630353965346139663832306363326537 +63323830353631346564646239633262363234346435333765313966646331316533353161653765 +64626634643962623737383339323063393064383837323839326138373636616331363439383562 +32646632623464303637646366346231363664646138326333303164356261386339366133386530 +64313265323736396466666531346138313931633065356463396463323431333936393536656566 +37656334656237613264373030646163666631646438326339303063616433353534613864646434 +32343164393232666138646166653065353435393939643463656235303830353337336435643537 +34613461663839376231313661366336356165396239383035313933333462353662383637633362 +63326161373537633265626339373134333963613239326339333137363432643439313733626230 +31326137653734336336356261396533383261363936386134643633633130353232313735353539 +62313962373930643362343533373366333766306662333331386130343763356666343563346361 +61343839666331393331643365643965623933396239323938663839383461336137376261656330 +61373130306465376661313462663962613434613735396263393532313461366637653031626564 +62396634326432613462613335663832303432613166633663643631646437643636653230643632 +39386264383131326537613166306234323930333934316561363134663432363132386536393136 +62653137353234393839373831626638353738656565633966643764376331613263353166353164 +38393839363939373536383039383738633534646361353730366538633634663337333131366139 +62373930336238653938383030646631646533333665313336373032613039613165653731316331 +35326434376334376136666264643666306461346332303039313264633965333931643034653837 +33383964323163633932386339356666333930343161393065623566386638663935353637653731 +65336139643962623331633338613165383934336439653030316364343863613762393430396630 +66303766623833623431386137626462626330393165366236613361353839373231363864383035 +34356132316433326130323462643931623936393231633733306465663732326432633831646636 +35396236333231373135383862653565303337636162623538383461366236653336313765316438 +37393961653137366366353763373561626162376365333635333934663230376537366231353066 +63303436373662313633623564623936623665336331303734303161653737663033343932346333 +33323534383563363764363561306432373535396430343564373138363335366237663834316530 +63363436396362663030393633633662313735653762306430653736626531633733653664303333 +66333632343064333166386532633631393366396131333033366239336436383764666633626130 +31616632643436313139373163623162373166373533616331383665613938386138396139303164 +38663433653938616530323162666535613134393934366566616138663363356639366137313664 +34346466616631366566376464626339336231306466623339363330643062616337646330666630 +61653764346338323533666533336634313331326437313865623336623939643839306462376234 +35393965336432366138343465663032303831663936306436633365353339653930393034623138 +30623664643564393462366539663133356234373764376136613538656337613266656233353561 +62656463383661313634306430333335663434346561313936666232376265353739616232666331 +62323565306333626339316633613231356633383564363365346365643365313632353865363338 +38346437373739623430623535323062623261656431326534633235626632666431336137663538 +64313834326432336436356338643135323838366531363837373431393838383666336633653034 +61376637396262663631666237613465363534663633623233303839376561656635343161326436 +66653530626462373063356137313532383239393563396431353530363562386165356561386530 +39643335396337356135613163633838316238306135393836313161396538353537333537623730 +63626366646664366532303737333030323334633665376638323166333562356131313664656238 +65313831626538326465623663376461346439623265626131653865303361373531346663386663 +31333239356631613262323136333034643036303661373961656530646435623133623134396433 +34353065333165646166386364393836323363356461663964366638363435653330663537393763 +36383639636537613635333036333238393932643862633631623964616533343039323762643064 +62343339313133313335383038623863646634633631326633363662353263303963633535343966 +30333539633630626332346363646662613030376166376536396562333938623131623537386438 +63656561643963363838383237656235363738363866323631373934316263653338353039633764 +64633633313265656531356530633562383532303030623336363134636634303230666139386135 +33323536373939393136343764346466383661643730663534326539613831623730396234633135 +39323735313466623637613830323934653563373431396331393834383765653566643135646262 +33383834653236333962363961636138623361343738313035323862616135346439336466663531 +36346162383837346135386661363265616434616236396332623466626562306236623262613162 +34313133383430316631333230313963303133323835623238356632323734336433303538373936 +37653762643031623639306162613630666238393736623261376662663863386461363063666364 +31666364623966343163616562333863643134376365343166666332373164626239393764306239 +65373362363431333738363732363163656466663865353662383636393263303239623866356530 +32363062396261323432393533313638623061666265663531303462353439373566306634303837 +39656363346664653737343633346233343231383764643639303164643032306161623066313762 +32353561306339356361383762633461633263373633373365326661353331616466643464656162 +64646561343364366439303866353064376335393136313538623237356263336361663231396563 +66666463316230376463383861653330613462353766646439333734323933323766383662633162 +65373166353931333133303365386435363836666361626439663737653339383065383434386439 +39303533313634333233653038623961363231326236326562666464353037376434623665346336 +35333232396238386532626637363435633961643333323561346430636637643633626637633832 +32666637313461326130666664306662343836316438376162316237303436663137303937646365 +61613562643132366535346636313661363465633835666634663135383435333463373931653839 +30303836613836356439303163636565386536636562386135633133303663643466373763383931 +64656137633766636436626639623730396530653735666365626264626536336632633935663734 +31656462346433343962666130663130626264353531373438333539396532343461313536613065 +61333338386663323539363331356130376632653465386236326563373734363133653235323338 +32383663343333396338636330363664343666666333386533366361623430613835343764653563 +34343437313166323835633766643638653636643430333664626461646462383765353031653962 +62663566383533353461613930393263636335366331356531366139616230313032643437666332 +65633930303337313436663831306366383362326566636132336565623865366131626261636436 +63636664643437613735633663336333643535343933643731393164396666396363623164396134 +63343166386563643035393934616166643466386232373064366230343835626461393036353733 +33383632323139633061393937633261643437306161646539376237353832366264646437373762 +30663135643333653036363661663539653232376163323163656533396161373637373564353936 +66616637303562643165643932643436333438663338383339323564636165353030313662316532 +34656635613137636362303132656461626332666235373739386661396262623664343561393132 +66663666643137623530656261383563633964613735643137663032383335363635633565613539 +34346239303632336537656161323463666566313664633738356266323861616364323466633765 +35316235363838316633336661666131353464386462393364656531656662373731623232633430 +35343938383538313066316432333034383932653332356461656366393164663431646463373933 +66623861343564336233626238326139383437353730656334306461396161366463333562393136 +64663863623635633364303338623636656638393333363762663736613463666531323861663435 +64313264643638653033353066326430326662313239376530666535383934346437643761356233 +33623838653036383364616432373164336631366566353339353265646261633566396233616332 +64633263656339303035323636326665353539623033633964326430363739303332633236633561 +31356662343535316332303732373261353366643336353163343265313161643030396661333831 +34363536353033326332643937643264393439353863636664636230313465333862363432363661 +34366239636664633466643836393130323730376232363063386530366464663139613966303632 +66386338356332366465373932623161656435306231353435383534666564666434646663343131 +64623237323533373761353731626338343338316666626638383135323666343430393731343639 +65316536633832653164663862373465363662626261323131613835396333343634386661663462 +33313936343533623561366630323566643530373934376139303433616538636539626331313937 +61616334303764636436306635666562643637303532393934363164333234356436663731643365 +37393863366434323337303539623263393838326163313865663661666232316331336232383530 +63343631316338373337343565643635363433623939643834663538383039316165393461623539 +66366532363162356364363763613638376333663564656533396435373038303233623361336237 +38326633636435313636366163623633386632616630346164316637386130383731326539366162 +34323438613230613436333234306435633836356534646637363934663261633936303236336430 +32343630653262376361633437373330636235383439383636383562326138623032396463323138 +65656265336639313439396663656539313630346437313663336162633662393034626361616333 +39383961303364353066633139316339373230376161376362333234373930376365653134663439 +31646232323839353432333630303263373636653866623434383332313362376133643366333065 +64316564303534353234323163336633323436363637313264393437373435373336323737396463 +36343833326435643732356466363734643736323861363737613238346436303031653830616235 +34343338303731623163653733393166306633366161386465656134323561343930333466376264 +31366631633366643365656530643938373234326165616234666538666236383336663531613265 +37373031636631643932366434363966333237373764323637323066626234393161656362393134 +33663164643264366236623839353633383539396166616237373261653166326436656563323862 +663831383933363133373731646461653635 From e7b2f7edd9c08dff9226cfa3c2ba7d66b883d050 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 27 Nov 2025 17:02:12 +0100 Subject: [PATCH 47/73] Provide a skript to delete VM disks in /lmn/vm --- roles/lmn_vm/files/lmn-vm | 5 ++++ roles/lmn_vm/files/vm-delete | 45 ++++++++++++++++++++++++++++++++++++ roles/lmn_vm/tasks/main.yml | 1 + 3 files changed, 51 insertions(+) create mode 100755 roles/lmn_vm/files/vm-delete diff --git a/roles/lmn_vm/files/lmn-vm b/roles/lmn_vm/files/lmn-vm index 7d4011e..006b84c 100644 --- a/roles/lmn_vm/files/lmn-vm +++ b/roles/lmn_vm/files/lmn-vm @@ -3,6 +3,11 @@ %role-student ALL=(lmnsynci) NOPASSWD: /usr/local/bin/vm-sync %examusers ALL=(lmnsynci) NOPASSWD: /usr/local/bin/vm-sync +# vm-delete: Delete VM-Images +%role-teacher ALL=(lmnsynci) NOPASSWD: /usr/local/bin/vm-delete +%role-student ALL=(lmnsynci) NOPASSWD: /usr/local/bin/vm-delete +%examusers ALL=(lmnsynci) NOPASSWD: /usr/local/bin/vm-delete + # vm-aria2: Start/Stop aria2 as systemd-service for VM-Images lmnsynci ALL=(root) NOPASSWD: /usr/local/bin/vm-aria2 diff --git a/roles/lmn_vm/files/vm-delete b/roles/lmn_vm/files/vm-delete new file mode 100755 index 0000000..84a8aba --- /dev/null +++ b/roles/lmn_vm/files/vm-delete @@ -0,0 +1,45 @@ +#!/bin/bash + +set -eu + +directory="/lmn/vm" + +if [ ! -d "$directory" ]; then + echo "No VM directory found." + exit 1 +fi + +qcow2_files=("$directory"/*.qcow2) + +if [ "${#qcow2_files[@]}" -eq 0 ]; then + echo "Keine QCOW2-Dateien gefunden." + exit 0 +fi + +echo "Gefundene QCOW2-Dateien:" +echo "-------------------------------------------------------------" +printf "%-50s %10s\n" "Datei" "Größe (MB)" +echo "-------------------------------------------------------------" + +for file in "${qcow2_files[@]}"; do + size=$(du -m "$file" | cut -f1) # Größe in MB + printf "%-50s %10d\n" "$file" "$size" +done + +echo "-------------------------------------------------------------" + +for file in "${qcow2_files[@]}"; do + read -rp "Möchtest du die Datei $file löschen? (j/n) " confirmation + if [[ "$confirmation" == "j" || "$confirmation" == "J" ]]; then + link_count=$(stat -c %h "$file") + rm "$file" + echo "$file wurde gelöscht." + if [ "$link_count" -gt 1 ]; then + echo "Achtung: $file hat noch $((link_count - 1)) weitere Hardlinks." + echo "Diese liegen evtl. unter:" + echo "- /var/tmp/${UID}/vm/ (temporäre VMs, werden automatisch beim Neustart gelöscht)" + echo "- /var/vm/${UID}/ (persistente VMs)" + fi + echo + fi +done diff --git a/roles/lmn_vm/tasks/main.yml b/roles/lmn_vm/tasks/main.yml index 44c83a6..e2c312b 100644 --- a/roles/lmn_vm/tasks/main.yml +++ b/roles/lmn_vm/tasks/main.yml @@ -118,6 +118,7 @@ group: root mode: '0755' loop: + - vm-delete - vm-create - vm-rebase - vm-run From 63dec2f8b7815f00318c84a69f00b968c686b824 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 4 Dec 2025 08:16:34 +0100 Subject: [PATCH 48/73] Add hosts to inventory --- inventory.yml | 1336 +++++++++++++++++++++++++------------------------ 1 file changed, 669 insertions(+), 667 deletions(-) diff --git a/inventory.yml b/inventory.yml index 949e8af..6064103 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,668 +1,670 @@ $ANSIBLE_VAULT;1.1;AES256 -61623838313861353164636161633266303139626433313863633833363239316234313934663762 -3665613038393338396636333466373763323231653865650a376430333530613061363131323235 -32663539633066386165306537643862363831346132643339633637633665653835343731366634 -6534366130393634630a626163353262626635303864316332383361353137393733356263623333 -39346432343232646237316136653466323036323366353062333034616131303338373334373561 -63343464623837396334626431353438333039346261363664356130353537363639396332643239 -36306538303561653862623736626262326436363538383966373265653262306262373866343233 -32633334613233623533663764366163333932383532633863323739663863323739626632386662 -30396533613838613262613039333161613632346439373666613463346566323538653234393838 -34343066616165396231343436316133383365356564393066653130356362336430323536666333 -64376637323935353634333031636666346362623761616630333434353233303032626130313563 -65646230356238653730646464346165356638653038333035623636343130626165616562666430 -34623630633234653765396335306534383765353232383962303262626362623933303563323861 -34636263663134653435316236643533656236643466373630626136343438653366333862333030 -62356664616564316636663561363631366135393939663361643934356365633665626437316234 -34346364313339666231623235313030306131333036396466336638323434313230346638383834 -34333861363131643036396539633662653434333536393664303933356465303362313066646431 -30383839313439316336373037646336616461396234666336646234376363613165363831343266 -61353062666466343630613735353835313166326361646266653739396337386531386664383664 -39313862666431343434613634383737393164313663633635373964613863373137653063653132 -36303233396530363933383037313933663461363334643738393863353963373461326565383131 -32656334353839383732323430663564373632313633303062306232653739366561336363333536 -34323165666135356463663263386132323364333632393164303939333336346436666137626163 -65323064346237316463626536663437303861353838336662313933656130376563663430353336 -39663066643565663738653838333036313634383865386234363564643639353230373738333261 -64366632636464363661633161623462396435663238343233326433616234323239353165353063 -39396561383436623532383438333437306133646562616265373566356163646335646437653361 -35323763666533643338343432663437643461313236316261313631626261373762396432313439 -31383935383232303566366565643063623339306562393434363737643763326639346433383038 -35363832616634306130363437396331616566343662626166613031323235643764326136653738 -32396564366266303335646263663261383033623165396630383864633530366634613961396533 -66653634646664383232613030623332323835343035643963653330636530646539633939653234 -34336261383464646131383061653364396637336564356432386436396631656563346562636330 -62306636336533653862613730613039323234343630613233316634373865616233333133383133 -64643836316234653463323865356433666532663339316630613664336135303838613731323665 -61396563343039666161336163326531346337303164346533393863393062656330636565343237 -61323365346238363332323362623130306161366664306432616631326162633835633666623333 -65396437666339306230653464373961383530386132303933646333366631396336313561656134 -62633631303332343838393666636561353839613137323933346262633466353133376435336332 -39643934333262346232626538333639323637656130636230333034626138343963373866313861 -30613735646334306137643036653964386433646636623434373461343066623431653061393638 -31626430366533333836383431666538336437643961386365383731353935653539333734343032 -30623737633565393862613338323865306430393766653836373361653035326431363933393665 -65393766323735633730633030363733336535343136363839396631643332303033666638383734 -38646631383236353737393731613537333235633137386438633765333831346566343738353736 -66646263343765643032383564326133373330353539313633383432656164383839616661666531 -37346330313933616132313137643262653365623964326437306563363366306665643337393639 -64303035306363643233373732396166346432363663363431363634626239343637306335323234 -32343861303563393932346531383062366232306437613831393265396432656331626164353664 -64356562656562383730613433646135616266393165366138636665623134636538616265363264 -62633838333465383966613431393534636530613964616332373536616265626437326636343865 -36323231613336333235393236373235356338653862323433313232663735353634396264633432 -61356263393539656635613664316236316134636166653733653138323339376166643861313032 -33643966346565306432363263353635323561383230616537626562386465303736396664333933 -66396634346436636238636663666531336332323733623435653734396633643462383233313631 -32643664633439626138363466643834616364396634333735633364353031386231383533326566 -62663164633638333864616661616532343366656138663664313938633162623232353339366435 -61353131363265353862326364613731346236353665333639663632383733373033356436653664 -62616561636130666539666464366431383932656463376666376165333933323836356331663730 -63303530313537323437366665613363336361313734633735326631643631323534613532396335 -39346531306230303237353863633536303530303432623131386138653263353834363639663230 -65643930356261323436636139623262633261383538653266336662663435653037393463316232 -31363331633039626634343335373830373664386132316364643030313838353537366536306437 -63613434333030326636353265636566306234626638633936663733306237663061393962663036 -34616333303666623461396630656663626133363938623666396230323666306461353130643030 -64623566353338363064613863643732313634653564636638626335336366383462656336613034 -32356666656132313830663866396263356662343336323864356364313934623563666535343533 -32356263663063663632613161613964626664383739326230386466323631323365656439396461 -32643936613266303566306439616131303933346566353237303035383535616465386166306166 -64613437653161323832343239653530353332636339316433373634303038343139343933386234 -62666364633961653261373839323439646532623936363631323263326335643536363133613337 -38356361353061663537326263346462313265666565373333626465633563346534636635646233 -64326231376432306231306666396139323736326239313364323330626262346636333532633661 -65366666636565353362366164643634323731316230303937616661333135346334396262666565 -62366136623936643937306538333463343963343232643932306338663762333834393863333134 -65386434313830313438323336613638326638636662643639343062353131326262653137656561 -36366338306466643864343334333931333431626432343862323766643035353337373466306438 -34393431653163653539313833366163333035636439376333656434343838346662313632396332 -63323438386131643461656336383835326635396637336431373035666666393362653039356462 -64303933393363346162613038396632646466643031356665303635613736323235333964626361 -35613563393138633761376664626430666162363536313266343165343630393064356530353761 -31356130643534303436656466386431626262323830333063646631356362373361383430663130 -62633032613039643437396361663535396361303439323539323535613630623864653761303433 -34346262396162313930356336323334616237623763636462366132633833323339643036326363 -65663962336664663035356431623833333734366362303436633930393234643031623333376438 -39326564363761653264346336346564363836646164396436613564346536613566663536326465 -30353635373939373261613331333337636464643865326432613539366335346161306439343930 -35336233353830623665383365663737373530653233313966323235626561666336653236666665 -32663231333639356265663632363435373335643564646536636163386431326637303839623466 -63313935646533303135653834616266663332386661326435363532393032633136633435633530 -36393064383234636135353365313838303864356562626465663039306238623432383965323434 -66306537626539656333333836363666366235303964613132613338626465616165663461633233 -34303463303039313062623063633737656338316564313538383530366537653965333837393466 -34636537623931623832383039613237306139633837326564623661303965393066316633303634 -34626263383936343165326337343332343134303637356233656661383237373735623862326139 -64316465633437353939303465376163393431633037336131353136613131356565656139626633 -31366164323131373463393235396262653630613065376338663734353432363631303634623932 -39646237353165666434396163613632303832396232336665613934376335656234356633373230 -31343965626265333131363036373139386537643430646466383734623566323933333030373330 -30383434313363346135313237356464386336633936343864356135383139366162376539613134 -37653861613638393261343466353537353435303033663632643330346134363461643264346332 -66383866313239636134366331356230326462313239613835303064396535613066396635626266 -63363439316633646537366434323736316131373736336361623037383061653630643539626431 -61363735613035353539653637326639333531623563323732663832626463613939353638633437 -32373935383639393837656139303632366233633136366331643733653935306663396265323261 -32646466353964626566613230303163303262633263363066343461663133333666353237396263 -33386436663063376432323534386235306464633933373532343739323330363335313739643438 -63313133633062653134663638313335376337356562303732346664613838646434343661393439 -62633230363365396662313732303766333163646236643265303332393736303130383332323839 -64316436633537316261333433326564643264656436666566326565373665646234323263373664 -62323862343466356238396634636564613535326237326665666165613634366438653238376365 -37396132353737633466336639306134653235663836373633666238383734303434353236313634 -30306632633432396266336666353339626636616362626332326365333637656335323931356164 -66656538333536656139393838333237343235316565323938643862386530643236626433386533 -37303839633439663431623063636230343566353033313234636164343066373763336462643933 -38663231386237303230663937393463653563633731653862386435663833306634633737623438 -63633637353735333166313336316538373335363931346233343232646134626561636638383234 -34353034623135313339616331623635303238306564303065303761383438316132326231353733 -36663839633665373131313661626233383234623936353332353365316531643739346431376130 -62336130396633666234306463316531646537613964356463333165643166323937643938306633 -64323632363736306462616231333939363038643338643339363362333663363130653734306635 -61373031356238376139306136306135653934393765353939303732376433323839353638326263 -32623932333862356563373737663234613631336462646337363432633231383731353936353466 -61303732303162376465353533663861313632343339663931613135363336343161376136623162 -33653663346230636561653431323263343131363738626464626632333062306466383865656335 -35356438616235356266343431333732323665303836613236626432316362303464646539353531 -37373262613433636239623661366334316430666433346530303061646565376365663463343736 -35626232373263393433303134353162633937333636373633343263313362656633396433613334 -64333639613833616330663938643565353130383761623831313433393264663536656561303131 -34306236316665326166346430383630633638636630623732343131336461303561396430656634 -36613631393236393165303132356338356237376366613564323133333264653362356533383666 -33633734636563643765386332386539376635643164303364643933376130313663396462616532 -30313831313437613030376134633538336637646130653430353139356630383564613434383738 -62306136303539323834353663353032633138623063333139306335316231356235376538363766 -37313735623431386232386462303134626433343531396166656630306463616463613734656466 -30396432663766383765623631363464306632333361643635393264363236346262356135333935 -62666366363634336466646434613065363865363438646664396236613562303334376434353737 -34316638353532633432306163346661633537363462613532653635636439613031613039356563 -63303839343933636265333432306138376261373838383939303331323163623561636166386234 -31636561366664633863613539316362323835646232333134363035393035353438623435363030 -33663730333964316564653135656232303265313237386564666366313138343330323137393030 -64383432373733303136353833663561373563636337653966303633353363313730396266336263 -61356237643064303833333666666438613830653536663866656661636335663864663730613337 -37366630626437343365323630303635633332393865343035323733616138613231653962363035 -66373230666331303832326530613339636437306162313963313362383764663538343165653537 -62666236336131636430633238663935323164373633323866396263313462656339353438323834 -36346235643635313232383961356332636439616566343934353664313639333861613062656332 -34366265363762383163366530623664353738386134653139353734643835396362306662396165 -32316231323033303966366631306131393364353439333263303261636361363464373163626265 -64323438383663613565326239656530333436303231623764633736313137383636383735633439 -64373661313833623966333161643638336461316135303432643961366361666533353465643366 -61316234363232613639343639613033356363393661653330386431383865316166613962393861 -34363435646465313231316639616536616434353836646637326138363135356533323535386534 -31623238333139376466313963666236323333393863366434616335363932393461613762393866 -39396261356130666433303363336330386165663535393566646338626136653633366563623566 -32353038643761343234343436633834663061346362303364383237373533626662326666353162 -64366331653236643666386563663561343434626561666133643531383535393033356566396662 -66346235623331623835343039636233636663626433346231333564623366316361613163356632 -32356338633065373362303637353338653564313663633163623063386363626465386535396662 -63646335323934643064353638356532393964313434626264633930353362353931373432366236 -32633531326431336465636432353839393734636337663239356131643833323062326264396361 -63343539643130303336643934326662373339643362636139366463663064333335616465653535 -34393430326631343936323235383939653439353438316632333233666534313731303935646333 -32386430373765666330623963303838613364376137313163626638313861363435356530336237 -62616237316131656532626433303539373966666361333038306661393735303431653032376464 -61643236653561316138303637386237666462623934343461353338303563666165363832306531 -37363565663238623961666630323430326331613132353335656435326132636264353563326464 -37306262656539663437393133353530336338353261323764373138646566636465373962343337 -66623139323835393730313133346364653661393731383366653161643265303763343231396431 -62376130306330303436303739303961343735343632343038623232663634353937393930303765 -63323839343935313837376665626231313866386139326462666364613265616532373963646433 -62316537333330346433323936363934363263383966353463333633636230653865656566316163 -65663135383935383632356363303133613737666334643565333332393332376639616162363732 -33623831333235356638303434656564346433626239383834363961323334386534633032333239 -62393838373835333564306433393531616439376231336362383338396239623764613838373234 -37323165323337396533383738343665383065666632303836363039616134333665343832613535 -62326238653461663263363933616164623364383465626166346365626331326163666162363432 -33633931646637393230616564363134663435333730303930306133303163323237386263613036 -31663137653533646163613865663131653039353561613165303061386632633465353533663463 -63316462363832303065316362313636646632636565633231663839653430653265366166663838 -36616466666664323932333930353337373963376334626436393630646530333663653731333561 -33346466323835376539633361376638333639373164666134353062616238643262646566363835 -37333139313961613433656530313731616535666531623233383531326564313866386162656539 -66623838613130386330386530316136336265306131643765633864333035393437353865373136 -37323431323834323465643934343536303034306331393662663835323664643937336637623933 -65303136323763616335363563353437323765383864633866356166303562373339353061333161 -65656437343763366634643938333936623138376164373730643536633333383739306639663163 -37306566313234313831366166376337376130366438346136353932633537616163313766633035 -65643762653635343431643130323136326262623561353735323933366233303862363463393238 -63313734306161613235366562643139636535313730393962303834633435313765313632363235 -36353637383230643566633834333631656364343933653132336432626335613334303530336664 -62636261613930306261356165656264346561303838613561393662346430366436376661323165 -39393439333330613136383534313066373963666531643361316164336264376331643639636335 -37623764363537636639376330633965386366343331623065623039663932616232356531393365 -62643230333438323565363432333031323164373330613761613338346130366336393639316139 -31363936303863393437643164656164396433633034396139656431386538633233633830303164 -66666464363739356437653531623436326661356438363431643239356436353337386634613066 -35383931353731626639646532333932653739326236376539383134366361663830643537383263 -65313663313830313736396332396463643231333064643062323830386532363561623664313765 -32623265353961396535346263366361653665346266613932626538333438636661636364623033 -31333064353266353465643062326262303631376665323730613832653532626636333633653763 -35613961663863396162636534316633633836333131393733373064633136303335663562663137 -64366430323937313765366662623364376666613735383764353231323730386364386431666139 -61336662346235306539383731313130656462373632663464333061306139663463376330656635 -65643832303064623938343736303162616333346166633137343837633639636531336339333261 -31616235383065663835316162643565623939666562353061393832356438316566663564326637 -32646337336432346136316430376232636363313337323334396339646236396532656630653662 -63623732323435373335646264386463643031663534333838303664626465336533373036356662 -37316533316138393533636533393764653433383230316137643563383438346630396235303863 -31326666346266666265333664396538626438656137373466353135346232626537613636333166 -37333962623839323936333533646361623037363363653662623666653663346539356164316430 -63633038326438633365323232643564333866393239353831613430633837626237353765346164 -32333531613562313131663761623039663732646565616165643465353461653236633564646439 -61336430303132343738613832333761656539383763613336326636353861623939363535623961 -30393435623932376664316166613139653738313561316264313630313332396537633761326463 -63313836373937633864346664316332663938323537636363306235346238373833366462303238 -38633465313632666263386662663261393162346438313264383636356231643735346661653662 -63666233653865326436346535623933323262333065316333643331646436653039326234663230 -35393238363733623633303261326164626164376366313539303335356337303534353862303330 -36333830306635316430323961383961656336353137653736363133616165336266356261393564 -64646131376631383436616661346131636565643065306561613038363936663961303161333839 -31313830326434633734393735613264633164653864376165323634623562663132666166633239 -63326534303061393465356562393363386266386135653832373162326530306636373936346438 -32623232613135373136353064306562366432663663666336653237373436613436623065623136 -37643834373939643366323661656565643837303234663366636139306232313162386538326338 -38306163656266646266353633646361333532616531363830623866303732323532303130633233 -35653636333766623364656662336165316336356464353164653736363334616139626631333830 -37346363363764313636366433333366333231666663393763376338653835346236393234633732 -36356531633665366232343430343930313261653630646137343634326635396566386462626664 -64663732316165386533306662336266643534313365613935646362356632653062623834353636 -31343662343464373233636462323432393230643666626262303538623765383239356361303736 -31356130663431613834613932653030613862643966343964646561313435613061346437663661 -30353136646661393166643534303264366162653664363538643162323264326436303635306137 -30616665383863666634663335396531653032363337326364366636646564313538616435343566 -65356466303933633363393564353430373132643534376238643036626135613530336134383631 -61326539333862396232663536323739363731616332653131633530333937353032303963353734 -30626138656234633962323532616332323335653561326464393161646662613330643666346135 -37363834383964653165666231333066373232653233343133346163323765663837613661383466 -61303263333233396566303364613461643264316634636666643735646261316665386161363061 -38383431376637313762303435616433366661653239323463666161363633643937326230623231 -64353366323761333139343038373230616434633934326332333436386436616464613964646137 -31316332646439376536663064613964373334346534373565643838623031653437626234306661 -61353335336335656133306433393030313637323530646262386536383439613837646337626539 -38336664633966363634656463373066643730656365333039393164306235656234366366383732 -34343565653664653336303663393237353438663335646232383635333733656262313033343130 -32643635653837663462343638366537333666316234376262313761313739643831383834353530 -61663538323532633235383838326432616563376539313233656435663334616432663564306239 -30343432643934666231303865396230303835306265643863306661383637306464373963346330 -35623463613635306636326638303562336461373161386630366339333236313661666435373863 -37353039306166343836306163373962353835313839613937346531653339376564373864643264 -63303861393166663134393337636332623339626638613032663535373130366332346337363039 -61663239626335396334663063613661363432353062333365353165666665343566653131306262 -61396264386562386132323164333163356634653262306663346432353261353239366231316636 -33393563333936326332393534393266346437396630343462376364306463666561336465353863 -63623639623361383031366262383439636139323063346666313564363464653461336266383163 -62343766396665376631336365366266383264626638343163616337373637653761366538383038 -33613266393231653332343066373130306666346638613338653636326539346231313031386361 -65336536376137613661616232333132393033346233333539336539343131333062373163653266 -64386463306662646364356434393535393439623433343264316234323436323164393066666566 -30376130383333616131343232303963643534326331313432363265376366636339353266313735 -36313539663964653265363961363534363361393435346161356330653164363133366133303464 -32316662626166353563623538643235326163366639613366393762303162653932613661326533 -30653538313562366165303833653362323839353637643761386661323761613563313561636164 -39623334356165333965656564376230333531393535396433303662643435613833613130396236 -62643061346634623032313934336466336161633436616566353139306362363765346165636632 -63366132666335363630333037323136366235383332343461373362373132356139653465393336 -36306338316137313861643965363364333036343761636564616234313262373964366235613136 -32313131643035366134383162363333303439326330363138616265616662333665346533323938 -31313934306336316663626635616633666538316563353864346365353432343632616664613733 -63353839343763643462386536383566323763353833636166653863613335316465336161663535 -39343434613234343166613137396331343865383565326532616432373333313162363337326437 -63323431613433343439623865663862353434323861376334366363353231326265626230383361 -36323438326132626131306137333531363030346234316339646366626364396439633439656234 -32346231336231656632386163663430613466396164303538383438306330613735633563616137 -31336639373065393632303230373061346137663763353561303164653064313365373538643665 -30313631376561306464373365653463356161666364363833306436373833303037633066303530 -64353233396161353261616530653862613264666439376631633336333131326162653765623666 -33386535323336333133373836613830653035663435393864633034343239333532613762643737 -36386339333464666161343733623131303563353263333132333465653566373266396632626332 -38613164363735366131613931346232393566616565366261343830323761653230356165353365 -66663461643932623736356538666234326532393939393761353239313839326639396566306266 -65623536633966363439346336373630646434613833623661396236623865323632383266646137 -65353230346266336364616437663661653830376332353638643136366266386237326332306664 -63386135386131326132303030336262333332623234613861393539313739613564323638353438 -62353538653866623835333330636566656234633563396331343035356133303237633364623939 -66386636303931313566663030643537653362313964646138633664383763323431396130366135 -31646631316134306638623236393436353837656666343535383337663263346431366261303533 -33633438303963623138613966613161393735636232333435346261346534663338383565343034 -63366433653939336632613263633562616235323130303235653663353734303037663537666132 -35383133376138396435656339323764616362663663383134623462663837313262636435633162 -64626438373761366339613530373234313137653531633139633833313138386265376532623763 -33636531623663326563623264643632356331656265336663393931343230353230643936376633 -34306437363937366361343363386662666563666132633631663062313063656332373861656265 -62393530646235656139323732616537616262316337656336363933376137333134633135646335 -32313461653535626534303437316532636233346664633336656663633432653264353632633061 -38653039353736613065653962613966343630373431663664303032616337613733383438393263 -38613161636536646537343837323466386538333639663338363636363533653530653666323234 -32646638613735346630653432393632333638663439333033653236313665323864373366343462 -36393637626665383736313730633266393830623135353566633335313637663834333661356563 -34653638373533316462623739323964306131653430663835393064323536363033613236613739 -63623932313366366537656234386138333063656136363031613634626436666662376132643164 -61656531383063373031396365366134656261613931376363333835643361353164663636333038 -32333261653737373436623561626136383539623361373635633539613832663662306266343835 -66313939636339306361376135613565656562626366666661663434396530613438303331353431 -35353763353934323134623163333231383661383264653737376636346665356336366165613562 -30363666636366383434353562333231343064346330643138326465303930653039636137643263 -35363939363265383339646261333665316363343561356165393266363065336237336162646438 -63363461306232656562623961383362643165373237646234353566626636396636626133383438 -30626532646538383830363939303134656630313561643164623465613966316134613632393733 -37356534646334346335633862373764336437633636323061666130633330343934656433316665 -65393738613831616638646361313338326236393662366161386334343838393030333164633263 -37653330633037636530323265663565366332643961376537366139356362613664636362633064 -63376138633864366233383131616434303339336265363235303633383366346562353636303735 -34356434653561316639316630316230653364636463373432643438616163613135333765363030 -38303439336435393965653864376332393366363861646330663031663162303132653063613361 -65306161303439393465613733333234333465663766323935316137653837363138326230363933 -38323265356265646636626361336536366161613732306331363334656636613365323337636533 -62353336313066646232656565636334373663666633333136383931633633646532656536663766 -35316137343831383439336163643030616166613762386266373063313134313133393730333964 -33343564656264653866316666303230326239326562333235323664373932613164363238633065 -65656131336538356161383833643262336635613665373135363265323466333663613831663230 -66363330653535306135343961643765393930386362323631343862653563646232666133616531 -36396462393137393932353936356161396330643465363438623739356565623037336232353864 -31383637343363306338633263373535393531333066633830656564636664646435313662323462 -63626266653332616330633035383434363336656631346466386536363634633236353366663734 -37353138663833653734643561666636616261363733613064363862653365323734306431663339 -38663462346235333363386235646433646566663733663437326539376232356136333864623462 -32363534306663613262323836646363666335666461643833363833373238633138363333343536 -62376234316535663738313830633436626632356265643165336465376335383863623866396336 -37363638343231366131386665376664616330653762366165656431376339303766633031303338 -65616463643331333531363165353764346538336338393738353162343734333236663130653032 -38313939663763303836373631363939646439313434623335303465303362366163373263666435 -63303334373037663664346235653138326566396166663162616530393562346531306364653131 -31663966363764303730346134653331623333643435663663383431316566623038383932376636 -66393134623137333961346564306232353562616361613561373736346435396161326639383233 -61336266633966353536616162343165386338363165633536353631353263353930393738336633 -37316161376631623035386365303532613033633336616664613035623237626134623235333638 -62373832646231383263333132336166343564626430383239336533386639353666363732313462 -62313938626133383233343137646337623663393335643934303631376639306265323362373463 -38346661663062363733633464616664643363366138383337306561343836313265373531323131 -62666363643961623533386636313731393663303937336661616266623163313036373731646265 -65633538353565666236343432393735633662623462333862663138303366633064663634643434 -38323236313637386533326231353738346464653435396566353163373363366439353631383630 -37326234663265646563323665356465656264653134666164356133343864346163383361303930 -61356164643339303564333262616239363835353965613931396533313534356636356130633765 -63653865663863373335393831663232396433613631313866393261346638646132396634626633 -64623733643264383364363132646637386461343930303861323038396134616530636433653535 -33383537623562306638643835303338353162363634376537383634316331363731356638666535 -36666534306634366631306536306239616364343637356130633637656262316532306435333665 -62376230386533643334636364373861396362373133643561343830353332663165333231313230 -64616432343934323865393232363261663737653164623962643138616534326633303261653339 -62396632346638353961653036313532613933323635613662303935376435656666663339343164 -66626533396561396137383238383061353064366339666537306539636165363436666432303361 -36376635316633626365306331363438336634333335656566313363393632633661393732636638 -63663336323461633864313832333433363439313361303162306361383836323463613361373637 -32643333363835326234343861303561656264633763393838656566616238633963653264313163 -36333364383061383637386165653365663136336236363066633935663863636431613362643464 -61613362383734323132656339626631333031643039346638616261386434333063663364633061 -33346436373761373836323934363231383339613062396337633364376536613832643764373836 -34393864356263396264626364373164333531633338656133633961316165613537663334386332 -34363833353265373463613039353939323038613732643639643864343936353062346666663664 -64336633663133643365393964333236346166643234656230333632656263386166653433646633 -64353032656436333162386536336635376431666133633830643132333531353763323161633739 -62333530633335643963316134323066316438666464393364343433326432383738326134643734 -66616537613336396139343462663638656339396332613232376637333733396139653466356666 -39383036386531353266373337323238313366303630353966636137333539306138376161663764 -31386264303662646435366132316662313534633138393965623634363934333839343266343263 -34336163383763396238616565633339313638323266613535616632313736333734323232373733 -32346163336164353138383865613837636666626432643134626435613035666466383761343731 -66323933633033373134623235316164656466623961323437643463336334636632373939303232 -62346464363464383561316231383464653934633039623634303130373563313637666636356339 -63303363663333393861653534333164356530373336613137316239343363323032333362326336 -61653630313065323931353763373436363861333637313130636237356333396230333662623431 -64653663366466366134656164636132636363653032366339346233333936373734373864306161 -63626535316431313064326331373637613866353437363435323663363233643963313034613333 -61366662316664306664333365373962623234393764316139316531343066666430316130613434 -36363833373236653662636163313763353861643731363330643561383938353834393730353663 -62666161376263326661383338393639343531383732386165373338353636393030396532653835 -35353638636130616132353436323633366339393433333765653237383330383631356134313765 -35396265666635653934653962656334383537616664313532626137313532653730386338316636 -38373437616135363961613237333062653339303637663662376261343866643165316465646131 -66643237323365613838623764343937333065303533333636323463336436326535396536306165 -37643362653435363331323862336230363830363065656131646234633564366531616461386461 -63333732643261666432326135613034366432326139356436323438363031633938643437336139 -61343037626661663034343035336230333537353863653165313466373166643138346466636237 -32383063633565366431623732623130343662343665326166336431616636343265396361356435 -39383938636538643338393562326230353631383262373730613333316233356566383739613063 -63363236303761383731393664633935373534616464656535633634316437623662333632343830 -66376464646535376633373164376530393337333663626136376233623036393961303263633530 -36626434333835326330373633633930613339393630316137306132643430323933633364353363 -66333061633865616436373233663835623832306630323062663435373831346539363339373837 -32356138313734313636313233343066353638383439356264633534636335636430653163633332 -38373935656339333236623733643964623163393839353666353535353262636335356238303361 -35636638306337613465653332383162383266643562663762393235356430356163333662363537 -38313235363536333836646331633663333462363333653563373761663532393437333434353862 -61653338393335366661623162383939363530616337303935633636393561623332373962383966 -35306662633436396532643535613966303830313661653830613165636235616463336166333330 -32656438326136613166663263353164663363336264633934633865656461313138333263613265 -30633762663633643963646238666235346464323965353038373662366438623339613038643835 -39623239386439383266336330343864306461363631346537366465663762343832343731356464 -36626635383331353731373435326166633337643732313136636332353962393636653762393739 -36333733366439636666616130646431316364383339383364656137636338333565373436366464 -39313539366230616563333936353331383363343233373731313638633464306661363762343337 -64333463666165353235666439396337376636393535373837623433373361313938636336383130 -32626337383264353066366230356665326432326136613132626538363062343831343239356566 -63383134363937366161323166623539316436393534316239653965353339343334363262383866 -35323564363862666638386430643938613531353065636134666233646637643535383366366536 -38646531303239663165323931383064636230343962383765656466626365333665306438393132 -61646363636431656635373334626662356536346165633839363435656636333237663663346436 -39313964306135306465303663313066363464643962623163643263393438383061363738653837 -30623764323636623666666433373764326365353762646265303531313231623631666535313533 -65663033373062613437376634633961326564376138633638303461343933613131393633363138 -30333635633866316663393938393132353966303463373239346463323665366534393164376231 -34323064646130616234663961376132333862306638666166646364663562646566633066363631 -37333661663566303536393730393238363161303831663530613636363765393832356237393765 -65363230353962386135376339333238643862376131663539396132663636313331353638306330 -35323465373034333566316232636231346233626465663734353362336562383935366637656561 -36363131383561353635653764396339356263306430613166616438613939633861306231633464 -34353637386230373365326565323739303734613135616637643934303762643138313864336238 -30646362623763396362663534383936383337306266383565323832623164346533313061313732 -62333539306333613030653634303466356265383535653465613332303032633537363464646139 -65656431663265633336353338353064626266326362396161393864363462343837383736653463 -63656235326330633733626534313364313830323464323334313538383037656235656139633634 -34356233383966373435366233643566376331623563363234656162336134623937353162633631 -36646664373362366334383364633361383336313036623430353237333739643862326263356130 -37643738613661623135346234366633633731633436653661356161616162656636376234616434 -66623730346366366163393033613830323736386566376138383633356165663362363465326465 -34616562343166363666313437313735343362393135623039363932356633646365663134383465 -38306237616238613538376165393162323030316530616631313337393964353034323331663230 -61633235616231333265346434646465633531373931643065373238353139386166323365393439 -34373734373839633737633833643339323035646331346262363765626132636335383031623034 -39376164343665613537376566653531316263313230666632303234653363633834346566656264 -30343162656233653134356236353865643966373335326439636535616165663632353839353139 -35613037353864396635363633386131373235333435383565316665616135326536353134373863 -34376461616238343962313537326634363065633030663032396139633430336366653431653161 -65393165323835663163626531353530386131376563623535653932313437373730653264313363 -37343764303231323166656632613436336430643232363662393266383035306332303430626363 -30623439353466386266306562616464303531333930336636393461343934393934313431343335 -65663931613733623830313333343130343262393033383838663537656232653432363939303366 -62646161653466356231336538626565383864646138316139633162396232616630343263353063 -30613136306434663539366363613535386633383831376133323537396461346334376531653463 -61616666643263323866326332656461366562633362353633393364373330613734333462336139 -30376234363963636137643564323865363665356530643361396233636633316632663665356134 -37313065386438383463616533333562323161356139663663326233326338613137346561626664 -39336632393938373935326461666235336236343337303664383833626133346166353734396435 -34633238363463633737383230653932306237393561313831383932626137313161613432636638 -65393565383533373539353432366332346538643739343634623230613463356331393762623631 -65333737313736633939356131653463643930666563376562383936396530363934343835643164 -61643763653930363464393464336537643065643764616334373438643938323061356232303931 -61396266386136633737623637306161656366663931386138346336623133393661643161386536 -33373861393065366531303332626438323336343332343233373764303034653234393430323137 -65363338393834376233626166666538316634376164336563626662633465663562663062383637 -37656134636331646538386535306261323464366363663739666466643433386339386265353139 -30396435343762656133373363303238633938333234306262643833396665396364666565346264 -34653465666138643262383662626131666235656133653035613033653632393632616433626137 -38613037643137376562333633383536646232326230323238643832633935376163646436373834 -34653231653966613030646565613666613935353339663861646166386361366666326566663332 -61613761396538323261376361623963623331623534623836366231396430653966356633386264 -63366537623539653962383232353666353733376537353566353438633664353530373732663163 -33366335323639393363376363663534376362316631306131366265353338316231363538613964 -62313838393139616239333236343363613032643431663962653131366466643436653866336534 -37393666373334393862323362306132626361393030633830393637373664623531663762313437 -39306231363265666337333461333939353831373832386464653739353038303937626231383730 -38343438343031343734353465383438353462386634356266383935663732646133383030646338 -63356437373463356265383363323832333863306262306133383638343339396435393432643935 -32383533333766376537313931366165393638373965643164336661303732646532396661313063 -33383332303764323235353732346363646366633862386662326539333435393231636133333464 -35646236386331323635373862366632383863396333363535343331643835303135643636386564 -32333731323530376130363365346461363265373865333933363561306163363365646234323135 -30373131366532336166313533623232613436373737613231373864653966636139353939353361 -30383265393330313264646136363239636339356432623864666536383237373934353464363063 -63366332393131393932373363616531653332376561313736356662326530616335376334383333 -35356238616330346130356264633135663838633236333737633830613864396532636362303139 -32343763383361643231343766323764633666363735653335636439356230663364356332393662 -37623630646261386130353037666366393938346262343132366364633361383738303630663265 -31383861653761363935616539313437646432393163626134626332363231623763653838666235 -64613061373130626330366662343161326165663834366261323632366564343066393537616161 -37656237613330396361623961636535613561376337396130653530613666646431616334623461 -64336131346363323730663366353931626537653239376161633565356362356437336338376134 -33613161303536376631393539353537643732383539623438393662663362303461653030353630 -63353863363439316635626139363165366533313663313263333637336566323732373063316530 -31643131303534613264366338363938383732306532623066366266383963636335633937303666 -34646534623838396264343361326163353564383532323532653665316264343539623163333930 -31393636663533336262623461343839386439333866373961306436653762353664343261616561 -32313964636165643631623961333837656535633036626537333038623263333966646330353939 -65303531653263386432656332313230383836363237376437623361666237373834663465326535 -33323833356535356432396439396638623138336465346461336231333935656431343538323335 -66303862353661373566306361303266376161323131613631636432633631303164613431666235 -65613834333932623531333830653238363763363461623231376562613864306338303837373233 -30653961326232386465353537346465323862613030663634666136633932313830393135313062 -39303663666235663331666163326565333866303230633765326632646131613264356435613534 -35326565396662383233356563613239663135343039636162353837306633613635653538376661 -34643064623464376439376335303630326638636365623032363535396364636434323163653537 -62333034333164393330643564636263303031656135633931623733306339363566643430643336 -63653536336162343261326439616666383734663366323335333438346539626331353935663836 -39643161396136393263393364616363653562306534393064633936363538353031386366666566 -63356438363562633636623830333539333936386630386636383565663636303565626636393866 -32386638306535353837393930303864666230343130373135316466383532343530633039323837 -35316162376339373632626466323364373532386365336137326432653137303430613862356663 -39333439383462313162393437636136626432353234343939626366643734376562636430633936 -37643737396236326464666166313532383938346165663539373336306137366339323432353032 -34303637363161343730346465646638636461376435353661386562356333616332626564383238 -32303531306463396233653164306538313835333232663032613230353435323931303037663832 -64666333643235623835343032366665366166616135396432636464633437363262613962373131 -66373938653233396633376135646136623137613931383030336164343639616636333664373064 -34653239373737666366306132393265656636383664323636343436306261656337363636333963 -62626235316564386234393064373633336638363537323865353737356162353265656436633030 -37623331616238373830313837346239363362646635623761396438306365623064313139663762 -38633539343539623930393839396662363163383533613830333039363030316238363931353533 -35633963383032636361396562313761383432333866636264646236653464383930313432393261 -62363064386363396139326139623633363034313032613331663630326161383535646132326164 -37393039633837633138666230376666326430356531373934653466646564626535656436663461 -36656530663637333065323437663863393837343764303064336536386364313038613639623730 -62366238343633336662306433313039663430633638303934616364653666643064616132303163 -33323032386533343861303830613461633231363538376265363939656239633033333435363339 -37636532373936346434353737373935636331316333646366333236653364383139343061643238 -30646339353839633762306436306636666132643464383965383430643031356264653264383630 -32356364373539353537613866633462306361383334366330626338663738356635303734343139 -61306562316263316337623730376331306363353166333262653835626537373431633436373865 -66393235363131663734393535333335383736326639656338326436613238356266376565363931 -34323637353938316134363534326663363061346138376163643465626130316135623035383263 -38626462653730653333363464663865333262643363336666346131323665643262396638636565 -64303664356265656631323936383239376264363466376132616236653536396537333965326662 -66353138613137333330316566303135373361663931666639623332313733373230343034616634 -34336336626564363063393032636262666664353438333863303334633831346632353036383337 -34626638353561386537643063643230396262386163636537306364613065363165303130663362 -35353037373035666236336639336666656361353663646266356362623634383136633663666339 -35306433363932653832373865646161383935323639623936303766333833353734313437356335 -38336435366363336165373763343061646234343735663832363933376236633433386364306462 -34306534393661613635643339383065643366323730393230656162656130303737643330303463 -34646136313432663962633830633230313964623336623761383032343330356464636365653431 -61363434316163643232316665373433386630616530383366363561323834323665316534366237 -30346565316437366236396163306665323739613665623532313530393233643965303237666133 -36386331386462346332366461303136376336346563313038623363633335303135373764616566 -64666431303963396630363832373934616466396366626563616432663666626364663438353563 -39383132336635626630386331666365616331383639363933653939366239646164636336303436 -62616466303563653636633439386662353937653364633632613931303332656537353638646435 -32393330393230303165313866616464323133373364323837623230313533323838666630343362 -38376363363065353034636639646566383531636534353436383630383363316238386539393535 -32353534313739373630656337363461306561353564373165346265383436303937356637366336 -35656163613664616161623039373932343562303963656463613031366666663039386665653537 -62326564646230313861636363343637663038643061363962356563323565633061376266333661 -35323138663838353639623762356235623062653865333066643164346234353863666637336234 -62396239323539653462353939316235366530393861643135353736666563343130623163306438 -31626639616131616231343130356464623861316336353730343935643238353935616439393839 -36323164636561366530356235383834366537643637356437643436383165616438373739613834 -35383362326461326635623862663262613734666532356531393832326265313530373533353836 -62306433616162633432333762653836316631636265613836633039356537313235363935383636 -32363638333931376664353430383839376535356161633064363162376639646331623536343966 -66383262653133616630623239303939643335313365613332303833323434386231313565353932 -65656230313266616166613332636631666562346231386533633139356432636363393838633666 -39636339313332326331356432313336336362336266373630353965346139663832306363326537 -63323830353631346564646239633262363234346435333765313966646331316533353161653765 -64626634643962623737383339323063393064383837323839326138373636616331363439383562 -32646632623464303637646366346231363664646138326333303164356261386339366133386530 -64313265323736396466666531346138313931633065356463396463323431333936393536656566 -37656334656237613264373030646163666631646438326339303063616433353534613864646434 -32343164393232666138646166653065353435393939643463656235303830353337336435643537 -34613461663839376231313661366336356165396239383035313933333462353662383637633362 -63326161373537633265626339373134333963613239326339333137363432643439313733626230 -31326137653734336336356261396533383261363936386134643633633130353232313735353539 -62313962373930643362343533373366333766306662333331386130343763356666343563346361 -61343839666331393331643365643965623933396239323938663839383461336137376261656330 -61373130306465376661313462663962613434613735396263393532313461366637653031626564 -62396634326432613462613335663832303432613166633663643631646437643636653230643632 -39386264383131326537613166306234323930333934316561363134663432363132386536393136 -62653137353234393839373831626638353738656565633966643764376331613263353166353164 -38393839363939373536383039383738633534646361353730366538633634663337333131366139 -62373930336238653938383030646631646533333665313336373032613039613165653731316331 -35326434376334376136666264643666306461346332303039313264633965333931643034653837 -33383964323163633932386339356666333930343161393065623566386638663935353637653731 -65336139643962623331633338613165383934336439653030316364343863613762393430396630 -66303766623833623431386137626462626330393165366236613361353839373231363864383035 -34356132316433326130323462643931623936393231633733306465663732326432633831646636 -35396236333231373135383862653565303337636162623538383461366236653336313765316438 -37393961653137366366353763373561626162376365333635333934663230376537366231353066 -63303436373662313633623564623936623665336331303734303161653737663033343932346333 -33323534383563363764363561306432373535396430343564373138363335366237663834316530 -63363436396362663030393633633662313735653762306430653736626531633733653664303333 -66333632343064333166386532633631393366396131333033366239336436383764666633626130 -31616632643436313139373163623162373166373533616331383665613938386138396139303164 -38663433653938616530323162666535613134393934366566616138663363356639366137313664 -34346466616631366566376464626339336231306466623339363330643062616337646330666630 -61653764346338323533666533336634313331326437313865623336623939643839306462376234 -35393965336432366138343465663032303831663936306436633365353339653930393034623138 -30623664643564393462366539663133356234373764376136613538656337613266656233353561 -62656463383661313634306430333335663434346561313936666232376265353739616232666331 -62323565306333626339316633613231356633383564363365346365643365313632353865363338 -38346437373739623430623535323062623261656431326534633235626632666431336137663538 -64313834326432336436356338643135323838366531363837373431393838383666336633653034 -61376637396262663631666237613465363534663633623233303839376561656635343161326436 -66653530626462373063356137313532383239393563396431353530363562386165356561386530 -39643335396337356135613163633838316238306135393836313161396538353537333537623730 -63626366646664366532303737333030323334633665376638323166333562356131313664656238 -65313831626538326465623663376461346439623265626131653865303361373531346663386663 -31333239356631613262323136333034643036303661373961656530646435623133623134396433 -34353065333165646166386364393836323363356461663964366638363435653330663537393763 -36383639636537613635333036333238393932643862633631623964616533343039323762643064 -62343339313133313335383038623863646634633631326633363662353263303963633535343966 -30333539633630626332346363646662613030376166376536396562333938623131623537386438 -63656561643963363838383237656235363738363866323631373934316263653338353039633764 -64633633313265656531356530633562383532303030623336363134636634303230666139386135 -33323536373939393136343764346466383661643730663534326539613831623730396234633135 -39323735313466623637613830323934653563373431396331393834383765653566643135646262 -33383834653236333962363961636138623361343738313035323862616135346439336466663531 -36346162383837346135386661363265616434616236396332623466626562306236623262613162 -34313133383430316631333230313963303133323835623238356632323734336433303538373936 -37653762643031623639306162613630666238393736623261376662663863386461363063666364 -31666364623966343163616562333863643134376365343166666332373164626239393764306239 -65373362363431333738363732363163656466663865353662383636393263303239623866356530 -32363062396261323432393533313638623061666265663531303462353439373566306634303837 -39656363346664653737343633346233343231383764643639303164643032306161623066313762 -32353561306339356361383762633461633263373633373365326661353331616466643464656162 -64646561343364366439303866353064376335393136313538623237356263336361663231396563 -66666463316230376463383861653330613462353766646439333734323933323766383662633162 -65373166353931333133303365386435363836666361626439663737653339383065383434386439 -39303533313634333233653038623961363231326236326562666464353037376434623665346336 -35333232396238386532626637363435633961643333323561346430636637643633626637633832 -32666637313461326130666664306662343836316438376162316237303436663137303937646365 -61613562643132366535346636313661363465633835666634663135383435333463373931653839 -30303836613836356439303163636565386536636562386135633133303663643466373763383931 -64656137633766636436626639623730396530653735666365626264626536336632633935663734 -31656462346433343962666130663130626264353531373438333539396532343461313536613065 -61333338386663323539363331356130376632653465386236326563373734363133653235323338 -32383663343333396338636330363664343666666333386533366361623430613835343764653563 -34343437313166323835633766643638653636643430333664626461646462383765353031653962 -62663566383533353461613930393263636335366331356531366139616230313032643437666332 -65633930303337313436663831306366383362326566636132336565623865366131626261636436 -63636664643437613735633663336333643535343933643731393164396666396363623164396134 -63343166386563643035393934616166643466386232373064366230343835626461393036353733 -33383632323139633061393937633261643437306161646539376237353832366264646437373762 -30663135643333653036363661663539653232376163323163656533396161373637373564353936 -66616637303562643165643932643436333438663338383339323564636165353030313662316532 -34656635613137636362303132656461626332666235373739386661396262623664343561393132 -66663666643137623530656261383563633964613735643137663032383335363635633565613539 -34346239303632336537656161323463666566313664633738356266323861616364323466633765 -35316235363838316633336661666131353464386462393364656531656662373731623232633430 -35343938383538313066316432333034383932653332356461656366393164663431646463373933 -66623861343564336233626238326139383437353730656334306461396161366463333562393136 -64663863623635633364303338623636656638393333363762663736613463666531323861663435 -64313264643638653033353066326430326662313239376530666535383934346437643761356233 -33623838653036383364616432373164336631366566353339353265646261633566396233616332 -64633263656339303035323636326665353539623033633964326430363739303332633236633561 -31356662343535316332303732373261353366643336353163343265313161643030396661333831 -34363536353033326332643937643264393439353863636664636230313465333862363432363661 -34366239636664633466643836393130323730376232363063386530366464663139613966303632 -66386338356332366465373932623161656435306231353435383534666564666434646663343131 -64623237323533373761353731626338343338316666626638383135323666343430393731343639 -65316536633832653164663862373465363662626261323131613835396333343634386661663462 -33313936343533623561366630323566643530373934376139303433616538636539626331313937 -61616334303764636436306635666562643637303532393934363164333234356436663731643365 -37393863366434323337303539623263393838326163313865663661666232316331336232383530 -63343631316338373337343565643635363433623939643834663538383039316165393461623539 -66366532363162356364363763613638376333663564656533396435373038303233623361336237 -38326633636435313636366163623633386632616630346164316637386130383731326539366162 -34323438613230613436333234306435633836356534646637363934663261633936303236336430 -32343630653262376361633437373330636235383439383636383562326138623032396463323138 -65656265336639313439396663656539313630346437313663336162633662393034626361616333 -39383961303364353066633139316339373230376161376362333234373930376365653134663439 -31646232323839353432333630303263373636653866623434383332313362376133643366333065 -64316564303534353234323163336633323436363637313264393437373435373336323737396463 -36343833326435643732356466363734643736323861363737613238346436303031653830616235 -34343338303731623163653733393166306633366161386465656134323561343930333466376264 -31366631633366643365656530643938373234326165616234666538666236383336663531613265 -37373031636631643932366434363966333237373764323637323066626234393161656362393134 -33663164643264366236623839353633383539396166616237373261653166326436656563323862 -663831383933363133373731646461653635 +33636638343837353766643061636131313737346236383064303437323461393463653438616436 +6134626264393935636139613737346165646266653162330a663265336539316265356332633036 +65613034333232333463303034336633343832316263333730666437393264386239646338643663 +3766623764656463610a326335336466316565313130613432383632306662313366643235613063 +30653935616134613964383766356466646465643464643763646463373733393764316562393733 +36653734376433373232386136613233626235363239396462353933656131353266666466626561 +63336637663361353361353764393137663264323532343364303932363063633237376165376331 +64616433666438616464386265616266356130373462626566303665633935383466333862323663 +64393933363136643165663735376438393865663432613562343239613566663437333731306537 +65313733613861313036383636333162613136633861303061303235393661366163323733373463 +61313864393131343063646264623562363333333564303864336335306635393335653766366530 +62363861653962613366303664363039613138313931376362386133363437383833323530343131 +38336435326130353462393133343466373537363664323264376266653733313331336463333165 +62366364383538656665613466346637303036343662313735343137643336353039396666313139 +32653765656438626235333261396262653861353363613633313463323562626330343066346132 +39306137333462646139366666333563636132653333623032383863333232663834353865633334 +35316138346538613661333862353038336463666161666133613133313132363365363362646664 +35303836373638623735393866626663656437343136656434653634643562323032313561663034 +31343362333666613435323633646435636534393261386366633731373236643661313332336439 +33383135613761326436363334663233653333633962633134626139353763363435396431643230 +63646238356234306432363439613538303537303935303930366362383239366164626663316436 +30616130303961313365333566666132313937306232323662333563353538366334623230373432 +66663932316264323839653332353433656332373533326364616433653337643864393338643730 +30666339393064353663613439666530386665653265306536333462666234313132396339396666 +34313161393733356664636338643930616433326339356366376634356564626235396337326335 +35613939373336663966646531313539373030313139386538323031323165656466633632396162 +33373565316633636665383430656337646665366534386436633530666465353861303961373939 +62656433316536323730353434333361376130363934663937333166303739633737343531306165 +32656666383036656534626534333661333362303236623137613036646433343539363537306437 +38306166336133663837353133636231663864333433633534663436626631633739303366316335 +62646337383334653430643439633236633535373961623332653338646331653765303130306264 +65393536356663653263633564643834393231656433306137363237383233386664353961613562 +65663938326534623465623066643861313865303866386430316663653333353033653336373237 +32376565623233383965643864653530363765646364363637343634353237656437633933643261 +37346265623534316265656330396438303531616432383537313737353435323037646265653339 +63316535336262656231343465313332323164376430666535623766663865383062343261386430 +31333833303234333735653431356435626632656561643532636132623532393431306135346337 +39393432313535613434643237666231333363616234376330663338326431663339356537323065 +37623034623139393930653865313237303535633865343230313937326634663134363761393339 +37333161626537396662393434393664393863643838633934316231396635343337653066613730 +32343232366531623366643332313734633761376537333164313635656161306233363136643636 +64383631353361366564623838333032653839393634646339613838626532386435333637376362 +64393264326137376264356233346138613639333831366565323937656330336239306366383362 +63396634306665316439353062396136373563393632656263633931383537313632656539313231 +31346434303362663331383163363132613631336134303061646663643861333531396633393863 +37383333326637333766633161363566663330393837326433623166643061616134353130643034 +34323837653332626338636563663336353733656334303432633263323334376233383762376565 +39323036396333616462663535313535653964646364303764323463623537343733393466306361 +38316565616664626164363066346361326162353264323434393561613038356434333238376638 +34366535623130663738376632333565646132396636633130643566363833336334326530626531 +38633631366237363434393930613032323263626430383331633165343665653063393064313633 +63633036333662636632353331303861393133316531323138633336363765396632303436666561 +65336332353830316239653939396365343534396338336266393566313463653163363735623034 +61623664653735383834363565396565373638316230623461336163313933326437343761366261 +38303539623031323362616237623261666465363161306332356335653636356130656666363266 +31623163313236303630336161626433393035313863383836346562323930656166366530633937 +35623139383331663335393331356635373265396165316634393434653735616133623363636666 +37383261363836303764613965623431366464613963353131343432633339383361663737326462 +32313331323036346163643034643566303638643734303232316565303263313037653662666437 +62623866396362636130646666313132363265303932656132383439643933393837303566313563 +64306439323966343434383634363563663165393436323865303134353630633863636336323863 +37663561373030356638636635313466346235633866626466383964306131663562313630623134 +30613765623762633930383539663838646438396336363731306661363863343065343635336138 +64376366643162396366646630633431306131393139633733326166316532386334306432373333 +36353835393939346334373831613536326133326538303730326136386239303038646366666331 +31343261356630393863643836656533336135336336373333386132666532333431656439663934 +36653866663032356163346436353638633061613130363366363636303533666437303636633231 +30646433643033343564303238643031336230346630353036373333353832636364353637373733 +32366261313738343562383537393263663966616464303863633464643830643537333539336434 +38666265643331323136326538613363656539333730363863623739616238643336333036623032 +38656133633233653138343664333937663265363062663238633664346465383565393365666261 +36616661343133646639326262363636343066633564303234396436633432383930383661633432 +32386663643437393264633662313438323362313637383832303434333632343533356164333264 +36386436636331306466643733373032376166623435373032333464393365313933393562326334 +37646534376536316532656662383261343530323664373061313362303939333563323462383766 +33313538386263386431623834313832353630343036303861663162333465313362343735643931 +62313938356563393534336165636631616131393131633762333237386364366564656534336232 +33303665656631386539356332633765376565396132333262626166353864316163393032363735 +63343734626461343065346164313961373762643536613465393363636132383564643233316132 +62333262333366366439346132343737363737333962313863656562623930396132366338653865 +35353239363439383632626230323038353061386266303936636536333231633163313537396635 +65633038343561633839623835666133623039393130623330623338653139343563363666303334 +32353936363764343136623739313831613738343238333263383232356161623732336532386363 +39636463386134363836366363373966366266313662346436623762386533323830316431646662 +65326664366462396266323138353563363463353563633662323730626134353537653838616635 +38653461316231313963666632326264373935633865613633333634656461373635393236363562 +64623232393762386165316538616237353166306239636536633263626532373635366432633538 +33643132663538653966323662366666613365623033393639346132303461333436386266363232 +30623635653834376137326639646362386239646262643864346631303262326662653763626365 +65373734373333663566323731613237313362373933666266613165393931626332373261396530 +35373438393737643531393237386166363961363464376262373737633034336565373134613132 +38393931353861366530626263653030366433346164616262666465643164613431616231346431 +34653933633430653665326538333763363136383233663636636135366662306165343330376261 +39623363353936616361363731643863643238653130353866386261333465353964336237636639 +62383732323263636131313763313262646234323566613430393134333465336461653963303536 +30663366386432323733646637636533313263663638623466663338333761353234376436643738 +31376139656231616565396665323730363537353763653766346633343530303730336335643136 +39636539313036306262313033376463383931666532376530396166353836373433306231333135 +62393438363338313437393433346139393739316339383962333662303139376539663962613734 +65656232633433346266653464646237336565616161346466646464326233346534373733616435 +36383832373534313566363437333534646463353830623931616261386235613666303438613332 +33396463346632613362666131626237373537623235303738396433653634613235373430663638 +64643230356334343564663262323039666462303265303137323830303863313964643436636462 +31336366383231373165633838323065636539663039623137663233613033333663396638313432 +63333133376462353236343834376165646361393361343939383061653037623135373561646561 +33663637306565323333653462386431363162386231386437633566313833356137653539616663 +34373138323633313733383732373038306463373864636565316462626665373162336265663463 +64613866303162363962303563346663643932636131613131653337393662383165303535333933 +31386364376363656433613362333638343636373164356133656131646230623939613735613739 +61643263646138356230326661326563366234316162656166396237383163333834393566303137 +32643135313461663662656437323632666461313338666234356437373062616362333961356462 +66396266646263313632613132656432303134383836393138306361303338353632343733363661 +37383462656230643539333530373739633030356565353736363233643765313937653531353839 +33636266626630376239366132346662306435356438336166633539626462663138666661373764 +66393634386162393333333161336132373565323233363262386531623063646562316130383332 +37383736666562326166316530323539386633313136303531303336326231663239363764663131 +36336161386233346632656633303939393064323037373534323663663836343838616334623566 +30663465656338626661316566653161393561663364653437336264366639396566663537663066 +61363865376335616636313333623938316231653165326566376531336335353631663235633961 +37363034663937656461373539643933343231396630386439363430646539613936653836383432 +33313130333162653434633166366334326433653933663131623837663032663735636538356533 +66633461306131343661336166333138383662626261333831373538373266663738616262643735 +64363231646336303530663232626537616335303762333238613731353338313764613165303263 +33316662666631396336363338616663336536373839353031613631613532636361613666333765 +62663437313264363263636436323035346165303637306165643465393935646534646631643632 +35353464323931616137323033326666643363326433313931616638396334303939666163633632 +38346339633763353134343531383066336437393033343361343535343331383232653432346366 +66373136663732633066653930313738383763323365646264383330393739663835623931636138 +35613030326539636230363261396439376338393831376234336237643031306363323538303431 +65323235613836396438396432353961356237316336663435366139396364323465396466326630 +36376439613164303732316533316165616539323761303561316330646135333239616634376563 +64363231613436373666653539623962366234656366393031373865336334383630633466326366 +63393837313039663662363330636230653830386435393037303432383137366539303936623165 +31653338383437323365363064376238636439306332613465373131643862313737646636643765 +64373263383435333330313131306662613435616432633337393234633135333939336331663462 +37643836386435363131306337356134323462353132303934633362356663623765623838623464 +66333131326630383634313737313239333863333934386638323433313166376266313135316161 +38356137373466346634626436343131396531613062633336343665323266376663656337396530 +65353138636336363136626632656635303835646263363032303431623264393764643636343733 +31366632623030643031653531393266316366383335336666373632373264373536333166303134 +39373833633764663439666235323765653138616365636636316564636466636131643965363564 +63323536636330613133373162343933633936613664373861323236336533663863623838326431 +37353430646664376130313439663132346365616631623832633536396561383231346636393761 +38393331323961373232363436646430663037333932323330323365623364366234636266646664 +63396331336237663361333962663765663365666338386366653262373234336339343162343733 +30623330393761316531376133643932303134326661316130386438643033363130653930306232 +61623261376238383032326362313464326134346663393339656562346562333537326138323931 +38626261626130643161636161663634363830663266616139376661363039316139346231363364 +35666637623939663435666533613334643939326462303038623062313934653932633739666363 +39306237333166386138636634306363656532333131383338376561313737656236623664356531 +65623832326262333533346635346639333239633665666332346538383765343232333735363033 +37313038316136333132323633633138386534326335373361633935373739323462333562643139 +63386236316564333332343763666135383061306334316332626631356662373434356538663337 +33646435336137373138326463666662373661636365356462373166326134333530333662373830 +30363063616566646238643535333837343337376438373033333832333866643166646335663430 +31613733386662363364323832613562636237386563383234383364616338653062653334363861 +62303335346635366633323562633537396434363164336638346166613966306361386664326666 +37343964636136636566643631393931353061323764316162623866353630656263353961666231 +33613038366236366562303732663936356361616564396565326530393662383139643130343934 +33663133646436356133343636306234613037613939393133626364613632626132616438613735 +38326636643664323236303662373431313662613165333064366334633739636330363232663734 +30303063323237663763346131636131376264316562363837353638613865633562306534343565 +31666364633431383164633361343962333730653461623335653732326137646238373763613036 +34396231376339663037653038396537353064383939613865373066383964636331636432353663 +61303063366265623564623639623633643062326537303433316630396135326338623834353534 +66636263376234633734363066626563633438366361646662313539363163303963303839313661 +30383263353635333637353630653130373433343461363733626233653935336366303937633863 +39353039653536386632346538363033393637353335376336323564393233366366316461633834 +36636438306664376130376665323839383566656532623132373334333262386663643935613935 +39333962656635316264613830646339643538353461356462616132613534663963313963623430 +31376161356361376238306536346335303662353630656362663965613338323562383463343339 +63373233636634626465653832313334336137336264313336663166653866633933376435343835 +32613035313934383761356261633535313730333636396334653333656638613835333135373633 +36393166643039613630393934626339656630656565653365623535306461353734653932623337 +65396165616231633234383433666233613065353164346433616462633236323233633931666261 +36343837333161303365303863363165646262663631623231623665306232663634643166643539 +36313337306130323136313332366635613935656133333435386161373830646566613361656434 +65366136666365396135613832386434393063643935363264313166396533336434346136313531 +62396162313139386665323035356436333863646138323064316232656438393335383239356363 +62313062323932353832366132323730346334363131366232653439656137316564323434386435 +34306466616566333432383032636439656264353139363564613738303734643263346139633431 +31323235383832376534663338623535656331326334663732316430356661346531613535326538 +62383633346261643533663736663166363831623133323865306239656432613337653936663136 +33646663626133333431346232343562323038346665633633366336386331623139626337613666 +66656331386463643661626136636533366439386237373162313164333635386636343963636634 +33613631343766613563336334643530303432633363333636363436373361333362623930363261 +33326139333937363836656661643461623735653634393461303361306434643133633061336432 +35343034656336303538376434663534626136656565666239633135343261316434323965636134 +37623534376633346466346433373861666466303735333963393561333031663461333439376262 +62666233333865663235323663323163326163363232666136393661653363363734346564316432 +61396165393364643534343066633961396430653031356238663061313633623034306333633932 +30306262613262636432326431623762366632386162616666343930363033306364313963343430 +39356461396535343366626362393434393030666138396334336565656536323737626462383763 +30343830383335626232646237373434323831326561336661366131636136386630653364613837 +34356339643265353634636265643539616131626330643766393435636136363263303261663566 +65323763383739316433643661646164613134323631336138636138383063623532636230613834 +32343138643764393336346637326637393964343963623366656238393436653637616431326631 +36343130363265393231323362333832376433393363636139613337616239633439636338346364 +32353038656630636361623839383966383764353833356466646133366232663062663261663562 +34613530326161303464313863306464653161346539326663396432306634306630663639366333 +33653939616533353264633035616664396363363930646165373437333662663136336363313162 +33396233306433386531386138316436653136303831303136313135373433626538386237396161 +61383331386636306532646537663962336336636537356636653961343632353361623633663436 +63653731626230613463303864306434623366353036363538366364636262633230306237383835 +64636266666664366332653434306262623234646630316464636661336261366434386463303434 +61383562666564373130663765666235663265353435323034343462393132396261383237383564 +64383832353335633063346138633061396431343664643266333035316639383664383736656262 +31666536363633383234366339383465303234643566383464626230363564653636363631333466 +65383430666566353531613433623763313663396633653039363862646466323265373733373663 +64323437323161613063336562383363373763363661363632366262363735303334373766663961 +34303038633339646430623833653164653930303636363262363735363566343838393635613335 +61333030303635383735356232313261653638303332316430356531363932623965666439383464 +38306431363864643932653136366135363933633061393565376664333736396265386232613938 +33653866666165363266326463376136653066646566633162316638366361656136643439653039 +30323763366633643931343931353862396333393939306264313139626530663264626137663961 +66653033373232656534303438396230336164633631323036363635363963633261313737663566 +66333530323039333031356133613165323438396332613862366562656564303939386631656631 +33636337303161366261666666386633353365333666373063366337303562636532383335343135 +34363963376663333135376263323730643839333338366332623564373632653965663134373831 +61346563646435366663396466346162336166356332376363616535616261306536323637353034 +35373464326262366332613330383439303037643862393030353535653065303434306463303033 +64626234356532623563393235316438616463626138613562613233343635313364323138343237 +64306235663035346436333036626566623937626539393837303231343236626330303139623230 +33336435633365373230666262376563303430666462383438663064336330356538313263313834 +62346432656165326633393761303563383462333165666438313334303031316235653430383466 +33383264316361326433333036343461623961636137313063323164383532666466663162653334 +30363336343263326331353863613366363062653936626430346566316632303633623262663639 +30323236643965346366323962666433353034633037613265643862346239636333386338663765 +61343238316165653934373031376139386166303836303239306663323939636462343731643830 +65313738366430346332363465633362643731656532393361373933626261303961366335613534 +35346166313838653930663335323166306639356633646239363633366230626536313531306461 +63646135386332616333393264346364343332346637316264633133383130646564316336626666 +62386435373961323238633666336239303164313161656636363530376135323266346164376463 +31363639363264346333303933636530623366623261316462663939313030616635366633376139 +33363738383363616430363866326437613965323434346434353161353065346133316337643163 +39663237656534613535623536623064376261623665656132333936653333613738323863373630 +31386230313435643138323831386562376639326133646164626638663064343536653562316630 +30306530303835393437613763373634313564613937303630653862313562353835666162656336 +32393536633162313563613736383638303835376438653666376162333466376162643461346664 +32616431303235663139653963393931313762663135613064663239373631336633653663613939 +65303761663366323664663939373638313830376337666264383935646464373230303164343366 +36633934326262363538343764616431636165636532623935386364633464323561636137626431 +37343533633331623734376661303862356665663062356132633136623166356432303462363539 +65306137626664656361636366636639356665656361336334366239656137636531313363313162 +63653533643532666336663163626266363339376364366638663332363332663565633939343864 +39646165353331653264393961396137653738323161323937336435393938353862363337636266 +34613139646230356437646365613335373261663831656132363363336365326464316634623134 +35353337393531346236383536336333613366643765663635666337653362343462393566636638 +66323732656635646338306363323865626562326561613034326339613333626432303137636335 +37613666313332336164326566616639636231623833616463396336386130663937336530653030 +37643633636434393333656566393238386366323537656533623363643331356439333436656339 +35366536393130643930666464323164323335386537366362613063636534333364393562363532 +38386564356664353961613462613266623830353335643135646533393339376330363030363465 +63656535663864626439343433623666663532383337343138653132613938383966396533353261 +31623632356335643765643831333432393364393261643539633237396333353061346435346631 +30613236346530646439313966626435323861623233313036316137663531313462333965663839 +39333439303235313037353833623362333130303437313239633936633265366434303732623962 +33663038366665613233383930356538383330323839316464306131323435393537353431333532 +66636464303730313436343166393937643234616433623166343766393037626139323363616565 +36666335646235663063616266356166386532376438333263366137616465306364623335626464 +62323863616664353134663632643437656262353537373832613266623135333930653763626635 +31373663663039613535356230396433613261313566656339303839376530623636666364316162 +31626166343438666538356133643031346337623734646630616463666164316334626165363563 +30666339646430663038393335303936333966383165633764653234396239626363343237303138 +35363761386661656363643865653838303732633563646461656261643137623364376562616463 +39646532653466306139613163356231313836653162663466366661653335323964663936633830 +38636336666538356439656333336137316664333432663361306631343637383461326537323831 +38303734393061386230626565366665303539353139316262613562346330613030336432366238 +39323463313835393362353231326432663563626461383734343463346165636135356530393539 +61376439356664323734646133383864363134616434643934383536666564356461336362356465 +36343032356336333830396530663430306330366466616638303936383761656137393265663039 +36346331323434663033326662373163306234346238336338666333323138613035666139373538 +35336536313332663263383634623465623933396334343533393264626333656433643133663736 +30383865613162636633653564653461646362643135636566316638363465393533373664626336 +63336132616233636136386166316365316437653433393034633065633238323734656130363264 +64633962663637656535643232346436383265393631623735303165656662663466393366613239 +30633833356266313661323832373862393438643439373234363462633036663961373835353138 +61343064353161666637303862656566316563346136373032633237383466373835336633353164 +30386465666261383538313664326631313230356261393939336162656136353832353839613335 +32383333386632383730333237336133613136326336396331396361326566366463303334646235 +62306363646530366636313538633062623135333132316530613565306464346261656432636165 +39326335636539633366313930393331613361326464326165366237623364633734643761646262 +33323632666563363865363561343132343861383139363138373937383866613162643937393034 +64626566623663623630393234333063336135363834393839343663326630323038623835303561 +32343836663562303366373564356334653162663236363266653539663937633866383062343962 +33373437643265646633623538396238326365646464626661306333373261623535316636396463 +65653766626634373362616133376334666262633133653938326362373762633335323934333533 +61396164653464663266656435653233616364366639666163356134633366343333366136663162 +64663538633462393634643937373763316437626165373934356161383865636437633934383766 +33323634663263613137366530353430323663613363323930613139386262343165373066633264 +38663237633133663435653937616238333664393461666238643238396139643564336561376230 +64653366323639643063343136633937383637356466323363616662336435383431626335333065 +36353665393231353864353930383737646430393636633561316462623139656365333439353334 +39643565666561643237333731623035323164333531343261353537303530323662656561343337 +34303234333538303139623539396666636465346565323939353538373333366162633032316235 +30306334366666363036343533353637333634393532383266643666653166643266656137633766 +31346534623765363833666137653161333936373937326565393630313235663932666232313437 +63623862653735613361663731306266626566616233656539326435376536363538303938386437 +62613966363332303938666465633235633233643465353533303764656632383833636332393435 +61363961366338376261353061616162633133653761653233313432363130313330636265323131 +62343533643465376332663939613965633438386161643863323630353464613733376630653936 +66316238346266663130653762646437666639373632616435333062363366616564303962306662 +62373032356435653031363364663861363432363239353937663265386337303931346665356636 +33383736386233313535316462623636306432643966376533363335386433373036363635346233 +39303762613335373332343166303835393863653933333163613836653165376162313166393933 +37613361646338663137343539323466666338376565316332613464303632646333343661313030 +66623866353031306466626165336161383764663436613537346635633837303237613666333139 +62626535653563373065623439343732323565636137653261646361653235386633616337353431 +66623262383566353930376432373939323538393537303162343738346166623466636361346362 +36616238626361663963373465383839343464663731616434383935303837346431373363616363 +61326431343565386165343031663263333564386435343363353035393937373362356136316230 +62303339376230313365343931373033343165343736303934306366666162646433646135663363 +65353432336233306136383036313332386531396133623563306630656233373436656361343733 +31636136333962656663653061363865303161656138323138376466373861613465666366363230 +31336161613830383764393232663633663939386430356162636362373466373965383636316465 +61343264366336386333656535666162366262303938356163663932616431353133343733363332 +63306166623838616333636530656462333835343861303639626235363966336337633236656664 +62376234373766653330373333643835316661386633653034636430363562386266666666643538 +62323738393433656665636166353666663037643566396537633233323538396433633234393762 +38616237623262333335336437666635633033353634333663653133643231326164303033313864 +64633363353632366137353863663739666437613661656230393137623264663631373135373539 +38326334306333616466626339366136356532363135326364363833343864636636376638656562 +35343865363561383836646363353739393266326330333630386133393437353139396639396466 +66343737376135663435313438623930376437313662316262646132626339666631323234613637 +66376464666561383530346463383036633062656338326436663230653639333530313061643531 +66656631346566366530613063323930346136616533656661656630623365386138383663643139 +32343561363364633138396361613762666338356265303231623938663832353266626131393037 +39663132313662316339373163323235616161333231646661613565343466333663376562346335 +62313636393338326236303537646233363030393362363130333766326230353961303735333062 +39323634306161626134383831663566396233366331346337316562333963663964303139373438 +61383639646338336438393537376130666434663733383637336561353063616535373139336238 +33343163616461336362653565346265326539666539373536663063316130313234613836333430 +62366163396530316432613330306632633637636365313031616162653161343065373239363237 +35366136666537343430303564393535633235363166336137393532373333643433366563626663 +63336635623431346632313632646134346661306337653163396237363734393236303363323030 +35623636623638376566663363656362363138646364623437386435316663313861393362353439 +33636633303431663065393165306162663636323563316161643834636132386137656230656362 +61393737353731313835326136623461616539353064353166663633323837616535666531633762 +66356131643636356365613231326266313532333632653962636165313762336464333061613663 +35313936316437346361336131333762353133343264666132633531653933646238626361333831 +34633636386237336665666130306663333566316235643566653032386539303338383237323566 +31633066323931626236646133343739666562363964366132343162366563396361303061623664 +37393235653565633531313632343934633037306335626534393035393333386239386237313534 +62636331303237313136386634303136613939346263653362643864633034626461636261363032 +32393836323338616633373037353563653034316362623339626138653964313034336330333664 +36333962633636373537376565396638363265616238306134643434663835303531333631633261 +35303237396435336664613335386534323234633138613964633331323165396163326162313563 +62336633393231333433616164343633363865373238393763393232376331626635323533313762 +36623936653231613136643163613235376439666538333038323433356362663361623334616236 +37376338343363613735396132646261633130643563656238613163336635356434646134366534 +30396430643939373264396332666662666663633565356432616333323735333038323662646163 +61366336393661386532343537303561363062356639633363323163373136353064323865663539 +37353639303835313830303165366162313464306638626637373530393336383165613261666233 +65313839646330653430323734356433626239356339323434376438313034613866306537616435 +39386263306565393734346330623564373963373634613834666465393339326430393734366261 +35626563363539373337373962323463646333653239643133663163356431643538666166613463 +32616464383034396364373635623339643735653831373431336533313362663835636262363363 +65306330333165343063373966633335666330363963623336356666613436313065346263323439 +35323538636439313435313661376162343736633662393530326662616265396638646339363736 +39326634343364373731303138303939663163346366636538306535346463393162313330663665 +36613635613736356137323434626666646131316433356539306637623561383836646566656139 +62353438343730663939636532353461353831336230306336633261666431373962643663643563 +61333965646139623137396361326266343239343061366161336162663634376536306336646538 +63306135656463623338393266653330366136643935656139666531303365616461313037353063 +61386464623066313031363330323339376631656231653766316532393137646532623333633766 +35643061366137346566373064636164633664356365333163616136383337636236336431383030 +36333264393066323130623630666133623664656237313662363736643132316234363239656663 +30366532356361356438356164376161643434636631363034613765613665653136333462626361 +61303237396564663863336138383432396433663533353062633239313136633165383065643738 +62396134316330363663356133616232313939623839666464613231383832396539613762626466 +35666565633239383663613536336339306637386336616463323130626139373831643838623163 +63663737626264383437643338656438613564393734626537333365633130393639333763313430 +62386239346163356335626536343936626562366436613534623137386430326537386262643834 +37353663646533653863333434346635643039623337313264353033623664363961656462353030 +35633334313839623339353364393039613130386261383464313365346137303037303062646164 +66623463316366363363613934653661306439336165636463363433393132383334323361656264 +30353366306365653736383030323631323932393334303261346330643164653033383431313262 +62383836633063383839623564336435666366613937653465316135666565623538623763313262 +33303462313131633933303333313830646434636133646239373931323364646463313931383732 +37396633333534336231353662326465666365343962666437613535393465633435383239363730 +31386139353330316536346465376162383532343131346636343765366461313232346164363730 +32333534313061326535613763653732393236626133336530626130303238623635343666303135 +65316664656339346437613536373930303834663737373035346639303939333062666565616565 +31386562626533356333363233383561663139366163356538343730653465393561666564393563 +64333639316332363730396131303537636130653733666466363235633638363937333831663137 +64383537303736323237396332623866343634373761306163356363346132616331636663653062 +66333933663764383835613430623864316462343965323962363537623137306564363739346466 +37323765353164393339626166383536633263653331383831333163376366636463303030353934 +31393062343831333165313664376531626164613439646137646261326530303764663336373833 +66393832343462376436613835613132633833643032303336663162303666643434313938633135 +33386436333131336266643462666131656134643838306336343236366534376133303036633335 +34363032633738363663363566346235346465386338316364663061643330663833353331656362 +63623864323864623166383439363663353763663363366466656334656534613663353834336338 +31303266376138393963383430623138316538326138313633646563343837353633623465623434 +39366137393666646264383038666439646466393635323533333534386433636233373034656666 +36313965346135653036653239346238613230626632386564613664303866663737396339313835 +66626563373537323834663062366639336265626334316433316536323132356264313934646536 +38363332376437373031333333623133333732613734316439656562393733656436333832333837 +39633033363861323030316465383930626566323836623535316639666336663061636662316532 +31666630393436376535613261343934303439396434656130313633373562663265613263623865 +64663436313966373833613437316430363532633936376539386466646335656463343535376133 +33653966616362383237383961303663653038373966383530316262636632653635306166373231 +38396162326663663862636131663932326663656333383936353961636638383837363464613464 +65343839666536366362353039313661363135613734636538353134396130363863616337326239 +34646566623264353031343031306564323766343862376364303039656162343761353235383332 +34366530616134643939366462383837306135343163316561343363383030666464663232373465 +31626266333731366462336431336333613435386135646363636565646530323665663631393139 +35616662373336373634633561316461383062653765333932633863643664666164623331656234 +38316632373965356134643530333165653561303234386137353935323366393938613830313239 +31313832303332326237636161623461386266326230303831323038393236336330386462616438 +33383734643231663631653134326265346436643435333439316539376263626231313533623734 +30623538666465303264363033643737353536616638373738323961663830363532613032356131 +63636664306538656338313432376364386637656163633663353432323662333039326133343438 +62666230656432373565616338636338306535326639346466343863313863316133303234303665 +63303735633663343465343265623536383835363139636136383934646238306237316436366135 +39656136396432666165366135303030396666393434303635363261313337353430333238636334 +36333134393739633135313363346264316463356365393162343763653338393230666630303931 +37353237346331663433653266633137303065323534353461333235623766313533313866393462 +30333462336237316131646635663333373632346263303164316566376564393932343237626138 +37303766373365306130303262643632623632346465313065613961373835633738306237616563 +37663637373565663631643838613737626537613938373638373535396632636462336563386230 +31373334343238353266313563633162323635336561393835333530343736633932643431396434 +35323466363230653962616364616561353432623334306438333137653962303563313236653939 +37376561383061313664366230363166333335666363646338633736393833373232313061616130 +31393234306163643466346634646331653339643164336436386237646562623437323966616237 +31316234326236656636376236333363633262623437663133316635333766653832313035623233 +64363461643362326163396430306237353863633063373766313836646261623639363066643064 +35323161616462373930383330366235396164346433303238646530333261376234303633626266 +32623231386465363336623537626164643239616132303865636566373264623033336535643465 +62656162383465343966343834653765306532313766613563383264323937656338656362333833 +37333966646634643232353335336463356234663036373762326135393032333163353232373339 +34613434306533383536653264643632326565396338396439663832306462356364656335633665 +66366235333738663466383936633336326137393936323466626634343763393333316435343531 +36626366656137373565633965663233646237386130633630373933623834633530336436653563 +32336439306233623832653732316237333933333237616365303165353332643862633637346665 +39316366303933376133366665303963653834363636353664616266613231303337303366616661 +36373863653265393234373765356262346664343533356437363134343637396264393238643032 +33626539663330383664313464303033396430326364616533646661383634336437333435623231 +61613864333733386138616237386237363966643166653630616562613865633234393034663238 +31383361623538386235353363343164353065346634653532323933323134323735333731333064 +66303364666637303830343032373430626535326536633362363765323762316630623566663530 +31373765376233346362323133363261323031623739623765653430646334363439646562343039 +61386361303830646666373638343362656166373233396165653536396139343533613163306164 +65343766373164383638656136313137636436393633386536326435616131363231376538623639 +34393733323834633731343032313663316135643933336466366664666136386464326133663037 +62303233656632616664373064363666633736303366336438346634626439313962613662376666 +62656162663233323137316533313337353237343333666664366132356332323334646661373432 +30616666393837666233333638646331646632633734663933363466313465633961373831623937 +65626435326335303137393065343765336630393431316364643737303262333334623262633032 +37316234633036636435363864656535333961656136636139353161633239336265306362363236 +66646531323030626536333766343534623034313533343432656136306538663632396637346433 +32333738616466323465306162326264336665333262626663336361613633306262363334386430 +34336565343935346132376664343730326639636264343336376236393462383432626563626562 +63373161343064623539623039303235356134383363353736383261356336613365373737623939 +65356337353839303030636565643239326461366262643662363662333739336436643933333866 +39393634616436623366626462353363333162623266333665623430373633376563663366343566 +34333162643333313365626561653762303438343663643033656434633736663561396464613437 +30363130376465636431626232656562386233633639633066383030326631613863393365616639 +38663538396636653966333239653930656163333733643339333334386335633337623834613734 +33613964353031396237353531343265376664316163333861376534643861313762323766656663 +61656337636565386238623736316330373335656363626566636363646139656237613964386163 +66663738303137613631613639656363613237323263326635373861366132613536623438313335 +65353761393335366438313635646664356361383432363237623533323636633831353062366637 +35636631613531653464646164643164653762346633633339333434333761613463316238363263 +61623037623761623036393438343764363939393766313261643337356366633834363839643362 +36316664653065346439373566633534666434633533643036653037623366313538326566386234 +62356436613561666135313339626163613663353533653264373863616562336161336637346637 +35333366613332613737363965333366633932343830333462383130313164666335343366613632 +37646366326465316465663635653036666437633533333337323362343139366532356361393834 +32306266383065333565653438383565646136646164326439643737376163386461653562366130 +39616439646432313961623836613161326539393939346431323832663630363638623838333833 +31643532656535303932313132353662353732356238313561393862326530353561666364633664 +61626634303363613361653534666639376136303836623630313862356363333664303934663335 +34653864346265633163376462323963373263646633616232343665343066353762633262663136 +34323737653032316337663865393832343837396565396633356538613534616330393464656435 +64623266303134653534326334363862383165363235303133643531666333366166653463383437 +36656365633262633333353866326436343661383338663261343631666331336430333631336635 +65373638633632646230613130336337613538643135653339663930653237666436656162343633 +63396261316631656664336336393130376332303536303533643165386639323433626437356334 +36636539616132323362356663383831303730343039323536326164383031313164643064373035 +39316433306562316366313361643037613630376337343338623239383239653839393630666366 +65333836353830613763366665323664393137666439616264376161386635303834353965373261 +33383731613964643965663534626336353339653338616163303139623865326134623832396335 +66396134313333613438656230376265393636303731363866633962643632393861333161343461 +36653565373538643031353061323439633965653337326164636131383836383866323730336439 +34373661653661303532616138613535643534316533643563306564336234646335633232373833 +38616230313535643338356137663134333064636261613434366131363762363038636437303763 +65326430333466633631383431373637653863656331663534653639376630633534346161663664 +31313535303438623966393961663530346662326236383164353638626564363235313930666631 +38303133333834373334326162306139613963363233303732303464353734366433316161383936 +30646330316163656336623634323834393136313661373333666535393335366666373266323538 +62376138623938616637663364366130396434333565353562663937363937616466323239663136 +30653761626337303861306133336230336437383162313364333333303235356434333038316635 +31653832616330363438316638336335306536663764366439646562393363656366623563373333 +38623835303432653832393835636436316561333735356566346535616164313539356561653731 +64616561373564363766323862353433383433626261616433383035646666663437663431623337 +30666236636437326363393435386232336237316535303334616338393439666332323133613736 +34616135663930366365663266356664383064316338326234393463356661336231636262353666 +62656261626236396434306334633462313432613434323636393164313733393938333638323137 +61643137616231616264663638333531633433393764373136613632623337353231663038323635 +35313662636636663938343432613465613039306530343561613264353565373734336165306333 +31383061343336343364656566643032643133636233653230353461666632343839326162636439 +39633139653837376161333661643733653034303861666466353439376438353934313335363966 +35323065356639653039336563393631326262373632386432383063356534666231386534636135 +37376263646263303637333137316532633964353535376464623537316238316265316535383363 +38316534316635656666623334366430333130636536613365336161316431383535346136303037 +65666433663263643837366435626138663563666661663065653665643932343030386262643939 +32353934663635346133333532383637663830306139653164336237616538343662343935343932 +32373365393530613832343230666633306135383366316530313962353863343666343761316637 +66643761373931373030383038303732656234616636323432626337643538383865663631653466 +66616161613332356134343662373833323064306631343966613235393530666337376638316431 +39383234623133313463306565353430623830623661636666363735346637663539316665343531 +30333166643136653536663035363037333532303831316638336162616663626130346262613535 +61613231623936326665353631353535653363373264366132316130313039353434313736343030 +62363765333065366439346462646366336136643139396133326539376633336463356636393361 +37333363393130336435343537363937353132343137363465643730383261613832343432653336 +65303036643938373961393331303837373766313532626637393738663437353235386166346330 +39616239393631353561356663306235626565623234653661343037636532306631353464333365 +36386431373066643261313637316634373030653666363737323964653136653836646434633936 +62393837633266633564383264613664336666316334383134663931376630663834376663353737 +36633837363364613431313062326139646534303934663764653732326361346466353234323364 +39653537323039663138616561356432336165326537633635646265656230316136376132613936 +62323532366639656132316631633566633831363737336233623336616638613130356261383838 +31616464303433363731386130666132373138346133373138373838316235363230313438303338 +30643661363061356537363464333136653566663565656563323561326332653466303161303461 +37313431396461373833646439303432643961623533376335313831633764613030653832653861 +34356464396431386635373962646263323764363961333362343838633335343365306338306533 +63353030323633613637663233323765396261343132643161376365346266326239396664396166 +65323832656566366532363466396465653232363133326632666364616431643162666662633230 +65343135633135633331393733613164383036326666396535653938336332643838373865323238 +34353962376533356263636266313561396437366438303632336538366366333662663633363330 +64613366303462616235653462363862323637333063366565393236343735386230613233653464 +36613334623934666463326266373532613434303036653963636436383666353462623031623064 +31386238323638393361343465633532333665313434623335366462353737333639396334623764 +32356665343030663332383432616662663766656262346133366264653536613439623436643537 +62343336616164326436316236336438633236396334313035376236336130323430643461386361 +31396133323132336666366266663562323062336436303937306239633437613365343739336562 +33356232653033336639666534653766386364323962393862346432626239633165633161323733 +30353235656564393139626535616363616131356432353839376633316534346536333230326139 +35396462663735303632313366636536376665366137323863626264613835356238383933633535 +31346531383033333237623738333264383033373066393462396333356338343266323736326430 +31613066346165636536343839343436633034313061633535363034653962326537323132393930 +63343139346366653562363537343038386533303363316165636261393433376435343533353962 +65346265383463636438626435636134353231383030633239343135356239633538616161323038 +33333633353733366462323632373139623366383334383761333761343135646239626239626662 +61313934383132663937353733303234313837643765376230613334383432393431396361373761 +30663134663864653334303862376538356530373164663261643666323530306337366430343831 +34343562353862383636323765626665613232303532306166623331363536303032333163303962 +62323734313164316635333363333335363138666230383465306262333161663339623735663930 +39643632613361623333633664653338323638336532333639646233326233363336636635306634 +61623533393162666362303938613164336230623933613236623363323562333561366163306635 +39343365303866663339373132663135383635633930383938613763386237393430623162616564 +38313337613937376137303736313964383866353234336232386532653961306534356130376265 +61613631613033626366663132616436656661633663666431626634656562656136303036633566 +33666537333532306233636338643336373231613631363831316366353664306361323338336665 +35323237323730663661346162353238306135326639356134653736326366666563386365373536 +35303538383331373661366133623136326261656335363138336463623766336264393164653039 +31386562653938336234363432316138623662396266376663363661326463656533653335636362 +39333133666538343132636563366364666132383666396135323861353764393138646230633263 +32303631373036633438623037353636336331383864613232346432656161623463396465646366 +38613736636632666336663536343862313131323031343164353637316234616131313665306237 +66323663326632303865393739326238373162663962353733666432363639643030316537323965 +38316361386363613663643061396135313539323939396561323263393339383735656165646438 +34663036376163366162346130623337613965343033653834656339613766326536313530336334 +30636639383565663266626332383832366264353931323734653238633034363365626337653162 +39366662633838646562366138623463616436636563323466636137333934376363353331383963 +66333932613361353364336434323865363739313230303364663239376232323431643434386664 +62343635386261616334623630613334636636303436633066306633303238373066393033353936 +35636434666564326162336464363833623837613763356666356561373731303961373766656665 +31623865626564343737313135663862663462386637626662393831313035613437623936633761 +33346161303630333136336630326638353830346334326463653133386162323965323133653231 +63323534363735656538313865346437303664393230326431313233353832303334313536643666 +39643561303735303034313539613461333835313533356662383661313236323336396463613834 +35336363393537343234353266613639303332363338303533613166363061393464333938323030 +30366166623265383961623339633866636634356335323831313131646364376232366433656635 +32663433663738376432366336373564663561663563346362666331333537326466656630616530 +61663963656338363033366131636138386337623466323432323565623163623738643932613636 +30323938363030633237353430346333356461643062366663626462313132646439343833653662 +33306637346235373738613031386134336137343263363838393732393064353730613063363630 +35663838636262626432313837666535383536613133303235376530323139666561336536343438 +38656663366630626331323530343566313636636131303763386538393165383561633762616532 +35306563303431666539323637626632373963643165666437363035373130303761383664386636 +37666531366136653263343738376464653235356236646564616435626637346366656332356531 +31383061326338376536343138303462386136353033643365343036653333376333666130303132 +33346564646164653061623930653562613938326561323134303034613334633432633835323338 +32626231666335383632313835323934343833373435386538656664383733353139646565306161 +38353337616263323561613135613536626165663936383366303133393139383633643965386262 +62623637653036323964383736636163363238333461323337376236666263323135653731373635 +64303238346665326663373936336131636263383063303563346466663461353533626434643235 +63666336343064353138613464643465343734376634316166303765633461346136643661616430 +65663037376465636364316636323035373830633261393437663834643037613134383338366432 +65303134643966663165356461653965616263643732343539646461633938656139633635613531 +62316630666330643539623336653138346535656237363930343166356633353931656231393166 +64333438333530336465326330613831656330633463356531653161303365353333366564393530 +64356434333532363962393337626132613630623835383565346137353565323135366137666437 +65303361613765306639393037356632373832666238366332666132333962646261623339326533 +38376234656665623133393337333733646132356561356232366661396465356437306339303666 +30653935623537666166353465316534326330646261643665643533663034393861636365666439 +31326234633030316437313261366564616366306138306564656432626533393463656563336331 +62343038633230633636396531356665363061373335386462613162383135656639386438373639 +62626432383832363534326364313135356436356435323537636164396634643662633564333130 +35616232323733303235663531393563613133326637313935386235393430306233383061363061 +61373635356266346435336539333262663338616631633534343461366662643064646561343062 +36646563366233323238356263656664336466643533383263323165323932366232356362636233 +61646336313632336137333061353765363036653336363462613762636361333933303965373934 +65643038656266636339373061376166643764373336643437383864613637343533633831323036 +36613064326134653566356339373537313432366361336363653264323233366262666438323136 +30396136643161633166356437373837636635386237373231623535376566636335643332366432 +63646135363032343739393263343430366134393462313134386139633663303337366436663232 +66646431353434303336306632346661666535613730623263353338316630303433663030636133 +61373135383664623938323563646362376330306430306661393562383833626262373734393563 +63616466383063386234306634633764636136373161663437396365616463336130323136653566 +61376466366136656435636235386330313764316534363038386663383834316233333265383632 +34303461653734303065336138636365326238646438343031383535383435386233356361343764 +38663835323431306166303263386138616565616435616137316634313832653333303537626566 +64613335656431623464376261313362386331316335303762366337643038343763353665353163 +38383733616162366661306566666531356162663136383065616632336232343537386337353332 +33653137323962353438613766363036633166306333303133303937643432396663613338306265 +30616266626233343262666536356162653939323835396665393963623962303835343237396639 +63343065323531306239363364336461393363663037616464666631353365313939646163393436 +39656162613436376263623035366636323436343638363338363164346534366434353737663866 +36353236373362623131633966383164356132363936643131373064346464623264323439633835 +39353866356264386233663132646662316462346662346566666230333339356264326233326330 +32373265633337623835313036626439666664326261656133303036643664393565393331383834 +37366339646530383734656561626337356431396537616638393632393431343363663739623263 +37373235653235613036653537633438653532623132656534336433336634666237633937653733 +65376131386166383539396139343438626366653831306638306637656565373235376531633838 +65356139653031373437383531663730333237373034366130643331346136633239353633326539 +31346530653932356164353030636562383934643532383066313565653231386662336333376565 +63306532333234393562396262333164616435366366336538393164376331326166303963653862 +37313666386564333662626631336366326366633637616363626361663538636634643231373735 +65616637353539313564386332343633396565626637326237346636356436303263353966303837 +63363262663266343663653138366362636233343461363266666633303737343964323432373366 +64393930663030333833653435383435326235616363353736663634643338353839336565663935 +38643534393364663064346330363866633663316530326362393531656638613530656461623032 +64366639373066336131313665643965316438303235336338613639333630623966346530626366 +36633862396662646562376665663365313332666331626461316638313663646134326337353336 +65656564393139323536393161616335633032353366376330356531643166333536336534663735 +31363539663461303733373065633637663435333062356635303564623134373264653335393464 +33363037623962616531373764633462396530396162666432653834316538373631343430633238 +36623163396131353738643234366663623338346536623936383964323738346661366432646639 +63343964656663613162383864323365346538376539653664396632376535323065393739386638 +61653932316439346666636436636235653532303062663864383437373839353532343263316232 +36653737306432306336383461383636653638653162646562656637336535333762396439633865 +30313063616238383236386336623035616235653133636135373039353036303666393462623366 +61666366646566366531323231613135653435393035663466616361346332383536656536306364 +32363330326466633239623237333364323664373836356564393034366361373363663365336465 +30383265303731323565393538316633636137386633313465343466616561343431306238373138 +31366134333363393462323065303837313931646332383831373138663439323933626436363935 +63633131323233623939333163316533613631636430626231363730616138306335393162373165 +62653363613034393562353734366365373332393930376664356436303330356334623762323430 +66633265356133363936306634633061336461333332313061663463393266333961373637313938 +35623066343264353662326130313835646135393233326662666536363962333961386238396637 +31306366333961313364646166626666666431613962383032343938393463303330623137623064 +36303138666535346432303566323133663535633330373835626130316335386666633531353439 +66306666666535643264656337323438383762613462313461303435396566343564363639303738 +39616164663664363763323961343861333139663262653836393866363935373461633030393738 +36323332636665376437396131616263376430313533653862383533396235333666313865383462 +37373731633964643435373732383765653835653433666264653230306166633031366461613936 +31333436323333393063393435663737333538376163373263663137656536623032653336373230 +31333163646139313534326639326633613961623361643864613038333065626330303363303331 +65653464366634343261663134613164343661643436333639373338306238643361373336303464 +39643633626333343464393232636233363336666362303963383031623730353237326132343966 +33343362366338323036613266353630323666326432376363643337333235626265613431336165 +37656230393336306262633730356233633364373764336638303033643438616566356564373030 +37383366343237363364633431386561353262313133656638383639396230643834316665396466 +62386137303566323734386337396635303630373263653932333365316261616561386266636333 +61346366363161646136303538663764353339366235333532373766346130653764366262653634 +63653065373539663037613338336164373935613530313238616239323430336663 From 857b834232a4e7aaec1e866ef504f03a42560d8e Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 10 Dec 2025 14:34:01 +0100 Subject: [PATCH 49/73] Fix NETHOME detection issue for examusers, staff and parents --- roles/custom/fvs/files/lmn-patch-dolphin.sh | 11 ++++++++--- roles/lmn_vm/files/vm-run | 11 ++++++++--- roles/lmn_vm/files/vm-vminfo | 9 ++++++--- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/roles/custom/fvs/files/lmn-patch-dolphin.sh b/roles/custom/fvs/files/lmn-patch-dolphin.sh index fc3c0e7..ca7efc6 100755 --- a/roles/custom/fvs/files/lmn-patch-dolphin.sh +++ b/roles/custom/fvs/files/lmn-patch-dolphin.sh @@ -16,11 +16,16 @@ fi id="$(grep ID "$file" | sed -E "s|^.+ID>([[:digit:]]+)/([[:digit:]]+) Date: Wed, 10 Dec 2025 15:40:21 +0100 Subject: [PATCH 50/73] Restrict outbound traffic in exam-mode --- roles/lmn_exam/defaults/main.yml | 1 + roles/lmn_exam/tasks/main.yml | 19 +++++++++++++++++++ roles/lmn_exam/templates/no-way-out.xml.j2 | 10 ++++++++++ 3 files changed, 30 insertions(+) create mode 100644 roles/lmn_exam/templates/no-way-out.xml.j2 diff --git a/roles/lmn_exam/defaults/main.yml b/roles/lmn_exam/defaults/main.yml index da8c198..fc97945 100644 --- a/roles/lmn_exam/defaults/main.yml +++ b/roles/lmn_exam/defaults/main.yml @@ -1,2 +1,3 @@ --- exam_mode: true +exam_teacherpc_last_digit: 80 diff --git a/roles/lmn_exam/tasks/main.yml b/roles/lmn_exam/tasks/main.yml index 0e3bc4e..aba8b29 100644 --- a/roles/lmn_exam/tasks/main.yml +++ b/roles/lmn_exam/tasks/main.yml @@ -50,6 +50,25 @@ - pam-exec.sh - rmexam +- name: Append teacherPC to exam_destination_allowed_ipv4 addresses + ansible.builtin.set_fact: + exam_destination_allowed_ipv4: "{{ exam_destination_allowed_ipv4 + [ ansible_default_ipv4.address[:-1] ~ exam_teacherpc_last_digit ] }}" + when: + - exam_destination_allowed_ipv4 is defined + - exam_destination_allowed_ipv4 | length > 0 + +- name: Install no-way-out-policy + ansible.builtin.template: + src: no-way-out.xml.j2 + dest: "/etc/firewalld/policies/no-way-out-{{ item }}.xml" + mode: '0644' + loop: + - HOST + - libvirt + when: + - exam_destination_allowed_ipv4 is defined + - exam_destination_allowed_ipv4 | length > 0 + - name: Enable login script via pam_exec.so ansible.builtin.lineinfile: dest: /etc/pam.d/common-session diff --git a/roles/lmn_exam/templates/no-way-out.xml.j2 b/roles/lmn_exam/templates/no-way-out.xml.j2 new file mode 100644 index 0000000..7cf782f --- /dev/null +++ b/roles/lmn_exam/templates/no-way-out.xml.j2 @@ -0,0 +1,10 @@ + +{% for address in exam_destination_allowed_ipv4 %} + + + + +{% endfor %} + + + From 51ae283d6d210dbebaf05e98552ba3fd28db94bd Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 11 Dec 2025 08:23:28 +0100 Subject: [PATCH 51/73] Activate outbound traffic restriction in exam-mode for PCRooms --- inventory.yml | 1350 +++++++++++++++++++++++++------------------------ 1 file changed, 681 insertions(+), 669 deletions(-) diff --git a/inventory.yml b/inventory.yml index 6064103..f7c7e17 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,670 +1,682 @@ $ANSIBLE_VAULT;1.1;AES256 -33636638343837353766643061636131313737346236383064303437323461393463653438616436 -6134626264393935636139613737346165646266653162330a663265336539316265356332633036 -65613034333232333463303034336633343832316263333730666437393264386239646338643663 -3766623764656463610a326335336466316565313130613432383632306662313366643235613063 -30653935616134613964383766356466646465643464643763646463373733393764316562393733 -36653734376433373232386136613233626235363239396462353933656131353266666466626561 -63336637663361353361353764393137663264323532343364303932363063633237376165376331 -64616433666438616464386265616266356130373462626566303665633935383466333862323663 -64393933363136643165663735376438393865663432613562343239613566663437333731306537 -65313733613861313036383636333162613136633861303061303235393661366163323733373463 -61313864393131343063646264623562363333333564303864336335306635393335653766366530 -62363861653962613366303664363039613138313931376362386133363437383833323530343131 -38336435326130353462393133343466373537363664323264376266653733313331336463333165 -62366364383538656665613466346637303036343662313735343137643336353039396666313139 -32653765656438626235333261396262653861353363613633313463323562626330343066346132 -39306137333462646139366666333563636132653333623032383863333232663834353865633334 -35316138346538613661333862353038336463666161666133613133313132363365363362646664 -35303836373638623735393866626663656437343136656434653634643562323032313561663034 -31343362333666613435323633646435636534393261386366633731373236643661313332336439 -33383135613761326436363334663233653333633962633134626139353763363435396431643230 -63646238356234306432363439613538303537303935303930366362383239366164626663316436 -30616130303961313365333566666132313937306232323662333563353538366334623230373432 -66663932316264323839653332353433656332373533326364616433653337643864393338643730 -30666339393064353663613439666530386665653265306536333462666234313132396339396666 -34313161393733356664636338643930616433326339356366376634356564626235396337326335 -35613939373336663966646531313539373030313139386538323031323165656466633632396162 -33373565316633636665383430656337646665366534386436633530666465353861303961373939 -62656433316536323730353434333361376130363934663937333166303739633737343531306165 -32656666383036656534626534333661333362303236623137613036646433343539363537306437 -38306166336133663837353133636231663864333433633534663436626631633739303366316335 -62646337383334653430643439633236633535373961623332653338646331653765303130306264 -65393536356663653263633564643834393231656433306137363237383233386664353961613562 -65663938326534623465623066643861313865303866386430316663653333353033653336373237 -32376565623233383965643864653530363765646364363637343634353237656437633933643261 -37346265623534316265656330396438303531616432383537313737353435323037646265653339 -63316535336262656231343465313332323164376430666535623766663865383062343261386430 -31333833303234333735653431356435626632656561643532636132623532393431306135346337 -39393432313535613434643237666231333363616234376330663338326431663339356537323065 -37623034623139393930653865313237303535633865343230313937326634663134363761393339 -37333161626537396662393434393664393863643838633934316231396635343337653066613730 -32343232366531623366643332313734633761376537333164313635656161306233363136643636 -64383631353361366564623838333032653839393634646339613838626532386435333637376362 -64393264326137376264356233346138613639333831366565323937656330336239306366383362 -63396634306665316439353062396136373563393632656263633931383537313632656539313231 -31346434303362663331383163363132613631336134303061646663643861333531396633393863 -37383333326637333766633161363566663330393837326433623166643061616134353130643034 -34323837653332626338636563663336353733656334303432633263323334376233383762376565 -39323036396333616462663535313535653964646364303764323463623537343733393466306361 -38316565616664626164363066346361326162353264323434393561613038356434333238376638 -34366535623130663738376632333565646132396636633130643566363833336334326530626531 -38633631366237363434393930613032323263626430383331633165343665653063393064313633 -63633036333662636632353331303861393133316531323138633336363765396632303436666561 -65336332353830316239653939396365343534396338336266393566313463653163363735623034 -61623664653735383834363565396565373638316230623461336163313933326437343761366261 -38303539623031323362616237623261666465363161306332356335653636356130656666363266 -31623163313236303630336161626433393035313863383836346562323930656166366530633937 -35623139383331663335393331356635373265396165316634393434653735616133623363636666 -37383261363836303764613965623431366464613963353131343432633339383361663737326462 -32313331323036346163643034643566303638643734303232316565303263313037653662666437 -62623866396362636130646666313132363265303932656132383439643933393837303566313563 -64306439323966343434383634363563663165393436323865303134353630633863636336323863 -37663561373030356638636635313466346235633866626466383964306131663562313630623134 -30613765623762633930383539663838646438396336363731306661363863343065343635336138 -64376366643162396366646630633431306131393139633733326166316532386334306432373333 -36353835393939346334373831613536326133326538303730326136386239303038646366666331 -31343261356630393863643836656533336135336336373333386132666532333431656439663934 -36653866663032356163346436353638633061613130363366363636303533666437303636633231 -30646433643033343564303238643031336230346630353036373333353832636364353637373733 -32366261313738343562383537393263663966616464303863633464643830643537333539336434 -38666265643331323136326538613363656539333730363863623739616238643336333036623032 -38656133633233653138343664333937663265363062663238633664346465383565393365666261 -36616661343133646639326262363636343066633564303234396436633432383930383661633432 -32386663643437393264633662313438323362313637383832303434333632343533356164333264 -36386436636331306466643733373032376166623435373032333464393365313933393562326334 -37646534376536316532656662383261343530323664373061313362303939333563323462383766 -33313538386263386431623834313832353630343036303861663162333465313362343735643931 -62313938356563393534336165636631616131393131633762333237386364366564656534336232 -33303665656631386539356332633765376565396132333262626166353864316163393032363735 -63343734626461343065346164313961373762643536613465393363636132383564643233316132 -62333262333366366439346132343737363737333962313863656562623930396132366338653865 -35353239363439383632626230323038353061386266303936636536333231633163313537396635 -65633038343561633839623835666133623039393130623330623338653139343563363666303334 -32353936363764343136623739313831613738343238333263383232356161623732336532386363 -39636463386134363836366363373966366266313662346436623762386533323830316431646662 -65326664366462396266323138353563363463353563633662323730626134353537653838616635 -38653461316231313963666632326264373935633865613633333634656461373635393236363562 -64623232393762386165316538616237353166306239636536633263626532373635366432633538 -33643132663538653966323662366666613365623033393639346132303461333436386266363232 -30623635653834376137326639646362386239646262643864346631303262326662653763626365 -65373734373333663566323731613237313362373933666266613165393931626332373261396530 -35373438393737643531393237386166363961363464376262373737633034336565373134613132 -38393931353861366530626263653030366433346164616262666465643164613431616231346431 -34653933633430653665326538333763363136383233663636636135366662306165343330376261 -39623363353936616361363731643863643238653130353866386261333465353964336237636639 -62383732323263636131313763313262646234323566613430393134333465336461653963303536 -30663366386432323733646637636533313263663638623466663338333761353234376436643738 -31376139656231616565396665323730363537353763653766346633343530303730336335643136 -39636539313036306262313033376463383931666532376530396166353836373433306231333135 -62393438363338313437393433346139393739316339383962333662303139376539663962613734 -65656232633433346266653464646237336565616161346466646464326233346534373733616435 -36383832373534313566363437333534646463353830623931616261386235613666303438613332 -33396463346632613362666131626237373537623235303738396433653634613235373430663638 -64643230356334343564663262323039666462303265303137323830303863313964643436636462 -31336366383231373165633838323065636539663039623137663233613033333663396638313432 -63333133376462353236343834376165646361393361343939383061653037623135373561646561 -33663637306565323333653462386431363162386231386437633566313833356137653539616663 -34373138323633313733383732373038306463373864636565316462626665373162336265663463 -64613866303162363962303563346663643932636131613131653337393662383165303535333933 -31386364376363656433613362333638343636373164356133656131646230623939613735613739 -61643263646138356230326661326563366234316162656166396237383163333834393566303137 -32643135313461663662656437323632666461313338666234356437373062616362333961356462 -66396266646263313632613132656432303134383836393138306361303338353632343733363661 -37383462656230643539333530373739633030356565353736363233643765313937653531353839 -33636266626630376239366132346662306435356438336166633539626462663138666661373764 -66393634386162393333333161336132373565323233363262386531623063646562316130383332 -37383736666562326166316530323539386633313136303531303336326231663239363764663131 -36336161386233346632656633303939393064323037373534323663663836343838616334623566 -30663465656338626661316566653161393561663364653437336264366639396566663537663066 -61363865376335616636313333623938316231653165326566376531336335353631663235633961 -37363034663937656461373539643933343231396630386439363430646539613936653836383432 -33313130333162653434633166366334326433653933663131623837663032663735636538356533 -66633461306131343661336166333138383662626261333831373538373266663738616262643735 -64363231646336303530663232626537616335303762333238613731353338313764613165303263 -33316662666631396336363338616663336536373839353031613631613532636361613666333765 -62663437313264363263636436323035346165303637306165643465393935646534646631643632 -35353464323931616137323033326666643363326433313931616638396334303939666163633632 -38346339633763353134343531383066336437393033343361343535343331383232653432346366 -66373136663732633066653930313738383763323365646264383330393739663835623931636138 -35613030326539636230363261396439376338393831376234336237643031306363323538303431 -65323235613836396438396432353961356237316336663435366139396364323465396466326630 -36376439613164303732316533316165616539323761303561316330646135333239616634376563 -64363231613436373666653539623962366234656366393031373865336334383630633466326366 -63393837313039663662363330636230653830386435393037303432383137366539303936623165 -31653338383437323365363064376238636439306332613465373131643862313737646636643765 -64373263383435333330313131306662613435616432633337393234633135333939336331663462 -37643836386435363131306337356134323462353132303934633362356663623765623838623464 -66333131326630383634313737313239333863333934386638323433313166376266313135316161 -38356137373466346634626436343131396531613062633336343665323266376663656337396530 -65353138636336363136626632656635303835646263363032303431623264393764643636343733 -31366632623030643031653531393266316366383335336666373632373264373536333166303134 -39373833633764663439666235323765653138616365636636316564636466636131643965363564 -63323536636330613133373162343933633936613664373861323236336533663863623838326431 -37353430646664376130313439663132346365616631623832633536396561383231346636393761 -38393331323961373232363436646430663037333932323330323365623364366234636266646664 -63396331336237663361333962663765663365666338386366653262373234336339343162343733 -30623330393761316531376133643932303134326661316130386438643033363130653930306232 -61623261376238383032326362313464326134346663393339656562346562333537326138323931 -38626261626130643161636161663634363830663266616139376661363039316139346231363364 -35666637623939663435666533613334643939326462303038623062313934653932633739666363 -39306237333166386138636634306363656532333131383338376561313737656236623664356531 -65623832326262333533346635346639333239633665666332346538383765343232333735363033 -37313038316136333132323633633138386534326335373361633935373739323462333562643139 -63386236316564333332343763666135383061306334316332626631356662373434356538663337 -33646435336137373138326463666662373661636365356462373166326134333530333662373830 -30363063616566646238643535333837343337376438373033333832333866643166646335663430 -31613733386662363364323832613562636237386563383234383364616338653062653334363861 -62303335346635366633323562633537396434363164336638346166613966306361386664326666 -37343964636136636566643631393931353061323764316162623866353630656263353961666231 -33613038366236366562303732663936356361616564396565326530393662383139643130343934 -33663133646436356133343636306234613037613939393133626364613632626132616438613735 -38326636643664323236303662373431313662613165333064366334633739636330363232663734 -30303063323237663763346131636131376264316562363837353638613865633562306534343565 -31666364633431383164633361343962333730653461623335653732326137646238373763613036 -34396231376339663037653038396537353064383939613865373066383964636331636432353663 -61303063366265623564623639623633643062326537303433316630396135326338623834353534 -66636263376234633734363066626563633438366361646662313539363163303963303839313661 -30383263353635333637353630653130373433343461363733626233653935336366303937633863 -39353039653536386632346538363033393637353335376336323564393233366366316461633834 -36636438306664376130376665323839383566656532623132373334333262386663643935613935 -39333962656635316264613830646339643538353461356462616132613534663963313963623430 -31376161356361376238306536346335303662353630656362663965613338323562383463343339 -63373233636634626465653832313334336137336264313336663166653866633933376435343835 -32613035313934383761356261633535313730333636396334653333656638613835333135373633 -36393166643039613630393934626339656630656565653365623535306461353734653932623337 -65396165616231633234383433666233613065353164346433616462633236323233633931666261 -36343837333161303365303863363165646262663631623231623665306232663634643166643539 -36313337306130323136313332366635613935656133333435386161373830646566613361656434 -65366136666365396135613832386434393063643935363264313166396533336434346136313531 -62396162313139386665323035356436333863646138323064316232656438393335383239356363 -62313062323932353832366132323730346334363131366232653439656137316564323434386435 -34306466616566333432383032636439656264353139363564613738303734643263346139633431 -31323235383832376534663338623535656331326334663732316430356661346531613535326538 -62383633346261643533663736663166363831623133323865306239656432613337653936663136 -33646663626133333431346232343562323038346665633633366336386331623139626337613666 -66656331386463643661626136636533366439386237373162313164333635386636343963636634 -33613631343766613563336334643530303432633363333636363436373361333362623930363261 -33326139333937363836656661643461623735653634393461303361306434643133633061336432 -35343034656336303538376434663534626136656565666239633135343261316434323965636134 -37623534376633346466346433373861666466303735333963393561333031663461333439376262 -62666233333865663235323663323163326163363232666136393661653363363734346564316432 -61396165393364643534343066633961396430653031356238663061313633623034306333633932 -30306262613262636432326431623762366632386162616666343930363033306364313963343430 -39356461396535343366626362393434393030666138396334336565656536323737626462383763 -30343830383335626232646237373434323831326561336661366131636136386630653364613837 -34356339643265353634636265643539616131626330643766393435636136363263303261663566 -65323763383739316433643661646164613134323631336138636138383063623532636230613834 -32343138643764393336346637326637393964343963623366656238393436653637616431326631 -36343130363265393231323362333832376433393363636139613337616239633439636338346364 -32353038656630636361623839383966383764353833356466646133366232663062663261663562 -34613530326161303464313863306464653161346539326663396432306634306630663639366333 -33653939616533353264633035616664396363363930646165373437333662663136336363313162 -33396233306433386531386138316436653136303831303136313135373433626538386237396161 -61383331386636306532646537663962336336636537356636653961343632353361623633663436 -63653731626230613463303864306434623366353036363538366364636262633230306237383835 -64636266666664366332653434306262623234646630316464636661336261366434386463303434 -61383562666564373130663765666235663265353435323034343462393132396261383237383564 -64383832353335633063346138633061396431343664643266333035316639383664383736656262 -31666536363633383234366339383465303234643566383464626230363564653636363631333466 -65383430666566353531613433623763313663396633653039363862646466323265373733373663 -64323437323161613063336562383363373763363661363632366262363735303334373766663961 -34303038633339646430623833653164653930303636363262363735363566343838393635613335 -61333030303635383735356232313261653638303332316430356531363932623965666439383464 -38306431363864643932653136366135363933633061393565376664333736396265386232613938 -33653866666165363266326463376136653066646566633162316638366361656136643439653039 -30323763366633643931343931353862396333393939306264313139626530663264626137663961 -66653033373232656534303438396230336164633631323036363635363963633261313737663566 -66333530323039333031356133613165323438396332613862366562656564303939386631656631 -33636337303161366261666666386633353365333666373063366337303562636532383335343135 -34363963376663333135376263323730643839333338366332623564373632653965663134373831 -61346563646435366663396466346162336166356332376363616535616261306536323637353034 -35373464326262366332613330383439303037643862393030353535653065303434306463303033 -64626234356532623563393235316438616463626138613562613233343635313364323138343237 -64306235663035346436333036626566623937626539393837303231343236626330303139623230 -33336435633365373230666262376563303430666462383438663064336330356538313263313834 -62346432656165326633393761303563383462333165666438313334303031316235653430383466 -33383264316361326433333036343461623961636137313063323164383532666466663162653334 -30363336343263326331353863613366363062653936626430346566316632303633623262663639 -30323236643965346366323962666433353034633037613265643862346239636333386338663765 -61343238316165653934373031376139386166303836303239306663323939636462343731643830 -65313738366430346332363465633362643731656532393361373933626261303961366335613534 -35346166313838653930663335323166306639356633646239363633366230626536313531306461 -63646135386332616333393264346364343332346637316264633133383130646564316336626666 -62386435373961323238633666336239303164313161656636363530376135323266346164376463 -31363639363264346333303933636530623366623261316462663939313030616635366633376139 -33363738383363616430363866326437613965323434346434353161353065346133316337643163 -39663237656534613535623536623064376261623665656132333936653333613738323863373630 -31386230313435643138323831386562376639326133646164626638663064343536653562316630 -30306530303835393437613763373634313564613937303630653862313562353835666162656336 -32393536633162313563613736383638303835376438653666376162333466376162643461346664 -32616431303235663139653963393931313762663135613064663239373631336633653663613939 -65303761663366323664663939373638313830376337666264383935646464373230303164343366 -36633934326262363538343764616431636165636532623935386364633464323561636137626431 -37343533633331623734376661303862356665663062356132633136623166356432303462363539 -65306137626664656361636366636639356665656361336334366239656137636531313363313162 -63653533643532666336663163626266363339376364366638663332363332663565633939343864 -39646165353331653264393961396137653738323161323937336435393938353862363337636266 -34613139646230356437646365613335373261663831656132363363336365326464316634623134 -35353337393531346236383536336333613366643765663635666337653362343462393566636638 -66323732656635646338306363323865626562326561613034326339613333626432303137636335 -37613666313332336164326566616639636231623833616463396336386130663937336530653030 -37643633636434393333656566393238386366323537656533623363643331356439333436656339 -35366536393130643930666464323164323335386537366362613063636534333364393562363532 -38386564356664353961613462613266623830353335643135646533393339376330363030363465 -63656535663864626439343433623666663532383337343138653132613938383966396533353261 -31623632356335643765643831333432393364393261643539633237396333353061346435346631 -30613236346530646439313966626435323861623233313036316137663531313462333965663839 -39333439303235313037353833623362333130303437313239633936633265366434303732623962 -33663038366665613233383930356538383330323839316464306131323435393537353431333532 -66636464303730313436343166393937643234616433623166343766393037626139323363616565 -36666335646235663063616266356166386532376438333263366137616465306364623335626464 -62323863616664353134663632643437656262353537373832613266623135333930653763626635 -31373663663039613535356230396433613261313566656339303839376530623636666364316162 -31626166343438666538356133643031346337623734646630616463666164316334626165363563 -30666339646430663038393335303936333966383165633764653234396239626363343237303138 -35363761386661656363643865653838303732633563646461656261643137623364376562616463 -39646532653466306139613163356231313836653162663466366661653335323964663936633830 -38636336666538356439656333336137316664333432663361306631343637383461326537323831 -38303734393061386230626565366665303539353139316262613562346330613030336432366238 -39323463313835393362353231326432663563626461383734343463346165636135356530393539 -61376439356664323734646133383864363134616434643934383536666564356461336362356465 -36343032356336333830396530663430306330366466616638303936383761656137393265663039 -36346331323434663033326662373163306234346238336338666333323138613035666139373538 -35336536313332663263383634623465623933396334343533393264626333656433643133663736 -30383865613162636633653564653461646362643135636566316638363465393533373664626336 -63336132616233636136386166316365316437653433393034633065633238323734656130363264 -64633962663637656535643232346436383265393631623735303165656662663466393366613239 -30633833356266313661323832373862393438643439373234363462633036663961373835353138 -61343064353161666637303862656566316563346136373032633237383466373835336633353164 -30386465666261383538313664326631313230356261393939336162656136353832353839613335 -32383333386632383730333237336133613136326336396331396361326566366463303334646235 -62306363646530366636313538633062623135333132316530613565306464346261656432636165 -39326335636539633366313930393331613361326464326165366237623364633734643761646262 -33323632666563363865363561343132343861383139363138373937383866613162643937393034 -64626566623663623630393234333063336135363834393839343663326630323038623835303561 -32343836663562303366373564356334653162663236363266653539663937633866383062343962 -33373437643265646633623538396238326365646464626661306333373261623535316636396463 -65653766626634373362616133376334666262633133653938326362373762633335323934333533 -61396164653464663266656435653233616364366639666163356134633366343333366136663162 -64663538633462393634643937373763316437626165373934356161383865636437633934383766 -33323634663263613137366530353430323663613363323930613139386262343165373066633264 -38663237633133663435653937616238333664393461666238643238396139643564336561376230 -64653366323639643063343136633937383637356466323363616662336435383431626335333065 -36353665393231353864353930383737646430393636633561316462623139656365333439353334 -39643565666561643237333731623035323164333531343261353537303530323662656561343337 -34303234333538303139623539396666636465346565323939353538373333366162633032316235 -30306334366666363036343533353637333634393532383266643666653166643266656137633766 -31346534623765363833666137653161333936373937326565393630313235663932666232313437 -63623862653735613361663731306266626566616233656539326435376536363538303938386437 -62613966363332303938666465633235633233643465353533303764656632383833636332393435 -61363961366338376261353061616162633133653761653233313432363130313330636265323131 -62343533643465376332663939613965633438386161643863323630353464613733376630653936 -66316238346266663130653762646437666639373632616435333062363366616564303962306662 -62373032356435653031363364663861363432363239353937663265386337303931346665356636 -33383736386233313535316462623636306432643966376533363335386433373036363635346233 -39303762613335373332343166303835393863653933333163613836653165376162313166393933 -37613361646338663137343539323466666338376565316332613464303632646333343661313030 -66623866353031306466626165336161383764663436613537346635633837303237613666333139 -62626535653563373065623439343732323565636137653261646361653235386633616337353431 -66623262383566353930376432373939323538393537303162343738346166623466636361346362 -36616238626361663963373465383839343464663731616434383935303837346431373363616363 -61326431343565386165343031663263333564386435343363353035393937373362356136316230 -62303339376230313365343931373033343165343736303934306366666162646433646135663363 -65353432336233306136383036313332386531396133623563306630656233373436656361343733 -31636136333962656663653061363865303161656138323138376466373861613465666366363230 -31336161613830383764393232663633663939386430356162636362373466373965383636316465 -61343264366336386333656535666162366262303938356163663932616431353133343733363332 -63306166623838616333636530656462333835343861303639626235363966336337633236656664 -62376234373766653330373333643835316661386633653034636430363562386266666666643538 -62323738393433656665636166353666663037643566396537633233323538396433633234393762 -38616237623262333335336437666635633033353634333663653133643231326164303033313864 -64633363353632366137353863663739666437613661656230393137623264663631373135373539 -38326334306333616466626339366136356532363135326364363833343864636636376638656562 -35343865363561383836646363353739393266326330333630386133393437353139396639396466 -66343737376135663435313438623930376437313662316262646132626339666631323234613637 -66376464666561383530346463383036633062656338326436663230653639333530313061643531 -66656631346566366530613063323930346136616533656661656630623365386138383663643139 -32343561363364633138396361613762666338356265303231623938663832353266626131393037 -39663132313662316339373163323235616161333231646661613565343466333663376562346335 -62313636393338326236303537646233363030393362363130333766326230353961303735333062 -39323634306161626134383831663566396233366331346337316562333963663964303139373438 -61383639646338336438393537376130666434663733383637336561353063616535373139336238 -33343163616461336362653565346265326539666539373536663063316130313234613836333430 -62366163396530316432613330306632633637636365313031616162653161343065373239363237 -35366136666537343430303564393535633235363166336137393532373333643433366563626663 -63336635623431346632313632646134346661306337653163396237363734393236303363323030 -35623636623638376566663363656362363138646364623437386435316663313861393362353439 -33636633303431663065393165306162663636323563316161643834636132386137656230656362 -61393737353731313835326136623461616539353064353166663633323837616535666531633762 -66356131643636356365613231326266313532333632653962636165313762336464333061613663 -35313936316437346361336131333762353133343264666132633531653933646238626361333831 -34633636386237336665666130306663333566316235643566653032386539303338383237323566 -31633066323931626236646133343739666562363964366132343162366563396361303061623664 -37393235653565633531313632343934633037306335626534393035393333386239386237313534 -62636331303237313136386634303136613939346263653362643864633034626461636261363032 -32393836323338616633373037353563653034316362623339626138653964313034336330333664 -36333962633636373537376565396638363265616238306134643434663835303531333631633261 -35303237396435336664613335386534323234633138613964633331323165396163326162313563 -62336633393231333433616164343633363865373238393763393232376331626635323533313762 -36623936653231613136643163613235376439666538333038323433356362663361623334616236 -37376338343363613735396132646261633130643563656238613163336635356434646134366534 -30396430643939373264396332666662666663633565356432616333323735333038323662646163 -61366336393661386532343537303561363062356639633363323163373136353064323865663539 -37353639303835313830303165366162313464306638626637373530393336383165613261666233 -65313839646330653430323734356433626239356339323434376438313034613866306537616435 -39386263306565393734346330623564373963373634613834666465393339326430393734366261 -35626563363539373337373962323463646333653239643133663163356431643538666166613463 -32616464383034396364373635623339643735653831373431336533313362663835636262363363 -65306330333165343063373966633335666330363963623336356666613436313065346263323439 -35323538636439313435313661376162343736633662393530326662616265396638646339363736 -39326634343364373731303138303939663163346366636538306535346463393162313330663665 -36613635613736356137323434626666646131316433356539306637623561383836646566656139 -62353438343730663939636532353461353831336230306336633261666431373962643663643563 -61333965646139623137396361326266343239343061366161336162663634376536306336646538 -63306135656463623338393266653330366136643935656139666531303365616461313037353063 -61386464623066313031363330323339376631656231653766316532393137646532623333633766 -35643061366137346566373064636164633664356365333163616136383337636236336431383030 -36333264393066323130623630666133623664656237313662363736643132316234363239656663 -30366532356361356438356164376161643434636631363034613765613665653136333462626361 -61303237396564663863336138383432396433663533353062633239313136633165383065643738 -62396134316330363663356133616232313939623839666464613231383832396539613762626466 -35666565633239383663613536336339306637386336616463323130626139373831643838623163 -63663737626264383437643338656438613564393734626537333365633130393639333763313430 -62386239346163356335626536343936626562366436613534623137386430326537386262643834 -37353663646533653863333434346635643039623337313264353033623664363961656462353030 -35633334313839623339353364393039613130386261383464313365346137303037303062646164 -66623463316366363363613934653661306439336165636463363433393132383334323361656264 -30353366306365653736383030323631323932393334303261346330643164653033383431313262 -62383836633063383839623564336435666366613937653465316135666565623538623763313262 -33303462313131633933303333313830646434636133646239373931323364646463313931383732 -37396633333534336231353662326465666365343962666437613535393465633435383239363730 -31386139353330316536346465376162383532343131346636343765366461313232346164363730 -32333534313061326535613763653732393236626133336530626130303238623635343666303135 -65316664656339346437613536373930303834663737373035346639303939333062666565616565 -31386562626533356333363233383561663139366163356538343730653465393561666564393563 -64333639316332363730396131303537636130653733666466363235633638363937333831663137 -64383537303736323237396332623866343634373761306163356363346132616331636663653062 -66333933663764383835613430623864316462343965323962363537623137306564363739346466 -37323765353164393339626166383536633263653331383831333163376366636463303030353934 -31393062343831333165313664376531626164613439646137646261326530303764663336373833 -66393832343462376436613835613132633833643032303336663162303666643434313938633135 -33386436333131336266643462666131656134643838306336343236366534376133303036633335 -34363032633738363663363566346235346465386338316364663061643330663833353331656362 -63623864323864623166383439363663353763663363366466656334656534613663353834336338 -31303266376138393963383430623138316538326138313633646563343837353633623465623434 -39366137393666646264383038666439646466393635323533333534386433636233373034656666 -36313965346135653036653239346238613230626632386564613664303866663737396339313835 -66626563373537323834663062366639336265626334316433316536323132356264313934646536 -38363332376437373031333333623133333732613734316439656562393733656436333832333837 -39633033363861323030316465383930626566323836623535316639666336663061636662316532 -31666630393436376535613261343934303439396434656130313633373562663265613263623865 -64663436313966373833613437316430363532633936376539386466646335656463343535376133 -33653966616362383237383961303663653038373966383530316262636632653635306166373231 -38396162326663663862636131663932326663656333383936353961636638383837363464613464 -65343839666536366362353039313661363135613734636538353134396130363863616337326239 -34646566623264353031343031306564323766343862376364303039656162343761353235383332 -34366530616134643939366462383837306135343163316561343363383030666464663232373465 -31626266333731366462336431336333613435386135646363636565646530323665663631393139 -35616662373336373634633561316461383062653765333932633863643664666164623331656234 -38316632373965356134643530333165653561303234386137353935323366393938613830313239 -31313832303332326237636161623461386266326230303831323038393236336330386462616438 -33383734643231663631653134326265346436643435333439316539376263626231313533623734 -30623538666465303264363033643737353536616638373738323961663830363532613032356131 -63636664306538656338313432376364386637656163633663353432323662333039326133343438 -62666230656432373565616338636338306535326639346466343863313863316133303234303665 -63303735633663343465343265623536383835363139636136383934646238306237316436366135 -39656136396432666165366135303030396666393434303635363261313337353430333238636334 -36333134393739633135313363346264316463356365393162343763653338393230666630303931 -37353237346331663433653266633137303065323534353461333235623766313533313866393462 -30333462336237316131646635663333373632346263303164316566376564393932343237626138 -37303766373365306130303262643632623632346465313065613961373835633738306237616563 -37663637373565663631643838613737626537613938373638373535396632636462336563386230 -31373334343238353266313563633162323635336561393835333530343736633932643431396434 -35323466363230653962616364616561353432623334306438333137653962303563313236653939 -37376561383061313664366230363166333335666363646338633736393833373232313061616130 -31393234306163643466346634646331653339643164336436386237646562623437323966616237 -31316234326236656636376236333363633262623437663133316635333766653832313035623233 -64363461643362326163396430306237353863633063373766313836646261623639363066643064 -35323161616462373930383330366235396164346433303238646530333261376234303633626266 -32623231386465363336623537626164643239616132303865636566373264623033336535643465 -62656162383465343966343834653765306532313766613563383264323937656338656362333833 -37333966646634643232353335336463356234663036373762326135393032333163353232373339 -34613434306533383536653264643632326565396338396439663832306462356364656335633665 -66366235333738663466383936633336326137393936323466626634343763393333316435343531 -36626366656137373565633965663233646237386130633630373933623834633530336436653563 -32336439306233623832653732316237333933333237616365303165353332643862633637346665 -39316366303933376133366665303963653834363636353664616266613231303337303366616661 -36373863653265393234373765356262346664343533356437363134343637396264393238643032 -33626539663330383664313464303033396430326364616533646661383634336437333435623231 -61613864333733386138616237386237363966643166653630616562613865633234393034663238 -31383361623538386235353363343164353065346634653532323933323134323735333731333064 -66303364666637303830343032373430626535326536633362363765323762316630623566663530 -31373765376233346362323133363261323031623739623765653430646334363439646562343039 -61386361303830646666373638343362656166373233396165653536396139343533613163306164 -65343766373164383638656136313137636436393633386536326435616131363231376538623639 -34393733323834633731343032313663316135643933336466366664666136386464326133663037 -62303233656632616664373064363666633736303366336438346634626439313962613662376666 -62656162663233323137316533313337353237343333666664366132356332323334646661373432 -30616666393837666233333638646331646632633734663933363466313465633961373831623937 -65626435326335303137393065343765336630393431316364643737303262333334623262633032 -37316234633036636435363864656535333961656136636139353161633239336265306362363236 -66646531323030626536333766343534623034313533343432656136306538663632396637346433 -32333738616466323465306162326264336665333262626663336361613633306262363334386430 -34336565343935346132376664343730326639636264343336376236393462383432626563626562 -63373161343064623539623039303235356134383363353736383261356336613365373737623939 -65356337353839303030636565643239326461366262643662363662333739336436643933333866 -39393634616436623366626462353363333162623266333665623430373633376563663366343566 -34333162643333313365626561653762303438343663643033656434633736663561396464613437 -30363130376465636431626232656562386233633639633066383030326631613863393365616639 -38663538396636653966333239653930656163333733643339333334386335633337623834613734 -33613964353031396237353531343265376664316163333861376534643861313762323766656663 -61656337636565386238623736316330373335656363626566636363646139656237613964386163 -66663738303137613631613639656363613237323263326635373861366132613536623438313335 -65353761393335366438313635646664356361383432363237623533323636633831353062366637 -35636631613531653464646164643164653762346633633339333434333761613463316238363263 -61623037623761623036393438343764363939393766313261643337356366633834363839643362 -36316664653065346439373566633534666434633533643036653037623366313538326566386234 -62356436613561666135313339626163613663353533653264373863616562336161336637346637 -35333366613332613737363965333366633932343830333462383130313164666335343366613632 -37646366326465316465663635653036666437633533333337323362343139366532356361393834 -32306266383065333565653438383565646136646164326439643737376163386461653562366130 -39616439646432313961623836613161326539393939346431323832663630363638623838333833 -31643532656535303932313132353662353732356238313561393862326530353561666364633664 -61626634303363613361653534666639376136303836623630313862356363333664303934663335 -34653864346265633163376462323963373263646633616232343665343066353762633262663136 -34323737653032316337663865393832343837396565396633356538613534616330393464656435 -64623266303134653534326334363862383165363235303133643531666333366166653463383437 -36656365633262633333353866326436343661383338663261343631666331336430333631336635 -65373638633632646230613130336337613538643135653339663930653237666436656162343633 -63396261316631656664336336393130376332303536303533643165386639323433626437356334 -36636539616132323362356663383831303730343039323536326164383031313164643064373035 -39316433306562316366313361643037613630376337343338623239383239653839393630666366 -65333836353830613763366665323664393137666439616264376161386635303834353965373261 -33383731613964643965663534626336353339653338616163303139623865326134623832396335 -66396134313333613438656230376265393636303731363866633962643632393861333161343461 -36653565373538643031353061323439633965653337326164636131383836383866323730336439 -34373661653661303532616138613535643534316533643563306564336234646335633232373833 -38616230313535643338356137663134333064636261613434366131363762363038636437303763 -65326430333466633631383431373637653863656331663534653639376630633534346161663664 -31313535303438623966393961663530346662326236383164353638626564363235313930666631 -38303133333834373334326162306139613963363233303732303464353734366433316161383936 -30646330316163656336623634323834393136313661373333666535393335366666373266323538 -62376138623938616637663364366130396434333565353562663937363937616466323239663136 -30653761626337303861306133336230336437383162313364333333303235356434333038316635 -31653832616330363438316638336335306536663764366439646562393363656366623563373333 -38623835303432653832393835636436316561333735356566346535616164313539356561653731 -64616561373564363766323862353433383433626261616433383035646666663437663431623337 -30666236636437326363393435386232336237316535303334616338393439666332323133613736 -34616135663930366365663266356664383064316338326234393463356661336231636262353666 -62656261626236396434306334633462313432613434323636393164313733393938333638323137 -61643137616231616264663638333531633433393764373136613632623337353231663038323635 -35313662636636663938343432613465613039306530343561613264353565373734336165306333 -31383061343336343364656566643032643133636233653230353461666632343839326162636439 -39633139653837376161333661643733653034303861666466353439376438353934313335363966 -35323065356639653039336563393631326262373632386432383063356534666231386534636135 -37376263646263303637333137316532633964353535376464623537316238316265316535383363 -38316534316635656666623334366430333130636536613365336161316431383535346136303037 -65666433663263643837366435626138663563666661663065653665643932343030386262643939 -32353934663635346133333532383637663830306139653164336237616538343662343935343932 -32373365393530613832343230666633306135383366316530313962353863343666343761316637 -66643761373931373030383038303732656234616636323432626337643538383865663631653466 -66616161613332356134343662373833323064306631343966613235393530666337376638316431 -39383234623133313463306565353430623830623661636666363735346637663539316665343531 -30333166643136653536663035363037333532303831316638336162616663626130346262613535 -61613231623936326665353631353535653363373264366132316130313039353434313736343030 -62363765333065366439346462646366336136643139396133326539376633336463356636393361 -37333363393130336435343537363937353132343137363465643730383261613832343432653336 -65303036643938373961393331303837373766313532626637393738663437353235386166346330 -39616239393631353561356663306235626565623234653661343037636532306631353464333365 -36386431373066643261313637316634373030653666363737323964653136653836646434633936 -62393837633266633564383264613664336666316334383134663931376630663834376663353737 -36633837363364613431313062326139646534303934663764653732326361346466353234323364 -39653537323039663138616561356432336165326537633635646265656230316136376132613936 -62323532366639656132316631633566633831363737336233623336616638613130356261383838 -31616464303433363731386130666132373138346133373138373838316235363230313438303338 -30643661363061356537363464333136653566663565656563323561326332653466303161303461 -37313431396461373833646439303432643961623533376335313831633764613030653832653861 -34356464396431386635373962646263323764363961333362343838633335343365306338306533 -63353030323633613637663233323765396261343132643161376365346266326239396664396166 -65323832656566366532363466396465653232363133326632666364616431643162666662633230 -65343135633135633331393733613164383036326666396535653938336332643838373865323238 -34353962376533356263636266313561396437366438303632336538366366333662663633363330 -64613366303462616235653462363862323637333063366565393236343735386230613233653464 -36613334623934666463326266373532613434303036653963636436383666353462623031623064 -31386238323638393361343465633532333665313434623335366462353737333639396334623764 -32356665343030663332383432616662663766656262346133366264653536613439623436643537 -62343336616164326436316236336438633236396334313035376236336130323430643461386361 -31396133323132336666366266663562323062336436303937306239633437613365343739336562 -33356232653033336639666534653766386364323962393862346432626239633165633161323733 -30353235656564393139626535616363616131356432353839376633316534346536333230326139 -35396462663735303632313366636536376665366137323863626264613835356238383933633535 -31346531383033333237623738333264383033373066393462396333356338343266323736326430 -31613066346165636536343839343436633034313061633535363034653962326537323132393930 -63343139346366653562363537343038386533303363316165636261393433376435343533353962 -65346265383463636438626435636134353231383030633239343135356239633538616161323038 -33333633353733366462323632373139623366383334383761333761343135646239626239626662 -61313934383132663937353733303234313837643765376230613334383432393431396361373761 -30663134663864653334303862376538356530373164663261643666323530306337366430343831 -34343562353862383636323765626665613232303532306166623331363536303032333163303962 -62323734313164316635333363333335363138666230383465306262333161663339623735663930 -39643632613361623333633664653338323638336532333639646233326233363336636635306634 -61623533393162666362303938613164336230623933613236623363323562333561366163306635 -39343365303866663339373132663135383635633930383938613763386237393430623162616564 -38313337613937376137303736313964383866353234336232386532653961306534356130376265 -61613631613033626366663132616436656661633663666431626634656562656136303036633566 -33666537333532306233636338643336373231613631363831316366353664306361323338336665 -35323237323730663661346162353238306135326639356134653736326366666563386365373536 -35303538383331373661366133623136326261656335363138336463623766336264393164653039 -31386562653938336234363432316138623662396266376663363661326463656533653335636362 -39333133666538343132636563366364666132383666396135323861353764393138646230633263 -32303631373036633438623037353636336331383864613232346432656161623463396465646366 -38613736636632666336663536343862313131323031343164353637316234616131313665306237 -66323663326632303865393739326238373162663962353733666432363639643030316537323965 -38316361386363613663643061396135313539323939396561323263393339383735656165646438 -34663036376163366162346130623337613965343033653834656339613766326536313530336334 -30636639383565663266626332383832366264353931323734653238633034363365626337653162 -39366662633838646562366138623463616436636563323466636137333934376363353331383963 -66333932613361353364336434323865363739313230303364663239376232323431643434386664 -62343635386261616334623630613334636636303436633066306633303238373066393033353936 -35636434666564326162336464363833623837613763356666356561373731303961373766656665 -31623865626564343737313135663862663462386637626662393831313035613437623936633761 -33346161303630333136336630326638353830346334326463653133386162323965323133653231 -63323534363735656538313865346437303664393230326431313233353832303334313536643666 -39643561303735303034313539613461333835313533356662383661313236323336396463613834 -35336363393537343234353266613639303332363338303533613166363061393464333938323030 -30366166623265383961623339633866636634356335323831313131646364376232366433656635 -32663433663738376432366336373564663561663563346362666331333537326466656630616530 -61663963656338363033366131636138386337623466323432323565623163623738643932613636 -30323938363030633237353430346333356461643062366663626462313132646439343833653662 -33306637346235373738613031386134336137343263363838393732393064353730613063363630 -35663838636262626432313837666535383536613133303235376530323139666561336536343438 -38656663366630626331323530343566313636636131303763386538393165383561633762616532 -35306563303431666539323637626632373963643165666437363035373130303761383664386636 -37666531366136653263343738376464653235356236646564616435626637346366656332356531 -31383061326338376536343138303462386136353033643365343036653333376333666130303132 -33346564646164653061623930653562613938326561323134303034613334633432633835323338 -32626231666335383632313835323934343833373435386538656664383733353139646565306161 -38353337616263323561613135613536626165663936383366303133393139383633643965386262 -62623637653036323964383736636163363238333461323337376236666263323135653731373635 -64303238346665326663373936336131636263383063303563346466663461353533626434643235 -63666336343064353138613464643465343734376634316166303765633461346136643661616430 -65663037376465636364316636323035373830633261393437663834643037613134383338366432 -65303134643966663165356461653965616263643732343539646461633938656139633635613531 -62316630666330643539623336653138346535656237363930343166356633353931656231393166 -64333438333530336465326330613831656330633463356531653161303365353333366564393530 -64356434333532363962393337626132613630623835383565346137353565323135366137666437 -65303361613765306639393037356632373832666238366332666132333962646261623339326533 -38376234656665623133393337333733646132356561356232366661396465356437306339303666 -30653935623537666166353465316534326330646261643665643533663034393861636365666439 -31326234633030316437313261366564616366306138306564656432626533393463656563336331 -62343038633230633636396531356665363061373335386462613162383135656639386438373639 -62626432383832363534326364313135356436356435323537636164396634643662633564333130 -35616232323733303235663531393563613133326637313935386235393430306233383061363061 -61373635356266346435336539333262663338616631633534343461366662643064646561343062 -36646563366233323238356263656664336466643533383263323165323932366232356362636233 -61646336313632336137333061353765363036653336363462613762636361333933303965373934 -65643038656266636339373061376166643764373336643437383864613637343533633831323036 -36613064326134653566356339373537313432366361336363653264323233366262666438323136 -30396136643161633166356437373837636635386237373231623535376566636335643332366432 -63646135363032343739393263343430366134393462313134386139633663303337366436663232 -66646431353434303336306632346661666535613730623263353338316630303433663030636133 -61373135383664623938323563646362376330306430306661393562383833626262373734393563 -63616466383063386234306634633764636136373161663437396365616463336130323136653566 -61376466366136656435636235386330313764316534363038386663383834316233333265383632 -34303461653734303065336138636365326238646438343031383535383435386233356361343764 -38663835323431306166303263386138616565616435616137316634313832653333303537626566 -64613335656431623464376261313362386331316335303762366337643038343763353665353163 -38383733616162366661306566666531356162663136383065616632336232343537386337353332 -33653137323962353438613766363036633166306333303133303937643432396663613338306265 -30616266626233343262666536356162653939323835396665393963623962303835343237396639 -63343065323531306239363364336461393363663037616464666631353365313939646163393436 -39656162613436376263623035366636323436343638363338363164346534366434353737663866 -36353236373362623131633966383164356132363936643131373064346464623264323439633835 -39353866356264386233663132646662316462346662346566666230333339356264326233326330 -32373265633337623835313036626439666664326261656133303036643664393565393331383834 -37366339646530383734656561626337356431396537616638393632393431343363663739623263 -37373235653235613036653537633438653532623132656534336433336634666237633937653733 -65376131386166383539396139343438626366653831306638306637656565373235376531633838 -65356139653031373437383531663730333237373034366130643331346136633239353633326539 -31346530653932356164353030636562383934643532383066313565653231386662336333376565 -63306532333234393562396262333164616435366366336538393164376331326166303963653862 -37313666386564333662626631336366326366633637616363626361663538636634643231373735 -65616637353539313564386332343633396565626637326237346636356436303263353966303837 -63363262663266343663653138366362636233343461363266666633303737343964323432373366 -64393930663030333833653435383435326235616363353736663634643338353839336565663935 -38643534393364663064346330363866633663316530326362393531656638613530656461623032 -64366639373066336131313665643965316438303235336338613639333630623966346530626366 -36633862396662646562376665663365313332666331626461316638313663646134326337353336 -65656564393139323536393161616335633032353366376330356531643166333536336534663735 -31363539663461303733373065633637663435333062356635303564623134373264653335393464 -33363037623962616531373764633462396530396162666432653834316538373631343430633238 -36623163396131353738643234366663623338346536623936383964323738346661366432646639 -63343964656663613162383864323365346538376539653664396632376535323065393739386638 -61653932316439346666636436636235653532303062663864383437373839353532343263316232 -36653737306432306336383461383636653638653162646562656637336535333762396439633865 -30313063616238383236386336623035616235653133636135373039353036303666393462623366 -61666366646566366531323231613135653435393035663466616361346332383536656536306364 -32363330326466633239623237333364323664373836356564393034366361373363663365336465 -30383265303731323565393538316633636137386633313465343466616561343431306238373138 -31366134333363393462323065303837313931646332383831373138663439323933626436363935 -63633131323233623939333163316533613631636430626231363730616138306335393162373165 -62653363613034393562353734366365373332393930376664356436303330356334623762323430 -66633265356133363936306634633061336461333332313061663463393266333961373637313938 -35623066343264353662326130313835646135393233326662666536363962333961386238396637 -31306366333961313364646166626666666431613962383032343938393463303330623137623064 -36303138666535346432303566323133663535633330373835626130316335386666633531353439 -66306666666535643264656337323438383762613462313461303435396566343564363639303738 -39616164663664363763323961343861333139663262653836393866363935373461633030393738 -36323332636665376437396131616263376430313533653862383533396235333666313865383462 -37373731633964643435373732383765653835653433666264653230306166633031366461613936 -31333436323333393063393435663737333538376163373263663137656536623032653336373230 -31333163646139313534326639326633613961623361643864613038333065626330303363303331 -65653464366634343261663134613164343661643436333639373338306238643361373336303464 -39643633626333343464393232636233363336666362303963383031623730353237326132343966 -33343362366338323036613266353630323666326432376363643337333235626265613431336165 -37656230393336306262633730356233633364373764336638303033643438616566356564373030 -37383366343237363364633431386561353262313133656638383639396230643834316665396466 -62386137303566323734386337396635303630373263653932333365316261616561386266636333 -61346366363161646136303538663764353339366235333532373766346130653764366262653634 -63653065373539663037613338336164373935613530313238616239323430336663 +32633161383437356261333661306266323035623134323939356531313039643537373330663632 +3863313135396664363338363765633431356461313466360a623135653030376565353231316538 +34643562393630633431353937613364363738323832313232396262376436643230363739323530 +6463383530363665350a363535623233333461383137366566346266316535396663353038393763 +38656337366239643338323365343735376263313363653865613263663534353339646631383965 +38396432666632353330363531373966663562306538336536643563383930653166653734353936 +63336365333565313639333833363034613137323839373863323836653734643734303534616465 +34626333356663663338313730336139623037656566313034636130373466303265653231343461 +31633063316430663635633561313030353963383664363661623634656161663965333732643364 +62653666336330666562396665663065376132306433376532376434633831393437346465643130 +37326361663730313162323631626233373466333637633765353163666463313730366534376538 +62306139393564613464666231343330383338376361356564336137636661326263323333656136 +35616132616333366430346334663738386665366634313833313466306635646233623761616333 +62373262636231653436653431306463323961303831383164316333326135383561316133306238 +31323439393534393162663433303164356132393934303834313865643862306331396337386466 +38313031633839363434353566306164376565616430323863366331373861323834643232396434 +37376463663362613965303034323533306437613132306232383033626636313363623936393435 +39343633393931636265613837626531396431653236333161303234656335366463353932396539 +36373233336136653066353432636136626665396162393933386135353762383861613835613539 +37363562343030306165393836386232653062303430363030303663326665616162396631646131 +37656135366366396633303733303037653364646331383365353464653961643032343930623430 +63326333323464623264656131396236383630616164656438643630633530323263393735366465 +39313639643938663332303065613965646166356264646361323232333961326435626332613162 +33646264633836303262636662653764373764646561646131383763386535616235623432366130 +39613037643038366664393637373461376436373566303731383866336134626265666561316164 +37376335303865353232306132323539626538333466653538366637343732303465653438353665 +30353833393862373462313562653738636235363566336136323665366665646163386665353939 +30663737356538646230313332646162353038636539393136336536656233616339323139623835 +32666261353961383435363361306430623864643561333832333765346237373964663263646262 +37623962313061343931633738303630633134626266313361633164363661323064336138623237 +39326232653361323733323061623839343365633962356634323366326134613666653666366138 +63613863316230653362616237383636613637313138323961626135356563373533353439383666 +39383435333136333266306362373266393431613937353939376362393565326238666632373563 +37303032346330643531396631383265616364343633643738333137636366663038313732373434 +35656363316562623066393063303231333131353436353961313833336236366431356134343430 +61663937366165326533383934333262303132643732383734396264643230393630653136323930 +63376635383536383363333335373138313562636534346666383539313065643733633364616266 +33626461646363323861643061323064613266653237623661386165313335656335646238346661 +31373664663033313134633632663462353035653439393835303062636136313837343530326633 +62613933393163653565303837303634653530633766363333376464616536616332663761643762 +35376464376239623033336231666137353431656136616136626636343936346331303837303535 +38613534323738306663353238613938343135636230636436376265646666313536656438386431 +32373461633930336432306532353663363137356661383533343166626263663830656332636337 +66393037383633366138643263366661643031326531373938346431656565613965663438633236 +31393530326138623764383762616632343461646237636435373465636263613035323735383965 +65333238393233343637646237353261336136386239626662656637373239336237663437646333 +38616565363862313832653765613436656639653462303537343565373765396236366262343933 +65383637646136653432353165336665663666616564323163336663636638333937366633393166 +36356539353032376164363039353137666139623263656636373938653664343835633437323938 +33336337373138343934633935636661616366316233623865356265323433653233373836613535 +65666334643164633262323131366262306464373462303432626631353638373136373763353162 +32363233303532363037373466383735306264623734386632353962633238653963326231623663 +65653634666561373138306637343836326139656336623934333935643535363966333936333139 +31353662373164396632363534326238376433653865636533613839666437336337656439343930 +61356630313436383430386665636464636564343332363638313564666664346365643835656131 +38653661343634396531616638366538643839616364396330646632303564613031396534326234 +39376431343962383335633633383761383864363263663435383464366535373561626331353963 +33616231373037353236636538636632653037313966643934393930636234656238616339323064 +39626436353537383038323532623237613939363338613734346362316663656332336537336361 +34303065366331623563356463303163663865356561356266343933643166343534623336653235 +62646232303538393364333339633334353164386635353535343730316662663638663964336561 +31376664363335383563303136626463326331623932613433623133356662663637646164623237 +36393439373338353462613336353462313865616538383463613862313530656137613463343533 +38613331336330663763393633336333663930303932363361393261393735373833623235343537 +33356337383230653134303035383266396539386632653131636135313336653436393866643865 +37666362386537653735303831396265353938343136663937333462356337616238383936653761 +33353066303034623532363430343334303533656665646661633565383735643838663335323234 +33643665666631366334353939663665666539636139643736343332633939303733643638363135 +63356361623461623138633563626630303432323862656635353162316236373465613464616561 +65333933633539373136333063363133616666306535346137653462306430383634633363656263 +36356166303361343435383437313530393661306331336431613935326666386634336530373362 +36383562323739626331626133363366376631663234323339343931353766363634373432646139 +61343637623230306136366362343238623739323364353034313036636236643533663963653430 +38323336373932653264316430323237363632613933346437626265623937666239373932643834 +39323133643535363338643931346464333030303664633837343261303164633739393732356364 +31666335643363616131613664666361343636306638306662363833313335353238646436306336 +66343962393761336563623130333637363237663935323936373365306164396466333933373238 +66623337383566646262336166663763656532316232626365353564616633353966653735663162 +37346634373134643734636131336634383230346132613861343163316431323666373233393332 +32363865663563623466626130383532373837616435636566336364353138373035666433386563 +36376139346635663434376439356361383633363337373934663135343961333365613161373137 +35346361326132613461343639666639323235333661363732646362616538323636366561343664 +32336364393862376232666164666435386337396134333931626566356137363736393832323434 +33306334333661653435653831303539303337626263316335393366623661613536643063626639 +32633264363262363163313235666232326634323337373866323137333466663763306235373432 +63373764653331386435386563656234303030326266316136333535373834306436366337633936 +38383461333632326537616361303361633030326263393436346661353037333462623931363963 +35326633303932653961663866333261353564396338626261376530663938333966316430653332 +63613165356262373930636264666563653031333866663632613765396464363139353437323165 +34353238616238333231313331643933333161366161656662643964313737306236366466346137 +66353965373564386638383234623239356634376165306466333735343937326461316637626137 +31323330383761626165313664633763333036633836333537656638323831386438656633666465 +61313461383335663236303134316166303566316162663136656538663361656234356633623765 +65376466346130376432323631663263346539336461366437303332393131613931306432363534 +62316164346236326362333964396161663938636164636162666230396663316539656463346365 +32613732616463336539333665366534643632653736323363303031323239616335633735653939 +31623432383262313766666433343261303161663736303139366465353430633765636431616432 +62613266376532613936663961623261306362616330393530633436663038663737306337323431 +31313735333763306530356461323139626133306161393837323234323665613464653830366430 +31623839326535393136336365383239656166653865616531346135653362646362363364303438 +65323961663563653965343864363432353937643638333630313133663238623432306235636232 +35663166323736613561343736333434616334626361643531643262316430303537346666323264 +64643130623061376161613566383634376134656566313639666563376161653665313663346334 +63333534323135323563363561646564353432316138313035633530313736336336353462623934 +32316238393933663061613630333830373339616664636562616563343963623038366435343831 +33636134663533656536336636303538333030633536303931363563393661383461316264636536 +39393934363831393939306136326265356131313231633139636138373065366534356139636561 +37386562306434393162363864306264376166373466396166303763656165363839613761363132 +61616565323138303932396437316632316664373232646463323830303363626338373933646239 +32356638336633623665333466383431373830616534373133653339373436643233623062366664 +38633761393031396130656234613665393038346563386562383030636232376339303937323666 +33623930303135303534383661336137353730643531303166636638346337366361626637343831 +36643161373634383265653962313261353634623161386566613966326638316564366637303864 +64626539383165643832316561393538663835613531343133373764656661626534303165366631 +39393461323166613339396665323564316637363932343437343666646561393662393539366635 +64373964313238663539623566303863313364613336386335646364373735613936626262373266 +31353665383634653239643664643366346663643535333038323937323238613162633964663932 +30396530663762383461663165623933653161646531646265623666386231336535326363666234 +31363834333064316335336335306235363434626333323133333461633866623031653934356432 +30396132623937363532366133323365653930643662653631373139326336306532323938626432 +39646637646135633231636137346534343462323437306661396165643730653335646365356537 +65623234633932336530323863633830313762636333623864613434366531363235323565333330 +31653866666466633739643431643335346162343636323734376335316566313432623664383962 +64343037643133623634643634643563373339386163303232366161636266356461646664643666 +66323463373661373563393866616465633461333937323336656565643433336562323431396134 +64323865643731643461346666656334343337333635666233333834366263336230666430613334 +62643230616261346366333034626238306435373838663936663237396539343861323433396130 +36383234373937393131643338393138313337613736663435623866396530386236373437643361 +31623464373839623564376162626364303630386130366461653839363533623836666434643031 +33633335313730373262656131353563623837396639363334353265383036663039363135616465 +64346465336665333161356232313533303766363365383066323133303437366630363666373836 +36363335373039633436616431656135613435326333616431663431643839626639643462646236 +66373161323862333537383765643836666663356434393363333832323231333334373736313665 +36326132373232343136333637366166303364643465333564633237393362366462313933343231 +38363362313265333137383563656233363036323165666565333235623332663639393839343333 +39366366633630363861343230656535653461383663393137363335656462343430356661663230 +66663336663331386233353563363632613232613331306333353032313630323338623132353064 +37396464333638343661386161353831356532623734376433306666656532346630646535353566 +32626166353665616661313236653765353430653835396538663236373934633631326563366664 +37643266306430653131336136316265353334356366386463356166373735613138353436326165 +32343734366464616130313235376536623436393534356262633934633632643262323261633436 +32363663646663623338393338336463663834343637623531666265343362616637653330373462 +30376633633261313338613737346538616134343732333331303130373862363239313164643064 +34623130306666343338636263646366653165396361643262643432636237646436613863333163 +35363138643964396466356631353632303937633664336264626432363765643338663634353966 +63313664646566363237623539363863336439653666343266306534653665626239306265376362 +37616261393166613362633438666461623865333439653637623664396161616464666439633638 +37633162633863316364366435636639656262666261663336313961343966666438366261393931 +66663563373262623831343232353134626133303631636232313263636330326535326536323331 +34333037346330326661336161646366346666353862643234323433393932333161363366363665 +61323039323538366663636432333234323265326336623533323838653861356337616465343963 +65353330316335376331653232393233353338346436356335343162613537633164306537666361 +35313765313361633761616536306364313635363563373935376164616236363364393039333031 +30326661626436633563353930396430646433666231353538323561653562653164306338636462 +30326438663262343461316536336166343864353965353465353662326662353335633861333635 +33363131346134396633656266313239363531663537373461303466393139656232663764366464 +65666535663037353064323935373833633633346138333930636339393163356237353531616232 +64306539323931383330316237646130373338343835303834363832323234393963623631633534 +30636333346338346637303932636161363437313533363864383966633436313537626437633863 +61333738393635646331346565366132343364636662356536613961333964343335653633336666 +33346536386664336362616464363037366232626330363262373963316334333366393666396364 +33326238663333343266383464373238396334336262636564376461366366343065336136643063 +38656235663733303962393963643236363032356435666534366232353763656234353163343234 +65636131623537653339363033636131343634373939343262316466623335326130346335376565 +30633239663164643765336663373737303632356364633037383231626338663463386162343338 +37333335623562313932633236323064383336336564346632333663316462373636316337386566 +35636364663334376265363765656436653961373833363065313966653938646233333631646232 +36386633393732653439643033643633336136616263663165636338343662616266303231353462 +37386339666638303735633639646465396638336331633061393331393736396164616632646161 +61383561663265343433663836373936393434636237663033653766316332633330393638373239 +65663765383839663261623665306230633734366334383461373135323232383363396464653733 +64366666383938303438343434636263613339396336343163376435333835313764663339356138 +30643137656461353864383330653735383935643566396333653437636636393663623561316362 +61343064393564613135363766313566303763653539396662383432383462396562333036366566 +31616636613835633838633334376361366232383632656131643136666136613433383365333635 +61323231343865623066316631383561663564303136326533333734626336373637313738633162 +30396433613931643461616137353535326364663238353731363835356537343165353436353130 +37373635343734623462366165356664633062393536356438643639386338643134646263656465 +64396138353337613231636538313837336531653032376132376333663162616136613261336231 +63626366613231666663343661393466316530303462653266633334636631336161373061343864 +61313262323632653239363730373736396430303133333537623535366337613531316136323131 +37363562663932623264663039376563383164336465366336663862383134353535333731376231 +63316539383065316164646633343433643538396263303832333335653736333639366536303062 +33323466633361363863616130633466323165316565373330656338663434323565343864373138 +33383234373762393832663038336432323234363263396239383236306339326332323166653636 +65303430326533313466346331373634363362333937313530313436353165353536336437363337 +63393131636339366630386131323133303666656431323330656238333634366537323631316536 +61363831336238306434373238623966626238366435346261396638643164633536396331633661 +36313035313961633837316538383662353362336562626366386636386233616537333834346538 +33366336626165363036613135633837366534313563376530303231643665386532396534376465 +62626162386363636364623539383462383339363461346361343766353232343231323863636666 +34376338613034393933633763653630663835346236373536313731343931633230396166346165 +34646536306465373864396366316333373862653935323537323765326438316663653436616534 +39626366353733383037643866326638356536626166653239636563656331613938636362366239 +33636164623331366632376238656636646131353630623337663437393835383466613162633866 +36633036313462663638356134346563366334666331303234666332663965316265343061393265 +35626631316536396665616165343536303332616635303763316161663530353237303334326138 +38343331663132616663383133613633373639346564363464376332313465366166633732356666 +62336432333430643664396636363032623138393366343235643131626137376361646563663133 +36316463323835666634616134623162313333626134326162306132626161303739623738613434 +33376461636435636332626530373464373162353231666233666236653936616236613437313031 +37383531366138363165363132653866386465363066623431346439366165346531623263623037 +32313738393434356435323130383662643866393635383839383662316533656366626664323235 +65383938643561643664363237613763393465666239336337643161343861353466363563663434 +63336331613731343937666363376238353936643237366463643635613465343239613866376632 +63383232653332633438333966336563376538396235363433313731323536346338303436316564 +37323832313265326232326633656236383531333039383837303338393936636231373162333039 +38636666363961353630626137343339376232636230353364363466353961303033613765646137 +62623639376366333264356237313432363830633839383434653566396365646337363530386463 +63396461313066653665653138653636386463313464323935353165396536393234633365316535 +33666230663530326464313636356666636162613661356531316435306631383037353335663732 +39663235636533316465383235663738356331656434316631313639626332663135653430373462 +35333762353330666637343662303466663437346133616530336164396236393063303132363130 +34333963383133623834343339653662623839343736613361336136333165613335333036616632 +62373163346634386236333566653831623135336433613661323337653632376663613935356265 +34316632383332663034386461393065346137633938653663616332323833333435336531646533 +33306666356432396438663032363233363330346364373861316130376433333130623964326566 +63616334313637653833323064366561613234306535656533653939386139313964366263386431 +31363533613363646234393938386662333363396238343966386363396261616534663364373332 +65386235356335653739376635323463633262363239393235636232633639353835343832636565 +66626466313932626434363662323766633239646534633066313562396230633930326332626538 +64323431656430353233396561353363303836613132613131613037363434383133386231396134 +37653539393361306266653839353566616364383939393430363438383435666665666233633339 +35663630656461366136396231313935613761633536333236653661623236343431353565663436 +62343161343061333238313030613563626263306431613332323630353134626138626365383135 +61326638326336383739303139346438313164613836643561633138386631666433323731373938 +61373938663833326633643861363135363838313532326335396330373936646133363236333463 +61633764363761633062643533333737623532636231386363313664323033393931313236313834 +30363433663738616536653165626365623664653937333831653132373533656332373564353135 +35653438653162653338373662373939663232376239376261333465386463633030626239646531 +62316164653162643863363634396135623464393437363661346436356336663864353439356334 +31306161626131306239633564643062343235393231326339383363616236663661373132653831 +39363835383966373062316165353634336564366238383132353332366363323337326433333834 +31643137613234373233366562383632646363366266633162626366333964626336303232346532 +62643164613963636233633165346161613765643536303539616132656232376637363331626334 +34643365613337313365353738656166663537363764613361646265633862313563356635643032 +64303632613636613361613762353161303036643434343531373734303438376361366132313262 +64663634326665623532623038376365613631636236313839386535383662626361353132633865 +63353130623033356134616361613831386236313363383564303564626132333036346266336262 +33643636303230323263666639303364393861666335613335656163666230303330386663613538 +38353536303833346436343430666432613235656338636131343464633865663932646337373035 +38306265386361383337303136393363393834646564393139306632396365393639333235646132 +61353666333964373462333764623438666235393133343339346235613431373932363832663464 +63613932333137323466393735343361343431393836386361646330383134373837396131323265 +39613738363066363632623030653762653236663564356266616239626330613430346266303361 +34373863376335333263376463393361666232356437376334373835656632333931376461343662 +32636637373335316265353135393436316135396662313362306232386666313730363232613962 +34663135373165666534343866643435323038616661353538616237376361613030633232346339 +35626363623966636132373334396565313662323663383461656365653066626339356662306261 +65616562306661343835353539623933316532343131396232356636653038336538336664646465 +33396136613638656438636438343938316131383733336366653030343330303633306336353332 +34373065336132313132636532336331393965633635393038653764663936653338366137653963 +37333963326439626466633063316130613862653836626339616231373230613738363634323865 +65626233373932343961313336363637626366643863383766663334653263353032376464336439 +38383564653334613038313461326335643039333138376330376634656338303461383461623361 +31353061356234353462636539613739653366626361636565623963653637316166303036356366 +30653264623265616365616366636532643933613231623365633861633235396539313239303238 +37323566666663613661646534323733323465303738356632356434656632616234333865323162 +32323164333936323165663863343036613761373239386237326434646634323863386162383033 +61613861616235666266303932336238636230376562303034383737353266346532643539663334 +30353439346161663361633132363930346231366466343035353336313335333862616264623939 +37663234356331353261313631356261333761333935373531386131303032333561373863313962 +36623937656430616239646338356166396465363838323465623431356332383431333433343134 +35346661623265343831373161336337636538636563326634393739613963633836653136633163 +39396562623664323639656461396635383763386238396535336332336332333263353662666433 +38393465383538336366663635626539303630373864616335363438326439636136636337653036 +66633933666539346536346164626162646537383864666639346638346531633266366536633737 +33663938623463386239656530643930343365643332303334393539306664653335326331626264 +63303833653437333366613035656434323066616639663831303736626230666634353162336135 +62616663613137626436366165613136383937323231653530613833363939623161353039626532 +30373633643038376531643632666337663262663061363661386664313038363135646436363833 +35643036633862373231376261666135363363636630393733326134373265613064393537393364 +37333935356662626436326262343864623736303136356635333963393938353634353639313730 +30326635393533626539636435363931343765366564366363656366643861656639656630383635 +62383333666438633066383966653263333663636534323161313039373063616136613665363362 +32616165343239363939383964633463363933323565333439306439663466326565613633313432 +33383864306430326532646362376132343336666263633036393536383539376131313236386635 +36316437376633333233363564373738343161663235346435663666626537393964313738313834 +62633361316231306435636565353938646238366564643066613262343430643263656662616539 +61613932343936356566666534353836623961346362373236613164623363613561346338666464 +35636566333264643266613239616235626237613634306537363864303565306431613664363431 +35343732656430663063393733363632616265666666616234376235623135313962396162306633 +31626634333233386333613436646564343232366638363535393365633236666361653064663234 +37646634663433333634306231663330383737376434373633333862353761393236353839656430 +63656634343262393966396165333739323534613637393133623533623230623964396238393832 +65356264383361633464633663643531343331303234633861346233363063656238326363343733 +34656563366437353734643762636464663966633737386362643036353062303930316563656434 +37353437303465363837336337396262663438643631326661613335363230353433363962303565 +34346637616138393562346665616335623737646161303666313065306363303365643331303063 +33383537313466386334383661643832323139663131363238306239303962366439613739303437 +66616265393263363339643535386262333661626438373264613830613966653731303632663337 +65363065313365346539323262303665366337353330326137616238343536386563353636393837 +63663034313965666138646533643533636632616461626564336438666131316535353361323666 +33653134613534666365396536666238393932643463626263316463336130336137393539633362 +61653530346530353737383238366631326231353231303738303862303066336665333366633436 +63626536663165313265353361303061663337363135636562386334343964646561653731316538 +35363266346631383563613865326266336266656530366538336562373831363666346330313063 +61343530333134346237616138373661616461383463306336616230656439316636323138346334 +39633264653265323135626334303161383735326137613338306161656430633139333630616561 +31643663383264363565316436623936306633666131363130366136653463653930396163656265 +36376334373531306639386634366239636638633636373233613734303131316666323266343664 +61326137383261666566393861623735643430333466303832386439663031333361323263633763 +62353834363530343361303136393136356235363932663761366133396534333033373562383065 +66613237643334343635326136663638303434613362326666646432396436633833363634393762 +33336361373933633232643435663166363935613138346135646332393139333038333737353238 +65343034616562636264306462313662306530623464653263386232633134333166326130633232 +33393631383065383961663735396532363463316462393764653466653734623662643733336431 +66626561346337333531316533643364383236636433316133393632646236663637326139326531 +33316566346436306464326635643761656131333264633464643931313830313964663765306435 +35613765646462313465363031343338643639316336393030393561636165333337636261356535 +64346238636333366130643265313438666532653235306438356532613862396165633730353330 +34303062393035666164316664323939313233393537316466393333316135356232316264623961 +33323834346333313139663235623433636636336361396163666435393034336463326136346466 +61613038373932643761663835613836323335326130656334653338333832613631666437636561 +37363930333566623333376637386632363661386566373532393464343932343038656436393831 +34316630316363383331333737366631366338643735393934636164303236386332643839356234 +35613434623832333931383166653639383834323562653531336135393238663464656263643836 +65336464633536646364616363306536623163396136323837613363363831396232373830643435 +31646330623737646130656264366235353633633433613839353839386563393566303038356665 +34353363636335356162393330343631313531313637373566313336313861356463663839303632 +36623938323766316134373665633233313536303261623237396465353664616533393835393938 +61623461323535653837396362666131613730306261323563653463333730316437333439376537 +66626363653836316231626239336563356363613636626236353234386332323663326364373938 +30383138303064323731616536383562343563313734363233383461653538633763343531643039 +65386137613335653364363661656137623133323566316530663439323239323438623035323439 +31373163383130623030633739356339366261363761653237643266666639376438613832383533 +39383562313732363737653930636236346432373837333535363634626465333564323634626637 +65613262666433316633623437383634353839393461616134653132306361376439643737333430 +66653037626438316430346166383566356539643338306564613235653266643931333335616362 +33643334646463623262303233646635303034626462646235316431363561663066616332653265 +64646534396361363739313331363336393263623432313031653536336632626539363136383736 +32363865653436626263633063666133656635386431353233376364383534373730646362313235 +33653935343235363331376563336464633261396437393933323338333065643733383365393633 +36323732376665313865353861323638333534326234376366326363623839366333346264306562 +65326132333335353566616437616539653638633039643862353334653564376664366635616533 +33323461653733376332306135643335393161623531613561306432623734616134366636303064 +30363937316361386665346634393134333431373966363666353161316137323933653639633163 +63363730646537323634626630393835626231383862393131363336326537323062346262393132 +31306665633132356631623633616535303663313437626330626166616263646662323735636531 +35656562323231353036643562356334333262666333366533323661646136623534316363613166 +63323665386537666338383237643037616364626136663736323634313765386337336534333232 +35663438663463643937313931653130626265626535366234623266633036306232373239613363 +62356632623265373336663364313965373734363732333166323638613064333161326663656235 +63396538636338623731306233663336313037646634666161313430396431376637376132663835 +63343861613562316534323431373931333566626633363636346163363130383430373830313631 +64393033626261663463336531366363323965316463326234393464376435326237663732626534 +65633530636331633231363665336136313938343331303930353139323862396133343662323263 +62336637613039346536386565306130666235663031666237626431336335386365333464626466 +32636532653931383065633232373432383033663461653665643834393361333963396363383436 +63633234326466653565323735623662323137626664333666336138336231653731316438353666 +31336164386536353335653934616632306533636132653933353861633930613338313934343334 +37633335373132663665366335623536356638373562306564306439323938303835376266653163 +37613537316366663164346339393230343834656538356439616331363834396635353665383831 +30346635373363333838396230356135373866626162356438303663313764376637656235313938 +37306465633633623039393262386261316534346162343965366130626539663433653631316135 +30643137316262616339376437393465643963613864376239656438666435396435356338643735 +31373930623434656566393837346662653436383362663131323062666135386138323461626531 +31613235386439316534393637323236613362623766383439346338643264326232303735643433 +62613463613064633234386632626637633833663931333838656236653065373061643162643462 +36366431653065353831353035613438373461346531316462313161363862656262303962616134 +66643865613332666535336563376662666131393863626436626231626334303764343262666333 +36343666643062313065383566383633623030396631633838333264346434326131393637653736 +61663233386337653564396630393934663536366635343530326364646165306637323362646335 +36393138636365663330626565316531363735646439373539663130323962366462616335613430 +61623234633361383265386237306263636263616166333964653361653365383838633666393533 +37353939616330313837613962313837393032303631323133386164326134313463386132363932 +65386232616635313334356634633964333030653933316463316536383132653864633533376435 +31343234343765646437326631613436363536663662656637383135623839633139353530636438 +61626263333564393963633162326136666236386533643133363264313138663532616363666435 +34333561343263643735316265313239633337313031353135313233343033393961663333363539 +65356139393564376561356565383766663761323637646239393866386232356361336166316536 +61353665326639366161643938383234383038333462366332356633303437326138613761386333 +66623864343537383636653434646139643230393630376630626631346463346361633336306539 +35323266396463656630613737623937656130373866323462303530313538663665663732666438 +32306465613732363332633866333331636364323332616236353531666265626464343036373264 +61396630313034346439393064666565353132346466363063336262323465333130643464616432 +66393930326464646465613665363964633430646264313136643730346362323238313937386235 +62393130383462626639633535396331323130313634663434346232373865653835373238363162 +37343437353839626535383333373031623365396165613964356561623333653162663861313766 +38346263303965623963366335653062393761623731393034356433663264303763366338376238 +32626432353534343565396536323138336339393763346334633462393131663362313636333566 +39653934616563376466363931666331313165643138373336393838623165643662666162643338 +63343862663531623064613164323033363165336237623837643136323463343161636439323037 +33396566303633643765313739306238633863643237626334383831363630643466386466333262 +32646661316636303463366136653561313436646132643838356361623136343836643034633935 +63343336626266323461383239386431333965653263313931666464656138623539363463396433 +33343266373731646232663065646162343838383265326338626230396135333433656465396331 +34333566323131326238613433393534663936326538613931616139303436633363613232393835 +66396539656431323335653266326537313566633439336233653062653232643638643064396535 +63636564306461653162623631376536366264306166636338613932366633333735393533366130 +66316464386435653936333736346239316661343366636139373330346266626430626164643739 +63643032393638323134316433626338393833613864346131386139333039656534643232623266 +31363765343139616563636661613932313539633861386631663466653539643736326636393961 +38326637663332623738343434316633323436303637636566616562376333356266316561653965 +30366666306138626564346462376630626665323539613565313365333430386237613337633633 +38643831313663663731316332373462343431393466353165366465353136306336663066666330 +38393661303531653439363263306235633563643637653163303036653362616334653634626336 +63656266396362373931323539346539366332643033636438316239346238393165636530363137 +63653866333837356264366635663261326231343937376333636465303938656562333462613237 +63613930653363333364386665356461646135396264373962303236343133633361393430623565 +38366431663665666135393730663235633232643333366439646362626333663963323231633963 +37646139313831366661366437313563633535616133383030376664653130613765623864626133 +61626632623437343835343561613536396365353238623464346330363537656462303932326332 +33386136623663633763633733373235633038323637313261383832363635333861376436363236 +30663837656636633034616330306163393030616639316664376464326431363666353464336536 +38626533303130333065313333666135616630633362376262363561393364373233396130636435 +34643437636332346265633465653130623763666131363235636562333330313938623638656333 +61613835393931623636386165633362303437623833363865303463373566666130363435643038 +37336139333737356666343662373636393062383931616535656366303661666633383133343238 +38623335346365303932333337393833653437346630656364653762633264633435306138363665 +63613632643561386237613263303736393034616661343964643630623361356435366635666439 +62313030336138343035333830626130653933346561363332376639666437313963613631663939 +35323230613538363231643434346534663766666433643764313165643231376665626331313061 +62373861333531613834633964643263343662393239393536636265393830366262323066623461 +61366161623531633062313034373331366530303663353238326564663733626335623838613539 +35663431333362393661623932633237333532643630313736376132386233363431326462303432 +30326632323134353765303638646632623533633961313466383537356539316364656430326232 +34363765346265396261613936346263346539393466613330663639363535376430653261343434 +64313236633461626661396365363635313165653636663638333533636537363232666237306465 +37333633363431323963363166613031363466333233316662306337323535303836626663363032 +61313935383366306363623263353264346364383763376461383062613435373532333232306564 +35306263393365393365613765646262383034386637663439363937386663646235316165356532 +35323865646334393537323838393364333132646464653862346562616138326361323031386132 +35623164323337363833363631643966383630633533353866353732613135353737303437316135 +64623030333131613261343632616331326632636663383761306462303163653462653637366334 +32383933363030313531623964373030353030366638363362366530356132333035626237343631 +37356439333736306430313430663532633763343630366533366565396337306139643330356166 +63313763333862393964316363333364336561343932613432623032323263616634613030616638 +62656336366533303730623361633232333965613966353231653861346237333434396664643538 +34356662623039356434366533633664373037346536613938656437323861613965623763323236 +36383965386232656635663066633866393965356430393434393930623135623138376161623130 +38663262656466373034623231353938633366346637643737326532313230663833356131333334 +62643832363536396533353566373431393961333635623764626237313731623637326235326439 +34333264363832636239353033303965613061386436336630656336353738346665636237666336 +36343538356234303733363736636139383961626633323538303765623333373338616463326138 +36303863633930353666666234343232653833643632386565313631313736316130613163396261 +39353130373163653166316137303831333464393534383334306335643166353165613230346461 +38623337666463336238336434323530643233303565353231616139333766303638373539323761 +32343530393965343761636636303636353535333839393334316663393730663438386536393230 +65336339313463343365663261356531666534363236663836303363633435373734363235396233 +37613036313063343361383664323332633764636366383736396236383862616338366565626438 +66653133613534333530633637623630626563626330396461666465323262646433376162613033 +62363464303736316464336663336137353361336130653538366466666235376563306564646434 +30343139383635333166363333376333306333313763633537646163626463316232656436343032 +64613465383832333664343230333333653232396162333461333036653635633835343362646535 +61343133353736646634313138326137623937396466623337316461303363303237373665376137 +34663336326664343139383534623838663530386230613732623839636264336465616238353832 +35666166646336306632623863313033383735653664356533373361313838396565613033373132 +65326336626137373533663266303139386333623265363665316531643435323033633237336338 +64623162386638383664663361363531343333396565353034313363396662626364353463636433 +32366364393762343537626163383139343934646134356439383063396232643736393235623666 +37366239333562303030366330353732323235646536666334643838666539653937336435386230 +65623332353830346361346164653164666437326331333238663831396130393236653534613233 +39346337306438353838306563353339393361633632316264336534623461653866323634353732 +34383864636361616563393363346537313337316138333639663631373833376431373433343465 +33663535666261393936326462656139613434323736343331643139623961383438353462353530 +63383739616561313063373337333864623632656238626131623430393263393133613936306561 +39613636313765636137613439383737333737353563353039383462663163316662383161656130 +66323532303338643166393837333432333731313764356561663931613264313931656265363839 +33363735373332313561343861656162653039396138373965353338663037363461393761363432 +30396632393232653531373734313439373466633937663961613036383132396433643135663961 +66646630356363306530303763343637626139323133633838343565366635663833323161336161 +33653064363266316136636562393236646634643335373266326165383538376139643639633638 +65383632366664663662636630643939653764336132323832373863663862626138353761613432 +38303236386534313263323937326334666239303361343739386161363838303239313239653265 +38316537376565396265613661613465303931386136393937316566303262613862346639336539 +63313861396261313639643430343635313837383238656139326339353666303661333761323236 +38663831356332373664666635616432366562316438316265353536616332333332333664623637 +34353532643031383164633562356266616638623737323363313136663761343663653435656639 +32663634646533663834303666393331613461383833653566623037313631333763383036316463 +30623832333136383865666336663335353662363934373262343831363332643833393831653930 +34613263633136616134323466613330633332323035363131633665633139393332373937353438 +63613335376138656235373634643430386435663632383835366564653535643966323939623666 +66626461313333323932663739303238373435303466343639316466366661636635333832653466 +38323261316262646131306133326635396162613961663866653361333531626134666633663562 +64353630633566663832396361313533633564653737363133323363623532646566376664303134 +31343337386434366238656130616162646263316235303263646561383461663437383562646661 +61393464663834343763373039333862306537386564383731326335666332616539353064336661 +35376432303161336333386265626636663636646261353535663261326365666233643535316333 +34363035366334366533333737623339373835353238333030343862386265613838393039633139 +39623337643361613238333133373038343039373462366136316635373039623333656339663362 +31346463353164663737613833383761393136323134633666356563383461363138346334626235 +37616237356335356534633139323366313938306138346530646532336164306462313164663466 +33383735323034643036376462343662333530326239326166393939653465333637333261346166 +32353033343539623031383330643262633532393761653766626137386536643561393263303163 +66373963633237616436666666356665313736636366306636313937383066386131343938353837 +65653266623566613731326665393034393339656235336562303934303438363364376461646637 +34616164393465396338613531376138343933633861316663306663333937666564663835366339 +32396432303538346133626164663765626637383033663362333634366437623664373239363230 +65623830306439393565336662396461306632666539613965646565376438616361323465636264 +63366335363162643536386566633865343431306331313266303937666166643535643161663530 +31326463313933373631383037393563313865353039393265303661393532616435643933313362 +62653938356637343936346161633636636438306334666461313961653138613665383166646337 +65633231656361363230306239343261313634353032653463666331663331366166396230383663 +64643033323432643332653061656535653465633964343463626562383733633730303131363738 +37646631346665363232393535643734636636663132393633623961613634383463363138656338 +66386234313338313435663465346134633837336564306438343364633363616632323537613532 +36303532353033383662646636356464303534353339303864306330336336666231663835393334 +32376430666662376464323034353131643537323432396137643536643638636238396336333130 +63366461363035636262303032643430643533326638316463366337396235383135653233326563 +32613661373936623961343732626238303832346339356336636630343334313339386436623835 +65343436333862346662656235386539353838343766383535653639306132653139656264313264 +64343730643966336563326435336135643762653631336630376434613939636135323331396366 +32343032653861386663383131313633626437346335613162633333346261396132386663376236 +62653339643338646264306431366263623863376231396238343963343735633464373663373338 +39313566643432303332323865373931343863633661373564333133653932303736333664616231 +34316666363665633338633265613837366261323233393937323735663234393833303430333638 +30346665643933393963303733643630376563383831336361363934393562366635333665326234 +65643366343034396365623061323731383238313864383732386130313932316264326134613830 +39383965313736393835306438343232306434383761653963613034316334646639633132323262 +34303461363737613330343236326666373962303061323032323532643831313732616564343765 +30653737666665366338653837366639306634663133303438623431383563303463326164316231 +64666633666165626461613463353438383837346263373933646466663363313030356236653763 +36396663623634306364313430646135323138393035666430636161646134663261363336353336 +63396337326138616234333934383239376432623666396633666339373536653634363539353035 +35643565663861303431666339303362613035363839303131366263646230346636383034656262 +30613664353866663164623039353632323634383937383338653731326539336434343738366433 +65336566343831366264343635343965356463643863336264323863363031663563366563306162 +31356138383538653230393235646232623637353036363962326233383862313235386464313532 +31313961643665316233376163343631353338386163633031643731343135303834616332653766 +63643637653866303534306362333730306233393733383733386133376564626363643265333030 +65666230353036653138643733353736633264313433616166356436393262653664303138383834 +66333232636563353030326366323431326130633166646163383532383131666361633062316264 +37303066663237386438326235356138316438373235366562666166343830313639303332393764 +65616335653235353239333138663931636135333531333839373465363561643862623462353738 +31626538336332616566336330393961346330346663396530623539353730356333373765623339 +61346335346533643337623934353561666163333136613434383838633433356335653864666136 +62656463633965336132613461336637613530616439613538323134653039666234373430366132 +66333932613865313730643166383234343361336532303666353866376631646530303262376339 +63343639373739383136366263666133636533363531643439613064643062613532653865633231 +65316366323062626633616165353033623065636365376463623730393662643265343936623463 +64303731396564356530373436353039343264393763306535316330633036393866333961356234 +31313636636162636161306263323330353061613461363334326263396432336133653565623239 +38333461356463353232353064373538333738663461653631333866613532356538396538626361 +34333033633334613334306138373333656136313132323539386136316338383134313836396162 +33656564616561353431663864333338396237646666333265343163663565363232633362366132 +65393836306335356133383338383361653830313933383461393130333463646562656263313034 +32663037386665323633326466633431313432656331363963386535383664326434393864333639 +35373762363662616333643762356363303334633761363738393534353863633736613233633763 +33313665623565333762376334666639653566346464643562616162326562653836616239613366 +62356430383961633832646264366463373961353031663537663239326264343831346333653663 +36316334626137663637326366303366316636663233663338393831386666646665336137373562 +38663665323862373434623133306661616233653633346637616565353563326437643739323735 +37326536386566626437656636643231366330623562323066613239386632386561656137333338 +32306234333564633262646631613133653632646536363234326264366163303233663239303163 +31646634663163383439663530346163643831316264396635306663373535343766613831643563 +32323133336666393630343634363731336164643034343138613130346162643730653837386138 +66656632646630333564393231316333653461663435393433383733363131306632323032343265 +37613736643364333931343533353361326135376338326464623366623632336534623262343035 +34376662373731616365656636343633663866303932653731393437643637393961336630393663 +63316266353539363131636464343035346564306336643339306336306363663261396630383864 +30313137326630363334306262326333636532353066653331383661623039383536303534366533 +31313836323366626430393864303763666632363733303832303332363465616631623734356237 +35613335313162356233343738336134633166323065363137653630643565316333323239363133 +35373038373365366364663337346366656234663239333861623339626537333936373836616436 +38333634373561343433326333313534363565363833323038386331346534353863326332333230 +39313738336264666334346339326234633265343961373135383463356535313835393135376162 +38373134303030653537396661353165313362616436383463356334636465373065366435653662 +63326637666235613265326261313438653039626266393461393933643962343238386437636536 +61323161386464343963363962646263333263623839346131303834386538663333613862623538 +61386238353065393463313731353831336633366438643564353963356631316634393438313862 +62373164636239363466373762646635373065656163323461323466633562643030346139303034 +34353836336538633763643235343466393065373334613162376665323837393163306233666461 +64653463646232393839373361313438656361653033363230623530643933333335336433666239 +37363139623162306632333532653139383062666164373438376631303164303662383461313331 +61316537626166303535643666336661626435393462656561313634346136383332613563653436 +35343064616365643339313839633532393466633239313064356662353231376162643632666338 +30656664666336306462313135653336306264356462623633656562616634353539363630653439 +66363337383466343835626137646464366664386435616664633033613634613439346462363661 +30333564393132303461653338613662303264316534646632656663306630653631343731636162 +63633838663030643637373239303535306232366238643961623261346261376463643330366530 +37393135623035336534356630613530356439623631393564353161396162633362353565356132 +61373432633732353963366663623333393937656237343834663364383537386366316162366138 +61323039376432306132353834376362656335613935653637353332323735646263643630356539 +37656366613633396639653661623732333364663461376132313831333736313439643564643635 +61633837636337303235393532373430323935383333303032643164633536656664303234373266 +65353066646134613038323731666164333435386139373264313630303531633361373137663233 +64663537643039336435663037613866366561616535663633366661376163383836633562653237 +31343164636439306531373234623663656366653936663235656534373032333836303532386662 +35666265383734326530666137303232383733353431333938663134343365343535316139666566 +31613136343065376534333036313764646337313634303536363663323033616563323639333036 +35353737383130646261336635306264393361316134366532393431373365383730616630616562 +66386333303031376238366262303937393736653636343766666533636135306161373964323931 +31613532356237376334313936343737366435313964656564373765333631303535336337663539 +30343337373235313666303236353061373066303937313736663230646361376630303430393233 +36636166383233393932353231393366366230633538313566626434663533633861333938316361 +35653739613232636631643166623832633162653138613662396537396630616331383366646665 +62633339366461313166353163313831306166343966363038313432383761633761613964656634 +64343934383037626133346266363764646333363964303564373833643637346335303636313932 +34623461633962323430393966646136613465313037663034343363396364386233666237363539 +63626663613034366430323763313438393266326533643366646362386637613938653061653731 +38656264323937353966623763363164393839663665333539373963386266613963643538643764 +37663934643061326332383365613132326464643731373066633961313762373966346431313437 +30386130396437373533656537303033336232653036323931393064306534656366393563326366 +36636138623762346162326639313134653237633936396433636536333137303434636239653365 +34323465626536663865313835656639616161353863626339306534666438353064383037633433 +36643261363733326661356435396665366264343266663735373739303139353261626263353530 +35663134663034613436656239643434356363313837363937386235636165353434303834636239 +62613532626439313334343431386665353963613238616231643762356166646431623538303538 +63343061613463663261393261393934393863343131373466333862366461353237326232626237 +31376330383634383332393565623735303730633734353232623161626133616138666562386233 +66333638373933646466363639663862613166393139353862653437613833643161393461663334 +34653938303066316532643566646332316431323430373332316531373730396434343464366235 +66623866643066346437396561313866633761333839363232303336633633643533373434306633 +36386437376136313366323164656564393066303532343063346439346266336231626161666335 +62386138373865396437373736396466353761396230393334613462326336316436303561656339 +33323831646633646363336137313362333237383965383066626439633436666334613431373732 +65323432333430616263316636393538326130623332666131613661633338626365643666643235 +63333864653364613931373133383862663663356337336435646362323135643761316662383564 +34653632366163353831393766316633343532666131396239383737646564323034303630366365 +65646436663432366366303761303765376564343562326638656665326432616238333062643234 +66376634616365663464636334313664653036303634343038373332336135636162653238653131 +39663930653866363662393565313034333034613336346131323137376565646135613938656165 +33316138613334326534366263363536336363366162343934303237316439353435656261646535 +64333462636239656437666462323063613635323265366130396233303665306138316538373263 +66303838646465613462393635363561366561336339383932366533636562643930343830656238 +37626639646564313637303966316266663862303630383132643736323561633230356562303435 +36333031343030636261366263646332626631646232323264323338303532623034653334613730 +65383232633132623438663434653763393136323964373938653964653136323966303434373034 +31316433343763306362376637636663366133613362393031613339306133396333376566663636 +30333931393737613732333130633030623733666335386131613365663963316264396263663266 +37633839656665323032633964663230623736633166376166313933623938353432323666393334 +66343032393130353333646332643837623833333564623463633339663263376232333436316531 +37386431313737643137393262313132633637326239616265633861346232366138666236346539 +64656135626462333366613361323166313832396437393266346661663761353364626363376234 +30363662663331366566646238306630333064343436303066663337386334393635373862306265 +35666261623438616565323236306539363032636636356663343130356335633937313262353963 +64336432356437363739363637346333303630323934366265363137323932323362383334643063 +31623762613738376535393336343764303639666331346131356336393666653139633565333335 +33323863666232333366366461326233633664353833316235343438636438623038653132323935 +61386139636133323661623739306336336536326663626562333935646135653239653663333535 +61663636353533303633326537656536323566373234363161656534643332653337613237363066 +65396166373566363632323039666533633330643037396465646531313231333135343161643631 +39373833666165323561313238346539636436356231613138306664306231346338383963653066 +32306635336634353962333735343731613837646131353532386431633839633337303139636336 +37663862373030373562313836366433383261656135646230346338653730346130613238353236 +66316639366239313262396232653638343930333037316137313835353764656430346232396235 +64303534643834316138383735313066333165363634653164353864373932376531623461333463 +30626131616362316438623032306631346631383934356634646264626231393161383838653138 +62643836636561376337383836623966626262643933353330363462306666393934343435316532 +32343231633134656361616430303162653162303963303932613138366338346438616434313639 +66626437366161363861366661643561663866366135346262633531373035633262343562376132 +35613531623538376131373461663431396131616233646364373732616630323332643039326264 +30316230393766356431633663353961333266303735356266633538636266333139373863346665 +34356264326564346434396262663962303064383238313234323662323662383939633363353930 +65373632343861396339636637353964626634616365636163386462346664653037323466666233 +66643635656561326637336262346236313132373062363466626632303737656565333830383934 +33336364323465393732636636353936386663636362623832626262306431633838393762323430 +32333136356437353833636163306334326239646364353130386434316661383362336162346437 +37373565653737363139646630656536343630666133396463623239353137316438353739346664 +62393731383539303930613363326439366366613565363431666436326234303263363232376662 +39353135383935373036656462326361643138346130353439383466333739646661643537343063 +39633836396332386638363330323239636335343835656163656337326162616532376335376565 +62306137616237346262303836613331663065643033613531333032646361366163313931643537 +63323234353936333566333339393738373033383563353339323230353532656436343736663962 +36616534336165366531643537396164653033366331373263366465333662636234373664366334 +31336637663234623935376461306130323134663566363639313664336162386564373130376338 +31383636626165316131366263316437336664393364393064643339356364316664663665646633 +31303332626235343036646666613939613563326232663962613738363666656665343364373132 +62343133663163353966376164663634356531396366636136303632353832666431333136386433 +64353762663236613831633466383166343938336638306665613339663363653533336238376166 +37613539366638333738663536656431373439626561386335303230313763303761613530626561 +32383538656133666533663531343864323335613637353965656565643033343363626137363039 +33393334663739613733626137313530353665313030643937383033636234373634316230373666 +37633266363834343430646364616366373363343336313462653862613662666361393464393764 +36346636366262633039336336376665343863623765373333386561343033383939646533363036 +66656565366238643264363761663566313437363237396232623761383265666433393264386638 +66376665386137633838643931396634346435613136363937346562326435626262346638396466 +34333336373061663661643763373038306133623561623030343836363961336636646633336339 +65316131646264303632653530336135343465393939663239343733366266336362323462316437 +35383735316265663133356632366638616632376338306632376630383232663237343464646535 +35363730623663636331633430356133323462313934656633656538656534393362663862666537 +35643535313766646535333332666138386464323438376637343936623264396664636234346634 +38393365333463323365663132613432383932393066363330356262643861366335666236656131 +65383835616662663463653332383330376166633565623938336430333139323963373433346463 +31653139663338353630623133616536346333663161666562323733346661343265663736623561 +30316135373139643562333763623432313563376664333835396465636331326661303638616563 +30613339636533626232653230306333636166663664613536356631316363613262353565386239 +32373134343864633432643131313065623666626238353062613636326333633731346431313966 +66626366663266636130353461633761386165373133333230646434303164316533646162363837 +33366231656131633130663064393730306664653038643937353965363932626230 From 9797ac3d4e8a661233e1a009808670d78df0ed40 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 11 Dec 2025 14:23:21 +0100 Subject: [PATCH 52/73] Add package php-sqlite3 (required for teaching purposes) --- roles/custom/fvs/tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index 0b5eb26..d374870 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -62,6 +62,7 @@ - okular-extra-backends ## needed for CHM files - pdf-presenter-console - php-cli + - php-sqlite3 - pipx - planner - pulseview From 3bfc3de6a1c81eac478776d328373928e46b9fa3 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Tue, 4 Nov 2025 10:41:45 +0100 Subject: [PATCH 53/73] Allow using tags using import_role instead of include_role --- lmn-client.yml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lmn-client.yml b/lmn-client.yml index 0224455..4d4ff4c 100644 --- a/lmn-client.yml +++ b/lmn-client.yml @@ -80,15 +80,17 @@ loop_var: rolename when: custom_roles is defined - - name: Final tasks - ansible.builtin.include_role: - name: "{{ role }}" - loop_control: - loop_var: role - loop: - - lmn_security - - lmn_finish - - lmn_tmpfixes + - name: Import role security + ansible.builtin.import_role: + name: lmn_security + + - name: Import role finish + ansible.builtin.import_role: + name: lmn_finish + + - name: Import role tmpfixes + ansible.builtin.import_role: + name: lmn_tmpfixes - name: Apply roles that must run serial From c53e43f4cef06518ad907cfebc06c6b9a4e6b9da Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Tue, 4 Nov 2025 10:44:56 +0100 Subject: [PATCH 54/73] Tag tasks for basic installation --- roles/lmn_finish/tasks/main.yaml | 2 ++ roles/lmn_misc/tasks/main.yml | 6 ++++++ roles/lmn_security/tasks/main.yml | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/roles/lmn_finish/tasks/main.yaml b/roles/lmn_finish/tasks/main.yaml index 2a44d0e..92ed890 100644 --- a/roles/lmn_finish/tasks/main.yaml +++ b/roles/lmn_finish/tasks/main.yaml @@ -6,6 +6,8 @@ - "{{ extra_pkgs }}" - "{{ extra_pkgs1 }}" - "{{ extra_pkgs2 }}" + tags: + - baseinstall - name: Add backports for {{ ansible_distribution_release }} ansible.builtin.apt_repository: diff --git a/roles/lmn_misc/tasks/main.yml b/roles/lmn_misc/tasks/main.yml index 7c15ede..23dce2b 100644 --- a/roles/lmn_misc/tasks/main.yml +++ b/roles/lmn_misc/tasks/main.yml @@ -167,6 +167,8 @@ src: reporter.j2 dest: /usr/local/sbin/reporter mode: '0755' + tags: + - baseinstall - name: Provide services and timers for reporter ansible.builtin.copy: @@ -177,12 +179,16 @@ - reporter.service - reporter.timer when: misc_reporter + tags: + - baseinstall - name: Enable reporter.timer ansible.builtin.systemd: name: reporter.timer enabled: true when: misc_reporter + tags: + - baseinstall # Prepare CloneScreen on Presenter PCs diff --git a/roles/lmn_security/tasks/main.yml b/roles/lmn_security/tasks/main.yml index 62e2754..6c9edcf 100644 --- a/roles/lmn_security/tasks/main.yml +++ b/roles/lmn_security/tasks/main.yml @@ -5,6 +5,8 @@ key: "{{ item }}" loop: "{{ keys2deploy }}" when: keys2deploy is defined + tags: + - baseinstall - name: Allow sudo without password for ansible ansible.builtin.lineinfile: @@ -14,12 +16,16 @@ owner: root group: root mode: '0700' + tags: + - baseinstall - name: Disable ansible user login ansible.builtin.user: name: ansible password_lock: true when: security_defaultuser_login_disable + tags: + - baseinstall - name: Limit SSH access to user ansible ansible.builtin.blockinfile: From 37b8b94c9dbd077bd153d0eeee1e6461b5292ee9 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 15 Dec 2025 11:52:07 +0100 Subject: [PATCH 55/73] Make domjoin user and password configurable via inventory and join domain only when necessary --- roles/lmn_sssd/defaults/main.yml | 2 ++ roles/lmn_sssd/tasks/main.yml | 23 +++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 roles/lmn_sssd/defaults/main.yml diff --git a/roles/lmn_sssd/defaults/main.yml b/roles/lmn_sssd/defaults/main.yml new file mode 100644 index 0000000..e7664ac --- /dev/null +++ b/roles/lmn_sssd/defaults/main.yml @@ -0,0 +1,2 @@ +--- +sssd_domjoin_user: global-admin diff --git a/roles/lmn_sssd/tasks/main.yml b/roles/lmn_sssd/tasks/main.yml index ed44ce5..0ff5b60 100644 --- a/roles/lmn_sssd/tasks/main.yml +++ b/roles/lmn_sssd/tasks/main.yml @@ -13,12 +13,23 @@ mode: '0600' notify: Restart sssd - ## Either one of the variables is defined: +- name: Check if the machine account password and the join are still valid + ansible.builtin.shell: + cmd: adcli testjoin -D {{ domain | upper }} + register: adcli_test_result + failed_when: false + changed_when: false + + # If domjoin not valid: - name: Join the domain ansible.builtin.shell: cmd: > - echo "{{ ansible_cmdline.adpw | default('') + adpw.user_input | default('') }}" | - adcli join --stdin-password -U global-admin {{ domain | upper }} - when: > - ansible_cmdline.adpw | default('') | length > 0 or - adpw.user_input | default('') | length > 0 + echo "{{ ad_passwd }}" | adcli join --stdin-password -U {{ ad_user }} {{ domain | upper }} + no_log: true + vars: + - ad_user: "{{ 'global-admin' if (adpw.user_input | default(ansible_cmdline.adpw) | default('') | length > 0) else sssd_domjoin_user }}" + - ad_passwd: "{{ adpw.user_input | default('') if adpw.user_input | length > 0 else ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') }}" + when: + - adpw.user_input | length > 0 or + ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') | length > 0 + - adcli_test_result.rc != 0 From b807d2142e6dfe2c800f4be6badeea14a814eeae Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 15 Dec 2025 11:55:20 +0100 Subject: [PATCH 56/73] Reboot system after initial ansible-run --- roles/lmn_finish/handlers/main.yml | 4 ++++ roles/lmn_finish/tasks/main.yaml | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 roles/lmn_finish/handlers/main.yml diff --git a/roles/lmn_finish/handlers/main.yml b/roles/lmn_finish/handlers/main.yml new file mode 100644 index 0000000..bae24ff --- /dev/null +++ b/roles/lmn_finish/handlers/main.yml @@ -0,0 +1,4 @@ +--- +- name: Reboot client + ansible.builtin.command: + cmd: "shutdown -r -t 60" diff --git a/roles/lmn_finish/tasks/main.yaml b/roles/lmn_finish/tasks/main.yaml index 92ed890..d7ec865 100644 --- a/roles/lmn_finish/tasks/main.yaml +++ b/roles/lmn_finish/tasks/main.yaml @@ -29,6 +29,18 @@ - "{{ extra_pkgs_bpo2 }}" when: extra_pkgs_bpo | length > 0 or extra_pkgs_bpo1 | length > 0 or extra_pkgs_bpo2 | length > 0 + +- name: Check if former ansible-stamp exists + ansible.builtin.stat: + path: /var/local/ansible-stamps + register: stamp_exists + +- name: Trigger Reboot if no former ansible-run is found + ansible.builtin.debug: + msg: "First Ansible-Run on Client - Reboot handler started" + changed_when: not stamp_exists.stat.exists + notify: "Reboot client" + - name: Timestamp successfull run and send up-to-date report ansible.builtin.shell: cmd: date --iso-8601=seconds >> /var/local/ansible-stamps && /usr/local/sbin/reporter From e45275181f2bafecff737767c415dbfd5f3fd6f4 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 15 Dec 2025 12:12:05 +0100 Subject: [PATCH 57/73] Encryption role for luks encrypted drives including TPM2 support --- lmn-client.yml | 1 + roles/lmn_encrypt/defaults/main.yml | 3 ++ roles/lmn_encrypt/handlers/main.yml | 5 ++++ roles/lmn_encrypt/tasks/main.yml | 45 +++++++++++++++++++++++++++++ roles/lmn_encrypt/tasks/tpm2.yml | 42 +++++++++++++++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 roles/lmn_encrypt/defaults/main.yml create mode 100644 roles/lmn_encrypt/handlers/main.yml create mode 100644 roles/lmn_encrypt/tasks/main.yml create mode 100644 roles/lmn_encrypt/tasks/tpm2.yml diff --git a/lmn-client.yml b/lmn-client.yml index 4d4ff4c..4a2fab7 100644 --- a/lmn-client.yml +++ b/lmn-client.yml @@ -49,6 +49,7 @@ - lmn_network - role: up2date_debian tags: upgrade + - lmn_encrypt - lmn_sssd - lmn_mount - lmn_kde diff --git a/roles/lmn_encrypt/defaults/main.yml b/roles/lmn_encrypt/defaults/main.yml new file mode 100644 index 0000000..b9b7837 --- /dev/null +++ b/roles/lmn_encrypt/defaults/main.yml @@ -0,0 +1,3 @@ +--- +encrypt_passphrase_initial: Muster! +encrypt_tpm2: false diff --git a/roles/lmn_encrypt/handlers/main.yml b/roles/lmn_encrypt/handlers/main.yml new file mode 100644 index 0000000..0ef929f --- /dev/null +++ b/roles/lmn_encrypt/handlers/main.yml @@ -0,0 +1,5 @@ +- name: Run update-grub + ansible.builtin.command: update-grub + +- name: Run update-dracut + ansible.builtin.command: dracut -f diff --git a/roles/lmn_encrypt/tasks/main.yml b/roles/lmn_encrypt/tasks/main.yml new file mode 100644 index 0000000..83196c8 --- /dev/null +++ b/roles/lmn_encrypt/tasks/main.yml @@ -0,0 +1,45 @@ +--- +- name: Find device with LUKS holder + vars: + partitions: "{{ item.value.partitions | dict2items | selectattr('value.holders', 'search', 'luks|crypt') }}" + ansible.builtin.set_fact: + encrypt_device: "/dev/disk/by-id/{{ partitions[0].value.links.ids[0] }}" + when: + - item.value.partitions is defined + - item.value.partitions | dict2items | length > 0 + loop: "{{ ansible_devices | dict2items }}" + +- name: Get luks slots + ansible.builtin.command: + cmd: "systemd-cryptenroll {{ encrypt_device }}" + register: encrypt_slots_result + changed_when: false + when: encrypt_device is defined + +- name: Change Password of Luks password slot + ansible.builtin.command: + cmd: > + systemd-run -P --wait + -p SetCredential=cryptenroll.passphrase:{{ encrypt_passphrase_initial }} + -p SetCredential=cryptenroll.new-passphrase:{{ encrypt_passphrase }} + systemd-cryptenroll --password {{ encrypt_device }} --wipe-slot=password + no_log: true + when: + - encrypt_device is defined + - encrypt_passphrase is defined + - encrypt_slots_result.stdout_lines | length == 2 + - encrypt_slots_result.stdout_lines[1].startswith(' 0') + +- name: TPM Device Check + ansible.builtin.stat: + path: /dev/tpm0 + register: tpm_device + when: encrypt_device is defined + +- name: Include TPM2 role + ansible.builtin.include_tasks: + file: tpm2.yml + when: + - encrypt_device is defined + - encrypt_tpm2 + - tpm_device.stat.exists diff --git a/roles/lmn_encrypt/tasks/tpm2.yml b/roles/lmn_encrypt/tasks/tpm2.yml new file mode 100644 index 0000000..50a989f --- /dev/null +++ b/roles/lmn_encrypt/tasks/tpm2.yml @@ -0,0 +1,42 @@ +--- +- name: Install tpm2-tools and dracut + ansible.builtin.apt: + name: + - tpm2-tools + - dracut + +- name: Enable tpm2-tss crypt module on dracut + ansible.builtin.copy: + dest: /etc/dracut.conf.d/crypt.conf + content: add_dracutmodules+=" tpm2-tss crypt " + mode: '0644' + notify: Run update-dracut + +- name: Comment out root device in crypttab + ansible.builtin.lineinfile: + dest: /etc/crypttab + regexp: '^([^#].*)' + line: '#\1' + backrefs: true + +- name: Insert luks support to GRUB_CMDLINE_LINUX + ansible.builtin.lineinfile: + dest: /etc/default/grub + regexp: '^(GRUB_CMDLINE_LINUX=).*' + line: '\1"rd.auto rd.luks=1"' + backrefs: true + notify: Run update-grub + +- name: Insert TPM2 to Luks slot + ansible.builtin.command: + cmd: > + systemd-run -P --wait + -p SetCredential=cryptenroll.passphrase:{{ encrypt_passphrase | default(encrypt_passphrase_initial) }} + systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 {{ encrypt_device }} --wipe-slot=tpm2 + no_log: true + when: "'tpm2' not in encrypt_slots_result.stdout" + +# - name: Update TPM2 Luks slot +# ansible.builtin.command: +# cmd: systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7+8 --unlock-tpm2-device=auto {{ encrypt_device }} --wipe-slot=tpm2 +# when: not grub_config.changed From 241f13d1366a160c7c55360ce05c03fe818604dd Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 15 Dec 2025 12:26:09 +0100 Subject: [PATCH 58/73] Add domjoin user, password and disk_encryption passphrase to inventory --- inventory.yml | 1370 +++++++++++++++++++++++++------------------------ 1 file changed, 689 insertions(+), 681 deletions(-) diff --git a/inventory.yml b/inventory.yml index f7c7e17..9f3180a 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,682 +1,690 @@ $ANSIBLE_VAULT;1.1;AES256 -32633161383437356261333661306266323035623134323939356531313039643537373330663632 -3863313135396664363338363765633431356461313466360a623135653030376565353231316538 -34643562393630633431353937613364363738323832313232396262376436643230363739323530 -6463383530363665350a363535623233333461383137366566346266316535396663353038393763 -38656337366239643338323365343735376263313363653865613263663534353339646631383965 -38396432666632353330363531373966663562306538336536643563383930653166653734353936 -63336365333565313639333833363034613137323839373863323836653734643734303534616465 -34626333356663663338313730336139623037656566313034636130373466303265653231343461 -31633063316430663635633561313030353963383664363661623634656161663965333732643364 -62653666336330666562396665663065376132306433376532376434633831393437346465643130 -37326361663730313162323631626233373466333637633765353163666463313730366534376538 -62306139393564613464666231343330383338376361356564336137636661326263323333656136 -35616132616333366430346334663738386665366634313833313466306635646233623761616333 -62373262636231653436653431306463323961303831383164316333326135383561316133306238 -31323439393534393162663433303164356132393934303834313865643862306331396337386466 -38313031633839363434353566306164376565616430323863366331373861323834643232396434 -37376463663362613965303034323533306437613132306232383033626636313363623936393435 -39343633393931636265613837626531396431653236333161303234656335366463353932396539 -36373233336136653066353432636136626665396162393933386135353762383861613835613539 -37363562343030306165393836386232653062303430363030303663326665616162396631646131 -37656135366366396633303733303037653364646331383365353464653961643032343930623430 -63326333323464623264656131396236383630616164656438643630633530323263393735366465 -39313639643938663332303065613965646166356264646361323232333961326435626332613162 -33646264633836303262636662653764373764646561646131383763386535616235623432366130 -39613037643038366664393637373461376436373566303731383866336134626265666561316164 -37376335303865353232306132323539626538333466653538366637343732303465653438353665 -30353833393862373462313562653738636235363566336136323665366665646163386665353939 -30663737356538646230313332646162353038636539393136336536656233616339323139623835 -32666261353961383435363361306430623864643561333832333765346237373964663263646262 -37623962313061343931633738303630633134626266313361633164363661323064336138623237 -39326232653361323733323061623839343365633962356634323366326134613666653666366138 -63613863316230653362616237383636613637313138323961626135356563373533353439383666 -39383435333136333266306362373266393431613937353939376362393565326238666632373563 -37303032346330643531396631383265616364343633643738333137636366663038313732373434 -35656363316562623066393063303231333131353436353961313833336236366431356134343430 -61663937366165326533383934333262303132643732383734396264643230393630653136323930 -63376635383536383363333335373138313562636534346666383539313065643733633364616266 -33626461646363323861643061323064613266653237623661386165313335656335646238346661 -31373664663033313134633632663462353035653439393835303062636136313837343530326633 -62613933393163653565303837303634653530633766363333376464616536616332663761643762 -35376464376239623033336231666137353431656136616136626636343936346331303837303535 -38613534323738306663353238613938343135636230636436376265646666313536656438386431 -32373461633930336432306532353663363137356661383533343166626263663830656332636337 -66393037383633366138643263366661643031326531373938346431656565613965663438633236 -31393530326138623764383762616632343461646237636435373465636263613035323735383965 -65333238393233343637646237353261336136386239626662656637373239336237663437646333 -38616565363862313832653765613436656639653462303537343565373765396236366262343933 -65383637646136653432353165336665663666616564323163336663636638333937366633393166 -36356539353032376164363039353137666139623263656636373938653664343835633437323938 -33336337373138343934633935636661616366316233623865356265323433653233373836613535 -65666334643164633262323131366262306464373462303432626631353638373136373763353162 -32363233303532363037373466383735306264623734386632353962633238653963326231623663 -65653634666561373138306637343836326139656336623934333935643535363966333936333139 -31353662373164396632363534326238376433653865636533613839666437336337656439343930 -61356630313436383430386665636464636564343332363638313564666664346365643835656131 -38653661343634396531616638366538643839616364396330646632303564613031396534326234 -39376431343962383335633633383761383864363263663435383464366535373561626331353963 -33616231373037353236636538636632653037313966643934393930636234656238616339323064 -39626436353537383038323532623237613939363338613734346362316663656332336537336361 -34303065366331623563356463303163663865356561356266343933643166343534623336653235 -62646232303538393364333339633334353164386635353535343730316662663638663964336561 -31376664363335383563303136626463326331623932613433623133356662663637646164623237 -36393439373338353462613336353462313865616538383463613862313530656137613463343533 -38613331336330663763393633336333663930303932363361393261393735373833623235343537 -33356337383230653134303035383266396539386632653131636135313336653436393866643865 -37666362386537653735303831396265353938343136663937333462356337616238383936653761 -33353066303034623532363430343334303533656665646661633565383735643838663335323234 -33643665666631366334353939663665666539636139643736343332633939303733643638363135 -63356361623461623138633563626630303432323862656635353162316236373465613464616561 -65333933633539373136333063363133616666306535346137653462306430383634633363656263 -36356166303361343435383437313530393661306331336431613935326666386634336530373362 -36383562323739626331626133363366376631663234323339343931353766363634373432646139 -61343637623230306136366362343238623739323364353034313036636236643533663963653430 -38323336373932653264316430323237363632613933346437626265623937666239373932643834 -39323133643535363338643931346464333030303664633837343261303164633739393732356364 -31666335643363616131613664666361343636306638306662363833313335353238646436306336 -66343962393761336563623130333637363237663935323936373365306164396466333933373238 -66623337383566646262336166663763656532316232626365353564616633353966653735663162 -37346634373134643734636131336634383230346132613861343163316431323666373233393332 -32363865663563623466626130383532373837616435636566336364353138373035666433386563 -36376139346635663434376439356361383633363337373934663135343961333365613161373137 -35346361326132613461343639666639323235333661363732646362616538323636366561343664 -32336364393862376232666164666435386337396134333931626566356137363736393832323434 -33306334333661653435653831303539303337626263316335393366623661613536643063626639 -32633264363262363163313235666232326634323337373866323137333466663763306235373432 -63373764653331386435386563656234303030326266316136333535373834306436366337633936 -38383461333632326537616361303361633030326263393436346661353037333462623931363963 -35326633303932653961663866333261353564396338626261376530663938333966316430653332 -63613165356262373930636264666563653031333866663632613765396464363139353437323165 -34353238616238333231313331643933333161366161656662643964313737306236366466346137 -66353965373564386638383234623239356634376165306466333735343937326461316637626137 -31323330383761626165313664633763333036633836333537656638323831386438656633666465 -61313461383335663236303134316166303566316162663136656538663361656234356633623765 -65376466346130376432323631663263346539336461366437303332393131613931306432363534 -62316164346236326362333964396161663938636164636162666230396663316539656463346365 -32613732616463336539333665366534643632653736323363303031323239616335633735653939 -31623432383262313766666433343261303161663736303139366465353430633765636431616432 -62613266376532613936663961623261306362616330393530633436663038663737306337323431 -31313735333763306530356461323139626133306161393837323234323665613464653830366430 -31623839326535393136336365383239656166653865616531346135653362646362363364303438 -65323961663563653965343864363432353937643638333630313133663238623432306235636232 -35663166323736613561343736333434616334626361643531643262316430303537346666323264 -64643130623061376161613566383634376134656566313639666563376161653665313663346334 -63333534323135323563363561646564353432316138313035633530313736336336353462623934 -32316238393933663061613630333830373339616664636562616563343963623038366435343831 -33636134663533656536336636303538333030633536303931363563393661383461316264636536 -39393934363831393939306136326265356131313231633139636138373065366534356139636561 -37386562306434393162363864306264376166373466396166303763656165363839613761363132 -61616565323138303932396437316632316664373232646463323830303363626338373933646239 -32356638336633623665333466383431373830616534373133653339373436643233623062366664 -38633761393031396130656234613665393038346563386562383030636232376339303937323666 -33623930303135303534383661336137353730643531303166636638346337366361626637343831 -36643161373634383265653962313261353634623161386566613966326638316564366637303864 -64626539383165643832316561393538663835613531343133373764656661626534303165366631 -39393461323166613339396665323564316637363932343437343666646561393662393539366635 -64373964313238663539623566303863313364613336386335646364373735613936626262373266 -31353665383634653239643664643366346663643535333038323937323238613162633964663932 -30396530663762383461663165623933653161646531646265623666386231336535326363666234 -31363834333064316335336335306235363434626333323133333461633866623031653934356432 -30396132623937363532366133323365653930643662653631373139326336306532323938626432 -39646637646135633231636137346534343462323437306661396165643730653335646365356537 -65623234633932336530323863633830313762636333623864613434366531363235323565333330 -31653866666466633739643431643335346162343636323734376335316566313432623664383962 -64343037643133623634643634643563373339386163303232366161636266356461646664643666 -66323463373661373563393866616465633461333937323336656565643433336562323431396134 -64323865643731643461346666656334343337333635666233333834366263336230666430613334 -62643230616261346366333034626238306435373838663936663237396539343861323433396130 -36383234373937393131643338393138313337613736663435623866396530386236373437643361 -31623464373839623564376162626364303630386130366461653839363533623836666434643031 -33633335313730373262656131353563623837396639363334353265383036663039363135616465 -64346465336665333161356232313533303766363365383066323133303437366630363666373836 -36363335373039633436616431656135613435326333616431663431643839626639643462646236 -66373161323862333537383765643836666663356434393363333832323231333334373736313665 -36326132373232343136333637366166303364643465333564633237393362366462313933343231 -38363362313265333137383563656233363036323165666565333235623332663639393839343333 -39366366633630363861343230656535653461383663393137363335656462343430356661663230 -66663336663331386233353563363632613232613331306333353032313630323338623132353064 -37396464333638343661386161353831356532623734376433306666656532346630646535353566 -32626166353665616661313236653765353430653835396538663236373934633631326563366664 -37643266306430653131336136316265353334356366386463356166373735613138353436326165 -32343734366464616130313235376536623436393534356262633934633632643262323261633436 -32363663646663623338393338336463663834343637623531666265343362616637653330373462 -30376633633261313338613737346538616134343732333331303130373862363239313164643064 -34623130306666343338636263646366653165396361643262643432636237646436613863333163 -35363138643964396466356631353632303937633664336264626432363765643338663634353966 -63313664646566363237623539363863336439653666343266306534653665626239306265376362 -37616261393166613362633438666461623865333439653637623664396161616464666439633638 -37633162633863316364366435636639656262666261663336313961343966666438366261393931 -66663563373262623831343232353134626133303631636232313263636330326535326536323331 -34333037346330326661336161646366346666353862643234323433393932333161363366363665 -61323039323538366663636432333234323265326336623533323838653861356337616465343963 -65353330316335376331653232393233353338346436356335343162613537633164306537666361 -35313765313361633761616536306364313635363563373935376164616236363364393039333031 -30326661626436633563353930396430646433666231353538323561653562653164306338636462 -30326438663262343461316536336166343864353965353465353662326662353335633861333635 -33363131346134396633656266313239363531663537373461303466393139656232663764366464 -65666535663037353064323935373833633633346138333930636339393163356237353531616232 -64306539323931383330316237646130373338343835303834363832323234393963623631633534 -30636333346338346637303932636161363437313533363864383966633436313537626437633863 -61333738393635646331346565366132343364636662356536613961333964343335653633336666 -33346536386664336362616464363037366232626330363262373963316334333366393666396364 -33326238663333343266383464373238396334336262636564376461366366343065336136643063 -38656235663733303962393963643236363032356435666534366232353763656234353163343234 -65636131623537653339363033636131343634373939343262316466623335326130346335376565 -30633239663164643765336663373737303632356364633037383231626338663463386162343338 -37333335623562313932633236323064383336336564346632333663316462373636316337386566 -35636364663334376265363765656436653961373833363065313966653938646233333631646232 -36386633393732653439643033643633336136616263663165636338343662616266303231353462 -37386339666638303735633639646465396638336331633061393331393736396164616632646161 -61383561663265343433663836373936393434636237663033653766316332633330393638373239 -65663765383839663261623665306230633734366334383461373135323232383363396464653733 -64366666383938303438343434636263613339396336343163376435333835313764663339356138 -30643137656461353864383330653735383935643566396333653437636636393663623561316362 -61343064393564613135363766313566303763653539396662383432383462396562333036366566 -31616636613835633838633334376361366232383632656131643136666136613433383365333635 -61323231343865623066316631383561663564303136326533333734626336373637313738633162 -30396433613931643461616137353535326364663238353731363835356537343165353436353130 -37373635343734623462366165356664633062393536356438643639386338643134646263656465 -64396138353337613231636538313837336531653032376132376333663162616136613261336231 -63626366613231666663343661393466316530303462653266633334636631336161373061343864 -61313262323632653239363730373736396430303133333537623535366337613531316136323131 -37363562663932623264663039376563383164336465366336663862383134353535333731376231 -63316539383065316164646633343433643538396263303832333335653736333639366536303062 -33323466633361363863616130633466323165316565373330656338663434323565343864373138 -33383234373762393832663038336432323234363263396239383236306339326332323166653636 -65303430326533313466346331373634363362333937313530313436353165353536336437363337 -63393131636339366630386131323133303666656431323330656238333634366537323631316536 -61363831336238306434373238623966626238366435346261396638643164633536396331633661 -36313035313961633837316538383662353362336562626366386636386233616537333834346538 -33366336626165363036613135633837366534313563376530303231643665386532396534376465 -62626162386363636364623539383462383339363461346361343766353232343231323863636666 -34376338613034393933633763653630663835346236373536313731343931633230396166346165 -34646536306465373864396366316333373862653935323537323765326438316663653436616534 -39626366353733383037643866326638356536626166653239636563656331613938636362366239 -33636164623331366632376238656636646131353630623337663437393835383466613162633866 -36633036313462663638356134346563366334666331303234666332663965316265343061393265 -35626631316536396665616165343536303332616635303763316161663530353237303334326138 -38343331663132616663383133613633373639346564363464376332313465366166633732356666 -62336432333430643664396636363032623138393366343235643131626137376361646563663133 -36316463323835666634616134623162313333626134326162306132626161303739623738613434 -33376461636435636332626530373464373162353231666233666236653936616236613437313031 -37383531366138363165363132653866386465363066623431346439366165346531623263623037 -32313738393434356435323130383662643866393635383839383662316533656366626664323235 -65383938643561643664363237613763393465666239336337643161343861353466363563663434 -63336331613731343937666363376238353936643237366463643635613465343239613866376632 -63383232653332633438333966336563376538396235363433313731323536346338303436316564 -37323832313265326232326633656236383531333039383837303338393936636231373162333039 -38636666363961353630626137343339376232636230353364363466353961303033613765646137 -62623639376366333264356237313432363830633839383434653566396365646337363530386463 -63396461313066653665653138653636386463313464323935353165396536393234633365316535 -33666230663530326464313636356666636162613661356531316435306631383037353335663732 -39663235636533316465383235663738356331656434316631313639626332663135653430373462 -35333762353330666637343662303466663437346133616530336164396236393063303132363130 -34333963383133623834343339653662623839343736613361336136333165613335333036616632 -62373163346634386236333566653831623135336433613661323337653632376663613935356265 -34316632383332663034386461393065346137633938653663616332323833333435336531646533 -33306666356432396438663032363233363330346364373861316130376433333130623964326566 -63616334313637653833323064366561613234306535656533653939386139313964366263386431 -31363533613363646234393938386662333363396238343966386363396261616534663364373332 -65386235356335653739376635323463633262363239393235636232633639353835343832636565 -66626466313932626434363662323766633239646534633066313562396230633930326332626538 -64323431656430353233396561353363303836613132613131613037363434383133386231396134 -37653539393361306266653839353566616364383939393430363438383435666665666233633339 -35663630656461366136396231313935613761633536333236653661623236343431353565663436 -62343161343061333238313030613563626263306431613332323630353134626138626365383135 -61326638326336383739303139346438313164613836643561633138386631666433323731373938 -61373938663833326633643861363135363838313532326335396330373936646133363236333463 -61633764363761633062643533333737623532636231386363313664323033393931313236313834 -30363433663738616536653165626365623664653937333831653132373533656332373564353135 -35653438653162653338373662373939663232376239376261333465386463633030626239646531 -62316164653162643863363634396135623464393437363661346436356336663864353439356334 -31306161626131306239633564643062343235393231326339383363616236663661373132653831 -39363835383966373062316165353634336564366238383132353332366363323337326433333834 -31643137613234373233366562383632646363366266633162626366333964626336303232346532 -62643164613963636233633165346161613765643536303539616132656232376637363331626334 -34643365613337313365353738656166663537363764613361646265633862313563356635643032 -64303632613636613361613762353161303036643434343531373734303438376361366132313262 -64663634326665623532623038376365613631636236313839386535383662626361353132633865 -63353130623033356134616361613831386236313363383564303564626132333036346266336262 -33643636303230323263666639303364393861666335613335656163666230303330386663613538 -38353536303833346436343430666432613235656338636131343464633865663932646337373035 -38306265386361383337303136393363393834646564393139306632396365393639333235646132 -61353666333964373462333764623438666235393133343339346235613431373932363832663464 -63613932333137323466393735343361343431393836386361646330383134373837396131323265 -39613738363066363632623030653762653236663564356266616239626330613430346266303361 -34373863376335333263376463393361666232356437376334373835656632333931376461343662 -32636637373335316265353135393436316135396662313362306232386666313730363232613962 -34663135373165666534343866643435323038616661353538616237376361613030633232346339 -35626363623966636132373334396565313662323663383461656365653066626339356662306261 -65616562306661343835353539623933316532343131396232356636653038336538336664646465 -33396136613638656438636438343938316131383733336366653030343330303633306336353332 -34373065336132313132636532336331393965633635393038653764663936653338366137653963 -37333963326439626466633063316130613862653836626339616231373230613738363634323865 -65626233373932343961313336363637626366643863383766663334653263353032376464336439 -38383564653334613038313461326335643039333138376330376634656338303461383461623361 -31353061356234353462636539613739653366626361636565623963653637316166303036356366 -30653264623265616365616366636532643933613231623365633861633235396539313239303238 -37323566666663613661646534323733323465303738356632356434656632616234333865323162 -32323164333936323165663863343036613761373239386237326434646634323863386162383033 -61613861616235666266303932336238636230376562303034383737353266346532643539663334 -30353439346161663361633132363930346231366466343035353336313335333862616264623939 -37663234356331353261313631356261333761333935373531386131303032333561373863313962 -36623937656430616239646338356166396465363838323465623431356332383431333433343134 -35346661623265343831373161336337636538636563326634393739613963633836653136633163 -39396562623664323639656461396635383763386238396535336332336332333263353662666433 -38393465383538336366663635626539303630373864616335363438326439636136636337653036 -66633933666539346536346164626162646537383864666639346638346531633266366536633737 -33663938623463386239656530643930343365643332303334393539306664653335326331626264 -63303833653437333366613035656434323066616639663831303736626230666634353162336135 -62616663613137626436366165613136383937323231653530613833363939623161353039626532 -30373633643038376531643632666337663262663061363661386664313038363135646436363833 -35643036633862373231376261666135363363636630393733326134373265613064393537393364 -37333935356662626436326262343864623736303136356635333963393938353634353639313730 -30326635393533626539636435363931343765366564366363656366643861656639656630383635 -62383333666438633066383966653263333663636534323161313039373063616136613665363362 -32616165343239363939383964633463363933323565333439306439663466326565613633313432 -33383864306430326532646362376132343336666263633036393536383539376131313236386635 -36316437376633333233363564373738343161663235346435663666626537393964313738313834 -62633361316231306435636565353938646238366564643066613262343430643263656662616539 -61613932343936356566666534353836623961346362373236613164623363613561346338666464 -35636566333264643266613239616235626237613634306537363864303565306431613664363431 -35343732656430663063393733363632616265666666616234376235623135313962396162306633 -31626634333233386333613436646564343232366638363535393365633236666361653064663234 -37646634663433333634306231663330383737376434373633333862353761393236353839656430 -63656634343262393966396165333739323534613637393133623533623230623964396238393832 -65356264383361633464633663643531343331303234633861346233363063656238326363343733 -34656563366437353734643762636464663966633737386362643036353062303930316563656434 -37353437303465363837336337396262663438643631326661613335363230353433363962303565 -34346637616138393562346665616335623737646161303666313065306363303365643331303063 -33383537313466386334383661643832323139663131363238306239303962366439613739303437 -66616265393263363339643535386262333661626438373264613830613966653731303632663337 -65363065313365346539323262303665366337353330326137616238343536386563353636393837 -63663034313965666138646533643533636632616461626564336438666131316535353361323666 -33653134613534666365396536666238393932643463626263316463336130336137393539633362 -61653530346530353737383238366631326231353231303738303862303066336665333366633436 -63626536663165313265353361303061663337363135636562386334343964646561653731316538 -35363266346631383563613865326266336266656530366538336562373831363666346330313063 -61343530333134346237616138373661616461383463306336616230656439316636323138346334 -39633264653265323135626334303161383735326137613338306161656430633139333630616561 -31643663383264363565316436623936306633666131363130366136653463653930396163656265 -36376334373531306639386634366239636638633636373233613734303131316666323266343664 -61326137383261666566393861623735643430333466303832386439663031333361323263633763 -62353834363530343361303136393136356235363932663761366133396534333033373562383065 -66613237643334343635326136663638303434613362326666646432396436633833363634393762 -33336361373933633232643435663166363935613138346135646332393139333038333737353238 -65343034616562636264306462313662306530623464653263386232633134333166326130633232 -33393631383065383961663735396532363463316462393764653466653734623662643733336431 -66626561346337333531316533643364383236636433316133393632646236663637326139326531 -33316566346436306464326635643761656131333264633464643931313830313964663765306435 -35613765646462313465363031343338643639316336393030393561636165333337636261356535 -64346238636333366130643265313438666532653235306438356532613862396165633730353330 -34303062393035666164316664323939313233393537316466393333316135356232316264623961 -33323834346333313139663235623433636636336361396163666435393034336463326136346466 -61613038373932643761663835613836323335326130656334653338333832613631666437636561 -37363930333566623333376637386632363661386566373532393464343932343038656436393831 -34316630316363383331333737366631366338643735393934636164303236386332643839356234 -35613434623832333931383166653639383834323562653531336135393238663464656263643836 -65336464633536646364616363306536623163396136323837613363363831396232373830643435 -31646330623737646130656264366235353633633433613839353839386563393566303038356665 -34353363636335356162393330343631313531313637373566313336313861356463663839303632 -36623938323766316134373665633233313536303261623237396465353664616533393835393938 -61623461323535653837396362666131613730306261323563653463333730316437333439376537 -66626363653836316231626239336563356363613636626236353234386332323663326364373938 -30383138303064323731616536383562343563313734363233383461653538633763343531643039 -65386137613335653364363661656137623133323566316530663439323239323438623035323439 -31373163383130623030633739356339366261363761653237643266666639376438613832383533 -39383562313732363737653930636236346432373837333535363634626465333564323634626637 -65613262666433316633623437383634353839393461616134653132306361376439643737333430 -66653037626438316430346166383566356539643338306564613235653266643931333335616362 -33643334646463623262303233646635303034626462646235316431363561663066616332653265 -64646534396361363739313331363336393263623432313031653536336632626539363136383736 -32363865653436626263633063666133656635386431353233376364383534373730646362313235 -33653935343235363331376563336464633261396437393933323338333065643733383365393633 -36323732376665313865353861323638333534326234376366326363623839366333346264306562 -65326132333335353566616437616539653638633039643862353334653564376664366635616533 -33323461653733376332306135643335393161623531613561306432623734616134366636303064 -30363937316361386665346634393134333431373966363666353161316137323933653639633163 -63363730646537323634626630393835626231383862393131363336326537323062346262393132 -31306665633132356631623633616535303663313437626330626166616263646662323735636531 -35656562323231353036643562356334333262666333366533323661646136623534316363613166 -63323665386537666338383237643037616364626136663736323634313765386337336534333232 -35663438663463643937313931653130626265626535366234623266633036306232373239613363 -62356632623265373336663364313965373734363732333166323638613064333161326663656235 -63396538636338623731306233663336313037646634666161313430396431376637376132663835 -63343861613562316534323431373931333566626633363636346163363130383430373830313631 -64393033626261663463336531366363323965316463326234393464376435326237663732626534 -65633530636331633231363665336136313938343331303930353139323862396133343662323263 -62336637613039346536386565306130666235663031666237626431336335386365333464626466 -32636532653931383065633232373432383033663461653665643834393361333963396363383436 -63633234326466653565323735623662323137626664333666336138336231653731316438353666 -31336164386536353335653934616632306533636132653933353861633930613338313934343334 -37633335373132663665366335623536356638373562306564306439323938303835376266653163 -37613537316366663164346339393230343834656538356439616331363834396635353665383831 -30346635373363333838396230356135373866626162356438303663313764376637656235313938 -37306465633633623039393262386261316534346162343965366130626539663433653631316135 -30643137316262616339376437393465643963613864376239656438666435396435356338643735 -31373930623434656566393837346662653436383362663131323062666135386138323461626531 -31613235386439316534393637323236613362623766383439346338643264326232303735643433 -62613463613064633234386632626637633833663931333838656236653065373061643162643462 -36366431653065353831353035613438373461346531316462313161363862656262303962616134 -66643865613332666535336563376662666131393863626436626231626334303764343262666333 -36343666643062313065383566383633623030396631633838333264346434326131393637653736 -61663233386337653564396630393934663536366635343530326364646165306637323362646335 -36393138636365663330626565316531363735646439373539663130323962366462616335613430 -61623234633361383265386237306263636263616166333964653361653365383838633666393533 -37353939616330313837613962313837393032303631323133386164326134313463386132363932 -65386232616635313334356634633964333030653933316463316536383132653864633533376435 -31343234343765646437326631613436363536663662656637383135623839633139353530636438 -61626263333564393963633162326136666236386533643133363264313138663532616363666435 -34333561343263643735316265313239633337313031353135313233343033393961663333363539 -65356139393564376561356565383766663761323637646239393866386232356361336166316536 -61353665326639366161643938383234383038333462366332356633303437326138613761386333 -66623864343537383636653434646139643230393630376630626631346463346361633336306539 -35323266396463656630613737623937656130373866323462303530313538663665663732666438 -32306465613732363332633866333331636364323332616236353531666265626464343036373264 -61396630313034346439393064666565353132346466363063336262323465333130643464616432 -66393930326464646465613665363964633430646264313136643730346362323238313937386235 -62393130383462626639633535396331323130313634663434346232373865653835373238363162 -37343437353839626535383333373031623365396165613964356561623333653162663861313766 -38346263303965623963366335653062393761623731393034356433663264303763366338376238 -32626432353534343565396536323138336339393763346334633462393131663362313636333566 -39653934616563376466363931666331313165643138373336393838623165643662666162643338 -63343862663531623064613164323033363165336237623837643136323463343161636439323037 -33396566303633643765313739306238633863643237626334383831363630643466386466333262 -32646661316636303463366136653561313436646132643838356361623136343836643034633935 -63343336626266323461383239386431333965653263313931666464656138623539363463396433 -33343266373731646232663065646162343838383265326338626230396135333433656465396331 -34333566323131326238613433393534663936326538613931616139303436633363613232393835 -66396539656431323335653266326537313566633439336233653062653232643638643064396535 -63636564306461653162623631376536366264306166636338613932366633333735393533366130 -66316464386435653936333736346239316661343366636139373330346266626430626164643739 -63643032393638323134316433626338393833613864346131386139333039656534643232623266 -31363765343139616563636661613932313539633861386631663466653539643736326636393961 -38326637663332623738343434316633323436303637636566616562376333356266316561653965 -30366666306138626564346462376630626665323539613565313365333430386237613337633633 -38643831313663663731316332373462343431393466353165366465353136306336663066666330 -38393661303531653439363263306235633563643637653163303036653362616334653634626336 -63656266396362373931323539346539366332643033636438316239346238393165636530363137 -63653866333837356264366635663261326231343937376333636465303938656562333462613237 -63613930653363333364386665356461646135396264373962303236343133633361393430623565 -38366431663665666135393730663235633232643333366439646362626333663963323231633963 -37646139313831366661366437313563633535616133383030376664653130613765623864626133 -61626632623437343835343561613536396365353238623464346330363537656462303932326332 -33386136623663633763633733373235633038323637313261383832363635333861376436363236 -30663837656636633034616330306163393030616639316664376464326431363666353464336536 -38626533303130333065313333666135616630633362376262363561393364373233396130636435 -34643437636332346265633465653130623763666131363235636562333330313938623638656333 -61613835393931623636386165633362303437623833363865303463373566666130363435643038 -37336139333737356666343662373636393062383931616535656366303661666633383133343238 -38623335346365303932333337393833653437346630656364653762633264633435306138363665 -63613632643561386237613263303736393034616661343964643630623361356435366635666439 -62313030336138343035333830626130653933346561363332376639666437313963613631663939 -35323230613538363231643434346534663766666433643764313165643231376665626331313061 -62373861333531613834633964643263343662393239393536636265393830366262323066623461 -61366161623531633062313034373331366530303663353238326564663733626335623838613539 -35663431333362393661623932633237333532643630313736376132386233363431326462303432 -30326632323134353765303638646632623533633961313466383537356539316364656430326232 -34363765346265396261613936346263346539393466613330663639363535376430653261343434 -64313236633461626661396365363635313165653636663638333533636537363232666237306465 -37333633363431323963363166613031363466333233316662306337323535303836626663363032 -61313935383366306363623263353264346364383763376461383062613435373532333232306564 -35306263393365393365613765646262383034386637663439363937386663646235316165356532 -35323865646334393537323838393364333132646464653862346562616138326361323031386132 -35623164323337363833363631643966383630633533353866353732613135353737303437316135 -64623030333131613261343632616331326632636663383761306462303163653462653637366334 -32383933363030313531623964373030353030366638363362366530356132333035626237343631 -37356439333736306430313430663532633763343630366533366565396337306139643330356166 -63313763333862393964316363333364336561343932613432623032323263616634613030616638 -62656336366533303730623361633232333965613966353231653861346237333434396664643538 -34356662623039356434366533633664373037346536613938656437323861613965623763323236 -36383965386232656635663066633866393965356430393434393930623135623138376161623130 -38663262656466373034623231353938633366346637643737326532313230663833356131333334 -62643832363536396533353566373431393961333635623764626237313731623637326235326439 -34333264363832636239353033303965613061386436336630656336353738346665636237666336 -36343538356234303733363736636139383961626633323538303765623333373338616463326138 -36303863633930353666666234343232653833643632386565313631313736316130613163396261 -39353130373163653166316137303831333464393534383334306335643166353165613230346461 -38623337666463336238336434323530643233303565353231616139333766303638373539323761 -32343530393965343761636636303636353535333839393334316663393730663438386536393230 -65336339313463343365663261356531666534363236663836303363633435373734363235396233 -37613036313063343361383664323332633764636366383736396236383862616338366565626438 -66653133613534333530633637623630626563626330396461666465323262646433376162613033 -62363464303736316464336663336137353361336130653538366466666235376563306564646434 -30343139383635333166363333376333306333313763633537646163626463316232656436343032 -64613465383832333664343230333333653232396162333461333036653635633835343362646535 -61343133353736646634313138326137623937396466623337316461303363303237373665376137 -34663336326664343139383534623838663530386230613732623839636264336465616238353832 -35666166646336306632623863313033383735653664356533373361313838396565613033373132 -65326336626137373533663266303139386333623265363665316531643435323033633237336338 -64623162386638383664663361363531343333396565353034313363396662626364353463636433 -32366364393762343537626163383139343934646134356439383063396232643736393235623666 -37366239333562303030366330353732323235646536666334643838666539653937336435386230 -65623332353830346361346164653164666437326331333238663831396130393236653534613233 -39346337306438353838306563353339393361633632316264336534623461653866323634353732 -34383864636361616563393363346537313337316138333639663631373833376431373433343465 -33663535666261393936326462656139613434323736343331643139623961383438353462353530 -63383739616561313063373337333864623632656238626131623430393263393133613936306561 -39613636313765636137613439383737333737353563353039383462663163316662383161656130 -66323532303338643166393837333432333731313764356561663931613264313931656265363839 -33363735373332313561343861656162653039396138373965353338663037363461393761363432 -30396632393232653531373734313439373466633937663961613036383132396433643135663961 -66646630356363306530303763343637626139323133633838343565366635663833323161336161 -33653064363266316136636562393236646634643335373266326165383538376139643639633638 -65383632366664663662636630643939653764336132323832373863663862626138353761613432 -38303236386534313263323937326334666239303361343739386161363838303239313239653265 -38316537376565396265613661613465303931386136393937316566303262613862346639336539 -63313861396261313639643430343635313837383238656139326339353666303661333761323236 -38663831356332373664666635616432366562316438316265353536616332333332333664623637 -34353532643031383164633562356266616638623737323363313136663761343663653435656639 -32663634646533663834303666393331613461383833653566623037313631333763383036316463 -30623832333136383865666336663335353662363934373262343831363332643833393831653930 -34613263633136616134323466613330633332323035363131633665633139393332373937353438 -63613335376138656235373634643430386435663632383835366564653535643966323939623666 -66626461313333323932663739303238373435303466343639316466366661636635333832653466 -38323261316262646131306133326635396162613961663866653361333531626134666633663562 -64353630633566663832396361313533633564653737363133323363623532646566376664303134 -31343337386434366238656130616162646263316235303263646561383461663437383562646661 -61393464663834343763373039333862306537386564383731326335666332616539353064336661 -35376432303161336333386265626636663636646261353535663261326365666233643535316333 -34363035366334366533333737623339373835353238333030343862386265613838393039633139 -39623337643361613238333133373038343039373462366136316635373039623333656339663362 -31346463353164663737613833383761393136323134633666356563383461363138346334626235 -37616237356335356534633139323366313938306138346530646532336164306462313164663466 -33383735323034643036376462343662333530326239326166393939653465333637333261346166 -32353033343539623031383330643262633532393761653766626137386536643561393263303163 -66373963633237616436666666356665313736636366306636313937383066386131343938353837 -65653266623566613731326665393034393339656235336562303934303438363364376461646637 -34616164393465396338613531376138343933633861316663306663333937666564663835366339 -32396432303538346133626164663765626637383033663362333634366437623664373239363230 -65623830306439393565336662396461306632666539613965646565376438616361323465636264 -63366335363162643536386566633865343431306331313266303937666166643535643161663530 -31326463313933373631383037393563313865353039393265303661393532616435643933313362 -62653938356637343936346161633636636438306334666461313961653138613665383166646337 -65633231656361363230306239343261313634353032653463666331663331366166396230383663 -64643033323432643332653061656535653465633964343463626562383733633730303131363738 -37646631346665363232393535643734636636663132393633623961613634383463363138656338 -66386234313338313435663465346134633837336564306438343364633363616632323537613532 -36303532353033383662646636356464303534353339303864306330336336666231663835393334 -32376430666662376464323034353131643537323432396137643536643638636238396336333130 -63366461363035636262303032643430643533326638316463366337396235383135653233326563 -32613661373936623961343732626238303832346339356336636630343334313339386436623835 -65343436333862346662656235386539353838343766383535653639306132653139656264313264 -64343730643966336563326435336135643762653631336630376434613939636135323331396366 -32343032653861386663383131313633626437346335613162633333346261396132386663376236 -62653339643338646264306431366263623863376231396238343963343735633464373663373338 -39313566643432303332323865373931343863633661373564333133653932303736333664616231 -34316666363665633338633265613837366261323233393937323735663234393833303430333638 -30346665643933393963303733643630376563383831336361363934393562366635333665326234 -65643366343034396365623061323731383238313864383732386130313932316264326134613830 -39383965313736393835306438343232306434383761653963613034316334646639633132323262 -34303461363737613330343236326666373962303061323032323532643831313732616564343765 -30653737666665366338653837366639306634663133303438623431383563303463326164316231 -64666633666165626461613463353438383837346263373933646466663363313030356236653763 -36396663623634306364313430646135323138393035666430636161646134663261363336353336 -63396337326138616234333934383239376432623666396633666339373536653634363539353035 -35643565663861303431666339303362613035363839303131366263646230346636383034656262 -30613664353866663164623039353632323634383937383338653731326539336434343738366433 -65336566343831366264343635343965356463643863336264323863363031663563366563306162 -31356138383538653230393235646232623637353036363962326233383862313235386464313532 -31313961643665316233376163343631353338386163633031643731343135303834616332653766 -63643637653866303534306362333730306233393733383733386133376564626363643265333030 -65666230353036653138643733353736633264313433616166356436393262653664303138383834 -66333232636563353030326366323431326130633166646163383532383131666361633062316264 -37303066663237386438326235356138316438373235366562666166343830313639303332393764 -65616335653235353239333138663931636135333531333839373465363561643862623462353738 -31626538336332616566336330393961346330346663396530623539353730356333373765623339 -61346335346533643337623934353561666163333136613434383838633433356335653864666136 -62656463633965336132613461336637613530616439613538323134653039666234373430366132 -66333932613865313730643166383234343361336532303666353866376631646530303262376339 -63343639373739383136366263666133636533363531643439613064643062613532653865633231 -65316366323062626633616165353033623065636365376463623730393662643265343936623463 -64303731396564356530373436353039343264393763306535316330633036393866333961356234 -31313636636162636161306263323330353061613461363334326263396432336133653565623239 -38333461356463353232353064373538333738663461653631333866613532356538396538626361 -34333033633334613334306138373333656136313132323539386136316338383134313836396162 -33656564616561353431663864333338396237646666333265343163663565363232633362366132 -65393836306335356133383338383361653830313933383461393130333463646562656263313034 -32663037386665323633326466633431313432656331363963386535383664326434393864333639 -35373762363662616333643762356363303334633761363738393534353863633736613233633763 -33313665623565333762376334666639653566346464643562616162326562653836616239613366 -62356430383961633832646264366463373961353031663537663239326264343831346333653663 -36316334626137663637326366303366316636663233663338393831386666646665336137373562 -38663665323862373434623133306661616233653633346637616565353563326437643739323735 -37326536386566626437656636643231366330623562323066613239386632386561656137333338 -32306234333564633262646631613133653632646536363234326264366163303233663239303163 -31646634663163383439663530346163643831316264396635306663373535343766613831643563 -32323133336666393630343634363731336164643034343138613130346162643730653837386138 -66656632646630333564393231316333653461663435393433383733363131306632323032343265 -37613736643364333931343533353361326135376338326464623366623632336534623262343035 -34376662373731616365656636343633663866303932653731393437643637393961336630393663 -63316266353539363131636464343035346564306336643339306336306363663261396630383864 -30313137326630363334306262326333636532353066653331383661623039383536303534366533 -31313836323366626430393864303763666632363733303832303332363465616631623734356237 -35613335313162356233343738336134633166323065363137653630643565316333323239363133 -35373038373365366364663337346366656234663239333861623339626537333936373836616436 -38333634373561343433326333313534363565363833323038386331346534353863326332333230 -39313738336264666334346339326234633265343961373135383463356535313835393135376162 -38373134303030653537396661353165313362616436383463356334636465373065366435653662 -63326637666235613265326261313438653039626266393461393933643962343238386437636536 -61323161386464343963363962646263333263623839346131303834386538663333613862623538 -61386238353065393463313731353831336633366438643564353963356631316634393438313862 -62373164636239363466373762646635373065656163323461323466633562643030346139303034 -34353836336538633763643235343466393065373334613162376665323837393163306233666461 -64653463646232393839373361313438656361653033363230623530643933333335336433666239 -37363139623162306632333532653139383062666164373438376631303164303662383461313331 -61316537626166303535643666336661626435393462656561313634346136383332613563653436 -35343064616365643339313839633532393466633239313064356662353231376162643632666338 -30656664666336306462313135653336306264356462623633656562616634353539363630653439 -66363337383466343835626137646464366664386435616664633033613634613439346462363661 -30333564393132303461653338613662303264316534646632656663306630653631343731636162 -63633838663030643637373239303535306232366238643961623261346261376463643330366530 -37393135623035336534356630613530356439623631393564353161396162633362353565356132 -61373432633732353963366663623333393937656237343834663364383537386366316162366138 -61323039376432306132353834376362656335613935653637353332323735646263643630356539 -37656366613633396639653661623732333364663461376132313831333736313439643564643635 -61633837636337303235393532373430323935383333303032643164633536656664303234373266 -65353066646134613038323731666164333435386139373264313630303531633361373137663233 -64663537643039336435663037613866366561616535663633366661376163383836633562653237 -31343164636439306531373234623663656366653936663235656534373032333836303532386662 -35666265383734326530666137303232383733353431333938663134343365343535316139666566 -31613136343065376534333036313764646337313634303536363663323033616563323639333036 -35353737383130646261336635306264393361316134366532393431373365383730616630616562 -66386333303031376238366262303937393736653636343766666533636135306161373964323931 -31613532356237376334313936343737366435313964656564373765333631303535336337663539 -30343337373235313666303236353061373066303937313736663230646361376630303430393233 -36636166383233393932353231393366366230633538313566626434663533633861333938316361 -35653739613232636631643166623832633162653138613662396537396630616331383366646665 -62633339366461313166353163313831306166343966363038313432383761633761613964656634 -64343934383037626133346266363764646333363964303564373833643637346335303636313932 -34623461633962323430393966646136613465313037663034343363396364386233666237363539 -63626663613034366430323763313438393266326533643366646362386637613938653061653731 -38656264323937353966623763363164393839663665333539373963386266613963643538643764 -37663934643061326332383365613132326464643731373066633961313762373966346431313437 -30386130396437373533656537303033336232653036323931393064306534656366393563326366 -36636138623762346162326639313134653237633936396433636536333137303434636239653365 -34323465626536663865313835656639616161353863626339306534666438353064383037633433 -36643261363733326661356435396665366264343266663735373739303139353261626263353530 -35663134663034613436656239643434356363313837363937386235636165353434303834636239 -62613532626439313334343431386665353963613238616231643762356166646431623538303538 -63343061613463663261393261393934393863343131373466333862366461353237326232626237 -31376330383634383332393565623735303730633734353232623161626133616138666562386233 -66333638373933646466363639663862613166393139353862653437613833643161393461663334 -34653938303066316532643566646332316431323430373332316531373730396434343464366235 -66623866643066346437396561313866633761333839363232303336633633643533373434306633 -36386437376136313366323164656564393066303532343063346439346266336231626161666335 -62386138373865396437373736396466353761396230393334613462326336316436303561656339 -33323831646633646363336137313362333237383965383066626439633436666334613431373732 -65323432333430616263316636393538326130623332666131613661633338626365643666643235 -63333864653364613931373133383862663663356337336435646362323135643761316662383564 -34653632366163353831393766316633343532666131396239383737646564323034303630366365 -65646436663432366366303761303765376564343562326638656665326432616238333062643234 -66376634616365663464636334313664653036303634343038373332336135636162653238653131 -39663930653866363662393565313034333034613336346131323137376565646135613938656165 -33316138613334326534366263363536336363366162343934303237316439353435656261646535 -64333462636239656437666462323063613635323265366130396233303665306138316538373263 -66303838646465613462393635363561366561336339383932366533636562643930343830656238 -37626639646564313637303966316266663862303630383132643736323561633230356562303435 -36333031343030636261366263646332626631646232323264323338303532623034653334613730 -65383232633132623438663434653763393136323964373938653964653136323966303434373034 -31316433343763306362376637636663366133613362393031613339306133396333376566663636 -30333931393737613732333130633030623733666335386131613365663963316264396263663266 -37633839656665323032633964663230623736633166376166313933623938353432323666393334 -66343032393130353333646332643837623833333564623463633339663263376232333436316531 -37386431313737643137393262313132633637326239616265633861346232366138666236346539 -64656135626462333366613361323166313832396437393266346661663761353364626363376234 -30363662663331366566646238306630333064343436303066663337386334393635373862306265 -35666261623438616565323236306539363032636636356663343130356335633937313262353963 -64336432356437363739363637346333303630323934366265363137323932323362383334643063 -31623762613738376535393336343764303639666331346131356336393666653139633565333335 -33323863666232333366366461326233633664353833316235343438636438623038653132323935 -61386139636133323661623739306336336536326663626562333935646135653239653663333535 -61663636353533303633326537656536323566373234363161656534643332653337613237363066 -65396166373566363632323039666533633330643037396465646531313231333135343161643631 -39373833666165323561313238346539636436356231613138306664306231346338383963653066 -32306635336634353962333735343731613837646131353532386431633839633337303139636336 -37663862373030373562313836366433383261656135646230346338653730346130613238353236 -66316639366239313262396232653638343930333037316137313835353764656430346232396235 -64303534643834316138383735313066333165363634653164353864373932376531623461333463 -30626131616362316438623032306631346631383934356634646264626231393161383838653138 -62643836636561376337383836623966626262643933353330363462306666393934343435316532 -32343231633134656361616430303162653162303963303932613138366338346438616434313639 -66626437366161363861366661643561663866366135346262633531373035633262343562376132 -35613531623538376131373461663431396131616233646364373732616630323332643039326264 -30316230393766356431633663353961333266303735356266633538636266333139373863346665 -34356264326564346434396262663962303064383238313234323662323662383939633363353930 -65373632343861396339636637353964626634616365636163386462346664653037323466666233 -66643635656561326637336262346236313132373062363466626632303737656565333830383934 -33336364323465393732636636353936386663636362623832626262306431633838393762323430 -32333136356437353833636163306334326239646364353130386434316661383362336162346437 -37373565653737363139646630656536343630666133396463623239353137316438353739346664 -62393731383539303930613363326439366366613565363431666436326234303263363232376662 -39353135383935373036656462326361643138346130353439383466333739646661643537343063 -39633836396332386638363330323239636335343835656163656337326162616532376335376565 -62306137616237346262303836613331663065643033613531333032646361366163313931643537 -63323234353936333566333339393738373033383563353339323230353532656436343736663962 -36616534336165366531643537396164653033366331373263366465333662636234373664366334 -31336637663234623935376461306130323134663566363639313664336162386564373130376338 -31383636626165316131366263316437336664393364393064643339356364316664663665646633 -31303332626235343036646666613939613563326232663962613738363666656665343364373132 -62343133663163353966376164663634356531396366636136303632353832666431333136386433 -64353762663236613831633466383166343938336638306665613339663363653533336238376166 -37613539366638333738663536656431373439626561386335303230313763303761613530626561 -32383538656133666533663531343864323335613637353965656565643033343363626137363039 -33393334663739613733626137313530353665313030643937383033636234373634316230373666 -37633266363834343430646364616366373363343336313462653862613662666361393464393764 -36346636366262633039336336376665343863623765373333386561343033383939646533363036 -66656565366238643264363761663566313437363237396232623761383265666433393264386638 -66376665386137633838643931396634346435613136363937346562326435626262346638396466 -34333336373061663661643763373038306133623561623030343836363961336636646633336339 -65316131646264303632653530336135343465393939663239343733366266336362323462316437 -35383735316265663133356632366638616632376338306632376630383232663237343464646535 -35363730623663636331633430356133323462313934656633656538656534393362663862666537 -35643535313766646535333332666138386464323438376637343936623264396664636234346634 -38393365333463323365663132613432383932393066363330356262643861366335666236656131 -65383835616662663463653332383330376166633565623938336430333139323963373433346463 -31653139663338353630623133616536346333663161666562323733346661343265663736623561 -30316135373139643562333763623432313563376664333835396465636331326661303638616563 -30613339636533626232653230306333636166663664613536356631316363613262353565386239 -32373134343864633432643131313065623666626238353062613636326333633731346431313966 -66626366663266636130353461633761386165373133333230646434303164316533646162363837 -33366231656131633130663064393730306664653038643937353965363932626230 +36383632636466643664323334306638653933393963626438303039393037353833643533356562 +6362363133383636613263656665666434646436633465620a646131383062333233656233663331 +65613730663137373964383161373535323637353561313535376563626137633732333634643031 +3937633236623534350a373337656262373732643839666162393734313463663736313333616530 +35363633616336343464303937353437666238613232393233333166653439336363303738323338 +32626135363537333965353034666636333639663133383465326330646432343737376630643434 +63323835393338613834393734653832373131643836643137626639613236356638613966383334 +62666564316139336165353531356661353864303031316266636430653862333735386662326531 +37393963643034326338313737653332343832633136316337343032623166643663363633393339 +36366362646238646536333739636631366239306331626630623830653066323065363961623861 +31383665353830333536656639383837636537393232303235386139623061636239376561653238 +35653236353931626134333831343363396533666535326236626137633936633737613233653133 +63336132316564323834366366306462666137656138306563333430653233366332653535396333 +64613237333062353535353262626339336361313433626663333435626266353366633132346564 +66626464653530396533376533653161373064353530313433613431366139366434663436396462 +35613734346165616665393237313835393366643065643762363662366661336433653331333938 +30323166396435666531393038616334623662613632376239666139373137646230636261353861 +65326532383430313733316466633336653363356630363362313734326130613837366235333537 +30393436653538336337393130396661656338623030616662663433643432383237633538393264 +61363265613531316461646631616164613738653533363463653039373761663533646536626466 +31663264623261613435303266663430643838663165333364646137626134396365333464643836 +33656632306334353030303233363331663831393839303135393333333966643661353635643430 +38383634636331373033356138343137643935346237343431373534396434366239363262356139 +31663537353738313661393235363763616561613161613063613961323762313565306666646365 +61376234363538326564313035663337313737303038326332626365303263656538613664303362 +65396561376334646338313936303334346537646364336131636136333163373133343366613135 +32336336636237353536343061663235643065303432356161656539653063316562333766663938 +35616463633430376431613236316233333837343830633465306663616634306565333531363064 +66646130366333653365393537323563326635303133316630356531636562353336343864643532 +37653762316139653132343433356665323730393064393662623566323832616431303738666465 +38643636623065343033336463346536336434643134313236646266643739383134653062376138 +36316664353536613032663737383732666536316364653565393263663462373832386531303234 +31623063343336393332616239613863623339623535303665363537323534343333666335613532 +35396430396138656536626537646232336132643537383831393463323365353861633066383635 +36393337386233326334656231663961613862323432316430303662666236626363373534333265 +64646639633961366434353339306539353632643365303231386438356232643231613866316336 +61616234383364363562303038383833363363316362373431383031616330353662366538376364 +33663763356565306164633662346339363931653339663232383462373530656130373331383863 +37623935346339386334653530323530323363353539646332303837333162323664373436393462 +33663231386263633563383164343331623938636639356461366362326433306165383566313538 +33376537363363613035306332386633316665336662666137636537383332653830616639393762 +66346133313664366239336437363366386530653763663833306365376233363132373166326333 +66616338306432383563386332316365393466396634633137383065613862363062373831343435 +30366633646535343162383332613163613139616364323037373838393864336338616531356563 +37393765396461666438343035623962346433373731323736316463616437663933383765316366 +35313432356137333063666564336539356237386466353638333838313966663834613537316465 +63383337663262616335646362616362363539346331626337323261366431323134313438336366 +38393662343437646531386461383536623331393263333238313763663161393661396361346633 +36646130373235326438386133353461363037373932363335613263383765623166643633373462 +66653164653333326265386161363334643138626465323035393562353066626138326566353736 +36336563666131653139356663376562646538353462326635313239653038373339336163623463 +30363661663661356633663132396564323936346661366262626634613230343363353565306635 +65623066396164666638343739363066393139333436346263666237376361393033313561393237 +34353835316638323632366134363538303039393462373037633736666337326164306437656331 +37346463633366366531343037666236636662313161343063656137303234386431353361343137 +38363339623037323330386237643733626639333866376265323634313637646135303531633036 +66663265313632663335373265303431636665363939663366306338393435623939626239323931 +62326566316661306637643961376536396338383437396639343362323438646633643932306431 +36386331383333613434326334393930363639626238653738613133306265393436306330313237 +30323163666235663265643331333763366239313638366538396531356638393135376630653433 +32626463393130363764336135393664393734623861303630666263353562663466353463393261 +63386230626261643434633661303062363136626538376639323466393138306335333366653964 +31373466636633376266356534313435353636336138343130393036376133323661346135313764 +38363464636437323839633239323637303162653738363238633562663132303735383432613938 +61633263613634666162343038333233343061646438653835316363393562366533376137303036 +66353033323938643333303337633239646230323336643630343137336233613536333134363364 +36616135333136393631656661313136633063333662346365333865386331306335636662616136 +62636139303533366161306433313739323838663432303735303964653737376130643735666532 +64636563356233356261323137316433376362666636313464366563303836663762393664653139 +38376434653565333231383336613134393732383930613637336136316361323839363732323264 +31653339326131393235353634303365363531313836333463323233326463383866373663623261 +66306239356166316263656631376362663633636561636433633039626561616532653365306632 +63346436323434353038306533383061623739363733656336323363386333346565396633393734 +66363862353765653734376235383634393830376134366430323831613430643065363439613265 +32623166313337633634626435316633326335343634306235336134613961383663356330393539 +37333136613464373764323364656635393166616539383438356263626239363863636139663462 +38636130316135396230343863313636383531336530643065326233343730333938353563623432 +65393566613637653562376461373265636432653363323064396464366434396462646630356234 +63373530623636343438633966333132343533623137373762666634653461653364356637313739 +30343134633163396335316435333637333064633961346239643437656261356238353234646238 +38373366336565616134346133376365653634306331306464383935623764336265333465343536 +30303732653930663464336530663261656334363263663434613237326339373834636663393435 +34646265366163366562633561646132323739316161623431346532373731386365636135653737 +61643130373938373832383831306436356363336230353763613965356139356432633235323539 +39396364383436346463636461303337363532326162343136653564623435636331636261383937 +35313761393464383431356165646264343639653539646535383731313332373466383764626436 +31616362643637396239373435363461323732613762303836653839646633646336323364623661 +32643266623839623833353562613233346164366530656165363366623361663439313131306430 +34643161366137336339333466656630643530313665353061313462623838336137396131623631 +61393336323139646431313661656139356133373261333965313765323830616233316234393364 +31616263643034373731303630663536373238316361643463313262633234623432326637326335 +32303038636434376162616535333831666436643437396331636230393933343065323562353634 +65626434363132396336373465316439626262666134656263313838656365326136353066346632 +65333437333438616236646239386434633239656436366533376564343666386137646631343137 +31663736316364346131323339333364316137326663343036333633633530663837316538626636 +61316632303539616161333032323362633133393739626466316535383161646438386231663764 +61336137356439383761343336383030666561316336613466303466346666326662343563623631 +34313238303638623330386333633437646536356665316130633933383937366437646430666663 +33666232363734353966646539336231653531396665393330313934333136346162396230636239 +36386261353031383932666361386632636464386438643336326466306136323164356266333465 +61643364613933353937396663616265313134643530623530643461626632373039366465323636 +35303739383230336633663138313237376465333366366434646662323838623231626331306534 +35336434313332366532666131613333383861303937613434323632663431383138356631656233 +66386537663037633831336330393861383262353034353634306130656130383863346564636261 +63356262383632616266646539376562306365336239666136623638663339636334316666633336 +35663963633263623533376563303564316432633938326335636465356561326534373136633036 +38323663616432313734633039326536653162383863316664333764646638333064323964346262 +33366161626538303261646235646263636665303334323733633336666664366135613763383733 +34666437666439323136353633663062376133653065326136663164346462626630343939343534 +66353534346661323566373139643461633564303330626635333331663864613938653566623832 +35383334663339306235626131626336333935613830376438396466333566313939343233323538 +37373731356437393437326364323765323430626661336539363962306532333739366139373932 +39326239663765323932326431666333346634306532386562663165323063633239326363373537 +63633338393533303237383236616436373833356564306331356562653133376264666137363062 +66353761663031393332643934373231326136623933636431366135616363616136353136396461 +38333830616565373232666464313331353336396631353461366335343766326661346637333464 +34373566646536376532393033343135663332363365646330653261303162666339653937376666 +64353635383436363535343233313737313138393932333133373135393930623764353963313364 +39363237383835633865336333663935316234336437343337366235383833373139656161383434 +65336362306365643039336561346531393332373330643335396131366138653239303635653330 +34346366326465623965616661653530643734656330666433643839373939653732666563333364 +35626163636162353064393662643832333363653063663135313034653561666132643066363064 +64306366363131643534663763393533393839336262646665373633333837353334323861396133 +38646233393336343330343366666362393434386163353130306137326433316563313731393033 +64393131396335646364393533346462643466333532633333663739343738313433313662376331 +30633437663566666361306565663065326430306664326464316539326438373533303861343961 +38313538626232633839633361396237333430626234633630633130386337386231346331393837 +37616263613330306637316131623936323464613130646237653762663265313432356433333834 +64663461363132623534363331396638653064383061393432393830333830353033633333303465 +36623930396630633066356233323133393964663530663930643339663538386462643336343934 +34313262346533653337393535633836396631626663343132613735653338613630636333336535 +34646662636663643966316563633862386665373864356466343133333138373432316462646137 +31376365376364323238303764616163656663313331343138646530316439386635626634346361 +66336334626166373665303332333130613438393061373634383535373763363839626433633364 +38613832303234623265616639333835343935313739373464613731656537626438313636383637 +61323931303262303131363233313436643365346130663534343237346337313537373932646639 +34346236313831363634656532303763326438373837613361393862626165366239363638643431 +30356664383562386537356330633063366437333634343462643866336134653934383332326431 +37353261656230336261373630306139643863633239616337643636303136303561653335653330 +32623663376635396130353566396530343133373636613633613062323032323938663466343661 +62383063383135363136343061663932303035666337316137666463303633656230636236303434 +31666238383236383936633765383864313430396161363665313035386234386466303366363463 +32323935306637363832383265633534393831636436393234643335343037643030623834313166 +37396635333930636339313730376338353038313733363030633863663631393764303433343035 +62363863633830313565643236326165666231373436316239386633356133393832623966333464 +34663831643566663038666363393933396539363264346639333736383862323532616130613366 +64633163336335643739373662653937343133333636356264643565363563626266353264323166 +65386165336138333965626337383733663839653038653066616532613237616661633536316365 +34663737643864633763353863343230333762323962353230373264356439653835333835613863 +65613038373363323030393963316539326139333566373735303437346561666635623065363030 +62656465653066383763393165663661333065303832316664653065353433656236306239656264 +64303136393134396231366536666532313966353930396165343334313435343330633535646261 +37323461663133356164323866656337663938616462626166336532636236643431666232323535 +34626137633061323534356662306536366536373761666635393464323533666561663537616531 +30663930656633386331313230366263363330636136613462366235313164303766626265613962 +33646232313039636634623465313766373630363566383964313435666437376666386332356439 +62643134383934333839316630333731316261636534373263386636343531333231393432373866 +64663666353664363763306536626130636463303864663339313437333930333632636232656333 +33396531353732656634323861366530346530363038323231346131623534633330656138633163 +64366462653038636637616333616339633439333336626661643465306531316434326533376231 +61313232363732386462353634303633323734343930333434343237613431613234396561303366 +31363130386365303765316366303930633134343930663634643731376439333036366439613961 +35633366656536623163306565633738353733386163643561366438646634356236396434376436 +66333739663366653136343661326232393964636538653137313166353032383031313734363436 +31653836316331363431306163653735653364346536396336626131656461616132613235616463 +66616539633066633966346433336336616664393366353738663430376536323031326436653035 +37616635656530346364313134323030663861653364616234613838343665346161336263396262 +34643665396638346638386465643161303938306164623864353935363330393135636633613761 +66316464343266636134633838306534383363633733373439336566666665343464373665316630 +36343562346339303863653338373764353262323437633666306138326332313630323766316636 +30316366316532646532626664393434656665393131663730643565323337353930663963643934 +33303462363066663337656530353330303738393934633966633031663833303466343039366134 +64353537623366636238633766313233366464393862346164353563623663626166326264376134 +38313837346532323161343831396163373264633333313631353835613535613436333839363031 +30363230656237396337623262383762323263373530353665656164613661366335306631333138 +38623837633737303161653232333338386636656432613332303966646663386665313465626465 +37373530393164653338313931326565343861643261613735326264626637353065643038333037 +31393230613538346163356234613734623833316433316332326338626130386263663264323733 +35666431326563646363656537656233323961623461333932333135346633383562333135636437 +37303932323237633465363162376361376135323663386634626236363165626536633031343361 +35313566386336346363376336366630633363343639663937656539616332366133643534393464 +39356331646631366234393462646163323661346564613563353137663362366265306565356134 +37663363363938646135376166363434336461646230343964656431373330613530336663356563 +65666461613837333064336339636330663165343461303135666239643635393834326664326231 +31343531383539613635373134366534313061363238326363353637353235646662306461326661 +30373535616266616165346537346564373135623365663730333436383330666435386461656238 +32333633316663633139623136363334656234303338633133613736356461633230343733313664 +62353538636239303639663263623836383266393931313964376230346161613034643237636364 +62643532353532313965356465633163623234306164363339636366343663306262383164613032 +34616138663161623631383837656136353666636562356237383034306165303566343133346463 +65383534316634666630666631333730306333336339316638333639316632663132613064356531 +66623434323239383930656530656432333237626532336135633963316431313666393236633333 +30313336323263653636646561663863373933306332303831383835343232613333666564633165 +64663766333962646230323232323934363164623931353331343163653362366131646531623739 +62303338646137376666363539663935376339623034303662623366373739626135363433646538 +65356563373364356535623232376536366235356165323938626436303334393832663031376664 +34306262313366313536393637396333333237396565333033316265656265316564313835313165 +30613039643061636330653264343230343739626138623861336262363037636135326430653561 +34396236643133643234663963373038393961656134363330666430666431373062663762336339 +31373465306534653362323662616234653439646665333462363933353062316637343432613265 +38663330373133303962623139313532313463393237323161653261656530383330643964623261 +30336532366265393638323737356363383436363065613735636431626539333935363134396666 +35616139383139306631376136356337656135363765643862356433393662306136663761396666 +34353061303337306336373565356138376233646337643632613861326565326131643434383561 +35373161636639646335663533316536383664656666353133633230643262373933323365396635 +65393339333032613761366465363632323833643664616662663131373863613837393363633936 +35353935323032646665613362666636323139363930386262663739653330323561653666383634 +35633339366436363637383132306431646665613835333339626534323136313564383163623133 +31666133383763636336326535636632653366353961653531383134333933373732333736326135 +33396538386538336633646131643034323039653232643462613638376636613037666364643834 +37346237653838393663323430343535346564656233353634613661356563623066316634643531 +34363936393964663765656233383466316535343932633238633137363730633633623365393231 +33626165303066343534303663396365333635613733383461373661656531613833636461633330 +65313937633764316663313530666563656235303536383739666136373162323936313737613034 +32623962303738366239666537643435633438353730613739666561353834643063643434323134 +65313761643966333633633965386536306364346232383131626534356165363061393065653736 +66316239623062306633383764383537646165363336653934373562316562323261623638613431 +65316333373131663031623366666438376566396564653764376564393633303363346431303031 +39666639323861653833346663363964633063653333313337373935303064636365366130386438 +62326230353866316133306664303832646132356364616337633366303964636136653130303762 +35393431386639333230656232633766346535386463653865323237313361373538646566663633 +34626130626636343032386335333230303235616564343830326165613764323437626335663031 +30376364323931383935666634346434613139646634343538363639393562363131353235396566 +32626233373136326132306230303431663039623263303265383061336639316333633063333363 +65623836616433353039396366393061623461663430633763303363636637663366623137396138 +35393564376364633331373561383734613063366130373862636136636230373166366131323561 +35376239373438653838333035393330353562626339656534663364313161333465386236393339 +39626435396563353765623734353839363936306661393766383538333037333530326534663464 +62663061663938393531626663373033353436393764323334386130663262303466626562643961 +34373830636234383737346464623566353863383964363430616332336163383161633730653734 +65646636646166383763386135333938363635356238373666333265306662373266303335353266 +31373561373837336662343765323333613635313235666561626362636235363730643165633266 +35333137333564666238356261336531636534366531343831636662666136626136346263393435 +34646165396165303465633437646133313633633862633434666565376633333837383233343530 +34346366613065333866353538643962303434316466383230623161393066383837633231323033 +37636566356263663362663633303532323133646532633737386539386332653362343066323434 +65663631643039626166376564656136646238303533623737626431343763393137313738623537 +38633563623663383635343239303832613533363634396363363833313761313331376364616466 +65363331663437633461353932313831643431616433303563336535393133626664633235353132 +30393362393133396139613261323263333435376635646562626535333335353262643833353133 +64383065306437373963386337623333643236353239666336656238326137373866643738613862 +66626265363763313862303163313963346639323366316137396663636137393936636266373033 +35323235373934366431646632306137643834646437636336393932376433613466643737653762 +32666461663131616332666161336436643862623965303038316664333539346437633433306266 +33653031643839356536643734393461313666646133643037633634666437336133366430626333 +30643737366165663031393434396166333364643733366330373164656534633733313831623634 +39666336393432633034626537313832306330373430343565626464653661613564333865363033 +63383834613331376536326662393261636365623034383738383833626561366164306437636535 +63323765373638626537356366663433316331623236653335646438636237616534346462366438 +35383061633337363166373030343137313738393265643630653135323266343639303861666434 +37643139363834393331353265646563653532353263313363613466613562306537386134303034 +38663830323636666639336665633838613238386661663063373138383133306634616432386235 +66666130326339666166336234386364363631646466363165326234353733373132646665613038 +34636234306435646635343237613534643864303036383662373763663636393939353330356434 +37666163623439623938326365383939613238383234656231326631383731666333316539306364 +64343665633339363232306161323533663262306436613435343130383037343638326538363164 +39306230306364363466353939613639303735646362356463323466626637643030623134316263 +65623163326130326266613832643534353132356431316261643235363135353465653930363666 +61336338626538333833346637373739666630303330633733303165643866626231633165336434 +38346664636666666236396265386662623238346135343561373136363863663438663637666161 +31353838353561326135353135656462656265353631366631373932633431623638333636396138 +35616261353964613964383035393436636638396130363938636335313066333165313830633764 +61663362646130643365363737353037323838656532643132343435333536663131326162643931 +66653133363762386262633931303765366130383663656566646331313665383266653164323136 +30393266336235376230306134663065346633666636366439306338346631653761353561383663 +63656165353033356266353737373964666231623434366639373935333032346563623139623530 +65336265386461376230656363346435663666323236393665646330663534393336393865356334 +36353433613737396431386236643165306361333939353033303762313935336235393639353037 +31326234623234386366636533343436646337643134393566313864376436313531653465656666 +64333833396239616266393839343862343766666630316531313435656539336233633636373366 +33313562346338386266623134363332306564633334353531303039376232636138383436373431 +62393231313239663334343131633161393937303835316533346135623235636333363463343131 +38323933346531356661393536383637373331346333363132333037306363646336373262386164 +38393965333330303938666635653063336331323236646163343431353031333338653934336533 +38373762343464303731373366313265333639616135316138643438303166373237306539353736 +66303738363862666465636463656134343965653334333266623666633239663466376566306235 +30363435626638396433616336306661333930333932613764363331626438336263323966316364 +61343065356162616163646336313939333236663038653733623834336435666634373236646264 +31663730323664366130623161333432663230353863383635353638383036333631613330313663 +38383730663466333862626439633833656462616238613134363533326236316132333466643838 +31383031636539323732363335396230383137343766616462623736303731333164326232626435 +34336638656566383631376634633938303437643865363537353938653032653765663939316233 +37363363353435323533646335663233386531313938363536363563336539383333316539666230 +36303236306636313539653937633033306236386431386562396264643866356337323664393436 +31356364653165376638396534643662663965366432363762306533366333373630666439306330 +63616236343235306530346465366431356133616464653664353232306164366131356266643731 +30653563353432373461633736376238343039396139613934343037633532613663633761653831 +65366535393333616362326665626162653130633863396362356230363232396533383232636532 +63346534626535623330666161636535303332626236333763303330313663656466613238313864 +32643739633163656539656134613734393032386334343532323834616365353933653034303638 +65366666633239323439383563646433366436626337323766386434366533376235656135313138 +62303864333730376132643034653564383466313466383530393064656630626539363163666661 +61323063613135396437393437383834313734363139373665656330363933373739313330396539 +37396331386130326330303935353032663839343964646462353839393038353261363033356164 +35666532633136343262613038333435353230363665643661656562333339666336303539346561 +65643830383164396665646564663631383931363439353239333563623239313564663066633537 +63306164613131353434353536633939363439623062303631353564323739623031343638353531 +39306462623632363963653030336663323838366136616166393139326562643939343431663133 +36353139353636363936316633373766626661333165643965643631396263343535306537613764 +39333164333130666135336630646433666236396362346265376363613864353063636363333361 +39306234656264643538333562333135383162313437616334353366636664366435636233366537 +65343036363664366138383333343833636633643962623934306163376363336261666165313838 +39393039386131346266323462396364396363333465336461663936356433646565373636343263 +37303530613537393638643936656131643365353731333064353037623962613765316637393961 +30313965326536303234646461616132363063396238363732636537633734313238343931376436 +64636339626438346464623165303832626163373636373135636464353530396564393033663538 +64656532336131626464616530343232363363633236323962653332303565383337303766353139 +34663337383961373637663132363739343162346432653430393131396637383332373164616265 +34346637376665343365663232366534373730343464303630626233303630346262323961643663 +39663964646465346537613438633534663164636437663431646330346161336131323131313437 +39373931363934343534663037353533343065666238613966666534363834626130383862336139 +38383263666463613639393634383463646330353332313665333336356631623837353166616536 +33656264623663336436363462323566363732373364623664373430653436333232643732323936 +33636239323032353831626662643866333465313432623863666164393632303539313135653365 +35613564636534323065666135353762623034643665616638396563356638376134653337616539 +61316239626163323161616334373231396435653134363638383061653866646633666637313533 +64616136626431356630383134656534373335613961623564363663313962626239653234643730 +37616632613065383136613263643364343065636132313964663563626339636631623235333232 +65646139613662646632356132373634393834326366633662663133333266316466643432666538 +35643930653734646637616233656133663731383162383538343662346266343830653162633661 +35636332636239613132303630616465376465623763333130336631656432666166333736663038 +31626637393839653964353864653630353564353964653639343938333436336132643934353338 +66336539333037373738396634653032663466633966616264626263333365623761323438366135 +64346138373866656462393064366334386433613530613331623437616539326331316366303864 +62356261666365306361613065666366373938356433313231363739393933313634363938633461 +66326632616135656463633932336464366139353536396336353763633661626461386331303034 +64633337646136613536373431383261623637393361653336626638626436613133663135396232 +61363463333830623366333331613435643831616530373630353730633331633439613161366639 +39623035353739326338613634396632323932303265393932343761636637343938373936333961 +62393332396363346362333266613931373339356333386530383363323765653238363334336334 +66393433353732333031363765366665343966326533383762666263356164656531666663616261 +30313030353539643636323434313166633730646439383337383665613730616661333638356165 +32353632363536656236313531656562336434636637646632616565366461323465303464323234 +34636238656635656334646664333939633431353831643836636537326363336536336366333966 +61343237623963323333326130633337373834313639623664376230373332343130343930366334 +37303462653730316464663132313462376434373933336461303136623937646437646263643263 +39376139316535343465663163613562646365643738636231626332323862633736613264383733 +31373961336262666661316536393964623036373030663939353662646137336664303337613233 +35633639323264373732306561333366613161643839616436343963613066636265383235396530 +62346637346666616164363035623933653536363038313261636664663836656530626561363233 +30356138356131616664363131393462356338666634633331373364653335393664346536336365 +65333564333636643638373734393633343933373433356334656234326232366465313439663630 +61633135363539653564613839613333613661623439336230376232386233306164326663386561 +39383562653763383736356231636463616137323932353162366564613230343966306239663539 +39326537393333613935303238313662336434393964386535343761613736323066303562363965 +65363933333462653832383765366630353662333039376439353436383931316237376635616566 +33323038346661323264663630636363666538383962373935353232393037623334626532636234 +64356564376633343637326334303966313934373234636563663932353430333836356238363433 +39366533383936343164313730323831313730386231363461353561346263663138623431616534 +63336463396337363162356637633533373164616438626238373939346464343037336161626539 +63366435363965383065396661646234326337363865666365306137333639393966663963306239 +37353663306239633466373939363437353234343038326464363235393637353161323964633262 +37623164396137323239616130646335353134626631323037313130376434373261333336616538 +31373031333364366334663531613065613762306163613766323339313239393061653333623830 +61363431313734373731336638643239663835666636386665663562646531386632663234303831 +37346663353363333332643264643263613035393633613436313731613932653436353033643266 +63366136383736316136353761393834386432313865393438613464346439386564383935383361 +62393439363431336135333833613935613039376639643261303739616237656564313235396366 +33353439383637356166326664663465613061343838363461666563326537626661303839313332 +39663430643130363232643039666362343238326163663132396530633261356663393064386466 +33343633666231633734616666356364653939363961663361313732646361623737343837306463 +37613339656434393633373262623062356564396239316137333863316133363232376663356261 +63346130343738633264633461373839383830393361346566316463613034306265666534356566 +65376562396432343738623931366339333062306166626537313434623735396561373962373233 +66343137653132393237333762643732353333316266323234623539363430346462653163373766 +39373139666239393133373563346564613963373937613331306532346130353962353536366261 +61373762636533356135633230626164616364313565316166633234656437386262373230313534 +31633863346664636435366235363938633163613239643961373130393866613761383133346632 +64663465666535316565643637306438326631366437383134383661353037316232353137316661 +35653536336462613637316331313033643034656166333633653632313736306234646236353935 +62353534303030316631636637623838383238663765323137626230346438613231363261323035 +62326635386134313037363838343065346362393266303363313462343933383938373433656530 +64633332333665643037313039393361623638333162353862663135363937336132663738653434 +66366539623034616632616466393064383537616430353533353938663339373765623436333464 +61623866623662373866653863303033636566393034346262343930313631306365666530333636 +65373532323333373664633239373465313233613465316136376339363761353436636463386435 +37366139383536613862616266643933393666363137633863663039316366636435313666376163 +64316533313930343564313066646630643035316437303733643735653233623532393032323734 +31363261653963303131323232323033316165616534636536303162346533333933313465303461 +35313230373033643063366431323630303062646263396166303761616632353061396366363034 +37653839646334633133366662653766386432613834353237613239393536346562663162333364 +34326463306565303438356566653766323865303563386434646533616534346133663737383832 +30643562636563633930326231313265313062656462666563663662356530383635613261396563 +63666162363363663565393134333732303837613362303439666364663535316665333762316232 +35313339343962613734326134313432653732316665333536343533303631323937353435653961 +39646563343234376263366532396133313831303031393331303736636465666233633531303762 +62326332376463656463643533643665323765656466346135653635656433343031313766643531 +30393837366266626164323538393761343935333262343462383530663862353439313061353261 +34626531316362353163363035356562366130363931363166306639306135653638636235623037 +34306231613466376164363832366662623266653831336536383535623637626136313331613938 +63333234623330393562626564333163653961333561633838663236313335653037376361376230 +36326433353839666530383534383833353938303761366163616437316565643931633561343738 +31363731646463656562653930363531306362343265383131336531643563313361646462363266 +39303764323638646239336166303532666331396334376331363863626262356339656533386662 +32626230646164623237363836303032393964396431666139356562626366366239366139626164 +35636663663165366436633263663233633766363564333830653161373832396661366534646136 +66323131323536323830616633383965393363386332353262623466316565353336623964393039 +30363035333463653061343031396466623261383335653039393861613839666535373139343038 +61316161366361613038373431316164353434316466346538323762386434633566323266663531 +39386664643631353831626538663834656262306662346335366136376263356665396661663561 +65333130323333316666623362313263666466623339393263646264333966613539326437353263 +34623630396638383232316630323165363530313466393836373361386161663665323664323465 +38646530323938653961306233393130636239326139613735666133663264303931376465353661 +64366135666431366365383032666465313465636131396338646532383638383737643537396464 +31643139623066326161333438363932336564343637313637303262353737303732356239666661 +31616438656338623030656461626635306135626239616461623462366238616532363434613435 +63336663396130323531663538646531393335656461393135636331343332613864613037306534 +65343539613762313066306366393133643137383739633939316632363737383438643331313730 +62653439326465343834343637373361646638356634333764653136353161663733326135373331 +66346434326336303561616362663936666538636634306365666239353434333464636234393166 +66356134653764313863383161326632636539343765323239663434353031393761363832323432 +39663836386532303430636133653164336366313264366132643065643663366265663230303433 +36643762333630336364313962363137643563376437346638643839323233323261613566333736 +36386663663134656430303932353265633339396438613564363330396364373138353363363937 +38313933313039643034373835366437316633386638313735313932643837366363303263396161 +31393361636536303465653130383738306433363130653630643261353232666137383330636366 +31623533333631393432303563336330333564653963663032356464653030383164643533373039 +32616566393664373739306333333730653434303837613161333963666564313737616538653335 +36653762623935363433636562616132313834376166313564353735353965613263633132616665 +63333662326237613936623966323663646633653233343733396637373062336236616331303536 +63643862623465376539643736363965666565663630373964623735336539626335386464356366 +65356166366661306235393334313739626330396137343261663232663330623039303838623861 +31653062316465653961623532363433663936343666623939653036373531323561333461396539 +65343333633436346135383666356135396539316139623166653862356363323830366466626265 +62653063353735623765356264386338313637386234666231333466616539633837383662343636 +63323661666235306636383335353966313331386261376161636538316637386334313161626432 +32363032306561613333363731383366373736363434343139663366373336323638643761663432 +31363762636330653635623861363835326438323434326264326238343666373735643035646662 +39623830343231353565653933363233653136356431383537333232623633633363316433386364 +65363038346634363233613762303535666532636363316461616165373763633538636264353530 +30396632303065633133356237646331323139306437366461363734393536326636663132656233 +36613861353964373164656335633338356238353134343532623966633532666637643562663161 +36333438623631626139366565303830643930646264646163353538643265643938653739356638 +35653466353739636432343465653162666531383932383962323564386633613434306138336662 +64346633313038646333353063343131326335643032616265343564393438373436643237383264 +63643431613762313766393466343361653535386538346636626364636633333463616137636163 +61613330613934346331623264616536313766363666386566386661326531666639613363623238 +35353235393964663934313032643136376630333638653533393633316333326631363637343834 +38636663303634333236663036303433333632323739623039373461323834396139363635666337 +36636633613139353665666334386130663864653264393163366239616461633261373935336432 +31356434653634613166343365643535313436373037663737353436353061616663356564316436 +61663431666364336133646161326361343434313038643263393739346439656138646332306334 +62333539326634623264393063343830373266393966393032653637353362663332356332373433 +64633962376432396335346662626436383039376533326338363733343032643065373639326331 +62646464316465613731376131646430396336383761383038633061353761363838653763333530 +39333664333333626630386432343732393733393762323535353031656437326239633038666464 +61353739393039666438623763633233616562613230616436353561323335623565623064333061 +34653330323365643361343436613864626234393339353337373364353363616562306438356561 +65616631623838636633363532353238346563353039633363313732376564363638623432666133 +36656563383237333961363661636135616366303537623038613730343834383935393863393966 +38303438646534393836626135396437623136653934356430366361336663666433393762623530 +31663831356637366233663933323965643761396430393033316461663166636465323033633163 +63323163353963323731646532653962666231393864376337616533396131316530383233396266 +36346666343232343162663635346663623466313264366533333837306433336562393332376235 +64613263666536356235393362376533356439633735613639323161636439393932316534393433 +37366465353236343636626639363962393730666334636366323431376266613736643165613031 +33383038643965663265356266396532383466383030303964366336646564656537303164616561 +35333261323763316634656437363931393039303237633261363831313037303836326530383434 +30323762633630323932663031626266616137373530666330373130376535613636393831336230 +66373032663930376534346263633036316363646639326239363164396163646662353337333232 +32343262383833666462383937663335616365646439366461353134663133626334336136376661 +30656363666661653064326466336364386262373862373234636361666366363863383735646439 +36666234633337383338333934353464613932393630663966643933666534326632663732666364 +30333466393765353737636133316637626139343465366635343336363665343566356339393630 +36303165376162373562396636323430386663653335633535363334383536393031336362653232 +30356664353832333333393631316131653766633266313931646236386132376363356330323637 +62383231393564353135613137353730356335373734346333326666346236313831643034393535 +65346439386335373764643433646636303065623964353364653531663630653535663761363166 +64633139386139383736373665626434616235383163623438346562396638363064383663396538 +37633436663934646361623763383832643839636166326265643866643731613137326535346663 +39366331373464343463323033616332323433303662363832313030336430383738336430643730 +63333033323235613061346234393433613665646335633232366538643862643663356666376164 +34373462323033663833383763343337313631376433626138613534343736343535313133373732 +62356664323362333039666464626164383132653965613065356334656666313236623563353135 +64346236343237366136376534343431656330333736333162356636336561333366336165303261 +33633130313137323330396135346366656564343465303165353861323535663333656435633635 +39363938396235386331303066396137616231383234653962613166663631313539333138653165 +31653062323139626532636636353438636165643434383866393231373665313437663732633539 +33353865653530333132333136326230636536343261663833363932316338366563336538396561 +64383562343736313335313632393664343262326436643833363836613333393736303362356235 +32306531383434643862356439633066663436616162303931623163316232323234363130363762 +37376265376236333961653666653530646162373137373833333235313862376664333165343365 +35643831373231663535383431326265346330626139343930376230656636316664336663303764 +36396335333262633339623235623930646265626565626438613364656363373263643033303336 +30383233323531393035363632326231393930363237333835613533666337613034343938386666 +33633035323965643034376138353134623132303264323033623438643661396635323135646339 +65303334313465643138613163386434323331646465313532343264333434343162623136663738 +30626231616333323065646535636331663961363462306638363465643738336230353732303262 +66363133343839623039643931653831323439343839323632616438336530636262613032653562 +30313039393130393766656265663331373930353865623237313032376334616232313038616137 +63623538363366386335313566353338323563623338633162323536616436616431363739643966 +37333533306538643066383064643161633761363531643563656439643265333361313365656635 +33393539323333653339333339323639376337393235663438313438353338636462373935313037 +34613832623161333262333561326235626362336266343863623864653064366331653737646336 +34613432306362613032313736646134313630346438393431313135313831373438623761633534 +63323737623532303230623363653564346337366563353933653037373937306166643131643531 +33333832366362316161306136646236653339653931653436316364353631366131396563313138 +62633731343335316265356164383966396533373666363730356431383931393065306565306631 +36376539333162626634333936323362313134336335363561383064663765663062393530373466 +36626431353834393931356363313132376364373066343861646234366533336464353534333363 +62356232333931313939633139306633376130393933356137333866383539616536366166643430 +61626166383732356333383031663133363238323934636534346633303334303361653936656566 +63396235313037663730653833356465623766343232636462623266353466383235656530333538 +39373539363863643735303637363333623133353766303431613664613861643036656535353133 +35343734633934313035663233353331373664303365336536323832323037643566383363623163 +31313534373261363030386666396433316262326466363539383034626136663864343339656233 +66653762646534633762336662346337313061316331613937336534373639306331613965656231 +38393133366161366662336635613534336236613364623938323761343462363163373436356330 +61636233623935346565353961663738306565383062363838336563623063356231653766616563 +64323439353430643566323431623538623531623239656666386237393637306638623066346537 +66313366316239346334376635313033626661653362363263626261353937616162363939316135 +61353432303864383635333664656134643936656137366563663365353131623532666262643531 +39353434376434383032366330623165313138346334623835383864376361386265356665393933 +33303236393034623661373334353037373531636337333931313534373163323363346235663834 +61326437653836613264643236366234643534383330336366323735393665376463366436306266 +34383331356130613264623631333132653365626166383762393335613165626465313063333934 +35323337353131306438333333643033393164353733326364616237613465663535326563323437 +31623662343762323533653363626362383866323333303363616139316630613338336537393037 +61616537643138346430376563366666626333636237653836346237313636323830613165376334 +32656338353430366231626366386263383631383931663339363038643036353966353739653832 +38376432643866356161636361343836646463306533303131333330626661303266363132303735 +37336263323063636433386536626437666431346461616436353239353836373835623963393836 +62656637663465333232386563623733303063363765393537653063313163343136313366376135 +30623134396132316433336364393163313432353433363166383635353130616333303339653234 +38666339316534333933316335383362626138363935663135346636663839633139353962376536 +31353633343738663331346165363866343033313565306530623337343434343365643261643061 +64306238363835636163363037346639363931323338636436376132316235323430643134646136 +39323030623536633230346331376136646539653330336335656264646439653736323332363233 +64643731613662623265616535633462353136383664356164323463666437626633306136643765 +66323430386330373938396566393831383631326161336235393539373030643838306264666663 +64393363373830353433386137653765333633336231336366636136373365386431613533333532 +37376533303730323738373265303930663961346236613832333961316336646364313637356136 +64623231653536326138386232373765363131303334626138373761343536383064323936303631 +38386432396139326464323032333261623365376136643665393864393831383939663933343137 +37343237326539303063643539666538643933363032613130303535383265663064333338653632 +37333038373933393762613462373462633637323437323034656164313433383333393064666664 +64333938363164653431613932613036613338333637366633643364643331663037356664303732 +30303061643337336530383430653565386133613137303937613036323037323262663439383839 +66393863646263653639613039386231343263636632343435666333303339663230306162613935 +35656530623761356563353166653635396432613835353834333332333763326465646132666662 +38663434636538623037376632313164633534396437646430343630343166336237613063386562 +31643439306539623131376564383936333239646537633961333566396533623934316639333132 +32356463336535623135316131663735343638353764653235393237623931636234333637333834 +30613662316437656366373833613231356435633131386332306637623732623332353930636636 +30313535623631616234623961336165316638303133376466333865306331333335643761313133 +65343564326438653338323234633665386661303833393137393137373765393630656337343665 +65306431316461313030653036623366316438346333633661313632316432623263346666623638 +61303534353161366261623263346336666361336331656234646263616139663835303136653531 +30643931336239626235323333643437623935643564326533393338363134346562393736613839 +64306536336433613634373633623031356335633030303434666230326434633162663130653131 +36653237366339326634313333393833336436393964343165653536653139373563623266323932 +64393164626334366231646635316363636432663838313565366430666362313031643132303830 +38653137633730303832356565373731656439333536633931373533376563313633333866333839 +31383139643030633632636236376534376334393833363066666161386262643734356539623762 +32613737386438633862343631653062663434656637373534613061623938373266373932336638 +37643938346331303035363232383032383838663962626331663437356434386663616463646664 +63376364666332333937323636663332383132386365306435333130303265613066363033313132 +36313637643966613331343033613036306339336365343737366638613638396430363734376463 +63623035346262373236366131393337626231373766313666303133666439656165653830656239 +30386362653834663431393163356266643830323065326330323561623939323131653263383463 +39383561393532393335356538633731653634613738303961613238366637623634343032623437 +34333738336139646338326361633663336139393566353732646632626162363735653031393364 +38343365346333356462636239613534316661383436353535313531396665336265623539613539 +30306638353133393632343535653030326364616562383136373331313033316438376133626462 +34396333356661643865636666666233643435363038376133383537623662663735373534623830 +66303037613130353236653633353836303333363134323966343537363965316333643165336164 +37393138653162323362636638386565366161316364653935393561323566376161393130633437 +39633166636666383866623039663530373766333362353263623537356265343432643666356439 +37633332313361656637646139353234386166646263663732383736316562396537396263646237 +39616266363037656534636433383838666331646163313539313833316239653532653566653861 +30643038633863393933646237323634626263616438656532616332393037306438333037646133 +62383164326461626163646238323734373364343263376362303135386538323161666663333861 +34616131383165663439303736346238353834303939303933623334326634663364343232613230 +35643464303838656531663737353462653233633064363464656537363064313365616536366531 +61353633363530373466313662666432636261626663303635353434366663303764373533396531 +66336136316162386333646539363630333864396339353164373962343036666563343338393161 +32303730326531643361376663353034396665646639313861323033303163626131333366333266 +38666565313965646538653338643133666232396261356264376636326139306631383034613232 +36646265326238333636633233366366303638356336353933623761643866313764376132373137 +64613931393566613335313730336630333236626564383836636130666164623934393866653266 +65616533373561616165623066633464343731666231343533653165336361373464373564346266 +36333566346433343335643030323338303635346365306166643866616238626237373932373639 +63316633383131323235663639333432376137653662373635373434373833383637356330383133 +34653333323366363466316362383034376561643635373538326530333736613439616233393232 +36356536313536306432633734323431393462356336323766373665306331306237343063616433 +34336631646133336139353930376333643762643833386232306466303131343834356361353337 +63613466633030343538303865393263346362303761623365633166623939333131333462316466 +63396537333163316264626663353737656364393136356663656538333963656536393136313364 +66383730386630346432386230666239313966373430643231613435336534303564663331363365 +39393737633539663834336336626664323363613431393936313333306164386439353565333366 +61333034646362326633303936333163383066643862643332363830383235373733656361346265 +30623237376461636136616132323334666362643832356132306631363235633333316563636363 +64316462656638396639623264343037383032316565306164383763373632383134363637656636 +66633964306132363266353533616338356339666662323765376239613063333665326561643237 +61653537346533333265393632656364353335316631356466633839666162326630626134376438 +62653632343734326236663362386131396530346536306633333665383364656531356438663131 +39336263363263366164336233333238613232323337626134663635306434336163663831343662 +66313631376461386566333966373136323138383534366131646662386362383336316163343166 +66373464313661383138366162656531366163643238323037383133393261326234316664323736 +35626139386361383533666531303965616237343666643730383564336335333661326565393139 +63653234376236663764656363653362346335383933313330633865346364356233646330306135 +62303633646231636634633661616562656464326435323736303037663864353331323364663935 +64373762383735653433393361376163313431366336313264643931636631363661633663353166 +64393663363532653834396262363636343162346532643538613235313662376135386332346265 +33356139343762626435373032326462396366393563376461386662326532326364336533363636 +33376462633030356633663365313261313636663936333831643966346363626630376338623530 +31346362316634616462643662356336316535623832636536383166616538306236666239636139 +62383065633934393937333966306662666238653434633437616533663964386234356533656264 +64633930316162643965313561613936366630333634336565383966386363333539636364343135 +39396333653337313933666664613839306238616263303761333864623832326334343931623234 +36313332306330396632333035643739343535633539633231636535653733306239666631343531 +33646563353766316330346531666539336530353739373930643662626436663835333261363739 +35303262393632643232636337353637653533333664353432396131623764373337393139646134 +33333362323435666334373738333734343837383237313735323837383933346566653836313536 +62376562396365653065373365643637326566326632663833396531623963313739393037613462 +36323433363264313436663232653338316364373333643330363562363332623739326235636161 +63333036653834346631303835383031623562316631316330366530393634313130343664656539 +66353965303433333966366561336137633463373432343864373237663230663031383964336630 +34643764323162313233393562616432646631393930333738343733613532303239623766626334 +33653062326535393531363830356363633537633838366137343731316262316330323762333766 +66316331306339666661363261643732616633323937666164303730383039356430373333313062 +64363866376266313737643763386165313931666335633932326136336437393234333932623062 +30666230653939313936646334633064336131623531316632333262623365313336363762356565 +35343533656561623134373034393365363833353138613737316136643464666564646263393133 +64623232313537323032616138653939623964376236616531353963653138393463633464613138 +39643461323331623537373830323865316538393535326232643736303931383035333535356632 +61306437663466313834383561653534363235353433643434323738346664346161643437343235 +62623666613863313963626165343831393636633364623137343634633530366264373431323265 +38356233353436356336646331343238306334313133623134346130336462636239626363363338 +66333863323937626537323539373161373837346262333761646133646637323538346661366532 +37653935663363373630303566366263353665633930323432393737646264616237366539613537 +61333931633464313134306163333661613765383037386161306538353364323837343933646337 +34663066646535396139316138653430613334303461343961616533623866633166316238653637 +30663430353433366136646635636637653737663332306130663031333363353930386464663264 +33363030656231356232373234333662613735353831353863613137643432333332656638386434 +62363634663264356431646662636330323234613634653733316362366165366262656237336538 +65666661396435616331616535623639313330366133633539313232396430653231313730346436 +66646230303339623936656139656162613433353239633539373963363132356139323862353735 +37326233383532623266356334333235336363353864336630616263373531613334353038326132 +36626136326238346538333136323433303632633436303166373734653532636531323732633763 +38626661393836653333653364633935343662653662393931313563323636643837383665343264 +31343339636465393461363936336333633335306531636363363431346138303431333661306338 +36646462333638353831376635633161613436613136366136613761343034653061383131633034 +39346462373661633338663039396663346338616136633965373265386132323230353333316539 +66633335366462373938653061393063353164343561343831376130666666626231643666643961 +63393162386434363733306461663230306138626537303430303033336663373965366437313230 +31333865663566393638373464383931343637626334656166313865313030646339323234316166 +62343735666665626234393931353536656661626636373436313236653636326161643339343466 +35363861663362653930356234353765666539316634366536386434393464323562383737303363 +64386339373961376437626235623933333263363031663139646163373636613530313538356363 +61303636396262633863373566666237313462363936323963366638636435313237386435333435 +39373538613337353161313266383663613938363435323934303838666365393464663162633935 +64373239393532623736623763353038333666316436393638326263313138353835333766373536 +34626130663766333830346439326232343437633765646239373039373061383961333733343533 +31643436393263383063343932626263653031633439633932666434333861386636633434633130 +62313130333565613063613138396465653430636131393839353364346362303563643031333964 +39326430653534356364333738646638393039626363636138343833666565376530666530373461 +65346439333830376664383636633061313538326335396331633139616635653733356136306135 +36366330373662346230633961306135326363353962326263643063343930626133386637626230 +62303061616538356162663133336365393263653133336661643666656336616463643962356338 +30393130626233326664653361303138353632323436613363363661636463346162346534366563 +32343139356136616537306466653966373165396664323838376537633136626535313536343064 +34343138626237646238353030653766633566306238656431616565373639356461373437356461 +33643435363366633263626330616136643265396539353432393166643436626361633837653364 +61663136316363333363626131373636656462356366376533653539653065343331343839326262 +35303234636335363637346131656364356234366463383666336530323362626333346232376331 +37363037616261663738323436333163333265633333323331643939663566366161633037323839 +30383530613531613439613337303238363339663765366430396538313066313663633739326161 +36376636303965623265656561333762666230643735316135626264616533346530653230663430 +32363538303238373139373439633233386262303336663863343539363965616331346635313463 +64653836313063383232323537383838316538343861613063316561353934633732646562613131 +37666237393732343032383532623432393536336338356464383863663439323362326262323461 +35616531633831366563623463626266656235623932336164346264666463393661333537613566 +36393064646132363536656165623031306239393539323566313735663032376132303837633238 +62333934356337613862396630356431353337393338373363323034363766643236623139643436 +61306163643761366430336639623865626230393165616134663862336439636630656638656431 +64313263366365613565643261396664366635303264356330643836653566636532306663393566 +30656130303665623630323536396333306563663435636332653364356663383362633063656338 +65656265383633303531386435396265323334616261633665373837613233383138373837383633 +64343836666162623162636365393561396638646631393534313533323437666432323932306130 +63643061613434616332343633636230653163626631333530633566636530326239376362383961 +63326335616430633635356534353731653832393730643161623534363862376433373164323461 +66383133633136626162646666363036633263396632303639326566376133343163393263323133 +66636264623466363066663637666262633839333765636538383330656539343637306134363135 +63626235383461623963663561336530626234366166383335303966333265363333383165363536 +61633733343966356265343264346432653565393165333538303562653962653366363132613034 +38633466333761343865333037383831363566663862666537656331643930343535623537663463 +64663936313533666630383566306234373938303534633234646462666432373961343032306366 +3262 From 405fed1fcf4202e66aea3fbc84a66c1ca659da39 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 15 Dec 2025 12:30:16 +0100 Subject: [PATCH 59/73] No longer logout when /lmn/media directory not present (not present on localhome devices anymore) --- roles/lmn_localhome/tasks/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/lmn_localhome/tasks/main.yml b/roles/lmn_localhome/tasks/main.yml index f7c54df..a06998b 100644 --- a/roles/lmn_localhome/tasks/main.yml +++ b/roles/lmn_localhome/tasks/main.yml @@ -33,7 +33,6 @@ dest: /etc/profile.d/lmn-logout.sh mode: '0755' content: | - [[ "${UID}" -gt 10000 ]] && ! findmnt "/lmn/media/${USER}/home" > /dev/null && exit 0 {% if localhome_logout_missing_serverhome %} [[ "${UID}" -gt 10000 ]] && ! findmnt /srv/samba/schools/default-school > /dev/null && exit 0 {% endif %} From 93a0f07846709812bb2f8ed655ecf24112a3e030 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 17 Dec 2025 13:19:43 +0100 Subject: [PATCH 60/73] Apply libvirt firewall policy only on devices with vm_support --- roles/lmn_exam/tasks/main.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/roles/lmn_exam/tasks/main.yml b/roles/lmn_exam/tasks/main.yml index aba8b29..4670933 100644 --- a/roles/lmn_exam/tasks/main.yml +++ b/roles/lmn_exam/tasks/main.yml @@ -62,9 +62,11 @@ src: no-way-out.xml.j2 dest: "/etc/firewalld/policies/no-way-out-{{ item }}.xml" mode: '0644' - loop: - - HOST - - libvirt + vars: + zones: + - HOST + - "{{ 'libvirt' if vm_support | default(false) else '' }}" + loop: "{{ zones | reject('match','^$') }}" when: - exam_destination_allowed_ipv4 is defined - exam_destination_allowed_ipv4 | length > 0 From 9ee19d145924e5cd7acd21ea010bde4dc2a93ab0 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 17 Dec 2025 13:24:24 +0100 Subject: [PATCH 61/73] Apply outbound restriction in exam_mode on macvtap interfaces too --- roles/lmn_exam/files/pam-exec.sh | 6 +++ roles/lmn_exam/tasks/main.yml | 10 +++++ .../lmn_exam/templates/no-way-out-nftable.j2 | 41 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 roles/lmn_exam/templates/no-way-out-nftable.j2 diff --git a/roles/lmn_exam/files/pam-exec.sh b/roles/lmn_exam/files/pam-exec.sh index 4f54861..f905cfc 100644 --- a/roles/lmn_exam/files/pam-exec.sh +++ b/roles/lmn_exam/files/pam-exec.sh @@ -5,10 +5,16 @@ if [[ "${PAM_USER}" =~ -exam$ ]]; then systemctl start firewalld.service + if [[ -f /usr/local/sbin/no-way-out-nftable ]]; then + /usr/local/sbin/no-way-out-nftable || true + fi if systemctl is-enabled --quiet libvirtd.service; then systemctl restart libvirtd.service fi elif ! (users | grep -q -- "-exam"); then + if /usr/sbin/nft list tables | /usr/bin/grep -q filtermacvtap; then + /usr/sbin/nft delete table netdev filtermacvtap || true + fi systemctl stop firewalld.service if systemctl is-enabled --quiet libvirtd.service; then systemctl restart libvirtd.service diff --git a/roles/lmn_exam/tasks/main.yml b/roles/lmn_exam/tasks/main.yml index 4670933..838fd68 100644 --- a/roles/lmn_exam/tasks/main.yml +++ b/roles/lmn_exam/tasks/main.yml @@ -71,6 +71,16 @@ - exam_destination_allowed_ipv4 is defined - exam_destination_allowed_ipv4 | length > 0 +- name: Install no-way-out nf-table for macvtap device + ansible.builtin.template: + src: no-way-out-nftable.j2 + dest: "/usr/local/sbin/no-way-out-nftable" + mode: '0755' + when: + - exam_destination_allowed_ipv4 is defined + - exam_destination_allowed_ipv4 | length > 0 + - vm_support is defined and vm_support + - name: Enable login script via pam_exec.so ansible.builtin.lineinfile: dest: /etc/pam.d/common-session diff --git a/roles/lmn_exam/templates/no-way-out-nftable.j2 b/roles/lmn_exam/templates/no-way-out-nftable.j2 new file mode 100644 index 0000000..2c6efb8 --- /dev/null +++ b/roles/lmn_exam/templates/no-way-out-nftable.j2 @@ -0,0 +1,41 @@ +#!/usr/bin/bash + +set -eu + +interfaces=$(/usr/bin/ip link | /usr/bin/sed -En 's/.*(macvtap-.*)@.*/\1/p') +gateway=$(/usr/bin/ip route list default | /usr/bin/head -1 | /usr/bin/cut -f 3 -d " ") + +filterchain="" +for interface in ${interfaces}; do + filterchain=$(cat <<- EOF +${filterchain} + + chain filterin_${interface} { + type filter hook ingress device ${interface} priority filter; policy drop; + ip saddr \$allowed_ipv4 accept + ip saddr ${gateway} accept; + ip saddr 255.255.255.255 accept; + } + + chain filterout_${interface} { + type filter hook egress device ${interface} priority filter; policy drop; + ip daddr \$allowed_ipv4 accept + ip daddr ${gateway} accept; + ip daddr 255.255.255.255 accept; + } +EOF +) +done + + + +nft_table=$(cat <<- EOF +define allowed_ipv4 = { {{ exam_destination_allowed_ipv4 | join(",") }} } + +table netdev filtermacvtap { +${filterchain} +} +EOF +) + +echo "$nft_table" | /usr/sbin/nft -f - From 2b45174f0f83306ed11fc52ea7ad131f84b862a3 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 17 Dec 2025 18:23:10 +0100 Subject: [PATCH 62/73] Prevent luks-detection task from aborting on unencrypted devices --- roles/lmn_encrypt/tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/lmn_encrypt/tasks/main.yml b/roles/lmn_encrypt/tasks/main.yml index 83196c8..6c81e7b 100644 --- a/roles/lmn_encrypt/tasks/main.yml +++ b/roles/lmn_encrypt/tasks/main.yml @@ -7,6 +7,7 @@ when: - item.value.partitions is defined - item.value.partitions | dict2items | length > 0 + - item.value.partitions | dict2items | selectattr('value.holders', 'search', 'luks|crypt') | length > 0 loop: "{{ ansible_devices | dict2items }}" - name: Get luks slots From 194fbbc735659b29e73610e5e4eb83475db380b8 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 17 Dec 2025 18:28:09 +0100 Subject: [PATCH 63/73] Fix a syntax error in the `var` section of a task --- roles/lmn_sssd/tasks/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/lmn_sssd/tasks/main.yml b/roles/lmn_sssd/tasks/main.yml index 0ff5b60..6dcd0a0 100644 --- a/roles/lmn_sssd/tasks/main.yml +++ b/roles/lmn_sssd/tasks/main.yml @@ -27,8 +27,8 @@ echo "{{ ad_passwd }}" | adcli join --stdin-password -U {{ ad_user }} {{ domain | upper }} no_log: true vars: - - ad_user: "{{ 'global-admin' if (adpw.user_input | default(ansible_cmdline.adpw) | default('') | length > 0) else sssd_domjoin_user }}" - - ad_passwd: "{{ adpw.user_input | default('') if adpw.user_input | length > 0 else ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') }}" + ad_user: "{{ 'global-admin' if (adpw.user_input | default(ansible_cmdline.adpw) | default('') | length > 0) else sssd_domjoin_user }}" + ad_passwd: "{{ adpw.user_input | default('') if adpw.user_input | length > 0 else ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') }}" when: - adpw.user_input | length > 0 or ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') | length > 0 From f89b113049deb36cbc755398adc275ad76b6cc4b Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 17 Dec 2025 18:50:16 +0100 Subject: [PATCH 64/73] Enable ARP support in nftable for outbound restriction in exam_mode --- roles/lmn_exam/templates/no-way-out-nftable.j2 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/roles/lmn_exam/templates/no-way-out-nftable.j2 b/roles/lmn_exam/templates/no-way-out-nftable.j2 index 2c6efb8..93305a9 100644 --- a/roles/lmn_exam/templates/no-way-out-nftable.j2 +++ b/roles/lmn_exam/templates/no-way-out-nftable.j2 @@ -13,15 +13,17 @@ ${filterchain} chain filterin_${interface} { type filter hook ingress device ${interface} priority filter; policy drop; ip saddr \$allowed_ipv4 accept - ip saddr ${gateway} accept; - ip saddr 255.255.255.255 accept; + ip saddr ${gateway} accept + ip saddr 255.255.255.255 accept + ether type arp accept } chain filterout_${interface} { type filter hook egress device ${interface} priority filter; policy drop; ip daddr \$allowed_ipv4 accept - ip daddr ${gateway} accept; - ip daddr 255.255.255.255 accept; + ip daddr ${gateway} accept + ip daddr 255.255.255.255 accept + ether type arp accept } EOF ) From e02add04aea46ed2c51e8ac3f5d8799b2399dab7 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Wed, 17 Dec 2025 19:41:38 +0100 Subject: [PATCH 65/73] Set the environment variable for the path to KiCad's 3D models (NFS) --- roles/custom/fvs/tasks/main.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index d374870..b5e1094 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -260,5 +260,12 @@ KERNEL=="mmcblk[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", GROUP="domain users" KERNEL=="mmcblk[0-9]p[0-9]*", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", GROUP="domain users" +- name: Set KiCad 3Dmodel path + ansible.builtin.lineinfile: + path: /etc/environment.d/90lmn-kicad.conf + create: true + mode: '0644' + line: KICAD9_3DMODEL_DIR=/lmn/tools/KiCad/kicad-packages3D + - name: Include sync ansible.builtin.include_tasks: sync.yml From a72f16fd208e0d21084e18b2d032a8fc634fe449 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 18 Dec 2025 07:40:30 +0100 Subject: [PATCH 66/73] Fix condition, when ad.user_input is not defined --- roles/lmn_sssd/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/lmn_sssd/tasks/main.yml b/roles/lmn_sssd/tasks/main.yml index 6dcd0a0..1cfebe7 100644 --- a/roles/lmn_sssd/tasks/main.yml +++ b/roles/lmn_sssd/tasks/main.yml @@ -30,6 +30,6 @@ ad_user: "{{ 'global-admin' if (adpw.user_input | default(ansible_cmdline.adpw) | default('') | length > 0) else sssd_domjoin_user }}" ad_passwd: "{{ adpw.user_input | default('') if adpw.user_input | length > 0 else ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') }}" when: - - adpw.user_input | length > 0 or + - adpw.user_input | default('') | length > 0 or ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') | length > 0 - adcli_test_result.rc != 0 From 60b585f306c19e7efba346d3cf20c4304b04aa2d Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 18 Dec 2025 08:02:00 +0100 Subject: [PATCH 67/73] Fix condition, when ad.user_input is not defined (Part II) --- roles/lmn_sssd/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/lmn_sssd/tasks/main.yml b/roles/lmn_sssd/tasks/main.yml index 1cfebe7..61e6441 100644 --- a/roles/lmn_sssd/tasks/main.yml +++ b/roles/lmn_sssd/tasks/main.yml @@ -28,7 +28,7 @@ no_log: true vars: ad_user: "{{ 'global-admin' if (adpw.user_input | default(ansible_cmdline.adpw) | default('') | length > 0) else sssd_domjoin_user }}" - ad_passwd: "{{ adpw.user_input | default('') if adpw.user_input | length > 0 else ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') }}" + ad_passwd: "{{ adpw.user_input | default('') if adpw.user_input | default ('') | length > 0 else ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') }}" when: - adpw.user_input | default('') | length > 0 or ansible_cmdline.adpw | default(sssd_domjoin_passwd) | default('') | length > 0 From a008ef0506750d5221e29d89b0ecad510e99dce2 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Thu, 11 Dec 2025 17:27:50 +0100 Subject: [PATCH 68/73] Correct the determination of the teacher's PC's IP address (a75934c) --- roles/lmn_exam/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/lmn_exam/tasks/main.yml b/roles/lmn_exam/tasks/main.yml index 838fd68..d5610c2 100644 --- a/roles/lmn_exam/tasks/main.yml +++ b/roles/lmn_exam/tasks/main.yml @@ -52,7 +52,7 @@ - name: Append teacherPC to exam_destination_allowed_ipv4 addresses ansible.builtin.set_fact: - exam_destination_allowed_ipv4: "{{ exam_destination_allowed_ipv4 + [ ansible_default_ipv4.address[:-1] ~ exam_teacherpc_last_digit ] }}" + exam_destination_allowed_ipv4: "{{ exam_destination_allowed_ipv4 + [ ansible_default_ipv4.address.rsplit('.', 1)[0] ~ '.' ~ exam_teacherpc_last_digit ] }}" when: - exam_destination_allowed_ipv4 is defined - exam_destination_allowed_ipv4 | length > 0 From cf7bf30e05c714a1b2f64fdefa46e49f9ba3bae6 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 15 Dec 2025 08:17:39 +0100 Subject: [PATCH 69/73] Make IP addresses of teacherpc configurable (for the firewall in exam mode) --- roles/lmn_exam/tasks/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/lmn_exam/tasks/main.yml b/roles/lmn_exam/tasks/main.yml index d5610c2..1d0893e 100644 --- a/roles/lmn_exam/tasks/main.yml +++ b/roles/lmn_exam/tasks/main.yml @@ -52,10 +52,11 @@ - name: Append teacherPC to exam_destination_allowed_ipv4 addresses ansible.builtin.set_fact: - exam_destination_allowed_ipv4: "{{ exam_destination_allowed_ipv4 + [ ansible_default_ipv4.address.rsplit('.', 1)[0] ~ '.' ~ exam_teacherpc_last_digit ] }}" + exam_destination_allowed_ipv4: "{{ exam_destination_allowed_ipv4 + (exam_teacherpc_ips | default([ ansible_default_ipv4.address.rsplit('.', 1)[0] ~ '.' ~ exam_teacherpc_last_digit ])) }}" when: - exam_destination_allowed_ipv4 is defined - exam_destination_allowed_ipv4 | length > 0 + - exam_teacherpc_ips is defined or exam_teacherpc_last_digit | default('') | string | length > 0 - name: Install no-way-out-policy ansible.builtin.template: From 37eb2b8232f891202652cbfea7b4bd23025f7856 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 17 Nov 2025 12:20:55 +0100 Subject: [PATCH 70/73] Prevent login without krb5-ticket on non localhome machines --- roles/lmn_sssd/templates/sssd.conf.j2 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/lmn_sssd/templates/sssd.conf.j2 b/roles/lmn_sssd/templates/sssd.conf.j2 index fef5d02..1591f1d 100644 --- a/roles/lmn_sssd/templates/sssd.conf.j2 +++ b/roles/lmn_sssd/templates/sssd.conf.j2 @@ -9,7 +9,9 @@ ad_domain = {{ domain }} id_provider = ad access_provider = ad use_fully_qualified_names = False +{% if localhome is defined and localhome %} cache_credentials = True +{% endif %} krb5_store_password_if_offline = True default_shell = /usr/bin/bash # default: # ldap_id_mapping = True From 787a8c843fcb06c3fd9e985a9d99df29f3d847fc Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 22 Dec 2025 10:15:17 +0100 Subject: [PATCH 71/73] Set default NumLock state to ON for KDE --- roles/custom/fvs/tasks/main.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index b5e1094..f0fdd02 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -188,6 +188,15 @@ action/switch_user=false #action/lock_screen=false +- name: Configure NumLock ON + ansible.builtin.blockinfile: + path: /etc/xdg/kcminputrc + create: true + mode: '0644' + block: | + [Keyboard] + NumLock=0 + - name: Start with empty session by default ansible.builtin.copy: dest: /etc/xdg/ksmserverrc From 879850373ecfc947e292ce28e43d5a57350a5f87 Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 22 Dec 2025 10:31:14 +0100 Subject: [PATCH 72/73] Increase default font size for codeblocks --- roles/custom/fvs/files/lmn-codeblocks.sh | 15 +++++++++++++++ roles/custom/fvs/tasks/main.yml | 5 +++++ 2 files changed, 20 insertions(+) create mode 100644 roles/custom/fvs/files/lmn-codeblocks.sh diff --git a/roles/custom/fvs/files/lmn-codeblocks.sh b/roles/custom/fvs/files/lmn-codeblocks.sh new file mode 100644 index 0000000..27f24b3 --- /dev/null +++ b/roles/custom/fvs/files/lmn-codeblocks.sh @@ -0,0 +1,15 @@ +if [[ "$UID" -gt 10000 ]] && [[ ! -f ~/.config/codeblocks/default.conf ]] ; then + mkdir -p ~/.config/codeblocks + cat < ~/.config/codeblocks/default.conf + + + + + + + + + + +EOF +fi diff --git a/roles/custom/fvs/tasks/main.yml b/roles/custom/fvs/tasks/main.yml index f0fdd02..3e1e756 100644 --- a/roles/custom/fvs/tasks/main.yml +++ b/roles/custom/fvs/tasks/main.yml @@ -156,6 +156,11 @@ dest: /etc/profile.d/ mode: '0644' +- name: Copy codeblocks config scripts + ansible.builtin.copy: + src: lmn-codeblocks.sh + dest: /etc/profile.d/ + mode: '0644' - name: Copy fvs-config.js to configure plasma ansible.builtin.copy: From 72c3847108fcd7912270788a8c542124b590d46b Mon Sep 17 00:00:00 2001 From: Raphael Dannecker Date: Mon, 22 Dec 2025 13:43:59 +0100 Subject: [PATCH 73/73] Fix graphics card compatibility on Lenovo 32CB boards --- roles/lmn_tmpfixes/tasks/main.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/roles/lmn_tmpfixes/tasks/main.yml b/roles/lmn_tmpfixes/tasks/main.yml index 69cb6f7..3d8b79a 100644 --- a/roles/lmn_tmpfixes/tasks/main.yml +++ b/roles/lmn_tmpfixes/tasks/main.yml @@ -16,3 +16,11 @@ export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --use-gl=desktop" when: ansible_board_vendor == "LENOVO" and (ansible_board_name == "312D" or ansible_board_name == "312A") + +- name: Fix 8086:4909 external graphics card + ansible.builtin.replace: + dest: "/etc/default/grub" + regexp: 'GRUB_CMDLINE_LINUX=""$' + replace: 'GRUB_CMDLINE_LINUX="i915.force_probe=4909"' + notify: Run update-grub + when: ansible_board_vendor == "LENOVO" and ansible_board_name == "32CB"